From f34b03a8c6169368d2678e383214c1fd9f7531ba Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Sat, 14 Oct 2017 12:44:11 +0200 Subject: [PATCH 01/47] Temporary Reversion of contributions by @alexbt This commit temporarily reverts the contributions made by @alexbt between Oct 9, 2017 and Oct 11, 2017. Reason: to merge the significant refactoring of the codebase made in: https://github.com/benbernard/CommentTracker/pull/9 The contributions made by @alexbt will be restored on top of the refactoring commits. The following is a list of the commits that have been reverted: df04f70 Bump version 11677eb Merge pull request #8 from alexbt/fix-empty-unresolved 45a7834 Track unresolved comments with Map 999adab Merge pull request #7 from alexbt/unresolved-files-bottom 30068dd Add unresolved comments at bottom of files tab f822008 Update version number 5af02ab Merge pull request #6 from alexbt/options-style ee5528a Merge pull request #5 from alexbt/files-tab 82a1975 Merge pull request #4 from alexbt/unresolved-bottom 64bcd6a Use chrome style options page 519c5e2 Display unresolved comments at the bottom 42fe47c Load thread comments from the 'files' tab It brings us back to the following commit: aabd942 Changes for parse deprecation --- manifest.json | 8 ++------ tracker.js | 36 +++--------------------------------- 2 files changed, 5 insertions(+), 39 deletions(-) diff --git a/manifest.json b/manifest.json index 6a3aa89..d264125 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "name": "Github Comment Tracker", "description": "Tracks resolved / unresolved state of comments on github pull requests", - "version": "1.1.8", + "version": "1.1.6", "permissions": [ "https://github.com/", @@ -16,9 +16,5 @@ "css": ["main.css"] }], - "options_page": "options.html", - "options_ui": { - "chrome_style": true, - "page": "options.html" - } + "options_page": "options.html" } diff --git a/tracker.js b/tracker.js index 82cd426..277e0d7 100644 --- a/tracker.js +++ b/tracker.js @@ -6,7 +6,6 @@ // Other file forwarders var Parse; var waitForKeyElements; -var unresolvedCommentsMap = {}; var findAllThreads = function () { var threads = []; @@ -33,14 +32,6 @@ var findAllThreads = function () { } }); - $('#files .review-comment').each(function () { - threads.push({ - id: this.id, - comments: $(this), - lastCommentId: this.id, - }); - }); - return threads; }; @@ -143,16 +134,7 @@ var updateMergeButton = function () { } } else { if (!allThreadsResolved()) { - - //map to array of values - var unresolvedCommentsArray = [] - for (var key in unresolvedCommentsMap) { - if (unresolvedCommentsMap.hasOwnProperty(key)) { - unresolvedCommentsArray.push(unresolvedCommentsMap[key]) - } - } - - var commentStatus = + $('.merge-message').before( '
' + '
' + ' ' + @@ -161,14 +143,8 @@ var updateMergeButton = function () { ' ' + ' See above for red unresolved comments' + ' ' + - '
  • ' + unresolvedCommentsArray.join('
  • ') + "
  • " + - '
    '; - - //discussions tab - $('.merge-message').before(commentStatus); - - //files tab - $('#files').after(commentStatus); + '
    ' + ); } } }; @@ -199,7 +175,6 @@ var makeButton = function (elem, threadInfo) { if ($elem.find(actionSelector).length === 0) { actionSelector = '.timeline-comment-actions'; } - delete unresolvedCommentsMap[threadInfo.id]; var string; if (threadInfo.resolved) { @@ -221,11 +196,6 @@ var makeButton = function (elem, threadInfo) { string = ''; $elem.find(actionSelector).prepend(string); - var content = $elem.find(actionSelector)[0].innerText.trim(); - if (content != "") { - unresolvedCommentsMap[threadInfo.id] = content; - } - $elem.find('.comment-track-resolve').on('click', function (event) { event.preventDefault(); var tracker = threadInfo.tracker || new CommentTracker(); From f87bda3217c5873e05626df15ad5b238a5afbcb7 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 00:28:00 -0400 Subject: [PATCH 02/47] Refactor tracker.js slightly for improved code quality --- tracker.js | 97 +++++++++++++++++++++++++----------------------------- 1 file changed, 44 insertions(+), 53 deletions(-) diff --git a/tracker.js b/tracker.js index 277e0d7..fdcde64 100644 --- a/tracker.js +++ b/tracker.js @@ -1,19 +1,16 @@ // ==UserScript== -// This script works on the PR page. Uses Parse to store data. +// This script works on the PR page. // @match https://github.com/* // ==/UserScript== -// Other file forwarders -var Parse; -var waitForKeyElements; +const findAllThreads = function () { + const threads = []; + const d = $('#discussion_bucket'); -var findAllThreads = function () { - var threads = []; - - $('#discussion_bucket .js-line-comments .js-comments-holder').each(function () { - var childComments = $(this).children('.js-comment'); + d.find('.js-line-comments .js-comments-holder').each(function () { + const childComments = $(this).children('.js-comment'); if (childComments.length > 0) { - var firstCommentChild = childComments.first()[0]; + const firstCommentChild = childComments.first()[0]; threads.push({ id: firstCommentChild.id, comments: childComments, @@ -22,7 +19,7 @@ var findAllThreads = function () { } }); - $('#discussion_bucket .timeline-comment-wrapper .timeline-comment.js-comment').each(function () { + d.find('.timeline-comment-wrapper .timeline-comment.js-comment').each(function () { if (this.id && this.id.match(/^issuecomment/)) { threads.push({ id: this.id, @@ -35,8 +32,8 @@ var findAllThreads = function () { return threads; }; -var checkThreads = function () { - var newThreads = findAllThreads(); +const checkThreads = function () { + const newThreads = findAllThreads(); if (_.isEqual(_.pluck(newThreads, 'id'), _.pluck(allThreads, 'id'))) { if (_.isEqual(_.pluck(newThreads, 'lastCommentId'), _.pluck(allThreads, 'lastCommentId'))) { return; @@ -45,7 +42,7 @@ var checkThreads = function () { resetManipulations(); }; -var resetManipulations = function () { +const resetManipulations = function () { allThreads = findAllThreads(); annotateWithParseInfo(allThreads).then(function () { @@ -56,11 +53,9 @@ var resetManipulations = function () { }); }; -var CommentTracker; -var Settings; -var appSettings; +let CommentTracker; -var main = function () { +const main = function () { /* global chrome */ chrome.storage.sync.get({ polling: true @@ -68,7 +63,7 @@ var main = function () { Parse.initialize("ghct"); Parse.serverURL = 'https://ghct.herokuapp.com/1'; CommentTracker = Parse.Object.extend('CommentTracker'); - Settings = Parse.Object.extend('Settings'); + const Settings = Parse.Object.extend('Settings'); resetManipulations(); @@ -76,24 +71,23 @@ var main = function () { // Debounce both to only call checkThreads once, and to call with a slight // delay for better compatiblity with the WideGithub extension: // https://chrome.google.com/webstore/detail/wide-github/kaalofacklcidaampbokdplbklpeldpj - var debouncedCheckThreads = _.debounce(checkThreads, 100); + const debouncedCheckThreads = _.debounce(checkThreads, 100); waitForKeyElements('.comment', debouncedCheckThreads); if (items.polling) { new Parse.Query(Settings).get("bdWmF0aC6c").then(function (settings) { - appSettings = settings; - setInterval(resetManipulations, appSettings.get('pollInterval')); + setInterval(resetManipulations, settings.get('pollInterval')); }); } }); }; -var expandUnresolvedThreads = function () { +const expandUnresolvedThreads = function () { _.each(allThreads, function (info) { if (!info.resolved) { - var id = info.id; - var elem = $('#' + id).first(); - var container = elem.parents('.outdated-comment'); + const id = info.id; + const elem = $('#' + id).first(); + const container = elem.parents('.outdated-comment'); if (container.length > 0) { container.removeClass('closed').addClass('open'); } @@ -101,16 +95,16 @@ var expandUnresolvedThreads = function () { }); }; -var allThreads; -var initalCanBeMerged = false; +let allThreads; +let initalCanBeMerged = false; -var allThreadsResolved = function () { +const allThreadsResolved = function () { return _.all(allThreads, function (info) { return info.resolved; }); }; -var updateMergeButton = function () { +const updateMergeButton = function () { if (!initalCanBeMerged) { initalCanBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); } @@ -149,15 +143,15 @@ var updateMergeButton = function () { } }; -var annotateWithParseInfo = function (allThreads) { - var ids = _.pluck(allThreads, 'id'); - var query = new Parse.Query(CommentTracker); +const annotateWithParseInfo = function (allThreads) { + const ids = _.pluck(allThreads, 'id'); + const query = new Parse.Query(CommentTracker); query.containedIn('commentId', ids); return query.find().then(function (results) { _.each(results, function (result) { - var id = result.get('commentId'); - var info = _.findWhere(allThreads, {id: id}); + const id = result.get('commentId'); + const info = _.findWhere(allThreads, {id: id}); if (info) { info.resolved = result.get('resolved') && result.get('lastCommentSeen') === info.lastCommentId; info.lastCommentSeen = result.get('lastCommentSeen'); @@ -167,23 +161,21 @@ var annotateWithParseInfo = function (allThreads) { }); }; -var makeButton = function (elem, threadInfo) { - var $elem = $(elem); - $elem.find('.comment-track-action').remove(); +const makeButton = function (elem, threadInfo) { + const e = $(elem); + e.find('.comment-track-action').remove(); - var actionSelector = '.review-comment-contents'; - if ($elem.find(actionSelector).length === 0) { + let actionSelector = '.review-comment-contents'; + if (e.find(actionSelector).length === 0) { actionSelector = '.timeline-comment-actions'; } - var string; if (threadInfo.resolved) { - string = ''; - $elem.find(actionSelector).prepend(string); + e.find(actionSelector).prepend(''); - $elem.find('.comment-track-unresolve').on('click', function (event) { + e.find('.comment-track-unresolve').on('click', function (event) { event.preventDefault(); - var tracker = threadInfo.tracker; + const tracker = threadInfo.tracker; tracker.set('resolved', false); tracker.set('lastCommentSeen', null); tracker.save(); @@ -193,12 +185,11 @@ var makeButton = function (elem, threadInfo) { updateThread(threadInfo); }); } else { - string = ''; - $elem.find(actionSelector).prepend(string); + e.find(actionSelector).prepend(''); - $elem.find('.comment-track-resolve').on('click', function (event) { + e.find('.comment-track-resolve').on('click', function (event) { event.preventDefault(); - var tracker = threadInfo.tracker || new CommentTracker(); + const tracker = threadInfo.tracker || new CommentTracker(); tracker.set('commentId', threadInfo.id); tracker.set('resolved', true); @@ -214,13 +205,13 @@ var makeButton = function (elem, threadInfo) { } }; -var updateThread = function (info, options) { +const updateThread = function (info, options) { options = options || {}; - var id = info.id; - var elem = $('#' + id).first(); + const id = info.id; + const elem = $('#' + id).first(); if (!id.match(/^issuecomment/)) { - var threadComments = $(elem).parents('.js-comments-holder').children('.js-comment'); + const threadComments = $(elem).parents('.js-comments-holder').children('.js-comment'); threadComments.each(function () { makeButton(this, info); }); From 1dc7d53564a732c26e2f78c75270ebd19e287834 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 00:32:33 -0400 Subject: [PATCH 03/47] Add firebase-[app,database] JS files --- firebase-app.js | 6 + firebase-database.js | 260 +++++++++++++++++++++ firebase.js | 536 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 802 insertions(+) create mode 100644 firebase-app.js create mode 100644 firebase-database.js create mode 100644 firebase.js diff --git a/firebase-app.js b/firebase-app.js new file mode 100644 index 0000000..c2eeb2b --- /dev/null +++ b/firebase-app.js @@ -0,0 +1,6 @@ +/*! @license Firebase v4.1.2 +Build: rev-4a4cc92 +Terms: https://firebase.google.com/terms/ */ + +var firebase=function(){var e=void 0===e?self:e;return function(t){function n(e){if(o[e])return o[e].exports;var r=o[e]={i:e,l:!1,exports:{}};return t[e].call(r.exports,r,r.exports,n),r.l=!0,r.exports}var r=e.webpackJsonpFirebase;e.webpackJsonpFirebase=function(e,o,a){for(var c,s,u,f=0,l=[];f0&&void 0!==arguments[0]?arguments[0]:e();return"function"!=typeof t[n]&&i("invalid-app-argument",{name:n}),t[n]()};return void 0!==o&&(0,f.deepExtend)(s,o),m[n]=s,h.prototype[n]=function(){for(var e=this._getService.bind(this,n),t=arguments.length,r=Array(t),o=0;o1&&void 0!==arguments[1]?arguments[1]:p;if(this.checkDestroyed_(),this.services_[e]||(this.services_[e]={}),!this.services_[e][t]){var n=t!==p?t:void 0,r=this.firebase_.INTERNAL.factories[e](this,this.extendApp.bind(this),n);this.services_[e][t]=r}return this.services_[e][t]}},{key:"extendApp",value:function(e){var t=this;(0,f.deepExtend)(this,e),e.INTERNAL&&e.INTERNAL.addAuthTokenListener&&(d.forEach(function(e){t.INTERNAL.addAuthTokenListener(e)}),d=[])}},{key:"checkDestroyed_",value:function(){this.isDeleted_&&i("app-deleted",{name:this.name_})}},{key:"name",get:function(){return this.checkDestroyed_(),this.name_}},{key:"options",get:function(){return this.checkDestroyed_(),this.options_}}]),e}();h.prototype.name&&h.prototype.options||h.prototype.delete||console.log("dc");var v={"no-app":"No Firebase App '{$name}' has been created - call Firebase App.initializeApp()","bad-app-name":"Illegal App name: '{$name}","duplicate-app":"Firebase App named '{$name}' already exists","app-deleted":"Firebase App named '{$name}' already deleted","duplicate-service":"Firebase service named '{$name}' already registered","sa-not-supported":"Initializing the Firebase SDK with a service account is only allowed in a Node.js environment. On client devices, you should instead initialize the SDK with an api key and auth domain","invalid-app-argument":"firebase.{$name}() takes either no argument or a Firebase App instance."},m=new s.ErrorFactory("app","Firebase",v)},32:function(e,t,n){"use strict";function r(e){return o(void 0,e)}function o(e,t){if(!(t instanceof Object))return t;switch(t.constructor){case Date:return new Date(t.getTime());case Object:void 0===e&&(e={});break;case Array:e=[];break;default:return t}for(var n in t)t.hasOwnProperty(n)&&(e[n]=o(e[n],t[n]));return e}function i(e,t,n){e[t]=n}Object.defineProperty(t,"__esModule",{value:!0}),t.deepCopy=r,t.deepExtend=o,t.patchProperty=i},4:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(27),o=(0,r.createFirebaseNamespace)();t.default=o,e.exports=t.default},51:function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(f===setTimeout)return setTimeout(e,0);if((f===n||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function i(e){if(l===clearTimeout)return clearTimeout(e);if((l===r||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function a(){v&&d&&(v=!1,d.length?h=d.concat(h):m=-1,h.length&&c())}function c(){if(!v){var e=o(a);v=!0;for(var t=h.length;t;){for(d=h,h=[];++m1)for(var n=1;n=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},r(53),n.setImmediate=setImmediate,n.clearImmediate=clearImmediate},9: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){var t=a;return a=e,t}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n"}),o=this.serviceName+": "+o+" ("+r+").";var i=new c(r,o);for(var a in t)t.hasOwnProperty(a)&&"_"!==a.slice(-1)&&(i[a]=t[a]);return i}}]),e}()}})}(); +//# sourceMappingURL=firebase-app.js.map \ No newline at end of file diff --git a/firebase-database.js b/firebase-database.js new file mode 100644 index 0000000..8343a8d --- /dev/null +++ b/firebase-database.js @@ -0,0 +1,260 @@ +/*! @license Firebase v4.1.2 +Build: rev-4a4cc92 +Terms: https://firebase.google.com/terms/ + +--- + +typedarray.js +Copyright (c) 2010, Linden Research, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. */ + +(function() {var g,aa=this;function n(a){return void 0!==a}function ba(){}function ca(a){a.Vb=function(){return a.Ye?a.Ye:a.Ye=new a}} +function da(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; +else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ea(a){return"array"==da(a)}function fa(a){var b=da(a);return"array"==b||"object"==b&&"number"==typeof a.length}function p(a){return"string"==typeof a}function ga(a){return"number"==typeof a}function ha(a){return"function"==da(a)}function ia(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}function ja(a,b,c){return a.call.apply(a.bind,arguments)} +function ka(a,b,c){if(!a)throw Error();if(2b?e+="000":256>b?e+="00":4096>b&&(e+="0");return qa[a]=e+b.toString(16)}),'"')};function sa(){this.Wa=-1};function ta(){this.Wa=-1;this.Wa=64;this.M=[];this.Wd=[];this.Af=[];this.zd=[];this.zd[0]=128;for(var a=1;ae;e++)d[e]=b.charCodeAt(c)<<24|b.charCodeAt(c+1)<<16|b.charCodeAt(c+2)<<8|b.charCodeAt(c+3),c+=4;else for(e=0;16>e;e++)d[e]=b[c]<<24|b[c+1]<<16|b[c+2]<<8|b[c+3],c+=4;for(e=16;80>e;e++){var f=d[e-3]^d[e-8]^d[e-14]^d[e-16];d[e]=(f<<1|f>>>31)&4294967295}b=a.M[0];c=a.M[1];for(var h=a.M[2],k=a.M[3],m=a.M[4],l,e=0;80>e;e++)40>e?20>e?(f=k^c&(h^k),l=1518500249):(f=c^h^k,l=1859775393):60>e?(f=c&h|k&(c|h),l=2400959708):(f=c^h^k,l=3395469782),f=(b<< +5|b>>>27)+f+m+l+d[e]&4294967295,m=k,k=h,h=(c<<30|c>>>2)&4294967295,c=b,b=f;a.M[0]=a.M[0]+b&4294967295;a.M[1]=a.M[1]+c&4294967295;a.M[2]=a.M[2]+h&4294967295;a.M[3]=a.M[3]+k&4294967295;a.M[4]=a.M[4]+m&4294967295} +ta.prototype.update=function(a,b){if(null!=a){n(b)||(b=a.length);for(var c=b-this.Wa,d=0,e=this.Wd,f=this.$b;dc?Math.max(0,a.length+c):c;if(p(a))return p(b)&&1==b.length?a.indexOf(b,c):-1;for(;cc?null:p(a)?a.charAt(c):a[c]}function Ea(a,b,c){for(var d=a.length,e=p(a)?a.split(""):a,f=0;f=arguments.length?t.slice.call(a,b):t.slice.call(a,b,c)} +function Ha(a,b){a.sort(b||Ia)}function Ia(a,b){return a>b?1:aparseFloat(a))?String(b):a})();var Ya=null,Za=null,$a=null;function ab(a,b){if(!fa(a))throw Error("encodeByteArray takes an array as a parameter");bb();for(var c=b?Za:Ya,d=[],e=0;e>2,f=(f&3)<<4|k>>4,k=(k&15)<<2|l>>6,l=l&63;m||(l=64,h||(k=64));d.push(c[u],c[f],c[k],c[l])}return d.join("")} +function bb(){if(!Ya){Ya={};Za={};$a={};for(var a=0;65>a;a++)Ya[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a),Za[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.".charAt(a),$a[Za[a]]=a,62<=a&&($a["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a)]=a)}};function cb(a,b){if(!a)throw db(b);}function db(a){return Error("Firebase Database ("+firebase.SDK_VERSION+") INTERNAL ASSERT FAILED: "+a)};function eb(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function w(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]}function fb(a,b){for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b(c,a[c])};function gb(a){var b=[];fb(a,function(a,d){ea(d)?ya(d,function(d){b.push(encodeURIComponent(a)+"="+encodeURIComponent(d))}):b.push(encodeURIComponent(a)+"="+encodeURIComponent(d))});return b.length?"&"+b.join("&"):""};var hb=firebase.Promise;function ib(){var a=this;this.reject=this.resolve=null;this.ra=new hb(function(b,c){a.resolve=b;a.reject=c})}function jb(a,b){return function(c,d){c?a.reject(c):a.resolve(d);ha(b)&&(kb(a.ra),1===b.length?b(c):b(c,d))}}function kb(a){a.then(void 0,ba)};function lb(a){return"undefined"!==typeof JSON&&n(JSON.parse)?JSON.parse(a):ma(a)}function x(a){if("undefined"!==typeof JSON&&n(JSON.stringify))a=JSON.stringify(a);else{var b=[];oa(new na,a,b);a=b.join("")}return a};function mb(a){for(var b=[],c=0,d=0;d=e&&(e-=55296,d++,cb(de?b[c++]=e:(2048>e?b[c++]=e>>6|192:(65536>e?b[c++]=e>>12|224:(b[c++]=e>>18|240,b[c++]=e>>12&63|128),b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b}function nb(a){for(var b=0,c=0;cd?b++:2048>d?b+=2:55296<=d&&56319>=d?(b+=4,c++):b+=3}return b};function y(a,b,c,d){var e;dc&&(e=0===c?"none":"no more than "+c);if(e)throw Error(a+" failed: Was called with "+d+(1===d?" argument.":" arguments.")+" Expects "+e+".");}function A(a,b,c){var d="";switch(b){case 1:d=c?"first":"First";break;case 2:d=c?"second":"Second";break;case 3:d=c?"third":"Third";break;case 4:d=c?"fourth":"Fourth";break;default:throw Error("errorPrefix called with argumentNumber > 4. Need to update it?");}return a=a+" failed: "+(d+" argument ")} +function B(a,b,c,d){if((!d||n(c))&&!ha(c))throw Error(A(a,b,d)+"must be a valid function.");}function ob(a,b,c){if(n(c)&&(!ia(c)||null===c))throw Error(A(a,b,!0)+"must be a valid context object.");};function pb(){return"undefined"!==typeof window&&!!(window.cordova||window.phonegap||window.PhoneGap)&&/ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test("undefined"!==typeof navigator&&"string"===typeof navigator.userAgent?navigator.userAgent:"")};function C(a,b){this.name=a;this.R=b}function qb(a,b){return new C(a,b)};function rb(a,b){return sb(a.name,b.name)}function tb(a,b){return sb(a,b)};function ub(a){this.uc=a;this.Cd="firebase:"}g=ub.prototype;g.set=function(a,b){null==b?this.uc.removeItem(this.Cd+a):this.uc.setItem(this.Cd+a,x(b))};g.get=function(a){a=this.uc.getItem(this.Cd+a);return null==a?null:lb(a)};g.remove=function(a){this.uc.removeItem(this.Cd+a)};g.Ze=!1;g.toString=function(){return this.uc.toString()};function vb(){this.pc={}}vb.prototype.set=function(a,b){null==b?delete this.pc[a]:this.pc[a]=b};vb.prototype.get=function(a){return eb(this.pc,a)?this.pc[a]:null};vb.prototype.remove=function(a){delete this.pc[a]};vb.prototype.Ze=!0;function wb(a){try{if("undefined"!==typeof window&&"undefined"!==typeof window[a]){var b=window[a];b.setItem("firebase:sentinel","cache");b.removeItem("firebase:sentinel");return new ub(b)}}catch(c){}return new vb}var xb=wb("localStorage"),yb=wb("sessionStorage");function zb(a,b,c,d,e){this.host=a.toLowerCase();this.domain=this.host.substr(this.host.indexOf(".")+1);this.Sc=b;this.pe=c;this.qg=d;this.gf=e||"";this.$a=xb.get("host:"+a)||this.host}function Ab(a,b){b!==a.$a&&(a.$a=b,"s-"===a.$a.substr(0,2)&&xb.set("host:"+a.host,a.$a))} +function Bb(a,b,c){D("string"===typeof b,"typeof type must == string");D("object"===typeof c,"typeof params must == object");if(b===Cb)b=(a.Sc?"wss://":"ws://")+a.$a+"/.ws?";else if(b===Db)b=(a.Sc?"https://":"http://")+a.$a+"/.lp?";else throw Error("Unknown connection type: "+b);a.host!==a.$a&&(c.ns=a.pe);var d=[];v(c,function(a,b){d.push(b+"="+a)});return b+d.join("&")}zb.prototype.toString=function(){var a=(this.Sc?"https://":"http://")+this.host;this.gf&&(a+="<"+this.gf+">");return a};function Eb(a,b){return a&&"object"===typeof a?(D(".sv"in a,"Unexpected leaf node or priority contents"),b[a[".sv"]]):a}function Fb(a,b){var c=new Gb;Hb(a,new E(""),function(a,e){Ib(c,a,Jb(e,b))});return c}function Jb(a,b){var c=a.C().H(),c=Eb(c,b),d;if(a.J()){var e=Eb(a.Ca(),b);return e!==a.Ca()||c!==a.C().H()?new Kb(e,G(c)):a}d=a;c!==a.C().H()&&(d=d.fa(new Kb(c)));a.O(H,function(a,c){var e=Jb(c,b);e!==c&&(d=d.T(a,e))});return d};var Lb=function(){var a=1;return function(){return a++}}(),D=cb,Mb=db; +function Nb(a){try{var b;bb();for(var c=$a,d=[],e=0;e>4);64!=k&&(d.push(h<<4&240|k>>2),64!=m&&d.push(k<<6&192|m))}if(8192>d.length)b=String.fromCharCode.apply(null,d);else{a="";for(c=0;ca.$b?a.update(a.zd,56-a.$b):a.update(a.zd,a.Wa-(a.$b-56));for(var d=a.Wa-1;56<=d;d--)a.Wd[d]=c&255,c/=256;ua(a,a.Wd);for(d=c=0;5>d;d++)for(var e=24;0<=e;e-=8)b[c]=a.M[d]>>e&255,++c;return ab(b)}function Pb(a){for(var b="",c=0;c.firebaseio.com instead"); +c&&"undefined"!=c||Vb("Cannot parse Firebase url. Please use https://.firebaseio.com");d||"undefined"!==typeof window&&window.location&&window.location.protocol&&-1!==window.location.protocol.indexOf("https:")&&J("Insecure Firebase access from a secure page. Please use https in calls to new Firebase().");return{jc:new zb(b,d,c,"ws"===e||"wss"===e),path:new E(f)}}function Xb(a){return ga(a)&&(a!=a||a==Number.POSITIVE_INFINITY||a==Number.NEGATIVE_INFINITY)} +function Yb(a){if("complete"===document.readyState)a();else{var b=!1,c=function(){document.body?b||(b=!0,a()):setTimeout(c,Math.floor(10))};document.addEventListener?(document.addEventListener("DOMContentLoaded",c,!1),window.addEventListener("load",c,!1)):document.attachEvent&&(document.attachEvent("onreadystatechange",function(){"complete"===document.readyState&&c()}),window.attachEvent("onload",c))}} +function sb(a,b){if(a===b)return 0;if("[MIN_NAME]"===a||"[MAX_NAME]"===b)return-1;if("[MIN_NAME]"===b||"[MAX_NAME]"===a)return 1;var c=Zb(a),d=Zb(b);return null!==c?null!==d?0==c-d?a.length-b.length:c-d:-1:null!==d?1:aa?c.push(a.substring(d,a.length)):c.push(a.substring(d,d+b));return c}function cc(a,b){if(ea(a))for(var c=0;ca,a=Math.abs(a),a>=Math.pow(2,-1022)?(d=Math.min(Math.floor(Math.log(a)/Math.LN2),1023),c=d+1023,d=Math.round(a*Math.pow(2,52-d)-Math.pow(2,52))):(c=0,d=Math.round(a/Math.pow(2,-1074))));e=[];for(a=52;a;--a)e.push(d%2?1:0),d=Math.floor(d/2);for(a=11;a;--a)e.push(c%2?1:0),c=Math.floor(c/2);e.push(b?1:0);e.reverse();b=e.join("");c="";for(a=0;64>a;a+=8)d=parseInt(b.substr(a,8),2).toString(16),1===d.length&& +(d="0"+d),c+=d;return c.toLowerCase()}var ec=/^-?\d{1,10}$/;function Zb(a){return ec.test(a)&&(a=Number(a),-2147483648<=a&&2147483647>=a)?a:null}function fc(a){try{a()}catch(b){setTimeout(function(){J("Exception was thrown by user callback.",b.stack||"");throw b;},Math.floor(0))}}function gc(a,b,c){Object.defineProperty(a,b,{get:c})}function hc(a,b){var c=setTimeout(a,b);"object"===typeof c&&c.unref&&c.unref();return c};function ic(a){var b={},c={},d={},e="";try{var f=a.split("."),b=lb(Nb(f[0])||""),c=lb(Nb(f[1])||""),e=f[2],d=c.d||{};delete c.d}catch(h){}return{tg:b,Je:c,data:d,mg:e}}function jc(a){a=ic(a);var b=a.Je;return!!a.mg&&!!b&&"object"===typeof b&&b.hasOwnProperty("iat")}function kc(a){a=ic(a).Je;return"object"===typeof a&&!0===w(a,"admin")};function lc(){}var mc={};function nc(a){return q(a.compare,a)}lc.prototype.nd=function(a,b){return 0!==this.compare(new C("[MIN_NAME]",a),new C("[MIN_NAME]",b))};lc.prototype.Hc=function(){return oc};function pc(a){D(!a.e()&&".priority"!==K(a),"Can't create PathIndex with empty path or .priority key");this.bc=a}la(pc,lc);g=pc.prototype;g.xc=function(a){return!a.P(this.bc).e()};g.compare=function(a,b){var c=a.R.P(this.bc),d=b.R.P(this.bc),c=c.sc(d);return 0===c?sb(a.name,b.name):c}; +g.Ec=function(a,b){var c=G(a),c=L.F(this.bc,c);return new C(b,c)};g.Fc=function(){var a=L.F(this.bc,qc);return new C("[MAX_NAME]",a)};g.toString=function(){return this.bc.slice().join("/")};function rc(){}la(rc,lc);g=rc.prototype;g.compare=function(a,b){var c=a.R.C(),d=b.R.C(),c=c.sc(d);return 0===c?sb(a.name,b.name):c};g.xc=function(a){return!a.C().e()};g.nd=function(a,b){return!a.C().Z(b.C())};g.Hc=function(){return oc};g.Fc=function(){return new C("[MAX_NAME]",new Kb("[PRIORITY-POST]",qc))}; +g.Ec=function(a,b){var c=G(a);return new C(b,new Kb("[PRIORITY-POST]",c))};g.toString=function(){return".priority"};var H=new rc;function sc(){}la(sc,lc);g=sc.prototype;g.compare=function(a,b){return sb(a.name,b.name)};g.xc=function(){throw Mb("KeyIndex.isDefinedOn not expected to be called.");};g.nd=function(){return!1};g.Hc=function(){return oc};g.Fc=function(){return new C("[MAX_NAME]",L)};g.Ec=function(a){D(p(a),"KeyIndex indexValue must always be a string.");return new C(a,L)};g.toString=function(){return".key"}; +var tc=new sc;function uc(){}la(uc,lc);g=uc.prototype;g.compare=function(a,b){var c=a.R.sc(b.R);return 0===c?sb(a.name,b.name):c};g.xc=function(){return!0};g.nd=function(a,b){return!a.Z(b)};g.Hc=function(){return oc};g.Fc=function(){return vc};g.Ec=function(a,b){var c=G(a);return new C(b,c)};g.toString=function(){return".value"};var wc=new uc;function xc(a,b){this.od=a;this.cc=b}xc.prototype.get=function(a){var b=w(this.od,a);if(!b)throw Error("No index defined for "+a);return b===mc?null:b};function yc(a,b,c){var d=Ja(a.od,function(d,f){var h=w(a.cc,f);D(h,"Missing index implementation for "+f);if(d===mc){if(h.xc(b.R)){for(var k=[],m=c.Wb(qb),l=M(m);l;)l.name!=b.name&&k.push(l),l=M(m);k.push(b);return zc(k,nc(h))}return mc}h=c.get(b.name);k=d;h&&(k=k.remove(new C(b.name,h)));return k.Oa(b,b.R)});return new xc(d,a.cc)} +function Ac(a,b,c){var d=Ja(a.od,function(a){if(a===mc)return a;var d=c.get(b.name);return d?a.remove(new C(b.name,d)):a});return new xc(d,a.cc)}var Bc=new xc({".priority":mc},{".priority":H});function Kb(a,b){this.B=a;D(n(this.B)&&null!==this.B,"LeafNode shouldn't be created with null/undefined value.");this.aa=b||L;Cc(this.aa);this.Db=null}var Dc=["object","boolean","number","string"];g=Kb.prototype;g.J=function(){return!0};g.C=function(){return this.aa};g.fa=function(a){return new Kb(this.B,a)};g.Q=function(a){return".priority"===a?this.aa:L};g.P=function(a){return a.e()?this:".priority"===K(a)?this.aa:L};g.Da=function(){return!1};g.Ve=function(){return null}; +g.T=function(a,b){return".priority"===a?this.fa(b):b.e()&&".priority"!==a?this:L.T(a,b).fa(this.aa)};g.F=function(a,b){var c=K(a);if(null===c)return b;if(b.e()&&".priority"!==c)return this;D(".priority"!==c||1===Ec(a),".priority must be the last token in a path");return this.T(c,L.F(N(a),b))};g.e=function(){return!1};g.Eb=function(){return 0};g.O=function(){return!1};g.H=function(a){return a&&!this.C().e()?{".value":this.Ca(),".priority":this.C().H()}:this.Ca()}; +g.hash=function(){if(null===this.Db){var a="";this.aa.e()||(a+="priority:"+Fc(this.aa.H())+":");var b=typeof this.B,a=a+(b+":"),a="number"===b?a+dc(this.B):a+this.B;this.Db=Ob(a)}return this.Db};g.Ca=function(){return this.B};g.sc=function(a){if(a===L)return 1;if(a instanceof O)return-1;D(a.J(),"Unknown node type");var b=typeof a.B,c=typeof this.B,d=xa(Dc,b),e=xa(Dc,c);D(0<=d,"Unknown leaf type: "+b);D(0<=e,"Unknown leaf type: "+c);return d===e?"object"===c?0:this.Bf;f++)b[f]=Math.floor(64*Math.random());for(f=0;12>f;f++)c+="-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(b[f]);D(20===c.length,"nextPushId: Length should be 20."); +return c}}();function Lc(){Ic.call(this,["online"]);this.hc=!0;if("undefined"!==typeof window&&"undefined"!==typeof window.addEventListener&&!pb()){var a=this;window.addEventListener("online",function(){a.hc||(a.hc=!0,a.Ge("online",!0))},!1);window.addEventListener("offline",function(){a.hc&&(a.hc=!1,a.Ge("online",!1))},!1)}}la(Lc,Ic);Lc.prototype.Ue=function(a){D("online"===a,"Unknown event type: "+a);return[this.hc]};ca(Lc);function Mc(){Ic.call(this,["visible"]);var a,b;"undefined"!==typeof document&&"undefined"!==typeof document.addEventListener&&("undefined"!==typeof document.hidden?(b="visibilitychange",a="hidden"):"undefined"!==typeof document.mozHidden?(b="mozvisibilitychange",a="mozHidden"):"undefined"!==typeof document.msHidden?(b="msvisibilitychange",a="msHidden"):"undefined"!==typeof document.webkitHidden&&(b="webkitvisibilitychange",a="webkitHidden"));this.Mb=!0;if(b){var c=this;document.addEventListener(b, +function(){var b=!document[a];b!==c.Mb&&(c.Mb=b,c.Ge("visible",b))},!1)}}la(Mc,Ic);Mc.prototype.Ue=function(a){D("visible"===a,"Unknown event type: "+a);return[this.Mb]};ca(Mc);function E(a,b){if(1==arguments.length){this.o=a.split("/");for(var c=0,d=0;d=a.o.length?null:a.o[a.Y]}function Ec(a){return a.o.length-a.Y}function N(a){var b=a.Y;b=this.o.length)return null;for(var a=[],b=this.Y;b=this.o.length};g.Z=function(a){if(Ec(this)!==Ec(a))return!1;for(var b=this.Y,c=a.Y;b<=this.o.length;b++,c++)if(this.o[b]!==a.o[c])return!1;return!0}; +g.contains=function(a){var b=this.Y,c=a.Y;if(Ec(this)>Ec(a))return!1;for(;bb?c=c.left:0c?d=d.left:0e)a=this.le?a.left:a.right;else if(0===e){this.Pa.push(a);break}else this.Pa.push(a),a=this.le?a.right:a.left} +function M(a){if(0===a.Pa.length)return null;var b=a.Pa.pop(),c;c=a.Hd?a.Hd(b.key,b.value):{key:b.key,value:b.value};if(a.le)for(b=b.left;!b.e();)a.Pa.push(b),b=b.right;else for(b=b.right;!b.e();)a.Pa.push(b),b=b.left;return c}function cd(a){if(0===a.Pa.length)return null;var b;b=a.Pa;b=b[b.length-1];return a.Hd?a.Hd(b.key,b.value):{key:b.key,value:b.value}}function dd(a,b,c,d,e){this.key=a;this.value=b;this.color=null!=c?c:!0;this.left=null!=d?d:$c;this.right=null!=e?e:$c}g=dd.prototype; +g.X=function(a,b,c,d,e){return new dd(null!=a?a:this.key,null!=b?b:this.value,null!=c?c:this.color,null!=d?d:this.left,null!=e?e:this.right)};g.count=function(){return this.left.count()+1+this.right.count()};g.e=function(){return!1};g.ha=function(a){return this.left.ha(a)||a(this.key,this.value)||this.right.ha(a)};function ed(a){return a.left.e()?a:ed(a.left)}g.Gc=function(){return ed(this).key};g.ec=function(){return this.right.e()?this.key:this.right.ec()}; +g.Oa=function(a,b,c){var d,e;e=this;d=c(a,e.key);e=0>d?e.X(null,null,null,e.left.Oa(a,b,c),null):0===d?e.X(null,b,null,null,null):e.X(null,null,null,null,e.right.Oa(a,b,c));return gd(e)};function hd(a){if(a.left.e())return $c;a.left.ea()||a.left.left.ea()||(a=id(a));a=a.X(null,null,null,hd(a.left),null);return gd(a)} +g.remove=function(a,b){var c,d;c=this;if(0>b(a,c.key))c.left.e()||c.left.ea()||c.left.left.ea()||(c=id(c)),c=c.X(null,null,null,c.left.remove(a,b),null);else{c.left.ea()&&(c=jd(c));c.right.e()||c.right.ea()||c.right.left.ea()||(c=kd(c),c.left.left.ea()&&(c=jd(c),c=kd(c)));if(0===b(a,c.key)){if(c.right.e())return $c;d=ed(c.right);c=c.X(d.key,d.value,null,null,hd(c.right))}c=c.X(null,null,null,null,c.right.remove(a,b))}return gd(c)};g.ea=function(){return this.color}; +function gd(a){a.right.ea()&&!a.left.ea()&&(a=ld(a));a.left.ea()&&a.left.left.ea()&&(a=jd(a));a.left.ea()&&a.right.ea()&&(a=kd(a));return a}function id(a){a=kd(a);a.right.left.ea()&&(a=a.X(null,null,null,null,jd(a.right)),a=ld(a),a=kd(a));return a}function ld(a){return a.right.X(null,null,a.color,a.X(null,null,!0,null,a.right.left),null)}function jd(a){return a.left.X(null,null,a.color,null,a.X(null,null,!0,a.left.right,null))} +function kd(a){return a.X(null,null,!a.color,a.left.X(null,null,!a.left.color,null,null),a.right.X(null,null,!a.right.color,null,null))}function md(){}g=md.prototype;g.X=function(){return this};g.Oa=function(a,b){return new dd(a,b,null)};g.remove=function(){return this};g.count=function(){return 0};g.e=function(){return!0};g.ha=function(){return!1};g.Gc=function(){return null};g.ec=function(){return null};g.ea=function(){return!1};var $c=new md;function O(a,b,c){this.k=a;(this.aa=b)&&Cc(this.aa);a.e()&&D(!this.aa||this.aa.e(),"An empty node cannot have a priority");this.yb=c;this.Db=null}g=O.prototype;g.J=function(){return!1};g.C=function(){return this.aa||L};g.fa=function(a){return this.k.e()?this:new O(this.k,a,this.yb)};g.Q=function(a){if(".priority"===a)return this.C();a=this.k.get(a);return null===a?L:a};g.P=function(a){var b=K(a);return null===b?this:this.Q(b).P(N(a))};g.Da=function(a){return null!==this.k.get(a)}; +g.T=function(a,b){D(b,"We should always be passing snapshot nodes");if(".priority"===a)return this.fa(b);var c=new C(a,b),d,e;b.e()?(d=this.k.remove(a),c=Ac(this.yb,c,this.k)):(d=this.k.Oa(a,b),c=yc(this.yb,c,this.k));e=d.e()?L:this.aa;return new O(d,e,c)};g.F=function(a,b){var c=K(a);if(null===c)return b;D(".priority"!==K(a)||1===Ec(a),".priority must be the last token in a path");var d=this.Q(c).F(N(a),b);return this.T(c,d)};g.e=function(){return this.k.e()};g.Eb=function(){return this.k.count()}; +var nd=/^(0|[1-9]\d*)$/;g=O.prototype;g.H=function(a){if(this.e())return null;var b={},c=0,d=0,e=!0;this.O(H,function(f,h){b[f]=h.H(a);c++;e&&nd.test(f)?d=Math.max(d,Number(f)):e=!1});if(!a&&e&&d<2*c){var f=[],h;for(h in b)f[h]=b[h];return f}a&&!this.C().e()&&(b[".priority"]=this.C().H());return b};g.hash=function(){if(null===this.Db){var a="";this.C().e()||(a+="priority:"+Fc(this.C().H())+":");this.O(H,function(b,c){var d=c.hash();""!==d&&(a+=":"+b+":"+d)});this.Db=""===a?"":Ob(a)}return this.Db}; +g.Ve=function(a,b,c){return(c=od(this,c))?(a=ad(c,new C(a,b)))?a.name:null:ad(this.k,a)};function pd(a,b){var c;c=(c=od(a,b))?(c=c.Gc())&&c.name:a.k.Gc();return c?new C(c,a.k.get(c)):null}function qd(a,b){var c;c=(c=od(a,b))?(c=c.ec())&&c.name:a.k.ec();return c?new C(c,a.k.get(c)):null}g.O=function(a,b){var c=od(this,a);return c?c.ha(function(a){return b(a.name,a.R)}):this.k.ha(b)};g.Wb=function(a){return this.Xb(a.Hc(),a)}; +g.Xb=function(a,b){var c=od(this,b);if(c)return c.Xb(a,function(a){return a});for(var c=this.k.Xb(a.name,qb),d=cd(c);null!=d&&0>b.compare(d,a);)M(c),d=cd(c);return c};g.We=function(a){return this.Zb(a.Fc(),a)};g.Zb=function(a,b){var c=od(this,b);if(c)return c.Zb(a,function(a){return a});for(var c=this.k.Zb(a.name,qb),d=cd(c);null!=d&&010485760/3&&10485760=this.g.compare(this.Uc,a)&&0>=this.g.compare(a,this.vc)};g.F=function(a,b,c,d,e,f){this.matches(new C(b,c))||(c=L);return this.he.F(a,b,c,d,e,f)}; +g.ya=function(a,b,c){b.J()&&(b=L);var d=b.nb(this.g),d=d.fa(L),e=this;b.O(H,function(a,b){e.matches(new C(a,b))||(d=d.T(a,L))});return this.he.ya(a,d,c)};g.fa=function(a){return a};g.Na=function(){return!0};g.Ub=function(){return this.he};function Re(a){this.sa=new Se(a);this.g=a.g;D(a.xa,"Only valid if limit has been set");this.oa=a.oa;this.Ib=!jf(a)}g=Re.prototype;g.F=function(a,b,c,d,e,f){this.sa.matches(new C(b,c))||(c=L);return a.Q(b).Z(c)?a:a.Eb()=this.g.compare(this.sa.Uc,f):0>=this.g.compare(f,this.sa.vc))d=d.T(f.name,f.R),e++;else break}}else{d=b.nb(this.g);d=d.fa(L);var k,m,l;if(this.Ib){b=d.We(this.g);k=this.sa.vc;m=this.sa.Uc;var u=nc(this.g);l=function(a,b){return u(b,a)}}else b=d.Wb(this.g),k=this.sa.Uc, +m=this.sa.vc,l=nc(this.g);for(var e=0,z=!1;0=l(k,f)&&(z=!0),(h=z&&e=l(f,m))?e++:d=d.T(f.name,L)}return this.sa.Ub().ya(a,d,c)};g.fa=function(a){return a};g.Na=function(){return!0};g.Ub=function(){return this.sa.Ub()}; +function kf(a,b,c,d,e,f){var h;if(a.Ib){var k=nc(a.g);h=function(a,b){return k(b,a)}}else h=nc(a.g);D(b.Eb()==a.oa,"");var m=new C(c,d),l=a.Ib?pd(b,a.g):qd(b,a.g),u=a.sa.matches(m);if(b.Da(c)){for(var z=b.Q(c),l=e.fe(a.g,l,a.Ib);null!=l&&(l.name==c||b.Da(l.name));)l=e.fe(a.g,l,a.Ib);e=null==l?1:h(l,m);if(u&&!d.e()&&0<=e)return null!=f&&df(f,new S(Ie,d,c,z)),b.T(c,d);null!=f&&df(f,new S(Le,z,c));b=b.T(c,L);return null!=l&&a.sa.matches(l)?(null!=f&&df(f,new S(Me,l.R,l.name)),b.T(l.name,l.R)):b}return d.e()? +b:u&&0<=h(l,m)?(null!=f&&(df(f,new S(Le,l.R,l.name)),df(f,new S(Me,d,c))),b.T(c,d).T(l.name,L)):b};function S(a,b,c,d){this.type=a;this.Ja=b;this.Xa=c;this.qe=d;this.Dd=void 0}function Ee(a){return new S(Ne,a)}var Me="child_added",Le="child_removed",Ie="child_changed",Je="child_moved",Ne="value";function xe(){this.fb={}} +function df(a,b){var c=b.type,d=b.Xa;D(c==Me||c==Ie||c==Le,"Only child changes supported for tracking");D(".priority"!==d,"Only non-priority child changes can be tracked.");var e=w(a.fb,d);if(e){var f=e.type;if(c==Me&&f==Le)a.fb[d]=new S(Ie,b.Ja,d,e.Ja);else if(c==Le&&f==Me)delete a.fb[d];else if(c==Le&&f==Ie)a.fb[d]=new S(Le,e.qe,d);else if(c==Ie&&f==Me)a.fb[d]=new S(Me,b.Ja,d);else if(c==Ie&&f==Ie)a.fb[d]=new S(Ie,b.Ja,d,e.qe);else throw Mb("Illegal combination of changes: "+b+" occurred after "+ +e);}else a.fb[d]=b};function lf(){this.Rb=this.na=this.Kb=this.ka=this.xa=!1;this.oa=0;this.mb="";this.dc=null;this.zb="";this.ac=null;this.xb="";this.g=H}var mf=new lf;function jf(a){return""===a.mb?a.ka:"l"===a.mb}function ff(a){D(a.ka,"Only valid if start has been set");return a.dc}function ef(a){D(a.ka,"Only valid if start has been set");return a.Kb?a.zb:"[MIN_NAME]"}function hf(a){D(a.na,"Only valid if end has been set");return a.ac} +function gf(a){D(a.na,"Only valid if end has been set");return a.Rb?a.xb:"[MAX_NAME]"}function nf(a){var b=new lf;b.xa=a.xa;b.oa=a.oa;b.ka=a.ka;b.dc=a.dc;b.Kb=a.Kb;b.zb=a.zb;b.na=a.na;b.ac=a.ac;b.Rb=a.Rb;b.xb=a.xb;b.g=a.g;b.mb=a.mb;return b}g=lf.prototype;g.ne=function(a){var b=nf(this);b.xa=!0;b.oa=a;b.mb="l";return b};g.oe=function(a){var b=nf(this);b.xa=!0;b.oa=a;b.mb="r";return b};g.Nd=function(a,b){var c=nf(this);c.ka=!0;n(a)||(a=null);c.dc=a;null!=b?(c.Kb=!0,c.zb=b):(c.Kb=!1,c.zb="");return c}; +g.gd=function(a,b){var c=nf(this);c.na=!0;n(a)||(a=null);c.ac=a;n(b)?(c.Rb=!0,c.xb=b):(c.vg=!1,c.xb="");return c};function of(a,b){var c=nf(a);c.g=b;return c}function pf(a){var b={};a.ka&&(b.sp=a.dc,a.Kb&&(b.sn=a.zb));a.na&&(b.ep=a.ac,a.Rb&&(b.en=a.xb));if(a.xa){b.l=a.oa;var c=a.mb;""===c&&(c=jf(a)?"l":"r");b.vf=c}a.g!==H&&(b.i=a.g.toString());return b}function T(a){return!(a.ka||a.na||a.xa)}function qf(a){return T(a)&&a.g==H} +function rf(a){var b={};if(qf(a))return b;var c;a.g===H?c="$priority":a.g===wc?c="$value":a.g===tc?c="$key":(D(a.g instanceof pc,"Unrecognized index type!"),c=a.g.toString());b.orderBy=x(c);a.ka&&(b.startAt=x(a.dc),a.Kb&&(b.startAt+=","+x(a.zb)));a.na&&(b.endAt=x(a.ac),a.Rb&&(b.endAt+=","+x(a.xb)));a.xa&&(jf(a)?b.limitToFirst=a.oa:b.limitToLast=a.oa);return b}g.toString=function(){return x(pf(this))};function sf(a){this.W=a}var tf=new sf(new vd(null));function uf(a,b,c){if(b.e())return new sf(new vd(c));var d=zd(a.W,b);if(null!=d){var e=d.path,d=d.value;b=P(e,b);d=d.F(b,c);return new sf(a.W.set(e,d))}a=Ad(a.W,b,new vd(c));return new sf(a)}function vf(a,b,c){var d=a;fb(c,function(a,c){d=uf(d,b.n(a),c)});return d}sf.prototype.Ed=function(a){if(a.e())return tf;a=Ad(this.W,a,R);return new sf(a)};function wf(a,b){var c=zd(a.W,b);return null!=c?a.W.get(c.path).P(P(c.path,b)):null} +function xf(a){var b=[],c=a.W.value;null!=c?c.J()||c.O(H,function(a,c){b.push(new C(a,c))}):a.W.children.ha(function(a,c){null!=c.value&&b.push(new C(a,c.value))});return b}function yf(a,b){if(b.e())return a;var c=wf(a,b);return null!=c?new sf(new vd(c)):new sf(a.W.subtree(b))}sf.prototype.e=function(){return this.W.e()};sf.prototype.apply=function(a){return zf(Q,this.W,a)}; +function zf(a,b,c){if(null!=b.value)return c.F(a,b.value);var d=null;b.children.ha(function(b,f){".priority"===b?(D(null!==f.value,"Priority writes must always be leaf nodes"),d=f.value):c=zf(a.n(b),f,c)});c.P(a).e()||null===d||(c=c.F(a.n(".priority"),d));return c};function Af(){this.Jd=L}Af.prototype.j=function(a){return this.Jd.P(a)};Af.prototype.toString=function(){return this.Jd.toString()};function Bf(a){this.oc=a}Bf.prototype.getToken=function(a){return this.oc.INTERNAL.getToken(a).then(null,function(a){return a&&"auth/token-not-initialized"===a.code?(I("Got auth/token-not-initialized error. Treating as null token."),null):Promise.reject(a)})};function Cf(a,b){a.oc.INTERNAL.addAuthTokenListener(b)};function Df(){this.S=tf;this.la=[];this.Bc=-1}function Ef(a,b){for(var c=0;c=b&&Ff(h,c.path)?d=!1:c.path.contains(h.path)&&(e=!0));f--}if(d){if(e)this.S=Gf(this.la,Hf,Q),this.Bc=0h.status){try{b=lb(h.responseText)}catch(c){J("Failed to parse JSON response for "+f+": "+h.responseText)}d(null, +b)}else 401!==h.status&&404!==h.status&&J("Got unsuccessful REST response for "+f+" Status: "+h.status),d(h.status);d=null}};h.open("GET",f,!0);h.send()})};function Uf(a){this.te=a;this.Bd=[];this.Qb=0;this.Yd=-1;this.Fb=null}function Vf(a,b,c){a.Yd=b;a.Fb=c;a.Yd=a.length){var b=Number(a);if(!isNaN(b)){e.Fe=b;e.frames=[];a=null;break a}}e.Fe=1;e.frames=[]}null!==a&&ag(e,a)}};this.Ia.onerror=function(a){e.f("WebSocket error. Closing connection.");(a=a.message||a.data)&&e.f(a);e.bb()}};Yf.prototype.start=function(){}; +Yf.isAvailable=function(){var a=!1;if("undefined"!==typeof navigator&&navigator.userAgent){var b=navigator.userAgent.match(/Android ([0-9]{0,}\.[0-9]{0,})/);b&&1parseFloat(b[1])&&(a=!0)}return!a&&null!==Xf&&!Zf};Yf.responsesRequiredToBeHealthy=2;Yf.healthyTimeout=3E4;g=Yf.prototype;g.sd=function(){xb.remove("previous_websocket_failure")};function ag(a,b){a.frames.push(b);if(a.frames.length==a.Fe){var c=a.frames.join("");a.frames=null;c=lb(c);a.Xf(c)}} +g.send=function(a){$f(this);a=x(a);this.qb+=a.length;Mf(this.Va,"bytes_sent",a.length);a=bc(a,16384);1document.domain="'+document.domain+'";\x3c/script>');a=""+a+"";try{this.Ea.gb.open(),this.Ea.gb.write(a),this.Ea.gb.close()}catch(f){I("frame writing exception"),f.stack&&I(f.stack),I(f)}} +fg.prototype.close=function(){this.Ud=!1;if(this.Ea){this.Ea.gb.body.innerHTML="";var a=this;setTimeout(function(){null!==a.Ea&&(document.body.removeChild(a.Ea),a.Ea=null)},Math.floor(0))}var b=this.ib;b&&(this.ib=null,b())}; +function ig(a){if(a.Ud&&a.Kd&&a.ve.count()<(0=a.Qc[0].Pe.length+30+c.length){var e=a.Qc.shift(),c=c+"&seg"+d+"="+e.jg+"&ts"+d+"="+e.pg+"&d"+d+"="+e.Pe;d++}else break;jg(a,b+c,a.$d);return!0}return!1}function jg(a,b,c){function d(){a.ve.remove(c);ig(a)}a.ve.add(c,1);var e=setTimeout(d,Math.floor(25E3));hg(a,b,function(){clearTimeout(e);d()})} +function hg(a,b,c){setTimeout(function(){try{if(a.Kd){var d=a.Ea.gb.createElement("script");d.type="text/javascript";d.async=!0;d.src=b;d.onload=d.onreadystatechange=function(){var a=d.readyState;a&&"loaded"!==a&&"complete"!==a||(d.onload=d.onreadystatechange=null,d.parentNode&&d.parentNode.removeChild(d),c())};d.onerror=function(){I("Long-poll script failed to load: "+b);a.Kd=!1;a.close()};a.Ea.gb.body.appendChild(d)}}catch(e){}},Math.floor(1))};function kg(a){lg(this,a)}var mg=[cg,Yf];function lg(a,b){var c=Yf&&Yf.isAvailable(),d=c&&!(xb.Ze||!0===xb.get("previous_websocket_failure"));b.qg&&(c||J("wss:// URL used, but browser isn't known to support websockets. Trying anyway."),d=!0);if(d)a.Wc=[Yf];else{var e=a.Wc=[];cc(mg,function(a,b){b&&b.isAvailable()&&e.push(b)})}}function ng(a){if(0=a.pf?(a.f("Secondary connection is healthy."),a.Bb=!0,a.D.sd(),a.D.start(),a.f("sending client ack on secondary"),a.D.send({t:"c",d:{t:"a",d:{}}}),a.f("Ending transmission on primary"),a.I.send({t:"c",d:{t:"n",d:{}}}),a.Xc=a.D,ug(a)):(a.f("sending ping on secondary."),a.D.send({t:"c",d:{t:"p",d:{}}}))}og.prototype.wd=function(a){wg(this);this.te(a)};function wg(a){a.Bb||(a.xe--,0>=a.xe&&(a.f("Primary connection is healthy."),a.Bb=!0,a.I.sd()))} +function tg(a,b){a.D=new b("c:"+a.id+":"+a.Le++,a.L,a.qf);a.pf=b.responsesRequiredToBeHealthy||0;a.D.open(qg(a,a.D),rg(a,a.D));hc(function(){a.D&&(a.f("Timed out trying to upgrade."),a.D.close())},Math.floor(6E4))}function sg(a,b,c){a.f("Realtime connection established.");a.I=b;a.Ua=1;a.Lc&&(a.Lc(c,a.qf),a.Lc=null);0===a.xe?(a.f("Primary connection is healthy."),a.Bb=!0):hc(function(){xg(a)},Math.floor(5E3))} +function xg(a){a.Bb||1!==a.Ua||(a.f("sending ping on primary."),zg(a,{t:"c",d:{t:"p",d:{}}}))}function zg(a,b){if(1!==a.Ua)throw"Connection is not connected";a.Xc.send(b)}og.prototype.close=function(){2!==this.Ua&&(this.f("Closing realtime connection."),this.Ua=2,vg(this),this.ia&&(this.ia(),this.ia=null))};function vg(a){a.f("Shutting down all connections");a.I&&(a.I.close(),a.I=null);a.D&&(a.D.close(),a.D=null);a.md&&(clearTimeout(a.md),a.md=null)};function Ag(a,b,c,d,e,f){this.id=Bg++;this.f=Tb("p:"+this.id+":");this.qd={};this.$={};this.pa=[];this.Oc=0;this.Kc=[];this.ma=!1;this.Sa=1E3;this.td=3E5;this.Gb=b;this.Jc=c;this.ue=d;this.L=a;this.ob=this.Fa=this.Cb=this.ze=null;this.$c=e;this.de=!1;this.ke=0;if(f)throw Error("Auth override specified in options, but not supported on non Node.js platforms");this.Vd=f;this.ub=null;this.Mb=!1;this.Gd={};this.ig=0;this.Re=!0;this.Ac=this.me=null;Cg(this,0);Mc.Vb().gc("visible",this.Zf,this);-1===a.host.indexOf("fblocal")&& +Lc.Vb().gc("online",this.Yf,this)}var Bg=0,Dg=0;g=Ag.prototype;g.ua=function(a,b,c){var d=++this.ig;a={r:d,a:a,b:b};this.f(x(a));D(this.ma,"sendRequest call when we're not connected not allowed.");this.Fa.ua(a);c&&(this.Gd[d]=c)}; +g.$e=function(a,b,c,d){var e=a.ja(),f=a.path.toString();this.f("Listen called for "+f+" "+e);this.$[f]=this.$[f]||{};D(qf(a.m)||!T(a.m),"listen() called for non-default but complete query");D(!this.$[f][e],"listen() called twice for same path/queryId.");a={G:d,ld:b,eg:a,tag:c};this.$[f][e]=a;this.ma&&Eg(this,a)}; +function Eg(a,b){var c=b.eg,d=c.path.toString(),e=c.ja();a.f("Listen on "+d+" for "+e);var f={p:d};b.tag&&(f.q=pf(c.m),f.t=b.tag);f.h=b.ld();a.ua("q",f,function(f){var k=f.d,m=f.s;if(k&&"object"===typeof k&&eb(k,"w")){var l=w(k,"w");ea(l)&&0<=xa(l,"no_index")&&J("Using an unspecified index. Consider adding "+('".indexOn": "'+c.m.g.toString()+'"')+" at "+c.path.toString()+" to your security rules for better performance")}(a.$[d]&&a.$[d][e])===b&&(a.f("listen response",f),"ok"!==m&&Fg(a,d,e),b.G&&b.G(m, +k))})}g.kf=function(a){this.ob=a;this.f("Auth token refreshed");this.ob?Gg(this):this.ma&&this.ua("unauth",{},function(){});if(a&&40===a.length||kc(a))this.f("Admin auth credential detected. Reducing max reconnect time."),this.td=3E4};function Gg(a){if(a.ma&&a.ob){var b=a.ob,c=jc(b)?"auth":"gauth",d={cred:b};null===a.Vd?d.noauth=!0:"object"===typeof a.Vd&&(d.authvar=a.Vd);a.ua(c,d,function(c){var d=c.s;c=c.d||"error";a.ob===b&&("ok"===d?a.ke=0:Hg(a,d,c))})}} +g.uf=function(a,b){var c=a.path.toString(),d=a.ja();this.f("Unlisten called for "+c+" "+d);D(qf(a.m)||!T(a.m),"unlisten() called for non-default but complete query");if(Fg(this,c,d)&&this.ma){var e=pf(a.m);this.f("Unlisten on "+c+" for "+d);c={p:c};b&&(c.q=e,c.t=b);this.ua("n",c)}};g.re=function(a,b,c){this.ma?Ig(this,"o",a,b,c):this.Kc.push({we:a,action:"o",data:b,G:c})};g.cf=function(a,b,c){this.ma?Ig(this,"om",a,b,c):this.Kc.push({we:a,action:"om",data:b,G:c})}; +g.xd=function(a,b){this.ma?Ig(this,"oc",a,null,b):this.Kc.push({we:a,action:"oc",data:null,G:b})};function Ig(a,b,c,d,e){c={p:c,d:d};a.f("onDisconnect "+b,c);a.ua(b,c,function(a){e&&setTimeout(function(){e(a.s,a.d)},Math.floor(0))})}g.put=function(a,b,c,d){Jg(this,"p",a,b,c,d)};g.af=function(a,b,c,d){Jg(this,"m",a,b,c,d)};function Jg(a,b,c,d,e,f){d={p:c,d:d};n(f)&&(d.h=f);a.pa.push({action:b,mf:d,G:e});a.Oc++;b=a.pa.length-1;a.ma?Kg(a,b):a.f("Buffering put: "+c)} +function Kg(a,b){var c=a.pa[b].action,d=a.pa[b].mf,e=a.pa[b].G;a.pa[b].fg=a.ma;a.ua(c,d,function(d){a.f(c+" response",d);delete a.pa[b];a.Oc--;0===a.Oc&&(a.pa=[]);e&&e(d.s,d.d)})}g.ye=function(a){this.ma&&(a={c:a},this.f("reportStats",a),this.ua("s",a,function(a){"ok"!==a.s&&this.f("reportStats","Error sending stats: "+a.d)}))}; +g.wd=function(a){if("r"in a){this.f("from server: "+x(a));var b=a.r,c=this.Gd[b];c&&(delete this.Gd[b],c(a.b))}else{if("error"in a)throw"A server-side error has occurred: "+a.error;"a"in a&&(b=a.a,a=a.b,this.f("handleServerMessage",b,a),"d"===b?this.Gb(a.p,a.d,!1,a.t):"m"===b?this.Gb(a.p,a.d,!0,a.t):"c"===b?Lg(this,a.p,a.q):"ac"===b?Hg(this,a.s,a.d):"sd"===b?this.ze?this.ze(a):"msg"in a&&"undefined"!==typeof console&&console.log("FIREBASE: "+a.msg.replace("\n","\nFIREBASE: ")):Ub("Unrecognized action received from server: "+ +x(b)+"\nAre you using the latest client?"))}};g.Lc=function(a,b){this.f("connection ready");this.ma=!0;this.Ac=(new Date).getTime();this.ue({serverTimeOffset:a-(new Date).getTime()});this.Cb=b;if(this.Re){var c={};c["sdk.js."+firebase.SDK_VERSION.replace(/\./g,"-")]=1;pb()?c["framework.cordova"]=1:"object"===typeof navigator&&"ReactNative"===navigator.product&&(c["framework.reactnative"]=1);this.ye(c)}Mg(this);this.Re=!1;this.Jc(!0)}; +function Cg(a,b){D(!a.Fa,"Scheduling a connect when we're already connected/ing?");a.ub&&clearTimeout(a.ub);a.ub=setTimeout(function(){a.ub=null;Ng(a)},Math.floor(b))}g.Zf=function(a){a&&!this.Mb&&this.Sa===this.td&&(this.f("Window became visible. Reducing delay."),this.Sa=1E3,this.Fa||Cg(this,0));this.Mb=a};g.Yf=function(a){a?(this.f("Browser went online."),this.Sa=1E3,this.Fa||Cg(this,0)):(this.f("Browser went offline. Killing connection."),this.Fa&&this.Fa.close())}; +g.df=function(){this.f("data client disconnected");this.ma=!1;this.Fa=null;for(var a=0;af.Bc,"Stacking an older write on top of newer ones");n(h)||(h=!0);f.la.push({path:b,Ga:c,Zc:d,visible:h});h&&(f.S=uf(f.S,b,c));f.Bc=d;return e?ch(a,new ce(fe,b,c)):[]}function dh(a,b,c,d){var e=a.jb;D(d>e.Bc,"Stacking an older merge on top of newer ones");e.la.push({path:b,children:c,Zc:d,visible:!0});e.S=vf(e.S,b,c);e.Bc=d;c=xd(c);return ch(a,new ae(fe,b,c))} +function eh(a,b,c){c=c||!1;var d=Ef(a.jb,b);if(a.jb.Ed(b)){var e=R;null!=d.Ga?e=e.set(Q,!0):fb(d.children,function(a,b){e=e.set(new E(a),b)});return ch(a,new de(d.path,e,c))}return[]}function fh(a,b,c){c=xd(c);return ch(a,new ae(ie,b,c))}function gh(a,b,c,d){d=hh(a,d);if(null!=d){var e=ih(d);d=e.path;e=e.Hb;b=P(d,b);c=new ce(new he(!1,!0,e,!0),b,c);return jh(a,d,c)}return[]} +function kh(a,b,c,d){if(d=hh(a,d)){var e=ih(d);d=e.path;e=e.Hb;b=P(d,b);c=xd(c);c=new ae(new he(!1,!0,e,!0),b,c);return jh(a,d,c)}return[]} +ah.prototype.Nb=function(a,b){var c=a.path,d=null,e=!1;Fd(this.wa,c,function(a,b){var f=P(a,c);d=d||b.hb(f);e=e||null!=Yg(b)});var f=this.wa.get(c);f?(e=e||null!=Yg(f),d=d||f.hb(Q)):(f=new Xg,this.wa=this.wa.set(c,f));var h;null!=d?h=!0:(h=!1,d=L,Jd(this.wa.subtree(c),function(a,b){var c=b.hb(Q);c&&(d=d.T(a,c))}));var k=null!=$g(f,a);if(!k&&!T(a.m)){var m=lh(a);D(!(m in this.ic),"View does not exist, but we have a tag");var l=mh++;this.ic[m]=l;this.De["_"+l]=m}h=f.Nb(a,b,new If(c,this.jb),d,h);k|| +e||(f=$g(f,a),h=h.concat(nh(this,a,f)));return h}; +ah.prototype.kb=function(a,b,c){var d=a.path,e=this.wa.get(d),f=[];if(e&&("default"===a.ja()||null!=$g(e,a))){f=e.kb(a,b,c);e.e()&&(this.wa=this.wa.remove(d));e=f.hg;f=f.Kf;b=-1!==Ea(e,function(a){return T(a.m)});var h=Dd(this.wa,d,function(a,b){return null!=Yg(b)});if(b&&!h&&(d=this.wa.subtree(d),!d.e()))for(var d=oh(d),k=0;k=a)throw Error("Query.limitToFirst: First argument must be a positive integer.");if(this.m.xa)throw Error("Query.limitToFirst: Limit was already set (by another call to limit, limitToFirst, or limitToLast).");return new X(this.u,this.path,this.m.ne(a),this.Nc)}; +g.oe=function(a){y("Query.limitToLast",1,1,arguments.length);if(!ga(a)||Math.floor(a)!==a||0>=a)throw Error("Query.limitToLast: First argument must be a positive integer.");if(this.m.xa)throw Error("Query.limitToLast: Limit was already set (by another call to limit, limitToFirst, or limitToLast).");return new X(this.u,this.path,this.m.oe(a),this.Nc)}; +g.ag=function(a){y("Query.orderByChild",1,1,arguments.length);if("$key"===a)throw Error('Query.orderByChild: "$key" is invalid. Use Query.orderByKey() instead.');if("$priority"===a)throw Error('Query.orderByChild: "$priority" is invalid. Use Query.orderByPriority() instead.');if("$value"===a)throw Error('Query.orderByChild: "$value" is invalid. Use Query.orderByValue() instead.');Vd("Query.orderByChild",a);Sh(this,"Query.orderByChild");var b=new E(a);if(b.e())throw Error("Query.orderByChild: cannot pass in empty path. Use Query.orderByValue() instead."); +b=new pc(b);b=of(this.m,b);Qh(b);return new X(this.u,this.path,b,!0)};g.bg=function(){y("Query.orderByKey",0,0,arguments.length);Sh(this,"Query.orderByKey");var a=of(this.m,tc);Qh(a);return new X(this.u,this.path,a,!0)};g.cg=function(){y("Query.orderByPriority",0,0,arguments.length);Sh(this,"Query.orderByPriority");var a=of(this.m,H);Qh(a);return new X(this.u,this.path,a,!0)}; +g.dg=function(){y("Query.orderByValue",0,0,arguments.length);Sh(this,"Query.orderByValue");var a=of(this.m,wc);Qh(a);return new X(this.u,this.path,a,!0)};g.Nd=function(a,b){y("Query.startAt",0,2,arguments.length);Od("Query.startAt",a,this.path,!0);Ud("Query.startAt",b);var c=this.m.Nd(a,b);Rh(c);Qh(c);if(this.m.ka)throw Error("Query.startAt: Starting point was already set (by another call to startAt or equalTo).");n(a)||(b=a=null);return new X(this.u,this.path,c,this.Nc)}; +g.gd=function(a,b){y("Query.endAt",0,2,arguments.length);Od("Query.endAt",a,this.path,!0);Ud("Query.endAt",b);var c=this.m.gd(a,b);Rh(c);Qh(c);if(this.m.na)throw Error("Query.endAt: Ending point was already set (by another call to endAt or equalTo).");return new X(this.u,this.path,c,this.Nc)}; +g.If=function(a,b){y("Query.equalTo",1,2,arguments.length);Od("Query.equalTo",a,this.path,!1);Ud("Query.equalTo",b);if(this.m.ka)throw Error("Query.equalTo: Starting point was already set (by another call to startAt or equalTo).");if(this.m.na)throw Error("Query.equalTo: Ending point was already set (by another call to endAt or equalTo).");return this.Nd(a,b).gd(a,b)}; +g.toString=function(){y("Query.toString",0,0,arguments.length);for(var a=this.path,b="",c=a.Y;c0&&void 0!==arguments[0]?arguments[0]:e();return"function"!=typeof t[n]&&i("invalid-app-argument",{name:n}),t[n]()};return void 0!==o&&(0,f.deepExtend)(s,o),m[n]=s,h.prototype[n]=function(){for(var e=this._getService.bind(this,n),t=arguments.length,r=Array(t),o=0;o1&&void 0!==arguments[1]?arguments[1]:p;if(this.checkDestroyed_(),this.services_[e]||(this.services_[e]={}),!this.services_[e][t]){var n=t!==p?t:void 0,r=this.firebase_.INTERNAL.factories[e](this,this.extendApp.bind(this),n);this.services_[e][t]=r}return this.services_[e][t]}},{key:"extendApp",value:function(e){var t=this;(0,f.deepExtend)(this,e),e.INTERNAL&&e.INTERNAL.addAuthTokenListener&&(d.forEach(function(e){t.INTERNAL.addAuthTokenListener(e)}),d=[])}},{key:"checkDestroyed_",value:function(){this.isDeleted_&&i("app-deleted",{name:this.name_})}},{key:"name",get:function(){return this.checkDestroyed_(),this.name_}},{key:"options",get:function(){return this.checkDestroyed_(),this.options_}}]),e}();h.prototype.name&&h.prototype.options||h.prototype.delete||console.log("dc");var v={"no-app":"No Firebase App '{$name}' has been created - call Firebase App.initializeApp()","bad-app-name":"Illegal App name: '{$name}","duplicate-app":"Firebase App named '{$name}' already exists","app-deleted":"Firebase App named '{$name}' already deleted","duplicate-service":"Firebase service named '{$name}' already registered","sa-not-supported":"Initializing the Firebase SDK with a service account is only allowed in a Node.js environment. On client devices, you should instead initialize the SDK with an api key and auth domain","invalid-app-argument":"firebase.{$name}() takes either no argument or a Firebase App instance."},m=new s.ErrorFactory("app","Firebase",v)},32:function(e,t,n){"use strict";function r(e){return o(void 0,e)}function o(e,t){if(!(t instanceof Object))return t;switch(t.constructor){case Date:return new Date(t.getTime());case Object:void 0===e&&(e={});break;case Array:e=[];break;default:return t}for(var n in t)t.hasOwnProperty(n)&&(e[n]=o(e[n],t[n]));return e}function i(e,t,n){e[t]=n}Object.defineProperty(t,"__esModule",{value:!0}),t.deepCopy=r,t.deepExtend=o,t.patchProperty=i},4:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(27),o=(0,r.createFirebaseNamespace)();t.default=o,e.exports=t.default},51:function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(f===setTimeout)return setTimeout(e,0);if((f===n||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function i(e){if(l===clearTimeout)return clearTimeout(e);if((l===r||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function a(){v&&d&&(v=!1,d.length?h=d.concat(h):m=-1,h.length&&c())}function c(){if(!v){var e=o(a);v=!0;for(var t=h.length;t;){for(d=h,h=[];++m1)for(var n=1;n=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},r(53),n.setImmediate=setImmediate,n.clearImmediate=clearImmediate},9: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){var t=a;return a=e,t}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n"}),o=this.serviceName+": "+o+" ("+r+").";var i=new c(r,o);for(var a in t)t.hasOwnProperty(a)&&"_"!==a.slice(-1)&&(i[a]=t[a]);return i}}]),e}()}})}(); + +(function(){var h,aa=aa||{},k=this,m=function(a){return"string"==typeof a},ba=function(a){return"boolean"==typeof a},ca=function(a){return"number"==typeof a},da=function(){},ea=function(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array"; +if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if("function"==b&&"undefined"==typeof a.call)return"object";return b},fa=function(a){return null===a},ga=function(a){return"array"==ea(a)},ha=function(a){var b=ea(a);return"array"==b||"object"==b&&"number"==typeof a.length},p=function(a){return"function"==ea(a)},ia=function(a){var b=typeof a;return"object"==b&&null!=a||"function"== +b},ja=function(a,b,c){return a.call.apply(a.bind,arguments)},ka=function(a,b,c){if(!a)throw Error();if(2")&&(a=a.replace(sa,">"));-1!=a.indexOf('"')&&(a=a.replace(ta,"""));-1!=a.indexOf("'")&& +(a=a.replace(ua,"'"));-1!=a.indexOf("\x00")&&(a=a.replace(va,"�"));return a},qa=/&/g,ra=//g,ta=/"/g,ua=/'/g,va=/\x00/g,pa=/[\x00&<>"']/,u=function(a,b){return-1!=a.indexOf(b)},xa=function(a,b){return ab?1:0};var ya=function(a,b){b.unshift(a);t.call(this,na.apply(null,b));b.shift()};r(ya,t);ya.prototype.name="AssertionError"; +var za=function(a,b,c,d){var e="Assertion failed";if(c){e+=": "+c;var f=d}else a&&(e+=": "+a,f=b);throw new ya(""+e,f||[]);},v=function(a,b,c){a||za("",null,b,Array.prototype.slice.call(arguments,2))},Aa=function(a,b){throw new ya("Failure"+(a?": "+a:""),Array.prototype.slice.call(arguments,1));},Ba=function(a,b,c){ca(a)||za("Expected number but got %s: %s.",[ea(a),a],b,Array.prototype.slice.call(arguments,2));return a},Ca=function(a,b,c){m(a)||za("Expected string but got %s: %s.",[ea(a),a],b,Array.prototype.slice.call(arguments, +2))},Da=function(a,b,c){p(a)||za("Expected function but got %s: %s.",[ea(a),a],b,Array.prototype.slice.call(arguments,2))};var Ea=Array.prototype.indexOf?function(a,b,c){v(null!=a.length);return Array.prototype.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(m(a))return m(b)&&1==b.length?a.indexOf(b,c):-1;for(;cb?null:m(a)?a.charAt(b):a[b]},Ka=function(a,b){return 0<=Ea(a,b)},Ma=function(a,b){b=Ea(a,b);var c;(c=0<=b)&&La(a,b);return c},La=function(a,b){v(null!=a.length);return 1==Array.prototype.splice.call(a,b,1).length},Na=function(a,b){var c=0;Fa(a,function(d,e){b.call(void 0,d,e,a)&&La(a,e)&&c++})},Oa=function(a){return Array.prototype.concat.apply([],arguments)}, +Pa=function(a){var b=a.length;if(0parseFloat(mb)){kb=String(ob);break a}}kb=mb} +var pb=kb,cb={},z=function(a){return db(a,function(){for(var b=0,c=oa(String(pb)).split("."),d=oa(String(a)).split("."),e=Math.max(c.length,d.length),f=0;0==b&&f>4);64!=g&&(b(f<<4&240|g>>2),64!=l&&b(g<<6&192|l))}},wb=function(){if(!sb){sb={};tb={};for(var a=0;65>a;a++)sb[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a), +tb[sb[a]]=a,62<=a&&(tb["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.".charAt(a)]=a)}};var xb=function(){this.Ea=-1};var Ab=function(a,b){this.Ea=64;this.kc=k.Uint8Array?new Uint8Array(this.Ea):Array(this.Ea);this.Qc=this.jb=0;this.i=[];this.uf=a;this.ge=b;this.Uf=k.Int32Array?new Int32Array(64):Array(64);void 0!==yb||(yb=k.Int32Array?new Int32Array(zb):zb);this.reset()},yb;r(Ab,xb);for(var Bb=[],Cb=0;63>Cb;Cb++)Bb[Cb]=0;var Db=Oa(128,Bb);Ab.prototype.reset=function(){this.Qc=this.jb=0;this.i=k.Int32Array?new Int32Array(this.ge):Pa(this.ge)}; +var Eb=function(a){var b=a.kc;v(b.length==a.Ea);for(var c=a.Uf,d=0,e=0;eb;b++){d=c[b-15]|0;e=c[b-2]|0;e=(e>>>17|e<<15)^(e>>>19|e<<13)^e>>>10;var f=(c[b-16]|0)+((d>>>7|d<<25)^(d>>>18|d<<14)^d>>>3)|0;var g=(c[b-7]|0)+e|0;c[b]=f+g|0}var d=a.i[0]|0,e=a.i[1]|0,l=a.i[2]|0,n=a.i[3]|0,C=a.i[4]|0,lb=a.i[5]|0,Tb=a.i[6]|0;f=a.i[7]|0;for(b=0;64>b;b++){var Mh=((d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10))+(d&e^d&l^e&l)|0;g=C&lb^~C&Tb;f=f+ +((C>>>6|C<<26)^(C>>>11|C<<21)^(C>>>25|C<<7))|0;g=g+(yb[b]|0)|0;g=f+(g+(c[b]|0)|0)|0;f=Tb;Tb=lb;lb=C;C=n+g|0;n=l;l=e;e=d;d=g+Mh|0}a.i[0]=a.i[0]+d|0;a.i[1]=a.i[1]+e|0;a.i[2]=a.i[2]+l|0;a.i[3]=a.i[3]+n|0;a.i[4]=a.i[4]+C|0;a.i[5]=a.i[5]+lb|0;a.i[6]=a.i[6]+Tb|0;a.i[7]=a.i[7]+f|0}; +Ab.prototype.update=function(a,b){void 0===b&&(b=a.length);var c=0,d=this.jb;if(m(a))for(;c=e&&e==(e|0)))throw Error("message must be a byte array");this.kc[d++]=e;d==this.Ea&&(Eb(this),d=0)}else throw Error("message must be string or array");this.jb=d;this.Qc+=b}; +Ab.prototype.digest=function(){var a=[],b=8*this.Qc;56>this.jb?this.update(Db,56-this.jb):this.update(Db,this.Ea-(this.jb-56));for(var c=63;56<=c;c--)this.kc[c]=b&255,b/=256;Eb(this);for(c=b=0;c>d&255;return a}; +var zb=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804, +4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];var Gb=function(){Ab.call(this,8,Fb)};r(Gb,Ab);var Fb=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];var Hb=function(){this.Ha=this.Ha;this.Cc=this.Cc};Hb.prototype.Ha=!1;Hb.prototype.isDisposed=function(){return this.Ha};Hb.prototype.gb=function(){if(this.Cc)for(;this.Cc.length;)this.Cc.shift()()};var Ib=!y||9<=Number(qb),Jb=y&&!z("9");!ib||z("528");hb&&z("1.9b")||y&&z("8")||eb&&z("9.5")||ib&&z("528");hb&&!z("8")||y&&z("9");var Kb=function(a,b){this.type=a;this.currentTarget=this.target=b;this.defaultPrevented=this.pb=!1;this.qe=!0};Kb.prototype.preventDefault=function(){this.defaultPrevented=!0;this.qe=!1};var Lb=function(a,b){Kb.call(this,a?a.type:"");this.relatedTarget=this.currentTarget=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=this.offsetY=this.offsetX=0;this.key="";this.charCode=this.keyCode=0;this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.Ia=this.state=null;a&&this.init(a,b)};r(Lb,Kb); +Lb.prototype.init=function(a,b){var c=this.type=a.type,d=a.changedTouches?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.currentTarget=b;if(b=a.relatedTarget){if(hb){a:{try{bb(b.nodeName);var e=!0;break a}catch(f){}e=!1}e||(b=null)}}else"mouseover"==c?b=a.fromElement:"mouseout"==c&&(b=a.toElement);this.relatedTarget=b;null===d?(this.offsetX=ib||void 0!==a.offsetX?a.offsetX:a.layerX,this.offsetY=ib||void 0!==a.offsetY?a.offsetY:a.layerY,this.clientX=void 0!==a.clientX?a.clientX:a.pageX, +this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0):(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0);this.button=a.button;this.keyCode=a.keyCode||0;this.key=a.key||"";this.charCode=a.charCode||("keypress"==c?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.state=a.state;this.Ia=a;a.defaultPrevented&& +this.preventDefault()};Lb.prototype.preventDefault=function(){Lb.Id.preventDefault.call(this);var a=this.Ia;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,Jb)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};Lb.prototype.Ze=function(){return this.Ia};var Mb="closure_listenable_"+(1E6*Math.random()|0),Nb=0;var Ob=function(a,b,c,d,e){this.listener=a;this.Gc=null;this.src=b;this.type=c;this.capture=!!d;this.qc=e;this.key=++Nb;this.tb=this.jc=!1},Pb=function(a){a.tb=!0;a.listener=null;a.Gc=null;a.src=null;a.qc=null};var Qb=function(a){this.src=a;this.J={};this.ec=0};Qb.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.J[f];a||(a=this.J[f]=[],this.ec++);var g=Rb(a,b,d,e);-1d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.currentTarget;e;e=e.parentNode)d.push(e);for(var e=a.type,f=d.length-1;!b.pb&&0<=f;f--)b.currentTarget=d[f],a=ic(d[f],e,!0,b),c=c&&a;for(f=0;!b.pb&&f>>0),Yb=function(a){v(a,"Listener can not be null.");if(p(a))return a;v(a.handleEvent,"An object listener must have handleEvent method.");a[jc]||(a[jc]=function(b){return a.handleEvent(b)});return a[jc]};var kc=/^[+a-zA-Z0-9_.!#$%&'*\/=?^`{|}~-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,63}$/;var mc=function(){this.Mc="";this.Ge=lc};mc.prototype.Ib=!0;mc.prototype.Fb=function(){return this.Mc};mc.prototype.toString=function(){return"Const{"+this.Mc+"}"};var nc=function(a){if(a instanceof mc&&a.constructor===mc&&a.Ge===lc)return a.Mc;Aa("expected object of type Const, got '"+a+"'");return"type_error:Const"},lc={},oc=function(a){var b=new mc;b.Mc=a;return b};oc("");var qc=function(){this.Fc="";this.He=pc};qc.prototype.Ib=!0;qc.prototype.Fb=function(){return this.Fc};qc.prototype.toString=function(){return"TrustedResourceUrl{"+this.Fc+"}"};var rc=function(a){if(a instanceof qc&&a.constructor===qc&&a.He===pc)return a.Fc;Aa("expected object of type TrustedResourceUrl, got '"+a+"' of type "+ea(a));return"type_error:TrustedResourceUrl"},pc={};var tc=function(){this.qa="";this.Fe=sc};tc.prototype.Ib=!0;tc.prototype.Fb=function(){return this.qa};tc.prototype.toString=function(){return"SafeUrl{"+this.qa+"}"}; +var uc=function(a){if(a instanceof tc&&a.constructor===tc&&a.Fe===sc)return a.qa;Aa("expected object of type SafeUrl, got '"+a+"' of type "+ea(a));return"type_error:SafeUrl"},vc=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i,xc=function(a){if(a instanceof tc)return a;a=a.Ib?a.Fb():String(a);vc.test(a)||(a="about:invalid#zClosurez");return wc(a)},sc={},wc=function(a){var b=new tc;b.qa=a;return b};wc("about:blank");var Ac=function(a){var b=[];yc(new zc,a,b);return b.join("")},zc=function(){this.Hc=void 0},yc=function(a,b,c){if(null==b)c.push("null");else{if("object"==typeof b){if(ga(b)){var d=b;b=d.length;c.push("[");for(var e="",f=0;f");f=f.join("")}f=e.createElement(f);g&&(m(g)?f.className=g:ga(g)?f.className=g.join(" "):gd(f,g));2=b.$c&&b.cancel())}this.le?this.le.call(this.Ud,this):this.Fd=!0;this.hb||Gd(this,new Hd)}};Fd.prototype.Sd=function(a,b){this.Zc=!1;Id(this,a,b)}; +var Id=function(a,b,c){a.hb=!0;a.sa=c;a.Gb=!b;Jd(a)},Ld=function(a){if(a.hb){if(!a.Fd)throw new Kd;a.Fd=!1}};Fd.prototype.callback=function(a){Ld(this);Md(a);Id(this,!0,a)}; +var Gd=function(a,b){Ld(a);Md(b);Id(a,!1,b)},Md=function(a){v(!(a instanceof Fd),"An execution sequence may not be initiated with a blocking Deferred.")},Qd=function(a){var b=Nd("https://apis.google.com/js/client.js?onload="+Od);Pd(b,null,a,void 0)},Pd=function(a,b,c,d){v(!a.Ld,"Blocking Deferreds can not be re-used");a.Jc.push([b,c,d]);a.hb&&Jd(a)};Fd.prototype.then=function(a,b,c){var d,e,f=new A(function(a,b){d=a;e=b});Pd(this,d,function(a){a instanceof Hd?f.cancel():e(a)});return f.then(a,b,c)}; +kd(Fd); +var Rd=function(a){return Ha(a.Jc,function(a){return p(a[1])})},Jd=function(a){if(a.Rc&&a.hb&&Rd(a)){var b=a.Rc,c=Sd[b];c&&(k.clearTimeout(c.Hb),delete Sd[b]);a.Rc=0}a.u&&(a.u.$c--,delete a.u);for(var b=a.sa,d=c=!1;a.Jc.length&&!a.Zc;){var e=a.Jc.shift(),f=e[0],g=e[1],e=e[2];if(f=a.Gb?g:f)try{var l=f.call(e||a.Ud,b);void 0!==l&&(a.Gb=a.Gb&&(l==b||l instanceof Error),a.sa=b=l);if(ld(b)||"function"===typeof k.Promise&&b instanceof k.Promise)d=!0,a.Zc=!0}catch(n){b=n,a.Gb=!0,Rd(a)||(c=!0)}}a.sa=b;d&& +(l=q(a.Sd,a,!0),d=q(a.Sd,a,!1),b instanceof Fd?(Pd(b,l,d),b.Ld=!0):b.then(l,d));c&&(b=new Td(b),Sd[b.Hb]=b,a.Rc=b.Hb)},Kd=function(){t.call(this)};r(Kd,t);Kd.prototype.message="Deferred has already fired";Kd.prototype.name="AlreadyCalledError";var Hd=function(){t.call(this)};r(Hd,t);Hd.prototype.message="Deferred was canceled";Hd.prototype.name="CanceledError";var Td=function(a){this.Hb=k.setTimeout(q(this.Qf,this),0);this.X=a}; +Td.prototype.Qf=function(){v(Sd[this.Hb],"Cannot throw an error that is not scheduled.");delete Sd[this.Hb];throw this.X;};var Sd={};var Nd=function(a){var b=new qc;b.Fc=a;return Ud(b)},Ud=function(a){var b={},c=b.document||document,d=rc(a),e=document.createElement("SCRIPT"),f={re:e,dc:void 0},g=new Fd(Vd,f),l=null,n=null!=b.timeout?b.timeout:5E3;0=fe(this).value)for(p(b)&&(b=b()),a=new Zd(a,String(b),this.tf),c&&(a.Wd=c),c="log:"+a.sf,k.console&&(k.console.timeStamp?k.console.timeStamp(c):k.console.markTimeline&&k.console.markTimeline(c)),k.msWriteProfilerMark&&k.msWriteProfilerMark(c),c=this;c;){var d=c,e=a;if(d.ce)for(var f=0;b=d.ce[f];f++)b(e);c=c.getParent()}}; +var ge={},he=null,ie=function(a){he||(he=new ae(""),ge[""]=he,he.te(de));var b;if(!(b=ge[a])){b=new ae(a);var c=a.lastIndexOf("."),d=a.substr(c+1),c=ie(a.substr(0,c));c.ad||(c.ad={});c.ad[d]=b;b.u=c;ge[a]=b}return b};var je=function(){Hb.call(this);this.ja=new Qb(this);this.Je=this;this.rd=null};r(je,Hb);je.prototype[Mb]=!0;h=je.prototype;h.addEventListener=function(a,b,c,d){Xb(this,a,b,c,d)};h.removeEventListener=function(a,b,c,d){fc(this,a,b,c,d)}; +h.dispatchEvent=function(a){ke(this);var b=this.rd;if(b){var c=[];for(var d=1;b;b=b.rd)c.push(b),v(1E3>++d,"infinite loop")}b=this.Je;d=a.type||a;if(m(a))a=new Kb(a,b);else if(a instanceof Kb)a.target=a.target||b;else{var e=a;a=new Kb(d,b);ab(a,e)}var e=!0;if(c)for(var f=c.length-1;!a.pb&&0<=f;f--){var g=a.currentTarget=c[f];e=le(g,d,!0,a)&&e}a.pb||(g=a.currentTarget=b,e=le(g,d,!0,a)&&e,a.pb||(e=le(g,d,!1,a)&&e));if(c)for(f=0;!a.pb&&f2*this.o&&pe(this),!0):!1};var pe=function(a){var b,c;if(a.o!=a.A.length){for(b=c=0;c=d.A.length)throw me;var e=d.A[b++];return a?e:d.ea[e]};return e};var qe=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)};var re=function(a){if(a.da&&"function"==typeof a.da)return a.da();if(m(a))return a.split("");if(ha(a)){for(var b=[],c=a.length,d=0;db)throw Error("Bad port number "+b);a.nb=b}else a.nb=null},Pe=function(a,b,c){H(a);a.za=c?Re(b,!0):b},Qe=function(a,b,c){H(a);b instanceof I?(a.ba=b,a.ba.Dd(a.Z)):(c||(b=Se(b,Xe)),a.ba=new I(b,0,a.Z))},J=function(a,b,c){H(a);a.ba.set(b,c)},Ye=function(a,b){return a.ba.get(b)}; +G.prototype.removeParameter=function(a){H(this);this.ba.remove(a);return this};var H=function(a){if(a.nf)throw Error("Tried to modify a read-only Uri");};G.prototype.Dd=function(a){this.Z=a;this.ba&&this.ba.Dd(a);return this}; +var Ze=function(a){return a instanceof G?a.clone():new G(a,void 0)},$e=function(a,b){var c=new G(null,void 0);Me(c,"https");a&&Ne(c,a);b&&Pe(c,b);return c},Re=function(a,b){return a?b?decodeURI(a.replace(/%25/g,"%2525")):decodeURIComponent(a):""},Se=function(a,b,c){return m(a)?(a=encodeURI(a).replace(b,af),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),a):null},af=function(a){a=a.charCodeAt(0);return"%"+(a>>4&15).toString(16)+(a&15).toString(16)},Te=/[#\/\?@]/g,Ve=/[\#\?:]/g,Ue=/[\#\?]/g,Xe=/[\#\?@]/g, +We=/#/g,I=function(a,b,c){this.o=this.j=null;this.P=a||null;this.Z=!!c},bf=function(a){a.j||(a.j=new oe,a.o=0,a.P&&xe(a.P,function(b,c){a.add(decodeURIComponent(b.replace(/\+/g," ")),c)}))},df=function(a){var b=se(a);if("undefined"==typeof b)throw Error("Keys are undefined");var c=new I(null,0,void 0);a=re(a);for(var d=0;da?!1:!y||!qb||9',Ca(nc(a),"must provide justification"),v(!/^[\s\xa0]*$/.test(nc(a)),"must provide non-empty justification"),g.document.write(cd((new bd).jf(d))), +g.document.close())):g=a.open(uc(b),c,g);if(g)try{g.focus()}catch(l){}return g},of=function(a){return new A(function(b){var c=function(){ve(2E3).then(function(){if(!a||a.closed)b();else return c()})};return c()})},pf=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,qf=function(){var a=null;return(new A(function(b){"complete"==k.document.readyState?b():(a=function(){b()},dc(window,"load",a))})).f(function(b){fc(window,"load",a);throw b;})},sf=function(){return rf(void 0)?qf().then(function(){return new A(function(a, +b){var c=k.document,d=setTimeout(function(){b(Error("Cordova framework is not ready."))},1E3);c.addEventListener("deviceready",function(){clearTimeout(d);a()},!1)})}):D(Error("Cordova must run in an Android or iOS file scheme."))},rf=function(a){a=a||K();return!("file:"!==tf()||!a.toLowerCase().match(/iphone|ipad|ipod|android/))},uf=function(){var a=k.window;try{return!(!a||a==a.top)}catch(b){return!1}},vf=function(){return firebase.INTERNAL.hasOwnProperty("reactNative")?"ReactNative":firebase.INTERNAL.hasOwnProperty("node")? +"Node":"Browser"},wf=function(){var a=vf();return"ReactNative"===a||"Node"===a},jf=function(a){var b=a.toLowerCase();if(u(b,"opera/")||u(b,"opr/")||u(b,"opios/"))return"Opera";if(u(b,"iemobile"))return"IEMobile";if(u(b,"msie")||u(b,"trident/"))return"IE";if(u(b,"edge/"))return"Edge";if(u(b,"firefox/"))return"Firefox";if(u(b,"silk/"))return"Silk";if(u(b,"blackberry"))return"Blackberry";if(u(b,"webos"))return"Webos";if(!u(b,"safari/")||u(b,"chrome/")||u(b,"crios/")||u(b,"android"))if(!u(b,"chrome/")&& +!u(b,"crios/")||u(b,"edge/")){if(u(b,"android"))return"Android";if((a=a.match(/([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/))&&2==a.length)return a[1]}else return"Chrome";else return"Safari";return"Other"},xf=function(a){var b=vf();return("Browser"===b?jf(K()):b)+"/JsCore/"+a},K=function(){return k.navigator&&k.navigator.userAgent||""},L=function(a,b){a=a.split(".");b=b||k;for(var c=0;cb)throw Error("Short delay should be less than long delay!"); +this.Nf=a;this.rf=b;a=c||K();d=d||vf();this.mf=lf(a)||"ReactNative"===d};If.prototype.get=function(){return this.mf?this.rf:this.Nf}; +var Jf=function(){var a=k.document;return a&&"undefined"!==typeof a.visibilityState?"visible"==a.visibilityState:!0},Kf=function(){var a=k.document,b=null;return Jf()||!a?B():(new A(function(c){b=function(){Jf()&&(a.removeEventListener("visibilitychange",b,!1),c())};a.addEventListener("visibilitychange",b,!1)})).f(function(c){a.removeEventListener("visibilitychange",b,!1);throw c;})};var Lf={};var Mf;try{var Nf={};Object.defineProperty(Nf,"abcd",{configurable:!0,enumerable:!0,value:1});Object.defineProperty(Nf,"abcd",{configurable:!0,enumerable:!0,value:2});Mf=2==Nf.abcd}catch(a){Mf=!1} +var M=function(a,b,c){Mf?Object.defineProperty(a,b,{configurable:!0,enumerable:!0,value:c}):a[b]=c},Of=function(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&M(a,c,b[c])},Pf=function(a){var b={};Of(b,a);return b},Qf=function(a){var b={},c;for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b},Rf=function(a,b){if(!b||!b.length)return!0;if(!a)return!1;for(var c=0;c Auth section -> Sign in method tab.",a):"http"==d||"https"==d?c=na("This domain (%s) is not authorized to run this operation. Add it to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.",a):b= +"operation-not-supported-in-this-environment";N.call(this,b,c)};r($f,N);var ag=function(a){this.qf=a.sub;ma();this.mc=a.email||null};var bg=function(a,b){return a.then(function(a){if(a.idToken){a:{var c=a.idToken.split(".");if(3==c.length){for(var c=c[1],e=(4-c.length%4)%4,f=0;fa.Kd&&(a.Oa=a.Kd);return b},li=function(a,b){a.stop();a.mb=ve(mi(a,b)).then(function(){return a.Gf?B():Kf()}).then(function(){return a.yf()}).then(function(){li(a,!0)}).f(function(b){a.Ff(b)&&li(a,!1)})};ki.prototype.stop=function(){this.mb&&(this.mb.cancel(),this.mb=null)};var si=function(a){var b={};b["facebook.com"]=ni;b["google.com"]=oi;b["github.com"]=pi;b["twitter.com"]=qi;var c=a&&a.providerId;return c?b[c]?new b[c](a):new ri(a):null},ri=function(a){var b=Ef(a.rawUserInfo||"{}");a=a.providerId;if(!a)throw Error("Invalid additional user info!");M(this,"profile",Sf(b||{}));M(this,"providerId",a)},ni=function(a){ri.call(this,a);if("facebook.com"!=this.providerId)throw Error("Invalid provider id!");};r(ni,ri); +var pi=function(a){ri.call(this,a);if("github.com"!=this.providerId)throw Error("Invalid provider id!");M(this,"username",this.profile&&this.profile.login||null)};r(pi,ri);var oi=function(a){ri.call(this,a);if("google.com"!=this.providerId)throw Error("Invalid provider id!");};r(oi,ri);var qi=function(a){ri.call(this,a);if("twitter.com"!=this.providerId)throw Error("Invalid provider id!");M(this,"username",a.screenName||null)};r(qi,ri);var ti=function(a,b,c,d){this.ke=a;this.Bd=b;this.Hf=c;this.Zb=d;this.S={};gi||(gi=new fi);a=gi;try{if(ef()){Xh||(Xh=new Wh("firebaseLocalStorageDb","firebaseLocalStorage","fbase_key","value",1));var e=Xh}else e=new a.Vd.U;this.Sa=e}catch(f){this.Sa=new Qh,this.Zb=!0}try{this.Nc=new a.Vd.Jd}catch(f){this.Nc=new Qh}this.Hd=q(this.we,this);this.$={}},ui,vi=function(){ui||(ui=new ti("firebase",":",!Ff(K())&&uf()?!0:!1,Bf()));return ui};h=ti.prototype; +h.Y=function(a,b){return this.ke+this.Bd+a.name+(b?this.Bd+b:"")};h.get=function(a,b){return(a.U?this.Sa:this.Nc).get(this.Y(a,b))};h.remove=function(a,b){b=this.Y(a,b);a.U&&!this.Zb&&(this.$[b]=null);return(a.U?this.Sa:this.Nc).remove(b)};h.set=function(a,b,c){var d=this.Y(a,c),e=this,f=a.U?this.Sa:this.Nc;return f.set(d,b).then(function(){return f.get(d)}).then(function(b){a.U&&!this.Zb&&(e.$[d]=b)})}; +h.addListener=function(a,b,c){a=this.Y(a,b);this.Zb||(this.$[a]=k.localStorage.getItem(a));Xa(this.S)&&this.Gd();this.S[a]||(this.S[a]=[]);this.S[a].push(c)};h.removeListener=function(a,b,c){a=this.Y(a,b);this.S[a]&&(Na(this.S[a],function(a){return a==c}),0==this.S[a].length&&delete this.S[a]);Xa(this.S)&&this.Lc()};h.Gd=function(){this.Sa.eb(this.Hd);this.Zb||ef()||wi(this)}; +var wi=function(a){xi(a);a.nd=setInterval(function(){for(var b in a.S){var c=k.localStorage.getItem(b),d=a.$[b];c!=d&&(a.$[b]=c,c=new Lb({type:"storage",key:b,target:window,oldValue:d,newValue:c,oe:!0}),a.we(c))}},1E3)},xi=function(a){a.nd&&(clearInterval(a.nd),a.nd=null)};ti.prototype.Lc=function(){this.Sa.Va(this.Hd);xi(this)}; +ti.prototype.we=function(a){if(a&&a.Ze){var b=a.Ia.key;if(0==b.indexOf(this.ke+this.Bd)&&this.S[b]){"undefined"!==typeof a.Ia.oe?this.Sa.Va(this.Hd):xi(this);if(this.Hf){var c=k.localStorage.getItem(b),d=a.Ia.newValue;if(d!==c)null!==d?k.localStorage.setItem(b,d):k.localStorage.removeItem(b);else if(this.$[b]===d&&"undefined"===typeof a.Ia.oe)return}this.$[b]=k.localStorage.getItem(b);this.Od(b)}}else w(a,q(this.Od,this))};ti.prototype.Od=function(a){this.S[a]&&w(this.S[a],function(a){a()})};var yi=function(a,b){this.v=a;this.l=b||vi()},zi={name:"authEvent",U:!0},Ai=function(a){return a.l.get(zi,a.v).then(function(a){return Zf(a)})};yi.prototype.cb=function(a){this.l.addListener(zi,this.v,a)};yi.prototype.Yb=function(a){this.l.removeListener(zi,this.v,a)};var Bi=function(a){this.l=a||vi()},Ci={name:"sessionId",U:!1};Bi.prototype.oc=function(a){return this.l.get(Ci,a)};var Di=function(a,b,c,d,e,f){this.B=a;this.m=b;this.w=c;this.Fa=d||null;this.xe=b+":"+c;this.If=new Bi;this.$d=new yi(this.xe);this.ld=null;this.na=[];this.lf=e||500;this.Bf=f||2E3;this.Jb=this.Dc=null},Ei=function(a){return new N("invalid-cordova-configuration",a)}; +Di.prototype.Na=function(){return this.Lb?this.Lb:this.Lb=sf().then(function(){if("function"!==typeof L("universalLinks.subscribe",k))throw Ei("cordova-universal-links-plugin is not installed");if("undefined"===typeof L("BuildInfo.packageName",k))throw Ei("cordova-plugin-buildinfo is not installed");if("function"!==typeof L("cordova.plugins.browsertab.openUrl",k))throw Ei("cordova-plugin-browsertab is not installed");if("function"!==typeof L("cordova.InAppBrowser.open",k))throw Ei("cordova-plugin-inappbrowser is not installed"); +},function(){throw new N("cordova-not-ready");})};var Fi=function(){for(var a=20,b=[];0this.Ja-3E4?this.ca?hj(this,{grant_type:"refresh_token",refresh_token:this.ca}):B(null):B({accessToken:this.Ca,expirationTime:this.Ja,refreshToken:this.ca})};var ij=function(a,b,c,d,e){Of(this,{uid:a,displayName:d||null,photoURL:e||null,email:c||null,providerId:b})},jj=function(a,b){Kb.call(this,a);for(var c in b)this[c]=b[c]};r(jj,Kb); +var S=function(a,b,c){this.G=[];this.m=a.apiKey;this.w=a.appName;this.B=a.authDomain||null;a=firebase.SDK_VERSION?xf(firebase.SDK_VERSION):null;this.g=new R(this.m,null,a);this.la=new ej(this.g);kj(this,b.idToken);gj(this.la,b);M(this,"refreshToken",this.la.ca);lj(this,c||{});je.call(this);this.Ec=!1;this.B&&Af()&&(this.s=$i(this.B,this.m,this.w));this.Kc=[];this.ma=null;this.ob=mj(this);this.xb=q(this.jd,this)};r(S,je);S.prototype.jd=function(){this.ob.mb&&(this.ob.stop(),this.ob.start())}; +var nj=function(a){try{return firebase.app(a.w).auth()}catch(b){throw new N("internal-error","No firebase.auth.Auth instance is available for the Firebase App '"+a.w+"'!");}},mj=function(a){return new ki(function(){return a.getIdToken(!0)},function(a){return a&&"auth/network-request-failed"==a.code?!0:!1},function(){var b=a.la.Ja-ma()-3E5;return 0this.Ka&&(this.Ka=0);0==this.Ka&&U(this)&&pj(U(this));this.removeAuthTokenListener(a)};h.addAuthTokenListener=function(a){var b=this;this.Da.push(a);this.b(this.ra.then(function(){b.Ga||Ka(b.Da,a)&&a(ek(b))}))};h.removeAuthTokenListener=function(a){Na(this.Da,function(b){return b==a})};var dk=function(a,b){a.wb.push(b);a.b(a.ra.then(function(){!a.Ga&&Ka(a.wb,b)&&a.gc!==a.getUid()&&(a.gc=a.getUid(),b(ek(a)))}))};h=T.prototype; +h["delete"]=function(){this.Ga=!0;for(var a=0;al||l>=fk.length)throw new N("internal-error","Argument validator received an unsupported number of arguments.");e=fk[l]+" argument "+(e.name?'"'+e.name+'" ':"")+"must be "+e.N+".";break a}e=null}}if(e)throw new N("argument-error",d+" failed: "+e);return b.apply(this,a)};for(var e in b)a[e]=b[e];for(e in b.prototype)a.prototype[e]= +b.prototype[e];return a},qk=function(a){a=a.split(".");return a[a.length-1]};Y(T.prototype,{applyActionCode:{name:"applyActionCode",a:[V("code")]},checkActionCode:{name:"checkActionCode",a:[V("code")]},confirmPasswordReset:{name:"confirmPasswordReset",a:[V("code"),V("newPassword")]},createUserWithEmailAndPassword:{name:"createUserWithEmailAndPassword",a:[V("email"),V("password")]},fetchProvidersForEmail:{name:"fetchProvidersForEmail",a:[V("email")]},getRedirectResult:{name:"getRedirectResult",a:[]},onAuthStateChanged:{name:"onAuthStateChanged",a:[X(W(),hk(),"nextOrObserver"), +hk("opt_error",!0),hk("opt_completed",!0)]},onIdTokenChanged:{name:"onIdTokenChanged",a:[X(W(),hk(),"nextOrObserver"),hk("opt_error",!0),hk("opt_completed",!0)]},sendPasswordResetEmail:{name:"sendPasswordResetEmail",a:[V("email")]},signInAndRetrieveDataWithCredential:{name:"signInAndRetrieveDataWithCredential",a:[mk()]},signInAnonymously:{name:"signInAnonymously",a:[]},signInWithCredential:{name:"signInWithCredential",a:[mk()]},signInWithCustomToken:{name:"signInWithCustomToken",a:[V("token")]},signInWithEmailAndPassword:{name:"signInWithEmailAndPassword", +a:[V("email"),V("password")]},signInWithPhoneNumber:{name:"signInWithPhoneNumber",a:[V("phoneNumber"),ok()]},signInWithPopup:{name:"signInWithPopup",a:[nk()]},signInWithRedirect:{name:"signInWithRedirect",a:[nk()]},signOut:{name:"signOut",a:[]},toJSON:{name:"toJSON",a:[V(null,!0)]},verifyPasswordResetCode:{name:"verifyPasswordResetCode",a:[V("code")]}}); +Y(S.prototype,{"delete":{name:"delete",a:[]},getIdToken:{name:"getIdToken",a:[gk()]},getToken:{name:"getToken",a:[gk()]},linkAndRetrieveDataWithCredential:{name:"linkAndRetrieveDataWithCredential",a:[mk()]},linkWithCredential:{name:"linkWithCredential",a:[mk()]},linkWithPhoneNumber:{name:"linkWithPhoneNumber",a:[V("phoneNumber"),ok()]},linkWithPopup:{name:"linkWithPopup",a:[nk()]},linkWithRedirect:{name:"linkWithRedirect",a:[nk()]},reauthenticateAndRetrieveDataWithCredential:{name:"reauthenticateAndRetrieveDataWithCredential", +a:[mk()]},reauthenticateWithCredential:{name:"reauthenticateWithCredential",a:[mk()]},reauthenticateWithPhoneNumber:{name:"reauthenticateWithPhoneNumber",a:[V("phoneNumber"),ok()]},reauthenticateWithPopup:{name:"reauthenticateWithPopup",a:[nk()]},reauthenticateWithRedirect:{name:"reauthenticateWithRedirect",a:[nk()]},reload:{name:"reload",a:[]},sendEmailVerification:{name:"sendEmailVerification",a:[]},toJSON:{name:"toJSON",a:[V(null,!0)]},unlink:{name:"unlink",a:[V("provider")]},updateEmail:{name:"updateEmail", +a:[V("email")]},updatePassword:{name:"updatePassword",a:[V("password")]},updatePhoneNumber:{name:"updatePhoneNumber",a:[mk("phone")]},updateProfile:{name:"updateProfile",a:[W("profile")]}});Y(A.prototype,{f:{name:"catch"},then:{name:"then"}});Y(hi.prototype,{confirm:{name:"confirm",a:[V("verificationCode")]}});Z(tg,"credential",function(a,b){return new qg(a,b)},[V("email"),V("password")]);Y(ig.prototype,{addScope:{name:"addScope",a:[V("scope")]},setCustomParameters:{name:"setCustomParameters",a:[W("customOAuthParameters")]}}); +Z(ig,"credential",jg,[X(V(),W(),"token")]);Y(kg.prototype,{addScope:{name:"addScope",a:[V("scope")]},setCustomParameters:{name:"setCustomParameters",a:[W("customOAuthParameters")]}});Z(kg,"credential",lg,[X(V(),W(),"token")]);Y(mg.prototype,{addScope:{name:"addScope",a:[V("scope")]},setCustomParameters:{name:"setCustomParameters",a:[W("customOAuthParameters")]}});Z(mg,"credential",ng,[X(V(),X(W(),ik()),"idToken"),X(V(),ik(),"accessToken",!0)]); +Y(og.prototype,{setCustomParameters:{name:"setCustomParameters",a:[W("customOAuthParameters")]}});Z(og,"credential",pg,[X(V(),W(),"token"),V("secret",!0)]);Y(P.prototype,{addScope:{name:"addScope",a:[V("scope")]},credential:{name:"credential",a:[X(V(),ik(),"idToken",!0),X(V(),ik(),"accessToken",!0)]},setCustomParameters:{name:"setCustomParameters",a:[W("customOAuthParameters")]}});Z(yg,"credential",Ag,[V("verificationId"),V("verificationCode")]); +Y(yg.prototype,{verifyPhoneNumber:{name:"verifyPhoneNumber",a:[V("phoneNumber"),ok()]}});Y(N.prototype,{toJSON:{name:"toJSON",a:[V(null,!0)]}});Y(Dg.prototype,{toJSON:{name:"toJSON",a:[V(null,!0)]}});Y($f.prototype,{toJSON:{name:"toJSON",a:[V(null,!0)]}});Y(Kh.prototype,{clear:{name:"clear",a:[]},render:{name:"render",a:[]},verify:{name:"verify",a:[]}}); +(function(){if("undefined"!==typeof firebase&&firebase.INTERNAL&&firebase.INTERNAL.registerService){var a={Auth:T,Error:N};Z(a,"EmailAuthProvider",tg,[]);Z(a,"FacebookAuthProvider",ig,[]);Z(a,"GithubAuthProvider",kg,[]);Z(a,"GoogleAuthProvider",mg,[]);Z(a,"TwitterAuthProvider",og,[]);Z(a,"OAuthProvider",P,[V("providerId")]);Z(a,"PhoneAuthProvider",yg,[kk()]);Z(a,"RecaptchaVerifier",Kh,[X(V(),jk(),"recaptchaContainer"),W("recaptchaParameters",!0),lk()]);firebase.INTERNAL.registerService("auth",function(a, +c){a=new T(a);c({INTERNAL:{getUid:q(a.getUid,a),getToken:q(a.getIdToken,a),addAuthTokenListener:q(a.Ke,a),removeAuthTokenListener:q(a.Cf,a)}});return a},a,function(a,c){if("create"===a)try{c.auth()}catch(d){}});firebase.INTERNAL.extendNamespace({User:S})}else throw Error("Cannot find the firebase namespace; be sure to include firebase-app.js before this library.");})();}).call(this); + +(function() {var g,aa=this;function n(a){return void 0!==a}function ba(){}function ca(a){a.Vb=function(){return a.Ye?a.Ye:a.Ye=new a}} +function da(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; +else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ea(a){return"array"==da(a)}function fa(a){var b=da(a);return"array"==b||"object"==b&&"number"==typeof a.length}function p(a){return"string"==typeof a}function ga(a){return"number"==typeof a}function ha(a){return"function"==da(a)}function ia(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}function ja(a,b,c){return a.call.apply(a.bind,arguments)} +function ka(a,b,c){if(!a)throw Error();if(2b?e+="000":256>b?e+="00":4096>b&&(e+="0");return qa[a]=e+b.toString(16)}),'"')};function sa(){this.Wa=-1};function ta(){this.Wa=-1;this.Wa=64;this.M=[];this.Wd=[];this.Af=[];this.zd=[];this.zd[0]=128;for(var a=1;ae;e++)d[e]=b.charCodeAt(c)<<24|b.charCodeAt(c+1)<<16|b.charCodeAt(c+2)<<8|b.charCodeAt(c+3),c+=4;else for(e=0;16>e;e++)d[e]=b[c]<<24|b[c+1]<<16|b[c+2]<<8|b[c+3],c+=4;for(e=16;80>e;e++){var f=d[e-3]^d[e-8]^d[e-14]^d[e-16];d[e]=(f<<1|f>>>31)&4294967295}b=a.M[0];c=a.M[1];for(var h=a.M[2],k=a.M[3],m=a.M[4],l,e=0;80>e;e++)40>e?20>e?(f=k^c&(h^k),l=1518500249):(f=c^h^k,l=1859775393):60>e?(f=c&h|k&(c|h),l=2400959708):(f=c^h^k,l=3395469782),f=(b<< +5|b>>>27)+f+m+l+d[e]&4294967295,m=k,k=h,h=(c<<30|c>>>2)&4294967295,c=b,b=f;a.M[0]=a.M[0]+b&4294967295;a.M[1]=a.M[1]+c&4294967295;a.M[2]=a.M[2]+h&4294967295;a.M[3]=a.M[3]+k&4294967295;a.M[4]=a.M[4]+m&4294967295} +ta.prototype.update=function(a,b){if(null!=a){n(b)||(b=a.length);for(var c=b-this.Wa,d=0,e=this.Wd,f=this.$b;dc?Math.max(0,a.length+c):c;if(p(a))return p(b)&&1==b.length?a.indexOf(b,c):-1;for(;cc?null:p(a)?a.charAt(c):a[c]}function Ea(a,b,c){for(var d=a.length,e=p(a)?a.split(""):a,f=0;f=arguments.length?t.slice.call(a,b):t.slice.call(a,b,c)} +function Ha(a,b){a.sort(b||Ia)}function Ia(a,b){return a>b?1:aparseFloat(a))?String(b):a})();var Ya=null,Za=null,$a=null;function ab(a,b){if(!fa(a))throw Error("encodeByteArray takes an array as a parameter");bb();for(var c=b?Za:Ya,d=[],e=0;e>2,f=(f&3)<<4|k>>4,k=(k&15)<<2|l>>6,l=l&63;m||(l=64,h||(k=64));d.push(c[u],c[f],c[k],c[l])}return d.join("")} +function bb(){if(!Ya){Ya={};Za={};$a={};for(var a=0;65>a;a++)Ya[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a),Za[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.".charAt(a),$a[Za[a]]=a,62<=a&&($a["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a)]=a)}};function cb(a,b){if(!a)throw db(b);}function db(a){return Error("Firebase Database ("+firebase.SDK_VERSION+") INTERNAL ASSERT FAILED: "+a)};function eb(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function w(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]}function fb(a,b){for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b(c,a[c])};function gb(a){var b=[];fb(a,function(a,d){ea(d)?ya(d,function(d){b.push(encodeURIComponent(a)+"="+encodeURIComponent(d))}):b.push(encodeURIComponent(a)+"="+encodeURIComponent(d))});return b.length?"&"+b.join("&"):""};var hb=firebase.Promise;function ib(){var a=this;this.reject=this.resolve=null;this.ra=new hb(function(b,c){a.resolve=b;a.reject=c})}function jb(a,b){return function(c,d){c?a.reject(c):a.resolve(d);ha(b)&&(kb(a.ra),1===b.length?b(c):b(c,d))}}function kb(a){a.then(void 0,ba)};function lb(a){return"undefined"!==typeof JSON&&n(JSON.parse)?JSON.parse(a):ma(a)}function x(a){if("undefined"!==typeof JSON&&n(JSON.stringify))a=JSON.stringify(a);else{var b=[];oa(new na,a,b);a=b.join("")}return a};function mb(a){for(var b=[],c=0,d=0;d=e&&(e-=55296,d++,cb(de?b[c++]=e:(2048>e?b[c++]=e>>6|192:(65536>e?b[c++]=e>>12|224:(b[c++]=e>>18|240,b[c++]=e>>12&63|128),b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b}function nb(a){for(var b=0,c=0;cd?b++:2048>d?b+=2:55296<=d&&56319>=d?(b+=4,c++):b+=3}return b};function y(a,b,c,d){var e;dc&&(e=0===c?"none":"no more than "+c);if(e)throw Error(a+" failed: Was called with "+d+(1===d?" argument.":" arguments.")+" Expects "+e+".");}function A(a,b,c){var d="";switch(b){case 1:d=c?"first":"First";break;case 2:d=c?"second":"Second";break;case 3:d=c?"third":"Third";break;case 4:d=c?"fourth":"Fourth";break;default:throw Error("errorPrefix called with argumentNumber > 4. Need to update it?");}return a=a+" failed: "+(d+" argument ")} +function B(a,b,c,d){if((!d||n(c))&&!ha(c))throw Error(A(a,b,d)+"must be a valid function.");}function ob(a,b,c){if(n(c)&&(!ia(c)||null===c))throw Error(A(a,b,!0)+"must be a valid context object.");};function pb(){return"undefined"!==typeof window&&!!(window.cordova||window.phonegap||window.PhoneGap)&&/ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test("undefined"!==typeof navigator&&"string"===typeof navigator.userAgent?navigator.userAgent:"")};function C(a,b){this.name=a;this.R=b}function qb(a,b){return new C(a,b)};function rb(a,b){return sb(a.name,b.name)}function tb(a,b){return sb(a,b)};function ub(a){this.uc=a;this.Cd="firebase:"}g=ub.prototype;g.set=function(a,b){null==b?this.uc.removeItem(this.Cd+a):this.uc.setItem(this.Cd+a,x(b))};g.get=function(a){a=this.uc.getItem(this.Cd+a);return null==a?null:lb(a)};g.remove=function(a){this.uc.removeItem(this.Cd+a)};g.Ze=!1;g.toString=function(){return this.uc.toString()};function vb(){this.pc={}}vb.prototype.set=function(a,b){null==b?delete this.pc[a]:this.pc[a]=b};vb.prototype.get=function(a){return eb(this.pc,a)?this.pc[a]:null};vb.prototype.remove=function(a){delete this.pc[a]};vb.prototype.Ze=!0;function wb(a){try{if("undefined"!==typeof window&&"undefined"!==typeof window[a]){var b=window[a];b.setItem("firebase:sentinel","cache");b.removeItem("firebase:sentinel");return new ub(b)}}catch(c){}return new vb}var xb=wb("localStorage"),yb=wb("sessionStorage");function zb(a,b,c,d,e){this.host=a.toLowerCase();this.domain=this.host.substr(this.host.indexOf(".")+1);this.Sc=b;this.pe=c;this.qg=d;this.gf=e||"";this.$a=xb.get("host:"+a)||this.host}function Ab(a,b){b!==a.$a&&(a.$a=b,"s-"===a.$a.substr(0,2)&&xb.set("host:"+a.host,a.$a))} +function Bb(a,b,c){D("string"===typeof b,"typeof type must == string");D("object"===typeof c,"typeof params must == object");if(b===Cb)b=(a.Sc?"wss://":"ws://")+a.$a+"/.ws?";else if(b===Db)b=(a.Sc?"https://":"http://")+a.$a+"/.lp?";else throw Error("Unknown connection type: "+b);a.host!==a.$a&&(c.ns=a.pe);var d=[];v(c,function(a,b){d.push(b+"="+a)});return b+d.join("&")}zb.prototype.toString=function(){var a=(this.Sc?"https://":"http://")+this.host;this.gf&&(a+="<"+this.gf+">");return a};function Eb(a,b){return a&&"object"===typeof a?(D(".sv"in a,"Unexpected leaf node or priority contents"),b[a[".sv"]]):a}function Fb(a,b){var c=new Gb;Hb(a,new E(""),function(a,e){Ib(c,a,Jb(e,b))});return c}function Jb(a,b){var c=a.C().H(),c=Eb(c,b),d;if(a.J()){var e=Eb(a.Ca(),b);return e!==a.Ca()||c!==a.C().H()?new Kb(e,G(c)):a}d=a;c!==a.C().H()&&(d=d.fa(new Kb(c)));a.O(H,function(a,c){var e=Jb(c,b);e!==c&&(d=d.T(a,e))});return d};var Lb=function(){var a=1;return function(){return a++}}(),D=cb,Mb=db; +function Nb(a){try{var b;bb();for(var c=$a,d=[],e=0;e>4);64!=k&&(d.push(h<<4&240|k>>2),64!=m&&d.push(k<<6&192|m))}if(8192>d.length)b=String.fromCharCode.apply(null,d);else{a="";for(c=0;ca.$b?a.update(a.zd,56-a.$b):a.update(a.zd,a.Wa-(a.$b-56));for(var d=a.Wa-1;56<=d;d--)a.Wd[d]=c&255,c/=256;ua(a,a.Wd);for(d=c=0;5>d;d++)for(var e=24;0<=e;e-=8)b[c]=a.M[d]>>e&255,++c;return ab(b)}function Pb(a){for(var b="",c=0;c.firebaseio.com instead"); +c&&"undefined"!=c||Vb("Cannot parse Firebase url. Please use https://.firebaseio.com");d||"undefined"!==typeof window&&window.location&&window.location.protocol&&-1!==window.location.protocol.indexOf("https:")&&J("Insecure Firebase access from a secure page. Please use https in calls to new Firebase().");return{jc:new zb(b,d,c,"ws"===e||"wss"===e),path:new E(f)}}function Xb(a){return ga(a)&&(a!=a||a==Number.POSITIVE_INFINITY||a==Number.NEGATIVE_INFINITY)} +function Yb(a){if("complete"===document.readyState)a();else{var b=!1,c=function(){document.body?b||(b=!0,a()):setTimeout(c,Math.floor(10))};document.addEventListener?(document.addEventListener("DOMContentLoaded",c,!1),window.addEventListener("load",c,!1)):document.attachEvent&&(document.attachEvent("onreadystatechange",function(){"complete"===document.readyState&&c()}),window.attachEvent("onload",c))}} +function sb(a,b){if(a===b)return 0;if("[MIN_NAME]"===a||"[MAX_NAME]"===b)return-1;if("[MIN_NAME]"===b||"[MAX_NAME]"===a)return 1;var c=Zb(a),d=Zb(b);return null!==c?null!==d?0==c-d?a.length-b.length:c-d:-1:null!==d?1:aa?c.push(a.substring(d,a.length)):c.push(a.substring(d,d+b));return c}function cc(a,b){if(ea(a))for(var c=0;ca,a=Math.abs(a),a>=Math.pow(2,-1022)?(d=Math.min(Math.floor(Math.log(a)/Math.LN2),1023),c=d+1023,d=Math.round(a*Math.pow(2,52-d)-Math.pow(2,52))):(c=0,d=Math.round(a/Math.pow(2,-1074))));e=[];for(a=52;a;--a)e.push(d%2?1:0),d=Math.floor(d/2);for(a=11;a;--a)e.push(c%2?1:0),c=Math.floor(c/2);e.push(b?1:0);e.reverse();b=e.join("");c="";for(a=0;64>a;a+=8)d=parseInt(b.substr(a,8),2).toString(16),1===d.length&& +(d="0"+d),c+=d;return c.toLowerCase()}var ec=/^-?\d{1,10}$/;function Zb(a){return ec.test(a)&&(a=Number(a),-2147483648<=a&&2147483647>=a)?a:null}function fc(a){try{a()}catch(b){setTimeout(function(){J("Exception was thrown by user callback.",b.stack||"");throw b;},Math.floor(0))}}function gc(a,b,c){Object.defineProperty(a,b,{get:c})}function hc(a,b){var c=setTimeout(a,b);"object"===typeof c&&c.unref&&c.unref();return c};function ic(a){var b={},c={},d={},e="";try{var f=a.split("."),b=lb(Nb(f[0])||""),c=lb(Nb(f[1])||""),e=f[2],d=c.d||{};delete c.d}catch(h){}return{tg:b,Je:c,data:d,mg:e}}function jc(a){a=ic(a);var b=a.Je;return!!a.mg&&!!b&&"object"===typeof b&&b.hasOwnProperty("iat")}function kc(a){a=ic(a).Je;return"object"===typeof a&&!0===w(a,"admin")};function lc(){}var mc={};function nc(a){return q(a.compare,a)}lc.prototype.nd=function(a,b){return 0!==this.compare(new C("[MIN_NAME]",a),new C("[MIN_NAME]",b))};lc.prototype.Hc=function(){return oc};function pc(a){D(!a.e()&&".priority"!==K(a),"Can't create PathIndex with empty path or .priority key");this.bc=a}la(pc,lc);g=pc.prototype;g.xc=function(a){return!a.P(this.bc).e()};g.compare=function(a,b){var c=a.R.P(this.bc),d=b.R.P(this.bc),c=c.sc(d);return 0===c?sb(a.name,b.name):c}; +g.Ec=function(a,b){var c=G(a),c=L.F(this.bc,c);return new C(b,c)};g.Fc=function(){var a=L.F(this.bc,qc);return new C("[MAX_NAME]",a)};g.toString=function(){return this.bc.slice().join("/")};function rc(){}la(rc,lc);g=rc.prototype;g.compare=function(a,b){var c=a.R.C(),d=b.R.C(),c=c.sc(d);return 0===c?sb(a.name,b.name):c};g.xc=function(a){return!a.C().e()};g.nd=function(a,b){return!a.C().Z(b.C())};g.Hc=function(){return oc};g.Fc=function(){return new C("[MAX_NAME]",new Kb("[PRIORITY-POST]",qc))}; +g.Ec=function(a,b){var c=G(a);return new C(b,new Kb("[PRIORITY-POST]",c))};g.toString=function(){return".priority"};var H=new rc;function sc(){}la(sc,lc);g=sc.prototype;g.compare=function(a,b){return sb(a.name,b.name)};g.xc=function(){throw Mb("KeyIndex.isDefinedOn not expected to be called.");};g.nd=function(){return!1};g.Hc=function(){return oc};g.Fc=function(){return new C("[MAX_NAME]",L)};g.Ec=function(a){D(p(a),"KeyIndex indexValue must always be a string.");return new C(a,L)};g.toString=function(){return".key"}; +var tc=new sc;function uc(){}la(uc,lc);g=uc.prototype;g.compare=function(a,b){var c=a.R.sc(b.R);return 0===c?sb(a.name,b.name):c};g.xc=function(){return!0};g.nd=function(a,b){return!a.Z(b)};g.Hc=function(){return oc};g.Fc=function(){return vc};g.Ec=function(a,b){var c=G(a);return new C(b,c)};g.toString=function(){return".value"};var wc=new uc;function xc(a,b){this.od=a;this.cc=b}xc.prototype.get=function(a){var b=w(this.od,a);if(!b)throw Error("No index defined for "+a);return b===mc?null:b};function yc(a,b,c){var d=Ja(a.od,function(d,f){var h=w(a.cc,f);D(h,"Missing index implementation for "+f);if(d===mc){if(h.xc(b.R)){for(var k=[],m=c.Wb(qb),l=M(m);l;)l.name!=b.name&&k.push(l),l=M(m);k.push(b);return zc(k,nc(h))}return mc}h=c.get(b.name);k=d;h&&(k=k.remove(new C(b.name,h)));return k.Oa(b,b.R)});return new xc(d,a.cc)} +function Ac(a,b,c){var d=Ja(a.od,function(a){if(a===mc)return a;var d=c.get(b.name);return d?a.remove(new C(b.name,d)):a});return new xc(d,a.cc)}var Bc=new xc({".priority":mc},{".priority":H});function Kb(a,b){this.B=a;D(n(this.B)&&null!==this.B,"LeafNode shouldn't be created with null/undefined value.");this.aa=b||L;Cc(this.aa);this.Db=null}var Dc=["object","boolean","number","string"];g=Kb.prototype;g.J=function(){return!0};g.C=function(){return this.aa};g.fa=function(a){return new Kb(this.B,a)};g.Q=function(a){return".priority"===a?this.aa:L};g.P=function(a){return a.e()?this:".priority"===K(a)?this.aa:L};g.Da=function(){return!1};g.Ve=function(){return null}; +g.T=function(a,b){return".priority"===a?this.fa(b):b.e()&&".priority"!==a?this:L.T(a,b).fa(this.aa)};g.F=function(a,b){var c=K(a);if(null===c)return b;if(b.e()&&".priority"!==c)return this;D(".priority"!==c||1===Ec(a),".priority must be the last token in a path");return this.T(c,L.F(N(a),b))};g.e=function(){return!1};g.Eb=function(){return 0};g.O=function(){return!1};g.H=function(a){return a&&!this.C().e()?{".value":this.Ca(),".priority":this.C().H()}:this.Ca()}; +g.hash=function(){if(null===this.Db){var a="";this.aa.e()||(a+="priority:"+Fc(this.aa.H())+":");var b=typeof this.B,a=a+(b+":"),a="number"===b?a+dc(this.B):a+this.B;this.Db=Ob(a)}return this.Db};g.Ca=function(){return this.B};g.sc=function(a){if(a===L)return 1;if(a instanceof O)return-1;D(a.J(),"Unknown node type");var b=typeof a.B,c=typeof this.B,d=xa(Dc,b),e=xa(Dc,c);D(0<=d,"Unknown leaf type: "+b);D(0<=e,"Unknown leaf type: "+c);return d===e?"object"===c?0:this.Bf;f++)b[f]=Math.floor(64*Math.random());for(f=0;12>f;f++)c+="-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(b[f]);D(20===c.length,"nextPushId: Length should be 20."); +return c}}();function Lc(){Ic.call(this,["online"]);this.hc=!0;if("undefined"!==typeof window&&"undefined"!==typeof window.addEventListener&&!pb()){var a=this;window.addEventListener("online",function(){a.hc||(a.hc=!0,a.Ge("online",!0))},!1);window.addEventListener("offline",function(){a.hc&&(a.hc=!1,a.Ge("online",!1))},!1)}}la(Lc,Ic);Lc.prototype.Ue=function(a){D("online"===a,"Unknown event type: "+a);return[this.hc]};ca(Lc);function Mc(){Ic.call(this,["visible"]);var a,b;"undefined"!==typeof document&&"undefined"!==typeof document.addEventListener&&("undefined"!==typeof document.hidden?(b="visibilitychange",a="hidden"):"undefined"!==typeof document.mozHidden?(b="mozvisibilitychange",a="mozHidden"):"undefined"!==typeof document.msHidden?(b="msvisibilitychange",a="msHidden"):"undefined"!==typeof document.webkitHidden&&(b="webkitvisibilitychange",a="webkitHidden"));this.Mb=!0;if(b){var c=this;document.addEventListener(b, +function(){var b=!document[a];b!==c.Mb&&(c.Mb=b,c.Ge("visible",b))},!1)}}la(Mc,Ic);Mc.prototype.Ue=function(a){D("visible"===a,"Unknown event type: "+a);return[this.Mb]};ca(Mc);function E(a,b){if(1==arguments.length){this.o=a.split("/");for(var c=0,d=0;d=a.o.length?null:a.o[a.Y]}function Ec(a){return a.o.length-a.Y}function N(a){var b=a.Y;b=this.o.length)return null;for(var a=[],b=this.Y;b=this.o.length};g.Z=function(a){if(Ec(this)!==Ec(a))return!1;for(var b=this.Y,c=a.Y;b<=this.o.length;b++,c++)if(this.o[b]!==a.o[c])return!1;return!0}; +g.contains=function(a){var b=this.Y,c=a.Y;if(Ec(this)>Ec(a))return!1;for(;bb?c=c.left:0c?d=d.left:0e)a=this.le?a.left:a.right;else if(0===e){this.Pa.push(a);break}else this.Pa.push(a),a=this.le?a.right:a.left} +function M(a){if(0===a.Pa.length)return null;var b=a.Pa.pop(),c;c=a.Hd?a.Hd(b.key,b.value):{key:b.key,value:b.value};if(a.le)for(b=b.left;!b.e();)a.Pa.push(b),b=b.right;else for(b=b.right;!b.e();)a.Pa.push(b),b=b.left;return c}function cd(a){if(0===a.Pa.length)return null;var b;b=a.Pa;b=b[b.length-1];return a.Hd?a.Hd(b.key,b.value):{key:b.key,value:b.value}}function dd(a,b,c,d,e){this.key=a;this.value=b;this.color=null!=c?c:!0;this.left=null!=d?d:$c;this.right=null!=e?e:$c}g=dd.prototype; +g.X=function(a,b,c,d,e){return new dd(null!=a?a:this.key,null!=b?b:this.value,null!=c?c:this.color,null!=d?d:this.left,null!=e?e:this.right)};g.count=function(){return this.left.count()+1+this.right.count()};g.e=function(){return!1};g.ha=function(a){return this.left.ha(a)||a(this.key,this.value)||this.right.ha(a)};function ed(a){return a.left.e()?a:ed(a.left)}g.Gc=function(){return ed(this).key};g.ec=function(){return this.right.e()?this.key:this.right.ec()}; +g.Oa=function(a,b,c){var d,e;e=this;d=c(a,e.key);e=0>d?e.X(null,null,null,e.left.Oa(a,b,c),null):0===d?e.X(null,b,null,null,null):e.X(null,null,null,null,e.right.Oa(a,b,c));return gd(e)};function hd(a){if(a.left.e())return $c;a.left.ea()||a.left.left.ea()||(a=id(a));a=a.X(null,null,null,hd(a.left),null);return gd(a)} +g.remove=function(a,b){var c,d;c=this;if(0>b(a,c.key))c.left.e()||c.left.ea()||c.left.left.ea()||(c=id(c)),c=c.X(null,null,null,c.left.remove(a,b),null);else{c.left.ea()&&(c=jd(c));c.right.e()||c.right.ea()||c.right.left.ea()||(c=kd(c),c.left.left.ea()&&(c=jd(c),c=kd(c)));if(0===b(a,c.key)){if(c.right.e())return $c;d=ed(c.right);c=c.X(d.key,d.value,null,null,hd(c.right))}c=c.X(null,null,null,null,c.right.remove(a,b))}return gd(c)};g.ea=function(){return this.color}; +function gd(a){a.right.ea()&&!a.left.ea()&&(a=ld(a));a.left.ea()&&a.left.left.ea()&&(a=jd(a));a.left.ea()&&a.right.ea()&&(a=kd(a));return a}function id(a){a=kd(a);a.right.left.ea()&&(a=a.X(null,null,null,null,jd(a.right)),a=ld(a),a=kd(a));return a}function ld(a){return a.right.X(null,null,a.color,a.X(null,null,!0,null,a.right.left),null)}function jd(a){return a.left.X(null,null,a.color,null,a.X(null,null,!0,a.left.right,null))} +function kd(a){return a.X(null,null,!a.color,a.left.X(null,null,!a.left.color,null,null),a.right.X(null,null,!a.right.color,null,null))}function md(){}g=md.prototype;g.X=function(){return this};g.Oa=function(a,b){return new dd(a,b,null)};g.remove=function(){return this};g.count=function(){return 0};g.e=function(){return!0};g.ha=function(){return!1};g.Gc=function(){return null};g.ec=function(){return null};g.ea=function(){return!1};var $c=new md;function O(a,b,c){this.k=a;(this.aa=b)&&Cc(this.aa);a.e()&&D(!this.aa||this.aa.e(),"An empty node cannot have a priority");this.yb=c;this.Db=null}g=O.prototype;g.J=function(){return!1};g.C=function(){return this.aa||L};g.fa=function(a){return this.k.e()?this:new O(this.k,a,this.yb)};g.Q=function(a){if(".priority"===a)return this.C();a=this.k.get(a);return null===a?L:a};g.P=function(a){var b=K(a);return null===b?this:this.Q(b).P(N(a))};g.Da=function(a){return null!==this.k.get(a)}; +g.T=function(a,b){D(b,"We should always be passing snapshot nodes");if(".priority"===a)return this.fa(b);var c=new C(a,b),d,e;b.e()?(d=this.k.remove(a),c=Ac(this.yb,c,this.k)):(d=this.k.Oa(a,b),c=yc(this.yb,c,this.k));e=d.e()?L:this.aa;return new O(d,e,c)};g.F=function(a,b){var c=K(a);if(null===c)return b;D(".priority"!==K(a)||1===Ec(a),".priority must be the last token in a path");var d=this.Q(c).F(N(a),b);return this.T(c,d)};g.e=function(){return this.k.e()};g.Eb=function(){return this.k.count()}; +var nd=/^(0|[1-9]\d*)$/;g=O.prototype;g.H=function(a){if(this.e())return null;var b={},c=0,d=0,e=!0;this.O(H,function(f,h){b[f]=h.H(a);c++;e&&nd.test(f)?d=Math.max(d,Number(f)):e=!1});if(!a&&e&&d<2*c){var f=[],h;for(h in b)f[h]=b[h];return f}a&&!this.C().e()&&(b[".priority"]=this.C().H());return b};g.hash=function(){if(null===this.Db){var a="";this.C().e()||(a+="priority:"+Fc(this.C().H())+":");this.O(H,function(b,c){var d=c.hash();""!==d&&(a+=":"+b+":"+d)});this.Db=""===a?"":Ob(a)}return this.Db}; +g.Ve=function(a,b,c){return(c=od(this,c))?(a=ad(c,new C(a,b)))?a.name:null:ad(this.k,a)};function pd(a,b){var c;c=(c=od(a,b))?(c=c.Gc())&&c.name:a.k.Gc();return c?new C(c,a.k.get(c)):null}function qd(a,b){var c;c=(c=od(a,b))?(c=c.ec())&&c.name:a.k.ec();return c?new C(c,a.k.get(c)):null}g.O=function(a,b){var c=od(this,a);return c?c.ha(function(a){return b(a.name,a.R)}):this.k.ha(b)};g.Wb=function(a){return this.Xb(a.Hc(),a)}; +g.Xb=function(a,b){var c=od(this,b);if(c)return c.Xb(a,function(a){return a});for(var c=this.k.Xb(a.name,qb),d=cd(c);null!=d&&0>b.compare(d,a);)M(c),d=cd(c);return c};g.We=function(a){return this.Zb(a.Fc(),a)};g.Zb=function(a,b){var c=od(this,b);if(c)return c.Zb(a,function(a){return a});for(var c=this.k.Zb(a.name,qb),d=cd(c);null!=d&&010485760/3&&10485760=this.g.compare(this.Uc,a)&&0>=this.g.compare(a,this.vc)};g.F=function(a,b,c,d,e,f){this.matches(new C(b,c))||(c=L);return this.he.F(a,b,c,d,e,f)}; +g.ya=function(a,b,c){b.J()&&(b=L);var d=b.nb(this.g),d=d.fa(L),e=this;b.O(H,function(a,b){e.matches(new C(a,b))||(d=d.T(a,L))});return this.he.ya(a,d,c)};g.fa=function(a){return a};g.Na=function(){return!0};g.Ub=function(){return this.he};function Re(a){this.sa=new Se(a);this.g=a.g;D(a.xa,"Only valid if limit has been set");this.oa=a.oa;this.Ib=!jf(a)}g=Re.prototype;g.F=function(a,b,c,d,e,f){this.sa.matches(new C(b,c))||(c=L);return a.Q(b).Z(c)?a:a.Eb()=this.g.compare(this.sa.Uc,f):0>=this.g.compare(f,this.sa.vc))d=d.T(f.name,f.R),e++;else break}}else{d=b.nb(this.g);d=d.fa(L);var k,m,l;if(this.Ib){b=d.We(this.g);k=this.sa.vc;m=this.sa.Uc;var u=nc(this.g);l=function(a,b){return u(b,a)}}else b=d.Wb(this.g),k=this.sa.Uc, +m=this.sa.vc,l=nc(this.g);for(var e=0,z=!1;0=l(k,f)&&(z=!0),(h=z&&e=l(f,m))?e++:d=d.T(f.name,L)}return this.sa.Ub().ya(a,d,c)};g.fa=function(a){return a};g.Na=function(){return!0};g.Ub=function(){return this.sa.Ub()}; +function kf(a,b,c,d,e,f){var h;if(a.Ib){var k=nc(a.g);h=function(a,b){return k(b,a)}}else h=nc(a.g);D(b.Eb()==a.oa,"");var m=new C(c,d),l=a.Ib?pd(b,a.g):qd(b,a.g),u=a.sa.matches(m);if(b.Da(c)){for(var z=b.Q(c),l=e.fe(a.g,l,a.Ib);null!=l&&(l.name==c||b.Da(l.name));)l=e.fe(a.g,l,a.Ib);e=null==l?1:h(l,m);if(u&&!d.e()&&0<=e)return null!=f&&df(f,new S(Ie,d,c,z)),b.T(c,d);null!=f&&df(f,new S(Le,z,c));b=b.T(c,L);return null!=l&&a.sa.matches(l)?(null!=f&&df(f,new S(Me,l.R,l.name)),b.T(l.name,l.R)):b}return d.e()? +b:u&&0<=h(l,m)?(null!=f&&(df(f,new S(Le,l.R,l.name)),df(f,new S(Me,d,c))),b.T(c,d).T(l.name,L)):b};function S(a,b,c,d){this.type=a;this.Ja=b;this.Xa=c;this.qe=d;this.Dd=void 0}function Ee(a){return new S(Ne,a)}var Me="child_added",Le="child_removed",Ie="child_changed",Je="child_moved",Ne="value";function xe(){this.fb={}} +function df(a,b){var c=b.type,d=b.Xa;D(c==Me||c==Ie||c==Le,"Only child changes supported for tracking");D(".priority"!==d,"Only non-priority child changes can be tracked.");var e=w(a.fb,d);if(e){var f=e.type;if(c==Me&&f==Le)a.fb[d]=new S(Ie,b.Ja,d,e.Ja);else if(c==Le&&f==Me)delete a.fb[d];else if(c==Le&&f==Ie)a.fb[d]=new S(Le,e.qe,d);else if(c==Ie&&f==Me)a.fb[d]=new S(Me,b.Ja,d);else if(c==Ie&&f==Ie)a.fb[d]=new S(Ie,b.Ja,d,e.qe);else throw Mb("Illegal combination of changes: "+b+" occurred after "+ +e);}else a.fb[d]=b};function lf(){this.Rb=this.na=this.Kb=this.ka=this.xa=!1;this.oa=0;this.mb="";this.dc=null;this.zb="";this.ac=null;this.xb="";this.g=H}var mf=new lf;function jf(a){return""===a.mb?a.ka:"l"===a.mb}function ff(a){D(a.ka,"Only valid if start has been set");return a.dc}function ef(a){D(a.ka,"Only valid if start has been set");return a.Kb?a.zb:"[MIN_NAME]"}function hf(a){D(a.na,"Only valid if end has been set");return a.ac} +function gf(a){D(a.na,"Only valid if end has been set");return a.Rb?a.xb:"[MAX_NAME]"}function nf(a){var b=new lf;b.xa=a.xa;b.oa=a.oa;b.ka=a.ka;b.dc=a.dc;b.Kb=a.Kb;b.zb=a.zb;b.na=a.na;b.ac=a.ac;b.Rb=a.Rb;b.xb=a.xb;b.g=a.g;b.mb=a.mb;return b}g=lf.prototype;g.ne=function(a){var b=nf(this);b.xa=!0;b.oa=a;b.mb="l";return b};g.oe=function(a){var b=nf(this);b.xa=!0;b.oa=a;b.mb="r";return b};g.Nd=function(a,b){var c=nf(this);c.ka=!0;n(a)||(a=null);c.dc=a;null!=b?(c.Kb=!0,c.zb=b):(c.Kb=!1,c.zb="");return c}; +g.gd=function(a,b){var c=nf(this);c.na=!0;n(a)||(a=null);c.ac=a;n(b)?(c.Rb=!0,c.xb=b):(c.vg=!1,c.xb="");return c};function of(a,b){var c=nf(a);c.g=b;return c}function pf(a){var b={};a.ka&&(b.sp=a.dc,a.Kb&&(b.sn=a.zb));a.na&&(b.ep=a.ac,a.Rb&&(b.en=a.xb));if(a.xa){b.l=a.oa;var c=a.mb;""===c&&(c=jf(a)?"l":"r");b.vf=c}a.g!==H&&(b.i=a.g.toString());return b}function T(a){return!(a.ka||a.na||a.xa)}function qf(a){return T(a)&&a.g==H} +function rf(a){var b={};if(qf(a))return b;var c;a.g===H?c="$priority":a.g===wc?c="$value":a.g===tc?c="$key":(D(a.g instanceof pc,"Unrecognized index type!"),c=a.g.toString());b.orderBy=x(c);a.ka&&(b.startAt=x(a.dc),a.Kb&&(b.startAt+=","+x(a.zb)));a.na&&(b.endAt=x(a.ac),a.Rb&&(b.endAt+=","+x(a.xb)));a.xa&&(jf(a)?b.limitToFirst=a.oa:b.limitToLast=a.oa);return b}g.toString=function(){return x(pf(this))};function sf(a){this.W=a}var tf=new sf(new vd(null));function uf(a,b,c){if(b.e())return new sf(new vd(c));var d=zd(a.W,b);if(null!=d){var e=d.path,d=d.value;b=P(e,b);d=d.F(b,c);return new sf(a.W.set(e,d))}a=Ad(a.W,b,new vd(c));return new sf(a)}function vf(a,b,c){var d=a;fb(c,function(a,c){d=uf(d,b.n(a),c)});return d}sf.prototype.Ed=function(a){if(a.e())return tf;a=Ad(this.W,a,R);return new sf(a)};function wf(a,b){var c=zd(a.W,b);return null!=c?a.W.get(c.path).P(P(c.path,b)):null} +function xf(a){var b=[],c=a.W.value;null!=c?c.J()||c.O(H,function(a,c){b.push(new C(a,c))}):a.W.children.ha(function(a,c){null!=c.value&&b.push(new C(a,c.value))});return b}function yf(a,b){if(b.e())return a;var c=wf(a,b);return null!=c?new sf(new vd(c)):new sf(a.W.subtree(b))}sf.prototype.e=function(){return this.W.e()};sf.prototype.apply=function(a){return zf(Q,this.W,a)}; +function zf(a,b,c){if(null!=b.value)return c.F(a,b.value);var d=null;b.children.ha(function(b,f){".priority"===b?(D(null!==f.value,"Priority writes must always be leaf nodes"),d=f.value):c=zf(a.n(b),f,c)});c.P(a).e()||null===d||(c=c.F(a.n(".priority"),d));return c};function Af(){this.Jd=L}Af.prototype.j=function(a){return this.Jd.P(a)};Af.prototype.toString=function(){return this.Jd.toString()};function Bf(a){this.oc=a}Bf.prototype.getToken=function(a){return this.oc.INTERNAL.getToken(a).then(null,function(a){return a&&"auth/token-not-initialized"===a.code?(I("Got auth/token-not-initialized error. Treating as null token."),null):Promise.reject(a)})};function Cf(a,b){a.oc.INTERNAL.addAuthTokenListener(b)};function Df(){this.S=tf;this.la=[];this.Bc=-1}function Ef(a,b){for(var c=0;c=b&&Ff(h,c.path)?d=!1:c.path.contains(h.path)&&(e=!0));f--}if(d){if(e)this.S=Gf(this.la,Hf,Q),this.Bc=0h.status){try{b=lb(h.responseText)}catch(c){J("Failed to parse JSON response for "+f+": "+h.responseText)}d(null, +b)}else 401!==h.status&&404!==h.status&&J("Got unsuccessful REST response for "+f+" Status: "+h.status),d(h.status);d=null}};h.open("GET",f,!0);h.send()})};function Uf(a){this.te=a;this.Bd=[];this.Qb=0;this.Yd=-1;this.Fb=null}function Vf(a,b,c){a.Yd=b;a.Fb=c;a.Yd=a.length){var b=Number(a);if(!isNaN(b)){e.Fe=b;e.frames=[];a=null;break a}}e.Fe=1;e.frames=[]}null!==a&&ag(e,a)}};this.Ia.onerror=function(a){e.f("WebSocket error. Closing connection.");(a=a.message||a.data)&&e.f(a);e.bb()}};Yf.prototype.start=function(){}; +Yf.isAvailable=function(){var a=!1;if("undefined"!==typeof navigator&&navigator.userAgent){var b=navigator.userAgent.match(/Android ([0-9]{0,}\.[0-9]{0,})/);b&&1parseFloat(b[1])&&(a=!0)}return!a&&null!==Xf&&!Zf};Yf.responsesRequiredToBeHealthy=2;Yf.healthyTimeout=3E4;g=Yf.prototype;g.sd=function(){xb.remove("previous_websocket_failure")};function ag(a,b){a.frames.push(b);if(a.frames.length==a.Fe){var c=a.frames.join("");a.frames=null;c=lb(c);a.Xf(c)}} +g.send=function(a){$f(this);a=x(a);this.qb+=a.length;Mf(this.Va,"bytes_sent",a.length);a=bc(a,16384);1document.domain="'+document.domain+'";\x3c/script>');a=""+a+"";try{this.Ea.gb.open(),this.Ea.gb.write(a),this.Ea.gb.close()}catch(f){I("frame writing exception"),f.stack&&I(f.stack),I(f)}} +fg.prototype.close=function(){this.Ud=!1;if(this.Ea){this.Ea.gb.body.innerHTML="";var a=this;setTimeout(function(){null!==a.Ea&&(document.body.removeChild(a.Ea),a.Ea=null)},Math.floor(0))}var b=this.ib;b&&(this.ib=null,b())}; +function ig(a){if(a.Ud&&a.Kd&&a.ve.count()<(0=a.Qc[0].Pe.length+30+c.length){var e=a.Qc.shift(),c=c+"&seg"+d+"="+e.jg+"&ts"+d+"="+e.pg+"&d"+d+"="+e.Pe;d++}else break;jg(a,b+c,a.$d);return!0}return!1}function jg(a,b,c){function d(){a.ve.remove(c);ig(a)}a.ve.add(c,1);var e=setTimeout(d,Math.floor(25E3));hg(a,b,function(){clearTimeout(e);d()})} +function hg(a,b,c){setTimeout(function(){try{if(a.Kd){var d=a.Ea.gb.createElement("script");d.type="text/javascript";d.async=!0;d.src=b;d.onload=d.onreadystatechange=function(){var a=d.readyState;a&&"loaded"!==a&&"complete"!==a||(d.onload=d.onreadystatechange=null,d.parentNode&&d.parentNode.removeChild(d),c())};d.onerror=function(){I("Long-poll script failed to load: "+b);a.Kd=!1;a.close()};a.Ea.gb.body.appendChild(d)}}catch(e){}},Math.floor(1))};function kg(a){lg(this,a)}var mg=[cg,Yf];function lg(a,b){var c=Yf&&Yf.isAvailable(),d=c&&!(xb.Ze||!0===xb.get("previous_websocket_failure"));b.qg&&(c||J("wss:// URL used, but browser isn't known to support websockets. Trying anyway."),d=!0);if(d)a.Wc=[Yf];else{var e=a.Wc=[];cc(mg,function(a,b){b&&b.isAvailable()&&e.push(b)})}}function ng(a){if(0=a.pf?(a.f("Secondary connection is healthy."),a.Bb=!0,a.D.sd(),a.D.start(),a.f("sending client ack on secondary"),a.D.send({t:"c",d:{t:"a",d:{}}}),a.f("Ending transmission on primary"),a.I.send({t:"c",d:{t:"n",d:{}}}),a.Xc=a.D,ug(a)):(a.f("sending ping on secondary."),a.D.send({t:"c",d:{t:"p",d:{}}}))}og.prototype.wd=function(a){wg(this);this.te(a)};function wg(a){a.Bb||(a.xe--,0>=a.xe&&(a.f("Primary connection is healthy."),a.Bb=!0,a.I.sd()))} +function tg(a,b){a.D=new b("c:"+a.id+":"+a.Le++,a.L,a.qf);a.pf=b.responsesRequiredToBeHealthy||0;a.D.open(qg(a,a.D),rg(a,a.D));hc(function(){a.D&&(a.f("Timed out trying to upgrade."),a.D.close())},Math.floor(6E4))}function sg(a,b,c){a.f("Realtime connection established.");a.I=b;a.Ua=1;a.Lc&&(a.Lc(c,a.qf),a.Lc=null);0===a.xe?(a.f("Primary connection is healthy."),a.Bb=!0):hc(function(){xg(a)},Math.floor(5E3))} +function xg(a){a.Bb||1!==a.Ua||(a.f("sending ping on primary."),zg(a,{t:"c",d:{t:"p",d:{}}}))}function zg(a,b){if(1!==a.Ua)throw"Connection is not connected";a.Xc.send(b)}og.prototype.close=function(){2!==this.Ua&&(this.f("Closing realtime connection."),this.Ua=2,vg(this),this.ia&&(this.ia(),this.ia=null))};function vg(a){a.f("Shutting down all connections");a.I&&(a.I.close(),a.I=null);a.D&&(a.D.close(),a.D=null);a.md&&(clearTimeout(a.md),a.md=null)};function Ag(a,b,c,d,e,f){this.id=Bg++;this.f=Tb("p:"+this.id+":");this.qd={};this.$={};this.pa=[];this.Oc=0;this.Kc=[];this.ma=!1;this.Sa=1E3;this.td=3E5;this.Gb=b;this.Jc=c;this.ue=d;this.L=a;this.ob=this.Fa=this.Cb=this.ze=null;this.$c=e;this.de=!1;this.ke=0;if(f)throw Error("Auth override specified in options, but not supported on non Node.js platforms");this.Vd=f;this.ub=null;this.Mb=!1;this.Gd={};this.ig=0;this.Re=!0;this.Ac=this.me=null;Cg(this,0);Mc.Vb().gc("visible",this.Zf,this);-1===a.host.indexOf("fblocal")&& +Lc.Vb().gc("online",this.Yf,this)}var Bg=0,Dg=0;g=Ag.prototype;g.ua=function(a,b,c){var d=++this.ig;a={r:d,a:a,b:b};this.f(x(a));D(this.ma,"sendRequest call when we're not connected not allowed.");this.Fa.ua(a);c&&(this.Gd[d]=c)}; +g.$e=function(a,b,c,d){var e=a.ja(),f=a.path.toString();this.f("Listen called for "+f+" "+e);this.$[f]=this.$[f]||{};D(qf(a.m)||!T(a.m),"listen() called for non-default but complete query");D(!this.$[f][e],"listen() called twice for same path/queryId.");a={G:d,ld:b,eg:a,tag:c};this.$[f][e]=a;this.ma&&Eg(this,a)}; +function Eg(a,b){var c=b.eg,d=c.path.toString(),e=c.ja();a.f("Listen on "+d+" for "+e);var f={p:d};b.tag&&(f.q=pf(c.m),f.t=b.tag);f.h=b.ld();a.ua("q",f,function(f){var k=f.d,m=f.s;if(k&&"object"===typeof k&&eb(k,"w")){var l=w(k,"w");ea(l)&&0<=xa(l,"no_index")&&J("Using an unspecified index. Consider adding "+('".indexOn": "'+c.m.g.toString()+'"')+" at "+c.path.toString()+" to your security rules for better performance")}(a.$[d]&&a.$[d][e])===b&&(a.f("listen response",f),"ok"!==m&&Fg(a,d,e),b.G&&b.G(m, +k))})}g.kf=function(a){this.ob=a;this.f("Auth token refreshed");this.ob?Gg(this):this.ma&&this.ua("unauth",{},function(){});if(a&&40===a.length||kc(a))this.f("Admin auth credential detected. Reducing max reconnect time."),this.td=3E4};function Gg(a){if(a.ma&&a.ob){var b=a.ob,c=jc(b)?"auth":"gauth",d={cred:b};null===a.Vd?d.noauth=!0:"object"===typeof a.Vd&&(d.authvar=a.Vd);a.ua(c,d,function(c){var d=c.s;c=c.d||"error";a.ob===b&&("ok"===d?a.ke=0:Hg(a,d,c))})}} +g.uf=function(a,b){var c=a.path.toString(),d=a.ja();this.f("Unlisten called for "+c+" "+d);D(qf(a.m)||!T(a.m),"unlisten() called for non-default but complete query");if(Fg(this,c,d)&&this.ma){var e=pf(a.m);this.f("Unlisten on "+c+" for "+d);c={p:c};b&&(c.q=e,c.t=b);this.ua("n",c)}};g.re=function(a,b,c){this.ma?Ig(this,"o",a,b,c):this.Kc.push({we:a,action:"o",data:b,G:c})};g.cf=function(a,b,c){this.ma?Ig(this,"om",a,b,c):this.Kc.push({we:a,action:"om",data:b,G:c})}; +g.xd=function(a,b){this.ma?Ig(this,"oc",a,null,b):this.Kc.push({we:a,action:"oc",data:null,G:b})};function Ig(a,b,c,d,e){c={p:c,d:d};a.f("onDisconnect "+b,c);a.ua(b,c,function(a){e&&setTimeout(function(){e(a.s,a.d)},Math.floor(0))})}g.put=function(a,b,c,d){Jg(this,"p",a,b,c,d)};g.af=function(a,b,c,d){Jg(this,"m",a,b,c,d)};function Jg(a,b,c,d,e,f){d={p:c,d:d};n(f)&&(d.h=f);a.pa.push({action:b,mf:d,G:e});a.Oc++;b=a.pa.length-1;a.ma?Kg(a,b):a.f("Buffering put: "+c)} +function Kg(a,b){var c=a.pa[b].action,d=a.pa[b].mf,e=a.pa[b].G;a.pa[b].fg=a.ma;a.ua(c,d,function(d){a.f(c+" response",d);delete a.pa[b];a.Oc--;0===a.Oc&&(a.pa=[]);e&&e(d.s,d.d)})}g.ye=function(a){this.ma&&(a={c:a},this.f("reportStats",a),this.ua("s",a,function(a){"ok"!==a.s&&this.f("reportStats","Error sending stats: "+a.d)}))}; +g.wd=function(a){if("r"in a){this.f("from server: "+x(a));var b=a.r,c=this.Gd[b];c&&(delete this.Gd[b],c(a.b))}else{if("error"in a)throw"A server-side error has occurred: "+a.error;"a"in a&&(b=a.a,a=a.b,this.f("handleServerMessage",b,a),"d"===b?this.Gb(a.p,a.d,!1,a.t):"m"===b?this.Gb(a.p,a.d,!0,a.t):"c"===b?Lg(this,a.p,a.q):"ac"===b?Hg(this,a.s,a.d):"sd"===b?this.ze?this.ze(a):"msg"in a&&"undefined"!==typeof console&&console.log("FIREBASE: "+a.msg.replace("\n","\nFIREBASE: ")):Ub("Unrecognized action received from server: "+ +x(b)+"\nAre you using the latest client?"))}};g.Lc=function(a,b){this.f("connection ready");this.ma=!0;this.Ac=(new Date).getTime();this.ue({serverTimeOffset:a-(new Date).getTime()});this.Cb=b;if(this.Re){var c={};c["sdk.js."+firebase.SDK_VERSION.replace(/\./g,"-")]=1;pb()?c["framework.cordova"]=1:"object"===typeof navigator&&"ReactNative"===navigator.product&&(c["framework.reactnative"]=1);this.ye(c)}Mg(this);this.Re=!1;this.Jc(!0)}; +function Cg(a,b){D(!a.Fa,"Scheduling a connect when we're already connected/ing?");a.ub&&clearTimeout(a.ub);a.ub=setTimeout(function(){a.ub=null;Ng(a)},Math.floor(b))}g.Zf=function(a){a&&!this.Mb&&this.Sa===this.td&&(this.f("Window became visible. Reducing delay."),this.Sa=1E3,this.Fa||Cg(this,0));this.Mb=a};g.Yf=function(a){a?(this.f("Browser went online."),this.Sa=1E3,this.Fa||Cg(this,0)):(this.f("Browser went offline. Killing connection."),this.Fa&&this.Fa.close())}; +g.df=function(){this.f("data client disconnected");this.ma=!1;this.Fa=null;for(var a=0;af.Bc,"Stacking an older write on top of newer ones");n(h)||(h=!0);f.la.push({path:b,Ga:c,Zc:d,visible:h});h&&(f.S=uf(f.S,b,c));f.Bc=d;return e?ch(a,new ce(fe,b,c)):[]}function dh(a,b,c,d){var e=a.jb;D(d>e.Bc,"Stacking an older merge on top of newer ones");e.la.push({path:b,children:c,Zc:d,visible:!0});e.S=vf(e.S,b,c);e.Bc=d;c=xd(c);return ch(a,new ae(fe,b,c))} +function eh(a,b,c){c=c||!1;var d=Ef(a.jb,b);if(a.jb.Ed(b)){var e=R;null!=d.Ga?e=e.set(Q,!0):fb(d.children,function(a,b){e=e.set(new E(a),b)});return ch(a,new de(d.path,e,c))}return[]}function fh(a,b,c){c=xd(c);return ch(a,new ae(ie,b,c))}function gh(a,b,c,d){d=hh(a,d);if(null!=d){var e=ih(d);d=e.path;e=e.Hb;b=P(d,b);c=new ce(new he(!1,!0,e,!0),b,c);return jh(a,d,c)}return[]} +function kh(a,b,c,d){if(d=hh(a,d)){var e=ih(d);d=e.path;e=e.Hb;b=P(d,b);c=xd(c);c=new ae(new he(!1,!0,e,!0),b,c);return jh(a,d,c)}return[]} +ah.prototype.Nb=function(a,b){var c=a.path,d=null,e=!1;Fd(this.wa,c,function(a,b){var f=P(a,c);d=d||b.hb(f);e=e||null!=Yg(b)});var f=this.wa.get(c);f?(e=e||null!=Yg(f),d=d||f.hb(Q)):(f=new Xg,this.wa=this.wa.set(c,f));var h;null!=d?h=!0:(h=!1,d=L,Jd(this.wa.subtree(c),function(a,b){var c=b.hb(Q);c&&(d=d.T(a,c))}));var k=null!=$g(f,a);if(!k&&!T(a.m)){var m=lh(a);D(!(m in this.ic),"View does not exist, but we have a tag");var l=mh++;this.ic[m]=l;this.De["_"+l]=m}h=f.Nb(a,b,new If(c,this.jb),d,h);k|| +e||(f=$g(f,a),h=h.concat(nh(this,a,f)));return h}; +ah.prototype.kb=function(a,b,c){var d=a.path,e=this.wa.get(d),f=[];if(e&&("default"===a.ja()||null!=$g(e,a))){f=e.kb(a,b,c);e.e()&&(this.wa=this.wa.remove(d));e=f.hg;f=f.Kf;b=-1!==Ea(e,function(a){return T(a.m)});var h=Dd(this.wa,d,function(a,b){return null!=Yg(b)});if(b&&!h&&(d=this.wa.subtree(d),!d.e()))for(var d=oh(d),k=0;k=a)throw Error("Query.limitToFirst: First argument must be a positive integer.");if(this.m.xa)throw Error("Query.limitToFirst: Limit was already set (by another call to limit, limitToFirst, or limitToLast).");return new X(this.u,this.path,this.m.ne(a),this.Nc)}; +g.oe=function(a){y("Query.limitToLast",1,1,arguments.length);if(!ga(a)||Math.floor(a)!==a||0>=a)throw Error("Query.limitToLast: First argument must be a positive integer.");if(this.m.xa)throw Error("Query.limitToLast: Limit was already set (by another call to limit, limitToFirst, or limitToLast).");return new X(this.u,this.path,this.m.oe(a),this.Nc)}; +g.ag=function(a){y("Query.orderByChild",1,1,arguments.length);if("$key"===a)throw Error('Query.orderByChild: "$key" is invalid. Use Query.orderByKey() instead.');if("$priority"===a)throw Error('Query.orderByChild: "$priority" is invalid. Use Query.orderByPriority() instead.');if("$value"===a)throw Error('Query.orderByChild: "$value" is invalid. Use Query.orderByValue() instead.');Vd("Query.orderByChild",a);Sh(this,"Query.orderByChild");var b=new E(a);if(b.e())throw Error("Query.orderByChild: cannot pass in empty path. Use Query.orderByValue() instead."); +b=new pc(b);b=of(this.m,b);Qh(b);return new X(this.u,this.path,b,!0)};g.bg=function(){y("Query.orderByKey",0,0,arguments.length);Sh(this,"Query.orderByKey");var a=of(this.m,tc);Qh(a);return new X(this.u,this.path,a,!0)};g.cg=function(){y("Query.orderByPriority",0,0,arguments.length);Sh(this,"Query.orderByPriority");var a=of(this.m,H);Qh(a);return new X(this.u,this.path,a,!0)}; +g.dg=function(){y("Query.orderByValue",0,0,arguments.length);Sh(this,"Query.orderByValue");var a=of(this.m,wc);Qh(a);return new X(this.u,this.path,a,!0)};g.Nd=function(a,b){y("Query.startAt",0,2,arguments.length);Od("Query.startAt",a,this.path,!0);Ud("Query.startAt",b);var c=this.m.Nd(a,b);Rh(c);Qh(c);if(this.m.ka)throw Error("Query.startAt: Starting point was already set (by another call to startAt or equalTo).");n(a)||(b=a=null);return new X(this.u,this.path,c,this.Nc)}; +g.gd=function(a,b){y("Query.endAt",0,2,arguments.length);Od("Query.endAt",a,this.path,!0);Ud("Query.endAt",b);var c=this.m.gd(a,b);Rh(c);Qh(c);if(this.m.na)throw Error("Query.endAt: Ending point was already set (by another call to endAt or equalTo).");return new X(this.u,this.path,c,this.Nc)}; +g.If=function(a,b){y("Query.equalTo",1,2,arguments.length);Od("Query.equalTo",a,this.path,!1);Ud("Query.equalTo",b);if(this.m.ka)throw Error("Query.equalTo: Starting point was already set (by another call to startAt or equalTo).");if(this.m.na)throw Error("Query.equalTo: Ending point was already set (by another call to endAt or equalTo).");return this.Nd(a,b).gd(a,b)}; +g.toString=function(){y("Query.toString",0,0,arguments.length);for(var a=this.path,b="",c=a.Y;c>6,128|63&r);else if(55296==(64512&r)){var a=n>18,128|r>>12&63,128|r>>6&63,128|63&r)}else t.push(239,191,189)}else 56320==(64512&r)?t.push(239,191,189):t.push(224|r>>12,128|r>>6&63,128|63&r)}return new Uint8Array(t)}function u(e){var t=void 0;try{t=decodeURIComponent(e)}catch(e){throw h.invalidFormat(p.DATA_URL,"Malformed data URL.")}return i(t)}function s(e,t){switch(e){case p.BASE64:var n=-1!==t.indexOf("-"),r=-1!==t.indexOf("_");if(n||r){var a=n?"-":"_";throw h.invalidFormat(e,"Invalid character '"+a+"' found: is it base64url encoded?")}break;case p.BASE64URL:var o=-1!==t.indexOf("+"),i=-1!==t.indexOf("/");if(o||i){var u=o?"+":"/";throw h.invalidFormat(e,"Invalid character '"+u+"' found: is it base64 encoded?")}t=t.replace(/-/g,"+").replace(/_/g,"/")}var s=void 0;try{s=atob(t)}catch(t){throw h.invalidFormat(e,"Invalid character found")}for(var l=new Uint8Array(s.length),c=0;c=t.length)&&e.substring(e.length-t.length)===t}Object.defineProperty(t,"__esModule",{value:!0}),t.StringData=t.StringFormat=void 0,t.formatValidator=a,t.dataFromString=o,t.utf8Bytes_=i,t.percentEncodedBytes_=u,t.base64Bytes_=s,t.dataURLBytes_=l,t.dataURLContentType_=c;var d=n(1),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}(d),p=t.StringFormat={RAW:"raw",BASE64:"base64",BASE64URL:"base64url",DATA_URL:"data_url"},v=t.StringData=function e(t,n){r(this,e),this.data=t,this.contentType=n||null},_=function e(t){r(this,e),this.base64=!1,this.contentType=null;var n=t.match(/^data:([^,]+)?,/);if(null===n)throw h.invalidFormat(p.DATA_URL,"Must be formatted 'data:[][;base64],");var a=n[1]||null;null!=a&&(this.base64=f(a,";base64"),this.contentType=this.base64?a.substring(0,a.length-";base64".length):a),this.rest=t.substring(t.indexOf(",")+1)}},,,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 a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t,n){for(var r=t.length,a=t.length,o=0;o=0))throw"Expected a number 0 or greater."})}function f(e,t){return new m(function(t){if(!(null===t||b.isDef(t)&&t instanceof Object))throw"Expected an Object.";void 0!==e&&null!==e&&e(t)},t)}function d(e){return new m(function(e){if(null!==e&&!b.isFunction(e))throw"Expected a Function."},e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ArgSpec=void 0,t.validate=o,t.and_=i,t.stringSpec=u,t.uploadDataSpec=s,t.metadataSpec=l,t.nonNegativeNumberSpec=c,t.looseObjectSpec=f,t.nullFunctionSpec=d;var h=n(1),p=r(h),v=n(13),_=r(v),y=n(0),b=r(y),m=t.ArgSpec=function e(t,n){a(this,e);var r=this;this.validator=function(e){r.optional&&!b.isJustDef(e)||t(e)},this.optional=!!n}},function(e,t,n){"use strict";function r(e,t){return-1!==e.indexOf(t)}function a(e){return Array.prototype.slice.call(e)}function o(e,t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)}Object.defineProperty(t,"__esModule",{value:!0}),t.contains=r,t.clone=a,t.remove=o},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 a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){return t}function i(e){return!m.isString(e)||e.length<2?e:(e=e,y.lastComponent(e))}function u(){if(w)return w;var e=[];e.push(new R("bucket")),e.push(new R("generation")),e.push(new R("metageneration")),e.push(new R("name","fullPath",!0));var t=new R("name");t.xform=function(e,t){return i(t)},e.push(t);var n=new R("size");return n.xform=function(e,t){return m.isDef(t)?+t:t},e.push(n),e.push(new R("timeCreated")),e.push(new R("updated")),e.push(new R("md5Hash",null,!0)),e.push(new R("cacheControl",null,!0)),e.push(new R("contentDisposition",null,!0)),e.push(new R("contentEncoding",null,!0)),e.push(new R("contentLanguage",null,!0)),e.push(new R("contentType",null,!0)),e.push(new R("metadata","customMetadata",!0)),e.push(new R("downloadTokens","downloadURLs",!1,function(e,t){if(!(m.isString(t)&&t.length>0))return[];var n=encodeURIComponent;return t.split(",").map(function(t){var r=e.bucket,a=e.fullPath,o="/b/"+n(r)+"/o/"+n(a);return g.makeDownloadUrl(o)+g.makeQueryString({alt:"media",token:t})})})),w=e}function s(e,t){Object.defineProperty(e,"ref",{get:function(){var n=e.bucket,r=e.fullPath,a=new v.Location(n,r);return t.makeStorageReference(a)}})}function l(e,t,n){var r={};r.type="file";for(var a=n.length,o=0;o1&&void 0!==arguments[1]?arguments[1]:null;return u.validate("put",[u.uploadDataSpec(),u.metadataSpec(!0)],arguments),this.throwIfRoot_("put"),new S.UploadTask(this,this.authWrapper,this.location,this.mappings(),new s.FbsBlob(e),t)}},{key:"putString",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:k.StringFormat.RAW,n=arguments[2];u.validate("putString",[u.stringSpec(),u.stringSpec(g.formatValidator,!0),u.metadataSpec(!0)],arguments),this.throwIfRoot_("putString");var r=g.dataFromString(t,e),a=v.clone(n);return!w.isDef(a.contentType)&&w.isDef(r.contentType)&&(a.contentType=r.contentType),new S.UploadTask(this,this.authWrapper,this.location,this.mappings(),new s.FbsBlob(r.data,!0),a)}},{key:"delete",value:function(){u.validate("delete",[],arguments),this.throwIfRoot_("delete");var e=this;return this.authWrapper.getAuthToken().then(function(t){var n=m.deleteObject(e.authWrapper,e.location);return e.authWrapper.makeRequest(n,t).getPromise()})}},{key:"getMetadata",value:function(){u.validate("getMetadata",[],arguments),this.throwIfRoot_("getMetadata");var e=this;return this.authWrapper.getAuthToken().then(function(t){var n=m.getMetadata(e.authWrapper,e.location,e.mappings());return e.authWrapper.makeRequest(n,t).getPromise()})}},{key:"updateMetadata",value:function(e){u.validate("updateMetadata",[u.metadataSpec()],arguments),this.throwIfRoot_("updateMetadata");var t=this;return this.authWrapper.getAuthToken().then(function(n){var r=m.updateMetadata(t.authWrapper,t.location,e,t.mappings());return t.authWrapper.makeRequest(r,n).getPromise()})}},{key:"getDownloadURL",value:function(){return u.validate("getDownloadURL",[],arguments),this.throwIfRoot_("getDownloadURL"),this.getMetadata().then(function(e){var t=e.downloadURLs[0];if(w.isDef(t))return t;throw c.noDownloadURL()})}},{key:"throwIfRoot_",value:function(e){if(""===this.location.path)throw c.invalidRootOperation(e)}},{key:"parent",get:function(){var e=y.parent(this.location.path);if(null===e)return null;var t=new f.Location(this.location.bucket,e);return this.newRef(this.authWrapper,t)}},{key:"root",get:function(){var e=new f.Location(this.location.bucket,"");return this.newRef(this.authWrapper,e)}},{key:"bucket",get:function(){return this.location.bucket}},{key:"fullPath",get:function(){return this.location.path}},{key:"name",get:function(){return y.lastComponent(this.location.path)}},{key:"storage",get:function(){return this.authWrapper.service()}}]),e}()},,,,,,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 a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.FbsBlob=void 0;var o=function(){function e(e,t){for(var n=0;n0}).join("/");return 0===e.length?n:e+"/"+n}function o(e){var t=e.lastIndexOf("/",e.length-2);return-1===t?e:e.slice(t+1)}Object.defineProperty(t,"__esModule",{value:!0}),t.parent=r,t.child=a,t.lastComponent=o},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 a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e){if(!e)throw w.unknown()}function i(e,t){return function(n,r){var a=E.fromResourceString(e,r,t);return o(null!==a),a}}function u(e){return function(t,n){var r=void 0;return r=401===t.getStatus()?w.unauthenticated():402===t.getStatus()?w.quotaExceeded(e.bucket):403===t.getStatus()?w.unauthorized(e.path):n,r.setServerResponseProp(n.serverResponseProp()),r}}function s(e){var t=u(e);return function(n,r){var a=t(n,r);return 404===n.getStatus()&&(a=w.objectNotFound(e.path)),a.setServerResponseProp(r.serverResponseProp()),a}}function l(e,t,n){var r=t.fullServerUrl(),a=I.makeNormalUrl(r),o=e.maxOperationRetryTime(),u=new U.RequestInfo(a,"GET",i(e,n),o);return u.errorHandler=s(t),u}function c(e,t,n,r){var a=t.fullServerUrl(),o=I.makeNormalUrl(a),u=E.toResourceString(n,r),l=e.maxOperationRetryTime(),c=new U.RequestInfo(o,"PATCH",i(e,r),l);return c.headers={"Content-Type":"application/json; charset=utf-8"},c.body=u,c.errorHandler=s(t),c}function f(e,t){var n=t.fullServerUrl(),r=I.makeNormalUrl(n),a=e.maxOperationRetryTime(),o=new U.RequestInfo(r,"DELETE",function(){},a);return o.successCodes=[200,204],o.errorHandler=s(t),o}function d(e,t){return e&&e.contentType||t&&t.type()||"application/octet-stream"}function h(e,t,n){var r=O.clone(n);return r.fullPath=e.path,r.size=t.size(),r.contentType||(r.contentType=d(null,t)),r}function p(e,t,n,r,a){var o=t.bucketOnlyServerUrl(),s={"X-Goog-Upload-Protocol":"multipart"},l=function(){for(var e="",t=0;t<2;t++)e+=Math.random().toString().slice(2);return e}();s["Content-Type"]="multipart/related; boundary="+l;var c=h(t,r,a),f=E.toResourceString(c,n),d="--"+l+"\r\nContent-Type: application/json; charset=utf-8\r\n\r\n"+f+"\r\n--"+l+"\r\nContent-Type: "+c.contentType+"\r\n\r\n",p=g.FbsBlob.getBlob(d,r,"\r\n--"+l+"--");if(null===p)throw w.cannotSliceBlob();var v={name:c.fullPath},_=I.makeUploadUrl(o),y=e.maxUploadRetryTime(),b=new U.RequestInfo(_,"POST",i(e,n),y);return b.urlParams=v,b.headers=s,b.body=p.uploadData(),b.errorHandler=u(t),b}function v(e,t){var n=void 0;try{n=e.getResponseHeader("X-Goog-Upload-Status")}catch(e){o(!1)}return o(k.contains(t||["active"],n)),n}function _(e,t,n,r,a){var i=t.bucketOnlyServerUrl(),s=h(t,r,a),l={name:s.fullPath},c=I.makeUploadUrl(i),f={"X-Goog-Upload-Protocol":"resumable","X-Goog-Upload-Command":"start","X-Goog-Upload-Header-Content-Length":r.size(),"X-Goog-Upload-Header-Content-Type":s.contentType,"Content-Type":"application/json; charset=utf-8"},d=E.toResourceString(s,n),p=e.maxUploadRetryTime(),_=new U.RequestInfo(c,"POST",function(e){v(e);var t=void 0;try{t=e.getResponseHeader("X-Goog-Upload-URL")}catch(e){o(!1)}return o(C.isString(t)),t},p);return _.urlParams=l,_.headers=f,_.body=d,_.errorHandler=u(t),_}function y(e,t,n,r){var a=e.maxUploadRetryTime(),i=new U.RequestInfo(n,"POST",function(e){var t=v(e,["active","final"]),n=void 0;try{n=e.getResponseHeader("X-Goog-Upload-Size-Received")}catch(e){o(!1)}var a=parseInt(n,10);return o(!isNaN(a)),new P(a,r.size(),"final"===t)},a);return i.headers={"X-Goog-Upload-Command":"query"},i.errorHandler=u(t),i}function b(e,t,n,r,a,o,s,l){var c=new P(0,0);if(s?(c.current=s.current,c.total=s.total):(c.current=0,c.total=r.size()),r.size()!==c.total)throw w.serverFileWrongSize();var f=c.total-c.current,d=f;a>0&&(d=Math.min(d,a));var h=c.current,p=h+d,_=d===f?"upload, finalize":"upload",y={"X-Goog-Upload-Command":_,"X-Goog-Upload-Offset":c.current},b=r.slice(h,p);if(null===b)throw w.cannotSliceBlob();var m=t.maxUploadRetryTime(),k=new U.RequestInfo(n,"POST",function(e,n){var a=v(e,["active","final"]),u=c.current+d,s=r.size(),l=void 0;return l="final"===a?i(t,o)(e,n):null,new P(u,s,"final"===a,l)},m);return k.headers=y,k.body=b.uploadData(),k.progressCallback=l||null,k.errorHandler=u(e),k}Object.defineProperty(t,"__esModule",{value:!0}),t.resumableUploadChunkSize=t.ResumableUploadStatus=void 0,t.handlerCheck=o,t.metadataHandler=i,t.sharedErrorHandler=u,t.objectErrorHandler=s,t.getMetadata=l,t.updateMetadata=c,t.deleteObject=f,t.determineContentType_=d,t.metadataForUpload_=h,t.multipartUpload=p,t.checkResumeHeader_=v,t.createResumableUpload=_,t.getResumableUploadStatus=y,t.continueResumableUpload=b;var m=n(12),k=r(m),g=n(22),R=n(1),w=r(R),S=n(13),E=r(S),T=n(3),O=r(T),U=n(46),N=n(0),C=r(N),A=n(14),I=r(A),P=t.ResumableUploadStatus=function e(t,n,r,o){a(this,e),this.current=t,this.total=n,this.finalized=!!r,this.metadata=o||null};t.resumableUploadChunkSize=262144},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=t.ErrorCode=void 0;!function(e){e[e.NO_ERROR=0]="NO_ERROR",e[e.NETWORK_ERROR=1]="NETWORK_ERROR",e[e.ABORT=2]="ABORT"}(r||(t.ErrorCode=r={}))},,,,,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.XhrIoPool=void 0;var a=function(){function e(e,t){for(var n=0;n1?t-1:0),i=1;i0&&void 0!==arguments[0]&&arguments[0]}}]),e}()},function(e,t,n){"use strict";function r(){return"undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:void 0}function a(){for(var e=r(),t=arguments.length,n=Array(t),a=0;a0&&(e.Authorization="Firebase "+t)}function i(e){var t="undefined"!=typeof firebase?firebase.SDK_VERSION:"AppManager";e["X-Firebase-Storage-Version"]="webjs/"+t}function u(e,t,n){var r=R.makeQueryString(e.urlParams),a=e.url+r,u=_.clone(e.headers);return o(u,t),i(u),new E(a,e.method,u,e.body,e.successCodes,e.additionalRetryCodes,e.handler,e.errorHandler,e.timeout,e.progressCallback,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.RequestEndStatus=void 0;var s=function(){function e(e,t){for(var n=0;n=500&&e<600||t||n}}]),e}(),T=t.RequestEndStatus=function e(t,n,r){a(this,e),this.wasSuccessCode=t,this.xhr=n,this.canceled=!!r}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});t.RequestInfo=function e(t,n,a,o){r(this,e),this.url=t,this.method=n,this.handler=a,this.timeout=o,this.urlParams={},this.headers={},this.body=null,this.errorHandler=null,this.progressCallback=null,this.successCodes=[200],this.additionalRetryCodes=[]}},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 a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.RequestMap=void 0;var o=function(){function e(e,t){for(var n=0;n5&&void 0!==arguments[5]?arguments[5]:null;a(this,e),this.transferred_=0,this.needToFetchStatus_=!1,this.needToFetchMetadata_=!1,this.observers_=[],this.error_=null,this.uploadUrl_=null,this.request_=null,this.chunkMultiplier_=1,this.resolve_=null,this.reject_=null,this.ref_=t,this.authWrapper_=n,this.location_=r,this.blob_=u,this.metadata_=l,this.mappings_=o,this.resumable_=this.shouldDoResumable_(this.blob_),this.state_=i.InternalTaskState.RUNNING,this.errorHandler_=function(e){s.request_=null,s.chunkMultiplier_=1,e.codeEquals(_.Code.CANCELED)?(s.needToFetchStatus_=!0,s.completeTransitions_()):(s.error_=e,s.transition_(i.InternalTaskState.ERROR))},this.metadataErrorHandler_=function(e){s.request_=null,e.codeEquals(_.Code.CANCELED)?s.completeTransitions_():(s.error_=e,s.transition_(i.InternalTaskState.ERROR))},this.promise_=b.make(function(e,t){s.resolve_=e,s.reject_=t,s.start_()}),this.promise_.then(null,function(){})}return o(e,[{key:"makeProgressCallback_",value:function(){var e=this,t=this.transferred_;return function(n){e.updateProgress_(t+n)}}},{key:"shouldDoResumable_",value:function(e){return e.size()>262144}},{key:"start_",value:function(){this.state_===i.InternalTaskState.RUNNING&&null===this.request_&&(this.resumable_?null===this.uploadUrl_?this.createResumable_():this.needToFetchStatus_?this.fetchStatus_():this.needToFetchMetadata_?this.fetchMetadata_():this.continueUpload_():this.oneShotUpload_())}},{key:"resolveToken_",value:function(e){var t=this;this.authWrapper_.getAuthToken().then(function(n){switch(t.state_){case i.InternalTaskState.RUNNING:e(n);break;case i.InternalTaskState.CANCELING:t.transition_(i.InternalTaskState.CANCELED);break;case i.InternalTaskState.PAUSING:t.transition_(i.InternalTaskState.PAUSED)}})}},{key:"createResumable_",value:function(){var e=this;this.resolveToken_(function(t){var n=k.createResumableUpload(e.authWrapper_,e.location_,e.mappings_,e.blob_,e.metadata_),r=e.authWrapper_.makeRequest(n,t);e.request_=r,r.getPromise().then(function(t){e.request_=null,e.uploadUrl_=t,e.needToFetchStatus_=!1,e.completeTransitions_()},e.errorHandler_)})}},{key:"fetchStatus_",value:function(){var e=this,t=this.uploadUrl_;this.resolveToken_(function(n){var r=k.getResumableUploadStatus(e.authWrapper_,e.location_,t,e.blob_),a=e.authWrapper_.makeRequest(r,n);e.request_=a,a.getPromise().then(function(t){t=t,e.request_=null,e.updateProgress_(t.current),e.needToFetchStatus_=!1,t.finalized&&(e.needToFetchMetadata_=!0),e.completeTransitions_()},e.errorHandler_)})}},{key:"continueUpload_",value:function(){var e=this,t=k.resumableUploadChunkSize*this.chunkMultiplier_,n=new k.ResumableUploadStatus(this.transferred_,this.blob_.size()),r=this.uploadUrl_;this.resolveToken_(function(a){var o=void 0;try{o=k.continueResumableUpload(e.location_,e.authWrapper_,r,e.blob_,t,e.mappings_,n,e.makeProgressCallback_())}catch(t){return e.error_=t,void e.transition_(i.InternalTaskState.ERROR)}var u=e.authWrapper_.makeRequest(o,a);e.request_=u,u.getPromise().then(function(t){e.increaseMultiplier_(),e.request_=null,e.updateProgress_(t.current),t.finalized?(e.metadata_=t.metadata,e.transition_(i.InternalTaskState.SUCCESS)):e.completeTransitions_()},e.errorHandler_)})}},{key:"increaseMultiplier_",value:function(){k.resumableUploadChunkSize*this.chunkMultiplier_<33554432&&(this.chunkMultiplier_*=2)}},{key:"fetchMetadata_",value:function(){var e=this;this.resolveToken_(function(t){var n=k.getMetadata(e.authWrapper_,e.location_,e.mappings_),r=e.authWrapper_.makeRequest(n,t);e.request_=r,r.getPromise().then(function(t){e.request_=null,e.metadata_=t,e.transition_(i.InternalTaskState.SUCCESS)},e.metadataErrorHandler_)})}},{key:"oneShotUpload_",value:function(){var e=this;this.resolveToken_(function(t){var n=k.multipartUpload(e.authWrapper_,e.location_,e.mappings_,e.blob_,e.metadata_),r=e.authWrapper_.makeRequest(n,t);e.request_=r,r.getPromise().then(function(t){e.request_=null,e.metadata_=t,e.updateProgress_(e.blob_.size()),e.transition_(i.InternalTaskState.SUCCESS)},e.errorHandler_)})}},{key:"updateProgress_",value:function(e){var t=this.transferred_;this.transferred_=e,this.transferred_!==t&&this.notifyObservers_()}},{key:"transition_",value:function(e){if(this.state_!==e)switch(e){case i.InternalTaskState.CANCELING:case i.InternalTaskState.PAUSING:this.state_=e,null!==this.request_&&this.request_.cancel();break;case i.InternalTaskState.RUNNING:var t=this.state_===i.InternalTaskState.PAUSED;this.state_=e,t&&(this.notifyObservers_(),this.start_());break;case i.InternalTaskState.PAUSED:this.state_=e,this.notifyObservers_();break;case i.InternalTaskState.CANCELED:this.error_=_.canceled(),this.state_=e,this.notifyObservers_();break;case i.InternalTaskState.ERROR:case i.InternalTaskState.SUCCESS:this.state_=e,this.notifyObservers_()}}},{key:"completeTransitions_",value:function(){switch(this.state_){case i.InternalTaskState.PAUSING:this.transition_(i.InternalTaskState.PAUSED);break;case i.InternalTaskState.CANCELING:this.transition_(i.InternalTaskState.CANCELED);break;case i.InternalTaskState.RUNNING:this.start_()}}},{key:"on",value:function(e){function t(e){try{return void l(e)}catch(e){}try{c(e);if(!(R.isJustDef(e.next)||R.isJustDef(e.error)||R.isJustDef(e.complete)))throw""}catch(e){throw u}}function n(e){return function(t,n){null!==e&&f.validate("on",e,arguments);var r=new s.Observer(t,n,o);return h.addObserver_(r),function(){h.removeObserver_(r)}}}var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,u="Expected a function or an Object with one of `next`, `error`, `complete` properties.",l=f.nullFunctionSpec(!0).validator,c=f.looseObjectSpec(null,!0).validator,d=[f.stringSpec(function(){if(e!==i.TaskEvent.STATE_CHANGED)throw"Expected one of the event types: ["+i.TaskEvent.STATE_CHANGED+"]."}),f.looseObjectSpec(t,!0),f.nullFunctionSpec(!0),f.nullFunctionSpec(!0)];f.validate("on",d,arguments);var h=this,p=[f.looseObjectSpec(function(e){if(null===e)throw u;t(e)}),f.nullFunctionSpec(!0),f.nullFunctionSpec(!0)];return R.isJustDef(r)||R.isJustDef(a)||R.isJustDef(o)?n(null)(r,a,o):n(p)}},{key:"then",value:function(e,t){return this.promise_.then(e,t)}},{key:"catch",value:function(e){return this.then(null,e)}},{key:"addObserver_",value:function(e){this.observers_.push(e),this.notifyObserver_(e)}},{key:"removeObserver_",value:function(e){h.remove(this.observers_,e)}},{key:"notifyObservers_",value:function(){var e=this;this.finishPromise_(),h.clone(this.observers_).forEach(function(t){e.notifyObserver_(t)})}},{key:"finishPromise_",value:function(){if(null!==this.resolve_){var e=!0;switch(u.taskStateFromInternalTaskState(this.state_)){case i.TaskState.SUCCESS:(0,p.async)(this.resolve_.bind(null,this.snapshot))();break;case i.TaskState.CANCELED:case i.TaskState.ERROR:var t=this.reject_;(0,p.async)(t.bind(null,this.error_))();break;default:e=!1}e&&(this.resolve_=null,this.reject_=null)}}},{key:"notifyObserver_",value:function(e){switch(u.taskStateFromInternalTaskState(this.state_)){case i.TaskState.RUNNING:case i.TaskState.PAUSED:null!==e.next&&(0,p.async)(e.next.bind(e,this.snapshot))();break;case i.TaskState.SUCCESS:null!==e.complete&&(0,p.async)(e.complete.bind(e))();break;case i.TaskState.CANCELED:case i.TaskState.ERROR:null!==e.error&&(0,p.async)(e.error.bind(e,this.error_))();break;default:null!==e.error&&(0,p.async)(e.error.bind(e,this.error_))()}}},{key:"resume",value:function(){f.validate("resume",[],arguments);var e=this.state_===i.InternalTaskState.PAUSED||this.state_===i.InternalTaskState.PAUSING;return e&&this.transition_(i.InternalTaskState.RUNNING),e}},{key:"pause",value:function(){f.validate("pause",[],arguments);var e=this.state_===i.InternalTaskState.RUNNING;return e&&this.transition_(i.InternalTaskState.PAUSING),e}},{key:"cancel",value:function(){f.validate("cancel",[],arguments);var e=this.state_===i.InternalTaskState.RUNNING||this.state_===i.InternalTaskState.PAUSING;return e&&this.transition_(i.InternalTaskState.CANCELING),e}},{key:"snapshot",get:function(){var e=u.taskStateFromInternalTaskState(this.state_);return new l.UploadTaskSnapshot(this.transferred_,this.blob_.size(),e,this.metadata_,this,this.ref_)}}]),e}()},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n Date: Thu, 15 Jun 2017 00:32:51 -0400 Subject: [PATCH 04/47] Add firebase-[app,database] JS deps in manifest.json --- manifest.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index d264125..2b8cbe7 100644 --- a/manifest.json +++ b/manifest.json @@ -12,7 +12,16 @@ "content_scripts": [{ "matches": ["*://github.com/*/pull*"], - "js": ["jquery-2.1.0.min.js", "underscore-min.js", "parse-1.6.14.min.js", "waitForKeyElements.js", "tracker.js"], + "js": [ + "jquery-2.1.0.min.js", + "underscore-min.js", + "parse-1.6.14.min.js", + "firebase.js", + "firebase-app.js", + "firebase-database.js", + "waitForKeyElements.js", + "tracker.js" + ], "css": ["main.css"] }], From 1eb77bd22dbdf8176ce9f559b2fdeddccfb112e7 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 00:33:09 -0400 Subject: [PATCH 05/47] Initialize firebase & firebase.database --- tracker.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tracker.js b/tracker.js index fdcde64..ef20f9e 100644 --- a/tracker.js +++ b/tracker.js @@ -3,6 +3,16 @@ // @match https://github.com/* // ==/UserScript== +const app = firebase.initializeApp({ + apiKey: "AIzaSyBb_2bG5cUaW25MfCdaDP7l5HF8UbF2QR0", + authDomain: "ghct-79a7b.firebaseapp.com", + databaseURL: "https://ghct-79a7b.firebaseio.com", + projectId: "ghct-79a7b", + storageBucket: "ghct-79a7b.appspot.com", + messagingSenderId: "45909398186" +}); +const database = firebase.database(); + const findAllThreads = function () { const threads = []; const d = $('#discussion_bucket'); From d03938e997900c7d6172b4b5aa85b5c439962d04 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 00:42:43 -0400 Subject: [PATCH 06/47] Organize core/lib/etc files better --- tracker.js => core/tracker.js | 0 .../waitForKeyElements.js | 0 firebase-app.js => lib/firebase-app.js | 0 .../firebase-database.js | 0 firebase.js => lib/firebase.js | 0 .../jquery-2.1.0.min.js | 0 .../parse-1.6.14.min.js | 0 underscore-min.js => lib/underscore-min.js | 0 manifest.json | 20 +++++++++---------- main.css => other/main.css | 0 options.html => other/options.html | 0 options.js => other/options.js | 0 12 files changed, 10 insertions(+), 10 deletions(-) rename tracker.js => core/tracker.js (100%) rename waitForKeyElements.js => core/waitForKeyElements.js (100%) rename firebase-app.js => lib/firebase-app.js (100%) rename firebase-database.js => lib/firebase-database.js (100%) rename firebase.js => lib/firebase.js (100%) rename jquery-2.1.0.min.js => lib/jquery-2.1.0.min.js (100%) rename parse-1.6.14.min.js => lib/parse-1.6.14.min.js (100%) rename underscore-min.js => lib/underscore-min.js (100%) rename main.css => other/main.css (100%) rename options.html => other/options.html (100%) rename options.js => other/options.js (100%) diff --git a/tracker.js b/core/tracker.js similarity index 100% rename from tracker.js rename to core/tracker.js diff --git a/waitForKeyElements.js b/core/waitForKeyElements.js similarity index 100% rename from waitForKeyElements.js rename to core/waitForKeyElements.js diff --git a/firebase-app.js b/lib/firebase-app.js similarity index 100% rename from firebase-app.js rename to lib/firebase-app.js diff --git a/firebase-database.js b/lib/firebase-database.js similarity index 100% rename from firebase-database.js rename to lib/firebase-database.js diff --git a/firebase.js b/lib/firebase.js similarity index 100% rename from firebase.js rename to lib/firebase.js diff --git a/jquery-2.1.0.min.js b/lib/jquery-2.1.0.min.js similarity index 100% rename from jquery-2.1.0.min.js rename to lib/jquery-2.1.0.min.js diff --git a/parse-1.6.14.min.js b/lib/parse-1.6.14.min.js similarity index 100% rename from parse-1.6.14.min.js rename to lib/parse-1.6.14.min.js diff --git a/underscore-min.js b/lib/underscore-min.js similarity index 100% rename from underscore-min.js rename to lib/underscore-min.js diff --git a/manifest.json b/manifest.json index 2b8cbe7..b7f72b2 100644 --- a/manifest.json +++ b/manifest.json @@ -13,17 +13,17 @@ "content_scripts": [{ "matches": ["*://github.com/*/pull*"], "js": [ - "jquery-2.1.0.min.js", - "underscore-min.js", - "parse-1.6.14.min.js", - "firebase.js", - "firebase-app.js", - "firebase-database.js", - "waitForKeyElements.js", - "tracker.js" + "lib/jquery-2.1.0.min.js", + "lib/underscore-min.js", + "lib/parse-1.6.14.min.js", + "lib/firebase.js", + "lib/firebase-app.js", + "lib/firebase-database.js", + "core/waitForKeyElements.js", + "core/tracker.js" ], - "css": ["main.css"] + "css": ["other/main.css"] }], - "options_page": "options.html" + "options_page": "other/options.html" } diff --git a/main.css b/other/main.css similarity index 100% rename from main.css rename to other/main.css diff --git a/options.html b/other/options.html similarity index 100% rename from options.html rename to other/options.html diff --git a/options.js b/other/options.js similarity index 100% rename from options.js rename to other/options.js From c2e1aed07d9c3471b34b5825a0708b384d32be8f Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 00:44:37 -0400 Subject: [PATCH 07/47] Merge LICENSE into README.md --- LICENSE | 21 --------------------- README.md | 27 +++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 23 deletions(-) delete mode 100644 LICENSE diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 7dd94e9..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Benjamin Bernard (commenttracker -at- benjaminbernard.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/README.md b/README.md index efdab30..9203500 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,29 @@ CommentTracker ============== -Repo for https://chrome.google.com/webstore/detail/github-comment-tracker/dkjmlcpmijiiejngafklkleghnaiabpa +Feel free to fork and create pull requests. -Feel free to fork and create pull requests +LICENSE +------- +The MIT License (MIT) + +Copyright (c) 2014 Benjamin Bernard +Copyright (c) 2017 Arjun Menon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. From 98638bf1aa4c07a59e12490a98a0e1b3112962e4 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 00:56:04 -0400 Subject: [PATCH 08/47] Get rid of unused chrome.storage --- core/tracker.js | 40 +++++++++++++++++----------------------- manifest.json | 3 +-- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index ef20f9e..7adae0e 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -66,29 +66,23 @@ const resetManipulations = function () { let CommentTracker; const main = function () { - /* global chrome */ - chrome.storage.sync.get({ - polling: true - }, function (items) { - Parse.initialize("ghct"); - Parse.serverURL = 'https://ghct.herokuapp.com/1'; - CommentTracker = Parse.Object.extend('CommentTracker'); - const Settings = Parse.Object.extend('Settings'); - - resetManipulations(); - - // waitForKeyElements will trigger for *each* changed/added element. - // Debounce both to only call checkThreads once, and to call with a slight - // delay for better compatiblity with the WideGithub extension: - // https://chrome.google.com/webstore/detail/wide-github/kaalofacklcidaampbokdplbklpeldpj - const debouncedCheckThreads = _.debounce(checkThreads, 100); - waitForKeyElements('.comment', debouncedCheckThreads); - - if (items.polling) { - new Parse.Query(Settings).get("bdWmF0aC6c").then(function (settings) { - setInterval(resetManipulations, settings.get('pollInterval')); - }); - } + Parse.initialize("ghct"); + Parse.serverURL = 'https://ghct.herokuapp.com/1'; + CommentTracker = Parse.Object.extend('CommentTracker'); + const Settings = Parse.Object.extend('Settings'); + + resetManipulations(); + + // waitForKeyElements will trigger for *each* changed/added element. + // Debounce both to only call checkThreads once, and to call with a slight + // delay for better compatiblity with the WideGithub extension: + // https://chrome.google.com/webstore/detail/wide-github/kaalofacklcidaampbokdplbklpeldpj + const debouncedCheckThreads = _.debounce(checkThreads, 100); + waitForKeyElements('.comment', debouncedCheckThreads); + + // Polling: + new Parse.Query(Settings).get("bdWmF0aC6c").then(function (settings) { + setInterval(resetManipulations, settings.get('pollInterval')); }); }; diff --git a/manifest.json b/manifest.json index b7f72b2..bfebb95 100644 --- a/manifest.json +++ b/manifest.json @@ -6,8 +6,7 @@ "version": "1.1.6", "permissions": [ - "https://github.com/", - "storage" + "https://github.com/" ], "content_scripts": [{ From ff81c86fad62c39be50d341fbf4114d17f04f5eb Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 00:57:59 -0400 Subject: [PATCH 09/47] Set pollInterval, and remove `Settings` retrieval --- core/tracker.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index 7adae0e..89b0050 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -69,7 +69,6 @@ const main = function () { Parse.initialize("ghct"); Parse.serverURL = 'https://ghct.herokuapp.com/1'; CommentTracker = Parse.Object.extend('CommentTracker'); - const Settings = Parse.Object.extend('Settings'); resetManipulations(); @@ -80,10 +79,8 @@ const main = function () { const debouncedCheckThreads = _.debounce(checkThreads, 100); waitForKeyElements('.comment', debouncedCheckThreads); - // Polling: - new Parse.Query(Settings).get("bdWmF0aC6c").then(function (settings) { - setInterval(resetManipulations, settings.get('pollInterval')); - }); + const pollInterval = 60000; + setInterval(resetManipulations, pollInterval); }; const expandUnresolvedThreads = function () { From 5af97d74de2f70494a833f2bfd47fe33daf4e74a Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 02:30:12 -0400 Subject: [PATCH 10/47] Migrate basic value read and set to Firebase --- core/tracker.js | 96 +++++++++++++++++++++++++++++-------------------- manifest.json | 2 ++ 2 files changed, 59 insertions(+), 39 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index 89b0050..74026d0 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -42,6 +42,9 @@ const findAllThreads = function () { return threads; }; +let allThreads; +let initalCanBeMerged = false; + const checkThreads = function () { const newThreads = findAllThreads(); if (_.isEqual(_.pluck(newThreads, 'id'), _.pluck(allThreads, 'id'))) { @@ -55,20 +58,31 @@ const checkThreads = function () { const resetManipulations = function () { allThreads = findAllThreads(); - annotateWithParseInfo(allThreads).then(function () { - _.each(allThreads, function (info) { updateThread(info, {suppressMergeUpdate: true}); }); - }).then(function () { - expandUnresolvedThreads(); - updateMergeButton(); + _.each(allThreads, function(info) { + firebase.database().ref('testing_zone/' + info.id).once('value').then(function(snapshot) { + const result = snapshot.val(); + if (result) { + info.resolved = result.resolved && result.lastCommentSeen === info.lastCommentId; + info.lastCommentSeen = result.lastCommentSeen; + } + updateThread(info, {suppressMergeUpdate: true}); + }); }); + + // annotateWithParseInfo(allThreads).then(function () { + // _.each(allThreads, function (info) { updateThread(info, {suppressMergeUpdate: true}); }); + // }).then(function () { + // expandUnresolvedThreads(); + // updateMergeButton(); + // }); }; -let CommentTracker; +// let CommentTracker; const main = function () { - Parse.initialize("ghct"); - Parse.serverURL = 'https://ghct.herokuapp.com/1'; - CommentTracker = Parse.Object.extend('CommentTracker'); + // Parse.initialize("ghct"); + // Parse.serverURL = 'https://ghct.herokuapp.com/1'; + // CommentTracker = Parse.Object.extend('CommentTracker'); resetManipulations(); @@ -96,9 +110,6 @@ const expandUnresolvedThreads = function () { }); }; -let allThreads; -let initalCanBeMerged = false; - const allThreadsResolved = function () { return _.all(allThreads, function (info) { return info.resolved; @@ -144,23 +155,23 @@ const updateMergeButton = function () { } }; -const annotateWithParseInfo = function (allThreads) { - const ids = _.pluck(allThreads, 'id'); - const query = new Parse.Query(CommentTracker); - query.containedIn('commentId', ids); - - return query.find().then(function (results) { - _.each(results, function (result) { - const id = result.get('commentId'); - const info = _.findWhere(allThreads, {id: id}); - if (info) { - info.resolved = result.get('resolved') && result.get('lastCommentSeen') === info.lastCommentId; - info.lastCommentSeen = result.get('lastCommentSeen'); - info.tracker = result; - } - }); - }); -}; +// const annotateWithParseInfo = function (allThreads) { +// const ids = _.pluck(allThreads, 'id'); +// const query = new Parse.Query(CommentTracker); +// query.containedIn('commentId', ids); +// +// return query.find().then(function (results) { +// _.each(results, function (result) { +// const id = result.get('commentId'); +// const info = _.findWhere(allThreads, {id: id}); +// if (info) { +// info.resolved = result.get('resolved') && result.get('lastCommentSeen') === info.lastCommentId; +// info.lastCommentSeen = result.get('lastCommentSeen'); +// info.tracker = result; +// } +// }); +// }); +// }; const makeButton = function (elem, threadInfo) { const e = $(elem); @@ -176,10 +187,14 @@ const makeButton = function (elem, threadInfo) { e.find('.comment-track-unresolve').on('click', function (event) { event.preventDefault(); - const tracker = threadInfo.tracker; - tracker.set('resolved', false); - tracker.set('lastCommentSeen', null); - tracker.save(); + + // const tracker = threadInfo.tracker; + // tracker.set('resolved', false); + // tracker.set('lastCommentSeen', null); + // tracker.save(); + firebase.database().ref('testing_zone/' + threadInfo.id).set({ + resolved: false, lastCommentSeen: null + }); threadInfo.resolved = false; @@ -190,16 +205,19 @@ const makeButton = function (elem, threadInfo) { e.find('.comment-track-resolve').on('click', function (event) { event.preventDefault(); - const tracker = threadInfo.tracker || new CommentTracker(); - tracker.set('commentId', threadInfo.id); - tracker.set('resolved', true); - tracker.set('lastCommentSeen', threadInfo.lastCommentId); + firebase.database().ref('testing_zone/' + threadInfo.id).set({ + resolved: true, lastCommentSeen: threadInfo.lastCommentId + }); - tracker.save(); + // const tracker = threadInfo.tracker || new CommentTracker(); + // tracker.set('commentId', threadInfo.id); + // tracker.set('resolved', true); + // tracker.set('lastCommentSeen', threadInfo.lastCommentId); + // tracker.save(); threadInfo.resolved = true; - threadInfo.tracker = tracker; + // threadInfo.tracker = tracker; updateThread(threadInfo); }); diff --git a/manifest.json b/manifest.json index bfebb95..b307b71 100644 --- a/manifest.json +++ b/manifest.json @@ -9,6 +9,8 @@ "https://github.com/" ], + "content_security_policy": "script-src 'self' https://cdn.firebase.com https://*.firebaseio.com https://*.firebaseio-demo.com; object-src 'self'", + "content_scripts": [{ "matches": ["*://github.com/*/pull*"], "js": [ From 990c29d91b8091905ea3f71007a94909d83c19ef Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 03:03:17 -0400 Subject: [PATCH 11/47] Use Promise.all for read, uncomment some functionality, delete unused code --- core/tracker.js | 60 ++++++------------------------------------------- 1 file changed, 7 insertions(+), 53 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index 74026d0..377b433 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -58,32 +58,21 @@ const checkThreads = function () { const resetManipulations = function () { allThreads = findAllThreads(); - _.each(allThreads, function(info) { - firebase.database().ref('testing_zone/' + info.id).once('value').then(function(snapshot) { - const result = snapshot.val(); + Promise.all(allThreads.map(info => firebase.database().ref('testing_zone/' + info.id).once('value'))).then(snapshots => { + allThreads.forEach((info, i) => { + const result = snapshots[i].val(); if (result) { info.resolved = result.resolved && result.lastCommentSeen === info.lastCommentId; info.lastCommentSeen = result.lastCommentSeen; } updateThread(info, {suppressMergeUpdate: true}); }); + expandUnresolvedThreads(); + updateMergeButton(); }); - - // annotateWithParseInfo(allThreads).then(function () { - // _.each(allThreads, function (info) { updateThread(info, {suppressMergeUpdate: true}); }); - // }).then(function () { - // expandUnresolvedThreads(); - // updateMergeButton(); - // }); }; -// let CommentTracker; - const main = function () { - // Parse.initialize("ghct"); - // Parse.serverURL = 'https://ghct.herokuapp.com/1'; - // CommentTracker = Parse.Object.extend('CommentTracker'); - resetManipulations(); // waitForKeyElements will trigger for *each* changed/added element. @@ -155,24 +144,6 @@ const updateMergeButton = function () { } }; -// const annotateWithParseInfo = function (allThreads) { -// const ids = _.pluck(allThreads, 'id'); -// const query = new Parse.Query(CommentTracker); -// query.containedIn('commentId', ids); -// -// return query.find().then(function (results) { -// _.each(results, function (result) { -// const id = result.get('commentId'); -// const info = _.findWhere(allThreads, {id: id}); -// if (info) { -// info.resolved = result.get('resolved') && result.get('lastCommentSeen') === info.lastCommentId; -// info.lastCommentSeen = result.get('lastCommentSeen'); -// info.tracker = result; -// } -// }); -// }); -// }; - const makeButton = function (elem, threadInfo) { const e = $(elem); e.find('.comment-track-action').remove(); @@ -188,14 +159,7 @@ const makeButton = function (elem, threadInfo) { e.find('.comment-track-unresolve').on('click', function (event) { event.preventDefault(); - // const tracker = threadInfo.tracker; - // tracker.set('resolved', false); - // tracker.set('lastCommentSeen', null); - // tracker.save(); - firebase.database().ref('testing_zone/' + threadInfo.id).set({ - resolved: false, lastCommentSeen: null - }); - + firebase.database().ref('testing_zone/' + threadInfo.id).set({resolved: false, lastCommentSeen: null}); threadInfo.resolved = false; updateThread(threadInfo); @@ -206,18 +170,8 @@ const makeButton = function (elem, threadInfo) { e.find('.comment-track-resolve').on('click', function (event) { event.preventDefault(); - firebase.database().ref('testing_zone/' + threadInfo.id).set({ - resolved: true, lastCommentSeen: threadInfo.lastCommentId - }); - - // const tracker = threadInfo.tracker || new CommentTracker(); - // tracker.set('commentId', threadInfo.id); - // tracker.set('resolved', true); - // tracker.set('lastCommentSeen', threadInfo.lastCommentId); - // tracker.save(); - + firebase.database().ref('testing_zone/' + threadInfo.id).set({resolved: true, lastCommentSeen: threadInfo.lastCommentId}); threadInfo.resolved = true; - // threadInfo.tracker = tracker; updateThread(threadInfo); }); From 1f25ce381cc29bcb3f69c6021dd86bc2d0c32ac2 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 03:28:03 -0400 Subject: [PATCH 12/47] Listen for real-time updates to status with Firebase --- core/tracker.js | 52 ++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index 377b433..c25b365 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -52,28 +52,31 @@ const checkThreads = function () { return; } } - resetManipulations(); + setListeners(); }; -const resetManipulations = function () { +const setListeners = function () { allThreads = findAllThreads(); - Promise.all(allThreads.map(info => firebase.database().ref('testing_zone/' + info.id).once('value'))).then(snapshots => { - allThreads.forEach((info, i) => { - const result = snapshots[i].val(); - if (result) { - info.resolved = result.resolved && result.lastCommentSeen === info.lastCommentId; - info.lastCommentSeen = result.lastCommentSeen; - } - updateThread(info, {suppressMergeUpdate: true}); - }); - expandUnresolvedThreads(); - updateMergeButton(); + allThreads.forEach(info => { + if (!info.listening) { + firebase.database().ref('testing_zone/' + info.id).on('value', snapshot => { + const val = snapshot.val(); + if (val) { + info.resolved = val.resolved && val.lastCommentSeen === info.lastCommentId; + info.lastCommentSeen = val.lastCommentSeen; + } + updateThread(info, {suppressMergeUpdate: true}); + expandUnresolvedThread(info); + updateMergeButton(); + }); + info.listening = true; + } }); }; const main = function () { - resetManipulations(); + setListeners(); // waitForKeyElements will trigger for *each* changed/added element. // Debounce both to only call checkThreads once, and to call with a slight @@ -81,22 +84,17 @@ const main = function () { // https://chrome.google.com/webstore/detail/wide-github/kaalofacklcidaampbokdplbklpeldpj const debouncedCheckThreads = _.debounce(checkThreads, 100); waitForKeyElements('.comment', debouncedCheckThreads); - - const pollInterval = 60000; - setInterval(resetManipulations, pollInterval); }; -const expandUnresolvedThreads = function () { - _.each(allThreads, function (info) { - if (!info.resolved) { - const id = info.id; - const elem = $('#' + id).first(); - const container = elem.parents('.outdated-comment'); - if (container.length > 0) { - container.removeClass('closed').addClass('open'); - } +const expandUnresolvedThread = (info) => { + if (!info.resolved) { + const id = info.id; + const elem = $('#' + id).first(); + const container = elem.parents('.outdated-comment'); + if (container.length > 0) { + container.removeClass('closed').addClass('open'); } - }); + } }; const allThreadsResolved = function () { From a20cad5118c7b5c975e1c4d4ed9f15be87a0e773 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 03:35:36 -0400 Subject: [PATCH 13/47] Remove lib/parse*.js, options.html, options.js --- lib/parse-1.6.14.min.js | 16 ---------------- manifest.json | 5 +---- other/options.html | 12 ------------ other/options.js | 26 -------------------------- 4 files changed, 1 insertion(+), 58 deletions(-) delete mode 100644 lib/parse-1.6.14.min.js delete mode 100644 other/options.html delete mode 100644 other/options.js diff --git a/lib/parse-1.6.14.min.js b/lib/parse-1.6.14.min.js deleted file mode 100644 index 88b6265..0000000 --- a/lib/parse-1.6.14.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Parse JavaScript SDK v1.6.14 - * - * Copyright (c) 2015-present, Parse, LLC. - * All rights reserved. - * - * The source tree of this library can be found at - * https://github.com/ParsePlatform/Parse-SDK-JS - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Parse=e()}}(function(){return function e(t,r,n){function a(o,i){if(!r[o]){if(!t[o]){var u="function"==typeof require&&require;if(!i&&u)return u(o,!0);if(s)return s(o,!0);var l=new Error("Cannot find module '"+o+"'");throw l.code="MODULE_NOT_FOUND",l}var c=r[o]={exports:{}};t[o][0].call(c.exports,function(e){var r=t[o][1][e];return a(r?r:e)},c,c.exports,e,t,r,n)}return r[o].exports}for(var s="function"==typeof require&&require,o=0;or;r++)t[r]=arguments[r];return c["default"].getRESTController().request.apply(null,t)},m._ajax=function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return c["default"].getRESTController().ajax.apply(null,t)},m._decode=function(e,t){return(0,o["default"])(t)},m._encode=function(e,t,r){return(0,u["default"])(e,r)},m._getInstallationId=function(){return c["default"].getInstallationController().currentInstallationId()},c["default"].setInstallationController(d["default"]),c["default"].setRESTController(v["default"]),m.Parse=m,t.exports=m},{"./Analytics":1,"./Cloud":2,"./CoreManager":3,"./FacebookUtils":4,"./InstallationController":5,"./ParseACL":8,"./ParseConfig":9,"./ParseError":10,"./ParseFile":11,"./ParseGeoPoint":12,"./ParseInstallation":13,"./ParseObject":14,"./ParseOp":15,"./ParsePromise":16,"./ParseQuery":17,"./ParseRelation":18,"./ParseRole":19,"./ParseSession":20,"./ParseUser":21,"./Push":22,"./RESTController":23,"./Storage":24,"./decode":29,"./encode":30,"babel-runtime/helpers/interop-require-default":47,"babel-runtime/helpers/interop-require-wildcard":48}],8:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/create-class")["default"],a=e("babel-runtime/helpers/class-call-check")["default"],s=e("babel-runtime/core-js/object/keys")["default"],o=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var i=e("./ParseRole"),u=o(i),l=e("./ParseUser"),c=o(l),f="*",d=function(){function e(t){if(a(this,e),this.permissionsById={},t&&"object"==typeof t)if(t instanceof c["default"])this.setReadAccess(t,!0),this.setWriteAccess(t,!0);else for(var r in t){var n=t[r];if("string"!=typeof r)throw new TypeError("Tried to create an ACL with an invalid user id.");this.permissionsById[r]={};for(var s in n){var o=n[s];if("read"!==s&&"write"!==s)throw new TypeError("Tried to create an ACL with an invalid permission type.");if("boolean"!=typeof o)throw new TypeError("Tried to create an ACL with an invalid permission value.");this.permissionsById[r][s]=o}}else if("function"==typeof t)throw new TypeError("ParseACL constructed with a function. Did you forget ()?")}return n(e,[{key:"toJSON",value:function(){var e={};for(var t in this.permissionsById)e[t]=this.permissionsById[t];return e}},{key:"equals",value:function(t){if(!(t instanceof e))return!1;var r=s(this.permissionsById),n=s(t.permissionsById);if(r.length!==n.length)return!1;for(var a in this.permissionsById){if(!t.permissionsById[a])return!1;if(this.permissionsById[a].read!==t.permissionsById[a].read)return!1;if(this.permissionsById[a].write!==t.permissionsById[a].write)return!1}return!0}},{key:"_setAccess",value:function(e,t,r){if(t instanceof c["default"]?t=t.id:t instanceof u["default"]&&(t="role:"+t.getName()),"string"!=typeof t)throw new TypeError("userId must be a string.");if("boolean"!=typeof r)throw new TypeError("allowed must be either true or false.");var n=this.permissionsById[t];if(!n){if(!r)return;n={},this.permissionsById[t]=n}r?this.permissionsById[t][e]=!0:(delete n[e],0===s(n).length&&delete this.permissionsById[t])}},{key:"_getAccess",value:function(e,t){t instanceof c["default"]?t=t.id:t instanceof u["default"]&&(t="role:"+t.getName());var r=this.permissionsById[t];return r?!!r[e]:!1}},{key:"setReadAccess",value:function(e,t){this._setAccess("read",e,t)}},{key:"getReadAccess",value:function(e){return this._getAccess("read",e)}},{key:"setWriteAccess",value:function(e,t){this._setAccess("write",e,t)}},{key:"getWriteAccess",value:function(e){return this._getAccess("write",e)}},{key:"setPublicReadAccess",value:function(e){this.setReadAccess(f,e)}},{key:"getPublicReadAccess",value:function(){return this.getReadAccess(f)}},{key:"setPublicWriteAccess",value:function(e){this.setWriteAccess(f,e)}},{key:"getPublicWriteAccess",value:function(){return this.getWriteAccess(f)}},{key:"getRoleReadAccess",value:function(e){if(e instanceof u["default"]&&(e=e.getName()),"string"!=typeof e)throw new TypeError("role must be a ParseRole or a String");return this.getReadAccess("role:"+e)}},{key:"getRoleWriteAccess",value:function(e){if(e instanceof u["default"]&&(e=e.getName()),"string"!=typeof e)throw new TypeError("role must be a ParseRole or a String");return this.getWriteAccess("role:"+e)}},{key:"setRoleReadAccess",value:function(e,t){if(e instanceof u["default"]&&(e=e.getName()),"string"!=typeof e)throw new TypeError("role must be a ParseRole or a String");this.setReadAccess("role:"+e,t)}},{key:"setRoleWriteAccess",value:function(e,t){if(e instanceof u["default"]&&(e=e.getName()),"string"!=typeof e)throw new TypeError("role must be a ParseRole or a String");this.setWriteAccess("role:"+e,t)}}]),e}();r["default"]=d,t.exports=r["default"]},{"./ParseRole":19,"./ParseUser":21,"babel-runtime/core-js/object/keys":41,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/interop-require-default":47}],9:[function(e,t,r){"use strict";function n(e){try{var t=JSON.parse(e);if(t&&"object"==typeof t)return(0,c["default"])(t)}catch(r){return null}}var a=e("babel-runtime/helpers/create-class")["default"],s=e("babel-runtime/helpers/class-call-check")["default"],o=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var i=e("./CoreManager"),u=o(i),l=e("./decode"),c=o(l),f=e("./encode"),d=(o(f),e("./escape")),h=o(d),p=e("./ParseError"),y=o(p),v=e("./ParsePromise"),m=o(v),b=e("./Storage"),_=o(b),g=function(){function e(){s(this,e),this.attributes={},this._escapedAttributes={}}return a(e,[{key:"get",value:function(e){return this.attributes[e]}},{key:"escape",value:function(e){var t=this._escapedAttributes[e];if(t)return t;var r=this.attributes[e],n="";return null!=r&&(n=(0,h["default"])(r.toString())),this._escapedAttributes[e]=n,n}}],[{key:"current",value:function(){var e=u["default"].getConfigController();return e.current()}},{key:"get",value:function(e){e=e||{};var t=u["default"].getConfigController();return t.get()._thenRunCallbacks(e)}}]),e}();r["default"]=g;var w=null,O="currentConfig";u["default"].setConfigController({current:function(){if(w)return w;var e,t=new g,r=_["default"].generatePath(O);if(!_["default"].async()){if(e=_["default"].getItem(r)){var a=n(e);a&&(t.attributes=a,w=t)}return t}return _["default"].getItemAsync(r).then(function(e){if(e){var r=n(e);r&&(t.attributes=r,w=t)}return t})},get:function(){var e=u["default"].getRESTController();return e.request("GET","config",{},{}).then(function(e){if(!e||!e.params){var t=new y["default"](y["default"].INVALID_JSON,"Config JSON response invalid.");return m["default"].error(t)}var r=new g;r.attributes={};for(var n in e.params)r.attributes[n]=(0,c["default"])(e.params[n]);return w=r,_["default"].setItemAsync(_["default"].generatePath(O),JSON.stringify(e.params)).then(function(){return r})})}}),t.exports=r["default"]},{"./CoreManager":3,"./ParseError":10,"./ParsePromise":16,"./Storage":24,"./decode":29,"./encode":30,"./escape":32,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/interop-require-default":47}],10:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/class-call-check")["default"];Object.defineProperty(r,"__esModule",{value:!0});var a=function s(e,t){n(this,s),this.code=e,this.message=t};r["default"]=a,a.OTHER_CAUSE=-1,a.INTERNAL_SERVER_ERROR=1,a.CONNECTION_FAILED=100,a.OBJECT_NOT_FOUND=101,a.INVALID_QUERY=102,a.INVALID_CLASS_NAME=103,a.MISSING_OBJECT_ID=104,a.INVALID_KEY_NAME=105,a.INVALID_POINTER=106,a.INVALID_JSON=107,a.COMMAND_UNAVAILABLE=108,a.NOT_INITIALIZED=109,a.INCORRECT_TYPE=111,a.INVALID_CHANNEL_NAME=112,a.PUSH_MISCONFIGURED=115,a.OBJECT_TOO_LARGE=116,a.OPERATION_FORBIDDEN=119,a.CACHE_MISS=120,a.INVALID_NESTED_KEY=121,a.INVALID_FILE_NAME=122,a.INVALID_ACL=123,a.TIMEOUT=124,a.INVALID_EMAIL_ADDRESS=125,a.MISSING_CONTENT_TYPE=126,a.MISSING_CONTENT_LENGTH=127,a.INVALID_CONTENT_LENGTH=128,a.FILE_TOO_LARGE=129,a.FILE_SAVE_ERROR=130,a.DUPLICATE_VALUE=137,a.INVALID_ROLE_NAME=139,a.EXCEEDED_QUOTA=140,a.SCRIPT_FAILED=141,a.VALIDATION_ERROR=142,a.INVALID_IMAGE_DATA=143,a.UNSAVED_FILE_ERROR=151,a.INVALID_PUSH_TIME_ERROR=152,a.FILE_DELETE_ERROR=153,a.REQUEST_LIMIT_EXCEEDED=155,a.INVALID_EVENT_NAME=160,a.USERNAME_MISSING=200,a.PASSWORD_MISSING=201,a.USERNAME_TAKEN=202,a.EMAIL_TAKEN=203,a.EMAIL_MISSING=204,a.EMAIL_NOT_FOUND=205,a.SESSION_MISSING=206,a.MUST_CREATE_USER_THROUGH_SIGNUP=207,a.ACCOUNT_ALREADY_LINKED=208,a.INVALID_SESSION_TOKEN=209,a.LINKED_ID_MISSING=250,a.INVALID_LINKED_SESSION=251,a.UNSUPPORTED_SERVICE=252,a.AGGREGATE_ERROR=600,a.FILE_READ_ERROR=601,a.X_DOMAIN_REQUEST=602,t.exports=r["default"]},{"babel-runtime/helpers/class-call-check":43}],11:[function(e,t,r){"use strict";function n(e){if(26>e)return String.fromCharCode(65+e);if(52>e)return String.fromCharCode(97+(e-26));if(62>e)return String.fromCharCode(48+(e-52));if(62===e)return"+";if(63===e)return"/";throw new TypeError("Tried to encode large digit "+e+" in base64.")}var a=e("babel-runtime/helpers/create-class")["default"],s=e("babel-runtime/helpers/class-call-check")["default"],o=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var i=e("./CoreManager"),u=o(i),l=e("./ParsePromise"),c=(o(l),function(){function e(t,r,n){s(this,e);var a=n||"";if(this._name=t,Array.isArray(r))this._source={format:"base64",base64:e.encodeBase64(r),type:a};else if("undefined"!=typeof File&&r instanceof File)this._source={format:"file",file:r,type:a};else if(r&&r.hasOwnProperty("base64")){var o=/^data:([a-zA-Z]*\/[a-zA-Z+.-]*);(charset=[a-zA-Z0-9\-\/\s]*,)?base64,(\S+)/.exec(r.base64);o&&o.length>0?this._source={format:"base64",base64:4===o.length?o[3]:o[2],type:o[1]}:this._source={format:"base64",base64:r.base64,type:a}}else if("undefined"!=typeof r)throw new TypeError("Cannot create a Parse.File with that data.")}return a(e,[{key:"name",value:function(){return this._name}},{key:"url",value:function(){return this._url}},{key:"save",value:function(e){var t=this;e=e||{};var r=u["default"].getFileController();return this._previousSave||("file"===this._source.format?this._previousSave=r.saveFile(this._name,this._source).then(function(e){return t._name=e.name,t._url=e.url,t}):this._previousSave=r.saveBase64(this._name,this._source).then(function(e){return t._name=e.name,t._url=e.url,t})),this._previousSave?this._previousSave._thenRunCallbacks(e):void 0}},{key:"toJSON",value:function(){return{__type:"File",name:this._name,url:this._url}}},{key:"equals",value:function(t){return this===t?!0:t instanceof e&&this.name()===t.name()&&this.url()===t.url()&&"undefined"!=typeof this.url()}}],[{key:"fromJSON",value:function(t){if("File"!==t.__type)throw new TypeError("JSON object does not represent a ParseFile");var r=new e(t.name);return r._url=t.url,r}},{key:"encodeBase64",value:function(e){var t=[];t.length=Math.ceil(e.length/3);for(var r=0;r>2&63),n(a<<4&48|s>>4&15),i?n(s<<2&60|o>>6&3):"=",u?n(63&o):"="].join("")}return t.join("")}}]),e}());r["default"]=c,u["default"].setFileController({saveFile:function(e,t){if("file"!==t.format)throw new Error("saveFile can only be used with File-type sources.");var r={"X-Parse-Application-ID":u["default"].get("APPLICATION_ID"),"X-Parse-JavaScript-Key":u["default"].get("JAVASCRIPT_KEY")},n=u["default"].get("SERVER_URL");return"/"!==n[n.length-1]&&(n+="/"),n+="files/"+e,u["default"].getRESTController().ajax("POST",n,t.file,r)},saveBase64:function(e,t){if("base64"!==t.format)throw new Error("saveBase64 can only be used with Base64-type sources.");var r={base64:t.base64};return t.type&&(r._ContentType=t.type),u["default"].getRESTController().request("POST","files/"+e,r)}}),t.exports=r["default"]},{"./CoreManager":3,"./ParsePromise":16,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/interop-require-default":47}],12:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/create-class")["default"],a=e("babel-runtime/helpers/class-call-check")["default"],s=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var o=e("./ParsePromise"),i=s(o),u=function(){function e(t,r){a(this,e),Array.isArray(t)?(e._validate(t[0],t[1]),this._latitude=t[0],this._longitude=t[1]):"object"==typeof t?(e._validate(t.latitude,t.longitude),this._latitude=t.latitude,this._longitude=t.longitude):"number"==typeof t&&"number"==typeof r?(e._validate(t,r),this._latitude=t,this._longitude=r):(this._latitude=0,this._longitude=0)}return n(e,[{key:"toJSON",value:function(){return e._validate(this._latitude,this._longitude),{__type:"GeoPoint",latitude:this._latitude,longitude:this._longitude}}},{key:"equals",value:function(t){return t instanceof e&&this.latitude===t.latitude&&this.longitude===t.longitude}},{key:"radiansTo",value:function(e){var t=Math.PI/180,r=this.latitude*t,n=this.longitude*t,a=e.latitude*t,s=e.longitude*t,o=Math.sin((r-a)/2),i=Math.sin((n-s)/2),u=o*o+Math.cos(r)*Math.cos(a)*i*i;return u=Math.min(1,u),2*Math.asin(Math.sqrt(u))}},{key:"kilometersTo",value:function(e){return 6371*this.radiansTo(e)}},{key:"milesTo",value:function(e){return 3958.8*this.radiansTo(e)}},{key:"latitude",get:function(){return this._latitude},set:function(t){e._validate(t,this.longitude),this._latitude=t}},{key:"longitude",get:function(){return this._longitude},set:function(t){e._validate(this.latitude,t),this._longitude=t}}],[{key:"_validate",value:function(e,t){if(e!==e||t!==t)throw new TypeError("GeoPoint latitude and longitude must be valid numbers");if(-90>e)throw new TypeError("GeoPoint latitude out of bounds: "+e+" < -90.0.");if(e>90)throw new TypeError("GeoPoint latitude out of bounds: "+e+" > 90.0.");if(-180>t)throw new TypeError("GeoPoint longitude out of bounds: "+t+" < -180.0.");if(t>180)throw new TypeError("GeoPoint longitude out of bounds: "+t+" > 180.0.")}},{key:"current",value:function(t){var r=new i["default"];return navigator.geolocation.getCurrentPosition(function(t){r.resolve(new e(t.coords.latitude,t.coords.longitude))},function(e){r.reject(e)}),r._thenRunCallbacks(t)}}]),e}();r["default"]=u,t.exports=r["default"]},{"./ParsePromise":16,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/interop-require-default":47}],13:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/get")["default"],a=e("babel-runtime/helpers/inherits")["default"],s=e("babel-runtime/helpers/class-call-check")["default"],o=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var i=e("./ParseObject"),u=o(i),l=function(e){function t(e){if(s(this,t),n(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,"_Installation"),e&&"object"==typeof e&&!this.set(e||{}))throw new Error("Can't create an invalid Session")}return a(t,e),t}(u["default"]);r["default"]=l,u["default"].registerSubclass("_Installation",l),t.exports=r["default"]},{"./ParseObject":14,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/get":45,"babel-runtime/helpers/inherits":46,"babel-runtime/helpers/interop-require-default":47}],14:[function(e,t,r){"use strict";function n(){var e=h["default"].get("SERVER_URL");"/"!==e[e.length-1]&&(e+="/");var t=e.replace(/https?:\/\//,"");return t.substr(t.indexOf("/"))}var a=e("babel-runtime/helpers/create-class")["default"],s=e("babel-runtime/helpers/class-call-check")["default"],o=e("babel-runtime/core-js/object/keys")["default"],i=e("babel-runtime/core-js/object/freeze")["default"],u=e("babel-runtime/core-js/object/create")["default"],l=e("babel-runtime/core-js/object/define-property")["default"],c=e("babel-runtime/helpers/interop-require-default")["default"],f=e("babel-runtime/helpers/interop-require-wildcard")["default"];Object.defineProperty(r,"__esModule",{value:!0});var d=e("./CoreManager"),h=c(d),p=e("./canBeSerialized"),y=c(p),v=e("./decode"),m=c(v),b=e("./encode"),_=c(b),g=e("./equals"),w=(c(g),e("./escape")),O=c(w),C=e("./ObjectState"),P=f(C),k=e("./ParseACL"),A=c(k),E=e("./parseDate"),S=c(E),j=e("./ParseError"),I=c(j),T=e("./ParseFile"),N=c(T),R=e("./ParseOp"),M=e("./ParsePromise"),x=c(M),D=e("./ParseQuery"),U=c(D),q=e("./ParseRelation"),L=c(q),F=e("./unique"),K=c(F),$=e("./unsavedChildren"),J=c($),W={},B=0,G=0,V=!h["default"].get("IS_NODE"),z=function(){ -function e(t,r,n){s(this,e),"function"==typeof this.initialize&&this.initialize.apply(this,arguments);var a=null;if(this._objCount=G++,"string"==typeof t)this.className=t,r&&"object"==typeof r&&(a=r);else if(t&&"object"==typeof t){this.className=t.className,a={};for(var o in t)"className"!==o&&(a[o]=t[o]);r&&"object"==typeof r&&(n=r)}if(a&&!this.set(a,n))throw new Error("Can't create an invalid Parse Object")}return a(e,[{key:"_getId",value:function(){if("string"==typeof this.id)return this.id;if("string"==typeof this._localId)return this._localId;var e="local"+String(B++);return this._localId=e,e}},{key:"_getStateIdentifier",value:function(){return"string"==typeof this.id?V?this.id:this.id+"_"+String(this._objCount):this._getId()}},{key:"_getServerData",value:function(){return P.getServerData(this.className,this._getStateIdentifier())}},{key:"_clearServerData",value:function(){var e=this._getServerData(),t={};for(var r in e)t[r]=void 0;P.setServerData(this.className,this._getStateIdentifier(),t)}},{key:"_getPendingOps",value:function(){return P.getPendingOps(this.className,this._getStateIdentifier())}},{key:"_clearPendingOps",value:function(){var e=this._getPendingOps(),t=e[e.length-1],r=o(t);r.forEach(function(e){delete t[e]})}},{key:"_getDirtyObjectAttributes",value:function(){var t=this.attributes,r=P.getObjectCache(this.className,this._getStateIdentifier()),n={};for(var a in t){var s=t[a];if(s&&"object"==typeof s&&!(s instanceof e)&&!(s instanceof N["default"])&&!(s instanceof L["default"]))try{var o=(0,_["default"])(s,!1,!0),i=JSON.stringify(o);r[a]!==i&&(n[a]=s)}catch(u){n[a]=s}}return n}},{key:"_toFullJSON",value:function(e){var t=this.toJSON(e);return t.__type="Object",t.className=this.className,t}},{key:"_getSaveJSON",value:function(){var e,t=this._getPendingOps(),r=this._getDirtyObjectAttributes(),n={};for(e in r)n[e]=new R.SetOp(r[e]).toJSON();for(e in t[0])n[e]=t[0][e].toJSON();return n}},{key:"_getSaveParams",value:function(){var e=this.id?"PUT":"POST",t=this._getSaveJSON(),r="classes/"+this.className;return this.id?r+="/"+this.id:"_User"===this.className&&(r="users"),{method:e,body:t,path:r}}},{key:"_finishFetch",value:function(e){!this.id&&e.objectId&&(this.id=e.objectId),P.initializeState(this.className,this._getStateIdentifier());var t={};for(var r in e)"ACL"===r?t[r]=new A["default"](e[r]):"objectId"!==r&&(t[r]=(0,m["default"])(e[r]),t[r]instanceof L["default"]&&t[r]._ensureParentAndKey(this,r));t.createdAt&&"string"==typeof t.createdAt&&(t.createdAt=(0,S["default"])(t.createdAt)),t.updatedAt&&"string"==typeof t.updatedAt&&(t.updatedAt=(0,S["default"])(t.updatedAt)),!t.updatedAt&&t.createdAt&&(t.updatedAt=t.createdAt),P.commitServerChanges(this.className,this._getStateIdentifier(),t)}},{key:"_setExisted",value:function(e){var t=P.getState(this.className,this._getStateIdentifier());t&&(t.existed=e)}},{key:"_migrateId",value:function(e){if(this._localId&&e){var t=P.removeState(this.className,this._getStateIdentifier());this.id=e,delete this._localId,t&&P.initializeState(this.className,this._getStateIdentifier(),t)}}},{key:"_handleSaveResponse",value:function(e,t){var r,n={},a=P.popPendingState(this.className,this._getStateIdentifier());for(r in a)a[r]instanceof R.RelationOp?n[r]=a[r].applyTo(void 0,this,r):r in e||(n[r]=a[r].applyTo(void 0));for(r in e)"createdAt"!==r&&"updatedAt"!==r||"string"!=typeof e[r]?"ACL"===r?n[r]=new A["default"](e[r]):"objectId"!==r&&(n[r]=(0,m["default"])(e[r])):n[r]=(0,S["default"])(e[r]);n.createdAt&&!n.updatedAt&&(n.updatedAt=n.createdAt),this._migrateId(e.objectId),201!==t&&this._setExisted(!0),P.commitServerChanges(this.className,this._getStateIdentifier(),n)}},{key:"_handleSaveError",value:function(){this._getPendingOps();P.mergeFirstPendingState(this.className,this._getStateIdentifier())}},{key:"initialize",value:function(){}},{key:"toJSON",value:function(e){var t=this.id?this.className+":"+this.id:this,e=e||[t],r={},n=this.attributes;for(var a in n)"createdAt"!==a&&"updatedAt"!==a||!n[a].toJSON?r[a]=(0,_["default"])(n[a],!1,!1,e):r[a]=n[a].toJSON();var s=this._getPendingOps();for(var a in s[0])r[a]=s[0][a].toJSON();return this.id&&(r.objectId=this.id),r}},{key:"equals",value:function(t){return this===t?!0:t instanceof e&&this.className===t.className&&this.id===t.id&&"undefined"!=typeof this.id}},{key:"dirty",value:function(e){if(!this.id)return!0;var t=this._getPendingOps(),r=this._getDirtyObjectAttributes();if(e){if(r.hasOwnProperty(e))return!0;for(var n=0;n-1)throw new Error("Cannot modify readonly attribute: "+o);r.unset?a[o]=new R.UnsetOp:n[o]instanceof R.Op?a[o]=n[o]:n[o]&&"object"==typeof n[o]&&"string"==typeof n[o].__op?a[o]=(0,R.opFromJSON)(n[o]):"objectId"===o||"id"===o?this.id=n[o]:"ACL"!==o||"object"!=typeof n[o]||n[o]instanceof A["default"]?a[o]=new R.SetOp(n[o]):a[o]=new R.SetOp(new A["default"](n[o]))}var i=this.attributes,u={};for(var l in a)a[l]instanceof R.RelationOp?u[l]=a[l].applyTo(i[l],this,l):a[l]instanceof R.UnsetOp||(u[l]=a[l].applyTo(i[l]));if(!r.ignoreValidation){var c=this.validate(u);if(c)return"function"==typeof r.error&&r.error(this,c),!1}var f=this._getPendingOps(),d=f.length-1;for(var l in a){var h=a[l].mergeWith(f[d][l]);P.setPendingOp(this.className,this._getStateIdentifier(),l,h)}return this}},{key:"unset",value:function(e,t){return t=t||{},t.unset=!0,this.set(e,null,t)}},{key:"increment",value:function(e,t){if("undefined"==typeof t&&(t=1),"number"!=typeof t)throw new Error("Cannot increment by a non-numeric amount.");return this.set(e,new R.IncrementOp(t))}},{key:"add",value:function(e,t){return this.set(e,new R.AddOp([t]))}},{key:"addUnique",value:function(e,t){return this.set(e,new R.AddUniqueOp([t]))}},{key:"remove",value:function(e,t){return this.set(e,new R.RemoveOp([t]))}},{key:"op",value:function(e){for(var t=this._getPendingOps(),r=t.length;r--;)if(t[r][e])return t[r][e]}},{key:"clone",value:function t(){var t=new this.constructor;return t.className||(t.className=this.className),t.set&&t.set(this.attributes),t}},{key:"isNew",value:function(){return!this.id}},{key:"existed",value:function(){if(!this.id)return!1;var e=P.getState(this.className,this._getStateIdentifier());return e?e.existed:!1}},{key:"isValid",value:function(){return!this.validate(this.attributes)}},{key:"validate",value:function(e){if(e.hasOwnProperty("ACL")&&!(e.ACL instanceof A["default"]))return new I["default"](I["default"].OTHER_CAUSE,"ACL must be a Parse ACL.");for(var t in e)if(!/^[A-Za-z][0-9A-Za-z_]*$/.test(t))return new I["default"](I["default"].INVALID_KEY_NAME);return!1}},{key:"getACL",value:function(){var e=this.get("ACL");return e instanceof A["default"]?e:null}},{key:"setACL",value:function(e,t){return this.set("ACL",e,t)}},{key:"clear",value:function(){var e=this.attributes,t={},r=["createdAt","updatedAt"];"function"==typeof this.constructor.readOnlyAttributes&&(r=r.concat(this.constructor.readOnlyAttributes()));for(var n in e)r.indexOf(n)<0&&(t[n]=!0);return this.set(t,{unset:!0})}},{key:"fetch",value:function(e){e=e||{};var t={};e.hasOwnProperty("useMasterKey")&&(t.useMasterKey=e.useMasterKey),e.hasOwnProperty("sessionToken")&&(t.sessionToken=e.sessionToken);var r=h["default"].getObjectController();return r.fetch(this,!0,t)._thenRunCallbacks(e)}},{key:"save",value:function(e,t,r){var n,a,s=this;if("object"==typeof e||"undefined"==typeof e?(n=e,a=t):(n={},n[e]=t,a=r),!a&&n&&(a={},"function"==typeof n.success&&(a.success=n.success,delete n.success),"function"==typeof n.error&&(a.error=n.error,delete n.error)),n){var o=this.validate(n);if(o)return a&&"function"==typeof a.error&&a.error(this,o),x["default"].error(o);this.set(n,a)}a=a||{};var i={};a.hasOwnProperty("useMasterKey")&&(i.useMasterKey=a.useMasterKey),a.hasOwnProperty("sessionToken")&&(i.sessionToken=a.sessionToken);var u=h["default"].getObjectController(),l=(0,J["default"])(this);return u.save(l,i).then(function(){return u.save(s,i)})._thenRunCallbacks(a,this)}},{key:"destroy",value:function(e){e=e||{};var t={};return e.hasOwnProperty("useMasterKey")&&(t.useMasterKey=e.useMasterKey),e.hasOwnProperty("sessionToken")&&(t.sessionToken=e.sessionToken),this.id?h["default"].getObjectController().destroy(this,t)._thenRunCallbacks(e):x["default"].as()._thenRunCallbacks(e)}},{key:"attributes",get:function(){return i(P.estimateAttributes(this.className,this._getStateIdentifier()))}},{key:"createdAt",get:function(){return this._getServerData().createdAt}},{key:"updatedAt",get:function(){return this._getServerData().updatedAt}}],[{key:"_clearAllState",value:function(){P._clearAllState()}},{key:"fetchAll",value:function(e,t){var t=t||{},r={};return t.hasOwnProperty("useMasterKey")&&(r.useMasterKey=t.useMasterKey),t.hasOwnProperty("sessionToken")&&(r.sessionToken=t.sessionToken),h["default"].getObjectController().fetch(e,!0,r)._thenRunCallbacks(t)}},{key:"fetchAllIfNeeded",value:function(e,t){var t=t||{},r={};return t.hasOwnProperty("useMasterKey")&&(r.useMasterKey=t.useMasterKey),t.hasOwnProperty("sessionToken")&&(r.sessionToken=t.sessionToken),h["default"].getObjectController().fetch(e,!1,r)._thenRunCallbacks(t)}},{key:"destroyAll",value:function(e,t){var t=t||{},r={};return t.hasOwnProperty("useMasterKey")&&(r.useMasterKey=t.useMasterKey),t.hasOwnProperty("sessionToken")&&(r.sessionToken=t.sessionToken),h["default"].getObjectController().destroy(e,r)._thenRunCallbacks(t)}},{key:"saveAll",value:function(e,t){var t=t||{},r={};return t.hasOwnProperty("useMasterKey")&&(r.useMasterKey=t.useMasterKey),t.hasOwnProperty("sessionToken")&&(r.sessionToken=t.sessionToken),h["default"].getObjectController().save(e,r)._thenRunCallbacks(t)}},{key:"createWithoutData",value:function(e){var t=new this;return t.id=e,t}},{key:"fromJSON",value:function(t){if(!t.className)throw new Error("Cannot create an object without a className");var r=W[t.className],n=r?new r:new e(t.className),a={};for(var s in t)"className"!==s&&"__type"!==s&&(a[s]=t[s]);return n._finishFetch(a),t.objectId&&n._setExisted(!0),n}},{key:"registerSubclass",value:function(e,t){if("string"!=typeof e)throw new TypeError("The first argument must be a valid class name.");if("undefined"==typeof t)throw new TypeError("You must supply a subclass constructor.");if("function"!=typeof t)throw new TypeError("You must register the subclass constructor. Did you attempt to register an instance of the subclass?");W[e]=t,t.className||(t.className=e)}},{key:"extend",value:function(t,r,n){if("string"!=typeof t){if(t&&"string"==typeof t.className)return e.extend(t.className,t,r);throw new Error("Parse.Object.extend's first argument should be the className.")}var a=t;"User"===a&&h["default"].get("PERFORM_USER_REWRITE")&&(a="_User");var s=e.prototype;this.hasOwnProperty("__super__")&&this.__super__?s=this.prototype:W[a]&&(s=W[a].prototype);var o=function(e,t){if("function"==typeof this.initialize&&this.initialize.apply(this,arguments),this.className=a,this._objCount=G++,e&&"object"==typeof e&&!this.set(e||{},t))throw new Error("Can't create an invalid Parse Object")};if(o.className=a,o.__super__=s,o.prototype=u(s,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),r)for(var i in r)"className"!==i&&l(o.prototype,i,{value:r[i],enumerable:!1,writable:!0,configurable:!0});if(n)for(var i in n)"className"!==i&&l(o,i,{value:n[i],enumerable:!1,writable:!0,configurable:!0});return o.extend=function(t,r,n){return"string"==typeof t?e.extend.call(o,t,r,n):e.extend.call(o,a,t,r)},o.createWithoutData=e.createWithoutData,W[a]=o,o}},{key:"enableSingleInstance",value:function(){V=!0}},{key:"disableSingleInstance",value:function(){V=!1}}]),e}();r["default"]=z,h["default"].setObjectController({fetch:function(e,t,r){if(Array.isArray(e)){if(e.length<1)return x["default"].as([]);var n=[],a=[],s=null,i=[],u=null;if(e.forEach(function(e,r){u||(s||(s=e.className),s!==e.className&&(u=new I["default"](I["default"].INVALID_CLASS_NAME,"All objects should be of the same class")),e.id||(u=new I["default"](I["default"].MISSING_OBJECT_ID,"All objects must have an ID")),(t||0===o(e._getServerData()).length)&&(a.push(e.id),n.push(e)),i.push(e))}),u)return x["default"].error(u);var l=new U["default"](s);return l.containedIn("objectId",a),l._limit=a.length,l.find(r).then(function(e){var r={};e.forEach(function(e){r[e.id]=e});for(var a=0;a=20&&a.push([]))}),0===a[a.length-1].length&&a.pop();var s=x["default"].as(),o=[];return a.forEach(function(e){s=s.then(function(){return r.request("POST","batch",{requests:e.map(function(e){return{method:"DELETE",path:n()+"classes/"+e.className+"/"+e._getId(),body:{}}})},t).then(function(t){for(var r=0;r0},function(){var e=[],s=[];if(i.forEach(function(t){e.length<20&&(0,y["default"])(t)?e.push(t):s.push(t)}),i=s,e.length<1)return x["default"].error(new I["default"](I["default"].OTHER_CAUSE,"Tried to save a batch with a cycle."));var o=new x["default"],u=[],l=[];return e.forEach(function(e,t){var r=new x["default"];u.push(r);var n=function(){return r.resolve(),o.then(function(r,n){if(r[t].hasOwnProperty("success"))e._handleSaveResponse(r[t].success,n);else{if(!a&&r[t].hasOwnProperty("error")){var s=r[t].error;a=new I["default"](s.code,s.error),i=[]}e._handleSaveError()}})};P.pushPendingState(e.className,e._getStateIdentifier()),l.push(P.enqueueTask(e.className,e._getStateIdentifier(),n))}),x["default"].when(u).then(function(){return r.request("POST","batch",{requests:e.map(function(e){var t=e._getSaveParams();return t.path=n()+t.path,t})},t)}).then(function(e,t,r){o.resolve(e,t)}),x["default"].when(l)}).then(function(){return a?x["default"].error(a):x["default"].as(e)})})}if(e instanceof z){var u=e,l=function(){var e=u._getSaveParams();return r.request(e.method,e.path,e.body,t).then(function(e,t){u._handleSaveResponse(e,t)},function(e){return u._handleSaveError(),x["default"].error(e)})};return P.pushPendingState(e.className,e._getStateIdentifier()),P.enqueueTask(e.className,e._getStateIdentifier(),l).then(function(){return e},function(e){return e})}return x["default"].as()}}),t.exports=r["default"]},{"./CoreManager":3,"./ObjectState":6,"./ParseACL":8,"./ParseError":10,"./ParseFile":11,"./ParseOp":15,"./ParsePromise":16,"./ParseQuery":17,"./ParseRelation":18,"./canBeSerialized":28,"./decode":29,"./encode":30,"./equals":31,"./escape":32,"./parseDate":34,"./unique":35,"./unsavedChildren":36,"babel-runtime/core-js/object/create":37,"babel-runtime/core-js/object/define-property":38,"babel-runtime/core-js/object/freeze":39,"babel-runtime/core-js/object/keys":41,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/interop-require-default":47,"babel-runtime/helpers/interop-require-wildcard":48}],15:[function(e,t,r){"use strict";function n(e){if(!e||!e.__op)return null;switch(e.__op){case"Delete":return new C;case"Increment":return new P(e.amount);case"Add":return new k((0,d["default"])(e.objects));case"AddUnique":return new A((0,d["default"])(e.objects));case"Remove":return new E((0,d["default"])(e.objects));case"AddRelation":var t=(0,d["default"])(e.objects);return Array.isArray(t)?new S(t,[]):new S([],[]);case"RemoveRelation":var r=(0,d["default"])(e.objects);return Array.isArray(r)?new S([],r):new S([],[]);case"Batch":for(var t=[],r=[],n=0;n-1;)r.splice(n,1),n=r.indexOf(this._value[t]);if(this._value[t]instanceof v["default"]&&this._value[t].id)for(var a=0;a-1&&r.splice(t,1)}),this.relationsToAdd.forEach(function(e){var t=r.indexOf(e);0>t&&r.push(e)});var n=e.relationsToRemove.concat([]);this.relationsToAdd.forEach(function(e){var t=n.indexOf(e);t>-1&&n.splice(t,1)}),this.relationsToRemove.forEach(function(e){var t=n.indexOf(e);0>t&&n.push(e)});var a=new t(r,n);return a._targetClassName=this._targetClassName,a}throw new Error("Cannot merge Relation Op with the previous Op")}},{key:"toJSON",value:function(){var e=this,t=function(t){return{__type:"Pointer",className:e._targetClassName,objectId:t}},r=null,n=null,a=null;return this.relationsToAdd.length>0&&(a=this.relationsToAdd.map(t),r={__op:"AddRelation",objects:a}),this.relationsToRemove.length>0&&(a=this.relationsToRemove.map(t),n={__op:"RemoveRelation",objects:a}),r&&n?{__op:"Batch",ops:[r,n]}:r||n||{}}}]),t}(w);r.RelationOp=S},{"./ParseObject":14,"./ParseRelation":18,"./arrayContainsObject":27,"./decode":29,"./encode":30,"./unique":35,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/get":45,"babel-runtime/helpers/inherits":46,"babel-runtime/helpers/interop-require-default":47}],16:[function(e,t,r){(function(n){"use strict";var a=e("babel-runtime/helpers/create-class")["default"],s=e("babel-runtime/helpers/class-call-check")["default"];Object.defineProperty(r,"__esModule",{value:!0});var o=!1,i=function(){function e(){s(this,e),this._resolved=!1,this._rejected=!1,this._resolvedCallbacks=[],this._rejectedCallbacks=[]}return a(e,[{key:"resolve",value:function(){if(this._resolved||this._rejected)throw new Error("A promise was resolved even though it had already been "+(this._resolved?"resolved":"rejected")+".");this._resolved=!0;for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];this._result=t;for(var n=0;na;a++)n[a]=arguments[a];if("function"==typeof t)if(o)try{n=[t.apply(this,n)]}catch(i){n=[e.error(i)]}else n=[t.apply(this,n)];1===n.length&&e.is(n[0])?n[0].then(function(){s.resolve.apply(s,arguments)},function(e){s.reject(e)}):s.resolve.apply(s,n)},u=function(t){var n=[];if("function"==typeof r){if(o)try{n=[r(t)]}catch(a){n=[e.error(a)]}else n=[r(t)];1===n.length&&e.is(n[0])?n[0].then(function(){s.resolve.apply(s,arguments)},function(e){s.reject(e)}):o?s.resolve.apply(s,n):s.reject(n[0])}else s.reject(t)},l=function(e){e.call()};return o&&("undefined"!=typeof n&&"function"==typeof n.nextTick?l=function(e){n.nextTick(e)}:"function"==typeof setTimeout&&(l=function(e){setTimeout(e,0)})),this._resolved?l(function(){i.apply(a,a._result)}):this._rejected?l(function(){u(a._error)}):(this._resolvedCallbacks.push(i),this._rejectedCallbacks.push(u)),s}},{key:"always",value:function(e){return this.then(e,e)}},{key:"done",value:function(e){return this.then(e)}},{key:"fail",value:function(e){return this.then(null,e)}},{key:"_thenRunCallbacks",value:function(t,r){var n={};return"function"==typeof t?(n.success=function(e){t(e,null)},n.error=function(e){t(null,e)}):"object"==typeof t&&("function"==typeof t.success&&(n.success=t.success),"function"==typeof t.error&&(n.error=t.error)),this.then(function(){for(var t=arguments.length,r=Array(t),a=0;t>a;a++)r[a]=arguments[a];return n.success&&n.success.apply(this,r),e.as.apply(e,arguments)},function(t){return n.error&&("undefined"!=typeof r?n.error(r,t):n.error(t)),e.error(t)})}},{key:"_continueWith",value:function(e){return this.then(function(){return e(arguments,null)},function(t){return e(null,t)})}}],[{key:"is",value:function(e){return null!=e&&"function"==typeof e.then}},{key:"as",value:function(){for(var t=new e,r=arguments.length,n=Array(r),a=0;r>a;a++)n[a]=arguments[a];return t.resolve.apply(t,n),t}},{key:"error",value:function(){for(var t=new e,r=arguments.length,n=Array(r),a=0;r>a;a++)n[a]=arguments[a];return t.reject.apply(t,n),t}},{key:"when",value:function(t){var r;r=Array.isArray(t)?t:arguments;var n=r.length,a=!1,s=[],o=[];if(s.length=r.length,o.length=r.length,0===n)return e.as.apply(this,s);for(var i=new e,u=function(){n--,0>=n&&(a?i.reject(o):i.resolve.apply(i,s))},l=function(t,r){e.is(t)?t.then(function(e){s[r]=e,u()},function(e){o[r]=e,a=!0,u()}):(s[c]=t,u())},c=0;c=0&&(e.limit=this._limit),this._skip>0&&(e.skip=this._skip),this._order&&(e.order=this._order.join(",")); -for(var t in this._extraOptions)e[t]=this._extraOptions[t];return e}},{key:"get",value:function(e,t){this.equalTo("objectId",e);var r={};return t&&t.hasOwnProperty("useMasterKey")&&(r.useMasterKey=t.useMasterKey),t&&t.hasOwnProperty("sessionToken")&&(r.sessionToken=t.sessionToken),this.first(r).then(function(e){if(e)return e;var t=new d["default"](d["default"].OBJECT_NOT_FOUND,"Object not found.");return b["default"].error(t)})._thenRunCallbacks(t,null)}},{key:"find",value:function(e){var t=this;e=e||{};var r={};e.hasOwnProperty("useMasterKey")&&(r.useMasterKey=e.useMasterKey),e.hasOwnProperty("sessionToken")&&(r.sessionToken=e.sessionToken);var n=u["default"].getQueryController();return n.find(this.className,this.toJSON(),r).then(function(e){return e.results.map(function(e){return e.className||(e.className=t.className),v["default"].fromJSON(e)})})._thenRunCallbacks(e)}},{key:"count",value:function(e){e=e||{};var t={};e.hasOwnProperty("useMasterKey")&&(t.useMasterKey=e.useMasterKey),e.hasOwnProperty("sessionToken")&&(t.sessionToken=e.sessionToken);var r=u["default"].getQueryController(),n=this.toJSON();return n.limit=0,n.count=1,r.find(this.className,n,t).then(function(e){return e.count})._thenRunCallbacks(e)}},{key:"first",value:function(e){var t=this;e=e||{};var r={};e.hasOwnProperty("useMasterKey")&&(r.useMasterKey=e.useMasterKey),e.hasOwnProperty("sessionToken")&&(r.sessionToken=e.sessionToken);var n=u["default"].getQueryController(),a=this.toJSON();return a.limit=1,n.find(this.className,a,r).then(function(e){var r=e.results;if(r[0])return r[0].className||(r[0].className=t.className),v["default"].fromJSON(r[0])})._thenRunCallbacks(e)}},{key:"each",value:function(t,r){if(r=r||{},this._order||this._skip||this._limit>=0)return b["default"].error("Cannot iterate on a query with sort, skip, or limit.")._thenRunCallbacks(r);var n=(new b["default"],new e(this.className));n._limit=r.batchSize||100,n._include=this._include.map(function(e){return e}),this._select&&(n._select=this._select.map(function(e){return e})),n._where={};for(var a in this._where){var s=this._where[a];if(Array.isArray(s))n._where[a]=s.map(function(e){return e});else if(s&&"object"==typeof s){var o={};n._where[a]=o;for(var i in s)o[i]=s[i]}else n._where[a]=s}n.ascending("objectId");var u={};r.hasOwnProperty("useMasterKey")&&(u.useMasterKey=r.useMasterKey),r.hasOwnProperty("sessionToken")&&(u.sessionToken=r.sessionToken);var l=!1;return b["default"]._continueWhile(function(){return!l},function(){return n.find(u).then(function(e){var r=b["default"].as();return e.forEach(function(e){r=r.then(function(){return t(e)})}),r.then(function(){e.length>=n._limit?n.greaterThan("objectId",e[e.length-1].id):l=!0})})})._thenRunCallbacks(r)}},{key:"equalTo",value:function(e,t){return"undefined"==typeof t?this.doesNotExist(e):(this._where[e]=(0,c["default"])(t,!1,!0),this)}},{key:"notEqualTo",value:function(e,t){return this._addCondition(e,"$ne",t)}},{key:"lessThan",value:function(e,t){return this._addCondition(e,"$lt",t)}},{key:"greaterThan",value:function(e,t){return this._addCondition(e,"$gt",t)}},{key:"lessThanOrEqualTo",value:function(e,t){return this._addCondition(e,"$lte",t)}},{key:"greaterThanOrEqualTo",value:function(e,t){return this._addCondition(e,"$gte",t)}},{key:"containedIn",value:function(e,t){return this._addCondition(e,"$in",t)}},{key:"notContainedIn",value:function(e,t){return this._addCondition(e,"$nin",t)}},{key:"containsAll",value:function(e,t){return this._addCondition(e,"$all",t)}},{key:"exists",value:function(e){return this._addCondition(e,"$exists",!0)}},{key:"doesNotExist",value:function(e){return this._addCondition(e,"$exists",!1)}},{key:"matches",value:function(e,t,r){return this._addCondition(e,"$regex",t),r||(r=""),t.ignoreCase&&(r+="i"),t.multiline&&(r+="m"),r.length&&this._addCondition(e,"$options",r),this}},{key:"matchesQuery",value:function(e,t){var r=t.toJSON();return r.className=t.className,this._addCondition(e,"$inQuery",r)}},{key:"doesNotMatchQuery",value:function(e,t){var r=t.toJSON();return r.className=t.className,this._addCondition(e,"$notInQuery",r)}},{key:"matchesKeyInQuery",value:function(e,t,r){var n=r.toJSON();return n.className=r.className,this._addCondition(e,"$select",{key:t,query:n})}},{key:"doesNotMatchKeyInQuery",value:function(e,t,r){var n=r.toJSON();return n.className=r.className,this._addCondition(e,"$dontSelect",{key:t,query:n})}},{key:"contains",value:function(e,t){if("string"!=typeof t)throw new Error("The value being searched for must be a string.");return this._addCondition(e,"$regex",n(t))}},{key:"startsWith",value:function(e,t){if("string"!=typeof t)throw new Error("The value being searched for must be a string.");return this._addCondition(e,"$regex","^"+n(t))}},{key:"endsWith",value:function(e,t){if("string"!=typeof t)throw new Error("The value being searched for must be a string.");return this._addCondition(e,"$regex",n(t)+"$")}},{key:"near",value:function(e,t){return t instanceof p["default"]||(t=new p["default"](t)),this._addCondition(e,"$nearSphere",t)}},{key:"withinRadians",value:function(e,t,r){return this.near(e,t),this._addCondition(e,"$maxDistance",r)}},{key:"withinMiles",value:function(e,t,r){return this.withinRadians(e,t,r/3958.8)}},{key:"withinKilometers",value:function(e,t,r){return this.withinRadians(e,t,r/6371)}},{key:"withinGeoBox",value:function(e,t,r){return t instanceof p["default"]||(t=new p["default"](t)),r instanceof p["default"]||(r=new p["default"](r)),this._addCondition(e,"$within",{$box:[t,r]}),this}},{key:"ascending",value:function(){this._order=[];for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return this.addAscending.apply(this,t)}},{key:"addAscending",value:function(){var e=this;this._order||(this._order=[]);for(var t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];return r.forEach(function(t){Array.isArray(t)&&(t=t.join()),e._order=e._order.concat(t.replace(/\s/g,"").split(","))}),this}},{key:"descending",value:function(){this._order=[];for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return this.addDescending.apply(this,t)}},{key:"addDescending",value:function(){var e=this;this._order||(this._order=[]);for(var t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];return r.forEach(function(t){Array.isArray(t)&&(t=t.join()),e._order=e._order.concat(t.replace(/\s/g,"").split(",").map(function(e){return"-"+e}))}),this}},{key:"skip",value:function(e){if("number"!=typeof e||0>e)throw new Error("You can only skip by a positive number");return this._skip=e,this}},{key:"limit",value:function(e){if("number"!=typeof e)throw new Error("You can only set the limit to a numeric value");return this._limit=e,this}},{key:"include",value:function(){for(var e=this,t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];return r.forEach(function(t){Array.isArray(t)?e._include=e._include.concat(t):e._include.push(t)}),this}},{key:"select",value:function(){var e=this;this._select||(this._select=[]);for(var t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];return r.forEach(function(t){Array.isArray(t)?e._select=e._select.concat(t):e._select.push(t)}),this}}],[{key:"or",value:function(){for(var t=null,r=arguments.length,n=Array(r),a=0;r>a;a++)n[a]=arguments[a];n.forEach(function(e){if(t||(t=e.className),t!==e.className)throw new Error("All queries must be for the same class.")});var s=new e(t);return s._orQuery(n),s}}]),e}();r["default"]=_,u["default"].setQueryController({find:function(e,t,r){var n=u["default"].getRESTController();return n.request("GET","classes/"+e,t,r)}}),t.exports=r["default"]},{"./CoreManager":3,"./ParseError":10,"./ParseGeoPoint":12,"./ParseObject":14,"./ParsePromise":16,"./encode":30,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/interop-require-default":47}],18:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/create-class")["default"],a=e("babel-runtime/helpers/class-call-check")["default"],s=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var o=e("./ParseOp"),i=e("./ParseObject"),u=(s(i),e("./ParseQuery")),l=s(u),c=function(){function e(t,r){a(this,e),this.parent=t,this.key=r,this.targetClassName=null}return n(e,[{key:"_ensureParentAndKey",value:function(e,t){if(this.key=this.key||t,this.key!==t)throw new Error("Internal Error. Relation retrieved from two different keys.");if(this.parent){if(this.parent.className!==e.className)throw new Error("Internal Error. Relation retrieved from two different Objects.");if(this.parent.id){if(this.parent.id!==e.id)throw new Error("Internal Error. Relation retrieved from two different Objects.")}else e.id&&(this.parent=e)}else this.parent=e}},{key:"add",value:function(e){Array.isArray(e)||(e=[e]);var t=new o.RelationOp(e,[]);return this.parent.set(this.key,t),this.targetClassName=t._targetClassName,this.parent}},{key:"remove",value:function(e){Array.isArray(e)||(e=[e]);var t=new o.RelationOp([],e);this.parent.set(this.key,t),this.targetClassName=t._targetClassName}},{key:"toJSON",value:function(){return{__type:"Relation",className:this.targetClassName}}},{key:"query",value:function t(){var t;return this.targetClassName?t=new l["default"](this.targetClassName):(t=new l["default"](this.parent.className),t._extraOptions.redirectClassNameForKey=this.key),t._addCondition("$relatedTo","object",{__type:"Pointer",className:this.parent.className,objectId:this.parent.id}),t._addCondition("$relatedTo","key",this.key),t}}]),e}();r["default"]=c,t.exports=r["default"]},{"./ParseObject":14,"./ParseOp":15,"./ParseQuery":17,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/interop-require-default":47}],19:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/get")["default"],a=e("babel-runtime/helpers/inherits")["default"],s=e("babel-runtime/helpers/create-class")["default"],o=e("babel-runtime/helpers/class-call-check")["default"],i=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var u=e("./ParseACL"),l=i(u),c=e("./ParseError"),f=i(c),d=e("./ParseObject"),h=i(d),p=function(e){function t(e,r){o(this,t),n(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,"_Role"),"string"==typeof e&&r instanceof l["default"]&&(this.setName(e),this.setACL(r))}return a(t,e),s(t,[{key:"getName",value:function(){return this.get("name")}},{key:"setName",value:function(e,t){return this.set("name",e,t)}},{key:"getUsers",value:function(){return this.relation("users")}},{key:"getRoles",value:function(){return this.relation("roles")}},{key:"validate",value:function(e,r){var a=n(Object.getPrototypeOf(t.prototype),"validate",this).call(this,e,r);if(a)return a;if("name"in e&&e.name!==this.getName()){var s=e.name;if(this.id&&this.id!==e.objectId)return new f["default"](f["default"].OTHER_CAUSE,"A role's name can only be set before it has been saved.");if("string"!=typeof s)return new f["default"](f["default"].OTHER_CAUSE,"A role's name must be a String.");if(!/^[0-9a-zA-Z\-_ ]+$/.test(s))return new f["default"](f["default"].OTHER_CAUSE,"A role's name can be only contain alphanumeric characters, _, -, and spaces.")}return!1}}]),t}(h["default"]);r["default"]=p,h["default"].registerSubclass("_Role",p),t.exports=r["default"]},{"./ParseACL":8,"./ParseError":10,"./ParseObject":14,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/get":45,"babel-runtime/helpers/inherits":46,"babel-runtime/helpers/interop-require-default":47}],20:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/get")["default"],a=e("babel-runtime/helpers/inherits")["default"],s=e("babel-runtime/helpers/create-class")["default"],o=e("babel-runtime/helpers/class-call-check")["default"],i=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var u=e("./CoreManager"),l=i(u),c=e("./isRevocableSession"),f=i(c),d=e("./ParseObject"),h=i(d),p=e("./ParsePromise"),y=i(p),v=e("./ParseUser"),m=i(v),b=function(e){function t(e){if(o(this,t),n(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,"_Session"),e&&"object"==typeof e&&!this.set(e||{}))throw new Error("Can't create an invalid Session")}return a(t,e),s(t,[{key:"getSessionToken",value:function(){return this.get("sessionToken")}}],[{key:"readOnlyAttributes",value:function(){return["createdWith","expiresAt","installationId","restricted","sessionToken","user"]}},{key:"current",value:function(e){e=e||{};var t=l["default"].getSessionController(),r={};return e.hasOwnProperty("useMasterKey")&&(r.useMasterKey=e.useMasterKey),m["default"].currentAsync().then(function(e){if(!e)return y["default"].error("There is no current user.");e.getSessionToken();return r.sessionToken=e.getSessionToken(),t.getSession(r)})}},{key:"isCurrentSessionRevocable",value:function(){var e=m["default"].current();return e?(0,f["default"])(e.getSessionToken()||""):!1}}]),t}(h["default"]);r["default"]=b,h["default"].registerSubclass("_Session",b),l["default"].setSessionController({getSession:function(e){var t=l["default"].getRESTController(),r=new b;return t.request("GET","sessions/me",{},e).then(function(e){return r._finishFetch(e),r._setExisted(!0),r})}}),t.exports=r["default"]},{"./CoreManager":3,"./ParseObject":14,"./ParsePromise":16,"./ParseUser":21,"./isRevocableSession":33,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/get":45,"babel-runtime/helpers/inherits":46,"babel-runtime/helpers/interop-require-default":47}],21:[function(e,t,r){"use strict";var n=e("babel-runtime/helpers/get")["default"],a=e("babel-runtime/helpers/inherits")["default"],s=e("babel-runtime/helpers/create-class")["default"],o=e("babel-runtime/helpers/class-call-check")["default"],i=e("babel-runtime/core-js/object/define-property")["default"],u=e("babel-runtime/helpers/interop-require-default")["default"],l=e("babel-runtime/helpers/interop-require-wildcard")["default"];Object.defineProperty(r,"__esModule",{value:!0});var c=e("./CoreManager"),f=u(c),d=e("./isRevocableSession"),h=u(d),p=e("./ObjectState"),y=l(p),v=e("./ParseError"),m=u(v),b=e("./ParseObject"),_=u(b),g=e("./ParsePromise"),w=u(g),O=e("./ParseSession"),C=u(O),P=e("./Storage"),k=u(P),A="currentUser",E=!f["default"].get("IS_NODE"),S=!1,j=null,I={},T=function(e){function t(e){if(o(this,t),n(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,"_User"),e&&"object"==typeof e&&!this.set(e||{}))throw new Error("Can't create an invalid Parse User")}return a(t,e),s(t,[{key:"_upgradeToRevocableSession",value:function(e){e=e||{};var t={};e.hasOwnProperty("useMasterKey")&&(t.useMasterKey=e.useMasterKey);var r=f["default"].getUserController();return r.upgradeToRevocableSession(this,t)._thenRunCallbacks(e)}},{key:"_linkWith",value:function(e,t){var r,n=this;if("string"==typeof e?(r=e,e=I[e]):r=e.getAuthType(),t&&t.hasOwnProperty("authData")){var a=this.get("authData")||{};a[r]=t.authData;var s=f["default"].getUserController();return s.linkWith(this,a)._thenRunCallbacks(t,this)}var o=new w["default"];return e.authenticate({success:function(e,r){var a={};a.authData=r,t.success&&(a.success=t.success),t.error&&(a.error=t.error),n._linkWith(e,a).then(function(){o.resolve(n)},function(e){o.reject(e)})},error:function(e,r){t.error&&t.error(n,r),o.reject(r)}}),o}},{key:"_synchronizeAuthData",value:function(e){if(this.isCurrent()&&e){var t;"string"==typeof e?(t=e,e=I[t]):t=e.getAuthType();var r=this.get("authData");if(e&&"object"==typeof r){var n=e.restoreAuthentication(r[t]);n||this._unlinkFrom(e)}}}},{key:"_synchronizeAllAuthData",value:function(){var e=this.get("authData");if("object"==typeof e)for(var t in e)this._synchronizeAuthData(t)}},{key:"_cleanupAuthData",value:function(){if(this.isCurrent()){var e=this.get("authData");if("object"==typeof e)for(var t in e)e[t]||delete e[t]}}},{key:"_unlinkFrom",value:function(e,t){var r,n=this;return"string"==typeof e?(r=e,e=I[e]):r=e.getAuthType(),this._linkWith(e,{authData:null}).then(function(){return n._synchronizeAuthData(e),w["default"].as(n)})._thenRunCallbacks(t)}},{key:"_isLinked",value:function(e){var t;t="string"==typeof e?e:e.getAuthType();var r=this.get("authData")||{};return!!r[t]}},{key:"_logOutWithAll",value:function(){var e=this.get("authData");if("object"==typeof e)for(var t in e)this._logOutWith(t)}},{key:"_logOutWith",value:function(e){this.isCurrent()&&("string"==typeof e&&(e=I[e]),e&&e.deauthenticate&&e.deauthenticate())}},{key:"isCurrent",value:function(){var e=t.current();return!!e&&e.id===this.id}},{key:"getUsername",value:function(){return this.get("username")}},{key:"setUsername",value:function(e){var t=this.get("authData");t&&t.hasOwnProperty("anonymous")&&(t.anonymous=null),this.set("username",e)}},{key:"setPassword",value:function(e){this.set("password",e)}},{key:"getEmail",value:function(){return this.get("email")}},{key:"setEmail",value:function(e){this.set("email",e)}},{key:"getSessionToken",value:function(){return this.get("sessionToken")}},{key:"authenticated",value:function(){var e=t.current();return!!this.get("sessionToken")&&!!e&&e.id===this.id}},{key:"signUp",value:function(e,t){t=t||{};var r={};t.hasOwnProperty("useMasterKey")&&(r.useMasterKey=t.useMasterKey);var n=f["default"].getUserController();return n.signUp(this,e,r)._thenRunCallbacks(t,this)}},{key:"logIn",value:function(e){e=e||{};var t={};e.hasOwnProperty("useMasterKey")&&(t.useMasterKey=e.useMasterKey);var r=f["default"].getUserController();return r.logIn(this,t)._thenRunCallbacks(e,this)}},{key:"save",value:function(){for(var e=this,r=arguments.length,a=Array(r),s=0;r>s;s++)a[s]=arguments[s];return n(Object.getPrototypeOf(t.prototype),"save",this).apply(this,a).then(function(){return e.isCurrent()?f["default"].getUserController().updateUserOnDisk(e):e})}},{key:"fetch",value:function(){for(var e=this,r=arguments.length,a=Array(r),s=0;r>s;s++)a[s]=arguments[s];return n(Object.getPrototypeOf(t.prototype),"fetch",this).apply(this,a).then(function(){return e.isCurrent()?f["default"].getUserController().updateUserOnDisk(e):e})}}],[{key:"readOnlyAttributes",value:function(){return["sessionToken"]}},{key:"extend",value:function(e,r){if(e)for(var n in e)"className"!==n&&i(t.prototype,n,{value:e[n],enumerable:!1,writable:!0,configurable:!0});if(r)for(var n in r)"className"!==n&&i(t,n,{value:r[n],enumerable:!1,writable:!0,configurable:!0});return t}},{key:"current",value:function(){if(!E)return null;var e=f["default"].getUserController();return e.currentUser()}},{key:"currentAsync",value:function(){if(!E)return w["default"].as(null);var e=f["default"].getUserController();return e.currentUserAsync()}},{key:"signUp",value:function(e,r,n,a){n=n||{},n.username=e,n.password=r;var s=new t(n);return s.signUp({},a)}},{key:"logIn",value:function(e,r,n){var a=new t;return a._finishFetch({username:e,password:r}),a.logIn(n)}},{key:"become",value:function(e,t){if(!E)throw new Error("It is not memory-safe to become a user in a server environment");t=t||{};var r={sessionToken:e};t.hasOwnProperty("useMasterKey")&&(r.useMasterKey=t.useMasterKey);var n=f["default"].getUserController();return n.become(r)._thenRunCallbacks(t)}},{key:"logInWith",value:function(e,r){return t._logInWith(e,r)}},{key:"logOut",value:function(){if(!E)throw new Error("There is no current user user on a node.js server environment.");var e=f["default"].getUserController();return e.logOut()}},{key:"requestPasswordReset",value:function(e,t){t=t||{};var r={};t.hasOwnProperty("useMasterKey")&&(r.useMasterKey=t.useMasterKey);var n=f["default"].getUserController();return n.requestPasswordReset(e,r)._thenRunCallbacks(t)}},{key:"allowCustomUserClass",value:function(e){f["default"].set("PERFORM_USER_REWRITE",!e)}},{key:"enableRevocableSession",value:function(e){if(e=e||{},f["default"].set("FORCE_REVOCABLE_SESSION",!0),E){var r=t.current();if(r)return r._upgradeToRevocableSession(e)}return w["default"].as()._thenRunCallbacks(e)}},{key:"enableUnsafeCurrentUser",value:function(){E=!0}},{key:"disableUnsafeCurrentUser",value:function(){E=!1}},{key:"_registerAuthenticationProvider",value:function(e){I[e.getAuthType()]=e,t.currentAsync().then(function(t){t&&t._synchronizeAuthData(e.getAuthType())})}},{key:"_logInWith",value:function(e,r){var n=new t;return n._linkWith(e,r)}},{key:"_clearCache",value:function(){j=null,S=!1}},{key:"_setCurrentUserCache",value:function(e){j=e}}]),t}(_["default"]);r["default"]=T,_["default"].registerSubclass("_User",T);var N={updateUserOnDisk:function(e){var t=k["default"].generatePath(A),r=e.toJSON();return r.className="_User",k["default"].setItemAsync(t,JSON.stringify(r)).then(function(){return e})},setCurrentUser:function(e){return j=e,e._cleanupAuthData(),e._synchronizeAllAuthData(),N.updateUserOnDisk(e)},currentUser:function(){if(j)return j;if(S)return null;if(k["default"].async())throw new Error("Cannot call currentUser() when using a platform with an async storage system. Call currentUserAsync() instead.");var e=k["default"].generatePath(A),t=k["default"].getItem(e);if(S=!0,!t)return j=null,null;t=JSON.parse(t),t.className||(t.className="_User"),t._id&&(t.objectId!==t._id&&(t.objectId=t._id),delete t._id),t._sessionToken&&(t.sessionToken=t._sessionToken,delete t._sessionToken);var r=_["default"].fromJSON(t);return j=r,r._synchronizeAllAuthData(),r},currentUserAsync:function(){if(j)return w["default"].as(j);if(S)return w["default"].as(null);var e=k["default"].generatePath(A);return k["default"].getItemAsync(e).then(function(e){if(S=!0,!e)return j=null,w["default"].as(null);e=JSON.parse(e),e.className||(e.className="_User"),e._id&&(e.objectId!==e._id&&(e.objectId=e._id),delete e._id),e._sessionToken&&(e.sessionToken=e._sessionToken,delete e._sessionToken);var t=_["default"].fromJSON(e);return j=t,t._synchronizeAllAuthData(),w["default"].as(t)})},signUp:function(e,t,r){var n=t&&t.username||e.get("username"),a=t&&t.password||e.get("password");return n&&n.length?a&&a.length?e.save(t,r).then(function(){return e._finishFetch({password:void 0}),E?N.setCurrentUser(e):e}):w["default"].error(new m["default"](m["default"].OTHER_CAUSE,"Cannot sign up user with an empty password.")):w["default"].error(new m["default"](m["default"].OTHER_CAUSE,"Cannot sign up user with an empty name."))},logIn:function(e,t){var r=f["default"].getRESTController(),n={username:e.get("username"),password:e.get("password")};return r.request("GET","login",n,t).then(function(t,r){return e._migrateId(t.objectId),e._setExisted(!0),y.setPendingOp(e.className,e._getId(),"username",void 0),y.setPendingOp(e.className,e._getId(),"password",void 0),t.password=void 0,e._finishFetch(t),E?N.setCurrentUser(e):w["default"].as(e)})},become:function(e){var t=new T,r=f["default"].getRESTController();return r.request("GET","users/me",{},e).then(function(e,r){return t._finishFetch(e),t._setExisted(!0),N.setCurrentUser(t)})},logOut:function(){return N.currentUserAsync().then(function(e){var t=k["default"].generatePath(A),r=k["default"].removeItemAsync(t),n=f["default"].getRESTController();if(null!==e){var a=e.getSessionToken();a&&(0,h["default"])(a)&&(r=r.then(function(){return n.request("POST","logout",{},{sessionToken:a})})),e._logOutWithAll(),e._finishFetch({sessionToken:void 0})}return S=!0,j=null,r})},requestPasswordReset:function(e,t){var r=f["default"].getRESTController();return r.request("POST","requestPasswordReset",{email:e},t)},upgradeToRevocableSession:function(e,t){var r=e.getSessionToken();if(!r)return w["default"].error(new m["default"](m["default"].SESSION_MISSING,"Cannot upgrade a user with no session token"));t.sessionToken=r;var n=f["default"].getRESTController();return n.request("POST","upgradeToRevocableSession",{},t).then(function(t){var r=new C["default"];return r._finishFetch(t),e._finishFetch({sessionToken:r.getSessionToken()}),e.isCurrent()?N.setCurrentUser(e):w["default"].as(e)})},linkWith:function(e,t){return e.save({authData:t}).then(function(){return E?N.setCurrentUser(e):e})}};f["default"].setUserController(N),t.exports=r["default"]},{"./CoreManager":3,"./ObjectState":6,"./ParseError":10,"./ParseObject":14,"./ParsePromise":16,"./ParseSession":20,"./Storage":24,"./isRevocableSession":33,"babel-runtime/core-js/object/define-property":38,"babel-runtime/helpers/class-call-check":43,"babel-runtime/helpers/create-class":44,"babel-runtime/helpers/get":45,"babel-runtime/helpers/inherits":46,"babel-runtime/helpers/interop-require-default":47,"babel-runtime/helpers/interop-require-wildcard":48}],22:[function(e,t,r){"use strict";function n(e,t){if(t=t||{},e.where&&e.where instanceof u["default"]&&(e.where=e.where.toJSON().where),e.push_time&&"object"==typeof e.push_time&&(e.push_time=e.push_time.toJSON()),e.expiration_time&&"object"==typeof e.expiration_time&&(e.expiration_time=e.expiration_time.toJSON()),e.expiration_time&&e.expiration_interval)throw new Error("expiration_time and expiration_interval cannot both be set.");return o["default"].getPushController().send(e,{useMasterKey:t.useMasterKey})._thenRunCallbacks(t)}var a=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0}),r.send=n;var s=e("./CoreManager"),o=a(s),i=e("./ParseQuery"),u=a(i);o["default"].setPushController({send:function(e,t){var r=o["default"].getRESTController(),n=r.request("POST","push",e,{useMasterKey:!!t.useMasterKey});return n._thenRunCallbacks(t)}})},{"./CoreManager":3,"./ParseQuery":17,"babel-runtime/helpers/interop-require-default":47}],23:[function(e,t,r){(function(n){"use strict";function a(e,t,r){var n=new f["default"],a=new XDomainRequest;return a.onload=function(){var e;try{e=JSON.parse(a.responseText)}catch(t){n.reject(t)}e&&n.resolve(e)},a.onerror=a.ontimeout=function(){var e={responseText:JSON.stringify({code:l["default"].X_DOMAIN_REQUEST,error:"IE's XDomainRequest does not supply error info."})};n.reject(e)},a.onprogress=function(){},a.open(e,t),a.send(r),n}var s=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var o=e("./CoreManager"),i=s(o),u=e("./ParseError"),l=s(u),c=e("./ParsePromise"),f=s(c),d=e("./Storage"),h=(s(d),null);"undefined"!=typeof XMLHttpRequest&&(h=XMLHttpRequest);var p=!1;"undefined"==typeof XDomainRequest||"withCredentials"in new XMLHttpRequest||(p=!0);var y={ajax:function(e,t,r,s){if(p)return a(e,t,r,s);var o=new f["default"],u=0,l=function c(){if(null==h)throw new Error("Cannot make a request: No definition of XMLHttpRequest was found.");var a=!1,l=new h;l.onreadystatechange=function(){if(4===l.readyState&&!a)if(a=!0,l.status>=200&&l.status<300){var e;try{e=JSON.parse(l.responseText)}catch(t){o.reject(t.toString())}e&&o.resolve(e,l.status,l)}else if(l.status>=500||0===l.status)if(++u-1)return!0;for(var r=0;r-1||e.dirty()||a(e._getServerData()).length<1?e.toPointer():(s=s.concat(o),e._toFullJSON(s))}if(e instanceof p.Op||e instanceof i["default"]||e instanceof f["default"]||e instanceof v["default"])return e.toJSON();if(e instanceof l["default"]){if(!e.url())throw new Error("Tried to encode an unsaved file.");return e.toJSON()}if("[object Date]"===m.call(e)){if(isNaN(e))throw new Error("Tried to encode an invalid date.");return{__type:"Date",iso:e.toJSON()}}if("[object RegExp]"===m.call(e)&&"string"==typeof e.source)return e.source;if(Array.isArray(e))return e.map(function(e){return n(e,t,r,s)});if(e&&"object"==typeof e){var u={};for(var c in e)u[c]=n(e[c],t,r,s);return u}return e}var a=e("babel-runtime/core-js/object/keys")["default"],s=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0});var o=e("./ParseACL"),i=s(o),u=e("./ParseFile"),l=s(u),c=e("./ParseGeoPoint"),f=s(c),d=e("./ParseObject"),h=s(d),p=e("./ParseOp"),y=e("./ParseRelation"),v=s(y),m=Object.prototype.toString;r["default"]=function(e,t,r,a){return n(e,!!t,!!r,a||[])},t.exports=r["default"]},{"./ParseACL":8,"./ParseFile":11,"./ParseGeoPoint":12,"./ParseObject":14,"./ParseOp":15,"./ParseRelation":18,"babel-runtime/core-js/object/keys":41,"babel-runtime/helpers/interop-require-default":47}],31:[function(e,t,r){"use strict";function n(e,t){if(typeof e!=typeof t)return!1;if(!e||"object"!=typeof e)return e===t;if(Array.isArray(e)||Array.isArray(t)){if(!Array.isArray(e)||!Array.isArray(t))return!1;if(e.length!==t.length)return!1;for(var r=e.length;r--;)if(!n(e[r],t[r]))return!1;return!0}if(e instanceof i["default"]||e instanceof l["default"]||e instanceof f["default"]||e instanceof h["default"])return e.equals(t);if(a(e).length!==a(t).length)return!1;for(var s in e)if(!n(e[s],t[s]))return!1;return!0}var a=e("babel-runtime/core-js/object/keys")["default"],s=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0}),r["default"]=n;var o=e("./ParseACL"),i=s(o),u=e("./ParseFile"),l=s(u),c=e("./ParseGeoPoint"),f=s(c),d=e("./ParseObject"),h=s(d);t.exports=r["default"]},{"./ParseACL":8,"./ParseFile":11,"./ParseGeoPoint":12,"./ParseObject":14,"babel-runtime/core-js/object/keys":41,"babel-runtime/helpers/interop-require-default":47}],32:[function(e,t,r){"use strict";function n(e){return e.replace(/[&<>\/'"]/g,function(e){return{"&":"&","<":"<",">":">","/":"/","'":"'",'"':"""}[e]})}Object.defineProperty(r,"__esModule",{value:!0}),r["default"]=n,t.exports=r["default"]},{}],33:[function(e,t,r){"use strict";function n(e){return e.indexOf("r:")>-1}Object.defineProperty(r,"__esModule",{value:!0}),r["default"]=n,t.exports=r["default"]},{}],34:[function(e,t,r){"use strict";function n(e){var t=new RegExp("^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2})T([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})(.([0-9]+))?Z$"),r=t.exec(e);if(!r)return null;var n=r[1]||0,a=(r[2]||1)-1,s=r[3]||0,o=r[4]||0,i=r[5]||0,u=r[6]||0,l=r[8]||0;return new Date(Date.UTC(n,a,s,o,i,u,l))}Object.defineProperty(r,"__esModule",{value:!0}),r["default"]=n,t.exports=r["default"]},{}],35:[function(e,t,r){"use strict";function n(e){var t=[];return e.forEach(function(e){e instanceof u["default"]?(0,o["default"])(t,e)||t.push(e):t.indexOf(e)<0&&t.push(e)}),t}var a=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0}),r["default"]=n;var s=e("./arrayContainsObject"),o=a(s),i=e("./ParseObject"),u=a(i);t.exports=r["default"]},{"./ParseObject":14,"./arrayContainsObject":27,"babel-runtime/helpers/interop-require-default":47}],36:[function(e,t,r){"use strict";function n(e,t){var r={objects:{},files:[]},n=e.className+":"+e._getId();r.objects[n]=e.dirty()?e:!0;var s=e.attributes;for(var o in s)"object"==typeof s[o]&&a(s[o],r,!1,!!t);var i=[];for(var u in r.objects)u!==n&&r.objects[u]!==!0&&i.push(r.objects[u]);return i.concat(r.files)}function a(e,t,r,n){if(e instanceof l["default"]){if(!e.id&&r)throw new Error("Cannot create a pointer to an unsaved Object.");var s=e.className+":"+e._getId();if(!t.objects[s]){t.objects[s]=e.dirty()?e:!0;var o=e.attributes;for(var u in o)"object"==typeof o[u]&&a(o[u],t,!n,n)}}else{if(e instanceof i["default"])return void(!e.url()&&t.files.indexOf(e)<0&&t.files.push(e));if(!(e instanceof f["default"])){Array.isArray(e)&&e.forEach(function(e){a(e,t,r,n)});for(var c in e)"object"==typeof e[c]&&a(e[c],t,r,n)}}}var s=e("babel-runtime/helpers/interop-require-default")["default"];Object.defineProperty(r,"__esModule",{value:!0}),r["default"]=n;var o=e("./ParseFile"),i=s(o),u=e("./ParseObject"),l=s(u),c=e("./ParseRelation"),f=s(c);t.exports=r["default"]},{"./ParseFile":11,"./ParseObject":14,"./ParseRelation":18,"babel-runtime/helpers/interop-require-default":47}],37:[function(e,t,r){t.exports={"default":e("core-js/library/fn/object/create"),__esModule:!0}},{"core-js/library/fn/object/create":49}],38:[function(e,t,r){t.exports={"default":e("core-js/library/fn/object/define-property"),__esModule:!0}},{"core-js/library/fn/object/define-property":50}],39:[function(e,t,r){t.exports={"default":e("core-js/library/fn/object/freeze"),__esModule:!0}},{"core-js/library/fn/object/freeze":51}],40:[function(e,t,r){t.exports={"default":e("core-js/library/fn/object/get-own-property-descriptor"),__esModule:!0}},{"core-js/library/fn/object/get-own-property-descriptor":52}],41:[function(e,t,r){t.exports={"default":e("core-js/library/fn/object/keys"),__esModule:!0}},{"core-js/library/fn/object/keys":53}],42:[function(e,t,r){t.exports={"default":e("core-js/library/fn/object/set-prototype-of"),__esModule:!0}},{"core-js/library/fn/object/set-prototype-of":54}],43:[function(e,t,r){"use strict";r["default"]=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},r.__esModule=!0},{}],44:[function(e,t,r){"use strict";var n=e("babel-runtime/core-js/object/define-property")["default"];r["default"]=function(){function e(e,t){for(var r=0;r - Github Comment Tracker Options - - -
    This is the settings page for the Github Comment Tracker extension.
    -

    - -Query for new data every few seconds: (Toggle) - - - diff --git a/other/options.js b/other/options.js deleted file mode 100644 index 05ef3a1..0000000 --- a/other/options.js +++ /dev/null @@ -1,26 +0,0 @@ -var setupStatus = function () { - var span = document.getElementById('poll_status'); - - while (span.firstChild) { - span.removeChild(span.firstChild); - } - - var enabled = chrome.storage.sync.get({ - polling: true, - }, function (item) { - pollingStatus = item.polling; - span.appendChild(document.createTextNode(item.polling ? "Enabled" : "Disabled")); - }); -}; - -var pollingStatus; - -setupStatus(); - -document.getElementById('toggle_poll').addEventListener('click', function () { - chrome.storage.sync.set({ - polling: !pollingStatus - }, function (items) { - setupStatus(); - }); -}, false) From 711c23d0502a64825d54add240fe63d2859cb92a Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 04:07:31 -0400 Subject: [PATCH 14/47] Refactor and add firebase-helper.js --- core/firebase-helper.js | 14 ++++++++++++++ core/tracker.js | 40 +++++++++++----------------------------- manifest.json | 1 + 3 files changed, 26 insertions(+), 29 deletions(-) create mode 100644 core/firebase-helper.js diff --git a/core/firebase-helper.js b/core/firebase-helper.js new file mode 100644 index 0000000..4938260 --- /dev/null +++ b/core/firebase-helper.js @@ -0,0 +1,14 @@ + +const app = firebase.initializeApp({ + apiKey: "AIzaSyBb_2bG5cUaW25MfCdaDP7l5HF8UbF2QR0", + authDomain: "ghct-79a7b.firebaseapp.com", + databaseURL: "https://ghct-79a7b.firebaseio.com", + projectId: "ghct-79a7b", + storageBucket: "ghct-79a7b.appspot.com", + messagingSenderId: "45909398186" +}); +const database = firebase.database(); + +const commentRef = function(commentId) { + return database.ref('testing_zone/' + commentId); +}; diff --git a/core/tracker.js b/core/tracker.js index c25b365..83dfcc4 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -1,17 +1,3 @@ -// ==UserScript== -// This script works on the PR page. -// @match https://github.com/* -// ==/UserScript== - -const app = firebase.initializeApp({ - apiKey: "AIzaSyBb_2bG5cUaW25MfCdaDP7l5HF8UbF2QR0", - authDomain: "ghct-79a7b.firebaseapp.com", - databaseURL: "https://ghct-79a7b.firebaseio.com", - projectId: "ghct-79a7b", - storageBucket: "ghct-79a7b.appspot.com", - messagingSenderId: "45909398186" -}); -const database = firebase.database(); const findAllThreads = function () { const threads = []; @@ -60,7 +46,7 @@ const setListeners = function () { allThreads.forEach(info => { if (!info.listening) { - firebase.database().ref('testing_zone/' + info.id).on('value', snapshot => { + commentRef(info.id).on('value', snapshot => { const val = snapshot.val(); if (val) { info.resolved = val.resolved && val.lastCommentSeen === info.lastCommentId; @@ -142,7 +128,13 @@ const updateMergeButton = function () { } }; -const makeButton = function (elem, threadInfo) { +const updateInfo = function(info, resolved, lastCommentSeen) { + commentRef(info.id).set({resolved, lastCommentSeen}); + info.resolved = resolved; + updateThread(info); +}; + +const makeButton = function (elem, info) { const e = $(elem); e.find('.comment-track-action').remove(); @@ -151,27 +143,17 @@ const makeButton = function (elem, threadInfo) { actionSelector = '.timeline-comment-actions'; } - if (threadInfo.resolved) { + if (info.resolved) { e.find(actionSelector).prepend(''); - e.find('.comment-track-unresolve').on('click', function (event) { event.preventDefault(); - - firebase.database().ref('testing_zone/' + threadInfo.id).set({resolved: false, lastCommentSeen: null}); - threadInfo.resolved = false; - - updateThread(threadInfo); + updateInfo(info, false, null); }); } else { e.find(actionSelector).prepend(''); - e.find('.comment-track-resolve').on('click', function (event) { event.preventDefault(); - - firebase.database().ref('testing_zone/' + threadInfo.id).set({resolved: true, lastCommentSeen: threadInfo.lastCommentId}); - threadInfo.resolved = true; - - updateThread(threadInfo); + updateInfo(info, true, info.lastCommentId); }); } }; diff --git a/manifest.json b/manifest.json index d7ad088..573850e 100644 --- a/manifest.json +++ b/manifest.json @@ -19,6 +19,7 @@ "lib/firebase.js", "lib/firebase-app.js", "lib/firebase-database.js", + "core/firebase-helper.js", "core/waitForKeyElements.js", "core/tracker.js" ], From 4c13df76924733b43944fe336089d7257085e4ad Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 04:09:53 -0400 Subject: [PATCH 15/47] Refactor updateMergeButton --- core/tracker.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index 83dfcc4..953b126 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -29,7 +29,7 @@ const findAllThreads = function () { }; let allThreads; -let initalCanBeMerged = false; +let canBeMerged = false; const checkThreads = function () { const newThreads = findAllThreads(); @@ -62,6 +62,8 @@ const setListeners = function () { }; const main = function () { + canBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); + setListeners(); // waitForKeyElements will trigger for *each* changed/added element. @@ -90,12 +92,7 @@ const allThreadsResolved = function () { }; const updateMergeButton = function () { - if (!initalCanBeMerged) { - initalCanBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); - } - $('.comment-track-status').remove(); - - if (initalCanBeMerged) { + if (canBeMerged) { if (allThreadsResolved()) { // Make button green $('.js-merge-branch-action').addClass('btn-primary'); From b882d3ab79884b62f683aed9a9c7e9eeea26302a Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 04:14:45 -0400 Subject: [PATCH 16/47] Refactor updateThread --- core/tracker.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index 953b126..0568223 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -52,9 +52,7 @@ const setListeners = function () { info.resolved = val.resolved && val.lastCommentSeen === info.lastCommentId; info.lastCommentSeen = val.lastCommentSeen; } - updateThread(info, {suppressMergeUpdate: true}); - expandUnresolvedThread(info); - updateMergeButton(); + updateThread(info); }); info.listening = true; } @@ -155,8 +153,7 @@ const makeButton = function (elem, info) { } }; -const updateThread = function (info, options) { - options = options || {}; +const updateThread = (info) => { const id = info.id; const elem = $('#' + id).first(); @@ -169,9 +166,8 @@ const updateThread = function (info, options) { makeButton(elem, info); } - if (!options.suppressMergeUpdate) { - updateMergeButton(); - } + expandUnresolvedThread(info); + updateMergeButton(); }; main(); From 358721f3a4d37ed7cbb30f4341eb63b4af43e563 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 04:20:47 -0400 Subject: [PATCH 17/47] Refactor; move stuff to core/init.js --- core/{firebase-helper.js => init.js} | 7 +++++++ core/tracker.js | 17 ++++++----------- manifest.json | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) rename core/{firebase-helper.js => init.js} (75%) diff --git a/core/firebase-helper.js b/core/init.js similarity index 75% rename from core/firebase-helper.js rename to core/init.js index 4938260..d57f0d5 100644 --- a/core/firebase-helper.js +++ b/core/init.js @@ -12,3 +12,10 @@ const database = firebase.database(); const commentRef = function(commentId) { return database.ref('testing_zone/' + commentId); }; + +const globals = { + allThreads: [], + canBeMerged: false +}; + +globals.canBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); diff --git a/core/tracker.js b/core/tracker.js index 0568223..f04785d 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -28,13 +28,10 @@ const findAllThreads = function () { return threads; }; -let allThreads; -let canBeMerged = false; - const checkThreads = function () { const newThreads = findAllThreads(); - if (_.isEqual(_.pluck(newThreads, 'id'), _.pluck(allThreads, 'id'))) { - if (_.isEqual(_.pluck(newThreads, 'lastCommentId'), _.pluck(allThreads, 'lastCommentId'))) { + if (_.isEqual(_.pluck(newThreads, 'id'), _.pluck(globals.allThreads, 'id'))) { + if (_.isEqual(_.pluck(newThreads, 'lastCommentId'), _.pluck(globals.allThreads, 'lastCommentId'))) { return; } } @@ -42,9 +39,9 @@ const checkThreads = function () { }; const setListeners = function () { - allThreads = findAllThreads(); + globals.allThreads = findAllThreads(); - allThreads.forEach(info => { + globals.allThreads.forEach(info => { if (!info.listening) { commentRef(info.id).on('value', snapshot => { const val = snapshot.val(); @@ -60,8 +57,6 @@ const setListeners = function () { }; const main = function () { - canBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); - setListeners(); // waitForKeyElements will trigger for *each* changed/added element. @@ -84,13 +79,13 @@ const expandUnresolvedThread = (info) => { }; const allThreadsResolved = function () { - return _.all(allThreads, function (info) { + return _.all(globals.allThreads, function (info) { return info.resolved; }); }; const updateMergeButton = function () { - if (canBeMerged) { + if (globals.canBeMerged) { if (allThreadsResolved()) { // Make button green $('.js-merge-branch-action').addClass('btn-primary'); diff --git a/manifest.json b/manifest.json index 573850e..1a97654 100644 --- a/manifest.json +++ b/manifest.json @@ -19,7 +19,7 @@ "lib/firebase.js", "lib/firebase-app.js", "lib/firebase-database.js", - "core/firebase-helper.js", + "core/init.js", "core/waitForKeyElements.js", "core/tracker.js" ], From 7c0dbc49dd89c02f272f98dbc80355f7e201d66e Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 21:03:29 -0400 Subject: [PATCH 18/47] Eliminate global allThreads, simplify page update check code --- core/init.js | 7 +------ core/tracker.js | 40 ++++++++++++++-------------------------- 2 files changed, 15 insertions(+), 32 deletions(-) diff --git a/core/init.js b/core/init.js index d57f0d5..2fad7ed 100644 --- a/core/init.js +++ b/core/init.js @@ -13,9 +13,4 @@ const commentRef = function(commentId) { return database.ref('testing_zone/' + commentId); }; -const globals = { - allThreads: [], - canBeMerged: false -}; - -globals.canBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); +const canBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); diff --git a/core/tracker.js b/core/tracker.js index f04785d..291fe7d 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -28,20 +28,14 @@ const findAllThreads = function () { return threads; }; -const checkThreads = function () { - const newThreads = findAllThreads(); - if (_.isEqual(_.pluck(newThreads, 'id'), _.pluck(globals.allThreads, 'id'))) { - if (_.isEqual(_.pluck(newThreads, 'lastCommentId'), _.pluck(globals.allThreads, 'lastCommentId'))) { - return; - } - } - setListeners(); -}; - const setListeners = function () { - globals.allThreads = findAllThreads(); + const allThreads = findAllThreads(); - globals.allThreads.forEach(info => { + const areAllResolved = () => { + return _.all(allThreads, info => info.resolved); + }; + + allThreads.forEach(info => { if (!info.listening) { commentRef(info.id).on('value', snapshot => { const val = snapshot.val(); @@ -50,6 +44,8 @@ const setListeners = function () { info.lastCommentSeen = val.lastCommentSeen; } updateThread(info); + expandUnresolvedThread(info); + updateMergeButton(areAllResolved()); }); info.listening = true; } @@ -63,7 +59,7 @@ const main = function () { // Debounce both to only call checkThreads once, and to call with a slight // delay for better compatiblity with the WideGithub extension: // https://chrome.google.com/webstore/detail/wide-github/kaalofacklcidaampbokdplbklpeldpj - const debouncedCheckThreads = _.debounce(checkThreads, 100); + const debouncedCheckThreads = _.debounce(setListeners, 100); waitForKeyElements('.comment', debouncedCheckThreads); }; @@ -78,15 +74,10 @@ const expandUnresolvedThread = (info) => { } }; -const allThreadsResolved = function () { - return _.all(globals.allThreads, function (info) { - return info.resolved; - }); -}; - -const updateMergeButton = function () { - if (globals.canBeMerged) { - if (allThreadsResolved()) { +const updateMergeButton = function (allResolved) { + $('.comment-track-status').remove(); + if (canBeMerged) { + if (allResolved) { // Make button green $('.js-merge-branch-action').addClass('btn-primary'); $('.branch-action').addClass('branch-action-state-clean').removeClass('branch-action-state-dirty'); @@ -102,7 +93,7 @@ const updateMergeButton = function () { $('.branch-action-item-icon').removeClass('completeness-indicator-success').addClass('completeness-indicator-problem').html(''); } } else { - if (!allThreadsResolved()) { + if (!allResolved) { $('.merge-message').before( '
    ' + '
    ' + @@ -160,9 +151,6 @@ const updateThread = (info) => { } else { makeButton(elem, info); } - - expandUnresolvedThread(info); - updateMergeButton(); }; main(); From 59dee84c7c9166e3ba5a4c2fdc39816052924a22 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 21:04:12 -0400 Subject: [PATCH 19/47] Create/add a nice icon for this extension --- manifest.json | 5 ++++- other/github-comment-tracker.png | Bin 0 -> 58874 bytes 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 other/github-comment-tracker.png diff --git a/manifest.json b/manifest.json index 1a97654..9b4bde0 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,10 @@ "name": "Github Comment Tracker", "description": "Tracks resolved / unresolved state of comments on github pull requests", - "version": "1.1.6", + "version": "1.2.0", + "icons": { + "256": "other/github-comment-tracker.png" + }, "permissions": [ "https://github.com/" diff --git a/other/github-comment-tracker.png b/other/github-comment-tracker.png new file mode 100644 index 0000000000000000000000000000000000000000..17afb19fe11b3450fb23e75be52cbc51381b0ae8 GIT binary patch literal 58874 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�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 Date: Thu, 15 Jun 2017 21:14:56 -0400 Subject: [PATCH 20/47] Refactor, merge in init.js, eliminate global canBeMerged --- core/init.js | 16 ---------------- core/tracker.js | 37 +++++++++++++++++++++++++------------ manifest.json | 1 - 3 files changed, 25 insertions(+), 29 deletions(-) delete mode 100644 core/init.js diff --git a/core/init.js b/core/init.js deleted file mode 100644 index 2fad7ed..0000000 --- a/core/init.js +++ /dev/null @@ -1,16 +0,0 @@ - -const app = firebase.initializeApp({ - apiKey: "AIzaSyBb_2bG5cUaW25MfCdaDP7l5HF8UbF2QR0", - authDomain: "ghct-79a7b.firebaseapp.com", - databaseURL: "https://ghct-79a7b.firebaseio.com", - projectId: "ghct-79a7b", - storageBucket: "ghct-79a7b.appspot.com", - messagingSenderId: "45909398186" -}); -const database = firebase.database(); - -const commentRef = function(commentId) { - return database.ref('testing_zone/' + commentId); -}; - -const canBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); diff --git a/core/tracker.js b/core/tracker.js index 291fe7d..e2cb888 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -1,5 +1,5 @@ -const findAllThreads = function () { +const findAllThreads = () => { const threads = []; const d = $('#discussion_bucket'); @@ -28,13 +28,10 @@ const findAllThreads = function () { return threads; }; -const setListeners = function () { +const setListeners = () => { + const canBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); const allThreads = findAllThreads(); - - const areAllResolved = () => { - return _.all(allThreads, info => info.resolved); - }; - + const areAllResolved = () => _.all(allThreads, info => info.resolved); allThreads.forEach(info => { if (!info.listening) { commentRef(info.id).on('value', snapshot => { @@ -45,14 +42,15 @@ const setListeners = function () { } updateThread(info); expandUnresolvedThread(info); - updateMergeButton(areAllResolved()); + updateMergeButton(canBeMerged, areAllResolved()); }); info.listening = true; } }); }; -const main = function () { +const main = () => { + initFirebase(); setListeners(); // waitForKeyElements will trigger for *each* changed/added element. @@ -74,7 +72,7 @@ const expandUnresolvedThread = (info) => { } }; -const updateMergeButton = function (allResolved) { +const updateMergeButton = (canBeMerged, allResolved) => { $('.comment-track-status').remove(); if (canBeMerged) { if (allResolved) { @@ -109,13 +107,13 @@ const updateMergeButton = function (allResolved) { } }; -const updateInfo = function(info, resolved, lastCommentSeen) { +const updateInfo = (info, resolved, lastCommentSeen) => { commentRef(info.id).set({resolved, lastCommentSeen}); info.resolved = resolved; updateThread(info); }; -const makeButton = function (elem, info) { +const makeButton = (elem, info) => { const e = $(elem); e.find('.comment-track-action').remove(); @@ -153,4 +151,19 @@ const updateThread = (info) => { } }; +const commentRef = function(commentId) { + return firebase.database().ref('testing_zone/' + commentId); +}; + +const initFirebase = () => { + firebase.initializeApp({ + apiKey: "AIzaSyBb_2bG5cUaW25MfCdaDP7l5HF8UbF2QR0", + authDomain: "ghct-79a7b.firebaseapp.com", + databaseURL: "https://ghct-79a7b.firebaseio.com", + projectId: "ghct-79a7b", + storageBucket: "ghct-79a7b.appspot.com", + messagingSenderId: "45909398186" + }); +}; + main(); diff --git a/manifest.json b/manifest.json index 9b4bde0..01492b8 100644 --- a/manifest.json +++ b/manifest.json @@ -22,7 +22,6 @@ "lib/firebase.js", "lib/firebase-app.js", "lib/firebase-database.js", - "core/init.js", "core/waitForKeyElements.js", "core/tracker.js" ], From 3da68327039c11e389f839cdd79df83a0e693b61 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 21:17:38 -0400 Subject: [PATCH 21/47] Inline the function areAllResolved --- core/tracker.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index e2cb888..c59a3e4 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -31,7 +31,6 @@ const findAllThreads = () => { const setListeners = () => { const canBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); const allThreads = findAllThreads(); - const areAllResolved = () => _.all(allThreads, info => info.resolved); allThreads.forEach(info => { if (!info.listening) { commentRef(info.id).on('value', snapshot => { @@ -42,7 +41,7 @@ const setListeners = () => { } updateThread(info); expandUnresolvedThread(info); - updateMergeButton(canBeMerged, areAllResolved()); + updateMergeButton(canBeMerged, allThreads.every(info => info.resolved)); }); info.listening = true; } From acb96edc7954ad182c1e81480feb45fa7ccd46df Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 23:33:42 -0400 Subject: [PATCH 22/47] Refactor & fix branch merge waring insertion code --- core/tracker.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index c59a3e4..a50a440 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -91,21 +91,31 @@ const updateMergeButton = (canBeMerged, allResolved) => { } } else { if (!allResolved) { - $('.merge-message').before( - '
    ' + - '
    ' + - ' ' + - '
    ' + - '

    This branch has unresolved comments

    ' + - ' ' + - ' See above for red unresolved comments' + - ' ' + - '
    ' + findMergeButton().insertAdjacentHTML('beforebegin', + `
    +
    + +
    +

    This branch has unresolved comments

    + + See above for red unresolved comments + +
    ` ); } } }; +const findMergeButton = () => { + const mergeabilityDetailsDivs = document.querySelectorAll('.mergeability-details'); + if (mergeabilityDetailsDivs.length > 0) { + const mergeMessageDivs = mergeabilityDetailsDivs[0].querySelectorAll('.merge-message'); + if (mergeMessageDivs.length > 0) + return mergeMessageDivs[0]; + } + return null; +}; + const updateInfo = (info, resolved, lastCommentSeen) => { commentRef(info.id).set({resolved, lastCommentSeen}); info.resolved = resolved; From c49b3135ac30c7ef6287fd93f4f0b472f20f7e06 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 15 Jun 2017 23:34:55 -0400 Subject: [PATCH 23/47] Extirpate branch merge message alternation --- core/tracker.js | 48 ++++++++++++++---------------------------------- 1 file changed, 14 insertions(+), 34 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index a50a440..27fa05d 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -29,7 +29,6 @@ const findAllThreads = () => { }; const setListeners = () => { - const canBeMerged = $('.js-merge-branch-action').hasClass('btn-primary'); const allThreads = findAllThreads(); allThreads.forEach(info => { if (!info.listening) { @@ -41,7 +40,7 @@ const setListeners = () => { } updateThread(info); expandUnresolvedThread(info); - updateMergeButton(canBeMerged, allThreads.every(info => info.resolved)); + updateMergeButton(allThreads.some(info => !info.resolved)); }); info.listening = true; } @@ -71,39 +70,20 @@ const expandUnresolvedThread = (info) => { } }; -const updateMergeButton = (canBeMerged, allResolved) => { +const updateMergeButton = (unresolved) => { $('.comment-track-status').remove(); - if (canBeMerged) { - if (allResolved) { - // Make button green - $('.js-merge-branch-action').addClass('btn-primary'); - $('.branch-action').addClass('branch-action-state-clean').removeClass('branch-action-state-dirty'); - $('.status-heading').text('This pull request can be automatically merged.'); - $('.status-meta').text('Merging can be performed automatically.'); - $('.branch-action-item-icon').removeClass('completeness-indicator-problem').addClass('completeness-indicator-success').html(''); - } else { - // Make button grey - $('.js-merge-branch-action').removeClass('btn-primary'); - $('.branch-action').removeClass('branch-action-state-clean').addClass('branch-action-state-dirty'); - $('.status-heading').text('Merge with caution!'); - $('.status-meta').text('You have unresolved comments!'); - $('.branch-action-item-icon').removeClass('completeness-indicator-success').addClass('completeness-indicator-problem').html(''); - } - } else { - if (!allResolved) { - findMergeButton().insertAdjacentHTML('beforebegin', - `
    -
    - -
    -

    This branch has unresolved comments

    - - See above for red unresolved comments - -
    ` - ); - } - } + if (unresolved) + findMergeButton().insertAdjacentHTML('beforebegin', + `
    +
    + +
    +

    This branch has unresolved comments

    + + See above for red unresolved comments + +
    ` + ); }; const findMergeButton = () => { From 7cf9200a92c6575f510e9ac4a82a119fd5e490b2 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Mon, 19 Jun 2017 23:13:05 -0400 Subject: [PATCH 24/47] Use Web APIs instead of jQuery in findAllThreads() --- core/tracker.js | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index 27fa05d..803a4b4 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -1,26 +1,27 @@ const findAllThreads = () => { const threads = []; - const d = $('#discussion_bucket'); - - d.find('.js-line-comments .js-comments-holder').each(function () { - const childComments = $(this).children('.js-comment'); - if (childComments.length > 0) { - const firstCommentChild = childComments.first()[0]; + const discussionBucket = document.getElementById('discussion_bucket'); + const discussionThreads = discussionBucket.querySelectorAll('.js-line-comments > .js-comments-holder'); + const issueComments = discussionBucket.querySelectorAll('.timeline-comment-wrapper > .timeline-comment.js-comment'); + + discussionThreads.forEach((el) => { + const comments = el.getElementsByClassName('js-comment'); + if (comments.length > 0) { + const firstComment = comments[0]; + const lastComment = comments[comments.length - 1]; threads.push({ - id: firstCommentChild.id, - comments: childComments, - lastCommentId: childComments.last()[0].id, + id: firstComment.id, + lastCommentId: lastComment.id, }); } }); - d.find('.timeline-comment-wrapper .timeline-comment.js-comment').each(function () { - if (this.id && this.id.match(/^issuecomment/)) { + issueComments.forEach((el) => { + if (el.id && el.id.match(/^issuecomment/)) { threads.push({ - id: this.id, - comments: $(this), - lastCommentId: this.id, + id: el.id, + lastCommentId: el.id, }); } }); @@ -87,9 +88,9 @@ const updateMergeButton = (unresolved) => { }; const findMergeButton = () => { - const mergeabilityDetailsDivs = document.querySelectorAll('.mergeability-details'); + const mergeabilityDetailsDivs = document.getElementsByClassName('mergeability-details'); if (mergeabilityDetailsDivs.length > 0) { - const mergeMessageDivs = mergeabilityDetailsDivs[0].querySelectorAll('.merge-message'); + const mergeMessageDivs = mergeabilityDetailsDivs[0].getElementsByClassName('merge-message'); if (mergeMessageDivs.length > 0) return mergeMessageDivs[0]; } From 7665c399c0f34f48afa9962df0a62dbae10bb645 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Tue, 20 Jun 2017 00:04:13 -0400 Subject: [PATCH 25/47] Add .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..485dee6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea From e87430b87da723636bec894edb7544b7f049b535 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Tue, 20 Jun 2017 01:19:19 -0400 Subject: [PATCH 26/47] Add RxJS, listen to DOM changes with MutationObserver, refactor, etc. Remove dependency underscore-min.js, remove waitForKeyElements.js --- core/tracker.js | 48 +++--- core/waitForKeyElements.js | 88 ----------- lib/Rx.min.js | 294 +++++++++++++++++++++++++++++++++++++ lib/underscore-min.js | 5 - manifest.json | 3 +- 5 files changed, 319 insertions(+), 119 deletions(-) delete mode 100644 core/waitForKeyElements.js create mode 100644 lib/Rx.min.js delete mode 100644 lib/underscore-min.js diff --git a/core/tracker.js b/core/tracker.js index 803a4b4..8b9cfc3 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -1,5 +1,5 @@ -const findAllThreads = () => { +const findAllComments = () => { const threads = []; const discussionBucket = document.getElementById('discussion_bucket'); const discussionThreads = discussionBucket.querySelectorAll('.js-line-comments > .js-comments-holder'); @@ -7,22 +7,24 @@ const findAllThreads = () => { discussionThreads.forEach((el) => { const comments = el.getElementsByClassName('js-comment'); - if (comments.length > 0) { + if (comments.length > 0 && el.tracked != comments.length) { const firstComment = comments[0]; const lastComment = comments[comments.length - 1]; threads.push({ id: firstComment.id, lastCommentId: lastComment.id, }); + el.tracked = comments.length; } }); issueComments.forEach((el) => { - if (el.id && el.id.match(/^issuecomment/)) { + if (el.id && el.id.match(/^issuecomment/) && !el.tracked) { threads.push({ id: el.id, lastCommentId: el.id, }); + el.tracked = true; } }); @@ -30,21 +32,19 @@ const findAllThreads = () => { }; const setListeners = () => { - const allThreads = findAllThreads(); - allThreads.forEach(info => { - if (!info.listening) { - commentRef(info.id).on('value', snapshot => { - const val = snapshot.val(); - if (val) { - info.resolved = val.resolved && val.lastCommentSeen === info.lastCommentId; - info.lastCommentSeen = val.lastCommentSeen; - } - updateThread(info); - expandUnresolvedThread(info); - updateMergeButton(allThreads.some(info => !info.resolved)); - }); - info.listening = true; - } + const allComments = findAllComments(); + console.log(`Invoked at: ${(new Date).getTime()/1000} with ${allComments.length} items`); + allComments.forEach(comment => { + commentRef(comment.id).on('value', snapshot => { + const val = snapshot.val(); + if (val) { + comment.resolved = val.resolved && val.lastCommentSeen === comment.lastCommentId; + comment.lastCommentSeen = val.lastCommentSeen; + } + updateThread(comment); + expandUnresolvedThread(comment); + updateMergeButton(allComments.some(info => !info.resolved)); + }); }); }; @@ -52,12 +52,12 @@ const main = () => { initFirebase(); setListeners(); - // waitForKeyElements will trigger for *each* changed/added element. - // Debounce both to only call checkThreads once, and to call with a slight - // delay for better compatiblity with the WideGithub extension: - // https://chrome.google.com/webstore/detail/wide-github/kaalofacklcidaampbokdplbklpeldpj - const debouncedCheckThreads = _.debounce(setListeners, 100); - waitForKeyElements('.comment', debouncedCheckThreads); + Rx.Observable.create((observer) => { + observer.next(); + new MutationObserver(() => observer.next()).observe( + document.getElementById('discussion_bucket'), + {childList: true, attributes: false, characterData: false, subtree: true}); + }).debounceTime(500).subscribe(setListeners); }; const expandUnresolvedThread = (info) => { diff --git a/core/waitForKeyElements.js b/core/waitForKeyElements.js deleted file mode 100644 index 541c4e1..0000000 --- a/core/waitForKeyElements.js +++ /dev/null @@ -1,88 +0,0 @@ -/*--- waitForKeyElements(): A utility function, for Greasemonkey scripts, - that detects and handles AJAXed content. - - Usage example: - - waitForKeyElements ( - "div.comments" - , commentCallbackFunction - ); - - //--- Page-specific function to do what we want when the node is found. - function commentCallbackFunction (jNode) { - jNode.text ("This comment changed by waitForKeyElements()."); - } - - IMPORTANT: This function requires your script to have loaded jQuery. -*/ -function waitForKeyElements( - selectorTxt, /* Required: The jQuery selector string that - specifies the desired element(s). - */ - actionFunction, /* Required: The code to run when elements are - found. It is passed a jNode to the matched - element. - */ - bWaitOnce, /* Optional: If false, will continue to scan for - new elements even after the first match is - found. - */ - iframeSelector /* Optional: If set, identifies the iframe to - search. - */ -) { - var targetNodes, btargetsFound; - if (typeof iframeSelector === "undefined") { - targetNodes = $(selectorTxt); - } else { - targetNodes = $(iframeSelector).contents () .find (selectorTxt); - } - - if (targetNodes && targetNodes.length > 0) { - btargetsFound = true; - /*--- Found target node(s). Go through each and act if they - are new. - */ - targetNodes.each (function () { - var jThis = $(this); - var alreadyFound = jThis.data ('alreadyFound') || false; - - if (!alreadyFound) { - //--- Call the payload function. - var cancelFound = actionFunction (jThis); - if (cancelFound) { - btargetsFound = false; - } else { - jThis.data ('alreadyFound', true); - } - } - }); - } else { - btargetsFound = false; - } - - //--- Get the timer-control variable for this selector. - var controlObj = waitForKeyElements.controlObj || {}; - var controlKey = selectorTxt.replace (/[^\w]/g, "_"); - var timeControl = controlObj [controlKey]; - - //--- Now set or clear the timer as appropriate. - if (btargetsFound && bWaitOnce && timeControl) { - //--- The only condition where we need to clear the timer. - clearInterval (timeControl); - delete controlObj [controlKey] - } else { - //--- Set a timer, if needed. - if (!timeControl) { - timeControl = setInterval (function () { - waitForKeyElements (selectorTxt, - actionFunction, - bWaitOnce, - iframeSelector - ); - }, 300); - controlObj [controlKey] = timeControl; - } - } - waitForKeyElements.controlObj = controlObj; -} diff --git a/lib/Rx.min.js b/lib/Rx.min.js new file mode 100644 index 0000000..a71ebef --- /dev/null +++ b/lib/Rx.min.js @@ -0,0 +1,294 @@ +/** + @license + Apache License 2.0 https://github.com/ReactiveX/RxJS/blob/master/LICENSE.txt + **/ +/* + ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +*****************************************************************************/ +(function(t,k){"object"===typeof exports&&"undefined"!==typeof module?k(exports):"function"===typeof define&&define.amd?define(["exports"],k):k(t.Rx=t.Rx||{})})(this,function(t){function k(b,a){function c(){this.constructor=b}ob(b,a);b.prototype=null===a?Object.create(a):(c.prototype=a.prototype,new c)}function N(b){return"function"===typeof b}function pb(){try{return la.apply(this,arguments)}catch(b){return m.e=b,m}}function r(b){la=b;return pb}function ma(b){return b.reduce(function(a,c){return a.concat(c instanceof +O?c.errors:c)},[])}function na(b){var a=b.subject;a.next(b.value);a.complete()}function qb(b){b.subject.error(b.err)}function rb(b){var a=this,c=b.source,e=b.subscriber;b=b.context;var d=c.callbackFunc,f=c.args,h=c.scheduler,g=c.subject;if(!g){var g=c.subject=new L,k=function sb(){for(var c=[],b=0;b=c.length?c[0]:c,subject:e}))};k.source=c;r(d).apply(b,f.concat(k))===m&&a.add(h.schedule(da,0,{err:m.e,subject:g}))}a.add(g.subscribe(e))}function oa(b){var a=b.subject;a.next(b.value);a.complete()}function da(b){b.subject.error(b.err)}function z(b){return b&&"function"===typeof b.schedule}function pa(b){return b&&"function"!==typeof b.subscribe&&"function"===typeof b.then}function p(b,a,c,e){var d=new qa(b,c,e);if(d.closed)return null; +if(a instanceof g)if(a._isScalar)d.next(a.value),d.complete();else return a.subscribe(d);else if(a&&"number"===typeof a.length){b=0;for(c=a.length;b=c.length?c[0]:c),b.complete())},f.source=this,r(b).apply(this.context,d.concat(f))===m&&h.error(m.e));return h.subscribe(c)};a.dispatch=function(c){var a=this,b=c.source,f=c.subscriber;c=c.context;var h=b.callbackFunc,g=b.args,k=b.scheduler,B=b.subject;if(!B){var B=b.subject=new L,l=function tb(){for(var c=[],b=0;b=c.length?c[0]:c,subject:e}))};l.source=b;r(h).apply(c,g.concat(l))===m&&B.error(m.e)}a.add(B.subscribe(f))};return a}(g).create;g.bindCallback=Zb;var $b=function(b){function a(c,a,d,f,h){b.call(this);this.callbackFunc=c;this.selector=a;this.args=d;this.context=f;this.scheduler=h}k(a,b);a.create=function(c,b,d){void 0===b&&(b=void 0);return function(){for(var e=[],h=0;h=c.length?c[0]:c),b.complete())},f.source=this,r(a).apply(this.context,b.concat(f))===m&&h.error(m.e)); +return h.subscribe(c)};return a}(g).create;g.bindNodeCallback=$b;var ga=function(b){function a(c,a){b.call(this);this.value=c;this.scheduler=a;this._isScalar=!0;a&&(this._isScalar=!1)}k(a,b);a.create=function(c,b){return new a(c,b)};a.dispatch=function(c){var a=c.value,b=c.subscriber;c.done?b.complete():(b.next(a),b.closed||(c.done=!0,this.schedule(c)))};a.prototype._subscribe=function(c){var b=this.value,d=this.scheduler;if(d)return d.schedule(a.dispatch,0,{done:!1,value:b,subscriber:c});c.next(b); +c.closed||c.complete()};return a}(g),F=function(b){function a(c){b.call(this);this.scheduler=c}k(a,b);a.create=function(c){return new a(c)};a.dispatch=function(c){c.subscriber.complete()};a.prototype._subscribe=function(c){var b=this.scheduler;if(b)return b.schedule(a.dispatch,0,{subscriber:c});c.complete()};return a}(g),E=function(b){function a(c,a){b.call(this);this.array=c;this.scheduler=a;a||1!==c.length||(this._isScalar=!0,this.value=c[0])}k(a,b);a.create=function(c,b){return new a(c,b)};a.of= +function(){for(var c=[],b=0;b=c.count?f.complete():(f.next(a[b]),f.closed||(c.index=b+1,this.schedule(c)))};a.prototype._subscribe=function(c){var b=this.array,d=b.length,f=this.scheduler;if(f)return f.schedule(a.dispatch,0,{array:b,index:0,count:d,subscriber:c});for(f=0;fe?-1:1;b=e*Math.floor(Math.abs(b));b=0>=b?0:b>Ra?Ra:b}this.arr=a;this.idx=c;this.len=b}b.prototype[A]=function(){return this};b.prototype.next=function(){return this.idx=c.length?f.complete():(f.next(a[b]),c.index=b+1,this.schedule(c)))};a.prototype._subscribe=function(c){var b=this.arrayLike,d=this.scheduler,f=b.length;if(d)return d.schedule(a.dispatch,0,{arrayLike:b,index:0,length:f,subscriber:c});for(d=0;dc)this.period= +0;a&&"function"===typeof a.schedule||(this.scheduler=x)}k(a,b);a.create=function(c,b){void 0===c&&(c=0);void 0===b&&(b=x);return new a(c,b)};a.dispatch=function(c){var a=c.subscriber,b=c.period;a.next(c.index);a.closed||(c.index+=1,this.schedule(c,b))};a.prototype._subscribe=function(c){var b=this.period;c.add(this.scheduler.schedule(a.dispatch,b,{index:0,subscriber:c,period:b}))};return a}(g).create;g.interval=rc;g.merge=sa;var vb=function(){function b(){}b.prototype.call=function(a,c){return c.subscribe(new sc(a))}; +return b}(),sc=function(b){function a(c){b.call(this,c);this.hasFirst=!1;this.observables=[];this.subscriptions=[]}k(a,b);a.prototype._next=function(c){this.observables.push(c)};a.prototype._complete=function(){var c=this.observables,a=c.length;if(0===a)this.destination.complete();else{for(var b=0;b=c.count?f.complete():(f.next(a),f.closed||(c.index=b+1,c.start=a+1,this.schedule(c)))};a.prototype._subscribe=function(c){var b=0,d=this.start,f=this._count,h=this.scheduler;if(h)return h.schedule(a.dispatch,0,{index:b,count:f, +start:d,subscriber:c});do{if(b++>=f){c.complete();break}c.next(d++);if(c.closed)break}while(1)};return a}(g).create;g.range=wc;var yc=function(b){function a(c,a){b.call(this);this.resourceFactory=c;this.observableFactory=a}k(a,b);a.create=function(c,b){return new a(c,b)};a.prototype._subscribe=function(c){var a=this.resourceFactory,b=this.observableFactory,f;try{return f=a(),new xc(c,f,b)}catch(h){c.error(h)}};return a}(g),xc=function(b){function a(c,a,d){b.call(this,c);this.resource=a;this.observableFactory= +d;c.add(a);this.tryUse()}k(a,b);a.prototype.tryUse=function(){try{var c=this.observableFactory.call(this,this.resource);c&&this.add(p(this,c))}catch(e){this._error(e)}};return a}(q);g.using=yc.create;var zc=function(b){function a(c,a){b.call(this);this.error=c;this.scheduler=a}k(a,b);a.create=function(c,b){return new a(c,b)};a.dispatch=function(c){c.subscriber.error(c.error)};a.prototype._subscribe=function(c){var b=this.error,d=this.scheduler;c.syncErrorThrowable=!0;if(d)return d.schedule(a.dispatch, +0,{error:b,subscriber:c});c.error(b)};return a}(g).create;g.throw=zc;var Ac=function(b){function a(c,a,d){void 0===c&&(c=0);b.call(this);this.period=-1;this.dueTime=0;Q(a)?this.period=1>Number(a)&&1||Number(a):z(a)&&(d=a);z(d)||(d=x);this.scheduler=d;this.dueTime=X(c)?+c-this.scheduler.now():c}k(a,b);a.create=function(c,b,d){void 0===c&&(c=0);return new a(c,b,d)};a.dispatch=function(c){var a=c.index,b=c.period,f=c.subscriber;f.next(a);if(!f.closed){if(-1===b)return f.complete();c.index=a+1;this.schedule(c, +b)}};a.prototype._subscribe=function(c){return this.scheduler.schedule(a.dispatch,this.dueTime,{index:0,period:this.period,subscriber:c})};return a}(g).create;g.timer=Ac;var va=function(){function b(a){this.project=a}b.prototype.call=function(a,c){return c.subscribe(new Bc(a,this.project))};return b}(),Bc=function(b){function a(c,a,d){void 0===d&&(d=Object.create(null));b.call(this,c);this.iterators=[];this.active=0;this.project="function"===typeof a?a:null;this.values=d}k(a,b);a.prototype._next= +function(c){var a=this.iterators;D(c)?a.push(new Cc(c)):"function"===typeof c[A]?a.push(new Dc(c[A]())):a.push(new Ec(this.destination,this,c))};a.prototype._complete=function(){var c=this.iterators,a=c.length;if(0===a)this.destination.complete();else{this.active=a;for(var b=0;bthis.index};b.prototype.hasCompleted=function(){return this.array.length===this.index};return b}(),Ec=function(b){function a(c,a,d){b.call(this,c);this.parent=a;this.observable=d;this.stillUnsubscribed=!0;this.buffer=[];this.isComplete=!1}k(a,b);a.prototype[A]=function(){return this};a.prototype.next=function(){var c=this.buffer;return 0===c.length&&this.isComplete?{value:null,done:!0}:{value:c.shift(),done:!1}};a.prototype.hasValue=function(){return 0< +this.buffer.length};a.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete};a.prototype.notifyComplete=function(){0e;e++)try{a=b[e];new n.ActiveXObject(a);break}catch(B){}c=new n.ActiveXObject(a)}catch(B){throw Error("XMLHttpRequest is not supported by your browser");}}return c},crossDomain:!1,withCredentials:!1,headers:{},method:"GET",responseType:"json",timeout:0}; +if("string"===typeof c)a.url=c;else for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d]);this.request=a}k(a,b);a.prototype._subscribe=function(c){return new Gc(c,this.request)};a.create=function(){var c=function(c){return new a(c)};c.get=xb;c.post=yb;c.delete=zb;c.put=Ab;c.patch=Bb;c.getJSON=Cb;return c}();return a}(g),Gc=function(b){function a(c,a){b.call(this,c);this.request=a;this.done=!1;c=a.headers=a.headers||{};a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");"Content-Type"in +c||n.FormData&&a.body instanceof n.FormData||"undefined"===typeof a.body||(c["Content-Type"]="application/x-www-form-urlencoded; charset\x3dUTF-8");a.body=this.serializeBody(a.body,a.headers["Content-Type"]);this.send()}k(a,b);a.prototype.next=function(c){this.done=!0;var a=this.destination;c=new Wa(c,this.xhr,this.request);a.next(c)};a.prototype.send=function(){var c=this.request,a=this.request,b=a.user,f=a.method,h=a.url,g=a.async,k=a.password,l=a.headers,a=a.body,n=r(c.createXHR).call(c);if(n=== +m)this.error(m.e);else{this.xhr=n;this.setupEvents(n,c);b=b?r(n.open).call(n,f,h,g,b,k):r(n.open).call(n,f,h,g);if(b===m)return this.error(m.e),null;g&&(n.timeout=c.timeout,n.responseType=c.responseType);"withCredentials"in n&&(n.withCredentials=!!c.withCredentials);this.setHeaders(n,l);b=a?r(n.send).call(n,a):r(n.send).call(n);if(b===m)return this.error(m.e),null}return n};a.prototype.serializeBody=function(c,a){if(!c||"string"===typeof c||n.FormData&&c instanceof n.FormData)return c;if(a){var b= +a.indexOf(";");-1!==b&&(a=a.substring(0,b))}switch(a){case "application/x-www-form-urlencoded":return Object.keys(c).map(function(a){return encodeURI(a)+"\x3d"+encodeURI(c[a])}).join("\x26");case "application/json":return JSON.stringify(c);default:return c}};a.prototype.setHeaders=function(c,a){for(var b in a)a.hasOwnProperty(b)&&c.setRequestHeader(b,a[b])};a.prototype.setupEvents=function(c,a){function b(c){var a=b.subscriber,e=b.progressSubscriber,d=b.request;e&&e.error(c);a.error(new Xa(this,d))} +function e(c){var a=e.subscriber,b=e.progressSubscriber,d=e.request;if(4===this.readyState){var f=1223===this.status?204:this.status,h="text"===this.responseType?this.response||this.responseText:this.response;0===f&&(f=h?200:0);200<=f&&300>f?(b&&b.complete(),a.next(c),a.complete()):(b&&b.error(c),a.error(new aa("ajax error "+f,this,d)))}}var h=a.progressSubscriber;c.ontimeout=b;b.request=a;b.subscriber=this;b.progressSubscriber=h;if(c.upload&&"withCredentials"in c){if(h){var g;g=function(c){g.progressSubscriber.next(c)}; +n.XDomainRequest?c.onprogress=g:c.upload.onprogress=g;g.progressSubscriber=h}var k;k=function(c){var a=k.progressSubscriber,b=k.subscriber,e=k.request;a&&a.error(c);b.error(new aa("ajax error",this,e))};c.onerror=k;k.request=a;k.subscriber=this;k.progressSubscriber=h}c.onreadystatechange=e;e.subscriber=this;e.progressSubscriber=h;e.request=a};a.prototype.unsubscribe=function(){var c=this.xhr;!this.done&&c&&4!==c.readyState&&"function"===typeof c.abort&&c.abort();b.prototype.unsubscribe.call(this)}; +return a}(l),Wa=function(){return function(b,a,c){this.originalEvent=b;this.xhr=a;this.request=c;this.status=a.status;this.responseType=a.responseType||c.responseType;switch(this.responseType){case "json":this.response="response"in a?a.responseType?a.response:JSON.parse(a.response||a.responseText||"null"):JSON.parse(a.responseText||"null");break;case "xml":this.response=a.responseXML;break;default:this.response="response"in a?a.response:a.responseText}}}(),aa=function(b){function a(c,a,d){b.call(this, +c);this.message=c;this.xhr=a;this.request=d;this.status=a.status}k(a,b);return a}(Error),Xa=function(b){function a(c,a){b.call(this,"ajax timeout",c,a)}k(a,b);return a}(aa);g.ajax=J.create;var Hc=function(b){function a(c,a){b.call(this,c,a);this.scheduler=c;this.work=a}k(a,b);a.prototype.schedule=function(c,a){void 0===a&&(a=0);if(0c?1:c;this._windowTime= +1>a?1:a}k(a,b);a.prototype.next=function(c){var a=this._getNow();this._events.push(new Ic(a,c));this._trimBufferThenGetEvents();b.prototype.next.call(this,c)};a.prototype._subscribe=function(c){var a=this._trimBufferThenGetEvents(),b=this.scheduler,f;if(this.closed)throw new H;this.hasError?f=u.EMPTY:this.isStopped?f=u.EMPTY:(this.observers.push(c),f=new Na(this,c));b&&c.add(c=new ia(c,b));for(var b=a.length,h=0;ha&&(g=Math.max(g,h-a));0d)?this.add(c.closeAction=h.schedule(ya,a,{subscriber:this,context:c,bufferTimeSpan:a})):(f={bufferTimeSpan:a,bufferCreationInterval:d,subscriber:this,scheduler:h},this.add(c.closeAction=h.schedule(za,a,{subscriber:this,context:c})),this.add(h.schedule(Eb,d,f)))}k(a,b);a.prototype._next=function(a){for(var c=this.contexts,b=c.length,f,h=0;h=b[0].time-f.now();)b.shift().notification.observe(h);0(a||0)?Number.POSITIVE_INFINITY:a;return this.lift(new zd(b,a,c))};var M=function(b){function a(){var a=b.call(this,"argument out of range");this.name=a.name="ArgumentOutOfRangeError";this.stack=a.stack; +this.message=a.message}k(a,b);return a}(Error),Bd=function(){function b(a,c){this.index=a;this.defaultValue=c;if(0>a)throw new M;}b.prototype.call=function(a,c){return c.subscribe(new Ad(a,this.index,this.defaultValue))};return b}(),Ad=function(b){function a(a,e,d){b.call(this,a);this.index=e;this.defaultValue=d}k(a,b);a.prototype._next=function(a){0===this.index--&&(this.destination.next(a),this.destination.complete())};a.prototype._complete=function(){var a=this.destination;0<=this.index&&("undefined"!== +typeof this.defaultValue?a.next(this.defaultValue):a.error(new M));a.complete()};return a}(l);g.prototype.elementAt=function(b,a){return this.lift(new Bd(b,a))};var Kb=function(){function b(a,c){this.predicate=a;this.thisArg=c}b.prototype.call=function(a,c){return c.subscribe(new Cd(a,this.predicate,this.thisArg))};return b}(),Cd=function(b){function a(a,e,d){b.call(this,a);this.predicate=e;this.thisArg=d;this.count=0;this.predicate=e}k(a,b);a.prototype._next=function(a){var c;try{c=this.predicate.call(this.thisArg, +a,this.count++)}catch(d){this.destination.error(d);return}c&&this.destination.next(a)};return a}(l);g.prototype.filter=ea;var Lb=function(){function b(a){this.callback=a}b.prototype.call=function(a,c){return c.subscribe(new Dd(a,this.callback))};return b}(),Dd=function(b){function a(a,e){b.call(this,a);this.add(new u(e))}k(a,b);return a}(l);g.prototype.finally=Ha;g.prototype._finally=Ha;var $a=function(){function b(a,c,b,d){this.predicate=a;this.source=c;this.yieldIndex=b;this.thisArg=d}b.prototype.call= +function(a,c){return c.subscribe(new Ed(a,this.predicate,this.source,this.yieldIndex,this.thisArg))};return b}(),Ed=function(b){function a(a,e,d,f,h){b.call(this,a);this.predicate=e;this.source=d;this.yieldIndex=f;this.thisArg=h;this.index=0}k(a,b);a.prototype.notifyComplete=function(a){var c=this.destination;c.next(a);c.complete()};a.prototype._next=function(a){var c=this.predicate,b=this.thisArg,f=this.index++;try{c.call(b||this,a,f,this.source)&&this.notifyComplete(this.yieldIndex?f:a)}catch(h){this.destination.error(h)}}; +a.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:void 0)};return a}(l);g.prototype.find=function(b,a){if("function"!==typeof b)throw new TypeError("predicate is not a function");return this.lift(new $a(b,this,!1,a))};g.prototype.findIndex=function(b,a){return this.lift(new $a(b,this,!0,a))};var ba=function(b){function a(){var a=b.call(this,"no elements in sequence");this.name=a.name="EmptyError";this.stack=a.stack;this.message=a.message}k(a,b);return a}(Error),Gd=function(){function b(a, +c,b,d){this.predicate=a;this.resultSelector=c;this.defaultValue=b;this.source=d}b.prototype.call=function(a,c){return c.subscribe(new Fd(a,this.predicate,this.resultSelector,this.defaultValue,this.source))};return b}(),Fd=function(b){function a(a,e,d,f,h){b.call(this,a);this.predicate=e;this.resultSelector=d;this.defaultValue=f;this.source=h;this.index=0;this._emitted=this.hasCompleted=!1}k(a,b);a.prototype._next=function(a){var c=this.index++;this.predicate?this._tryPredicate(a,c):this._emit(a,c)}; +a.prototype._tryPredicate=function(a,b){var c;try{c=this.predicate(a,b,this.source)}catch(f){this.destination.error(f);return}c&&this._emit(a,b)};a.prototype._emit=function(a,b){this.resultSelector?this._tryResultSelector(a,b):this._emitFinal(a)};a.prototype._tryResultSelector=function(a,b){var c;try{c=this.resultSelector(a,b)}catch(f){this.destination.error(f);return}this._emitFinal(c)};a.prototype._emitFinal=function(a){var c=this.destination;this._emitted||(this._emitted=!0,c.next(a),c.complete(), +this.hasCompleted=!0)};a.prototype._complete=function(){var a=this.destination;this.hasCompleted||"undefined"===typeof this.defaultValue?this.hasCompleted||a.error(new ba):(a.next(this.defaultValue),a.complete())};return a}(l);g.prototype.first=function(b,a,c){return this.lift(new Gd(b,a,c,this))};var Hd=function(){function b(){this.size=0;this._values=[];this._keys=[]}b.prototype.get=function(a){a=this._keys.indexOf(a);return-1===a?void 0:this._values[a]};b.prototype.set=function(a,c){var b=this._keys.indexOf(a); +-1===b?(this._keys.push(a),this._values.push(c),this.size++):this._values[b]=c;return this};b.prototype.delete=function(a){a=this._keys.indexOf(a);if(-1===a)return!1;this._values.splice(a,1);this._keys.splice(a,1);this.size--;return!0};b.prototype.clear=function(){this._keys.length=0;this.size=this._values.length=0};b.prototype.forEach=function(a,c){for(var b=0;bc?a:c}))};g.prototype.merge=function(){for(var b=[],a=0;ab(a,c)?a:c}:function(a,c){return a=b?this.connection=null:(a._refCount=b-1,1b?this.lift(new db(-1,this)):this.lift(new db(b-1,this))};var ne=function(){function b(a){this.notifier=a}b.prototype.call=function(a,c){return c.subscribe(new me(a,this.notifier,c))};return b}(),me=function(b){function a(a,e,d){b.call(this,a);this.notifier=e;this.source=d;this.sourceIsBeingSubscribedTo=!0}k(a,b);a.prototype.notifyNext=function(a,b,d,f,h){this.sourceIsBeingSubscribedTo= +!0;this.source.subscribe(this)};a.prototype.notifyComplete=function(a){if(!1===this.sourceIsBeingSubscribedTo)return b.prototype.complete.call(this)};a.prototype.complete=function(){this.sourceIsBeingSubscribedTo=!1;if(!this.isStopped){if(!this.retries)this.subscribeToRetries();else if(this.retriesSubscription.closed)return b.prototype.complete.call(this);this._unsubscribeAndRecycle();this.notifications.next()}};a.prototype._unsubscribe=function(){var a=this.notifications,b=this.retriesSubscription; +a&&(a.unsubscribe(),this.notifications=null);b&&(b.unsubscribe(),this.retriesSubscription=null);this.retries=null};a.prototype._unsubscribeAndRecycle=function(){var a=this.notifications,e=this.retries,d=this.retriesSubscription;this.retriesSubscription=this.retries=this.notifications=null;b.prototype._unsubscribeAndRecycle.call(this);this.notifications=a;this.retries=e;this.retriesSubscription=d;return this};a.prototype.subscribeToRetries=function(){this.notifications=new v;var a=r(this.notifier)(this.notifications); +if(a===m)return b.prototype.complete.call(this);this.retries=a;this.retriesSubscription=p(this,a)};return a}(q);g.prototype.repeatWhen=function(b){return this.lift(new ne(b))};var pe=function(){function b(a,c){this.count=a;this.source=c}b.prototype.call=function(a,c){return c.subscribe(new oe(a,this.count,this.source))};return b}(),oe=function(b){function a(a,e,d){b.call(this,a);this.count=e;this.source=d}k(a,b);a.prototype.error=function(a){if(!this.isStopped){var c=this.source,d=this.count;if(0=== +d)return b.prototype.error.call(this,a);-1this.total&&this.destination.next(a)};return a}(l);g.prototype.skip=function(b){return this.lift(new Ee(b))}; +var Ge=function(){function b(a){this._skipCount=a;if(0>this._skipCount)throw new M;}b.prototype.call=function(a,c){return 0===this._skipCount?c.subscribe(new l(a)):c.subscribe(new Fe(a,this._skipCount))};return b}(),Fe=function(b){function a(a,e){b.call(this,a);this._skipCount=e;this._count=0;this._ring=Array(e)}k(a,b);a.prototype._next=function(a){var c=this._skipCount,b=this._count++;if(be)this.delayTime=0;d&&"function"===typeof d.schedule||(this.scheduler=ca)}k(a,b);a.create=function(b,e,d){void 0===e&&(e=0);void 0===d&&(d=ca);return new a(b,e,d)};a.dispatch=function(a){return this.add(a.source.subscribe(a.subscriber))};a.prototype._subscribe=function(b){return this.scheduler.schedule(a.dispatch,this.delayTime,{source:this.source,subscriber:b})};return a}(g),Ne=function(){function b(a,b){this.scheduler=a;this.delay=b}b.prototype.call= +function(a,b){return(new Me(b,this.delay,this.scheduler)).subscribe(a)};return b}();g.prototype.subscribeOn=function(b,a){void 0===a&&(a=0);return this.lift(new Ne(b,a))};var Tb=function(){function b(){}b.prototype.call=function(a,b){return b.subscribe(new Oe(a))};return b}(),Oe=function(b){function a(a){b.call(this,a);this.active=0;this.hasCompleted=!1}k(a,b);a.prototype._next=function(a){this.unsubscribeInner();this.active++;this.add(this.innerSubscription=p(this,a))};a.prototype._complete=function(){this.hasCompleted= +!0;0===this.active&&this.destination.complete()};a.prototype.unsubscribeInner=function(){this.active=0this.total)throw new M;}b.prototype.call=function(a,b){return b.subscribe(new Te(a,this.total))};return b}(),Te=function(b){function a(a,e){b.call(this,a);this.total=e;this.count= +0}k(a,b);a.prototype._next=function(a){var b=this.total,c=++this.count;c<=b&&(this.destination.next(a),c===b&&(this.destination.complete(),this.unsubscribe()))};return a}(l);g.prototype.take=function(b){return 0===b?new F:this.lift(new Ue(b))};var We=function(){function b(a){this.total=a;if(0>this.total)throw new M;}b.prototype.call=function(a,b){return b.subscribe(new Ve(a,this.total))};return b}(),Ve=function(b){function a(a,e){b.call(this,a);this.total=e;this.ring=[];this.count=0}k(a,b);a.prototype._next= +function(a){var b=this.ring,c=this.total,f=this.count++;b.length=this.total?this.total:this.count,f=this.ring,h=0;h=this.maxWindowSize&&this.closeWindow(h))}};a.prototype._error=function(a){for(var b=this.windows;0b.index?1:-1:a.delay>b.delay?1:-1};return a}(S),Cf=function(b){function a(a){b.call(this,lb,750);this.assertDeepEqual=a;this.hotObservables=[];this.coldObservables=[];this.flushTests=[]}k(a,b);a.prototype.createTime=function(b){b=b.indexOf("|");if(-1===b)throw Error('marble diagram for time should have a completion marker "|"');return b*a.frameTimeFactor}; +a.prototype.createColdObservable=function(b,e,d){if(-1!==b.indexOf("^"))throw Error('cold observable cannot have subscription offset "^"');if(-1!==b.indexOf("!"))throw Error('cold observable cannot have unsubscription marker "!"');b=a.parseMarbles(b,e,d);b=new ka(b,this);this.coldObservables.push(b);return b};a.prototype.createHotObservable=function(b,e,d){if(-1!==b.indexOf("!"))throw Error('hot observable cannot have unsubscription marker "!"');b=a.parseMarbles(b,e,d);b=new kb(b,this);this.hotObservables.push(b); +return b};a.prototype.materializeInnerObservable=function(a,b){var c=this,e=[];a.subscribe(function(a){e.push({frame:c.frame-b,notification:w.createNext(a)})},function(a){e.push({frame:c.frame-b,notification:w.createError(a)})},function(){e.push({frame:c.frame-b,notification:w.createComplete()})});return e};a.prototype.expectObservable=function(b,e){var c=this;void 0===e&&(e=null);var f=[],h={actual:f,ready:!1};e=a.parseMarblesAsSubscriptions(e).unsubscribedFrame;var k;this.schedule(function(){k= +b.subscribe(function(a){var b=a;a instanceof g&&(b=c.materializeInnerObservable(b,c.frame));f.push({frame:c.frame,notification:w.createNext(b)})},function(a){f.push({frame:c.frame,notification:w.createError(a)})},function(){f.push({frame:c.frame,notification:w.createComplete()})})},0);e!==Number.POSITIVE_INFINITY&&this.schedule(function(){return k.unsubscribe()},e);this.flushTests.push(h);return{toBe:function(b,c,d){h.ready=!0;h.expected=a.parseMarbles(b,c,d,!0)}}};a.prototype.expectSubscriptions= +function(b){var c={actual:b,ready:!1};this.flushTests.push(c);return{toBe:function(b){b="string"===typeof b?[b]:b;c.ready=!0;c.expected=b.map(function(b){return a.parseMarblesAsSubscriptions(b)})}}};a.prototype.flush=function(){for(var a=this.hotObservables;0g?new V(f):new V(f,g)};a.parseMarbles=function(a,b,d,f){void 0===f&&(f=!1);if(-1!==a.indexOf("!"))throw Error('conventional marble diagrams cannot have the unsubscription marker "!"');for(var c=a.length,e=[],g=a.indexOf("^"),g=-1===g?0:g*-this.frameTimeFactor,k="object"!==typeof b?function(a){return a}:function(a){return f&&b[a]instanceof ka?b[a].messages: +b[a]},l=-1,m=0;me;e++)t(n[e],e,n);else{var i=h.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,t,r){if(null==n)return[];t=h.iteratee(t,r);for(var e,u=n.length!==+n.length&&h.keys(n),i=(u||n).length,a=Array(i),o=0;i>o;o++)e=u?u[o]:o,a[o]=t(n[e],e,n);return a};var v="Reduce of empty array with no initial value";h.reduce=h.foldl=h.inject=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length,o=0;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[o++]:o++]}for(;a>o;o++)u=i?i[o]:o,r=t(r,n[u],u,n);return r},h.reduceRight=h.foldr=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[--a]:--a]}for(;a--;)u=i?i[a]:a,r=t(r,n[u],u,n);return r},h.find=h.detect=function(n,t,r){var e;return t=h.iteratee(t,r),h.some(n,function(n,r,u){return t(n,r,u)?(e=n,!0):void 0}),e},h.filter=h.select=function(n,t,r){var e=[];return null==n?e:(t=h.iteratee(t,r),h.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e)},h.reject=function(n,t,r){return h.filter(n,h.negate(h.iteratee(t)),r)},h.every=h.all=function(n,t,r){if(null==n)return!0;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,!t(n[u],u,n))return!1;return!0},h.some=h.any=function(n,t,r){if(null==n)return!1;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,t(n[u],u,n))return!0;return!1},h.contains=h.include=function(n,t){return null==n?!1:(n.length!==+n.length&&(n=h.values(n)),h.indexOf(n,t)>=0)},h.invoke=function(n,t){var r=a.call(arguments,2),e=h.isFunction(t);return h.map(n,function(n){return(e?t:n[t]).apply(n,r)})},h.pluck=function(n,t){return h.map(n,h.property(t))},h.where=function(n,t){return h.filter(n,h.matches(t))},h.findWhere=function(n,t){return h.find(n,h.matches(t))},h.max=function(n,t,r){var e,u,i=-1/0,a=-1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],e>i&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(u>a||u===-1/0&&i===-1/0)&&(i=n,a=u)});return i},h.min=function(n,t,r){var e,u,i=1/0,a=1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],i>e&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(a>u||1/0===u&&1/0===i)&&(i=n,a=u)});return i},h.shuffle=function(n){for(var t,r=n&&n.length===+n.length?n:h.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=h.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},h.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=h.values(n)),n[h.random(n.length-1)]):h.shuffle(n).slice(0,Math.max(0,t))},h.sortBy=function(n,t,r){return t=h.iteratee(t,r),h.pluck(h.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var m=function(n){return function(t,r,e){var u={};return r=h.iteratee(r,e),h.each(t,function(e,i){var a=r(e,i,t);n(u,e,a)}),u}};h.groupBy=m(function(n,t,r){h.has(n,r)?n[r].push(t):n[r]=[t]}),h.indexBy=m(function(n,t,r){n[r]=t}),h.countBy=m(function(n,t,r){h.has(n,r)?n[r]++:n[r]=1}),h.sortedIndex=function(n,t,r,e){r=h.iteratee(r,e,1);for(var u=r(t),i=0,a=n.length;a>i;){var o=i+a>>>1;r(n[o])t?[]:a.call(n,0,t)},h.initial=function(n,t,r){return a.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},h.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:a.call(n,Math.max(n.length-t,0))},h.rest=h.tail=h.drop=function(n,t,r){return a.call(n,null==t||r?1:t)},h.compact=function(n){return h.filter(n,h.identity)};var y=function(n,t,r,e){if(t&&h.every(n,h.isArray))return o.apply(e,n);for(var u=0,a=n.length;a>u;u++){var l=n[u];h.isArray(l)||h.isArguments(l)?t?i.apply(e,l):y(l,t,r,e):r||e.push(l)}return e};h.flatten=function(n,t){return y(n,t,!1,[])},h.without=function(n){return h.difference(n,a.call(arguments,1))},h.uniq=h.unique=function(n,t,r,e){if(null==n)return[];h.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=h.iteratee(r,e));for(var u=[],i=[],a=0,o=n.length;o>a;a++){var l=n[a];if(t)a&&i===l||u.push(l),i=l;else if(r){var c=r(l,a,n);h.indexOf(i,c)<0&&(i.push(c),u.push(l))}else h.indexOf(u,l)<0&&u.push(l)}return u},h.union=function(){return h.uniq(y(arguments,!0,!0,[]))},h.intersection=function(n){if(null==n)return[];for(var t=[],r=arguments.length,e=0,u=n.length;u>e;e++){var i=n[e];if(!h.contains(t,i)){for(var a=1;r>a&&h.contains(arguments[a],i);a++);a===r&&t.push(i)}}return t},h.difference=function(n){var t=y(a.call(arguments,1),!0,!0,[]);return h.filter(n,function(n){return!h.contains(t,n)})},h.zip=function(n){if(null==n)return[];for(var t=h.max(arguments,"length").length,r=Array(t),e=0;t>e;e++)r[e]=h.pluck(arguments,e);return r},h.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},h.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=h.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}for(;u>e;e++)if(n[e]===t)return e;return-1},h.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=n.length;for("number"==typeof r&&(e=0>r?e+r+1:Math.min(e,r+1));--e>=0;)if(n[e]===t)return e;return-1},h.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var d=function(){};h.bind=function(n,t){var r,e;if(p&&n.bind===p)return p.apply(n,a.call(arguments,1));if(!h.isFunction(n))throw new TypeError("Bind must be called on a function");return r=a.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(a.call(arguments)));d.prototype=n.prototype;var u=new d;d.prototype=null;var i=n.apply(u,r.concat(a.call(arguments)));return h.isObject(i)?i:u}},h.partial=function(n){var t=a.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===h&&(e[u]=arguments[r++]);for(;r=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=h.bind(n[r],n);return n},h.memoize=function(n,t){var r=function(e){var u=r.cache,i=t?t.apply(this,arguments):e;return h.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},h.delay=function(n,t){var r=a.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},h.defer=function(n){return h.delay.apply(h,[n,1].concat(a.call(arguments,1)))},h.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var l=function(){o=r.leading===!1?0:h.now(),a=null,i=n.apply(e,u),a||(e=u=null)};return function(){var c=h.now();o||r.leading!==!1||(o=c);var f=t-(c-o);return e=this,u=arguments,0>=f||f>t?(clearTimeout(a),a=null,o=c,i=n.apply(e,u),a||(e=u=null)):a||r.trailing===!1||(a=setTimeout(l,f)),i}},h.debounce=function(n,t,r){var e,u,i,a,o,l=function(){var c=h.now()-a;t>c&&c>0?e=setTimeout(l,t-c):(e=null,r||(o=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,a=h.now();var c=r&&!e;return e||(e=setTimeout(l,t)),c&&(o=n.apply(i,u),i=u=null),o}},h.wrap=function(n,t){return h.partial(t,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},h.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},h.before=function(n,t){var r;return function(){return--n>0?r=t.apply(this,arguments):t=null,r}},h.once=h.partial(h.before,2),h.keys=function(n){if(!h.isObject(n))return[];if(s)return s(n);var t=[];for(var r in n)h.has(n,r)&&t.push(r);return t},h.values=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},h.pairs=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},h.invert=function(n){for(var t={},r=h.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},h.functions=h.methods=function(n){var t=[];for(var r in n)h.isFunction(n[r])&&t.push(r);return t.sort()},h.extend=function(n){if(!h.isObject(n))return n;for(var t,r,e=1,u=arguments.length;u>e;e++){t=arguments[e];for(r in t)c.call(t,r)&&(n[r]=t[r])}return n},h.pick=function(n,t,r){var e,u={};if(null==n)return u;if(h.isFunction(t)){t=g(t,r);for(e in n){var i=n[e];t(i,e,n)&&(u[e]=i)}}else{var l=o.apply([],a.call(arguments,1));n=new Object(n);for(var c=0,f=l.length;f>c;c++)e=l[c],e in n&&(u[e]=n[e])}return u},h.omit=function(n,t,r){if(h.isFunction(t))t=h.negate(t);else{var e=h.map(o.apply([],a.call(arguments,1)),String);t=function(n,t){return!h.contains(e,t)}}return h.pick(n,t,r)},h.defaults=function(n){if(!h.isObject(n))return n;for(var t=1,r=arguments.length;r>t;t++){var e=arguments[t];for(var u in e)n[u]===void 0&&(n[u]=e[u])}return n},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,t){return t(n),n};var b=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof h&&(n=n._wrapped),t instanceof h&&(t=t._wrapped);var u=l.call(n);if(u!==l.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]===n)return e[i]===t;var a=n.constructor,o=t.constructor;if(a!==o&&"constructor"in n&&"constructor"in t&&!(h.isFunction(a)&&a instanceof a&&h.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c,f;if("[object Array]"===u){if(c=n.length,f=c===t.length)for(;c--&&(f=b(n[c],t[c],r,e)););}else{var s,p=h.keys(n);if(c=p.length,f=h.keys(t).length===c)for(;c--&&(s=p[c],f=h.has(t,s)&&b(n[s],t[s],r,e)););}return r.pop(),e.pop(),f};h.isEqual=function(n,t){return b(n,t,[],[])},h.isEmpty=function(n){if(null==n)return!0;if(h.isArray(n)||h.isString(n)||h.isArguments(n))return 0===n.length;for(var t in n)if(h.has(n,t))return!1;return!0},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=f||function(n){return"[object Array]"===l.call(n)},h.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp"],function(n){h["is"+n]=function(t){return l.call(t)==="[object "+n+"]"}}),h.isArguments(arguments)||(h.isArguments=function(n){return h.has(n,"callee")}),"function"!=typeof/./&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&n!==+n},h.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===l.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return n===void 0},h.has=function(n,t){return null!=n&&c.call(n,t)},h.noConflict=function(){return n._=t,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(n){return function(t){return t[n]}},h.matches=function(n){var t=h.pairs(n),r=t.length;return function(n){if(null==n)return!r;n=new Object(n);for(var e=0;r>e;e++){var u=t[e],i=u[0];if(u[1]!==n[i]||!(i in n))return!1}return!0}},h.times=function(n,t,r){var e=Array(Math.max(0,n));t=g(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},h.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},h.now=Date.now||function(){return(new Date).getTime()};var _={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},w=h.invert(_),j=function(n){var t=function(t){return n[t]},r="(?:"+h.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};h.escape=j(_),h.unescape=j(w),h.result=function(n,t){if(null==n)return void 0;var r=n[t];return h.isFunction(r)?n[t]():r};var x=0;h.uniqueId=function(n){var t=++x+"";return n?n+t:t},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var A=/(.)^/,k={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},O=/\\|'|\r|\n|\u2028|\u2029/g,F=function(n){return"\\"+k[n]};h.template=function(n,t,r){!t&&r&&(t=r),t=h.defaults({},t,h.templateSettings);var e=RegExp([(t.escape||A).source,(t.interpolate||A).source,(t.evaluate||A).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,a,o){return i+=n.slice(u,o).replace(O,F),u=o+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var a=new Function(t.variable||"obj","_",i)}catch(o){throw o.source=i,o}var l=function(n){return a.call(this,n,h)},c=t.variable||"obj";return l.source="function("+c+"){\n"+i+"}",l},h.chain=function(n){var t=h(n);return t._chain=!0,t};var E=function(n){return this._chain?h(n).chain():n};h.mixin=function(n){h.each(h.functions(n),function(t){var r=h[t]=n[t];h.prototype[t]=function(){var n=[this._wrapped];return i.apply(n,arguments),E.call(this,r.apply(h,n))}})},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=r[n];h.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],E.call(this,r)}}),h.each(["concat","join","slice"],function(n){var t=r[n];h.prototype[n]=function(){return E.call(this,t.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}).call(this); diff --git a/manifest.json b/manifest.json index 01492b8..d3df51c 100644 --- a/manifest.json +++ b/manifest.json @@ -18,11 +18,10 @@ "matches": ["*://github.com/*/pull*"], "js": [ "lib/jquery-2.1.0.min.js", - "lib/underscore-min.js", "lib/firebase.js", "lib/firebase-app.js", "lib/firebase-database.js", - "core/waitForKeyElements.js", + "lib/Rx.min.js", "core/tracker.js" ], "css": ["other/main.css"] From f6a54fff267864b41e4e025422fd6376457f12a7 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Tue, 20 Jun 2017 01:51:15 -0400 Subject: [PATCH 27/47] Add .eslintrc.json, delete .jscsrc --- .eslintrc.json | 165 +++++++++++++++++++++++++++++++++++++++++++++++++ .jscsrc | 75 ---------------------- 2 files changed, 165 insertions(+), 75 deletions(-) create mode 100644 .eslintrc.json delete mode 100644 .jscsrc diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..805460e --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,165 @@ +// Based on: https://raw.githubusercontent.com/feross/eslint-config-standard/master/eslintrc.json +{ + "parserOptions": { + "ecmaVersion": 6 + }, + + "env": { + "browser": true, + "es6": true, + "node": false + }, + + "globals": { + "document": true, + "window": true + }, + + "rules": { + "accessor-pairs": "error", + "arrow-spacing": ["error", { "before": true, "after": true }], + "block-spacing": ["error", "always"], + "brace-style": ["error", "1tbs", { "allowSingleLine": true }], + "camelcase": ["error", { "properties": "never" }], + "comma-dangle": ["error", { + "arrays": "never", + "objects": "never", + "imports": "never", + "exports": "never", + "functions": "never" + }], + "comma-spacing": ["error", { "before": false, "after": true }], + "comma-style": ["error", "last"], + "constructor-super": "error", + "curly": ["error", "multi-line"], + "dot-location": ["error", "property"], + "eol-last": "error", + "eqeqeq": ["error", "always", { "null": "ignore" }], + "func-call-spacing": ["error", "never"], + "generator-star-spacing": ["error", { "before": true, "after": true }], + "handle-callback-err": ["error", "^(err|error)$" ], + "indent": ["error", 2, { "SwitchCase": 1 }], + "key-spacing": ["error", { "beforeColon": false, "afterColon": true }], + "keyword-spacing": ["error", { "before": true, "after": true }], + "new-cap": ["error", { "newIsCap": true, "capIsNew": false }], + "new-parens": "error", + "no-array-constructor": "error", + "no-caller": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": "error", + "no-const-assign": "error", + "no-constant-condition": ["error", { "checkLoops": false }], + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "error", + "no-dupe-class-members": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-empty-character-class": "error", + "no-empty-pattern": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-parens": ["error", "functions"], + "no-fallthrough": "error", + "no-floating-decimal": "error", + "no-func-assign": "error", + "no-global-assign": "error", + "no-implied-eval": "error", + "no-inner-declarations": ["error", "functions"], + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": ["error", { "allowLoop": false, "allowSwitch": false }], + "no-lone-blocks": "error", + "no-mixed-operators": ["error", { + "groups": [ + ["==", "!=", "===", "!==", ">", ">=", "<", "<="], + ["&&", "||"], + ["in", "instanceof"] + ], + "allowSamePrecedence": true + }], + "no-mixed-spaces-and-tabs": "error", + "no-multi-spaces": "error", + "no-multi-str": "error", + "no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 0 }], + "no-negated-in-lhs": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-object": "error", + "no-new-require": "error", + "no-new-symbol": "error", + "no-new-wrappers": "error", + "no-obj-calls": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-path-concat": "error", + "no-proto": "error", + "no-redeclare": "error", + "no-regex-spaces": "error", + "no-return-assign": ["error", "except-parens"], + "no-return-await": "error", + "no-self-assign": "error", + "no-self-compare": "error", + "no-sequences": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-tabs": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "error", + "no-throw-literal": "error", + "no-trailing-spaces": "error", + "no-undef": "error", + "no-undef-init": "error", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": ["error", { "defaultAssignment": false }], + "no-unreachable": "error", + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true, "allowTaggedTemplates": true }], + "no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": true }], + "no-use-before-define": ["error", { "functions": false, "classes": false, "variables": false }], + "no-useless-call": "error", + "no-useless-computed-key": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", + "no-useless-rename": "error", + "no-useless-return": "error", + "no-whitespace-before-property": "error", + "no-with": "error", + "object-property-newline": ["error", { "allowMultiplePropertiesPerLine": true }], + "one-var": ["error", { "initialized": "never" }], + "operator-linebreak": ["error", "after", { "overrides": { "?": "before", ":": "before" } }], + "padded-blocks": ["error", { "blocks": "never", "switches": "never", "classes": "never" }], + "prefer-promise-reject-errors": "error", + "quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": true }], + "rest-spread-spacing": ["error", "never"], + "semi": ["error", "never"], + "semi-spacing": ["error", { "before": false, "after": true }], + "space-before-blocks": ["error", "always"], + "space-before-function-paren": ["error", "always"], + "space-in-parens": ["error", "never"], + "space-infix-ops": "error", + "space-unary-ops": ["error", { "words": true, "nonwords": false }], + "spaced-comment": ["error", "always", { + "line": { "markers": ["*package", "!", "/", ","] }, + "block": { "balanced": true, "markers": ["*package", "!", ",", ":", "::", "flow-include"], "exceptions": ["*"] } + }], + "symbol-description": "error", + "template-curly-spacing": ["error", "never"], + "template-tag-spacing": ["error", "never"], + "unicode-bom": ["error", "never"], + "use-isnan": "error", + "valid-typeof": ["error", { "requireStringLiterals": true }], + "wrap-iife": ["error", "any", { "functionPrototypeMethods": true }], + "yield-star-spacing": ["error", "both"], + "yoda": ["error", "never"] + } +} diff --git a/.jscsrc b/.jscsrc deleted file mode 100644 index 03dfcee..0000000 --- a/.jscsrc +++ /dev/null @@ -1,75 +0,0 @@ -{ - "requireBlocksOnNewline": 2, - "disallowMultipleLineBreaks": true, - "requireCamelCaseOrUpperCaseIdentifiers": true, - "requireSpaceBeforeBlockStatements": true, - "requireCommaBeforeLineBreak": true, - "requireSpaceAfterLineComment": {"allExcept": ["#", "/"]}, - "requireSpacesInConditionalExpression": true, - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "~", "!"], - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "esnext": true, - "requireSpaceBeforeBinaryOperators": [ - "=", - "+", - "-", - "/", - "*", - "==", - "===", - "!=", - "!==" - ], - "requireSpaceAfterBinaryOperators": [ - ",", - "=", - "+", - "-", - "/", - "*", - "==", - "===", - "!=", - "!==" - ], - "requireSpacesInFunctionExpression": { - "beforeOpeningCurlyBrace": true - }, - "requireSpacesInNamedFunctionExpression": { - "beforeOpeningCurlyBrace": true - }, - "requireSpacesInAnonymousFunctionExpression": { - "beforeOpeningRoundBrace": true, - "beforeOpeningCurlyBrace": true - }, - "disallowSpacesInNamedFunctionExpression": { - "beforeOpeningRoundBrace": true - }, - "disallowSpacesInFunctionDeclaration": { - "beforeOpeningRoundBrace": true - }, - "disallowSpacesInsideParentheses": true, - "disallowSpacesInsideObjectBrackets": {"allExcept": ["//", "/*"]}, - "disallowSpacesInsideBrackets": {"allExcept": ["//", "/*"]}, - "disallowSpaceAfterObjectKeys": true, - "requireCamelCaseOrUpperCaseIdentifiers": true, - "disallowMixedSpacesAndTabs": true, - "disallowTrailingWhitespace": true, - "validateIndentation": 2, - "requireLineFeedAtFileEnd": true, - "disallowKeywordsOnNewLine": ["else"], - "disallowYodaConditions": true, - "requireSpaceAfterKeywords": [ - "if", - "else", - "for", - "while", - "do", - "switch", - "return", - "try", - "catch", - "function" - ], - "validateLineBreaks": "LF" -} From 8eae9f89d421ac3e641e69e2079335c6e7007e46 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Tue, 20 Jun 2017 01:54:24 -0400 Subject: [PATCH 28/47] Fix ESLint problems --- .eslintrc.json | 5 +- core/tracker.js | 178 ++++++++++++++++++++++++------------------------ 2 files changed, 93 insertions(+), 90 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 805460e..069bfa9 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,7 +12,10 @@ "globals": { "document": true, - "window": true + "window": true, + "firebase": true, + "Rx": true, + "$": true }, "rules": { diff --git a/core/tracker.js b/core/tracker.js index 8b9cfc3..40b8bc8 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -1,79 +1,79 @@ const findAllComments = () => { - const threads = []; - const discussionBucket = document.getElementById('discussion_bucket'); - const discussionThreads = discussionBucket.querySelectorAll('.js-line-comments > .js-comments-holder'); - const issueComments = discussionBucket.querySelectorAll('.timeline-comment-wrapper > .timeline-comment.js-comment'); + const threads = [] + const discussionBucket = document.getElementById('discussion_bucket') + const discussionThreads = discussionBucket.querySelectorAll('.js-line-comments > .js-comments-holder') + const issueComments = discussionBucket.querySelectorAll('.timeline-comment-wrapper > .timeline-comment.js-comment') discussionThreads.forEach((el) => { - const comments = el.getElementsByClassName('js-comment'); - if (comments.length > 0 && el.tracked != comments.length) { - const firstComment = comments[0]; - const lastComment = comments[comments.length - 1]; + const comments = el.getElementsByClassName('js-comment') + if (comments.length > 0 && el.tracked !== comments.length) { + const firstComment = comments[0] + const lastComment = comments[comments.length - 1] threads.push({ id: firstComment.id, - lastCommentId: lastComment.id, - }); - el.tracked = comments.length; + lastCommentId: lastComment.id + }) + el.tracked = comments.length } - }); + }) issueComments.forEach((el) => { if (el.id && el.id.match(/^issuecomment/) && !el.tracked) { threads.push({ id: el.id, - lastCommentId: el.id, - }); - el.tracked = true; + lastCommentId: el.id + }) + el.tracked = true } - }); + }) - return threads; -}; + return threads +} const setListeners = () => { - const allComments = findAllComments(); - console.log(`Invoked at: ${(new Date).getTime()/1000} with ${allComments.length} items`); + const allComments = findAllComments() + console.log(`Invoked at: ${(new Date()).getTime() / 1000} with ${allComments.length} items`) allComments.forEach(comment => { commentRef(comment.id).on('value', snapshot => { - const val = snapshot.val(); + const val = snapshot.val() if (val) { - comment.resolved = val.resolved && val.lastCommentSeen === comment.lastCommentId; - comment.lastCommentSeen = val.lastCommentSeen; + comment.resolved = val.resolved && val.lastCommentSeen === comment.lastCommentId + comment.lastCommentSeen = val.lastCommentSeen } - updateThread(comment); - expandUnresolvedThread(comment); - updateMergeButton(allComments.some(info => !info.resolved)); - }); - }); -}; + updateThread(comment) + expandUnresolvedThread(comment) + updateMergeButton(allComments.some(info => !info.resolved)) + }) + }) +} const main = () => { - initFirebase(); - setListeners(); + initFirebase() + setListeners() Rx.Observable.create((observer) => { - observer.next(); + observer.next() new MutationObserver(() => observer.next()).observe( - document.getElementById('discussion_bucket'), - {childList: true, attributes: false, characterData: false, subtree: true}); - }).debounceTime(500).subscribe(setListeners); -}; + document.getElementById('discussion_bucket'), + {childList: true, attributes: false, characterData: false, subtree: true}) + }).debounceTime(500).subscribe(setListeners) +} -const expandUnresolvedThread = (info) => { +const expandUnresolvedThread = (info) => { if (!info.resolved) { - const id = info.id; - const elem = $('#' + id).first(); - const container = elem.parents('.outdated-comment'); + const id = info.id + const elem = $('#' + id).first() + const container = elem.parents('.outdated-comment') if (container.length > 0) { - container.removeClass('closed').addClass('open'); + container.removeClass('closed').addClass('open') } } -}; +} const updateMergeButton = (unresolved) => { - $('.comment-track-status').remove(); - if (unresolved) + $('.comment-track-status').remove() + if (unresolved) { findMergeButton().insertAdjacentHTML('beforebegin', `
    @@ -84,76 +84,76 @@ const updateMergeButton = (unresolved) => { See above for red unresolved comments
    ` - ); -}; + ) + } +} const findMergeButton = () => { - const mergeabilityDetailsDivs = document.getElementsByClassName('mergeability-details'); + const mergeabilityDetailsDivs = document.getElementsByClassName('mergeability-details') if (mergeabilityDetailsDivs.length > 0) { - const mergeMessageDivs = mergeabilityDetailsDivs[0].getElementsByClassName('merge-message'); - if (mergeMessageDivs.length > 0) - return mergeMessageDivs[0]; + const mergeMessageDivs = mergeabilityDetailsDivs[0].getElementsByClassName('merge-message') + if (mergeMessageDivs.length > 0) { return mergeMessageDivs[0] } } - return null; -}; + return null +} const updateInfo = (info, resolved, lastCommentSeen) => { - commentRef(info.id).set({resolved, lastCommentSeen}); - info.resolved = resolved; - updateThread(info); -}; + commentRef(info.id).set({resolved, lastCommentSeen}) + info.resolved = resolved + updateThread(info) +} const makeButton = (elem, info) => { - const e = $(elem); - e.find('.comment-track-action').remove(); + const e = $(elem) + e.find('.comment-track-action').remove() - let actionSelector = '.review-comment-contents'; + let actionSelector = '.review-comment-contents' if (e.find(actionSelector).length === 0) { - actionSelector = '.timeline-comment-actions'; + actionSelector = '.timeline-comment-actions' } if (info.resolved) { - e.find(actionSelector).prepend(''); + e.find(actionSelector).prepend('') e.find('.comment-track-unresolve').on('click', function (event) { - event.preventDefault(); - updateInfo(info, false, null); - }); + event.preventDefault() + updateInfo(info, false, null) + }) } else { - e.find(actionSelector).prepend(''); + e.find(actionSelector).prepend('') e.find('.comment-track-resolve').on('click', function (event) { - event.preventDefault(); - updateInfo(info, true, info.lastCommentId); - }); + event.preventDefault() + updateInfo(info, true, info.lastCommentId) + }) } -}; +} const updateThread = (info) => { - const id = info.id; - const elem = $('#' + id).first(); + const id = info.id + const elem = $('#' + id).first() if (!id.match(/^issuecomment/)) { - const threadComments = $(elem).parents('.js-comments-holder').children('.js-comment'); + const threadComments = $(elem).parents('.js-comments-holder').children('.js-comment') threadComments.each(function () { - makeButton(this, info); - }); + makeButton(this, info) + }) } else { - makeButton(elem, info); + makeButton(elem, info) } -}; +} -const commentRef = function(commentId) { - return firebase.database().ref('testing_zone/' + commentId); -}; +const commentRef = function (commentId) { + return firebase.database().ref('testing_zone/' + commentId) +} const initFirebase = () => { firebase.initializeApp({ - apiKey: "AIzaSyBb_2bG5cUaW25MfCdaDP7l5HF8UbF2QR0", - authDomain: "ghct-79a7b.firebaseapp.com", - databaseURL: "https://ghct-79a7b.firebaseio.com", - projectId: "ghct-79a7b", - storageBucket: "ghct-79a7b.appspot.com", - messagingSenderId: "45909398186" - }); -}; - -main(); + apiKey: 'AIzaSyBb_2bG5cUaW25MfCdaDP7l5HF8UbF2QR0', + authDomain: 'ghct-79a7b.firebaseapp.com', + databaseURL: 'https://ghct-79a7b.firebaseio.com', + projectId: 'ghct-79a7b', + storageBucket: 'ghct-79a7b.appspot.com', + messagingSenderId: '45909398186' + }) +} + +main() From bd777be9f2b7da0a73200c24a2a2eeb3c8acd638 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Tue, 20 Jun 2017 03:07:17 -0400 Subject: [PATCH 29/47] Change how we check for unresolved comments --- core/tracker.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index 40b8bc8..943cbce 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -32,9 +32,7 @@ const findAllComments = () => { } const setListeners = () => { - const allComments = findAllComments() - console.log(`Invoked at: ${(new Date()).getTime() / 1000} with ${allComments.length} items`) - allComments.forEach(comment => { + findAllComments().forEach(comment => { commentRef(comment.id).on('value', snapshot => { const val = snapshot.val() if (val) { @@ -43,7 +41,10 @@ const setListeners = () => { } updateThread(comment) expandUnresolvedThread(comment) - updateMergeButton(allComments.some(info => !info.resolved)) + + const unresolvedCommentCount = document.getElementById('discussion_bucket') + .getElementsByClassName('comment-track-resolve').length + updateMergeButton(unresolvedCommentCount > 0) }) }) } From 67ca31760d9e78e0d4c7b2584d73a93bdd3be24d Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Tue, 20 Jun 2017 03:18:53 -0400 Subject: [PATCH 30/47] Refactor setListeners --- core/tracker.js | 43 ++++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index 943cbce..abdd2c8 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -1,6 +1,5 @@ -const findAllComments = () => { - const threads = [] +const setListeners = () => { const discussionBucket = document.getElementById('discussion_bucket') const discussionThreads = discussionBucket.querySelectorAll('.js-line-comments > .js-comments-holder') const issueComments = discussionBucket.querySelectorAll('.timeline-comment-wrapper > .timeline-comment.js-comment') @@ -10,42 +9,32 @@ const findAllComments = () => { if (comments.length > 0 && el.tracked !== comments.length) { const firstComment = comments[0] const lastComment = comments[comments.length - 1] - threads.push({ - id: firstComment.id, - lastCommentId: lastComment.id - }) + hookComment({id: firstComment.id, lastCommentId: lastComment.id}) el.tracked = comments.length } }) issueComments.forEach((el) => { if (el.id && el.id.match(/^issuecomment/) && !el.tracked) { - threads.push({ - id: el.id, - lastCommentId: el.id - }) + hookComment({id: el.id, lastCommentId: el.id}) el.tracked = true } }) - - return threads } -const setListeners = () => { - findAllComments().forEach(comment => { - commentRef(comment.id).on('value', snapshot => { - const val = snapshot.val() - if (val) { - comment.resolved = val.resolved && val.lastCommentSeen === comment.lastCommentId - comment.lastCommentSeen = val.lastCommentSeen - } - updateThread(comment) - expandUnresolvedThread(comment) - - const unresolvedCommentCount = document.getElementById('discussion_bucket') - .getElementsByClassName('comment-track-resolve').length - updateMergeButton(unresolvedCommentCount > 0) - }) +const hookComment = comment => { + commentRef(comment.id).on('value', snapshot => { + const val = snapshot.val() + if (val) { + comment.resolved = val.resolved && val.lastCommentSeen === comment.lastCommentId + comment.lastCommentSeen = val.lastCommentSeen + } + updateThread(comment) + expandUnresolvedThread(comment) + + const unresolvedCommentCount = document.getElementById('discussion_bucket') + .getElementsByClassName('comment-track-resolve').length + updateMergeButton(unresolvedCommentCount > 0) }) } From 1a7c8a4cc85c044bc3a62ccd14850b0b44e88e50 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Tue, 20 Jun 2017 03:24:58 -0400 Subject: [PATCH 31/47] Refactor expandUnresolvedThread (minor) --- core/tracker.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index abdd2c8..b2d9cb9 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -29,8 +29,12 @@ const hookComment = comment => { comment.resolved = val.resolved && val.lastCommentSeen === comment.lastCommentId comment.lastCommentSeen = val.lastCommentSeen } + updateThread(comment) - expandUnresolvedThread(comment) + + if (!comment.resolved) { + expandUnresolvedThread(comment.id) + } const unresolvedCommentCount = document.getElementById('discussion_bucket') .getElementsByClassName('comment-track-resolve').length @@ -50,14 +54,11 @@ const main = () => { }).debounceTime(500).subscribe(setListeners) } -const expandUnresolvedThread = (info) => { - if (!info.resolved) { - const id = info.id - const elem = $('#' + id).first() - const container = elem.parents('.outdated-comment') - if (container.length > 0) { - container.removeClass('closed').addClass('open') - } +const expandUnresolvedThread = id => { + const elem = $('#' + id).first() + const container = elem.parents('.outdated-comment') + if (container.length > 0) { + container.removeClass('closed').addClass('open') } } From 0e6ff4d9e70384a0f153c2d62701cb18ee9cd705 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Tue, 20 Jun 2017 03:50:53 -0400 Subject: [PATCH 32/47] Inline updateInfo --- core/tracker.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index b2d9cb9..7529acd 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -88,12 +88,6 @@ const findMergeButton = () => { return null } -const updateInfo = (info, resolved, lastCommentSeen) => { - commentRef(info.id).set({resolved, lastCommentSeen}) - info.resolved = resolved - updateThread(info) -} - const makeButton = (elem, info) => { const e = $(elem) e.find('.comment-track-action').remove() @@ -107,13 +101,19 @@ const makeButton = (elem, info) => { e.find(actionSelector).prepend('') e.find('.comment-track-unresolve').on('click', function (event) { event.preventDefault() - updateInfo(info, false, null) + + commentRef(info.id).set({resolved: false, lastCommentSeen: null}) + info.resolved = false + updateThread(info) }) } else { e.find(actionSelector).prepend('') e.find('.comment-track-resolve').on('click', function (event) { event.preventDefault() - updateInfo(info, true, info.lastCommentId) + + commentRef(info.id).set({resolved: true, lastCommentSeen: info.lastCommentId}) + info.resolved = true + updateThread(info) }) } } From 809a36edab11b9b58a658a0cc5350b6345863210 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Tue, 20 Jun 2017 04:14:35 -0400 Subject: [PATCH 33/47] Refactor makeButton and updateThread --- core/tracker.js | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index 7529acd..a88a147 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -30,7 +30,7 @@ const hookComment = comment => { comment.lastCommentSeen = val.lastCommentSeen } - updateThread(comment) + updateThread(comment.id, comment.resolved, comment.lastCommentId) if (!comment.resolved) { expandUnresolvedThread(comment.id) @@ -88,7 +88,7 @@ const findMergeButton = () => { return null } -const makeButton = (elem, info) => { +const makeButton = (elem, id, resolved, lastCommentSeen) => { const e = $(elem) e.find('.comment-track-action').remove() @@ -97,38 +97,31 @@ const makeButton = (elem, info) => { actionSelector = '.timeline-comment-actions' } - if (info.resolved) { + if (resolved) { e.find(actionSelector).prepend('') e.find('.comment-track-unresolve').on('click', function (event) { event.preventDefault() - - commentRef(info.id).set({resolved: false, lastCommentSeen: null}) - info.resolved = false - updateThread(info) + commentRef(id).set({resolved: false, lastCommentSeen: null}) }) } else { e.find(actionSelector).prepend('') e.find('.comment-track-resolve').on('click', function (event) { event.preventDefault() - - commentRef(info.id).set({resolved: true, lastCommentSeen: info.lastCommentId}) - info.resolved = true - updateThread(info) + commentRef(id).set({resolved: true, lastCommentSeen}) }) } } -const updateThread = (info) => { - const id = info.id +const updateThread = (id, resolved, lastCommentSeen) => { const elem = $('#' + id).first() if (!id.match(/^issuecomment/)) { const threadComments = $(elem).parents('.js-comments-holder').children('.js-comment') threadComments.each(function () { - makeButton(this, info) + makeButton(this, id, resolved, lastCommentSeen) }) } else { - makeButton(elem, info) + makeButton(elem, id, resolved, lastCommentSeen) } } From 1741e1b0a2cced87fdc5ac1388123e92bdef640d Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Tue, 20 Jun 2017 04:30:46 -0400 Subject: [PATCH 34/47] Refactor hookComment --- core/tracker.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/core/tracker.js b/core/tracker.js index a88a147..5d2a7ab 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -9,31 +9,28 @@ const setListeners = () => { if (comments.length > 0 && el.tracked !== comments.length) { const firstComment = comments[0] const lastComment = comments[comments.length - 1] - hookComment({id: firstComment.id, lastCommentId: lastComment.id}) + hookComment(firstComment.id, lastComment.id) el.tracked = comments.length } }) issueComments.forEach((el) => { if (el.id && el.id.match(/^issuecomment/) && !el.tracked) { - hookComment({id: el.id, lastCommentId: el.id}) + hookComment(el.id, el.id) el.tracked = true } }) } -const hookComment = comment => { - commentRef(comment.id).on('value', snapshot => { +const hookComment = (id, lastCommentId) => { + commentRef(id).on('value', snapshot => { const val = snapshot.val() - if (val) { - comment.resolved = val.resolved && val.lastCommentSeen === comment.lastCommentId - comment.lastCommentSeen = val.lastCommentSeen - } + const resolved = val && val.resolved && val.lastCommentSeen === lastCommentId - updateThread(comment.id, comment.resolved, comment.lastCommentId) + updateThread(id, resolved, lastCommentId) - if (!comment.resolved) { - expandUnresolvedThread(comment.id) + if (!resolved) { + expandUnresolvedThread(id) } const unresolvedCommentCount = document.getElementById('discussion_bucket') From a5b2a1e157856855efc7a48b9c755de476ac7633 Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 22 Jun 2017 22:27:43 -0400 Subject: [PATCH 35/47] Fix duplicate listeners, fix DOM mutations observation, remove lastCommentSeen, etc. --- .eslintrc.json | 1 - core/tracker.js | 58 ++++++++++++++++++++++++------------------------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 069bfa9..94a62aa 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -34,7 +34,6 @@ "comma-spacing": ["error", { "before": false, "after": true }], "comma-style": ["error", "last"], "constructor-super": "error", - "curly": ["error", "multi-line"], "dot-location": ["error", "property"], "eol-last": "error", "eqeqeq": ["error", "always", { "null": "ignore" }], diff --git a/core/tracker.js b/core/tracker.js index 5d2a7ab..40658e6 100644 --- a/core/tracker.js +++ b/core/tracker.js @@ -1,52 +1,52 @@ +const updateComment = (id, resolved) => { + updateThread(id, resolved) + if (!resolved) expandUnresolvedThread(id) + const unresolvedCommentCount = document.getElementById('discussion_bucket') + .getElementsByClassName('comment-track-resolve').length + updateMergeButton(unresolvedCommentCount > 0) +} + +const commentListener = snapshot => { + const id = snapshot.key + const resolved = !!snapshot.child('resolved').val() + updateComment(id, resolved) +} + const setListeners = () => { const discussionBucket = document.getElementById('discussion_bucket') + if (!discussionBucket) + return; + const discussionThreads = discussionBucket.querySelectorAll('.js-line-comments > .js-comments-holder') const issueComments = discussionBucket.querySelectorAll('.timeline-comment-wrapper > .timeline-comment.js-comment') discussionThreads.forEach((el) => { const comments = el.getElementsByClassName('js-comment') if (comments.length > 0 && el.tracked !== comments.length) { - const firstComment = comments[0] - const lastComment = comments[comments.length - 1] - hookComment(firstComment.id, lastComment.id) + const firstCommentId = comments[0].id + if (el.tracked > 0) + commentRef(firstCommentId).off('value', commentListener) + commentRef(firstCommentId).on('value', commentListener) el.tracked = comments.length } }) issueComments.forEach((el) => { if (el.id && el.id.match(/^issuecomment/) && !el.tracked) { - hookComment(el.id, el.id) + commentRef(el.id).on('value', commentListener) el.tracked = true } }) } -const hookComment = (id, lastCommentId) => { - commentRef(id).on('value', snapshot => { - const val = snapshot.val() - const resolved = val && val.resolved && val.lastCommentSeen === lastCommentId - - updateThread(id, resolved, lastCommentId) - - if (!resolved) { - expandUnresolvedThread(id) - } - - const unresolvedCommentCount = document.getElementById('discussion_bucket') - .getElementsByClassName('comment-track-resolve').length - updateMergeButton(unresolvedCommentCount > 0) - }) -} - const main = () => { initFirebase() setListeners() Rx.Observable.create((observer) => { observer.next() - new MutationObserver(() => observer.next()).observe( - document.getElementById('discussion_bucket'), + new MutationObserver(() => observer.next()).observe(document.body, {childList: true, attributes: false, characterData: false, subtree: true}) }).debounceTime(500).subscribe(setListeners) } @@ -85,7 +85,7 @@ const findMergeButton = () => { return null } -const makeButton = (elem, id, resolved, lastCommentSeen) => { +const makeButton = (elem, id, resolved) => { const e = $(elem) e.find('.comment-track-action').remove() @@ -98,27 +98,27 @@ const makeButton = (elem, id, resolved, lastCommentSeen) => { e.find(actionSelector).prepend('') e.find('.comment-track-unresolve').on('click', function (event) { event.preventDefault() - commentRef(id).set({resolved: false, lastCommentSeen: null}) + commentRef(id).set({resolved: false}) }) } else { e.find(actionSelector).prepend('') e.find('.comment-track-resolve').on('click', function (event) { event.preventDefault() - commentRef(id).set({resolved: true, lastCommentSeen}) + commentRef(id).set({resolved: true}) }) } } -const updateThread = (id, resolved, lastCommentSeen) => { +const updateThread = (id, resolved) => { const elem = $('#' + id).first() if (!id.match(/^issuecomment/)) { const threadComments = $(elem).parents('.js-comments-holder').children('.js-comment') threadComments.each(function () { - makeButton(this, id, resolved, lastCommentSeen) + makeButton(this, id, resolved) }) } else { - makeButton(elem, id, resolved, lastCommentSeen) + makeButton(elem, id, resolved) } } From 45cd99d497f002b2463e45b671dd1a24635c134e Mon Sep 17 00:00:00 2001 From: "Arjun G. Menon" Date: Thu, 29 Jun 2017 23:12:33 -0400 Subject: [PATCH 36/47] Use webpack, delete dependency JS files, reorganize. --- .eslintrc.json | 3 +- .gitignore | 1 + dist/.gitignore | 1 + other/main.css => dist/ghct-content.css | 0 .../ghct-icon.png | Bin manifest.json => dist/manifest.json | 15 +- lib/Rx.min.js | 294 --- lib/firebase-app.js | 6 - lib/firebase-database.js | 260 --- lib/firebase.js | 536 ----- lib/jquery-2.1.0.min.js | 4 - package.json | 16 + core/tracker.js => src/content.js | 4 + webpack.config.js | 9 + yarn.lock | 1980 +++++++++++++++++ 15 files changed, 2017 insertions(+), 1112 deletions(-) create mode 100644 dist/.gitignore rename other/main.css => dist/ghct-content.css (100%) rename other/github-comment-tracker.png => dist/ghct-icon.png (100%) rename manifest.json => dist/manifest.json (51%) delete mode 100644 lib/Rx.min.js delete mode 100644 lib/firebase-app.js delete mode 100644 lib/firebase-database.js delete mode 100644 lib/firebase.js delete mode 100644 lib/jquery-2.1.0.min.js create mode 100644 package.json rename core/tracker.js => src/content.js (97%) create mode 100644 webpack.config.js create mode 100644 yarn.lock diff --git a/.eslintrc.json b/.eslintrc.json index 94a62aa..b99c752 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,8 @@ // Based on: https://raw.githubusercontent.com/feross/eslint-config-standard/master/eslintrc.json { "parserOptions": { - "ecmaVersion": 6 + "ecmaVersion": 6, + "sourceType": "module" }, "env": { diff --git a/.gitignore b/.gitignore index 485dee6..7a1537b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .idea +node_modules diff --git a/dist/.gitignore b/dist/.gitignore new file mode 100644 index 0000000..a6c7c28 --- /dev/null +++ b/dist/.gitignore @@ -0,0 +1 @@ +*.js diff --git a/other/main.css b/dist/ghct-content.css similarity index 100% rename from other/main.css rename to dist/ghct-content.css diff --git a/other/github-comment-tracker.png b/dist/ghct-icon.png similarity index 100% rename from other/github-comment-tracker.png rename to dist/ghct-icon.png diff --git a/manifest.json b/dist/manifest.json similarity index 51% rename from manifest.json rename to dist/manifest.json index d3df51c..ecd8efd 100644 --- a/manifest.json +++ b/dist/manifest.json @@ -2,10 +2,10 @@ "manifest_version": 2, "name": "Github Comment Tracker", - "description": "Tracks resolved / unresolved state of comments on github pull requests", + "description": "Track the state of comments on GitHub pull requests", "version": "1.2.0", "icons": { - "256": "other/github-comment-tracker.png" + "256": "ghct-icon.png" }, "permissions": [ @@ -16,14 +16,7 @@ "content_scripts": [{ "matches": ["*://github.com/*/pull*"], - "js": [ - "lib/jquery-2.1.0.min.js", - "lib/firebase.js", - "lib/firebase-app.js", - "lib/firebase-database.js", - "lib/Rx.min.js", - "core/tracker.js" - ], - "css": ["other/main.css"] + "js": ["ghct-content.js"], + "css": ["ghct-content.css"] }] } diff --git a/lib/Rx.min.js b/lib/Rx.min.js deleted file mode 100644 index a71ebef..0000000 --- a/lib/Rx.min.js +++ /dev/null @@ -1,294 +0,0 @@ -/** - @license - Apache License 2.0 https://github.com/ReactiveX/RxJS/blob/master/LICENSE.txt - **/ -/* - ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -*****************************************************************************/ -(function(t,k){"object"===typeof exports&&"undefined"!==typeof module?k(exports):"function"===typeof define&&define.amd?define(["exports"],k):k(t.Rx=t.Rx||{})})(this,function(t){function k(b,a){function c(){this.constructor=b}ob(b,a);b.prototype=null===a?Object.create(a):(c.prototype=a.prototype,new c)}function N(b){return"function"===typeof b}function pb(){try{return la.apply(this,arguments)}catch(b){return m.e=b,m}}function r(b){la=b;return pb}function ma(b){return b.reduce(function(a,c){return a.concat(c instanceof -O?c.errors:c)},[])}function na(b){var a=b.subject;a.next(b.value);a.complete()}function qb(b){b.subject.error(b.err)}function rb(b){var a=this,c=b.source,e=b.subscriber;b=b.context;var d=c.callbackFunc,f=c.args,h=c.scheduler,g=c.subject;if(!g){var g=c.subject=new L,k=function sb(){for(var c=[],b=0;b=c.length?c[0]:c,subject:e}))};k.source=c;r(d).apply(b,f.concat(k))===m&&a.add(h.schedule(da,0,{err:m.e,subject:g}))}a.add(g.subscribe(e))}function oa(b){var a=b.subject;a.next(b.value);a.complete()}function da(b){b.subject.error(b.err)}function z(b){return b&&"function"===typeof b.schedule}function pa(b){return b&&"function"!==typeof b.subscribe&&"function"===typeof b.then}function p(b,a,c,e){var d=new qa(b,c,e);if(d.closed)return null; -if(a instanceof g)if(a._isScalar)d.next(a.value),d.complete();else return a.subscribe(d);else if(a&&"number"===typeof a.length){b=0;for(c=a.length;b=c.length?c[0]:c),b.complete())},f.source=this,r(b).apply(this.context,d.concat(f))===m&&h.error(m.e));return h.subscribe(c)};a.dispatch=function(c){var a=this,b=c.source,f=c.subscriber;c=c.context;var h=b.callbackFunc,g=b.args,k=b.scheduler,B=b.subject;if(!B){var B=b.subject=new L,l=function tb(){for(var c=[],b=0;b=c.length?c[0]:c,subject:e}))};l.source=b;r(h).apply(c,g.concat(l))===m&&B.error(m.e)}a.add(B.subscribe(f))};return a}(g).create;g.bindCallback=Zb;var $b=function(b){function a(c,a,d,f,h){b.call(this);this.callbackFunc=c;this.selector=a;this.args=d;this.context=f;this.scheduler=h}k(a,b);a.create=function(c,b,d){void 0===b&&(b=void 0);return function(){for(var e=[],h=0;h=c.length?c[0]:c),b.complete())},f.source=this,r(a).apply(this.context,b.concat(f))===m&&h.error(m.e)); -return h.subscribe(c)};return a}(g).create;g.bindNodeCallback=$b;var ga=function(b){function a(c,a){b.call(this);this.value=c;this.scheduler=a;this._isScalar=!0;a&&(this._isScalar=!1)}k(a,b);a.create=function(c,b){return new a(c,b)};a.dispatch=function(c){var a=c.value,b=c.subscriber;c.done?b.complete():(b.next(a),b.closed||(c.done=!0,this.schedule(c)))};a.prototype._subscribe=function(c){var b=this.value,d=this.scheduler;if(d)return d.schedule(a.dispatch,0,{done:!1,value:b,subscriber:c});c.next(b); -c.closed||c.complete()};return a}(g),F=function(b){function a(c){b.call(this);this.scheduler=c}k(a,b);a.create=function(c){return new a(c)};a.dispatch=function(c){c.subscriber.complete()};a.prototype._subscribe=function(c){var b=this.scheduler;if(b)return b.schedule(a.dispatch,0,{subscriber:c});c.complete()};return a}(g),E=function(b){function a(c,a){b.call(this);this.array=c;this.scheduler=a;a||1!==c.length||(this._isScalar=!0,this.value=c[0])}k(a,b);a.create=function(c,b){return new a(c,b)};a.of= -function(){for(var c=[],b=0;b=c.count?f.complete():(f.next(a[b]),f.closed||(c.index=b+1,this.schedule(c)))};a.prototype._subscribe=function(c){var b=this.array,d=b.length,f=this.scheduler;if(f)return f.schedule(a.dispatch,0,{array:b,index:0,count:d,subscriber:c});for(f=0;fe?-1:1;b=e*Math.floor(Math.abs(b));b=0>=b?0:b>Ra?Ra:b}this.arr=a;this.idx=c;this.len=b}b.prototype[A]=function(){return this};b.prototype.next=function(){return this.idx=c.length?f.complete():(f.next(a[b]),c.index=b+1,this.schedule(c)))};a.prototype._subscribe=function(c){var b=this.arrayLike,d=this.scheduler,f=b.length;if(d)return d.schedule(a.dispatch,0,{arrayLike:b,index:0,length:f,subscriber:c});for(d=0;dc)this.period= -0;a&&"function"===typeof a.schedule||(this.scheduler=x)}k(a,b);a.create=function(c,b){void 0===c&&(c=0);void 0===b&&(b=x);return new a(c,b)};a.dispatch=function(c){var a=c.subscriber,b=c.period;a.next(c.index);a.closed||(c.index+=1,this.schedule(c,b))};a.prototype._subscribe=function(c){var b=this.period;c.add(this.scheduler.schedule(a.dispatch,b,{index:0,subscriber:c,period:b}))};return a}(g).create;g.interval=rc;g.merge=sa;var vb=function(){function b(){}b.prototype.call=function(a,c){return c.subscribe(new sc(a))}; -return b}(),sc=function(b){function a(c){b.call(this,c);this.hasFirst=!1;this.observables=[];this.subscriptions=[]}k(a,b);a.prototype._next=function(c){this.observables.push(c)};a.prototype._complete=function(){var c=this.observables,a=c.length;if(0===a)this.destination.complete();else{for(var b=0;b=c.count?f.complete():(f.next(a),f.closed||(c.index=b+1,c.start=a+1,this.schedule(c)))};a.prototype._subscribe=function(c){var b=0,d=this.start,f=this._count,h=this.scheduler;if(h)return h.schedule(a.dispatch,0,{index:b,count:f, -start:d,subscriber:c});do{if(b++>=f){c.complete();break}c.next(d++);if(c.closed)break}while(1)};return a}(g).create;g.range=wc;var yc=function(b){function a(c,a){b.call(this);this.resourceFactory=c;this.observableFactory=a}k(a,b);a.create=function(c,b){return new a(c,b)};a.prototype._subscribe=function(c){var a=this.resourceFactory,b=this.observableFactory,f;try{return f=a(),new xc(c,f,b)}catch(h){c.error(h)}};return a}(g),xc=function(b){function a(c,a,d){b.call(this,c);this.resource=a;this.observableFactory= -d;c.add(a);this.tryUse()}k(a,b);a.prototype.tryUse=function(){try{var c=this.observableFactory.call(this,this.resource);c&&this.add(p(this,c))}catch(e){this._error(e)}};return a}(q);g.using=yc.create;var zc=function(b){function a(c,a){b.call(this);this.error=c;this.scheduler=a}k(a,b);a.create=function(c,b){return new a(c,b)};a.dispatch=function(c){c.subscriber.error(c.error)};a.prototype._subscribe=function(c){var b=this.error,d=this.scheduler;c.syncErrorThrowable=!0;if(d)return d.schedule(a.dispatch, -0,{error:b,subscriber:c});c.error(b)};return a}(g).create;g.throw=zc;var Ac=function(b){function a(c,a,d){void 0===c&&(c=0);b.call(this);this.period=-1;this.dueTime=0;Q(a)?this.period=1>Number(a)&&1||Number(a):z(a)&&(d=a);z(d)||(d=x);this.scheduler=d;this.dueTime=X(c)?+c-this.scheduler.now():c}k(a,b);a.create=function(c,b,d){void 0===c&&(c=0);return new a(c,b,d)};a.dispatch=function(c){var a=c.index,b=c.period,f=c.subscriber;f.next(a);if(!f.closed){if(-1===b)return f.complete();c.index=a+1;this.schedule(c, -b)}};a.prototype._subscribe=function(c){return this.scheduler.schedule(a.dispatch,this.dueTime,{index:0,period:this.period,subscriber:c})};return a}(g).create;g.timer=Ac;var va=function(){function b(a){this.project=a}b.prototype.call=function(a,c){return c.subscribe(new Bc(a,this.project))};return b}(),Bc=function(b){function a(c,a,d){void 0===d&&(d=Object.create(null));b.call(this,c);this.iterators=[];this.active=0;this.project="function"===typeof a?a:null;this.values=d}k(a,b);a.prototype._next= -function(c){var a=this.iterators;D(c)?a.push(new Cc(c)):"function"===typeof c[A]?a.push(new Dc(c[A]())):a.push(new Ec(this.destination,this,c))};a.prototype._complete=function(){var c=this.iterators,a=c.length;if(0===a)this.destination.complete();else{this.active=a;for(var b=0;bthis.index};b.prototype.hasCompleted=function(){return this.array.length===this.index};return b}(),Ec=function(b){function a(c,a,d){b.call(this,c);this.parent=a;this.observable=d;this.stillUnsubscribed=!0;this.buffer=[];this.isComplete=!1}k(a,b);a.prototype[A]=function(){return this};a.prototype.next=function(){var c=this.buffer;return 0===c.length&&this.isComplete?{value:null,done:!0}:{value:c.shift(),done:!1}};a.prototype.hasValue=function(){return 0< -this.buffer.length};a.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete};a.prototype.notifyComplete=function(){0e;e++)try{a=b[e];new n.ActiveXObject(a);break}catch(B){}c=new n.ActiveXObject(a)}catch(B){throw Error("XMLHttpRequest is not supported by your browser");}}return c},crossDomain:!1,withCredentials:!1,headers:{},method:"GET",responseType:"json",timeout:0}; -if("string"===typeof c)a.url=c;else for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d]);this.request=a}k(a,b);a.prototype._subscribe=function(c){return new Gc(c,this.request)};a.create=function(){var c=function(c){return new a(c)};c.get=xb;c.post=yb;c.delete=zb;c.put=Ab;c.patch=Bb;c.getJSON=Cb;return c}();return a}(g),Gc=function(b){function a(c,a){b.call(this,c);this.request=a;this.done=!1;c=a.headers=a.headers||{};a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");"Content-Type"in -c||n.FormData&&a.body instanceof n.FormData||"undefined"===typeof a.body||(c["Content-Type"]="application/x-www-form-urlencoded; charset\x3dUTF-8");a.body=this.serializeBody(a.body,a.headers["Content-Type"]);this.send()}k(a,b);a.prototype.next=function(c){this.done=!0;var a=this.destination;c=new Wa(c,this.xhr,this.request);a.next(c)};a.prototype.send=function(){var c=this.request,a=this.request,b=a.user,f=a.method,h=a.url,g=a.async,k=a.password,l=a.headers,a=a.body,n=r(c.createXHR).call(c);if(n=== -m)this.error(m.e);else{this.xhr=n;this.setupEvents(n,c);b=b?r(n.open).call(n,f,h,g,b,k):r(n.open).call(n,f,h,g);if(b===m)return this.error(m.e),null;g&&(n.timeout=c.timeout,n.responseType=c.responseType);"withCredentials"in n&&(n.withCredentials=!!c.withCredentials);this.setHeaders(n,l);b=a?r(n.send).call(n,a):r(n.send).call(n);if(b===m)return this.error(m.e),null}return n};a.prototype.serializeBody=function(c,a){if(!c||"string"===typeof c||n.FormData&&c instanceof n.FormData)return c;if(a){var b= -a.indexOf(";");-1!==b&&(a=a.substring(0,b))}switch(a){case "application/x-www-form-urlencoded":return Object.keys(c).map(function(a){return encodeURI(a)+"\x3d"+encodeURI(c[a])}).join("\x26");case "application/json":return JSON.stringify(c);default:return c}};a.prototype.setHeaders=function(c,a){for(var b in a)a.hasOwnProperty(b)&&c.setRequestHeader(b,a[b])};a.prototype.setupEvents=function(c,a){function b(c){var a=b.subscriber,e=b.progressSubscriber,d=b.request;e&&e.error(c);a.error(new Xa(this,d))} -function e(c){var a=e.subscriber,b=e.progressSubscriber,d=e.request;if(4===this.readyState){var f=1223===this.status?204:this.status,h="text"===this.responseType?this.response||this.responseText:this.response;0===f&&(f=h?200:0);200<=f&&300>f?(b&&b.complete(),a.next(c),a.complete()):(b&&b.error(c),a.error(new aa("ajax error "+f,this,d)))}}var h=a.progressSubscriber;c.ontimeout=b;b.request=a;b.subscriber=this;b.progressSubscriber=h;if(c.upload&&"withCredentials"in c){if(h){var g;g=function(c){g.progressSubscriber.next(c)}; -n.XDomainRequest?c.onprogress=g:c.upload.onprogress=g;g.progressSubscriber=h}var k;k=function(c){var a=k.progressSubscriber,b=k.subscriber,e=k.request;a&&a.error(c);b.error(new aa("ajax error",this,e))};c.onerror=k;k.request=a;k.subscriber=this;k.progressSubscriber=h}c.onreadystatechange=e;e.subscriber=this;e.progressSubscriber=h;e.request=a};a.prototype.unsubscribe=function(){var c=this.xhr;!this.done&&c&&4!==c.readyState&&"function"===typeof c.abort&&c.abort();b.prototype.unsubscribe.call(this)}; -return a}(l),Wa=function(){return function(b,a,c){this.originalEvent=b;this.xhr=a;this.request=c;this.status=a.status;this.responseType=a.responseType||c.responseType;switch(this.responseType){case "json":this.response="response"in a?a.responseType?a.response:JSON.parse(a.response||a.responseText||"null"):JSON.parse(a.responseText||"null");break;case "xml":this.response=a.responseXML;break;default:this.response="response"in a?a.response:a.responseText}}}(),aa=function(b){function a(c,a,d){b.call(this, -c);this.message=c;this.xhr=a;this.request=d;this.status=a.status}k(a,b);return a}(Error),Xa=function(b){function a(c,a){b.call(this,"ajax timeout",c,a)}k(a,b);return a}(aa);g.ajax=J.create;var Hc=function(b){function a(c,a){b.call(this,c,a);this.scheduler=c;this.work=a}k(a,b);a.prototype.schedule=function(c,a){void 0===a&&(a=0);if(0c?1:c;this._windowTime= -1>a?1:a}k(a,b);a.prototype.next=function(c){var a=this._getNow();this._events.push(new Ic(a,c));this._trimBufferThenGetEvents();b.prototype.next.call(this,c)};a.prototype._subscribe=function(c){var a=this._trimBufferThenGetEvents(),b=this.scheduler,f;if(this.closed)throw new H;this.hasError?f=u.EMPTY:this.isStopped?f=u.EMPTY:(this.observers.push(c),f=new Na(this,c));b&&c.add(c=new ia(c,b));for(var b=a.length,h=0;ha&&(g=Math.max(g,h-a));0d)?this.add(c.closeAction=h.schedule(ya,a,{subscriber:this,context:c,bufferTimeSpan:a})):(f={bufferTimeSpan:a,bufferCreationInterval:d,subscriber:this,scheduler:h},this.add(c.closeAction=h.schedule(za,a,{subscriber:this,context:c})),this.add(h.schedule(Eb,d,f)))}k(a,b);a.prototype._next=function(a){for(var c=this.contexts,b=c.length,f,h=0;h=b[0].time-f.now();)b.shift().notification.observe(h);0(a||0)?Number.POSITIVE_INFINITY:a;return this.lift(new zd(b,a,c))};var M=function(b){function a(){var a=b.call(this,"argument out of range");this.name=a.name="ArgumentOutOfRangeError";this.stack=a.stack; -this.message=a.message}k(a,b);return a}(Error),Bd=function(){function b(a,c){this.index=a;this.defaultValue=c;if(0>a)throw new M;}b.prototype.call=function(a,c){return c.subscribe(new Ad(a,this.index,this.defaultValue))};return b}(),Ad=function(b){function a(a,e,d){b.call(this,a);this.index=e;this.defaultValue=d}k(a,b);a.prototype._next=function(a){0===this.index--&&(this.destination.next(a),this.destination.complete())};a.prototype._complete=function(){var a=this.destination;0<=this.index&&("undefined"!== -typeof this.defaultValue?a.next(this.defaultValue):a.error(new M));a.complete()};return a}(l);g.prototype.elementAt=function(b,a){return this.lift(new Bd(b,a))};var Kb=function(){function b(a,c){this.predicate=a;this.thisArg=c}b.prototype.call=function(a,c){return c.subscribe(new Cd(a,this.predicate,this.thisArg))};return b}(),Cd=function(b){function a(a,e,d){b.call(this,a);this.predicate=e;this.thisArg=d;this.count=0;this.predicate=e}k(a,b);a.prototype._next=function(a){var c;try{c=this.predicate.call(this.thisArg, -a,this.count++)}catch(d){this.destination.error(d);return}c&&this.destination.next(a)};return a}(l);g.prototype.filter=ea;var Lb=function(){function b(a){this.callback=a}b.prototype.call=function(a,c){return c.subscribe(new Dd(a,this.callback))};return b}(),Dd=function(b){function a(a,e){b.call(this,a);this.add(new u(e))}k(a,b);return a}(l);g.prototype.finally=Ha;g.prototype._finally=Ha;var $a=function(){function b(a,c,b,d){this.predicate=a;this.source=c;this.yieldIndex=b;this.thisArg=d}b.prototype.call= -function(a,c){return c.subscribe(new Ed(a,this.predicate,this.source,this.yieldIndex,this.thisArg))};return b}(),Ed=function(b){function a(a,e,d,f,h){b.call(this,a);this.predicate=e;this.source=d;this.yieldIndex=f;this.thisArg=h;this.index=0}k(a,b);a.prototype.notifyComplete=function(a){var c=this.destination;c.next(a);c.complete()};a.prototype._next=function(a){var c=this.predicate,b=this.thisArg,f=this.index++;try{c.call(b||this,a,f,this.source)&&this.notifyComplete(this.yieldIndex?f:a)}catch(h){this.destination.error(h)}}; -a.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:void 0)};return a}(l);g.prototype.find=function(b,a){if("function"!==typeof b)throw new TypeError("predicate is not a function");return this.lift(new $a(b,this,!1,a))};g.prototype.findIndex=function(b,a){return this.lift(new $a(b,this,!0,a))};var ba=function(b){function a(){var a=b.call(this,"no elements in sequence");this.name=a.name="EmptyError";this.stack=a.stack;this.message=a.message}k(a,b);return a}(Error),Gd=function(){function b(a, -c,b,d){this.predicate=a;this.resultSelector=c;this.defaultValue=b;this.source=d}b.prototype.call=function(a,c){return c.subscribe(new Fd(a,this.predicate,this.resultSelector,this.defaultValue,this.source))};return b}(),Fd=function(b){function a(a,e,d,f,h){b.call(this,a);this.predicate=e;this.resultSelector=d;this.defaultValue=f;this.source=h;this.index=0;this._emitted=this.hasCompleted=!1}k(a,b);a.prototype._next=function(a){var c=this.index++;this.predicate?this._tryPredicate(a,c):this._emit(a,c)}; -a.prototype._tryPredicate=function(a,b){var c;try{c=this.predicate(a,b,this.source)}catch(f){this.destination.error(f);return}c&&this._emit(a,b)};a.prototype._emit=function(a,b){this.resultSelector?this._tryResultSelector(a,b):this._emitFinal(a)};a.prototype._tryResultSelector=function(a,b){var c;try{c=this.resultSelector(a,b)}catch(f){this.destination.error(f);return}this._emitFinal(c)};a.prototype._emitFinal=function(a){var c=this.destination;this._emitted||(this._emitted=!0,c.next(a),c.complete(), -this.hasCompleted=!0)};a.prototype._complete=function(){var a=this.destination;this.hasCompleted||"undefined"===typeof this.defaultValue?this.hasCompleted||a.error(new ba):(a.next(this.defaultValue),a.complete())};return a}(l);g.prototype.first=function(b,a,c){return this.lift(new Gd(b,a,c,this))};var Hd=function(){function b(){this.size=0;this._values=[];this._keys=[]}b.prototype.get=function(a){a=this._keys.indexOf(a);return-1===a?void 0:this._values[a]};b.prototype.set=function(a,c){var b=this._keys.indexOf(a); --1===b?(this._keys.push(a),this._values.push(c),this.size++):this._values[b]=c;return this};b.prototype.delete=function(a){a=this._keys.indexOf(a);if(-1===a)return!1;this._values.splice(a,1);this._keys.splice(a,1);this.size--;return!0};b.prototype.clear=function(){this._keys.length=0;this.size=this._values.length=0};b.prototype.forEach=function(a,c){for(var b=0;bc?a:c}))};g.prototype.merge=function(){for(var b=[],a=0;ab(a,c)?a:c}:function(a,c){return a=b?this.connection=null:(a._refCount=b-1,1b?this.lift(new db(-1,this)):this.lift(new db(b-1,this))};var ne=function(){function b(a){this.notifier=a}b.prototype.call=function(a,c){return c.subscribe(new me(a,this.notifier,c))};return b}(),me=function(b){function a(a,e,d){b.call(this,a);this.notifier=e;this.source=d;this.sourceIsBeingSubscribedTo=!0}k(a,b);a.prototype.notifyNext=function(a,b,d,f,h){this.sourceIsBeingSubscribedTo= -!0;this.source.subscribe(this)};a.prototype.notifyComplete=function(a){if(!1===this.sourceIsBeingSubscribedTo)return b.prototype.complete.call(this)};a.prototype.complete=function(){this.sourceIsBeingSubscribedTo=!1;if(!this.isStopped){if(!this.retries)this.subscribeToRetries();else if(this.retriesSubscription.closed)return b.prototype.complete.call(this);this._unsubscribeAndRecycle();this.notifications.next()}};a.prototype._unsubscribe=function(){var a=this.notifications,b=this.retriesSubscription; -a&&(a.unsubscribe(),this.notifications=null);b&&(b.unsubscribe(),this.retriesSubscription=null);this.retries=null};a.prototype._unsubscribeAndRecycle=function(){var a=this.notifications,e=this.retries,d=this.retriesSubscription;this.retriesSubscription=this.retries=this.notifications=null;b.prototype._unsubscribeAndRecycle.call(this);this.notifications=a;this.retries=e;this.retriesSubscription=d;return this};a.prototype.subscribeToRetries=function(){this.notifications=new v;var a=r(this.notifier)(this.notifications); -if(a===m)return b.prototype.complete.call(this);this.retries=a;this.retriesSubscription=p(this,a)};return a}(q);g.prototype.repeatWhen=function(b){return this.lift(new ne(b))};var pe=function(){function b(a,c){this.count=a;this.source=c}b.prototype.call=function(a,c){return c.subscribe(new oe(a,this.count,this.source))};return b}(),oe=function(b){function a(a,e,d){b.call(this,a);this.count=e;this.source=d}k(a,b);a.prototype.error=function(a){if(!this.isStopped){var c=this.source,d=this.count;if(0=== -d)return b.prototype.error.call(this,a);-1this.total&&this.destination.next(a)};return a}(l);g.prototype.skip=function(b){return this.lift(new Ee(b))}; -var Ge=function(){function b(a){this._skipCount=a;if(0>this._skipCount)throw new M;}b.prototype.call=function(a,c){return 0===this._skipCount?c.subscribe(new l(a)):c.subscribe(new Fe(a,this._skipCount))};return b}(),Fe=function(b){function a(a,e){b.call(this,a);this._skipCount=e;this._count=0;this._ring=Array(e)}k(a,b);a.prototype._next=function(a){var c=this._skipCount,b=this._count++;if(be)this.delayTime=0;d&&"function"===typeof d.schedule||(this.scheduler=ca)}k(a,b);a.create=function(b,e,d){void 0===e&&(e=0);void 0===d&&(d=ca);return new a(b,e,d)};a.dispatch=function(a){return this.add(a.source.subscribe(a.subscriber))};a.prototype._subscribe=function(b){return this.scheduler.schedule(a.dispatch,this.delayTime,{source:this.source,subscriber:b})};return a}(g),Ne=function(){function b(a,b){this.scheduler=a;this.delay=b}b.prototype.call= -function(a,b){return(new Me(b,this.delay,this.scheduler)).subscribe(a)};return b}();g.prototype.subscribeOn=function(b,a){void 0===a&&(a=0);return this.lift(new Ne(b,a))};var Tb=function(){function b(){}b.prototype.call=function(a,b){return b.subscribe(new Oe(a))};return b}(),Oe=function(b){function a(a){b.call(this,a);this.active=0;this.hasCompleted=!1}k(a,b);a.prototype._next=function(a){this.unsubscribeInner();this.active++;this.add(this.innerSubscription=p(this,a))};a.prototype._complete=function(){this.hasCompleted= -!0;0===this.active&&this.destination.complete()};a.prototype.unsubscribeInner=function(){this.active=0this.total)throw new M;}b.prototype.call=function(a,b){return b.subscribe(new Te(a,this.total))};return b}(),Te=function(b){function a(a,e){b.call(this,a);this.total=e;this.count= -0}k(a,b);a.prototype._next=function(a){var b=this.total,c=++this.count;c<=b&&(this.destination.next(a),c===b&&(this.destination.complete(),this.unsubscribe()))};return a}(l);g.prototype.take=function(b){return 0===b?new F:this.lift(new Ue(b))};var We=function(){function b(a){this.total=a;if(0>this.total)throw new M;}b.prototype.call=function(a,b){return b.subscribe(new Ve(a,this.total))};return b}(),Ve=function(b){function a(a,e){b.call(this,a);this.total=e;this.ring=[];this.count=0}k(a,b);a.prototype._next= -function(a){var b=this.ring,c=this.total,f=this.count++;b.length=this.total?this.total:this.count,f=this.ring,h=0;h=this.maxWindowSize&&this.closeWindow(h))}};a.prototype._error=function(a){for(var b=this.windows;0b.index?1:-1:a.delay>b.delay?1:-1};return a}(S),Cf=function(b){function a(a){b.call(this,lb,750);this.assertDeepEqual=a;this.hotObservables=[];this.coldObservables=[];this.flushTests=[]}k(a,b);a.prototype.createTime=function(b){b=b.indexOf("|");if(-1===b)throw Error('marble diagram for time should have a completion marker "|"');return b*a.frameTimeFactor}; -a.prototype.createColdObservable=function(b,e,d){if(-1!==b.indexOf("^"))throw Error('cold observable cannot have subscription offset "^"');if(-1!==b.indexOf("!"))throw Error('cold observable cannot have unsubscription marker "!"');b=a.parseMarbles(b,e,d);b=new ka(b,this);this.coldObservables.push(b);return b};a.prototype.createHotObservable=function(b,e,d){if(-1!==b.indexOf("!"))throw Error('hot observable cannot have unsubscription marker "!"');b=a.parseMarbles(b,e,d);b=new kb(b,this);this.hotObservables.push(b); -return b};a.prototype.materializeInnerObservable=function(a,b){var c=this,e=[];a.subscribe(function(a){e.push({frame:c.frame-b,notification:w.createNext(a)})},function(a){e.push({frame:c.frame-b,notification:w.createError(a)})},function(){e.push({frame:c.frame-b,notification:w.createComplete()})});return e};a.prototype.expectObservable=function(b,e){var c=this;void 0===e&&(e=null);var f=[],h={actual:f,ready:!1};e=a.parseMarblesAsSubscriptions(e).unsubscribedFrame;var k;this.schedule(function(){k= -b.subscribe(function(a){var b=a;a instanceof g&&(b=c.materializeInnerObservable(b,c.frame));f.push({frame:c.frame,notification:w.createNext(b)})},function(a){f.push({frame:c.frame,notification:w.createError(a)})},function(){f.push({frame:c.frame,notification:w.createComplete()})})},0);e!==Number.POSITIVE_INFINITY&&this.schedule(function(){return k.unsubscribe()},e);this.flushTests.push(h);return{toBe:function(b,c,d){h.ready=!0;h.expected=a.parseMarbles(b,c,d,!0)}}};a.prototype.expectSubscriptions= -function(b){var c={actual:b,ready:!1};this.flushTests.push(c);return{toBe:function(b){b="string"===typeof b?[b]:b;c.ready=!0;c.expected=b.map(function(b){return a.parseMarblesAsSubscriptions(b)})}}};a.prototype.flush=function(){for(var a=this.hotObservables;0g?new V(f):new V(f,g)};a.parseMarbles=function(a,b,d,f){void 0===f&&(f=!1);if(-1!==a.indexOf("!"))throw Error('conventional marble diagrams cannot have the unsubscription marker "!"');for(var c=a.length,e=[],g=a.indexOf("^"),g=-1===g?0:g*-this.frameTimeFactor,k="object"!==typeof b?function(a){return a}:function(a){return f&&b[a]instanceof ka?b[a].messages: -b[a]},l=-1,m=0;m0&&void 0!==arguments[0]?arguments[0]:e();return"function"!=typeof t[n]&&i("invalid-app-argument",{name:n}),t[n]()};return void 0!==o&&(0,f.deepExtend)(s,o),m[n]=s,h.prototype[n]=function(){for(var e=this._getService.bind(this,n),t=arguments.length,r=Array(t),o=0;o1&&void 0!==arguments[1]?arguments[1]:p;if(this.checkDestroyed_(),this.services_[e]||(this.services_[e]={}),!this.services_[e][t]){var n=t!==p?t:void 0,r=this.firebase_.INTERNAL.factories[e](this,this.extendApp.bind(this),n);this.services_[e][t]=r}return this.services_[e][t]}},{key:"extendApp",value:function(e){var t=this;(0,f.deepExtend)(this,e),e.INTERNAL&&e.INTERNAL.addAuthTokenListener&&(d.forEach(function(e){t.INTERNAL.addAuthTokenListener(e)}),d=[])}},{key:"checkDestroyed_",value:function(){this.isDeleted_&&i("app-deleted",{name:this.name_})}},{key:"name",get:function(){return this.checkDestroyed_(),this.name_}},{key:"options",get:function(){return this.checkDestroyed_(),this.options_}}]),e}();h.prototype.name&&h.prototype.options||h.prototype.delete||console.log("dc");var v={"no-app":"No Firebase App '{$name}' has been created - call Firebase App.initializeApp()","bad-app-name":"Illegal App name: '{$name}","duplicate-app":"Firebase App named '{$name}' already exists","app-deleted":"Firebase App named '{$name}' already deleted","duplicate-service":"Firebase service named '{$name}' already registered","sa-not-supported":"Initializing the Firebase SDK with a service account is only allowed in a Node.js environment. On client devices, you should instead initialize the SDK with an api key and auth domain","invalid-app-argument":"firebase.{$name}() takes either no argument or a Firebase App instance."},m=new s.ErrorFactory("app","Firebase",v)},32:function(e,t,n){"use strict";function r(e){return o(void 0,e)}function o(e,t){if(!(t instanceof Object))return t;switch(t.constructor){case Date:return new Date(t.getTime());case Object:void 0===e&&(e={});break;case Array:e=[];break;default:return t}for(var n in t)t.hasOwnProperty(n)&&(e[n]=o(e[n],t[n]));return e}function i(e,t,n){e[t]=n}Object.defineProperty(t,"__esModule",{value:!0}),t.deepCopy=r,t.deepExtend=o,t.patchProperty=i},4:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(27),o=(0,r.createFirebaseNamespace)();t.default=o,e.exports=t.default},51:function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(f===setTimeout)return setTimeout(e,0);if((f===n||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function i(e){if(l===clearTimeout)return clearTimeout(e);if((l===r||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function a(){v&&d&&(v=!1,d.length?h=d.concat(h):m=-1,h.length&&c())}function c(){if(!v){var e=o(a);v=!0;for(var t=h.length;t;){for(d=h,h=[];++m1)for(var n=1;n=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},r(53),n.setImmediate=setImmediate,n.clearImmediate=clearImmediate},9: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){var t=a;return a=e,t}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n"}),o=this.serviceName+": "+o+" ("+r+").";var i=new c(r,o);for(var a in t)t.hasOwnProperty(a)&&"_"!==a.slice(-1)&&(i[a]=t[a]);return i}}]),e}()}})}(); -//# sourceMappingURL=firebase-app.js.map \ No newline at end of file diff --git a/lib/firebase-database.js b/lib/firebase-database.js deleted file mode 100644 index 8343a8d..0000000 --- a/lib/firebase-database.js +++ /dev/null @@ -1,260 +0,0 @@ -/*! @license Firebase v4.1.2 -Build: rev-4a4cc92 -Terms: https://firebase.google.com/terms/ - ---- - -typedarray.js -Copyright (c) 2010, Linden Research, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. */ - -(function() {var g,aa=this;function n(a){return void 0!==a}function ba(){}function ca(a){a.Vb=function(){return a.Ye?a.Ye:a.Ye=new a}} -function da(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ea(a){return"array"==da(a)}function fa(a){var b=da(a);return"array"==b||"object"==b&&"number"==typeof a.length}function p(a){return"string"==typeof a}function ga(a){return"number"==typeof a}function ha(a){return"function"==da(a)}function ia(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}function ja(a,b,c){return a.call.apply(a.bind,arguments)} -function ka(a,b,c){if(!a)throw Error();if(2b?e+="000":256>b?e+="00":4096>b&&(e+="0");return qa[a]=e+b.toString(16)}),'"')};function sa(){this.Wa=-1};function ta(){this.Wa=-1;this.Wa=64;this.M=[];this.Wd=[];this.Af=[];this.zd=[];this.zd[0]=128;for(var a=1;ae;e++)d[e]=b.charCodeAt(c)<<24|b.charCodeAt(c+1)<<16|b.charCodeAt(c+2)<<8|b.charCodeAt(c+3),c+=4;else for(e=0;16>e;e++)d[e]=b[c]<<24|b[c+1]<<16|b[c+2]<<8|b[c+3],c+=4;for(e=16;80>e;e++){var f=d[e-3]^d[e-8]^d[e-14]^d[e-16];d[e]=(f<<1|f>>>31)&4294967295}b=a.M[0];c=a.M[1];for(var h=a.M[2],k=a.M[3],m=a.M[4],l,e=0;80>e;e++)40>e?20>e?(f=k^c&(h^k),l=1518500249):(f=c^h^k,l=1859775393):60>e?(f=c&h|k&(c|h),l=2400959708):(f=c^h^k,l=3395469782),f=(b<< -5|b>>>27)+f+m+l+d[e]&4294967295,m=k,k=h,h=(c<<30|c>>>2)&4294967295,c=b,b=f;a.M[0]=a.M[0]+b&4294967295;a.M[1]=a.M[1]+c&4294967295;a.M[2]=a.M[2]+h&4294967295;a.M[3]=a.M[3]+k&4294967295;a.M[4]=a.M[4]+m&4294967295} -ta.prototype.update=function(a,b){if(null!=a){n(b)||(b=a.length);for(var c=b-this.Wa,d=0,e=this.Wd,f=this.$b;dc?Math.max(0,a.length+c):c;if(p(a))return p(b)&&1==b.length?a.indexOf(b,c):-1;for(;cc?null:p(a)?a.charAt(c):a[c]}function Ea(a,b,c){for(var d=a.length,e=p(a)?a.split(""):a,f=0;f=arguments.length?t.slice.call(a,b):t.slice.call(a,b,c)} -function Ha(a,b){a.sort(b||Ia)}function Ia(a,b){return a>b?1:aparseFloat(a))?String(b):a})();var Ya=null,Za=null,$a=null;function ab(a,b){if(!fa(a))throw Error("encodeByteArray takes an array as a parameter");bb();for(var c=b?Za:Ya,d=[],e=0;e>2,f=(f&3)<<4|k>>4,k=(k&15)<<2|l>>6,l=l&63;m||(l=64,h||(k=64));d.push(c[u],c[f],c[k],c[l])}return d.join("")} -function bb(){if(!Ya){Ya={};Za={};$a={};for(var a=0;65>a;a++)Ya[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a),Za[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.".charAt(a),$a[Za[a]]=a,62<=a&&($a["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a)]=a)}};function cb(a,b){if(!a)throw db(b);}function db(a){return Error("Firebase Database ("+firebase.SDK_VERSION+") INTERNAL ASSERT FAILED: "+a)};function eb(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function w(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]}function fb(a,b){for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b(c,a[c])};function gb(a){var b=[];fb(a,function(a,d){ea(d)?ya(d,function(d){b.push(encodeURIComponent(a)+"="+encodeURIComponent(d))}):b.push(encodeURIComponent(a)+"="+encodeURIComponent(d))});return b.length?"&"+b.join("&"):""};var hb=firebase.Promise;function ib(){var a=this;this.reject=this.resolve=null;this.ra=new hb(function(b,c){a.resolve=b;a.reject=c})}function jb(a,b){return function(c,d){c?a.reject(c):a.resolve(d);ha(b)&&(kb(a.ra),1===b.length?b(c):b(c,d))}}function kb(a){a.then(void 0,ba)};function lb(a){return"undefined"!==typeof JSON&&n(JSON.parse)?JSON.parse(a):ma(a)}function x(a){if("undefined"!==typeof JSON&&n(JSON.stringify))a=JSON.stringify(a);else{var b=[];oa(new na,a,b);a=b.join("")}return a};function mb(a){for(var b=[],c=0,d=0;d=e&&(e-=55296,d++,cb(de?b[c++]=e:(2048>e?b[c++]=e>>6|192:(65536>e?b[c++]=e>>12|224:(b[c++]=e>>18|240,b[c++]=e>>12&63|128),b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b}function nb(a){for(var b=0,c=0;cd?b++:2048>d?b+=2:55296<=d&&56319>=d?(b+=4,c++):b+=3}return b};function y(a,b,c,d){var e;dc&&(e=0===c?"none":"no more than "+c);if(e)throw Error(a+" failed: Was called with "+d+(1===d?" argument.":" arguments.")+" Expects "+e+".");}function A(a,b,c){var d="";switch(b){case 1:d=c?"first":"First";break;case 2:d=c?"second":"Second";break;case 3:d=c?"third":"Third";break;case 4:d=c?"fourth":"Fourth";break;default:throw Error("errorPrefix called with argumentNumber > 4. Need to update it?");}return a=a+" failed: "+(d+" argument ")} -function B(a,b,c,d){if((!d||n(c))&&!ha(c))throw Error(A(a,b,d)+"must be a valid function.");}function ob(a,b,c){if(n(c)&&(!ia(c)||null===c))throw Error(A(a,b,!0)+"must be a valid context object.");};function pb(){return"undefined"!==typeof window&&!!(window.cordova||window.phonegap||window.PhoneGap)&&/ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test("undefined"!==typeof navigator&&"string"===typeof navigator.userAgent?navigator.userAgent:"")};function C(a,b){this.name=a;this.R=b}function qb(a,b){return new C(a,b)};function rb(a,b){return sb(a.name,b.name)}function tb(a,b){return sb(a,b)};function ub(a){this.uc=a;this.Cd="firebase:"}g=ub.prototype;g.set=function(a,b){null==b?this.uc.removeItem(this.Cd+a):this.uc.setItem(this.Cd+a,x(b))};g.get=function(a){a=this.uc.getItem(this.Cd+a);return null==a?null:lb(a)};g.remove=function(a){this.uc.removeItem(this.Cd+a)};g.Ze=!1;g.toString=function(){return this.uc.toString()};function vb(){this.pc={}}vb.prototype.set=function(a,b){null==b?delete this.pc[a]:this.pc[a]=b};vb.prototype.get=function(a){return eb(this.pc,a)?this.pc[a]:null};vb.prototype.remove=function(a){delete this.pc[a]};vb.prototype.Ze=!0;function wb(a){try{if("undefined"!==typeof window&&"undefined"!==typeof window[a]){var b=window[a];b.setItem("firebase:sentinel","cache");b.removeItem("firebase:sentinel");return new ub(b)}}catch(c){}return new vb}var xb=wb("localStorage"),yb=wb("sessionStorage");function zb(a,b,c,d,e){this.host=a.toLowerCase();this.domain=this.host.substr(this.host.indexOf(".")+1);this.Sc=b;this.pe=c;this.qg=d;this.gf=e||"";this.$a=xb.get("host:"+a)||this.host}function Ab(a,b){b!==a.$a&&(a.$a=b,"s-"===a.$a.substr(0,2)&&xb.set("host:"+a.host,a.$a))} -function Bb(a,b,c){D("string"===typeof b,"typeof type must == string");D("object"===typeof c,"typeof params must == object");if(b===Cb)b=(a.Sc?"wss://":"ws://")+a.$a+"/.ws?";else if(b===Db)b=(a.Sc?"https://":"http://")+a.$a+"/.lp?";else throw Error("Unknown connection type: "+b);a.host!==a.$a&&(c.ns=a.pe);var d=[];v(c,function(a,b){d.push(b+"="+a)});return b+d.join("&")}zb.prototype.toString=function(){var a=(this.Sc?"https://":"http://")+this.host;this.gf&&(a+="<"+this.gf+">");return a};function Eb(a,b){return a&&"object"===typeof a?(D(".sv"in a,"Unexpected leaf node or priority contents"),b[a[".sv"]]):a}function Fb(a,b){var c=new Gb;Hb(a,new E(""),function(a,e){Ib(c,a,Jb(e,b))});return c}function Jb(a,b){var c=a.C().H(),c=Eb(c,b),d;if(a.J()){var e=Eb(a.Ca(),b);return e!==a.Ca()||c!==a.C().H()?new Kb(e,G(c)):a}d=a;c!==a.C().H()&&(d=d.fa(new Kb(c)));a.O(H,function(a,c){var e=Jb(c,b);e!==c&&(d=d.T(a,e))});return d};var Lb=function(){var a=1;return function(){return a++}}(),D=cb,Mb=db; -function Nb(a){try{var b;bb();for(var c=$a,d=[],e=0;e>4);64!=k&&(d.push(h<<4&240|k>>2),64!=m&&d.push(k<<6&192|m))}if(8192>d.length)b=String.fromCharCode.apply(null,d);else{a="";for(c=0;ca.$b?a.update(a.zd,56-a.$b):a.update(a.zd,a.Wa-(a.$b-56));for(var d=a.Wa-1;56<=d;d--)a.Wd[d]=c&255,c/=256;ua(a,a.Wd);for(d=c=0;5>d;d++)for(var e=24;0<=e;e-=8)b[c]=a.M[d]>>e&255,++c;return ab(b)}function Pb(a){for(var b="",c=0;c.firebaseio.com instead"); -c&&"undefined"!=c||Vb("Cannot parse Firebase url. Please use https://.firebaseio.com");d||"undefined"!==typeof window&&window.location&&window.location.protocol&&-1!==window.location.protocol.indexOf("https:")&&J("Insecure Firebase access from a secure page. Please use https in calls to new Firebase().");return{jc:new zb(b,d,c,"ws"===e||"wss"===e),path:new E(f)}}function Xb(a){return ga(a)&&(a!=a||a==Number.POSITIVE_INFINITY||a==Number.NEGATIVE_INFINITY)} -function Yb(a){if("complete"===document.readyState)a();else{var b=!1,c=function(){document.body?b||(b=!0,a()):setTimeout(c,Math.floor(10))};document.addEventListener?(document.addEventListener("DOMContentLoaded",c,!1),window.addEventListener("load",c,!1)):document.attachEvent&&(document.attachEvent("onreadystatechange",function(){"complete"===document.readyState&&c()}),window.attachEvent("onload",c))}} -function sb(a,b){if(a===b)return 0;if("[MIN_NAME]"===a||"[MAX_NAME]"===b)return-1;if("[MIN_NAME]"===b||"[MAX_NAME]"===a)return 1;var c=Zb(a),d=Zb(b);return null!==c?null!==d?0==c-d?a.length-b.length:c-d:-1:null!==d?1:aa?c.push(a.substring(d,a.length)):c.push(a.substring(d,d+b));return c}function cc(a,b){if(ea(a))for(var c=0;ca,a=Math.abs(a),a>=Math.pow(2,-1022)?(d=Math.min(Math.floor(Math.log(a)/Math.LN2),1023),c=d+1023,d=Math.round(a*Math.pow(2,52-d)-Math.pow(2,52))):(c=0,d=Math.round(a/Math.pow(2,-1074))));e=[];for(a=52;a;--a)e.push(d%2?1:0),d=Math.floor(d/2);for(a=11;a;--a)e.push(c%2?1:0),c=Math.floor(c/2);e.push(b?1:0);e.reverse();b=e.join("");c="";for(a=0;64>a;a+=8)d=parseInt(b.substr(a,8),2).toString(16),1===d.length&& -(d="0"+d),c+=d;return c.toLowerCase()}var ec=/^-?\d{1,10}$/;function Zb(a){return ec.test(a)&&(a=Number(a),-2147483648<=a&&2147483647>=a)?a:null}function fc(a){try{a()}catch(b){setTimeout(function(){J("Exception was thrown by user callback.",b.stack||"");throw b;},Math.floor(0))}}function gc(a,b,c){Object.defineProperty(a,b,{get:c})}function hc(a,b){var c=setTimeout(a,b);"object"===typeof c&&c.unref&&c.unref();return c};function ic(a){var b={},c={},d={},e="";try{var f=a.split("."),b=lb(Nb(f[0])||""),c=lb(Nb(f[1])||""),e=f[2],d=c.d||{};delete c.d}catch(h){}return{tg:b,Je:c,data:d,mg:e}}function jc(a){a=ic(a);var b=a.Je;return!!a.mg&&!!b&&"object"===typeof b&&b.hasOwnProperty("iat")}function kc(a){a=ic(a).Je;return"object"===typeof a&&!0===w(a,"admin")};function lc(){}var mc={};function nc(a){return q(a.compare,a)}lc.prototype.nd=function(a,b){return 0!==this.compare(new C("[MIN_NAME]",a),new C("[MIN_NAME]",b))};lc.prototype.Hc=function(){return oc};function pc(a){D(!a.e()&&".priority"!==K(a),"Can't create PathIndex with empty path or .priority key");this.bc=a}la(pc,lc);g=pc.prototype;g.xc=function(a){return!a.P(this.bc).e()};g.compare=function(a,b){var c=a.R.P(this.bc),d=b.R.P(this.bc),c=c.sc(d);return 0===c?sb(a.name,b.name):c}; -g.Ec=function(a,b){var c=G(a),c=L.F(this.bc,c);return new C(b,c)};g.Fc=function(){var a=L.F(this.bc,qc);return new C("[MAX_NAME]",a)};g.toString=function(){return this.bc.slice().join("/")};function rc(){}la(rc,lc);g=rc.prototype;g.compare=function(a,b){var c=a.R.C(),d=b.R.C(),c=c.sc(d);return 0===c?sb(a.name,b.name):c};g.xc=function(a){return!a.C().e()};g.nd=function(a,b){return!a.C().Z(b.C())};g.Hc=function(){return oc};g.Fc=function(){return new C("[MAX_NAME]",new Kb("[PRIORITY-POST]",qc))}; -g.Ec=function(a,b){var c=G(a);return new C(b,new Kb("[PRIORITY-POST]",c))};g.toString=function(){return".priority"};var H=new rc;function sc(){}la(sc,lc);g=sc.prototype;g.compare=function(a,b){return sb(a.name,b.name)};g.xc=function(){throw Mb("KeyIndex.isDefinedOn not expected to be called.");};g.nd=function(){return!1};g.Hc=function(){return oc};g.Fc=function(){return new C("[MAX_NAME]",L)};g.Ec=function(a){D(p(a),"KeyIndex indexValue must always be a string.");return new C(a,L)};g.toString=function(){return".key"}; -var tc=new sc;function uc(){}la(uc,lc);g=uc.prototype;g.compare=function(a,b){var c=a.R.sc(b.R);return 0===c?sb(a.name,b.name):c};g.xc=function(){return!0};g.nd=function(a,b){return!a.Z(b)};g.Hc=function(){return oc};g.Fc=function(){return vc};g.Ec=function(a,b){var c=G(a);return new C(b,c)};g.toString=function(){return".value"};var wc=new uc;function xc(a,b){this.od=a;this.cc=b}xc.prototype.get=function(a){var b=w(this.od,a);if(!b)throw Error("No index defined for "+a);return b===mc?null:b};function yc(a,b,c){var d=Ja(a.od,function(d,f){var h=w(a.cc,f);D(h,"Missing index implementation for "+f);if(d===mc){if(h.xc(b.R)){for(var k=[],m=c.Wb(qb),l=M(m);l;)l.name!=b.name&&k.push(l),l=M(m);k.push(b);return zc(k,nc(h))}return mc}h=c.get(b.name);k=d;h&&(k=k.remove(new C(b.name,h)));return k.Oa(b,b.R)});return new xc(d,a.cc)} -function Ac(a,b,c){var d=Ja(a.od,function(a){if(a===mc)return a;var d=c.get(b.name);return d?a.remove(new C(b.name,d)):a});return new xc(d,a.cc)}var Bc=new xc({".priority":mc},{".priority":H});function Kb(a,b){this.B=a;D(n(this.B)&&null!==this.B,"LeafNode shouldn't be created with null/undefined value.");this.aa=b||L;Cc(this.aa);this.Db=null}var Dc=["object","boolean","number","string"];g=Kb.prototype;g.J=function(){return!0};g.C=function(){return this.aa};g.fa=function(a){return new Kb(this.B,a)};g.Q=function(a){return".priority"===a?this.aa:L};g.P=function(a){return a.e()?this:".priority"===K(a)?this.aa:L};g.Da=function(){return!1};g.Ve=function(){return null}; -g.T=function(a,b){return".priority"===a?this.fa(b):b.e()&&".priority"!==a?this:L.T(a,b).fa(this.aa)};g.F=function(a,b){var c=K(a);if(null===c)return b;if(b.e()&&".priority"!==c)return this;D(".priority"!==c||1===Ec(a),".priority must be the last token in a path");return this.T(c,L.F(N(a),b))};g.e=function(){return!1};g.Eb=function(){return 0};g.O=function(){return!1};g.H=function(a){return a&&!this.C().e()?{".value":this.Ca(),".priority":this.C().H()}:this.Ca()}; -g.hash=function(){if(null===this.Db){var a="";this.aa.e()||(a+="priority:"+Fc(this.aa.H())+":");var b=typeof this.B,a=a+(b+":"),a="number"===b?a+dc(this.B):a+this.B;this.Db=Ob(a)}return this.Db};g.Ca=function(){return this.B};g.sc=function(a){if(a===L)return 1;if(a instanceof O)return-1;D(a.J(),"Unknown node type");var b=typeof a.B,c=typeof this.B,d=xa(Dc,b),e=xa(Dc,c);D(0<=d,"Unknown leaf type: "+b);D(0<=e,"Unknown leaf type: "+c);return d===e?"object"===c?0:this.Bf;f++)b[f]=Math.floor(64*Math.random());for(f=0;12>f;f++)c+="-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(b[f]);D(20===c.length,"nextPushId: Length should be 20."); -return c}}();function Lc(){Ic.call(this,["online"]);this.hc=!0;if("undefined"!==typeof window&&"undefined"!==typeof window.addEventListener&&!pb()){var a=this;window.addEventListener("online",function(){a.hc||(a.hc=!0,a.Ge("online",!0))},!1);window.addEventListener("offline",function(){a.hc&&(a.hc=!1,a.Ge("online",!1))},!1)}}la(Lc,Ic);Lc.prototype.Ue=function(a){D("online"===a,"Unknown event type: "+a);return[this.hc]};ca(Lc);function Mc(){Ic.call(this,["visible"]);var a,b;"undefined"!==typeof document&&"undefined"!==typeof document.addEventListener&&("undefined"!==typeof document.hidden?(b="visibilitychange",a="hidden"):"undefined"!==typeof document.mozHidden?(b="mozvisibilitychange",a="mozHidden"):"undefined"!==typeof document.msHidden?(b="msvisibilitychange",a="msHidden"):"undefined"!==typeof document.webkitHidden&&(b="webkitvisibilitychange",a="webkitHidden"));this.Mb=!0;if(b){var c=this;document.addEventListener(b, -function(){var b=!document[a];b!==c.Mb&&(c.Mb=b,c.Ge("visible",b))},!1)}}la(Mc,Ic);Mc.prototype.Ue=function(a){D("visible"===a,"Unknown event type: "+a);return[this.Mb]};ca(Mc);function E(a,b){if(1==arguments.length){this.o=a.split("/");for(var c=0,d=0;d=a.o.length?null:a.o[a.Y]}function Ec(a){return a.o.length-a.Y}function N(a){var b=a.Y;b=this.o.length)return null;for(var a=[],b=this.Y;b=this.o.length};g.Z=function(a){if(Ec(this)!==Ec(a))return!1;for(var b=this.Y,c=a.Y;b<=this.o.length;b++,c++)if(this.o[b]!==a.o[c])return!1;return!0}; -g.contains=function(a){var b=this.Y,c=a.Y;if(Ec(this)>Ec(a))return!1;for(;bb?c=c.left:0c?d=d.left:0e)a=this.le?a.left:a.right;else if(0===e){this.Pa.push(a);break}else this.Pa.push(a),a=this.le?a.right:a.left} -function M(a){if(0===a.Pa.length)return null;var b=a.Pa.pop(),c;c=a.Hd?a.Hd(b.key,b.value):{key:b.key,value:b.value};if(a.le)for(b=b.left;!b.e();)a.Pa.push(b),b=b.right;else for(b=b.right;!b.e();)a.Pa.push(b),b=b.left;return c}function cd(a){if(0===a.Pa.length)return null;var b;b=a.Pa;b=b[b.length-1];return a.Hd?a.Hd(b.key,b.value):{key:b.key,value:b.value}}function dd(a,b,c,d,e){this.key=a;this.value=b;this.color=null!=c?c:!0;this.left=null!=d?d:$c;this.right=null!=e?e:$c}g=dd.prototype; -g.X=function(a,b,c,d,e){return new dd(null!=a?a:this.key,null!=b?b:this.value,null!=c?c:this.color,null!=d?d:this.left,null!=e?e:this.right)};g.count=function(){return this.left.count()+1+this.right.count()};g.e=function(){return!1};g.ha=function(a){return this.left.ha(a)||a(this.key,this.value)||this.right.ha(a)};function ed(a){return a.left.e()?a:ed(a.left)}g.Gc=function(){return ed(this).key};g.ec=function(){return this.right.e()?this.key:this.right.ec()}; -g.Oa=function(a,b,c){var d,e;e=this;d=c(a,e.key);e=0>d?e.X(null,null,null,e.left.Oa(a,b,c),null):0===d?e.X(null,b,null,null,null):e.X(null,null,null,null,e.right.Oa(a,b,c));return gd(e)};function hd(a){if(a.left.e())return $c;a.left.ea()||a.left.left.ea()||(a=id(a));a=a.X(null,null,null,hd(a.left),null);return gd(a)} -g.remove=function(a,b){var c,d;c=this;if(0>b(a,c.key))c.left.e()||c.left.ea()||c.left.left.ea()||(c=id(c)),c=c.X(null,null,null,c.left.remove(a,b),null);else{c.left.ea()&&(c=jd(c));c.right.e()||c.right.ea()||c.right.left.ea()||(c=kd(c),c.left.left.ea()&&(c=jd(c),c=kd(c)));if(0===b(a,c.key)){if(c.right.e())return $c;d=ed(c.right);c=c.X(d.key,d.value,null,null,hd(c.right))}c=c.X(null,null,null,null,c.right.remove(a,b))}return gd(c)};g.ea=function(){return this.color}; -function gd(a){a.right.ea()&&!a.left.ea()&&(a=ld(a));a.left.ea()&&a.left.left.ea()&&(a=jd(a));a.left.ea()&&a.right.ea()&&(a=kd(a));return a}function id(a){a=kd(a);a.right.left.ea()&&(a=a.X(null,null,null,null,jd(a.right)),a=ld(a),a=kd(a));return a}function ld(a){return a.right.X(null,null,a.color,a.X(null,null,!0,null,a.right.left),null)}function jd(a){return a.left.X(null,null,a.color,null,a.X(null,null,!0,a.left.right,null))} -function kd(a){return a.X(null,null,!a.color,a.left.X(null,null,!a.left.color,null,null),a.right.X(null,null,!a.right.color,null,null))}function md(){}g=md.prototype;g.X=function(){return this};g.Oa=function(a,b){return new dd(a,b,null)};g.remove=function(){return this};g.count=function(){return 0};g.e=function(){return!0};g.ha=function(){return!1};g.Gc=function(){return null};g.ec=function(){return null};g.ea=function(){return!1};var $c=new md;function O(a,b,c){this.k=a;(this.aa=b)&&Cc(this.aa);a.e()&&D(!this.aa||this.aa.e(),"An empty node cannot have a priority");this.yb=c;this.Db=null}g=O.prototype;g.J=function(){return!1};g.C=function(){return this.aa||L};g.fa=function(a){return this.k.e()?this:new O(this.k,a,this.yb)};g.Q=function(a){if(".priority"===a)return this.C();a=this.k.get(a);return null===a?L:a};g.P=function(a){var b=K(a);return null===b?this:this.Q(b).P(N(a))};g.Da=function(a){return null!==this.k.get(a)}; -g.T=function(a,b){D(b,"We should always be passing snapshot nodes");if(".priority"===a)return this.fa(b);var c=new C(a,b),d,e;b.e()?(d=this.k.remove(a),c=Ac(this.yb,c,this.k)):(d=this.k.Oa(a,b),c=yc(this.yb,c,this.k));e=d.e()?L:this.aa;return new O(d,e,c)};g.F=function(a,b){var c=K(a);if(null===c)return b;D(".priority"!==K(a)||1===Ec(a),".priority must be the last token in a path");var d=this.Q(c).F(N(a),b);return this.T(c,d)};g.e=function(){return this.k.e()};g.Eb=function(){return this.k.count()}; -var nd=/^(0|[1-9]\d*)$/;g=O.prototype;g.H=function(a){if(this.e())return null;var b={},c=0,d=0,e=!0;this.O(H,function(f,h){b[f]=h.H(a);c++;e&&nd.test(f)?d=Math.max(d,Number(f)):e=!1});if(!a&&e&&d<2*c){var f=[],h;for(h in b)f[h]=b[h];return f}a&&!this.C().e()&&(b[".priority"]=this.C().H());return b};g.hash=function(){if(null===this.Db){var a="";this.C().e()||(a+="priority:"+Fc(this.C().H())+":");this.O(H,function(b,c){var d=c.hash();""!==d&&(a+=":"+b+":"+d)});this.Db=""===a?"":Ob(a)}return this.Db}; -g.Ve=function(a,b,c){return(c=od(this,c))?(a=ad(c,new C(a,b)))?a.name:null:ad(this.k,a)};function pd(a,b){var c;c=(c=od(a,b))?(c=c.Gc())&&c.name:a.k.Gc();return c?new C(c,a.k.get(c)):null}function qd(a,b){var c;c=(c=od(a,b))?(c=c.ec())&&c.name:a.k.ec();return c?new C(c,a.k.get(c)):null}g.O=function(a,b){var c=od(this,a);return c?c.ha(function(a){return b(a.name,a.R)}):this.k.ha(b)};g.Wb=function(a){return this.Xb(a.Hc(),a)}; -g.Xb=function(a,b){var c=od(this,b);if(c)return c.Xb(a,function(a){return a});for(var c=this.k.Xb(a.name,qb),d=cd(c);null!=d&&0>b.compare(d,a);)M(c),d=cd(c);return c};g.We=function(a){return this.Zb(a.Fc(),a)};g.Zb=function(a,b){var c=od(this,b);if(c)return c.Zb(a,function(a){return a});for(var c=this.k.Zb(a.name,qb),d=cd(c);null!=d&&010485760/3&&10485760=this.g.compare(this.Uc,a)&&0>=this.g.compare(a,this.vc)};g.F=function(a,b,c,d,e,f){this.matches(new C(b,c))||(c=L);return this.he.F(a,b,c,d,e,f)}; -g.ya=function(a,b,c){b.J()&&(b=L);var d=b.nb(this.g),d=d.fa(L),e=this;b.O(H,function(a,b){e.matches(new C(a,b))||(d=d.T(a,L))});return this.he.ya(a,d,c)};g.fa=function(a){return a};g.Na=function(){return!0};g.Ub=function(){return this.he};function Re(a){this.sa=new Se(a);this.g=a.g;D(a.xa,"Only valid if limit has been set");this.oa=a.oa;this.Ib=!jf(a)}g=Re.prototype;g.F=function(a,b,c,d,e,f){this.sa.matches(new C(b,c))||(c=L);return a.Q(b).Z(c)?a:a.Eb()=this.g.compare(this.sa.Uc,f):0>=this.g.compare(f,this.sa.vc))d=d.T(f.name,f.R),e++;else break}}else{d=b.nb(this.g);d=d.fa(L);var k,m,l;if(this.Ib){b=d.We(this.g);k=this.sa.vc;m=this.sa.Uc;var u=nc(this.g);l=function(a,b){return u(b,a)}}else b=d.Wb(this.g),k=this.sa.Uc, -m=this.sa.vc,l=nc(this.g);for(var e=0,z=!1;0=l(k,f)&&(z=!0),(h=z&&e=l(f,m))?e++:d=d.T(f.name,L)}return this.sa.Ub().ya(a,d,c)};g.fa=function(a){return a};g.Na=function(){return!0};g.Ub=function(){return this.sa.Ub()}; -function kf(a,b,c,d,e,f){var h;if(a.Ib){var k=nc(a.g);h=function(a,b){return k(b,a)}}else h=nc(a.g);D(b.Eb()==a.oa,"");var m=new C(c,d),l=a.Ib?pd(b,a.g):qd(b,a.g),u=a.sa.matches(m);if(b.Da(c)){for(var z=b.Q(c),l=e.fe(a.g,l,a.Ib);null!=l&&(l.name==c||b.Da(l.name));)l=e.fe(a.g,l,a.Ib);e=null==l?1:h(l,m);if(u&&!d.e()&&0<=e)return null!=f&&df(f,new S(Ie,d,c,z)),b.T(c,d);null!=f&&df(f,new S(Le,z,c));b=b.T(c,L);return null!=l&&a.sa.matches(l)?(null!=f&&df(f,new S(Me,l.R,l.name)),b.T(l.name,l.R)):b}return d.e()? -b:u&&0<=h(l,m)?(null!=f&&(df(f,new S(Le,l.R,l.name)),df(f,new S(Me,d,c))),b.T(c,d).T(l.name,L)):b};function S(a,b,c,d){this.type=a;this.Ja=b;this.Xa=c;this.qe=d;this.Dd=void 0}function Ee(a){return new S(Ne,a)}var Me="child_added",Le="child_removed",Ie="child_changed",Je="child_moved",Ne="value";function xe(){this.fb={}} -function df(a,b){var c=b.type,d=b.Xa;D(c==Me||c==Ie||c==Le,"Only child changes supported for tracking");D(".priority"!==d,"Only non-priority child changes can be tracked.");var e=w(a.fb,d);if(e){var f=e.type;if(c==Me&&f==Le)a.fb[d]=new S(Ie,b.Ja,d,e.Ja);else if(c==Le&&f==Me)delete a.fb[d];else if(c==Le&&f==Ie)a.fb[d]=new S(Le,e.qe,d);else if(c==Ie&&f==Me)a.fb[d]=new S(Me,b.Ja,d);else if(c==Ie&&f==Ie)a.fb[d]=new S(Ie,b.Ja,d,e.qe);else throw Mb("Illegal combination of changes: "+b+" occurred after "+ -e);}else a.fb[d]=b};function lf(){this.Rb=this.na=this.Kb=this.ka=this.xa=!1;this.oa=0;this.mb="";this.dc=null;this.zb="";this.ac=null;this.xb="";this.g=H}var mf=new lf;function jf(a){return""===a.mb?a.ka:"l"===a.mb}function ff(a){D(a.ka,"Only valid if start has been set");return a.dc}function ef(a){D(a.ka,"Only valid if start has been set");return a.Kb?a.zb:"[MIN_NAME]"}function hf(a){D(a.na,"Only valid if end has been set");return a.ac} -function gf(a){D(a.na,"Only valid if end has been set");return a.Rb?a.xb:"[MAX_NAME]"}function nf(a){var b=new lf;b.xa=a.xa;b.oa=a.oa;b.ka=a.ka;b.dc=a.dc;b.Kb=a.Kb;b.zb=a.zb;b.na=a.na;b.ac=a.ac;b.Rb=a.Rb;b.xb=a.xb;b.g=a.g;b.mb=a.mb;return b}g=lf.prototype;g.ne=function(a){var b=nf(this);b.xa=!0;b.oa=a;b.mb="l";return b};g.oe=function(a){var b=nf(this);b.xa=!0;b.oa=a;b.mb="r";return b};g.Nd=function(a,b){var c=nf(this);c.ka=!0;n(a)||(a=null);c.dc=a;null!=b?(c.Kb=!0,c.zb=b):(c.Kb=!1,c.zb="");return c}; -g.gd=function(a,b){var c=nf(this);c.na=!0;n(a)||(a=null);c.ac=a;n(b)?(c.Rb=!0,c.xb=b):(c.vg=!1,c.xb="");return c};function of(a,b){var c=nf(a);c.g=b;return c}function pf(a){var b={};a.ka&&(b.sp=a.dc,a.Kb&&(b.sn=a.zb));a.na&&(b.ep=a.ac,a.Rb&&(b.en=a.xb));if(a.xa){b.l=a.oa;var c=a.mb;""===c&&(c=jf(a)?"l":"r");b.vf=c}a.g!==H&&(b.i=a.g.toString());return b}function T(a){return!(a.ka||a.na||a.xa)}function qf(a){return T(a)&&a.g==H} -function rf(a){var b={};if(qf(a))return b;var c;a.g===H?c="$priority":a.g===wc?c="$value":a.g===tc?c="$key":(D(a.g instanceof pc,"Unrecognized index type!"),c=a.g.toString());b.orderBy=x(c);a.ka&&(b.startAt=x(a.dc),a.Kb&&(b.startAt+=","+x(a.zb)));a.na&&(b.endAt=x(a.ac),a.Rb&&(b.endAt+=","+x(a.xb)));a.xa&&(jf(a)?b.limitToFirst=a.oa:b.limitToLast=a.oa);return b}g.toString=function(){return x(pf(this))};function sf(a){this.W=a}var tf=new sf(new vd(null));function uf(a,b,c){if(b.e())return new sf(new vd(c));var d=zd(a.W,b);if(null!=d){var e=d.path,d=d.value;b=P(e,b);d=d.F(b,c);return new sf(a.W.set(e,d))}a=Ad(a.W,b,new vd(c));return new sf(a)}function vf(a,b,c){var d=a;fb(c,function(a,c){d=uf(d,b.n(a),c)});return d}sf.prototype.Ed=function(a){if(a.e())return tf;a=Ad(this.W,a,R);return new sf(a)};function wf(a,b){var c=zd(a.W,b);return null!=c?a.W.get(c.path).P(P(c.path,b)):null} -function xf(a){var b=[],c=a.W.value;null!=c?c.J()||c.O(H,function(a,c){b.push(new C(a,c))}):a.W.children.ha(function(a,c){null!=c.value&&b.push(new C(a,c.value))});return b}function yf(a,b){if(b.e())return a;var c=wf(a,b);return null!=c?new sf(new vd(c)):new sf(a.W.subtree(b))}sf.prototype.e=function(){return this.W.e()};sf.prototype.apply=function(a){return zf(Q,this.W,a)}; -function zf(a,b,c){if(null!=b.value)return c.F(a,b.value);var d=null;b.children.ha(function(b,f){".priority"===b?(D(null!==f.value,"Priority writes must always be leaf nodes"),d=f.value):c=zf(a.n(b),f,c)});c.P(a).e()||null===d||(c=c.F(a.n(".priority"),d));return c};function Af(){this.Jd=L}Af.prototype.j=function(a){return this.Jd.P(a)};Af.prototype.toString=function(){return this.Jd.toString()};function Bf(a){this.oc=a}Bf.prototype.getToken=function(a){return this.oc.INTERNAL.getToken(a).then(null,function(a){return a&&"auth/token-not-initialized"===a.code?(I("Got auth/token-not-initialized error. Treating as null token."),null):Promise.reject(a)})};function Cf(a,b){a.oc.INTERNAL.addAuthTokenListener(b)};function Df(){this.S=tf;this.la=[];this.Bc=-1}function Ef(a,b){for(var c=0;c=b&&Ff(h,c.path)?d=!1:c.path.contains(h.path)&&(e=!0));f--}if(d){if(e)this.S=Gf(this.la,Hf,Q),this.Bc=0h.status){try{b=lb(h.responseText)}catch(c){J("Failed to parse JSON response for "+f+": "+h.responseText)}d(null, -b)}else 401!==h.status&&404!==h.status&&J("Got unsuccessful REST response for "+f+" Status: "+h.status),d(h.status);d=null}};h.open("GET",f,!0);h.send()})};function Uf(a){this.te=a;this.Bd=[];this.Qb=0;this.Yd=-1;this.Fb=null}function Vf(a,b,c){a.Yd=b;a.Fb=c;a.Yd=a.length){var b=Number(a);if(!isNaN(b)){e.Fe=b;e.frames=[];a=null;break a}}e.Fe=1;e.frames=[]}null!==a&&ag(e,a)}};this.Ia.onerror=function(a){e.f("WebSocket error. Closing connection.");(a=a.message||a.data)&&e.f(a);e.bb()}};Yf.prototype.start=function(){}; -Yf.isAvailable=function(){var a=!1;if("undefined"!==typeof navigator&&navigator.userAgent){var b=navigator.userAgent.match(/Android ([0-9]{0,}\.[0-9]{0,})/);b&&1parseFloat(b[1])&&(a=!0)}return!a&&null!==Xf&&!Zf};Yf.responsesRequiredToBeHealthy=2;Yf.healthyTimeout=3E4;g=Yf.prototype;g.sd=function(){xb.remove("previous_websocket_failure")};function ag(a,b){a.frames.push(b);if(a.frames.length==a.Fe){var c=a.frames.join("");a.frames=null;c=lb(c);a.Xf(c)}} -g.send=function(a){$f(this);a=x(a);this.qb+=a.length;Mf(this.Va,"bytes_sent",a.length);a=bc(a,16384);1document.domain="'+document.domain+'";\x3c/script>');a=""+a+"";try{this.Ea.gb.open(),this.Ea.gb.write(a),this.Ea.gb.close()}catch(f){I("frame writing exception"),f.stack&&I(f.stack),I(f)}} -fg.prototype.close=function(){this.Ud=!1;if(this.Ea){this.Ea.gb.body.innerHTML="";var a=this;setTimeout(function(){null!==a.Ea&&(document.body.removeChild(a.Ea),a.Ea=null)},Math.floor(0))}var b=this.ib;b&&(this.ib=null,b())}; -function ig(a){if(a.Ud&&a.Kd&&a.ve.count()<(0=a.Qc[0].Pe.length+30+c.length){var e=a.Qc.shift(),c=c+"&seg"+d+"="+e.jg+"&ts"+d+"="+e.pg+"&d"+d+"="+e.Pe;d++}else break;jg(a,b+c,a.$d);return!0}return!1}function jg(a,b,c){function d(){a.ve.remove(c);ig(a)}a.ve.add(c,1);var e=setTimeout(d,Math.floor(25E3));hg(a,b,function(){clearTimeout(e);d()})} -function hg(a,b,c){setTimeout(function(){try{if(a.Kd){var d=a.Ea.gb.createElement("script");d.type="text/javascript";d.async=!0;d.src=b;d.onload=d.onreadystatechange=function(){var a=d.readyState;a&&"loaded"!==a&&"complete"!==a||(d.onload=d.onreadystatechange=null,d.parentNode&&d.parentNode.removeChild(d),c())};d.onerror=function(){I("Long-poll script failed to load: "+b);a.Kd=!1;a.close()};a.Ea.gb.body.appendChild(d)}}catch(e){}},Math.floor(1))};function kg(a){lg(this,a)}var mg=[cg,Yf];function lg(a,b){var c=Yf&&Yf.isAvailable(),d=c&&!(xb.Ze||!0===xb.get("previous_websocket_failure"));b.qg&&(c||J("wss:// URL used, but browser isn't known to support websockets. Trying anyway."),d=!0);if(d)a.Wc=[Yf];else{var e=a.Wc=[];cc(mg,function(a,b){b&&b.isAvailable()&&e.push(b)})}}function ng(a){if(0=a.pf?(a.f("Secondary connection is healthy."),a.Bb=!0,a.D.sd(),a.D.start(),a.f("sending client ack on secondary"),a.D.send({t:"c",d:{t:"a",d:{}}}),a.f("Ending transmission on primary"),a.I.send({t:"c",d:{t:"n",d:{}}}),a.Xc=a.D,ug(a)):(a.f("sending ping on secondary."),a.D.send({t:"c",d:{t:"p",d:{}}}))}og.prototype.wd=function(a){wg(this);this.te(a)};function wg(a){a.Bb||(a.xe--,0>=a.xe&&(a.f("Primary connection is healthy."),a.Bb=!0,a.I.sd()))} -function tg(a,b){a.D=new b("c:"+a.id+":"+a.Le++,a.L,a.qf);a.pf=b.responsesRequiredToBeHealthy||0;a.D.open(qg(a,a.D),rg(a,a.D));hc(function(){a.D&&(a.f("Timed out trying to upgrade."),a.D.close())},Math.floor(6E4))}function sg(a,b,c){a.f("Realtime connection established.");a.I=b;a.Ua=1;a.Lc&&(a.Lc(c,a.qf),a.Lc=null);0===a.xe?(a.f("Primary connection is healthy."),a.Bb=!0):hc(function(){xg(a)},Math.floor(5E3))} -function xg(a){a.Bb||1!==a.Ua||(a.f("sending ping on primary."),zg(a,{t:"c",d:{t:"p",d:{}}}))}function zg(a,b){if(1!==a.Ua)throw"Connection is not connected";a.Xc.send(b)}og.prototype.close=function(){2!==this.Ua&&(this.f("Closing realtime connection."),this.Ua=2,vg(this),this.ia&&(this.ia(),this.ia=null))};function vg(a){a.f("Shutting down all connections");a.I&&(a.I.close(),a.I=null);a.D&&(a.D.close(),a.D=null);a.md&&(clearTimeout(a.md),a.md=null)};function Ag(a,b,c,d,e,f){this.id=Bg++;this.f=Tb("p:"+this.id+":");this.qd={};this.$={};this.pa=[];this.Oc=0;this.Kc=[];this.ma=!1;this.Sa=1E3;this.td=3E5;this.Gb=b;this.Jc=c;this.ue=d;this.L=a;this.ob=this.Fa=this.Cb=this.ze=null;this.$c=e;this.de=!1;this.ke=0;if(f)throw Error("Auth override specified in options, but not supported on non Node.js platforms");this.Vd=f;this.ub=null;this.Mb=!1;this.Gd={};this.ig=0;this.Re=!0;this.Ac=this.me=null;Cg(this,0);Mc.Vb().gc("visible",this.Zf,this);-1===a.host.indexOf("fblocal")&& -Lc.Vb().gc("online",this.Yf,this)}var Bg=0,Dg=0;g=Ag.prototype;g.ua=function(a,b,c){var d=++this.ig;a={r:d,a:a,b:b};this.f(x(a));D(this.ma,"sendRequest call when we're not connected not allowed.");this.Fa.ua(a);c&&(this.Gd[d]=c)}; -g.$e=function(a,b,c,d){var e=a.ja(),f=a.path.toString();this.f("Listen called for "+f+" "+e);this.$[f]=this.$[f]||{};D(qf(a.m)||!T(a.m),"listen() called for non-default but complete query");D(!this.$[f][e],"listen() called twice for same path/queryId.");a={G:d,ld:b,eg:a,tag:c};this.$[f][e]=a;this.ma&&Eg(this,a)}; -function Eg(a,b){var c=b.eg,d=c.path.toString(),e=c.ja();a.f("Listen on "+d+" for "+e);var f={p:d};b.tag&&(f.q=pf(c.m),f.t=b.tag);f.h=b.ld();a.ua("q",f,function(f){var k=f.d,m=f.s;if(k&&"object"===typeof k&&eb(k,"w")){var l=w(k,"w");ea(l)&&0<=xa(l,"no_index")&&J("Using an unspecified index. Consider adding "+('".indexOn": "'+c.m.g.toString()+'"')+" at "+c.path.toString()+" to your security rules for better performance")}(a.$[d]&&a.$[d][e])===b&&(a.f("listen response",f),"ok"!==m&&Fg(a,d,e),b.G&&b.G(m, -k))})}g.kf=function(a){this.ob=a;this.f("Auth token refreshed");this.ob?Gg(this):this.ma&&this.ua("unauth",{},function(){});if(a&&40===a.length||kc(a))this.f("Admin auth credential detected. Reducing max reconnect time."),this.td=3E4};function Gg(a){if(a.ma&&a.ob){var b=a.ob,c=jc(b)?"auth":"gauth",d={cred:b};null===a.Vd?d.noauth=!0:"object"===typeof a.Vd&&(d.authvar=a.Vd);a.ua(c,d,function(c){var d=c.s;c=c.d||"error";a.ob===b&&("ok"===d?a.ke=0:Hg(a,d,c))})}} -g.uf=function(a,b){var c=a.path.toString(),d=a.ja();this.f("Unlisten called for "+c+" "+d);D(qf(a.m)||!T(a.m),"unlisten() called for non-default but complete query");if(Fg(this,c,d)&&this.ma){var e=pf(a.m);this.f("Unlisten on "+c+" for "+d);c={p:c};b&&(c.q=e,c.t=b);this.ua("n",c)}};g.re=function(a,b,c){this.ma?Ig(this,"o",a,b,c):this.Kc.push({we:a,action:"o",data:b,G:c})};g.cf=function(a,b,c){this.ma?Ig(this,"om",a,b,c):this.Kc.push({we:a,action:"om",data:b,G:c})}; -g.xd=function(a,b){this.ma?Ig(this,"oc",a,null,b):this.Kc.push({we:a,action:"oc",data:null,G:b})};function Ig(a,b,c,d,e){c={p:c,d:d};a.f("onDisconnect "+b,c);a.ua(b,c,function(a){e&&setTimeout(function(){e(a.s,a.d)},Math.floor(0))})}g.put=function(a,b,c,d){Jg(this,"p",a,b,c,d)};g.af=function(a,b,c,d){Jg(this,"m",a,b,c,d)};function Jg(a,b,c,d,e,f){d={p:c,d:d};n(f)&&(d.h=f);a.pa.push({action:b,mf:d,G:e});a.Oc++;b=a.pa.length-1;a.ma?Kg(a,b):a.f("Buffering put: "+c)} -function Kg(a,b){var c=a.pa[b].action,d=a.pa[b].mf,e=a.pa[b].G;a.pa[b].fg=a.ma;a.ua(c,d,function(d){a.f(c+" response",d);delete a.pa[b];a.Oc--;0===a.Oc&&(a.pa=[]);e&&e(d.s,d.d)})}g.ye=function(a){this.ma&&(a={c:a},this.f("reportStats",a),this.ua("s",a,function(a){"ok"!==a.s&&this.f("reportStats","Error sending stats: "+a.d)}))}; -g.wd=function(a){if("r"in a){this.f("from server: "+x(a));var b=a.r,c=this.Gd[b];c&&(delete this.Gd[b],c(a.b))}else{if("error"in a)throw"A server-side error has occurred: "+a.error;"a"in a&&(b=a.a,a=a.b,this.f("handleServerMessage",b,a),"d"===b?this.Gb(a.p,a.d,!1,a.t):"m"===b?this.Gb(a.p,a.d,!0,a.t):"c"===b?Lg(this,a.p,a.q):"ac"===b?Hg(this,a.s,a.d):"sd"===b?this.ze?this.ze(a):"msg"in a&&"undefined"!==typeof console&&console.log("FIREBASE: "+a.msg.replace("\n","\nFIREBASE: ")):Ub("Unrecognized action received from server: "+ -x(b)+"\nAre you using the latest client?"))}};g.Lc=function(a,b){this.f("connection ready");this.ma=!0;this.Ac=(new Date).getTime();this.ue({serverTimeOffset:a-(new Date).getTime()});this.Cb=b;if(this.Re){var c={};c["sdk.js."+firebase.SDK_VERSION.replace(/\./g,"-")]=1;pb()?c["framework.cordova"]=1:"object"===typeof navigator&&"ReactNative"===navigator.product&&(c["framework.reactnative"]=1);this.ye(c)}Mg(this);this.Re=!1;this.Jc(!0)}; -function Cg(a,b){D(!a.Fa,"Scheduling a connect when we're already connected/ing?");a.ub&&clearTimeout(a.ub);a.ub=setTimeout(function(){a.ub=null;Ng(a)},Math.floor(b))}g.Zf=function(a){a&&!this.Mb&&this.Sa===this.td&&(this.f("Window became visible. Reducing delay."),this.Sa=1E3,this.Fa||Cg(this,0));this.Mb=a};g.Yf=function(a){a?(this.f("Browser went online."),this.Sa=1E3,this.Fa||Cg(this,0)):(this.f("Browser went offline. Killing connection."),this.Fa&&this.Fa.close())}; -g.df=function(){this.f("data client disconnected");this.ma=!1;this.Fa=null;for(var a=0;af.Bc,"Stacking an older write on top of newer ones");n(h)||(h=!0);f.la.push({path:b,Ga:c,Zc:d,visible:h});h&&(f.S=uf(f.S,b,c));f.Bc=d;return e?ch(a,new ce(fe,b,c)):[]}function dh(a,b,c,d){var e=a.jb;D(d>e.Bc,"Stacking an older merge on top of newer ones");e.la.push({path:b,children:c,Zc:d,visible:!0});e.S=vf(e.S,b,c);e.Bc=d;c=xd(c);return ch(a,new ae(fe,b,c))} -function eh(a,b,c){c=c||!1;var d=Ef(a.jb,b);if(a.jb.Ed(b)){var e=R;null!=d.Ga?e=e.set(Q,!0):fb(d.children,function(a,b){e=e.set(new E(a),b)});return ch(a,new de(d.path,e,c))}return[]}function fh(a,b,c){c=xd(c);return ch(a,new ae(ie,b,c))}function gh(a,b,c,d){d=hh(a,d);if(null!=d){var e=ih(d);d=e.path;e=e.Hb;b=P(d,b);c=new ce(new he(!1,!0,e,!0),b,c);return jh(a,d,c)}return[]} -function kh(a,b,c,d){if(d=hh(a,d)){var e=ih(d);d=e.path;e=e.Hb;b=P(d,b);c=xd(c);c=new ae(new he(!1,!0,e,!0),b,c);return jh(a,d,c)}return[]} -ah.prototype.Nb=function(a,b){var c=a.path,d=null,e=!1;Fd(this.wa,c,function(a,b){var f=P(a,c);d=d||b.hb(f);e=e||null!=Yg(b)});var f=this.wa.get(c);f?(e=e||null!=Yg(f),d=d||f.hb(Q)):(f=new Xg,this.wa=this.wa.set(c,f));var h;null!=d?h=!0:(h=!1,d=L,Jd(this.wa.subtree(c),function(a,b){var c=b.hb(Q);c&&(d=d.T(a,c))}));var k=null!=$g(f,a);if(!k&&!T(a.m)){var m=lh(a);D(!(m in this.ic),"View does not exist, but we have a tag");var l=mh++;this.ic[m]=l;this.De["_"+l]=m}h=f.Nb(a,b,new If(c,this.jb),d,h);k|| -e||(f=$g(f,a),h=h.concat(nh(this,a,f)));return h}; -ah.prototype.kb=function(a,b,c){var d=a.path,e=this.wa.get(d),f=[];if(e&&("default"===a.ja()||null!=$g(e,a))){f=e.kb(a,b,c);e.e()&&(this.wa=this.wa.remove(d));e=f.hg;f=f.Kf;b=-1!==Ea(e,function(a){return T(a.m)});var h=Dd(this.wa,d,function(a,b){return null!=Yg(b)});if(b&&!h&&(d=this.wa.subtree(d),!d.e()))for(var d=oh(d),k=0;k=a)throw Error("Query.limitToFirst: First argument must be a positive integer.");if(this.m.xa)throw Error("Query.limitToFirst: Limit was already set (by another call to limit, limitToFirst, or limitToLast).");return new X(this.u,this.path,this.m.ne(a),this.Nc)}; -g.oe=function(a){y("Query.limitToLast",1,1,arguments.length);if(!ga(a)||Math.floor(a)!==a||0>=a)throw Error("Query.limitToLast: First argument must be a positive integer.");if(this.m.xa)throw Error("Query.limitToLast: Limit was already set (by another call to limit, limitToFirst, or limitToLast).");return new X(this.u,this.path,this.m.oe(a),this.Nc)}; -g.ag=function(a){y("Query.orderByChild",1,1,arguments.length);if("$key"===a)throw Error('Query.orderByChild: "$key" is invalid. Use Query.orderByKey() instead.');if("$priority"===a)throw Error('Query.orderByChild: "$priority" is invalid. Use Query.orderByPriority() instead.');if("$value"===a)throw Error('Query.orderByChild: "$value" is invalid. Use Query.orderByValue() instead.');Vd("Query.orderByChild",a);Sh(this,"Query.orderByChild");var b=new E(a);if(b.e())throw Error("Query.orderByChild: cannot pass in empty path. Use Query.orderByValue() instead."); -b=new pc(b);b=of(this.m,b);Qh(b);return new X(this.u,this.path,b,!0)};g.bg=function(){y("Query.orderByKey",0,0,arguments.length);Sh(this,"Query.orderByKey");var a=of(this.m,tc);Qh(a);return new X(this.u,this.path,a,!0)};g.cg=function(){y("Query.orderByPriority",0,0,arguments.length);Sh(this,"Query.orderByPriority");var a=of(this.m,H);Qh(a);return new X(this.u,this.path,a,!0)}; -g.dg=function(){y("Query.orderByValue",0,0,arguments.length);Sh(this,"Query.orderByValue");var a=of(this.m,wc);Qh(a);return new X(this.u,this.path,a,!0)};g.Nd=function(a,b){y("Query.startAt",0,2,arguments.length);Od("Query.startAt",a,this.path,!0);Ud("Query.startAt",b);var c=this.m.Nd(a,b);Rh(c);Qh(c);if(this.m.ka)throw Error("Query.startAt: Starting point was already set (by another call to startAt or equalTo).");n(a)||(b=a=null);return new X(this.u,this.path,c,this.Nc)}; -g.gd=function(a,b){y("Query.endAt",0,2,arguments.length);Od("Query.endAt",a,this.path,!0);Ud("Query.endAt",b);var c=this.m.gd(a,b);Rh(c);Qh(c);if(this.m.na)throw Error("Query.endAt: Ending point was already set (by another call to endAt or equalTo).");return new X(this.u,this.path,c,this.Nc)}; -g.If=function(a,b){y("Query.equalTo",1,2,arguments.length);Od("Query.equalTo",a,this.path,!1);Ud("Query.equalTo",b);if(this.m.ka)throw Error("Query.equalTo: Starting point was already set (by another call to startAt or equalTo).");if(this.m.na)throw Error("Query.equalTo: Ending point was already set (by another call to endAt or equalTo).");return this.Nd(a,b).gd(a,b)}; -g.toString=function(){y("Query.toString",0,0,arguments.length);for(var a=this.path,b="",c=a.Y;c0&&void 0!==arguments[0]?arguments[0]:e();return"function"!=typeof t[n]&&i("invalid-app-argument",{name:n}),t[n]()};return void 0!==o&&(0,f.deepExtend)(s,o),m[n]=s,h.prototype[n]=function(){for(var e=this._getService.bind(this,n),t=arguments.length,r=Array(t),o=0;o1&&void 0!==arguments[1]?arguments[1]:p;if(this.checkDestroyed_(),this.services_[e]||(this.services_[e]={}),!this.services_[e][t]){var n=t!==p?t:void 0,r=this.firebase_.INTERNAL.factories[e](this,this.extendApp.bind(this),n);this.services_[e][t]=r}return this.services_[e][t]}},{key:"extendApp",value:function(e){var t=this;(0,f.deepExtend)(this,e),e.INTERNAL&&e.INTERNAL.addAuthTokenListener&&(d.forEach(function(e){t.INTERNAL.addAuthTokenListener(e)}),d=[])}},{key:"checkDestroyed_",value:function(){this.isDeleted_&&i("app-deleted",{name:this.name_})}},{key:"name",get:function(){return this.checkDestroyed_(),this.name_}},{key:"options",get:function(){return this.checkDestroyed_(),this.options_}}]),e}();h.prototype.name&&h.prototype.options||h.prototype.delete||console.log("dc");var v={"no-app":"No Firebase App '{$name}' has been created - call Firebase App.initializeApp()","bad-app-name":"Illegal App name: '{$name}","duplicate-app":"Firebase App named '{$name}' already exists","app-deleted":"Firebase App named '{$name}' already deleted","duplicate-service":"Firebase service named '{$name}' already registered","sa-not-supported":"Initializing the Firebase SDK with a service account is only allowed in a Node.js environment. On client devices, you should instead initialize the SDK with an api key and auth domain","invalid-app-argument":"firebase.{$name}() takes either no argument or a Firebase App instance."},m=new s.ErrorFactory("app","Firebase",v)},32:function(e,t,n){"use strict";function r(e){return o(void 0,e)}function o(e,t){if(!(t instanceof Object))return t;switch(t.constructor){case Date:return new Date(t.getTime());case Object:void 0===e&&(e={});break;case Array:e=[];break;default:return t}for(var n in t)t.hasOwnProperty(n)&&(e[n]=o(e[n],t[n]));return e}function i(e,t,n){e[t]=n}Object.defineProperty(t,"__esModule",{value:!0}),t.deepCopy=r,t.deepExtend=o,t.patchProperty=i},4:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(27),o=(0,r.createFirebaseNamespace)();t.default=o,e.exports=t.default},51:function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(f===setTimeout)return setTimeout(e,0);if((f===n||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function i(e){if(l===clearTimeout)return clearTimeout(e);if((l===r||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function a(){v&&d&&(v=!1,d.length?h=d.concat(h):m=-1,h.length&&c())}function c(){if(!v){var e=o(a);v=!0;for(var t=h.length;t;){for(d=h,h=[];++m1)for(var n=1;n=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},r(53),n.setImmediate=setImmediate,n.clearImmediate=clearImmediate},9: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){var t=a;return a=e,t}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n"}),o=this.serviceName+": "+o+" ("+r+").";var i=new c(r,o);for(var a in t)t.hasOwnProperty(a)&&"_"!==a.slice(-1)&&(i[a]=t[a]);return i}}]),e}()}})}(); - -(function(){var h,aa=aa||{},k=this,m=function(a){return"string"==typeof a},ba=function(a){return"boolean"==typeof a},ca=function(a){return"number"==typeof a},da=function(){},ea=function(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array"; -if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if("function"==b&&"undefined"==typeof a.call)return"object";return b},fa=function(a){return null===a},ga=function(a){return"array"==ea(a)},ha=function(a){var b=ea(a);return"array"==b||"object"==b&&"number"==typeof a.length},p=function(a){return"function"==ea(a)},ia=function(a){var b=typeof a;return"object"==b&&null!=a||"function"== -b},ja=function(a,b,c){return a.call.apply(a.bind,arguments)},ka=function(a,b,c){if(!a)throw Error();if(2")&&(a=a.replace(sa,">"));-1!=a.indexOf('"')&&(a=a.replace(ta,"""));-1!=a.indexOf("'")&& -(a=a.replace(ua,"'"));-1!=a.indexOf("\x00")&&(a=a.replace(va,"�"));return a},qa=/&/g,ra=//g,ta=/"/g,ua=/'/g,va=/\x00/g,pa=/[\x00&<>"']/,u=function(a,b){return-1!=a.indexOf(b)},xa=function(a,b){return ab?1:0};var ya=function(a,b){b.unshift(a);t.call(this,na.apply(null,b));b.shift()};r(ya,t);ya.prototype.name="AssertionError"; -var za=function(a,b,c,d){var e="Assertion failed";if(c){e+=": "+c;var f=d}else a&&(e+=": "+a,f=b);throw new ya(""+e,f||[]);},v=function(a,b,c){a||za("",null,b,Array.prototype.slice.call(arguments,2))},Aa=function(a,b){throw new ya("Failure"+(a?": "+a:""),Array.prototype.slice.call(arguments,1));},Ba=function(a,b,c){ca(a)||za("Expected number but got %s: %s.",[ea(a),a],b,Array.prototype.slice.call(arguments,2));return a},Ca=function(a,b,c){m(a)||za("Expected string but got %s: %s.",[ea(a),a],b,Array.prototype.slice.call(arguments, -2))},Da=function(a,b,c){p(a)||za("Expected function but got %s: %s.",[ea(a),a],b,Array.prototype.slice.call(arguments,2))};var Ea=Array.prototype.indexOf?function(a,b,c){v(null!=a.length);return Array.prototype.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(m(a))return m(b)&&1==b.length?a.indexOf(b,c):-1;for(;cb?null:m(a)?a.charAt(b):a[b]},Ka=function(a,b){return 0<=Ea(a,b)},Ma=function(a,b){b=Ea(a,b);var c;(c=0<=b)&&La(a,b);return c},La=function(a,b){v(null!=a.length);return 1==Array.prototype.splice.call(a,b,1).length},Na=function(a,b){var c=0;Fa(a,function(d,e){b.call(void 0,d,e,a)&&La(a,e)&&c++})},Oa=function(a){return Array.prototype.concat.apply([],arguments)}, -Pa=function(a){var b=a.length;if(0parseFloat(mb)){kb=String(ob);break a}}kb=mb} -var pb=kb,cb={},z=function(a){return db(a,function(){for(var b=0,c=oa(String(pb)).split("."),d=oa(String(a)).split("."),e=Math.max(c.length,d.length),f=0;0==b&&f>4);64!=g&&(b(f<<4&240|g>>2),64!=l&&b(g<<6&192|l))}},wb=function(){if(!sb){sb={};tb={};for(var a=0;65>a;a++)sb[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a), -tb[sb[a]]=a,62<=a&&(tb["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.".charAt(a)]=a)}};var xb=function(){this.Ea=-1};var Ab=function(a,b){this.Ea=64;this.kc=k.Uint8Array?new Uint8Array(this.Ea):Array(this.Ea);this.Qc=this.jb=0;this.i=[];this.uf=a;this.ge=b;this.Uf=k.Int32Array?new Int32Array(64):Array(64);void 0!==yb||(yb=k.Int32Array?new Int32Array(zb):zb);this.reset()},yb;r(Ab,xb);for(var Bb=[],Cb=0;63>Cb;Cb++)Bb[Cb]=0;var Db=Oa(128,Bb);Ab.prototype.reset=function(){this.Qc=this.jb=0;this.i=k.Int32Array?new Int32Array(this.ge):Pa(this.ge)}; -var Eb=function(a){var b=a.kc;v(b.length==a.Ea);for(var c=a.Uf,d=0,e=0;eb;b++){d=c[b-15]|0;e=c[b-2]|0;e=(e>>>17|e<<15)^(e>>>19|e<<13)^e>>>10;var f=(c[b-16]|0)+((d>>>7|d<<25)^(d>>>18|d<<14)^d>>>3)|0;var g=(c[b-7]|0)+e|0;c[b]=f+g|0}var d=a.i[0]|0,e=a.i[1]|0,l=a.i[2]|0,n=a.i[3]|0,C=a.i[4]|0,lb=a.i[5]|0,Tb=a.i[6]|0;f=a.i[7]|0;for(b=0;64>b;b++){var Mh=((d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10))+(d&e^d&l^e&l)|0;g=C&lb^~C&Tb;f=f+ -((C>>>6|C<<26)^(C>>>11|C<<21)^(C>>>25|C<<7))|0;g=g+(yb[b]|0)|0;g=f+(g+(c[b]|0)|0)|0;f=Tb;Tb=lb;lb=C;C=n+g|0;n=l;l=e;e=d;d=g+Mh|0}a.i[0]=a.i[0]+d|0;a.i[1]=a.i[1]+e|0;a.i[2]=a.i[2]+l|0;a.i[3]=a.i[3]+n|0;a.i[4]=a.i[4]+C|0;a.i[5]=a.i[5]+lb|0;a.i[6]=a.i[6]+Tb|0;a.i[7]=a.i[7]+f|0}; -Ab.prototype.update=function(a,b){void 0===b&&(b=a.length);var c=0,d=this.jb;if(m(a))for(;c=e&&e==(e|0)))throw Error("message must be a byte array");this.kc[d++]=e;d==this.Ea&&(Eb(this),d=0)}else throw Error("message must be string or array");this.jb=d;this.Qc+=b}; -Ab.prototype.digest=function(){var a=[],b=8*this.Qc;56>this.jb?this.update(Db,56-this.jb):this.update(Db,this.Ea-(this.jb-56));for(var c=63;56<=c;c--)this.kc[c]=b&255,b/=256;Eb(this);for(c=b=0;c>d&255;return a}; -var zb=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804, -4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];var Gb=function(){Ab.call(this,8,Fb)};r(Gb,Ab);var Fb=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];var Hb=function(){this.Ha=this.Ha;this.Cc=this.Cc};Hb.prototype.Ha=!1;Hb.prototype.isDisposed=function(){return this.Ha};Hb.prototype.gb=function(){if(this.Cc)for(;this.Cc.length;)this.Cc.shift()()};var Ib=!y||9<=Number(qb),Jb=y&&!z("9");!ib||z("528");hb&&z("1.9b")||y&&z("8")||eb&&z("9.5")||ib&&z("528");hb&&!z("8")||y&&z("9");var Kb=function(a,b){this.type=a;this.currentTarget=this.target=b;this.defaultPrevented=this.pb=!1;this.qe=!0};Kb.prototype.preventDefault=function(){this.defaultPrevented=!0;this.qe=!1};var Lb=function(a,b){Kb.call(this,a?a.type:"");this.relatedTarget=this.currentTarget=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=this.offsetY=this.offsetX=0;this.key="";this.charCode=this.keyCode=0;this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.Ia=this.state=null;a&&this.init(a,b)};r(Lb,Kb); -Lb.prototype.init=function(a,b){var c=this.type=a.type,d=a.changedTouches?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.currentTarget=b;if(b=a.relatedTarget){if(hb){a:{try{bb(b.nodeName);var e=!0;break a}catch(f){}e=!1}e||(b=null)}}else"mouseover"==c?b=a.fromElement:"mouseout"==c&&(b=a.toElement);this.relatedTarget=b;null===d?(this.offsetX=ib||void 0!==a.offsetX?a.offsetX:a.layerX,this.offsetY=ib||void 0!==a.offsetY?a.offsetY:a.layerY,this.clientX=void 0!==a.clientX?a.clientX:a.pageX, -this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0):(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0);this.button=a.button;this.keyCode=a.keyCode||0;this.key=a.key||"";this.charCode=a.charCode||("keypress"==c?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.state=a.state;this.Ia=a;a.defaultPrevented&& -this.preventDefault()};Lb.prototype.preventDefault=function(){Lb.Id.preventDefault.call(this);var a=this.Ia;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,Jb)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};Lb.prototype.Ze=function(){return this.Ia};var Mb="closure_listenable_"+(1E6*Math.random()|0),Nb=0;var Ob=function(a,b,c,d,e){this.listener=a;this.Gc=null;this.src=b;this.type=c;this.capture=!!d;this.qc=e;this.key=++Nb;this.tb=this.jc=!1},Pb=function(a){a.tb=!0;a.listener=null;a.Gc=null;a.src=null;a.qc=null};var Qb=function(a){this.src=a;this.J={};this.ec=0};Qb.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.J[f];a||(a=this.J[f]=[],this.ec++);var g=Rb(a,b,d,e);-1d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.currentTarget;e;e=e.parentNode)d.push(e);for(var e=a.type,f=d.length-1;!b.pb&&0<=f;f--)b.currentTarget=d[f],a=ic(d[f],e,!0,b),c=c&&a;for(f=0;!b.pb&&f>>0),Yb=function(a){v(a,"Listener can not be null.");if(p(a))return a;v(a.handleEvent,"An object listener must have handleEvent method.");a[jc]||(a[jc]=function(b){return a.handleEvent(b)});return a[jc]};var kc=/^[+a-zA-Z0-9_.!#$%&'*\/=?^`{|}~-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,63}$/;var mc=function(){this.Mc="";this.Ge=lc};mc.prototype.Ib=!0;mc.prototype.Fb=function(){return this.Mc};mc.prototype.toString=function(){return"Const{"+this.Mc+"}"};var nc=function(a){if(a instanceof mc&&a.constructor===mc&&a.Ge===lc)return a.Mc;Aa("expected object of type Const, got '"+a+"'");return"type_error:Const"},lc={},oc=function(a){var b=new mc;b.Mc=a;return b};oc("");var qc=function(){this.Fc="";this.He=pc};qc.prototype.Ib=!0;qc.prototype.Fb=function(){return this.Fc};qc.prototype.toString=function(){return"TrustedResourceUrl{"+this.Fc+"}"};var rc=function(a){if(a instanceof qc&&a.constructor===qc&&a.He===pc)return a.Fc;Aa("expected object of type TrustedResourceUrl, got '"+a+"' of type "+ea(a));return"type_error:TrustedResourceUrl"},pc={};var tc=function(){this.qa="";this.Fe=sc};tc.prototype.Ib=!0;tc.prototype.Fb=function(){return this.qa};tc.prototype.toString=function(){return"SafeUrl{"+this.qa+"}"}; -var uc=function(a){if(a instanceof tc&&a.constructor===tc&&a.Fe===sc)return a.qa;Aa("expected object of type SafeUrl, got '"+a+"' of type "+ea(a));return"type_error:SafeUrl"},vc=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i,xc=function(a){if(a instanceof tc)return a;a=a.Ib?a.Fb():String(a);vc.test(a)||(a="about:invalid#zClosurez");return wc(a)},sc={},wc=function(a){var b=new tc;b.qa=a;return b};wc("about:blank");var Ac=function(a){var b=[];yc(new zc,a,b);return b.join("")},zc=function(){this.Hc=void 0},yc=function(a,b,c){if(null==b)c.push("null");else{if("object"==typeof b){if(ga(b)){var d=b;b=d.length;c.push("[");for(var e="",f=0;f");f=f.join("")}f=e.createElement(f);g&&(m(g)?f.className=g:ga(g)?f.className=g.join(" "):gd(f,g));2=b.$c&&b.cancel())}this.le?this.le.call(this.Ud,this):this.Fd=!0;this.hb||Gd(this,new Hd)}};Fd.prototype.Sd=function(a,b){this.Zc=!1;Id(this,a,b)}; -var Id=function(a,b,c){a.hb=!0;a.sa=c;a.Gb=!b;Jd(a)},Ld=function(a){if(a.hb){if(!a.Fd)throw new Kd;a.Fd=!1}};Fd.prototype.callback=function(a){Ld(this);Md(a);Id(this,!0,a)}; -var Gd=function(a,b){Ld(a);Md(b);Id(a,!1,b)},Md=function(a){v(!(a instanceof Fd),"An execution sequence may not be initiated with a blocking Deferred.")},Qd=function(a){var b=Nd("https://apis.google.com/js/client.js?onload="+Od);Pd(b,null,a,void 0)},Pd=function(a,b,c,d){v(!a.Ld,"Blocking Deferreds can not be re-used");a.Jc.push([b,c,d]);a.hb&&Jd(a)};Fd.prototype.then=function(a,b,c){var d,e,f=new A(function(a,b){d=a;e=b});Pd(this,d,function(a){a instanceof Hd?f.cancel():e(a)});return f.then(a,b,c)}; -kd(Fd); -var Rd=function(a){return Ha(a.Jc,function(a){return p(a[1])})},Jd=function(a){if(a.Rc&&a.hb&&Rd(a)){var b=a.Rc,c=Sd[b];c&&(k.clearTimeout(c.Hb),delete Sd[b]);a.Rc=0}a.u&&(a.u.$c--,delete a.u);for(var b=a.sa,d=c=!1;a.Jc.length&&!a.Zc;){var e=a.Jc.shift(),f=e[0],g=e[1],e=e[2];if(f=a.Gb?g:f)try{var l=f.call(e||a.Ud,b);void 0!==l&&(a.Gb=a.Gb&&(l==b||l instanceof Error),a.sa=b=l);if(ld(b)||"function"===typeof k.Promise&&b instanceof k.Promise)d=!0,a.Zc=!0}catch(n){b=n,a.Gb=!0,Rd(a)||(c=!0)}}a.sa=b;d&& -(l=q(a.Sd,a,!0),d=q(a.Sd,a,!1),b instanceof Fd?(Pd(b,l,d),b.Ld=!0):b.then(l,d));c&&(b=new Td(b),Sd[b.Hb]=b,a.Rc=b.Hb)},Kd=function(){t.call(this)};r(Kd,t);Kd.prototype.message="Deferred has already fired";Kd.prototype.name="AlreadyCalledError";var Hd=function(){t.call(this)};r(Hd,t);Hd.prototype.message="Deferred was canceled";Hd.prototype.name="CanceledError";var Td=function(a){this.Hb=k.setTimeout(q(this.Qf,this),0);this.X=a}; -Td.prototype.Qf=function(){v(Sd[this.Hb],"Cannot throw an error that is not scheduled.");delete Sd[this.Hb];throw this.X;};var Sd={};var Nd=function(a){var b=new qc;b.Fc=a;return Ud(b)},Ud=function(a){var b={},c=b.document||document,d=rc(a),e=document.createElement("SCRIPT"),f={re:e,dc:void 0},g=new Fd(Vd,f),l=null,n=null!=b.timeout?b.timeout:5E3;0=fe(this).value)for(p(b)&&(b=b()),a=new Zd(a,String(b),this.tf),c&&(a.Wd=c),c="log:"+a.sf,k.console&&(k.console.timeStamp?k.console.timeStamp(c):k.console.markTimeline&&k.console.markTimeline(c)),k.msWriteProfilerMark&&k.msWriteProfilerMark(c),c=this;c;){var d=c,e=a;if(d.ce)for(var f=0;b=d.ce[f];f++)b(e);c=c.getParent()}}; -var ge={},he=null,ie=function(a){he||(he=new ae(""),ge[""]=he,he.te(de));var b;if(!(b=ge[a])){b=new ae(a);var c=a.lastIndexOf("."),d=a.substr(c+1),c=ie(a.substr(0,c));c.ad||(c.ad={});c.ad[d]=b;b.u=c;ge[a]=b}return b};var je=function(){Hb.call(this);this.ja=new Qb(this);this.Je=this;this.rd=null};r(je,Hb);je.prototype[Mb]=!0;h=je.prototype;h.addEventListener=function(a,b,c,d){Xb(this,a,b,c,d)};h.removeEventListener=function(a,b,c,d){fc(this,a,b,c,d)}; -h.dispatchEvent=function(a){ke(this);var b=this.rd;if(b){var c=[];for(var d=1;b;b=b.rd)c.push(b),v(1E3>++d,"infinite loop")}b=this.Je;d=a.type||a;if(m(a))a=new Kb(a,b);else if(a instanceof Kb)a.target=a.target||b;else{var e=a;a=new Kb(d,b);ab(a,e)}var e=!0;if(c)for(var f=c.length-1;!a.pb&&0<=f;f--){var g=a.currentTarget=c[f];e=le(g,d,!0,a)&&e}a.pb||(g=a.currentTarget=b,e=le(g,d,!0,a)&&e,a.pb||(e=le(g,d,!1,a)&&e));if(c)for(f=0;!a.pb&&f2*this.o&&pe(this),!0):!1};var pe=function(a){var b,c;if(a.o!=a.A.length){for(b=c=0;c=d.A.length)throw me;var e=d.A[b++];return a?e:d.ea[e]};return e};var qe=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)};var re=function(a){if(a.da&&"function"==typeof a.da)return a.da();if(m(a))return a.split("");if(ha(a)){for(var b=[],c=a.length,d=0;db)throw Error("Bad port number "+b);a.nb=b}else a.nb=null},Pe=function(a,b,c){H(a);a.za=c?Re(b,!0):b},Qe=function(a,b,c){H(a);b instanceof I?(a.ba=b,a.ba.Dd(a.Z)):(c||(b=Se(b,Xe)),a.ba=new I(b,0,a.Z))},J=function(a,b,c){H(a);a.ba.set(b,c)},Ye=function(a,b){return a.ba.get(b)}; -G.prototype.removeParameter=function(a){H(this);this.ba.remove(a);return this};var H=function(a){if(a.nf)throw Error("Tried to modify a read-only Uri");};G.prototype.Dd=function(a){this.Z=a;this.ba&&this.ba.Dd(a);return this}; -var Ze=function(a){return a instanceof G?a.clone():new G(a,void 0)},$e=function(a,b){var c=new G(null,void 0);Me(c,"https");a&&Ne(c,a);b&&Pe(c,b);return c},Re=function(a,b){return a?b?decodeURI(a.replace(/%25/g,"%2525")):decodeURIComponent(a):""},Se=function(a,b,c){return m(a)?(a=encodeURI(a).replace(b,af),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),a):null},af=function(a){a=a.charCodeAt(0);return"%"+(a>>4&15).toString(16)+(a&15).toString(16)},Te=/[#\/\?@]/g,Ve=/[\#\?:]/g,Ue=/[\#\?]/g,Xe=/[\#\?@]/g, -We=/#/g,I=function(a,b,c){this.o=this.j=null;this.P=a||null;this.Z=!!c},bf=function(a){a.j||(a.j=new oe,a.o=0,a.P&&xe(a.P,function(b,c){a.add(decodeURIComponent(b.replace(/\+/g," ")),c)}))},df=function(a){var b=se(a);if("undefined"==typeof b)throw Error("Keys are undefined");var c=new I(null,0,void 0);a=re(a);for(var d=0;da?!1:!y||!qb||9',Ca(nc(a),"must provide justification"),v(!/^[\s\xa0]*$/.test(nc(a)),"must provide non-empty justification"),g.document.write(cd((new bd).jf(d))), -g.document.close())):g=a.open(uc(b),c,g);if(g)try{g.focus()}catch(l){}return g},of=function(a){return new A(function(b){var c=function(){ve(2E3).then(function(){if(!a||a.closed)b();else return c()})};return c()})},pf=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,qf=function(){var a=null;return(new A(function(b){"complete"==k.document.readyState?b():(a=function(){b()},dc(window,"load",a))})).f(function(b){fc(window,"load",a);throw b;})},sf=function(){return rf(void 0)?qf().then(function(){return new A(function(a, -b){var c=k.document,d=setTimeout(function(){b(Error("Cordova framework is not ready."))},1E3);c.addEventListener("deviceready",function(){clearTimeout(d);a()},!1)})}):D(Error("Cordova must run in an Android or iOS file scheme."))},rf=function(a){a=a||K();return!("file:"!==tf()||!a.toLowerCase().match(/iphone|ipad|ipod|android/))},uf=function(){var a=k.window;try{return!(!a||a==a.top)}catch(b){return!1}},vf=function(){return firebase.INTERNAL.hasOwnProperty("reactNative")?"ReactNative":firebase.INTERNAL.hasOwnProperty("node")? -"Node":"Browser"},wf=function(){var a=vf();return"ReactNative"===a||"Node"===a},jf=function(a){var b=a.toLowerCase();if(u(b,"opera/")||u(b,"opr/")||u(b,"opios/"))return"Opera";if(u(b,"iemobile"))return"IEMobile";if(u(b,"msie")||u(b,"trident/"))return"IE";if(u(b,"edge/"))return"Edge";if(u(b,"firefox/"))return"Firefox";if(u(b,"silk/"))return"Silk";if(u(b,"blackberry"))return"Blackberry";if(u(b,"webos"))return"Webos";if(!u(b,"safari/")||u(b,"chrome/")||u(b,"crios/")||u(b,"android"))if(!u(b,"chrome/")&& -!u(b,"crios/")||u(b,"edge/")){if(u(b,"android"))return"Android";if((a=a.match(/([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/))&&2==a.length)return a[1]}else return"Chrome";else return"Safari";return"Other"},xf=function(a){var b=vf();return("Browser"===b?jf(K()):b)+"/JsCore/"+a},K=function(){return k.navigator&&k.navigator.userAgent||""},L=function(a,b){a=a.split(".");b=b||k;for(var c=0;cb)throw Error("Short delay should be less than long delay!"); -this.Nf=a;this.rf=b;a=c||K();d=d||vf();this.mf=lf(a)||"ReactNative"===d};If.prototype.get=function(){return this.mf?this.rf:this.Nf}; -var Jf=function(){var a=k.document;return a&&"undefined"!==typeof a.visibilityState?"visible"==a.visibilityState:!0},Kf=function(){var a=k.document,b=null;return Jf()||!a?B():(new A(function(c){b=function(){Jf()&&(a.removeEventListener("visibilitychange",b,!1),c())};a.addEventListener("visibilitychange",b,!1)})).f(function(c){a.removeEventListener("visibilitychange",b,!1);throw c;})};var Lf={};var Mf;try{var Nf={};Object.defineProperty(Nf,"abcd",{configurable:!0,enumerable:!0,value:1});Object.defineProperty(Nf,"abcd",{configurable:!0,enumerable:!0,value:2});Mf=2==Nf.abcd}catch(a){Mf=!1} -var M=function(a,b,c){Mf?Object.defineProperty(a,b,{configurable:!0,enumerable:!0,value:c}):a[b]=c},Of=function(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&M(a,c,b[c])},Pf=function(a){var b={};Of(b,a);return b},Qf=function(a){var b={},c;for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b},Rf=function(a,b){if(!b||!b.length)return!0;if(!a)return!1;for(var c=0;c Auth section -> Sign in method tab.",a):"http"==d||"https"==d?c=na("This domain (%s) is not authorized to run this operation. Add it to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.",a):b= -"operation-not-supported-in-this-environment";N.call(this,b,c)};r($f,N);var ag=function(a){this.qf=a.sub;ma();this.mc=a.email||null};var bg=function(a,b){return a.then(function(a){if(a.idToken){a:{var c=a.idToken.split(".");if(3==c.length){for(var c=c[1],e=(4-c.length%4)%4,f=0;fa.Kd&&(a.Oa=a.Kd);return b},li=function(a,b){a.stop();a.mb=ve(mi(a,b)).then(function(){return a.Gf?B():Kf()}).then(function(){return a.yf()}).then(function(){li(a,!0)}).f(function(b){a.Ff(b)&&li(a,!1)})};ki.prototype.stop=function(){this.mb&&(this.mb.cancel(),this.mb=null)};var si=function(a){var b={};b["facebook.com"]=ni;b["google.com"]=oi;b["github.com"]=pi;b["twitter.com"]=qi;var c=a&&a.providerId;return c?b[c]?new b[c](a):new ri(a):null},ri=function(a){var b=Ef(a.rawUserInfo||"{}");a=a.providerId;if(!a)throw Error("Invalid additional user info!");M(this,"profile",Sf(b||{}));M(this,"providerId",a)},ni=function(a){ri.call(this,a);if("facebook.com"!=this.providerId)throw Error("Invalid provider id!");};r(ni,ri); -var pi=function(a){ri.call(this,a);if("github.com"!=this.providerId)throw Error("Invalid provider id!");M(this,"username",this.profile&&this.profile.login||null)};r(pi,ri);var oi=function(a){ri.call(this,a);if("google.com"!=this.providerId)throw Error("Invalid provider id!");};r(oi,ri);var qi=function(a){ri.call(this,a);if("twitter.com"!=this.providerId)throw Error("Invalid provider id!");M(this,"username",a.screenName||null)};r(qi,ri);var ti=function(a,b,c,d){this.ke=a;this.Bd=b;this.Hf=c;this.Zb=d;this.S={};gi||(gi=new fi);a=gi;try{if(ef()){Xh||(Xh=new Wh("firebaseLocalStorageDb","firebaseLocalStorage","fbase_key","value",1));var e=Xh}else e=new a.Vd.U;this.Sa=e}catch(f){this.Sa=new Qh,this.Zb=!0}try{this.Nc=new a.Vd.Jd}catch(f){this.Nc=new Qh}this.Hd=q(this.we,this);this.$={}},ui,vi=function(){ui||(ui=new ti("firebase",":",!Ff(K())&&uf()?!0:!1,Bf()));return ui};h=ti.prototype; -h.Y=function(a,b){return this.ke+this.Bd+a.name+(b?this.Bd+b:"")};h.get=function(a,b){return(a.U?this.Sa:this.Nc).get(this.Y(a,b))};h.remove=function(a,b){b=this.Y(a,b);a.U&&!this.Zb&&(this.$[b]=null);return(a.U?this.Sa:this.Nc).remove(b)};h.set=function(a,b,c){var d=this.Y(a,c),e=this,f=a.U?this.Sa:this.Nc;return f.set(d,b).then(function(){return f.get(d)}).then(function(b){a.U&&!this.Zb&&(e.$[d]=b)})}; -h.addListener=function(a,b,c){a=this.Y(a,b);this.Zb||(this.$[a]=k.localStorage.getItem(a));Xa(this.S)&&this.Gd();this.S[a]||(this.S[a]=[]);this.S[a].push(c)};h.removeListener=function(a,b,c){a=this.Y(a,b);this.S[a]&&(Na(this.S[a],function(a){return a==c}),0==this.S[a].length&&delete this.S[a]);Xa(this.S)&&this.Lc()};h.Gd=function(){this.Sa.eb(this.Hd);this.Zb||ef()||wi(this)}; -var wi=function(a){xi(a);a.nd=setInterval(function(){for(var b in a.S){var c=k.localStorage.getItem(b),d=a.$[b];c!=d&&(a.$[b]=c,c=new Lb({type:"storage",key:b,target:window,oldValue:d,newValue:c,oe:!0}),a.we(c))}},1E3)},xi=function(a){a.nd&&(clearInterval(a.nd),a.nd=null)};ti.prototype.Lc=function(){this.Sa.Va(this.Hd);xi(this)}; -ti.prototype.we=function(a){if(a&&a.Ze){var b=a.Ia.key;if(0==b.indexOf(this.ke+this.Bd)&&this.S[b]){"undefined"!==typeof a.Ia.oe?this.Sa.Va(this.Hd):xi(this);if(this.Hf){var c=k.localStorage.getItem(b),d=a.Ia.newValue;if(d!==c)null!==d?k.localStorage.setItem(b,d):k.localStorage.removeItem(b);else if(this.$[b]===d&&"undefined"===typeof a.Ia.oe)return}this.$[b]=k.localStorage.getItem(b);this.Od(b)}}else w(a,q(this.Od,this))};ti.prototype.Od=function(a){this.S[a]&&w(this.S[a],function(a){a()})};var yi=function(a,b){this.v=a;this.l=b||vi()},zi={name:"authEvent",U:!0},Ai=function(a){return a.l.get(zi,a.v).then(function(a){return Zf(a)})};yi.prototype.cb=function(a){this.l.addListener(zi,this.v,a)};yi.prototype.Yb=function(a){this.l.removeListener(zi,this.v,a)};var Bi=function(a){this.l=a||vi()},Ci={name:"sessionId",U:!1};Bi.prototype.oc=function(a){return this.l.get(Ci,a)};var Di=function(a,b,c,d,e,f){this.B=a;this.m=b;this.w=c;this.Fa=d||null;this.xe=b+":"+c;this.If=new Bi;this.$d=new yi(this.xe);this.ld=null;this.na=[];this.lf=e||500;this.Bf=f||2E3;this.Jb=this.Dc=null},Ei=function(a){return new N("invalid-cordova-configuration",a)}; -Di.prototype.Na=function(){return this.Lb?this.Lb:this.Lb=sf().then(function(){if("function"!==typeof L("universalLinks.subscribe",k))throw Ei("cordova-universal-links-plugin is not installed");if("undefined"===typeof L("BuildInfo.packageName",k))throw Ei("cordova-plugin-buildinfo is not installed");if("function"!==typeof L("cordova.plugins.browsertab.openUrl",k))throw Ei("cordova-plugin-browsertab is not installed");if("function"!==typeof L("cordova.InAppBrowser.open",k))throw Ei("cordova-plugin-inappbrowser is not installed"); -},function(){throw new N("cordova-not-ready");})};var Fi=function(){for(var a=20,b=[];0this.Ja-3E4?this.ca?hj(this,{grant_type:"refresh_token",refresh_token:this.ca}):B(null):B({accessToken:this.Ca,expirationTime:this.Ja,refreshToken:this.ca})};var ij=function(a,b,c,d,e){Of(this,{uid:a,displayName:d||null,photoURL:e||null,email:c||null,providerId:b})},jj=function(a,b){Kb.call(this,a);for(var c in b)this[c]=b[c]};r(jj,Kb); -var S=function(a,b,c){this.G=[];this.m=a.apiKey;this.w=a.appName;this.B=a.authDomain||null;a=firebase.SDK_VERSION?xf(firebase.SDK_VERSION):null;this.g=new R(this.m,null,a);this.la=new ej(this.g);kj(this,b.idToken);gj(this.la,b);M(this,"refreshToken",this.la.ca);lj(this,c||{});je.call(this);this.Ec=!1;this.B&&Af()&&(this.s=$i(this.B,this.m,this.w));this.Kc=[];this.ma=null;this.ob=mj(this);this.xb=q(this.jd,this)};r(S,je);S.prototype.jd=function(){this.ob.mb&&(this.ob.stop(),this.ob.start())}; -var nj=function(a){try{return firebase.app(a.w).auth()}catch(b){throw new N("internal-error","No firebase.auth.Auth instance is available for the Firebase App '"+a.w+"'!");}},mj=function(a){return new ki(function(){return a.getIdToken(!0)},function(a){return a&&"auth/network-request-failed"==a.code?!0:!1},function(){var b=a.la.Ja-ma()-3E5;return 0this.Ka&&(this.Ka=0);0==this.Ka&&U(this)&&pj(U(this));this.removeAuthTokenListener(a)};h.addAuthTokenListener=function(a){var b=this;this.Da.push(a);this.b(this.ra.then(function(){b.Ga||Ka(b.Da,a)&&a(ek(b))}))};h.removeAuthTokenListener=function(a){Na(this.Da,function(b){return b==a})};var dk=function(a,b){a.wb.push(b);a.b(a.ra.then(function(){!a.Ga&&Ka(a.wb,b)&&a.gc!==a.getUid()&&(a.gc=a.getUid(),b(ek(a)))}))};h=T.prototype; -h["delete"]=function(){this.Ga=!0;for(var a=0;al||l>=fk.length)throw new N("internal-error","Argument validator received an unsupported number of arguments.");e=fk[l]+" argument "+(e.name?'"'+e.name+'" ':"")+"must be "+e.N+".";break a}e=null}}if(e)throw new N("argument-error",d+" failed: "+e);return b.apply(this,a)};for(var e in b)a[e]=b[e];for(e in b.prototype)a.prototype[e]= -b.prototype[e];return a},qk=function(a){a=a.split(".");return a[a.length-1]};Y(T.prototype,{applyActionCode:{name:"applyActionCode",a:[V("code")]},checkActionCode:{name:"checkActionCode",a:[V("code")]},confirmPasswordReset:{name:"confirmPasswordReset",a:[V("code"),V("newPassword")]},createUserWithEmailAndPassword:{name:"createUserWithEmailAndPassword",a:[V("email"),V("password")]},fetchProvidersForEmail:{name:"fetchProvidersForEmail",a:[V("email")]},getRedirectResult:{name:"getRedirectResult",a:[]},onAuthStateChanged:{name:"onAuthStateChanged",a:[X(W(),hk(),"nextOrObserver"), -hk("opt_error",!0),hk("opt_completed",!0)]},onIdTokenChanged:{name:"onIdTokenChanged",a:[X(W(),hk(),"nextOrObserver"),hk("opt_error",!0),hk("opt_completed",!0)]},sendPasswordResetEmail:{name:"sendPasswordResetEmail",a:[V("email")]},signInAndRetrieveDataWithCredential:{name:"signInAndRetrieveDataWithCredential",a:[mk()]},signInAnonymously:{name:"signInAnonymously",a:[]},signInWithCredential:{name:"signInWithCredential",a:[mk()]},signInWithCustomToken:{name:"signInWithCustomToken",a:[V("token")]},signInWithEmailAndPassword:{name:"signInWithEmailAndPassword", -a:[V("email"),V("password")]},signInWithPhoneNumber:{name:"signInWithPhoneNumber",a:[V("phoneNumber"),ok()]},signInWithPopup:{name:"signInWithPopup",a:[nk()]},signInWithRedirect:{name:"signInWithRedirect",a:[nk()]},signOut:{name:"signOut",a:[]},toJSON:{name:"toJSON",a:[V(null,!0)]},verifyPasswordResetCode:{name:"verifyPasswordResetCode",a:[V("code")]}}); -Y(S.prototype,{"delete":{name:"delete",a:[]},getIdToken:{name:"getIdToken",a:[gk()]},getToken:{name:"getToken",a:[gk()]},linkAndRetrieveDataWithCredential:{name:"linkAndRetrieveDataWithCredential",a:[mk()]},linkWithCredential:{name:"linkWithCredential",a:[mk()]},linkWithPhoneNumber:{name:"linkWithPhoneNumber",a:[V("phoneNumber"),ok()]},linkWithPopup:{name:"linkWithPopup",a:[nk()]},linkWithRedirect:{name:"linkWithRedirect",a:[nk()]},reauthenticateAndRetrieveDataWithCredential:{name:"reauthenticateAndRetrieveDataWithCredential", -a:[mk()]},reauthenticateWithCredential:{name:"reauthenticateWithCredential",a:[mk()]},reauthenticateWithPhoneNumber:{name:"reauthenticateWithPhoneNumber",a:[V("phoneNumber"),ok()]},reauthenticateWithPopup:{name:"reauthenticateWithPopup",a:[nk()]},reauthenticateWithRedirect:{name:"reauthenticateWithRedirect",a:[nk()]},reload:{name:"reload",a:[]},sendEmailVerification:{name:"sendEmailVerification",a:[]},toJSON:{name:"toJSON",a:[V(null,!0)]},unlink:{name:"unlink",a:[V("provider")]},updateEmail:{name:"updateEmail", -a:[V("email")]},updatePassword:{name:"updatePassword",a:[V("password")]},updatePhoneNumber:{name:"updatePhoneNumber",a:[mk("phone")]},updateProfile:{name:"updateProfile",a:[W("profile")]}});Y(A.prototype,{f:{name:"catch"},then:{name:"then"}});Y(hi.prototype,{confirm:{name:"confirm",a:[V("verificationCode")]}});Z(tg,"credential",function(a,b){return new qg(a,b)},[V("email"),V("password")]);Y(ig.prototype,{addScope:{name:"addScope",a:[V("scope")]},setCustomParameters:{name:"setCustomParameters",a:[W("customOAuthParameters")]}}); -Z(ig,"credential",jg,[X(V(),W(),"token")]);Y(kg.prototype,{addScope:{name:"addScope",a:[V("scope")]},setCustomParameters:{name:"setCustomParameters",a:[W("customOAuthParameters")]}});Z(kg,"credential",lg,[X(V(),W(),"token")]);Y(mg.prototype,{addScope:{name:"addScope",a:[V("scope")]},setCustomParameters:{name:"setCustomParameters",a:[W("customOAuthParameters")]}});Z(mg,"credential",ng,[X(V(),X(W(),ik()),"idToken"),X(V(),ik(),"accessToken",!0)]); -Y(og.prototype,{setCustomParameters:{name:"setCustomParameters",a:[W("customOAuthParameters")]}});Z(og,"credential",pg,[X(V(),W(),"token"),V("secret",!0)]);Y(P.prototype,{addScope:{name:"addScope",a:[V("scope")]},credential:{name:"credential",a:[X(V(),ik(),"idToken",!0),X(V(),ik(),"accessToken",!0)]},setCustomParameters:{name:"setCustomParameters",a:[W("customOAuthParameters")]}});Z(yg,"credential",Ag,[V("verificationId"),V("verificationCode")]); -Y(yg.prototype,{verifyPhoneNumber:{name:"verifyPhoneNumber",a:[V("phoneNumber"),ok()]}});Y(N.prototype,{toJSON:{name:"toJSON",a:[V(null,!0)]}});Y(Dg.prototype,{toJSON:{name:"toJSON",a:[V(null,!0)]}});Y($f.prototype,{toJSON:{name:"toJSON",a:[V(null,!0)]}});Y(Kh.prototype,{clear:{name:"clear",a:[]},render:{name:"render",a:[]},verify:{name:"verify",a:[]}}); -(function(){if("undefined"!==typeof firebase&&firebase.INTERNAL&&firebase.INTERNAL.registerService){var a={Auth:T,Error:N};Z(a,"EmailAuthProvider",tg,[]);Z(a,"FacebookAuthProvider",ig,[]);Z(a,"GithubAuthProvider",kg,[]);Z(a,"GoogleAuthProvider",mg,[]);Z(a,"TwitterAuthProvider",og,[]);Z(a,"OAuthProvider",P,[V("providerId")]);Z(a,"PhoneAuthProvider",yg,[kk()]);Z(a,"RecaptchaVerifier",Kh,[X(V(),jk(),"recaptchaContainer"),W("recaptchaParameters",!0),lk()]);firebase.INTERNAL.registerService("auth",function(a, -c){a=new T(a);c({INTERNAL:{getUid:q(a.getUid,a),getToken:q(a.getIdToken,a),addAuthTokenListener:q(a.Ke,a),removeAuthTokenListener:q(a.Cf,a)}});return a},a,function(a,c){if("create"===a)try{c.auth()}catch(d){}});firebase.INTERNAL.extendNamespace({User:S})}else throw Error("Cannot find the firebase namespace; be sure to include firebase-app.js before this library.");})();}).call(this); - -(function() {var g,aa=this;function n(a){return void 0!==a}function ba(){}function ca(a){a.Vb=function(){return a.Ye?a.Ye:a.Ye=new a}} -function da(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ea(a){return"array"==da(a)}function fa(a){var b=da(a);return"array"==b||"object"==b&&"number"==typeof a.length}function p(a){return"string"==typeof a}function ga(a){return"number"==typeof a}function ha(a){return"function"==da(a)}function ia(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}function ja(a,b,c){return a.call.apply(a.bind,arguments)} -function ka(a,b,c){if(!a)throw Error();if(2b?e+="000":256>b?e+="00":4096>b&&(e+="0");return qa[a]=e+b.toString(16)}),'"')};function sa(){this.Wa=-1};function ta(){this.Wa=-1;this.Wa=64;this.M=[];this.Wd=[];this.Af=[];this.zd=[];this.zd[0]=128;for(var a=1;ae;e++)d[e]=b.charCodeAt(c)<<24|b.charCodeAt(c+1)<<16|b.charCodeAt(c+2)<<8|b.charCodeAt(c+3),c+=4;else for(e=0;16>e;e++)d[e]=b[c]<<24|b[c+1]<<16|b[c+2]<<8|b[c+3],c+=4;for(e=16;80>e;e++){var f=d[e-3]^d[e-8]^d[e-14]^d[e-16];d[e]=(f<<1|f>>>31)&4294967295}b=a.M[0];c=a.M[1];for(var h=a.M[2],k=a.M[3],m=a.M[4],l,e=0;80>e;e++)40>e?20>e?(f=k^c&(h^k),l=1518500249):(f=c^h^k,l=1859775393):60>e?(f=c&h|k&(c|h),l=2400959708):(f=c^h^k,l=3395469782),f=(b<< -5|b>>>27)+f+m+l+d[e]&4294967295,m=k,k=h,h=(c<<30|c>>>2)&4294967295,c=b,b=f;a.M[0]=a.M[0]+b&4294967295;a.M[1]=a.M[1]+c&4294967295;a.M[2]=a.M[2]+h&4294967295;a.M[3]=a.M[3]+k&4294967295;a.M[4]=a.M[4]+m&4294967295} -ta.prototype.update=function(a,b){if(null!=a){n(b)||(b=a.length);for(var c=b-this.Wa,d=0,e=this.Wd,f=this.$b;dc?Math.max(0,a.length+c):c;if(p(a))return p(b)&&1==b.length?a.indexOf(b,c):-1;for(;cc?null:p(a)?a.charAt(c):a[c]}function Ea(a,b,c){for(var d=a.length,e=p(a)?a.split(""):a,f=0;f=arguments.length?t.slice.call(a,b):t.slice.call(a,b,c)} -function Ha(a,b){a.sort(b||Ia)}function Ia(a,b){return a>b?1:aparseFloat(a))?String(b):a})();var Ya=null,Za=null,$a=null;function ab(a,b){if(!fa(a))throw Error("encodeByteArray takes an array as a parameter");bb();for(var c=b?Za:Ya,d=[],e=0;e>2,f=(f&3)<<4|k>>4,k=(k&15)<<2|l>>6,l=l&63;m||(l=64,h||(k=64));d.push(c[u],c[f],c[k],c[l])}return d.join("")} -function bb(){if(!Ya){Ya={};Za={};$a={};for(var a=0;65>a;a++)Ya[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a),Za[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.".charAt(a),$a[Za[a]]=a,62<=a&&($a["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a)]=a)}};function cb(a,b){if(!a)throw db(b);}function db(a){return Error("Firebase Database ("+firebase.SDK_VERSION+") INTERNAL ASSERT FAILED: "+a)};function eb(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function w(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]}function fb(a,b){for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b(c,a[c])};function gb(a){var b=[];fb(a,function(a,d){ea(d)?ya(d,function(d){b.push(encodeURIComponent(a)+"="+encodeURIComponent(d))}):b.push(encodeURIComponent(a)+"="+encodeURIComponent(d))});return b.length?"&"+b.join("&"):""};var hb=firebase.Promise;function ib(){var a=this;this.reject=this.resolve=null;this.ra=new hb(function(b,c){a.resolve=b;a.reject=c})}function jb(a,b){return function(c,d){c?a.reject(c):a.resolve(d);ha(b)&&(kb(a.ra),1===b.length?b(c):b(c,d))}}function kb(a){a.then(void 0,ba)};function lb(a){return"undefined"!==typeof JSON&&n(JSON.parse)?JSON.parse(a):ma(a)}function x(a){if("undefined"!==typeof JSON&&n(JSON.stringify))a=JSON.stringify(a);else{var b=[];oa(new na,a,b);a=b.join("")}return a};function mb(a){for(var b=[],c=0,d=0;d=e&&(e-=55296,d++,cb(de?b[c++]=e:(2048>e?b[c++]=e>>6|192:(65536>e?b[c++]=e>>12|224:(b[c++]=e>>18|240,b[c++]=e>>12&63|128),b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b}function nb(a){for(var b=0,c=0;cd?b++:2048>d?b+=2:55296<=d&&56319>=d?(b+=4,c++):b+=3}return b};function y(a,b,c,d){var e;dc&&(e=0===c?"none":"no more than "+c);if(e)throw Error(a+" failed: Was called with "+d+(1===d?" argument.":" arguments.")+" Expects "+e+".");}function A(a,b,c){var d="";switch(b){case 1:d=c?"first":"First";break;case 2:d=c?"second":"Second";break;case 3:d=c?"third":"Third";break;case 4:d=c?"fourth":"Fourth";break;default:throw Error("errorPrefix called with argumentNumber > 4. Need to update it?");}return a=a+" failed: "+(d+" argument ")} -function B(a,b,c,d){if((!d||n(c))&&!ha(c))throw Error(A(a,b,d)+"must be a valid function.");}function ob(a,b,c){if(n(c)&&(!ia(c)||null===c))throw Error(A(a,b,!0)+"must be a valid context object.");};function pb(){return"undefined"!==typeof window&&!!(window.cordova||window.phonegap||window.PhoneGap)&&/ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test("undefined"!==typeof navigator&&"string"===typeof navigator.userAgent?navigator.userAgent:"")};function C(a,b){this.name=a;this.R=b}function qb(a,b){return new C(a,b)};function rb(a,b){return sb(a.name,b.name)}function tb(a,b){return sb(a,b)};function ub(a){this.uc=a;this.Cd="firebase:"}g=ub.prototype;g.set=function(a,b){null==b?this.uc.removeItem(this.Cd+a):this.uc.setItem(this.Cd+a,x(b))};g.get=function(a){a=this.uc.getItem(this.Cd+a);return null==a?null:lb(a)};g.remove=function(a){this.uc.removeItem(this.Cd+a)};g.Ze=!1;g.toString=function(){return this.uc.toString()};function vb(){this.pc={}}vb.prototype.set=function(a,b){null==b?delete this.pc[a]:this.pc[a]=b};vb.prototype.get=function(a){return eb(this.pc,a)?this.pc[a]:null};vb.prototype.remove=function(a){delete this.pc[a]};vb.prototype.Ze=!0;function wb(a){try{if("undefined"!==typeof window&&"undefined"!==typeof window[a]){var b=window[a];b.setItem("firebase:sentinel","cache");b.removeItem("firebase:sentinel");return new ub(b)}}catch(c){}return new vb}var xb=wb("localStorage"),yb=wb("sessionStorage");function zb(a,b,c,d,e){this.host=a.toLowerCase();this.domain=this.host.substr(this.host.indexOf(".")+1);this.Sc=b;this.pe=c;this.qg=d;this.gf=e||"";this.$a=xb.get("host:"+a)||this.host}function Ab(a,b){b!==a.$a&&(a.$a=b,"s-"===a.$a.substr(0,2)&&xb.set("host:"+a.host,a.$a))} -function Bb(a,b,c){D("string"===typeof b,"typeof type must == string");D("object"===typeof c,"typeof params must == object");if(b===Cb)b=(a.Sc?"wss://":"ws://")+a.$a+"/.ws?";else if(b===Db)b=(a.Sc?"https://":"http://")+a.$a+"/.lp?";else throw Error("Unknown connection type: "+b);a.host!==a.$a&&(c.ns=a.pe);var d=[];v(c,function(a,b){d.push(b+"="+a)});return b+d.join("&")}zb.prototype.toString=function(){var a=(this.Sc?"https://":"http://")+this.host;this.gf&&(a+="<"+this.gf+">");return a};function Eb(a,b){return a&&"object"===typeof a?(D(".sv"in a,"Unexpected leaf node or priority contents"),b[a[".sv"]]):a}function Fb(a,b){var c=new Gb;Hb(a,new E(""),function(a,e){Ib(c,a,Jb(e,b))});return c}function Jb(a,b){var c=a.C().H(),c=Eb(c,b),d;if(a.J()){var e=Eb(a.Ca(),b);return e!==a.Ca()||c!==a.C().H()?new Kb(e,G(c)):a}d=a;c!==a.C().H()&&(d=d.fa(new Kb(c)));a.O(H,function(a,c){var e=Jb(c,b);e!==c&&(d=d.T(a,e))});return d};var Lb=function(){var a=1;return function(){return a++}}(),D=cb,Mb=db; -function Nb(a){try{var b;bb();for(var c=$a,d=[],e=0;e>4);64!=k&&(d.push(h<<4&240|k>>2),64!=m&&d.push(k<<6&192|m))}if(8192>d.length)b=String.fromCharCode.apply(null,d);else{a="";for(c=0;ca.$b?a.update(a.zd,56-a.$b):a.update(a.zd,a.Wa-(a.$b-56));for(var d=a.Wa-1;56<=d;d--)a.Wd[d]=c&255,c/=256;ua(a,a.Wd);for(d=c=0;5>d;d++)for(var e=24;0<=e;e-=8)b[c]=a.M[d]>>e&255,++c;return ab(b)}function Pb(a){for(var b="",c=0;c.firebaseio.com instead"); -c&&"undefined"!=c||Vb("Cannot parse Firebase url. Please use https://.firebaseio.com");d||"undefined"!==typeof window&&window.location&&window.location.protocol&&-1!==window.location.protocol.indexOf("https:")&&J("Insecure Firebase access from a secure page. Please use https in calls to new Firebase().");return{jc:new zb(b,d,c,"ws"===e||"wss"===e),path:new E(f)}}function Xb(a){return ga(a)&&(a!=a||a==Number.POSITIVE_INFINITY||a==Number.NEGATIVE_INFINITY)} -function Yb(a){if("complete"===document.readyState)a();else{var b=!1,c=function(){document.body?b||(b=!0,a()):setTimeout(c,Math.floor(10))};document.addEventListener?(document.addEventListener("DOMContentLoaded",c,!1),window.addEventListener("load",c,!1)):document.attachEvent&&(document.attachEvent("onreadystatechange",function(){"complete"===document.readyState&&c()}),window.attachEvent("onload",c))}} -function sb(a,b){if(a===b)return 0;if("[MIN_NAME]"===a||"[MAX_NAME]"===b)return-1;if("[MIN_NAME]"===b||"[MAX_NAME]"===a)return 1;var c=Zb(a),d=Zb(b);return null!==c?null!==d?0==c-d?a.length-b.length:c-d:-1:null!==d?1:aa?c.push(a.substring(d,a.length)):c.push(a.substring(d,d+b));return c}function cc(a,b){if(ea(a))for(var c=0;ca,a=Math.abs(a),a>=Math.pow(2,-1022)?(d=Math.min(Math.floor(Math.log(a)/Math.LN2),1023),c=d+1023,d=Math.round(a*Math.pow(2,52-d)-Math.pow(2,52))):(c=0,d=Math.round(a/Math.pow(2,-1074))));e=[];for(a=52;a;--a)e.push(d%2?1:0),d=Math.floor(d/2);for(a=11;a;--a)e.push(c%2?1:0),c=Math.floor(c/2);e.push(b?1:0);e.reverse();b=e.join("");c="";for(a=0;64>a;a+=8)d=parseInt(b.substr(a,8),2).toString(16),1===d.length&& -(d="0"+d),c+=d;return c.toLowerCase()}var ec=/^-?\d{1,10}$/;function Zb(a){return ec.test(a)&&(a=Number(a),-2147483648<=a&&2147483647>=a)?a:null}function fc(a){try{a()}catch(b){setTimeout(function(){J("Exception was thrown by user callback.",b.stack||"");throw b;},Math.floor(0))}}function gc(a,b,c){Object.defineProperty(a,b,{get:c})}function hc(a,b){var c=setTimeout(a,b);"object"===typeof c&&c.unref&&c.unref();return c};function ic(a){var b={},c={},d={},e="";try{var f=a.split("."),b=lb(Nb(f[0])||""),c=lb(Nb(f[1])||""),e=f[2],d=c.d||{};delete c.d}catch(h){}return{tg:b,Je:c,data:d,mg:e}}function jc(a){a=ic(a);var b=a.Je;return!!a.mg&&!!b&&"object"===typeof b&&b.hasOwnProperty("iat")}function kc(a){a=ic(a).Je;return"object"===typeof a&&!0===w(a,"admin")};function lc(){}var mc={};function nc(a){return q(a.compare,a)}lc.prototype.nd=function(a,b){return 0!==this.compare(new C("[MIN_NAME]",a),new C("[MIN_NAME]",b))};lc.prototype.Hc=function(){return oc};function pc(a){D(!a.e()&&".priority"!==K(a),"Can't create PathIndex with empty path or .priority key");this.bc=a}la(pc,lc);g=pc.prototype;g.xc=function(a){return!a.P(this.bc).e()};g.compare=function(a,b){var c=a.R.P(this.bc),d=b.R.P(this.bc),c=c.sc(d);return 0===c?sb(a.name,b.name):c}; -g.Ec=function(a,b){var c=G(a),c=L.F(this.bc,c);return new C(b,c)};g.Fc=function(){var a=L.F(this.bc,qc);return new C("[MAX_NAME]",a)};g.toString=function(){return this.bc.slice().join("/")};function rc(){}la(rc,lc);g=rc.prototype;g.compare=function(a,b){var c=a.R.C(),d=b.R.C(),c=c.sc(d);return 0===c?sb(a.name,b.name):c};g.xc=function(a){return!a.C().e()};g.nd=function(a,b){return!a.C().Z(b.C())};g.Hc=function(){return oc};g.Fc=function(){return new C("[MAX_NAME]",new Kb("[PRIORITY-POST]",qc))}; -g.Ec=function(a,b){var c=G(a);return new C(b,new Kb("[PRIORITY-POST]",c))};g.toString=function(){return".priority"};var H=new rc;function sc(){}la(sc,lc);g=sc.prototype;g.compare=function(a,b){return sb(a.name,b.name)};g.xc=function(){throw Mb("KeyIndex.isDefinedOn not expected to be called.");};g.nd=function(){return!1};g.Hc=function(){return oc};g.Fc=function(){return new C("[MAX_NAME]",L)};g.Ec=function(a){D(p(a),"KeyIndex indexValue must always be a string.");return new C(a,L)};g.toString=function(){return".key"}; -var tc=new sc;function uc(){}la(uc,lc);g=uc.prototype;g.compare=function(a,b){var c=a.R.sc(b.R);return 0===c?sb(a.name,b.name):c};g.xc=function(){return!0};g.nd=function(a,b){return!a.Z(b)};g.Hc=function(){return oc};g.Fc=function(){return vc};g.Ec=function(a,b){var c=G(a);return new C(b,c)};g.toString=function(){return".value"};var wc=new uc;function xc(a,b){this.od=a;this.cc=b}xc.prototype.get=function(a){var b=w(this.od,a);if(!b)throw Error("No index defined for "+a);return b===mc?null:b};function yc(a,b,c){var d=Ja(a.od,function(d,f){var h=w(a.cc,f);D(h,"Missing index implementation for "+f);if(d===mc){if(h.xc(b.R)){for(var k=[],m=c.Wb(qb),l=M(m);l;)l.name!=b.name&&k.push(l),l=M(m);k.push(b);return zc(k,nc(h))}return mc}h=c.get(b.name);k=d;h&&(k=k.remove(new C(b.name,h)));return k.Oa(b,b.R)});return new xc(d,a.cc)} -function Ac(a,b,c){var d=Ja(a.od,function(a){if(a===mc)return a;var d=c.get(b.name);return d?a.remove(new C(b.name,d)):a});return new xc(d,a.cc)}var Bc=new xc({".priority":mc},{".priority":H});function Kb(a,b){this.B=a;D(n(this.B)&&null!==this.B,"LeafNode shouldn't be created with null/undefined value.");this.aa=b||L;Cc(this.aa);this.Db=null}var Dc=["object","boolean","number","string"];g=Kb.prototype;g.J=function(){return!0};g.C=function(){return this.aa};g.fa=function(a){return new Kb(this.B,a)};g.Q=function(a){return".priority"===a?this.aa:L};g.P=function(a){return a.e()?this:".priority"===K(a)?this.aa:L};g.Da=function(){return!1};g.Ve=function(){return null}; -g.T=function(a,b){return".priority"===a?this.fa(b):b.e()&&".priority"!==a?this:L.T(a,b).fa(this.aa)};g.F=function(a,b){var c=K(a);if(null===c)return b;if(b.e()&&".priority"!==c)return this;D(".priority"!==c||1===Ec(a),".priority must be the last token in a path");return this.T(c,L.F(N(a),b))};g.e=function(){return!1};g.Eb=function(){return 0};g.O=function(){return!1};g.H=function(a){return a&&!this.C().e()?{".value":this.Ca(),".priority":this.C().H()}:this.Ca()}; -g.hash=function(){if(null===this.Db){var a="";this.aa.e()||(a+="priority:"+Fc(this.aa.H())+":");var b=typeof this.B,a=a+(b+":"),a="number"===b?a+dc(this.B):a+this.B;this.Db=Ob(a)}return this.Db};g.Ca=function(){return this.B};g.sc=function(a){if(a===L)return 1;if(a instanceof O)return-1;D(a.J(),"Unknown node type");var b=typeof a.B,c=typeof this.B,d=xa(Dc,b),e=xa(Dc,c);D(0<=d,"Unknown leaf type: "+b);D(0<=e,"Unknown leaf type: "+c);return d===e?"object"===c?0:this.Bf;f++)b[f]=Math.floor(64*Math.random());for(f=0;12>f;f++)c+="-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(b[f]);D(20===c.length,"nextPushId: Length should be 20."); -return c}}();function Lc(){Ic.call(this,["online"]);this.hc=!0;if("undefined"!==typeof window&&"undefined"!==typeof window.addEventListener&&!pb()){var a=this;window.addEventListener("online",function(){a.hc||(a.hc=!0,a.Ge("online",!0))},!1);window.addEventListener("offline",function(){a.hc&&(a.hc=!1,a.Ge("online",!1))},!1)}}la(Lc,Ic);Lc.prototype.Ue=function(a){D("online"===a,"Unknown event type: "+a);return[this.hc]};ca(Lc);function Mc(){Ic.call(this,["visible"]);var a,b;"undefined"!==typeof document&&"undefined"!==typeof document.addEventListener&&("undefined"!==typeof document.hidden?(b="visibilitychange",a="hidden"):"undefined"!==typeof document.mozHidden?(b="mozvisibilitychange",a="mozHidden"):"undefined"!==typeof document.msHidden?(b="msvisibilitychange",a="msHidden"):"undefined"!==typeof document.webkitHidden&&(b="webkitvisibilitychange",a="webkitHidden"));this.Mb=!0;if(b){var c=this;document.addEventListener(b, -function(){var b=!document[a];b!==c.Mb&&(c.Mb=b,c.Ge("visible",b))},!1)}}la(Mc,Ic);Mc.prototype.Ue=function(a){D("visible"===a,"Unknown event type: "+a);return[this.Mb]};ca(Mc);function E(a,b){if(1==arguments.length){this.o=a.split("/");for(var c=0,d=0;d=a.o.length?null:a.o[a.Y]}function Ec(a){return a.o.length-a.Y}function N(a){var b=a.Y;b=this.o.length)return null;for(var a=[],b=this.Y;b=this.o.length};g.Z=function(a){if(Ec(this)!==Ec(a))return!1;for(var b=this.Y,c=a.Y;b<=this.o.length;b++,c++)if(this.o[b]!==a.o[c])return!1;return!0}; -g.contains=function(a){var b=this.Y,c=a.Y;if(Ec(this)>Ec(a))return!1;for(;bb?c=c.left:0c?d=d.left:0e)a=this.le?a.left:a.right;else if(0===e){this.Pa.push(a);break}else this.Pa.push(a),a=this.le?a.right:a.left} -function M(a){if(0===a.Pa.length)return null;var b=a.Pa.pop(),c;c=a.Hd?a.Hd(b.key,b.value):{key:b.key,value:b.value};if(a.le)for(b=b.left;!b.e();)a.Pa.push(b),b=b.right;else for(b=b.right;!b.e();)a.Pa.push(b),b=b.left;return c}function cd(a){if(0===a.Pa.length)return null;var b;b=a.Pa;b=b[b.length-1];return a.Hd?a.Hd(b.key,b.value):{key:b.key,value:b.value}}function dd(a,b,c,d,e){this.key=a;this.value=b;this.color=null!=c?c:!0;this.left=null!=d?d:$c;this.right=null!=e?e:$c}g=dd.prototype; -g.X=function(a,b,c,d,e){return new dd(null!=a?a:this.key,null!=b?b:this.value,null!=c?c:this.color,null!=d?d:this.left,null!=e?e:this.right)};g.count=function(){return this.left.count()+1+this.right.count()};g.e=function(){return!1};g.ha=function(a){return this.left.ha(a)||a(this.key,this.value)||this.right.ha(a)};function ed(a){return a.left.e()?a:ed(a.left)}g.Gc=function(){return ed(this).key};g.ec=function(){return this.right.e()?this.key:this.right.ec()}; -g.Oa=function(a,b,c){var d,e;e=this;d=c(a,e.key);e=0>d?e.X(null,null,null,e.left.Oa(a,b,c),null):0===d?e.X(null,b,null,null,null):e.X(null,null,null,null,e.right.Oa(a,b,c));return gd(e)};function hd(a){if(a.left.e())return $c;a.left.ea()||a.left.left.ea()||(a=id(a));a=a.X(null,null,null,hd(a.left),null);return gd(a)} -g.remove=function(a,b){var c,d;c=this;if(0>b(a,c.key))c.left.e()||c.left.ea()||c.left.left.ea()||(c=id(c)),c=c.X(null,null,null,c.left.remove(a,b),null);else{c.left.ea()&&(c=jd(c));c.right.e()||c.right.ea()||c.right.left.ea()||(c=kd(c),c.left.left.ea()&&(c=jd(c),c=kd(c)));if(0===b(a,c.key)){if(c.right.e())return $c;d=ed(c.right);c=c.X(d.key,d.value,null,null,hd(c.right))}c=c.X(null,null,null,null,c.right.remove(a,b))}return gd(c)};g.ea=function(){return this.color}; -function gd(a){a.right.ea()&&!a.left.ea()&&(a=ld(a));a.left.ea()&&a.left.left.ea()&&(a=jd(a));a.left.ea()&&a.right.ea()&&(a=kd(a));return a}function id(a){a=kd(a);a.right.left.ea()&&(a=a.X(null,null,null,null,jd(a.right)),a=ld(a),a=kd(a));return a}function ld(a){return a.right.X(null,null,a.color,a.X(null,null,!0,null,a.right.left),null)}function jd(a){return a.left.X(null,null,a.color,null,a.X(null,null,!0,a.left.right,null))} -function kd(a){return a.X(null,null,!a.color,a.left.X(null,null,!a.left.color,null,null),a.right.X(null,null,!a.right.color,null,null))}function md(){}g=md.prototype;g.X=function(){return this};g.Oa=function(a,b){return new dd(a,b,null)};g.remove=function(){return this};g.count=function(){return 0};g.e=function(){return!0};g.ha=function(){return!1};g.Gc=function(){return null};g.ec=function(){return null};g.ea=function(){return!1};var $c=new md;function O(a,b,c){this.k=a;(this.aa=b)&&Cc(this.aa);a.e()&&D(!this.aa||this.aa.e(),"An empty node cannot have a priority");this.yb=c;this.Db=null}g=O.prototype;g.J=function(){return!1};g.C=function(){return this.aa||L};g.fa=function(a){return this.k.e()?this:new O(this.k,a,this.yb)};g.Q=function(a){if(".priority"===a)return this.C();a=this.k.get(a);return null===a?L:a};g.P=function(a){var b=K(a);return null===b?this:this.Q(b).P(N(a))};g.Da=function(a){return null!==this.k.get(a)}; -g.T=function(a,b){D(b,"We should always be passing snapshot nodes");if(".priority"===a)return this.fa(b);var c=new C(a,b),d,e;b.e()?(d=this.k.remove(a),c=Ac(this.yb,c,this.k)):(d=this.k.Oa(a,b),c=yc(this.yb,c,this.k));e=d.e()?L:this.aa;return new O(d,e,c)};g.F=function(a,b){var c=K(a);if(null===c)return b;D(".priority"!==K(a)||1===Ec(a),".priority must be the last token in a path");var d=this.Q(c).F(N(a),b);return this.T(c,d)};g.e=function(){return this.k.e()};g.Eb=function(){return this.k.count()}; -var nd=/^(0|[1-9]\d*)$/;g=O.prototype;g.H=function(a){if(this.e())return null;var b={},c=0,d=0,e=!0;this.O(H,function(f,h){b[f]=h.H(a);c++;e&&nd.test(f)?d=Math.max(d,Number(f)):e=!1});if(!a&&e&&d<2*c){var f=[],h;for(h in b)f[h]=b[h];return f}a&&!this.C().e()&&(b[".priority"]=this.C().H());return b};g.hash=function(){if(null===this.Db){var a="";this.C().e()||(a+="priority:"+Fc(this.C().H())+":");this.O(H,function(b,c){var d=c.hash();""!==d&&(a+=":"+b+":"+d)});this.Db=""===a?"":Ob(a)}return this.Db}; -g.Ve=function(a,b,c){return(c=od(this,c))?(a=ad(c,new C(a,b)))?a.name:null:ad(this.k,a)};function pd(a,b){var c;c=(c=od(a,b))?(c=c.Gc())&&c.name:a.k.Gc();return c?new C(c,a.k.get(c)):null}function qd(a,b){var c;c=(c=od(a,b))?(c=c.ec())&&c.name:a.k.ec();return c?new C(c,a.k.get(c)):null}g.O=function(a,b){var c=od(this,a);return c?c.ha(function(a){return b(a.name,a.R)}):this.k.ha(b)};g.Wb=function(a){return this.Xb(a.Hc(),a)}; -g.Xb=function(a,b){var c=od(this,b);if(c)return c.Xb(a,function(a){return a});for(var c=this.k.Xb(a.name,qb),d=cd(c);null!=d&&0>b.compare(d,a);)M(c),d=cd(c);return c};g.We=function(a){return this.Zb(a.Fc(),a)};g.Zb=function(a,b){var c=od(this,b);if(c)return c.Zb(a,function(a){return a});for(var c=this.k.Zb(a.name,qb),d=cd(c);null!=d&&010485760/3&&10485760=this.g.compare(this.Uc,a)&&0>=this.g.compare(a,this.vc)};g.F=function(a,b,c,d,e,f){this.matches(new C(b,c))||(c=L);return this.he.F(a,b,c,d,e,f)}; -g.ya=function(a,b,c){b.J()&&(b=L);var d=b.nb(this.g),d=d.fa(L),e=this;b.O(H,function(a,b){e.matches(new C(a,b))||(d=d.T(a,L))});return this.he.ya(a,d,c)};g.fa=function(a){return a};g.Na=function(){return!0};g.Ub=function(){return this.he};function Re(a){this.sa=new Se(a);this.g=a.g;D(a.xa,"Only valid if limit has been set");this.oa=a.oa;this.Ib=!jf(a)}g=Re.prototype;g.F=function(a,b,c,d,e,f){this.sa.matches(new C(b,c))||(c=L);return a.Q(b).Z(c)?a:a.Eb()=this.g.compare(this.sa.Uc,f):0>=this.g.compare(f,this.sa.vc))d=d.T(f.name,f.R),e++;else break}}else{d=b.nb(this.g);d=d.fa(L);var k,m,l;if(this.Ib){b=d.We(this.g);k=this.sa.vc;m=this.sa.Uc;var u=nc(this.g);l=function(a,b){return u(b,a)}}else b=d.Wb(this.g),k=this.sa.Uc, -m=this.sa.vc,l=nc(this.g);for(var e=0,z=!1;0=l(k,f)&&(z=!0),(h=z&&e=l(f,m))?e++:d=d.T(f.name,L)}return this.sa.Ub().ya(a,d,c)};g.fa=function(a){return a};g.Na=function(){return!0};g.Ub=function(){return this.sa.Ub()}; -function kf(a,b,c,d,e,f){var h;if(a.Ib){var k=nc(a.g);h=function(a,b){return k(b,a)}}else h=nc(a.g);D(b.Eb()==a.oa,"");var m=new C(c,d),l=a.Ib?pd(b,a.g):qd(b,a.g),u=a.sa.matches(m);if(b.Da(c)){for(var z=b.Q(c),l=e.fe(a.g,l,a.Ib);null!=l&&(l.name==c||b.Da(l.name));)l=e.fe(a.g,l,a.Ib);e=null==l?1:h(l,m);if(u&&!d.e()&&0<=e)return null!=f&&df(f,new S(Ie,d,c,z)),b.T(c,d);null!=f&&df(f,new S(Le,z,c));b=b.T(c,L);return null!=l&&a.sa.matches(l)?(null!=f&&df(f,new S(Me,l.R,l.name)),b.T(l.name,l.R)):b}return d.e()? -b:u&&0<=h(l,m)?(null!=f&&(df(f,new S(Le,l.R,l.name)),df(f,new S(Me,d,c))),b.T(c,d).T(l.name,L)):b};function S(a,b,c,d){this.type=a;this.Ja=b;this.Xa=c;this.qe=d;this.Dd=void 0}function Ee(a){return new S(Ne,a)}var Me="child_added",Le="child_removed",Ie="child_changed",Je="child_moved",Ne="value";function xe(){this.fb={}} -function df(a,b){var c=b.type,d=b.Xa;D(c==Me||c==Ie||c==Le,"Only child changes supported for tracking");D(".priority"!==d,"Only non-priority child changes can be tracked.");var e=w(a.fb,d);if(e){var f=e.type;if(c==Me&&f==Le)a.fb[d]=new S(Ie,b.Ja,d,e.Ja);else if(c==Le&&f==Me)delete a.fb[d];else if(c==Le&&f==Ie)a.fb[d]=new S(Le,e.qe,d);else if(c==Ie&&f==Me)a.fb[d]=new S(Me,b.Ja,d);else if(c==Ie&&f==Ie)a.fb[d]=new S(Ie,b.Ja,d,e.qe);else throw Mb("Illegal combination of changes: "+b+" occurred after "+ -e);}else a.fb[d]=b};function lf(){this.Rb=this.na=this.Kb=this.ka=this.xa=!1;this.oa=0;this.mb="";this.dc=null;this.zb="";this.ac=null;this.xb="";this.g=H}var mf=new lf;function jf(a){return""===a.mb?a.ka:"l"===a.mb}function ff(a){D(a.ka,"Only valid if start has been set");return a.dc}function ef(a){D(a.ka,"Only valid if start has been set");return a.Kb?a.zb:"[MIN_NAME]"}function hf(a){D(a.na,"Only valid if end has been set");return a.ac} -function gf(a){D(a.na,"Only valid if end has been set");return a.Rb?a.xb:"[MAX_NAME]"}function nf(a){var b=new lf;b.xa=a.xa;b.oa=a.oa;b.ka=a.ka;b.dc=a.dc;b.Kb=a.Kb;b.zb=a.zb;b.na=a.na;b.ac=a.ac;b.Rb=a.Rb;b.xb=a.xb;b.g=a.g;b.mb=a.mb;return b}g=lf.prototype;g.ne=function(a){var b=nf(this);b.xa=!0;b.oa=a;b.mb="l";return b};g.oe=function(a){var b=nf(this);b.xa=!0;b.oa=a;b.mb="r";return b};g.Nd=function(a,b){var c=nf(this);c.ka=!0;n(a)||(a=null);c.dc=a;null!=b?(c.Kb=!0,c.zb=b):(c.Kb=!1,c.zb="");return c}; -g.gd=function(a,b){var c=nf(this);c.na=!0;n(a)||(a=null);c.ac=a;n(b)?(c.Rb=!0,c.xb=b):(c.vg=!1,c.xb="");return c};function of(a,b){var c=nf(a);c.g=b;return c}function pf(a){var b={};a.ka&&(b.sp=a.dc,a.Kb&&(b.sn=a.zb));a.na&&(b.ep=a.ac,a.Rb&&(b.en=a.xb));if(a.xa){b.l=a.oa;var c=a.mb;""===c&&(c=jf(a)?"l":"r");b.vf=c}a.g!==H&&(b.i=a.g.toString());return b}function T(a){return!(a.ka||a.na||a.xa)}function qf(a){return T(a)&&a.g==H} -function rf(a){var b={};if(qf(a))return b;var c;a.g===H?c="$priority":a.g===wc?c="$value":a.g===tc?c="$key":(D(a.g instanceof pc,"Unrecognized index type!"),c=a.g.toString());b.orderBy=x(c);a.ka&&(b.startAt=x(a.dc),a.Kb&&(b.startAt+=","+x(a.zb)));a.na&&(b.endAt=x(a.ac),a.Rb&&(b.endAt+=","+x(a.xb)));a.xa&&(jf(a)?b.limitToFirst=a.oa:b.limitToLast=a.oa);return b}g.toString=function(){return x(pf(this))};function sf(a){this.W=a}var tf=new sf(new vd(null));function uf(a,b,c){if(b.e())return new sf(new vd(c));var d=zd(a.W,b);if(null!=d){var e=d.path,d=d.value;b=P(e,b);d=d.F(b,c);return new sf(a.W.set(e,d))}a=Ad(a.W,b,new vd(c));return new sf(a)}function vf(a,b,c){var d=a;fb(c,function(a,c){d=uf(d,b.n(a),c)});return d}sf.prototype.Ed=function(a){if(a.e())return tf;a=Ad(this.W,a,R);return new sf(a)};function wf(a,b){var c=zd(a.W,b);return null!=c?a.W.get(c.path).P(P(c.path,b)):null} -function xf(a){var b=[],c=a.W.value;null!=c?c.J()||c.O(H,function(a,c){b.push(new C(a,c))}):a.W.children.ha(function(a,c){null!=c.value&&b.push(new C(a,c.value))});return b}function yf(a,b){if(b.e())return a;var c=wf(a,b);return null!=c?new sf(new vd(c)):new sf(a.W.subtree(b))}sf.prototype.e=function(){return this.W.e()};sf.prototype.apply=function(a){return zf(Q,this.W,a)}; -function zf(a,b,c){if(null!=b.value)return c.F(a,b.value);var d=null;b.children.ha(function(b,f){".priority"===b?(D(null!==f.value,"Priority writes must always be leaf nodes"),d=f.value):c=zf(a.n(b),f,c)});c.P(a).e()||null===d||(c=c.F(a.n(".priority"),d));return c};function Af(){this.Jd=L}Af.prototype.j=function(a){return this.Jd.P(a)};Af.prototype.toString=function(){return this.Jd.toString()};function Bf(a){this.oc=a}Bf.prototype.getToken=function(a){return this.oc.INTERNAL.getToken(a).then(null,function(a){return a&&"auth/token-not-initialized"===a.code?(I("Got auth/token-not-initialized error. Treating as null token."),null):Promise.reject(a)})};function Cf(a,b){a.oc.INTERNAL.addAuthTokenListener(b)};function Df(){this.S=tf;this.la=[];this.Bc=-1}function Ef(a,b){for(var c=0;c=b&&Ff(h,c.path)?d=!1:c.path.contains(h.path)&&(e=!0));f--}if(d){if(e)this.S=Gf(this.la,Hf,Q),this.Bc=0h.status){try{b=lb(h.responseText)}catch(c){J("Failed to parse JSON response for "+f+": "+h.responseText)}d(null, -b)}else 401!==h.status&&404!==h.status&&J("Got unsuccessful REST response for "+f+" Status: "+h.status),d(h.status);d=null}};h.open("GET",f,!0);h.send()})};function Uf(a){this.te=a;this.Bd=[];this.Qb=0;this.Yd=-1;this.Fb=null}function Vf(a,b,c){a.Yd=b;a.Fb=c;a.Yd=a.length){var b=Number(a);if(!isNaN(b)){e.Fe=b;e.frames=[];a=null;break a}}e.Fe=1;e.frames=[]}null!==a&&ag(e,a)}};this.Ia.onerror=function(a){e.f("WebSocket error. Closing connection.");(a=a.message||a.data)&&e.f(a);e.bb()}};Yf.prototype.start=function(){}; -Yf.isAvailable=function(){var a=!1;if("undefined"!==typeof navigator&&navigator.userAgent){var b=navigator.userAgent.match(/Android ([0-9]{0,}\.[0-9]{0,})/);b&&1parseFloat(b[1])&&(a=!0)}return!a&&null!==Xf&&!Zf};Yf.responsesRequiredToBeHealthy=2;Yf.healthyTimeout=3E4;g=Yf.prototype;g.sd=function(){xb.remove("previous_websocket_failure")};function ag(a,b){a.frames.push(b);if(a.frames.length==a.Fe){var c=a.frames.join("");a.frames=null;c=lb(c);a.Xf(c)}} -g.send=function(a){$f(this);a=x(a);this.qb+=a.length;Mf(this.Va,"bytes_sent",a.length);a=bc(a,16384);1document.domain="'+document.domain+'";\x3c/script>');a=""+a+"";try{this.Ea.gb.open(),this.Ea.gb.write(a),this.Ea.gb.close()}catch(f){I("frame writing exception"),f.stack&&I(f.stack),I(f)}} -fg.prototype.close=function(){this.Ud=!1;if(this.Ea){this.Ea.gb.body.innerHTML="";var a=this;setTimeout(function(){null!==a.Ea&&(document.body.removeChild(a.Ea),a.Ea=null)},Math.floor(0))}var b=this.ib;b&&(this.ib=null,b())}; -function ig(a){if(a.Ud&&a.Kd&&a.ve.count()<(0=a.Qc[0].Pe.length+30+c.length){var e=a.Qc.shift(),c=c+"&seg"+d+"="+e.jg+"&ts"+d+"="+e.pg+"&d"+d+"="+e.Pe;d++}else break;jg(a,b+c,a.$d);return!0}return!1}function jg(a,b,c){function d(){a.ve.remove(c);ig(a)}a.ve.add(c,1);var e=setTimeout(d,Math.floor(25E3));hg(a,b,function(){clearTimeout(e);d()})} -function hg(a,b,c){setTimeout(function(){try{if(a.Kd){var d=a.Ea.gb.createElement("script");d.type="text/javascript";d.async=!0;d.src=b;d.onload=d.onreadystatechange=function(){var a=d.readyState;a&&"loaded"!==a&&"complete"!==a||(d.onload=d.onreadystatechange=null,d.parentNode&&d.parentNode.removeChild(d),c())};d.onerror=function(){I("Long-poll script failed to load: "+b);a.Kd=!1;a.close()};a.Ea.gb.body.appendChild(d)}}catch(e){}},Math.floor(1))};function kg(a){lg(this,a)}var mg=[cg,Yf];function lg(a,b){var c=Yf&&Yf.isAvailable(),d=c&&!(xb.Ze||!0===xb.get("previous_websocket_failure"));b.qg&&(c||J("wss:// URL used, but browser isn't known to support websockets. Trying anyway."),d=!0);if(d)a.Wc=[Yf];else{var e=a.Wc=[];cc(mg,function(a,b){b&&b.isAvailable()&&e.push(b)})}}function ng(a){if(0=a.pf?(a.f("Secondary connection is healthy."),a.Bb=!0,a.D.sd(),a.D.start(),a.f("sending client ack on secondary"),a.D.send({t:"c",d:{t:"a",d:{}}}),a.f("Ending transmission on primary"),a.I.send({t:"c",d:{t:"n",d:{}}}),a.Xc=a.D,ug(a)):(a.f("sending ping on secondary."),a.D.send({t:"c",d:{t:"p",d:{}}}))}og.prototype.wd=function(a){wg(this);this.te(a)};function wg(a){a.Bb||(a.xe--,0>=a.xe&&(a.f("Primary connection is healthy."),a.Bb=!0,a.I.sd()))} -function tg(a,b){a.D=new b("c:"+a.id+":"+a.Le++,a.L,a.qf);a.pf=b.responsesRequiredToBeHealthy||0;a.D.open(qg(a,a.D),rg(a,a.D));hc(function(){a.D&&(a.f("Timed out trying to upgrade."),a.D.close())},Math.floor(6E4))}function sg(a,b,c){a.f("Realtime connection established.");a.I=b;a.Ua=1;a.Lc&&(a.Lc(c,a.qf),a.Lc=null);0===a.xe?(a.f("Primary connection is healthy."),a.Bb=!0):hc(function(){xg(a)},Math.floor(5E3))} -function xg(a){a.Bb||1!==a.Ua||(a.f("sending ping on primary."),zg(a,{t:"c",d:{t:"p",d:{}}}))}function zg(a,b){if(1!==a.Ua)throw"Connection is not connected";a.Xc.send(b)}og.prototype.close=function(){2!==this.Ua&&(this.f("Closing realtime connection."),this.Ua=2,vg(this),this.ia&&(this.ia(),this.ia=null))};function vg(a){a.f("Shutting down all connections");a.I&&(a.I.close(),a.I=null);a.D&&(a.D.close(),a.D=null);a.md&&(clearTimeout(a.md),a.md=null)};function Ag(a,b,c,d,e,f){this.id=Bg++;this.f=Tb("p:"+this.id+":");this.qd={};this.$={};this.pa=[];this.Oc=0;this.Kc=[];this.ma=!1;this.Sa=1E3;this.td=3E5;this.Gb=b;this.Jc=c;this.ue=d;this.L=a;this.ob=this.Fa=this.Cb=this.ze=null;this.$c=e;this.de=!1;this.ke=0;if(f)throw Error("Auth override specified in options, but not supported on non Node.js platforms");this.Vd=f;this.ub=null;this.Mb=!1;this.Gd={};this.ig=0;this.Re=!0;this.Ac=this.me=null;Cg(this,0);Mc.Vb().gc("visible",this.Zf,this);-1===a.host.indexOf("fblocal")&& -Lc.Vb().gc("online",this.Yf,this)}var Bg=0,Dg=0;g=Ag.prototype;g.ua=function(a,b,c){var d=++this.ig;a={r:d,a:a,b:b};this.f(x(a));D(this.ma,"sendRequest call when we're not connected not allowed.");this.Fa.ua(a);c&&(this.Gd[d]=c)}; -g.$e=function(a,b,c,d){var e=a.ja(),f=a.path.toString();this.f("Listen called for "+f+" "+e);this.$[f]=this.$[f]||{};D(qf(a.m)||!T(a.m),"listen() called for non-default but complete query");D(!this.$[f][e],"listen() called twice for same path/queryId.");a={G:d,ld:b,eg:a,tag:c};this.$[f][e]=a;this.ma&&Eg(this,a)}; -function Eg(a,b){var c=b.eg,d=c.path.toString(),e=c.ja();a.f("Listen on "+d+" for "+e);var f={p:d};b.tag&&(f.q=pf(c.m),f.t=b.tag);f.h=b.ld();a.ua("q",f,function(f){var k=f.d,m=f.s;if(k&&"object"===typeof k&&eb(k,"w")){var l=w(k,"w");ea(l)&&0<=xa(l,"no_index")&&J("Using an unspecified index. Consider adding "+('".indexOn": "'+c.m.g.toString()+'"')+" at "+c.path.toString()+" to your security rules for better performance")}(a.$[d]&&a.$[d][e])===b&&(a.f("listen response",f),"ok"!==m&&Fg(a,d,e),b.G&&b.G(m, -k))})}g.kf=function(a){this.ob=a;this.f("Auth token refreshed");this.ob?Gg(this):this.ma&&this.ua("unauth",{},function(){});if(a&&40===a.length||kc(a))this.f("Admin auth credential detected. Reducing max reconnect time."),this.td=3E4};function Gg(a){if(a.ma&&a.ob){var b=a.ob,c=jc(b)?"auth":"gauth",d={cred:b};null===a.Vd?d.noauth=!0:"object"===typeof a.Vd&&(d.authvar=a.Vd);a.ua(c,d,function(c){var d=c.s;c=c.d||"error";a.ob===b&&("ok"===d?a.ke=0:Hg(a,d,c))})}} -g.uf=function(a,b){var c=a.path.toString(),d=a.ja();this.f("Unlisten called for "+c+" "+d);D(qf(a.m)||!T(a.m),"unlisten() called for non-default but complete query");if(Fg(this,c,d)&&this.ma){var e=pf(a.m);this.f("Unlisten on "+c+" for "+d);c={p:c};b&&(c.q=e,c.t=b);this.ua("n",c)}};g.re=function(a,b,c){this.ma?Ig(this,"o",a,b,c):this.Kc.push({we:a,action:"o",data:b,G:c})};g.cf=function(a,b,c){this.ma?Ig(this,"om",a,b,c):this.Kc.push({we:a,action:"om",data:b,G:c})}; -g.xd=function(a,b){this.ma?Ig(this,"oc",a,null,b):this.Kc.push({we:a,action:"oc",data:null,G:b})};function Ig(a,b,c,d,e){c={p:c,d:d};a.f("onDisconnect "+b,c);a.ua(b,c,function(a){e&&setTimeout(function(){e(a.s,a.d)},Math.floor(0))})}g.put=function(a,b,c,d){Jg(this,"p",a,b,c,d)};g.af=function(a,b,c,d){Jg(this,"m",a,b,c,d)};function Jg(a,b,c,d,e,f){d={p:c,d:d};n(f)&&(d.h=f);a.pa.push({action:b,mf:d,G:e});a.Oc++;b=a.pa.length-1;a.ma?Kg(a,b):a.f("Buffering put: "+c)} -function Kg(a,b){var c=a.pa[b].action,d=a.pa[b].mf,e=a.pa[b].G;a.pa[b].fg=a.ma;a.ua(c,d,function(d){a.f(c+" response",d);delete a.pa[b];a.Oc--;0===a.Oc&&(a.pa=[]);e&&e(d.s,d.d)})}g.ye=function(a){this.ma&&(a={c:a},this.f("reportStats",a),this.ua("s",a,function(a){"ok"!==a.s&&this.f("reportStats","Error sending stats: "+a.d)}))}; -g.wd=function(a){if("r"in a){this.f("from server: "+x(a));var b=a.r,c=this.Gd[b];c&&(delete this.Gd[b],c(a.b))}else{if("error"in a)throw"A server-side error has occurred: "+a.error;"a"in a&&(b=a.a,a=a.b,this.f("handleServerMessage",b,a),"d"===b?this.Gb(a.p,a.d,!1,a.t):"m"===b?this.Gb(a.p,a.d,!0,a.t):"c"===b?Lg(this,a.p,a.q):"ac"===b?Hg(this,a.s,a.d):"sd"===b?this.ze?this.ze(a):"msg"in a&&"undefined"!==typeof console&&console.log("FIREBASE: "+a.msg.replace("\n","\nFIREBASE: ")):Ub("Unrecognized action received from server: "+ -x(b)+"\nAre you using the latest client?"))}};g.Lc=function(a,b){this.f("connection ready");this.ma=!0;this.Ac=(new Date).getTime();this.ue({serverTimeOffset:a-(new Date).getTime()});this.Cb=b;if(this.Re){var c={};c["sdk.js."+firebase.SDK_VERSION.replace(/\./g,"-")]=1;pb()?c["framework.cordova"]=1:"object"===typeof navigator&&"ReactNative"===navigator.product&&(c["framework.reactnative"]=1);this.ye(c)}Mg(this);this.Re=!1;this.Jc(!0)}; -function Cg(a,b){D(!a.Fa,"Scheduling a connect when we're already connected/ing?");a.ub&&clearTimeout(a.ub);a.ub=setTimeout(function(){a.ub=null;Ng(a)},Math.floor(b))}g.Zf=function(a){a&&!this.Mb&&this.Sa===this.td&&(this.f("Window became visible. Reducing delay."),this.Sa=1E3,this.Fa||Cg(this,0));this.Mb=a};g.Yf=function(a){a?(this.f("Browser went online."),this.Sa=1E3,this.Fa||Cg(this,0)):(this.f("Browser went offline. Killing connection."),this.Fa&&this.Fa.close())}; -g.df=function(){this.f("data client disconnected");this.ma=!1;this.Fa=null;for(var a=0;af.Bc,"Stacking an older write on top of newer ones");n(h)||(h=!0);f.la.push({path:b,Ga:c,Zc:d,visible:h});h&&(f.S=uf(f.S,b,c));f.Bc=d;return e?ch(a,new ce(fe,b,c)):[]}function dh(a,b,c,d){var e=a.jb;D(d>e.Bc,"Stacking an older merge on top of newer ones");e.la.push({path:b,children:c,Zc:d,visible:!0});e.S=vf(e.S,b,c);e.Bc=d;c=xd(c);return ch(a,new ae(fe,b,c))} -function eh(a,b,c){c=c||!1;var d=Ef(a.jb,b);if(a.jb.Ed(b)){var e=R;null!=d.Ga?e=e.set(Q,!0):fb(d.children,function(a,b){e=e.set(new E(a),b)});return ch(a,new de(d.path,e,c))}return[]}function fh(a,b,c){c=xd(c);return ch(a,new ae(ie,b,c))}function gh(a,b,c,d){d=hh(a,d);if(null!=d){var e=ih(d);d=e.path;e=e.Hb;b=P(d,b);c=new ce(new he(!1,!0,e,!0),b,c);return jh(a,d,c)}return[]} -function kh(a,b,c,d){if(d=hh(a,d)){var e=ih(d);d=e.path;e=e.Hb;b=P(d,b);c=xd(c);c=new ae(new he(!1,!0,e,!0),b,c);return jh(a,d,c)}return[]} -ah.prototype.Nb=function(a,b){var c=a.path,d=null,e=!1;Fd(this.wa,c,function(a,b){var f=P(a,c);d=d||b.hb(f);e=e||null!=Yg(b)});var f=this.wa.get(c);f?(e=e||null!=Yg(f),d=d||f.hb(Q)):(f=new Xg,this.wa=this.wa.set(c,f));var h;null!=d?h=!0:(h=!1,d=L,Jd(this.wa.subtree(c),function(a,b){var c=b.hb(Q);c&&(d=d.T(a,c))}));var k=null!=$g(f,a);if(!k&&!T(a.m)){var m=lh(a);D(!(m in this.ic),"View does not exist, but we have a tag");var l=mh++;this.ic[m]=l;this.De["_"+l]=m}h=f.Nb(a,b,new If(c,this.jb),d,h);k|| -e||(f=$g(f,a),h=h.concat(nh(this,a,f)));return h}; -ah.prototype.kb=function(a,b,c){var d=a.path,e=this.wa.get(d),f=[];if(e&&("default"===a.ja()||null!=$g(e,a))){f=e.kb(a,b,c);e.e()&&(this.wa=this.wa.remove(d));e=f.hg;f=f.Kf;b=-1!==Ea(e,function(a){return T(a.m)});var h=Dd(this.wa,d,function(a,b){return null!=Yg(b)});if(b&&!h&&(d=this.wa.subtree(d),!d.e()))for(var d=oh(d),k=0;k=a)throw Error("Query.limitToFirst: First argument must be a positive integer.");if(this.m.xa)throw Error("Query.limitToFirst: Limit was already set (by another call to limit, limitToFirst, or limitToLast).");return new X(this.u,this.path,this.m.ne(a),this.Nc)}; -g.oe=function(a){y("Query.limitToLast",1,1,arguments.length);if(!ga(a)||Math.floor(a)!==a||0>=a)throw Error("Query.limitToLast: First argument must be a positive integer.");if(this.m.xa)throw Error("Query.limitToLast: Limit was already set (by another call to limit, limitToFirst, or limitToLast).");return new X(this.u,this.path,this.m.oe(a),this.Nc)}; -g.ag=function(a){y("Query.orderByChild",1,1,arguments.length);if("$key"===a)throw Error('Query.orderByChild: "$key" is invalid. Use Query.orderByKey() instead.');if("$priority"===a)throw Error('Query.orderByChild: "$priority" is invalid. Use Query.orderByPriority() instead.');if("$value"===a)throw Error('Query.orderByChild: "$value" is invalid. Use Query.orderByValue() instead.');Vd("Query.orderByChild",a);Sh(this,"Query.orderByChild");var b=new E(a);if(b.e())throw Error("Query.orderByChild: cannot pass in empty path. Use Query.orderByValue() instead."); -b=new pc(b);b=of(this.m,b);Qh(b);return new X(this.u,this.path,b,!0)};g.bg=function(){y("Query.orderByKey",0,0,arguments.length);Sh(this,"Query.orderByKey");var a=of(this.m,tc);Qh(a);return new X(this.u,this.path,a,!0)};g.cg=function(){y("Query.orderByPriority",0,0,arguments.length);Sh(this,"Query.orderByPriority");var a=of(this.m,H);Qh(a);return new X(this.u,this.path,a,!0)}; -g.dg=function(){y("Query.orderByValue",0,0,arguments.length);Sh(this,"Query.orderByValue");var a=of(this.m,wc);Qh(a);return new X(this.u,this.path,a,!0)};g.Nd=function(a,b){y("Query.startAt",0,2,arguments.length);Od("Query.startAt",a,this.path,!0);Ud("Query.startAt",b);var c=this.m.Nd(a,b);Rh(c);Qh(c);if(this.m.ka)throw Error("Query.startAt: Starting point was already set (by another call to startAt or equalTo).");n(a)||(b=a=null);return new X(this.u,this.path,c,this.Nc)}; -g.gd=function(a,b){y("Query.endAt",0,2,arguments.length);Od("Query.endAt",a,this.path,!0);Ud("Query.endAt",b);var c=this.m.gd(a,b);Rh(c);Qh(c);if(this.m.na)throw Error("Query.endAt: Ending point was already set (by another call to endAt or equalTo).");return new X(this.u,this.path,c,this.Nc)}; -g.If=function(a,b){y("Query.equalTo",1,2,arguments.length);Od("Query.equalTo",a,this.path,!1);Ud("Query.equalTo",b);if(this.m.ka)throw Error("Query.equalTo: Starting point was already set (by another call to startAt or equalTo).");if(this.m.na)throw Error("Query.equalTo: Ending point was already set (by another call to endAt or equalTo).");return this.Nd(a,b).gd(a,b)}; -g.toString=function(){y("Query.toString",0,0,arguments.length);for(var a=this.path,b="",c=a.Y;c>6,128|63&r);else if(55296==(64512&r)){var a=n>18,128|r>>12&63,128|r>>6&63,128|63&r)}else t.push(239,191,189)}else 56320==(64512&r)?t.push(239,191,189):t.push(224|r>>12,128|r>>6&63,128|63&r)}return new Uint8Array(t)}function u(e){var t=void 0;try{t=decodeURIComponent(e)}catch(e){throw h.invalidFormat(p.DATA_URL,"Malformed data URL.")}return i(t)}function s(e,t){switch(e){case p.BASE64:var n=-1!==t.indexOf("-"),r=-1!==t.indexOf("_");if(n||r){var a=n?"-":"_";throw h.invalidFormat(e,"Invalid character '"+a+"' found: is it base64url encoded?")}break;case p.BASE64URL:var o=-1!==t.indexOf("+"),i=-1!==t.indexOf("/");if(o||i){var u=o?"+":"/";throw h.invalidFormat(e,"Invalid character '"+u+"' found: is it base64 encoded?")}t=t.replace(/-/g,"+").replace(/_/g,"/")}var s=void 0;try{s=atob(t)}catch(t){throw h.invalidFormat(e,"Invalid character found")}for(var l=new Uint8Array(s.length),c=0;c=t.length)&&e.substring(e.length-t.length)===t}Object.defineProperty(t,"__esModule",{value:!0}),t.StringData=t.StringFormat=void 0,t.formatValidator=a,t.dataFromString=o,t.utf8Bytes_=i,t.percentEncodedBytes_=u,t.base64Bytes_=s,t.dataURLBytes_=l,t.dataURLContentType_=c;var d=n(1),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}(d),p=t.StringFormat={RAW:"raw",BASE64:"base64",BASE64URL:"base64url",DATA_URL:"data_url"},v=t.StringData=function e(t,n){r(this,e),this.data=t,this.contentType=n||null},_=function e(t){r(this,e),this.base64=!1,this.contentType=null;var n=t.match(/^data:([^,]+)?,/);if(null===n)throw h.invalidFormat(p.DATA_URL,"Must be formatted 'data:[][;base64],");var a=n[1]||null;null!=a&&(this.base64=f(a,";base64"),this.contentType=this.base64?a.substring(0,a.length-";base64".length):a),this.rest=t.substring(t.indexOf(",")+1)}},,,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 a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t,n){for(var r=t.length,a=t.length,o=0;o=0))throw"Expected a number 0 or greater."})}function f(e,t){return new m(function(t){if(!(null===t||b.isDef(t)&&t instanceof Object))throw"Expected an Object.";void 0!==e&&null!==e&&e(t)},t)}function d(e){return new m(function(e){if(null!==e&&!b.isFunction(e))throw"Expected a Function."},e)}Object.defineProperty(t,"__esModule",{value:!0}),t.ArgSpec=void 0,t.validate=o,t.and_=i,t.stringSpec=u,t.uploadDataSpec=s,t.metadataSpec=l,t.nonNegativeNumberSpec=c,t.looseObjectSpec=f,t.nullFunctionSpec=d;var h=n(1),p=r(h),v=n(13),_=r(v),y=n(0),b=r(y),m=t.ArgSpec=function e(t,n){a(this,e);var r=this;this.validator=function(e){r.optional&&!b.isJustDef(e)||t(e)},this.optional=!!n}},function(e,t,n){"use strict";function r(e,t){return-1!==e.indexOf(t)}function a(e){return Array.prototype.slice.call(e)}function o(e,t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)}Object.defineProperty(t,"__esModule",{value:!0}),t.contains=r,t.clone=a,t.remove=o},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 a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){return t}function i(e){return!m.isString(e)||e.length<2?e:(e=e,y.lastComponent(e))}function u(){if(w)return w;var e=[];e.push(new R("bucket")),e.push(new R("generation")),e.push(new R("metageneration")),e.push(new R("name","fullPath",!0));var t=new R("name");t.xform=function(e,t){return i(t)},e.push(t);var n=new R("size");return n.xform=function(e,t){return m.isDef(t)?+t:t},e.push(n),e.push(new R("timeCreated")),e.push(new R("updated")),e.push(new R("md5Hash",null,!0)),e.push(new R("cacheControl",null,!0)),e.push(new R("contentDisposition",null,!0)),e.push(new R("contentEncoding",null,!0)),e.push(new R("contentLanguage",null,!0)),e.push(new R("contentType",null,!0)),e.push(new R("metadata","customMetadata",!0)),e.push(new R("downloadTokens","downloadURLs",!1,function(e,t){if(!(m.isString(t)&&t.length>0))return[];var n=encodeURIComponent;return t.split(",").map(function(t){var r=e.bucket,a=e.fullPath,o="/b/"+n(r)+"/o/"+n(a);return g.makeDownloadUrl(o)+g.makeQueryString({alt:"media",token:t})})})),w=e}function s(e,t){Object.defineProperty(e,"ref",{get:function(){var n=e.bucket,r=e.fullPath,a=new v.Location(n,r);return t.makeStorageReference(a)}})}function l(e,t,n){var r={};r.type="file";for(var a=n.length,o=0;o1&&void 0!==arguments[1]?arguments[1]:null;return u.validate("put",[u.uploadDataSpec(),u.metadataSpec(!0)],arguments),this.throwIfRoot_("put"),new S.UploadTask(this,this.authWrapper,this.location,this.mappings(),new s.FbsBlob(e),t)}},{key:"putString",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:k.StringFormat.RAW,n=arguments[2];u.validate("putString",[u.stringSpec(),u.stringSpec(g.formatValidator,!0),u.metadataSpec(!0)],arguments),this.throwIfRoot_("putString");var r=g.dataFromString(t,e),a=v.clone(n);return!w.isDef(a.contentType)&&w.isDef(r.contentType)&&(a.contentType=r.contentType),new S.UploadTask(this,this.authWrapper,this.location,this.mappings(),new s.FbsBlob(r.data,!0),a)}},{key:"delete",value:function(){u.validate("delete",[],arguments),this.throwIfRoot_("delete");var e=this;return this.authWrapper.getAuthToken().then(function(t){var n=m.deleteObject(e.authWrapper,e.location);return e.authWrapper.makeRequest(n,t).getPromise()})}},{key:"getMetadata",value:function(){u.validate("getMetadata",[],arguments),this.throwIfRoot_("getMetadata");var e=this;return this.authWrapper.getAuthToken().then(function(t){var n=m.getMetadata(e.authWrapper,e.location,e.mappings());return e.authWrapper.makeRequest(n,t).getPromise()})}},{key:"updateMetadata",value:function(e){u.validate("updateMetadata",[u.metadataSpec()],arguments),this.throwIfRoot_("updateMetadata");var t=this;return this.authWrapper.getAuthToken().then(function(n){var r=m.updateMetadata(t.authWrapper,t.location,e,t.mappings());return t.authWrapper.makeRequest(r,n).getPromise()})}},{key:"getDownloadURL",value:function(){return u.validate("getDownloadURL",[],arguments),this.throwIfRoot_("getDownloadURL"),this.getMetadata().then(function(e){var t=e.downloadURLs[0];if(w.isDef(t))return t;throw c.noDownloadURL()})}},{key:"throwIfRoot_",value:function(e){if(""===this.location.path)throw c.invalidRootOperation(e)}},{key:"parent",get:function(){var e=y.parent(this.location.path);if(null===e)return null;var t=new f.Location(this.location.bucket,e);return this.newRef(this.authWrapper,t)}},{key:"root",get:function(){var e=new f.Location(this.location.bucket,"");return this.newRef(this.authWrapper,e)}},{key:"bucket",get:function(){return this.location.bucket}},{key:"fullPath",get:function(){return this.location.path}},{key:"name",get:function(){return y.lastComponent(this.location.path)}},{key:"storage",get:function(){return this.authWrapper.service()}}]),e}()},,,,,,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 a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.FbsBlob=void 0;var o=function(){function e(e,t){for(var n=0;n0}).join("/");return 0===e.length?n:e+"/"+n}function o(e){var t=e.lastIndexOf("/",e.length-2);return-1===t?e:e.slice(t+1)}Object.defineProperty(t,"__esModule",{value:!0}),t.parent=r,t.child=a,t.lastComponent=o},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 a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e){if(!e)throw w.unknown()}function i(e,t){return function(n,r){var a=E.fromResourceString(e,r,t);return o(null!==a),a}}function u(e){return function(t,n){var r=void 0;return r=401===t.getStatus()?w.unauthenticated():402===t.getStatus()?w.quotaExceeded(e.bucket):403===t.getStatus()?w.unauthorized(e.path):n,r.setServerResponseProp(n.serverResponseProp()),r}}function s(e){var t=u(e);return function(n,r){var a=t(n,r);return 404===n.getStatus()&&(a=w.objectNotFound(e.path)),a.setServerResponseProp(r.serverResponseProp()),a}}function l(e,t,n){var r=t.fullServerUrl(),a=I.makeNormalUrl(r),o=e.maxOperationRetryTime(),u=new U.RequestInfo(a,"GET",i(e,n),o);return u.errorHandler=s(t),u}function c(e,t,n,r){var a=t.fullServerUrl(),o=I.makeNormalUrl(a),u=E.toResourceString(n,r),l=e.maxOperationRetryTime(),c=new U.RequestInfo(o,"PATCH",i(e,r),l);return c.headers={"Content-Type":"application/json; charset=utf-8"},c.body=u,c.errorHandler=s(t),c}function f(e,t){var n=t.fullServerUrl(),r=I.makeNormalUrl(n),a=e.maxOperationRetryTime(),o=new U.RequestInfo(r,"DELETE",function(){},a);return o.successCodes=[200,204],o.errorHandler=s(t),o}function d(e,t){return e&&e.contentType||t&&t.type()||"application/octet-stream"}function h(e,t,n){var r=O.clone(n);return r.fullPath=e.path,r.size=t.size(),r.contentType||(r.contentType=d(null,t)),r}function p(e,t,n,r,a){var o=t.bucketOnlyServerUrl(),s={"X-Goog-Upload-Protocol":"multipart"},l=function(){for(var e="",t=0;t<2;t++)e+=Math.random().toString().slice(2);return e}();s["Content-Type"]="multipart/related; boundary="+l;var c=h(t,r,a),f=E.toResourceString(c,n),d="--"+l+"\r\nContent-Type: application/json; charset=utf-8\r\n\r\n"+f+"\r\n--"+l+"\r\nContent-Type: "+c.contentType+"\r\n\r\n",p=g.FbsBlob.getBlob(d,r,"\r\n--"+l+"--");if(null===p)throw w.cannotSliceBlob();var v={name:c.fullPath},_=I.makeUploadUrl(o),y=e.maxUploadRetryTime(),b=new U.RequestInfo(_,"POST",i(e,n),y);return b.urlParams=v,b.headers=s,b.body=p.uploadData(),b.errorHandler=u(t),b}function v(e,t){var n=void 0;try{n=e.getResponseHeader("X-Goog-Upload-Status")}catch(e){o(!1)}return o(k.contains(t||["active"],n)),n}function _(e,t,n,r,a){var i=t.bucketOnlyServerUrl(),s=h(t,r,a),l={name:s.fullPath},c=I.makeUploadUrl(i),f={"X-Goog-Upload-Protocol":"resumable","X-Goog-Upload-Command":"start","X-Goog-Upload-Header-Content-Length":r.size(),"X-Goog-Upload-Header-Content-Type":s.contentType,"Content-Type":"application/json; charset=utf-8"},d=E.toResourceString(s,n),p=e.maxUploadRetryTime(),_=new U.RequestInfo(c,"POST",function(e){v(e);var t=void 0;try{t=e.getResponseHeader("X-Goog-Upload-URL")}catch(e){o(!1)}return o(C.isString(t)),t},p);return _.urlParams=l,_.headers=f,_.body=d,_.errorHandler=u(t),_}function y(e,t,n,r){var a=e.maxUploadRetryTime(),i=new U.RequestInfo(n,"POST",function(e){var t=v(e,["active","final"]),n=void 0;try{n=e.getResponseHeader("X-Goog-Upload-Size-Received")}catch(e){o(!1)}var a=parseInt(n,10);return o(!isNaN(a)),new P(a,r.size(),"final"===t)},a);return i.headers={"X-Goog-Upload-Command":"query"},i.errorHandler=u(t),i}function b(e,t,n,r,a,o,s,l){var c=new P(0,0);if(s?(c.current=s.current,c.total=s.total):(c.current=0,c.total=r.size()),r.size()!==c.total)throw w.serverFileWrongSize();var f=c.total-c.current,d=f;a>0&&(d=Math.min(d,a));var h=c.current,p=h+d,_=d===f?"upload, finalize":"upload",y={"X-Goog-Upload-Command":_,"X-Goog-Upload-Offset":c.current},b=r.slice(h,p);if(null===b)throw w.cannotSliceBlob();var m=t.maxUploadRetryTime(),k=new U.RequestInfo(n,"POST",function(e,n){var a=v(e,["active","final"]),u=c.current+d,s=r.size(),l=void 0;return l="final"===a?i(t,o)(e,n):null,new P(u,s,"final"===a,l)},m);return k.headers=y,k.body=b.uploadData(),k.progressCallback=l||null,k.errorHandler=u(e),k}Object.defineProperty(t,"__esModule",{value:!0}),t.resumableUploadChunkSize=t.ResumableUploadStatus=void 0,t.handlerCheck=o,t.metadataHandler=i,t.sharedErrorHandler=u,t.objectErrorHandler=s,t.getMetadata=l,t.updateMetadata=c,t.deleteObject=f,t.determineContentType_=d,t.metadataForUpload_=h,t.multipartUpload=p,t.checkResumeHeader_=v,t.createResumableUpload=_,t.getResumableUploadStatus=y,t.continueResumableUpload=b;var m=n(12),k=r(m),g=n(22),R=n(1),w=r(R),S=n(13),E=r(S),T=n(3),O=r(T),U=n(46),N=n(0),C=r(N),A=n(14),I=r(A),P=t.ResumableUploadStatus=function e(t,n,r,o){a(this,e),this.current=t,this.total=n,this.finalized=!!r,this.metadata=o||null};t.resumableUploadChunkSize=262144},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=t.ErrorCode=void 0;!function(e){e[e.NO_ERROR=0]="NO_ERROR",e[e.NETWORK_ERROR=1]="NETWORK_ERROR",e[e.ABORT=2]="ABORT"}(r||(t.ErrorCode=r={}))},,,,,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.XhrIoPool=void 0;var a=function(){function e(e,t){for(var n=0;n1?t-1:0),i=1;i0&&void 0!==arguments[0]&&arguments[0]}}]),e}()},function(e,t,n){"use strict";function r(){return"undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:void 0}function a(){for(var e=r(),t=arguments.length,n=Array(t),a=0;a0&&(e.Authorization="Firebase "+t)}function i(e){var t="undefined"!=typeof firebase?firebase.SDK_VERSION:"AppManager";e["X-Firebase-Storage-Version"]="webjs/"+t}function u(e,t,n){var r=R.makeQueryString(e.urlParams),a=e.url+r,u=_.clone(e.headers);return o(u,t),i(u),new E(a,e.method,u,e.body,e.successCodes,e.additionalRetryCodes,e.handler,e.errorHandler,e.timeout,e.progressCallback,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.RequestEndStatus=void 0;var s=function(){function e(e,t){for(var n=0;n=500&&e<600||t||n}}]),e}(),T=t.RequestEndStatus=function e(t,n,r){a(this,e),this.wasSuccessCode=t,this.xhr=n,this.canceled=!!r}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});t.RequestInfo=function e(t,n,a,o){r(this,e),this.url=t,this.method=n,this.handler=a,this.timeout=o,this.urlParams={},this.headers={},this.body=null,this.errorHandler=null,this.progressCallback=null,this.successCodes=[200],this.additionalRetryCodes=[]}},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 a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.RequestMap=void 0;var o=function(){function e(e,t){for(var n=0;n5&&void 0!==arguments[5]?arguments[5]:null;a(this,e),this.transferred_=0,this.needToFetchStatus_=!1,this.needToFetchMetadata_=!1,this.observers_=[],this.error_=null,this.uploadUrl_=null,this.request_=null,this.chunkMultiplier_=1,this.resolve_=null,this.reject_=null,this.ref_=t,this.authWrapper_=n,this.location_=r,this.blob_=u,this.metadata_=l,this.mappings_=o,this.resumable_=this.shouldDoResumable_(this.blob_),this.state_=i.InternalTaskState.RUNNING,this.errorHandler_=function(e){s.request_=null,s.chunkMultiplier_=1,e.codeEquals(_.Code.CANCELED)?(s.needToFetchStatus_=!0,s.completeTransitions_()):(s.error_=e,s.transition_(i.InternalTaskState.ERROR))},this.metadataErrorHandler_=function(e){s.request_=null,e.codeEquals(_.Code.CANCELED)?s.completeTransitions_():(s.error_=e,s.transition_(i.InternalTaskState.ERROR))},this.promise_=b.make(function(e,t){s.resolve_=e,s.reject_=t,s.start_()}),this.promise_.then(null,function(){})}return o(e,[{key:"makeProgressCallback_",value:function(){var e=this,t=this.transferred_;return function(n){e.updateProgress_(t+n)}}},{key:"shouldDoResumable_",value:function(e){return e.size()>262144}},{key:"start_",value:function(){this.state_===i.InternalTaskState.RUNNING&&null===this.request_&&(this.resumable_?null===this.uploadUrl_?this.createResumable_():this.needToFetchStatus_?this.fetchStatus_():this.needToFetchMetadata_?this.fetchMetadata_():this.continueUpload_():this.oneShotUpload_())}},{key:"resolveToken_",value:function(e){var t=this;this.authWrapper_.getAuthToken().then(function(n){switch(t.state_){case i.InternalTaskState.RUNNING:e(n);break;case i.InternalTaskState.CANCELING:t.transition_(i.InternalTaskState.CANCELED);break;case i.InternalTaskState.PAUSING:t.transition_(i.InternalTaskState.PAUSED)}})}},{key:"createResumable_",value:function(){var e=this;this.resolveToken_(function(t){var n=k.createResumableUpload(e.authWrapper_,e.location_,e.mappings_,e.blob_,e.metadata_),r=e.authWrapper_.makeRequest(n,t);e.request_=r,r.getPromise().then(function(t){e.request_=null,e.uploadUrl_=t,e.needToFetchStatus_=!1,e.completeTransitions_()},e.errorHandler_)})}},{key:"fetchStatus_",value:function(){var e=this,t=this.uploadUrl_;this.resolveToken_(function(n){var r=k.getResumableUploadStatus(e.authWrapper_,e.location_,t,e.blob_),a=e.authWrapper_.makeRequest(r,n);e.request_=a,a.getPromise().then(function(t){t=t,e.request_=null,e.updateProgress_(t.current),e.needToFetchStatus_=!1,t.finalized&&(e.needToFetchMetadata_=!0),e.completeTransitions_()},e.errorHandler_)})}},{key:"continueUpload_",value:function(){var e=this,t=k.resumableUploadChunkSize*this.chunkMultiplier_,n=new k.ResumableUploadStatus(this.transferred_,this.blob_.size()),r=this.uploadUrl_;this.resolveToken_(function(a){var o=void 0;try{o=k.continueResumableUpload(e.location_,e.authWrapper_,r,e.blob_,t,e.mappings_,n,e.makeProgressCallback_())}catch(t){return e.error_=t,void e.transition_(i.InternalTaskState.ERROR)}var u=e.authWrapper_.makeRequest(o,a);e.request_=u,u.getPromise().then(function(t){e.increaseMultiplier_(),e.request_=null,e.updateProgress_(t.current),t.finalized?(e.metadata_=t.metadata,e.transition_(i.InternalTaskState.SUCCESS)):e.completeTransitions_()},e.errorHandler_)})}},{key:"increaseMultiplier_",value:function(){k.resumableUploadChunkSize*this.chunkMultiplier_<33554432&&(this.chunkMultiplier_*=2)}},{key:"fetchMetadata_",value:function(){var e=this;this.resolveToken_(function(t){var n=k.getMetadata(e.authWrapper_,e.location_,e.mappings_),r=e.authWrapper_.makeRequest(n,t);e.request_=r,r.getPromise().then(function(t){e.request_=null,e.metadata_=t,e.transition_(i.InternalTaskState.SUCCESS)},e.metadataErrorHandler_)})}},{key:"oneShotUpload_",value:function(){var e=this;this.resolveToken_(function(t){var n=k.multipartUpload(e.authWrapper_,e.location_,e.mappings_,e.blob_,e.metadata_),r=e.authWrapper_.makeRequest(n,t);e.request_=r,r.getPromise().then(function(t){e.request_=null,e.metadata_=t,e.updateProgress_(e.blob_.size()),e.transition_(i.InternalTaskState.SUCCESS)},e.errorHandler_)})}},{key:"updateProgress_",value:function(e){var t=this.transferred_;this.transferred_=e,this.transferred_!==t&&this.notifyObservers_()}},{key:"transition_",value:function(e){if(this.state_!==e)switch(e){case i.InternalTaskState.CANCELING:case i.InternalTaskState.PAUSING:this.state_=e,null!==this.request_&&this.request_.cancel();break;case i.InternalTaskState.RUNNING:var t=this.state_===i.InternalTaskState.PAUSED;this.state_=e,t&&(this.notifyObservers_(),this.start_());break;case i.InternalTaskState.PAUSED:this.state_=e,this.notifyObservers_();break;case i.InternalTaskState.CANCELED:this.error_=_.canceled(),this.state_=e,this.notifyObservers_();break;case i.InternalTaskState.ERROR:case i.InternalTaskState.SUCCESS:this.state_=e,this.notifyObservers_()}}},{key:"completeTransitions_",value:function(){switch(this.state_){case i.InternalTaskState.PAUSING:this.transition_(i.InternalTaskState.PAUSED);break;case i.InternalTaskState.CANCELING:this.transition_(i.InternalTaskState.CANCELED);break;case i.InternalTaskState.RUNNING:this.start_()}}},{key:"on",value:function(e){function t(e){try{return void l(e)}catch(e){}try{c(e);if(!(R.isJustDef(e.next)||R.isJustDef(e.error)||R.isJustDef(e.complete)))throw""}catch(e){throw u}}function n(e){return function(t,n){null!==e&&f.validate("on",e,arguments);var r=new s.Observer(t,n,o);return h.addObserver_(r),function(){h.removeObserver_(r)}}}var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,u="Expected a function or an Object with one of `next`, `error`, `complete` properties.",l=f.nullFunctionSpec(!0).validator,c=f.looseObjectSpec(null,!0).validator,d=[f.stringSpec(function(){if(e!==i.TaskEvent.STATE_CHANGED)throw"Expected one of the event types: ["+i.TaskEvent.STATE_CHANGED+"]."}),f.looseObjectSpec(t,!0),f.nullFunctionSpec(!0),f.nullFunctionSpec(!0)];f.validate("on",d,arguments);var h=this,p=[f.looseObjectSpec(function(e){if(null===e)throw u;t(e)}),f.nullFunctionSpec(!0),f.nullFunctionSpec(!0)];return R.isJustDef(r)||R.isJustDef(a)||R.isJustDef(o)?n(null)(r,a,o):n(p)}},{key:"then",value:function(e,t){return this.promise_.then(e,t)}},{key:"catch",value:function(e){return this.then(null,e)}},{key:"addObserver_",value:function(e){this.observers_.push(e),this.notifyObserver_(e)}},{key:"removeObserver_",value:function(e){h.remove(this.observers_,e)}},{key:"notifyObservers_",value:function(){var e=this;this.finishPromise_(),h.clone(this.observers_).forEach(function(t){e.notifyObserver_(t)})}},{key:"finishPromise_",value:function(){if(null!==this.resolve_){var e=!0;switch(u.taskStateFromInternalTaskState(this.state_)){case i.TaskState.SUCCESS:(0,p.async)(this.resolve_.bind(null,this.snapshot))();break;case i.TaskState.CANCELED:case i.TaskState.ERROR:var t=this.reject_;(0,p.async)(t.bind(null,this.error_))();break;default:e=!1}e&&(this.resolve_=null,this.reject_=null)}}},{key:"notifyObserver_",value:function(e){switch(u.taskStateFromInternalTaskState(this.state_)){case i.TaskState.RUNNING:case i.TaskState.PAUSED:null!==e.next&&(0,p.async)(e.next.bind(e,this.snapshot))();break;case i.TaskState.SUCCESS:null!==e.complete&&(0,p.async)(e.complete.bind(e))();break;case i.TaskState.CANCELED:case i.TaskState.ERROR:null!==e.error&&(0,p.async)(e.error.bind(e,this.error_))();break;default:null!==e.error&&(0,p.async)(e.error.bind(e,this.error_))()}}},{key:"resume",value:function(){f.validate("resume",[],arguments);var e=this.state_===i.InternalTaskState.PAUSED||this.state_===i.InternalTaskState.PAUSING;return e&&this.transition_(i.InternalTaskState.RUNNING),e}},{key:"pause",value:function(){f.validate("pause",[],arguments);var e=this.state_===i.InternalTaskState.RUNNING;return e&&this.transition_(i.InternalTaskState.PAUSING),e}},{key:"cancel",value:function(){f.validate("cancel",[],arguments);var e=this.state_===i.InternalTaskState.RUNNING||this.state_===i.InternalTaskState.PAUSING;return e&&this.transition_(i.InternalTaskState.CANCELING),e}},{key:"snapshot",get:function(){var e=u.taskStateFromInternalTaskState(this.state_);return new l.UploadTaskSnapshot(this.transferred_,this.blob_.size(),e,this.metadata_,this,this.ref_)}}]),e}()},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;na?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=o.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return o.each(this,a,b)},map:function(a){return this.pushStack(o.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},o.extend=o.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||o.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(o.isPlainObject(d)||(e=o.isArray(d)))?(e?(e=!1,f=c&&o.isArray(c)?c:[]):f=c&&o.isPlainObject(c)?c:{},g[b]=o.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},o.extend({expando:"jQuery"+(n+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===o.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isPlainObject:function(a){if("object"!==o.type(a)||a.nodeType||o.isWindow(a))return!1;try{if(a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=o.trim(a),a&&(1===a.indexOf("use strict")?(b=m.createElement("script"),b.text=a,m.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":k.call(a)},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?o.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),o.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||o.guid++,f):void 0},now:Date.now,support:l}),o.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=o.type(a);return"function"===c||o.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
    ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="
    ","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);o.find=t,o.expr=t.selectors,o.expr[":"]=o.expr.pseudos,o.unique=t.uniqueSort,o.text=t.getText,o.isXMLDoc=t.isXML,o.contains=t.contains;var u=o.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(o.isFunction(b))return o.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return o.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return o.filter(b,a,c);b=o.filter(b,a)}return o.grep(a,function(a){return g.call(b,a)>=0!==c})}o.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?o.find.matchesSelector(d,a)?[d]:[]:o.find.matches(a,o.grep(b,function(a){return 1===a.nodeType}))},o.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(o(a).filter(function(){for(b=0;c>b;b++)if(o.contains(e[b],this))return!0}));for(b=0;c>b;b++)o.find(a,e[b],d);return d=this.pushStack(c>1?o.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?o(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=o.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof o?b[0]:b,o.merge(this,o.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:m,!0)),v.test(c[1])&&o.isPlainObject(b))for(c in b)o.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=m.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=m,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):o.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(o):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),o.makeArray(a,this))};A.prototype=o.fn,y=o(m);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};o.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&o(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),o.fn.extend({has:function(a){var b=o(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(o.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?o(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&o.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?o.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(o(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(o.unique(o.merge(this.get(),o(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}o.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return o.dir(a,"parentNode")},parentsUntil:function(a,b,c){return o.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return o.dir(a,"nextSibling")},prevAll:function(a){return o.dir(a,"previousSibling")},nextUntil:function(a,b,c){return o.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return o.dir(a,"previousSibling",c)},siblings:function(a){return o.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return o.sibling(a.firstChild)},contents:function(a){return a.contentDocument||o.merge([],a.childNodes)}},function(a,b){o.fn[a]=function(c,d){var e=o.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=o.filter(d,e)),this.length>1&&(C[a]||o.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return o.each(a.match(E)||[],function(a,c){b[c]=!0}),b}o.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):o.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){o.each(b,function(b,c){var d=o.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&o.each(arguments,function(a,b){var c;while((c=o.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?o.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},o.extend({Deferred:function(a){var b=[["resolve","done",o.Callbacks("once memory"),"resolved"],["reject","fail",o.Callbacks("once memory"),"rejected"],["notify","progress",o.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return o.Deferred(function(c){o.each(b,function(b,f){var g=o.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&o.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?o.extend(a,d):d}},e={};return d.pipe=d.then,o.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&o.isFunction(a.promise)?e:0,g=1===f?a:o.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&o.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;o.fn.ready=function(a){return o.ready.promise().done(a),this},o.extend({isReady:!1,readyWait:1,holdReady:function(a){a?o.readyWait++:o.ready(!0)},ready:function(a){(a===!0?--o.readyWait:o.isReady)||(o.isReady=!0,a!==!0&&--o.readyWait>0||(H.resolveWith(m,[o]),o.fn.trigger&&o(m).trigger("ready").off("ready")))}});function I(){m.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),o.ready()}o.ready.promise=function(b){return H||(H=o.Deferred(),"complete"===m.readyState?setTimeout(o.ready):(m.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},o.ready.promise();var J=o.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===o.type(c)){e=!0;for(h in c)o.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,o.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(o(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};o.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=o.expando+Math.random()}K.uid=1,K.accepts=o.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,o.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(o.isEmptyObject(f))o.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,o.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{o.isArray(b)?d=b.concat(b.map(o.camelCase)):(e=o.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!o.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?o.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}o.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),o.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length; -while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=o.camelCase(d.slice(5)),P(f,d,e[d]));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=o.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),o.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||o.isArray(c)?d=L.access(a,b,o.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=o.queue(a,b),d=c.length,e=c.shift(),f=o._queueHooks(a,b),g=function(){o.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:o.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),o.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";l.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return m.activeElement}catch(a){}}o.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=o.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof o!==U&&o.event.triggered!==b.type?o.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n&&(l=o.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=o.event.special[n]||{},k=o.extend({type:n,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&o.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),o.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n){l=o.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||o.removeEvent(a,n,r.handle),delete i[n])}else for(n in i)o.event.remove(a,n+b[j],c,d,!0);o.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,p=[d||m],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||m,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+o.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[o.expando]?b:new o.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:o.makeArray(c,[b]),n=o.event.special[q]||{},e||!n.trigger||n.trigger.apply(d,c)!==!1)){if(!e&&!n.noBubble&&!o.isWindow(d)){for(i=n.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||m)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:n.bindType||q,l=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),l&&l.apply(g,c),l=k&&g[k],l&&l.apply&&o.acceptData(g)&&(b.result=l.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||n._default&&n._default.apply(p.pop(),c)!==!1||!o.acceptData(d)||k&&o.isFunction(d[q])&&!o.isWindow(d)&&(h=d[k],h&&(d[k]=null),o.event.triggered=q,d[q](),o.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=o.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=o.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=o.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((o.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?o(e,this).index(i)>=0:o.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return o.nodeName(a,"table")&&o.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)o.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=o.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&o.nodeName(a,b)?o.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}o.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=o.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||o.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===o.type(e))o.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;o.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===o.inArray(e,d))&&(i=o.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f,g,h=o.event.special,i=0;void 0!==(c=a[i]);i++){if(o.acceptData(c)&&(f=c[L.expando],f&&(b=L.cache[f]))){if(d=Object.keys(b.events||{}),d.length)for(g=0;void 0!==(e=d[g]);g++)h[e]?o.event.remove(c,e):o.removeEvent(c,e,b.handle);L.cache[f]&&delete L.cache[f]}delete M.cache[c[M.expando]]}}}),o.fn.extend({text:function(a){return J(this,function(a){return void 0===a?o.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?o.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||o.cleanData(ob(c)),c.parentNode&&(b&&o.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(o.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return o.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(o.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,o.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,n=k-1,p=a[0],q=o.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(c=o.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=o.map(ob(c,"script"),kb),g=f.length;k>j;j++)h=c,j!==n&&(h=o.clone(h,!0,!0),g&&o.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,o.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&o.contains(i,h)&&(h.src?o._evalUrl&&o._evalUrl(h.src):o.globalEval(h.textContent.replace(hb,"")))}return this}}),o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){o.fn[a]=function(a){for(var c,d=[],e=o(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),o(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d=o(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:o.css(d[0],"display");return d.detach(),e}function tb(a){var b=m,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||o("