(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define([], factory);
	else {
		var a = factory();
		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
	}
})(typeof self !== 'undefined' ? self : this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// install a JSONP callback for chunk loading
/******/ 	var parentJsonpFunction = window["webpackJsonp"];
/******/ 	window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {
/******/ 		// add "moreModules" to the modules object,
/******/ 		// then flag all "chunkIds" as loaded and fire callback
/******/ 		var moduleId, chunkId, i = 0, resolves = [], result;
/******/ 		for(;i < chunkIds.length; i++) {
/******/ 			chunkId = chunkIds[i];
/******/ 			if(installedChunks[chunkId]) {
/******/ 				resolves.push(installedChunks[chunkId][0]);
/******/ 			}
/******/ 			installedChunks[chunkId] = 0;
/******/ 		}
/******/ 		for(moduleId in moreModules) {
/******/ 			if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ 				modules[moduleId] = moreModules[moduleId];
/******/ 			}
/******/ 		}
/******/ 		if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);
/******/ 		while(resolves.length) {
/******/ 			resolves.shift()();
/******/ 		}
/******/
/******/ 	};
/******/
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// objects to store loaded and loading chunks
/******/ 	var installedChunks = {
/******/ 		5: 0
/******/ 	};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/ 	// This file contains only the entry chunk.
/******/ 	// The chunk loading function for additional chunks
/******/ 	__webpack_require__.e = function requireEnsure(chunkId) {
/******/ 		var installedChunkData = installedChunks[chunkId];
/******/ 		if(installedChunkData === 0) {
/******/ 			return new Promise(function(resolve) { resolve(); });
/******/ 		}
/******/
/******/ 		// a Promise means "currently loading".
/******/ 		if(installedChunkData) {
/******/ 			return installedChunkData[2];
/******/ 		}
/******/
/******/ 		// setup Promise in chunk cache
/******/ 		var promise = new Promise(function(resolve, reject) {
/******/ 			installedChunkData = installedChunks[chunkId] = [resolve, reject];
/******/ 		});
/******/ 		installedChunkData[2] = promise;
/******/
/******/ 		// start chunk loading
/******/ 		var head = document.getElementsByTagName('head')[0];
/******/ 		var script = document.createElement('script');
/******/ 		script.type = 'text/javascript';
/******/ 		script.charset = 'utf-8';
/******/ 		script.async = true;
/******/ 		script.timeout = 120000;
/******/
/******/ 		if (__webpack_require__.nc) {
/******/ 			script.setAttribute("nonce", __webpack_require__.nc);
/******/ 		}
/******/ 		script.src = __webpack_require__.p + "" + ({"0":"Tinebase/js/html2canvas","1":"Tinebase/js/linkify","3":"Tinebase/js/OpenLayers","4":"Tinebase/js/hammerjs"}[chunkId]||chunkId) + "-" + {"0":"39ecdcf68b3c203c2ce2","1":"b4f10d5f2954de696a3f","3":"4132872dbdcd0bae9d3e","4":"1624cebfe0b7f86330c7"}[chunkId] + "-FAT.js";
/******/ 		var timeout = setTimeout(onScriptComplete, 120000);
/******/ 		script.onerror = script.onload = onScriptComplete;
/******/ 		function onScriptComplete() {
/******/ 			// avoid mem leaks in IE.
/******/ 			script.onerror = script.onload = null;
/******/ 			clearTimeout(timeout);
/******/ 			var chunk = installedChunks[chunkId];
/******/ 			if(chunk !== 0) {
/******/ 				if(chunk) {
/******/ 					chunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));
/******/ 				}
/******/ 				installedChunks[chunkId] = undefined;
/******/ 			}
/******/ 		};
/******/ 		head.appendChild(script);
/******/
/******/ 		return promise;
/******/ 	};
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// on error function for async loading
/******/ 	__webpack_require__.oe = function(err) { console.error(err); throw err; };
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 889);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {

/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/
// css base code, injected by the css-loader
module.exports = function(useSourceMap) {
	var list = [];

	// return the list of modules as css string
	list.toString = function toString() {
		return this.map(function (item) {
			var content = cssWithMappingToString(item, useSourceMap);
			if(item[2]) {
				return "@media " + item[2] + "{" + content + "}";
			} else {
				return content;
			}
		}).join("");
	};

	// import a list of modules into the list
	list.i = function(modules, mediaQuery) {
		if(typeof modules === "string")
			modules = [[null, modules, ""]];
		var alreadyImportedModules = {};
		for(var i = 0; i < this.length; i++) {
			var id = this[i][0];
			if(typeof id === "number")
				alreadyImportedModules[id] = true;
		}
		for(i = 0; i < modules.length; i++) {
			var item = modules[i];
			// skip already imported module
			// this implementation is not 100% perfect for weird media query combinations
			//  when a module is imported multiple times with different media queries.
			//  I hope this will never occur (Hey this way we have smaller bundles)
			if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
				if(mediaQuery && !item[2]) {
					item[2] = mediaQuery;
				} else if(mediaQuery) {
					item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
				}
				list.push(item);
			}
		}
	};
	return list;
};

function cssWithMappingToString(item, useSourceMap) {
	var content = item[1] || '';
	var cssMapping = item[3];
	if (!cssMapping) {
		return content;
	}

	if (useSourceMap && typeof btoa === 'function') {
		var sourceMapping = toComment(cssMapping);
		var sourceURLs = cssMapping.sources.map(function (source) {
			return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'
		});

		return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
	}

	return [content].join('\n');
}

// Adapted from convert-source-map (MIT)
function toComment(sourceMap) {
	// eslint-disable-next-line no-undef
	var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
	var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;

	return '/*# ' + data + ' */';
}


/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {

/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/

var stylesInDom = {};

var	memoize = function (fn) {
	var memo;

	return function () {
		if (typeof memo === "undefined") memo = fn.apply(this, arguments);
		return memo;
	};
};

var isOldIE = memoize(function () {
	// Test for IE <= 9 as proposed by Browserhacks
	// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
	// Tests for existence of standard globals is to allow style-loader
	// to operate correctly into non-standard environments
	// @see https://github.com/webpack-contrib/style-loader/issues/177
	return window && document && document.all && !window.atob;
});

var getElement = (function (fn) {
	var memo = {};

	return function(selector) {
		if (typeof memo[selector] === "undefined") {
			var styleTarget = fn.call(this, selector);
			// Special case to return head of iframe instead of iframe itself
			if (styleTarget instanceof window.HTMLIFrameElement) {
				try {
					// This will throw an exception if access to iframe is blocked
					// due to cross-origin restrictions
					styleTarget = styleTarget.contentDocument.head;
				} catch(e) {
					styleTarget = null;
				}
			}
			memo[selector] = styleTarget;
		}
		return memo[selector]
	};
})(function (target) {
	return document.querySelector(target)
});

var singleton = null;
var	singletonCounter = 0;
var	stylesInsertedAtTop = [];

var	fixUrls = __webpack_require__(2);

module.exports = function(list, options) {
	if (typeof DEBUG !== "undefined" && DEBUG) {
		if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
	}

	options = options || {};

	options.attrs = typeof options.attrs === "object" ? options.attrs : {};

	// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
	// tags it will allow on a page
	if (!options.singleton) options.singleton = isOldIE();

	// By default, add <style> tags to the <head> element
	if (!options.insertInto) options.insertInto = "head";

	// By default, add <style> tags to the bottom of the target
	if (!options.insertAt) options.insertAt = "bottom";

	var styles = listToStyles(list, options);

	addStylesToDom(styles, options);

	return function update (newList) {
		var mayRemove = [];

		for (var i = 0; i < styles.length; i++) {
			var item = styles[i];
			var domStyle = stylesInDom[item.id];

			domStyle.refs--;
			mayRemove.push(domStyle);
		}

		if(newList) {
			var newStyles = listToStyles(newList, options);
			addStylesToDom(newStyles, options);
		}

		for (var i = 0; i < mayRemove.length; i++) {
			var domStyle = mayRemove[i];

			if(domStyle.refs === 0) {
				for (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();

				delete stylesInDom[domStyle.id];
			}
		}
	};
};

function addStylesToDom (styles, options) {
	for (var i = 0; i < styles.length; i++) {
		var item = styles[i];
		var domStyle = stylesInDom[item.id];

		if(domStyle) {
			domStyle.refs++;

			for(var j = 0; j < domStyle.parts.length; j++) {
				domStyle.parts[j](item.parts[j]);
			}

			for(; j < item.parts.length; j++) {
				domStyle.parts.push(addStyle(item.parts[j], options));
			}
		} else {
			var parts = [];

			for(var j = 0; j < item.parts.length; j++) {
				parts.push(addStyle(item.parts[j], options));
			}

			stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
		}
	}
}

function listToStyles (list, options) {
	var styles = [];
	var newStyles = {};

	for (var i = 0; i < list.length; i++) {
		var item = list[i];
		var id = options.base ? item[0] + options.base : item[0];
		var css = item[1];
		var media = item[2];
		var sourceMap = item[3];
		var part = {css: css, media: media, sourceMap: sourceMap};

		if(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});
		else newStyles[id].parts.push(part);
	}

	return styles;
}

function insertStyleElement (options, style) {
	var target = getElement(options.insertInto)

	if (!target) {
		throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");
	}

	var lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];

	if (options.insertAt === "top") {
		if (!lastStyleElementInsertedAtTop) {
			target.insertBefore(style, target.firstChild);
		} else if (lastStyleElementInsertedAtTop.nextSibling) {
			target.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);
		} else {
			target.appendChild(style);
		}
		stylesInsertedAtTop.push(style);
	} else if (options.insertAt === "bottom") {
		target.appendChild(style);
	} else if (typeof options.insertAt === "object" && options.insertAt.before) {
		var nextSibling = getElement(options.insertInto + " " + options.insertAt.before);
		target.insertBefore(style, nextSibling);
	} else {
		throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n");
	}
}

function removeStyleElement (style) {
	if (style.parentNode === null) return false;
	style.parentNode.removeChild(style);

	var idx = stylesInsertedAtTop.indexOf(style);
	if(idx >= 0) {
		stylesInsertedAtTop.splice(idx, 1);
	}
}

function createStyleElement (options) {
	var style = document.createElement("style");

	options.attrs.type = "text/css";

	addAttrs(style, options.attrs);
	insertStyleElement(options, style);

	return style;
}

function createLinkElement (options) {
	var link = document.createElement("link");

	options.attrs.type = "text/css";
	options.attrs.rel = "stylesheet";

	addAttrs(link, options.attrs);
	insertStyleElement(options, link);

	return link;
}

function addAttrs (el, attrs) {
	Object.keys(attrs).forEach(function (key) {
		el.setAttribute(key, attrs[key]);
	});
}

function addStyle (obj, options) {
	var style, update, remove, result;

	// If a transform function was defined, run it on the css
	if (options.transform && obj.css) {
	    result = options.transform(obj.css);

	    if (result) {
	    	// If transform returns a value, use that instead of the original css.
	    	// This allows running runtime transformations on the css.
	    	obj.css = result;
	    } else {
	    	// If the transform function returns a falsy value, don't add this css.
	    	// This allows conditional loading of css
	    	return function() {
	    		// noop
	    	};
	    }
	}

	if (options.singleton) {
		var styleIndex = singletonCounter++;

		style = singleton || (singleton = createStyleElement(options));

		update = applyToSingletonTag.bind(null, style, styleIndex, false);
		remove = applyToSingletonTag.bind(null, style, styleIndex, true);

	} else if (
		obj.sourceMap &&
		typeof URL === "function" &&
		typeof URL.createObjectURL === "function" &&
		typeof URL.revokeObjectURL === "function" &&
		typeof Blob === "function" &&
		typeof btoa === "function"
	) {
		style = createLinkElement(options);
		update = updateLink.bind(null, style, options);
		remove = function () {
			removeStyleElement(style);

			if(style.href) URL.revokeObjectURL(style.href);
		};
	} else {
		style = createStyleElement(options);
		update = applyToTag.bind(null, style);
		remove = function () {
			removeStyleElement(style);
		};
	}

	update(obj);

	return function updateStyle (newObj) {
		if (newObj) {
			if (
				newObj.css === obj.css &&
				newObj.media === obj.media &&
				newObj.sourceMap === obj.sourceMap
			) {
				return;
			}

			update(obj = newObj);
		} else {
			remove();
		}
	};
}

var replaceText = (function () {
	var textStore = [];

	return function (index, replacement) {
		textStore[index] = replacement;

		return textStore.filter(Boolean).join('\n');
	};
})();

function applyToSingletonTag (style, index, remove, obj) {
	var css = remove ? "" : obj.css;

	if (style.styleSheet) {
		style.styleSheet.cssText = replaceText(index, css);
	} else {
		var cssNode = document.createTextNode(css);
		var childNodes = style.childNodes;

		if (childNodes[index]) style.removeChild(childNodes[index]);

		if (childNodes.length) {
			style.insertBefore(cssNode, childNodes[index]);
		} else {
			style.appendChild(cssNode);
		}
	}
}

function applyToTag (style, obj) {
	var css = obj.css;
	var media = obj.media;

	if(media) {
		style.setAttribute("media", media)
	}

	if(style.styleSheet) {
		style.styleSheet.cssText = css;
	} else {
		while(style.firstChild) {
			style.removeChild(style.firstChild);
		}

		style.appendChild(document.createTextNode(css));
	}
}

function updateLink (link, options, obj) {
	var css = obj.css;
	var sourceMap = obj.sourceMap;

	/*
		If convertToAbsoluteUrls isn't defined, but sourcemaps are enabled
		and there is no publicPath defined then lets turn convertToAbsoluteUrls
		on by default.  Otherwise default to the convertToAbsoluteUrls option
		directly
	*/
	var autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;

	if (options.convertToAbsoluteUrls || autoFixUrls) {
		css = fixUrls(css);
	}

	if (sourceMap) {
		// http://stackoverflow.com/a/26603875
		css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
	}

	var blob = new Blob([css], { type: "text/css" });

	var oldSrc = link.href;

	link.href = URL.createObjectURL(blob);

	if(oldSrc) URL.revokeObjectURL(oldSrc);
}


/***/ }),
/* 2 */
/***/ (function(module, exports) {


/**
 * When source maps are enabled, `style-loader` uses a link element with a data-uri to
 * embed the css on the page. This breaks all relative urls because now they are relative to a
 * bundle instead of the current page.
 *
 * One solution is to only use full urls, but that may be impossible.
 *
 * Instead, this function "fixes" the relative urls to be absolute according to the current page location.
 *
 * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.
 *
 */

module.exports = function (css) {
  // get current location
  var location = typeof window !== "undefined" && window.location;

  if (!location) {
    throw new Error("fixUrls requires window.location");
  }

	// blank or null?
	if (!css || typeof css !== "string") {
	  return css;
  }

  var baseUrl = location.protocol + "//" + location.host;
  var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/");

	// convert each url(...)
	/*
	This regular expression is just a way to recursively match brackets within
	a string.

	 /url\s*\(  = Match on the word "url" with any whitespace after it and then a parens
	   (  = Start a capturing group
	     (?:  = Start a non-capturing group
	         [^)(]  = Match anything that isn't a parentheses
	         |  = OR
	         \(  = Match a start parentheses
	             (?:  = Start another non-capturing groups
	                 [^)(]+  = Match anything that isn't a parentheses
	                 |  = OR
	                 \(  = Match a start parentheses
	                     [^)(]*  = Match anything that isn't a parentheses
	                 \)  = Match a end parentheses
	             )  = End Group
              *\) = Match anything and then a close parens
          )  = Close non-capturing group
          *  = Match anything
       )  = Close capturing group
	 \)  = Match a close parens

	 /gi  = Get all matches, not the first.  Be case insensitive.
	 */
	var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(fullMatch, origUrl) {
		// strip quotes (if they exist)
		var unquotedOrigUrl = origUrl
			.trim()
			.replace(/^"(.*)"$/, function(o, $1){ return $1; })
			.replace(/^'(.*)'$/, function(o, $1){ return $1; });

		// already a full url? no change
		if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(unquotedOrigUrl)) {
		  return fullMatch;
		}

		// convert the url to a full url
		var newUrl;

		if (unquotedOrigUrl.indexOf("//") === 0) {
		  	//TODO: should we add protocol?
			newUrl = unquotedOrigUrl;
		} else if (unquotedOrigUrl.indexOf("/") === 0) {
			// path should be relative to the base url
			newUrl = baseUrl + unquotedOrigUrl; // already starts with '/'
		} else {
			// path should be relative to current directory
			newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './'
		}

		// send back the fixed url(...)
		return "url(" + JSON.stringify(newUrl) + ")";
	});

	// send back the fixed css
	return fixedCss;
};


/***/ }),
/* 3 */
/***/ (function(module, exports) {

var core = module.exports = { version: '2.5.1' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef


/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**
 * @license
 * Lodash <https://lodash.com/>
 * Copyright JS Foundation and other contributors <https://js.foundation/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */
;(function() {

  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
  var undefined;

  /** Used as the semantic version number. */
  var VERSION = '4.17.10';

  /** Used as the size to enable large array optimizations. */
  var LARGE_ARRAY_SIZE = 200;

  /** Error message constants. */
  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
      FUNC_ERROR_TEXT = 'Expected a function';

  /** Used to stand-in for `undefined` hash values. */
  var HASH_UNDEFINED = '__lodash_hash_undefined__';

  /** Used as the maximum memoize cache size. */
  var MAX_MEMOIZE_SIZE = 500;

  /** Used as the internal argument placeholder. */
  var PLACEHOLDER = '__lodash_placeholder__';

  /** Used to compose bitmasks for cloning. */
  var CLONE_DEEP_FLAG = 1,
      CLONE_FLAT_FLAG = 2,
      CLONE_SYMBOLS_FLAG = 4;

  /** Used to compose bitmasks for value comparisons. */
  var COMPARE_PARTIAL_FLAG = 1,
      COMPARE_UNORDERED_FLAG = 2;

  /** Used to compose bitmasks for function metadata. */
  var WRAP_BIND_FLAG = 1,
      WRAP_BIND_KEY_FLAG = 2,
      WRAP_CURRY_BOUND_FLAG = 4,
      WRAP_CURRY_FLAG = 8,
      WRAP_CURRY_RIGHT_FLAG = 16,
      WRAP_PARTIAL_FLAG = 32,
      WRAP_PARTIAL_RIGHT_FLAG = 64,
      WRAP_ARY_FLAG = 128,
      WRAP_REARG_FLAG = 256,
      WRAP_FLIP_FLAG = 512;

  /** Used as default options for `_.truncate`. */
  var DEFAULT_TRUNC_LENGTH = 30,
      DEFAULT_TRUNC_OMISSION = '...';

  /** Used to detect hot functions by number of calls within a span of milliseconds. */
  var HOT_COUNT = 800,
      HOT_SPAN = 16;

  /** Used to indicate the type of lazy iteratees. */
  var LAZY_FILTER_FLAG = 1,
      LAZY_MAP_FLAG = 2,
      LAZY_WHILE_FLAG = 3;

  /** Used as references for various `Number` constants. */
  var INFINITY = 1 / 0,
      MAX_SAFE_INTEGER = 9007199254740991,
      MAX_INTEGER = 1.7976931348623157e+308,
      NAN = 0 / 0;

  /** Used as references for the maximum length and index of an array. */
  var MAX_ARRAY_LENGTH = 4294967295,
      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;

  /** Used to associate wrap methods with their bit flags. */
  var wrapFlags = [
    ['ary', WRAP_ARY_FLAG],
    ['bind', WRAP_BIND_FLAG],
    ['bindKey', WRAP_BIND_KEY_FLAG],
    ['curry', WRAP_CURRY_FLAG],
    ['curryRight', WRAP_CURRY_RIGHT_FLAG],
    ['flip', WRAP_FLIP_FLAG],
    ['partial', WRAP_PARTIAL_FLAG],
    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
    ['rearg', WRAP_REARG_FLAG]
  ];

  /** `Object#toString` result references. */
  var argsTag = '[object Arguments]',
      arrayTag = '[object Array]',
      asyncTag = '[object AsyncFunction]',
      boolTag = '[object Boolean]',
      dateTag = '[object Date]',
      domExcTag = '[object DOMException]',
      errorTag = '[object Error]',
      funcTag = '[object Function]',
      genTag = '[object GeneratorFunction]',
      mapTag = '[object Map]',
      numberTag = '[object Number]',
      nullTag = '[object Null]',
      objectTag = '[object Object]',
      promiseTag = '[object Promise]',
      proxyTag = '[object Proxy]',
      regexpTag = '[object RegExp]',
      setTag = '[object Set]',
      stringTag = '[object String]',
      symbolTag = '[object Symbol]',
      undefinedTag = '[object Undefined]',
      weakMapTag = '[object WeakMap]',
      weakSetTag = '[object WeakSet]';

  var arrayBufferTag = '[object ArrayBuffer]',
      dataViewTag = '[object DataView]',
      float32Tag = '[object Float32Array]',
      float64Tag = '[object Float64Array]',
      int8Tag = '[object Int8Array]',
      int16Tag = '[object Int16Array]',
      int32Tag = '[object Int32Array]',
      uint8Tag = '[object Uint8Array]',
      uint8ClampedTag = '[object Uint8ClampedArray]',
      uint16Tag = '[object Uint16Array]',
      uint32Tag = '[object Uint32Array]';

  /** Used to match empty string literals in compiled template source. */
  var reEmptyStringLeading = /\b__p \+= '';/g,
      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;

  /** Used to match HTML entities and HTML characters. */
  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
      reUnescapedHtml = /[&<>"']/g,
      reHasEscapedHtml = RegExp(reEscapedHtml.source),
      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);

  /** Used to match template delimiters. */
  var reEscape = /<%-([\s\S]+?)%>/g,
      reEvaluate = /<%([\s\S]+?)%>/g,
      reInterpolate = /<%=([\s\S]+?)%>/g;

  /** Used to match property names within property paths. */
  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
      reIsPlainProp = /^\w*$/,
      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;

  /**
   * Used to match `RegExp`
   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
   */
  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
      reHasRegExpChar = RegExp(reRegExpChar.source);

  /** Used to match leading and trailing whitespace. */
  var reTrim = /^\s+|\s+$/g,
      reTrimStart = /^\s+/,
      reTrimEnd = /\s+$/;

  /** Used to match wrap detail comments. */
  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
      reSplitDetails = /,? & /;

  /** Used to match words composed of alphanumeric characters. */
  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;

  /** Used to match backslashes in property paths. */
  var reEscapeChar = /\\(\\)?/g;

  /**
   * Used to match
   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
   */
  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;

  /** Used to match `RegExp` flags from their coerced string values. */
  var reFlags = /\w*$/;

  /** Used to detect bad signed hexadecimal string values. */
  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

  /** Used to detect binary string values. */
  var reIsBinary = /^0b[01]+$/i;

  /** Used to detect host constructors (Safari). */
  var reIsHostCtor = /^\[object .+?Constructor\]$/;

  /** Used to detect octal string values. */
  var reIsOctal = /^0o[0-7]+$/i;

  /** Used to detect unsigned integer values. */
  var reIsUint = /^(?:0|[1-9]\d*)$/;

  /** Used to match Latin Unicode letters (excluding mathematical operators). */
  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;

  /** Used to ensure capturing order of template delimiters. */
  var reNoMatch = /($^)/;

  /** Used to match unescaped characters in compiled string literals. */
  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;

  /** Used to compose unicode character classes. */
  var rsAstralRange = '\\ud800-\\udfff',
      rsComboMarksRange = '\\u0300-\\u036f',
      reComboHalfMarksRange = '\\ufe20-\\ufe2f',
      rsComboSymbolsRange = '\\u20d0-\\u20ff',
      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
      rsDingbatRange = '\\u2700-\\u27bf',
      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
      rsPunctuationRange = '\\u2000-\\u206f',
      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
      rsVarRange = '\\ufe0e\\ufe0f',
      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;

  /** Used to compose unicode capture groups. */
  var rsApos = "['\u2019]",
      rsAstral = '[' + rsAstralRange + ']',
      rsBreak = '[' + rsBreakRange + ']',
      rsCombo = '[' + rsComboRange + ']',
      rsDigits = '\\d+',
      rsDingbat = '[' + rsDingbatRange + ']',
      rsLower = '[' + rsLowerRange + ']',
      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
      rsFitz = '\\ud83c[\\udffb-\\udfff]',
      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
      rsNonAstral = '[^' + rsAstralRange + ']',
      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
      rsUpper = '[' + rsUpperRange + ']',
      rsZWJ = '\\u200d';

  /** Used to compose unicode regexes. */
  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
      reOptMod = rsModifier + '?',
      rsOptVar = '[' + rsVarRange + ']?',
      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
      rsSeq = rsOptVar + reOptMod + rsOptJoin,
      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

  /** Used to match apostrophes. */
  var reApos = RegExp(rsApos, 'g');

  /**
   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
   */
  var reComboMark = RegExp(rsCombo, 'g');

  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

  /** Used to match complex or compound words. */
  var reUnicodeWord = RegExp([
    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
    rsUpper + '+' + rsOptContrUpper,
    rsOrdUpper,
    rsOrdLower,
    rsDigits,
    rsEmoji
  ].join('|'), 'g');

  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');

  /** Used to detect strings that need a more robust regexp to match words. */
  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;

  /** Used to assign default `context` object properties. */
  var contextProps = [
    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
  ];

  /** Used to make template sourceURLs easier to identify. */
  var templateCounter = -1;

  /** Used to identify `toStringTag` values of typed arrays. */
  var typedArrayTags = {};
  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
  typedArrayTags[uint32Tag] = true;
  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
  typedArrayTags[errorTag] = typedArrayTags[funcTag] =
  typedArrayTags[mapTag] = typedArrayTags[numberTag] =
  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
  typedArrayTags[setTag] = typedArrayTags[stringTag] =
  typedArrayTags[weakMapTag] = false;

  /** Used to identify `toStringTag` values supported by `_.clone`. */
  var cloneableTags = {};
  cloneableTags[argsTag] = cloneableTags[arrayTag] =
  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
  cloneableTags[boolTag] = cloneableTags[dateTag] =
  cloneableTags[float32Tag] = cloneableTags[float64Tag] =
  cloneableTags[int8Tag] = cloneableTags[int16Tag] =
  cloneableTags[int32Tag] = cloneableTags[mapTag] =
  cloneableTags[numberTag] = cloneableTags[objectTag] =
  cloneableTags[regexpTag] = cloneableTags[setTag] =
  cloneableTags[stringTag] = cloneableTags[symbolTag] =
  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  cloneableTags[errorTag] = cloneableTags[funcTag] =
  cloneableTags[weakMapTag] = false;

  /** Used to map Latin Unicode letters to basic Latin letters. */
  var deburredLetters = {
    // Latin-1 Supplement block.
    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
    '\xc7': 'C',  '\xe7': 'c',
    '\xd0': 'D',  '\xf0': 'd',
    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
    '\xd1': 'N',  '\xf1': 'n',
    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
    '\xc6': 'Ae', '\xe6': 'ae',
    '\xde': 'Th', '\xfe': 'th',
    '\xdf': 'ss',
    // Latin Extended-A block.
    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
    '\u0134': 'J',  '\u0135': 'j',
    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
    '\u0163': 't',  '\u0165': 't', '\u0167': 't',
    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
    '\u0174': 'W',  '\u0175': 'w',
    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
    '\u0132': 'IJ', '\u0133': 'ij',
    '\u0152': 'Oe', '\u0153': 'oe',
    '\u0149': "'n", '\u017f': 's'
  };

  /** Used to map characters to HTML entities. */
  var htmlEscapes = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#39;'
  };

  /** Used to map HTML entities to characters. */
  var htmlUnescapes = {
    '&amp;': '&',
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&#39;': "'"
  };

  /** Used to escape characters for inclusion in compiled string literals. */
  var stringEscapes = {
    '\\': '\\',
    "'": "'",
    '\n': 'n',
    '\r': 'r',
    '\u2028': 'u2028',
    '\u2029': 'u2029'
  };

  /** Built-in method references without a dependency on `root`. */
  var freeParseFloat = parseFloat,
      freeParseInt = parseInt;

  /** Detect free variable `global` from Node.js. */
  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

  /** Detect free variable `self`. */
  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

  /** Used as a reference to the global object. */
  var root = freeGlobal || freeSelf || Function('return this')();

  /** Detect free variable `exports`. */
  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

  /** Detect free variable `module`. */
  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

  /** Detect the popular CommonJS extension `module.exports`. */
  var moduleExports = freeModule && freeModule.exports === freeExports;

  /** Detect free variable `process` from Node.js. */
  var freeProcess = moduleExports && freeGlobal.process;

  /** Used to access faster Node.js helpers. */
  var nodeUtil = (function() {
    try {
      // Use `util.types` for Node.js 10+.
      var types = freeModule && freeModule.require && freeModule.require('util').types;

      if (types) {
        return types;
      }

      // Legacy `process.binding('util')` for Node.js < 10.
      return freeProcess && freeProcess.binding && freeProcess.binding('util');
    } catch (e) {}
  }());

  /* Node.js helper references. */
  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
      nodeIsDate = nodeUtil && nodeUtil.isDate,
      nodeIsMap = nodeUtil && nodeUtil.isMap,
      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
      nodeIsSet = nodeUtil && nodeUtil.isSet,
      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;

  /*--------------------------------------------------------------------------*/

  /**
   * A faster alternative to `Function#apply`, this function invokes `func`
   * with the `this` binding of `thisArg` and the arguments of `args`.
   *
   * @private
   * @param {Function} func The function to invoke.
   * @param {*} thisArg The `this` binding of `func`.
   * @param {Array} args The arguments to invoke `func` with.
   * @returns {*} Returns the result of `func`.
   */
  function apply(func, thisArg, args) {
    switch (args.length) {
      case 0: return func.call(thisArg);
      case 1: return func.call(thisArg, args[0]);
      case 2: return func.call(thisArg, args[0], args[1]);
      case 3: return func.call(thisArg, args[0], args[1], args[2]);
    }
    return func.apply(thisArg, args);
  }

  /**
   * A specialized version of `baseAggregator` for arrays.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} setter The function to set `accumulator` values.
   * @param {Function} iteratee The iteratee to transform keys.
   * @param {Object} accumulator The initial aggregated object.
   * @returns {Function} Returns `accumulator`.
   */
  function arrayAggregator(array, setter, iteratee, accumulator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      var value = array[index];
      setter(accumulator, value, iteratee(value), array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.forEach` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEach(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (iteratee(array[index], index, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.forEachRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEachRight(array, iteratee) {
    var length = array == null ? 0 : array.length;

    while (length--) {
      if (iteratee(array[length], length, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.every` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if all elements pass the predicate check,
   *  else `false`.
   */
  function arrayEvery(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (!predicate(array[index], index, array)) {
        return false;
      }
    }
    return true;
  }

  /**
   * A specialized version of `_.filter` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {Array} Returns the new filtered array.
   */
  function arrayFilter(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (predicate(value, index, array)) {
        result[resIndex++] = value;
      }
    }
    return result;
  }

  /**
   * A specialized version of `_.includes` for arrays without support for
   * specifying an index to search from.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludes(array, value) {
    var length = array == null ? 0 : array.length;
    return !!length && baseIndexOf(array, value, 0) > -1;
  }

  /**
   * This function is like `arrayIncludes` except that it accepts a comparator.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludesWith(array, value, comparator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (comparator(value, array[index])) {
        return true;
      }
    }
    return false;
  }

  /**
   * A specialized version of `_.map` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the new mapped array.
   */
  function arrayMap(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length,
        result = Array(length);

    while (++index < length) {
      result[index] = iteratee(array[index], index, array);
    }
    return result;
  }

  /**
   * Appends the elements of `values` to `array`.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {Array} values The values to append.
   * @returns {Array} Returns `array`.
   */
  function arrayPush(array, values) {
    var index = -1,
        length = values.length,
        offset = array.length;

    while (++index < length) {
      array[offset + index] = values[index];
    }
    return array;
  }

  /**
   * A specialized version of `_.reduce` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the first element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduce(array, iteratee, accumulator, initAccum) {
    var index = -1,
        length = array == null ? 0 : array.length;

    if (initAccum && length) {
      accumulator = array[++index];
    }
    while (++index < length) {
      accumulator = iteratee(accumulator, array[index], index, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.reduceRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the last element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
    var length = array == null ? 0 : array.length;
    if (initAccum && length) {
      accumulator = array[--length];
    }
    while (length--) {
      accumulator = iteratee(accumulator, array[length], length, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.some` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if any element passes the predicate check,
   *  else `false`.
   */
  function arraySome(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (predicate(array[index], index, array)) {
        return true;
      }
    }
    return false;
  }

  /**
   * Gets the size of an ASCII `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  var asciiSize = baseProperty('length');

  /**
   * Converts an ASCII `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function asciiToArray(string) {
    return string.split('');
  }

  /**
   * Splits an ASCII `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function asciiWords(string) {
    return string.match(reAsciiWord) || [];
  }

  /**
   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
   * without support for iteratee shorthands, which iterates over `collection`
   * using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the found element or its key, else `undefined`.
   */
  function baseFindKey(collection, predicate, eachFunc) {
    var result;
    eachFunc(collection, function(value, key, collection) {
      if (predicate(value, key, collection)) {
        result = key;
        return false;
      }
    });
    return result;
  }

  /**
   * The base implementation of `_.findIndex` and `_.findLastIndex` without
   * support for iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {number} fromIndex The index to search from.
   * @param {boolean} [fromRight] Specify iterating from right to left.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseFindIndex(array, predicate, fromIndex, fromRight) {
    var length = array.length,
        index = fromIndex + (fromRight ? 1 : -1);

    while ((fromRight ? index-- : ++index < length)) {
      if (predicate(array[index], index, array)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOf(array, value, fromIndex) {
    return value === value
      ? strictIndexOf(array, value, fromIndex)
      : baseFindIndex(array, baseIsNaN, fromIndex);
  }

  /**
   * This function is like `baseIndexOf` except that it accepts a comparator.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOfWith(array, value, fromIndex, comparator) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (comparator(array[index], value)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.isNaN` without support for number objects.
   *
   * @private
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
   */
  function baseIsNaN(value) {
    return value !== value;
  }

  /**
   * The base implementation of `_.mean` and `_.meanBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the mean.
   */
  function baseMean(array, iteratee) {
    var length = array == null ? 0 : array.length;
    return length ? (baseSum(array, iteratee) / length) : NAN;
  }

  /**
   * The base implementation of `_.property` without support for deep paths.
   *
   * @private
   * @param {string} key The key of the property to get.
   * @returns {Function} Returns the new accessor function.
   */
  function baseProperty(key) {
    return function(object) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.propertyOf` without support for deep paths.
   *
   * @private
   * @param {Object} object The object to query.
   * @returns {Function} Returns the new accessor function.
   */
  function basePropertyOf(object) {
    return function(key) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.reduce` and `_.reduceRight`, without support
   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} accumulator The initial value.
   * @param {boolean} initAccum Specify using the first or last element of
   *  `collection` as the initial value.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the accumulated value.
   */
  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
    eachFunc(collection, function(value, index, collection) {
      accumulator = initAccum
        ? (initAccum = false, value)
        : iteratee(accumulator, value, index, collection);
    });
    return accumulator;
  }

  /**
   * The base implementation of `_.sortBy` which uses `comparer` to define the
   * sort order of `array` and replaces criteria objects with their corresponding
   * values.
   *
   * @private
   * @param {Array} array The array to sort.
   * @param {Function} comparer The function to define sort order.
   * @returns {Array} Returns `array`.
   */
  function baseSortBy(array, comparer) {
    var length = array.length;

    array.sort(comparer);
    while (length--) {
      array[length] = array[length].value;
    }
    return array;
  }

  /**
   * The base implementation of `_.sum` and `_.sumBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the sum.
   */
  function baseSum(array, iteratee) {
    var result,
        index = -1,
        length = array.length;

    while (++index < length) {
      var current = iteratee(array[index]);
      if (current !== undefined) {
        result = result === undefined ? current : (result + current);
      }
    }
    return result;
  }

  /**
   * The base implementation of `_.times` without support for iteratee shorthands
   * or max array length checks.
   *
   * @private
   * @param {number} n The number of times to invoke `iteratee`.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the array of results.
   */
  function baseTimes(n, iteratee) {
    var index = -1,
        result = Array(n);

    while (++index < n) {
      result[index] = iteratee(index);
    }
    return result;
  }

  /**
   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
   * of key-value pairs for `object` corresponding to the property names of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the key-value pairs.
   */
  function baseToPairs(object, props) {
    return arrayMap(props, function(key) {
      return [key, object[key]];
    });
  }

  /**
   * The base implementation of `_.unary` without support for storing metadata.
   *
   * @private
   * @param {Function} func The function to cap arguments for.
   * @returns {Function} Returns the new capped function.
   */
  function baseUnary(func) {
    return function(value) {
      return func(value);
    };
  }

  /**
   * The base implementation of `_.values` and `_.valuesIn` which creates an
   * array of `object` property values corresponding to the property names
   * of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the array of property values.
   */
  function baseValues(object, props) {
    return arrayMap(props, function(key) {
      return object[key];
    });
  }

  /**
   * Checks if a `cache` value for `key` exists.
   *
   * @private
   * @param {Object} cache The cache to query.
   * @param {string} key The key of the entry to check.
   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
   */
  function cacheHas(cache, key) {
    return cache.has(key);
  }

  /**
   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the first unmatched string symbol.
   */
  function charsStartIndex(strSymbols, chrSymbols) {
    var index = -1,
        length = strSymbols.length;

    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the last unmatched string symbol.
   */
  function charsEndIndex(strSymbols, chrSymbols) {
    var index = strSymbols.length;

    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Gets the number of `placeholder` occurrences in `array`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} placeholder The placeholder to search for.
   * @returns {number} Returns the placeholder count.
   */
  function countHolders(array, placeholder) {
    var length = array.length,
        result = 0;

    while (length--) {
      if (array[length] === placeholder) {
        ++result;
      }
    }
    return result;
  }

  /**
   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
   * letters to basic Latin letters.
   *
   * @private
   * @param {string} letter The matched letter to deburr.
   * @returns {string} Returns the deburred letter.
   */
  var deburrLetter = basePropertyOf(deburredLetters);

  /**
   * Used by `_.escape` to convert characters to HTML entities.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  var escapeHtmlChar = basePropertyOf(htmlEscapes);

  /**
   * Used by `_.template` to escape characters for inclusion in compiled string literals.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  function escapeStringChar(chr) {
    return '\\' + stringEscapes[chr];
  }

  /**
   * Gets the value at `key` of `object`.
   *
   * @private
   * @param {Object} [object] The object to query.
   * @param {string} key The key of the property to get.
   * @returns {*} Returns the property value.
   */
  function getValue(object, key) {
    return object == null ? undefined : object[key];
  }

  /**
   * Checks if `string` contains Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a symbol is found, else `false`.
   */
  function hasUnicode(string) {
    return reHasUnicode.test(string);
  }

  /**
   * Checks if `string` contains a word composed of Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a word is found, else `false`.
   */
  function hasUnicodeWord(string) {
    return reHasUnicodeWord.test(string);
  }

  /**
   * Converts `iterator` to an array.
   *
   * @private
   * @param {Object} iterator The iterator to convert.
   * @returns {Array} Returns the converted array.
   */
  function iteratorToArray(iterator) {
    var data,
        result = [];

    while (!(data = iterator.next()).done) {
      result.push(data.value);
    }
    return result;
  }

  /**
   * Converts `map` to its key-value pairs.
   *
   * @private
   * @param {Object} map The map to convert.
   * @returns {Array} Returns the key-value pairs.
   */
  function mapToArray(map) {
    var index = -1,
        result = Array(map.size);

    map.forEach(function(value, key) {
      result[++index] = [key, value];
    });
    return result;
  }

  /**
   * Creates a unary function that invokes `func` with its argument transformed.
   *
   * @private
   * @param {Function} func The function to wrap.
   * @param {Function} transform The argument transform.
   * @returns {Function} Returns the new function.
   */
  function overArg(func, transform) {
    return function(arg) {
      return func(transform(arg));
    };
  }

  /**
   * Replaces all `placeholder` elements in `array` with an internal placeholder
   * and returns an array of their indexes.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {*} placeholder The placeholder to replace.
   * @returns {Array} Returns the new array of placeholder indexes.
   */
  function replaceHolders(array, placeholder) {
    var index = -1,
        length = array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (value === placeholder || value === PLACEHOLDER) {
        array[index] = PLACEHOLDER;
        result[resIndex++] = index;
      }
    }
    return result;
  }

  /**
   * Gets the value at `key`, unless `key` is "__proto__".
   *
   * @private
   * @param {Object} object The object to query.
   * @param {string} key The key of the property to get.
   * @returns {*} Returns the property value.
   */
  function safeGet(object, key) {
    return key == '__proto__'
      ? undefined
      : object[key];
  }

  /**
   * Converts `set` to an array of its values.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the values.
   */
  function setToArray(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = value;
    });
    return result;
  }

  /**
   * Converts `set` to its value-value pairs.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the value-value pairs.
   */
  function setToPairs(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = [value, value];
    });
    return result;
  }

  /**
   * A specialized version of `_.indexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictIndexOf(array, value, fromIndex) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (array[index] === value) {
        return index;
      }
    }
    return -1;
  }

  /**
   * A specialized version of `_.lastIndexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictLastIndexOf(array, value, fromIndex) {
    var index = fromIndex + 1;
    while (index--) {
      if (array[index] === value) {
        return index;
      }
    }
    return index;
  }

  /**
   * Gets the number of symbols in `string`.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {number} Returns the string size.
   */
  function stringSize(string) {
    return hasUnicode(string)
      ? unicodeSize(string)
      : asciiSize(string);
  }

  /**
   * Converts `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function stringToArray(string) {
    return hasUnicode(string)
      ? unicodeToArray(string)
      : asciiToArray(string);
  }

  /**
   * Used by `_.unescape` to convert HTML entities to characters.
   *
   * @private
   * @param {string} chr The matched character to unescape.
   * @returns {string} Returns the unescaped character.
   */
  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);

  /**
   * Gets the size of a Unicode `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  function unicodeSize(string) {
    var result = reUnicode.lastIndex = 0;
    while (reUnicode.test(string)) {
      ++result;
    }
    return result;
  }

  /**
   * Converts a Unicode `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function unicodeToArray(string) {
    return string.match(reUnicode) || [];
  }

  /**
   * Splits a Unicode `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function unicodeWords(string) {
    return string.match(reUnicodeWord) || [];
  }

  /*--------------------------------------------------------------------------*/

  /**
   * Create a new pristine `lodash` function using the `context` object.
   *
   * @static
   * @memberOf _
   * @since 1.1.0
   * @category Util
   * @param {Object} [context=root] The context object.
   * @returns {Function} Returns a new `lodash` function.
   * @example
   *
   * _.mixin({ 'foo': _.constant('foo') });
   *
   * var lodash = _.runInContext();
   * lodash.mixin({ 'bar': lodash.constant('bar') });
   *
   * _.isFunction(_.foo);
   * // => true
   * _.isFunction(_.bar);
   * // => false
   *
   * lodash.isFunction(lodash.foo);
   * // => false
   * lodash.isFunction(lodash.bar);
   * // => true
   *
   * // Create a suped-up `defer` in Node.js.
   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
   */
  var runInContext = (function runInContext(context) {
    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));

    /** Built-in constructor references. */
    var Array = context.Array,
        Date = context.Date,
        Error = context.Error,
        Function = context.Function,
        Math = context.Math,
        Object = context.Object,
        RegExp = context.RegExp,
        String = context.String,
        TypeError = context.TypeError;

    /** Used for built-in method references. */
    var arrayProto = Array.prototype,
        funcProto = Function.prototype,
        objectProto = Object.prototype;

    /** Used to detect overreaching core-js shims. */
    var coreJsData = context['__core-js_shared__'];

    /** Used to resolve the decompiled source of functions. */
    var funcToString = funcProto.toString;

    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;

    /** Used to generate unique IDs. */
    var idCounter = 0;

    /** Used to detect methods masquerading as native. */
    var maskSrcKey = (function() {
      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
      return uid ? ('Symbol(src)_1.' + uid) : '';
    }());

    /**
     * Used to resolve the
     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     * of values.
     */
    var nativeObjectToString = objectProto.toString;

    /** Used to infer the `Object` constructor. */
    var objectCtorString = funcToString.call(Object);

    /** Used to restore the original `_` reference in `_.noConflict`. */
    var oldDash = root._;

    /** Used to detect if a method is native. */
    var reIsNative = RegExp('^' +
      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
    );

    /** Built-in value references. */
    var Buffer = moduleExports ? context.Buffer : undefined,
        Symbol = context.Symbol,
        Uint8Array = context.Uint8Array,
        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
        getPrototype = overArg(Object.getPrototypeOf, Object),
        objectCreate = Object.create,
        propertyIsEnumerable = objectProto.propertyIsEnumerable,
        splice = arrayProto.splice,
        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
        symIterator = Symbol ? Symbol.iterator : undefined,
        symToStringTag = Symbol ? Symbol.toStringTag : undefined;

    var defineProperty = (function() {
      try {
        var func = getNative(Object, 'defineProperty');
        func({}, '', {});
        return func;
      } catch (e) {}
    }());

    /** Mocked built-ins. */
    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
        ctxNow = Date && Date.now !== root.Date.now && Date.now,
        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;

    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeCeil = Math.ceil,
        nativeFloor = Math.floor,
        nativeGetSymbols = Object.getOwnPropertySymbols,
        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
        nativeIsFinite = context.isFinite,
        nativeJoin = arrayProto.join,
        nativeKeys = overArg(Object.keys, Object),
        nativeMax = Math.max,
        nativeMin = Math.min,
        nativeNow = Date.now,
        nativeParseInt = context.parseInt,
        nativeRandom = Math.random,
        nativeReverse = arrayProto.reverse;

    /* Built-in method references that are verified to be native. */
    var DataView = getNative(context, 'DataView'),
        Map = getNative(context, 'Map'),
        Promise = getNative(context, 'Promise'),
        Set = getNative(context, 'Set'),
        WeakMap = getNative(context, 'WeakMap'),
        nativeCreate = getNative(Object, 'create');

    /** Used to store function metadata. */
    var metaMap = WeakMap && new WeakMap;

    /** Used to lookup unminified function names. */
    var realNames = {};

    /** Used to detect maps, sets, and weakmaps. */
    var dataViewCtorString = toSource(DataView),
        mapCtorString = toSource(Map),
        promiseCtorString = toSource(Promise),
        setCtorString = toSource(Set),
        weakMapCtorString = toSource(WeakMap);

    /** Used to convert symbols to primitives and strings. */
    var symbolProto = Symbol ? Symbol.prototype : undefined,
        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
        symbolToString = symbolProto ? symbolProto.toString : undefined;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` object which wraps `value` to enable implicit method
     * chain sequences. Methods that operate on and return arrays, collections,
     * and functions can be chained together. Methods that retrieve a single value
     * or may return a primitive value will automatically end the chain sequence
     * and return the unwrapped value. Otherwise, the value must be unwrapped
     * with `_#value`.
     *
     * Explicit chain sequences, which must be unwrapped with `_#value`, may be
     * enabled using `_.chain`.
     *
     * The execution of chained methods is lazy, that is, it's deferred until
     * `_#value` is implicitly or explicitly called.
     *
     * Lazy evaluation allows several methods to support shortcut fusion.
     * Shortcut fusion is an optimization to merge iteratee calls; this avoids
     * the creation of intermediate arrays and can greatly reduce the number of
     * iteratee executions. Sections of a chain sequence qualify for shortcut
     * fusion if the section is applied to an array and iteratees accept only
     * one argument. The heuristic for whether a section qualifies for shortcut
     * fusion is subject to change.
     *
     * Chaining is supported in custom builds as long as the `_#value` method is
     * directly or indirectly included in the build.
     *
     * In addition to lodash methods, wrappers have `Array` and `String` methods.
     *
     * The wrapper `Array` methods are:
     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
     *
     * The wrapper `String` methods are:
     * `replace` and `split`
     *
     * The wrapper methods that support shortcut fusion are:
     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
     *
     * The chainable wrapper methods are:
     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
     * `zipObject`, `zipObjectDeep`, and `zipWith`
     *
     * The wrapper methods that are **not** chainable by default are:
     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
     * `upperFirst`, `value`, and `words`
     *
     * @name _
     * @constructor
     * @category Seq
     * @param {*} value The value to wrap in a `lodash` instance.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2, 3]);
     *
     * // Returns an unwrapped value.
     * wrapped.reduce(_.add);
     * // => 6
     *
     * // Returns a wrapped value.
     * var squares = wrapped.map(square);
     *
     * _.isArray(squares);
     * // => false
     *
     * _.isArray(squares.value());
     * // => true
     */
    function lodash(value) {
      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
        if (value instanceof LodashWrapper) {
          return value;
        }
        if (hasOwnProperty.call(value, '__wrapped__')) {
          return wrapperClone(value);
        }
      }
      return new LodashWrapper(value);
    }

    /**
     * The base implementation of `_.create` without support for assigning
     * properties to the created object.
     *
     * @private
     * @param {Object} proto The object to inherit from.
     * @returns {Object} Returns the new object.
     */
    var baseCreate = (function() {
      function object() {}
      return function(proto) {
        if (!isObject(proto)) {
          return {};
        }
        if (objectCreate) {
          return objectCreate(proto);
        }
        object.prototype = proto;
        var result = new object;
        object.prototype = undefined;
        return result;
      };
    }());

    /**
     * The function whose prototype chain sequence wrappers inherit from.
     *
     * @private
     */
    function baseLodash() {
      // No operation performed.
    }

    /**
     * The base constructor for creating `lodash` wrapper objects.
     *
     * @private
     * @param {*} value The value to wrap.
     * @param {boolean} [chainAll] Enable explicit method chain sequences.
     */
    function LodashWrapper(value, chainAll) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__chain__ = !!chainAll;
      this.__index__ = 0;
      this.__values__ = undefined;
    }

    /**
     * By default, the template delimiters used by lodash are like those in
     * embedded Ruby (ERB) as well as ES2015 template strings. Change the
     * following template settings to use alternative delimiters.
     *
     * @static
     * @memberOf _
     * @type {Object}
     */
    lodash.templateSettings = {

      /**
       * Used to detect `data` property values to be HTML-escaped.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'escape': reEscape,

      /**
       * Used to detect code to be evaluated.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'evaluate': reEvaluate,

      /**
       * Used to detect `data` property values to inject.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'interpolate': reInterpolate,

      /**
       * Used to reference the data object in the template text.
       *
       * @memberOf _.templateSettings
       * @type {string}
       */
      'variable': '',

      /**
       * Used to import variables into the compiled template.
       *
       * @memberOf _.templateSettings
       * @type {Object}
       */
      'imports': {

        /**
         * A reference to the `lodash` function.
         *
         * @memberOf _.templateSettings.imports
         * @type {Function}
         */
        '_': lodash
      }
    };

    // Ensure wrappers are instances of `baseLodash`.
    lodash.prototype = baseLodash.prototype;
    lodash.prototype.constructor = lodash;

    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
    LodashWrapper.prototype.constructor = LodashWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
     *
     * @private
     * @constructor
     * @param {*} value The value to wrap.
     */
    function LazyWrapper(value) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__dir__ = 1;
      this.__filtered__ = false;
      this.__iteratees__ = [];
      this.__takeCount__ = MAX_ARRAY_LENGTH;
      this.__views__ = [];
    }

    /**
     * Creates a clone of the lazy wrapper object.
     *
     * @private
     * @name clone
     * @memberOf LazyWrapper
     * @returns {Object} Returns the cloned `LazyWrapper` object.
     */
    function lazyClone() {
      var result = new LazyWrapper(this.__wrapped__);
      result.__actions__ = copyArray(this.__actions__);
      result.__dir__ = this.__dir__;
      result.__filtered__ = this.__filtered__;
      result.__iteratees__ = copyArray(this.__iteratees__);
      result.__takeCount__ = this.__takeCount__;
      result.__views__ = copyArray(this.__views__);
      return result;
    }

    /**
     * Reverses the direction of lazy iteration.
     *
     * @private
     * @name reverse
     * @memberOf LazyWrapper
     * @returns {Object} Returns the new reversed `LazyWrapper` object.
     */
    function lazyReverse() {
      if (this.__filtered__) {
        var result = new LazyWrapper(this);
        result.__dir__ = -1;
        result.__filtered__ = true;
      } else {
        result = this.clone();
        result.__dir__ *= -1;
      }
      return result;
    }

    /**
     * Extracts the unwrapped value from its lazy wrapper.
     *
     * @private
     * @name value
     * @memberOf LazyWrapper
     * @returns {*} Returns the unwrapped value.
     */
    function lazyValue() {
      var array = this.__wrapped__.value(),
          dir = this.__dir__,
          isArr = isArray(array),
          isRight = dir < 0,
          arrLength = isArr ? array.length : 0,
          view = getView(0, arrLength, this.__views__),
          start = view.start,
          end = view.end,
          length = end - start,
          index = isRight ? end : (start - 1),
          iteratees = this.__iteratees__,
          iterLength = iteratees.length,
          resIndex = 0,
          takeCount = nativeMin(length, this.__takeCount__);

      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
        return baseWrapperValue(array, this.__actions__);
      }
      var result = [];

      outer:
      while (length-- && resIndex < takeCount) {
        index += dir;

        var iterIndex = -1,
            value = array[index];

        while (++iterIndex < iterLength) {
          var data = iteratees[iterIndex],
              iteratee = data.iteratee,
              type = data.type,
              computed = iteratee(value);

          if (type == LAZY_MAP_FLAG) {
            value = computed;
          } else if (!computed) {
            if (type == LAZY_FILTER_FLAG) {
              continue outer;
            } else {
              break outer;
            }
          }
        }
        result[resIndex++] = value;
      }
      return result;
    }

    // Ensure `LazyWrapper` is an instance of `baseLodash`.
    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
    LazyWrapper.prototype.constructor = LazyWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a hash object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Hash(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the hash.
     *
     * @private
     * @name clear
     * @memberOf Hash
     */
    function hashClear() {
      this.__data__ = nativeCreate ? nativeCreate(null) : {};
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the hash.
     *
     * @private
     * @name delete
     * @memberOf Hash
     * @param {Object} hash The hash to modify.
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function hashDelete(key) {
      var result = this.has(key) && delete this.__data__[key];
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the hash value for `key`.
     *
     * @private
     * @name get
     * @memberOf Hash
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function hashGet(key) {
      var data = this.__data__;
      if (nativeCreate) {
        var result = data[key];
        return result === HASH_UNDEFINED ? undefined : result;
      }
      return hasOwnProperty.call(data, key) ? data[key] : undefined;
    }

    /**
     * Checks if a hash value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Hash
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function hashHas(key) {
      var data = this.__data__;
      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
    }

    /**
     * Sets the hash `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Hash
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the hash instance.
     */
    function hashSet(key, value) {
      var data = this.__data__;
      this.size += this.has(key) ? 0 : 1;
      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
      return this;
    }

    // Add methods to `Hash`.
    Hash.prototype.clear = hashClear;
    Hash.prototype['delete'] = hashDelete;
    Hash.prototype.get = hashGet;
    Hash.prototype.has = hashHas;
    Hash.prototype.set = hashSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an list cache object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function ListCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the list cache.
     *
     * @private
     * @name clear
     * @memberOf ListCache
     */
    function listCacheClear() {
      this.__data__ = [];
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the list cache.
     *
     * @private
     * @name delete
     * @memberOf ListCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function listCacheDelete(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        return false;
      }
      var lastIndex = data.length - 1;
      if (index == lastIndex) {
        data.pop();
      } else {
        splice.call(data, index, 1);
      }
      --this.size;
      return true;
    }

    /**
     * Gets the list cache value for `key`.
     *
     * @private
     * @name get
     * @memberOf ListCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function listCacheGet(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      return index < 0 ? undefined : data[index][1];
    }

    /**
     * Checks if a list cache value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf ListCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function listCacheHas(key) {
      return assocIndexOf(this.__data__, key) > -1;
    }

    /**
     * Sets the list cache `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf ListCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the list cache instance.
     */
    function listCacheSet(key, value) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        ++this.size;
        data.push([key, value]);
      } else {
        data[index][1] = value;
      }
      return this;
    }

    // Add methods to `ListCache`.
    ListCache.prototype.clear = listCacheClear;
    ListCache.prototype['delete'] = listCacheDelete;
    ListCache.prototype.get = listCacheGet;
    ListCache.prototype.has = listCacheHas;
    ListCache.prototype.set = listCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a map cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function MapCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the map.
     *
     * @private
     * @name clear
     * @memberOf MapCache
     */
    function mapCacheClear() {
      this.size = 0;
      this.__data__ = {
        'hash': new Hash,
        'map': new (Map || ListCache),
        'string': new Hash
      };
    }

    /**
     * Removes `key` and its value from the map.
     *
     * @private
     * @name delete
     * @memberOf MapCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function mapCacheDelete(key) {
      var result = getMapData(this, key)['delete'](key);
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the map value for `key`.
     *
     * @private
     * @name get
     * @memberOf MapCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function mapCacheGet(key) {
      return getMapData(this, key).get(key);
    }

    /**
     * Checks if a map value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf MapCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function mapCacheHas(key) {
      return getMapData(this, key).has(key);
    }

    /**
     * Sets the map `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf MapCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the map cache instance.
     */
    function mapCacheSet(key, value) {
      var data = getMapData(this, key),
          size = data.size;

      data.set(key, value);
      this.size += data.size == size ? 0 : 1;
      return this;
    }

    // Add methods to `MapCache`.
    MapCache.prototype.clear = mapCacheClear;
    MapCache.prototype['delete'] = mapCacheDelete;
    MapCache.prototype.get = mapCacheGet;
    MapCache.prototype.has = mapCacheHas;
    MapCache.prototype.set = mapCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     *
     * Creates an array cache object to store unique values.
     *
     * @private
     * @constructor
     * @param {Array} [values] The values to cache.
     */
    function SetCache(values) {
      var index = -1,
          length = values == null ? 0 : values.length;

      this.__data__ = new MapCache;
      while (++index < length) {
        this.add(values[index]);
      }
    }

    /**
     * Adds `value` to the array cache.
     *
     * @private
     * @name add
     * @memberOf SetCache
     * @alias push
     * @param {*} value The value to cache.
     * @returns {Object} Returns the cache instance.
     */
    function setCacheAdd(value) {
      this.__data__.set(value, HASH_UNDEFINED);
      return this;
    }

    /**
     * Checks if `value` is in the array cache.
     *
     * @private
     * @name has
     * @memberOf SetCache
     * @param {*} value The value to search for.
     * @returns {number} Returns `true` if `value` is found, else `false`.
     */
    function setCacheHas(value) {
      return this.__data__.has(value);
    }

    // Add methods to `SetCache`.
    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
    SetCache.prototype.has = setCacheHas;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a stack cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Stack(entries) {
      var data = this.__data__ = new ListCache(entries);
      this.size = data.size;
    }

    /**
     * Removes all key-value entries from the stack.
     *
     * @private
     * @name clear
     * @memberOf Stack
     */
    function stackClear() {
      this.__data__ = new ListCache;
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the stack.
     *
     * @private
     * @name delete
     * @memberOf Stack
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function stackDelete(key) {
      var data = this.__data__,
          result = data['delete'](key);

      this.size = data.size;
      return result;
    }

    /**
     * Gets the stack value for `key`.
     *
     * @private
     * @name get
     * @memberOf Stack
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function stackGet(key) {
      return this.__data__.get(key);
    }

    /**
     * Checks if a stack value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Stack
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function stackHas(key) {
      return this.__data__.has(key);
    }

    /**
     * Sets the stack `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Stack
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the stack cache instance.
     */
    function stackSet(key, value) {
      var data = this.__data__;
      if (data instanceof ListCache) {
        var pairs = data.__data__;
        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
          pairs.push([key, value]);
          this.size = ++data.size;
          return this;
        }
        data = this.__data__ = new MapCache(pairs);
      }
      data.set(key, value);
      this.size = data.size;
      return this;
    }

    // Add methods to `Stack`.
    Stack.prototype.clear = stackClear;
    Stack.prototype['delete'] = stackDelete;
    Stack.prototype.get = stackGet;
    Stack.prototype.has = stackHas;
    Stack.prototype.set = stackSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of the enumerable property names of the array-like `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @param {boolean} inherited Specify returning inherited property names.
     * @returns {Array} Returns the array of property names.
     */
    function arrayLikeKeys(value, inherited) {
      var isArr = isArray(value),
          isArg = !isArr && isArguments(value),
          isBuff = !isArr && !isArg && isBuffer(value),
          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
          skipIndexes = isArr || isArg || isBuff || isType,
          result = skipIndexes ? baseTimes(value.length, String) : [],
          length = result.length;

      for (var key in value) {
        if ((inherited || hasOwnProperty.call(value, key)) &&
            !(skipIndexes && (
               // Safari 9 has enumerable `arguments.length` in strict mode.
               key == 'length' ||
               // Node.js 0.10 has enumerable non-index properties on buffers.
               (isBuff && (key == 'offset' || key == 'parent')) ||
               // PhantomJS 2 has enumerable non-index properties on typed arrays.
               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
               // Skip index properties.
               isIndex(key, length)
            ))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * A specialized version of `_.sample` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @returns {*} Returns the random element.
     */
    function arraySample(array) {
      var length = array.length;
      return length ? array[baseRandom(0, length - 1)] : undefined;
    }

    /**
     * A specialized version of `_.sampleSize` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function arraySampleSize(array, n) {
      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
    }

    /**
     * A specialized version of `_.shuffle` for arrays.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function arrayShuffle(array) {
      return shuffleSelf(copyArray(array));
    }

    /**
     * This function is like `assignValue` except that it doesn't assign
     * `undefined` values.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignMergeValue(object, key, value) {
      if ((value !== undefined && !eq(object[key], value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Assigns `value` to `key` of `object` if the existing value is not equivalent
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignValue(object, key, value) {
      var objValue = object[key];
      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Gets the index at which the `key` is found in `array` of key-value pairs.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} key The key to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function assocIndexOf(array, key) {
      var length = array.length;
      while (length--) {
        if (eq(array[length][0], key)) {
          return length;
        }
      }
      return -1;
    }

    /**
     * Aggregates elements of `collection` on `accumulator` with keys transformed
     * by `iteratee` and values set by `setter`.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform keys.
     * @param {Object} accumulator The initial aggregated object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseAggregator(collection, setter, iteratee, accumulator) {
      baseEach(collection, function(value, key, collection) {
        setter(accumulator, value, iteratee(value), collection);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.assign` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssign(object, source) {
      return object && copyObject(source, keys(source), object);
    }

    /**
     * The base implementation of `_.assignIn` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssignIn(object, source) {
      return object && copyObject(source, keysIn(source), object);
    }

    /**
     * The base implementation of `assignValue` and `assignMergeValue` without
     * value checks.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function baseAssignValue(object, key, value) {
      if (key == '__proto__' && defineProperty) {
        defineProperty(object, key, {
          'configurable': true,
          'enumerable': true,
          'value': value,
          'writable': true
        });
      } else {
        object[key] = value;
      }
    }

    /**
     * The base implementation of `_.at` without support for individual paths.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {string[]} paths The property paths to pick.
     * @returns {Array} Returns the picked elements.
     */
    function baseAt(object, paths) {
      var index = -1,
          length = paths.length,
          result = Array(length),
          skip = object == null;

      while (++index < length) {
        result[index] = skip ? undefined : get(object, paths[index]);
      }
      return result;
    }

    /**
     * The base implementation of `_.clamp` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     */
    function baseClamp(number, lower, upper) {
      if (number === number) {
        if (upper !== undefined) {
          number = number <= upper ? number : upper;
        }
        if (lower !== undefined) {
          number = number >= lower ? number : lower;
        }
      }
      return number;
    }

    /**
     * The base implementation of `_.clone` and `_.cloneDeep` which tracks
     * traversed objects.
     *
     * @private
     * @param {*} value The value to clone.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Deep clone
     *  2 - Flatten inherited properties
     *  4 - Clone symbols
     * @param {Function} [customizer] The function to customize cloning.
     * @param {string} [key] The key of `value`.
     * @param {Object} [object] The parent object of `value`.
     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
     * @returns {*} Returns the cloned value.
     */
    function baseClone(value, bitmask, customizer, key, object, stack) {
      var result,
          isDeep = bitmask & CLONE_DEEP_FLAG,
          isFlat = bitmask & CLONE_FLAT_FLAG,
          isFull = bitmask & CLONE_SYMBOLS_FLAG;

      if (customizer) {
        result = object ? customizer(value, key, object, stack) : customizer(value);
      }
      if (result !== undefined) {
        return result;
      }
      if (!isObject(value)) {
        return value;
      }
      var isArr = isArray(value);
      if (isArr) {
        result = initCloneArray(value);
        if (!isDeep) {
          return copyArray(value, result);
        }
      } else {
        var tag = getTag(value),
            isFunc = tag == funcTag || tag == genTag;

        if (isBuffer(value)) {
          return cloneBuffer(value, isDeep);
        }
        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
          result = (isFlat || isFunc) ? {} : initCloneObject(value);
          if (!isDeep) {
            return isFlat
              ? copySymbolsIn(value, baseAssignIn(result, value))
              : copySymbols(value, baseAssign(result, value));
          }
        } else {
          if (!cloneableTags[tag]) {
            return object ? value : {};
          }
          result = initCloneByTag(value, tag, isDeep);
        }
      }
      // Check for circular references and return its corresponding clone.
      stack || (stack = new Stack);
      var stacked = stack.get(value);
      if (stacked) {
        return stacked;
      }
      stack.set(value, result);

      if (isSet(value)) {
        value.forEach(function(subValue) {
          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
        });

        return result;
      }

      if (isMap(value)) {
        value.forEach(function(subValue, key) {
          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
        });

        return result;
      }

      var keysFunc = isFull
        ? (isFlat ? getAllKeysIn : getAllKeys)
        : (isFlat ? keysIn : keys);

      var props = isArr ? undefined : keysFunc(value);
      arrayEach(props || value, function(subValue, key) {
        if (props) {
          key = subValue;
          subValue = value[key];
        }
        // Recursively populate clone (susceptible to call stack limits).
        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
      });
      return result;
    }

    /**
     * The base implementation of `_.conforms` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     */
    function baseConforms(source) {
      var props = keys(source);
      return function(object) {
        return baseConformsTo(object, source, props);
      };
    }

    /**
     * The base implementation of `_.conformsTo` which accepts `props` to check.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     */
    function baseConformsTo(object, source, props) {
      var length = props.length;
      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (length--) {
        var key = props[length],
            predicate = source[key],
            value = object[key];

        if ((value === undefined && !(key in object)) || !predicate(value)) {
          return false;
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.delay` and `_.defer` which accepts `args`
     * to provide to `func`.
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {Array} args The arguments to provide to `func`.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    function baseDelay(func, wait, args) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return setTimeout(function() { func.apply(undefined, args); }, wait);
    }

    /**
     * The base implementation of methods like `_.difference` without support
     * for excluding multiple arrays or iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Array} values The values to exclude.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     */
    function baseDifference(array, values, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          isCommon = true,
          length = array.length,
          result = [],
          valuesLength = values.length;

      if (!length) {
        return result;
      }
      if (iteratee) {
        values = arrayMap(values, baseUnary(iteratee));
      }
      if (comparator) {
        includes = arrayIncludesWith;
        isCommon = false;
      }
      else if (values.length >= LARGE_ARRAY_SIZE) {
        includes = cacheHas;
        isCommon = false;
        values = new SetCache(values);
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee == null ? value : iteratee(value);

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var valuesIndex = valuesLength;
          while (valuesIndex--) {
            if (values[valuesIndex] === computed) {
              continue outer;
            }
          }
          result.push(value);
        }
        else if (!includes(values, computed, comparator)) {
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.forEach` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEach = createBaseEach(baseForOwn);

    /**
     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEachRight = createBaseEach(baseForOwnRight, true);

    /**
     * The base implementation of `_.every` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`
     */
    function baseEvery(collection, predicate) {
      var result = true;
      baseEach(collection, function(value, index, collection) {
        result = !!predicate(value, index, collection);
        return result;
      });
      return result;
    }

    /**
     * The base implementation of methods like `_.max` and `_.min` which accepts a
     * `comparator` to determine the extremum value.
     *
     * @private
     * @param {Array} array The array to iterate over.
     * @param {Function} iteratee The iteratee invoked per iteration.
     * @param {Function} comparator The comparator used to compare values.
     * @returns {*} Returns the extremum value.
     */
    function baseExtremum(array, iteratee, comparator) {
      var index = -1,
          length = array.length;

      while (++index < length) {
        var value = array[index],
            current = iteratee(value);

        if (current != null && (computed === undefined
              ? (current === current && !isSymbol(current))
              : comparator(current, computed)
            )) {
          var computed = current,
              result = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.fill` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     */
    function baseFill(array, value, start, end) {
      var length = array.length;

      start = toInteger(start);
      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = (end === undefined || end > length) ? length : toInteger(end);
      if (end < 0) {
        end += length;
      }
      end = start > end ? 0 : toLength(end);
      while (start < end) {
        array[start++] = value;
      }
      return array;
    }

    /**
     * The base implementation of `_.filter` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     */
    function baseFilter(collection, predicate) {
      var result = [];
      baseEach(collection, function(value, index, collection) {
        if (predicate(value, index, collection)) {
          result.push(value);
        }
      });
      return result;
    }

    /**
     * The base implementation of `_.flatten` with support for restricting flattening.
     *
     * @private
     * @param {Array} array The array to flatten.
     * @param {number} depth The maximum recursion depth.
     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
     * @param {Array} [result=[]] The initial result value.
     * @returns {Array} Returns the new flattened array.
     */
    function baseFlatten(array, depth, predicate, isStrict, result) {
      var index = -1,
          length = array.length;

      predicate || (predicate = isFlattenable);
      result || (result = []);

      while (++index < length) {
        var value = array[index];
        if (depth > 0 && predicate(value)) {
          if (depth > 1) {
            // Recursively flatten arrays (susceptible to call stack limits).
            baseFlatten(value, depth - 1, predicate, isStrict, result);
          } else {
            arrayPush(result, value);
          }
        } else if (!isStrict) {
          result[result.length] = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `baseForOwn` which iterates over `object`
     * properties returned by `keysFunc` and invokes `iteratee` for each property.
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseFor = createBaseFor();

    /**
     * This function is like `baseFor` except that it iterates over properties
     * in the opposite order.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseForRight = createBaseFor(true);

    /**
     * The base implementation of `_.forOwn` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwn(object, iteratee) {
      return object && baseFor(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwnRight(object, iteratee) {
      return object && baseForRight(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.functions` which creates an array of
     * `object` function property names filtered from `props`.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Array} props The property names to filter.
     * @returns {Array} Returns the function names.
     */
    function baseFunctions(object, props) {
      return arrayFilter(props, function(key) {
        return isFunction(object[key]);
      });
    }

    /**
     * The base implementation of `_.get` without support for default values.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @returns {*} Returns the resolved value.
     */
    function baseGet(object, path) {
      path = castPath(path, object);

      var index = 0,
          length = path.length;

      while (object != null && index < length) {
        object = object[toKey(path[index++])];
      }
      return (index && index == length) ? object : undefined;
    }

    /**
     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @param {Function} symbolsFunc The function to get the symbols of `object`.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
      var result = keysFunc(object);
      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
    }

    /**
     * The base implementation of `getTag` without fallbacks for buggy environments.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    function baseGetTag(value) {
      if (value == null) {
        return value === undefined ? undefinedTag : nullTag;
      }
      return (symToStringTag && symToStringTag in Object(value))
        ? getRawTag(value)
        : objectToString(value);
    }

    /**
     * The base implementation of `_.gt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     */
    function baseGt(value, other) {
      return value > other;
    }

    /**
     * The base implementation of `_.has` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHas(object, key) {
      return object != null && hasOwnProperty.call(object, key);
    }

    /**
     * The base implementation of `_.hasIn` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHasIn(object, key) {
      return object != null && key in Object(object);
    }

    /**
     * The base implementation of `_.inRange` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to check.
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     */
    function baseInRange(number, start, end) {
      return number >= nativeMin(start, end) && number < nativeMax(start, end);
    }

    /**
     * The base implementation of methods like `_.intersection`, without support
     * for iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of shared values.
     */
    function baseIntersection(arrays, iteratee, comparator) {
      var includes = comparator ? arrayIncludesWith : arrayIncludes,
          length = arrays[0].length,
          othLength = arrays.length,
          othIndex = othLength,
          caches = Array(othLength),
          maxLength = Infinity,
          result = [];

      while (othIndex--) {
        var array = arrays[othIndex];
        if (othIndex && iteratee) {
          array = arrayMap(array, baseUnary(iteratee));
        }
        maxLength = nativeMin(array.length, maxLength);
        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
          ? new SetCache(othIndex && array)
          : undefined;
      }
      array = arrays[0];

      var index = -1,
          seen = caches[0];

      outer:
      while (++index < length && result.length < maxLength) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (!(seen
              ? cacheHas(seen, computed)
              : includes(result, computed, comparator)
            )) {
          othIndex = othLength;
          while (--othIndex) {
            var cache = caches[othIndex];
            if (!(cache
                  ? cacheHas(cache, computed)
                  : includes(arrays[othIndex], computed, comparator))
                ) {
              continue outer;
            }
          }
          if (seen) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.invert` and `_.invertBy` which inverts
     * `object` with values transformed by `iteratee` and set by `setter`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform values.
     * @param {Object} accumulator The initial inverted object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseInverter(object, setter, iteratee, accumulator) {
      baseForOwn(object, function(value, key, object) {
        setter(accumulator, iteratee(value), key, object);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.invoke` without support for individual
     * method arguments.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {Array} args The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     */
    function baseInvoke(object, path, args) {
      path = castPath(path, object);
      object = parent(object, path);
      var func = object == null ? object : object[toKey(last(path))];
      return func == null ? undefined : apply(func, object, args);
    }

    /**
     * The base implementation of `_.isArguments`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     */
    function baseIsArguments(value) {
      return isObjectLike(value) && baseGetTag(value) == argsTag;
    }

    /**
     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     */
    function baseIsArrayBuffer(value) {
      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
    }

    /**
     * The base implementation of `_.isDate` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     */
    function baseIsDate(value) {
      return isObjectLike(value) && baseGetTag(value) == dateTag;
    }

    /**
     * The base implementation of `_.isEqual` which supports partial comparisons
     * and tracks traversed objects.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Unordered comparison
     *  2 - Partial comparison
     * @param {Function} [customizer] The function to customize comparisons.
     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     */
    function baseIsEqual(value, other, bitmask, customizer, stack) {
      if (value === other) {
        return true;
      }
      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
        return value !== value && other !== other;
      }
      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
    }

    /**
     * A specialized version of `baseIsEqual` for arrays and objects which performs
     * deep comparisons and tracks traversed objects enabling objects with circular
     * references to be compared.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
      var objIsArr = isArray(object),
          othIsArr = isArray(other),
          objTag = objIsArr ? arrayTag : getTag(object),
          othTag = othIsArr ? arrayTag : getTag(other);

      objTag = objTag == argsTag ? objectTag : objTag;
      othTag = othTag == argsTag ? objectTag : othTag;

      var objIsObj = objTag == objectTag,
          othIsObj = othTag == objectTag,
          isSameTag = objTag == othTag;

      if (isSameTag && isBuffer(object)) {
        if (!isBuffer(other)) {
          return false;
        }
        objIsArr = true;
        objIsObj = false;
      }
      if (isSameTag && !objIsObj) {
        stack || (stack = new Stack);
        return (objIsArr || isTypedArray(object))
          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
      }
      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');

        if (objIsWrapped || othIsWrapped) {
          var objUnwrapped = objIsWrapped ? object.value() : object,
              othUnwrapped = othIsWrapped ? other.value() : other;

          stack || (stack = new Stack);
          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
        }
      }
      if (!isSameTag) {
        return false;
      }
      stack || (stack = new Stack);
      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
    }

    /**
     * The base implementation of `_.isMap` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     */
    function baseIsMap(value) {
      return isObjectLike(value) && getTag(value) == mapTag;
    }

    /**
     * The base implementation of `_.isMatch` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Array} matchData The property names, values, and compare flags to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     */
    function baseIsMatch(object, source, matchData, customizer) {
      var index = matchData.length,
          length = index,
          noCustomizer = !customizer;

      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (index--) {
        var data = matchData[index];
        if ((noCustomizer && data[2])
              ? data[1] !== object[data[0]]
              : !(data[0] in object)
            ) {
          return false;
        }
      }
      while (++index < length) {
        data = matchData[index];
        var key = data[0],
            objValue = object[key],
            srcValue = data[1];

        if (noCustomizer && data[2]) {
          if (objValue === undefined && !(key in object)) {
            return false;
          }
        } else {
          var stack = new Stack;
          if (customizer) {
            var result = customizer(objValue, srcValue, key, object, source, stack);
          }
          if (!(result === undefined
                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
                : result
              )) {
            return false;
          }
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.isNative` without bad shim checks.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     */
    function baseIsNative(value) {
      if (!isObject(value) || isMasked(value)) {
        return false;
      }
      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
      return pattern.test(toSource(value));
    }

    /**
     * The base implementation of `_.isRegExp` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     */
    function baseIsRegExp(value) {
      return isObjectLike(value) && baseGetTag(value) == regexpTag;
    }

    /**
     * The base implementation of `_.isSet` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     */
    function baseIsSet(value) {
      return isObjectLike(value) && getTag(value) == setTag;
    }

    /**
     * The base implementation of `_.isTypedArray` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     */
    function baseIsTypedArray(value) {
      return isObjectLike(value) &&
        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
    }

    /**
     * The base implementation of `_.iteratee`.
     *
     * @private
     * @param {*} [value=_.identity] The value to convert to an iteratee.
     * @returns {Function} Returns the iteratee.
     */
    function baseIteratee(value) {
      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
      if (typeof value == 'function') {
        return value;
      }
      if (value == null) {
        return identity;
      }
      if (typeof value == 'object') {
        return isArray(value)
          ? baseMatchesProperty(value[0], value[1])
          : baseMatches(value);
      }
      return property(value);
    }

    /**
     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeys(object) {
      if (!isPrototype(object)) {
        return nativeKeys(object);
      }
      var result = [];
      for (var key in Object(object)) {
        if (hasOwnProperty.call(object, key) && key != 'constructor') {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeysIn(object) {
      if (!isObject(object)) {
        return nativeKeysIn(object);
      }
      var isProto = isPrototype(object),
          result = [];

      for (var key in object) {
        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.lt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     */
    function baseLt(value, other) {
      return value < other;
    }

    /**
     * The base implementation of `_.map` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     */
    function baseMap(collection, iteratee) {
      var index = -1,
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value, key, collection) {
        result[++index] = iteratee(value, key, collection);
      });
      return result;
    }

    /**
     * The base implementation of `_.matches` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatches(source) {
      var matchData = getMatchData(source);
      if (matchData.length == 1 && matchData[0][2]) {
        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
      }
      return function(object) {
        return object === source || baseIsMatch(object, source, matchData);
      };
    }

    /**
     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
     *
     * @private
     * @param {string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatchesProperty(path, srcValue) {
      if (isKey(path) && isStrictComparable(srcValue)) {
        return matchesStrictComparable(toKey(path), srcValue);
      }
      return function(object) {
        var objValue = get(object, path);
        return (objValue === undefined && objValue === srcValue)
          ? hasIn(object, path)
          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
      };
    }

    /**
     * The base implementation of `_.merge` without support for multiple sources.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} [customizer] The function to customize merged values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMerge(object, source, srcIndex, customizer, stack) {
      if (object === source) {
        return;
      }
      baseFor(source, function(srcValue, key) {
        if (isObject(srcValue)) {
          stack || (stack = new Stack);
          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
        }
        else {
          var newValue = customizer
            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
            : undefined;

          if (newValue === undefined) {
            newValue = srcValue;
          }
          assignMergeValue(object, key, newValue);
        }
      }, keysIn);
    }

    /**
     * A specialized version of `baseMerge` for arrays and objects which performs
     * deep merges and tracks traversed objects enabling objects with circular
     * references to be merged.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {string} key The key of the value to merge.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} mergeFunc The function to merge values.
     * @param {Function} [customizer] The function to customize assigned values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
      var objValue = safeGet(object, key),
          srcValue = safeGet(source, key),
          stacked = stack.get(srcValue);

      if (stacked) {
        assignMergeValue(object, key, stacked);
        return;
      }
      var newValue = customizer
        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
        : undefined;

      var isCommon = newValue === undefined;

      if (isCommon) {
        var isArr = isArray(srcValue),
            isBuff = !isArr && isBuffer(srcValue),
            isTyped = !isArr && !isBuff && isTypedArray(srcValue);

        newValue = srcValue;
        if (isArr || isBuff || isTyped) {
          if (isArray(objValue)) {
            newValue = objValue;
          }
          else if (isArrayLikeObject(objValue)) {
            newValue = copyArray(objValue);
          }
          else if (isBuff) {
            isCommon = false;
            newValue = cloneBuffer(srcValue, true);
          }
          else if (isTyped) {
            isCommon = false;
            newValue = cloneTypedArray(srcValue, true);
          }
          else {
            newValue = [];
          }
        }
        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
          newValue = objValue;
          if (isArguments(objValue)) {
            newValue = toPlainObject(objValue);
          }
          else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
            newValue = initCloneObject(srcValue);
          }
        }
        else {
          isCommon = false;
        }
      }
      if (isCommon) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, newValue);
        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
        stack['delete'](srcValue);
      }
      assignMergeValue(object, key, newValue);
    }

    /**
     * The base implementation of `_.nth` which doesn't coerce arguments.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {number} n The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     */
    function baseNth(array, n) {
      var length = array.length;
      if (!length) {
        return;
      }
      n += n < 0 ? length : 0;
      return isIndex(n, length) ? array[n] : undefined;
    }

    /**
     * The base implementation of `_.orderBy` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
     * @param {string[]} orders The sort orders of `iteratees`.
     * @returns {Array} Returns the new sorted array.
     */
    function baseOrderBy(collection, iteratees, orders) {
      var index = -1;
      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));

      var result = baseMap(collection, function(value, key, collection) {
        var criteria = arrayMap(iteratees, function(iteratee) {
          return iteratee(value);
        });
        return { 'criteria': criteria, 'index': ++index, 'value': value };
      });

      return baseSortBy(result, function(object, other) {
        return compareMultiple(object, other, orders);
      });
    }

    /**
     * The base implementation of `_.pick` without support for individual
     * property identifiers.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @returns {Object} Returns the new object.
     */
    function basePick(object, paths) {
      return basePickBy(object, paths, function(value, path) {
        return hasIn(object, path);
      });
    }

    /**
     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @param {Function} predicate The function invoked per property.
     * @returns {Object} Returns the new object.
     */
    function basePickBy(object, paths, predicate) {
      var index = -1,
          length = paths.length,
          result = {};

      while (++index < length) {
        var path = paths[index],
            value = baseGet(object, path);

        if (predicate(value, path)) {
          baseSet(result, castPath(path, object), value);
        }
      }
      return result;
    }

    /**
     * A specialized version of `baseProperty` which supports deep paths.
     *
     * @private
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     */
    function basePropertyDeep(path) {
      return function(object) {
        return baseGet(object, path);
      };
    }

    /**
     * The base implementation of `_.pullAllBy` without support for iteratee
     * shorthands.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     */
    function basePullAll(array, values, iteratee, comparator) {
      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
          index = -1,
          length = values.length,
          seen = array;

      if (array === values) {
        values = copyArray(values);
      }
      if (iteratee) {
        seen = arrayMap(array, baseUnary(iteratee));
      }
      while (++index < length) {
        var fromIndex = 0,
            value = values[index],
            computed = iteratee ? iteratee(value) : value;

        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
          if (seen !== array) {
            splice.call(seen, fromIndex, 1);
          }
          splice.call(array, fromIndex, 1);
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.pullAt` without support for individual
     * indexes or capturing the removed elements.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {number[]} indexes The indexes of elements to remove.
     * @returns {Array} Returns `array`.
     */
    function basePullAt(array, indexes) {
      var length = array ? indexes.length : 0,
          lastIndex = length - 1;

      while (length--) {
        var index = indexes[length];
        if (length == lastIndex || index !== previous) {
          var previous = index;
          if (isIndex(index)) {
            splice.call(array, index, 1);
          } else {
            baseUnset(array, index);
          }
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.random` without support for returning
     * floating-point numbers.
     *
     * @private
     * @param {number} lower The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the random number.
     */
    function baseRandom(lower, upper) {
      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
    }

    /**
     * The base implementation of `_.range` and `_.rangeRight` which doesn't
     * coerce arguments.
     *
     * @private
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @param {number} step The value to increment or decrement by.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the range of numbers.
     */
    function baseRange(start, end, step, fromRight) {
      var index = -1,
          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
          result = Array(length);

      while (length--) {
        result[fromRight ? length : ++index] = start;
        start += step;
      }
      return result;
    }

    /**
     * The base implementation of `_.repeat` which doesn't coerce arguments.
     *
     * @private
     * @param {string} string The string to repeat.
     * @param {number} n The number of times to repeat the string.
     * @returns {string} Returns the repeated string.
     */
    function baseRepeat(string, n) {
      var result = '';
      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
        return result;
      }
      // Leverage the exponentiation by squaring algorithm for a faster repeat.
      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
      do {
        if (n % 2) {
          result += string;
        }
        n = nativeFloor(n / 2);
        if (n) {
          string += string;
        }
      } while (n);

      return result;
    }

    /**
     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     */
    function baseRest(func, start) {
      return setToString(overRest(func, start, identity), func + '');
    }

    /**
     * The base implementation of `_.sample`.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     */
    function baseSample(collection) {
      return arraySample(values(collection));
    }

    /**
     * The base implementation of `_.sampleSize` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function baseSampleSize(collection, n) {
      var array = values(collection);
      return shuffleSelf(array, baseClamp(n, 0, array.length));
    }

    /**
     * The base implementation of `_.set`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseSet(object, path, value, customizer) {
      if (!isObject(object)) {
        return object;
      }
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          lastIndex = length - 1,
          nested = object;

      while (nested != null && ++index < length) {
        var key = toKey(path[index]),
            newValue = value;

        if (index != lastIndex) {
          var objValue = nested[key];
          newValue = customizer ? customizer(objValue, key, nested) : undefined;
          if (newValue === undefined) {
            newValue = isObject(objValue)
              ? objValue
              : (isIndex(path[index + 1]) ? [] : {});
          }
        }
        assignValue(nested, key, newValue);
        nested = nested[key];
      }
      return object;
    }

    /**
     * The base implementation of `setData` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var baseSetData = !metaMap ? identity : function(func, data) {
      metaMap.set(func, data);
      return func;
    };

    /**
     * The base implementation of `setToString` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var baseSetToString = !defineProperty ? identity : function(func, string) {
      return defineProperty(func, 'toString', {
        'configurable': true,
        'enumerable': false,
        'value': constant(string),
        'writable': true
      });
    };

    /**
     * The base implementation of `_.shuffle`.
     *
     * @private
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function baseShuffle(collection) {
      return shuffleSelf(values(collection));
    }

    /**
     * The base implementation of `_.slice` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseSlice(array, start, end) {
      var index = -1,
          length = array.length;

      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = end > length ? length : end;
      if (end < 0) {
        end += length;
      }
      length = start > end ? 0 : ((end - start) >>> 0);
      start >>>= 0;

      var result = Array(length);
      while (++index < length) {
        result[index] = array[index + start];
      }
      return result;
    }

    /**
     * The base implementation of `_.some` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     */
    function baseSome(collection, predicate) {
      var result;

      baseEach(collection, function(value, index, collection) {
        result = predicate(value, index, collection);
        return !result;
      });
      return !!result;
    }

    /**
     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
     * performs a binary search of `array` to determine the index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndex(array, value, retHighest) {
      var low = 0,
          high = array == null ? low : array.length;

      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
        while (low < high) {
          var mid = (low + high) >>> 1,
              computed = array[mid];

          if (computed !== null && !isSymbol(computed) &&
              (retHighest ? (computed <= value) : (computed < value))) {
            low = mid + 1;
          } else {
            high = mid;
          }
        }
        return high;
      }
      return baseSortedIndexBy(array, value, identity, retHighest);
    }

    /**
     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
     * which invokes `iteratee` for `value` and each element of `array` to compute
     * their sort ranking. The iteratee is invoked with one argument; (value).
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} iteratee The iteratee invoked per element.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndexBy(array, value, iteratee, retHighest) {
      value = iteratee(value);

      var low = 0,
          high = array == null ? 0 : array.length,
          valIsNaN = value !== value,
          valIsNull = value === null,
          valIsSymbol = isSymbol(value),
          valIsUndefined = value === undefined;

      while (low < high) {
        var mid = nativeFloor((low + high) / 2),
            computed = iteratee(array[mid]),
            othIsDefined = computed !== undefined,
            othIsNull = computed === null,
            othIsReflexive = computed === computed,
            othIsSymbol = isSymbol(computed);

        if (valIsNaN) {
          var setLow = retHighest || othIsReflexive;
        } else if (valIsUndefined) {
          setLow = othIsReflexive && (retHighest || othIsDefined);
        } else if (valIsNull) {
          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
        } else if (valIsSymbol) {
          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
        } else if (othIsNull || othIsSymbol) {
          setLow = false;
        } else {
          setLow = retHighest ? (computed <= value) : (computed < value);
        }
        if (setLow) {
          low = mid + 1;
        } else {
          high = mid;
        }
      }
      return nativeMin(high, MAX_ARRAY_INDEX);
    }

    /**
     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
     * support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseSortedUniq(array, iteratee) {
      var index = -1,
          length = array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        if (!index || !eq(computed, seen)) {
          var seen = computed;
          result[resIndex++] = value === 0 ? 0 : value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.toNumber` which doesn't ensure correct
     * conversions of binary, hexadecimal, or octal string values.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     */
    function baseToNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      return +value;
    }

    /**
     * The base implementation of `_.toString` which doesn't convert nullish
     * values to empty strings.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {string} Returns the string.
     */
    function baseToString(value) {
      // Exit early for strings to avoid a performance hit in some environments.
      if (typeof value == 'string') {
        return value;
      }
      if (isArray(value)) {
        // Recursively convert values (susceptible to call stack limits).
        return arrayMap(value, baseToString) + '';
      }
      if (isSymbol(value)) {
        return symbolToString ? symbolToString.call(value) : '';
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseUniq(array, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          length = array.length,
          isCommon = true,
          result = [],
          seen = result;

      if (comparator) {
        isCommon = false;
        includes = arrayIncludesWith;
      }
      else if (length >= LARGE_ARRAY_SIZE) {
        var set = iteratee ? null : createSet(array);
        if (set) {
          return setToArray(set);
        }
        isCommon = false;
        includes = cacheHas;
        seen = new SetCache;
      }
      else {
        seen = iteratee ? [] : result;
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var seenIndex = seen.length;
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer;
            }
          }
          if (iteratee) {
            seen.push(computed);
          }
          result.push(value);
        }
        else if (!includes(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.unset`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The property path to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     */
    function baseUnset(object, path) {
      path = castPath(path, object);
      object = parent(object, path);
      return object == null || delete object[toKey(last(path))];
    }

    /**
     * The base implementation of `_.update`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to update.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseUpdate(object, path, updater, customizer) {
      return baseSet(object, path, updater(baseGet(object, path)), customizer);
    }

    /**
     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
     * without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {Function} predicate The function invoked per iteration.
     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseWhile(array, predicate, isDrop, fromRight) {
      var length = array.length,
          index = fromRight ? length : -1;

      while ((fromRight ? index-- : ++index < length) &&
        predicate(array[index], index, array)) {}

      return isDrop
        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
    }

    /**
     * The base implementation of `wrapperValue` which returns the result of
     * performing a sequence of actions on the unwrapped `value`, where each
     * successive action is supplied the return value of the previous.
     *
     * @private
     * @param {*} value The unwrapped value.
     * @param {Array} actions Actions to perform to resolve the unwrapped value.
     * @returns {*} Returns the resolved value.
     */
    function baseWrapperValue(value, actions) {
      var result = value;
      if (result instanceof LazyWrapper) {
        result = result.value();
      }
      return arrayReduce(actions, function(result, action) {
        return action.func.apply(action.thisArg, arrayPush([result], action.args));
      }, result);
    }

    /**
     * The base implementation of methods like `_.xor`, without support for
     * iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of values.
     */
    function baseXor(arrays, iteratee, comparator) {
      var length = arrays.length;
      if (length < 2) {
        return length ? baseUniq(arrays[0]) : [];
      }
      var index = -1,
          result = Array(length);

      while (++index < length) {
        var array = arrays[index],
            othIndex = -1;

        while (++othIndex < length) {
          if (othIndex != index) {
            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
          }
        }
      }
      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
    }

    /**
     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
     *
     * @private
     * @param {Array} props The property identifiers.
     * @param {Array} values The property values.
     * @param {Function} assignFunc The function to assign values.
     * @returns {Object} Returns the new object.
     */
    function baseZipObject(props, values, assignFunc) {
      var index = -1,
          length = props.length,
          valsLength = values.length,
          result = {};

      while (++index < length) {
        var value = index < valsLength ? values[index] : undefined;
        assignFunc(result, props[index], value);
      }
      return result;
    }

    /**
     * Casts `value` to an empty array if it's not an array like object.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Array|Object} Returns the cast array-like object.
     */
    function castArrayLikeObject(value) {
      return isArrayLikeObject(value) ? value : [];
    }

    /**
     * Casts `value` to `identity` if it's not a function.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Function} Returns cast function.
     */
    function castFunction(value) {
      return typeof value == 'function' ? value : identity;
    }

    /**
     * Casts `value` to a path array if it's not one.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {Object} [object] The object to query keys on.
     * @returns {Array} Returns the cast property path array.
     */
    function castPath(value, object) {
      if (isArray(value)) {
        return value;
      }
      return isKey(value, object) ? [value] : stringToPath(toString(value));
    }

    /**
     * A `baseRest` alias which can be replaced with `identity` by module
     * replacement plugins.
     *
     * @private
     * @type {Function}
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    var castRest = baseRest;

    /**
     * Casts `array` to a slice if it's needed.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {number} start The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the cast slice.
     */
    function castSlice(array, start, end) {
      var length = array.length;
      end = end === undefined ? length : end;
      return (!start && end >= length) ? array : baseSlice(array, start, end);
    }

    /**
     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
     *
     * @private
     * @param {number|Object} id The timer id or timeout object of the timer to clear.
     */
    var clearTimeout = ctxClearTimeout || function(id) {
      return root.clearTimeout(id);
    };

    /**
     * Creates a clone of  `buffer`.
     *
     * @private
     * @param {Buffer} buffer The buffer to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Buffer} Returns the cloned buffer.
     */
    function cloneBuffer(buffer, isDeep) {
      if (isDeep) {
        return buffer.slice();
      }
      var length = buffer.length,
          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);

      buffer.copy(result);
      return result;
    }

    /**
     * Creates a clone of `arrayBuffer`.
     *
     * @private
     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
     * @returns {ArrayBuffer} Returns the cloned array buffer.
     */
    function cloneArrayBuffer(arrayBuffer) {
      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
      new Uint8Array(result).set(new Uint8Array(arrayBuffer));
      return result;
    }

    /**
     * Creates a clone of `dataView`.
     *
     * @private
     * @param {Object} dataView The data view to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned data view.
     */
    function cloneDataView(dataView, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
    }

    /**
     * Creates a clone of `regexp`.
     *
     * @private
     * @param {Object} regexp The regexp to clone.
     * @returns {Object} Returns the cloned regexp.
     */
    function cloneRegExp(regexp) {
      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
      result.lastIndex = regexp.lastIndex;
      return result;
    }

    /**
     * Creates a clone of the `symbol` object.
     *
     * @private
     * @param {Object} symbol The symbol object to clone.
     * @returns {Object} Returns the cloned symbol object.
     */
    function cloneSymbol(symbol) {
      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
    }

    /**
     * Creates a clone of `typedArray`.
     *
     * @private
     * @param {Object} typedArray The typed array to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned typed array.
     */
    function cloneTypedArray(typedArray, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
    }

    /**
     * Compares values to sort them in ascending order.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {number} Returns the sort order indicator for `value`.
     */
    function compareAscending(value, other) {
      if (value !== other) {
        var valIsDefined = value !== undefined,
            valIsNull = value === null,
            valIsReflexive = value === value,
            valIsSymbol = isSymbol(value);

        var othIsDefined = other !== undefined,
            othIsNull = other === null,
            othIsReflexive = other === other,
            othIsSymbol = isSymbol(other);

        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
            (valIsNull && othIsDefined && othIsReflexive) ||
            (!valIsDefined && othIsReflexive) ||
            !valIsReflexive) {
          return 1;
        }
        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
            (othIsNull && valIsDefined && valIsReflexive) ||
            (!othIsDefined && valIsReflexive) ||
            !othIsReflexive) {
          return -1;
        }
      }
      return 0;
    }

    /**
     * Used by `_.orderBy` to compare multiple properties of a value to another
     * and stable sort them.
     *
     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
     * specify an order of "desc" for descending or "asc" for ascending sort order
     * of corresponding values.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {boolean[]|string[]} orders The order to sort by for each property.
     * @returns {number} Returns the sort order indicator for `object`.
     */
    function compareMultiple(object, other, orders) {
      var index = -1,
          objCriteria = object.criteria,
          othCriteria = other.criteria,
          length = objCriteria.length,
          ordersLength = orders.length;

      while (++index < length) {
        var result = compareAscending(objCriteria[index], othCriteria[index]);
        if (result) {
          if (index >= ordersLength) {
            return result;
          }
          var order = orders[index];
          return result * (order == 'desc' ? -1 : 1);
        }
      }
      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
      // that causes it, under certain circumstances, to provide the same value for
      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
      // for more details.
      //
      // This also ensures a stable sort in V8 and other engines.
      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
      return object.index - other.index;
    }

    /**
     * Creates an array that is the composition of partially applied arguments,
     * placeholders, and provided arguments into a single array of arguments.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to prepend to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgs(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersLength = holders.length,
          leftIndex = -1,
          leftLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(leftLength + rangeLength),
          isUncurried = !isCurried;

      while (++leftIndex < leftLength) {
        result[leftIndex] = partials[leftIndex];
      }
      while (++argsIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[holders[argsIndex]] = args[argsIndex];
        }
      }
      while (rangeLength--) {
        result[leftIndex++] = args[argsIndex++];
      }
      return result;
    }

    /**
     * This function is like `composeArgs` except that the arguments composition
     * is tailored for `_.partialRight`.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to append to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgsRight(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersIndex = -1,
          holdersLength = holders.length,
          rightIndex = -1,
          rightLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(rangeLength + rightLength),
          isUncurried = !isCurried;

      while (++argsIndex < rangeLength) {
        result[argsIndex] = args[argsIndex];
      }
      var offset = argsIndex;
      while (++rightIndex < rightLength) {
        result[offset + rightIndex] = partials[rightIndex];
      }
      while (++holdersIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[offset + holders[holdersIndex]] = args[argsIndex++];
        }
      }
      return result;
    }

    /**
     * Copies the values of `source` to `array`.
     *
     * @private
     * @param {Array} source The array to copy values from.
     * @param {Array} [array=[]] The array to copy values to.
     * @returns {Array} Returns `array`.
     */
    function copyArray(source, array) {
      var index = -1,
          length = source.length;

      array || (array = Array(length));
      while (++index < length) {
        array[index] = source[index];
      }
      return array;
    }

    /**
     * Copies properties of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy properties from.
     * @param {Array} props The property identifiers to copy.
     * @param {Object} [object={}] The object to copy properties to.
     * @param {Function} [customizer] The function to customize copied values.
     * @returns {Object} Returns `object`.
     */
    function copyObject(source, props, object, customizer) {
      var isNew = !object;
      object || (object = {});

      var index = -1,
          length = props.length;

      while (++index < length) {
        var key = props[index];

        var newValue = customizer
          ? customizer(object[key], source[key], key, object, source)
          : undefined;

        if (newValue === undefined) {
          newValue = source[key];
        }
        if (isNew) {
          baseAssignValue(object, key, newValue);
        } else {
          assignValue(object, key, newValue);
        }
      }
      return object;
    }

    /**
     * Copies own symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbols(source, object) {
      return copyObject(source, getSymbols(source), object);
    }

    /**
     * Copies own and inherited symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbolsIn(source, object) {
      return copyObject(source, getSymbolsIn(source), object);
    }

    /**
     * Creates a function like `_.groupBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} [initializer] The accumulator object initializer.
     * @returns {Function} Returns the new aggregator function.
     */
    function createAggregator(setter, initializer) {
      return function(collection, iteratee) {
        var func = isArray(collection) ? arrayAggregator : baseAggregator,
            accumulator = initializer ? initializer() : {};

        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
      };
    }

    /**
     * Creates a function like `_.assign`.
     *
     * @private
     * @param {Function} assigner The function to assign values.
     * @returns {Function} Returns the new assigner function.
     */
    function createAssigner(assigner) {
      return baseRest(function(object, sources) {
        var index = -1,
            length = sources.length,
            customizer = length > 1 ? sources[length - 1] : undefined,
            guard = length > 2 ? sources[2] : undefined;

        customizer = (assigner.length > 3 && typeof customizer == 'function')
          ? (length--, customizer)
          : undefined;

        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
          customizer = length < 3 ? undefined : customizer;
          length = 1;
        }
        object = Object(object);
        while (++index < length) {
          var source = sources[index];
          if (source) {
            assigner(object, source, index, customizer);
          }
        }
        return object;
      });
    }

    /**
     * Creates a `baseEach` or `baseEachRight` function.
     *
     * @private
     * @param {Function} eachFunc The function to iterate over a collection.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseEach(eachFunc, fromRight) {
      return function(collection, iteratee) {
        if (collection == null) {
          return collection;
        }
        if (!isArrayLike(collection)) {
          return eachFunc(collection, iteratee);
        }
        var length = collection.length,
            index = fromRight ? length : -1,
            iterable = Object(collection);

        while ((fromRight ? index-- : ++index < length)) {
          if (iteratee(iterable[index], index, iterable) === false) {
            break;
          }
        }
        return collection;
      };
    }

    /**
     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseFor(fromRight) {
      return function(object, iteratee, keysFunc) {
        var index = -1,
            iterable = Object(object),
            props = keysFunc(object),
            length = props.length;

        while (length--) {
          var key = props[fromRight ? length : ++index];
          if (iteratee(iterable[key], key, iterable) === false) {
            break;
          }
        }
        return object;
      };
    }

    /**
     * Creates a function that wraps `func` to invoke it with the optional `this`
     * binding of `thisArg`.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createBind(func, bitmask, thisArg) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return fn.apply(isBind ? thisArg : this, arguments);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.lowerFirst`.
     *
     * @private
     * @param {string} methodName The name of the `String` case method to use.
     * @returns {Function} Returns the new case function.
     */
    function createCaseFirst(methodName) {
      return function(string) {
        string = toString(string);

        var strSymbols = hasUnicode(string)
          ? stringToArray(string)
          : undefined;

        var chr = strSymbols
          ? strSymbols[0]
          : string.charAt(0);

        var trailing = strSymbols
          ? castSlice(strSymbols, 1).join('')
          : string.slice(1);

        return chr[methodName]() + trailing;
      };
    }

    /**
     * Creates a function like `_.camelCase`.
     *
     * @private
     * @param {Function} callback The function to combine each word.
     * @returns {Function} Returns the new compounder function.
     */
    function createCompounder(callback) {
      return function(string) {
        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
      };
    }

    /**
     * Creates a function that produces an instance of `Ctor` regardless of
     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
     *
     * @private
     * @param {Function} Ctor The constructor to wrap.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCtor(Ctor) {
      return function() {
        // Use a `switch` statement to work with class constructors. See
        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
        // for more details.
        var args = arguments;
        switch (args.length) {
          case 0: return new Ctor;
          case 1: return new Ctor(args[0]);
          case 2: return new Ctor(args[0], args[1]);
          case 3: return new Ctor(args[0], args[1], args[2]);
          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
        }
        var thisBinding = baseCreate(Ctor.prototype),
            result = Ctor.apply(thisBinding, args);

        // Mimic the constructor's `return` behavior.
        // See https://es5.github.io/#x13.2.2 for more details.
        return isObject(result) ? result : thisBinding;
      };
    }

    /**
     * Creates a function that wraps `func` to enable currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {number} arity The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCurry(func, bitmask, arity) {
      var Ctor = createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length,
            placeholder = getHolder(wrapper);

        while (index--) {
          args[index] = arguments[index];
        }
        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
          ? []
          : replaceHolders(args, placeholder);

        length -= holders.length;
        if (length < arity) {
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, undefined,
            args, holders, undefined, undefined, arity - length);
        }
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return apply(fn, this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.find` or `_.findLast` function.
     *
     * @private
     * @param {Function} findIndexFunc The function to find the collection index.
     * @returns {Function} Returns the new find function.
     */
    function createFind(findIndexFunc) {
      return function(collection, predicate, fromIndex) {
        var iterable = Object(collection);
        if (!isArrayLike(collection)) {
          var iteratee = getIteratee(predicate, 3);
          collection = keys(collection);
          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
        }
        var index = findIndexFunc(collection, predicate, fromIndex);
        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
      };
    }

    /**
     * Creates a `_.flow` or `_.flowRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new flow function.
     */
    function createFlow(fromRight) {
      return flatRest(function(funcs) {
        var length = funcs.length,
            index = length,
            prereq = LodashWrapper.prototype.thru;

        if (fromRight) {
          funcs.reverse();
        }
        while (index--) {
          var func = funcs[index];
          if (typeof func != 'function') {
            throw new TypeError(FUNC_ERROR_TEXT);
          }
          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
            var wrapper = new LodashWrapper([], true);
          }
        }
        index = wrapper ? index : length;
        while (++index < length) {
          func = funcs[index];

          var funcName = getFuncName(func),
              data = funcName == 'wrapper' ? getData(func) : undefined;

          if (data && isLaziable(data[0]) &&
                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
                !data[4].length && data[9] == 1
              ) {
            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
          } else {
            wrapper = (func.length == 1 && isLaziable(func))
              ? wrapper[funcName]()
              : wrapper.thru(func);
          }
        }
        return function() {
          var args = arguments,
              value = args[0];

          if (wrapper && args.length == 1 && isArray(value)) {
            return wrapper.plant(value).value();
          }
          var index = 0,
              result = length ? funcs[index].apply(this, args) : value;

          while (++index < length) {
            result = funcs[index].call(this, result);
          }
          return result;
        };
      });
    }

    /**
     * Creates a function that wraps `func` to invoke it with optional `this`
     * binding of `thisArg`, partial application, and currying.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [partialsRight] The arguments to append to those provided
     *  to the new function.
     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
      var isAry = bitmask & WRAP_ARY_FLAG,
          isBind = bitmask & WRAP_BIND_FLAG,
          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
          isFlip = bitmask & WRAP_FLIP_FLAG,
          Ctor = isBindKey ? undefined : createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length;

        while (index--) {
          args[index] = arguments[index];
        }
        if (isCurried) {
          var placeholder = getHolder(wrapper),
              holdersCount = countHolders(args, placeholder);
        }
        if (partials) {
          args = composeArgs(args, partials, holders, isCurried);
        }
        if (partialsRight) {
          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
        }
        length -= holdersCount;
        if (isCurried && length < arity) {
          var newHolders = replaceHolders(args, placeholder);
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
            args, newHolders, argPos, ary, arity - length
          );
        }
        var thisBinding = isBind ? thisArg : this,
            fn = isBindKey ? thisBinding[func] : func;

        length = args.length;
        if (argPos) {
          args = reorder(args, argPos);
        } else if (isFlip && length > 1) {
          args.reverse();
        }
        if (isAry && ary < length) {
          args.length = ary;
        }
        if (this && this !== root && this instanceof wrapper) {
          fn = Ctor || createCtor(fn);
        }
        return fn.apply(thisBinding, args);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.invertBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} toIteratee The function to resolve iteratees.
     * @returns {Function} Returns the new inverter function.
     */
    function createInverter(setter, toIteratee) {
      return function(object, iteratee) {
        return baseInverter(object, setter, toIteratee(iteratee), {});
      };
    }

    /**
     * Creates a function that performs a mathematical operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @param {number} [defaultValue] The value used for `undefined` arguments.
     * @returns {Function} Returns the new mathematical operation function.
     */
    function createMathOperation(operator, defaultValue) {
      return function(value, other) {
        var result;
        if (value === undefined && other === undefined) {
          return defaultValue;
        }
        if (value !== undefined) {
          result = value;
        }
        if (other !== undefined) {
          if (result === undefined) {
            return other;
          }
          if (typeof value == 'string' || typeof other == 'string') {
            value = baseToString(value);
            other = baseToString(other);
          } else {
            value = baseToNumber(value);
            other = baseToNumber(other);
          }
          result = operator(value, other);
        }
        return result;
      };
    }

    /**
     * Creates a function like `_.over`.
     *
     * @private
     * @param {Function} arrayFunc The function to iterate over iteratees.
     * @returns {Function} Returns the new over function.
     */
    function createOver(arrayFunc) {
      return flatRest(function(iteratees) {
        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
        return baseRest(function(args) {
          var thisArg = this;
          return arrayFunc(iteratees, function(iteratee) {
            return apply(iteratee, thisArg, args);
          });
        });
      });
    }

    /**
     * Creates the padding for `string` based on `length`. The `chars` string
     * is truncated if the number of characters exceeds `length`.
     *
     * @private
     * @param {number} length The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padding for `string`.
     */
    function createPadding(length, chars) {
      chars = chars === undefined ? ' ' : baseToString(chars);

      var charsLength = chars.length;
      if (charsLength < 2) {
        return charsLength ? baseRepeat(chars, length) : chars;
      }
      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
      return hasUnicode(chars)
        ? castSlice(stringToArray(result), 0, length).join('')
        : result.slice(0, length);
    }

    /**
     * Creates a function that wraps `func` to invoke it with the `this` binding
     * of `thisArg` and `partials` prepended to the arguments it receives.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {Array} partials The arguments to prepend to those provided to
     *  the new function.
     * @returns {Function} Returns the new wrapped function.
     */
    function createPartial(func, bitmask, thisArg, partials) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var argsIndex = -1,
            argsLength = arguments.length,
            leftIndex = -1,
            leftLength = partials.length,
            args = Array(leftLength + argsLength),
            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;

        while (++leftIndex < leftLength) {
          args[leftIndex] = partials[leftIndex];
        }
        while (argsLength--) {
          args[leftIndex++] = arguments[++argsIndex];
        }
        return apply(fn, isBind ? thisArg : this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.range` or `_.rangeRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new range function.
     */
    function createRange(fromRight) {
      return function(start, end, step) {
        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
          end = step = undefined;
        }
        // Ensure the sign of `-0` is preserved.
        start = toFinite(start);
        if (end === undefined) {
          end = start;
          start = 0;
        } else {
          end = toFinite(end);
        }
        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
        return baseRange(start, end, step, fromRight);
      };
    }

    /**
     * Creates a function that performs a relational operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @returns {Function} Returns the new relational operation function.
     */
    function createRelationalOperation(operator) {
      return function(value, other) {
        if (!(typeof value == 'string' && typeof other == 'string')) {
          value = toNumber(value);
          other = toNumber(other);
        }
        return operator(value, other);
      };
    }

    /**
     * Creates a function that wraps `func` to continue currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {Function} wrapFunc The function to create the `func` wrapper.
     * @param {*} placeholder The placeholder value.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
      var isCurry = bitmask & WRAP_CURRY_FLAG,
          newHolders = isCurry ? holders : undefined,
          newHoldersRight = isCurry ? undefined : holders,
          newPartials = isCurry ? partials : undefined,
          newPartialsRight = isCurry ? undefined : partials;

      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);

      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
      }
      var newData = [
        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
        newHoldersRight, argPos, ary, arity
      ];

      var result = wrapFunc.apply(undefined, newData);
      if (isLaziable(func)) {
        setData(result, newData);
      }
      result.placeholder = placeholder;
      return setWrapToString(result, func, bitmask);
    }

    /**
     * Creates a function like `_.round`.
     *
     * @private
     * @param {string} methodName The name of the `Math` method to use when rounding.
     * @returns {Function} Returns the new round function.
     */
    function createRound(methodName) {
      var func = Math[methodName];
      return function(number, precision) {
        number = toNumber(number);
        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
        if (precision) {
          // Shift with exponential notation to avoid floating-point issues.
          // See [MDN](https://mdn.io/round#Examples) for more details.
          var pair = (toString(number) + 'e').split('e'),
              value = func(pair[0] + 'e' + (+pair[1] + precision));

          pair = (toString(value) + 'e').split('e');
          return +(pair[0] + 'e' + (+pair[1] - precision));
        }
        return func(number);
      };
    }

    /**
     * Creates a set object of `values`.
     *
     * @private
     * @param {Array} values The values to add to the set.
     * @returns {Object} Returns the new set.
     */
    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
      return new Set(values);
    };

    /**
     * Creates a `_.toPairs` or `_.toPairsIn` function.
     *
     * @private
     * @param {Function} keysFunc The function to get the keys of a given object.
     * @returns {Function} Returns the new pairs function.
     */
    function createToPairs(keysFunc) {
      return function(object) {
        var tag = getTag(object);
        if (tag == mapTag) {
          return mapToArray(object);
        }
        if (tag == setTag) {
          return setToPairs(object);
        }
        return baseToPairs(object, keysFunc(object));
      };
    }

    /**
     * Creates a function that either curries or invokes `func` with optional
     * `this` binding and partially applied arguments.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags.
     *    1 - `_.bind`
     *    2 - `_.bindKey`
     *    4 - `_.curry` or `_.curryRight` of a bound function
     *    8 - `_.curry`
     *   16 - `_.curryRight`
     *   32 - `_.partial`
     *   64 - `_.partialRight`
     *  128 - `_.rearg`
     *  256 - `_.ary`
     *  512 - `_.flip`
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to be partially applied.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
      if (!isBindKey && typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var length = partials ? partials.length : 0;
      if (!length) {
        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
        partials = holders = undefined;
      }
      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
      arity = arity === undefined ? arity : toInteger(arity);
      length -= holders ? holders.length : 0;

      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
        var partialsRight = partials,
            holdersRight = holders;

        partials = holders = undefined;
      }
      var data = isBindKey ? undefined : getData(func);

      var newData = [
        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
        argPos, ary, arity
      ];

      if (data) {
        mergeData(newData, data);
      }
      func = newData[0];
      bitmask = newData[1];
      thisArg = newData[2];
      partials = newData[3];
      holders = newData[4];
      arity = newData[9] = newData[9] === undefined
        ? (isBindKey ? 0 : func.length)
        : nativeMax(newData[9] - length, 0);

      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
      }
      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
        var result = createBind(func, bitmask, thisArg);
      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
        result = createCurry(func, bitmask, arity);
      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
        result = createPartial(func, bitmask, thisArg, partials);
      } else {
        result = createHybrid.apply(undefined, newData);
      }
      var setter = data ? baseSetData : setData;
      return setWrapToString(setter(result, newData), func, bitmask);
    }

    /**
     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
     * of source objects to the destination object for all destination properties
     * that resolve to `undefined`.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to assign.
     * @param {Object} object The parent object of `objValue`.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsAssignIn(objValue, srcValue, key, object) {
      if (objValue === undefined ||
          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
        return srcValue;
      }
      return objValue;
    }

    /**
     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
     * objects into destination objects that are passed thru.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to merge.
     * @param {Object} object The parent object of `objValue`.
     * @param {Object} source The parent object of `srcValue`.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
      if (isObject(objValue) && isObject(srcValue)) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, objValue);
        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
        stack['delete'](srcValue);
      }
      return objValue;
    }

    /**
     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
     * objects.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {string} key The key of the property to inspect.
     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
     */
    function customOmitClone(value) {
      return isPlainObject(value) ? undefined : value;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for arrays with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Array} array The array to compare.
     * @param {Array} other The other array to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `array` and `other` objects.
     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
     */
    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          arrLength = array.length,
          othLength = other.length;

      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
        return false;
      }
      // Assume cyclic values are equal.
      var stacked = stack.get(array);
      if (stacked && stack.get(other)) {
        return stacked == other;
      }
      var index = -1,
          result = true,
          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;

      stack.set(array, other);
      stack.set(other, array);

      // Ignore non-index properties.
      while (++index < arrLength) {
        var arrValue = array[index],
            othValue = other[index];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, arrValue, index, other, array, stack)
            : customizer(arrValue, othValue, index, array, other, stack);
        }
        if (compared !== undefined) {
          if (compared) {
            continue;
          }
          result = false;
          break;
        }
        // Recursively compare arrays (susceptible to call stack limits).
        if (seen) {
          if (!arraySome(other, function(othValue, othIndex) {
                if (!cacheHas(seen, othIndex) &&
                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
                  return seen.push(othIndex);
                }
              })) {
            result = false;
            break;
          }
        } else if (!(
              arrValue === othValue ||
                equalFunc(arrValue, othValue, bitmask, customizer, stack)
            )) {
          result = false;
          break;
        }
      }
      stack['delete'](array);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for comparing objects of
     * the same `toStringTag`.
     *
     * **Note:** This function only supports comparing values with tags of
     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {string} tag The `toStringTag` of the objects to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
      switch (tag) {
        case dataViewTag:
          if ((object.byteLength != other.byteLength) ||
              (object.byteOffset != other.byteOffset)) {
            return false;
          }
          object = object.buffer;
          other = other.buffer;

        case arrayBufferTag:
          if ((object.byteLength != other.byteLength) ||
              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
            return false;
          }
          return true;

        case boolTag:
        case dateTag:
        case numberTag:
          // Coerce booleans to `1` or `0` and dates to milliseconds.
          // Invalid dates are coerced to `NaN`.
          return eq(+object, +other);

        case errorTag:
          return object.name == other.name && object.message == other.message;

        case regexpTag:
        case stringTag:
          // Coerce regexes to strings and treat strings, primitives and objects,
          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
          // for more details.
          return object == (other + '');

        case mapTag:
          var convert = mapToArray;

        case setTag:
          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
          convert || (convert = setToArray);

          if (object.size != other.size && !isPartial) {
            return false;
          }
          // Assume cyclic values are equal.
          var stacked = stack.get(object);
          if (stacked) {
            return stacked == other;
          }
          bitmask |= COMPARE_UNORDERED_FLAG;

          // Recursively compare objects (susceptible to call stack limits).
          stack.set(object, other);
          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
          stack['delete'](object);
          return result;

        case symbolTag:
          if (symbolValueOf) {
            return symbolValueOf.call(object) == symbolValueOf.call(other);
          }
      }
      return false;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for objects with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          objProps = getAllKeys(object),
          objLength = objProps.length,
          othProps = getAllKeys(other),
          othLength = othProps.length;

      if (objLength != othLength && !isPartial) {
        return false;
      }
      var index = objLength;
      while (index--) {
        var key = objProps[index];
        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
          return false;
        }
      }
      // Assume cyclic values are equal.
      var stacked = stack.get(object);
      if (stacked && stack.get(other)) {
        return stacked == other;
      }
      var result = true;
      stack.set(object, other);
      stack.set(other, object);

      var skipCtor = isPartial;
      while (++index < objLength) {
        key = objProps[index];
        var objValue = object[key],
            othValue = other[key];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, objValue, key, other, object, stack)
            : customizer(objValue, othValue, key, object, other, stack);
        }
        // Recursively compare objects (susceptible to call stack limits).
        if (!(compared === undefined
              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
              : compared
            )) {
          result = false;
          break;
        }
        skipCtor || (skipCtor = key == 'constructor');
      }
      if (result && !skipCtor) {
        var objCtor = object.constructor,
            othCtor = other.constructor;

        // Non `Object` object instances with different constructors are not equal.
        if (objCtor != othCtor &&
            ('constructor' in object && 'constructor' in other) &&
            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
          result = false;
        }
      }
      stack['delete'](object);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseRest` which flattens the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    function flatRest(func) {
      return setToString(overRest(func, undefined, flatten), func + '');
    }

    /**
     * Creates an array of own enumerable property names and symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeys(object) {
      return baseGetAllKeys(object, keys, getSymbols);
    }

    /**
     * Creates an array of own and inherited enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeysIn(object) {
      return baseGetAllKeys(object, keysIn, getSymbolsIn);
    }

    /**
     * Gets metadata for `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {*} Returns the metadata for `func`.
     */
    var getData = !metaMap ? noop : function(func) {
      return metaMap.get(func);
    };

    /**
     * Gets the name of `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {string} Returns the function name.
     */
    function getFuncName(func) {
      var result = (func.name + ''),
          array = realNames[result],
          length = hasOwnProperty.call(realNames, result) ? array.length : 0;

      while (length--) {
        var data = array[length],
            otherFunc = data.func;
        if (otherFunc == null || otherFunc == func) {
          return data.name;
        }
      }
      return result;
    }

    /**
     * Gets the argument placeholder value for `func`.
     *
     * @private
     * @param {Function} func The function to inspect.
     * @returns {*} Returns the placeholder value.
     */
    function getHolder(func) {
      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
      return object.placeholder;
    }

    /**
     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
     * this function returns the custom method, otherwise it returns `baseIteratee`.
     * If arguments are provided, the chosen function is invoked with them and
     * its result is returned.
     *
     * @private
     * @param {*} [value] The value to convert to an iteratee.
     * @param {number} [arity] The arity of the created iteratee.
     * @returns {Function} Returns the chosen function or its result.
     */
    function getIteratee() {
      var result = lodash.iteratee || iteratee;
      result = result === iteratee ? baseIteratee : result;
      return arguments.length ? result(arguments[0], arguments[1]) : result;
    }

    /**
     * Gets the data for `map`.
     *
     * @private
     * @param {Object} map The map to query.
     * @param {string} key The reference key.
     * @returns {*} Returns the map data.
     */
    function getMapData(map, key) {
      var data = map.__data__;
      return isKeyable(key)
        ? data[typeof key == 'string' ? 'string' : 'hash']
        : data.map;
    }

    /**
     * Gets the property names, values, and compare flags of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the match data of `object`.
     */
    function getMatchData(object) {
      var result = keys(object),
          length = result.length;

      while (length--) {
        var key = result[length],
            value = object[key];

        result[length] = [key, value, isStrictComparable(value)];
      }
      return result;
    }

    /**
     * Gets the native function at `key` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the method to get.
     * @returns {*} Returns the function if it's native, else `undefined`.
     */
    function getNative(object, key) {
      var value = getValue(object, key);
      return baseIsNative(value) ? value : undefined;
    }

    /**
     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the raw `toStringTag`.
     */
    function getRawTag(value) {
      var isOwn = hasOwnProperty.call(value, symToStringTag),
          tag = value[symToStringTag];

      try {
        value[symToStringTag] = undefined;
        var unmasked = true;
      } catch (e) {}

      var result = nativeObjectToString.call(value);
      if (unmasked) {
        if (isOwn) {
          value[symToStringTag] = tag;
        } else {
          delete value[symToStringTag];
        }
      }
      return result;
    }

    /**
     * Creates an array of the own enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
      if (object == null) {
        return [];
      }
      object = Object(object);
      return arrayFilter(nativeGetSymbols(object), function(symbol) {
        return propertyIsEnumerable.call(object, symbol);
      });
    };

    /**
     * Creates an array of the own and inherited enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
      var result = [];
      while (object) {
        arrayPush(result, getSymbols(object));
        object = getPrototype(object);
      }
      return result;
    };

    /**
     * Gets the `toStringTag` of `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    var getTag = baseGetTag;

    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
        (Map && getTag(new Map) != mapTag) ||
        (Promise && getTag(Promise.resolve()) != promiseTag) ||
        (Set && getTag(new Set) != setTag) ||
        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
      getTag = function(value) {
        var result = baseGetTag(value),
            Ctor = result == objectTag ? value.constructor : undefined,
            ctorString = Ctor ? toSource(Ctor) : '';

        if (ctorString) {
          switch (ctorString) {
            case dataViewCtorString: return dataViewTag;
            case mapCtorString: return mapTag;
            case promiseCtorString: return promiseTag;
            case setCtorString: return setTag;
            case weakMapCtorString: return weakMapTag;
          }
        }
        return result;
      };
    }

    /**
     * Gets the view, applying any `transforms` to the `start` and `end` positions.
     *
     * @private
     * @param {number} start The start of the view.
     * @param {number} end The end of the view.
     * @param {Array} transforms The transformations to apply to the view.
     * @returns {Object} Returns an object containing the `start` and `end`
     *  positions of the view.
     */
    function getView(start, end, transforms) {
      var index = -1,
          length = transforms.length;

      while (++index < length) {
        var data = transforms[index],
            size = data.size;

        switch (data.type) {
          case 'drop':      start += size; break;
          case 'dropRight': end -= size; break;
          case 'take':      end = nativeMin(end, start + size); break;
          case 'takeRight': start = nativeMax(start, end - size); break;
        }
      }
      return { 'start': start, 'end': end };
    }

    /**
     * Extracts wrapper details from the `source` body comment.
     *
     * @private
     * @param {string} source The source to inspect.
     * @returns {Array} Returns the wrapper details.
     */
    function getWrapDetails(source) {
      var match = source.match(reWrapDetails);
      return match ? match[1].split(reSplitDetails) : [];
    }

    /**
     * Checks if `path` exists on `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @param {Function} hasFunc The function to check properties.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     */
    function hasPath(object, path, hasFunc) {
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          result = false;

      while (++index < length) {
        var key = toKey(path[index]);
        if (!(result = object != null && hasFunc(object, key))) {
          break;
        }
        object = object[key];
      }
      if (result || ++index != length) {
        return result;
      }
      length = object == null ? 0 : object.length;
      return !!length && isLength(length) && isIndex(key, length) &&
        (isArray(object) || isArguments(object));
    }

    /**
     * Initializes an array clone.
     *
     * @private
     * @param {Array} array The array to clone.
     * @returns {Array} Returns the initialized clone.
     */
    function initCloneArray(array) {
      var length = array.length,
          result = new array.constructor(length);

      // Add properties assigned by `RegExp#exec`.
      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
        result.index = array.index;
        result.input = array.input;
      }
      return result;
    }

    /**
     * Initializes an object clone.
     *
     * @private
     * @param {Object} object The object to clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneObject(object) {
      return (typeof object.constructor == 'function' && !isPrototype(object))
        ? baseCreate(getPrototype(object))
        : {};
    }

    /**
     * Initializes an object clone based on its `toStringTag`.
     *
     * **Note:** This function only supports cloning values with tags of
     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
     *
     * @private
     * @param {Object} object The object to clone.
     * @param {string} tag The `toStringTag` of the object to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneByTag(object, tag, isDeep) {
      var Ctor = object.constructor;
      switch (tag) {
        case arrayBufferTag:
          return cloneArrayBuffer(object);

        case boolTag:
        case dateTag:
          return new Ctor(+object);

        case dataViewTag:
          return cloneDataView(object, isDeep);

        case float32Tag: case float64Tag:
        case int8Tag: case int16Tag: case int32Tag:
        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
          return cloneTypedArray(object, isDeep);

        case mapTag:
          return new Ctor;

        case numberTag:
        case stringTag:
          return new Ctor(object);

        case regexpTag:
          return cloneRegExp(object);

        case setTag:
          return new Ctor;

        case symbolTag:
          return cloneSymbol(object);
      }
    }

    /**
     * Inserts wrapper `details` in a comment at the top of the `source` body.
     *
     * @private
     * @param {string} source The source to modify.
     * @returns {Array} details The details to insert.
     * @returns {string} Returns the modified source.
     */
    function insertWrapDetails(source, details) {
      var length = details.length;
      if (!length) {
        return source;
      }
      var lastIndex = length - 1;
      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
      details = details.join(length > 2 ? ', ' : ' ');
      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
    }

    /**
     * Checks if `value` is a flattenable `arguments` object or array.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
     */
    function isFlattenable(value) {
      return isArray(value) || isArguments(value) ||
        !!(spreadableSymbol && value && value[spreadableSymbol]);
    }

    /**
     * Checks if `value` is a valid array-like index.
     *
     * @private
     * @param {*} value The value to check.
     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
     */
    function isIndex(value, length) {
      var type = typeof value;
      length = length == null ? MAX_SAFE_INTEGER : length;

      return !!length &&
        (type == 'number' ||
          (type != 'symbol' && reIsUint.test(value))) &&
            (value > -1 && value % 1 == 0 && value < length);
    }

    /**
     * Checks if the given arguments are from an iteratee call.
     *
     * @private
     * @param {*} value The potential iteratee value argument.
     * @param {*} index The potential iteratee index or key argument.
     * @param {*} object The potential iteratee object argument.
     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
     *  else `false`.
     */
    function isIterateeCall(value, index, object) {
      if (!isObject(object)) {
        return false;
      }
      var type = typeof index;
      if (type == 'number'
            ? (isArrayLike(object) && isIndex(index, object.length))
            : (type == 'string' && index in object)
          ) {
        return eq(object[index], value);
      }
      return false;
    }

    /**
     * Checks if `value` is a property name and not a property path.
     *
     * @private
     * @param {*} value The value to check.
     * @param {Object} [object] The object to query keys on.
     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
     */
    function isKey(value, object) {
      if (isArray(value)) {
        return false;
      }
      var type = typeof value;
      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
          value == null || isSymbol(value)) {
        return true;
      }
      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
        (object != null && value in Object(object));
    }

    /**
     * Checks if `value` is suitable for use as unique object key.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
     */
    function isKeyable(value) {
      var type = typeof value;
      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
        ? (value !== '__proto__')
        : (value === null);
    }

    /**
     * Checks if `func` has a lazy counterpart.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
     *  else `false`.
     */
    function isLaziable(func) {
      var funcName = getFuncName(func),
          other = lodash[funcName];

      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
        return false;
      }
      if (func === other) {
        return true;
      }
      var data = getData(other);
      return !!data && func === data[0];
    }

    /**
     * Checks if `func` has its source masked.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
     */
    function isMasked(func) {
      return !!maskSrcKey && (maskSrcKey in func);
    }

    /**
     * Checks if `func` is capable of being masked.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
     */
    var isMaskable = coreJsData ? isFunction : stubFalse;

    /**
     * Checks if `value` is likely a prototype object.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
     */
    function isPrototype(value) {
      var Ctor = value && value.constructor,
          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;

      return value === proto;
    }

    /**
     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` if suitable for strict
     *  equality comparisons, else `false`.
     */
    function isStrictComparable(value) {
      return value === value && !isObject(value);
    }

    /**
     * A specialized version of `matchesProperty` for source values suitable
     * for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {string} key The key of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function matchesStrictComparable(key, srcValue) {
      return function(object) {
        if (object == null) {
          return false;
        }
        return object[key] === srcValue &&
          (srcValue !== undefined || (key in Object(object)));
      };
    }

    /**
     * A specialized version of `_.memoize` which clears the memoized function's
     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
     *
     * @private
     * @param {Function} func The function to have its output memoized.
     * @returns {Function} Returns the new memoized function.
     */
    function memoizeCapped(func) {
      var result = memoize(func, function(key) {
        if (cache.size === MAX_MEMOIZE_SIZE) {
          cache.clear();
        }
        return key;
      });

      var cache = result.cache;
      return result;
    }

    /**
     * Merges the function metadata of `source` into `data`.
     *
     * Merging metadata reduces the number of wrappers used to invoke a function.
     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
     * may be applied regardless of execution order. Methods like `_.ary` and
     * `_.rearg` modify function arguments, making the order in which they are
     * executed important, preventing the merging of metadata. However, we make
     * an exception for a safe combined case where curried functions have `_.ary`
     * and or `_.rearg` applied.
     *
     * @private
     * @param {Array} data The destination metadata.
     * @param {Array} source The source metadata.
     * @returns {Array} Returns `data`.
     */
    function mergeData(data, source) {
      var bitmask = data[1],
          srcBitmask = source[1],
          newBitmask = bitmask | srcBitmask,
          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);

      var isCombo =
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));

      // Exit early if metadata can't be merged.
      if (!(isCommon || isCombo)) {
        return data;
      }
      // Use source `thisArg` if available.
      if (srcBitmask & WRAP_BIND_FLAG) {
        data[2] = source[2];
        // Set when currying a bound function.
        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
      }
      // Compose partial arguments.
      var value = source[3];
      if (value) {
        var partials = data[3];
        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
      }
      // Compose partial right arguments.
      value = source[5];
      if (value) {
        partials = data[5];
        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
      }
      // Use source `argPos` if available.
      value = source[7];
      if (value) {
        data[7] = value;
      }
      // Use source `ary` if it's smaller.
      if (srcBitmask & WRAP_ARY_FLAG) {
        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
      }
      // Use source `arity` if one is not provided.
      if (data[9] == null) {
        data[9] = source[9];
      }
      // Use source `func` and merge bitmasks.
      data[0] = source[0];
      data[1] = newBitmask;

      return data;
    }

    /**
     * This function is like
     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * except that it includes inherited enumerable properties.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function nativeKeysIn(object) {
      var result = [];
      if (object != null) {
        for (var key in Object(object)) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * Converts `value` to a string using `Object.prototype.toString`.
     *
     * @private
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     */
    function objectToString(value) {
      return nativeObjectToString.call(value);
    }

    /**
     * A specialized version of `baseRest` which transforms the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @param {Function} transform The rest array transform.
     * @returns {Function} Returns the new function.
     */
    function overRest(func, start, transform) {
      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
      return function() {
        var args = arguments,
            index = -1,
            length = nativeMax(args.length - start, 0),
            array = Array(length);

        while (++index < length) {
          array[index] = args[start + index];
        }
        index = -1;
        var otherArgs = Array(start + 1);
        while (++index < start) {
          otherArgs[index] = args[index];
        }
        otherArgs[start] = transform(array);
        return apply(func, this, otherArgs);
      };
    }

    /**
     * Gets the parent value at `path` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array} path The path to get the parent value of.
     * @returns {*} Returns the parent value.
     */
    function parent(object, path) {
      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
    }

    /**
     * Reorder `array` according to the specified indexes where the element at
     * the first index is assigned as the first element, the element at
     * the second index is assigned as the second element, and so on.
     *
     * @private
     * @param {Array} array The array to reorder.
     * @param {Array} indexes The arranged array indexes.
     * @returns {Array} Returns `array`.
     */
    function reorder(array, indexes) {
      var arrLength = array.length,
          length = nativeMin(indexes.length, arrLength),
          oldArray = copyArray(array);

      while (length--) {
        var index = indexes[length];
        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
      }
      return array;
    }

    /**
     * Sets metadata for `func`.
     *
     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
     * period of time, it will trip its breaker and transition to an identity
     * function to avoid garbage collection pauses in V8. See
     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
     * for more details.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var setData = shortOut(baseSetData);

    /**
     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    var setTimeout = ctxSetTimeout || function(func, wait) {
      return root.setTimeout(func, wait);
    };

    /**
     * Sets the `toString` method of `func` to return `string`.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var setToString = shortOut(baseSetToString);

    /**
     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
     * with wrapper details in a comment at the top of the source body.
     *
     * @private
     * @param {Function} wrapper The function to modify.
     * @param {Function} reference The reference function.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Function} Returns `wrapper`.
     */
    function setWrapToString(wrapper, reference, bitmask) {
      var source = (reference + '');
      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
    }

    /**
     * Creates a function that'll short out and invoke `identity` instead
     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
     * milliseconds.
     *
     * @private
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new shortable function.
     */
    function shortOut(func) {
      var count = 0,
          lastCalled = 0;

      return function() {
        var stamp = nativeNow(),
            remaining = HOT_SPAN - (stamp - lastCalled);

        lastCalled = stamp;
        if (remaining > 0) {
          if (++count >= HOT_COUNT) {
            return arguments[0];
          }
        } else {
          count = 0;
        }
        return func.apply(undefined, arguments);
      };
    }

    /**
     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @param {number} [size=array.length] The size of `array`.
     * @returns {Array} Returns `array`.
     */
    function shuffleSelf(array, size) {
      var index = -1,
          length = array.length,
          lastIndex = length - 1;

      size = size === undefined ? length : size;
      while (++index < size) {
        var rand = baseRandom(index, lastIndex),
            value = array[rand];

        array[rand] = array[index];
        array[index] = value;
      }
      array.length = size;
      return array;
    }

    /**
     * Converts `string` to a property path array.
     *
     * @private
     * @param {string} string The string to convert.
     * @returns {Array} Returns the property path array.
     */
    var stringToPath = memoizeCapped(function(string) {
      var result = [];
      if (string.charCodeAt(0) === 46 /* . */) {
        result.push('');
      }
      string.replace(rePropName, function(match, number, quote, subString) {
        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
      });
      return result;
    });

    /**
     * Converts `value` to a string key if it's not a string or symbol.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {string|symbol} Returns the key.
     */
    function toKey(value) {
      if (typeof value == 'string' || isSymbol(value)) {
        return value;
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * Converts `func` to its source code.
     *
     * @private
     * @param {Function} func The function to convert.
     * @returns {string} Returns the source code.
     */
    function toSource(func) {
      if (func != null) {
        try {
          return funcToString.call(func);
        } catch (e) {}
        try {
          return (func + '');
        } catch (e) {}
      }
      return '';
    }

    /**
     * Updates wrapper `details` based on `bitmask` flags.
     *
     * @private
     * @returns {Array} details The details to modify.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Array} Returns `details`.
     */
    function updateWrapDetails(details, bitmask) {
      arrayEach(wrapFlags, function(pair) {
        var value = '_.' + pair[0];
        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
          details.push(value);
        }
      });
      return details.sort();
    }

    /**
     * Creates a clone of `wrapper`.
     *
     * @private
     * @param {Object} wrapper The wrapper to clone.
     * @returns {Object} Returns the cloned wrapper.
     */
    function wrapperClone(wrapper) {
      if (wrapper instanceof LazyWrapper) {
        return wrapper.clone();
      }
      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
      result.__actions__ = copyArray(wrapper.__actions__);
      result.__index__  = wrapper.__index__;
      result.__values__ = wrapper.__values__;
      return result;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of elements split into groups the length of `size`.
     * If `array` can't be split evenly, the final chunk will be the remaining
     * elements.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to process.
     * @param {number} [size=1] The length of each chunk
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the new array of chunks.
     * @example
     *
     * _.chunk(['a', 'b', 'c', 'd'], 2);
     * // => [['a', 'b'], ['c', 'd']]
     *
     * _.chunk(['a', 'b', 'c', 'd'], 3);
     * // => [['a', 'b', 'c'], ['d']]
     */
    function chunk(array, size, guard) {
      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
        size = 1;
      } else {
        size = nativeMax(toInteger(size), 0);
      }
      var length = array == null ? 0 : array.length;
      if (!length || size < 1) {
        return [];
      }
      var index = 0,
          resIndex = 0,
          result = Array(nativeCeil(length / size));

      while (index < length) {
        result[resIndex++] = baseSlice(array, index, (index += size));
      }
      return result;
    }

    /**
     * Creates an array with all falsey values removed. The values `false`, `null`,
     * `0`, `""`, `undefined`, and `NaN` are falsey.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to compact.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.compact([0, 1, false, 2, '', 3]);
     * // => [1, 2, 3]
     */
    function compact(array) {
      var index = -1,
          length = array == null ? 0 : array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index];
        if (value) {
          result[resIndex++] = value;
        }
      }
      return result;
    }

    /**
     * Creates a new array concatenating `array` with any additional arrays
     * and/or values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to concatenate.
     * @param {...*} [values] The values to concatenate.
     * @returns {Array} Returns the new concatenated array.
     * @example
     *
     * var array = [1];
     * var other = _.concat(array, 2, [3], [[4]]);
     *
     * console.log(other);
     * // => [1, 2, 3, [4]]
     *
     * console.log(array);
     * // => [1]
     */
    function concat() {
      var length = arguments.length;
      if (!length) {
        return [];
      }
      var args = Array(length - 1),
          array = arguments[0],
          index = length;

      while (index--) {
        args[index - 1] = arguments[index];
      }
      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
    }

    /**
     * Creates an array of `array` values not included in the other given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * **Note:** Unlike `_.pullAll`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.without, _.xor
     * @example
     *
     * _.difference([2, 1], [2, 3]);
     * // => [1]
     */
    var difference = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `iteratee` which
     * is invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var differenceBy = baseRest(function(array, values) {
      var iteratee = last(values);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `comparator`
     * which is invoked to compare elements of `array` to `values`. The order and
     * references of result values are determined by the first array. The comparator
     * is invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     *
     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }]
     */
    var differenceWith = baseRest(function(array, values) {
      var comparator = last(values);
      if (isArrayLikeObject(comparator)) {
        comparator = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
        : [];
    });

    /**
     * Creates a slice of `array` with `n` elements dropped from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.drop([1, 2, 3]);
     * // => [2, 3]
     *
     * _.drop([1, 2, 3], 2);
     * // => [3]
     *
     * _.drop([1, 2, 3], 5);
     * // => []
     *
     * _.drop([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function drop(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with `n` elements dropped from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.dropRight([1, 2, 3]);
     * // => [1, 2]
     *
     * _.dropRight([1, 2, 3], 2);
     * // => [1]
     *
     * _.dropRight([1, 2, 3], 5);
     * // => []
     *
     * _.dropRight([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function dropRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the end.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.dropRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropRightWhile(users, ['active', false]);
     * // => objects for ['barney']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropRightWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true, true)
        : [];
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the beginning.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.dropWhile(users, function(o) { return !o.active; });
     * // => objects for ['pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropWhile(users, ['active', false]);
     * // => objects for ['pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true)
        : [];
    }

    /**
     * Fills elements of `array` with `value` from `start` up to, but not
     * including, `end`.
     *
     * **Note:** This method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Array
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.fill(array, 'a');
     * console.log(array);
     * // => ['a', 'a', 'a']
     *
     * _.fill(Array(3), 2);
     * // => [2, 2, 2]
     *
     * _.fill([4, 6, 8, 10], '*', 1, 3);
     * // => [4, '*', '*', 10]
     */
    function fill(array, value, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
        start = 0;
        end = length;
      }
      return baseFill(array, value, start, end);
    }

    /**
     * This method is like `_.find` except that it returns the index of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.findIndex(users, function(o) { return o.user == 'barney'; });
     * // => 0
     *
     * // The `_.matches` iteratee shorthand.
     * _.findIndex(users, { 'user': 'fred', 'active': false });
     * // => 1
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findIndex(users, ['active', false]);
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.findIndex(users, 'active');
     * // => 2
     */
    function findIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index);
    }

    /**
     * This method is like `_.findIndex` except that it iterates over elements
     * of `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
     * // => 2
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
     * // => 0
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastIndex(users, ['active', false]);
     * // => 2
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastIndex(users, 'active');
     * // => 0
     */
    function findLastIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length - 1;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = fromIndex < 0
          ? nativeMax(length + index, 0)
          : nativeMin(index, length - 1);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index, true);
    }

    /**
     * Flattens `array` a single level deep.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flatten([1, [2, [3, [4]], 5]]);
     * // => [1, 2, [3, [4]], 5]
     */
    function flatten(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, 1) : [];
    }

    /**
     * Recursively flattens `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flattenDeep([1, [2, [3, [4]], 5]]);
     * // => [1, 2, 3, 4, 5]
     */
    function flattenDeep(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, INFINITY) : [];
    }

    /**
     * Recursively flatten `array` up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * var array = [1, [2, [3, [4]], 5]];
     *
     * _.flattenDepth(array, 1);
     * // => [1, 2, [3, [4]], 5]
     *
     * _.flattenDepth(array, 2);
     * // => [1, 2, 3, [4], 5]
     */
    function flattenDepth(array, depth) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(array, depth);
    }

    /**
     * The inverse of `_.toPairs`; this method returns an object composed
     * from key-value `pairs`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} pairs The key-value pairs.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.fromPairs([['a', 1], ['b', 2]]);
     * // => { 'a': 1, 'b': 2 }
     */
    function fromPairs(pairs) {
      var index = -1,
          length = pairs == null ? 0 : pairs.length,
          result = {};

      while (++index < length) {
        var pair = pairs[index];
        result[pair[0]] = pair[1];
      }
      return result;
    }

    /**
     * Gets the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias first
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the first element of `array`.
     * @example
     *
     * _.head([1, 2, 3]);
     * // => 1
     *
     * _.head([]);
     * // => undefined
     */
    function head(array) {
      return (array && array.length) ? array[0] : undefined;
    }

    /**
     * Gets the index at which the first occurrence of `value` is found in `array`
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. If `fromIndex` is negative, it's used as the
     * offset from the end of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.indexOf([1, 2, 1, 2], 2);
     * // => 1
     *
     * // Search from the `fromIndex`.
     * _.indexOf([1, 2, 1, 2], 2, 2);
     * // => 3
     */
    function indexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseIndexOf(array, value, index);
    }

    /**
     * Gets all but the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.initial([1, 2, 3]);
     * // => [1, 2]
     */
    function initial(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 0, -1) : [];
    }

    /**
     * Creates an array of unique values that are included in all given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersection([2, 1], [2, 3]);
     * // => [2]
     */
    var intersection = baseRest(function(arrays) {
      var mapped = arrayMap(arrays, castArrayLikeObject);
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped)
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `iteratee`
     * which is invoked for each element of each `arrays` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [2.1]
     *
     * // The `_.property` iteratee shorthand.
     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }]
     */
    var intersectionBy = baseRest(function(arrays) {
      var iteratee = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      if (iteratee === last(mapped)) {
        iteratee = undefined;
      } else {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `comparator`
     * which is invoked to compare elements of `arrays`. The order and references
     * of result values are determined by the first array. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.intersectionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }]
     */
    var intersectionWith = baseRest(function(arrays) {
      var comparator = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      comparator = typeof comparator == 'function' ? comparator : undefined;
      if (comparator) {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, undefined, comparator)
        : [];
    });

    /**
     * Converts all elements in `array` into a string separated by `separator`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to convert.
     * @param {string} [separator=','] The element separator.
     * @returns {string} Returns the joined string.
     * @example
     *
     * _.join(['a', 'b', 'c'], '~');
     * // => 'a~b~c'
     */
    function join(array, separator) {
      return array == null ? '' : nativeJoin.call(array, separator);
    }

    /**
     * Gets the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the last element of `array`.
     * @example
     *
     * _.last([1, 2, 3]);
     * // => 3
     */
    function last(array) {
      var length = array == null ? 0 : array.length;
      return length ? array[length - 1] : undefined;
    }

    /**
     * This method is like `_.indexOf` except that it iterates over elements of
     * `array` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.lastIndexOf([1, 2, 1, 2], 2);
     * // => 3
     *
     * // Search from the `fromIndex`.
     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
     * // => 1
     */
    function lastIndexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
      }
      return value === value
        ? strictLastIndexOf(array, value, index)
        : baseFindIndex(array, baseIsNaN, index, true);
    }

    /**
     * Gets the element at index `n` of `array`. If `n` is negative, the nth
     * element from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.11.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=0] The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     *
     * _.nth(array, 1);
     * // => 'b'
     *
     * _.nth(array, -2);
     * // => 'c';
     */
    function nth(array, n) {
      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
    }

    /**
     * Removes all given values from `array` using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
     * to remove elements from an array by predicate.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...*} [values] The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pull(array, 'a', 'c');
     * console.log(array);
     * // => ['b', 'b']
     */
    var pull = baseRest(pullAll);

    /**
     * This method is like `_.pull` except that it accepts an array of values to remove.
     *
     * **Note:** Unlike `_.difference`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pullAll(array, ['a', 'c']);
     * console.log(array);
     * // => ['b', 'b']
     */
    function pullAll(array, values) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values)
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `iteratee` which is
     * invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The iteratee is invoked with one argument: (value).
     *
     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
     *
     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
     * console.log(array);
     * // => [{ 'x': 2 }]
     */
    function pullAllBy(array, values, iteratee) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, getIteratee(iteratee, 2))
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `comparator` which
     * is invoked to compare elements of `array` to `values`. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
     *
     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
     * console.log(array);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
     */
    function pullAllWith(array, values, comparator) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, undefined, comparator)
        : array;
    }

    /**
     * Removes elements from `array` corresponding to `indexes` and returns an
     * array of removed elements.
     *
     * **Note:** Unlike `_.at`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...(number|number[])} [indexes] The indexes of elements to remove.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     * var pulled = _.pullAt(array, [1, 3]);
     *
     * console.log(array);
     * // => ['a', 'c']
     *
     * console.log(pulled);
     * // => ['b', 'd']
     */
    var pullAt = flatRest(function(array, indexes) {
      var length = array == null ? 0 : array.length,
          result = baseAt(array, indexes);

      basePullAt(array, arrayMap(indexes, function(index) {
        return isIndex(index, length) ? +index : index;
      }).sort(compareAscending));

      return result;
    });

    /**
     * Removes all elements from `array` that `predicate` returns truthy for
     * and returns an array of the removed elements. The predicate is invoked
     * with three arguments: (value, index, array).
     *
     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
     * to pull elements from an array by value.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = [1, 2, 3, 4];
     * var evens = _.remove(array, function(n) {
     *   return n % 2 == 0;
     * });
     *
     * console.log(array);
     * // => [1, 3]
     *
     * console.log(evens);
     * // => [2, 4]
     */
    function remove(array, predicate) {
      var result = [];
      if (!(array && array.length)) {
        return result;
      }
      var index = -1,
          indexes = [],
          length = array.length;

      predicate = getIteratee(predicate, 3);
      while (++index < length) {
        var value = array[index];
        if (predicate(value, index, array)) {
          result.push(value);
          indexes.push(index);
        }
      }
      basePullAt(array, indexes);
      return result;
    }

    /**
     * Reverses `array` so that the first element becomes the last, the second
     * element becomes the second to last, and so on.
     *
     * **Note:** This method mutates `array` and is based on
     * [`Array#reverse`](https://mdn.io/Array/reverse).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.reverse(array);
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function reverse(array) {
      return array == null ? array : nativeReverse.call(array);
    }

    /**
     * Creates a slice of `array` from `start` up to, but not including, `end`.
     *
     * **Note:** This method is used instead of
     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
     * returned.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function slice(array, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
        start = 0;
        end = length;
      }
      else {
        start = start == null ? 0 : toInteger(start);
        end = end === undefined ? length : toInteger(end);
      }
      return baseSlice(array, start, end);
    }

    /**
     * Uses a binary search to determine the lowest index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedIndex([30, 50], 40);
     * // => 1
     */
    function sortedIndex(array, value) {
      return baseSortedIndex(array, value);
    }

    /**
     * This method is like `_.sortedIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
     * // => 0
     */
    function sortedIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
    }

    /**
     * This method is like `_.indexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
     * // => 1
     */
    function sortedIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value);
        if (index < length && eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.sortedIndex` except that it returns the highest
     * index at which `value` should be inserted into `array` in order to
     * maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
     * // => 4
     */
    function sortedLastIndex(array, value) {
      return baseSortedIndex(array, value, true);
    }

    /**
     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 1
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
     * // => 1
     */
    function sortedLastIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
    }

    /**
     * This method is like `_.lastIndexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
     * // => 3
     */
    function sortedLastIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value, true) - 1;
        if (eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.uniq` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniq([1, 1, 2]);
     * // => [1, 2]
     */
    function sortedUniq(array) {
      return (array && array.length)
        ? baseSortedUniq(array)
        : [];
    }

    /**
     * This method is like `_.uniqBy` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
     * // => [1.1, 2.3]
     */
    function sortedUniqBy(array, iteratee) {
      return (array && array.length)
        ? baseSortedUniq(array, getIteratee(iteratee, 2))
        : [];
    }

    /**
     * Gets all but the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.tail([1, 2, 3]);
     * // => [2, 3]
     */
    function tail(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 1, length) : [];
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.take([1, 2, 3]);
     * // => [1]
     *
     * _.take([1, 2, 3], 2);
     * // => [1, 2]
     *
     * _.take([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.take([1, 2, 3], 0);
     * // => []
     */
    function take(array, n, guard) {
      if (!(array && array.length)) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.takeRight([1, 2, 3]);
     * // => [3]
     *
     * _.takeRight([1, 2, 3], 2);
     * // => [2, 3]
     *
     * _.takeRight([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.takeRight([1, 2, 3], 0);
     * // => []
     */
    function takeRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with elements taken from the end. Elements are
     * taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.takeRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeRightWhile(users, ['active', false]);
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeRightWhile(users, 'active');
     * // => []
     */
    function takeRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), false, true)
        : [];
    }

    /**
     * Creates a slice of `array` with elements taken from the beginning. Elements
     * are taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.takeWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeWhile(users, ['active', false]);
     * // => objects for ['barney', 'fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeWhile(users, 'active');
     * // => []
     */
    function takeWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3))
        : [];
    }

    /**
     * Creates an array of unique values, in order, from all given arrays using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.union([2], [1, 2]);
     * // => [2, 1]
     */
    var union = baseRest(function(arrays) {
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
    });

    /**
     * This method is like `_.union` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which uniqueness is computed. Result values are chosen from the first
     * array in which the value occurs. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.unionBy([2.1], [1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    var unionBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.union` except that it accepts `comparator` which
     * is invoked to compare elements of `arrays`. Result values are chosen from
     * the first array in which the value occurs. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.unionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var unionWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
    });

    /**
     * Creates a duplicate-free version of an array, using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons, in which only the first occurrence of each element
     * is kept. The order of result values is determined by the order they occur
     * in the array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniq([2, 1, 2]);
     * // => [2, 1]
     */
    function uniq(array) {
      return (array && array.length) ? baseUniq(array) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * uniqueness is computed. The order of result values is determined by the
     * order they occur in the array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    function uniqBy(array, iteratee) {
      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `comparator` which
     * is invoked to compare elements of `array`. The order of result values is
     * determined by the order they occur in the array.The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.uniqWith(objects, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
     */
    function uniqWith(array, comparator) {
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
    }

    /**
     * This method is like `_.zip` except that it accepts an array of grouped
     * elements and creates an array regrouping the elements to their pre-zip
     * configuration.
     *
     * @static
     * @memberOf _
     * @since 1.2.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     *
     * _.unzip(zipped);
     * // => [['a', 'b'], [1, 2], [true, false]]
     */
    function unzip(array) {
      if (!(array && array.length)) {
        return [];
      }
      var length = 0;
      array = arrayFilter(array, function(group) {
        if (isArrayLikeObject(group)) {
          length = nativeMax(group.length, length);
          return true;
        }
      });
      return baseTimes(length, function(index) {
        return arrayMap(array, baseProperty(index));
      });
    }

    /**
     * This method is like `_.unzip` except that it accepts `iteratee` to specify
     * how regrouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  regrouped values.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
     * // => [[1, 10, 100], [2, 20, 200]]
     *
     * _.unzipWith(zipped, _.add);
     * // => [3, 30, 300]
     */
    function unzipWith(array, iteratee) {
      if (!(array && array.length)) {
        return [];
      }
      var result = unzip(array);
      if (iteratee == null) {
        return result;
      }
      return arrayMap(result, function(group) {
        return apply(iteratee, undefined, group);
      });
    }

    /**
     * Creates an array excluding all given values using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.pull`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...*} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.xor
     * @example
     *
     * _.without([2, 1, 2, 3], 1, 2);
     * // => [3]
     */
    var without = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, values)
        : [];
    });

    /**
     * Creates an array of unique values that is the
     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
     * of the given arrays. The order of result values is determined by the order
     * they occur in the arrays.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.without
     * @example
     *
     * _.xor([2, 1], [2, 3]);
     * // => [1, 3]
     */
    var xor = baseRest(function(arrays) {
      return baseXor(arrayFilter(arrays, isArrayLikeObject));
    });

    /**
     * This method is like `_.xor` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which by which they're compared. The order of result values is determined
     * by the order they occur in the arrays. The iteratee is invoked with one
     * argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2, 3.4]
     *
     * // The `_.property` iteratee shorthand.
     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var xorBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.xor` except that it accepts `comparator` which is
     * invoked to compare elements of `arrays`. The order of result values is
     * determined by the order they occur in the arrays. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.xorWith(objects, others, _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var xorWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
    });

    /**
     * Creates an array of grouped elements, the first of which contains the
     * first elements of the given arrays, the second of which contains the
     * second elements of the given arrays, and so on.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     */
    var zip = baseRest(unzip);

    /**
     * This method is like `_.fromPairs` except that it accepts two arrays,
     * one of property identifiers and one of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 0.4.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObject(['a', 'b'], [1, 2]);
     * // => { 'a': 1, 'b': 2 }
     */
    function zipObject(props, values) {
      return baseZipObject(props || [], values || [], assignValue);
    }

    /**
     * This method is like `_.zipObject` except that it supports property paths.
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
     */
    function zipObjectDeep(props, values) {
      return baseZipObject(props || [], values || [], baseSet);
    }

    /**
     * This method is like `_.zip` except that it accepts `iteratee` to specify
     * how grouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  grouped values.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
     *   return a + b + c;
     * });
     * // => [111, 222]
     */
    var zipWith = baseRest(function(arrays) {
      var length = arrays.length,
          iteratee = length > 1 ? arrays[length - 1] : undefined;

      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
      return unzipWith(arrays, iteratee);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` wrapper instance that wraps `value` with explicit method
     * chain sequences enabled. The result of such sequences must be unwrapped
     * with `_#value`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Seq
     * @param {*} value The value to wrap.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36 },
     *   { 'user': 'fred',    'age': 40 },
     *   { 'user': 'pebbles', 'age': 1 }
     * ];
     *
     * var youngest = _
     *   .chain(users)
     *   .sortBy('age')
     *   .map(function(o) {
     *     return o.user + ' is ' + o.age;
     *   })
     *   .head()
     *   .value();
     * // => 'pebbles is 1'
     */
    function chain(value) {
      var result = lodash(value);
      result.__chain__ = true;
      return result;
    }

    /**
     * This method invokes `interceptor` and returns `value`. The interceptor
     * is invoked with one argument; (value). The purpose of this method is to
     * "tap into" a method chain sequence in order to modify intermediate results.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns `value`.
     * @example
     *
     * _([1, 2, 3])
     *  .tap(function(array) {
     *    // Mutate input array.
     *    array.pop();
     *  })
     *  .reverse()
     *  .value();
     * // => [2, 1]
     */
    function tap(value, interceptor) {
      interceptor(value);
      return value;
    }

    /**
     * This method is like `_.tap` except that it returns the result of `interceptor`.
     * The purpose of this method is to "pass thru" values replacing intermediate
     * results in a method chain sequence.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns the result of `interceptor`.
     * @example
     *
     * _('  abc  ')
     *  .chain()
     *  .trim()
     *  .thru(function(value) {
     *    return [value];
     *  })
     *  .value();
     * // => ['abc']
     */
    function thru(value, interceptor) {
      return interceptor(value);
    }

    /**
     * This method is the wrapper version of `_.at`.
     *
     * @name at
     * @memberOf _
     * @since 1.0.0
     * @category Seq
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _(object).at(['a[0].b.c', 'a[1]']).value();
     * // => [3, 4]
     */
    var wrapperAt = flatRest(function(paths) {
      var length = paths.length,
          start = length ? paths[0] : 0,
          value = this.__wrapped__,
          interceptor = function(object) { return baseAt(object, paths); };

      if (length > 1 || this.__actions__.length ||
          !(value instanceof LazyWrapper) || !isIndex(start)) {
        return this.thru(interceptor);
      }
      value = value.slice(start, +start + (length ? 1 : 0));
      value.__actions__.push({
        'func': thru,
        'args': [interceptor],
        'thisArg': undefined
      });
      return new LodashWrapper(value, this.__chain__).thru(function(array) {
        if (length && !array.length) {
          array.push(undefined);
        }
        return array;
      });
    });

    /**
     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
     *
     * @name chain
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 40 }
     * ];
     *
     * // A sequence without explicit chaining.
     * _(users).head();
     * // => { 'user': 'barney', 'age': 36 }
     *
     * // A sequence with explicit chaining.
     * _(users)
     *   .chain()
     *   .head()
     *   .pick('user')
     *   .value();
     * // => { 'user': 'barney' }
     */
    function wrapperChain() {
      return chain(this);
    }

    /**
     * Executes the chain sequence and returns the wrapped result.
     *
     * @name commit
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2];
     * var wrapped = _(array).push(3);
     *
     * console.log(array);
     * // => [1, 2]
     *
     * wrapped = wrapped.commit();
     * console.log(array);
     * // => [1, 2, 3]
     *
     * wrapped.last();
     * // => 3
     *
     * console.log(array);
     * // => [1, 2, 3]
     */
    function wrapperCommit() {
      return new LodashWrapper(this.value(), this.__chain__);
    }

    /**
     * Gets the next value on a wrapped object following the
     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
     *
     * @name next
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the next iterator value.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 1 }
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 2 }
     *
     * wrapped.next();
     * // => { 'done': true, 'value': undefined }
     */
    function wrapperNext() {
      if (this.__values__ === undefined) {
        this.__values__ = toArray(this.value());
      }
      var done = this.__index__ >= this.__values__.length,
          value = done ? undefined : this.__values__[this.__index__++];

      return { 'done': done, 'value': value };
    }

    /**
     * Enables the wrapper to be iterable.
     *
     * @name Symbol.iterator
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the wrapper object.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped[Symbol.iterator]() === wrapped;
     * // => true
     *
     * Array.from(wrapped);
     * // => [1, 2]
     */
    function wrapperToIterator() {
      return this;
    }

    /**
     * Creates a clone of the chain sequence planting `value` as the wrapped value.
     *
     * @name plant
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @param {*} value The value to plant.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2]).map(square);
     * var other = wrapped.plant([3, 4]);
     *
     * other.value();
     * // => [9, 16]
     *
     * wrapped.value();
     * // => [1, 4]
     */
    function wrapperPlant(value) {
      var result,
          parent = this;

      while (parent instanceof baseLodash) {
        var clone = wrapperClone(parent);
        clone.__index__ = 0;
        clone.__values__ = undefined;
        if (result) {
          previous.__wrapped__ = clone;
        } else {
          result = clone;
        }
        var previous = clone;
        parent = parent.__wrapped__;
      }
      previous.__wrapped__ = value;
      return result;
    }

    /**
     * This method is the wrapper version of `_.reverse`.
     *
     * **Note:** This method mutates the wrapped array.
     *
     * @name reverse
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _(array).reverse().value()
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function wrapperReverse() {
      var value = this.__wrapped__;
      if (value instanceof LazyWrapper) {
        var wrapped = value;
        if (this.__actions__.length) {
          wrapped = new LazyWrapper(this);
        }
        wrapped = wrapped.reverse();
        wrapped.__actions__.push({
          'func': thru,
          'args': [reverse],
          'thisArg': undefined
        });
        return new LodashWrapper(wrapped, this.__chain__);
      }
      return this.thru(reverse);
    }

    /**
     * Executes the chain sequence to resolve the unwrapped value.
     *
     * @name value
     * @memberOf _
     * @since 0.1.0
     * @alias toJSON, valueOf
     * @category Seq
     * @returns {*} Returns the resolved unwrapped value.
     * @example
     *
     * _([1, 2, 3]).value();
     * // => [1, 2, 3]
     */
    function wrapperValue() {
      return baseWrapperValue(this.__wrapped__, this.__actions__);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the number of times the key was returned by `iteratee`. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.countBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': 1, '6': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.countBy(['one', 'two', 'three'], 'length');
     * // => { '3': 2, '5': 1 }
     */
    var countBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        ++result[key];
      } else {
        baseAssignValue(result, key, 1);
      }
    });

    /**
     * Checks if `predicate` returns truthy for **all** elements of `collection`.
     * Iteration is stopped once `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * **Note:** This method returns `true` for
     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
     * elements of empty collections.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`.
     * @example
     *
     * _.every([true, 1, null, 'yes'], Boolean);
     * // => false
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.every(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.every(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.every(users, 'active');
     * // => false
     */
    function every(collection, predicate, guard) {
      var func = isArray(collection) ? arrayEvery : baseEvery;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning an array of all elements
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * **Note:** Unlike `_.remove`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.reject
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * _.filter(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, { 'age': 36, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.filter(users, 'active');
     * // => objects for ['barney']
     */
    function filter(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning the first element
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': true },
     *   { 'user': 'fred',    'age': 40, 'active': false },
     *   { 'user': 'pebbles', 'age': 1,  'active': true }
     * ];
     *
     * _.find(users, function(o) { return o.age < 40; });
     * // => object for 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.find(users, { 'age': 1, 'active': true });
     * // => object for 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.find(users, ['active', false]);
     * // => object for 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.find(users, 'active');
     * // => object for 'barney'
     */
    var find = createFind(findIndex);

    /**
     * This method is like `_.find` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=collection.length-1] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * _.findLast([1, 2, 3, 4], function(n) {
     *   return n % 2 == 1;
     * });
     * // => 3
     */
    var findLast = createFind(findLastIndex);

    /**
     * Creates a flattened array of values by running each element in `collection`
     * thru `iteratee` and flattening the mapped results. The iteratee is invoked
     * with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [n, n];
     * }
     *
     * _.flatMap([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMap(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), 1);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDeep([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMapDeep(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), INFINITY);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDepth([1, 2], duplicate, 2);
     * // => [[1, 1], [2, 2]]
     */
    function flatMapDepth(collection, iteratee, depth) {
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(map(collection, iteratee), depth);
    }

    /**
     * Iterates over elements of `collection` and invokes `iteratee` for each element.
     * The iteratee is invoked with three arguments: (value, index|key, collection).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * **Note:** As with other "Collections" methods, objects with a "length"
     * property are iterated like arrays. To avoid this behavior use `_.forIn`
     * or `_.forOwn` for object iteration.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias each
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEachRight
     * @example
     *
     * _.forEach([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `1` then `2`.
     *
     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forEach(collection, iteratee) {
      var func = isArray(collection) ? arrayEach : baseEach;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forEach` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @alias eachRight
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEach
     * @example
     *
     * _.forEachRight([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `2` then `1`.
     */
    function forEachRight(collection, iteratee) {
      var func = isArray(collection) ? arrayEachRight : baseEachRight;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The order of grouped values
     * is determined by the order they occur in `collection`. The corresponding
     * value of each key is an array of elements responsible for generating the
     * key. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.groupBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': [4.2], '6': [6.1, 6.3] }
     *
     * // The `_.property` iteratee shorthand.
     * _.groupBy(['one', 'two', 'three'], 'length');
     * // => { '3': ['one', 'two'], '5': ['three'] }
     */
    var groupBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        result[key].push(value);
      } else {
        baseAssignValue(result, key, [value]);
      }
    });

    /**
     * Checks if `value` is in `collection`. If `collection` is a string, it's
     * checked for a substring of `value`, otherwise
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * is used for equality comparisons. If `fromIndex` is negative, it's used as
     * the offset from the end of `collection`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {boolean} Returns `true` if `value` is found, else `false`.
     * @example
     *
     * _.includes([1, 2, 3], 1);
     * // => true
     *
     * _.includes([1, 2, 3], 1, 2);
     * // => false
     *
     * _.includes({ 'a': 1, 'b': 2 }, 1);
     * // => true
     *
     * _.includes('abcd', 'bc');
     * // => true
     */
    function includes(collection, value, fromIndex, guard) {
      collection = isArrayLike(collection) ? collection : values(collection);
      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;

      var length = collection.length;
      if (fromIndex < 0) {
        fromIndex = nativeMax(length + fromIndex, 0);
      }
      return isString(collection)
        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
    }

    /**
     * Invokes the method at `path` of each element in `collection`, returning
     * an array of the results of each invoked method. Any additional arguments
     * are provided to each invoked method. If `path` is a function, it's invoked
     * for, and `this` bound to, each element in `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array|Function|string} path The path of the method to invoke or
     *  the function invoked per iteration.
     * @param {...*} [args] The arguments to invoke each method with.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
     * // => [[1, 5, 7], [1, 2, 3]]
     *
     * _.invokeMap([123, 456], String.prototype.split, '');
     * // => [['1', '2', '3'], ['4', '5', '6']]
     */
    var invokeMap = baseRest(function(collection, path, args) {
      var index = -1,
          isFunc = typeof path == 'function',
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value) {
        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
      });
      return result;
    });

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the last element responsible for generating the key. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * var array = [
     *   { 'dir': 'left', 'code': 97 },
     *   { 'dir': 'right', 'code': 100 }
     * ];
     *
     * _.keyBy(array, function(o) {
     *   return String.fromCharCode(o.code);
     * });
     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
     *
     * _.keyBy(array, 'dir');
     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
     */
    var keyBy = createAggregator(function(result, value, key) {
      baseAssignValue(result, key, value);
    });

    /**
     * Creates an array of values by running each element in `collection` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
     *
     * The guarded methods are:
     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * _.map([4, 8], square);
     * // => [16, 64]
     *
     * _.map({ 'a': 4, 'b': 8 }, square);
     * // => [16, 64] (iteration order is not guaranteed)
     *
     * var users = [
     *   { 'user': 'barney' },
     *   { 'user': 'fred' }
     * ];
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, 'user');
     * // => ['barney', 'fred']
     */
    function map(collection, iteratee) {
      var func = isArray(collection) ? arrayMap : baseMap;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.sortBy` except that it allows specifying the sort
     * orders of the iteratees to sort by. If `orders` is unspecified, all values
     * are sorted in ascending order. Otherwise, specify an order of "desc" for
     * descending or "asc" for ascending sort order of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @param {string[]} [orders] The sort orders of `iteratees`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 34 },
     *   { 'user': 'fred',   'age': 40 },
     *   { 'user': 'barney', 'age': 36 }
     * ];
     *
     * // Sort by `user` in ascending order and by `age` in descending order.
     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
     */
    function orderBy(collection, iteratees, orders, guard) {
      if (collection == null) {
        return [];
      }
      if (!isArray(iteratees)) {
        iteratees = iteratees == null ? [] : [iteratees];
      }
      orders = guard ? undefined : orders;
      if (!isArray(orders)) {
        orders = orders == null ? [] : [orders];
      }
      return baseOrderBy(collection, iteratees, orders);
    }

    /**
     * Creates an array of elements split into two groups, the first of which
     * contains elements `predicate` returns truthy for, the second of which
     * contains elements `predicate` returns falsey for. The predicate is
     * invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of grouped elements.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': false },
     *   { 'user': 'fred',    'age': 40, 'active': true },
     *   { 'user': 'pebbles', 'age': 1,  'active': false }
     * ];
     *
     * _.partition(users, function(o) { return o.active; });
     * // => objects for [['fred'], ['barney', 'pebbles']]
     *
     * // The `_.matches` iteratee shorthand.
     * _.partition(users, { 'age': 1, 'active': false });
     * // => objects for [['pebbles'], ['barney', 'fred']]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.partition(users, ['active', false]);
     * // => objects for [['barney', 'pebbles'], ['fred']]
     *
     * // The `_.property` iteratee shorthand.
     * _.partition(users, 'active');
     * // => objects for [['fred'], ['barney', 'pebbles']]
     */
    var partition = createAggregator(function(result, value, key) {
      result[key ? 0 : 1].push(value);
    }, function() { return [[], []]; });

    /**
     * Reduces `collection` to a value which is the accumulated result of running
     * each element in `collection` thru `iteratee`, where each successive
     * invocation is supplied the return value of the previous. If `accumulator`
     * is not given, the first element of `collection` is used as the initial
     * value. The iteratee is invoked with four arguments:
     * (accumulator, value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.reduce`, `_.reduceRight`, and `_.transform`.
     *
     * The guarded methods are:
     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
     * and `sortBy`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduceRight
     * @example
     *
     * _.reduce([1, 2], function(sum, n) {
     *   return sum + n;
     * }, 0);
     * // => 3
     *
     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     *   return result;
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
     */
    function reduce(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduce : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
    }

    /**
     * This method is like `_.reduce` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduce
     * @example
     *
     * var array = [[0, 1], [2, 3], [4, 5]];
     *
     * _.reduceRight(array, function(flattened, other) {
     *   return flattened.concat(other);
     * }, []);
     * // => [4, 5, 2, 3, 0, 1]
     */
    function reduceRight(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduceRight : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
    }

    /**
     * The opposite of `_.filter`; this method returns the elements of `collection`
     * that `predicate` does **not** return truthy for.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.filter
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': true }
     * ];
     *
     * _.reject(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.reject(users, { 'age': 40, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.reject(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.reject(users, 'active');
     * // => objects for ['barney']
     */
    function reject(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, negate(getIteratee(predicate, 3)));
    }

    /**
     * Gets a random element from `collection`.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     * @example
     *
     * _.sample([1, 2, 3, 4]);
     * // => 2
     */
    function sample(collection) {
      var func = isArray(collection) ? arraySample : baseSample;
      return func(collection);
    }

    /**
     * Gets `n` random elements at unique keys from `collection` up to the
     * size of `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @param {number} [n=1] The number of elements to sample.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the random elements.
     * @example
     *
     * _.sampleSize([1, 2, 3], 2);
     * // => [3, 1]
     *
     * _.sampleSize([1, 2, 3], 4);
     * // => [2, 3, 1]
     */
    function sampleSize(collection, n, guard) {
      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      var func = isArray(collection) ? arraySampleSize : baseSampleSize;
      return func(collection, n);
    }

    /**
     * Creates an array of shuffled values, using a version of the
     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     * @example
     *
     * _.shuffle([1, 2, 3, 4]);
     * // => [4, 1, 3, 2]
     */
    function shuffle(collection) {
      var func = isArray(collection) ? arrayShuffle : baseShuffle;
      return func(collection);
    }

    /**
     * Gets the size of `collection` by returning its length for array-like
     * values or the number of own enumerable string keyed properties for objects.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @returns {number} Returns the collection size.
     * @example
     *
     * _.size([1, 2, 3]);
     * // => 3
     *
     * _.size({ 'a': 1, 'b': 2 });
     * // => 2
     *
     * _.size('pebbles');
     * // => 7
     */
    function size(collection) {
      if (collection == null) {
        return 0;
      }
      if (isArrayLike(collection)) {
        return isString(collection) ? stringSize(collection) : collection.length;
      }
      var tag = getTag(collection);
      if (tag == mapTag || tag == setTag) {
        return collection.size;
      }
      return baseKeys(collection).length;
    }

    /**
     * Checks if `predicate` returns truthy for **any** element of `collection`.
     * Iteration is stopped once `predicate` returns truthy. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     * @example
     *
     * _.some([null, 0, 'yes', false], Boolean);
     * // => true
     *
     * var users = [
     *   { 'user': 'barney', 'active': true },
     *   { 'user': 'fred',   'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.some(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.some(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.some(users, 'active');
     * // => true
     */
    function some(collection, predicate, guard) {
      var func = isArray(collection) ? arraySome : baseSome;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Creates an array of elements, sorted in ascending order by the results of
     * running each element in a collection thru each iteratee. This method
     * performs a stable sort, that is, it preserves the original sort order of
     * equal elements. The iteratees are invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 40 },
     *   { 'user': 'barney', 'age': 34 }
     * ];
     *
     * _.sortBy(users, [function(o) { return o.user; }]);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
     *
     * _.sortBy(users, ['user', 'age']);
     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
     */
    var sortBy = baseRest(function(collection, iteratees) {
      if (collection == null) {
        return [];
      }
      var length = iteratees.length;
      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
        iteratees = [];
      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
        iteratees = [iteratees[0]];
      }
      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Gets the timestamp of the number of milliseconds that have elapsed since
     * the Unix epoch (1 January 1970 00:00:00 UTC).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Date
     * @returns {number} Returns the timestamp.
     * @example
     *
     * _.defer(function(stamp) {
     *   console.log(_.now() - stamp);
     * }, _.now());
     * // => Logs the number of milliseconds it took for the deferred invocation.
     */
    var now = ctxNow || function() {
      return root.Date.now();
    };

    /*------------------------------------------------------------------------*/

    /**
     * The opposite of `_.before`; this method creates a function that invokes
     * `func` once it's called `n` or more times.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {number} n The number of calls before `func` is invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var saves = ['profile', 'settings'];
     *
     * var done = _.after(saves.length, function() {
     *   console.log('done saving!');
     * });
     *
     * _.forEach(saves, function(type) {
     *   asyncSave({ 'type': type, 'complete': done });
     * });
     * // => Logs 'done saving!' after the two async saves have completed.
     */
    function after(n, func) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n < 1) {
          return func.apply(this, arguments);
        }
      };
    }

    /**
     * Creates a function that invokes `func`, with up to `n` arguments,
     * ignoring any additional arguments.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @param {number} [n=func.length] The arity cap.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
     * // => [6, 8, 10]
     */
    function ary(func, n, guard) {
      n = guard ? undefined : n;
      n = (func && n == null) ? func.length : n;
      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
    }

    /**
     * Creates a function that invokes `func`, with the `this` binding and arguments
     * of the created function, while it's called less than `n` times. Subsequent
     * calls to the created function return the result of the last `func` invocation.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {number} n The number of calls at which `func` is no longer invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * jQuery(element).on('click', _.before(5, addContactToList));
     * // => Allows adding up to 4 contacts to the list.
     */
    function before(n, func) {
      var result;
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n > 0) {
          result = func.apply(this, arguments);
        }
        if (n <= 1) {
          func = undefined;
        }
        return result;
      };
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of `thisArg`
     * and `partials` prepended to the arguments it receives.
     *
     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for partially applied arguments.
     *
     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
     * property of bound functions.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to bind.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * function greet(greeting, punctuation) {
     *   return greeting + ' ' + this.user + punctuation;
     * }
     *
     * var object = { 'user': 'fred' };
     *
     * var bound = _.bind(greet, object, 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bind(greet, object, _, '!');
     * bound('hi');
     * // => 'hi fred!'
     */
    var bind = baseRest(function(func, thisArg, partials) {
      var bitmask = WRAP_BIND_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bind));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(func, bitmask, thisArg, partials, holders);
    });

    /**
     * Creates a function that invokes the method at `object[key]` with `partials`
     * prepended to the arguments it receives.
     *
     * This method differs from `_.bind` by allowing bound functions to reference
     * methods that may be redefined or don't yet exist. See
     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
     * for more details.
     *
     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Function
     * @param {Object} object The object to invoke the method on.
     * @param {string} key The key of the method.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * var object = {
     *   'user': 'fred',
     *   'greet': function(greeting, punctuation) {
     *     return greeting + ' ' + this.user + punctuation;
     *   }
     * };
     *
     * var bound = _.bindKey(object, 'greet', 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * object.greet = function(greeting, punctuation) {
     *   return greeting + 'ya ' + this.user + punctuation;
     * };
     *
     * bound('!');
     * // => 'hiya fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bindKey(object, 'greet', _, '!');
     * bound('hi');
     * // => 'hiya fred!'
     */
    var bindKey = baseRest(function(object, key, partials) {
      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bindKey));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(key, bitmask, object, partials, holders);
    });

    /**
     * Creates a function that accepts arguments of `func` and either invokes
     * `func` returning its result, if at least `arity` number of arguments have
     * been provided, or returns a function that accepts the remaining `func`
     * arguments, and so on. The arity of `func` may be specified if `func.length`
     * is not sufficient.
     *
     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curry(abc);
     *
     * curried(1)(2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(1)(_, 3)(2);
     * // => [1, 2, 3]
     */
    function curry(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curry.placeholder;
      return result;
    }

    /**
     * This method is like `_.curry` except that arguments are applied to `func`
     * in the manner of `_.partialRight` instead of `_.partial`.
     *
     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curryRight(abc);
     *
     * curried(3)(2)(1);
     * // => [1, 2, 3]
     *
     * curried(2, 3)(1);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(3)(1, _)(2);
     * // => [1, 2, 3]
     */
    function curryRight(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curryRight.placeholder;
      return result;
    }

    /**
     * Creates a debounced function that delays invoking `func` until after `wait`
     * milliseconds have elapsed since the last time the debounced function was
     * invoked. The debounced function comes with a `cancel` method to cancel
     * delayed `func` invocations and a `flush` method to immediately invoke them.
     * Provide `options` to indicate whether `func` should be invoked on the
     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
     * with the last arguments provided to the debounced function. Subsequent
     * calls to the debounced function return the result of the last `func`
     * invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the debounced function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.debounce` and `_.throttle`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to debounce.
     * @param {number} [wait=0] The number of milliseconds to delay.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=false]
     *  Specify invoking on the leading edge of the timeout.
     * @param {number} [options.maxWait]
     *  The maximum time `func` is allowed to be delayed before it's invoked.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new debounced function.
     * @example
     *
     * // Avoid costly calculations while the window size is in flux.
     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
     *
     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
     * jQuery(element).on('click', _.debounce(sendMail, 300, {
     *   'leading': true,
     *   'trailing': false
     * }));
     *
     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
     * var source = new EventSource('/stream');
     * jQuery(source).on('message', debounced);
     *
     * // Cancel the trailing debounced invocation.
     * jQuery(window).on('popstate', debounced.cancel);
     */
    function debounce(func, wait, options) {
      var lastArgs,
          lastThis,
          maxWait,
          result,
          timerId,
          lastCallTime,
          lastInvokeTime = 0,
          leading = false,
          maxing = false,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      wait = toNumber(wait) || 0;
      if (isObject(options)) {
        leading = !!options.leading;
        maxing = 'maxWait' in options;
        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }

      function invokeFunc(time) {
        var args = lastArgs,
            thisArg = lastThis;

        lastArgs = lastThis = undefined;
        lastInvokeTime = time;
        result = func.apply(thisArg, args);
        return result;
      }

      function leadingEdge(time) {
        // Reset any `maxWait` timer.
        lastInvokeTime = time;
        // Start the timer for the trailing edge.
        timerId = setTimeout(timerExpired, wait);
        // Invoke the leading edge.
        return leading ? invokeFunc(time) : result;
      }

      function remainingWait(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime,
            timeWaiting = wait - timeSinceLastCall;

        return maxing
          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
          : timeWaiting;
      }

      function shouldInvoke(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime;

        // Either this is the first call, activity has stopped and we're at the
        // trailing edge, the system time has gone backwards and we're treating
        // it as the trailing edge, or we've hit the `maxWait` limit.
        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
      }

      function timerExpired() {
        var time = now();
        if (shouldInvoke(time)) {
          return trailingEdge(time);
        }
        // Restart the timer.
        timerId = setTimeout(timerExpired, remainingWait(time));
      }

      function trailingEdge(time) {
        timerId = undefined;

        // Only invoke if we have `lastArgs` which means `func` has been
        // debounced at least once.
        if (trailing && lastArgs) {
          return invokeFunc(time);
        }
        lastArgs = lastThis = undefined;
        return result;
      }

      function cancel() {
        if (timerId !== undefined) {
          clearTimeout(timerId);
        }
        lastInvokeTime = 0;
        lastArgs = lastCallTime = lastThis = timerId = undefined;
      }

      function flush() {
        return timerId === undefined ? result : trailingEdge(now());
      }

      function debounced() {
        var time = now(),
            isInvoking = shouldInvoke(time);

        lastArgs = arguments;
        lastThis = this;
        lastCallTime = time;

        if (isInvoking) {
          if (timerId === undefined) {
            return leadingEdge(lastCallTime);
          }
          if (maxing) {
            // Handle invocations in a tight loop.
            timerId = setTimeout(timerExpired, wait);
            return invokeFunc(lastCallTime);
          }
        }
        if (timerId === undefined) {
          timerId = setTimeout(timerExpired, wait);
        }
        return result;
      }
      debounced.cancel = cancel;
      debounced.flush = flush;
      return debounced;
    }

    /**
     * Defers invoking the `func` until the current call stack has cleared. Any
     * additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to defer.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.defer(function(text) {
     *   console.log(text);
     * }, 'deferred');
     * // => Logs 'deferred' after one millisecond.
     */
    var defer = baseRest(function(func, args) {
      return baseDelay(func, 1, args);
    });

    /**
     * Invokes `func` after `wait` milliseconds. Any additional arguments are
     * provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.delay(function(text) {
     *   console.log(text);
     * }, 1000, 'later');
     * // => Logs 'later' after one second.
     */
    var delay = baseRest(function(func, wait, args) {
      return baseDelay(func, toNumber(wait) || 0, args);
    });

    /**
     * Creates a function that invokes `func` with arguments reversed.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to flip arguments for.
     * @returns {Function} Returns the new flipped function.
     * @example
     *
     * var flipped = _.flip(function() {
     *   return _.toArray(arguments);
     * });
     *
     * flipped('a', 'b', 'c', 'd');
     * // => ['d', 'c', 'b', 'a']
     */
    function flip(func) {
      return createWrap(func, WRAP_FLIP_FLAG);
    }

    /**
     * Creates a function that memoizes the result of `func`. If `resolver` is
     * provided, it determines the cache key for storing the result based on the
     * arguments provided to the memoized function. By default, the first argument
     * provided to the memoized function is used as the map cache key. The `func`
     * is invoked with the `this` binding of the memoized function.
     *
     * **Note:** The cache is exposed as the `cache` property on the memoized
     * function. Its creation may be customized by replacing the `_.memoize.Cache`
     * constructor with one whose instances implement the
     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to have its output memoized.
     * @param {Function} [resolver] The function to resolve the cache key.
     * @returns {Function} Returns the new memoized function.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     * var other = { 'c': 3, 'd': 4 };
     *
     * var values = _.memoize(_.values);
     * values(object);
     * // => [1, 2]
     *
     * values(other);
     * // => [3, 4]
     *
     * object.a = 2;
     * values(object);
     * // => [1, 2]
     *
     * // Modify the result cache.
     * values.cache.set(object, ['a', 'b']);
     * values(object);
     * // => ['a', 'b']
     *
     * // Replace `_.memoize.Cache`.
     * _.memoize.Cache = WeakMap;
     */
    function memoize(func, resolver) {
      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var memoized = function() {
        var args = arguments,
            key = resolver ? resolver.apply(this, args) : args[0],
            cache = memoized.cache;

        if (cache.has(key)) {
          return cache.get(key);
        }
        var result = func.apply(this, args);
        memoized.cache = cache.set(key, result) || cache;
        return result;
      };
      memoized.cache = new (memoize.Cache || MapCache);
      return memoized;
    }

    // Expose `MapCache`.
    memoize.Cache = MapCache;

    /**
     * Creates a function that negates the result of the predicate `func`. The
     * `func` predicate is invoked with the `this` binding and arguments of the
     * created function.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} predicate The predicate to negate.
     * @returns {Function} Returns the new negated function.
     * @example
     *
     * function isEven(n) {
     *   return n % 2 == 0;
     * }
     *
     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
     * // => [1, 3, 5]
     */
    function negate(predicate) {
      if (typeof predicate != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return function() {
        var args = arguments;
        switch (args.length) {
          case 0: return !predicate.call(this);
          case 1: return !predicate.call(this, args[0]);
          case 2: return !predicate.call(this, args[0], args[1]);
          case 3: return !predicate.call(this, args[0], args[1], args[2]);
        }
        return !predicate.apply(this, args);
      };
    }

    /**
     * Creates a function that is restricted to invoking `func` once. Repeat calls
     * to the function return the value of the first invocation. The `func` is
     * invoked with the `this` binding and arguments of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var initialize = _.once(createApplication);
     * initialize();
     * initialize();
     * // => `createApplication` is invoked once
     */
    function once(func) {
      return before(2, func);
    }

    /**
     * Creates a function that invokes `func` with its arguments transformed.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Function
     * @param {Function} func The function to wrap.
     * @param {...(Function|Function[])} [transforms=[_.identity]]
     *  The argument transforms.
     * @returns {Function} Returns the new function.
     * @example
     *
     * function doubled(n) {
     *   return n * 2;
     * }
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var func = _.overArgs(function(x, y) {
     *   return [x, y];
     * }, [square, doubled]);
     *
     * func(9, 3);
     * // => [81, 6]
     *
     * func(10, 5);
     * // => [100, 10]
     */
    var overArgs = castRest(function(func, transforms) {
      transforms = (transforms.length == 1 && isArray(transforms[0]))
        ? arrayMap(transforms[0], baseUnary(getIteratee()))
        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));

      var funcsLength = transforms.length;
      return baseRest(function(args) {
        var index = -1,
            length = nativeMin(args.length, funcsLength);

        while (++index < length) {
          args[index] = transforms[index].call(this, args[index]);
        }
        return apply(func, this, args);
      });
    });

    /**
     * Creates a function that invokes `func` with `partials` prepended to the
     * arguments it receives. This method is like `_.bind` except it does **not**
     * alter the `this` binding.
     *
     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 0.2.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var sayHelloTo = _.partial(greet, 'hello');
     * sayHelloTo('fred');
     * // => 'hello fred'
     *
     * // Partially applied with placeholders.
     * var greetFred = _.partial(greet, _, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     */
    var partial = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partial));
      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
    });

    /**
     * This method is like `_.partial` except that partially applied arguments
     * are appended to the arguments it receives.
     *
     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var greetFred = _.partialRight(greet, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     *
     * // Partially applied with placeholders.
     * var sayHelloTo = _.partialRight(greet, 'hello', _);
     * sayHelloTo('fred');
     * // => 'hello fred'
     */
    var partialRight = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partialRight));
      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
    });

    /**
     * Creates a function that invokes `func` with arguments arranged according
     * to the specified `indexes` where the argument value at the first index is
     * provided as the first argument, the argument value at the second index is
     * provided as the second argument, and so on.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to rearrange arguments for.
     * @param {...(number|number[])} indexes The arranged argument indexes.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var rearged = _.rearg(function(a, b, c) {
     *   return [a, b, c];
     * }, [2, 0, 1]);
     *
     * rearged('b', 'c', 'a')
     * // => ['a', 'b', 'c']
     */
    var rearg = flatRest(function(func, indexes) {
      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
    });

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * created function and arguments from `start` and beyond provided as
     * an array.
     *
     * **Note:** This method is based on the
     * [rest parameter](https://mdn.io/rest_parameters).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.rest(function(what, names) {
     *   return what + ' ' + _.initial(names).join(', ') +
     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
     * });
     *
     * say('hello', 'fred', 'barney', 'pebbles');
     * // => 'hello fred, barney, & pebbles'
     */
    function rest(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start === undefined ? start : toInteger(start);
      return baseRest(func, start);
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * create function and an array of arguments much like
     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
     *
     * **Note:** This method is based on the
     * [spread operator](https://mdn.io/spread_operator).
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Function
     * @param {Function} func The function to spread arguments over.
     * @param {number} [start=0] The start position of the spread.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.spread(function(who, what) {
     *   return who + ' says ' + what;
     * });
     *
     * say(['fred', 'hello']);
     * // => 'fred says hello'
     *
     * var numbers = Promise.all([
     *   Promise.resolve(40),
     *   Promise.resolve(36)
     * ]);
     *
     * numbers.then(_.spread(function(x, y) {
     *   return x + y;
     * }));
     * // => a Promise of 76
     */
    function spread(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start == null ? 0 : nativeMax(toInteger(start), 0);
      return baseRest(function(args) {
        var array = args[start],
            otherArgs = castSlice(args, 0, start);

        if (array) {
          arrayPush(otherArgs, array);
        }
        return apply(func, this, otherArgs);
      });
    }

    /**
     * Creates a throttled function that only invokes `func` at most once per
     * every `wait` milliseconds. The throttled function comes with a `cancel`
     * method to cancel delayed `func` invocations and a `flush` method to
     * immediately invoke them. Provide `options` to indicate whether `func`
     * should be invoked on the leading and/or trailing edge of the `wait`
     * timeout. The `func` is invoked with the last arguments provided to the
     * throttled function. Subsequent calls to the throttled function return the
     * result of the last `func` invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the throttled function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.throttle` and `_.debounce`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to throttle.
     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=true]
     *  Specify invoking on the leading edge of the timeout.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new throttled function.
     * @example
     *
     * // Avoid excessively updating the position while scrolling.
     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
     *
     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
     * jQuery(element).on('click', throttled);
     *
     * // Cancel the trailing throttled invocation.
     * jQuery(window).on('popstate', throttled.cancel);
     */
    function throttle(func, wait, options) {
      var leading = true,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      if (isObject(options)) {
        leading = 'leading' in options ? !!options.leading : leading;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }
      return debounce(func, wait, {
        'leading': leading,
        'maxWait': wait,
        'trailing': trailing
      });
    }

    /**
     * Creates a function that accepts up to one argument, ignoring any
     * additional arguments.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.unary(parseInt));
     * // => [6, 8, 10]
     */
    function unary(func) {
      return ary(func, 1);
    }

    /**
     * Creates a function that provides `value` to `wrapper` as its first
     * argument. Any additional arguments provided to the function are appended
     * to those provided to the `wrapper`. The wrapper is invoked with the `this`
     * binding of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {*} value The value to wrap.
     * @param {Function} [wrapper=identity] The wrapper function.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var p = _.wrap(_.escape, function(func, text) {
     *   return '<p>' + func(text) + '</p>';
     * });
     *
     * p('fred, barney, & pebbles');
     * // => '<p>fred, barney, &amp; pebbles</p>'
     */
    function wrap(value, wrapper) {
      return partial(castFunction(wrapper), value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Casts `value` as an array if it's not one.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Lang
     * @param {*} value The value to inspect.
     * @returns {Array} Returns the cast array.
     * @example
     *
     * _.castArray(1);
     * // => [1]
     *
     * _.castArray({ 'a': 1 });
     * // => [{ 'a': 1 }]
     *
     * _.castArray('abc');
     * // => ['abc']
     *
     * _.castArray(null);
     * // => [null]
     *
     * _.castArray(undefined);
     * // => [undefined]
     *
     * _.castArray();
     * // => []
     *
     * var array = [1, 2, 3];
     * console.log(_.castArray(array) === array);
     * // => true
     */
    function castArray() {
      if (!arguments.length) {
        return [];
      }
      var value = arguments[0];
      return isArray(value) ? value : [value];
    }

    /**
     * Creates a shallow clone of `value`.
     *
     * **Note:** This method is loosely based on the
     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
     * and supports cloning arrays, array buffers, booleans, date objects, maps,
     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
     * arrays. The own enumerable properties of `arguments` objects are cloned
     * as plain objects. An empty object is returned for uncloneable values such
     * as error objects, functions, DOM nodes, and WeakMaps.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to clone.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeep
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var shallow = _.clone(objects);
     * console.log(shallow[0] === objects[0]);
     * // => true
     */
    function clone(value) {
      return baseClone(value, CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.clone` except that it accepts `customizer` which
     * is invoked to produce the cloned value. If `customizer` returns `undefined`,
     * cloning is handled by the method instead. The `customizer` is invoked with
     * up to four arguments; (value [, index|key, object, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeepWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(false);
     *   }
     * }
     *
     * var el = _.cloneWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 0
     */
    function cloneWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * This method is like `_.clone` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @returns {*} Returns the deep cloned value.
     * @see _.clone
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var deep = _.cloneDeep(objects);
     * console.log(deep[0] === objects[0]);
     * // => false
     */
    function cloneDeep(value) {
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.cloneWith` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the deep cloned value.
     * @see _.cloneWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(true);
     *   }
     * }
     *
     * var el = _.cloneDeepWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 20
     */
    function cloneDeepWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * Checks if `object` conforms to `source` by invoking the predicate
     * properties of `source` with the corresponding property values of `object`.
     *
     * **Note:** This method is equivalent to `_.conforms` when `source` is
     * partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
     * // => true
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
     * // => false
     */
    function conformsTo(object, source) {
      return source == null || baseConformsTo(object, source, keys(source));
    }

    /**
     * Performs a
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * comparison between two values to determine if they are equivalent.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.eq(object, object);
     * // => true
     *
     * _.eq(object, other);
     * // => false
     *
     * _.eq('a', 'a');
     * // => true
     *
     * _.eq('a', Object('a'));
     * // => false
     *
     * _.eq(NaN, NaN);
     * // => true
     */
    function eq(value, other) {
      return value === other || (value !== value && other !== other);
    }

    /**
     * Checks if `value` is greater than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     * @see _.lt
     * @example
     *
     * _.gt(3, 1);
     * // => true
     *
     * _.gt(3, 3);
     * // => false
     *
     * _.gt(1, 3);
     * // => false
     */
    var gt = createRelationalOperation(baseGt);

    /**
     * Checks if `value` is greater than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than or equal to
     *  `other`, else `false`.
     * @see _.lte
     * @example
     *
     * _.gte(3, 1);
     * // => true
     *
     * _.gte(3, 3);
     * // => true
     *
     * _.gte(1, 3);
     * // => false
     */
    var gte = createRelationalOperation(function(value, other) {
      return value >= other;
    });

    /**
     * Checks if `value` is likely an `arguments` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     *  else `false`.
     * @example
     *
     * _.isArguments(function() { return arguments; }());
     * // => true
     *
     * _.isArguments([1, 2, 3]);
     * // => false
     */
    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
        !propertyIsEnumerable.call(value, 'callee');
    };

    /**
     * Checks if `value` is classified as an `Array` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
     * @example
     *
     * _.isArray([1, 2, 3]);
     * // => true
     *
     * _.isArray(document.body.children);
     * // => false
     *
     * _.isArray('abc');
     * // => false
     *
     * _.isArray(_.noop);
     * // => false
     */
    var isArray = Array.isArray;

    /**
     * Checks if `value` is classified as an `ArrayBuffer` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     * @example
     *
     * _.isArrayBuffer(new ArrayBuffer(2));
     * // => true
     *
     * _.isArrayBuffer(new Array(2));
     * // => false
     */
    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;

    /**
     * Checks if `value` is array-like. A value is considered array-like if it's
     * not a function and has a `value.length` that's an integer greater than or
     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
     * @example
     *
     * _.isArrayLike([1, 2, 3]);
     * // => true
     *
     * _.isArrayLike(document.body.children);
     * // => true
     *
     * _.isArrayLike('abc');
     * // => true
     *
     * _.isArrayLike(_.noop);
     * // => false
     */
    function isArrayLike(value) {
      return value != null && isLength(value.length) && !isFunction(value);
    }

    /**
     * This method is like `_.isArrayLike` except that it also checks if `value`
     * is an object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array-like object,
     *  else `false`.
     * @example
     *
     * _.isArrayLikeObject([1, 2, 3]);
     * // => true
     *
     * _.isArrayLikeObject(document.body.children);
     * // => true
     *
     * _.isArrayLikeObject('abc');
     * // => false
     *
     * _.isArrayLikeObject(_.noop);
     * // => false
     */
    function isArrayLikeObject(value) {
      return isObjectLike(value) && isArrayLike(value);
    }

    /**
     * Checks if `value` is classified as a boolean primitive or object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
     * @example
     *
     * _.isBoolean(false);
     * // => true
     *
     * _.isBoolean(null);
     * // => false
     */
    function isBoolean(value) {
      return value === true || value === false ||
        (isObjectLike(value) && baseGetTag(value) == boolTag);
    }

    /**
     * Checks if `value` is a buffer.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
     * @example
     *
     * _.isBuffer(new Buffer(2));
     * // => true
     *
     * _.isBuffer(new Uint8Array(2));
     * // => false
     */
    var isBuffer = nativeIsBuffer || stubFalse;

    /**
     * Checks if `value` is classified as a `Date` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     * @example
     *
     * _.isDate(new Date);
     * // => true
     *
     * _.isDate('Mon April 23 2012');
     * // => false
     */
    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;

    /**
     * Checks if `value` is likely a DOM element.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
     * @example
     *
     * _.isElement(document.body);
     * // => true
     *
     * _.isElement('<body>');
     * // => false
     */
    function isElement(value) {
      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
    }

    /**
     * Checks if `value` is an empty object, collection, map, or set.
     *
     * Objects are considered empty if they have no own enumerable string keyed
     * properties.
     *
     * Array-like values such as `arguments` objects, arrays, buffers, strings, or
     * jQuery-like collections are considered empty if they have a `length` of `0`.
     * Similarly, maps and sets are considered empty if they have a `size` of `0`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
     * @example
     *
     * _.isEmpty(null);
     * // => true
     *
     * _.isEmpty(true);
     * // => true
     *
     * _.isEmpty(1);
     * // => true
     *
     * _.isEmpty([1, 2, 3]);
     * // => false
     *
     * _.isEmpty({ 'a': 1 });
     * // => false
     */
    function isEmpty(value) {
      if (value == null) {
        return true;
      }
      if (isArrayLike(value) &&
          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
            isBuffer(value) || isTypedArray(value) || isArguments(value))) {
        return !value.length;
      }
      var tag = getTag(value);
      if (tag == mapTag || tag == setTag) {
        return !value.size;
      }
      if (isPrototype(value)) {
        return !baseKeys(value).length;
      }
      for (var key in value) {
        if (hasOwnProperty.call(value, key)) {
          return false;
        }
      }
      return true;
    }

    /**
     * Performs a deep comparison between two values to determine if they are
     * equivalent.
     *
     * **Note:** This method supports comparing arrays, array buffers, booleans,
     * date objects, error objects, maps, numbers, `Object` objects, regexes,
     * sets, strings, symbols, and typed arrays. `Object` objects are compared
     * by their own, not inherited, enumerable properties. Functions and DOM
     * nodes are compared by strict equality, i.e. `===`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.isEqual(object, other);
     * // => true
     *
     * object === other;
     * // => false
     */
    function isEqual(value, other) {
      return baseIsEqual(value, other);
    }

    /**
     * This method is like `_.isEqual` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with up to
     * six arguments: (objValue, othValue [, index|key, object, other, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, othValue) {
     *   if (isGreeting(objValue) && isGreeting(othValue)) {
     *     return true;
     *   }
     * }
     *
     * var array = ['hello', 'goodbye'];
     * var other = ['hi', 'goodbye'];
     *
     * _.isEqualWith(array, other, customizer);
     * // => true
     */
    function isEqualWith(value, other, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      var result = customizer ? customizer(value, other) : undefined;
      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
    }

    /**
     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
     * `SyntaxError`, `TypeError`, or `URIError` object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
     * @example
     *
     * _.isError(new Error);
     * // => true
     *
     * _.isError(Error);
     * // => false
     */
    function isError(value) {
      if (!isObjectLike(value)) {
        return false;
      }
      var tag = baseGetTag(value);
      return tag == errorTag || tag == domExcTag ||
        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
    }

    /**
     * Checks if `value` is a finite primitive number.
     *
     * **Note:** This method is based on
     * [`Number.isFinite`](https://mdn.io/Number/isFinite).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
     * @example
     *
     * _.isFinite(3);
     * // => true
     *
     * _.isFinite(Number.MIN_VALUE);
     * // => true
     *
     * _.isFinite(Infinity);
     * // => false
     *
     * _.isFinite('3');
     * // => false
     */
    function isFinite(value) {
      return typeof value == 'number' && nativeIsFinite(value);
    }

    /**
     * Checks if `value` is classified as a `Function` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
     * @example
     *
     * _.isFunction(_);
     * // => true
     *
     * _.isFunction(/abc/);
     * // => false
     */
    function isFunction(value) {
      if (!isObject(value)) {
        return false;
      }
      // The use of `Object#toString` avoids issues with the `typeof` operator
      // in Safari 9 which returns 'object' for typed arrays and other constructors.
      var tag = baseGetTag(value);
      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
    }

    /**
     * Checks if `value` is an integer.
     *
     * **Note:** This method is based on
     * [`Number.isInteger`](https://mdn.io/Number/isInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
     * @example
     *
     * _.isInteger(3);
     * // => true
     *
     * _.isInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isInteger(Infinity);
     * // => false
     *
     * _.isInteger('3');
     * // => false
     */
    function isInteger(value) {
      return typeof value == 'number' && value == toInteger(value);
    }

    /**
     * Checks if `value` is a valid array-like length.
     *
     * **Note:** This method is loosely based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
     * @example
     *
     * _.isLength(3);
     * // => true
     *
     * _.isLength(Number.MIN_VALUE);
     * // => false
     *
     * _.isLength(Infinity);
     * // => false
     *
     * _.isLength('3');
     * // => false
     */
    function isLength(value) {
      return typeof value == 'number' &&
        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is the
     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(_.noop);
     * // => true
     *
     * _.isObject(null);
     * // => false
     */
    function isObject(value) {
      var type = typeof value;
      return value != null && (type == 'object' || type == 'function');
    }

    /**
     * Checks if `value` is object-like. A value is object-like if it's not `null`
     * and has a `typeof` result of "object".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     * @example
     *
     * _.isObjectLike({});
     * // => true
     *
     * _.isObjectLike([1, 2, 3]);
     * // => true
     *
     * _.isObjectLike(_.noop);
     * // => false
     *
     * _.isObjectLike(null);
     * // => false
     */
    function isObjectLike(value) {
      return value != null && typeof value == 'object';
    }

    /**
     * Checks if `value` is classified as a `Map` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     * @example
     *
     * _.isMap(new Map);
     * // => true
     *
     * _.isMap(new WeakMap);
     * // => false
     */
    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;

    /**
     * Performs a partial deep comparison between `object` and `source` to
     * determine if `object` contains equivalent property values.
     *
     * **Note:** This method is equivalent to `_.matches` when `source` is
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.isMatch(object, { 'b': 2 });
     * // => true
     *
     * _.isMatch(object, { 'b': 1 });
     * // => false
     */
    function isMatch(object, source) {
      return object === source || baseIsMatch(object, source, getMatchData(source));
    }

    /**
     * This method is like `_.isMatch` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with five
     * arguments: (objValue, srcValue, index|key, object, source).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, srcValue) {
     *   if (isGreeting(objValue) && isGreeting(srcValue)) {
     *     return true;
     *   }
     * }
     *
     * var object = { 'greeting': 'hello' };
     * var source = { 'greeting': 'hi' };
     *
     * _.isMatchWith(object, source, customizer);
     * // => true
     */
    function isMatchWith(object, source, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseIsMatch(object, source, getMatchData(source), customizer);
    }

    /**
     * Checks if `value` is `NaN`.
     *
     * **Note:** This method is based on
     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
     * `undefined` and other non-number values.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
     * @example
     *
     * _.isNaN(NaN);
     * // => true
     *
     * _.isNaN(new Number(NaN));
     * // => true
     *
     * isNaN(undefined);
     * // => true
     *
     * _.isNaN(undefined);
     * // => false
     */
    function isNaN(value) {
      // An `NaN` primitive is the only value that is not equal to itself.
      // Perform the `toStringTag` check first to avoid errors with some
      // ActiveX objects in IE.
      return isNumber(value) && value != +value;
    }

    /**
     * Checks if `value` is a pristine native function.
     *
     * **Note:** This method can't reliably detect native functions in the presence
     * of the core-js package because core-js circumvents this kind of detection.
     * Despite multiple requests, the core-js maintainer has made it clear: any
     * attempt to fix the detection will be obstructed. As a result, we're left
     * with little choice but to throw an error. Unfortunately, this also affects
     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
     * which rely on core-js.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     * @example
     *
     * _.isNative(Array.prototype.push);
     * // => true
     *
     * _.isNative(_);
     * // => false
     */
    function isNative(value) {
      if (isMaskable(value)) {
        throw new Error(CORE_ERROR_TEXT);
      }
      return baseIsNative(value);
    }

    /**
     * Checks if `value` is `null`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
     * @example
     *
     * _.isNull(null);
     * // => true
     *
     * _.isNull(void 0);
     * // => false
     */
    function isNull(value) {
      return value === null;
    }

    /**
     * Checks if `value` is `null` or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
     * @example
     *
     * _.isNil(null);
     * // => true
     *
     * _.isNil(void 0);
     * // => true
     *
     * _.isNil(NaN);
     * // => false
     */
    function isNil(value) {
      return value == null;
    }

    /**
     * Checks if `value` is classified as a `Number` primitive or object.
     *
     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
     * classified as numbers, use the `_.isFinite` method.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a number, else `false`.
     * @example
     *
     * _.isNumber(3);
     * // => true
     *
     * _.isNumber(Number.MIN_VALUE);
     * // => true
     *
     * _.isNumber(Infinity);
     * // => true
     *
     * _.isNumber('3');
     * // => false
     */
    function isNumber(value) {
      return typeof value == 'number' ||
        (isObjectLike(value) && baseGetTag(value) == numberTag);
    }

    /**
     * Checks if `value` is a plain object, that is, an object created by the
     * `Object` constructor or one with a `[[Prototype]]` of `null`.
     *
     * @static
     * @memberOf _
     * @since 0.8.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * _.isPlainObject(new Foo);
     * // => false
     *
     * _.isPlainObject([1, 2, 3]);
     * // => false
     *
     * _.isPlainObject({ 'x': 0, 'y': 0 });
     * // => true
     *
     * _.isPlainObject(Object.create(null));
     * // => true
     */
    function isPlainObject(value) {
      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
        return false;
      }
      var proto = getPrototype(value);
      if (proto === null) {
        return true;
      }
      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
      return typeof Ctor == 'function' && Ctor instanceof Ctor &&
        funcToString.call(Ctor) == objectCtorString;
    }

    /**
     * Checks if `value` is classified as a `RegExp` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     * @example
     *
     * _.isRegExp(/abc/);
     * // => true
     *
     * _.isRegExp('/abc/');
     * // => false
     */
    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;

    /**
     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
     * double precision number which isn't the result of a rounded unsafe integer.
     *
     * **Note:** This method is based on
     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
     * @example
     *
     * _.isSafeInteger(3);
     * // => true
     *
     * _.isSafeInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isSafeInteger(Infinity);
     * // => false
     *
     * _.isSafeInteger('3');
     * // => false
     */
    function isSafeInteger(value) {
      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is classified as a `Set` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     * @example
     *
     * _.isSet(new Set);
     * // => true
     *
     * _.isSet(new WeakSet);
     * // => false
     */
    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;

    /**
     * Checks if `value` is classified as a `String` primitive or object.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a string, else `false`.
     * @example
     *
     * _.isString('abc');
     * // => true
     *
     * _.isString(1);
     * // => false
     */
    function isString(value) {
      return typeof value == 'string' ||
        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
    }

    /**
     * Checks if `value` is classified as a `Symbol` primitive or object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
     * @example
     *
     * _.isSymbol(Symbol.iterator);
     * // => true
     *
     * _.isSymbol('abc');
     * // => false
     */
    function isSymbol(value) {
      return typeof value == 'symbol' ||
        (isObjectLike(value) && baseGetTag(value) == symbolTag);
    }

    /**
     * Checks if `value` is classified as a typed array.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     * @example
     *
     * _.isTypedArray(new Uint8Array);
     * // => true
     *
     * _.isTypedArray([]);
     * // => false
     */
    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;

    /**
     * Checks if `value` is `undefined`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
     * @example
     *
     * _.isUndefined(void 0);
     * // => true
     *
     * _.isUndefined(null);
     * // => false
     */
    function isUndefined(value) {
      return value === undefined;
    }

    /**
     * Checks if `value` is classified as a `WeakMap` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
     * @example
     *
     * _.isWeakMap(new WeakMap);
     * // => true
     *
     * _.isWeakMap(new Map);
     * // => false
     */
    function isWeakMap(value) {
      return isObjectLike(value) && getTag(value) == weakMapTag;
    }

    /**
     * Checks if `value` is classified as a `WeakSet` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
     * @example
     *
     * _.isWeakSet(new WeakSet);
     * // => true
     *
     * _.isWeakSet(new Set);
     * // => false
     */
    function isWeakSet(value) {
      return isObjectLike(value) && baseGetTag(value) == weakSetTag;
    }

    /**
     * Checks if `value` is less than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     * @see _.gt
     * @example
     *
     * _.lt(1, 3);
     * // => true
     *
     * _.lt(3, 3);
     * // => false
     *
     * _.lt(3, 1);
     * // => false
     */
    var lt = createRelationalOperation(baseLt);

    /**
     * Checks if `value` is less than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than or equal to
     *  `other`, else `false`.
     * @see _.gte
     * @example
     *
     * _.lte(1, 3);
     * // => true
     *
     * _.lte(3, 3);
     * // => true
     *
     * _.lte(3, 1);
     * // => false
     */
    var lte = createRelationalOperation(function(value, other) {
      return value <= other;
    });

    /**
     * Converts `value` to an array.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Array} Returns the converted array.
     * @example
     *
     * _.toArray({ 'a': 1, 'b': 2 });
     * // => [1, 2]
     *
     * _.toArray('abc');
     * // => ['a', 'b', 'c']
     *
     * _.toArray(1);
     * // => []
     *
     * _.toArray(null);
     * // => []
     */
    function toArray(value) {
      if (!value) {
        return [];
      }
      if (isArrayLike(value)) {
        return isString(value) ? stringToArray(value) : copyArray(value);
      }
      if (symIterator && value[symIterator]) {
        return iteratorToArray(value[symIterator]());
      }
      var tag = getTag(value),
          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);

      return func(value);
    }

    /**
     * Converts `value` to a finite number.
     *
     * @static
     * @memberOf _
     * @since 4.12.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted number.
     * @example
     *
     * _.toFinite(3.2);
     * // => 3.2
     *
     * _.toFinite(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toFinite(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toFinite('3.2');
     * // => 3.2
     */
    function toFinite(value) {
      if (!value) {
        return value === 0 ? value : 0;
      }
      value = toNumber(value);
      if (value === INFINITY || value === -INFINITY) {
        var sign = (value < 0 ? -1 : 1);
        return sign * MAX_INTEGER;
      }
      return value === value ? value : 0;
    }

    /**
     * Converts `value` to an integer.
     *
     * **Note:** This method is loosely based on
     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toInteger(3.2);
     * // => 3
     *
     * _.toInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toInteger(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toInteger('3.2');
     * // => 3
     */
    function toInteger(value) {
      var result = toFinite(value),
          remainder = result % 1;

      return result === result ? (remainder ? result - remainder : result) : 0;
    }

    /**
     * Converts `value` to an integer suitable for use as the length of an
     * array-like object.
     *
     * **Note:** This method is based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toLength(3.2);
     * // => 3
     *
     * _.toLength(Number.MIN_VALUE);
     * // => 0
     *
     * _.toLength(Infinity);
     * // => 4294967295
     *
     * _.toLength('3.2');
     * // => 3
     */
    function toLength(value) {
      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
    }

    /**
     * Converts `value` to a number.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     * @example
     *
     * _.toNumber(3.2);
     * // => 3.2
     *
     * _.toNumber(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toNumber(Infinity);
     * // => Infinity
     *
     * _.toNumber('3.2');
     * // => 3.2
     */
    function toNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      if (isObject(value)) {
        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
        value = isObject(other) ? (other + '') : other;
      }
      if (typeof value != 'string') {
        return value === 0 ? value : +value;
      }
      value = value.replace(reTrim, '');
      var isBinary = reIsBinary.test(value);
      return (isBinary || reIsOctal.test(value))
        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
    }

    /**
     * Converts `value` to a plain object flattening inherited enumerable string
     * keyed properties of `value` to own properties of the plain object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Object} Returns the converted plain object.
     * @example
     *
     * function Foo() {
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.assign({ 'a': 1 }, new Foo);
     * // => { 'a': 1, 'b': 2 }
     *
     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
     * // => { 'a': 1, 'b': 2, 'c': 3 }
     */
    function toPlainObject(value) {
      return copyObject(value, keysIn(value));
    }

    /**
     * Converts `value` to a safe integer. A safe integer can be compared and
     * represented correctly.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toSafeInteger(3.2);
     * // => 3
     *
     * _.toSafeInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toSafeInteger(Infinity);
     * // => 9007199254740991
     *
     * _.toSafeInteger('3.2');
     * // => 3
     */
    function toSafeInteger(value) {
      return value
        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
        : (value === 0 ? value : 0);
    }

    /**
     * Converts `value` to a string. An empty string is returned for `null`
     * and `undefined` values. The sign of `-0` is preserved.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.toString(null);
     * // => ''
     *
     * _.toString(-0);
     * // => '-0'
     *
     * _.toString([1, 2, 3]);
     * // => '1,2,3'
     */
    function toString(value) {
      return value == null ? '' : baseToString(value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Assigns own enumerable string keyed properties of source objects to the
     * destination object. Source objects are applied from left to right.
     * Subsequent sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object` and is loosely based on
     * [`Object.assign`](https://mdn.io/Object/assign).
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assignIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assign({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'c': 3 }
     */
    var assign = createAssigner(function(object, source) {
      if (isPrototype(source) || isArrayLike(source)) {
        copyObject(source, keys(source), object);
        return;
      }
      for (var key in source) {
        if (hasOwnProperty.call(source, key)) {
          assignValue(object, key, source[key]);
        }
      }
    });

    /**
     * This method is like `_.assign` except that it iterates over own and
     * inherited source properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extend
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assign
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assignIn({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
     */
    var assignIn = createAssigner(function(object, source) {
      copyObject(source, keysIn(source), object);
    });

    /**
     * This method is like `_.assignIn` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extendWith
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignInWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keysIn(source), object, customizer);
    });

    /**
     * This method is like `_.assign` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignInWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keys(source), object, customizer);
    });

    /**
     * Creates an array of values corresponding to `paths` of `object`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Array} Returns the picked values.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _.at(object, ['a[0].b.c', 'a[1]']);
     * // => [3, 4]
     */
    var at = flatRest(baseAt);

    /**
     * Creates an object that inherits from the `prototype` object. If a
     * `properties` object is given, its own enumerable string keyed properties
     * are assigned to the created object.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Object
     * @param {Object} prototype The object to inherit from.
     * @param {Object} [properties] The properties to assign to the object.
     * @returns {Object} Returns the new object.
     * @example
     *
     * function Shape() {
     *   this.x = 0;
     *   this.y = 0;
     * }
     *
     * function Circle() {
     *   Shape.call(this);
     * }
     *
     * Circle.prototype = _.create(Shape.prototype, {
     *   'constructor': Circle
     * });
     *
     * var circle = new Circle;
     * circle instanceof Circle;
     * // => true
     *
     * circle instanceof Shape;
     * // => true
     */
    function create(prototype, properties) {
      var result = baseCreate(prototype);
      return properties == null ? result : baseAssign(result, properties);
    }

    /**
     * Assigns own and inherited enumerable string keyed properties of source
     * objects to the destination object for all destination properties that
     * resolve to `undefined`. Source objects are applied from left to right.
     * Once a property is set, additional values of the same property are ignored.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaultsDeep
     * @example
     *
     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var defaults = baseRest(function(object, sources) {
      object = Object(object);

      var index = -1;
      var length = sources.length;
      var guard = length > 2 ? sources[2] : undefined;

      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
        length = 1;
      }

      while (++index < length) {
        var source = sources[index];
        var props = keysIn(source);
        var propsIndex = -1;
        var propsLength = props.length;

        while (++propsIndex < propsLength) {
          var key = props[propsIndex];
          var value = object[key];

          if (value === undefined ||
              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
            object[key] = source[key];
          }
        }
      }

      return object;
    });

    /**
     * This method is like `_.defaults` except that it recursively assigns
     * default properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaults
     * @example
     *
     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
     * // => { 'a': { 'b': 2, 'c': 3 } }
     */
    var defaultsDeep = baseRest(function(args) {
      args.push(undefined, customDefaultsMerge);
      return apply(mergeWith, undefined, args);
    });

    /**
     * This method is like `_.find` except that it returns the key of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findKey(users, function(o) { return o.age < 40; });
     * // => 'barney' (iteration order is not guaranteed)
     *
     * // The `_.matches` iteratee shorthand.
     * _.findKey(users, { 'age': 1, 'active': true });
     * // => 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findKey(users, 'active');
     * // => 'barney'
     */
    function findKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
    }

    /**
     * This method is like `_.findKey` except that it iterates over elements of
     * a collection in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findLastKey(users, function(o) { return o.age < 40; });
     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastKey(users, { 'age': 36, 'active': true });
     * // => 'barney'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastKey(users, 'active');
     * // => 'pebbles'
     */
    function findLastKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
    }

    /**
     * Iterates over own and inherited enumerable string keyed properties of an
     * object and invokes `iteratee` for each property. The iteratee is invoked
     * with three arguments: (value, key, object). Iteratee functions may exit
     * iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forInRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forIn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
     */
    function forIn(object, iteratee) {
      return object == null
        ? object
        : baseFor(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * This method is like `_.forIn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forInRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
     */
    function forInRight(object, iteratee) {
      return object == null
        ? object
        : baseForRight(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * Iterates over own enumerable string keyed properties of an object and
     * invokes `iteratee` for each property. The iteratee is invoked with three
     * arguments: (value, key, object). Iteratee functions may exit iteration
     * early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwnRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forOwn(object, iteratee) {
      return object && baseForOwn(object, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forOwn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwnRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
     */
    function forOwnRight(object, iteratee) {
      return object && baseForOwnRight(object, getIteratee(iteratee, 3));
    }

    /**
     * Creates an array of function property names from own enumerable properties
     * of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functionsIn
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functions(new Foo);
     * // => ['a', 'b']
     */
    function functions(object) {
      return object == null ? [] : baseFunctions(object, keys(object));
    }

    /**
     * Creates an array of function property names from own and inherited
     * enumerable properties of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functions
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functionsIn(new Foo);
     * // => ['a', 'b', 'c']
     */
    function functionsIn(object) {
      return object == null ? [] : baseFunctions(object, keysIn(object));
    }

    /**
     * Gets the value at `path` of `object`. If the resolved value is
     * `undefined`, the `defaultValue` is returned in its place.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.get(object, 'a[0].b.c');
     * // => 3
     *
     * _.get(object, ['a', '0', 'b', 'c']);
     * // => 3
     *
     * _.get(object, 'a.b.c', 'default');
     * // => 'default'
     */
    function get(object, path, defaultValue) {
      var result = object == null ? undefined : baseGet(object, path);
      return result === undefined ? defaultValue : result;
    }

    /**
     * Checks if `path` is a direct property of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = { 'a': { 'b': 2 } };
     * var other = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.has(object, 'a');
     * // => true
     *
     * _.has(object, 'a.b');
     * // => true
     *
     * _.has(object, ['a', 'b']);
     * // => true
     *
     * _.has(other, 'a');
     * // => false
     */
    function has(object, path) {
      return object != null && hasPath(object, path, baseHas);
    }

    /**
     * Checks if `path` is a direct or inherited property of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.hasIn(object, 'a');
     * // => true
     *
     * _.hasIn(object, 'a.b');
     * // => true
     *
     * _.hasIn(object, ['a', 'b']);
     * // => true
     *
     * _.hasIn(object, 'b');
     * // => false
     */
    function hasIn(object, path) {
      return object != null && hasPath(object, path, baseHasIn);
    }

    /**
     * Creates an object composed of the inverted keys and values of `object`.
     * If `object` contains duplicate values, subsequent values overwrite
     * property assignments of previous values.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Object
     * @param {Object} object The object to invert.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invert(object);
     * // => { '1': 'c', '2': 'b' }
     */
    var invert = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      result[value] = key;
    }, constant(identity));

    /**
     * This method is like `_.invert` except that the inverted object is generated
     * from the results of running each element of `object` thru `iteratee`. The
     * corresponding inverted value of each inverted key is an array of keys
     * responsible for generating the inverted value. The iteratee is invoked
     * with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Object
     * @param {Object} object The object to invert.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invertBy(object);
     * // => { '1': ['a', 'c'], '2': ['b'] }
     *
     * _.invertBy(object, function(value) {
     *   return 'group' + value;
     * });
     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
     */
    var invertBy = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      if (hasOwnProperty.call(result, value)) {
        result[value].push(key);
      } else {
        result[value] = [key];
      }
    }, getIteratee);

    /**
     * Invokes the method at `path` of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
     *
     * _.invoke(object, 'a[0].b.c.slice', 1, 3);
     * // => [2, 3]
     */
    var invoke = baseRest(baseInvoke);

    /**
     * Creates an array of the own enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects. See the
     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * for more details.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keys(new Foo);
     * // => ['a', 'b'] (iteration order is not guaranteed)
     *
     * _.keys('hi');
     * // => ['0', '1']
     */
    function keys(object) {
      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
    }

    /**
     * Creates an array of the own and inherited enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keysIn(new Foo);
     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
     */
    function keysIn(object) {
      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
    }

    /**
     * The opposite of `_.mapValues`; this method creates an object with the
     * same values as `object` and keys generated by running each own enumerable
     * string keyed property of `object` thru `iteratee`. The iteratee is invoked
     * with three arguments: (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapValues
     * @example
     *
     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
     *   return key + value;
     * });
     * // => { 'a1': 1, 'b2': 2 }
     */
    function mapKeys(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, iteratee(value, key, object), value);
      });
      return result;
    }

    /**
     * Creates an object with the same keys as `object` and values generated
     * by running each own enumerable string keyed property of `object` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapKeys
     * @example
     *
     * var users = {
     *   'fred':    { 'user': 'fred',    'age': 40 },
     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
     * };
     *
     * _.mapValues(users, function(o) { return o.age; });
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     *
     * // The `_.property` iteratee shorthand.
     * _.mapValues(users, 'age');
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     */
    function mapValues(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, key, iteratee(value, key, object));
      });
      return result;
    }

    /**
     * This method is like `_.assign` except that it recursively merges own and
     * inherited enumerable string keyed properties of source objects into the
     * destination object. Source properties that resolve to `undefined` are
     * skipped if a destination value exists. Array and plain object properties
     * are merged recursively. Other objects and value types are overridden by
     * assignment. Source objects are applied from left to right. Subsequent
     * sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {
     *   'a': [{ 'b': 2 }, { 'd': 4 }]
     * };
     *
     * var other = {
     *   'a': [{ 'c': 3 }, { 'e': 5 }]
     * };
     *
     * _.merge(object, other);
     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
     */
    var merge = createAssigner(function(object, source, srcIndex) {
      baseMerge(object, source, srcIndex);
    });

    /**
     * This method is like `_.merge` except that it accepts `customizer` which
     * is invoked to produce the merged values of the destination and source
     * properties. If `customizer` returns `undefined`, merging is handled by the
     * method instead. The `customizer` is invoked with six arguments:
     * (objValue, srcValue, key, object, source, stack).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} customizer The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   if (_.isArray(objValue)) {
     *     return objValue.concat(srcValue);
     *   }
     * }
     *
     * var object = { 'a': [1], 'b': [2] };
     * var other = { 'a': [3], 'b': [4] };
     *
     * _.mergeWith(object, other, customizer);
     * // => { 'a': [1, 3], 'b': [2, 4] }
     */
    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
      baseMerge(object, source, srcIndex, customizer);
    });

    /**
     * The opposite of `_.pick`; this method creates an object composed of the
     * own and inherited enumerable property paths of `object` that are not omitted.
     *
     * **Note:** This method is considerably slower than `_.pick`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to omit.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omit(object, ['a', 'c']);
     * // => { 'b': '2' }
     */
    var omit = flatRest(function(object, paths) {
      var result = {};
      if (object == null) {
        return result;
      }
      var isDeep = false;
      paths = arrayMap(paths, function(path) {
        path = castPath(path, object);
        isDeep || (isDeep = path.length > 1);
        return path;
      });
      copyObject(object, getAllKeysIn(object), result);
      if (isDeep) {
        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
      }
      var length = paths.length;
      while (length--) {
        baseUnset(result, paths[length]);
      }
      return result;
    });

    /**
     * The opposite of `_.pickBy`; this method creates an object composed of
     * the own and inherited enumerable string keyed properties of `object` that
     * `predicate` doesn't return truthy for. The predicate is invoked with two
     * arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omitBy(object, _.isNumber);
     * // => { 'b': '2' }
     */
    function omitBy(object, predicate) {
      return pickBy(object, negate(getIteratee(predicate)));
    }

    /**
     * Creates an object composed of the picked `object` properties.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pick(object, ['a', 'c']);
     * // => { 'a': 1, 'c': 3 }
     */
    var pick = flatRest(function(object, paths) {
      return object == null ? {} : basePick(object, paths);
    });

    /**
     * Creates an object composed of the `object` properties `predicate` returns
     * truthy for. The predicate is invoked with two arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pickBy(object, _.isNumber);
     * // => { 'a': 1, 'c': 3 }
     */
    function pickBy(object, predicate) {
      if (object == null) {
        return {};
      }
      var props = arrayMap(getAllKeysIn(object), function(prop) {
        return [prop];
      });
      predicate = getIteratee(predicate);
      return basePickBy(object, props, function(value, path) {
        return predicate(value, path[0]);
      });
    }

    /**
     * This method is like `_.get` except that if the resolved value is a
     * function it's invoked with the `this` binding of its parent object and
     * its result is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to resolve.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
     *
     * _.result(object, 'a[0].b.c1');
     * // => 3
     *
     * _.result(object, 'a[0].b.c2');
     * // => 4
     *
     * _.result(object, 'a[0].b.c3', 'default');
     * // => 'default'
     *
     * _.result(object, 'a[0].b.c3', _.constant('default'));
     * // => 'default'
     */
    function result(object, path, defaultValue) {
      path = castPath(path, object);

      var index = -1,
          length = path.length;

      // Ensure the loop is entered when path is empty.
      if (!length) {
        length = 1;
        object = undefined;
      }
      while (++index < length) {
        var value = object == null ? undefined : object[toKey(path[index])];
        if (value === undefined) {
          index = length;
          value = defaultValue;
        }
        object = isFunction(value) ? value.call(object) : value;
      }
      return object;
    }

    /**
     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
     * it's created. Arrays are created for missing index properties while objects
     * are created for all other missing properties. Use `_.setWith` to customize
     * `path` creation.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.set(object, 'a[0].b.c', 4);
     * console.log(object.a[0].b.c);
     * // => 4
     *
     * _.set(object, ['x', '0', 'y', 'z'], 5);
     * console.log(object.x[0].y.z);
     * // => 5
     */
    function set(object, path, value) {
      return object == null ? object : baseSet(object, path, value);
    }

    /**
     * This method is like `_.set` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.setWith(object, '[0][1]', 'a', Object);
     * // => { '0': { '1': 'a' } }
     */
    function setWith(object, path, value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseSet(object, path, value, customizer);
    }

    /**
     * Creates an array of own enumerable string keyed-value pairs for `object`
     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
     * entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entries
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairs(new Foo);
     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
     */
    var toPairs = createToPairs(keys);

    /**
     * Creates an array of own and inherited enumerable string keyed-value pairs
     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
     * or set, its entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entriesIn
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairsIn(new Foo);
     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
     */
    var toPairsIn = createToPairs(keysIn);

    /**
     * An alternative to `_.reduce`; this method transforms `object` to a new
     * `accumulator` object which is the result of running each of its own
     * enumerable string keyed properties thru `iteratee`, with each invocation
     * potentially mutating the `accumulator` object. If `accumulator` is not
     * provided, a new object with the same `[[Prototype]]` will be used. The
     * iteratee is invoked with four arguments: (accumulator, value, key, object).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The custom accumulator value.
     * @returns {*} Returns the accumulated value.
     * @example
     *
     * _.transform([2, 3, 4], function(result, n) {
     *   result.push(n *= n);
     *   return n % 2 == 0;
     * }, []);
     * // => [4, 9]
     *
     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] }
     */
    function transform(object, iteratee, accumulator) {
      var isArr = isArray(object),
          isArrLike = isArr || isBuffer(object) || isTypedArray(object);

      iteratee = getIteratee(iteratee, 4);
      if (accumulator == null) {
        var Ctor = object && object.constructor;
        if (isArrLike) {
          accumulator = isArr ? new Ctor : [];
        }
        else if (isObject(object)) {
          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
        }
        else {
          accumulator = {};
        }
      }
      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
        return iteratee(accumulator, value, index, object);
      });
      return accumulator;
    }

    /**
     * Removes the property at `path` of `object`.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 7 } }] };
     * _.unset(object, 'a[0].b.c');
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     *
     * _.unset(object, ['a', '0', 'b', 'c']);
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     */
    function unset(object, path) {
      return object == null ? true : baseUnset(object, path);
    }

    /**
     * This method is like `_.set` except that accepts `updater` to produce the
     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
     * is invoked with one argument: (value).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.update(object, 'a[0].b.c', function(n) { return n * n; });
     * console.log(object.a[0].b.c);
     * // => 9
     *
     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
     * console.log(object.x[0].y.z);
     * // => 0
     */
    function update(object, path, updater) {
      return object == null ? object : baseUpdate(object, path, castFunction(updater));
    }

    /**
     * This method is like `_.update` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.updateWith(object, '[0][1]', _.constant('a'), Object);
     * // => { '0': { '1': 'a' } }
     */
    function updateWith(object, path, updater, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
    }

    /**
     * Creates an array of the own enumerable string keyed property values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.values(new Foo);
     * // => [1, 2] (iteration order is not guaranteed)
     *
     * _.values('hi');
     * // => ['h', 'i']
     */
    function values(object) {
      return object == null ? [] : baseValues(object, keys(object));
    }

    /**
     * Creates an array of the own and inherited enumerable string keyed property
     * values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.valuesIn(new Foo);
     * // => [1, 2, 3] (iteration order is not guaranteed)
     */
    function valuesIn(object) {
      return object == null ? [] : baseValues(object, keysIn(object));
    }

    /*------------------------------------------------------------------------*/

    /**
     * Clamps `number` within the inclusive `lower` and `upper` bounds.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Number
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     * @example
     *
     * _.clamp(-10, -5, 5);
     * // => -5
     *
     * _.clamp(10, -5, 5);
     * // => 5
     */
    function clamp(number, lower, upper) {
      if (upper === undefined) {
        upper = lower;
        lower = undefined;
      }
      if (upper !== undefined) {
        upper = toNumber(upper);
        upper = upper === upper ? upper : 0;
      }
      if (lower !== undefined) {
        lower = toNumber(lower);
        lower = lower === lower ? lower : 0;
      }
      return baseClamp(toNumber(number), lower, upper);
    }

    /**
     * Checks if `n` is between `start` and up to, but not including, `end`. If
     * `end` is not specified, it's set to `start` with `start` then set to `0`.
     * If `start` is greater than `end` the params are swapped to support
     * negative ranges.
     *
     * @static
     * @memberOf _
     * @since 3.3.0
     * @category Number
     * @param {number} number The number to check.
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     * @see _.range, _.rangeRight
     * @example
     *
     * _.inRange(3, 2, 4);
     * // => true
     *
     * _.inRange(4, 8);
     * // => true
     *
     * _.inRange(4, 2);
     * // => false
     *
     * _.inRange(2, 2);
     * // => false
     *
     * _.inRange(1.2, 2);
     * // => true
     *
     * _.inRange(5.2, 4);
     * // => false
     *
     * _.inRange(-3, -2, -6);
     * // => true
     */
    function inRange(number, start, end) {
      start = toFinite(start);
      if (end === undefined) {
        end = start;
        start = 0;
      } else {
        end = toFinite(end);
      }
      number = toNumber(number);
      return baseInRange(number, start, end);
    }

    /**
     * Produces a random number between the inclusive `lower` and `upper` bounds.
     * If only one argument is provided a number between `0` and the given number
     * is returned. If `floating` is `true`, or either `lower` or `upper` are
     * floats, a floating-point number is returned instead of an integer.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Number
     * @param {number} [lower=0] The lower bound.
     * @param {number} [upper=1] The upper bound.
     * @param {boolean} [floating] Specify returning a floating-point number.
     * @returns {number} Returns the random number.
     * @example
     *
     * _.random(0, 5);
     * // => an integer between 0 and 5
     *
     * _.random(5);
     * // => also an integer between 0 and 5
     *
     * _.random(5, true);
     * // => a floating-point number between 0 and 5
     *
     * _.random(1.2, 5.2);
     * // => a floating-point number between 1.2 and 5.2
     */
    function random(lower, upper, floating) {
      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
        upper = floating = undefined;
      }
      if (floating === undefined) {
        if (typeof upper == 'boolean') {
          floating = upper;
          upper = undefined;
        }
        else if (typeof lower == 'boolean') {
          floating = lower;
          lower = undefined;
        }
      }
      if (lower === undefined && upper === undefined) {
        lower = 0;
        upper = 1;
      }
      else {
        lower = toFinite(lower);
        if (upper === undefined) {
          upper = lower;
          lower = 0;
        } else {
          upper = toFinite(upper);
        }
      }
      if (lower > upper) {
        var temp = lower;
        lower = upper;
        upper = temp;
      }
      if (floating || lower % 1 || upper % 1) {
        var rand = nativeRandom();
        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
      }
      return baseRandom(lower, upper);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the camel cased string.
     * @example
     *
     * _.camelCase('Foo Bar');
     * // => 'fooBar'
     *
     * _.camelCase('--foo-bar--');
     * // => 'fooBar'
     *
     * _.camelCase('__FOO_BAR__');
     * // => 'fooBar'
     */
    var camelCase = createCompounder(function(result, word, index) {
      word = word.toLowerCase();
      return result + (index ? capitalize(word) : word);
    });

    /**
     * Converts the first character of `string` to upper case and the remaining
     * to lower case.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to capitalize.
     * @returns {string} Returns the capitalized string.
     * @example
     *
     * _.capitalize('FRED');
     * // => 'Fred'
     */
    function capitalize(string) {
      return upperFirst(toString(string).toLowerCase());
    }

    /**
     * Deburrs `string` by converting
     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
     * letters to basic Latin letters and removing
     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to deburr.
     * @returns {string} Returns the deburred string.
     * @example
     *
     * _.deburr('déjà vu');
     * // => 'deja vu'
     */
    function deburr(string) {
      string = toString(string);
      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
    }

    /**
     * Checks if `string` ends with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=string.length] The position to search up to.
     * @returns {boolean} Returns `true` if `string` ends with `target`,
     *  else `false`.
     * @example
     *
     * _.endsWith('abc', 'c');
     * // => true
     *
     * _.endsWith('abc', 'b');
     * // => false
     *
     * _.endsWith('abc', 'b', 2);
     * // => true
     */
    function endsWith(string, target, position) {
      string = toString(string);
      target = baseToString(target);

      var length = string.length;
      position = position === undefined
        ? length
        : baseClamp(toInteger(position), 0, length);

      var end = position;
      position -= target.length;
      return position >= 0 && string.slice(position, end) == target;
    }

    /**
     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
     * corresponding HTML entities.
     *
     * **Note:** No other characters are escaped. To escape additional
     * characters use a third-party library like [_he_](https://mths.be/he).
     *
     * Though the ">" character is escaped for symmetry, characters like
     * ">" and "/" don't need escaping in HTML and have no special meaning
     * unless they're part of a tag or unquoted attribute value. See
     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
     * (under "semi-related fun fact") for more details.
     *
     * When working with HTML you should always
     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
     * XSS vectors.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escape('fred, barney, & pebbles');
     * // => 'fred, barney, &amp; pebbles'
     */
    function escape(string) {
      string = toString(string);
      return (string && reHasUnescapedHtml.test(string))
        ? string.replace(reUnescapedHtml, escapeHtmlChar)
        : string;
    }

    /**
     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escapeRegExp('[lodash](https://lodash.com/)');
     * // => '\[lodash\]\(https://lodash\.com/\)'
     */
    function escapeRegExp(string) {
      string = toString(string);
      return (string && reHasRegExpChar.test(string))
        ? string.replace(reRegExpChar, '\\$&')
        : string;
    }

    /**
     * Converts `string` to
     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the kebab cased string.
     * @example
     *
     * _.kebabCase('Foo Bar');
     * // => 'foo-bar'
     *
     * _.kebabCase('fooBar');
     * // => 'foo-bar'
     *
     * _.kebabCase('__FOO_BAR__');
     * // => 'foo-bar'
     */
    var kebabCase = createCompounder(function(result, word, index) {
      return result + (index ? '-' : '') + word.toLowerCase();
    });

    /**
     * Converts `string`, as space separated words, to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.lowerCase('--Foo-Bar--');
     * // => 'foo bar'
     *
     * _.lowerCase('fooBar');
     * // => 'foo bar'
     *
     * _.lowerCase('__FOO_BAR__');
     * // => 'foo bar'
     */
    var lowerCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toLowerCase();
    });

    /**
     * Converts the first character of `string` to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.lowerFirst('Fred');
     * // => 'fred'
     *
     * _.lowerFirst('FRED');
     * // => 'fRED'
     */
    var lowerFirst = createCaseFirst('toLowerCase');

    /**
     * Pads `string` on the left and right sides if it's shorter than `length`.
     * Padding characters are truncated if they can't be evenly divided by `length`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.pad('abc', 8);
     * // => '  abc   '
     *
     * _.pad('abc', 8, '_-');
     * // => '_-abc_-_'
     *
     * _.pad('abc', 3);
     * // => 'abc'
     */
    function pad(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      if (!length || strLength >= length) {
        return string;
      }
      var mid = (length - strLength) / 2;
      return (
        createPadding(nativeFloor(mid), chars) +
        string +
        createPadding(nativeCeil(mid), chars)
      );
    }

    /**
     * Pads `string` on the right side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padEnd('abc', 6);
     * // => 'abc   '
     *
     * _.padEnd('abc', 6, '_-');
     * // => 'abc_-_'
     *
     * _.padEnd('abc', 3);
     * // => 'abc'
     */
    function padEnd(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (string + createPadding(length - strLength, chars))
        : string;
    }

    /**
     * Pads `string` on the left side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padStart('abc', 6);
     * // => '   abc'
     *
     * _.padStart('abc', 6, '_-');
     * // => '_-_abc'
     *
     * _.padStart('abc', 3);
     * // => 'abc'
     */
    function padStart(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (createPadding(length - strLength, chars) + string)
        : string;
    }

    /**
     * Converts `string` to an integer of the specified radix. If `radix` is
     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
     * hexadecimal, in which case a `radix` of `16` is used.
     *
     * **Note:** This method aligns with the
     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category String
     * @param {string} string The string to convert.
     * @param {number} [radix=10] The radix to interpret `value` by.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.parseInt('08');
     * // => 8
     *
     * _.map(['6', '08', '10'], _.parseInt);
     * // => [6, 8, 10]
     */
    function parseInt(string, radix, guard) {
      if (guard || radix == null) {
        radix = 0;
      } else if (radix) {
        radix = +radix;
      }
      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
    }

    /**
     * Repeats the given string `n` times.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to repeat.
     * @param {number} [n=1] The number of times to repeat the string.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the repeated string.
     * @example
     *
     * _.repeat('*', 3);
     * // => '***'
     *
     * _.repeat('abc', 2);
     * // => 'abcabc'
     *
     * _.repeat('abc', 0);
     * // => ''
     */
    function repeat(string, n, guard) {
      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      return baseRepeat(toString(string), n);
    }

    /**
     * Replaces matches for `pattern` in `string` with `replacement`.
     *
     * **Note:** This method is based on
     * [`String#replace`](https://mdn.io/String/replace).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to modify.
     * @param {RegExp|string} pattern The pattern to replace.
     * @param {Function|string} replacement The match replacement.
     * @returns {string} Returns the modified string.
     * @example
     *
     * _.replace('Hi Fred', 'Fred', 'Barney');
     * // => 'Hi Barney'
     */
    function replace() {
      var args = arguments,
          string = toString(args[0]);

      return args.length < 3 ? string : string.replace(args[1], args[2]);
    }

    /**
     * Converts `string` to
     * [snake case](https://en.wikipedia.org/wiki/Snake_case).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the snake cased string.
     * @example
     *
     * _.snakeCase('Foo Bar');
     * // => 'foo_bar'
     *
     * _.snakeCase('fooBar');
     * // => 'foo_bar'
     *
     * _.snakeCase('--FOO-BAR--');
     * // => 'foo_bar'
     */
    var snakeCase = createCompounder(function(result, word, index) {
      return result + (index ? '_' : '') + word.toLowerCase();
    });

    /**
     * Splits `string` by `separator`.
     *
     * **Note:** This method is based on
     * [`String#split`](https://mdn.io/String/split).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to split.
     * @param {RegExp|string} separator The separator pattern to split by.
     * @param {number} [limit] The length to truncate results to.
     * @returns {Array} Returns the string segments.
     * @example
     *
     * _.split('a-b-c', '-', 2);
     * // => ['a', 'b']
     */
    function split(string, separator, limit) {
      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
        separator = limit = undefined;
      }
      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
      if (!limit) {
        return [];
      }
      string = toString(string);
      if (string && (
            typeof separator == 'string' ||
            (separator != null && !isRegExp(separator))
          )) {
        separator = baseToString(separator);
        if (!separator && hasUnicode(string)) {
          return castSlice(stringToArray(string), 0, limit);
        }
      }
      return string.split(separator, limit);
    }

    /**
     * Converts `string` to
     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
     *
     * @static
     * @memberOf _
     * @since 3.1.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the start cased string.
     * @example
     *
     * _.startCase('--foo-bar--');
     * // => 'Foo Bar'
     *
     * _.startCase('fooBar');
     * // => 'Foo Bar'
     *
     * _.startCase('__FOO_BAR__');
     * // => 'FOO BAR'
     */
    var startCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + upperFirst(word);
    });

    /**
     * Checks if `string` starts with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=0] The position to search from.
     * @returns {boolean} Returns `true` if `string` starts with `target`,
     *  else `false`.
     * @example
     *
     * _.startsWith('abc', 'a');
     * // => true
     *
     * _.startsWith('abc', 'b');
     * // => false
     *
     * _.startsWith('abc', 'b', 1);
     * // => true
     */
    function startsWith(string, target, position) {
      string = toString(string);
      position = position == null
        ? 0
        : baseClamp(toInteger(position), 0, string.length);

      target = baseToString(target);
      return string.slice(position, position + target.length) == target;
    }

    /**
     * Creates a compiled template function that can interpolate data properties
     * in "interpolate" delimiters, HTML-escape interpolated data properties in
     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
     * properties may be accessed as free variables in the template. If a setting
     * object is given, it takes precedence over `_.templateSettings` values.
     *
     * **Note:** In the development build `_.template` utilizes
     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
     * for easier debugging.
     *
     * For more information on precompiling templates see
     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
     *
     * For more information on Chrome extension sandboxes see
     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The template string.
     * @param {Object} [options={}] The options object.
     * @param {RegExp} [options.escape=_.templateSettings.escape]
     *  The HTML "escape" delimiter.
     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
     *  The "evaluate" delimiter.
     * @param {Object} [options.imports=_.templateSettings.imports]
     *  An object to import into the template as free variables.
     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
     *  The "interpolate" delimiter.
     * @param {string} [options.sourceURL='lodash.templateSources[n]']
     *  The sourceURL of the compiled template.
     * @param {string} [options.variable='obj']
     *  The data object variable name.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the compiled template function.
     * @example
     *
     * // Use the "interpolate" delimiter to create a compiled template.
     * var compiled = _.template('hello <%= user %>!');
     * compiled({ 'user': 'fred' });
     * // => 'hello fred!'
     *
     * // Use the HTML "escape" delimiter to escape data property values.
     * var compiled = _.template('<b><%- value %></b>');
     * compiled({ 'value': '<script>' });
     * // => '<b>&lt;script&gt;</b>'
     *
     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the internal `print` function in "evaluate" delimiters.
     * var compiled = _.template('<% print("hello " + user); %>!');
     * compiled({ 'user': 'barney' });
     * // => 'hello barney!'
     *
     * // Use the ES template literal delimiter as an "interpolate" delimiter.
     * // Disable support by replacing the "interpolate" delimiter.
     * var compiled = _.template('hello ${ user }!');
     * compiled({ 'user': 'pebbles' });
     * // => 'hello pebbles!'
     *
     * // Use backslashes to treat delimiters as plain text.
     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
     * compiled({ 'value': 'ignored' });
     * // => '<%- value %>'
     *
     * // Use the `imports` option to import `jQuery` as `jq`.
     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
     * compiled(data);
     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
     *
     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
     * compiled.source;
     * // => function(data) {
     * //   var __t, __p = '';
     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
     * //   return __p;
     * // }
     *
     * // Use custom template delimiters.
     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
     * var compiled = _.template('hello {{ user }}!');
     * compiled({ 'user': 'mustache' });
     * // => 'hello mustache!'
     *
     * // Use the `source` property to inline compiled templates for meaningful
     * // line numbers in error messages and stack traces.
     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
     *   var JST = {\
     *     "main": ' + _.template(mainText).source + '\
     *   };\
     * ');
     */
    function template(string, options, guard) {
      // Based on John Resig's `tmpl` implementation
      // (http://ejohn.org/blog/javascript-micro-templating/)
      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
      var settings = lodash.templateSettings;

      if (guard && isIterateeCall(string, options, guard)) {
        options = undefined;
      }
      string = toString(string);
      options = assignInWith({}, options, settings, customDefaultsAssignIn);

      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
          importsKeys = keys(imports),
          importsValues = baseValues(imports, importsKeys);

      var isEscaping,
          isEvaluating,
          index = 0,
          interpolate = options.interpolate || reNoMatch,
          source = "__p += '";

      // Compile the regexp to match each delimiter.
      var reDelimiters = RegExp(
        (options.escape || reNoMatch).source + '|' +
        interpolate.source + '|' +
        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
        (options.evaluate || reNoMatch).source + '|$'
      , 'g');

      // Use a sourceURL for easier debugging.
      var sourceURL = '//# sourceURL=' +
        ('sourceURL' in options
          ? options.sourceURL
          : ('lodash.templateSources[' + (++templateCounter) + ']')
        ) + '\n';

      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
        interpolateValue || (interpolateValue = esTemplateValue);

        // Escape characters that can't be included in string literals.
        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);

        // Replace delimiters with snippets.
        if (escapeValue) {
          isEscaping = true;
          source += "' +\n__e(" + escapeValue + ") +\n'";
        }
        if (evaluateValue) {
          isEvaluating = true;
          source += "';\n" + evaluateValue + ";\n__p += '";
        }
        if (interpolateValue) {
          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
        }
        index = offset + match.length;

        // The JS engine embedded in Adobe products needs `match` returned in
        // order to produce the correct `offset` value.
        return match;
      });

      source += "';\n";

      // If `variable` is not specified wrap a with-statement around the generated
      // code to add the data object to the top of the scope chain.
      var variable = options.variable;
      if (!variable) {
        source = 'with (obj) {\n' + source + '\n}\n';
      }
      // Cleanup code by stripping empty strings.
      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
        .replace(reEmptyStringMiddle, '$1')
        .replace(reEmptyStringTrailing, '$1;');

      // Frame code as the function body.
      source = 'function(' + (variable || 'obj') + ') {\n' +
        (variable
          ? ''
          : 'obj || (obj = {});\n'
        ) +
        "var __t, __p = ''" +
        (isEscaping
           ? ', __e = _.escape'
           : ''
        ) +
        (isEvaluating
          ? ', __j = Array.prototype.join;\n' +
            "function print() { __p += __j.call(arguments, '') }\n"
          : ';\n'
        ) +
        source +
        'return __p\n}';

      var result = attempt(function() {
        return Function(importsKeys, sourceURL + 'return ' + source)
          .apply(undefined, importsValues);
      });

      // Provide the compiled function's source by its `toString` method or
      // the `source` property as a convenience for inlining compiled templates.
      result.source = source;
      if (isError(result)) {
        throw result;
      }
      return result;
    }

    /**
     * Converts `string`, as a whole, to lower case just like
     * [String#toLowerCase](https://mdn.io/toLowerCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.toLower('--Foo-Bar--');
     * // => '--foo-bar--'
     *
     * _.toLower('fooBar');
     * // => 'foobar'
     *
     * _.toLower('__FOO_BAR__');
     * // => '__foo_bar__'
     */
    function toLower(value) {
      return toString(value).toLowerCase();
    }

    /**
     * Converts `string`, as a whole, to upper case just like
     * [String#toUpperCase](https://mdn.io/toUpperCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.toUpper('--foo-bar--');
     * // => '--FOO-BAR--'
     *
     * _.toUpper('fooBar');
     * // => 'FOOBAR'
     *
     * _.toUpper('__foo_bar__');
     * // => '__FOO_BAR__'
     */
    function toUpper(value) {
      return toString(value).toUpperCase();
    }

    /**
     * Removes leading and trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trim('  abc  ');
     * // => 'abc'
     *
     * _.trim('-_-abc-_-', '_-');
     * // => 'abc'
     *
     * _.map(['  foo  ', '  bar  '], _.trim);
     * // => ['foo', 'bar']
     */
    function trim(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrim, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          chrSymbols = stringToArray(chars),
          start = charsStartIndex(strSymbols, chrSymbols),
          end = charsEndIndex(strSymbols, chrSymbols) + 1;

      return castSlice(strSymbols, start, end).join('');
    }

    /**
     * Removes trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimEnd('  abc  ');
     * // => '  abc'
     *
     * _.trimEnd('-_-abc-_-', '_-');
     * // => '-_-abc'
     */
    function trimEnd(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrimEnd, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;

      return castSlice(strSymbols, 0, end).join('');
    }

    /**
     * Removes leading whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimStart('  abc  ');
     * // => 'abc  '
     *
     * _.trimStart('-_-abc-_-', '_-');
     * // => 'abc-_-'
     */
    function trimStart(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrimStart, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          start = charsStartIndex(strSymbols, stringToArray(chars));

      return castSlice(strSymbols, start).join('');
    }

    /**
     * Truncates `string` if it's longer than the given maximum string length.
     * The last characters of the truncated string are replaced with the omission
     * string which defaults to "...".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to truncate.
     * @param {Object} [options={}] The options object.
     * @param {number} [options.length=30] The maximum string length.
     * @param {string} [options.omission='...'] The string to indicate text is omitted.
     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
     * @returns {string} Returns the truncated string.
     * @example
     *
     * _.truncate('hi-diddly-ho there, neighborino');
     * // => 'hi-diddly-ho there, neighbo...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': ' '
     * });
     * // => 'hi-diddly-ho there,...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': /,? +/
     * });
     * // => 'hi-diddly-ho there...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'omission': ' [...]'
     * });
     * // => 'hi-diddly-ho there, neig [...]'
     */
    function truncate(string, options) {
      var length = DEFAULT_TRUNC_LENGTH,
          omission = DEFAULT_TRUNC_OMISSION;

      if (isObject(options)) {
        var separator = 'separator' in options ? options.separator : separator;
        length = 'length' in options ? toInteger(options.length) : length;
        omission = 'omission' in options ? baseToString(options.omission) : omission;
      }
      string = toString(string);

      var strLength = string.length;
      if (hasUnicode(string)) {
        var strSymbols = stringToArray(string);
        strLength = strSymbols.length;
      }
      if (length >= strLength) {
        return string;
      }
      var end = length - stringSize(omission);
      if (end < 1) {
        return omission;
      }
      var result = strSymbols
        ? castSlice(strSymbols, 0, end).join('')
        : string.slice(0, end);

      if (separator === undefined) {
        return result + omission;
      }
      if (strSymbols) {
        end += (result.length - end);
      }
      if (isRegExp(separator)) {
        if (string.slice(end).search(separator)) {
          var match,
              substring = result;

          if (!separator.global) {
            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
          }
          separator.lastIndex = 0;
          while ((match = separator.exec(substring))) {
            var newEnd = match.index;
          }
          result = result.slice(0, newEnd === undefined ? end : newEnd);
        }
      } else if (string.indexOf(baseToString(separator), end) != end) {
        var index = result.lastIndexOf(separator);
        if (index > -1) {
          result = result.slice(0, index);
        }
      }
      return result + omission;
    }

    /**
     * The inverse of `_.escape`; this method converts the HTML entities
     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
     * their corresponding characters.
     *
     * **Note:** No other HTML entities are unescaped. To unescape additional
     * HTML entities use a third-party library like [_he_](https://mths.be/he).
     *
     * @static
     * @memberOf _
     * @since 0.6.0
     * @category String
     * @param {string} [string=''] The string to unescape.
     * @returns {string} Returns the unescaped string.
     * @example
     *
     * _.unescape('fred, barney, &amp; pebbles');
     * // => 'fred, barney, & pebbles'
     */
    function unescape(string) {
      string = toString(string);
      return (string && reHasEscapedHtml.test(string))
        ? string.replace(reEscapedHtml, unescapeHtmlChar)
        : string;
    }

    /**
     * Converts `string`, as space separated words, to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.upperCase('--foo-bar');
     * // => 'FOO BAR'
     *
     * _.upperCase('fooBar');
     * // => 'FOO BAR'
     *
     * _.upperCase('__foo_bar__');
     * // => 'FOO BAR'
     */
    var upperCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toUpperCase();
    });

    /**
     * Converts the first character of `string` to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.upperFirst('fred');
     * // => 'Fred'
     *
     * _.upperFirst('FRED');
     * // => 'FRED'
     */
    var upperFirst = createCaseFirst('toUpperCase');

    /**
     * Splits `string` into an array of its words.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {RegExp|string} [pattern] The pattern to match words.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the words of `string`.
     * @example
     *
     * _.words('fred, barney, & pebbles');
     * // => ['fred', 'barney', 'pebbles']
     *
     * _.words('fred, barney, & pebbles', /[^, ]+/g);
     * // => ['fred', 'barney', '&', 'pebbles']
     */
    function words(string, pattern, guard) {
      string = toString(string);
      pattern = guard ? undefined : pattern;

      if (pattern === undefined) {
        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
      }
      return string.match(pattern) || [];
    }

    /*------------------------------------------------------------------------*/

    /**
     * Attempts to invoke `func`, returning either the result or the caught error
     * object. Any additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Function} func The function to attempt.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {*} Returns the `func` result or error object.
     * @example
     *
     * // Avoid throwing errors for invalid selectors.
     * var elements = _.attempt(function(selector) {
     *   return document.querySelectorAll(selector);
     * }, '>_>');
     *
     * if (_.isError(elements)) {
     *   elements = [];
     * }
     */
    var attempt = baseRest(function(func, args) {
      try {
        return apply(func, undefined, args);
      } catch (e) {
        return isError(e) ? e : new Error(e);
      }
    });

    /**
     * Binds methods of an object to the object itself, overwriting the existing
     * method.
     *
     * **Note:** This method doesn't set the "length" property of bound functions.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Object} object The object to bind and assign the bound methods to.
     * @param {...(string|string[])} methodNames The object method names to bind.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var view = {
     *   'label': 'docs',
     *   'click': function() {
     *     console.log('clicked ' + this.label);
     *   }
     * };
     *
     * _.bindAll(view, ['click']);
     * jQuery(element).on('click', view.click);
     * // => Logs 'clicked docs' when clicked.
     */
    var bindAll = flatRest(function(object, methodNames) {
      arrayEach(methodNames, function(key) {
        key = toKey(key);
        baseAssignValue(object, key, bind(object[key], object));
      });
      return object;
    });

    /**
     * Creates a function that iterates over `pairs` and invokes the corresponding
     * function of the first predicate to return truthy. The predicate-function
     * pairs are invoked with the `this` binding and arguments of the created
     * function.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Array} pairs The predicate-function pairs.
     * @returns {Function} Returns the new composite function.
     * @example
     *
     * var func = _.cond([
     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
     *   [_.stubTrue,                      _.constant('no match')]
     * ]);
     *
     * func({ 'a': 1, 'b': 2 });
     * // => 'matches A'
     *
     * func({ 'a': 0, 'b': 1 });
     * // => 'matches B'
     *
     * func({ 'a': '1', 'b': '2' });
     * // => 'no match'
     */
    function cond(pairs) {
      var length = pairs == null ? 0 : pairs.length,
          toIteratee = getIteratee();

      pairs = !length ? [] : arrayMap(pairs, function(pair) {
        if (typeof pair[1] != 'function') {
          throw new TypeError(FUNC_ERROR_TEXT);
        }
        return [toIteratee(pair[0]), pair[1]];
      });

      return baseRest(function(args) {
        var index = -1;
        while (++index < length) {
          var pair = pairs[index];
          if (apply(pair[0], this, args)) {
            return apply(pair[1], this, args);
          }
        }
      });
    }

    /**
     * Creates a function that invokes the predicate properties of `source` with
     * the corresponding property values of a given object, returning `true` if
     * all predicates return truthy, else `false`.
     *
     * **Note:** The created function is equivalent to `_.conformsTo` with
     * `source` partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 2, 'b': 1 },
     *   { 'a': 1, 'b': 2 }
     * ];
     *
     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
     * // => [{ 'a': 1, 'b': 2 }]
     */
    function conforms(source) {
      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that returns `value`.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {*} value The value to return from the new function.
     * @returns {Function} Returns the new constant function.
     * @example
     *
     * var objects = _.times(2, _.constant({ 'a': 1 }));
     *
     * console.log(objects);
     * // => [{ 'a': 1 }, { 'a': 1 }]
     *
     * console.log(objects[0] === objects[1]);
     * // => true
     */
    function constant(value) {
      return function() {
        return value;
      };
    }

    /**
     * Checks `value` to determine whether a default value should be returned in
     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
     * or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Util
     * @param {*} value The value to check.
     * @param {*} defaultValue The default value.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * _.defaultTo(1, 10);
     * // => 1
     *
     * _.defaultTo(undefined, 10);
     * // => 10
     */
    function defaultTo(value, defaultValue) {
      return (value == null || value !== value) ? defaultValue : value;
    }

    /**
     * Creates a function that returns the result of invoking the given functions
     * with the `this` binding of the created function, where each successive
     * invocation is supplied the return value of the previous.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flowRight
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flow([_.add, square]);
     * addSquare(1, 2);
     * // => 9
     */
    var flow = createFlow();

    /**
     * This method is like `_.flow` except that it creates a function that
     * invokes the given functions from right to left.
     *
     * @static
     * @since 3.0.0
     * @memberOf _
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flow
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flowRight([square, _.add]);
     * addSquare(1, 2);
     * // => 9
     */
    var flowRight = createFlow(true);

    /**
     * This method returns the first argument it receives.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {*} value Any value.
     * @returns {*} Returns `value`.
     * @example
     *
     * var object = { 'a': 1 };
     *
     * console.log(_.identity(object) === object);
     * // => true
     */
    function identity(value) {
      return value;
    }

    /**
     * Creates a function that invokes `func` with the arguments of the created
     * function. If `func` is a property name, the created function returns the
     * property value for a given element. If `func` is an array or object, the
     * created function returns `true` for elements that contain the equivalent
     * source properties, otherwise it returns `false`.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Util
     * @param {*} [func=_.identity] The value to convert to a callback.
     * @returns {Function} Returns the callback.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, _.iteratee(['user', 'fred']));
     * // => [{ 'user': 'fred', 'age': 40 }]
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, _.iteratee('user'));
     * // => ['barney', 'fred']
     *
     * // Create custom iteratee shorthands.
     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
     *     return func.test(string);
     *   };
     * });
     *
     * _.filter(['abc', 'def'], /ef/);
     * // => ['def']
     */
    function iteratee(func) {
      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between a given
     * object and `source`, returning `true` if the given object has equivalent
     * property values, else `false`.
     *
     * **Note:** The created function is equivalent to `_.isMatch` with `source`
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
     */
    function matches(source) {
      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between the
     * value at `path` of a given object to `srcValue`, returning `true` if the
     * object value is equivalent, else `false`.
     *
     * **Note:** Partial comparisons will match empty array and empty object
     * `srcValue` values against any array or object value, respectively. See
     * `_.isEqual` for a list of supported value comparisons.
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.find(objects, _.matchesProperty('a', 4));
     * // => { 'a': 4, 'b': 5, 'c': 6 }
     */
    function matchesProperty(path, srcValue) {
      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that invokes the method at `path` of a given object.
     * Any additional arguments are provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': _.constant(2) } },
     *   { 'a': { 'b': _.constant(1) } }
     * ];
     *
     * _.map(objects, _.method('a.b'));
     * // => [2, 1]
     *
     * _.map(objects, _.method(['a', 'b']));
     * // => [2, 1]
     */
    var method = baseRest(function(path, args) {
      return function(object) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * The opposite of `_.method`; this method creates a function that invokes
     * the method at a given path of `object`. Any additional arguments are
     * provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Object} object The object to query.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var array = _.times(3, _.constant),
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
     * // => [2, 0]
     */
    var methodOf = baseRest(function(object, args) {
      return function(path) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * Adds all own enumerable string keyed function properties of a source
     * object to the destination object. If `object` is a function, then methods
     * are added to its prototype as well.
     *
     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
     * avoid conflicts caused by modifying the original.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Function|Object} [object=lodash] The destination object.
     * @param {Object} source The object of functions to add.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
     * @returns {Function|Object} Returns `object`.
     * @example
     *
     * function vowels(string) {
     *   return _.filter(string, function(v) {
     *     return /[aeiou]/i.test(v);
     *   });
     * }
     *
     * _.mixin({ 'vowels': vowels });
     * _.vowels('fred');
     * // => ['e']
     *
     * _('fred').vowels().value();
     * // => ['e']
     *
     * _.mixin({ 'vowels': vowels }, { 'chain': false });
     * _('fred').vowels();
     * // => ['e']
     */
    function mixin(object, source, options) {
      var props = keys(source),
          methodNames = baseFunctions(source, props);

      if (options == null &&
          !(isObject(source) && (methodNames.length || !props.length))) {
        options = source;
        source = object;
        object = this;
        methodNames = baseFunctions(source, keys(source));
      }
      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
          isFunc = isFunction(object);

      arrayEach(methodNames, function(methodName) {
        var func = source[methodName];
        object[methodName] = func;
        if (isFunc) {
          object.prototype[methodName] = function() {
            var chainAll = this.__chain__;
            if (chain || chainAll) {
              var result = object(this.__wrapped__),
                  actions = result.__actions__ = copyArray(this.__actions__);

              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
              result.__chain__ = chainAll;
              return result;
            }
            return func.apply(object, arrayPush([this.value()], arguments));
          };
        }
      });

      return object;
    }

    /**
     * Reverts the `_` variable to its previous value and returns a reference to
     * the `lodash` function.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @returns {Function} Returns the `lodash` function.
     * @example
     *
     * var lodash = _.noConflict();
     */
    function noConflict() {
      if (root._ === this) {
        root._ = oldDash;
      }
      return this;
    }

    /**
     * This method returns `undefined`.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Util
     * @example
     *
     * _.times(2, _.noop);
     * // => [undefined, undefined]
     */
    function noop() {
      // No operation performed.
    }

    /**
     * Creates a function that gets the argument at index `n`. If `n` is negative,
     * the nth argument from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [n=0] The index of the argument to return.
     * @returns {Function} Returns the new pass-thru function.
     * @example
     *
     * var func = _.nthArg(1);
     * func('a', 'b', 'c', 'd');
     * // => 'b'
     *
     * var func = _.nthArg(-2);
     * func('a', 'b', 'c', 'd');
     * // => 'c'
     */
    function nthArg(n) {
      n = toInteger(n);
      return baseRest(function(args) {
        return baseNth(args, n);
      });
    }

    /**
     * Creates a function that invokes `iteratees` with the arguments it receives
     * and returns their results.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to invoke.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.over([Math.max, Math.min]);
     *
     * func(1, 2, 3, 4);
     * // => [4, 1]
     */
    var over = createOver(arrayMap);

    /**
     * Creates a function that checks if **all** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overEvery([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => false
     *
     * func(NaN);
     * // => false
     */
    var overEvery = createOver(arrayEvery);

    /**
     * Creates a function that checks if **any** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overSome([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => true
     *
     * func(NaN);
     * // => false
     */
    var overSome = createOver(arraySome);

    /**
     * Creates a function that returns the value at `path` of a given object.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': 2 } },
     *   { 'a': { 'b': 1 } }
     * ];
     *
     * _.map(objects, _.property('a.b'));
     * // => [2, 1]
     *
     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
     * // => [1, 2]
     */
    function property(path) {
      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
    }

    /**
     * The opposite of `_.property`; this method creates a function that returns
     * the value at a given path of `object`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} object The object to query.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var array = [0, 1, 2],
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
     * // => [2, 0]
     */
    function propertyOf(object) {
      return function(path) {
        return object == null ? undefined : baseGet(object, path);
      };
    }

    /**
     * Creates an array of numbers (positive and/or negative) progressing from
     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
     * `start` is specified without an `end` or `step`. If `end` is not specified,
     * it's set to `start` with `start` then set to `0`.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.rangeRight
     * @example
     *
     * _.range(4);
     * // => [0, 1, 2, 3]
     *
     * _.range(-4);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 5);
     * // => [1, 2, 3, 4]
     *
     * _.range(0, 20, 5);
     * // => [0, 5, 10, 15]
     *
     * _.range(0, -4, -1);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.range(0);
     * // => []
     */
    var range = createRange();

    /**
     * This method is like `_.range` except that it populates values in
     * descending order.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.range
     * @example
     *
     * _.rangeRight(4);
     * // => [3, 2, 1, 0]
     *
     * _.rangeRight(-4);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 5);
     * // => [4, 3, 2, 1]
     *
     * _.rangeRight(0, 20, 5);
     * // => [15, 10, 5, 0]
     *
     * _.rangeRight(0, -4, -1);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.rangeRight(0);
     * // => []
     */
    var rangeRight = createRange(true);

    /**
     * This method returns a new empty array.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Array} Returns the new empty array.
     * @example
     *
     * var arrays = _.times(2, _.stubArray);
     *
     * console.log(arrays);
     * // => [[], []]
     *
     * console.log(arrays[0] === arrays[1]);
     * // => false
     */
    function stubArray() {
      return [];
    }

    /**
     * This method returns `false`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `false`.
     * @example
     *
     * _.times(2, _.stubFalse);
     * // => [false, false]
     */
    function stubFalse() {
      return false;
    }

    /**
     * This method returns a new empty object.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Object} Returns the new empty object.
     * @example
     *
     * var objects = _.times(2, _.stubObject);
     *
     * console.log(objects);
     * // => [{}, {}]
     *
     * console.log(objects[0] === objects[1]);
     * // => false
     */
    function stubObject() {
      return {};
    }

    /**
     * This method returns an empty string.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {string} Returns the empty string.
     * @example
     *
     * _.times(2, _.stubString);
     * // => ['', '']
     */
    function stubString() {
      return '';
    }

    /**
     * This method returns `true`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `true`.
     * @example
     *
     * _.times(2, _.stubTrue);
     * // => [true, true]
     */
    function stubTrue() {
      return true;
    }

    /**
     * Invokes the iteratee `n` times, returning an array of the results of
     * each invocation. The iteratee is invoked with one argument; (index).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} n The number of times to invoke `iteratee`.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.times(3, String);
     * // => ['0', '1', '2']
     *
     *  _.times(4, _.constant(0));
     * // => [0, 0, 0, 0]
     */
    function times(n, iteratee) {
      n = toInteger(n);
      if (n < 1 || n > MAX_SAFE_INTEGER) {
        return [];
      }
      var index = MAX_ARRAY_LENGTH,
          length = nativeMin(n, MAX_ARRAY_LENGTH);

      iteratee = getIteratee(iteratee);
      n -= MAX_ARRAY_LENGTH;

      var result = baseTimes(length, iteratee);
      while (++index < n) {
        iteratee(index);
      }
      return result;
    }

    /**
     * Converts `value` to a property path array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {*} value The value to convert.
     * @returns {Array} Returns the new property path array.
     * @example
     *
     * _.toPath('a.b.c');
     * // => ['a', 'b', 'c']
     *
     * _.toPath('a[0].b.c');
     * // => ['a', '0', 'b', 'c']
     */
    function toPath(value) {
      if (isArray(value)) {
        return arrayMap(value, toKey);
      }
      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
    }

    /**
     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {string} [prefix=''] The value to prefix the ID with.
     * @returns {string} Returns the unique ID.
     * @example
     *
     * _.uniqueId('contact_');
     * // => 'contact_104'
     *
     * _.uniqueId();
     * // => '105'
     */
    function uniqueId(prefix) {
      var id = ++idCounter;
      return toString(prefix) + id;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Adds two numbers.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {number} augend The first number in an addition.
     * @param {number} addend The second number in an addition.
     * @returns {number} Returns the total.
     * @example
     *
     * _.add(6, 4);
     * // => 10
     */
    var add = createMathOperation(function(augend, addend) {
      return augend + addend;
    }, 0);

    /**
     * Computes `number` rounded up to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round up.
     * @param {number} [precision=0] The precision to round up to.
     * @returns {number} Returns the rounded up number.
     * @example
     *
     * _.ceil(4.006);
     * // => 5
     *
     * _.ceil(6.004, 2);
     * // => 6.01
     *
     * _.ceil(6040, -2);
     * // => 6100
     */
    var ceil = createRound('ceil');

    /**
     * Divide two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} dividend The first number in a division.
     * @param {number} divisor The second number in a division.
     * @returns {number} Returns the quotient.
     * @example
     *
     * _.divide(6, 4);
     * // => 1.5
     */
    var divide = createMathOperation(function(dividend, divisor) {
      return dividend / divisor;
    }, 1);

    /**
     * Computes `number` rounded down to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round down.
     * @param {number} [precision=0] The precision to round down to.
     * @returns {number} Returns the rounded down number.
     * @example
     *
     * _.floor(4.006);
     * // => 4
     *
     * _.floor(0.046, 2);
     * // => 0.04
     *
     * _.floor(4060, -2);
     * // => 4000
     */
    var floor = createRound('floor');

    /**
     * Computes the maximum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * _.max([4, 2, 8, 6]);
     * // => 8
     *
     * _.max([]);
     * // => undefined
     */
    function max(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseGt)
        : undefined;
    }

    /**
     * This method is like `_.max` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.maxBy(objects, function(o) { return o.n; });
     * // => { 'n': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.maxBy(objects, 'n');
     * // => { 'n': 2 }
     */
    function maxBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
        : undefined;
    }

    /**
     * Computes the mean of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the mean.
     * @example
     *
     * _.mean([4, 2, 8, 6]);
     * // => 5
     */
    function mean(array) {
      return baseMean(array, identity);
    }

    /**
     * This method is like `_.mean` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be averaged.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the mean.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.meanBy(objects, function(o) { return o.n; });
     * // => 5
     *
     * // The `_.property` iteratee shorthand.
     * _.meanBy(objects, 'n');
     * // => 5
     */
    function meanBy(array, iteratee) {
      return baseMean(array, getIteratee(iteratee, 2));
    }

    /**
     * Computes the minimum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * _.min([4, 2, 8, 6]);
     * // => 2
     *
     * _.min([]);
     * // => undefined
     */
    function min(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseLt)
        : undefined;
    }

    /**
     * This method is like `_.min` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.minBy(objects, function(o) { return o.n; });
     * // => { 'n': 1 }
     *
     * // The `_.property` iteratee shorthand.
     * _.minBy(objects, 'n');
     * // => { 'n': 1 }
     */
    function minBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
        : undefined;
    }

    /**
     * Multiply two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} multiplier The first number in a multiplication.
     * @param {number} multiplicand The second number in a multiplication.
     * @returns {number} Returns the product.
     * @example
     *
     * _.multiply(6, 4);
     * // => 24
     */
    var multiply = createMathOperation(function(multiplier, multiplicand) {
      return multiplier * multiplicand;
    }, 1);

    /**
     * Computes `number` rounded to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round.
     * @param {number} [precision=0] The precision to round to.
     * @returns {number} Returns the rounded number.
     * @example
     *
     * _.round(4.006);
     * // => 4
     *
     * _.round(4.006, 2);
     * // => 4.01
     *
     * _.round(4060, -2);
     * // => 4100
     */
    var round = createRound('round');

    /**
     * Subtract two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {number} minuend The first number in a subtraction.
     * @param {number} subtrahend The second number in a subtraction.
     * @returns {number} Returns the difference.
     * @example
     *
     * _.subtract(6, 4);
     * // => 2
     */
    var subtract = createMathOperation(function(minuend, subtrahend) {
      return minuend - subtrahend;
    }, 0);

    /**
     * Computes the sum of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the sum.
     * @example
     *
     * _.sum([4, 2, 8, 6]);
     * // => 20
     */
    function sum(array) {
      return (array && array.length)
        ? baseSum(array, identity)
        : 0;
    }

    /**
     * This method is like `_.sum` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be summed.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the sum.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.sumBy(objects, function(o) { return o.n; });
     * // => 20
     *
     * // The `_.property` iteratee shorthand.
     * _.sumBy(objects, 'n');
     * // => 20
     */
    function sumBy(array, iteratee) {
      return (array && array.length)
        ? baseSum(array, getIteratee(iteratee, 2))
        : 0;
    }

    /*------------------------------------------------------------------------*/

    // Add methods that return wrapped values in chain sequences.
    lodash.after = after;
    lodash.ary = ary;
    lodash.assign = assign;
    lodash.assignIn = assignIn;
    lodash.assignInWith = assignInWith;
    lodash.assignWith = assignWith;
    lodash.at = at;
    lodash.before = before;
    lodash.bind = bind;
    lodash.bindAll = bindAll;
    lodash.bindKey = bindKey;
    lodash.castArray = castArray;
    lodash.chain = chain;
    lodash.chunk = chunk;
    lodash.compact = compact;
    lodash.concat = concat;
    lodash.cond = cond;
    lodash.conforms = conforms;
    lodash.constant = constant;
    lodash.countBy = countBy;
    lodash.create = create;
    lodash.curry = curry;
    lodash.curryRight = curryRight;
    lodash.debounce = debounce;
    lodash.defaults = defaults;
    lodash.defaultsDeep = defaultsDeep;
    lodash.defer = defer;
    lodash.delay = delay;
    lodash.difference = difference;
    lodash.differenceBy = differenceBy;
    lodash.differenceWith = differenceWith;
    lodash.drop = drop;
    lodash.dropRight = dropRight;
    lodash.dropRightWhile = dropRightWhile;
    lodash.dropWhile = dropWhile;
    lodash.fill = fill;
    lodash.filter = filter;
    lodash.flatMap = flatMap;
    lodash.flatMapDeep = flatMapDeep;
    lodash.flatMapDepth = flatMapDepth;
    lodash.flatten = flatten;
    lodash.flattenDeep = flattenDeep;
    lodash.flattenDepth = flattenDepth;
    lodash.flip = flip;
    lodash.flow = flow;
    lodash.flowRight = flowRight;
    lodash.fromPairs = fromPairs;
    lodash.functions = functions;
    lodash.functionsIn = functionsIn;
    lodash.groupBy = groupBy;
    lodash.initial = initial;
    lodash.intersection = intersection;
    lodash.intersectionBy = intersectionBy;
    lodash.intersectionWith = intersectionWith;
    lodash.invert = invert;
    lodash.invertBy = invertBy;
    lodash.invokeMap = invokeMap;
    lodash.iteratee = iteratee;
    lodash.keyBy = keyBy;
    lodash.keys = keys;
    lodash.keysIn = keysIn;
    lodash.map = map;
    lodash.mapKeys = mapKeys;
    lodash.mapValues = mapValues;
    lodash.matches = matches;
    lodash.matchesProperty = matchesProperty;
    lodash.memoize = memoize;
    lodash.merge = merge;
    lodash.mergeWith = mergeWith;
    lodash.method = method;
    lodash.methodOf = methodOf;
    lodash.mixin = mixin;
    lodash.negate = negate;
    lodash.nthArg = nthArg;
    lodash.omit = omit;
    lodash.omitBy = omitBy;
    lodash.once = once;
    lodash.orderBy = orderBy;
    lodash.over = over;
    lodash.overArgs = overArgs;
    lodash.overEvery = overEvery;
    lodash.overSome = overSome;
    lodash.partial = partial;
    lodash.partialRight = partialRight;
    lodash.partition = partition;
    lodash.pick = pick;
    lodash.pickBy = pickBy;
    lodash.property = property;
    lodash.propertyOf = propertyOf;
    lodash.pull = pull;
    lodash.pullAll = pullAll;
    lodash.pullAllBy = pullAllBy;
    lodash.pullAllWith = pullAllWith;
    lodash.pullAt = pullAt;
    lodash.range = range;
    lodash.rangeRight = rangeRight;
    lodash.rearg = rearg;
    lodash.reject = reject;
    lodash.remove = remove;
    lodash.rest = rest;
    lodash.reverse = reverse;
    lodash.sampleSize = sampleSize;
    lodash.set = set;
    lodash.setWith = setWith;
    lodash.shuffle = shuffle;
    lodash.slice = slice;
    lodash.sortBy = sortBy;
    lodash.sortedUniq = sortedUniq;
    lodash.sortedUniqBy = sortedUniqBy;
    lodash.split = split;
    lodash.spread = spread;
    lodash.tail = tail;
    lodash.take = take;
    lodash.takeRight = takeRight;
    lodash.takeRightWhile = takeRightWhile;
    lodash.takeWhile = takeWhile;
    lodash.tap = tap;
    lodash.throttle = throttle;
    lodash.thru = thru;
    lodash.toArray = toArray;
    lodash.toPairs = toPairs;
    lodash.toPairsIn = toPairsIn;
    lodash.toPath = toPath;
    lodash.toPlainObject = toPlainObject;
    lodash.transform = transform;
    lodash.unary = unary;
    lodash.union = union;
    lodash.unionBy = unionBy;
    lodash.unionWith = unionWith;
    lodash.uniq = uniq;
    lodash.uniqBy = uniqBy;
    lodash.uniqWith = uniqWith;
    lodash.unset = unset;
    lodash.unzip = unzip;
    lodash.unzipWith = unzipWith;
    lodash.update = update;
    lodash.updateWith = updateWith;
    lodash.values = values;
    lodash.valuesIn = valuesIn;
    lodash.without = without;
    lodash.words = words;
    lodash.wrap = wrap;
    lodash.xor = xor;
    lodash.xorBy = xorBy;
    lodash.xorWith = xorWith;
    lodash.zip = zip;
    lodash.zipObject = zipObject;
    lodash.zipObjectDeep = zipObjectDeep;
    lodash.zipWith = zipWith;

    // Add aliases.
    lodash.entries = toPairs;
    lodash.entriesIn = toPairsIn;
    lodash.extend = assignIn;
    lodash.extendWith = assignInWith;

    // Add methods to `lodash.prototype`.
    mixin(lodash, lodash);

    /*------------------------------------------------------------------------*/

    // Add methods that return unwrapped values in chain sequences.
    lodash.add = add;
    lodash.attempt = attempt;
    lodash.camelCase = camelCase;
    lodash.capitalize = capitalize;
    lodash.ceil = ceil;
    lodash.clamp = clamp;
    lodash.clone = clone;
    lodash.cloneDeep = cloneDeep;
    lodash.cloneDeepWith = cloneDeepWith;
    lodash.cloneWith = cloneWith;
    lodash.conformsTo = conformsTo;
    lodash.deburr = deburr;
    lodash.defaultTo = defaultTo;
    lodash.divide = divide;
    lodash.endsWith = endsWith;
    lodash.eq = eq;
    lodash.escape = escape;
    lodash.escapeRegExp = escapeRegExp;
    lodash.every = every;
    lodash.find = find;
    lodash.findIndex = findIndex;
    lodash.findKey = findKey;
    lodash.findLast = findLast;
    lodash.findLastIndex = findLastIndex;
    lodash.findLastKey = findLastKey;
    lodash.floor = floor;
    lodash.forEach = forEach;
    lodash.forEachRight = forEachRight;
    lodash.forIn = forIn;
    lodash.forInRight = forInRight;
    lodash.forOwn = forOwn;
    lodash.forOwnRight = forOwnRight;
    lodash.get = get;
    lodash.gt = gt;
    lodash.gte = gte;
    lodash.has = has;
    lodash.hasIn = hasIn;
    lodash.head = head;
    lodash.identity = identity;
    lodash.includes = includes;
    lodash.indexOf = indexOf;
    lodash.inRange = inRange;
    lodash.invoke = invoke;
    lodash.isArguments = isArguments;
    lodash.isArray = isArray;
    lodash.isArrayBuffer = isArrayBuffer;
    lodash.isArrayLike = isArrayLike;
    lodash.isArrayLikeObject = isArrayLikeObject;
    lodash.isBoolean = isBoolean;
    lodash.isBuffer = isBuffer;
    lodash.isDate = isDate;
    lodash.isElement = isElement;
    lodash.isEmpty = isEmpty;
    lodash.isEqual = isEqual;
    lodash.isEqualWith = isEqualWith;
    lodash.isError = isError;
    lodash.isFinite = isFinite;
    lodash.isFunction = isFunction;
    lodash.isInteger = isInteger;
    lodash.isLength = isLength;
    lodash.isMap = isMap;
    lodash.isMatch = isMatch;
    lodash.isMatchWith = isMatchWith;
    lodash.isNaN = isNaN;
    lodash.isNative = isNative;
    lodash.isNil = isNil;
    lodash.isNull = isNull;
    lodash.isNumber = isNumber;
    lodash.isObject = isObject;
    lodash.isObjectLike = isObjectLike;
    lodash.isPlainObject = isPlainObject;
    lodash.isRegExp = isRegExp;
    lodash.isSafeInteger = isSafeInteger;
    lodash.isSet = isSet;
    lodash.isString = isString;
    lodash.isSymbol = isSymbol;
    lodash.isTypedArray = isTypedArray;
    lodash.isUndefined = isUndefined;
    lodash.isWeakMap = isWeakMap;
    lodash.isWeakSet = isWeakSet;
    lodash.join = join;
    lodash.kebabCase = kebabCase;
    lodash.last = last;
    lodash.lastIndexOf = lastIndexOf;
    lodash.lowerCase = lowerCase;
    lodash.lowerFirst = lowerFirst;
    lodash.lt = lt;
    lodash.lte = lte;
    lodash.max = max;
    lodash.maxBy = maxBy;
    lodash.mean = mean;
    lodash.meanBy = meanBy;
    lodash.min = min;
    lodash.minBy = minBy;
    lodash.stubArray = stubArray;
    lodash.stubFalse = stubFalse;
    lodash.stubObject = stubObject;
    lodash.stubString = stubString;
    lodash.stubTrue = stubTrue;
    lodash.multiply = multiply;
    lodash.nth = nth;
    lodash.noConflict = noConflict;
    lodash.noop = noop;
    lodash.now = now;
    lodash.pad = pad;
    lodash.padEnd = padEnd;
    lodash.padStart = padStart;
    lodash.parseInt = parseInt;
    lodash.random = random;
    lodash.reduce = reduce;
    lodash.reduceRight = reduceRight;
    lodash.repeat = repeat;
    lodash.replace = replace;
    lodash.result = result;
    lodash.round = round;
    lodash.runInContext = runInContext;
    lodash.sample = sample;
    lodash.size = size;
    lodash.snakeCase = snakeCase;
    lodash.some = some;
    lodash.sortedIndex = sortedIndex;
    lodash.sortedIndexBy = sortedIndexBy;
    lodash.sortedIndexOf = sortedIndexOf;
    lodash.sortedLastIndex = sortedLastIndex;
    lodash.sortedLastIndexBy = sortedLastIndexBy;
    lodash.sortedLastIndexOf = sortedLastIndexOf;
    lodash.startCase = startCase;
    lodash.startsWith = startsWith;
    lodash.subtract = subtract;
    lodash.sum = sum;
    lodash.sumBy = sumBy;
    lodash.template = template;
    lodash.times = times;
    lodash.toFinite = toFinite;
    lodash.toInteger = toInteger;
    lodash.toLength = toLength;
    lodash.toLower = toLower;
    lodash.toNumber = toNumber;
    lodash.toSafeInteger = toSafeInteger;
    lodash.toString = toString;
    lodash.toUpper = toUpper;
    lodash.trim = trim;
    lodash.trimEnd = trimEnd;
    lodash.trimStart = trimStart;
    lodash.truncate = truncate;
    lodash.unescape = unescape;
    lodash.uniqueId = uniqueId;
    lodash.upperCase = upperCase;
    lodash.upperFirst = upperFirst;

    // Add aliases.
    lodash.each = forEach;
    lodash.eachRight = forEachRight;
    lodash.first = head;

    mixin(lodash, (function() {
      var source = {};
      baseForOwn(lodash, function(func, methodName) {
        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
          source[methodName] = func;
        }
      });
      return source;
    }()), { 'chain': false });

    /*------------------------------------------------------------------------*/

    /**
     * The semantic version number.
     *
     * @static
     * @memberOf _
     * @type {string}
     */
    lodash.VERSION = VERSION;

    // Assign default placeholders.
    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
      lodash[methodName].placeholder = lodash;
    });

    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
    arrayEach(['drop', 'take'], function(methodName, index) {
      LazyWrapper.prototype[methodName] = function(n) {
        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);

        var result = (this.__filtered__ && !index)
          ? new LazyWrapper(this)
          : this.clone();

        if (result.__filtered__) {
          result.__takeCount__ = nativeMin(n, result.__takeCount__);
        } else {
          result.__views__.push({
            'size': nativeMin(n, MAX_ARRAY_LENGTH),
            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
          });
        }
        return result;
      };

      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
        return this.reverse()[methodName](n).reverse();
      };
    });

    // Add `LazyWrapper` methods that accept an `iteratee` value.
    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
      var type = index + 1,
          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;

      LazyWrapper.prototype[methodName] = function(iteratee) {
        var result = this.clone();
        result.__iteratees__.push({
          'iteratee': getIteratee(iteratee, 3),
          'type': type
        });
        result.__filtered__ = result.__filtered__ || isFilter;
        return result;
      };
    });

    // Add `LazyWrapper` methods for `_.head` and `_.last`.
    arrayEach(['head', 'last'], function(methodName, index) {
      var takeName = 'take' + (index ? 'Right' : '');

      LazyWrapper.prototype[methodName] = function() {
        return this[takeName](1).value()[0];
      };
    });

    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
    arrayEach(['initial', 'tail'], function(methodName, index) {
      var dropName = 'drop' + (index ? '' : 'Right');

      LazyWrapper.prototype[methodName] = function() {
        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
      };
    });

    LazyWrapper.prototype.compact = function() {
      return this.filter(identity);
    };

    LazyWrapper.prototype.find = function(predicate) {
      return this.filter(predicate).head();
    };

    LazyWrapper.prototype.findLast = function(predicate) {
      return this.reverse().find(predicate);
    };

    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
      if (typeof path == 'function') {
        return new LazyWrapper(this);
      }
      return this.map(function(value) {
        return baseInvoke(value, path, args);
      });
    });

    LazyWrapper.prototype.reject = function(predicate) {
      return this.filter(negate(getIteratee(predicate)));
    };

    LazyWrapper.prototype.slice = function(start, end) {
      start = toInteger(start);

      var result = this;
      if (result.__filtered__ && (start > 0 || end < 0)) {
        return new LazyWrapper(result);
      }
      if (start < 0) {
        result = result.takeRight(-start);
      } else if (start) {
        result = result.drop(start);
      }
      if (end !== undefined) {
        end = toInteger(end);
        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
      }
      return result;
    };

    LazyWrapper.prototype.takeRightWhile = function(predicate) {
      return this.reverse().takeWhile(predicate).reverse();
    };

    LazyWrapper.prototype.toArray = function() {
      return this.take(MAX_ARRAY_LENGTH);
    };

    // Add `LazyWrapper` methods to `lodash.prototype`.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
          isTaker = /^(?:head|last)$/.test(methodName),
          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
          retUnwrapped = isTaker || /^find/.test(methodName);

      if (!lodashFunc) {
        return;
      }
      lodash.prototype[methodName] = function() {
        var value = this.__wrapped__,
            args = isTaker ? [1] : arguments,
            isLazy = value instanceof LazyWrapper,
            iteratee = args[0],
            useLazy = isLazy || isArray(value);

        var interceptor = function(value) {
          var result = lodashFunc.apply(lodash, arrayPush([value], args));
          return (isTaker && chainAll) ? result[0] : result;
        };

        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
          // Avoid lazy use if the iteratee has a "length" value other than `1`.
          isLazy = useLazy = false;
        }
        var chainAll = this.__chain__,
            isHybrid = !!this.__actions__.length,
            isUnwrapped = retUnwrapped && !chainAll,
            onlyLazy = isLazy && !isHybrid;

        if (!retUnwrapped && useLazy) {
          value = onlyLazy ? value : new LazyWrapper(this);
          var result = func.apply(value, args);
          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
          return new LodashWrapper(result, chainAll);
        }
        if (isUnwrapped && onlyLazy) {
          return func.apply(this, args);
        }
        result = this.thru(interceptor);
        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
      };
    });

    // Add `Array` methods to `lodash.prototype`.
    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
      var func = arrayProto[methodName],
          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
          retUnwrapped = /^(?:pop|shift)$/.test(methodName);

      lodash.prototype[methodName] = function() {
        var args = arguments;
        if (retUnwrapped && !this.__chain__) {
          var value = this.value();
          return func.apply(isArray(value) ? value : [], args);
        }
        return this[chainName](function(value) {
          return func.apply(isArray(value) ? value : [], args);
        });
      };
    });

    // Map minified method names to their real names.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var lodashFunc = lodash[methodName];
      if (lodashFunc) {
        var key = (lodashFunc.name + ''),
            names = realNames[key] || (realNames[key] = []);

        names.push({ 'name': methodName, 'func': lodashFunc });
      }
    });

    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
      'name': 'wrapper',
      'func': undefined
    }];

    // Add methods to `LazyWrapper`.
    LazyWrapper.prototype.clone = lazyClone;
    LazyWrapper.prototype.reverse = lazyReverse;
    LazyWrapper.prototype.value = lazyValue;

    // Add chain sequence methods to the `lodash` wrapper.
    lodash.prototype.at = wrapperAt;
    lodash.prototype.chain = wrapperChain;
    lodash.prototype.commit = wrapperCommit;
    lodash.prototype.next = wrapperNext;
    lodash.prototype.plant = wrapperPlant;
    lodash.prototype.reverse = wrapperReverse;
    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;

    // Add lazy aliases.
    lodash.prototype.first = lodash.prototype.head;

    if (symIterator) {
      lodash.prototype[symIterator] = wrapperToIterator;
    }
    return lodash;
  });

  /*--------------------------------------------------------------------------*/

  // Export lodash.
  var _ = runInContext();

  // Some AMD build optimizers, like r.js, check for condition patterns like:
  if (true) {
    // Expose Lodash on the global object to prevent errors when Lodash is
    // loaded by a script tag in the presence of an AMD loader.
    // See http://requirejs.org/docs/errors.html#mismatch for more details.
    // Use `_.noConflict` to remove Lodash from the global object.
    root._ = _;

    // Define as an anonymous module so, through path mapping, it can be
    // referenced as the "underscore" module.
    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
      return _;
    }).call(exports, __webpack_require__, exports, module),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  }
  // Check for `exports` after `define` in case a build optimizer adds it.
  else if (freeModule) {
    // Export for Node.js.
    (freeModule.exports = _)._ = _;
    // Export for CommonJS support.
    freeExports._ = _;
  }
  else {
    // Export to the global object.
    root._ = _;
  }
}.call(this));

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(16), __webpack_require__(37)(module)))

/***/ }),
/* 5 */,
/* 6 */
/***/ (function(module, exports, __webpack_require__) {

var store = __webpack_require__(169)('wks');
var uid = __webpack_require__(102);
var Symbol = __webpack_require__(11).Symbol;
var USE_SYMBOL = typeof Symbol == 'function';

var $exports = module.exports = function (name) {
  return store[name] || (store[name] =
    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
};

$exports.store = store;


/***/ }),
/* 7 */
/***/ (function(module, exports) {

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
  ? window : typeof self != 'undefined' && self.Math == Math ? self
  // eslint-disable-next-line no-new-func
  : Function('return this')();
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef


/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {

var store = __webpack_require__(120)('wks');
var uid = __webpack_require__(74);
var Symbol = __webpack_require__(7).Symbol;
var USE_SYMBOL = typeof Symbol == 'function';

var $exports = module.exports = function (name) {
  return store[name] || (store[name] =
    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
};

$exports.store = store;


/***/ }),
/* 9 */,
/* 10 */,
/* 11 */
/***/ (function(module, exports) {

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
  ? window : typeof self != 'undefined' && self.Math == Math ? self
  // eslint-disable-next-line no-new-func
  : Function('return this')();
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef


/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(7);
var core = __webpack_require__(3);
var ctx = __webpack_require__(49);
var hide = __webpack_require__(25);
var PROTOTYPE = 'prototype';

var $export = function (type, name, source) {
  var IS_FORCED = type & $export.F;
  var IS_GLOBAL = type & $export.G;
  var IS_STATIC = type & $export.S;
  var IS_PROTO = type & $export.P;
  var IS_BIND = type & $export.B;
  var IS_WRAP = type & $export.W;
  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
  var expProto = exports[PROTOTYPE];
  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
  var key, own, out;
  if (IS_GLOBAL) source = name;
  for (key in source) {
    // contains in native
    own = !IS_FORCED && target && target[key] !== undefined;
    if (own && key in exports) continue;
    // export native or passed
    out = own ? target[key] : source[key];
    // prevent global pollution for namespaces
    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
    // bind timers to global for call from export context
    : IS_BIND && own ? ctx(out, global)
    // wrap global constructors for prevent change them in library
    : IS_WRAP && target[key] == out ? (function (C) {
      var F = function (a, b, c) {
        if (this instanceof C) {
          switch (arguments.length) {
            case 0: return new C();
            case 1: return new C(a);
            case 2: return new C(a, b);
          } return new C(a, b, c);
        } return C.apply(this, arguments);
      };
      F[PROTOTYPE] = C[PROTOTYPE];
      return F;
    // make static versions for prototype methods
    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
    if (IS_PROTO) {
      (exports.virtual || (exports.virtual = {}))[key] = out;
      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
    }
  }
};
// type bitmap
$export.F = 1;   // forced
$export.G = 2;   // global
$export.S = 4;   // static
$export.P = 8;   // proto
$export.B = 16;  // bind
$export.W = 32;  // wrap
$export.U = 64;  // safe
$export.R = 128; // real proto method for `library`
module.exports = $export;


/***/ }),
/* 13 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M28.1,21c0-2-0.7-3.7-2.1-5.1s-3.1-2.1-5.1-2.1s-3.7,0.7-5.1,2.1S13.8,19,13.8,21s0.7,3.7,2.1,5.1s3.1,2.1,5.1,2.1 s3.7-0.7,5.1-2.1S28.1,22.9,28.1,21z M37.9,18.5v4.9c0,0.2-0.1,0.3-0.2,0.5c-0.1,0.2-0.3,0.3-0.4,0.3l-4.1,0.6 c-0.3,0.8-0.6,1.5-0.9,2c0.5,0.7,1.3,1.8,2.4,3c0.1,0.2,0.2,0.4,0.2,0.6s-0.1,0.4-0.2,0.5c-0.4,0.5-1.1,1.3-2.2,2.4 c-1.1,1-1.8,1.6-2.1,1.6c-0.2,0-0.4-0.1-0.6-0.2l-3-2.4c-0.6,0.3-1.3,0.6-2,0.8c-0.2,2-0.4,3.4-0.6,4.1c-0.1,0.4-0.4,0.6-0.8,0.6 h-4.9c-0.2,0-0.4-0.1-0.5-0.2c-0.2-0.1-0.2-0.3-0.3-0.5l-0.6-4.1c-0.7-0.2-1.4-0.5-2-0.8L12,34.7c-0.1,0.1-0.3,0.2-0.6,0.2 c-0.2,0-0.4-0.1-0.6-0.2C9,33,7.8,31.8,7.2,31c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.2,0.1-0.3,0.2-0.5c0.2-0.3,0.6-0.8,1.1-1.5 s0.9-1.2,1.2-1.6c-0.4-0.7-0.7-1.5-0.9-2.2l-4-0.6c-0.2,0-0.3-0.1-0.5-0.3C4.1,23.7,4,23.5,4,23.4v-4.9c0-0.2,0.1-0.3,0.2-0.5 s0.3-0.3,0.4-0.3L8.7,17c0.2-0.7,0.5-1.4,0.9-2c-0.6-0.8-1.4-1.9-2.4-3C7.1,11.8,7,11.6,7,11.4c0-0.1,0.1-0.3,0.2-0.5 c0.4-0.5,1.1-1.3,2.2-2.4S11.1,7,11.4,7c0.2,0,0.4,0.1,0.6,0.2l3,2.4c0.6-0.3,1.3-0.6,2-0.8c0.2-2,0.4-3.4,0.6-4.1 C17.8,4.2,18.1,4,18.5,4h4.9c0.2,0,0.4,0.1,0.5,0.2c0.2,0.1,0.2,0.3,0.3,0.5l0.6,4.1c0.7,0.2,1.4,0.5,2,0.8l3.1-2.4 C30.1,7,30.2,7,30.5,7c0.2,0,0.4,0.1,0.6,0.2c1.9,1.8,3.1,3,3.6,3.8c0.1,0.1,0.2,0.3,0.2,0.5c0,0.2-0.1,0.3-0.2,0.5 c-0.2,0.3-0.6,0.8-1.1,1.5c-0.5,0.7-0.9,1.2-1.2,1.6c0.4,0.7,0.7,1.5,0.9,2.2l4,0.6c0.2,0,0.3,0.1,0.5,0.3 C37.8,18.2,37.9,18.4,37.9,18.5z'/%3E %3C/svg%3E\""

/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**
 * postal - Pub/Sub library providing wildcard subscriptions, complex message handling, etc.  Works server and client-side.
 * Author: Jim Cowart (http://ifandelse.com)
 * Version: v2.0.5
 * Url: http://github.com/postaljs/postal.js
 * License(s): MIT
 */

( function( root, factory ) {
	
	if ( true ) {
		// AMD. Register as an anonymous module.
		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(4) ], __WEBPACK_AMD_DEFINE_RESULT__ = (function( _ ) {
			return factory( _, root );
		}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	
	} else if ( typeof module === "object" && module.exports ) {
		// Node, or CommonJS-Like environments
		module.exports = factory( require( "lodash" ), this );
	} else {
		// Browser globals
		root.postal = factory( root._, root );
	}
}( this, function( _, global, undefined ) {
	var prevPostal = global && global.postal;
	var prevLodash = global && global._;
	if ( prevLodash && prevLodash !== _ ) {
		_ = _.noConflict();
	}
	var _defaultConfig = {
		DEFAULT_CHANNEL: "/",
		SYSTEM_CHANNEL: "postal",
		enableSystemMessages: true,
		cacheKeyDelimiter: "|",
		autoCompactResolver: false
	};
	var postal = {
		configuration: _.extend( {}, _defaultConfig )
	};
	var _config = postal.configuration;

	

var ChannelDefinition = function( channelName, bus ) {
	this.bus = bus;
	this.channel = channelName || _config.DEFAULT_CHANNEL;
};

ChannelDefinition.prototype.subscribe = function() {
	return this.bus.subscribe( {
		channel: this.channel,
		topic: ( arguments.length === 1 ? arguments[ 0 ].topic : arguments[ 0 ] ),
		callback: ( arguments.length === 1 ? arguments[ 0 ].callback : arguments[ 1 ] )
	} );
};

/*
    publish( envelope [, callback ] );
    publish( topic, data [, callback ] );
*/
ChannelDefinition.prototype.publish = function() {
	var envelope = {};
	var callback;
	if ( typeof arguments[ 0 ] === "string" ) {
		envelope.topic = arguments[ 0 ];
		envelope.data = arguments[ 1 ];
		callback = arguments[ 2 ];
	} else {
		envelope = arguments[ 0 ];
		callback = arguments[ 1 ];
	}
	if ( typeof envelope !== "object" ) {
		throw new Error( "The first argument to ChannelDefinition.publish should be either an envelope object or a string topic." );
	}
	envelope.headers = _.extend( envelope.headers || { resolverNoCache: _config.resolverNoCache } );
	envelope.channel = this.channel;
	this.bus.publish( envelope, callback );
};

	
var SubscriptionDefinition = function( channel, topic, callback ) {
	if ( arguments.length !== 3 ) {
		throw new Error( "You must provide a channel, topic and callback when creating a SubscriptionDefinition instance." );
	}
	if ( topic.length === 0 ) {
		throw new Error( "Topics cannot be empty" );
	}
	this.channel = channel;
	this.topic = topic;
	this.callback = callback;
	this.pipeline = [];
	this.cacheKeys = [];
	this._context = undefined;
};

var ConsecutiveDistinctPredicate = function() {
	var previous;
	return function( data ) {
		var eq = false;
		if ( typeof data === "string" ) {
			eq = data === previous;
			previous = data;
		} else {
			eq = _.isEqual( data, previous );
			previous = _.extend( {}, data );
		}
		return !eq;
	};
};

var DistinctPredicate = function DistinctPredicateFactory() {
	var previous = [];
	return function DistinctPredicate( data ) {
		var isDistinct = !_.some( previous, function( p ) {
			return _.isEqual( data, p );
		} );
		if ( isDistinct ) {
			previous.push( data );
		}
		return isDistinct;
	};
};

SubscriptionDefinition.prototype = {

	"catch": function( errorHandler ) {
		var original = this.callback;
		var safeCallback = function() {
			try {
				original.apply( this, arguments );
			} catch ( err ) {
				errorHandler( err, arguments[ 0 ] );
			}
		};
		this.callback = safeCallback;
		return this;
	},

	defer: function defer() {
		return this.delay( 0 );
	},

	disposeAfter: function disposeAfter( maxCalls ) {
		if ( typeof maxCalls !== "number" || maxCalls <= 0 ) {
			throw new Error( "The value provided to disposeAfter (maxCalls) must be a number greater than zero." );
		}
		var dispose = _.after( maxCalls, this.unsubscribe.bind( this ) );
		this.pipeline.push( function( data, env, next ) {
			next( data, env );
			dispose();
		} );
		return this;
	},

	distinct: function distinct() {
		return this.constraint( new DistinctPredicate() );
	},

	distinctUntilChanged: function distinctUntilChanged() {
		return this.constraint( new ConsecutiveDistinctPredicate() );
	},

	invokeSubscriber: function invokeSubscriber( data, env ) {
		if ( !this.inactive ) {
			var self = this;
			var pipeline = self.pipeline;
			var len = pipeline.length;
			var context = self._context;
			var idx = -1;
			var invoked = false;
			if ( !len ) {
				self.callback.call( context, data, env );
				invoked = true;
			} else {
				pipeline = pipeline.concat( [ self.callback ] );
				var step = function step( d, e ) {
					idx += 1;
					if ( idx < len ) {
						pipeline[ idx ].call( context, d, e, step );
					} else {
						self.callback.call( context, d, e );
						invoked = true;
					}
				};
				step( data, env, 0 );
			}
			return invoked;
		}
	},

	logError: function logError() {
		
		if ( console ) {
			var report;
			if ( console.warn ) {
				report = console.warn;
			} else {
				report = console.log;
			}
			this.catch( report );
		}
		return this;
	},

	once: function once() {
		return this.disposeAfter( 1 );
	},

	subscribe: function subscribe( callback ) {
		this.callback = callback;
		return this;
	},

	unsubscribe: function unsubscribe() {
		
		if ( !this.inactive ) {
			postal.unsubscribe( this );
		}
	},

	constraint: function constraint( predicate ) {
		if ( typeof predicate !== "function" ) {
			throw new Error( "Predicate constraint must be a function" );
		}
		this.pipeline.push( function( data, env, next ) {
			if ( predicate.call( this, data, env ) ) {
				next( data, env );
			}
		} );
		return this;
	},

	constraints: function constraints( predicates ) {
		var self = this;
		
		_.each( predicates, function( predicate ) {
			self.constraint( predicate );
		} );
		return self;
	},

	context: function contextSetter( context ) {
		this._context = context;
		return this;
	},

	debounce: function debounce( milliseconds, immediate ) {
		if ( typeof milliseconds !== "number" ) {
			throw new Error( "Milliseconds must be a number" );
		}

		var options = {};

		if ( !!immediate === true ) { 
			options.leading = true;
			options.trailing = false;
		}

		this.pipeline.push(
			_.debounce( function( data, env, next ) {
				next( data, env );
			},
				milliseconds,
				options
			)
		);
		return this;
	},

	delay: function delay( milliseconds ) {
		if ( typeof milliseconds !== "number" ) {
			throw new Error( "Milliseconds must be a number" );
		}
		var self = this;
		self.pipeline.push( function( data, env, next ) {
			setTimeout( function() {
				next( data, env );
			}, milliseconds );
		} );
		return this;
	},

	throttle: function throttle( milliseconds ) {
		if ( typeof milliseconds !== "number" ) {
			throw new Error( "Milliseconds must be a number" );
		}
		var fn = function( data, env, next ) {
			next( data, env );
		};
		this.pipeline.push( _.throttle( fn, milliseconds ) );
		return this;
	}
};

	


var bindingsResolver = _config.resolver = {
	cache: {},
	regex: {},
	enableCache: true,

	compare: function compare( binding, topic, headerOptions ) {
		var pattern;
		var rgx;
		var prevSegment;
		var cacheKey = topic + _config.cacheKeyDelimiter + binding;
		var result = ( this.cache[ cacheKey ] );
		var opt = headerOptions || {};
		var saveToCache = this.enableCache && !opt.resolverNoCache;
		// result is cached?
		if ( result === true ) {
			return result;
		}
		// plain string matching?
		if ( binding.indexOf( "#" ) === -1 && binding.indexOf( "*" ) === -1 ) {
			result = ( topic === binding );
			if ( saveToCache ) {
				this.cache[ cacheKey ] = result;
			}
			return result;
		}
		// ah, regex matching, then
		if ( !( rgx = this.regex[ binding ] ) ) {
			pattern = "^" + _.map( binding.split( "." ), function mapTopicBinding( segment ) {
					var res = "";
					if ( !!prevSegment ) {
						res = prevSegment !== "#" ? "\\.\\b" : "\\b";
					}
					if ( segment === "#" ) {
						res += "[\\s\\S]*";
					} else if ( segment === "*" ) {
						res += "[^.]+";
					} else {
						res += segment;
					}
					prevSegment = segment;
					return res;
				} ).join( "" ) + "$";
			rgx = this.regex[ binding ] = new RegExp( pattern );
		}
		result = rgx.test( topic );
		if ( saveToCache ) {
			this.cache[ cacheKey ] = result;
		}
		return result;
	},

	reset: function reset() {
		this.cache = {};
		this.regex = {};
	},

	purge: function( options ) {
		var self = this;
		var keyDelimiter = _config.cacheKeyDelimiter;
		var matchPredicate = function( val, key ) {
			var split = key.split( keyDelimiter );
			var topic = split[ 0 ];
			var binding = split[ 1 ];
			if ( ( typeof options.topic === "undefined" || options.topic === topic ) &&
					( typeof options.binding === "undefined" || options.binding === binding ) ) {
				delete self.cache[ key ];
			}
		};

		var compactPredicate = function( val, key ) {
			var split = key.split( keyDelimiter );
			if ( postal.getSubscribersFor( { topic: split[ 0 ] } ).length === 0 ) {
				delete self.cache[ key ];
			}
		};

		if ( typeof options === "undefined" ) {
			this.reset();
		} else {
			var handler = options.compact === true ? compactPredicate : matchPredicate;
			_.each( this.cache, handler );
		}
	}
};

	


var pubInProgress = 0;
var unSubQueue = [];
var autoCompactIndex = 0;

function clearUnSubQueue() {
	while ( unSubQueue.length ) {
		postal.unsubscribe( unSubQueue.shift() );
	}
}

function getCachePurger( subDef, key, cache ) {
	return function( sub, i, list ) {
		if ( sub === subDef ) {
			list.splice( i, 1 );
		}
		if ( list.length === 0 ) {
			delete cache[ key ];
		}
	};
}

function getCacher( topic, pubCache, cacheKey, done, envelope ) {
	var headers = envelope && envelope.headers || {};
	return function( subDef ) {
		var cache;
		if ( _config.resolver.compare( subDef.topic, topic, headers ) ) {
			if ( !headers.resolverNoCache ) {
				cache = pubCache[ cacheKey ] = ( pubCache[ cacheKey ] || [] );
				cache.push( subDef );
				subDef.cacheKeys.push( cacheKey );
			}
			if ( done ) {
				done( subDef );
			}
		}
	};
}

function getSystemMessage( kind, subDef ) {
	return {
		channel: _config.SYSTEM_CHANNEL,
		topic: "subscription." + kind,
		data: {
			event: "subscription." + kind,
			channel: subDef.channel,
			topic: subDef.topic
		}
	};
}

var sysCreatedMessage = getSystemMessage.bind( undefined, "created" );
var sysRemovedMessage = getSystemMessage.bind( undefined, "removed" );

function getPredicate( options, resolver ) {
	if ( typeof options === "function" ) {
		return options;
	} else if ( !options ) {
		return function() {
			return true;
		};
	} else {
		return function( sub ) {
			var compared = 0;
			var matched = 0;
			_.each( options, function( val, prop ) {
				compared += 1;
				if (
				// We use the bindings resolver to compare the options.topic to subDef.topic
				( prop === "topic" && resolver.compare( sub.topic, options.topic, { resolverNoCache: true } ) ) ||
						( prop === "context" && options.context === sub._context ) ||
						// Any other potential prop/value matching outside topic & context...
						( sub[ prop ] === options[ prop ] ) ) {
					matched += 1;
				}
			} );
			return compared === matched;
		};
	}
}

_.extend( postal, {
	cache: {},
	subscriptions: {},
	wireTaps: [],

	ChannelDefinition: ChannelDefinition,
	SubscriptionDefinition: SubscriptionDefinition,

	channel: function channel( channelName ) {
		return new ChannelDefinition( channelName, this );
	},

	addWireTap: function addWireTap( callback ) {
		var self = this;
		self.wireTaps.push( callback );
		return function() {
			var idx = self.wireTaps.indexOf( callback );
			if ( idx !== -1 ) {
				self.wireTaps.splice( idx, 1 );
			}
		};
	},

	noConflict: function noConflict() {
		
		if ( typeof window === "undefined" || ( typeof window !== "undefined" && "function" === "function" && __webpack_require__(110) ) ) {
			throw new Error( "noConflict can only be used in browser clients which aren't using AMD modules" );
		}
		global.postal = prevPostal;
		return this;
	},

	getSubscribersFor: function getSubscribersFor( options ) {
		var result = [];
		var self = this;
		_.each( self.subscriptions, function( channel ) {
			_.each( channel, function( subList ) {
				result = result.concat( _.filter( subList, getPredicate( options, _config.resolver ) ) );
			} );
		} );
		return result;
	},

	publish: function publish( envelope, cb ) {
		++pubInProgress;
		var channel = envelope.channel = envelope.channel || _config.DEFAULT_CHANNEL;
		var topic = envelope.topic;
		envelope.timeStamp = new Date();
		if ( this.wireTaps.length ) {
			_.each( this.wireTaps, function( tap ) {
				tap( envelope.data, envelope, pubInProgress );
			} );
		}
		var cacheKey = channel + _config.cacheKeyDelimiter + topic;
		var cache = this.cache[ cacheKey ];
		var skipped = 0;
		var activated = 0;
		if ( !cache ) {
			var cacherFn = getCacher(
				topic,
				this.cache,
				cacheKey,
				function( candidate ) {
					if ( candidate.invokeSubscriber( envelope.data, envelope ) ) {
						activated++;
					} else {
						skipped++;
					}
				},
				envelope
			);
			_.each( this.subscriptions[ channel ], function( candidates ) {
				_.each( candidates, cacherFn );
			} );
		} else {
			_.each( cache, function( subDef ) {
				if ( subDef.invokeSubscriber( envelope.data, envelope ) ) {
					activated++;
				} else {
					skipped++;
				}
			} );
		}
		if ( --pubInProgress === 0 ) {
			clearUnSubQueue();
		}
		if ( cb ) {
			cb( {
				activated: activated,
				skipped: skipped
			} );
		}
	},

	reset: function reset() {
		this.unsubscribeFor();
		_config.resolver.reset();
		this.subscriptions = {};
		this.cache = {};
	},

	subscribe: function subscribe( options ) {
		var subscriptions = this.subscriptions;
		var subDef = new SubscriptionDefinition( options.channel || _config.DEFAULT_CHANNEL, options.topic, options.callback );
		var channel = subscriptions[ subDef.channel ];
		var channelLen = subDef.channel.length;
		var subs;
		if ( !channel ) {
			channel = subscriptions[ subDef.channel ] = {};
		}
		subs = subscriptions[ subDef.channel ][ subDef.topic ];
		if ( !subs ) {
			subs = subscriptions[ subDef.channel ][ subDef.topic ] = [];
		}
		// First, add the SubscriptionDefinition to the channel list
		subs.push( subDef );
		// Next, add the SubscriptionDefinition to any relevant existing cache(s)
		var cache = this.cache;
		_.each( _.keys( cache ), function( cacheKey ) {
			if ( cacheKey.substr( 0, channelLen ) === subDef.channel ) {
				getCacher(
					cacheKey.split( _config.cacheKeyDelimiter )[1],
					cache,
					cacheKey )( subDef );
			}
		} );
		
		if ( _config.enableSystemMessages ) {
			this.publish( sysCreatedMessage( subDef ) );
		}
		return subDef;
	},

	unsubscribe: function unsubscribe() {
		var unSubLen = arguments.length;
		var unSubIdx = 0;
		var subDef;
		var channelSubs;
		var topicSubs;
		var idx;
		for ( ; unSubIdx < unSubLen; unSubIdx++ ) {
			subDef = arguments[ unSubIdx ];
			subDef.inactive = true;
			if ( pubInProgress ) {
				unSubQueue.push( subDef );
				return;
			}
			channelSubs = this.subscriptions[ subDef.channel ];
			topicSubs = channelSubs && channelSubs[ subDef.topic ];
			
			if ( topicSubs ) {
				var len = topicSubs.length;
				idx = 0;
				// remove SubscriptionDefinition from channel list
				while ( idx < len ) {
					
					if ( topicSubs[ idx ] === subDef ) {
						topicSubs.splice( idx, 1 );
						break;
					}
					idx += 1;
				}
				if ( topicSubs.length === 0 ) {
					delete channelSubs[ subDef.topic ];
					if ( !_.keys( channelSubs ).length ) {
						delete this.subscriptions[ subDef.channel ];
					}
				}
				// remove SubscriptionDefinition from postal cache
				if ( subDef.cacheKeys && subDef.cacheKeys.length ) {
					var key;
					while ( key = subDef.cacheKeys.pop() ) {
						_.each( this.cache[ key ], getCachePurger( subDef, key, this.cache ) );
					}
				}
				if ( typeof _config.resolver.purge === "function" ) {
					// check to see if relevant resolver cache entries can be purged
					var autoCompact = _config.autoCompactResolver === true ?
						0 : typeof _config.autoCompactResolver === "number" ?
							( _config.autoCompactResolver - 1 ) : false;
					if ( autoCompact >= 0 && autoCompactIndex === autoCompact ) {
						_config.resolver.purge( { compact: true } );
						autoCompactIndex = 0;
					} else if ( autoCompact >= 0 && autoCompactIndex < autoCompact ) {
						autoCompactIndex += 1;
					}
				}
			}
			if ( _config.enableSystemMessages ) {
				this.publish( sysRemovedMessage( subDef ) );
			}
		}
	},

	unsubscribeFor: function unsubscribeFor( options ) {
		var toDispose = [];
		
		if ( this.subscriptions ) {
			toDispose = this.getSubscribersFor( options );
			this.unsubscribe.apply( this, toDispose );
		}
	}
} );


	
	if ( global && Object.prototype.hasOwnProperty.call( global, "__postalReady__" ) && _.isArray( global.__postalReady__ ) ) {
		while ( global.__postalReady__.length ) {
			global.__postalReady__.shift().onReady( postal );
		}
	}
	

	return postal;
} ) );


/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(26);
module.exports = function (it) {
  if (!isObject(it)) throw TypeError(it + ' is not an object!');
  return it;
};


/***/ }),
/* 16 */
/***/ (function(module, exports) {

var g;

// This works in non-strict mode
g = (function() {
	return this;
})();

try {
	// This works if eval is allowed (see CSP)
	g = g || Function("return this")() || (1,eval)("this");
} catch(e) {
	// This works if the window reference is available
	if(typeof window === "object")
		g = window;
}

// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}

module.exports = g;


/***/ }),
/* 17 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M34.9,30.8V16.7c0-0.5-0.2-1-0.6-1.4s-0.8-0.6-1.4-0.6H18.8c-0.5,0-1-0.2-1.4-0.6c-0.4-0.4-0.6-0.8-0.6-1.4v-1.3 c0-0.5-0.2-1-0.6-1.4c-0.4-0.4-0.8-0.6-1.4-0.6H8.5c-0.5,0-1,0.2-1.4,0.6S6.6,11,6.6,11.5v19.3c0,0.5,0.2,1,0.6,1.4s0.8,0.6,1.4,0.6 H33c0.5,0,1-0.2,1.4-0.6S34.9,31.4,34.9,30.8z M37.5,16.7v14.2c0,1.2-0.4,2.3-1.3,3.2c-0.9,0.9-1.9,1.3-3.2,1.3H8.5 c-1.2,0-2.3-0.4-3.2-1.3S4,32.1,4,30.8V11.5c0-1.2,0.4-2.3,1.3-3.2S7.3,7,8.5,7H15c1.2,0,2.3,0.4,3.2,1.3c0.9,0.9,1.3,1.9,1.3,3.2 v0.6H33c1.2,0,2.3,0.4,3.2,1.3C37.1,14.4,37.5,15.4,37.5,16.7z'/%3E %3C/svg%3E\""

/***/ }),
/* 18 */,
/* 19 */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(15);
var IE8_DOM_DEFINE = __webpack_require__(195);
var toPrimitive = __webpack_require__(117);
var dP = Object.defineProperty;

exports.f = __webpack_require__(20) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return dP(O, P, Attributes);
  } catch (e) { /* empty */ }
  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};


/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

// Thank's IE8 for his funny defineProperty
module.exports = !__webpack_require__(34)(function () {
  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),
/* 21 */
/***/ (function(module, exports) {

function _interopRequireDefault(obj) {
  return obj && obj.__esModule ? obj : {
    default: obj
  };
}

module.exports = _interopRequireDefault;

/***/ }),
/* 22 */,
/* 23 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhAgAYAIcAANDQ0Ovs7uzt7+3u8O7v8e/w8vDx8/Hy9Pn5+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAACABgAAAghABEIHEiwYMEDCA8YWMiwgMMCBAgMmDhAgIAAGAMAABAQADs="

/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(45);
module.exports = function (it) {
  if (!isObject(it)) throw TypeError(it + ' is not an object!');
  return it;
};


/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__(19);
var createDesc = __webpack_require__(72);
module.exports = __webpack_require__(20) ? function (object, key, value) {
  return dP.f(object, key, createDesc(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),
/* 26 */
/***/ (function(module, exports) {

module.exports = function (it) {
  return typeof it === 'object' ? it !== null : typeof it === 'function';
};


/***/ }),
/* 27 */
/***/ (function(module, exports) {

var hasOwnProperty = {}.hasOwnProperty;
module.exports = function (it, key) {
  return hasOwnProperty.call(it, key);
};


/***/ }),
/* 28 */
/***/ (function(module, exports, __webpack_require__) {

// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = __webpack_require__(198);
var defined = __webpack_require__(115);
module.exports = function (it) {
  return IObject(defined(it));
};


/***/ }),
/* 29 */
/***/ (function(module, exports) {

// shim for using process in browser
var process = module.exports = {};

// cached from whatever global is present so that test runners that stub it
// don't break things.  But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals.  It's inside a
// function because try/catches deoptimize in certain engines.

var cachedSetTimeout;
var cachedClearTimeout;

function defaultSetTimout() {
    throw new Error('setTimeout has not been defined');
}
function defaultClearTimeout () {
    throw new Error('clearTimeout has not been defined');
}
(function () {
    try {
        if (typeof setTimeout === 'function') {
            cachedSetTimeout = setTimeout;
        } else {
            cachedSetTimeout = defaultSetTimout;
        }
    } catch (e) {
        cachedSetTimeout = defaultSetTimout;
    }
    try {
        if (typeof clearTimeout === 'function') {
            cachedClearTimeout = clearTimeout;
        } else {
            cachedClearTimeout = defaultClearTimeout;
        }
    } catch (e) {
        cachedClearTimeout = defaultClearTimeout;
    }
} ())
function runTimeout(fun) {
    if (cachedSetTimeout === setTimeout) {
        //normal enviroments in sane situations
        return setTimeout(fun, 0);
    }
    // if setTimeout wasn't available but was latter defined
    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
        cachedSetTimeout = setTimeout;
        return setTimeout(fun, 0);
    }
    try {
        // when when somebody has screwed with setTimeout but no I.E. maddness
        return cachedSetTimeout(fun, 0);
    } catch(e){
        try {
            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
            return cachedSetTimeout.call(null, fun, 0);
        } catch(e){
            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
            return cachedSetTimeout.call(this, fun, 0);
        }
    }


}
function runClearTimeout(marker) {
    if (cachedClearTimeout === clearTimeout) {
        //normal enviroments in sane situations
        return clearTimeout(marker);
    }
    // if clearTimeout wasn't available but was latter defined
    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
        cachedClearTimeout = clearTimeout;
        return clearTimeout(marker);
    }
    try {
        // when when somebody has screwed with setTimeout but no I.E. maddness
        return cachedClearTimeout(marker);
    } catch (e){
        try {
            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
            return cachedClearTimeout.call(null, marker);
        } catch (e){
            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
            return cachedClearTimeout.call(this, marker);
        }
    }



}
var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;

function cleanUpNextTick() {
    if (!draining || !currentQueue) {
        return;
    }
    draining = false;
    if (currentQueue.length) {
        queue = currentQueue.concat(queue);
    } else {
        queueIndex = -1;
    }
    if (queue.length) {
        drainQueue();
    }
}

function drainQueue() {
    if (draining) {
        return;
    }
    var timeout = runTimeout(cleanUpNextTick);
    draining = true;

    var len = queue.length;
    while(len) {
        currentQueue = queue;
        queue = [];
        while (++queueIndex < len) {
            if (currentQueue) {
                currentQueue[queueIndex].run();
            }
        }
        queueIndex = -1;
        len = queue.length;
    }
    currentQueue = null;
    draining = false;
    runClearTimeout(timeout);
}

process.nextTick = function (fun) {
    var args = new Array(arguments.length - 1);
    if (arguments.length > 1) {
        for (var i = 1; i < arguments.length; i++) {
            args[i - 1] = arguments[i];
        }
    }
    queue.push(new Item(fun, args));
    if (queue.length === 1 && !draining) {
        runTimeout(drainQueue);
    }
};

// v8 likes predictible objects
function Item(fun, array) {
    this.fun = fun;
    this.array = array;
}
Item.prototype.run = function () {
    this.fun.apply(null, this.array);
};
process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.version = ''; // empty string to avoid regexp issues
process.versions = {};

function noop() {}

process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.prependListener = noop;
process.prependOnceListener = noop;

process.listeners = function (name) { return [] }

process.binding = function (name) {
    throw new Error('process.binding is not supported');
};

process.cwd = function () { return '/' };
process.chdir = function (dir) {
    throw new Error('process.chdir is not supported');
};
process.umask = function() { return 0; };


/***/ }),
/* 30 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M21.2,4c-2.3,0-4.3,0.8-6,2.5s-2.5,3.7-2.5,6s0.8,4.3,2.5,6s3.7,2.5,6,2.5s4.3-0.8,6-2.5s2.5-3.7,2.5-6s-0.8-4.3-2.5-6 S23.5,4,21.2,4z M30.6,38c1.3,0,2.4-0.5,3.3-1.6s1.4-2.3,1.4-3.8c0-3.5-0.6-6.3-1.7-8.3s-2.8-3.1-5-3.2c-2.1,1.9-4.6,2.8-7.4,2.8 s-5.3-0.9-7.4-2.8c-2.2,0.1-3.8,1.2-5,3.2S7,29,7,32.5c0,1.5,0.5,2.8,1.4,3.8s2,1.6,3.3,1.6H30.6z'/%3E %3C/svg%3E\""

/***/ }),
/* 31 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M28.7,31.9c0-0.3-0.1-0.6-0.3-0.8s-0.5-0.3-0.8-0.3c-0.3,0-0.6,0.1-0.8,0.3s-0.3,0.5-0.3,0.8s0.1,0.6,0.3,0.8 c0.2,0.2,0.5,0.3,0.8,0.3c0.3,0,0.6-0.1,0.8-0.3C28.6,32.5,28.7,32.3,28.7,31.9z M33.2,31.9c0-0.3-0.1-0.6-0.3-0.8s-0.5-0.3-0.8-0.3 s-0.6,0.1-0.8,0.3s-0.3,0.5-0.3,0.8s0.1,0.6,0.3,0.8c0.2,0.2,0.5,0.3,0.8,0.3s0.6-0.1,0.8-0.3C33.1,32.5,33.2,32.3,33.2,31.9z M35.5,28v5.7c0,0.5-0.2,0.9-0.5,1.2s-0.7,0.5-1.2,0.5H7.7c-0.5,0-0.9-0.2-1.2-0.5C6.2,34.5,6,34.1,6,33.6V28c0-0.5,0.2-0.9,0.5-1.2 c0.3-0.3,0.7-0.5,1.2-0.5h7.6c0.2,0.7,0.7,1.2,1.2,1.6c0.6,0.4,1.2,0.6,2,0.6H23c0.7,0,1.4-0.2,2-0.6s1-1,1.2-1.6h7.6 c0.5,0,0.9,0.2,1.2,0.5C35.3,27.1,35.5,27.5,35.5,28z M11.8,16.8c0.2-0.5,0.5-0.7,1-0.7h4.5V8.1c0-0.3,0.1-0.6,0.3-0.8 C17.9,7.1,18.2,7,18.5,7H23c0.3,0,0.6,0.1,0.8,0.3c0.2,0.2,0.3,0.5,0.3,0.8v7.9h4.5c0.5,0,0.8,0.2,1,0.7c0.2,0.5,0.1,0.9-0.2,1.2 l-7.9,7.9c-0.2,0.2-0.5,0.3-0.8,0.3s-0.6-0.1-0.8-0.3L12,18C11.6,17.6,11.6,17.2,11.8,16.8z'/%3E %3C/svg%3E\""

/***/ }),
/* 32 */
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__(66);
var createDesc = __webpack_require__(171);
module.exports = __webpack_require__(46) ? function (object, key, value) {
  return dP.f(object, key, createDesc(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),
/* 33 */
/***/ (function(module, exports) {

var core = module.exports = { version: '2.5.1' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef


/***/ }),
/* 34 */
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (e) {
    return true;
  }
};


/***/ }),
/* 35 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M14.2,20.9c-2,0.1-3.7,0.9-5,2.4H6.7c-1,0-1.9-0.3-2.6-0.8C3.4,22.1,3,21.3,3,20.3c0-4.4,0.8-6.7,2.3-6.7 c0.1,0,0.3,0.1,0.8,0.4c0.5,0.3,1.1,0.5,1.8,0.8c0.8,0.3,1.5,0.4,2.2,0.4c0.8,0,1.7-0.1,2.5-0.4c-0.1,0.5-0.1,0.9-0.1,1.2 C12.7,17.8,13.2,19.4,14.2,20.9z M34.7,33.1c0,1.5-0.5,2.7-1.4,3.6c-0.9,0.9-2.1,1.3-3.7,1.3H13.2c-1.5,0-2.7-0.4-3.7-1.3 c-0.9-0.9-1.4-2.1-1.4-3.6c0-0.7,0-1.3,0.1-2s0.1-1.3,0.3-2.1c0.1-0.7,0.3-1.4,0.5-2s0.5-1.2,0.8-1.8c0.3-0.6,0.7-1.1,1.2-1.5 c0.4-0.4,1-0.8,1.6-1s1.3-0.4,2.1-0.4c0.1,0,0.4,0.1,0.8,0.4c0.4,0.3,0.9,0.6,1.4,0.9s1.2,0.6,2,0.9c0.8,0.3,1.7,0.4,2.5,0.4 s1.7-0.1,2.5-0.4c0.8-0.3,1.5-0.6,2-0.9c0.5-0.3,1-0.6,1.4-0.9s0.7-0.4,0.8-0.4c0.8,0,1.5,0.1,2.1,0.4s1.2,0.6,1.6,1 c0.4,0.4,0.8,0.9,1.2,1.5c0.3,0.6,0.6,1.2,0.8,1.8c0.2,0.6,0.4,1.3,0.5,2c0.1,0.7,0.2,1.4,0.3,2.1S34.7,32.5,34.7,33.1z M15.1,8.8 c0,1.3-0.5,2.5-1.4,3.4s-2.1,1.4-3.4,1.4s-2.5-0.5-3.4-1.4s-1.4-2.1-1.4-3.4s0.5-2.5,1.4-3.4S8.9,4,10.2,4s2.5,0.5,3.4,1.4 S15.1,7.5,15.1,8.8z M27.8,16.1c0,1.8-0.6,3.3-1.9,4.5c-1.3,1.3-2.8,1.9-4.5,1.9c-1.8,0-3.3-0.6-4.5-1.9c-1.3-1.3-1.9-2.8-1.9-4.5 s0.6-3.3,1.9-4.5s2.8-1.9,4.5-1.9c1.8,0,3.3,0.6,4.5,1.9C27.2,12.8,27.8,14.3,27.8,16.1z M39.8,20.3c0,1-0.4,1.7-1.1,2.2 c-0.7,0.5-1.6,0.8-2.6,0.8h-2.5c-1.3-1.5-3-2.4-5-2.4c1-1.5,1.5-3.1,1.5-4.8c0-0.4,0-0.8-0.1-1.2c0.8,0.3,1.7,0.4,2.5,0.4 c0.7,0,1.5-0.1,2.2-0.4c0.8-0.3,1.4-0.5,1.8-0.8c0.5-0.3,0.7-0.4,0.8-0.4C39,13.7,39.8,15.9,39.8,20.3z M37.4,8.8 c0,1.3-0.5,2.5-1.4,3.4c-0.9,0.9-2.1,1.4-3.4,1.4c-1.3,0-2.5-0.5-3.4-1.4c-0.9-0.9-1.4-2.1-1.4-3.4s0.5-2.5,1.4-3.4 C30.1,4.5,31.2,4,32.6,4C33.9,4,35,4.5,36,5.4C36.9,6.4,37.4,7.5,37.4,8.8z'/%3E %3C/svg%3E\""

/***/ }),
/* 36 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M20.9,25.5c0,0.8-0.2,1.4-0.7,2s-1,0.8-1.7,0.8H9.1c-0.7,0-1.2-0.3-1.7-0.8s-0.7-1.2-0.7-2s0.1-1.5,0.2-2.2s0.3-1.3,0.5-1.9 C7.7,20.8,8,20.3,8.5,20c0.5-0.4,1.1-0.5,1.8-0.5c0.1,0,0.3,0.2,0.6,0.3s0.5,0.3,0.7,0.4s0.4,0.2,0.7,0.3c0.3,0.1,0.5,0.2,0.8,0.3 c0.3,0.1,0.5,0.1,0.8,0.1s0.5,0,0.8-0.1s0.5-0.1,0.8-0.3c0.3-0.1,0.5-0.2,0.7-0.3c0.2-0.1,0.4-0.2,0.7-0.4c0.3-0.2,0.5-0.3,0.6-0.3 c0.7,0,1.3,0.2,1.8,0.5c0.5,0.4,0.9,0.8,1.1,1.4c0.3,0.6,0.4,1.2,0.5,1.9C20.8,24,20.9,24.7,20.9,25.5z M18,15.9 c0,1.2-0.4,2.1-1.2,3c-0.8,0.8-1.8,1.2-3,1.2s-2.1-0.4-3-1.2s-1.2-1.8-1.2-3s0.4-2.1,1.2-3c0.8-0.8,1.8-1.2,3-1.2s2.1,0.4,3,1.2 C17.6,13.8,18,14.8,18,15.9z M37.4,32.4V10c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.2-0.4-0.2H5c-0.2,0-0.3,0.1-0.4,0.2 C4.4,9.7,4.4,9.8,4.4,10v22.4c0,0.2,0.1,0.3,0.2,0.4C4.7,32.9,4.8,33,5,33h6.5v-1.8c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2 h1.2c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4V33H28v-1.8c0-0.2,0.1-0.3,0.2-0.4s0.3-0.2,0.4-0.2h1.2c0.2,0,0.3,0.1,0.4,0.2 s0.2,0.3,0.2,0.4V33h6.5c0.2,0,0.3-0.1,0.4-0.2C37.4,32.7,37.4,32.6,37.4,32.4z M39.8,10v22.4c0,0.8-0.3,1.5-0.9,2.1 c-0.6,0.6-1.3,0.9-2.1,0.9H5c-0.8,0-1.5-0.3-2.1-0.9C2.3,33.9,2,33.2,2,32.4V10c0-0.8,0.3-1.5,0.9-2.1S4.1,7,5,7h31.9 c0.8,0,1.5,0.3,2.1,0.9C39.5,8.4,39.8,9.1,39.8,10z M23.4,21.1c-0.1-0.1-0.2-0.3-0.2-0.4v-1.2c0-0.2,0.1-0.3,0.2-0.4 s0.3-0.2,0.4-0.2h4.3v-4.3c0-0.2,0.1-0.3,0.2-0.4s0.3-0.2,0.4-0.2h1.2c0.2,0,0.3,0.1,0.4,0.2s0.2,0.3,0.2,0.4v4.3h4.3 c0.2,0,0.3,0.1,0.4,0.2s0.2,0.3,0.2,0.4v1.2c0,0.2-0.1,0.3-0.2,0.4s-0.3,0.2-0.4,0.2h-4.3v4.3c0,0.2-0.1,0.3-0.2,0.4 s-0.3,0.2-0.4,0.2h-1.2c-0.2,0-0.3-0.1-0.4-0.2s-0.2-0.3-0.2-0.4v-4.3h-4.3C23.7,21.2,23.5,21.2,23.4,21.1z'/%3E %3C/svg%3E\""

/***/ }),
/* 37 */
/***/ (function(module, exports) {

module.exports = function(module) {
	if(!module.webpackPolyfill) {
		module.deprecate = function() {};
		module.paths = [];
		// module.parent = undefined by default
		if(!module.children) module.children = [];
		Object.defineProperty(module, "loaded", {
			enumerable: true,
			get: function() {
				return module.l;
			}
		});
		Object.defineProperty(module, "id", {
			enumerable: true,
			get: function() {
				return module.i;
			}
		});
		module.webpackPolyfill = 1;
	}
	return module;
};


/***/ }),
/* 38 */
/***/ (function(module, exports) {

// @flow
var LONG = 'long'
var SHORT = 'short'
var NARROW = 'narrow'
var NUMERIC = 'numeric'
var TWODIGIT = '2-digit'

/**
 * formatting information
 **/
module.exports = {
  number: {
    decimal: {
      style: 'decimal'
    },
    integer: {
      style: 'decimal',
      maximumFractionDigits: 0
    },
    currency: {
      style: 'currency',
      currency: 'USD'
    },
    percent: {
      style: 'percent'
    },
    default: {
      style: 'decimal'
    }
  },
  date: {
    short: {
      month: NUMERIC,
      day: NUMERIC,
      year: TWODIGIT
    },
    medium: {
      month: SHORT,
      day: NUMERIC,
      year: NUMERIC
    },
    long: {
      month: LONG,
      day: NUMERIC,
      year: NUMERIC
    },
    full: {
      month: LONG,
      day: NUMERIC,
      year: NUMERIC,
      weekday: LONG
    },
    default: {
      month: SHORT,
      day: NUMERIC,
      year: NUMERIC
    }
  },
  time: {
    short: {
      hour: NUMERIC,
      minute: NUMERIC
    },
    medium: {
      hour: NUMERIC,
      minute: NUMERIC,
      second: NUMERIC
    },
    long: {
      hour: NUMERIC,
      minute: NUMERIC,
      second: NUMERIC,
      timeZoneName: SHORT
    },
    full: {
      hour: NUMERIC,
      minute: NUMERIC,
      second: NUMERIC,
      timeZoneName: SHORT
    },
    default: {
      hour: NUMERIC,
      minute: NUMERIC,
      second: NUMERIC
    }
  },
  duration: {
    default: {
      hours: {
        minimumIntegerDigits: 1,
        maximumFractionDigits: 0
      },
      minutes: {
        minimumIntegerDigits: 2,
        maximumFractionDigits: 0
      },
      seconds: {
        minimumIntegerDigits: 2,
        maximumFractionDigits: 3
      }
    }
  },
  parseNumberPattern: function (pattern/*: ?string */) {
    if (!pattern) return
    var options = {}
    var currency = pattern.match(/\b[A-Z]{3}\b/i)
    var syms = pattern.replace(/[^¤]/g, '').length
    if (!syms && currency) syms = 1
    if (syms) {
      options.style = 'currency'
      options.currencyDisplay = syms === 1 ? 'symbol' : syms === 2 ? 'code' : 'name'
      options.currency = currency ? currency[0].toUpperCase() : 'USD'
    } else if (pattern.indexOf('%') >= 0) {
      options.style = 'percent'
    }
    if (!/[@#0]/.test(pattern)) return options.style ? options : undefined
    options.useGrouping = pattern.indexOf(',') >= 0
    if (/E\+?[@#0]+/i.test(pattern) || pattern.indexOf('@') >= 0) {
      var size = pattern.replace(/E\+?[@#0]+|[^@#0]/gi, '')
      options.minimumSignificantDigits = Math.min(Math.max(size.replace(/[^@0]/g, '').length, 1), 21)
      options.maximumSignificantDigits = Math.min(Math.max(size.length, 1), 21)
    } else {
      var parts = pattern.replace(/[^#0.]/g, '').split('.')
      var integer = parts[0]
      var n = integer.length - 1
      while (integer[n] === '0') --n
      options.minimumIntegerDigits = Math.min(Math.max(integer.length - 1 - n, 1), 21)
      var fraction = parts[1] || ''
      n = 0
      while (fraction[n] === '0') ++n
      options.minimumFractionDigits = Math.min(Math.max(n, 0), 20)
      while (fraction[n] === '#') ++n
      options.maximumFractionDigits = Math.min(Math.max(n, 0), 20)
    }
    return options
  },
  parseDatePattern: function (pattern/*: ?string */) {
    if (!pattern) return
    var options = {}
    for (var i = 0; i < pattern.length;) {
      var current = pattern[i]
      var n = 1
      while (pattern[++i] === current) ++n
      switch (current) {
        case 'G':
          options.era = n === 5 ? NARROW : n === 4 ? LONG : SHORT
          break
        case 'y':
        case 'Y':
          options.year = n === 2 ? TWODIGIT : NUMERIC
          break
        case 'M':
        case 'L':
          n = Math.min(Math.max(n - 1, 0), 4)
          options.month = [ NUMERIC, TWODIGIT, SHORT, LONG, NARROW ][n]
          break
        case 'E':
        case 'e':
        case 'c':
          options.weekday = n === 5 ? NARROW : n === 4 ? LONG : SHORT
          break
        case 'd':
        case 'D':
          options.day = n === 2 ? TWODIGIT : NUMERIC
          break
        case 'h':
        case 'K':
          options.hour12 = true
          options.hour = n === 2 ? TWODIGIT : NUMERIC
          break
        case 'H':
        case 'k':
          options.hour12 = false
          options.hour = n === 2 ? TWODIGIT : NUMERIC
          break
        case 'm':
          options.minute = n === 2 ? TWODIGIT : NUMERIC
          break
        case 's':
        case 'S':
          options.second = n === 2 ? TWODIGIT : NUMERIC
          break
        case 'z':
        case 'Z':
        case 'v':
        case 'V':
          options.timeZoneName = n === 1 ? SHORT : LONG
          break
      }
    }
    return Object.keys(options).length ? options : undefined
  }
}


/***/ }),
/* 39 */
/***/ (function(module, exports) {

// @flow
// "lookup" algorithm http://tools.ietf.org/html/rfc4647#section-3.4
// assumes normalized language tags, and matches in a case sensitive manner
module.exports = function lookupClosestLocale (locale/*: string | string[] | void */, available/*: { [string]: any } */)/*: ?string */ {
  if (typeof locale === 'string' && available[locale]) return locale
  var locales = [].concat(locale || [])
  for (var l = 0, ll = locales.length; l < ll; ++l) {
    var current = locales[l].split('-')
    while (current.length) {
      var candidate = current.join('-')
      if (available[candidate]) return candidate
      current.pop()
    }
  }
}


/***/ }),
/* 40 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// @flow


/*:: export type Rule = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other' */
var zero = 'zero', one = 'one', two = 'two', few = 'few', many = 'many', other = 'other'
var f = [
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return 0 <= n && n <= 1 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var n = +s
    return i === 0 || n === 1 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 0 ? zero
      : n === 1 ? one
      : n === 2 ? two
      : 3 <= n % 100 && n % 100 <= 10 ? few
      : 11 <= n % 100 && n % 100 <= 99 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    return i === 1 && v === 0 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n % 10 === 1 && n % 100 !== 11 ? one
      : (2 <= n % 10 && n % 10 <= 4) && (n % 100 < 12 || 14 < n % 100) ? few
      : n % 10 === 0 || (5 <= n % 10 && n % 10 <= 9) || (11 <= n % 100 && n % 100 <= 14) ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n % 10 === 1 && (n % 100 !== 11 && n % 100 !== 71 && n % 100 !== 91) ? one
      : n % 10 === 2 && (n % 100 !== 12 && n % 100 !== 72 && n % 100 !== 92) ? two
      : ((3 <= n % 10 && n % 10 <= 4) || n % 10 === 9) && ((n % 100 < 10 || 19 < n % 100) && (n % 100 < 70 || 79 < n % 100) && (n % 100 < 90 || 99 < n % 100)) ? few
      : n !== 0 && n % 1000000 === 0 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    var f = +(s + '.').split('.')[1]
    return v === 0 && i % 10 === 1 && i % 100 !== 11 || f % 10 === 1 && f % 100 !== 11 ? one
      : v === 0 && (2 <= i % 10 && i % 10 <= 4) && (i % 100 < 12 || 14 < i % 100) || (2 <= f % 10 && f % 10 <= 4) && (f % 100 < 12 || 14 < f % 100) ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    return i === 1 && v === 0 ? one
      : (2 <= i && i <= 4) && v === 0 ? few
      : v !== 0 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 0 ? zero
      : n === 1 ? one
      : n === 2 ? two
      : n === 3 ? few
      : n === 6 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var t = +('' + s).replace(/^[^.]*.?|0+$/g, '')
    var n = +s
    return n === 1 || t !== 0 && (i === 0 || i === 1) ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    var f = +(s + '.').split('.')[1]
    return v === 0 && i % 100 === 1 || f % 100 === 1 ? one
      : v === 0 && i % 100 === 2 || f % 100 === 2 ? two
      : v === 0 && (3 <= i % 100 && i % 100 <= 4) || (3 <= f % 100 && f % 100 <= 4) ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    return i === 0 || i === 1 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    var f = +(s + '.').split('.')[1]
    return v === 0 && (i === 1 || i === 2 || i === 3) || v === 0 && (i % 10 !== 4 && i % 10 !== 6 && i % 10 !== 9) || v !== 0 && (f % 10 !== 4 && f % 10 !== 6 && f % 10 !== 9) ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 ? one
      : n === 2 ? two
      : 3 <= n && n <= 6 ? few
      : 7 <= n && n <= 10 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 || n === 11 ? one
      : n === 2 || n === 12 ? two
      : ((3 <= n && n <= 10) || (13 <= n && n <= 19)) ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    return v === 0 && i % 10 === 1 ? one
      : v === 0 && i % 10 === 2 ? two
      : v === 0 && (i % 100 === 0 || i % 100 === 20 || i % 100 === 40 || i % 100 === 60 || i % 100 === 80) ? few
      : v !== 0 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    var n = +s
    return i === 1 && v === 0 ? one
      : i === 2 && v === 0 ? two
      : v === 0 && (n < 0 || 10 < n) && n % 10 === 0 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var t = +('' + s).replace(/^[^.]*.?|0+$/g, '')
    return t === 0 && i % 10 === 1 && i % 100 !== 11 || t !== 0 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 ? one
      : n === 2 ? two
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 0 ? zero
      : n === 1 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var n = +s
    return n === 0 ? zero
      : (i === 0 || i === 1) && n !== 0 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var f = +(s + '.').split('.')[1]
    var n = +s
    return n % 10 === 1 && (n % 100 < 11 || 19 < n % 100) ? one
      : (2 <= n % 10 && n % 10 <= 9) && (n % 100 < 11 || 19 < n % 100) ? few
      : f !== 0 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var v = (s + '.').split('.')[1].length
    var f = +(s + '.').split('.')[1]
    var n = +s
    return n % 10 === 0 || (11 <= n % 100 && n % 100 <= 19) || v === 2 && (11 <= f % 100 && f % 100 <= 19) ? zero
      : n % 10 === 1 && n % 100 !== 11 || v === 2 && f % 10 === 1 && f % 100 !== 11 || v !== 2 && f % 10 === 1 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    var f = +(s + '.').split('.')[1]
    return v === 0 && i % 10 === 1 && i % 100 !== 11 || f % 10 === 1 && f % 100 !== 11 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    var n = +s
    return i === 1 && v === 0 ? one
      : v !== 0 || n === 0 || n !== 1 && (1 <= n % 100 && n % 100 <= 19) ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 ? one
      : n === 0 || (2 <= n % 100 && n % 100 <= 10) ? few
      : 11 <= n % 100 && n % 100 <= 19 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    return i === 1 && v === 0 ? one
      : v === 0 && (2 <= i % 10 && i % 10 <= 4) && (i % 100 < 12 || 14 < i % 100) ? few
      : v === 0 && i !== 1 && (0 <= i % 10 && i % 10 <= 1) || v === 0 && (5 <= i % 10 && i % 10 <= 9) || v === 0 && (12 <= i % 100 && i % 100 <= 14) ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    return 0 <= i && i <= 1 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    return v === 0 && i % 10 === 1 && i % 100 !== 11 ? one
      : v === 0 && (2 <= i % 10 && i % 10 <= 4) && (i % 100 < 12 || 14 < i % 100) ? few
      : v === 0 && i % 10 === 0 || v === 0 && (5 <= i % 10 && i % 10 <= 9) || v === 0 && (11 <= i % 100 && i % 100 <= 14) ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var n = +s
    return i === 0 || n === 1 ? one
      : 2 <= n && n <= 10 ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var f = +(s + '.').split('.')[1]
    var n = +s
    return (n === 0 || n === 1) || i === 0 && f === 1 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    var v = (s + '.').split('.')[1].length
    return v === 0 && i % 100 === 1 ? one
      : v === 0 && i % 100 === 2 ? two
      : v === 0 && (3 <= i % 100 && i % 100 <= 4) || v !== 0 ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return (0 <= n && n <= 1) || (11 <= n && n <= 99) ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 || n === 5 || n === 7 || n === 8 || n === 9 || n === 10 ? one
      : n === 2 || n === 3 ? two
      : n === 4 ? few
      : n === 6 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    return (i % 10 === 1 || i % 10 === 2 || i % 10 === 5 || i % 10 === 7 || i % 10 === 8) || (i % 100 === 20 || i % 100 === 50 || i % 100 === 70 || i % 100 === 80) ? one
      : (i % 10 === 3 || i % 10 === 4) || (i % 1000 === 100 || i % 1000 === 200 || i % 1000 === 300 || i % 1000 === 400 || i % 1000 === 500 || i % 1000 === 600 || i % 1000 === 700 || i % 1000 === 800 || i % 1000 === 900) ? few
      : i === 0 || i % 10 === 6 || (i % 100 === 40 || i % 100 === 60 || i % 100 === 90) ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return (n % 10 === 2 || n % 10 === 3) && (n % 100 !== 12 && n % 100 !== 13) ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 || n === 3 ? one
      : n === 2 ? two
      : n === 4 ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 0 || n === 7 || n === 8 || n === 9 ? zero
      : n === 1 ? one
      : n === 2 ? two
      : n === 3 || n === 4 ? few
      : n === 5 || n === 6 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n % 10 === 1 && n % 100 !== 11 ? one
      : n % 10 === 2 && n % 100 !== 12 ? two
      : n % 10 === 3 && n % 100 !== 13 ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 ? one
      : n === 2 || n === 3 ? two
      : n === 4 ? few
      : n === 6 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 || n === 5 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 11 || n === 8 || n === 80 || n === 800 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    return i === 1 ? one
      : i === 0 || ((2 <= i % 100 && i % 100 <= 20) || i % 100 === 40 || i % 100 === 60 || i % 100 === 80) ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n % 10 === 6 || n % 10 === 9 || n % 10 === 0 && n !== 0 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var i = Math.floor(Math.abs(+s))
    return i % 10 === 1 && i % 100 !== 11 ? one
      : i % 10 === 2 && i % 100 !== 12 ? two
      : (i % 10 === 7 || i % 10 === 8) && (i % 100 !== 17 && i % 100 !== 18) ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 ? one
      : n === 2 || n === 3 ? two
      : n === 4 ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return 1 <= n && n <= 4 ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return (n === 1 || n === 5 || (7 <= n && n <= 9)) ? one
      : n === 2 || n === 3 ? two
      : n === 4 ? few
      : n === 6 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n === 1 ? one
      : n % 10 === 4 && n % 100 !== 14 ? many
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return (n % 10 === 1 || n % 10 === 2) && (n % 100 !== 11 && n % 100 !== 12) ? one
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return (n % 10 === 6 || n % 10 === 9) || n === 10 ? few
      : other
  },
  function (s/*: string | number */)/*: Rule */ {
    var n = +s
    return n % 10 === 3 && n % 100 !== 13 ? few
      : other
  }
]

module.exports = {
  af: { cardinal: f[0] },
  ak: { cardinal: f[1] },
  am: { cardinal: f[2] },
  ar: { cardinal: f[3] },
  ars: { cardinal: f[3] },
  as: { cardinal: f[2], ordinal: f[34] },
  asa: { cardinal: f[0] },
  ast: { cardinal: f[4] },
  az: { cardinal: f[0], ordinal: f[35] },
  be: { cardinal: f[5], ordinal: f[36] },
  bem: { cardinal: f[0] },
  bez: { cardinal: f[0] },
  bg: { cardinal: f[0] },
  bh: { cardinal: f[1] },
  bn: { cardinal: f[2], ordinal: f[34] },
  br: { cardinal: f[6] },
  brx: { cardinal: f[0] },
  bs: { cardinal: f[7] },
  ca: { cardinal: f[4], ordinal: f[37] },
  ce: { cardinal: f[0] },
  cgg: { cardinal: f[0] },
  chr: { cardinal: f[0] },
  ckb: { cardinal: f[0] },
  cs: { cardinal: f[8] },
  cy: { cardinal: f[9], ordinal: f[38] },
  da: { cardinal: f[10] },
  de: { cardinal: f[4] },
  dsb: { cardinal: f[11] },
  dv: { cardinal: f[0] },
  ee: { cardinal: f[0] },
  el: { cardinal: f[0] },
  en: { cardinal: f[4], ordinal: f[39] },
  eo: { cardinal: f[0] },
  es: { cardinal: f[0] },
  et: { cardinal: f[4] },
  eu: { cardinal: f[0] },
  fa: { cardinal: f[2] },
  ff: { cardinal: f[12] },
  fi: { cardinal: f[4] },
  fil: { cardinal: f[13], ordinal: f[0] },
  fo: { cardinal: f[0] },
  fr: { cardinal: f[12], ordinal: f[0] },
  fur: { cardinal: f[0] },
  fy: { cardinal: f[4] },
  ga: { cardinal: f[14], ordinal: f[0] },
  gd: { cardinal: f[15] },
  gl: { cardinal: f[4] },
  gsw: { cardinal: f[0] },
  gu: { cardinal: f[2], ordinal: f[40] },
  guw: { cardinal: f[1] },
  gv: { cardinal: f[16] },
  ha: { cardinal: f[0] },
  haw: { cardinal: f[0] },
  he: { cardinal: f[17] },
  hi: { cardinal: f[2], ordinal: f[40] },
  hr: { cardinal: f[7] },
  hsb: { cardinal: f[11] },
  hu: { cardinal: f[0], ordinal: f[41] },
  hy: { cardinal: f[12], ordinal: f[0] },
  io: { cardinal: f[4] },
  is: { cardinal: f[18] },
  it: { cardinal: f[4], ordinal: f[42] },
  iu: { cardinal: f[19] },
  iw: { cardinal: f[17] },
  jgo: { cardinal: f[0] },
  ji: { cardinal: f[4] },
  jmc: { cardinal: f[0] },
  ka: { cardinal: f[0], ordinal: f[43] },
  kab: { cardinal: f[12] },
  kaj: { cardinal: f[0] },
  kcg: { cardinal: f[0] },
  kk: { cardinal: f[0], ordinal: f[44] },
  kkj: { cardinal: f[0] },
  kl: { cardinal: f[0] },
  kn: { cardinal: f[2] },
  ks: { cardinal: f[0] },
  ksb: { cardinal: f[0] },
  ksh: { cardinal: f[20] },
  ku: { cardinal: f[0] },
  kw: { cardinal: f[19] },
  ky: { cardinal: f[0] },
  lag: { cardinal: f[21] },
  lb: { cardinal: f[0] },
  lg: { cardinal: f[0] },
  ln: { cardinal: f[1] },
  lt: { cardinal: f[22] },
  lv: { cardinal: f[23] },
  mas: { cardinal: f[0] },
  mg: { cardinal: f[1] },
  mgo: { cardinal: f[0] },
  mk: { cardinal: f[24], ordinal: f[45] },
  ml: { cardinal: f[0] },
  mn: { cardinal: f[0] },
  mo: { cardinal: f[25], ordinal: f[0] },
  mr: { cardinal: f[2], ordinal: f[46] },
  mt: { cardinal: f[26] },
  nah: { cardinal: f[0] },
  naq: { cardinal: f[19] },
  nb: { cardinal: f[0] },
  nd: { cardinal: f[0] },
  ne: { cardinal: f[0], ordinal: f[47] },
  nl: { cardinal: f[4] },
  nn: { cardinal: f[0] },
  nnh: { cardinal: f[0] },
  no: { cardinal: f[0] },
  nr: { cardinal: f[0] },
  nso: { cardinal: f[1] },
  ny: { cardinal: f[0] },
  nyn: { cardinal: f[0] },
  om: { cardinal: f[0] },
  or: { cardinal: f[0], ordinal: f[48] },
  os: { cardinal: f[0] },
  pa: { cardinal: f[1] },
  pap: { cardinal: f[0] },
  pl: { cardinal: f[27] },
  prg: { cardinal: f[23] },
  ps: { cardinal: f[0] },
  pt: { cardinal: f[28] },
  'pt-PT': { cardinal: f[4] },
  rm: { cardinal: f[0] },
  ro: { cardinal: f[25], ordinal: f[0] },
  rof: { cardinal: f[0] },
  ru: { cardinal: f[29] },
  rwk: { cardinal: f[0] },
  saq: { cardinal: f[0] },
  scn: { cardinal: f[4], ordinal: f[42] },
  sd: { cardinal: f[0] },
  sdh: { cardinal: f[0] },
  se: { cardinal: f[19] },
  seh: { cardinal: f[0] },
  sh: { cardinal: f[7] },
  shi: { cardinal: f[30] },
  si: { cardinal: f[31] },
  sk: { cardinal: f[8] },
  sl: { cardinal: f[32] },
  sma: { cardinal: f[19] },
  smi: { cardinal: f[19] },
  smj: { cardinal: f[19] },
  smn: { cardinal: f[19] },
  sms: { cardinal: f[19] },
  sn: { cardinal: f[0] },
  so: { cardinal: f[0] },
  sq: { cardinal: f[0], ordinal: f[49] },
  sr: { cardinal: f[7] },
  ss: { cardinal: f[0] },
  ssy: { cardinal: f[0] },
  st: { cardinal: f[0] },
  sv: { cardinal: f[4], ordinal: f[50] },
  sw: { cardinal: f[4] },
  syr: { cardinal: f[0] },
  ta: { cardinal: f[0] },
  te: { cardinal: f[0] },
  teo: { cardinal: f[0] },
  ti: { cardinal: f[1] },
  tig: { cardinal: f[0] },
  tk: { cardinal: f[0], ordinal: f[51] },
  tl: { cardinal: f[13], ordinal: f[0] },
  tn: { cardinal: f[0] },
  tr: { cardinal: f[0] },
  ts: { cardinal: f[0] },
  tzm: { cardinal: f[33] },
  ug: { cardinal: f[0] },
  uk: { cardinal: f[29], ordinal: f[52] },
  ur: { cardinal: f[4] },
  uz: { cardinal: f[0] },
  ve: { cardinal: f[0] },
  vo: { cardinal: f[0] },
  vun: { cardinal: f[0] },
  wa: { cardinal: f[1] },
  wae: { cardinal: f[0] },
  xh: { cardinal: f[0] },
  xog: { cardinal: f[0] },
  yi: { cardinal: f[4] },
  zu: { cardinal: f[2] },
  lo: { ordinal: f[0] },
  ms: { ordinal: f[0] },
  vi: { ordinal: f[0] }
}


/***/ }),
/* 41 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhAgA4AIcAAMnZ7cra7cra7svb7szb7s3c7s3c787d7s7d787e7s7e78/e78/f8NDe8NDf8NHf8NDg8NDh8NHh8NLg8NLg8dLh8NPh8dTh8tXi8tbj8tbj89fk89jk89nl89nl9Nrm9PD1+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAACADgAAAhlAEGA+EDwgwcPHTpw4LCh4QYNGjJIzIChIoYLFyxotEChI4UJEx6IfNCgZIMFCxCoRGCgpYECBQjIJDBggAABAQIA2AkAps8CBw4kGJpAgQKUDJIycOAAAoQIUCNIkFChqtWrAQEAOw=="

/***/ }),
/* 42 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M37.6,32.4v-16c-0.4,0.5-1.4,1.2-2,1.6c-3.8,2.8-6.8,5-9,6.8c-0.7,0.6-1.3,1-1.8,1.3s-1.1,0.6-1.8,1 c-0.8,0.3-1.5,0.5-2.2,0.5h0c-0.7,0-1.4-0.2-2.2-0.5c-0.8-0.3-1.4-0.7-1.8-1s-1-0.8-1.8-1.3c-2.2-1.8-5.2-4-9-6.8 c-0.5-0.4-1.5-1.2-2-1.6v16c0,0.2,0.1,0.3,0.2,0.5C4.5,32.9,4.7,33,4.8,33h32.1c0.2,0,0.3-0.1,0.5-0.2S37.6,32.5,37.6,32.4z M37.6,11v-0.7l0,0l-0.1-0.5l-0.1-0.2l-0.2-0.2l-0.3-0.1H4.8c-0.2,0-0.3,0.1-0.5,0.2C4.2,9.7,4.2,9.8,4.2,10c0,2.3,1.6,4.5,3.6,6.1 c2.7,2.1,5.5,4.3,8.5,6.5c0.1,0.1,0.3,0.3,0.7,0.6s0.7,0.6,1,0.8c0.2,0.2,0.6,0.4,0.9,0.6c0.4,0.3,0.7,0.4,1.1,0.6 c0.3,0.1,0.6,0.2,0.9,0.2h0c0.3,0,0.6-0.1,0.9-0.2c0.3-0.1,0.7-0.3,1.1-0.6c0.4-0.3,0.7-0.5,0.9-0.6c0.2-0.2,0.6-0.4,1-0.8 s0.7-0.5,0.7-0.6c2.9-2.3,5.7-4.4,8.5-6.5c0.8-0.6,2.1-1.7,2.7-2.7S37.6,11.8,37.6,11z M39.8,10.2v21.9c0,0.9-0.3,1.6-1,2.3 c-0.7,0.6-1.5,0.9-2.4,0.9h-31c-0.9,0-1.7-0.3-2.4-0.9S2,33,2,32.1V10.2c0-0.9,0.3-1.6,1-2.3S4.4,7,5.4,7h31c0.9,0,1.7,0.3,2.4,0.9 C39.5,8.6,39.8,9.3,39.8,10.2z'/%3E %3C/svg%3E\""

/***/ }),
/* 43 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath id='Icon_Phone' d='M35.3,29.4c0,0.4-0.1,0.8-0.2,1.4c-0.1,0.6-0.3,1-0.4,1.4c-0.3,0.7-1.1,1.4-2.5,2.1c-1.3,0.7-2.5,1-3.7,1 c-0.4,0-0.7,0-1.1-0.1s-0.7-0.1-1.2-0.3s-0.7-0.2-0.9-0.3c-0.2-0.1-0.6-0.2-1.1-0.4s-0.9-0.3-1-0.4c-1.3-0.5-2.5-1-3.5-1.7 c-1.7-1.1-3.5-2.5-5.3-4.3c-1.8-1.8-3.3-3.6-4.3-5.3c-0.6-1-1.2-2.2-1.7-3.5c0-0.1-0.2-0.4-0.4-1c-0.2-0.5-0.3-0.9-0.4-1.1 S7.4,16.5,7.3,16c-0.1-0.4-0.2-0.8-0.3-1.2C7,14.5,7,14.2,7,13.8c0-1.2,0.3-2.5,1-3.7c0.8-1.4,1.5-2.2,2.1-2.5 c0.3-0.1,0.8-0.3,1.4-0.4S12.6,7,13,7c0.2,0,0.3,0,0.4,0.1c0.2,0.1,0.6,0.6,1.1,1.5c0.1,0.3,0.3,0.6,0.6,1.1 c0.3,0.5,0.5,0.9,0.7,1.3c0.2,0.4,0.4,0.7,0.6,1.1c0,0.1,0.2,0.2,0.4,0.5c0.2,0.3,0.3,0.5,0.4,0.7s0.1,0.4,0.1,0.6 c0,0.3-0.2,0.6-0.6,1c-0.4,0.4-0.8,0.8-1.2,1.1s-0.9,0.7-1.2,1.1c-0.4,0.4-0.6,0.7-0.6,0.9c0,0.1,0,0.3,0.1,0.5 c0.1,0.2,0.1,0.3,0.2,0.4s0.1,0.3,0.3,0.5c0.1,0.2,0.2,0.4,0.2,0.4c1,1.8,2.2,3.4,3.5,4.7c1.3,1.3,2.9,2.5,4.7,3.5 c0,0,0.2,0.1,0.4,0.2c0.2,0.1,0.4,0.2,0.5,0.3s0.2,0.1,0.4,0.2c0.2,0.1,0.3,0.1,0.5,0.1c0.2,0,0.6-0.2,0.9-0.6 c0.4-0.4,0.7-0.8,1.1-1.2c0.3-0.4,0.7-0.9,1.1-1.2c0.4-0.4,0.7-0.6,1-0.6c0.2,0,0.4,0,0.6,0.1s0.4,0.2,0.7,0.4s0.4,0.3,0.5,0.4 c0.3,0.2,0.7,0.4,1.1,0.6c0.4,0.2,0.8,0.4,1.3,0.7c0.5,0.3,0.8,0.5,1.1,0.6c0.9,0.5,1.4,0.8,1.5,1.1C35.3,29.1,35.3,29.2,35.3,29.4z '/%3E %3C/svg%3E\""

/***/ }),
/* 44 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(11);
var hide = __webpack_require__(32);
var has = __webpack_require__(47);
var SRC = __webpack_require__(102)('src');
var TO_STRING = 'toString';
var $toString = Function[TO_STRING];
var TPL = ('' + $toString).split(TO_STRING);

__webpack_require__(33).inspectSource = function (it) {
  return $toString.call(it);
};

(module.exports = function (O, key, val, safe) {
  var isFunction = typeof val == 'function';
  if (isFunction) has(val, 'name') || hide(val, 'name', key);
  if (O[key] === val) return;
  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
  if (O === global) {
    O[key] = val;
  } else if (!safe) {
    delete O[key];
    hide(O, key, val);
  } else if (O[key]) {
    O[key] = val;
  } else {
    hide(O, key, val);
  }
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, TO_STRING, function toString() {
  return typeof this == 'function' && this[SRC] || $toString.call(this);
});


/***/ }),
/* 45 */
/***/ (function(module, exports) {

module.exports = function (it) {
  return typeof it === 'object' ? it !== null : typeof it === 'function';
};


/***/ }),
/* 46 */
/***/ (function(module, exports, __webpack_require__) {

// Thank's IE8 for his funny defineProperty
module.exports = !__webpack_require__(170)(function () {
  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),
/* 47 */
/***/ (function(module, exports) {

var hasOwnProperty = {}.hasOwnProperty;
module.exports = function (it, key) {
  return hasOwnProperty.call(it, key);
};


/***/ }),
/* 48 */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 49 */
/***/ (function(module, exports, __webpack_require__) {

// optional / simple context binding
var aFunction = __webpack_require__(71);
module.exports = function (fn, that, length) {
  aFunction(fn);
  if (that === undefined) return fn;
  switch (length) {
    case 1: return function (a) {
      return fn.call(that, a);
    };
    case 2: return function (a, b) {
      return fn.call(that, a, b);
    };
    case 3: return function (a, b, c) {
      return fn.call(that, a, b, c);
    };
  }
  return function (/* ...args */) {
    return fn.apply(that, arguments);
  };
};


/***/ }),
/* 50 */
/***/ (function(module, exports) {

module.exports = {};


/***/ }),
/* 51 */
/***/ (function(module, exports) {

var toString = {}.toString;

module.exports = function (it) {
  return toString.call(it).slice(8, -1);
};


/***/ }),
/* 52 */
/***/ (function(module, exports) {

function _classCallCheck(instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
}

module.exports = _classCallCheck;

/***/ }),
/* 53 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(1214);

/***/ }),
/* 54 */,
/* 55 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M34.7,30.4c0-0.2-0.1-0.3-0.2-0.5L23.3,18.8c0.4-1,0.7-2.2,0.7-3.3c0-2.3-0.9-4.4-2.5-6c-1.6-1.6-3.7-2.5-6-2.5 c-2.3,0-4.4,0.9-6,2.5c-3.3,3.3-3.3,8.7,0,12c1.6,1.6,3.7,2.5,6,2.5c1.2,0,2.3-0.2,3.3-0.7l3.7,3.7c0.2,0.2,0.4,0.2,0.6,0.2l2-0.1 l-0.1,2c0,0.2,0.1,0.4,0.2,0.6c0.1,0.2,0.4,0.2,0.6,0.2l2-0.1l-0.1,2c0,0.2,0.1,0.4,0.2,0.6c0.2,0.2,0.3,0.2,0.6,0.2l2-0.1l-0.1,2 c0,0.2,0.1,0.4,0.2,0.6c0.1,0.1,0.3,0.2,0.5,0.2c0,0,0.1,0,0.1,0l3.1-0.3c0.4,0,0.7-0.4,0.7-0.8L34.7,30.4z M14.4,14.5 c-0.9,0.9-2.5,0.9-3.4,0c-0.9-0.9-0.9-2.5,0-3.4c0.9-0.9,2.5-0.9,3.4,0C15.4,12,15.4,13.5,14.4,14.5L14.4,14.5z M32,30.7 c-0.1,0.1-0.3,0.2-0.4,0.2c-0.1,0-0.3-0.1-0.4-0.2l-9.5-9.5c0.3-0.3,0.5-0.6,0.7-0.9l9.6,9.6C32.3,30.1,32.3,30.5,32,30.7L32,30.7z M32,30.7'/%3E %3C/svg%3E\""

/***/ }),
/* 56 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M22.2,38h-2.4c-0.4,0-0.6-0.1-0.9-0.3c-0.2-0.2-0.3-0.5-0.3-0.9V23.4H5.2c-0.4,0-0.6-0.1-0.9-0.3C4.1,22.8,4,22.6,4,22.2 v-2.4c0-0.4,0.1-0.6,0.3-0.9c0.2-0.2,0.5-0.3,0.9-0.3h13.3V5.2c0-0.4,0.1-0.6,0.3-0.9C19.1,4.1,19.4,4,19.8,4h2.4 c0.4,0,0.6,0.1,0.9,0.3c0.2,0.2,0.3,0.5,0.3,0.9v13.3h13.3c0.4,0,0.6,0.1,0.9,0.3c0.2,0.2,0.3,0.5,0.3,0.9v2.4 c0,0.4-0.1,0.6-0.3,0.9s-0.5,0.3-0.9,0.3H23.4v13.3c0,0.4-0.1,0.6-0.3,0.9S22.6,38,22.2,38z'/%3E %3C/svg%3E\""

/***/ }),
/* 57 */,
/* 58 */
/***/ (function(module, exports) {

/**
 * @license     http://creativecommons.org/licenses/publicdomain Public Domain
 * @author      Koji Horaguchi <horaguchi@horaguchi.net>
 */
if (typeof Locale == 'undefined') {
  Locale = function (category, locale) {
    this._instance = true;
    this.LC_ALL =      'C';
    this.LC_COLLATE =  'C';
    this.LC_CTYPE =    'C';
    this.LC_MESSAGES = 'C';
    this.LC_MONETARY = 'C';
    this.LC_NUMERIC =  'C';
    this.LC_TIME =     'C';
    this.setlocale(category, locale);
  };
}

Locale.VERSION = '0.0.3';
Locale.EXPORT = [
  'LC_ALL',
  'LC_COLLATE',
  'LC_CTYPE',
  'LC_MESSAGES',
  'LC_MONETARY',
  'LC_NUMERIC',
  'LC_TIME'
];
Locale.EXPORT_OK = [
  'setlocale'
];
Locale.EXPORT_TAGS = {
  ':common': Locale.EXPORT,
  ':all': Locale.EXPORT.concat(Locale.EXPORT_OK)
};

Locale.prototype.TranslationLists = {};

Locale.LC_ALL =      'LC_ALL';
Locale.LC_COLLATE =  'LC_COLLATE';
Locale.LC_CTYPE =    'LC_CTYPE';
Locale.LC_MESSAGES = 'LC_MESSAGES';
Locale.LC_MONETARY = 'LC_MONETARY';
Locale.LC_NUMERIC =  'LC_NUMERIC';
Locale.LC_TIME =     'LC_TIME';

Locale.setlocale = Locale.prototype.setlocale = function (category, locale) {
  return function () {
    if (locale === null || typeof locale == 'undefined') {
      return this[category];
    }

    if (locale == '') {
      locale = (window.navigator.browserLanguage || window.navigator.language || 'C')
        .replace(/^(.{2}).?(.{2})?.*$/, function (match, lang, terr) {
          return lang.toLowerCase() + (terr ? '_' + terr.toUpperCase() : '');
        });
    }

    switch (category) {
      case Locale.LC_ALL:
        this.LC_ALL      = locale;
        this.LC_COLLATE  = locale;
        this.LC_CTYPE    = locale;
        this.LC_MESSAGES = locale;
        this.LC_MONETARY = locale;
        this.LC_NUMERIC  = locale;
        this.LC_TIME     = locale;
        break;
      case Locale.LC_COLLATE:
      case Locale.LC_CTYPE:
      case Locale.LC_MESSAGES:
      case Locale.LC_MONETARY:
      case Locale.LC_NUMERIC:
      case Locale.LC_TIME:
        this[category] = locale;
        break;
      default:
        return false;
    }
    return locale;
  }.call(this._instance ? this : arguments.callee);
};

Locale.setlocale.LC_ALL =      'C';
Locale.setlocale.LC_COLLATE =  'C';
Locale.setlocale.LC_CTYPE =    'C';
Locale.setlocale.LC_MESSAGES = 'C';
Locale.setlocale.LC_MONETARY = 'C';
Locale.setlocale.LC_NUMERIC =  'C';
Locale.setlocale.LC_TIME =     'C';

/**
 * get translation data from generic locale object (partial clone of Zend Frameworks locale data)
 * 
 * @param   type (Date, Symbol, ...)
 * @param   key  the key
 * @return  translation data
 */
Locale.getTranslationData = function(type, key) {
    
    var value = '';
 
    if ( Locale.prototype.TranslationLists[type] && Locale.prototype.TranslationLists[type][key] ) {
        value = Locale.prototype.TranslationLists[type][key];
    }
    
    return value;
};

/**
 * get translation list from generic locale object (partial clone of Zend Frameworks locale data)
 * 
 * @param {String} type
 * @return {Object}
 */
Locale.getTranslationList = function(type) {
    return Locale.prototype.TranslationLists[type];
}


/***/ }),
/* 59 */
/***/ (function(module, exports) {

/**
 * @license     http://creativecommons.org/licenses/publicdomain Public Domain
 * @author      Koji Horaguchi <horaguchi@horaguchi.net>
 */
 
/* We don't support dynamic inclusion of po files any longer!
if (typeof ActiveXObject != 'undefined' && typeof XMLHttpRequest == 'undefined') {
  XMLHttpRequest = function () { try { return new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) { return new ActiveXObject("Microsoft.XMLHTTP"); } };
}
*/

/**
 * @constuctor
 */
Locale.Gettext = function (locale) {
    this.locale = typeof locale == 'string' ? new Locale(Locale.LC_ALL, locale) : locale || Locale;
    this.domain = 'messages';
    this.category = Locale.LC_MESSAGES;
    this.suffix = 'po';
    this.dir = '.';
};

Locale.Gettext.prototype.bindtextdomain = function (domain, dir) {
  this.dir = dir;
  this.domain = domain;
};

Locale.Gettext.prototype.textdomain = function (domain) {
  this.domain = domain;
};

Locale.Gettext.prototype.getmsg = function (domain, category, reload) {
  var key = this._getkey(category, domain);
  return Locale.Gettext.prototype._msgs[key];
};

Locale.Gettext.prototype._msgs = {};

Locale.Gettext.prototype._getkey = function(category, domain) {
    return this.dir + '/' + category + '/' + domain; // expect category is str
};

/*
Locale.Gettext.prototype._url = function (category, domain) {
 try {
    var req = new XMLHttpRequest;

    req.open('POST', 'index.php', false);
    req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    req.setRequestHeader('X-Tine20-Request-Type', 'JSON');
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.send('method=Tinebase.getTranslations&requestType=JSON&application=' + domain + '&jsonKey=' + Tine.Tinebase.registry.get('jsonKey'));
    if (req.status == 200 || req.status == 304 || req.status == 0 || req.status == null) {
      return Ext.util.JSON.decode(req.responseText);
    }
  } catch (e) {
    return '';
  }
};
*/

Locale.Gettext.prototype.dcgettext = function (domain, msgid, category) {
  var msg = this.getmsg(domain, category);
  
  return msg ? msg.get(msgid) || msgid : msgid;
};

Locale.Gettext.prototype.dcngettext = function (domain, msgid, msgid_plural, n, category) {
  var msg = this.getmsg(domain, category);
  
  if (msg) {
    return (msg.get(msgid, msgid_plural) || [msgid, msgid_plural])[msg.plural(n)] || (n > 1 ? msgid_plural : msgid);
  } else {
    // fallback if cataloge is not available
    return n > 1 ? msgid_plural : msgid;
  }
};

Locale.Gettext.prototype.dgettext = function (domain, msgid) {
  return this.dcgettext(domain, msgid, this.category);
};

Locale.Gettext.prototype.dngettext = function (domain, msgid, msgid_plural, n) {
  return this.dcngettext(domain, msgid, msgid_plural, n, this.category);
};

Locale.Gettext.prototype.gettext = Locale.Gettext.prototype._ = Locale.Gettext.prototype._hidden = function (msgid) {
  return this.dcgettext(this.domain, msgid, this.category);
};

Locale.Gettext.prototype.ngettext = Locale.Gettext.prototype.n_ = Locale.Gettext.prototype.n_hidden = function (msgid, msgid_plural, n) {
  return this.dcngettext(this.domain, msgid, msgid_plural, n, this.category);
};

Locale.Gettext.prototype.gettext_noop = Locale.Gettext.prototype.N_ = function (msgid) {
  return msgid;
};

// extend object
(function () {
  for (var i in Locale.Gettext.prototype) {
    Locale.Gettext[i] = function (func) {
      return function () {
        return func.apply(Locale.Gettext, arguments);
      };
    }(Locale.Gettext.prototype[i]);
  }
})();

// Locale.Gettext.PO

if (typeof Locale.Gettext.PO == 'undefined') {
  Locale.Gettext.PO = function (object) {
    if (typeof object == 'string' || object instanceof String) {
      this.msg = Locale.Gettext.PO.po2object(object);
    } else if (object instanceof Object) {
      this.msg = object;
    } else {
      this.msg = {};
    }
  };
}

/*
Locale.Gettext.PO.VERSION = '0.0.4';
Locale.Gettext.PO.EXPORT_OK = [
  'po2object',
  'po2json'
];

Locale.Gettext.PO.po2object = function (po) {
  return eval(Locale.Gettext.PO.po2json(po));
};


Locale.Gettext.PO.po2json = function (po) {
  var first = true, plural = false;
  return '({\n' + po
    .replace(/\r?\n/g, '\n')
    .replace(/#.*\n/g, '')
    .replace(/"(\n+)"/g, '')
    .replace(/msgid "(.*?)"\nmsgid_plural "(.*?)"/g, 'msgid "$1, $2"')
    .replace(/msg(\S+) /g, function (match, op) {
      switch (op) {
      case 'id':
        return first
          ? (first = false, '')
          : plural
            ? (plural = false, ']\n, ')
            : ', ';
      case 'str':
        return ': ';
      case 'str[0]':
        return plural = true, ': [\n  ';
      default:
        return ' ,';
      }
    }) + (plural ? ']\n})' : '\n})');
};
*/

Locale.Gettext.PO.prototype.get = function (msgid, msgid_plural) {
  // for msgid_plural == ""
  return typeof msgid_plural != 'undefined' ? this.msg[msgid + ', ' + msgid_plural] : this.msg[msgid];
};

Locale.Gettext.PO.prototype.plural = function (n) {
  var nplurals, plural;
  eval((this.msg[''] + 'Plural-Forms: nplurals=2; plural=n != 1\n').match(/Plural-Forms:(.*)\n/)[1]);
  return plural === true
    ? 1
    : plural === false
      ? 0
      : plural;
};

// create dummy domain
Locale.Gettext.prototype._msgs.emptyDomain = new Locale.Gettext.PO(({}));


/***/ }),
/* 60 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhAgAWAIcAAKrM9tno++vz/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAACABYAAAgUAAUIHEiwoIAACBMqXMhwIQAAAQEAOw=="

/***/ }),
/* 61 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhQAASAMZzACYmJllZWRzE9y3I9y3J9y7I9y7J92HW+Xfc+oWFhYiIiJiYmKGhoaampqmpqby8vILf+6Xk+aXm+6fk+abm+6jn+6nn+67n+q/n+q7o+rDo+7Po+7Pp+8nJyd/f38Xu/Mfv/Mjv/M3u+8rw/NDv+9Dy/dXw+tfx/Nfy/Nny/Nry/Nzy+93y+9/z+9zz/N70/eLi4unp6ezs7O3t7e7u7uDz++H0++P0++L1/eP2/eX1++b1++f2++T2/eX2/eb3/ef3/ej2++j3/er3/Ov3/O33/On4/er4/ev4/ev4/u/4++34/Oz5/u35/u74/O/4/O75/u/5/u/6/vLy8vH4+/L5+/P5+/D4/PD6/vH6/vL6/vL7/vP7/vT5+/X6+/X6/PT7/vb6/Pf6/PX8/vb8/vf8/vj7/Pn7/Pr7/Pj9/vj9//n9//v8/Pr9//v+//z8/Pz+//3+//7//////////////////////////////////////////////////////yH5BAEAAH8ALAAAAABAABIAAAfGgH+Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXkUxCmIcdU5yEPQgfoIQNDjCRDwqJLwIEEpEZBzuJDTMMHo8PAACJKgIYAxSPEwICNrZ/Mgs0jbwBvogoAiIXBCCNEQIQAi3KfzEJM4vQ0Ykn1SQcAiWLxhDdNcrMzorm54gpAiQaBiGLMnCLJ+CGLVy6Fino1YsVIhcCNhCowOjAsWMHgthCVeoPDgEFLDTaYaNFjRtBniTy1PGPEQQjWsoUlAXKzJs4c+rcCSkQADs="

/***/ }),
/* 62 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M26.8,33.8v1.1c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.1-0.4,0.1H15.6c-0.2,0-0.3,0-0.4-0.1C15,35.1,15,35,15,34.8v-1.1 c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.1,0.4-0.1h10.6c0.2,0,0.3,0,0.4,0.1C26.7,33.5,26.8,33.6,26.8,33.8z M37.4,29.3V9.8 c0-0.1-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.2-0.4-0.2H5c-0.2,0-0.3,0.1-0.4,0.2S4.4,9.7,4.4,9.8v19.5c0,0.1,0.1,0.3,0.2,0.4 c0.1,0.1,0.3,0.2,0.4,0.2h31.9c0.2,0,0.3-0.1,0.4-0.2C37.4,29.6,37.4,29.5,37.4,29.3z M39.8,9.6v20c0,0.7-0.3,1.3-0.9,1.9 c-0.6,0.5-1.3,0.8-2.1,0.8H5c-0.8,0-1.5-0.3-2.1-0.8S2,30.3,2,29.6v-20c0-0.7,0.3-1.3,0.9-1.9S4.1,7,5,7h31.9c0.8,0,1.5,0.3,2.1,0.8 C39.5,8.3,39.8,8.9,39.8,9.6z M15.4,25.2l-0.7,0.6c-0.1,0.1-0.2,0.1-0.3,0.1c-0.1,0-0.2,0-0.3-0.1l-6.7-6c-0.1-0.1-0.1-0.2-0.1-0.3 c0-0.1,0-0.2,0.1-0.3l6.7-6c0.1-0.1,0.2-0.1,0.3-0.1c0.1,0,0.2,0,0.3,0.1l0.7,0.6c0.1,0.1,0.1,0.2,0.1,0.3s0,0.2-0.1,0.3l-5.7,5 l5.7,5c0.1,0.1,0.1,0.2,0.1,0.3C15.6,25,15.5,25.1,15.4,25.2z M23.9,11.5l-5.4,16.6c0,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.2,0.1-0.3,0 l-0.9-0.2c-0.1,0-0.2-0.1-0.3-0.2c-0.1-0.1-0.1-0.2,0-0.3l5.4-16.6c0-0.1,0.1-0.2,0.2-0.3c0.1-0.1,0.2-0.1,0.3,0l0.9,0.2 c0.1,0,0.2,0.1,0.3,0.2C24,11.3,24,11.4,23.9,11.5z M33.4,19.9l-6.7,6c-0.1,0.1-0.2,0.1-0.3,0.1s-0.2,0-0.3-0.1l-0.7-0.6 c-0.1-0.1-0.1-0.2-0.1-0.3c0-0.1,0-0.2,0.1-0.3l5.7-5l-5.7-5c-0.1-0.1-0.1-0.2-0.1-0.3s0-0.2,0.1-0.3l0.7-0.6 c0.1-0.1,0.2-0.1,0.3-0.1s0.2,0,0.3,0.1l6.7,6c0.1,0.1,0.1,0.2,0.1,0.3C33.6,19.7,33.5,19.8,33.4,19.9z'/%3E %3C/svg%3E\""

/***/ }),
/* 63 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M19.9,28.4L7.5,16C7.2,15.7,7,15.3,7,14.8c0-0.5,0.2-0.9,0.5-1.2C7.9,13.2,8.3,13,8.8,13h24.8c0.5,0,0.9,0.2,1.2,0.5 c0.4,0.4,0.5,0.8,0.5,1.2c0,0.5-0.2,0.9-0.5,1.2L22.4,28.4c-0.4,0.4-0.8,0.5-1.2,0.5C20.7,28.9,20.3,28.8,19.9,28.4z'/%3E %3C/svg%3E\""

/***/ }),
/* 64 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 65 */
/***/ (function(module, exports) {

var toString = {}.toString;

module.exports = function (it) {
  return toString.call(it).slice(8, -1);
};


/***/ }),
/* 66 */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(24);
var IE8_DOM_DEFINE = __webpack_require__(892);
var toPrimitive = __webpack_require__(893);
var dP = Object.defineProperty;

exports.f = __webpack_require__(46) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return dP(O, P, Attributes);
  } catch (e) { /* empty */ }
  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};


/***/ }),
/* 67 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(11);
var core = __webpack_require__(33);
var hide = __webpack_require__(32);
var redefine = __webpack_require__(44);
var ctx = __webpack_require__(68);
var PROTOTYPE = 'prototype';

var $export = function (type, name, source) {
  var IS_FORCED = type & $export.F;
  var IS_GLOBAL = type & $export.G;
  var IS_STATIC = type & $export.S;
  var IS_PROTO = type & $export.P;
  var IS_BIND = type & $export.B;
  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];
  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
  var key, own, out, exp;
  if (IS_GLOBAL) source = name;
  for (key in source) {
    // contains in native
    own = !IS_FORCED && target && target[key] !== undefined;
    // export native or passed
    out = (own ? target : source)[key];
    // bind timers to global for call from export context
    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
    // extend global
    if (target) redefine(target, key, out, type & $export.U);
    // export
    if (exports[key] != out) hide(exports, key, exp);
    if (IS_PROTO && expProto[key] != out) expProto[key] = out;
  }
};
global.core = core;
// type bitmap
$export.F = 1;   // forced
$export.G = 2;   // global
$export.S = 4;   // static
$export.P = 8;   // proto
$export.B = 16;  // bind
$export.W = 32;  // wrap
$export.U = 64;  // safe
$export.R = 128; // real proto method for `library`
module.exports = $export;


/***/ }),
/* 68 */
/***/ (function(module, exports, __webpack_require__) {

// optional / simple context binding
var aFunction = __webpack_require__(69);
module.exports = function (fn, that, length) {
  aFunction(fn);
  if (that === undefined) return fn;
  switch (length) {
    case 1: return function (a) {
      return fn.call(that, a);
    };
    case 2: return function (a, b) {
      return fn.call(that, a, b);
    };
    case 3: return function (a, b, c) {
      return fn.call(that, a, b, c);
    };
  }
  return function (/* ...args */) {
    return fn.apply(that, arguments);
  };
};


/***/ }),
/* 69 */
/***/ (function(module, exports) {

module.exports = function (it) {
  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
  return it;
};


/***/ }),
/* 70 */
/***/ (function(module, exports) {

module.exports = true;


/***/ }),
/* 71 */
/***/ (function(module, exports) {

module.exports = function (it) {
  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
  return it;
};


/***/ }),
/* 72 */
/***/ (function(module, exports) {

module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};


/***/ }),
/* 73 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.14 / 15.2.3.14 Object.keys(O)
var $keys = __webpack_require__(197);
var enumBugKeys = __webpack_require__(121);

module.exports = Object.keys || function keys(O) {
  return $keys(O, enumBugKeys);
};


/***/ }),
/* 74 */
/***/ (function(module, exports) {

var id = 0;
var px = Math.random();
module.exports = function (key) {
  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};


/***/ }),
/* 75 */
/***/ (function(module, exports, __webpack_require__) {

var def = __webpack_require__(19).f;
var has = __webpack_require__(27);
var TAG = __webpack_require__(8)('toStringTag');

module.exports = function (it, tag, stat) {
  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
};


/***/ }),
/* 76 */
/***/ (function(module, exports, __webpack_require__) {

var _typeof = __webpack_require__(1216);

function _possibleConstructorReturn(self, call) {
  if (call && (_typeof(call) === "object" || typeof call === "function")) {
    return call;
  }

  if (self === void 0) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }

  return self;
}

module.exports = _possibleConstructorReturn;

/***/ }),
/* 77 */
/***/ (function(module, exports) {

exports.f = {}.propertyIsEnumerable;


/***/ }),
/* 78 */
/***/ (function(module, exports, __webpack_require__) {

var _Object$setPrototypeOf = __webpack_require__(1232);

var _Object$create = __webpack_require__(1236);

function _inherits(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function");
  }

  subClass.prototype = _Object$create(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      enumerable: false,
      writable: true,
      configurable: true
    }
  });
  if (superClass) _Object$setPrototypeOf ? _Object$setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
}

module.exports = _inherits;

/***/ }),
/* 79 */
/***/ (function(module, exports) {

/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/
module.exports = function(src) {
	function log(error) {
		(typeof console !== "undefined")
		&& (console.error || console.log)("[Script Loader]", error);
	}

	// Check for IE =< 8
	function isIE() {
		return typeof attachEvent !== "undefined" && typeof addEventListener === "undefined";
	}

	try {
		if (typeof execScript !== "undefined" && isIE()) {
			execScript(src);
		} else if (typeof eval !== "undefined") {
			eval.call(null, src);
		} else {
			log("EvalError: No eval function available");
		}
	} catch (error) {
		log(error);
	}
}


/***/ }),
/* 80 */,
/* 81 */,
/* 82 */,
/* 83 */,
/* 84 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M32.2,24.1 M37.4,32.4V10c0-0.2-0.1-0.3-0.2-0.4c-0.1-0.1-0.3-0.2-0.4-0.2H5c-0.2,0-0.3,0.1-0.4,0.2C4.4,9.7,4.4,9.8,4.4,10 v22.4c0,0.2,0.1,0.3,0.2,0.4C4.7,32.9,4.8,33,5,33h6.5v-1.8c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2h1.2 c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4V33H28v-1.8c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2h1.2 c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4V33h6.5c0.2,0,0.3-0.1,0.4-0.2C37.4,32.7,37.4,32.6,37.4,32.4z M39.8,10v22.4 c0,0.8-0.3,1.5-0.9,2.1c-0.6,0.6-1.3,0.9-2.1,0.9H5c-0.8,0-1.5-0.3-2.1-0.9C2.3,33.9,2,33.2,2,32.4V10c0-0.8,0.3-1.5,0.9-2.1 S4.1,7,5,7h31.9c0.8,0,1.5,0.3,2.1,0.9C39.5,8.4,39.8,9.1,39.8,10z M28.3,26.8L27.1,28c-0.2,0.2-0.4,0.2-0.6,0.2s-0.4-0.1-0.6-0.2 l-5-5l-5,5c-0.2,0.2-0.4,0.2-0.6,0.2s-0.4-0.1-0.6-0.2l-1.2-1.2c-0.2-0.2-0.2-0.4-0.2-0.6c0-0.2,0.1-0.4,0.2-0.6l5-5l-5-5 c-0.2-0.2-0.2-0.4-0.2-0.6s0.1-0.4,0.2-0.6l1.2-1.2c0.2-0.2,0.4-0.2,0.6-0.2s0.4,0.1,0.6,0.2l5,5l5-5c0.2-0.2,0.4-0.2,0.6-0.2 s0.4,0.1,0.6,0.2l1.2,1.2c0.2,0.2,0.2,0.4,0.2,0.6s-0.1,0.4-0.2,0.6l-5,5l5,5c0.2,0.2,0.2,0.4,0.2,0.6 C28.6,26.4,28.5,26.6,28.3,26.8z'/%3E %3C/svg%3E\""

/***/ }),
/* 85 */,
/* 86 */,
/* 87 */,
/* 88 */,
/* 89 */,
/* 90 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// @flow

var parse = __webpack_require__(91)
var interpret = __webpack_require__(92)
var plurals = __webpack_require__(40)
var lookupClosestLocale = __webpack_require__(39)
var origFormats = __webpack_require__(38)

/*::
import type { Types } from 'format-message-interpret'
type Locale = string
type Locales = Locale | Locale[]
type Message = string | {|
  id?: string,
  default: string,
  description?: string
|}
type Translations = { [string]: ?{ [string]: string | Translation } }
type Translation = {
  message: string,
  format?: (args?: Object) => string,
  toParts?: (args?: Object) => any[],
}
type Replacement = ?string | (string, string, locales?: Locales) => ?string
type GenerateId = (string) => string
type MissingTranslation = 'ignore' | 'warning' | 'error'
type FormatObject = { [string]: * }
type Options = {
  locale?: Locales,
  translations?: ?Translations,
  generateId?: GenerateId,
  missingReplacement?: Replacement,
  missingTranslation?: MissingTranslation,
  formats?: {
    number?: FormatObject,
    date?: FormatObject,
    time?: FormatObject
  },
  types?: Types
}
type Setup = {|
  locale: Locales,
  translations: Translations,
  generateId: GenerateId,
  missingReplacement: Replacement,
  missingTranslation: MissingTranslation,
  formats: {
    number: FormatObject,
    date: FormatObject,
    time: FormatObject
  },
  types: Types
|}
type FormatMessage = {
  (msg: Message, args?: Object, locales?: Locales): string,
  rich (msg: Message, args?: Object, locales?: Locales): any[],
  setup (opt?: Options): Setup,
  number (value: number, style?: string, locales?: Locales): string,
  date (value: number | Date, style?: string, locales?: Locales): string,
  time (value: number | Date, style?: string, locales?: Locales): string,
  select (value: any, options: Object): any,
  custom (placeholder: any[], locales: Locales, value: any, args: Object): any,
  plural (value: number, offset: any, options: any, locale: any): any,
  selectordinal (value: number, offset: any, options: any, locale: any): any,
  namespace (): FormatMessage
}
*/

function assign/*:: <T: Object> */ (target/*: T */, source/*: Object */) {
  Object.keys(source).forEach(function (key) { target[key] = source[key] })
  return target
}

function namespace ()/*: FormatMessage */ {
  var formats = assign({}, origFormats)
  var currentLocales/*: Locales */ = 'en'
  var translations/*: Translations */ = {}
  var generateId/*: GenerateId */ = function (pattern) { return pattern }
  var missingReplacement/*: Replacement */ = null
  var missingTranslation/*: MissingTranslation */ = 'warning'
  var types/*: Types */ = {}

  function formatMessage (msg/*: Message */, args/*:: ?: Object */, locales/*:: ?: Locales */) {
    var pattern = typeof msg === 'string' ? msg : msg.default
    var id = (typeof msg === 'object' && msg.id) || generateId(pattern)
    var translated = translate(pattern, id, locales || currentLocales)
    var format = translated.format || (
      translated.format = interpret(parse(translated.message), locales || currentLocales, types)
    )
    return format(args)
  }

  formatMessage.rich = function rich (msg/*: Message */, args/*:: ?: Object */, locales/*:: ?: Locales */) {
    var pattern = typeof msg === 'string' ? msg : msg.default
    var id = (typeof msg === 'object' && msg.id) || generateId(pattern)
    var translated = translate(pattern, id, locales || currentLocales)
    var format = translated.toParts || (
      translated.toParts = interpret.toParts(parse(pattern, { tagsType: tagsType }), locales || currentLocales, types)
    )
    return format(args)
  }

  var tagsType = '<>'
  function richType (node/*: any[] */, locales/*: Locales */) {
    var style = node[2]
    return function (fn, args) {
      var props = typeof style === 'object' ? mapObject(style, args) : style
      return typeof fn === 'function' ? fn(props) : fn
    }
  }
  types[tagsType] = richType

  function mapObject (object/* { [string]: (args?: Object) => any } */, args/*: ?Object */) {
    return Object.keys(object).reduce(function (mapped, key) {
      mapped[key] = object[key](args)
      return mapped
    }, {})
  }

  function translate (pattern/*: string */, id/*: string */, locales/*: Locales */)/*: Translation */ {
    var locale = lookupClosestLocale(locales, translations) || 'en'
    var messages = translations[locale] || (translations[locale] = {})
    var translated = messages[id]
    if (typeof translated === 'string') {
      translated = messages[id] = { message: translated }
    }
    if (!translated) {
      var message = 'Translation for "' + id + '" in "' + locale + '" is missing'
      if (missingTranslation === 'warning') {
        /* istanbul ignore else */
        if (typeof console !== 'undefined') console.warn(message)
      } else if (missingTranslation !== 'ignore') { // 'error'
        throw new Error(message)
      }
      var replacement = typeof missingReplacement === 'function'
        ? missingReplacement(pattern, id, locale) || pattern
        : missingReplacement || pattern
      translated = messages[id] = { message: replacement }
    }
    return translated
  }

  formatMessage.setup = function setup (opt/*:: ?: Options */) {
    opt = opt || {}
    if (opt.locale) currentLocales = opt.locale
    if ('translations' in opt) translations = opt.translations || {}
    if (opt.generateId) generateId = opt.generateId
    if ('missingReplacement' in opt) missingReplacement = opt.missingReplacement
    if (opt.missingTranslation) missingTranslation = opt.missingTranslation
    if (opt.formats) {
      if (opt.formats.number) assign(formats.number, opt.formats.number)
      if (opt.formats.date) assign(formats.date, opt.formats.date)
      if (opt.formats.time) assign(formats.time, opt.formats.time)
    }
    if (opt.types) {
      types = opt.types
      types[tagsType] = richType
    }
    return {
      locale: currentLocales,
      translations: translations,
      generateId: generateId,
      missingReplacement: missingReplacement,
      missingTranslation: missingTranslation,
      formats: formats,
      types: types
    }
  }

  formatMessage.number = function (value/*: number */, style/*:: ?: string */, locales/*:: ?: Locales */) {
    var options = (style && formats.number[style]) ||
      formats.parseNumberPattern(style) ||
      formats.number.default
    return new Intl.NumberFormat(locales || currentLocales, options).format(value)
  }

  formatMessage.date = function (value/*:: ?: number | Date */, style/*:: ?: string */, locales/*:: ?: Locales */) {
    var options = (style && formats.date[style]) ||
      formats.parseDatePattern(style) ||
      formats.date.default
    return new Intl.DateTimeFormat(locales || currentLocales, options).format(value)
  }

  formatMessage.time = function (value/*:: ?: number | Date */, style/*:: ?: string */, locales/*:: ?: Locales */) {
    var options = (style && formats.time[style]) ||
      formats.parseDatePattern(style) ||
      formats.time.default
    return new Intl.DateTimeFormat(locales || currentLocales, options).format(value)
  }

  formatMessage.select = function (value/*: any */, options/*: Object */) {
    return options[value] || options.other
  }

  formatMessage.custom = function (placeholder/*: any[] */, locales/*: Locales */, value/*: any */, args/*: Object */) {
    if (!(placeholder[1] in types)) return value
    return types[placeholder[1]](placeholder, locales)(value, args)
  }

  formatMessage.plural = plural.bind(null, 'cardinal')
  formatMessage.selectordinal = plural.bind(null, 'ordinal')
  function plural (
    pluralType/*: 'cardinal' | 'ordinal' */,
    value/*: number */,
    offset/*: any */,
    options/*: any */,
    locale/*: any */
  ) {
    if (typeof offset === 'object' && typeof options !== 'object') { // offset is optional
      locale = options
      options = offset
      offset = 0
    }
    var closest = lookupClosestLocale(locale || currentLocales, plurals)
    var plural = (closest && plurals[closest][pluralType]) || returnOther
    return options['=' + +value] || options[plural(value - offset)] || options.other
  }
  function returnOther (/*:: n:number */) { return 'other' }

  formatMessage.namespace = namespace

  return formatMessage
}

module.exports = exports = namespace()


/***/ }),
/* 91 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// @flow


/*::
export type AST = Element[]
export type Element = string | Placeholder
export type Placeholder = Plural | Styled | Typed | Simple
export type Plural = [ string, 'plural' | 'selectordinal', number, SubMessages ]
export type Styled = [ string, string, string | SubMessages ]
export type Typed = [ string, string ]
export type Simple = [ string ]
export type SubMessages = { [string]: AST }
export type Token = [ TokenType, string ]
export type TokenType = 'text' | 'space' | 'id' | 'type' | 'style' | 'offset' | 'number' | 'selector' | 'syntax'
type Context = {|
  pattern: string,
  index: number,
  tagsType: ?string,
  tokens: ?Token[]
|}
*/

var ARG_OPN = '{'
var ARG_CLS = '}'
var ARG_SEP = ','
var NUM_ARG = '#'
var TAG_OPN = '<'
var TAG_CLS = '>'
var TAG_END = '</'
var TAG_SELF_CLS = '/>'
var ESC = '\''
var OFFSET = 'offset:'
var simpleTypes = [
  'number',
  'date',
  'time',
  'ordinal',
  'duration',
  'spellout'
]
var submTypes = [
  'plural',
  'select',
  'selectordinal'
]

/**
 * parse
 *
 * Turns this:
 *  `You have { numBananas, plural,
 *       =0 {no bananas}
 *      one {a banana}
 *    other {# bananas}
 *  } for sale`
 *
 * into this:
 *  [ "You have ", [ "numBananas", "plural", 0, {
 *       "=0": [ "no bananas" ],
 *      "one": [ "a banana" ],
 *    "other": [ [ '#' ], " bananas" ]
 *  } ], " for sale." ]
 *
 * tokens:
 *  [
 *    [ "text", "You have " ],
 *    [ "syntax", "{" ],
 *    [ "space", " " ],
 *    [ "id", "numBananas" ],
 *    [ "syntax", ", " ],
 *    [ "space", " " ],
 *    [ "type", "plural" ],
 *    [ "syntax", "," ],
 *    [ "space", "\n     " ],
 *    [ "selector", "=0" ],
 *    [ "space", " " ],
 *    [ "syntax", "{" ],
 *    [ "text", "no bananas" ],
 *    [ "syntax", "}" ],
 *    [ "space", "\n    " ],
 *    [ "selector", "one" ],
 *    [ "space", " " ],
 *    [ "syntax", "{" ],
 *    [ "text", "a banana" ],
 *    [ "syntax", "}" ],
 *    [ "space", "\n  " ],
 *    [ "selector", "other" ],
 *    [ "space", " " ],
 *    [ "syntax", "{" ],
 *    [ "syntax", "#" ],
 *    [ "text", " bananas" ],
 *    [ "syntax", "}" ],
 *    [ "space", "\n" ],
 *    [ "syntax", "}" ],
 *    [ "text", " for sale." ]
 *  ]
 **/
exports = module.exports = function parse (
  pattern/*: string */,
  options/*:: ?: { tagsType?: string, tokens?: Token[] } */
)/*: AST */ {
  return parseAST({
    pattern: String(pattern),
    index: 0,
    tagsType: (options && options.tagsType) || null,
    tokens: (options && options.tokens) || null
  }, '')
}

function parseAST (current/*: Context */, parentType/*: string */)/*: AST */ {
  var pattern = current.pattern
  var length = pattern.length
  var elements/*: AST */ = []
  var start = current.index
  var text = parseText(current, parentType)
  if (text) elements.push(text)
  if (text && current.tokens) current.tokens.push([ 'text', pattern.slice(start, current.index) ])
  while (current.index < length) {
    if (pattern[current.index] === ARG_CLS) {
      if (!parentType) throw expected(current)
      break
    }
    if (parentType && current.tagsType && pattern.slice(current.index, current.index + TAG_END.length) === TAG_END) break
    elements.push(parsePlaceholder(current))
    start = current.index
    text = parseText(current, parentType)
    if (text) elements.push(text)
    if (text && current.tokens) current.tokens.push([ 'text', pattern.slice(start, current.index) ])
  }
  return elements
}

function parseText (current/*: Context */, parentType/*: string */)/*: string */ {
  var pattern = current.pattern
  var length = pattern.length
  var isHashSpecial = (parentType === 'plural' || parentType === 'selectordinal')
  var isAngleSpecial = !!current.tagsType
  var isArgStyle = (parentType === '{style}')
  var text = ''
  while (current.index < length) {
    var char = pattern[current.index]
    if (
      char === ARG_OPN || char === ARG_CLS ||
      (isHashSpecial && char === NUM_ARG) ||
      (isAngleSpecial && char === TAG_OPN) ||
      (isArgStyle && isWhitespace(char.charCodeAt(0)))
    ) {
      break
    } else if (char === ESC) {
      char = pattern[++current.index]
      if (char === ESC) { // double is always 1 '
        text += char
        ++current.index
      } else if (
        // only when necessary
        char === ARG_OPN || char === ARG_CLS ||
        (isHashSpecial && char === NUM_ARG) ||
        (isAngleSpecial && char === TAG_OPN) ||
        isArgStyle
      ) {
        text += char
        while (++current.index < length) {
          char = pattern[current.index]
          if (char === ESC && pattern[current.index + 1] === ESC) { // double is always 1 '
            text += ESC
            ++current.index
          } else if (char === ESC) { // end of quoted
            ++current.index
            break
          } else {
            text += char
          }
        }
      } else { // lone ' is just a '
        text += ESC
        // already incremented
      }
    } else {
      text += char
      ++current.index
    }
  }
  return text
}

function isWhitespace (code/*: number */)/*: boolean */ {
  return (
    (code >= 0x09 && code <= 0x0D) ||
    code === 0x20 || code === 0x85 || code === 0xA0 || code === 0x180E ||
    (code >= 0x2000 && code <= 0x200D) ||
    code === 0x2028 || code === 0x2029 || code === 0x202F || code === 0x205F ||
    code === 0x2060 || code === 0x3000 || code === 0xFEFF
  )
}

function skipWhitespace (current/*: Context */)/*: void */ {
  var pattern = current.pattern
  var length = pattern.length
  var start = current.index
  while (current.index < length && isWhitespace(pattern.charCodeAt(current.index))) {
    ++current.index
  }
  if (start < current.index && current.tokens) {
    current.tokens.push([ 'space', current.pattern.slice(start, current.index) ])
  }
}

function parsePlaceholder (current/*: Context */)/*: Placeholder */ {
  var pattern = current.pattern
  if (pattern[current.index] === NUM_ARG) {
    if (current.tokens) current.tokens.push([ 'syntax', NUM_ARG ])
    ++current.index // move passed #
    return [ NUM_ARG ]
  }

  var tag = parseTag(current)
  if (tag) return tag

  /* istanbul ignore if should be unreachable if parseAST and parseText are right */
  if (pattern[current.index] !== ARG_OPN) throw expected(current, ARG_OPN)
  if (current.tokens) current.tokens.push([ 'syntax', ARG_OPN ])
  ++current.index // move passed {
  skipWhitespace(current)

  var id = parseId(current)
  if (!id) throw expected(current, 'placeholder id')
  if (current.tokens) current.tokens.push([ 'id', id ])
  skipWhitespace(current)

  var char = pattern[current.index]
  if (char === ARG_CLS) { // end placeholder
    if (current.tokens) current.tokens.push([ 'syntax', ARG_CLS ])
    ++current.index // move passed }
    return [ id ]
  }

  if (char !== ARG_SEP) throw expected(current, ARG_SEP + ' or ' + ARG_CLS)
  if (current.tokens) current.tokens.push([ 'syntax', ARG_SEP ])
  ++current.index // move passed ,
  skipWhitespace(current)

  var type = parseId(current)
  if (!type) throw expected(current, 'placeholder type')
  if (current.tokens) current.tokens.push([ 'type', type ])
  skipWhitespace(current)
  char = pattern[current.index]
  if (char === ARG_CLS) { // end placeholder
    if (current.tokens) current.tokens.push([ 'syntax', ARG_CLS ])
    if (type === 'plural' || type === 'selectordinal' || type === 'select') {
      throw expected(current, type + ' sub-messages')
    }
    ++current.index // move passed }
    return [ id, type ]
  }

  if (char !== ARG_SEP) throw expected(current, ARG_SEP + ' or ' + ARG_CLS)
  if (current.tokens) current.tokens.push([ 'syntax', ARG_SEP ])
  ++current.index // move passed ,
  skipWhitespace(current)

  var arg
  if (type === 'plural' || type === 'selectordinal') {
    var offset = parsePluralOffset(current)
    skipWhitespace(current)
    arg = [ id, type, offset, parseSubMessages(current, type) ]
  } else if (type === 'select') {
    arg = [ id, type, parseSubMessages(current, type) ]
  } else if (simpleTypes.indexOf(type) >= 0) {
    arg = [ id, type, parseSimpleFormat(current) ]
  } else { // custom placeholder type
    var index = current.index
    var format/*: string | SubMessages */ = parseSimpleFormat(current)
    skipWhitespace(current)
    if (pattern[current.index] === ARG_OPN) {
      current.index = index // rewind, since should have been submessages
      format = parseSubMessages(current, type)
    }
    arg = [ id, type, format ]
  }

  skipWhitespace(current)
  if (pattern[current.index] !== ARG_CLS) throw expected(current, ARG_CLS)
  if (current.tokens) current.tokens.push([ 'syntax', ARG_CLS ])
  ++current.index // move passed }
  return arg
}

function parseTag (current/*: Context */)/*: ?Placeholder */ {
  var tagsType = current.tagsType
  if (!tagsType || current.pattern[current.index] !== TAG_OPN) return

  if (current.pattern.slice(current.index, current.index + TAG_END.length) === TAG_END) {
    throw expected(current, null, 'closing tag without matching opening tag')
  }
  if (current.tokens) current.tokens.push([ 'syntax', TAG_OPN ])
  ++current.index // move passed <

  var id = parseId(current, true)
  if (!id) throw expected(current, 'placeholder id')
  if (current.tokens) current.tokens.push([ 'id', id ])
  skipWhitespace(current)

  if (current.pattern.slice(current.index, current.index + TAG_SELF_CLS.length) === TAG_SELF_CLS) {
    if (current.tokens) current.tokens.push([ 'syntax', TAG_SELF_CLS ])
    current.index += TAG_SELF_CLS.length
    return [ id, tagsType ]
  }
  if (current.pattern[current.index] !== TAG_CLS) throw expected(current, TAG_CLS)
  if (current.tokens) current.tokens.push([ 'syntax', TAG_CLS ])
  ++current.index // move passed >

  var children = parseAST(current, tagsType)

  var end = current.index
  if (current.pattern.slice(current.index, current.index + TAG_END.length) !== TAG_END) throw expected(current, TAG_END + id + TAG_CLS)
  if (current.tokens) current.tokens.push([ 'syntax', TAG_END ])
  current.index += TAG_END.length
  var closeId = parseId(current, true)
  if (closeId && current.tokens) current.tokens.push([ 'id', closeId ])
  if (id !== closeId) {
    current.index = end // rewind for better error message
    throw expected(current, TAG_END + id + TAG_CLS, TAG_END + closeId + TAG_CLS)
  }
  skipWhitespace(current)
  if (current.pattern[current.index] !== TAG_CLS) throw expected(current, TAG_CLS)
  if (current.tokens) current.tokens.push([ 'syntax', TAG_CLS ])
  ++current.index // move passed >

  return [ id, tagsType, { children: children } ]
}

function parseId (current/*: Context */, isTag/*:: ?: boolean */)/*: string */ {
  var pattern = current.pattern
  var length = pattern.length
  var id = ''
  while (current.index < length) {
    var char = pattern[current.index]
    if (
      char === ARG_OPN || char === ARG_CLS || char === ARG_SEP ||
      char === NUM_ARG || char === ESC || isWhitespace(char.charCodeAt(0)) ||
      (isTag && (char === TAG_OPN || char === TAG_CLS || char === '/'))
    ) break
    id += char
    ++current.index
  }
  return id
}

function parseSimpleFormat (current/*: Context */)/*: string */ {
  var start = current.index
  var style = parseText(current, '{style}')
  if (!style) throw expected(current, 'placeholder style name')
  if (current.tokens) current.tokens.push([ 'style', current.pattern.slice(start, current.index) ])
  return style
}

function parsePluralOffset (current/*: Context */)/*: number */ {
  var pattern = current.pattern
  var length = pattern.length
  var offset = 0
  if (pattern.slice(current.index, current.index + OFFSET.length) === OFFSET) {
    if (current.tokens) current.tokens.push([ 'offset', 'offset' ], [ 'syntax', ':' ])
    current.index += OFFSET.length // move passed offset:
    skipWhitespace(current)
    var start = current.index
    while (current.index < length && isDigit(pattern.charCodeAt(current.index))) {
      ++current.index
    }
    if (start === current.index) throw expected(current, 'offset number')
    if (current.tokens) current.tokens.push([ 'number', pattern.slice(start, current.index) ])
    offset = +pattern.slice(start, current.index)
  }
  return offset
}

function isDigit (code/*: number */)/*: boolean */ {
  return (code >= 0x30 && code <= 0x39)
}

function parseSubMessages (current/*: Context */, parentType/*: string */)/*: SubMessages */ {
  var pattern = current.pattern
  var length = pattern.length
  var options/*: SubMessages */ = {}
  while (current.index < length && pattern[current.index] !== ARG_CLS) {
    var selector = parseId(current)
    if (!selector) throw expected(current, 'sub-message selector')
    if (current.tokens) current.tokens.push([ 'selector', selector ])
    skipWhitespace(current)
    options[selector] = parseSubMessage(current, parentType)
    skipWhitespace(current)
  }
  if (!options.other && submTypes.indexOf(parentType) >= 0) {
    throw expected(current, null, null, '"other" sub-message must be specified in ' + parentType)
  }
  return options
}

function parseSubMessage (current/*: Context */, parentType/*: string */)/*: AST */ {
  if (current.pattern[current.index] !== ARG_OPN) throw expected(current, ARG_OPN + ' to start sub-message')
  if (current.tokens) current.tokens.push([ 'syntax', ARG_OPN ])
  ++current.index // move passed {
  var message = parseAST(current, parentType)
  if (current.pattern[current.index] !== ARG_CLS) throw expected(current, ARG_CLS + ' to end sub-message')
  if (current.tokens) current.tokens.push([ 'syntax', ARG_CLS ])
  ++current.index // move passed }
  return message
}

function expected (current/*: Context */, expected/*:: ?: ?string */, found/*:: ?: ?string */, message/*:: ?: string */) {
  var pattern = current.pattern
  var lines = pattern.slice(0, current.index).split(/\r?\n/)
  var offset = current.index
  var line = lines.length
  var column = lines.slice(-1)[0].length
  found = found || (
    (current.index >= pattern.length) ? 'end of message pattern'
      : (parseId(current) || pattern[current.index])
  )
  if (!message) message = errorMessage(expected, found)
  message += ' in ' + pattern.replace(/\r?\n/g, '\n')
  return new SyntaxError(message, expected, found, offset, line, column)
}

function errorMessage (expected/*: ?string */, found/* string */) {
  if (!expected) return 'Unexpected ' + found + ' found'
  return 'Expected ' + expected + ' but found ' + found
}

/**
 * SyntaxError
 *  Holds information about bad syntax found in a message pattern
 **/
function SyntaxError (message/*: string */, expected/*: ?string */, found/*: ?string */, offset/*: number */, line/*: number */, column/*: number */) {
  Error.call(this, message)
  this.name = 'SyntaxError'
  this.message = message
  this.expected = expected
  this.found = found
  this.offset = offset
  this.line = line
  this.column = column
}
SyntaxError.prototype = Object.create(Error.prototype)
exports.SyntaxError = SyntaxError


/***/ }),
/* 92 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// @flow

var formats = __webpack_require__(38)
var lookupClosestLocale = __webpack_require__(39)
var plurals = __webpack_require__(40)

/*::
import type {
  AST,
  SubMessages
} from '../format-message-parse'
type Locale = string
type Locales = Locale | Locale[]
type Placeholder = any[] // https://github.com/facebook/flow/issues/4050
export type Type = (Placeholder, Locales) => (any, ?Object) => any
export type Types = { [string]: Type }
*/

exports = module.exports = function interpret (
  ast/*: AST */,
  locale/*:: ?: Locales */,
  types/*:: ?: Types */
)/*: (args?: Object) => string */ {
  return interpretAST(ast, null, locale || 'en', types || {}, true)
}

exports.toParts = function toParts (
  ast/*: AST */,
  locale/*:: ?: Locales */,
  types/*:: ?: Types */
)/*: (args?: Object) => any[] */ {
  return interpretAST(ast, null, locale || 'en', types || {}, false)
}

function interpretAST (
  elements/*: any[] */,
  parent/*: ?Placeholder */,
  locale/*: Locales */,
  types/*: Types */,
  join/*: boolean */
)/*: Function */ {
  var parts = elements.map(function (element) {
    return interpretElement(element, parent, locale, types, join)
  })

  if (!join) {
    return function format (args) {
      return parts.reduce(function (parts, part) {
        return parts.concat(part(args))
      }, [])
    }
  }

  if (parts.length === 1) return parts[0]
  return function format (args) {
    var message = ''
    for (var e = 0; e < parts.length; ++e) {
      message += parts[e](args)
    }
    return message
  }
}

function interpretElement (
  element/*: Placeholder */,
  parent/*: ?Placeholder */,
  locale/*: Locales */,
  types/*: Types */,
  join/*: boolean */
)/*: Function */ {
  if (typeof element === 'string') {
    var value/*: string */ = element
    return function format () { return value }
  }

  var id = element[0]
  var type = element[1]

  if (parent && element[0] === '#') {
    id = parent[0]
    var offset = parent[2]
    var formatter = (types.number || defaults.number)([ id, 'number' ], locale)
    return function format (args) {
      return formatter(getArg(id, args) - offset, args)
    }
  }

  // pre-process children
  var children
  if (type === 'plural' || type === 'selectordinal') {
    children = {}
    Object.keys(element[3]).forEach(function (key) {
      children[key] = interpretAST(element[3][key], element, locale, types, join)
    })
    element = [ element[0], element[1], element[2], children ]
  } else if (element[2] && typeof element[2] === 'object') {
    children = {}
    Object.keys(element[2]).forEach(function (key) {
      children[key] = interpretAST(element[2][key], element, locale, types, join)
    })
    element = [ element[0], element[1], children ]
  }

  var getFrmt = type && (types[type] || defaults[type])
  if (getFrmt) {
    var frmt = getFrmt(element, locale)
    return function format (args) {
      return frmt(getArg(id, args), args)
    }
  }

  return join
    ? function format (args) { return String(getArg(id, args)) }
    : function format (args) { return getArg(id, args) }
}

function getArg (id/*: string */, args/*: ?Object */)/*: any */ {
  if (args && (id in args)) return args[id]
  var parts = id.split('.')
  var a = args
  for (var i = 0, ii = parts.length; a && i < ii; ++i) {
    a = a[parts[i]]
  }
  return a
}

function interpretNumber (element/*: Placeholder */, locales/*: Locales */) {
  var style = element[2]
  var options = formats.number[style] || formats.parseNumberPattern(style) || formats.number.default
  return new Intl.NumberFormat(locales, options).format
}

function interpretDuration (element/*: Placeholder */, locales/*: Locales */) {
  var style = element[2]
  var options = formats.duration[style] || formats.duration.default
  var fs = new Intl.NumberFormat(locales, options.seconds).format
  var fm = new Intl.NumberFormat(locales, options.minutes).format
  var fh = new Intl.NumberFormat(locales, options.hours).format
  var sep = /^fi$|^fi-|^da/.test(String(locales)) ? '.' : ':'

  return function (s, args) {
    s = +s
    if (!isFinite(s)) return fs(s)
    var h = ~~(s / 60 / 60) // ~~ acts much like Math.trunc
    var m = ~~(s / 60 % 60)
    var dur = (h ? (fh(Math.abs(h)) + sep) : '') +
      fm(Math.abs(m)) + sep + fs(Math.abs(s % 60))
    return s < 0 ? fh(-1).replace(fh(1), dur) : dur
  }
}

function interpretDateTime (element/*: Placeholder */, locales/*: Locales */) {
  var type = element[1]
  var style = element[2]
  var options = formats[type][style] || formats.parseDatePattern(style) || formats[type].default
  return new Intl.DateTimeFormat(locales, options).format
}

function interpretPlural (element/*: Placeholder */, locales/*: Locales */) {
  var type = element[1]
  var pluralType = type === 'selectordinal' ? 'ordinal' : 'cardinal'
  var offset = element[2]
  var children = element[3]
  var pluralRules
  if (Intl.PluralRules && Intl.PluralRules.supportedLocalesOf(locales).length > 0) {
    pluralRules = new Intl.PluralRules(locales, { type: pluralType })
  } else {
    var locale = lookupClosestLocale(locales, plurals)
    var select = (locale && plurals[locale][pluralType]) || returnOther
    pluralRules = { select: select }
  }

  return function (value, args) {
    var clause =
      children['=' + +value] ||
      children[pluralRules.select(value - offset)] ||
      children.other
    return clause(args)
  }
}

function returnOther (/*:: n:number */) { return 'other' }

function interpretSelect (element/*: Placeholder */, locales/*: Locales */) {
  var children = element[2]
  return function (value, args) {
    var clause = children[value] || children.other
    return clause(args)
  }
}

var defaults/*: Types */ = {
  number: interpretNumber,
  ordinal: interpretNumber, // TODO: support rbnf
  spellout: interpretNumber, // TODO: support rbnf
  duration: interpretDuration,
  date: interpretDateTime,
  time: interpretDateTime,
  plural: interpretPlural,
  selectordinal: interpretPlural,
  select: interpretSelect
}
exports.types = defaults


/***/ }),
/* 93 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABsQAAAbEBYZgoDgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEySURBVDiN7dGxapRBFMXx34QQkWW1WUEJhvgAQVGLFNpYBRsLJU0Cka3zDrMD1j7DYpF2LX0E20AEESwWVguRuPgRQdbNTeGufnxxq7ReGOZw5p4/M3NTRLhILV0o/R8AlptGKWUVHRzlnKdzP6W0jgc4iIjTP359jKWULTzGZ3zAIOccKaUtvMYlHOJRRBz/6wk3kWa6Vbvhq1kYbuPpPNAEHNf0FL9SSjdwrdH3ZBHgYx2Wcw58wUmj72gR4GtN/4CImOI5fs78N3hxDlBKuYv9GmC1lHKr0+m0seHvf6zh/rwp9Xq9Fg5wHZ/qq9/vbw6Hw52IuOp8vcXeEnZxr3laVdXKaDTaXhCGTTxbxju8RIXv873dblfdbvfhYDC4Mx6PW5PJ5Aou45vf03ofEYdnijhlbbXWW9cAAAAASUVORK5CYII="

/***/ }),
/* 94 */,
/* 95 */,
/* 96 */,
/* 97 */,
/* 98 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M35.6,21c0-2.6-0.7-5.1-2-7.3s-3.1-4-5.3-5.3s-4.7-2-7.3-2s-5.1,0.7-7.3,2s-4,3.1-5.3,5.3s-2,4.7-2,7.3s0.7,5.1,2,7.3 s3.1,4,5.3,5.3s4.7,2,7.3,2s5.1-0.7,7.3-2s4-3.1,5.3-5.3S35.6,23.6,35.6,21z M38,21c0,3.1-0.8,5.9-2.3,8.5c-1.5,2.6-3.6,4.7-6.2,6.2 C26.9,37.2,24.1,38,21,38c-3.1,0-5.9-0.8-8.5-2.3c-2.6-1.5-4.7-3.6-6.2-6.2S4,24.1,4,21c0-3.1,0.8-5.9,2.3-8.5s3.6-4.7,6.2-6.2 S17.9,4,21,4c3.1,0,5.9,0.8,8.5,2.3s4.7,3.6,6.2,6.2C37.2,15.1,38,17.9,38,21z M21.7,30.8h-1.4c-0.2,0-0.4-0.1-0.5-0.2 c-0.1-0.1-0.2-0.3-0.2-0.5v-7.7h-7.7c-0.2,0-0.4-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5v-1.4c0-0.2,0.1-0.4,0.2-0.5 c0.1-0.1,0.3-0.2,0.5-0.2h7.7v-7.7c0-0.2,0.1-0.4,0.2-0.5c0.1-0.1,0.3-0.2,0.5-0.2h1.4c0.2,0,0.4,0.1,0.5,0.2 c0.1,0.1,0.2,0.3,0.2,0.5v7.7h7.7c0.2,0,0.4,0.1,0.5,0.2c0.1,0.1,0.2,0.3,0.2,0.5v1.4c0,0.2-0.1,0.4-0.2,0.5s-0.3,0.2-0.5,0.2h-7.7 v7.7c0,0.2-0.1,0.4-0.2,0.5S21.9,30.8,21.7,30.8z'/%3E %3C/svg%3E\""

/***/ }),
/* 99 */,
/* 100 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M35.6,21c0-2.6-0.7-5.1-2-7.3s-3.1-4-5.3-5.3s-4.7-2-7.3-2s-5.1,0.7-7.3,2s-4,3.1-5.3,5.3s-2,4.7-2,7.3s0.7,5.1,2,7.3 s3.1,4,5.3,5.3s4.7,2,7.3,2s5.1-0.7,7.3-2s4-3.1,5.3-5.3S35.6,23.6,35.6,21z M38,21c0,3.1-0.8,5.9-2.3,8.5c-1.5,2.6-3.6,4.7-6.2,6.2 C26.9,37.2,24.1,38,21,38c-3.1,0-5.9-0.8-8.5-2.3c-2.6-1.5-4.7-3.6-6.2-6.2S4,24.1,4,21c0-3.1,0.8-5.9,2.3-8.5s3.6-4.7,6.2-6.2 S17.9,4,21,4c3.1,0,5.9,0.8,8.5,2.3s4.7,3.6,6.2,6.2C37.2,15.1,38,17.9,38,21z M22.7,26.2v2.9c0,0.2-0.1,0.3-0.2,0.4 c-0.1,0.1-0.2,0.2-0.4,0.2h-2.9c-0.2,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.2-0.4v-2.9c0-0.2,0.1-0.3,0.2-0.4 c0.1-0.1,0.2-0.2,0.4-0.2h2.9c0.2,0,0.3,0.1,0.4,0.2C22.7,25.9,22.7,26,22.7,26.2z M27.3,17.3c0,0.6-0.1,1.1-0.3,1.6 s-0.5,0.9-0.8,1.2c-0.4,0.3-0.7,0.6-0.9,0.8c-0.3,0.2-0.6,0.4-1.1,0.6c-0.4,0.2-0.7,0.4-0.8,0.5c-0.2,0.1-0.3,0.3-0.5,0.4 c-0.1,0.2-0.2,0.3-0.2,0.5v0.6c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.2,0.2-0.4,0.2h-2.9c-0.2,0-0.3-0.1-0.4-0.2 c-0.1-0.1-0.2-0.2-0.2-0.4v-1.2c0-0.4,0.1-0.8,0.2-1.2s0.3-0.6,0.4-0.9c0.2-0.2,0.4-0.4,0.7-0.6c0.3-0.2,0.6-0.4,0.7-0.5 s0.5-0.2,0.8-0.4c0.6-0.3,1.1-0.6,1.3-0.8c0.3-0.2,0.4-0.5,0.4-0.9c0-0.5-0.3-0.9-0.8-1.3c-0.5-0.4-1.1-0.5-1.7-0.5 c-0.7,0-1.2,0.2-1.7,0.5c-0.3,0.2-0.8,0.7-1.4,1.5c-0.1,0.1-0.3,0.2-0.4,0.2c-0.1,0-0.2,0-0.3-0.1L14.9,16c-0.1-0.1-0.2-0.2-0.2-0.4 c0-0.2,0-0.3,0.1-0.4c1.5-2.3,3.5-3.4,6.3-3.4c1.5,0,3,0.5,4.3,1.6S27.3,15.8,27.3,17.3z'/%3E %3C/svg%3E\""

/***/ }),
/* 101 */
/***/ (function(module, exports, __webpack_require__) {

// getting tag from 19.1.3.6 Object.prototype.toString()
var cof = __webpack_require__(65);
var TAG = __webpack_require__(6)('toStringTag');
// ES3 wrong here
var ARG = cof(function () { return arguments; }()) == 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
  try {
    return it[key];
  } catch (e) { /* empty */ }
};

module.exports = function (it) {
  var O, T, B;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
    // builtinTag case
    : ARG ? cof(O)
    // ES3 arguments fallback
    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};


/***/ }),
/* 102 */
/***/ (function(module, exports) {

var id = 0;
var px = Math.random();
module.exports = function (key) {
  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};


/***/ }),
/* 103 */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(45);
var document = __webpack_require__(11).document;
// typeof document.createElement is 'object' in old IE
var is = isObject(document) && isObject(document.createElement);
module.exports = function (it) {
  return is ? document.createElement(it) : {};
};


/***/ }),
/* 104 */
/***/ (function(module, exports) {

// 7.1.4 ToInteger
var ceil = Math.ceil;
var floor = Math.floor;
module.exports = function (it) {
  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};


/***/ }),
/* 105 */
/***/ (function(module, exports) {

// 7.2.1 RequireObjectCoercible(argument)
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on  " + it);
  return it;
};


/***/ }),
/* 106 */
/***/ (function(module, exports, __webpack_require__) {

// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = __webpack_require__(900);
var defined = __webpack_require__(105);
module.exports = function (it) {
  return IObject(defined(it));
};


/***/ }),
/* 107 */
/***/ (function(module, exports, __webpack_require__) {

var shared = __webpack_require__(169)('keys');
var uid = __webpack_require__(102);
module.exports = function (key) {
  return shared[key] || (shared[key] = uid(key));
};


/***/ }),
/* 108 */
/***/ (function(module, exports, __webpack_require__) {

var def = __webpack_require__(66).f;
var has = __webpack_require__(47);
var TAG = __webpack_require__(6)('toStringTag');

module.exports = function (it, tag, stat) {
  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
};


/***/ }),
/* 109 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 25.4.1.5 NewPromiseCapability(C)
var aFunction = __webpack_require__(69);

function PromiseCapability(C) {
  var resolve, reject;
  this.promise = new C(function ($$resolve, $$reject) {
    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
    resolve = $$resolve;
    reject = $$reject;
  });
  this.resolve = aFunction(resolve);
  this.reject = aFunction(reject);
}

module.exports.f = function (C) {
  return new PromiseCapability(C);
};


/***/ }),
/* 110 */
/***/ (function(module, exports) {

/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */
module.exports = __webpack_amd_options__;

/* WEBPACK VAR INJECTION */}.call(exports, {}))

/***/ }),
/* 111 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 *  * postal.federation - A base plugin for federating instances of postal.js across various boundaries.
 *  * Author: Jim Cowart (http://ifandelse.com)
 *  * Version: v0.5.5
 *  * Url: http://github.com/postaljs/postal.federation
 *  * License(s): (MIT OR GPL-2.0)
 */
(function webpackUniversalModuleDefinition(root, factory) {
	if(true)
		module.exports = factory(__webpack_require__(4), __webpack_require__(14));
	else if(typeof define === 'function' && define.amd)
		define(["lodash", "postal"], factory);
	else if(typeof exports === 'object')
		exports["postalFedx"] = factory(require("lodash"), require("postal"));
	else
		root["postalFedx"] = factory(root["_"], root["postal"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;
/******/
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {

	Object.defineProperty(exports, "__esModule", {
		value: true
	});
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
	
	var _lodash = __webpack_require__(1);
	
	var _lodash2 = _interopRequireDefault(_lodash);
	
	var _postal = __webpack_require__(2);
	
	var _postal2 = _interopRequireDefault(_postal);
	
	__webpack_require__(3);
	
	var _packingSlips = __webpack_require__(4);
	
	var _state = __webpack_require__(5);
	
	var _handlers = __webpack_require__(6);
	
	var _filters = __webpack_require__(7);
	
	var _filters2 = _interopRequireDefault(_filters);
	
	var _FederationClient = __webpack_require__(8);
	
	var _FederationClient2 = _interopRequireDefault(_FederationClient);
	
	var fedx = _postal2["default"].fedx = {
		FederationClient: _FederationClient2["default"],
		packingSlips: _packingSlips.packingSlips,
		handlers: _handlers.handlers,
		clients: _state.state._clients,
		transports: _state.state._transports,
		filters: _filters2["default"],
		addFilter: _filters.addFilter,
		removeFilter: _filters.removeFilter,
		canSendRemote: function canSendRemote(channel, topic) {
			return (0, _filters.matchesFilter)(channel, topic, "out");
		},
		configure: _state.configure,
		getPackingSlip: _packingSlips.getPackingSlip,
		onFederatedMsg: _handlers.onFederatedMsg,
		sendMessage: function sendMessage(envelope) {
			if (!_state.state._ready) {
				_state.state._outboundQueue.push(arguments);
				return;
			}
			_lodash2["default"].forEach(this.transports, function (transport) {
				transport.sendMessage(envelope);
			});
		},
		disconnect: _state.disconnect,
		_getTransports: function _getTransports() {
			return _lodash2["default"].reduce(this.transports, function (memo, transport, name) {
				memo[name] = true;
				return memo;
			}, {});
		},
		/*
	 	signalReady( callback );
	 	signalReady( "transportName" );
	 	signalReady( "transportName", callback );
	 	signalReady( "transportName", targetInstance, callback ); <-- this is NEW
	 	signalReady( { transportNameA: targetsForA, transportNameB: targetsForB, transportC: true }, callback);
	 */
		signalReady: function signalReady(transport, target, callback) {
			if (!_state.state._ready) {
				_state.state._signalQueue.push(arguments);
				return;
			}
			var transports = this._getTransports();
			switch (arguments.length) {
				case 1:
					if (typeof transport === "function") {
						callback = transport;
					} else if (typeof transport === "string") {
						transports = {};
						transports[transport] = this.transports[transport];
						callback = _state.NO_OP;
					}
					break;
				case 2:
					if (typeof transport === "string") {
						transports = {};
						transports[transport] = this.transports[transport];
					} else {
						transports = transport;
					}
					callback = target || _state.NO_OP;
					break;
				case 3:
					transports = {};
					transports[transport] = [target];
					break;
			}
			_lodash2["default"].forEach(transports, _lodash2["default"].bind(function (targets, name) {
				targets = typeof targets === "boolean" ? [] : targets;
				this.transports[name].signalReady(targets, callback);
			}, this));
		}
	};
	
	exports["default"] = fedx;
	
	function processSignalQ(args) {
		fedx.signalReady.apply(this, args);
	}
	
	function processOutboundQ(args) {
		fedx.send.apply(this, args);
	}
	
	function processInboundQ(msg) {
		fedx.onFederatedMsg.call(this, msg);
	}
	
	_postal2["default"].addWireTap(function (data, envelope) {
		if (fedx.canSendRemote(envelope.channel, envelope.topic)) {
			fedx.sendMessage(envelope);
		}
	});
	
	_postal2["default"].subscribe({
		channel: _postal2["default"].configuration.SYSTEM_CHANNEL,
		topic: "instanceId.changed",
		callback: function callback() {
			_state.state._ready = true;
			while (_state.state._signalQueue.length) {
				processSignalQ(_state.state._signalQueue.shift());
			}
			while (_state.state._outboundQueue.length) {
				processOutboundQ(_state.state._outboundQueue.shift());
			}
			while (_state.state._inboundQueue.length) {
				processInboundQ(_state.state._inboundQueue.shift());
			}
		}
	});
	
	if (_postal2["default"].instanceId() !== undefined) {
		_state.state._ready = true;
	}
	module.exports = exports["default"];

/***/ },
/* 1 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_1__;

/***/ },
/* 2 */
/***/ function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_2__;

/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {

	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
	
	var _postal = __webpack_require__(2);
	
	var _postal2 = _interopRequireDefault(_postal);
	
	if (!_postal2["default"].createUUID) {
		_postal2["default"].createUUID = function () {
			var s = [];
			var hexDigits = "0123456789abcdef";
			for (var i = 0; i < 36; i++) {
				s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
			}
			s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
			/* jshint ignore:start */
			s[19] = hexDigits.substr(s[19] & 0x3 | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
			/* jshint ignore:end */
			s[8] = s[13] = s[18] = s[23] = "-";
			return s.join("");
		};
	}
	if (!_postal2["default"].instanceId) {
		_postal2["default"].instanceId = (function () {
			var _id = undefined,
			    _oldId = undefined;
			return function (id) {
				if (id) {
					_oldId = _id;
					_id = id;
					_postal2["default"].publish({
						channel: _postal2["default"].configuration.SYSTEM_CHANNEL,
						topic: "instanceId.changed",
						data: {
							oldId: _oldId,
							newId: _id
						}
					});
				}
				return _id;
			};
		})();
	}

/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {

	Object.defineProperty(exports, "__esModule", {
		value: true
	});
	exports.getPackingSlip = getPackingSlip;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
	
	var _postal = __webpack_require__(2);
	
	var _postal2 = _interopRequireDefault(_postal);
	
	function getPackingSlip(type /*, env */) {
		if (Object.prototype.hasOwnProperty.call(packingSlips, type)) {
			return packingSlips[type].apply(this, Array.prototype.slice.call(arguments, 1));
		}
	}
	
	var packingSlips = {
		ping: function ping() {
			return {
				type: "federation.ping",
				instanceId: _postal2["default"].instanceId(),
				timeStamp: new Date(),
				ticket: _postal2["default"].createUUID()
			};
		},
		pong: function pong(ping) {
			return {
				type: "federation.pong",
				instanceId: _postal2["default"].instanceId(),
				timeStamp: new Date(),
				pingData: {
					instanceId: ping.instanceId,
					timeStamp: ping.timeStamp,
					ticket: ping.ticket
				}
			};
		},
		message: function message(env) {
			return {
				type: "federation.message",
				instanceId: _postal2["default"].instanceId(),
				timeStamp: new Date(),
				envelope: env
			};
		},
		disconnect: function disconnect() {
			return {
				type: "federation.disconnect",
				instanceId: _postal2["default"].instanceId(),
				timeStamp: new Date()
			};
		},
		bundle: function bundle(packingSlips) {
			return {
				type: "federation.bundle",
				instanceId: _postal2["default"].instanceId(),
				timeStamp: new Date(),
				packingSlips: packingSlips
			};
		}
	};
	exports.packingSlips = packingSlips;

/***/ },
/* 5 */
/***/ function(module, exports, __webpack_require__) {

	Object.defineProperty(exports, "__esModule", {
		value: true
	});
	exports.configure = configure;
	exports.disconnect = disconnect;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
	
	var _lodash = __webpack_require__(1);
	
	var _lodash2 = _interopRequireDefault(_lodash);
	
	var _defaults = {
		enabled: true,
		filterMode: "whitelist",
		filterDirection: "both"
	};
	
	var NO_OP = function NO_OP() {};
	
	exports.NO_OP = NO_OP;
	var state = {
		_clients: [],
		_transports: {},
		_ready: false,
		_inboundQueue: [],
		_outboundQueue: [],
		_signalQueue: [],
		_config: _defaults
	};
	
	exports.state = state;
	
	function configure(cfg) {
		if (cfg && cfg.filterMode && cfg.filterMode !== "blacklist" && cfg.filterMode !== "whitelist") {
			throw new Error("postal.fedx filterMode must be 'blacklist' or 'whitelist'.");
		}
		if (cfg) {
			state._config = _lodash2["default"].defaults(cfg, _defaults);
		}
		return state._config;
	}
	
	function disconnect(options) {
		options = options || {};
		var trans = state._transports;
		if (options.transport) {
			trans = {};
			trans[options.transport] = state._transports[options.transport];
		}
		_lodash2["default"].forEach(trans, function (t) {
			t.disconnect({
				target: options.target,
				instanceId: options.instanceId,
				doNotNotify: !!options.doNotNotify
			});
		});
	}

/***/ },
/* 6 */
/***/ function(module, exports, __webpack_require__) {

	Object.defineProperty(exports, "__esModule", {
		value: true
	});
	exports.onFederatedMsg = onFederatedMsg;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
	
	var _packingSlips = __webpack_require__(4);
	
	var _state = __webpack_require__(5);
	
	var _filters = __webpack_require__(7);
	
	var _postal = __webpack_require__(2);
	
	var _postal2 = _interopRequireDefault(_postal);
	
	var _lodash = __webpack_require__(1);
	
	var _lodash2 = _interopRequireDefault(_lodash);
	
	var handlers = {
		"federation.ping": function federationPing(data /*, callback */) {
			data.source.setInstanceId(data.packingSlip.instanceId);
			if (data.source.handshakeComplete) {
				data.source.sendPong(data.packingSlip);
			} else {
				data.source.sendBundle([(0, _packingSlips.getPackingSlip)("pong", data.packingSlip), (0, _packingSlips.getPackingSlip)("ping")]);
			}
		},
		"federation.pong": function federationPong(data) {
			data.source.handshakeComplete = true;
			data.source.setInstanceId(data.packingSlip.instanceId);
			if (data.source.pings[data.packingSlip.pingData.ticket]) {
				data.source.pings[data.packingSlip.pingData.ticket].callback({
					ticket: data.packingSlip.pingData.ticket,
					instanceId: data.packingSlip.instanceId,
					source: data.source
				});
				data.source.pings[data.packingSlip.pingData.ticket] = undefined;
			}
			if (!_lodash2["default"].includes(_state.state._clients, data.packingSlip.instanceId)) {
				_state.state._clients.push(data.packingSlip.instanceId);
			}
			_postal2["default"].publish({
				channel: "postal.federation",
				topic: "client.federated",
				data: {
					remoteId: data.source.instanceId,
					localId: _postal2["default"].instanceId(),
					transport: data.transport
				}
			});
		},
		"federation.disconnect": function federationDisconnect(data) {
			_state.state._clients = _lodash2["default"].without(_state.state._clients, data.source.instanceId);
			(0, _state.disconnect)({
				transport: data.source.transportName,
				instanceId: data.source.instanceId,
				doNotNotify: true
			});
		},
		"federation.message": function federationMessage(data) {
			var env = data.packingSlip.envelope;
			if ((0, _filters.matchesFilter)(env.channel, env.topic, "in")) {
				env.lastSender = data.packingSlip.instanceId;
				_postal2["default"].publish(env);
			}
		},
		"federation.bundle": function federationBundle(data) {
			_lodash2["default"].forEach(data.packingSlip.packingSlips, function (slip) {
				onFederatedMsg(_lodash2["default"].extend({}, data, {
					packingSlip: slip
				}));
			});
		}
	};
	
	exports.handlers = handlers;
	
	function onFederatedMsg(data) {
		if (!_state.state._ready) {
			_state.state._inboundQueue.push(data);
			return;
		}
		if (Object.prototype.hasOwnProperty.call(handlers, data.packingSlip.type)) {
			handlers[data.packingSlip.type](data);
		} else {
			throw new Error("postal.federation does not have a message handler for '" + data.packingSlip.type + "'.");
		}
	}

/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {

	Object.defineProperty(exports, "__esModule", {
		value: true
	});
	exports.addFilter = addFilter;
	exports.removeFilter = removeFilter;
	exports.matchesFilter = matchesFilter;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
	
	var _lodash = __webpack_require__(1);
	
	var _lodash2 = _interopRequireDefault(_lodash);
	
	var _state = __webpack_require__(5);
	
	var _postal = __webpack_require__(2);
	
	var _postal2 = _interopRequireDefault(_postal);
	
	var filters = {
		"in": {}, // jscs:ignore disallowQuotedKeysInObjects
		out: {}
	};
	
	exports["default"] = filters;
	
	function addFilter(_filters) {
		_filters = _lodash2["default"].isArray(_filters) ? _filters : [_filters];
		_lodash2["default"].forEach(_filters, function (filter) {
			filter.direction = filter.direction || _state.state._config.filterDirection;
			_lodash2["default"].forEach(filter.direction === "both" ? ["in", "out"] : [filter.direction], function (dir) {
				if (!filters[dir][filter.channel]) {
					filters[dir][filter.channel] = [filter.topic];
				} else if (!_lodash2["default"].includes(filters[dir][filter.channel], filter.topic)) {
					filters[dir][filter.channel].push(filter.topic);
				}
			});
		});
	}
	
	function removeFilter(_filters) {
		_filters = _lodash2["default"].isArray(_filters) ? _filters : [_filters];
		_lodash2["default"].forEach(_filters, function (filter) {
			filter.direction = filter.direction || _state.state._config.filterDirection;
			_lodash2["default"].forEach(filter.direction === "both" ? ["in", "out"] : [filter.direction], function (dir) {
				if (filters[dir][filter.channel] && _lodash2["default"].includes(filters[dir][filter.channel], filter.topic)) {
					filters[dir][filter.channel] = _lodash2["default"].without(filters[dir][filter.channel], filter.topic);
				}
			});
		});
	}
	
	function matchesFilter(channel, topic, direction) {
		var channelPresent = Object.prototype.hasOwnProperty.call(filters[direction], channel);
		var topicMatch = channelPresent && _lodash2["default"].some(filters[direction][channel], function (binding) {
			return _postal2["default"].configuration.resolver.compare(binding, topic);
		});
		var blacklisting = _state.state._config.filterMode === "blacklist";
		return _state.state._config.enabled && (blacklisting && (!channelPresent || channelPresent && !topicMatch) || !blacklisting && channelPresent && topicMatch);
	}

/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {

	Object.defineProperty(exports, "__esModule", {
		value: true
	});
	// istanbul ignore next
	
	var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
	
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
	
	// istanbul ignore next
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	var _packingSlips = __webpack_require__(4);
	
	var _handlers = __webpack_require__(6);
	
	var _state = __webpack_require__(5);
	
	var _postal = __webpack_require__(2);
	
	var _postal2 = _interopRequireDefault(_postal);
	
	var _lodash = __webpack_require__(1);
	
	var _lodash2 = _interopRequireDefault(_lodash);
	
	var FederationClient = (function () {
		function FederationClient(target, options, instanceId) {
			_classCallCheck(this, FederationClient);
	
			this.target = target;
			this.options = options || {};
			this.pings = {};
			this.instanceId = instanceId;
			this.handshakeComplete = false;
		}
	
		_createClass(FederationClient, [{
			key: "sendPing",
			value: function sendPing(callback) {
				var packingSlip = (0, _packingSlips.getPackingSlip)("ping");
				this.pings[packingSlip.ticket] = {
					ticket: packingSlip.ticket,
					callback: callback || _state.NO_OP
				};
				this.send(packingSlip);
			}
		}, {
			key: "sendPong",
			value: function sendPong(origPackingSlip) {
				this.send((0, _packingSlips.getPackingSlip)("pong", origPackingSlip));
			}
		}, {
			key: "sendBundle",
			value: function sendBundle(slips) {
				this.send((0, _packingSlips.getPackingSlip)("bundle", slips));
			}
		}, {
			key: "sendMessage",
			value: function sendMessage(envelope) {
				if (!this.handshakeComplete) {
					return;
				}
				envelope.originId = envelope.originId || _postal2["default"].instanceId();
				var env = _lodash2["default"].clone(envelope);
				if (this.instanceId && this.instanceId !== env.lastSender && (!env.knownIds || !env.knownIds.length || env.knownIds && !_lodash2["default"].includes(env.knownIds, this.instanceId))) {
					env.knownIds = (env.knownIds || []).concat(_lodash2["default"].without(_state.state._clients, this.instanceId));
					this.send((0, _packingSlips.getPackingSlip)("message", env));
				}
			}
		}, {
			key: "disconnect",
			value: function disconnect() {
				this.send((0, _packingSlips.getPackingSlip)("disconnect"));
			}
		}, {
			key: "onMessage",
			value: function onMessage(packingSlip) {
				if (this.shouldProcess()) {
					(0, _handlers.onFederatedMsg)({
						transport: this.transportName,
						packingSlip: packingSlip,
						source: this
					});
				}
			}
		}, {
			key: "shouldProcess",
			value: function shouldProcess() {
				return true;
			}
		}, {
			key: "send",
			value: function send() /* msg */{
				throw new Error("An object deriving from FederationClient must provide an implementation for 'send'.");
			}
		}, {
			key: "setInstanceId",
			value: function setInstanceId(id) {
				this.instanceId = id;
			}
		}], [{
			key: "extend",
			value: function extend(props, ctrProps) {
				function FedXClient() {
					FederationClient.apply(this, arguments);
				}
	
				FedXClient.prototype = Object.create(FederationClient.prototype);
				_lodash2["default"].extend(FedXClient.prototype, props);
				_lodash2["default"].extend(FedXClient, ctrProps);
	
				return FedXClient;
			}
		}]);
	
		return FederationClient;
	})();
	
	exports["default"] = FederationClient;
	module.exports = exports["default"];

/***/ }
/******/ ])
});
;

/***/ }),
/* 112 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 *  * postal.xwindow - postal.js/postal.federation plugin for federating instances of postal.js across unrelated window boundaries.
 *  * Author: Cornelius Weiß (http://www.metaways.de)
 *  * Version: v0.0.8
 *  * Url: http://github.com/tine20/postal.xwindow
 *  * License(s): (MIT OR GPL-2.0)
 */
(function webpackUniversalModuleDefinition(root, factory) {
	if(true)
		module.exports = factory(__webpack_require__(4), __webpack_require__(14));
	else if(typeof define === 'function' && define.amd)
		define(["lodash", "postal"], factory);
	else if(typeof exports === 'object')
		exports["postalXWindow"] = factory(require("lodash"), require("postal"));
	else
		root["postalXWindow"] = factory(root["_"], root["postal"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;
/******/
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

	var _ = __webpack_require__( 1 );
	var postal = __webpack_require__( 2 );
	var utils = __webpack_require__( 3 );
	var S = __webpack_require__( 4 );
	var state = S.state;
	var env = S.env;
	__webpack_require__( 5 );
	__webpack_require__( 8 );
	var XWindowClient = __webpack_require__( 10 );
	
	XWindowClient.getInstance = function( target, options, instanceId ) {
		return new XWindowClient( target, options, instanceId );
	};
	
	postal.fedx.transports.xwindow = {
		eagerSerialize: env.useEagerSerialize,
		remotes: [],
		XWindowClient: XWindowClient,
		configure: function( cfg ) {
			if ( cfg ) {
				state.config = _.defaults( _.extend( state.config, cfg ), state.defaults );
			}
			return state.config;
		},
		clearConfiguration: function() {
			state.config = _.extend( {}, state.defaults );
		},
		disconnect: function( options ) {
			options = options || {};
			var clients = options.instanceId ?
			// an instanceId value or array was provided, let's get the client proxy instances for the id(s)
			_.reduce( _.isArray( options.instanceId ) ? options.instanceId : [ options.instanceId ], _.bind( utils._memoRemoteByInstanceId, this ), [] ) :
			// Ok so we don't have instanceId(s), let's try target(s)
			options.target ?
			// Ok, so we have a targets array, we need to iterate over it and get a list of the proxy/client instances
			_.reduce( _.isArray( options.target ) ? options.target : [ options.target ], _.bind( utils._memoRemoteByTarget, this ), [] ) :
			// aww, heck - we don't have instanceId(s) or target(s), so it's ALL THE REMOTES
			this.remotes;
			if ( !options.doNotNotify ) {
				_.forEach( clients, _.bind( utils._disconnectClient, this ) );
			}
			this.remotes = _.without.apply( null, [ this.remotes ].concat( clients ) );
		},
		getTargets: function() {
			return this.tidyStorage();
		},
		sendMessage: function( env ) {
			var envelope = env;
			if ( state.config.safeSerialize ) {
				envelope = utils.safeSerialize( _.cloneDeep( env ) );
			}
			var instanceId = postal.instanceId();
	
			_.forEach( this.remotes, function( remote ) {
				if ( remote.instanceId != instanceId ) {
					remote.sendMessage( envelope );
				}
			} );
		},
		wrapForTransport: env.useEagerSerialize ? function( packingSlip ) {
			return JSON.stringify( {
				postal: true,
				packingSlip: packingSlip
			} );
		} : function( packingSlip ) {
			return {
				postal: true,
				packingSlip: packingSlip
			};
		},
		unwrapFromTransport: function( msgData ) {
			if ( typeof msgData === "string" && ( env.useEagerSerialize || msgData.indexOf( '"postal":true' ) !== -1 ) ) {
				try {
					return JSON.parse( msgData );
				} catch ( ex ) {
					return {};
				}
			} else {
				return msgData;
			}
		},
		routeMessage: function( event ) {
			var parsed = this.unwrapFromTransport( event.newValue );
	
			if ( parsed && parsed.postal ) {
				var packingSlip = parsed.packingSlip;
				var instanceId = packingSlip.instanceId;
				if ( packingSlip && instanceId != postal.instanceId() ) {
					var remote = _.find( this.remotes, function( x ) {
						return x.instanceId === instanceId;
					} );
					if ( !remote ) {
						var target = store.namespace( state.config.localStoragePrefix + "." + instanceId );
						remote = XWindowClient.getInstance( target, { origin: target.get( "targetUrl" ) }, instanceId );
						this.remotes.push( remote );
					}
	
					// origin forgery protection
					var url = utils.parseUri( event.url );
					var origin = url.protocol + "://" + url.authority;
	
					if ( remote.options.origin == origin ) {
						remote.onMessage( packingSlip );
					}
				}
			}
		},
		signalReady: function( targets, callback ) {
			var instanceId = postal.instanceId();
			var that = this;
	
			this.target = store.namespace( state.config.localStoragePrefix + "." + instanceId );
			this.target.on( "message", _.bind( this.routeMessage, this ) );
			this.keepAlive();
	
			targets = _.isArray( targets ) ? targets : [ targets ];
			targets = targets.length ? targets : this.getTargets();
			callback = callback || function() {};
	
			_.forEach( targets, _.bind( function( def ) {
				if ( def.targetId != instanceId ) {
					var remote = _.find( that.remotes, function( x ) {
						return x.instanceId === def.targetId;
					} );
					if ( !remote ) {
						remote = XWindowClient.getInstance( def.target, { origin: def.origin }, def.targetId );
						that.remotes.push( remote );
					}
					remote.sendPing( callback );
				}
			}, this ) );
		},
		keepAlive: function() {
			this.target.set( "targetUrl", env.origin );
			this.target.set( "targetTimeout", new Date().getTime() + state.config.targetTimeout );
	
			this.tidyStorage();
			this.tidyRemotes();
	
			_.delay( _.bind( this.keepAlive, this ), Math.round( state.config.targetTimeout / 2 ) );
		},
		tidyStorage: function() {
			var targetIds = _.reduce( store.namespace( state.config.localStoragePrefix ).getAll(), function( memo, targetData, id ) {
				var targetId = id.split( "." )[0];
				if ( _.indexOf( memo, targetId ) < 0 ) {
					memo.push( targetId );
				}
				return memo;
			}, [] );
	
			var now = new Date().getTime();
			return _.reduce( targetIds, function( memo, targetId ) {
				var target = store.namespace( state.config.localStoragePrefix + "." + targetId );
				if ( target.get( "targetTimeout" ) < now ) {
					target.clear();
				} else {
					memo.push( {
						targetId: targetId,
						target: target,
						origin: target.get( "targetUrl" )
					} );
				}
				return memo;
			}, [] );
		},
		tidyRemotes: function() {
			var that = this;
			_.forEach( this.remotes, function( remote ) {
				if ( _.isEmpty( remote.target.getAll() ) ) {
					that.disconnect( { target: remote.target } );
				}
			} );
		}
	};


/***/ }),
/* 1 */
/***/ (function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_1__;

/***/ }),
/* 2 */
/***/ (function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_2__;

/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {

	var _ = __webpack_require__( 1 );
	
	var _memoRemoteByInstanceId = function( memo, instanceId ) {
		var proxy = _.find( this.remotes, function( x ) {
			return x.instanceId === instanceId;
		} );
		if ( proxy ) {
			memo.push( proxy );
		}
		return memo;
	};
	
	var _memoRemoteByTarget = function( memo, tgt ) {
		var proxy = _.find( this.remotes, function( x ) {
			return x.target === tgt;
		} );
		if ( proxy ) {
			memo.push( proxy );
		}
		return memo;
	};
	
	var _disconnectClient = function( client ) {
		client.disconnect();
	};
	
	safeSerialize = function safeSerialize( envelope ) {
		var json = JSON.parse( JSON.stringify( envelope, function( key, value ) {
			if ( typeof value === "function" ) {
				return undefined;
			}
			return value;
		} ) );
	
		return json;
	};
	
	// parseUri 1.2.2
	// (c) Steven Levithan <stevenlevithan.com>
	// MIT License
	
	var parseUri = function( str ) {
		var o = parseUri.options;
		var m = o.parser[o.strictMode ? "strict" : "loose"].exec( str );
		var uri = {};
		var i = 14;
	
		while ( i-- ) {
			uri[o.key[i]] = m[i] || "";
		}
	
		uri[o.q.name] = {};
		uri[o.key[12]].replace( o.q.parser, function( $0, $1, $2 ) {
			if ( $1 ) {
				uri[o.q.name][$1] = $2;
			}
		} );
	
		return uri;
	};
	
	parseUri.options = {
		strictMode: false,
		key: [ "source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor" ],
		q: {
			name: "queryKey",
			parser: /(?:^|&)([^&=]*)=?([^&]*)/g
		},
		parser: {
			strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
			loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
		}
	};
	
	module.exports = {
		_memoRemoteByInstanceId: _memoRemoteByInstanceId,
		_memoRemoteByTarget: _memoRemoteByTarget,
		_disconnectClient: _disconnectClient,
		safeSerialize: safeSerialize,
		parseUri: parseUri
	};


/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

	var _ = __webpack_require__( 1 );
	
	var env = {
		origin: location.origin || location.protocol + "//" + location.host,
		isWorker: ( typeof window === "undefined" ) && postMessage && location,
		// I know, I KNOW. The alternative was very expensive perf & time-wise
		// so I saved you a perf hit by checking the stinking UA. Sigh.
		// I sought the opinion of several other devs. We all traveled
		// to the far east to consult with the wisdom of a monk - turns
		// out he didn"t know JavaScript, and our passports were stolen on the
		// return trip. We stowed away aboard a freighter headed back to the
		// US and by the time we got back, no one had heard of IE 8 or 9. True story.
		useEagerSerialize: /MSIE [8,9]/.test( navigator.userAgent )
	};
	
	var defaults = {
		allowedOrigins: [ env.origin ],
		enabled: true,
		safeSerialize: false,
		localStoragePrefix: "postal.fedx.xwindow",
		targetTimeout: 60000 // 1 minute
	};
	
	var state = {
		workers: [],
		config: _.extend( {}, defaults ),
		defaults: defaults
	};
	
	module.exports = {
		state: state,
		env: env
	};


/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(6)(__webpack_require__(7))

/***/ }),
/* 6 */
/***/ (function(module, exports) {

	/*
		MIT License http://www.opensource.org/licenses/mit-license.php
		Author Tobias Koppers @sokra
	*/
	module.exports = function(src) {
		function log(error) {
			(typeof console !== "undefined")
			&& (console.error || console.log)("[Script Loader]", error);
		}
	
		// Check for IE =< 8
		function isIE() {
			return typeof attachEvent !== "undefined" && typeof addEventListener === "undefined";
		}
	
		try {
			if (typeof execScript !== "undefined" && isIE()) {
				execScript(src);
			} else if (typeof eval !== "undefined") {
				eval.call(null, src);
			} else {
				log("EvalError: No eval function available");
			}
		} catch (error) {
			log(error);
		}
	}


/***/ }),
/* 7 */
/***/ (function(module, exports) {

	module.exports = "/*! store2 - v2.5.11 - 2018-01-18\n* Copyright (c) 2018 Nathan Bubna; Licensed (MIT OR GPL-3.0) */\n;(function(window, define) {\n    var _ = {\n        version: \"2.5.11\",\n        areas: {},\n        apis: {},\n\n        // utilities\n        inherit: function(api, o) {\n            for (var p in api) {\n                if (!o.hasOwnProperty(p)) {\n                    o[p] = api[p];\n                }\n            }\n            return o;\n        },\n        stringify: function(d) {\n            return d === undefined || typeof d === \"function\" ? d+'' : JSON.stringify(d);\n        },\n        parse: function(s) {\n            // if it doesn't parse, return as is\n            try{ return JSON.parse(s); }catch(e){ return s; }\n        },\n\n        // extension hooks\n        fn: function(name, fn) {\n            _.storeAPI[name] = fn;\n            for (var api in _.apis) {\n                _.apis[api][name] = fn;\n            }\n        },\n        get: function(area, key){ return area.getItem(key); },\n        set: function(area, key, string){ area.setItem(key, string); },\n        remove: function(area, key){ area.removeItem(key); },\n        key: function(area, i){ return area.key(i); },\n        length: function(area){ return area.length; },\n        clear: function(area){ area.clear(); },\n\n        // core functions\n        Store: function(id, area, namespace) {\n            var store = _.inherit(_.storeAPI, function(key, data, overwrite) {\n                if (arguments.length === 0){ return store.getAll(); }\n                if (typeof data === \"function\"){ return store.transact(key, data, overwrite); }// fn=data, alt=overwrite\n                if (data !== undefined){ return store.set(key, data, overwrite); }\n                if (typeof key === \"string\" || typeof key === \"number\"){ return store.get(key); }\n                if (!key){ return store.clear(); }\n                return store.setAll(key, data);// overwrite=data, data=key\n            });\n            store._id = id;\n            try {\n                var testKey = '_safariPrivate_';\n                area.setItem(testKey, 'sucks');\n                store._area = area;\n                area.removeItem(testKey);\n            } catch (e) {}\n            if (!store._area) {\n                store._area = _.inherit(_.storageAPI, { items: {}, name: 'fake' });\n            }\n            store._ns = namespace || '';\n            if (!_.areas[id]) {\n                _.areas[id] = store._area;\n            }\n            if (!_.apis[store._ns+store._id]) {\n                _.apis[store._ns+store._id] = store;\n            }\n            return store;\n        },\n        storeAPI: {\n            // admin functions\n            area: function(id, area) {\n                var store = this[id];\n                if (!store || !store.area) {\n                    store = _.Store(id, area, this._ns);//new area-specific api in this namespace\n                    if (!this[id]){ this[id] = store; }\n                }\n                return store;\n            },\n            namespace: function(namespace, noSession) {\n                if (!namespace){\n                    return this._ns ? this._ns.substring(0,this._ns.length-1) : '';\n                }\n                var ns = namespace, store = this[ns];\n                if (!store || !store.namespace) {\n                    store = _.Store(this._id, this._area, this._ns+ns+'.');//new namespaced api\n                    if (!this[ns]){ this[ns] = store; }\n                    if (!noSession){ store.area('session', _.areas.session); }\n                }\n                return store;\n            },\n            isFake: function(){ return this._area.name === 'fake'; },\n            toString: function() {\n                return 'store'+(this._ns?'.'+this.namespace():'')+'['+this._id+']';\n            },\n\n            // storage functions\n            has: function(key) {\n                if (this._area.has) {\n                    return this._area.has(this._in(key));//extension hook\n                }\n                return !!(this._in(key) in this._area);\n            },\n            size: function(){ return this.keys().length; },\n            each: function(fn, _and) {// _and is purely for internal use (see keys())\n                for (var i=0, m=_.length(this._area); i<m; i++) {\n                    var key = this._out(_.key(this._area, i));\n                    if (key !== undefined) {\n                        if (fn.call(this, key, _and || this.get(key)) === false) {\n                            break;\n                        }\n                    }\n                    if (m > _.length(this._area)) { m--; i--; }// in case of removeItem\n                }\n                return _and || this;\n            },\n            keys: function() {\n                return this.each(function(k, list){ list.push(k); }, []);\n            },\n            get: function(key, alt) {\n                var s = _.get(this._area, this._in(key));\n                return s !== null ? _.parse(s) : alt || s;// support alt for easy default mgmt\n            },\n            getAll: function() {\n                return this.each(function(k, all){ all[k] = this.get(k); }, {});\n            },\n            transact: function(key, fn, alt) {\n                var val = this.get(key, alt),\n                    ret = fn(val);\n                this.set(key, ret === undefined ? val : ret);\n                return this;\n            },\n            set: function(key, data, overwrite) {\n                var d = this.get(key);\n                if (d != null && overwrite === false) {\n                    return data;\n                }\n                return _.set(this._area, this._in(key), _.stringify(data), overwrite) || d;\n            },\n            setAll: function(data, overwrite) {\n                var changed, val;\n                for (var key in data) {\n                    val = data[key];\n                    if (this.set(key, val, overwrite) !== val) {\n                        changed = true;\n                    }\n                }\n                return changed;\n            },\n            remove: function(key) {\n                var d = this.get(key);\n                _.remove(this._area, this._in(key));\n                return d;\n            },\n            clear: function() {\n                if (!this._ns) {\n                    _.clear(this._area);\n                } else {\n                    this.each(function(k){ _.remove(this._area, this._in(k)); }, 1);\n                }\n                return this;\n            },\n            clearAll: function() {\n                var area = this._area;\n                for (var id in _.areas) {\n                    if (_.areas.hasOwnProperty(id)) {\n                        this._area = _.areas[id];\n                        this.clear();\n                    }\n                }\n                this._area = area;\n                return this;\n            },\n\n            // internal use functions\n            _in: function(k) {\n                if (typeof k !== \"string\"){ k = _.stringify(k); }\n                return this._ns ? this._ns + k : k;\n            },\n            _out: function(k) {\n                return this._ns ?\n                    k && k.indexOf(this._ns) === 0 ?\n                        k.substring(this._ns.length) :\n                        undefined : // so each() knows to skip it\n                    k;\n            }\n        },// end _.storeAPI\n        storageAPI: {\n            length: 0,\n            has: function(k){ return this.items.hasOwnProperty(k); },\n            key: function(i) {\n                var c = 0;\n                for (var k in this.items){\n                    if (this.has(k) && i === c++) {\n                        return k;\n                    }\n                }\n            },\n            setItem: function(k, v) {\n                if (!this.has(k)) {\n                    this.length++;\n                }\n                this.items[k] = v;\n            },\n            removeItem: function(k) {\n                if (this.has(k)) {\n                    delete this.items[k];\n                    this.length--;\n                }\n            },\n            getItem: function(k){ return this.has(k) ? this.items[k] : null; },\n            clear: function(){ for (var k in this.items){ this.removeItem(k); } },\n            toString: function(){ return this.length+' items in '+this.name+'Storage'; }\n        }// end _.storageAPI\n    };\n\n    var store =\n        // safely set this up (throws error in IE10/32bit mode for local files)\n        _.Store(\"local\", (function(){try{ return localStorage; }catch(e){}})());\n    store.local = store;// for completeness\n    store._ = _;// for extenders and debuggers...\n    // safely setup store.session (throws exception in FF for file:/// urls)\n    store.area(\"session\", (function(){try{ return sessionStorage; }catch(e){}})());\n\n    if (typeof define === 'function' && define.amd !== undefined) {\n        define('store2', [], function () {\n            return store;\n        });\n    } else if (typeof module !== 'undefined' && module.exports) {\n        module.exports = store;\n    } else {\n        // expose the primary store fn to the global object and save conflicts\n        if (window.store){ _.conflict = window.store; }\n        window.store = store;\n    }\n\n})(this, this.define);\n"

/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(6)(__webpack_require__(9))

/***/ }),
/* 9 */
/***/ (function(module, exports) {

	module.exports = "/**\n * Copyright (c) 2013 ESHA Research\n * Dual licensed under the MIT and GPL licenses:\n *   http://www.opensource.org/licenses/mit-license.php\n *   http://www.gnu.org/licenses/gpl.html\n *\n * Makes it easy to watch for storage events by enhancing the events and\n * allowing binding to particular keys and/or namespaces.\n *\n * // listen to particular key storage events (yes, this is namespace sensitive)\n * store.on('foo', function listenToFoo(e){ console.log('foo was changed:', e); });\n * store.off('foo', listenToFoo);\n *\n * // listen to all storage events\n * store.on(function storageEvent(e){ console.log('web storage:', e); });\n * store.off(storageEvent);\n * \n * Status: ALPHA - useful, if you don't mind incomplete browser support for events\n */\n;(function(window, document, _) {\n    _.fn('on', function(key, fn) {\n        if (!fn) { fn = key; key = ''; }// shift args when needed\n        var s = this,\n            bound,\n            id = _.id(this._area);\n        if (window.addEventListener) {\n            window.addEventListener(\"storage\", bound = function(e) {\n                var k = s._out(e.key);\n                if (k && (!key || k === key)) {// must match key if listener has one\n                    var eid = _.id(e.storageArea);\n                    if (!eid || id === eid) {// must match area, if event has a known one\n                        return fn.call(s, _.event(k, s, e));\n                    }\n                }\n            }, false);\n        } else {\n            document.attachEvent(\"onstorage\", bound = function() {\n                return fn.call(s, window.event);\n            });\n        }\n        fn['_'+key+'listener'] = bound;\n        return s;\n    });\n    _.fn('off', function(key, fn) {\n        if (!fn) { fn = key; key = ''; }// shift args when needed\n        var bound = fn['_'+key+'listener'];\n        if (window.removeEventListener) {\n            window.removeEventListener(\"storage\", bound);\n        } else {\n            document.detachEvent(\"onstorage\", bound);\n        }\n        return this;\n    });\n    _.event = function(k, s, e) {\n        var event = {\n            key: k,\n            namespace: s.namespace(),\n            newValue: _.parse(e.newValue),\n            oldValue: _.parse(e.oldValue),\n            url: e.url || e.uri,\n            storageArea: e.storageArea,\n            source: e.source,\n            timeStamp: e.timeStamp,\n            originalEvent: e\n        };\n        if (_.cache) {\n            var min = _.expires(e.newValue || e.oldValue);\n            if (min) {\n                event.expires = _.when(min);\n            }\n        }\n        return event;\n    };\n    _.id = function(area) {\n        for (var id in _.areas) {\n            if (area === _.areas[id]) {\n                return id;\n            }\n        }\n    };\n})(window, document, window.store._);"

/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {

	var _ = __webpack_require__( 1 );
	var postal = __webpack_require__( 2 );
	var S = __webpack_require__( 4 );
	var state = S.state;
	var env = S.env;
	
	var XWindowClient = function() {
		postal.fedx.FederationClient.apply( this, arguments );
	};
	
	XWindowClient.prototype = _.create( postal.fedx.FederationClient.prototype, {
		constructor: XWindowClient,
	
		transportName: "xwindow",
	
		shouldProcess: function() {
			var hasDomainFilters = !!state.config.allowedOrigins.length;
			return state.config.enabled &&
					// another frame/window
				( ( this.options.origin === "*" || ( hasDomainFilters && _.includes( state.config.allowedOrigins, this.options.origin ) || !hasDomainFilters ) ) ||
					// worker
				( this.options.isWorker && _.includes( state.workers, this.target ) ) ||
					// we are in a worker
				env.isWorker );
		},
		send: function( packingSlip ) {
			if ( this.shouldProcess() ) {
				var msg = postal.fedx.transports.xwindow.wrapForTransport( packingSlip );
				this.target.set( "message", msg );
			}
		}
	} );
	
	module.exports = XWindowClient;


/***/ })
/******/ ])
});
;

/***/ }),
/* 113 */
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**
 * postal.request-response - postal.js add-on that provides a request/response pattern API.
 * Author: Jim Cowart (http://ifandelse.com)
 * Version: v0.3.1
 * Url: https://github.com/postaljs/postal.request-response
 * License(s): MIT
 */
(function (root, factory) { /* istanbul ignore if  */
    if (true) {
        // AMD. Register as an anonymous module.
        !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(4), __webpack_require__(14)], __WEBPACK_AMD_DEFINE_RESULT__ = (function (_, postal) {
            return factory(_, postal, root);
        }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); /* istanbul ignore else */
    } else if (typeof module === "object" && module.exports) {
        // Node, or CommonJS-Like environments
        module.exports = function (postal) {
            return factory(require("lodash"), postal, this);
        };
    } else {
        // Browser globals
        root.postal = factory(root._, root.postal, root);
    }
}(this, function (_, postal, global, undefined) {
    var REQ_RES_CHANNEL = "postal.request-response";
    // I want this lib to be compatible with nearly any
    // promises-A-spec-compliant promise lib. For that
    // to happen, though, you have to provide a factory
    // method implementation that returns a promise
    postal.configuration.promise = {
        createDeferred: function () {
            throw new Error("You need to provide an implementation for postal.configuration.promise.createDeferred that returns a deferred/promise instance.");
        },
        getPromise: function () {
            throw new Error("You need to provide an implementation for postal.configuration.promise.getPromise that returns a promise safe for consuming APIs to use.");
        },
        fulfill: "resolve",
        fail: "reject",
    };
    /**
     * Fast UUID generator, RFC4122 version 4 compliant.
     * @author Jeff Ward (jcward.com).
     * @license MIT license
     * @link http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136
     **/
    var UUID = (function () {
        var self = {};
        var lut = [];
        for (var i = 0; i < 256; i++) {
            lut[i] = (i < 16 ? "0" : "") + (i).toString(16);
        }
        self.create = function () {
            var d0 = Math.random() * 0xffffffff | 0;
            var d1 = Math.random() * 0xffffffff | 0;
            var d2 = Math.random() * 0xffffffff | 0;
            var d3 = Math.random() * 0xffffffff | 0;
            return lut[d0 & 0xff] + lut[d0 >> 8 & 0xff] + lut[d0 >> 16 & 0xff] + lut[d0 >> 24 & 0xff] + "-" + lut[d1 & 0xff] + lut[d1 >> 8 & 0xff] + "-" + lut[d1 >> 16 & 0x0f | 0x40] + lut[d1 >> 24 & 0xff] + "-" + lut[d2 & 0x3f | 0x80] + lut[d2 >> 8 & 0xff] + "-" + lut[d2 >> 16 & 0xff] + lut[d2 >> 24 & 0xff] + lut[d3 & 0xff] + lut[d3 >> 8 & 0xff] + lut[d3 >> 16 & 0xff] + lut[d3 >> 24 & 0xff];
        };
        return self;
    })();
    postal.ChannelDefinition.prototype.request = function (options) {
        var env = options.envelope ? options.envelope : {
            topic: options.topic,
            data: options.data,
            headers: options.headers
        };
        var requestId = UUID.create();
        var replyTopic = options.replyTopic || requestId;
        var replyChannel = options.replyChannel || REQ_RES_CHANNEL;
        var timeout;
        var promise = postal.configuration.promise.createDeferred();
        env.headers = env.headers || {};
        env.headers.replyable = true;
        env.headers.requestId = requestId;
        env.headers.replyTopic = replyTopic;
        env.headers.replyChannel = replyChannel;
        var sub = postal.subscribe({
            channel: replyChannel,
            topic: replyTopic,
            callback: function (data, env) {
                if (env.headers && env.headers.isError) {
                    promise[postal.configuration.promise.fail](data);
                } else {
                    promise[postal.configuration.promise.fulfill](data);
                }
            }
        }).once();
        if (options.timeout) {
            timeout = setTimeout(function () {
                promise[postal.configuration.promise.fail](new Error("Timeout limit exceeded for request."));
            }, options.timeout);
        }
        this.publish(env);
        return postal.configuration.promise.getPromise(promise);
    };
    var oldPub = postal.publish;
    postal.publish = function (envelope) {
        if (envelope.headers && envelope.headers.replyable) {
            envelope.reply = function (err, data) {
                postal.publish({
                    channel: envelope.headers.replyChannel,
                    topic: envelope.headers.replyTopic,
                    headers: {
                        isReply: true,
                        isError: !! err,
                        requestId: envelope.headers.requestId,
                        resolverNoCache: true
                    },
                    data: err || data
                });
            };
        }
        oldPub.call(this, envelope);
    };
    return postal;
}));

/***/ }),
/* 114 */
/***/ (function(module, exports) {

// 7.1.4 ToInteger
var ceil = Math.ceil;
var floor = Math.floor;
module.exports = function (it) {
  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};


/***/ }),
/* 115 */
/***/ (function(module, exports) {

// 7.2.1 RequireObjectCoercible(argument)
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on  " + it);
  return it;
};


/***/ }),
/* 116 */
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__(26);
var document = __webpack_require__(7).document;
// typeof document.createElement is 'object' in old IE
var is = isObject(document) && isObject(document.createElement);
module.exports = function (it) {
  return is ? document.createElement(it) : {};
};


/***/ }),
/* 117 */
/***/ (function(module, exports, __webpack_require__) {

// 7.1.1 ToPrimitive(input [, PreferredType])
var isObject = __webpack_require__(26);
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function (it, S) {
  if (!isObject(it)) return it;
  var fn, val;
  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  throw TypeError("Can't convert object to primitive value");
};


/***/ }),
/* 118 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
var anObject = __webpack_require__(15);
var dPs = __webpack_require__(979);
var enumBugKeys = __webpack_require__(121);
var IE_PROTO = __webpack_require__(119)('IE_PROTO');
var Empty = function () { /* empty */ };
var PROTOTYPE = 'prototype';

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = __webpack_require__(116)('iframe');
  var i = enumBugKeys.length;
  var lt = '<';
  var gt = '>';
  var iframeDocument;
  iframe.style.display = 'none';
  __webpack_require__(200).appendChild(iframe);
  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
  // createDict = iframe.contentWindow.Object;
  // html.removeChild(iframe);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
  iframeDocument.close();
  createDict = iframeDocument.F;
  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
  return createDict();
};

module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    Empty[PROTOTYPE] = anObject(O);
    result = new Empty();
    Empty[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = createDict();
  return Properties === undefined ? result : dPs(result, Properties);
};


/***/ }),
/* 119 */
/***/ (function(module, exports, __webpack_require__) {

var shared = __webpack_require__(120)('keys');
var uid = __webpack_require__(74);
module.exports = function (key) {
  return shared[key] || (shared[key] = uid(key));
};


/***/ }),
/* 120 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(7);
var SHARED = '__core-js_shared__';
var store = global[SHARED] || (global[SHARED] = {});
module.exports = function (key) {
  return store[key] || (store[key] = {});
};


/***/ }),
/* 121 */
/***/ (function(module, exports) {

// IE 8- don't enum bug keys
module.exports = (
  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');


/***/ }),
/* 122 */
/***/ (function(module, exports, __webpack_require__) {

// 7.1.13 ToObject(argument)
var defined = __webpack_require__(115);
module.exports = function (it) {
  return Object(defined(it));
};


/***/ }),
/* 123 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 25.4.1.5 NewPromiseCapability(C)
var aFunction = __webpack_require__(71);

function PromiseCapability(C) {
  var resolve, reject;
  this.promise = new C(function ($$resolve, $$reject) {
    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
    resolve = $$resolve;
    reject = $$reject;
  });
  this.resolve = aFunction(resolve);
  this.reject = aFunction(reject);
}

module.exports.f = function (C) {
  return new PromiseCapability(C);
};


/***/ }),
/* 124 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(191);

/***/ }),
/* 125 */
/***/ (function(module, exports, __webpack_require__) {

var _Object$defineProperty = __webpack_require__(1211);

function _defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
    var descriptor = props[i];
    descriptor.enumerable = descriptor.enumerable || false;
    descriptor.configurable = true;
    if ("value" in descriptor) descriptor.writable = true;

    _Object$defineProperty(target, descriptor.key, descriptor);
  }
}

function _createClass(Constructor, protoProps, staticProps) {
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  if (staticProps) _defineProperties(Constructor, staticProps);
  return Constructor;
}

module.exports = _createClass;

/***/ }),
/* 126 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _interopRequireDefault = __webpack_require__(21);

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _promise = _interopRequireDefault(__webpack_require__(124));

var _getPrototypeOf = _interopRequireDefault(__webpack_require__(53));

var _classCallCheck2 = _interopRequireDefault(__webpack_require__(52));

var _createClass2 = _interopRequireDefault(__webpack_require__(125));

var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(76));

var _get2 = _interopRequireDefault(__webpack_require__(1228));

var _inherits2 = _interopRequireDefault(__webpack_require__(78));

var _AbstractProvider2 = _interopRequireDefault(__webpack_require__(1239));

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/* global Tine,i18n */
var UserPasswordProvider =
/*#__PURE__*/
function (_AbstractProvider) {
  (0, _inherits2.default)(UserPasswordProvider, _AbstractProvider);

  function UserPasswordProvider(config) {
    var _this;

    (0, _classCallCheck2.default)(this, UserPasswordProvider);
    _this = (0, _possibleConstructorReturn2.default)(this, (UserPasswordProvider.__proto__ || (0, _getPrototypeOf.default)(UserPasswordProvider)).call(this, config));
    _this.windowTitle = i18n._('Password required');
    _this.questionText = i18n._('This area is locked. To unlock it you need to provide your password');
    _this.passwordFieldLabel = i18n._('Password');
    return _this;
  }

  (0, _createClass2.default)(UserPasswordProvider, [{
    key: "unlock",
    value: function unlock() {
      var _this2 = this;

      var me = this;
      return new _promise.default(function (resolve, reject) {
        var pwDlg = new Tine.Tinebase.widgets.dialog.PasswordDialog({
          windowTitle: me.windowTitle,
          questionText: me.questionText,
          passwordFieldLabel: me.passwordFieldLabel,
          allowEmptyPassword: false,
          hasPwGen: false
        });
        pwDlg.openWindow();
        pwDlg.on('apply', function (password) {
          me.isUnlocking = true;
          me.fireEvent('unlocking', me);
          return Tine.Tinebase_AreaLock.unlock(me.area, password).finally(function () {
            me.isUnlocking = false;
          }).then(function () {
            return (0, _get2.default)(UserPasswordProvider.prototype.__proto__ || (0, _getPrototypeOf.default)(UserPasswordProvider.prototype), "unlock", _this2).call(_this2);
          }).catch(function (e) {
            reject(e);
          });
        });
      });
    }
  }, {
    key: "lock",
    value: function lock() {
      var _this3 = this;

      var me = this;
      me.isLocking = true;
      me.fireEvent('locking', me);
      return Tine.Tinebase_AreaLock.lock(me.area).finally(function () {
        me.isLocking = false;
      }).then(function () {
        return (0, _get2.default)(UserPasswordProvider.prototype.__proto__ || (0, _getPrototypeOf.default)(UserPasswordProvider.prototype), "lock", _this3).call(_this3);
      });
    }
  }]);
  return UserPasswordProvider;
}(_AbstractProvider2.default);

var _default = UserPasswordProvider;
exports.default = _default;

/***/ }),
/* 127 */
/***/ (function(module, exports, __webpack_require__) {

exports.f = __webpack_require__(8);


/***/ }),
/* 128 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(7);
var core = __webpack_require__(3);
var LIBRARY = __webpack_require__(70);
var wksExt = __webpack_require__(127);
var defineProperty = __webpack_require__(19).f;
module.exports = function (name) {
  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
};


/***/ }),
/* 129 */
/***/ (function(module, exports) {

exports.f = Object.getOwnPropertySymbols;


/***/ }),
/* 130 */
/***/ (function(module, exports, __webpack_require__) {

var pIE = __webpack_require__(77);
var createDesc = __webpack_require__(72);
var toIObject = __webpack_require__(28);
var toPrimitive = __webpack_require__(117);
var has = __webpack_require__(27);
var IE8_DOM_DEFINE = __webpack_require__(195);
var gOPD = Object.getOwnPropertyDescriptor;

exports.f = __webpack_require__(20) ? gOPD : function getOwnPropertyDescriptor(O, P) {
  O = toIObject(O);
  P = toPrimitive(P, true);
  if (IE8_DOM_DEFINE) try {
    return gOPD(O, P);
  } catch (e) { /* empty */ }
  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
};


/***/ }),
/* 131 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath id='Icon_Zeiterfassung_7_' d='M32.7,21.2c0-2.1-0.5-4-1.6-5.8c-1-1.8-2.4-3.2-4.2-4.2c-1.8-1-3.7-1.6-5.8-1.6s-4,0.5-5.8,1.6 s-3.2,2.4-4.2,4.2s-1.6,3.7-1.6,5.8s0.5,4,1.6,5.8c1,1.8,2.4,3.2,4.2,4.2c1.8,1,3.7,1.6,5.8,1.6s4-0.5,5.8-1.6 c1.8-1,3.2-2.4,4.2-4.2C32.2,25.2,32.7,23.3,32.7,21.2z M35.3,21.2c0,2.6-0.6,4.9-1.9,7.1c-1.3,2.2-3,3.9-5.2,5.2 c-2.2,1.3-4.5,1.9-7.1,1.9s-4.9-0.6-7.1-1.9c-2.2-1.3-3.9-3-5.2-5.2S7,23.7,7,21.2s0.6-4.9,1.9-7.1s3-3.9,5.2-5.2S18.6,7,21.2,7 s4.9,0.6,7.1,1.9s3.9,3,5.2,5.2C34.7,16.2,35.3,18.6,35.3,21.2z'/%3E %3Cpath d='M29.5,17.5L18.6,28.4c-0.2,0.2-0.5,0.3-0.8,0.3c-0.3,0-0.6-0.1-0.8-0.3l-5.4-5.4c-0.2-0.2-0.3-0.5-0.3-0.8 c0-0.3,0.1-0.6,0.3-0.8l0.8-0.8c0.2-0.2,0.5-0.3,0.8-0.3s0.6,0.1,0.8,0.3l3.8,3.8l9.3-9.3c0.2-0.2,0.5-0.3,0.8-0.3 c0.3,0,0.6,0.1,0.8,0.3l0.8,0.8c0.2,0.2,0.3,0.5,0.3,0.8C29.8,17,29.7,17.3,29.5,17.5z'/%3E %3C/svg%3E\""

/***/ }),
/* 132 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M27.8,35.6H3.5V6.4h14.6v7.9c0,0.5,0.2,0.9,0.5,1.3c0.4,0.4,0.8,0.5,1.3,0.5h7.9v2h2.4v-3.8c0-0.5-0.1-1.1-0.4-1.7 c-0.3-0.6-0.6-1.1-0.9-1.4L23,5.3c-0.4-0.4-0.8-0.7-1.4-0.9C21,4.1,20.4,4,19.9,4h-17C2.4,4,1.9,4.2,1.6,4.5 C1.2,4.9,1.1,5.3,1.1,5.8v30.4c0,0.5,0.2,0.9,0.5,1.3S2.4,38,2.9,38h25.5c0.5,0,0.9-0.2,1.3-0.5s0.5-0.8,0.5-1.3v-3.1h-2.4V35.6z M20.5,6.6c0.4,0.1,0.6,0.3,0.8,0.4l5.9,5.9c0.2,0.2,0.3,0.4,0.4,0.8h-7.1V6.6z M26.7,29.9l2-1.8l-2.3-2.6l-2,1.8l0,0.9l1.6,0.1 l-0.1,1.6L26.7,29.9z M34.4,18.7c-0.2-0.2-0.3-0.2-0.5,0l-6,5.4c-0.2,0.2-0.2,0.4,0,0.5c0.2,0.2,0.3,0.2,0.5,0l6-5.4 C34.5,19,34.5,18.9,34.4,18.7z M34.2,16.3l4.4,4.9L27.2,31.5l-4.7-0.2l0.2-4.7L34.2,16.3z M41.3,18.8l-1.6,1.4l-4.4-4.9l1.6-1.4 c0.3-0.3,0.7-0.4,1.1-0.4c0.4,0,0.8,0.2,1.1,0.5l2.3,2.6c0.3,0.3,0.4,0.7,0.4,1.1C41.8,18.2,41.6,18.6,41.3,18.8z'/%3E %3C/svg%3E\""

/***/ }),
/* 133 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath id='Pfeil_links' d='M13,21.2c0-0.2,0.1-0.5,0.3-0.7L26.5,7.3C26.7,7.1,26.9,7,27.2,7c0.2,0,0.5,0.1,0.7,0.3l1.4,1.4 c0.2,0.2,0.3,0.4,0.3,0.7c0,0.2-0.1,0.5-0.3,0.7L18.1,21.2l11.2,11.2c0.2,0.2,0.3,0.4,0.3,0.7c0,0.2-0.1,0.5-0.3,0.7l-1.4,1.4 c-0.2,0.2-0.4,0.3-0.7,0.3c-0.2,0-0.5-0.1-0.7-0.3L13.3,21.8C13.1,21.6,13,21.4,13,21.2z'/%3E %3C/svg%3E\""

/***/ }),
/* 134 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath id='Pfeil_links_1_' d='M29.5,21.2c0-0.2-0.1-0.5-0.3-0.7L16,7.3C15.8,7.1,15.6,7,15.4,7s-0.5,0.1-0.7,0.3l-1.4,1.4 C13.1,8.9,13,9.1,13,9.4c0,0.2,0.1,0.5,0.3,0.7l11.2,11.2L13.3,32.3C13.1,32.5,13,32.7,13,33c0,0.2,0.1,0.5,0.3,0.7l1.4,1.4 c0.2,0.2,0.4,0.3,0.7,0.3s0.5-0.1,0.7-0.3l13.2-13.2C29.4,21.6,29.5,21.4,29.5,21.2z'/%3E %3C/svg%3E\""

/***/ }),
/* 135 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M35.6,21c0-2.6-0.7-5.1-2-7.3s-3.1-4-5.3-5.3s-4.7-2-7.3-2s-5.1,0.7-7.3,2s-4,3.1-5.3,5.3s-2,4.7-2,7.3s0.7,5.1,2,7.3 s3.1,4,5.3,5.3s4.7,2,7.3,2s5.1-0.7,7.3-2s4-3.1,5.3-5.3S35.6,23.6,35.6,21z M38,21c0,3.1-0.8,5.9-2.3,8.5c-1.5,2.6-3.6,4.7-6.2,6.2 C26.9,37.2,24.1,38,21,38c-3.1,0-5.9-0.8-8.5-2.3c-2.6-1.5-4.7-3.6-6.2-6.2S4,24.1,4,21c0-3.1,0.8-5.9,2.3-8.5s3.6-4.7,6.2-6.2 S17.9,4,21,4c3.1,0,5.9,0.8,8.5,2.3s4.7,3.6,6.2,6.2C37.2,15.1,38,17.9,38,21z M26.3,27.9v1.8c0,0.2-0.1,0.5-0.2,0.6 c-0.2,0.2-0.4,0.3-0.6,0.3h-8.7c-0.2,0-0.4-0.1-0.6-0.3c-0.2-0.2-0.2-0.4-0.2-0.6v-1.8c0-0.2,0.1-0.5,0.2-0.6 c0.2-0.2,0.4-0.3,0.6-0.3h2.7v-5.5h-2.7c-0.2,0-0.4-0.1-0.6-0.3C16.1,21,16,20.8,16,20.6v-1.8c0-0.2,0.1-0.5,0.2-0.6 c0.2-0.2,0.4-0.3,0.6-0.3h5.8c0.2,0,0.4,0.1,0.6,0.3s0.2,0.4,0.2,0.6V27h2.1c0.2,0,0.4,0.1,0.6,0.3C26.2,27.4,26.3,27.6,26.3,27.9z M23.4,12.3v1.9c0,0.2-0.1,0.5-0.2,0.6c-0.2,0.2-0.4,0.3-0.6,0.3h-2.2c-0.2,0-0.4-0.1-0.6-0.3c-0.2-0.2-0.2-0.4-0.2-0.6v-1.9 c0-0.2,0.1-0.5,0.2-0.6c0.2-0.2,0.4-0.3,0.6-0.3h2.2c0.2,0,0.4,0.1,0.6,0.3C23.3,11.9,23.4,12.1,23.4,12.3z'/%3E %3C/svg%3E\""

/***/ }),
/* 136 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M38.5,33.1H41v3.1c0,0.5-0.2,0.9-0.5,1.3S39.6,38,39.1,38H13.6c-0.5,0-0.9-0.2-1.3-0.5s-0.5-0.8-0.5-1.3v-3.1h2.4v2.5h24.3 V33.1z M41,14.3v18.8h-2.4v-17h-7.9c-0.5,0-0.9-0.2-1.3-0.5c-0.4-0.4-0.5-0.8-0.5-1.3V6.4H14.2v11.7h-2.4V5.8c0-0.5,0.2-0.9,0.5-1.3 C12.7,4.2,13.1,4,13.6,4h17c0.5,0,1.1,0.1,1.7,0.4c0.6,0.3,1.1,0.6,1.4,0.9l5.9,5.9c0.4,0.4,0.7,0.8,0.9,1.4 C40.8,13.3,41,13.8,41,14.3z M38.4,13.7c-0.1-0.4-0.3-0.6-0.4-0.8L32,7c-0.2-0.2-0.4-0.3-0.8-0.4v7.1H38.4z M23.3,25.3 c0,0.3-0.1,0.5-0.3,0.7l-5.2,5.2c-0.2,0.2-0.4,0.3-0.7,0.3c-0.3,0-0.5-0.1-0.7-0.3l-0.6-0.6c-0.2-0.2-0.3-0.4-0.3-0.7 s0.1-0.5,0.3-0.7l2.3-2.3H2.9c-0.3,0-0.5-0.1-0.7-0.3C2.1,26.3,2,26.1,2,25.8v-1c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.4-0.3,0.7-0.3 h15.2l-2.3-2.3c-0.2-0.2-0.3-0.4-0.3-0.7s0.1-0.5,0.3-0.7l0.6-0.6c0.2-0.2,0.4-0.3,0.7-0.3c0.3,0,0.5,0.1,0.7,0.3l5.2,5.2 C23.2,24.7,23.3,25,23.3,25.3z'/%3E %3C/svg%3E\""

/***/ }),
/* 137 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="

/***/ }),
/* 138 */,
/* 139 */,
/* 140 */,
/* 141 */,
/* 142 */,
/* 143 */,
/* 144 */,
/* 145 */,
/* 146 */,
/* 147 */,
/* 148 */,
/* 149 */,
/* 150 */,
/* 151 */,
/* 152 */,
/* 153 */,
/* 154 */,
/* 155 */,
/* 156 */,
/* 157 */,
/* 158 */,
/* 159 */,
/* 160 */,
/* 161 */,
/* 162 */,
/* 163 */,
/* 164 */,
/* 165 */,
/* 166 */,
/* 167 */,
/* 168 */,
/* 169 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(11);
var SHARED = '__core-js_shared__';
var store = global[SHARED] || (global[SHARED] = {});
module.exports = function (key) {
  return store[key] || (store[key] = {});
};


/***/ }),
/* 170 */
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (e) {
    return true;
  }
};


/***/ }),
/* 171 */
/***/ (function(module, exports) {

module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};


/***/ }),
/* 172 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var LIBRARY = __webpack_require__(173);
var $export = __webpack_require__(67);
var redefine = __webpack_require__(44);
var hide = __webpack_require__(32);
var has = __webpack_require__(47);
var Iterators = __webpack_require__(48);
var $iterCreate = __webpack_require__(896);
var setToStringTag = __webpack_require__(108);
var getPrototypeOf = __webpack_require__(903);
var ITERATOR = __webpack_require__(6)('iterator');
var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
var FF_ITERATOR = '@@iterator';
var KEYS = 'keys';
var VALUES = 'values';

var returnThis = function () { return this; };

module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
  $iterCreate(Constructor, NAME, next);
  var getMethod = function (kind) {
    if (!BUGGY && kind in proto) return proto[kind];
    switch (kind) {
      case KEYS: return function keys() { return new Constructor(this, kind); };
      case VALUES: return function values() { return new Constructor(this, kind); };
    } return function entries() { return new Constructor(this, kind); };
  };
  var TAG = NAME + ' Iterator';
  var DEF_VALUES = DEFAULT == VALUES;
  var VALUES_BUG = false;
  var proto = Base.prototype;
  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
  var $default = $native || getMethod(DEFAULT);
  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
  var methods, key, IteratorPrototype;
  // Fix native
  if ($anyNative) {
    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
      // Set @@toStringTag to native iterators
      setToStringTag(IteratorPrototype, TAG, true);
      // fix for some old engines
      if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);
    }
  }
  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEF_VALUES && $native && $native.name !== VALUES) {
    VALUES_BUG = true;
    $default = function values() { return $native.call(this); };
  }
  // Define iterator
  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
    hide(proto, ITERATOR, $default);
  }
  // Plug for library
  Iterators[NAME] = $default;
  Iterators[TAG] = returnThis;
  if (DEFAULT) {
    methods = {
      values: DEF_VALUES ? $default : getMethod(VALUES),
      keys: IS_SET ? $default : getMethod(KEYS),
      entries: $entries
    };
    if (FORCED) for (key in methods) {
      if (!(key in proto)) redefine(proto, key, methods[key]);
    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
  }
  return methods;
};


/***/ }),
/* 173 */
/***/ (function(module, exports) {

module.exports = false;


/***/ }),
/* 174 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.14 / 15.2.3.14 Object.keys(O)
var $keys = __webpack_require__(899);
var enumBugKeys = __webpack_require__(176);

module.exports = Object.keys || function keys(O) {
  return $keys(O, enumBugKeys);
};


/***/ }),
/* 175 */
/***/ (function(module, exports, __webpack_require__) {

// 7.1.15 ToLength
var toInteger = __webpack_require__(104);
var min = Math.min;
module.exports = function (it) {
  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};


/***/ }),
/* 176 */
/***/ (function(module, exports) {

// IE 8- don't enum bug keys
module.exports = (
  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');


/***/ }),
/* 177 */
/***/ (function(module, exports, __webpack_require__) {

var document = __webpack_require__(11).document;
module.exports = document && document.documentElement;


/***/ }),
/* 178 */
/***/ (function(module, exports, __webpack_require__) {

// 7.3.20 SpeciesConstructor(O, defaultConstructor)
var anObject = __webpack_require__(24);
var aFunction = __webpack_require__(69);
var SPECIES = __webpack_require__(6)('species');
module.exports = function (O, D) {
  var C = anObject(O).constructor;
  var S;
  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
};


/***/ }),
/* 179 */
/***/ (function(module, exports, __webpack_require__) {

var ctx = __webpack_require__(68);
var invoke = __webpack_require__(915);
var html = __webpack_require__(177);
var cel = __webpack_require__(103);
var global = __webpack_require__(11);
var process = global.process;
var setTask = global.setImmediate;
var clearTask = global.clearImmediate;
var MessageChannel = global.MessageChannel;
var Dispatch = global.Dispatch;
var counter = 0;
var queue = {};
var ONREADYSTATECHANGE = 'onreadystatechange';
var defer, channel, port;
var run = function () {
  var id = +this;
  // eslint-disable-next-line no-prototype-builtins
  if (queue.hasOwnProperty(id)) {
    var fn = queue[id];
    delete queue[id];
    fn();
  }
};
var listener = function (event) {
  run.call(event.data);
};
// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
if (!setTask || !clearTask) {
  setTask = function setImmediate(fn) {
    var args = [];
    var i = 1;
    while (arguments.length > i) args.push(arguments[i++]);
    queue[++counter] = function () {
      // eslint-disable-next-line no-new-func
      invoke(typeof fn == 'function' ? fn : Function(fn), args);
    };
    defer(counter);
    return counter;
  };
  clearTask = function clearImmediate(id) {
    delete queue[id];
  };
  // Node.js 0.8-
  if (__webpack_require__(65)(process) == 'process') {
    defer = function (id) {
      process.nextTick(ctx(run, id, 1));
    };
  // Sphere (JS game engine) Dispatch API
  } else if (Dispatch && Dispatch.now) {
    defer = function (id) {
      Dispatch.now(ctx(run, id, 1));
    };
  // Browsers with MessageChannel, includes WebWorkers
  } else if (MessageChannel) {
    channel = new MessageChannel();
    port = channel.port2;
    channel.port1.onmessage = listener;
    defer = ctx(port.postMessage, port, 1);
  // Browsers with postMessage, skip WebWorkers
  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
    defer = function (id) {
      global.postMessage(id + '', '*');
    };
    global.addEventListener('message', listener, false);
  // IE8-
  } else if (ONREADYSTATECHANGE in cel('script')) {
    defer = function (id) {
      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
        html.removeChild(this);
        run.call(id);
      };
    };
  // Rest old browsers
  } else {
    defer = function (id) {
      setTimeout(ctx(run, id, 1), 0);
    };
  }
}
module.exports = {
  set: setTask,
  clear: clearTask
};


/***/ }),
/* 180 */
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return { e: false, v: exec() };
  } catch (e) {
    return { e: true, v: e };
  }
};


/***/ }),
/* 181 */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(24);
var isObject = __webpack_require__(45);
var newPromiseCapability = __webpack_require__(109);

module.exports = function (C, x) {
  anObject(C);
  if (isObject(x) && x.constructor === C) return x;
  var promiseCapability = newPromiseCapability.f(C);
  var resolve = promiseCapability.resolve;
  resolve(x);
  return promiseCapability.promise;
};


/***/ }),
/* 182 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

/**
 * Tine 2.0 main application manager
 * 
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.AppManager
 * @extends     Ext.util.Observable
 * @consturctor
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.Tinebase.AppManager = function() {
    /**
     * @property apps
     * @type Ext.util.MixedCollection
     * 
     * enabled apps
     */
    this.apps = new Ext.util.MixedCollection({});

    // fill this.apps with registry data 
    // do it the other way round because add() always adds records at the beginning of the MixedCollection
    var enabledApps = Tine.Tinebase.registry.get('userApplications'),
        app;
        
    Tine.log.debug('Tine.Tinebase.AppManager - enabled Apps: ');
    Tine.log.debug(enabledApps);
    
    for (var i = (enabledApps.length - 1); i >= 0; i--) {
        app = enabledApps[i];
        
        // if the app is not in the namespace, we don't initialise it
        // we don't have a Tinebase 'Application'
        if (Tine[app.name]) {
            app.appName = app.name;
            app.isInitialised = false;
            this.apps.add(app.appName, app);
        }
    }
};

Ext.apply(Tine.Tinebase.AppManager.prototype, {
    /**
     * @cfg {Tine.Application}
     */
    defaultApp: null,

    /**
     * returns an appObject
     * 
     * @param {String} appName
     * @return {Tine.Application}
     */
    get: function(appName) {
        if (Ext.isObject(appName) && appName.hasOwnProperty('appName')) {
            appName = appName.appName;
        }
        if (Ext.isObject(appName) && appName.hasOwnProperty('name')) {
            appName = appName.name;
        }
        if (! this.isEnabled(appName)) {
            return false;
        }
        
        var app = this.apps.get(appName);
        if (! app.isInitialised) {
            var appObj = this.getAppObj(app);
            appObj.isInitialised = true;
            Ext.applyIf(appObj, app);
            this.apps.replace(appName, appObj);
        }
        
        return this.apps.get(appName);
    },


    /**
     * helper as consumer might not know if we are in maincreen or dialog
     * @depricated
     */
    getActive: function() {
        if (Tine.Tinebase.MainScreen) {
            return Tine.Tinebase.MainScreen.getActiveApp();
        }
    },

    /**
     * returns appObject
     * 
     * @param {String} applicationId
     * @return {Tine.Application}
     */
    getById: function(applicationId) {
        return this.apps.find(function(app) {
            return app.id == applicationId;
        }, this);
    },
    
    /**
     * returns appObject of default app
     * 
     * @return {Tine.Application}
     */
    getDefault: function() {
        if (! this.defaultApp) {
            var defaultAppName = (Tine.Tinebase.registry.get('preferences') && Tine.Tinebase.registry.get('preferences').get('defaultapp')) 
                ? Tine.Tinebase.registry.get('preferences').get('defaultapp') 
                : this.defaultAppName;
                
            this.defaultApp = this.get(defaultAppName) || this.apps.find(function(app) {return app.hasMainScreen});
            
            if (! this.defaultApp) {
                // no global exception concept yet...
                //throw Ext.Error('no apps enabled', 620);
                Ext.MessageBox.show({
                    title: i18n._('Missing Applications'),
                    msg: i18n._('There are no applications enabled for you. Please contact your administrator.'),
                    buttons: Ext.Msg.OK,
                    icon: Ext.MessageBox.WARNING
                });
            }
        }
        
        return this.defaultApp;
    },
    
    /**
     * set default app for this session
     * 
     * @param {Tine.Application/String} app
     */
    setDefault: function(app) {
        if (Ext.isString(app)) {
            app = this.get(app);
        }
        
        if (app) {
            this.defaultApp = app;
        }
    },
    
    /**
     * returns a list of all apps for current user
     */
    getAll: function() {
        this.initAll();
        return this.apps;
    },
    
    /**
     * checks whether a given app is enabled for current user or not
     */
    isEnabled: function(appName) {
        var app = this.apps.get(appName);
        return app ? app.status == 'enabled' : false;
    },
    
    /**
     * initialises all enabled apps
     * @private
     */
    initAll: function() {
        this.apps.each(function(app) {
            this.get(app.appName);
        }, this);
    },
    
    /**
     * @private
     */
    getAppObj: function(app) {
       try{
            // legacy
            if (typeof(Tine[app.appName].getPanel) == 'function') {
                // make a legacy Tine.Application
                return this.getLegacyApp(app);
            }

            return typeof(Tine[app.appName].Application) == 'function' ? new Tine[app.appName].Application(app) : new Tine.Tinebase.Application(app);
            
        } catch(e) {
            console.error('Initialising of Application "' + app.appName + '" failed with the following message:' + e);
            console.error(e.stack);
            if (! Tine[app.appName].registry) {
                // registry load problem: reload
                Tine.Tinebase.common.reload({});
            }

            return false;
        }
    },
    
    /**
     * @private
     */
    getLegacyApp: function(app) {
        app.hasMainScreen = true;
        var appPanel = Tine[app.appName].getPanel();
        var appObj =  new Tine.Tinebase.Application(app);
        var mainScreen = new Tine.widgets.MainScreen({app: appObj});

        Ext.apply(appObj, {
            mainScreen: mainScreen
        });

        Ext.apply(mainScreen, {
            appPanel: appPanel,
            getContainerTreePanel: function() {
                return this.appPanel;
            },
            getWestPanel: function() {
                return this.appPanel;
            },
            afterRender: function() {
                Tine.widgets.MainScreen.superclass.afterRender.call(this);

                Tine.Tinebase.MainScreen.setActiveCenterPanel(mainScreen, true);
                Tine.Tinebase.MainScreen.setActiveTreePanel(appPanel, true);


                // remove favorite toolbar for legacy modules
                var westRegionPanel = mainScreen.westRegionPanel,
                    westPanelToolbar = westRegionPanel.getTopToolbar();

                westPanelToolbar.removeAll();
                westPanelToolbar.hide();
                westPanelToolbar.doLayout();

                appPanel.fireEvent('beforeexpand', appPanel);
            }
        });

        appPanel.on('render', function(p) {
            p.header.remove();
            // additionally to removing the DOM node, we also need to reset the 
            // header class variable, as IE evals "if (this.header)" to true otherwise 
            p.header = false;
            p.doLayout();
        });
        
        return appObj;
    }
});


/***/ }),
/* 183 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets');

/**
 * @namespace   Tine.widgets
 * @class       Tine.widgets.MainScreen
 * @extends     Ext.Panel
 *
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.widgets.MainScreen = Ext.extend(Ext.Panel, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     * instance of the app object (required)
     */
    app: null,
    /**
     * @cfg {String} activeContentType
     */
    activeContentType: null,
    /**
     * @cfg {Array} contentTypes
     */
    contentTypes: null,
    /**
     * @cfg {String} centerPanelClassName
     * name of centerpanel class name suffix in namespace of this app (defaults to GridPanel)
     * the class name will be expanded to Tine[this.appName][contentType + this.centerPanelClassNameSuffix]
     */
    centerPanelClassNameSuffix: 'GridPanel',
    /**
     * @cfg {Bool} useModuleTreePanel
     * use modulePanel (defaults to null -> autodetection)
     */
    useModuleTreePanel: null,

    layout: 'border',

    initComponent: function() {
        this.useModuleTreePanel = Ext.isArray(this.contentTypes) && this.contentTypes.length > 1;
        this.initLayout();
        this.initMessageBus();
        
        if (this.cls) {
            this.cls = this.cls + ' ' + 't-app-' + this.app.appName.toLowerCase();
        } else {
            this.cls = 't-app-' + this.app.appName.toLowerCase();
        }
        

        Tine.widgets.MainScreen.superclass.initComponent.apply(this, arguments);
    },

    initMessageBus: function() {
        if (Tine.Tinebase.areaLocks.hasLock(this.app.appName)) {
            postal.subscribe({
                channel: "areaLocks",
                topic: this.app.appName + '.*',
                callback: this.onAreaLockChange.createDelegate(this)
            });
        }
    },

    onAreaLockChange: function(data, e) {
        var topic = e.topic,
            locked = !topic.match(/unlocked$/),
            cp = this.getCenterPanel(),
            grid = cp ? cp.getGrid() : null,
            store = grid.getStore();

        // shouldn't this be done by the gird itself?
        if (locked) {
            store.removeAll();
            // @TODO: quit bg refresh task?
        } else {
            store.reload();
        }
    },

    /**
     * returns canonical path part
     * @returns {string}
     */
    getCanonicalPathSegment: function () {
        if (this.app) {
            return ['',
                this.app.name,
                'MainScreen'
            ].join(Tine.Tinebase.CanonicalPath.separator);
        }
    },

    /**
     * @private
     */
    initLayout: function() {
        this.items = [{
            ref: 'northCardPanel',
            cls: 'tine-mainscreen-centerpanel-north',
            region: 'north',
            layout: 'card',
            activeItem: 0,
            height: 59,
            border: false,
            items: []
        }, {
            ref: 'centerCardPanel',
            cls: 'tine-mainscreen-centerpanel-center',
            region: 'center',
            animate: true,
            border: false,
            layout: 'card',
            activeItem: 0,
            defaults: {
                hideMode: 'offsets'
            },
            items: []
        }, {
            ref: 'westRegionPanel',
            cls: 'tine-mainscreen-centerpanel-west',
            region: 'west',
            //id: 'west',
            stateful: false,
            split: true,
            width: 200,
            minSize: 100,
            border: false,
            collapsible:true,
            collapseMode: 'mini',
            header: false,
            layout: 'fit',
            listeners: {
                afterrender: function() {
                    // add to scrollmanager
                    if (arguments[0] && arguments[0].hasOwnProperty('body')) {
                        Ext.dd.ScrollManager.register(arguments[0].body);
                    }
                }
            },
            autoScroll: true,
            tbar: [{
                buttonAlign : 'center'
            }],
            items: [{
                ref: '../moduleCardPanel',
                cls: 'tine-mainscreen-centerpanel-west-modules',
                border: false,
                autoScroll: false,
                autoHeight: true,
                style: {
                    width: '100%'
                },
                layout: 'card',
                activeItem: 0,
                items: []
            }, {
                ref: '../westCardPanel',
                cls: 'tine-mainscreen-centerpanel-west-treecards',
                border: false,
                style: {
                    width: '100%'
                },
                autoScroll: false,
                layout: 'card',
                activeItem: 0,
                items: []
            }]
         }];
    },

    afterRender: function() {
        Tine.widgets.MainScreen.superclass.afterRender.call(this);

        if (Tine.Tinebase.areaLocks.hasLock(this.app.appName)) {
            Tine.Tinebase.areaLocks.setOptions(this.app.appName, {
                maskEl: this.getEl()
            });
            Tine.Tinebase.areaLocks.unlock(this.app.appName)
        }
        this.setActiveContentType(this.activeContentType);
    },

    /**
     * returns active content type
     * 
     * @return {String}
     */
    getActiveContentType: function() {
        return (this.activeContentType) ? this.activeContentType : '';
    },

    getContentTypeDefinition: function(contentType) {
        var _ = window.lodash;

        return _.find(this.contentTypes, {contentType: contentType}) ||
            _.find(this.contentTypes, {model: contentType}) ||
            _.find(this.contentTypes, {modelName: contentType});
    },

    /**
     * get center panel for given contentType
     * 
     * @param {String} contentType
     * @return {Ext.Panel}
     */
    getCenterPanel: function(contentType) {
        contentType = contentType || this.getActiveContentType();

        var def = this.getContentTypeDefinition(contentType),
            suffix = def && def.xtype ? '' : this.centerPanelClassNameSuffix;

        if (! this[contentType + suffix]) {
            try {
                this[contentType + suffix] = def && def.xtype ? Ext.create(def) :
                    new Tine[this.app.appName][contentType + suffix]({
                        app: this.app,
                        plugins: [this.getWestPanel().getFilterPlugin(contentType)]
                    });

                if (this[contentType + suffix].cls) {
                    this[contentType + suffix].cls = this[contentType + suffix].cls + ' t-contenttype-' + contentType.toLowerCase();
                } else {
                    this[contentType + suffix].cls = 't-contenttype-' + contentType.toLowerCase();
                }
            } catch (e) {
                Tine.log.error('Could not create centerPanel "Tine.' + this.app.appName + '.' + contentType + suffix + '"');
                Tine.log.error(e.stack ? e.stack : e);
                this[contentType + suffix] = new Ext.Panel({html: 'ERROR'});
            }
        }
        
        return this[contentType + suffix];
    },

    /**
     * get north panel for given contentType
     * 
     * @param {String} contentType
     * @return {Ext.Panel}
     */
    getNorthPanel: function(contentType) {
        contentType = contentType || this.getActiveContentType();
        
        if (! this[contentType + 'ActionToolbar']) {
            try {
                var cp = this.getCenterPanel(contentType);
                if (Ext.isFunction(cp.getActionToolbar)) {
                    this[contentType + 'ActionToolbar'] = cp.getActionToolbar();
                    
                    if (this[contentType + 'ActionToolbar'].cls) {
                        this[contentType + 'ActionToolbar'].cls = this[contentType + 'ActionToolbar'].cls + ' t-contenttype-' + contentType.toLowerCase();
                    } else {
                        this[contentType + 'ActionToolbar'].cls = 't-contenttype-' + contentType.toLowerCase();
                    }
                }
            } catch (e) {
                Tine.log.error('Could not create northPanel');
                Tine.log.error(e.stack ? e.stack : e);
                this[contentType + 'ActionToolbar'] = new Ext.Panel({html: 'ERROR'});
            }
        }

        return this[contentType + 'ActionToolbar'];
    },
    
    /**
     * get module tree panel
     * 
     * @return {Ext.Panel}
     */
    getModuleTreePanel: function() {
        if (! this.moduleTreePanel) {
            if (this.useModuleTreePanel) {
                this.moduleTreePanel = new Tine.widgets.ContentTypeTreePanel({
                    app: this.app, 
                    contentTypes: this.contentTypes,
                    contentType: this.getActiveContentType()
                });
                var me = this;
                this.moduleTreePanel.on('click', function (node, event) {
                    // NOTE: 'this' is moduleTreePanel here (no scope provided)
                    if(node != this.lastClickedNode) {
                        this.lastClickedNode = node;
                        this.fireEvent('selectionchange');
                    } else if (me.getWestPanel().hasFavoritesPanel) {
                        // select default favorite
                        // NOTE: a lot of models don't have a default favorite defined...
                        me.getWestPanel().getFavoritesPanel().selectDefault();
                    }
                });
            } else {
                this.moduleTreePanel = new Ext.Panel({html:'', border: false, frame: false});
            } 
        }
        return this.moduleTreePanel;
    },
    
    /**
     * get panel for westCardPanel region of given contentType
     *
     * NOTE: do not confuse this with westRegionPanel!
     * 
     * @return {Ext.Panel}
     */
    getWestPanel: function(contentType) {
        contentType = contentType || this.getActiveContentType();

        var _ = window.lodash,
            def = this.getContentTypeDefinition(contentType),
            app = _.get(def, 'app', this.app),
            wpName = _.upperFirst(contentType + 'WestPanel');
            
        if (! this[wpName]) {
            var wpconfig = {
                    app: app,
                    contentTypes: this.contentTypes,
                    contentType: contentType,
                    listeners: {
                        scope: this,
                        // clear gird selection on favorite change, module change, container change?
                        selectionchange: function() {
                            var cp = this.getCenterPanel();
                            if(cp) {
                                try {
                                    var grid = cp.getGrid();
                                    if(grid) {
                                        var sm = grid.getSelectionModel();
                                        if(sm) {
                                            sm.clearSelections();
                                            cp.actionUpdater.updateActions(sm);
                                        }
                                    }
                                } catch (e) {
                                    // do nothing - no grid
                                }
                            }
                        }
                    }
                };
            try {
                if (Tine[app.name].hasOwnProperty(wpName)) {
                    this[wpName] = new Tine[app.appName][wpName](wpconfig);
                } else {
                    this[wpName] = new Tine.widgets.mainscreen.WestPanel(wpconfig);
                }
            } catch (e) {
                Tine.log.error('Could not create westPanel');
                Tine.log.error(e.stack ? e.stack : e);
                this[wpName] = new Ext.Panel({html: 'ERROR'});
            }
        }

        return this[wpName];
    },

    /**
     * shows center panel in mainscreen
     */
    showCenterPanel: function() {
        this.setActiveContentPanel(this.getCenterPanel(this.getActiveContentType()), true);
    },
    
    /**
     * shows module tree panel in mainscreen
     */
    showModuleTreePanel: function() {
        this.setActiveModulePanel(this.getModuleTreePanel(), true);
    },
    
    /**
     * shows west panel in mainscreen
     */
    showWestCardPanel: function() {
        // add save favorites button to toolbar if favoritesPanel exists
        var westPanel = this.getWestPanel(),
            favoritesPanel = Ext.isFunction(westPanel.getFavoritesPanel) ? westPanel.getFavoritesPanel() : false,
            westPanelToolbar = this.westRegionPanel.getTopToolbar();

        westPanelToolbar.removeAll();

        if (favoritesPanel) {
            westPanelToolbar.addButton({
                xtype: 'button',
                text: i18n._('Save current view as favorite'),
                iconCls: 'action_saveFilter',
                scope: this,
                handler: function() {
                    favoritesPanel.saveFilter.call(favoritesPanel);
                }
            });

            westPanelToolbar.show();
        } else {
            westPanelToolbar.hide();
        }
        
        westPanelToolbar.doLayout();

        this.setActiveTreePanel(westPanel, true);
    },
    
    /**
     * shows north panel in mainscreen
     */
    showNorthPanel: function() {
        this.setActiveToolbar(this.getNorthPanel(this.getActiveContentType()), true);
    },

    /**
     * sets the active content type
     *
     * @param {String} contentType to activate
     */
    setActiveContentType: function(contentType) {
        if (contentType === null) {
            // use first valid content type
            if (this.contentTypes && this.contentTypes.length > 0) {
                contentType = this.contentTypes[0].modelName;
            }
        }
        this.activeContentType = contentType;

        this.showWestCardPanel();
        this.showCenterPanel();
        this.showNorthPanel();
        this.showModuleTreePanel();
    },

    /**
     * sets the active content panel
     *
     * @param {Ext.Panel} item Panel to activate
     * @param {Bool} keep keep panel
     */
    setActiveContentPanel: function(panel, keep) {
        Ext.ux.layout.CardLayout.helper.setActiveCardPanelItem(this.centerCardPanel, panel, keep);
    },

    /**
     * sets the active tree panel
     *
     * @param {Ext.Panel} panel Panel to activate
     * @param {Bool} keep keep panel
     */
    setActiveTreePanel: function(panel, keep) {
        Ext.ux.layout.CardLayout.helper.setActiveCardPanelItem(this.westCardPanel, panel, keep);
    },

    /**
     * sets the active module tree panel
     *
     * @param {Ext.Panel} panel Panel to activate
     * @param {Bool} keep keep panel
     */
    setActiveModulePanel: function(panel, keep) {
        Ext.ux.layout.CardLayout.helper.setActiveCardPanelItem(this.moduleCardPanel, panel, keep);
    },

    /**
     * sets item
     *
     * @param {Ext.Toolbar} panel toolbar to activate
     * @param {Bool} keep keep panel
     */
    setActiveToolbar: function(panel, keep) {
        if (panel) {
            if (! this.northCardPanel.isVisible()) {
                this.northCardPanel.show();
                this.northCardPanel.ownerCt.doLayout();
                panel.show(); // Nasty resize prob!
            }

            Ext.ux.layout.CardLayout.helper.setActiveCardPanelItem(this.northCardPanel, panel, keep);
        } else {
            this.northCardPanel.hide();
            this.northCardPanel.ownerCt.doLayout();
        }
    },

    /**
     * gets the currently displayed toolbar
     *
     * @return {Ext.Toolbar}
     */
    getActiveToolbar: function() {
        var northPanel = this.northCardPanel;

        if (northPanel.layout.activeItem && northPanel.layout.activeItem.el) {
            return northPanel.layout.activeItem.el;
        } else {
            return false;
        }
    }
});


/***/ }),
/* 184 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.widgets', 'Tine.widgets.tree');

/**
 * generic tree loader for tine trees
 * - calls json method with a filter to return children of a node
 * 
 * @namespace   Tine.widgets.tree
 * @class       Tine.widgets.tree.Loader
 * @extends     Ext.tree.TreeLoader
 */
Tine.widgets.tree.Loader = Ext.extend(Ext.tree.TreeLoader, {
    /**
     * @cfg {Number} how many chars of the containername to display
     */
    displayLength: 25,
    
    /**
     * @cfg {application}
     */
    app: null,
    
    /**
     * 
     * @cfg {String} method
     */
    method: null,
    
    /**
     * 
     * @cfg {Array} of filter objects for search method 
     */
    filter: null,
    
    url: 'index.php',

    initComponent: function () {
        this.addEvents(
            /**
             * Fires when virtual nodes are selected
             *
             * @param selected nodes
             */
            'virtualNodesSelected'
        );

        this.supr().initComponent.apply(this, arguments);
    },

    /**
     * @private
     */
    createNode: function() {
        this.inspectCreateNode.apply(this, arguments);
        return Tine.widgets.tree.Loader.superclass.createNode.apply(this, arguments);
    },

    /**
     * returns params for async request
     * 
     * @param {Ext.tree.TreeNode} node
     * @return {Object}
     */
    getParams: function(node) {
        return {
            method: this.method,
            filter: this.filter
        };
    },
    
    /**
     * template fn for subclasses to inspect createNode
     * 
     * @param {Object} attr
     */
    inspectCreateNode: Ext.EmptyFn,

    processResponse: function(response, node, callback, scope) {
        // convert tine search response into usual treeLoader structure
        var o = response.responseData || Ext.decode(response.responseText);
        response.responseData = o.hasOwnProperty('totalcount') ? o.results : o;
        
        // processed nodes / structures
        var newResponse = [];

        // read every node
        Ext.each(response.responseData, function (node) {
            var containerName,
                parentNode = newResponse;

            if (!Ext.isString(node.name)) {
                parentNode.push(node);
                return;
            }

            // Get folder name to final container
            var parts = Ext.isString(node.name) ? node.name.split("/") : [''];
            containerName = parts[parts.length - 1];

            // Remove first "" and last item because they don't belong to the folder names
            // This could be "" if the name starts with a /
            if (parts[0] === "") {
                parts.shift();
            }
            
            parts.pop();

            Ext.each(parts, function (part, idx, parts, node) {
                var child = this.findNodeByName(part, parentNode);

                this.preloadChildren = true;
                
                if (! child) {
                    var reducedParts = [];
                    
                    // add shared or personal
                    reducedParts.push(node.path.split('/')[1]);
                    if(node.path.match(/^\/personal/)) {
                        // add accountId
                        reducedParts.push(node.path.split('/')[2]);
                    }
                    
                    // create a path for each virtual node, this path is actually invalid and won't be send to server!
                    for(var i = 0; i <= parts.indexOf(part); ++i) {
                        reducedParts.push(parts[i]);    
                    }
                    
                    child = {
                        'name': part,
                        'path': '/' + reducedParts.join('/'),
                        'id': Ext.id(),
                        'children': [],
                        'leaf': false,
                        'editable': false,
                        'draggable': false,
                        'allowDrag': false,
                        'allowDrop': false,
                        'singleClickExpand': true,
                        'listeners': {
                            'click': function (node) {
                                node.expand(true, true, function (node) {
                                    var nodes = [];
                                    this.findAllNodes(node, nodes);
                                    this.fireEvent('virtualNodesSelected', nodes);
                                }.createDelegate(this, [node], false));

                                return false;
                            }.createDelegate(this)
                        }
                    };
                    parentNode.push(child);
                }

                parentNode = child.children;
            }.createDelegate(this, [node], true), this);

            var nodePathSegments = node.path.split('/');
            var containerId = nodePathSegments.pop();
            nodePathSegments = nodePathSegments.concat(parts);
            nodePathSegments.push(containerId);
            
            node.longName = node.name;
            node.text = node.name = containerName;
            
            node.originalPath = node.path;
            node.path = nodePathSegments.join('/');
            
            
            parentNode.leaf = true;
            parentNode.push(node);
        }, this);

        response.responseData = newResponse;

        return Tine.widgets.tree.Loader.superclass.processResponse.apply(this, arguments);
    },

    /**
     * Finds children of a node
     *
     * @param node
     * @param nodes
     */
    findAllNodes: function (node, nodes) {
        if (node.leaf && !node.hasChildNodes()) {
            nodes.push(node);
        }

        for (var i = 0; i < node.childNodes.length; i++) {
            this.findAllNodes(node.childNodes[i], nodes);
        }
    },

    /**
     * Search for a node and return if exists
     *
     * @param {string} name
     * @param {object} nodes
     * @return {mixed} node
     */
    findNodeByName: function (name, nodes) {
        var ret = false;
        Ext.each(nodes, function (node) {
            if (node && node.name && node.name == name && Ext.isArray(node.children)) {
                ret = node;
            }
        }, this);
        return ret;
    }
 });


/***/ }),
/* 185 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license http://www.gnu.org/licenses/agpl.html AGPL Version 3 @author
 * Cornelius Weiss <c.weiss@metaways.de> @copyright Copyright (c) 2009-2011
 * Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.persistentfilter');

/**
 * @namespace Tine.widgets.persistentfilter
 * @class Tine.widgets.persistentfilter.PickerPanel
 * @extends Ext.tree.TreePanel
 * 
 * <p>
 * PersistentFilter Picker Panel
 * </p>
 * 
 * @author Cornelius Weiss <c.weiss@metaways.de>
 * @license http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * 
 * @param {Object}
 *            config
 * @constructor Create a new Tine.widgets.persistentfilter.PickerPanel
 */
Tine.widgets.persistentfilter.PickerPanel = Ext.extend(Ext.tree.TreePanel, {

    /**
     * @cfg {application}
     */
    app : null,

    /**
     * @cfg {String} filterMountId mount point of persistent filter folder
     *      (defaults to null -> root node)
     */
    filterMountId : null,
    /**
     * @cfg {String} contentType mainscreen.activeContentType  
     */
    contentType: null,
    /**
     * @private
     */
    autoScroll : false,
    autoHeight: true,
    border : false,
    rootVisible : false,

    enableDD : true,
    stateId : null,

    /**
     * grid favorites panel belongs to
     * 
     * @type Tine.widgets.grid.GridPanel
     */
    grid : null,

    /**
     * @private
     */
    initComponent : function() {
        this.stateId = 'widgets-persistentfilter-pickerpanel_' + this.app.name + '_' + this.contentType;

        this.store = this.store || Tine.widgets.persistentfilter.store.getPersistentFilterStore();

        var appName = this.recordClass ? this.recordClass.getMeta('appName') : this.app.appName,
            modelName = this.recordClass ? this.recordClass.getMeta('modelName') : window.lodash.upperFirst(this.contentType),
            filterModelName = this.filterModel || (appName + '_Model_' + modelName + 'Filter'),
            state = Ext.state.Manager.get(this.stateId, {});

        if (! this.recordClass) {
            this.recordClass = Tine.Tinebase.data.RecordMgr.get(appName, modelName);
        }

        this.recordCollection = this.store.queryBy(function(record, id) {
            if (record.get('application_id') == this.app.id) {
                if(this.contentType || this.filterModel) {
                    if (record.get('model') == filterModelName) {
                        return true;
                    } else {
                        return false;
                    }
                } else {
                    return true;
                }
            }
            return false;
        }, this);
        // sort filters by translated name
        var self = this;
        this.recordCollection.sort('ASC', function (obj1, obj2) {
            var name1 = Ext.util.Format.htmlEncode(self.app.i18n._hidden(obj1.get('name'))),
                name2 = Ext.util.Format.htmlEncode(self.app.i18n._hidden(obj2.get('name')));
            
            return name1 > name2 ? 1: -1;
        });
        
        var sorting = 10000;
        
        this.recordCollection.each(function(record) {
            if(state[record.get('id')]) record.set('sorting', state[record.get('id')]);
            else {
                sorting++;
                record.set('sorting',sorting);
            }
        }, this);
                
        this.loader = new Tine.widgets.persistentfilter.PickerTreePanelLoader({
            app : this.app,
            recordCollection : this.recordCollection,
            contentType: this.contentType
        });

        new Ext.tree.TreeSorter(this, {
            property: 'sorting',
            sortType : function(node) {
                return node.attributes.sorting;
            }
        });

        this.on('nodedrop', function() {
            this.saveState();
        }, this);

        this.filterNode = this.filterNode || new Ext.tree.AsyncTreeNode({
            text : i18n._('My favorites'),
            id : '_persistentFilters',
            leaf : false,
            expanded : true
        });

        if (this.filterMountId === null) {
            this.root = this.filterNode;
        }

        Tine.widgets.persistentfilter.PickerPanel.superclass.initComponent.call(this);

        this.on('click', function(node) {
            if (node.attributes.isPersistentFilter) {
                this.getFilterToolbar().fireEvent('change', this.getFilterToolbar());
                node.select();
                this.onFilterSelect(this.recordCollection.get(node.id));
            } else if (node.id == '_persistentFilters') {
                node.expand();
                return false;
            }
        }, this);

        this.on('contextmenu', this.onContextMenu, this);
        
        this.currentUser = Tine.Tinebase.registry.get('currentAccount');
    },

    /**
     * returns canonical path part
     * @returns {string}
     */
    getCanonicalPathSegment: function () {
        if (this.recordClass) {
            return [
                this.recordClass.getMeta('modelName'),
                'FavoritesPicker',
            ].join(Tine.Tinebase.CanonicalPath.separator);
        }
    },
    /**
     * @private
     */
    afterRender : function() {
        Tine.widgets.persistentfilter.PickerPanel.superclass.afterRender.call(this);

        if (this.filterMountId !== null) {
            this.getNodeById(this.filterMountId).appendChild(this.filterNode);
        }
        // due to dependencies isues we need to wait after render
        var ft = this.getFilterToolbar();
        if (ft) {
            ft.on('change', this.onFilterChange, this);
        }
    },

    /**
     * saves the sort state of the tree
     */
    saveState: function() {
        var state = {};
        var i = 0;

        this.getRootNode().eachChild(function(node) {
            i++;
            node.attributes.sorting = i;
            var rec = this.recordCollection.get(node.attributes.id);
            var oldSort = rec.get('sorting');
            if(oldSort != i) {
                rec.set('sorting', i);
                rec.commit();
            }
            state[node.id] = i;
        }, this);

        Ext.state.Manager.set(this.stateId, state);
    },
    
    /**
     * load grid from saved filter
     * 
     * NOTE: As all filter plugins add their data on the stores beforeload event
     * we need a litte hack to only present a filterid.
     * 
     * When a filter is selected, we register ourselve as latest beforeload,
     * remove all filter data and paste our filter data. To ensure we are always
     * the last listener, we directly remove the listener afterwards
     */
    onFilterSelect : function(persistentFilter) {
        var store = this.getGrid().getStore();

        // NOTE: this can be removed when all instances of filterplugins are
        // removed
        store.on('beforeload', this.storeOnBeforeload, this);
        store.load({persistentFilter : persistentFilter});
    },

    /**
     * storeOnBeforeload
     * 
     * @param {}
     *            store
     * @param {}
     *            options
     */
    storeOnBeforeload : function(store, options) {
        options.params.filter = options.persistentFilter.get('filters');
        store.un('beforeload', this.storeOnBeforeload, this);
    },

    /**
     * called on filtertrigger of filter toolbar
     */
    onFilterChange : function() {
        this.getSelectionModel().clearSelections();
    },

    /**
     * returns additional ctx items
     * 
     * @TODO: make this a hooking approach!
     * 
     * @param {model.PersistentFilter}
     * @return {Array}
     */
    getAdditionalCtxItems : function(filter) {
        var items = [];

        var as = Tine.Tinebase.appMgr.get('ActiveSync');
        if (as) {
            items = items.concat(as.getPersistentFilterPickerCtxItems(this,    filter));
        }

        return items;
    },

    /**
     * returns filter toolbar of mainscreen center panel of app this picker
     * panel belongs to
     */
    getFilterToolbar : function() {
        if (!this.filterToolbar) {
            this.filterToolbar = this.getGrid().filterToolbar;
        }

        return this.filterToolbar;
    },

    /**
     * get grid
     * 
     * @return {Tine.widgets.grid.GridPanel}
     */
    getGrid : function() {
        if (!this.grid) {
            this.grid = this.app.getMainScreen().getCenterPanel();
        }

        return this.grid;
    },

    /**
     * returns persistent filter tree node
     * 
     * @return {Ext.tree.AsyncTreeNode}
     */
    getPersistentFilterNode : function() {
        return this.filterNode;
    },

    /**
     * handler for ctxmenu clicks on tree nodes
     * 
     * @param {Ext.tree.TreeNode}
     *            node
     * @param {Ext.EventObject}
     *            e
     */
    onContextMenu : function(node, e) {
        if (! node.attributes.isPersistentFilter) {
            return;
        }

        e.stopEvent();
        Tine.log.debug(node);
        
        var record = this.store.getById(node.id);
        var hasManageRight = this.hasRight(node.attributes);
        
        var menu = new Ext.menu.Menu({
            plugins: [{
                ptype: 'ux.itemregistry',
                key:   'Tinebase-MainContextMenu'
            }],
            items : [{
                text : i18n._('Delete Favorite'),
                iconCls : 'action_delete',
                hidden : ! (hasManageRight || this.hasGrant(node.attributes, 'deleteGrant')),
                handler : this.onDeletePersistentFilter.createDelegate(this, [node, e])
            }, {
                text : i18n._('Edit Favorite'),
                iconCls : 'action_edit',
                hidden : ! (hasManageRight || this.hasGrant(node.attributes, 'editGrant')),
                handler : this.onEditPersistentFilter.createDelegate(this, [node, e])
            }, {
                text : i18n._('Overwrite Favorite'),
                iconCls : 'action_saveFilter',
                hidden : ! (hasManageRight || this.hasGrant(node.attributes, 'editGrant')),
                handler : this.onOverwritePersistentFilter.createDelegate(this, [node, e])
            }].concat(this.getAdditionalCtxItems(record))
        });
        
        menu.showAt(e.getXY());
    },

    /**
     * handler to delete filter
     * 
     * @param {Ext.tree.TreeNode}
     *            node
     */
    onDeletePersistentFilter : function(node) {
        Ext.MessageBox.confirm(i18n._('Confirm'), String.format(i18n._('Do you really want to delete the favorite "{0}"?'), node.text), function(_btn) {
            if (_btn == 'yes') {
                Ext.MessageBox.wait(i18n._('Please wait'), String.format(i18n._('Deleting Favorite "{0}"'), this.containerName, node.text));

                var record = this.store.getById(node.id);
                Tine.widgets.persistentfilter.model.persistentFilterProxy.deleteRecords([record], {
                    scope : this,
                    success : function() {
                        this.store.remove(record);
                        this.recordCollection.remove(record);
                        this.filterNode.findChild('id', record.get('id')).remove();
                        Ext.MessageBox.hide();
                    }
                });
            }
        }, this);
    },

    /**
     * handler to rename filter
     * 
     * @param {Ext.tree.TreeNode}
     *            node
     */
    onEditPersistentFilter : function(node) {
        var record = this.store.getById(node.id);
        this.getEditWindow(record);
    },

    /**
     * handler to overwrite filter
     * 
     * @param {Ext.tree.TreeNode}
     *            node
     */
    onOverwritePersistentFilter : function(node) {
        
        var record = this.store.getById(node.id);
        Ext.MessageBox.confirm(i18n._('Overwrite?'), String.format(i18n._('Do you want to overwrite the favorite "{0}"?'), node.text), function(_btn) {
            if (_btn == 'yes') {
                Ext.MessageBox.wait(i18n._('Please wait'), String.format(i18n._('Overwriting Favorite "{0}"'), node.text));
                var ftb = this.getFilterToolbar();
                record.set('filters', ftb.getAllFilterData());
                
                this.createOrUpdateFavorite(record);
            }
        }, this, false, node.text);
    },

    /**
     * save persistent filter
     */
    saveFilter : function() {
        var ftb = this.getFilterToolbar();
        
        var record = this.getNewEmptyRecord();
        
        record.set('filters', ftb.getAllFilterData());
        
        // recheck that current ftb is saveable
        if (!ftb.isSaveAllowed()) {
            Ext.Msg.alert(i18n._('Could not save Favorite'), i18n._('Your current view does not support favorites'));
            return;
        }
        this.getEditWindow(record);
    },
    
    getEditWindow: function(record) {
        if (! record.get('id')) {
            var title = i18n._('Create Favorite');
        } else {
            var title = i18n._('Edit Favorite');
        }
        
        var height = 160;
        if ((this.hasRight() || this.hasGrant(record, 'editGrant')) && ! record.isDefault()) {
            height = 440;
        }
        
        Tine.log.debug('Tine.widgets.persistentfilter.PickerPanel::getEditWindow - create edit window for filter record: ');
        Tine.log.debug(record);
        
        var newWindow = Tine.WindowFactory.getWindow({
            modal : true,
            app : this.app,
            modelName: this.contentType,
            record : record,
            title : title,
            width : 400,
            height : height,
            contentPanelConstructor : 'Tine.widgets.persistentfilter.EditPersistentFilterPanel',
            contentPanelConstructorConfig : null
        });

        newWindow.on('update', function(win) {
            Ext.MessageBox.wait(i18n._('Please wait'), String.format(i18n._('Saving Favorite "{0}"'), record.get('name')));
            this.createOrUpdateFavorite(newWindow.record);
        }, this);
        
    },
    
    /**
     * checks right
     * 
     * @param {Object} filter
     * @return {Boolean}
     */
    hasRight: function(filter) {
        if (filter && filter.created_by == this.currentUser.accountId) {
            return true;
        }
        return (Tine.Tinebase.common.hasRight('manage_shared_' + this.contentType.toLowerCase() + '_favorites', this.app.name))
    },
    
    
    /**
     * check if user has grant on record 
     * 
     * @param {Record} record
     * @param {String} requiredGrant
     * @return {Boolean}
     * 
     * TODO move this to generic Record
     */
    hasGrant: function(record, requiredGrant) {
        var accountGrants = record && record.account_grants ? record.account_grants : 
                (record && record.data && record.data.account_grants ? record.data.account_grants : false),
            result = (accountGrants && accountGrants[requiredGrant] == true);
        Tine.log.debug('hasGrant(' + requiredGrant + ') -> ' + result);
        return result;
    },
    
    /**
     * create or update a favorite
     * 
     * @param {Tine.widgets.persistentfilter.model.PersistentFilter} record
     */
    
    createOrUpdateFavorite : function(record) {
        Tine.log.debug('createOrUpdateFavorite() ->');
        Tine.log.debug(record);
        
        Tine.widgets.persistentfilter.model.persistentFilterProxy.saveRecord(record, {
            scope : this,
            success : function(savedRecord) {
                Tine.log.debug('savedRecord ->');
                Tine.log.debug(record);
                
                var existing = this.recordCollection.get(savedRecord.id);
                
                if (existing) {
                    savedRecord.set('sorting', existing.get('sorting'));
                    this.store.remove(existing);
                    this.recordCollection.remove(existing);
                    
                    this.filterNode.findChild('id', existing.get('id')).remove();
                } else {
                    var sorting = 0;
                    savedRecord.set('sorting', sorting);
                }

                var attr = savedRecord.data;
                this.loader.inspectCreateNode(attr);
                
                this.filterNode.appendChild(new Ext.tree.TreeNode(attr));
                
                this.store.add(savedRecord);
                this.recordCollection.add(savedRecord);
                this.recordCollection.sort();
                
                if(! existing) {
                    this.saveState();
                }
                
                Ext.Msg.hide();
                // reload this filter?
                this.selectFilter(savedRecord);
            }
        });
    },

    /**
     * select given persistent filter
     * 
     * @param {model.PersistentFilter}
     *            persistentFilter
     */
    selectFilter : function(persistentFilter) {
        if (!persistentFilter) {
            return;
        }
        this.getFilterToolbar().fireEvent('change', this.getFilterToolbar());
        var node = this.getNodeById(persistentFilter.id);
        if (node) {
            this.getSelectionModel().select(node);
        } else {
            // mark for selection
            this.getLoader().selectedFilterId = persistentFilter.id;
        }

        this.onFilterSelect(persistentFilter);
    },

    /**
     * select default favorite
     *
     * NOTE: a lot modules/models don't have a default favorite preference
     */
    selectDefault: function() {
        var appName = this.recordClass.getMeta('appName'),
            modelName = this.recordClass.getMeta('modelName'),
            defaultFavorite = Tine.widgets.persistentfilter.model.PersistentFilter.getDefaultFavorite(appName, modelName);

        this.selectFilter(defaultFavorite);
    },
    
    getNewEmptyRecord: function() {
        var model = this.filterModel,
            ftb = this.getFilterToolbar();
            
        if (!model) {
            var recordClass = this.recordClass || (this.treePanel ? this.treePanel.recordClass : ftb.store.reader.recordType);
            model = recordClass.getMeta('appName') + '_Model_' + recordClass.getMeta('modelName') + 'Filter';
        }

        var record = new Tine.widgets.persistentfilter.model.PersistentFilter({
            application_id : this.app.id,
            account_id : Tine.Tinebase.registry.get('currentAccount').accountId,
            model : model,
            filters : null,
            name : null,
            description : null
        });
        
        return record;
    }
});

/**
 * @namespace Tine.widgets.persistentfilter
 * @class Tine.widgets.persistentfilter.PickerTreePanelLoader
 * @extends Tine.widgets.tree.Loader
 * 
 * <p>
 * PersistentFilter Picker Panel Tree Loader
 * </p>
 * 
 * @author Cornelius Weiss <c.weiss@metaways.de>
 * @license http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * 
 * @param {Object}
 *            config
 * @constructor Create a new Tine.widgets.persistentfilter.PickerTreePanelLoader
 */
Tine.widgets.persistentfilter.PickerTreePanelLoader = Ext.extend(Tine.widgets.tree.Loader, {

            /**
             * @cfg {Ext.util.MixedCollection} recordCollection
             */          
            recordCollection: null,

            /**
             * @cfg {String} selectedFilterId id to autoselect
             */
            selectedFilterId : null,

            /**
             * 
             * @param {Ext.tree.TreeNode}
             *            node
             * @param {Function}
             *            callback Function to call after the node has been
             *            loaded. The function is passed the TreeNode which was
             *            requested to be loaded.
             * @param (Object)
             *            scope The cope (this reference) in which the callback
             *            is executed. defaults to the loaded TreeNode.
             */
            requestData : function(node, callback, scope) {
                if (this.fireEvent("beforeload", this, node, callback) !== false) {
                    
                    node.beginUpdate();
                    this.recordCollection.each(function(record) {
                                var n = this.createNode(record.copy().data);
                                if (n) {
                                    node.appendChild(n);
                                }
                            }, this);
                    node.endUpdate();

                    this.runCallback(callback, scope || node, [node]);

                } else {
                    // if the load is cancelled, make sure we notify
                    // the node that we are done
                    this.runCallback(callback, scope || node, []);
                }
            },

            inspectCreateNode : function(attr) {
                var isPersistentFilter = !!attr.model && !!attr.filters;

                var isShared = (attr.account_id === null) ? true : false;

                var addText = '';
                var addClass = '';
                if (isShared) {
                    addText = i18n._('(shared)');
                    addClass = '-shared';
                }

                if (isPersistentFilter) {
                    Ext.apply(attr, {
                        isPersistentFilter : isPersistentFilter,
                        text : Ext.util.Format.htmlEncode(this.app.i18n._hidden(attr.name)),
                        qtip : Ext.util.Format.htmlEncode(attr.description ? this.app.i18n._hidden(attr.description) + ' ' + addText : addText),
                        selected : attr.id === this.selectedFilterId,
                        id : attr.id,

                        sorting : attr.sorting,
                        draggable : true,
                        allowDrop : false,

                        leaf : attr.leaf === false ? attr.leaf : true,
                        cls : 'tinebase-westpanel-node-favorite' + addClass
                    });
                }
            }
        });


/***/ }),
/* 186 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.dialog');

/**
 * Generic 'Edit Record' dialog
 * Base class for all 'Edit Record' dialogs
 * 
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.EditDialog
 * @extends     Ext.FormPanel
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @constructor
 * @param {Object} config The configuration options.
 */

Tine.widgets.dialog.EditDialog = Ext.extend(Ext.FormPanel, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     * instance of the app object (required)
     */
    app: null,
    /**
     * @cfg {String} mode
     * Set to 'local' if the EditDialog only operates on this.record (defaults to 'remote' which loads and saves using the recordProxy)
     */
    mode : 'remote',
    /**
     * @cfg {Array} tbarItems
     * additional toolbar items (defaults to false)
     */
    tbarItems: false,
    /**
     * internal/untranslated app name (required)
     * 
     * @cfg {String} appName
     */
    appName: null,
    /**
     * the modelName (filled by application starter)
     * 
     * @type {String} modelName
     */
    modelName: null,
    
    /**
     * record definition class  (required if no modelconfig! don't declare for modelconfig!!)
     * 
     * @cfg {Ext.data.Record} recordClass
     */
    recordClass: null,
    /**
     * @cfg {Ext.data.DataProxy} recordProxy
     */
    recordProxy: null,
    /**
     * @cfg {Bool} showContainerSelector
     * show container selector in bottom area
     */
    showContainerSelector: null,
    /**
     * @cfg {Bool} evalGrants
     * should grants of a grant-aware records be evaluated (defaults to true)
     */
    evalGrants: true,
    /**
     * @cfg {String} requiredSaveGrant
     * required grant for apply/save
     */
    requiredSaveGrant: 'editGrant',

    /**
     * @cfg {Ext.data.Record} record
     * record in edit process.
     */
    record: null,
    
    /**
     * holds the modelConfig for the handled record (json-encoded object)
     * will be decoded in initComponent
     * 
     * @type 
     */
    modelConfig: null,
    
    /**
     * @cfg {String} saveAndCloseButtonText
     * text of save and close button
     */
    saveAndCloseButtonText: '',
    /**
     * @cfg {String} cancelButtonText
     * text of cancel button
     */
    cancelButtonText: '',
    
    /**
     * @cfg {Boolean} copyRecord
     * copy record
     */
    copyRecord: false,
    
    /**
     * @cfg {Boolean} doDuplicateCheck
     * do duplicate check when saving record (mode remote only)
     */
    doDuplicateCheck: true,

    /**
     * when a record has the relations-property the relations-panel can be disabled here
     * @cfg {Boolean} hideRelationsPanel
     */
    hideRelationsPanel: false,
    
    /**
     * when a record has the attachments-property the attachments-panel can be disabled here
     * @cfg {Boolean} hideAttachmentsPanel
     */
    hideAttachmentsPanel: false,
    
    /**
     * Registry for other relationgridpanels than the generic one,
     * handling special types of relations the generic one will not.
     * Panels registered here must have a store with the relation records.
     * 
     * @type {Array}
     */
    relationPanelRegistry: null,
    
    /**
     * ignore relations to given php-class names in the relation grid
     * @type {Array}
     */
    ignoreRelatedModels: null,
    
    /**
     * dialog is currently saving data
     * @type Boolean
     */
    saving: false,
    
    /**
     * Disable adding cf tab even if model has support for customfields
     * @type Boolean
     */
    disableCfs: false,
    
    /**
     * @property window {Ext.Window|Ext.ux.PopupWindow|Ext.Air.Window}
     */
    /**
     * @property {Number} loadRequest 
     * transaction id of loadData request
     */
    /**
     * @property loadMask {Ext.LoadMask}
     */
    
    /**
     * @property containerSelectCombo {Tine.widgets.container.SelectionComboBox}
     */
    containerSelectCombo: null,
    
    /**
     * If set, these fields are readOnly (when called dependent to related record)
     * 
     * @type {Ext.util.MixedCollection}
     */
    fixedFields: null,

    /**
     * Plain Object with additional configuration (JSON-encoded)
     * 
     * @type {Object}
     */
    additionalConfig: null,

    /**
     * Assuming mode is not local, but the dialog is supposed to treat this.record as a json string and keep those data
     */
    recordFromJson: false,

    /**
     * canonical name
     * @cfg {String} canonicalName
     */
    canonicalName: 'EditDialog',
    
    // private
    bodyStyle:'padding:5px',
    layout: 'fit',
    border: false,
    cls: 'tw-editdialog',
    anchor:'100% 100%',
    deferredRender: false,
    buttonAlign: null,
    bufferResize: 500,

    /**
     * relations panel
     * 
     * @type Tine.widgets.relation.GenericPickerGridPanel
     */
    relationsPanel: null,
    
    // Array of Relation Pickers
    relationPickers: null,
    
    /**
     * attachments panel
     * 
     * @type Tine.widgets.dialog.AttachmentsGridPanel
     */
    attachmentsPanel: null,
    
    /**
     * holds the loadMask
     * set this to false, if no loadMask should be shown
     * 
     * @type {Ext.LoadMask}
     */
    loadMask: null,

    /**
     * hook notes panel into dialog
     */
    displayNotes: false,

    useMultiple: false,

    //private
    initComponent: function() {
        this.relationPanelRegistry = this.relationPanelRegistry ? this.relationPanelRegistry : [];
        this.addEvents(
            /**
             * @event cancel
             * Fired when user pressed cancel button
             */
            'cancel',
            /**
             * @event saveAndClose
             * Fired when user pressed OK button
             */
            'saveAndClose',
            /**
             * @event update
             * @desc  Fired when the record got updated
             * @param {Json String} data data of the entry
             * @pram  {String} this.mode
             */
            'update',
            /**
             * @event apply
             * Fired when user pressed apply button
             */
            'apply',
            /**
             * @event load
             * @param {Tine.widgets.dialog.EditDialog} this
             * @param {Tine.data.Record} record which got loaded
             * @param {Function} ticket function for async defer
             * Fired when record is loaded
             */
            'load',
            /**
             * @event save
             * @param {Tine.widgets.dialog.EditDialog} this
             * @param {Tine.data.Record} record which got loaded
             * @param {Function} ticket function for async defer
             * Fired when remote record is saving
             */
            'save',
            /**
             * @event updateDependent
             * Fired when a subpanel updates the record locally
             */
            'updateDependent',
            /**
             * @event change
             * Fires just before the field blurs if the field value has changed.
             * @param {Ext.form.Field} this
             * @param {Mixed} newValue The new value
             * @param {Mixed} oldValue The original value
             */
            'change'
        );

        if (Ext.isString(this.modelConfig)) {
            this.modelConfig = Ext.decode(this.modelConfig);
        }
        
        if (Ext.isString(this.additionalConfig)) {
            Ext.apply(this, Ext.decode(this.additionalConfig));
        }
        
        if (Ext.isString(this.fixedFields)) {
            var decoded = Ext.decode(this.fixedFields);
            this.fixedFields = new Ext.util.MixedCollection();
            this.fixedFields.addAll(decoded);
        }
        
        if (! this.recordClass && this.modelName) {
            this.recordClass = Tine[this.appName].Model[this.modelName];
        }
        
        if (this.recordClass) {
            this.appName    = this.appName    ? this.appName    : this.recordClass.getMeta('appName');
            this.modelName  = this.modelName  ? this.modelName  : this.recordClass.getMeta('modelName');
        }

        if (! this.app) {
            this.app = Tine.Tinebase.appMgr.get(this.appName);
        }
        
        if (! this.windowNamePrefix) {
            this.windowNamePrefix = this.modelName + 'EditWindow_';
        }
        
        Tine.log.debug('initComponent: appName: ', this.appName);
        Tine.log.debug('initComponent: modelName: ', this.modelName);
        Tine.log.debug('initComponent: app: ', this.app);
        
        // init some translations
        if (this.app.i18n && this.recordClass !== null) {
            this.i18nRecordName = this.app.i18n.n_hidden(this.recordClass.getMeta('recordName'), this.recordClass.getMeta('recordsName'), 1);
            this.i18nRecordsName = this.app.i18n._hidden(this.recordClass.getMeta('recordsName'));
        }

        // auto record proxy
        if (! this.recordProxy && this.recordClass) {
            Tine.log.debug('no record proxy given, creating a new one...');
            this.recordProxy = new Tine.Tinebase.data.RecordProxy({
                recordClass: this.recordClass
            });
        }

        // auto eval grants
        if (this.recordClass) {
            var grantsField = this.recordClass.getMeta('grantsPath')
                .replace(/^data\./, '')
                .replace(/\..+/g, '');

            this.evalGrants = this.evalGrants && (grantsField == 'data' || this.recordClass.hasField(grantsField));
        }

        // init plugins
        this.plugins = Ext.isString(this.plugins) ? Ext.decode(this.plugins) : Ext.isArray(this.plugins) ? this.plugins.concat(Ext.decode(this.initialConfig.plugins)) : [];
        
        this.plugins.push(this.tokenModePlugin = new Tine.widgets.dialog.TokenModeEditDialogPlugin({}));
        // added possibility to disable using customfield plugin
        if (this.disableCfs !== true) {
            this.plugins.push(new Tine.widgets.customfields.EditDialogPlugin({}));
        }
        
        // init actions
        this.initActions();
        // init buttons and tbar
        this.initButtons();
        // init record 
        this.initRecord();
        // init container selector
        this.initContainerSelector();
        // get items for this dialog
        this.items = this.getFormItems();

        // init relations panel if relations are defined
        this.initRelationsPanel();
        // init attachments panel
        this.initAttachmentsPanel();
        // init notes panel
        this.initNotesPanel();

        // apply generic tab sorting
        if (this.items.xtype == 'tabpanel') {
            this.items.plugins = this.items.plugins || [];
            this.items.plugins.push({
                ptype : 'ux.tabpanelsortplugin',
                enableDD: false
            });
            this.items.items[0].pos = 10;
        }

        Tine.widgets.dialog.EditDialog.superclass.initComponent.call(this);

        // set fields readOnly if set
        this.fixFields();
        
        // firefox fix: blur each item before tab changes, so no field  will be focused afterwards
        if (Ext.isGecko) {
            this.items.items[0].addListener('beforetabchange', function(tabpanel, newtab, oldtab) {
                if (! oldtab) {
                    return;
                }
                var form = this.getForm();
                
                if (form && form.hasOwnProperty('items'))
                    form.items.each(function(item, index) {
                        item.blur();
                    });
            }, this);
        }

        if (Ext.isFunction(this.window.relayEvents) && Tine.Tinebase.featureEnabled('featureRememberPopupSize')) {
            this.window.relayEvents(this, ['resize']);
        }
    },

    /**
     * returns canonical path part
     * @returns {string}
     */
    getCanonicalPathSegment: function () {
        if (this.recordClass) {
            return ['',
                this.recordClass.getMeta('appName'),
                this.canonicalName,
                this.recordClass.getMeta('modelName'),
            ].join(Tine.Tinebase.CanonicalPath.separator);
        }
    },

    /**
     * generic form layout
     */
    getFormItems: function() {
        return {
            xtype: 'tabpanel',
            border: false,
            plain:true,
            activeTab: 0,
            defaults: {
                hideMode: 'offsets'
            },
            plugins: [{
                ptype : 'ux.tabpanelkeyplugin'
            }],
            items:[
                {
                    title: this.i18nRecordName,
                    autoScroll: true,
                    border: false,
                    frame: true,
                    layout: 'border',
                    defaults: { autoScroll: true },
                    items: [Ext.applyIf(this.getRecordFormItems(), {
                        region: 'center',
                        xtype: 'columnform',
                        labelAlign: 'top',
                        formDefaults: {
                            xtype:'textfield',
                            anchor: '100%',
                            labelSeparator: '',
                            columnWidth: 1/2
                        },
                    })].concat(this.getEastPanel())
                }, new Tine.widgets.activities.ActivitiesTabPanel({
                    app: this.appName,
                    record_id: this.record.id,
                    record_model: this.modelName
                })
            ]
        };
    },

    getEastPanel: function() {
        var items = [];
        if (this.recordClass.hasField('description')) {
            items.push(new Ext.Panel({
                title: i18n._('Description'),
                iconCls: 'descriptionIcon',
                layout: 'form',
                labelAlign: 'top',
                border: false,
                items: [{
                    style: 'margin-top: -4px; border 0px;',
                    labelSeparator: '',
                    xtype: 'textarea',
                    name: 'description',
                    hideLabel: true,
                    grow: false,
                    preventScrollbars: false,
                    anchor: '100% 100%',
                    emptyText: i18n._('Enter description'),
                    requiredGrant: 'editGrant'
                }]
            }));
        }

        if (this.recordClass.hasField('tags')) {
            items.push(new Tine.widgets.tags.TagPanel({
                app: this.appName,
                border: false,
                bodyStyle: 'border:1px solid #B5B8C8;'
            }));
        }

        return items.length ? {
            layout: 'ux.multiaccordion',
            animate: true,
            region: 'east',
            width: 210,
            split: true,
            collapsible: true,
            collapseMode: 'mini',
            header: false,
            margins: '0 5 0 5',
            border: true,
            items: items
        } : [];
    },

    getRecordFormItems: function() {
        return new Tine.widgets.form.RecordForm({
            recordClass: this.recordClass,
            editDialog: this
        });
    },

    /**
     * fix fields (used for preselecting form fields when called in dependency to another record)
     * @return {Boolean}
     */
    fixFields: function() {
        if (this.fixedFields && this.fixedFields.getCount() > 0) {
            if (! this.rendered) {
                this.fixFields.defer(100, this);
                return false;
            }
            
            this.fixedFields.each(function(value, index) {
                var key = this.fixedFields.keys[index]; 
                
                var field = this.getForm().findField(key);
                
                if (field) {
                    if (Ext.isFunction(this.recordClass.getField(key).type)) {
                        var foreignRecordClass = this.recordClass.getField(key).type;
                        var record = new foreignRecordClass(value);
                        field.selectedRecord = record;
                        field.setValue(value);
                        field.fireEvent('select');
                    } else {
                        field.setValue(value);
                    }
                    field.disable();
                }
            }, this);
        }
    },

    /**
     * call checkState for every field
     */
    checkStates: function() {
        this.onRecordUpdate();
        this.getForm().items.each(function (item) {
            if (Ext.isFunction(item.checkState)) {
                item.checkState(this, this.record);
            }
        }, this)
    },

    /**
     * Get available model for given application
     *
     *  @param {Mixed} application
     *  @param {Boolean} customFieldModel
     */
    getApplicationModels: function (application, customFieldModel) {
        var models      = [],
            useModel,
            appName     = Ext.isString(application) ? application : application.get('name'),
            app         = Tine.Tinebase.appMgr.get(appName),
            trans       = app && app.i18n ? app.i18n : i18n,
            appModels   = Tine[appName].Model;

        if (appModels) {
            for (var model in appModels) {
                if (appModels.hasOwnProperty(model) && typeof appModels[model].getMeta === 'function') {
                    if (customFieldModel && appModels[model].getField('customfields')) {
                        useModel = appModels[model].getMeta('appName') + '_Model_' + appModels[model].getMeta('modelName');

                        Tine.log.info('Found model with customfields property: ' + useModel);
                        models.push([useModel, trans.n_(appModels[model].getMeta('recordName'), appModels[model].getMeta('recordsName'), 1)]);
                    } else if (! customFieldModel) {
                        useModel = 'Tine.' + appModels[model].getMeta('appName') + '.Model.' + appModels[model].getMeta('modelName');

                        Tine.log.info('Found model: ' + useModel);
                        models.push([useModel, trans.n_(appModels[model].getMeta('recordName'), appModels[model].getMeta('recordsName'), 1)]);
                    }
                }
            }
        }
        return models;
    },

    /**
     * init actions
     */
    initActions: function() {
        this.action_saveAndClose = new Ext.Action({
            requiredGrant: this.requiredSaveGrant,
            text: (this.saveAndCloseButtonText != '') ? this.app.i18n._(this.saveAndCloseButtonText) : i18n._('Ok'),
            minWidth: 70,
            ref: '../btnSaveAndClose',
            scope: this,
            // TODO: remove the defer when all subpanels use the deferByTicket mechanism
            handler: function() { this.onSaveAndClose.defer(500, this); },
            iconCls: 'action_saveAndClose'
        });
    
        this.action_applyChanges = new Ext.Action({
            requiredGrant: this.requiredSaveGrant,
            text: i18n._('Apply'),
            minWidth: 70,
            ref: '../btnApplyChanges',
            scope: this,
            handler: this.onApplyChanges,
            iconCls: 'action_applyChanges'
        });
        
        this.action_cancel = new Ext.Action({
            text: (this.cancelButtonText != '') ? this.app.i18n._(this.cancelButtonText) : i18n._('Cancel'),
            minWidth: 70,
            scope: this,
            handler: this.onCancel,
            iconCls: 'action_cancel'
        });
        
        this.action_delete = new Ext.Action({
            requiredGrant: 'deleteGrant',
            text: i18n._('delete'),
            minWidth: 70,
            scope: this,
            handler: this.onDelete,
            iconCls: 'action_delete',
            disabled: true
        });

        this.action_export = Tine.widgets.exportAction.getExportButton(this.recordClass, {
            getExportOptions: this.getExportOptions.createDelegate(this)
        }, Tine.widgets.exportAction.SCOPE_SINGLE);

        if (this.enablePrinting) {
            this.action_print = new Ext.Action({
                requiredGrant: 'readGrant',
                text: String.format(i18n._('Print {0}'), this.recordClass.getRecordName()),
                handler: this.onPrint,
                iconCls: 'action_print',
                disabled: false,
                scope: this
            });
        }

        this.actionUpdater = new Tine.widgets.ActionUpdater({
            recordClass: this.recordClass,
            evalGrants: this.evalGrants
        });

        this.actionUpdater.addActions([
            this.action_saveAndClose,
            this.action_applyChanges,
            this.action_cancel,
            this.action_delete
        ]);
    },

    /**
     * get export options/data
     */
    getExportOptions: function() {
        this.onRecordUpdate();
        return {
            recordData: this.record.data
        };
    },

    /**
     * init buttons
     *
     * use button order from preference
     */
    initButtons: function () {
        this.fbar = [
            '->'
        ];

        this.fbar.push(this.action_cancel, this.action_saveAndClose);

        if (this.action_print) {
            this.actionUpdater.addAction(this.action_print);
            this.tbarItems = this.tbarItems || [];
            this.tbarItems.push(this.action_print);
        }

        if (this.action_export) {
            this.actionUpdater.addAction(this.action_export);
            this.tbarItems = this.tbarItems || [];
            this.tbarItems.push(this.action_export);
        }

        if (this.tbarItems && this.tbarItems.length) {
            this.actionUpdater.addActions(this.tbarItems);
            this.tbar = new Ext.Toolbar({
                items: this.tbarItems
            });
        }
    },
    
    /**
     * init container selector
     */
    initContainerSelector: function() {
        if (this.showContainerSelector) {
            this.containerSelectCombo = new Tine.widgets.container.SelectionComboBox({
                id: this.app.appName + 'EditDialogContainerSelector-' + Ext.id(),
                fieldLabel: i18n._('Saved in'),
                width: 300,
                listWidth: 300,
                name: this.recordClass.getMeta('containerProperty'),
                recordClass: this.recordClass,
                containerName: this.app.i18n.n_hidden(this.recordClass.getMeta('containerName'), this.recordClass.getMeta('containersName'), 1),
                containersName: this.app.i18n._hidden(this.recordClass.getMeta('containersName')),
                appName: this.app.appName,
                // required grant to change container
                requiredGrant: this.evalGrants ? 'deleteGrant' : false,
                // required grants for the container to choose
                requiredGrants: [this.evalGrants ? 'addGrant' : false],
                disabled: this.isContainerSelectorDisabled(),
                listeners: {
                    scope: this,
                    select: function() {    
                        // enable or disable save button dependent to containers account grants
                        // on edit: check editGrant, on add: check addGrant
                        var grants = this.containerSelectCombo.selectedContainer
                            ? this.containerSelectCombo.selectedContainer.account_grants : {},
                            grantToCheck = (this.record.data.id) ? 'editGrant' : 'addGrant',
                            enabled =  grants.hasOwnProperty(grantToCheck) && grants[grantToCheck]
                                    || grants.hasOwnProperty('adminGrant') && grants.adminGrant ? true : false;

                        this.action_saveAndClose.setDisabled(! enabled);
                    }
                }
            });
            this.on('render', function() { this.getForm().add(this.containerSelectCombo); }, this);
            
            this.fbar = [
                i18n._('Saved in'),
                this.containerSelectCombo
            ].concat(this.fbar);
        }
    },
    
    /**
     * checks if the container selector should be disabled (dependent on account grants of the container itself)
     * @return {}
     */
    isContainerSelectorDisabled: function() {
        if (this.record) {
            var cp = this.recordClass.getMeta('containerProperty'),
                container = this.record.data[cp],
                grants = (container && container.hasOwnProperty('account_grants')) ? container.account_grants : null,
                cond = false;
                
            // check grants if record already exists and grants should be evaluated
            if(this.evalGrants && this.record.data.id && grants) {
                cond = ! (grants.hasOwnProperty('editGrant') && grants.editGrant);
            }
            
            return cond;
        } else {
            return false;
        }
    },
    
    /**
     * init record to edit
     */
    initRecord: function() {
        Tine.log.debug('init record with mode: ' + this.mode);
        if (! this.record) {
            Tine.log.debug('creating new default data record');
            this.record = new this.recordClass(this.recordClass.getDefaultData(), 0);
        }

        // Mode local means, that the record is not supposed to be loaded from server and saved to server.
        // So if mode !== local, the record would be always loaded from the server and discard all data passed as record before
        // To bypass this you can set recordFromJson === true, then the dialog wouldn't load the record from server!
        // But to make this work you need to pass a json encoded record to the editdialog as string!
        if (this.mode !== 'local' && this.recordFromJson !== true) {
            if (this.record && this.record.id) {
                this.loadRemoteRecord();
            } else {
                this.onRecordLoad.defer(10, this);
            }
        } else {
            // note: in local mode we expect a valid record
            if (!Ext.isFunction(this.record.beginEdit)) {
                this.record = this.recordProxy.recordReader({responseText: this.record});
            }
            this.onRecordLoad.defer(10, this);
        }
    },
    
    /**
     * load record via record proxy
     */
    loadRemoteRecord: function() {
        Tine.log.info('initiating record load via proxy');
        this.loadRequest = this.recordProxy.loadRecord(this.record, {
            scope: this,
            success: function(record) {
                this.record = record;
                this.onRecordLoad();
            }
        });
    },

    /**
     * copy this.record record
     */
    doCopyRecord: function() {
        this.record = this.doCopyRecordToReturn(this.record);

        var _ = window.lodash,
            hasRequiredGrant = _.get(this.record, this.recordClass.getMeta('grantsPath') + '.addGrant');

        // unset container if user is not allowed to add record in original container
        if(this.evalGrants && ! hasRequiredGrant) {
            _.unset(this.record, 'data.' + this.recordClass.getMeta('containerProperty'));
            _.set(this.record, this.recordClass.getMeta('grantsPath') + '.addGrant', true);
            _.set(this.record, this.recordClass.getMeta('grantsPath') + '.editGrant', true);
        }
    },

    /**
     * Copy record and returns "new record with same settings"
     *
     * @param {Tine.Tinebase.data.Record} record
     */
    doCopyRecordToReturn: function(record) {
        var recordData = this.getCopyRecordData(record, this.recordClass, this.omitCopyTitle);
        return new this.recordClass(recordData, Tine.Tinebase.data.Record.generateUID());
    },

    /**
     * get data to copy record
     *
     * @param {Tine.Tinebase.data.Record} record
     * @param recordClass
     * @param {Boolean} omitCopyTitle
     */
    getCopyRecordData: function (record, recordClass, omitCopyTitle) {
        var _ = window.lodash,
            titleProperty = recordClass.getMeta('titleProperty'),
            omitFields = _.concat(recordClass.getMeta('copyOmitFields') || [],
                // 2017-12-21 - cweiss - why where attachments omitted? if you know please document here!
                ['id', 'notes' /*, 'attachments'*/]),
            fields = recordClass.getFieldNames(),
            fieldsToCopy = fields.diff(omitFields),
            recordData = Ext.copyTo({}, record.data, fieldsToCopy),
            resetProperties = {
                alarms:    ['id', 'record_id', 'sent_time', 'sent_message'],
                relations: ['id', 'own_id', 'created_by', 'creation_time', 'last_modified_by', 'last_modified_time']
            },
            setProperties = {alarms: {sent_status: 'pending'}};

        Ext.iterate(resetProperties, function(property, properties) {
            if (recordData.hasOwnProperty(property)) {
                var r = recordData[property];
                for (var index = 0; index < r.length; index++) {
                    Ext.each(properties,
                        function(prop) {
                            r[index][prop] = null;
                        }
                    );
                }
            }
        });

        Ext.iterate(setProperties, function(property, properties) {
            if (recordData.hasOwnProperty(property)) {
                var r = recordData[property];
                for (var index = 0; index < r.length; index++) {
                    Ext.iterate(properties,
                        function(prop, value) {
                            r[index][prop] = value;
                        }
                    );
                }
            }
        });

        if (! omitCopyTitle) {
            recordData[titleProperty] = String.format(i18n._('{0} (copy)'), recordData[titleProperty]);
        }

        return recordData;
    },

    /**
     * executed after record got updated from proxy
     */
    onRecordLoad: function() {
        var _ = window.lodash;
        
        Tine.log.debug('Tine.widgets.dialog.EditDialog::onRecordLoad() - Loading of the following record completed:');
        Tine.log.debug(this.record);


        if (!this.record.id || !_.get(this.record, 'data.' + this.recordClass.getMeta('containerProperty'), false)) {
            _.set(this.record, this.recordClass.getMeta('grantsPath') + '.addGrant', true);
            _.set(this.record, this.recordClass.getMeta('grantsPath') + '.editGrant', true);
        }
        
        if (this.copyRecord) {
            this.doCopyRecord();
            this.window.setTitle(String.format(i18n._('Copy {0}'), this.i18nRecordName));
        } else {
            if (! this.record.id) {
                this.window.setTitle(String.format(i18n._('Add New {0}'), this.i18nRecordName));
            } else {
                this.window.setTitle(String.format(i18n._('Edit {0} "{1}"'), this.i18nRecordName, this.record.getTitle()));
            }
        }
        
        var ticketFn = this.onAfterRecordLoad.deferByTickets(this),
            wrapTicket = ticketFn();
        
        this.fireEvent('load', this, this.record, ticketFn);
        wrapTicket();
    },
    
    // finally load the record into the form
    onAfterRecordLoad: function() {
        var _ = window.lodash,
            form = this.getForm();
        
        if (form) {
            form.loadRecord(this.record);
            form.clearInvalid();
        }
        
        if (this.record && this.record.hasOwnProperty('data') && Ext.isObject(this.record.data[this.recordClass.getMeta('containerProperty')])) {
            this.updateToolbars(this.record, this.recordClass.getMeta('containerProperty'));
        }
        
        // add current timestamp as id, if this is a dependent record 
        if (this.modelConfig && this.modelConfig.isDependent == true && this.record.id == 0) {
            this.record.set('id', (new Date()).getTime());
        }

        // apply grants to fields with requiredGrant prop
        if (this.evalGrants) {
            this.getForm().items.each(function (f) {
                if (f.isFormField && f.requiredGrant !== undefined) {
                    var hasRequiredGrant = _.get(this.record, this.recordClass.getMeta('grantsPath') + '.' + f.requiredGrant);
                    f.setDisabled(!hasRequiredGrant);
                }
            }, this);
        }
        
        (function() {
            this.checkStates();
            this.record.commit();
        }).defer(100, this);
        
        if (this.loadMask && !this.saving) {
            this.loadMask.hide();
        }
    },
    
    /**
     * executed when record gets updated from form
     */
    onRecordUpdate: function(callback, scope) {
        var form = this.getForm();

        // merge changes from form into record
        form.updateRecord(this.record);

        this.actionUpdater.updateActions([this.record]);
        
        //TODO Use Promises instead of Tickets if async is needed
        this.fireEvent('recordUpdate', this, this.record);
    },
    
    /**
     * @private
     */
    onRender : function(ct, position){
        Tine.widgets.dialog.EditDialog.superclass.onRender.call(this, ct, position);
        
        // generalized keybord map for edit dlgs
        new Ext.KeyMap(this.el, [
            {
                key: [10,13], // ctrl + return
                ctrl: true,
                scope: this,
                fn: function() {
                    if (this.getForm().hasOwnProperty('items')) {
                        // force set last selected field
                        this.getForm().items.each(function(item) {
                            if (item.hasFocus) {
                                item.setValue(item.getRawValue());
                            }
                        }, this);
                    }
                    this.action_saveAndClose.execute();
                }
            }
        ]);
        
        if (this.loadMask !== false && this.i18nRecordName) {
            this.loadMask = new Ext.LoadMask(ct, {msg: String.format(i18n._('Transferring {0}...'), this.i18nRecordName)});
            this.loadMask.show();
        }

        // init change event
        var form = this.getForm().items.each(function(item) {
            this.relayEvents(item, ['change', 'select']);
        }, this);
        this.on('change', this.checkStates, this, {buffer: 100});
        this.on('select', this.checkStates, this, {buffer: 100});
    },
    
    /**
     * update (action updateer) top and bottom toolbars
     */
    updateToolbars: function(record, containerField) {
        if (! this.evalGrants) {
            return;
        }
        this.actionUpdater.updateActions(record);
    },

    /**
     * get top toolbar
     */
    getToolbar: function() {
        return this.getTopToolbar();
    },
    
    /**
     * is form valid?
     * 
     * @return {Boolean}
     */
    isValid: function() {
        var me = this;
        return new Promise(function (fulfill, reject) {
            if (me.getForm().isValid()) {
                fulfill(true);
            } else {
                reject(me.getValidationErrorMessage())
            }
        });
    },

    /**
     * vaidates on multiple edit
     * 
     * @return {Boolean}
     */
    isMultipleValid: function() {
        return true;
    },
    
    /**
     * @private
     */
    onCancel : function(){
        this.fireEvent('cancel');
        this.purgeListeners();
        this.window.close();
    },
    
    /**
     * @private
     */
    onSaveAndClose: function() {
        this.fireEvent('saveAndClose');
        this.onApplyChanges(true);
    },
    
    /**
     * generic apply changes handler
     * @param {Boolean} closeWindow
     */
    onApplyChanges: function(closeWindow) {
        if (this.saving) {
            return;
        }
        this.saving = true;

        this.loadMask.show();

        var ticketFn = this.doApplyChanges.deferByTickets(this, [closeWindow]),
            wrapTicket = ticketFn();

        this.fireEvent('save', this, this.record, ticketFn);
        wrapTicket();
    },
    
    /**
     * is called from onApplyChanges
     * @param {Boolean} closeWindow
     */
    doApplyChanges: function(closeWindow) {
        // we need to sync record before validating to let (sub) panels have 
        // current data of other panels
        this.onRecordUpdate();

        // quit copy mode
        this.copyRecord = false;

        var isValid = this.isValid(),
            vBool = !! isValid,
            me = this;

        if (Ext.isDefined(isValid) && ! Ext.isFunction(isValid.then)) {
            // convert legacy isValid into promise
            isValid = new Promise(function (fulfill, reject) {
                return vBool ? fulfill(true) : reject(me.getValidationErrorMessage());
            });
        }

        isValid.then(function () {
            if (me.mode !== 'local') {
                me.recordProxy.saveRecord(me.record, {
                    scope: me,
                    success: function (record) {
                        // override record with returned data
                        me.record = record;
                        if (!Ext.isFunction(me.window.cascade)) {
                            // update form with this new data
                            // NOTE: We update the form also when window should be closed,
                            //       cause sometimes security restrictions might prevent
                            //       closing of native windows
                            me.afterIsRendered().then(me.onRecordLoad.bind(me));
                        }
                        var ticketFn = me.onAfterApplyChanges.deferByTickets(me, [closeWindow]),
                            wrapTicket = ticketFn();

                        me.fireEvent('update', Ext.util.JSON.encode(me.record.data), me.mode, me, ticketFn);
                        wrapTicket();
                    },
                    failure: me.onRequestFailed,
                    timeout: 300000 // 5 minutes
                }, me.getAdditionalSaveParams(me));
            } else {
                me.afterIsRendered().then(me.onRecordLoad.bind(me));
                var ticketFn = me.onAfterApplyChanges.deferByTickets(me, [closeWindow]),
                    wrapTicket = ticketFn();

                me.fireEvent('update', Ext.util.JSON.encode(me.record.data), me.mode, me, ticketFn);
                wrapTicket();
            }
        }, function (message) {
            me.saving = false;
            me.loadMask.hide();
            Ext.MessageBox.alert(i18n._('Errors'), message);
        });
    },

    /**
     * returns additional save params
     *
     * @param {EditDialog} me
     * @returns {{duplicateCheck: boolean}}
     */
    getAdditionalSaveParams: function(me) {
        return {
            duplicateCheck: me.doDuplicateCheck
        };
    },
    
    onAfterApplyChanges: function(closeWindow) {
        this.window.rename(this.windowNamePrefix + this.record.id);
        this.saving = false;
        
        if (closeWindow) {
            this.window.fireEvent('saveAndClose');
            this.purgeListeners();
            this.window.close();
        } else {
            this.loadMask.hide();
        }
    },
    
    /**
     * get validation error message
     * 
     * @return {String}
     */
    getValidationErrorMessage: function() {
        return i18n._('Please fix the errors noted.');
    },
    
    /**
     * generic delete handler
     */
    onDelete: function(btn, e) {
        Ext.MessageBox.confirm(i18n._('Confirm'), String.format(i18n._('Do you really want to delete this {0}?'), this.i18nRecordName), function(_button) {
            if(btn == 'yes') {
                var deleteMask = new Ext.LoadMask(this.getEl(), {msg: String.format(i18n._('Deleting {0}'), this.i18nRecordName)});
                deleteMask.show();
                
                this.recordProxy.deleteRecords(this.record, {
                    scope: this,
                    success: function() {
                        this.purgeListeners();
                        this.window.close();
                    },
                    failure: function () {
                        Ext.MessageBox.alert(i18n._('Failed'), String.format(i18n._('Could not delete {0}.'), this.i18nRecordName));
                        Ext.MessageBox.hide();
                    }
                });
            }
        });
    },

    onPrint: function (printMode) {
        this.onRecordUpdate();
        var renderer = new (this.printer || Ext.ux.Printer.EditDialogRenderer)();
        renderer.print(this);
    },

    /**
     * duplicate(s) found exception handler
     * 
     * @param {Object} exception
     */
    onDuplicateException: function(exception) {
        var resolveGridPanel = new Tine.widgets.dialog.DuplicateResolveGridPanel({
            app: this.app,
            store: new Tine.widgets.dialog.DuplicateResolveStore({
                app: this.app,
                recordClass: this.recordClass,
                recordProxy: this.recordProxy,
                data: {
                    clientRecord: exception.clientRecord,
                    duplicates: exception.duplicates
                }
            }),
            fbar: [
                '->',
                this.action_cancel,
                this.action_saveAndClose
            ]
        });
        
        // intercept save handler
        resolveGridPanel.btnSaveAndClose.setHandler(function(btn, e) {
            var resolveStrategy = resolveGridPanel.store.resolveStrategy;
            
            // action discard -> close window
            if (resolveStrategy == 'discard') {
                return this.onCancel();
            }
            
            this.record = resolveGridPanel.store.getResolvedRecord();
            
            // quit copy mode before populating form with resolved data
            this.copyRecord = false;
            this.onRecordLoad();
            
            mainCardPanel.layout.setActiveItem(this.id);
            resolveGridPanel.doLayout();
            
            this.doDuplicateCheck = false;
            this.onSaveAndClose();
        }, this);
        
        // place in viewport
        this.window.setTitle(String.format(i18n._('Resolve Duplicate {0} Suspicion'), this.i18nRecordName));
        var mainCardPanel = this.findParentBy(function(p) {return p.isWindowMainCardPanel });
        mainCardPanel.add(resolveGridPanel);
        mainCardPanel.layout.setActiveItem(resolveGridPanel.id);
        resolveGridPanel.doLayout();
    },
    
    /**
     * generic request exception handler
     * 
     * @param {Object} exception
     */
    onRequestFailed: function(exception) {
        this.saving = false;

        if (this.exceptionHandlingMap && this.exceptionHandlingMap[exception.code] && typeof this.exceptionHandlingMap[exception.code] === 'function') {
            this.exceptionHandlingMap[exception.code](exception);

        } else if (exception.code == 629) {
            this.onDuplicateException.apply(this, arguments);

        } else {
            Tine.Tinebase.ExceptionHandler.handleRequestException(exception);
        }

        this.loadMask.hide();
    },
    
    /**
     * creates the relations panel, if relations are defined
     */
    initRelationsPanel: function() {
        if (! this.hideRelationsPanel && this.recordClass && this.recordClass.hasField('relations')) {
            // init relations panel before onRecordLoad
            if (! this.relationsPanel) {
                this.relationsPanel = new Tine.widgets.relation.GenericPickerGridPanel({ anchor: '100% 100%', editDialog: this });
                this.items.items.push(this.relationsPanel);
            }
        }
    },

    /**
     * create notes panel
     */
    initNotesPanel: function() {
        // This dialog is pretty generic but for some cases it's used in a differend way
        if(this.displayNotes == true) {
            this.items.items.push(new Tine.widgets.activities.ActivitiesGridPanel({
                anchor: '100% 100%',
                editDialog: this
            }));
        }
    },

    /**
     * creates attachments panel
     */
    initAttachmentsPanel: function() {
        if (! this.attachmentsPanel && ! this.hideAttachmentsPanel && this.recordClass && this.recordClass.hasField('attachments') && Tine.Tinebase.registry.get('filesystemAvailable')) {
            this.attachmentsPanel = new Tine.widgets.dialog.AttachmentsGridPanel({ anchor: '100% 100%', editDialog: this }); 
            this.items.items.push(this.attachmentsPanel);
        }
    }
});


/***/ }),
/* 187 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * tine 2.0 app grid panel widget
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.GridPanel
 * @extends     Ext.Panel
 * 
 * <p>Application Grid Panel</p>
 * <p>
 * </p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * 
 * @param       {Object} config
 * @constructor
 * Create a new GridPanel
 */
Tine.widgets.grid.GridPanel = function(config) {
    Ext.apply(this, config);

    this.gridConfig = this.gridConfig || {};
    this.defaultSortInfo = this.defaultSortInfo || {};
    this.defaultPaging = this.defaultPaging || {
        start: 0,
        limit: 50
    };

    // autogenerate stateId
    if (this.stateful !== false && ! this.stateId) {
        this.stateId = this.recordClass.getMeta('appName') + '-' + this.recordClass.getMeta('recordName') + '-GridPanel';
    }

    if (this.stateId && Ext.isTouchDevice) {
        this.stateId = this.stateId + '-Touch';
    }

    Tine.widgets.grid.GridPanel.superclass.constructor.call(this);
};

Ext.extend(Tine.widgets.grid.GridPanel, Ext.Panel, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     * instance of the app object (required)
     */
    app: null,
    /**
     * @cfg {Object} gridConfig
     * Config object for the Ext.grid.GridPanel
     */
    gridConfig: null,
    /**
     * @cfg {Array} customColumnData
     * Config Array for customizing column model columns
     */
    customColumnData: null,
    /**
     * @cfg {Ext.data.Record} recordClass
     * record definition class  (required)
     */
    recordClass: null,
    /**
     * @cfg {Ext.data.DataProxy} recordProxy
     */
    recordProxy: null,
    /**
     * @cfg {Tine.widgets.grid.FilterToolbar} filterToolbar
     */
    filterToolbar: null,
    /**
     * @cfg {Boolean} evalGrants
     * should grants of a grant-aware records be evaluated (defaults to true)
     */
    evalGrants: true,
    /**
     * @cfg {Boolean} filterSelectionDelete
     * is it allowed to deleteByFilter?
     */
    filterSelectionDelete: false,
    /**
     * @cfg {Object} defaultSortInfo
     */
    defaultSortInfo: null,
    /**
     * @cfg {Object} storeRemoteSort
     */
    storeRemoteSort: true,
    /**
     * @cfg {Boolean} usePagingToolbar 
     */
    usePagingToolbar: true,
    /**
     * @cfg {Object} defaultPaging 
     */
    defaultPaging: null,
    /**
     * @cfg {Object} pagingConfig
     * additional paging config
     */
    pagingConfig: null,
    /**
     * @cfg {Tine.widgets.grid.DetailsPanel} detailsPanel
     * if set, it becomes rendered in region south 
     */
    detailsPanel: null,
    /**
     * @cfg {Array} i18nDeleteQuestion 
     * spechialised strings for deleteQuestion
     */
    i18nDeleteQuestion: null,
    /**
     * @cfg {String} i18nAddRecordAction 
     * spechialised strings for add action button
     */
    i18nAddActionText: null,
    /**
     * @cfg {String} i18nEditRecordAction 
     * specialised strings for edit action button
     */
    i18nEditActionText: null,
    /**
     * @cfg {String} i18nMoveActionText
     * specialised strings for move action button
     */
    i18nMoveActionText: null,
    /**
     * @cfg {Array} i18nDeleteRecordAction 
     * specialised strings for delete action button
     */
    i18nDeleteActionText: null,
    /**
     * Tree panel referenced to this gridpanel
     */
    treePanel: null,

    /**
     * if this resides in a editDialog, this property holds it
     * if it is so, the grid can't save records itsef, just update
     * the editDialogs record property holding these records
     * 
     * @cfg {Tine.widgets.dialog.EditDialog} editDialog
     */
    editDialog: null,
    
    /**
     * if this resides in an editDialog, this property defines the 
     * property of the record of the editDialog, holding these records
     * 
     * @type {String} editDialogRecordProperty
     */
    editDialogRecordProperty: null,
    
    /**
     * config passed to edit dialog to open from this grid
     * 
     * @cfg {Object} editDialogConfig
     */
    editDialogConfig: null,

    /**
     * the edit dialog class to open from this grid
     * 
     * @cfg {String} editDialogClass
     */
    editDialogClass: null,

    /**
     * @cfg {String} i18nEmptyText 
     */
    i18nEmptyText: null,

    /**
     * @cfg {String} newRecordIcon 
     * icon for adding new records button
     */
    newRecordIcon: null,

    /**
     * @cfg {Boolean} i18nDeleteRecordAction 
     * update details panel if context menu is shown
     */
    updateDetailsPanelOnCtxMenu: true,

    /**
     * @cfg {Number} autoRefreshInterval (seconds)
     */
    autoRefreshInterval: 300,

    /**
     * @cfg {Boolean} hasFavoritesPanel 
     */
    hasFavoritesPanel: true,
    
    /**
     * @cfg {Boolean} hasQuickSearchFilterToolbarPlugin 
     */
    hasQuickSearchFilterToolbarPlugin: true,

    /**
     * disable 'select all pages' in paging toolbar
     * @cfg {Boolean} disableSelectAllPages
     */
    disableSelectAllPages: false,

    /**
     * enable if records should be multiple editable
     * @cfg {Boolean} multipleEdit
     */
    multipleEdit: false,
    
    /**
     * set if multiple edit requires special right
     * @type {String}  multipleEditRequiredRight
     */
    multipleEditRequiredRight: null,
    
    /**
     * enable if selection of 2 records should allow merging
     * @cfg {Boolean} duplicateResolvable
     */
    duplicateResolvable: false,
    
    /**
     * @property autoRefreshTask
     * @type Ext.util.DelayedTask
     */
    autoRefreshTask: null,

    /**
     * @type Boolean
     * @property updateOnSelectionChange
     */
    updateOnSelectionChange: true,

    /**
     * @type Boolean
     * @property copyEditAction
     * 
     * TODO activate this by default
     */
    copyEditAction: false,

    /**
     * @cfg {Boolean} moveAction
     * activate moveAction
     */
    moveAction: true,

    /**
     * disable delete confirmation by default
     *
     * @type Boolean
     * @property disableDeleteConfirmation
     */
    disableDeleteConfirmation: false,

    /**
     * @type Ext.Toolbar
     * @property actionToolbar
     */
    actionToolbar: null,

    /**
     * @type Ext.ux.grid.PagingToolbar
     * @property pagingToolbar
     */
    pagingToolbar: null,

    /**
     * @type Ext.Menu
     * @property contextMenu
     */
    contextMenu: null,

    /**
     * @property lastStoreTransactionId 
     * @type String
     */
    lastStoreTransactionId: null,

    /**
     * @property editBuffer  - array of ids of records edited since last explicit refresh
     * @type Array of ids
     */
    editBuffer: null,

    /**
     * @property deleteQueue - array of ids of records currently being deleted
     * @type Array of ids
     */
    deleteQueue: null,

    /**
     * configuration object of model from application starter
     * @type object
     */
    modelConfig: null,
    
    /**
     * group grid by this property
     * 
     * @type {String}
     */
    groupField: null,
    
    /**
     * header template for the grouping view, if needed
     * 
     * @type String
     */
    groupTextTpl: null,
    
    /**
     * @property selectionModel
     * @type Tine.widgets.grid.FilterSelectionModel
     */
    selectionModel: null,
    
    /**
     * add records from other applications using the split add button
     * - activated by default
     * 
     * @type Boolean
     * @property splitAddButton
     */
    splitAddButton: true,


    /**
     * do initial load (by loading default favorite) after render
     *
     * @type Boolean
     */
    initialLoadAfterRender: true,

    /**
     * add "create new record" button
     * 
     * @type Boolean
     * @property addButton
     */
    addButton: true,
    
    layout: 'border',
    border: false,
    stateful: true,

    stateIdSuffix: '',

    /**
     * Makes the grid readonly, this means, no dialogs, no actions, nothing else than selection, no dbclick
     */
    readOnly: false,

    /**
     * extend standard initComponent chain
     * 
     * @private
     */
    initComponent: function(){
        // init some translations
        this.i18nRecordName = this.i18nRecordName ? this.i18nRecordName : this.recordClass.getRecordName();
        this.i18nRecordsName = this.i18nRecordsName ? this.i18nRecordsName : this.recordClass.getRecordsName();
        this.i18nContainerName = this.i18nContainerName ? this.i18nContainerName : this.recordClass.getContainerName();
        this.i18nContainersName = this.i18nContainersName ? this.i18nContainersName : this.recordClass.getContainersName();
        
        this.i18nEmptyText = this.i18nEmptyText ||
            this.i18nContainersName
            ? String.format(i18n._("There could not be found any {0}. Please try to change your filter-criteria, view-options or the {1} you search in."), this.i18nRecordsName, (this.i18nContainersName ? this.i18nContainersName : this.i18nRecordsName))
            : String.format(i18n._("There could not be found any {0}. Please try to change your filter-criteria, view-options or change the module you search in."), this.i18nRecordsName);

        this.i18nEditActionText = this.i18nEditActionText ? this.i18nEditActionText : [String.format(i18n.ngettext('Edit {0}', 'Edit {0}', 1), this.i18nRecordName), String.format(i18n.ngettext('Edit {0}', 'Edit {0}', 2), this.i18nRecordsName)];

        this.editDialogConfig = this.editDialogConfig || {};
        this.editBuffer = [];
        this.deleteQueue = [];
        
        // init generic stuff
        if (this.modelConfig) {
            this.initGeneric();
        }
        
        this.initFilterPanel();

        this.bufferedLoadGridData = Function.createBuffered(this.loadGridData, 100, this);

        this.initStore();
        
        this.initGrid();

        // init actions
        this.actionUpdater = new Tine.widgets.ActionUpdater({
            recordClass: this.recordClass,
            evalGrants: this.evalGrants
        });

        if (!this.readOnly) {
            this.initActions();
        }

        this.initLayout();

        // for some reason IE looses split height when outer layout is layouted
        if (Ext.isIE6 || Ext.isIE7) {
            this.on('show', function() {
                if (this.layout.rendered && this.detailsPanel) {
                    var height = this.detailsPanel.getSize().height;
                    this.layout.south.split.setCurrentSize(height);
                }
            }, this);
        }

        if (this.detailsPanel) {
            this.on('resize', this.onContentResize, this, {buffer: 100});
        }

        if (this.listenMessageBus) {
            this.initMessageBus();
        }

        Tine.widgets.grid.GridPanel.superclass.initComponent.call(this);
    },

    initMessageBus: function() {
        postal.subscribe({
            channel: "recordchange",
            topic: [this.recordClass.getMeta('appName'), this.recordClass.getMeta('modelName'), '*'].join('.'),
            callback: this.onRecordChanges.createDelegate(this)
        });
    },

    /**
     * bus notified about record changes
     */
    onRecordChanges: function(data, e) {
        var existingRecord = this.store.getById(data.id);
        if (existingRecord && e.topic.match(/\.update/)) {
            // NOTE: local mode saves again (and again...)
            this.onUpdateRecord(JSON.stringify(data)/*, 'local'*/);
        } if (existingRecord && e.topic.match(/\.delete/)) {
            this.store.remove(existingRecord);
        } else {
            // we can't evaluate the filters on client side to check compute if this affects us
            // so just lets reload
            this.bufferedLoadGridData({
                removeStrategy: 'keepBuffered'
            });
        }
        // NOTE: grid doesn't update selections itself
        this.actionUpdater.updateActions(this.grid.getSelectionModel());
    },

    /**
     * returns canonical path part
     * @returns {string}
     */
    getCanonicalPathSegment: function () {
        var pathSegment = '';
        if (this.canonicalName) {
            // simple segment e.g. when used in a dialog
            pathSegment = this.canonicalName;
        } else if (this.recordClass) {
            // auto segment
            pathSegment = [this.recordClass.getMeta('modelName'), 'Grid'].join(Tine.Tinebase.CanonicalPath.separator);
        }

        return pathSegment;
    },

    onContentResize: function() {
        // make sure details panel doesn't hide grid
        if (this.detailsPanel) {
            var gridHeight = this.grid.getHeight(),
                detailsHeight = this.detailsPanel.getHeight();

            if (detailsHeight/2 > gridHeight) {
                var newDetailsHeight = this.getHeight() *.4;
                this.layout.south.panel.setHeight(newDetailsHeight);
                this.doLayout();
            }
        }
    },

    /**
     * initializes generic stuff when used with ModelConfiguration
     */
    initGeneric: function() {
        if (this.modelConfig) {
            
            Tine.log.debug('init generic gridpanel with config:');
            Tine.log.debug(this.modelConfig);

            // TODO move to uiConfig
            if (this.modelConfig.hasOwnProperty('multipleEdit') && (this.modelConfig.multipleEdit === true)) {
                this.multipleEdit = true;
                this.multipleEditRequiredRight = (this.modelConfig.hasOwnProperty('multipleEditRequiredRight'))
                    ? this.modelConfig.multipleEditRequiredRight
                    : null;
            }

            // TODO move to uiConfig
            if (this.modelConfig.hasOwnProperty('copyEditAction') && (this.modelConfig.copyEditAction === true)) {
                this.copyEditAction = true;
            }
        }
        
        // init generic columnModel
        this.initGenericColumnModel();
    },
    
    /**
     * initialises the filter panel 
     * 
     * @param {Object} config
     */
    initFilterPanel: function(config) {
        if (! this.filterToolbar && ! this.editDialog) {
            var filterModels = [];
            if (this.modelConfig) {
                filterModels = this.getCustomfieldFilters();
            } else if (Ext.isFunction(this.recordClass.getFilterModel)) {
                filterModels = this.recordClass.getFilterModel().concat(this.getCustomfieldFilters());
            }
            this.filterToolbar = new Tine.widgets.grid.FilterPanel(Ext.apply({}, {
                app: this.app,
                recordClass: this.recordClass,
                allowSaving: true,
                filterModels: filterModels,
                defaultFilter: this.recordClass.getMeta('defaultFilter') ? this.recordClass.getMeta('defaultFilter') : 'query',
                filters: this.defaultFilters || []
            }, config || {}));
            
            this.plugins = this.plugins || [];
            this.plugins.push(this.filterToolbar);
        }
    },

    /**
     * initializes the generic column model on auto bootstrap
     */
    initGenericColumnModel: function() {
        var _ = window.lodash;

        if (this.modelConfig) {
            var columns = [],
                appName = this.recordClass.getMeta('appName'),
                modelName = this.recordClass.getMeta('modelName');

            Ext.each(this.modelConfig.fieldKeys, function(key) {
                var config = Tine.widgets.grid.ColumnManager.get(appName, modelName, key, 'mainScreen');
                
                // @todo thats just a hotfix!
                if (['relations', 'customfields'].indexOf(key) !== -1) {
                    return;
                }
                
                if (config) {
                    columns.push(config);
                }
            }, this);
            
            if (this.modelConfig.hasCustomFields) {
                columns = columns.concat(this.getCustomfieldColumns());
            }

            if (_.find(columns, {dataIndex: 'attachments'})) {
                var attachCol = _.find(columns, {dataIndex: 'attachments'});
                _.remove(columns, attachCol);
                columns.unshift(attachCol);
            }

            _.forEachRight(_.filter(this.modelConfig.fields, {type: 'image'}), function(field) {
                var imgCol = _.find(columns, {dataIndex: field.key});
                if (imgCol) {
                    _.remove(columns, imgCol);
                    columns.unshift(imgCol);
                }
            });

            columns = columns.concat(this.getCustomColumns());
            columns = this.customizeColumns(columns);
            
            this.gridConfig.cm = new Ext.grid.ColumnModel({
                defaults: {
                    resizable: true
                },
                columns: columns
            });
        }
    },
    
    /**
     * template method to allow adding custom columns
     * 
     * @return {Array}
     */
    getCustomColumns: function() {
        return [];
    },

    /**
     * allows to customize columns
     *
     * @param columns Array
     * @returns {Array}
     */
    customizeColumns: function(columns) {
        if (this.customColumnData) {
            var _ = window.lodash;

            _.forEach(this.customColumnData, function(value) {
                var column = _.find(columns, { id: value.id });
                if (column) {
                    // apply custom cfg
                    column = Ext.applyIf(column, value);
                }
            });

            Tine.log.debug('Tine.widgets.grid.GridPanel.customizeColumns - applied custom column config:');
            Tine.log.debug(columns);
        }

        return columns;
    },
    
    /**
     * @private
     * 
     * NOTE: Order of items matters! Ext.Layout.Border.SplitRegion.layout() does not
     *       fence the rendering correctly, as such it's impotant, so have the ftb
     *       defined after all other layout items
     */
    initLayout: function() {
        this.items = [{
            ref: 'centerPanel',
            region: 'center',
            xtype: 'panel',
            layout: 'fit',
            border: false,
            tbar: this.pagingToolbar,
            items: this.grid
        }];


        // add detail panel
        if (this.detailsPanel) {

            // just in case it's a config only
            this.detailsPanel = Ext.ComponentMgr.create(this.detailsPanel);

            this.items.push({
                ref: 'southPanel',
                region: 'south',
                border: false,
                collapsible: true,
                collapseMode: 'mini',
                header: false,
                split: true,
                layout: 'fit',
                height: this.detailsPanel.defaultHeight ? this.detailsPanel.defaultHeight : 125,
                items: this.detailsPanel,
                canonicalName: 'DetailsPanel'

            });
            this.detailsPanel.doBind(this.grid);
        }

        // add filter toolbar
        if (this.filterToolbar) {
            this.items.push({
                region: 'north',
                border: false,
                autoScroll: true,
                items: this.filterToolbar,
                listeners: {
                    scope: this,
                    afterlayout: function(ct) {
                        ct.suspendEvents();
                        ct.setHeight(Math.min(120, this.filterToolbar.getHeight() + (ct.topToolbar ? ct.topToolbar.getHeight() : 0)));
                        ct.getEl().child('div[class^="x-panel-body"]', true).scrollTop = 1000000;
                        ct.ownerCt.layout.layout();
                        ct.resumeEvents();
                    }
                }
            });
        }

        if (this.ownActionToolbar) {
            this.items.push({
                region: 'north',
                height: 55,
                border: false,
                items: this.actionToolbar
            });
        }

    },

    gridPrintRenderer: function() {
        Ext.ux.Printer.print(this.getGrid());
    },
    
    /**
     * init actions with actionToolbar, contextMenu and actionUpdater
     * 
     * @private
     */
    initActions: function() {
        if (! this.newRecordIcon) {
            Ext.each((this.recordClass ? [this.recordClass.getMeta('appName') + this.recordClass.getMeta('modelName')] : []).concat([
                this.app.appName + 'IconCls',
                'ApplicationIconCls'
            ]), function(cls) {
                if (Ext.util.CSS.getRule('.' + cls)) {
                    this.newRecordIcon = cls;
                    return false;
                }
            }, this);
        }

        var services = Tine.Tinebase.registry.get('serviceMap').services;
        
        this.action_editInNewWindow = new Ext.Action({
            requiredGrant: 'readGrant',
            requiredMultipleGrant: 'editGrant',
            requiredMultipleRight: this.multipleEditRequiredRight,
            text: this.i18nEditActionText ? this.i18nEditActionText[0] : String.format(i18n._('Edit {0}'), this.i18nRecordName),
            singularText: this.i18nEditActionText ? this.i18nEditActionText[0] : String.format(i18n._('Edit {0}'), this.i18nRecordName),
            pluralText:  this.i18nEditActionText ? this.i18nEditActionText[1] : String.format(i18n.ngettext('Edit {0}', 'Edit {0}', 1), this.i18nRecordsName),
            disabled: true,
            translationObject: this.i18nEditActionText ? this.app.i18n : i18n,
            actionType: 'edit',
            handler: this.onEditInNewWindow.createDelegate(this, [{actionType: 'edit'}]),
            iconCls: 'action_edit',
            scope: this,
            allowMultiple: this.multipleEdit
        });

        this.action_editCopyInNewWindow = new Ext.Action({
            hidden: ! this.copyEditAction,
            requiredGrant: 'readGrant',
            text: String.format(i18n._('Copy {0}'), this.i18nRecordName),
            disabled: true,
            actionType: 'copy',
            handler: this.onEditInNewWindow.createDelegate(this, [{actionType: 'copy'}]),
            iconCls: 'action_editcopy',
            scope: this
        });

        this.action_addInNewWindow = (this.addButton) ? new Ext.Action({
            requiredGrant: 'addGrant',
            actionType: 'add',
            text: this.i18nAddActionText ? this.app.i18n._hidden(this.i18nAddActionText) : String.format(i18n._('Add {0}'), this.i18nRecordName),
            handler: this.onEditInNewWindow.createDelegate(this, [{actionType: 'add'}]),
            iconCls: 'action_add',
            scope: this
        }) : null;

        this.actions_print = new Ext.Action({
            requiredGrant: 'readGrant',
            text: i18n._('Print Page'),
            disabled: false,
            handler: this.gridPrintRenderer,
            iconCls: 'action_print',
            scope: this,
            allowMultiple: true
        });

        this.initDeleteAction(services);

        this.action_move = new Ext.Action({
            requiredGrant: 'editGrant',
            requiredMultipleGrant: 'editGrant',
            requiredMultipleRight: this.multipleEditRequiredRight,
            singularText: this.i18nMoveActionText ? this.i18nMoveActionText[0] : String.format(i18n.ngettext('Move {0}', 'Move {0}', 1), this.i18nRecordName),
            pluralText: this.i18nMoveActionText ? this.i18nMoveActionText[1] : String.format(i18n.ngettext('Move {0}', 'Move {0}', 1), this.i18nRecordsName),
            translationObject: this.i18nMoveActionText ? this.app.i18n : i18n,
            text: this.i18nMoveActionText ? this.i18nMoveActionText[0] : String.format(i18n.ngettext('Move {0}', 'Move {0}', 1), this.i18nRecordName),
            disabled: true,
            hidden: !this.moveAction || !this.recordClass.getMeta('containerProperty'),
            actionType: 'edit',
            handler: this.onMoveRecords,
            scope: this,
            iconCls: 'action_move',
            allowMultiple: this.multipleEdit
        });


        this.action_tagsMassAttach = new Tine.widgets.tags.TagsMassAttachAction({
            hidden:         ! this.recordClass.getField('tags'),
            selectionModel: this.grid.getSelectionModel(),
            recordClass:    this.recordClass,
            updateHandler:  this.loadGridData.createDelegate(this),
            app:            this.app
        });

        this.action_tagsMassDetach = new Tine.widgets.tags.TagsMassDetachAction({
            hidden:         ! this.recordClass.getField('tags'),
            selectionModel: this.grid.getSelectionModel(),
            recordClass:    this.recordClass,
            updateHandler:  this.loadGridData.createDelegate(this),
            app:            this.app
        });

        this.action_resolveDuplicates = new Ext.Action({
            requiredGrant: null,
            text: String.format(i18n._('Merge {0}'), this.i18nRecordsName),
                iconCls: 'action_resolveDuplicates',
                scope: this,
                handler: this.onResolveDuplicates,
                disabled: false,
                actionUpdater: function(action, grants, records) {
                    if (records && (records.length != 2)) action.setDisabled(true);
                    else action.setDisabled(false);
                }
        });

        this.initExports();
        this.initImports();

        // add actions to updater
        this.actionUpdater.addActions([
            this.action_addInNewWindow,
            this.action_editInNewWindow,
            this.action_move,
            this.action_editCopyInNewWindow,
            this.action_deleteRecord,
            this.action_tagsMassAttach,
            this.action_tagsMassDetach,
            this.action_resolveDuplicates
        ]);

        // init actionToolbar (needed for correct fitertoolbar init atm -> fixme)
        this.getActionToolbar();
    },

    initExports: function() {
        if (this.actions_export !== undefined) return;

        var _ = window.lodash,
            exportFunction = this.app.name + '.export' + this.recordClass.getMeta('modelName') + 's',
            additionalItems = [];

        // create items from available export formats (depricated -> use definitions)
        if (this.modelConfig && this.modelConfig['export']) {
            if (this.modelConfig['export'].supportedFormats) {
                Ext.each(this.modelConfig['export'].supportedFormats, function (format, i) {
                    additionalItems.unshift(new Tine.widgets.grid.ExportButton({
                        // TODO format toUpper
                        text: String.format(i18n._('Export as {0}'), format),
                        format: format,
                        iconCls: 'tinebase-action-export-' + format,
                        exportFunction: exportFunction,
                        order: i * 10,
                        gridPanel: this
                    }));
                }, this);
            }
        }

        // exports from export definitions
        this.actions_export = Tine.widgets.exportAction.getExportButton(this.recordClass, {
            exportFunction: exportFunction,
            gridPanel: this
        }, Tine.widgets.exportAction.SCOPE_MULTI, additionalItems);

        if (this.actions_export) {
            this.actionUpdater.addActions([this.actions_export]);
        }
    },

    initImports: function() {
        if (this.actions_import !== undefined) return;


        if (
                // create items from available import formats (depricated -> use definitions)
                this.modelConfig && this.modelConfig['import']
                // imports from import definitions
                || Tine.widgets.importAction.getImports(this.recordClass).length) {

            this.actions_import = new Ext.Action({
                requiredGrant: 'addGrant',
                text: i18n._('Import items'),
                disabled: false,
                handler: this.onImport,
                iconCls: 'action_import',
                scope: this,
                allowMultiple: true
            });

            this.actionUpdater.addActions([this.actions_import]);
        }

    },

    /**
     * import inventory items
     *
     * @param {Button} btn
     */
    onImport: function(btn) {
        var treePanel = this.treePanel || this.app.getMainScreen().getWestPanel().getContainerTreePanel(),
            _ = window.lodash;

        var container = _.get(this.modelConfig, 'import.defaultImportContainerRegistryKey', false);

        if (container) {
            container = treePanel.getDefaultContainer(container);
        }

        Tine.widgets.dialog.ImportDialog.openWindow({
            appName: this.app.name,
            modelName: this.recordClass.getMeta('modelName'),
            defaultImportContainer: container,
            listeners: {
                scope: this,
                'finish': function() {
                    this.loadGridData({
                        preserveCursor:     false,
                        preserveSelection:  false,
                        preserveScroller:   false,
                        removeStrategy:     'default'
                    });
                }
            }
        });
    },

    /**
     * initializes the delete action
     * 
     * @param {Object} services the rpc service map from the registry
     */
    initDeleteAction: function(services) {
        // note: unprecise plural form here, but this is hard to change
        this.action_deleteRecord = new Ext.Action({
            requiredGrant: 'deleteGrant',
            allowMultiple: true,
            singularText: this.i18nDeleteActionText ? this.i18nDeleteActionText[0] : String.format(i18n.ngettext('Delete {0}', 'Delete {0}', 1), this.i18nRecordName),
            pluralText: this.i18nDeleteActionText ? this.i18nDeleteActionText[1] : String.format(i18n.ngettext('Delete {0}', 'Delete {0}', 1), this.i18nRecordsName),
            translationObject: this.i18nDeleteActionText ? this.app.i18n : i18n,
            text: this.i18nDeleteActionText ? this.i18nDeleteActionText[0] : String.format(i18n.ngettext('Delete {0}', 'Delete {0}', 1), this.i18nRecordName),
            handler: this.onDeleteRecords,
            disabled: true,
            iconCls: 'action_delete',
            scope: this
        });
        // if nested in a editDialog (dependent record), the service won't exist
        if (! this.editDialog) {
            this.disableDeleteActionCheckServiceMap(services);
        }
    },
    
    /**
     * disable delete action if no delete method was found in serviceMap
     * 
     * @param {Object} services the rpc service map from the registry
     * 
     * TODO this should be configurable as not all grids use remote delete
     */
    disableDeleteActionCheckServiceMap: function(services) {
        if (services) {
            var serviceKey = this.app.name + '.delete' + this.recordClass.getMeta('modelName') + 's';
            if (! services.hasOwnProperty(serviceKey)) {
                this.action_deleteRecord.setDisabled(1);
                this.action_deleteRecord.initialConfig.actionUpdater = function(action) {
                    Tine.log.debug("disable delete action because no delete method was found in serviceMap");
                    action.setDisabled(1);
                }
            }
        }
    },

    /**
     * init store
     * @private
     */
    initStore: function() {
        if (this.store) {
            // store is already initialized
            return;
        }

        if (this.recordProxy) {
            if (! this.defaultSortInfo.field) {
                if (this.modelConfig && this.modelConfig.defaultSortInfo) {
                    this.defaultSortInfo = this.modelConfig.defaultSortInfo;
                } else if (this.recordClass) {
                    var titleProperty = this.recordClass.getMeta('titleProperty'),
                        defaultSortField = Ext.isArray(titleProperty) ? titleProperty[1][0] : titleProperty;
                    this.defaultSortInfo = this.recordClass.hasField(titleProperty) ? {
                        field: defaultSortField,
                        order: 'DESC'
                    } : null;
                }
            }

            var storeClass = this.groupField ? Ext.data.GroupingStore : Ext.data.Store;
            this.store = new storeClass({
                fields: this.recordClass,
                proxy: this.recordProxy,
                reader: this.recordProxy.getReader(),
                remoteSort: this.storeRemoteSort,
                sortInfo: this.defaultSortInfo,
                groupField: 'month',
                listeners: {
                    scope: this,
                    'add': this.onStoreAdd,
                    'remove': this.onStoreRemove,
                    'update': this.onStoreUpdate,
                    'beforeload': this.onStoreBeforeload,
                    'load': this.onStoreLoad,
                    'beforeloadrecords': this.onStoreBeforeLoadRecords,
                    'loadexception': this.onStoreLoadException
                }
            });
        } else {
            this.store = new Tine.Tinebase.data.RecordStore({
                recordClass: this.recordClass
            });
        }

        // init autoRefresh
        this.autoRefreshTask = new Ext.util.DelayedTask(this.loadGridData, this, [{
            removeStrategy: 'keepBuffered',
            autoRefresh: true
        }]);
    },

    /**
     * returns view row class
     */
    getViewRowClass: function(record, index, rowParams, store) {
        var noLongerInFilter = record.not_in_filter;

        var className = '';
        if (noLongerInFilter) {
            className += 'tine-grid-row-nolongerinfilter';
        }
        return className;
    },    

    /**
     * new entry event -> add new record to store
     * 
     * @param {Object} recordData
     * @return {Boolean}
     */
    onStoreNewEntry: function(recordData) {
        var initialData = null;
        if (Ext.isFunction(this.recordClass.getDefaultData)) {
            initialData = Ext.apply(this.recordClass.getDefaultData(), recordData);
        } else {
            initialData = recordData;
        }
        var record = new this.recordClass(initialData);
        this.store.insert(0 , [record]);

        if (this.usePagingToolbar) {
            this.pagingToolbar.refresh.disable();
        }
        this.recordProxy.saveRecord(record, {
            scope: this,
            success: function(newRecord) {
                this.store.suspendEvents();
                this.store.remove(record);
                this.store.insert(0 , [newRecord]);
                this.store.resumeEvents();

                this.addToEditBuffer(newRecord);

                this.loadGridData({
                    removeStrategy: 'keepBuffered'
                });
            }
        });

        return true;
    },

    /**
     * header is clicked
     * 
     * @param {Object} grid
     * @param {Number} colIdx
     * @param {Event} e
     * @return {Boolean}
     */
    onHeaderClick: function(grid, colIdx, e) {

        Ext.apply(this.store.lastOptions, {
            preserveCursor:     true,
            preserveSelection:  true, 
            preserveScroller:   true, 
            removeStrategy:     'default'
        });
    },

    /**
     * called when Records have been added to the Store
     */
    onStoreAdd: function(store, records, index) {
        this.store.totalLength += records.length;
        if (this.pagingToolbar) {
            this.pagingToolbar.updateInfo();
        }
    },
    
    /**
     * called when a Record has been removed from the Store
     */
    onStoreRemove: function(store, record, index) {
        this.store.totalLength--;
        if (this.pagingToolbar) {
            this.pagingToolbar.updateInfo();
        }
    },
    
    /**
     * called when the store gets updated, e.g. from editgrid
     * 
     * @param {Ext.data.store} store
     * @param {Tine.Tinebase.data.Record} record
     * @param {String} operation
     */
    onStoreUpdate: function(store, record, operation) {
        switch (operation) {
            case Ext.data.Record.EDIT:
                this.addToEditBuffer(record);
                
                if (this.usePagingToolbar) {
                    this.pagingToolbar.refresh.disable();
                }
                // don't save these records. Add them to the parents' record store
                if (this.editDialog) {
                    var items = [];
                    store.each(function(item) {
                        items.push(item.data);
                    });
                    
                    this.editDialog.record.set(this.editDialogRecordProperty, items);
                    this.editDialog.fireEvent('updateDependent');
                } else if (this.recordProxy) {
                    this.recordProxy.saveRecord(record, {
                        scope: this,
                        success: function(updatedRecord) {
                            store.commitChanges();
    
                            // update record in store to prevent concurrency problems
                            record.data = updatedRecord.data;
    
                            this.loadGridData({
                                removeStrategy: 'keepBuffered'
                            });
                        }
                    });
                    break;
                }
            case Ext.data.Record.COMMIT:
                //nothing to do, as we need to reload the store anyway.
                break;
        }
    },

    /**
     * called before store queries for data
     */
    onStoreBeforeload: function(store, options) {

        // define a transaction
        this.lastStoreTransactionId = options.transactionId = Ext.id();

        options.params = options.params || {};
        // always start with an empty filter set!
        // this is important for paging and sort header!
        options.params.filter = [];

        if (! options.removeStrategy || options.removeStrategy !== 'keepBuffered') {
            this.editBuffer = [];
        }

//        options.preserveSelection = options.hasOwnProperty('preserveSelection') ? options.preserveSelection : true;
//        options.preserveScroller = options.hasOwnProperty('preserveScroller') ? options.preserveScroller : true;

        // fix nasty paging tb
        Ext.applyIf(options.params, this.defaultPaging);
    },

    /**
     * called after a new set of Records has been loaded
     * 
     * @param  {Ext.data.Store} this.store
     * @param  {Array}          loaded records
     * @param  {Array}          load options
     * @return {Void}
     */
    onStoreLoad: function(store, records, options) {
        // we always focus the first row so that keynav starts in the grid
        // this resets scroller ;-( -> need a better solution
//        if (this.store.getCount() > 0) {
//            this.grid.getView().focusRow(0);
//        }

        // restore selection
        if (Ext.isArray(options.preserveSelection)) {
            Ext.each(options.preserveSelection, function(record) {
                var row = this.store.indexOfId(record.id);
                if (row >= 0) {
                    this.grid.getSelectionModel().selectRow(row, true);
                }
            }, this);
        }

        // restore scroller
        if (Ext.isNumber(options.preserveScroller)) {
            this.grid.getView().scroller.dom.scrollTop = options.preserveScroller;
        }

        // reset autoRefresh
        if (window.isMainWindow && this.autoRefreshInterval) {
            this.autoRefreshTask.delay(this.autoRefreshInterval * 1000);
        }
    },

    /**
     * on store load exception
     * 
     * @param {Tine.Tinebase.data.RecordProxy} proxy
     * @param {String} type
     * @param {Object} error
     * @param {Object} options
     */
    onStoreLoadException: function(proxy, type, error, options) {

        // reset autoRefresh
        if (window.isMainWindow && this.autoRefreshInterval) {
            this.autoRefreshTask.delay(this.autoRefreshInterval * 5000);
        }

        if (this.usePagingToolbar && this.pagingToolbar.refresh) {
            this.pagingToolbar.refresh.enable();
        }

        if (! options.autoRefresh) {
            proxy.handleRequestException(error);
        } else {
            Tine.log.debug('Tine.widgets.grid.GridPanel::onStoreLoadException -> auto refresh failed.');
        }
    },

    /**
     * onStoreBeforeLoadRecords
     * 
     * @param {Object} o
     * @param {Object} options
     * @param {Boolean} success
     * @param {Ext.data.Store} store
     */
    onStoreBeforeLoadRecords: function(o, options, success, store) {

        if (this.lastStoreTransactionId && options.transactionId && this.lastStoreTransactionId !== options.transactionId) {
            Tine.log.debug('onStoreBeforeLoadRecords - cancelling old transaction request.');
            return false;
        }

        // save selection -> will be applied onLoad
        if (options.preserveSelection) {
            options.preserveSelection = this.grid.getSelectionModel().getSelections();
        }

        // save scroller -> will be applied onLoad
        if (options.preserveScroller && this.grid.getView().scroller && this.grid.getView().scroller.dom) options.preserveScroller = this.grid.getView().scroller.dom.scrollTop;

        // apply removeStrategy
        if (! options.removeStrategy || options.removeStrategy === 'default') {
            return true;
        }

        var records = [],
            recordsIds = [],
            recordToLoadCollection = new Ext.util.MixedCollection();

        // fill new collection
        Ext.each(o.records, function(record) {
            recordToLoadCollection.add(record.id, record);
        });

        // assemble update & keep
        this.store.each(function(currentRecord) {
            var recordToLoad = recordToLoadCollection.get(currentRecord.id);
            if (recordToLoad) {
                // we replace records that are the same, because otherwise this would not work for local changes
                if (recordToLoad.isObsoletedBy(currentRecord)) {
                    records.push(currentRecord);
                    recordsIds.push(currentRecord.id);
                } else {
                    records.push(recordToLoad);
                    recordsIds.push(recordToLoad.id);
                }
            } else if (options.removeStrategy === 'keepAll' || (options.removeStrategy === 'keepBuffered' && this.editBuffer.indexOf(currentRecord.id) >= 0)) {
                var copiedRecord = currentRecord.copy();
                copiedRecord.not_in_filter = true;
                records.push(copiedRecord);
                recordsIds.push(currentRecord.id);
            }
        }, this);
        
        // assemble adds
        recordToLoadCollection.each(function(record, idx) {
            if (recordsIds.indexOf(record.id) == -1 && this.deleteQueue.indexOf(record.id) == -1) {
                var lastRecord = recordToLoadCollection.itemAt(idx-1);
                var lastRecordIdx = lastRecord ? recordsIds.indexOf(lastRecord.id) : -1;
                records.splice(lastRecordIdx+1, 0, record);
                recordsIds.splice(lastRecordIdx+1, 0, record.id);
            }
        }, this);

        o.records = records;
        
        // hide current records from store.loadRecords()
        // @see 0008210: email grid: set flag does not work sometimes
        this.store.clearData();
    },

    /**
     * perform the initial load of grid data
     */
    initialLoad: function() {
        var defaultFavorite = Tine.widgets.persistentfilter.model.PersistentFilter.getDefaultFavorite(
                this.app.appName, this.recordClass.prototype.modelName
            ),
            favoritesPanel  = this.app.getMainScreen()
            && typeof this.app.getMainScreen().getWestPanel === 'function'
            && typeof this.app.getMainScreen().getWestPanel().getFavoritesPanel === 'function'
            && this.hasFavoritesPanel
                ? this.app.getMainScreen().getWestPanel().getFavoritesPanel()
                : null;

        if (defaultFavorite && favoritesPanel) {
            favoritesPanel.selectFilter(defaultFavorite);
        } else {
            if (! this.editDialog) {
                this.store.load.defer(10, this.store, [ typeof this.autoLoad == 'object' ? this.autoLoad : undefined]);
            } else {
                // editDialog exists, so get the records from there.
                var items = this.editDialog.record.get(this.editDialogRecordProperty);
                if (Ext.isArray(items)) {
                    Ext.each(items, function(item) {
                        var record = this.recordProxy.recordReader({responseText: Ext.encode(item)});
                        this.store.addSorted(record);
                    }, this);
                }
            }
        }

        if (this.usePagingToolbar && this.recordProxy) {
            this.pagingToolbar.refresh.disable.defer(10, this.pagingToolbar.refresh);
        }
    },

    /**
     * init ext grid panel
     * @private
     */
    initGrid: function() {
        var preferences = Tine.Tinebase.registry.get('preferences');

        if (preferences) {
            this.gridConfig = Ext.applyIf(this.gridConfig || {}, {
                stripeRows: preferences.get('gridStripeRows') ? preferences.get('gridStripeRows') : false,
                loadMask: preferences.get('gridLoadMask') ? preferences.get('gridLoadMask') : false
            });
            
            // added paging number of result read from settings
            if (preferences.get('pageSize') != null) {
                this.defaultPaging = {
                    start: 0,
                    limit: parseInt(preferences.get('pageSize'), 10)
                };
            }
        }

        // generic empty text
        this.i18nEmptyText = i18n.gettext('No data to display');
        
        // init sel model
        this.selectionModel = new Tine.widgets.grid.FilterSelectionModel({
            store: this.store,
            gridPanel: this
        });
        this.selectionModel.on('selectionchange', function(sm) {
            this.actionUpdater.updateActions(sm);

            this.ctxNode = this.selectionModel.getSelections();
            if (this.updateOnSelectionChange && this.detailsPanel) {
                this.detailsPanel.onDetailsUpdate(sm);
            }
        }, this);

        if (this.usePagingToolbar) {
            this.pagingToolbar = new Ext.ux.grid.PagingToolbar(Ext.apply({
                pageSize: this.defaultPaging && this.defaultPaging.limit ? this.defaultPaging.limit : 50,
                store: this.store,
                displayInfo: true,
                displayMsg: i18n._('Displaying records {0} - {1} of {2}').replace(/records/, this.i18nRecordsName),
                emptyMsg: String.format(i18n._("No {0} to display"), this.i18nRecordsName),
                displaySelectionHelper: true,
                sm: this.selectionModel,
                disableSelectAllPages: this.disableSelectAllPages,
                nested: this.editDialog ? true : false
            }, this.pagingConfig));
            // mark next grid refresh as paging-refresh
            this.pagingToolbar.on('beforechange', function() {
                this.grid.getView().isPagingRefresh = true;
            }, this);
        }

        // which grid to use?
        // TODO find a better way to configure quickadd grid
        var Grid = null;
        if (this.gridConfig.quickaddMandatory) {
            Grid = Ext.ux.grid.QuickaddGridPanel;
            this.gridConfig.validate = true;
        } else {
            Grid = (this.gridConfig.gridType || Ext.grid.GridPanel);
        }

        this.gridConfig.store = this.store;

        // activate grid header menu for column selection
        this.gridConfig.plugins = this.gridConfig.plugins ? this.gridConfig.plugins : [];
        this.gridConfig.plugins.push(new Ext.ux.grid.GridViewMenuPlugin({}));
        this.gridConfig.enableHdMenu = false;

        if (this.stateful) {
            this.gridConfig.stateful = true;
            this.gridConfig.stateId  = this.stateId + '-Grid' + this.stateIdSuffix;
        }

        this.grid = new Grid(Ext.applyIf(this.gridConfig, {
            border: false,
            store: this.store,
            sm: this.selectionModel,
            parentScope: this,
            view: this.createView(),
            recordClass: this.recordClass
        }));

        // init various grid / sm listeners
        this.grid.on('keydown',     this.onKeyDown,         this);
        this.grid.on('rowclick',    this.onRowClick,        this);
        this.grid.on('rowdblclick', this.onRowDblClick,     this);
        this.grid.on('newentry',    this.onStoreNewEntry,   this);
        this.grid.on('headerclick', this.onHeaderClick,   this);

        this.grid.on('rowcontextmenu', this.onRowContextMenu, this);

    },

    /**
     * creates and returns the view for the grid
     * 
     * @return {Ext.grid.GridView}
     */
    createView: function() {
        // init view
        
        if (this.groupField && ! this.groupTextTpl) {
            this.groupTextTpl = '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "' + i18n._("Records") + '" : "' + i18n._("Record") + '"]})';
        }
        
        var viewClass = this.groupField ? Ext.grid.GroupingView : Ext.grid.GridView;
        var view =  new viewClass({
            getRowClass: this.getViewRowClass.bind(this),
            autoFill: true,
            forceFit:true,
            ignoreAdd: true,
            emptyText: this.i18nEmptyText,
            groupTextTpl: this.groupTextTpl,
            onLoad: Ext.grid.GridView.prototype.onLoad.createInterceptor(function() {
                if (this.grid.getView().isPagingRefresh) {
                    this.grid.getView().isPagingRefresh = false;
                    return true;
                }

                return false;
            }, this)
        });
        
        return view;
    },
    
    /**
     * executed after outer panel rendering process
     */
    afterRender: function() {
        Tine.widgets.grid.GridPanel.superclass.afterRender.apply(this, arguments);
        if (this.initialLoadAfterRender) {
            this.initialLoad();
        }
    },

    /**
     * trigger store load with grid related options
     * 
     * TODO rethink -> preserveCursor and preserveSelection might conflict on page breaks!
     * TODO don't reload details panel when selection is preserved
     * 
     * @param {Object} options
     */
    loadGridData: function(options) {
        var options = options || {};

        Ext.applyIf(options, {
            callback:           Ext.emptyFn,
            scope:              this,
            params:             {},

            preserveCursor:     true, 
            preserveSelection:  true, 
            preserveScroller:   true, 
            removeStrategy:     'default'
        });

        if (options.preserveCursor && this.usePagingToolbar) {
            options.params.start = this.pagingToolbar.cursor;
        }

        this.store.load(options);
    },

    /**
     * get action toolbar
     * 
     * @return {Ext.Toolbar}
     */
    getActionToolbar: function() {
        if (! this.actionToolbar) {
            var additionalItems = this.getActionToolbarItems();

            var items = [];
            
            if (this.action_addInNewWindow) {
                if (this.splitAddButton) {
                    items.push(Ext.apply(
                        new Ext.SplitButton(this.action_addInNewWindow), {
                            scale: 'medium',
                            rowspan: 2,
                            iconAlign: 'top',
                            arrowAlign:'right',
                            menu: new Ext.menu.Menu({
                                items: [],
                                plugins: [{
                                    ptype: 'ux.itemregistry',
                                    key:   'Tine.widgets.grid.GridPanel.addButton'
                                }]
                            })
                        })
                    );
                } else {
                    items.push(Ext.apply(
                        new Ext.Button(this.action_addInNewWindow), {
                            scale: 'medium',
                            rowspan: 2,
                            iconAlign: 'top'
                        })
                    );
                }
            }
            
            if (this.action_editInNewWindow) {
                items.push(Ext.apply(
                    new Ext.Button(this.action_editInNewWindow), {
                        scale: 'medium',
                        rowspan: 2,
                        iconAlign: 'top'
                    })
                );
            }
            
            if (this.action_deleteRecord) {
                items.push(Ext.apply(
                    new Ext.Button(this.action_deleteRecord), {
                        scale: 'medium',
                        rowspan: 2,
                        iconAlign: 'top'
                    })
                );
            }
            
            if (this.actions_print) {
                items.push(Ext.apply(
                    new (this.actions_print.initialConfig && this.actions_print.initialConfig.menu ? Ext.SplitButton : Ext.Button) (this.actions_print), {
                        scale: 'medium',
                        rowspan: 2,
                        iconAlign: 'top'
                    })
                );
            }

            var importExportButtons = [];

            if (this.actions_export) {
                importExportButtons.push(Ext.apply(new Ext.Button(this.actions_export), {
                    scale: 'small',
                    rowspan: 1,
                    iconAlign: 'left'
                }));
            }
            if (this.actions_import) {
                importExportButtons.push(Ext.apply(new Ext.Button(this.actions_import), {
                    scale: 'small',
                    rowspan: 1,
                    iconAlign: 'left'
                }));
            }

            if (importExportButtons.length > 0) {
                items.push({
                    xtype: 'buttongroup',
                    columns: 1,
                    frame: false,
                    items: importExportButtons
                });
            }

            this.actionToolbar = new Ext.Toolbar({
                canonicalName: [this.recordClass.getMeta('modelName'), 'ActionToolbar'].join(Tine.Tinebase.CanonicalPath.separator),
                items: [{
                    xtype: 'buttongroup',
                    layout: 'toolbar',
                    buttonAlign: 'left',
                    enableOverflow: true,
                    plugins: [{
                        ptype: 'ux.itemregistry',
                        key:   this.app.appName + '-' + this.recordClass.prototype.modelName + '-GridPanel-ActionToolbar-leftbtngrp'
                    }],
                    items: items.concat(Ext.isArray(additionalItems) ? additionalItems : [])
                }].concat(Ext.isArray(additionalItems) ? [] : [additionalItems])
            });

            this.actionToolbar.on('resize', this.onActionToolbarResize, this, {buffer: 250});
            this.actionToolbar.on('show', this.onActionToolbarResize, this);

            if (this.filterToolbar && typeof this.filterToolbar.getQuickFilterField == 'function') {
                this.actionToolbar.add('->', this.filterToolbar.getQuickFilterField());
            } 
        }

        return this.actionToolbar;
    },

    onActionToolbarResize: function(tb) {
        if (! tb.rendered) return;
        var actionGrp = tb.items.get(0),
            availableWidth = tb.getBox()['width'] - 5,
            maxNeededWidth = Ext.layout.ToolbarLayout.prototype.triggerWidth + 10;

        tb.items.each(function(c, idx) {
            if (idx > 0 && !c.isFill) {
                availableWidth -= c.getPositionEl().dom.parentNode.offsetWidth;
            }
        }, this);

        actionGrp.items.each(function(c) {
            maxNeededWidth += Ext.layout.ToolbarLayout.prototype.getItemWidth(c);
        });

        actionGrp.setWidth(Math.min(availableWidth, maxNeededWidth));

    },

    /**
     * template fn for subclasses to add custom items to action toolbar
     * 
     * @return {Array/Object}
     */
    getActionToolbarItems: function() {
        var items = this.actionToolbarItems || [];

        if (! Ext.isEmpty(items)) {
            // legacy handling! subclasses should register all actions when initializing actions
            this.actionUpdater.addActions(items);
        }

        return items;
    },

    /**
     * returns rows context menu
     * 
     * @param {Ext.grid.GridPanel} grid
     * @param {Number} row
     * @param {Ext.EventObject} e
     * @return {Ext.menu.Menu}
     */
    getContextMenu: function(grid, row, e) {

        if (! this.contextMenu) {
            var items = [];
            
            if (this.action_addInNewWindow) items.push(this.action_addInNewWindow);
            if (this.action_editInNewWindow) items.push(this.action_editInNewWindow);
            if (this.action_editCopyInNewWindow) items.push(this.action_editCopyInNewWindow);
            if (this.action_move) items.push(this.action_move);
            if (this.action_deleteRecord) items.push(this.action_deleteRecord);

            if (this.duplicateResolvable) {
                items.push(this.action_resolveDuplicates);
            }

            if (this.actions_export) {
                items.push('-', this.actions_export);
            }

            if (this.action_tagsMassAttach && ! this.action_tagsMassAttach.hidden) {
                items.push('-', this.action_tagsMassAttach, this.action_tagsMassDetach);
            }

            // lookup additional items
            items = items.concat(this.getContextMenuItems());

            // New record of another app
            this.newRecordMenu = new Ext.menu.Menu({
                items: [],
                plugins: [{
                    ptype: 'ux.itemregistry',
                    key:   this.app.appName + '-' + this.recordClass.prototype.modelName + '-GridPanel-ContextMenu-New'
                }]
            });

            this.newRecordAction = new Ext.Action({
                text: i18n._('New...'),
                hidden: ! this.newRecordMenu.items.length,
                iconCls: this.app.getIconCls(),
                scope: this,
                menu: this.newRecordMenu
            });

            items.push(this.newRecordAction);

            // Add to record of another app            
            this.addToRecordMenu = new Ext.menu.Menu({
                items: [],
                plugins: [{
                    ptype: 'ux.itemregistry',
                    key:   this.app.appName + '-' + this.recordClass.prototype.modelName + '-GridPanel-ContextMenu-Add'
                }]
            });

            this.addToRecordAction = new Ext.Action({
                text: i18n._('Add to...'),
                hidden: ! this.addToRecordMenu.items.length,
                iconCls: this.app.getIconCls(),
                scope: this,
                menu: this.addToRecordMenu
            });

            items.push(this.addToRecordAction);

            this.contextMenu = new Ext.menu.Menu({
                items: items,
                plugins: [{
                    ptype: 'ux.itemregistry',
                    key:   this.app.appName + '-' + this.recordClass.prototype.modelName + '-GridPanel-ContextMenu'
                }, {
                    ptype: 'ux.itemregistry',
                    key:   'Tinebase-MainContextMenu'
                }]
            });
        }

        return this.contextMenu;
    },

    /**
     * template fn for subclasses to add custom items to context menu
     * 
     * @return {Array}
     */
    getContextMenuItems: function() {
        var items = this.contextMenuItems || [];

        if (! Ext.isEmpty(items)) {
            // legacy handling! subclasses should register all actions when initializing actions
            this.actionUpdater.addActions(items);
        }

        return items;
    },

    /**
     * get modlog columns
     * 
     * shouldn' be used anymore
     * @TODO: use applicationstarter and modelconfiguration
     * 
     * @deprecated
     * @return {Array}
     */
    getModlogColumns: function() {
        var result = [
            { id: 'creation_time',      header: i18n._('Creation Time'),         dataIndex: 'creation_time',         renderer: Tine.Tinebase.common.dateRenderer,        hidden: true, sortable: true },
            { id: 'created_by',         header: i18n._('Created By'),            dataIndex: 'created_by',            renderer: Tine.Tinebase.common.usernameRenderer,    hidden: true, sortable: true },
            { id: 'last_modified_time', header: i18n._('Last Modified Time'),    dataIndex: 'last_modified_time',    renderer: Tine.Tinebase.common.dateRenderer,        hidden: true, sortable: true },
            { id: 'last_modified_by',   header: i18n._('Last Modified By'),      dataIndex: 'last_modified_by',      renderer: Tine.Tinebase.common.usernameRenderer,    hidden: true, sortable: true }
        ];

        return result;
    },

    /**
     * get custom field columns for column model
     * 
     * @return {Array}
     */
    getCustomfieldColumns: function() {
        var modelName = this.recordClass.getMeta('appName') + '_Model_' + this.recordClass.getMeta('modelName'),
            cfConfigs = Tine.widgets.customfields.ConfigManager.getConfigs(this.app, modelName),
            result = [];

        Ext.each(cfConfigs, function(cfConfig) {
            result.push({
                id: cfConfig.id,
                header: cfConfig.get('definition').label,
                dataIndex: 'customfields',
                renderer: Tine.widgets.customfields.Renderer.get(this.app, cfConfig),
                sortable: false,
                hidden: true
            });
        }, this);

        return result;
    },

    /**
     * get custom field filter for filter toolbar
     * 
     * @return {Array}
     */
    getCustomfieldFilters: function() {
        var modelName = this.recordClass.getMeta('appName') + '_Model_' + this.recordClass.getMeta('modelName'),
            cfConfigs = Tine.widgets.customfields.ConfigManager.getConfigs(this.app, modelName),
            result = [];
        Ext.each(cfConfigs, function(cfConfig) {
            var cfDefinition = cfConfig.get('definition');
            switch (cfDefinition.type) {
                case 'record':
                    result.push({
                        filtertype: 'foreignrecord',
                        label: cfDefinition.label,
                        app: this.app,
                        ownRecordClass: this.recordClass,
                        foreignRecordClass: eval(cfDefinition.recordConfig.value.records),
                        linkType: 'foreignId',
                        ownField: 'customfield:' + cfConfig.id
                    });
                    break;
                case 'keyfield':
                    // @TODO implement me
                    break;
                default:
                    result.push({filtertype: 'tinebase.customfield', app: this.app, cfConfig: cfConfig});
                    break;
            }
        }, this);

        return result;
    },

    /**
     * returns filter toolbar
     * @private
     * @deprecated
     * 
     * TODO this seems to be legacy code that is only used in some apps (Calendar, Felamimail, ...)
     *   -> should be removed
     *   -> we use initFilterPanel() now
     */
    getFilterToolbar: function(config) {
        config = config || {};
        return new Tine.widgets.grid.FilterPanel(Ext.apply(config, {
            app: this.app,
            recordClass: this.recordClass,
            filterModels: this.recordClass.getFilterModel().concat(this.getCustomfieldFilters()),
            defaultFilter: 'query',
            filters: this.defaultFilters || []
        }));
    },

    /**
     * return store from grid
     * 
     * @return {Ext.data.Store}
     */
    getStore: function() {
        return this.grid.getStore();
    },

    /**
     * return view from grid
     * 
     * @return {Ext.grid.GridView}
     */
    getView: function() {
        return this.grid.getView();
    },

    /**
     * return grid
     * 
     * @return {Ext.ux.grid.QuickaddGridPanel|Ext.grid.GridPanel}
     */
    getGrid: function() {
        return this.grid;
    },

    /**
     * key down handler
     * @private
     */
    onKeyDown: function(e){
        if (e.ctrlKey) {
            switch (e.getKey()) {
                case e.A:
                    // select only current page
                    this.grid.getSelectionModel().selectAll(true);
                    e.preventDefault();
                    break;
                case e.E:
                    if (this.action_editInNewWindow && !this.action_editInNewWindow.isDisabled()) {
                        this.onEditInNewWindow.call(this, {
                            actionType: 'edit'
                        });
                        e.preventDefault();
                    }
                    break;
                case e.N:
                    if (this.action_addInNewWindow && !this.action_addInNewWindow.isDisabled()) {
                        this.onEditInNewWindow.call(this, {
                            actionType: 'add'
                        });
                        e.preventDefault();
                    }
                    break;
                case e.F:
                    if (this.filterToolbar && this.hasQuickSearchFilterToolbarPlugin) {
                        e.preventDefault();
                        this.filterToolbar.getQuickFilterPlugin().quickFilter.focus();
                    }
                    break;
            }
        } else {
            if ([e.BACKSPACE, e.DELETE].indexOf(e.getKey()) !== -1) {
                if (!this.grid.editing && !this.grid.adding && !this.action_deleteRecord.isDisabled()) {
                    this.onDeleteRecords.call(this);
                    e.preventDefault();
                }
            }
        }
    },

    /**
     * row click handler
     * 
     */
    onRowClick: function(grid, row, e) {
        var _ = window.lodash,
            sm = grid.getSelectionModel();

        /* TODO check if we need this in IE
        // hack to get percentage editor working
        var cell = Ext.get(grid.getView().getCell(row,1));
        var dom = cell.child('div:last');
        while (cell.first()) {
            cell = cell.first();
            cell.on('click', function(e){
                e.stopPropagation();
                grid.fireEvent('celldblclick', grid, row, 1, e);
            });
        }
        */

        // fix selection of one record if shift/ctrl key is not pressed any longer
        if (e.button === 0 && !e.shiftKey && !e.ctrlKey && ! Ext.isTouchDevice) {
            if (sm.getCount() == 1 && sm.isSelected(row)) {
                // return;
            } else {
                sm.clearSelections();
                sm.selectRow(row, false);
                grid.view.focusRow(row);
            }
        }

        if (e.getTarget('.action_attach')) {
            if (Tine.Tinebase.appMgr.isEnabled('Filemanager') && Tine.Tinebase.configManager.get('filesystem').createPreviews) {
                Tine.Filemanager.DocumentPreview.openWindow({
                    record: this.getStore().getAt(row),
                    initialApp: this.app,
                    sm: sm
                });
            }
        }
    },
    
    /**
     * row doubleclick handler
     * 
     * @param {} grid
     * @param {} row
     * @param {} e
     */
    onRowDblClick: function(grid, row, e) {
        this.onEditInNewWindow.call(this, {actionType: 'edit'});
    }, 

    /**
     * called on row context click
     * 
     * @param {Ext.grid.GridPanel} grid
     * @param {Number} row
     * @param {Ext.EventObject} e
     */
    onRowContextMenu: function(grid, row, e) {
        e.stopEvent();
        var selModel = grid.getSelectionModel();
        if (!selModel.isSelected(row)) {
            // disable preview update if config option is set to false
            this.updateOnSelectionChange = this.updateDetailsPanelOnCtxMenu;
            selModel.selectRow(row);
        }

        var contextMenu = this.getContextMenu(grid, row, e);

        if (contextMenu) {
            contextMenu.showAt(e.getXY());
        }

        // reset preview update
        this.updateOnSelectionChange = true;
    },
    
    /**
     * Opens the required EditDialog
     * @param {Object} actionButton the button the action was called from
     * @param {Tine.Tinebase.data.Record} record the record to display/edit in the dialog
     * @param {Array} plugins the plugins used for the edit dialog
     * @param {Object} additionalConfig plain Object, which will be applied to the edit dialog on initComponent
     * @return {Boolean}
     */
    onEditInNewWindow: function(button, record, plugins, additionalConfig) {
        if (! record) {
            if (button.actionType == 'edit' || button.actionType == 'copy') {
                if (! this.action_editInNewWindow || this.action_editInNewWindow.isDisabled()) {
                    // if edit action is disabled or not available, we also don't open a new window
                    return false;
                }
                var selectedRows = this.grid.getSelectionModel().getSelections();
                record = selectedRows[0];
            } else {
                record = this.createNewRecord();
            }
        }

        // plugins to add to edit dialog
        var plugins = plugins ? plugins : [];
        
        var totalcount = this.selectionModel.getCount(),
            selectedRecords = [],
            fixedFields = (button.hasOwnProperty('fixedFields') && Ext.isObject(button.fixedFields)) ? Ext.encode(button.fixedFields) : null,
            editDialogClass = this.editDialogClass || Tine[this.app.appName][this.recordClass.getMeta('modelName') + 'EditDialog'],
            additionalConfig = additionalConfig ? additionalConfig : {};
        
        // add "multiple_edit_dialog" plugin to dialog, if required
        if (((totalcount > 1) && (this.multipleEdit) && (button.actionType == 'edit'))) {
            Ext.each(this.selectionModel.getSelections(), function(record) {
                selectedRecords.push(record.data);
            }, this );
            
            plugins.push({
                ptype: 'multiple_edit_dialog', 
                selectedRecords: selectedRecords,
                selectionFilter: this.selectionModel.getSelectionFilter(),
                isFilterSelect: this.selectionModel.isFilterSelect,
                totalRecordCount: totalcount
            });
        }

        Tine.log.debug('GridPanel::onEditInNewWindow');
        Tine.log.debug(record);
        
        var popupWindow = editDialogClass.openWindow(Ext.copyTo(
            this.editDialogConfig || {}, {
                plugins: plugins ? Ext.encode(plugins) : null,
                fixedFields: fixedFields,
                additionalConfig: Ext.encode(additionalConfig),
                record: editDialogClass.prototype.mode == 'local' ? Ext.encode(record.data) : record,
                recordId: record.getId(),
                copyRecord: (button.actionType == 'copy'),
                listeners: {
                    scope: this,
                    'update': ((this.selectionModel.getCount() > 1) && (this.multipleEdit)) ? this.onUpdateMultipleRecords : this.onUpdateRecord
                }
            }, 'record,recordId,listeners,fixedFields,copyRecord,plugins,additionalConfig')
        );
        return true;
    },

    /**
     * create new record
     *
     * @returns {Tine.Tinebase.data.Record}
     */
    createNewRecord: function() {
        return new this.recordClass(this.recordClass.getDefaultData(), 0);
    },

    /**
     * is called after multiple records have been updated
     */
    onUpdateMultipleRecords: function() {
        this.store.reload();
    },

    /**
     * on update after edit
     * 
     * @param {String|Tine.Tinebase.data.Record} record
     * @param {String} mode
     */
    onUpdateRecord: function(record, mode) {
        if (! this.rendered) {
            return;
        }

        if (! mode && ! this.recordProxy) {
            // proxy-less = local if not defined otherwise
            mode = 'local';
        }
        
        if (Ext.isString(record)) {
            record = this.recordProxy
                ? this.recordProxy.recordReader({responseText: record})
                : Tine.Tinebase.data.Record.setFromJson(record, this.recordClass);

        } else if (record && Ext.isFunction(record.copy)) {
            record = record.copy();
        }

        if (record.id === 0) {
            // we need to set a id != 0 to make identity handling in stores possible
            // TODO add config for this behaviour?
            record.id = 'new-' + Ext.id();
            record.setId(record.id);
        }

        Tine.log.debug('Tine.widgets.grid.GridPanel::onUpdateRecord() -> record:');
        Tine.log.debug(record, mode);

        if (record && Ext.isFunction(record.copy)) {
            var idx = this.getStore().indexOfId(record.id);
            if (idx >= 0) {
                // only run do this in local mode as we reload the store in remote mode
                // NOTE: this would otherwise delete the record if a record proxy exists!
                if (mode == 'local') {
                    var isSelected = this.getGrid().getSelectionModel().isSelected(idx);
                    this.getStore().removeAt(idx);
                    this.getStore().insert(idx, [record]);
                    if (isSelected) {
                        this.getGrid().getSelectionModel().selectRow(idx, true);
                    }
                }
            } else {
                this.getStore().add([record]);
            }
            this.addToEditBuffer(record);
        }

        if (mode == 'local') {
            this.onStoreUpdate(this.getStore(), record, Ext.data.Record.EDIT);
        } else {
            this.bufferedLoadGridData({
                removeStrategy: 'keepBuffered'
            });
        }
    },

    onMoveRecords: function() {
        var containerSelectDialog = new Tine.widgets.container.SelectionDialog({
            recordClass: this.recordClass
        });
        containerSelectDialog.on('select', function(dlg, node) {
            var sm = this.grid.getSelectionModel(),
                records = sm.getSelections(),
                recordIds = [].concat(records).map(function(v){ return v.id; }),
                filter = sm.getSelectionFilter(),
                containerId = node.attributes.id,
                i18nItems = this.app.i18n.n_hidden(this.recordClass.getMeta('recordName'), this.recordClass.getMeta('recordsName'), records.length);

            if (! this.moveMask) {
                this.moveMask = new Ext.LoadMask(this.grid.getEl(), {
                    msg: String.format(i18n._('Moving {0}'), i18nItems)
                });
            }
            this.moveMask.show();

            // move records to folder
            Ext.Ajax.request({
                params: {
                    method: 'Tinebase_Container.moveRecordsToContainer',
                    targetContainerId: containerId,
                    filterData: filter,
                    model: this.recordClass.getMeta('modelName'),
                    applicationName: this.recordClass.getMeta('appName')
                },
                scope: this,
                success: function() {
                    this.refreshAfterEdit(recordIds);
                    this.onAfterEdit(recordIds);
                },
                failure: function (exception) {
                    this.refreshAfterEdit(recordIds);
                    this.loadGridData();
                    Tine.Tinebase.ExceptionHandler.handleRequestException(exception);
                }
            });
        }, this);
    },

    /**
     * is called to resolve conflicts from 2 records
     */
    onResolveDuplicates: function() {
        // TODO: allow more than 2 records      
        if (this.grid.getSelectionModel().getSelections().length != 2) return;
        
        var selections = [];
        Ext.each(this.grid.getSelectionModel().getSelections(), function(sel) {
            selections.push(sel.data);
        });
        
        var window = Tine.widgets.dialog.DuplicateMergeDialog.getWindow({
            selections: Ext.encode(selections),
            appName: this.app.name,
            modelName: this.recordClass.getMeta('modelName')
        });
        
        window.on('contentschange', function() { this.store.reload(); }, this);
    },
    
    /**
     * add record to edit buffer
     * 
     * @param {String|Tine.Tinebase.data.Record} record
     */
    addToEditBuffer: function(record) {

        var recordData = (Ext.isString(record)) ? Ext.decode(record) : record.data,
            id = recordData[this.recordClass.getMeta('idProperty')];

        if (this.editBuffer.indexOf(id) === -1) {
            this.editBuffer.push(id);
        }
    },

    /**
     * generic delete handler
     */
    onDeleteRecords: function(btn, e) {
        var sm = this.grid.getSelectionModel();

        if (sm.isFilterSelect && ! this.filterSelectionDelete) {
            Ext.MessageBox.show({
                title: i18n._('Not Allowed'),
                msg: i18n._('You are not allowed to delete all pages at once'),
                buttons: Ext.Msg.OK,
                icon: Ext.MessageBox.INFO
            });

            return;
        }
        var records = sm.getSelections();

        if (this.disableDeleteConfirmation || (Tine[this.app.appName].registry.get('preferences')
            && Tine[this.app.appName].registry.get('preferences').get('confirmDelete') !== null
            && Tine[this.app.appName].registry.get('preferences').get('confirmDelete') == 0)
        ) {
            // don't show confirmation question for record deletion
            this.deleteRecords(sm, records);
        } else {
            var recordNames = records[0].getTitle();
            if (records.length > 1) {
                recordNames += ', ...';
            }

            var i18nQuestion = this.i18nDeleteQuestion ?
                this.app.i18n.n_hidden(this.i18nDeleteQuestion[0], this.i18nDeleteQuestion[1], records.length) :
                String.format(i18n.ngettext('Do you really want to delete the selected record ({0})?',
                    'Do you really want to delete the selected records ({0})?', records.length), recordNames);
            Ext.MessageBox.confirm(i18n._('Confirm'), i18nQuestion, function(btn) {
                if (btn == 'yes') {
                    this.deleteRecords(sm, records);
                }
            }, this);
        }
    },

    /**
     * delete records
     * 
     * @param {SelectionModel} sm
     * @param {Array} records
     */
    deleteRecords: function(sm, records) {
        // directly remove records from the store (only for non-filter-selection)
        if (Ext.isArray(records) && ! (sm.isFilterSelect && this.filterSelectionDelete)) {
            Ext.each(records, function(record) {
                this.store.remove(record);
            });
            // if nested in an editDialog, just change the parent record
            if (this.editDialog) {
                var items = [];
                this.store.each(function(item) {
                    items.push(item.data);
                });
                this.editDialog.record.set(this.editDialogRecordProperty, items);
                this.editDialog.fireEvent('updateDependent');
                return;
            }
        }

        if (this.recordProxy) {
            if (this.usePagingToolbar) {
                this.pagingToolbar.refresh.disable();
            }

            var i18nItems = this.app.i18n.n_hidden(this.recordClass.getMeta('recordName'), this.recordClass.getMeta('recordsName'), records.length),
                recordIds = [].concat(records).map(function(v){ return v.id; });

            if (sm.isFilterSelect && this.filterSelectionDelete) {
                if (! this.deleteMask) {
                    this.deleteMask = new Ext.LoadMask(this.grid.getEl(), {
                        msg: String.format(i18n._('Deleting {0}'), i18nItems) + ' ' + i18n._('... This may take a long time!')
                    });
                }
                this.deleteMask.show();
            }

            this.deleteQueue = this.deleteQueue.concat(recordIds);

            var options = {
                scope: this,
                success: function() {
                    this.refreshAfterDelete(recordIds);
                    this.onAfterDelete(recordIds);
                },
                failure: function (exception) {
                    this.onDeleteFailure(recordIds, exception);
                }
            };

            if (sm.isFilterSelect && this.filterSelectionDelete) {
                this.recordProxy.deleteRecordsByFilter(sm.getSelectionFilter(), options);
            } else {
                this.recordProxy.deleteRecords(records, options);
            }
        }
    },

    /**
     * refresh after delete (hide delete mask or refresh paging toolbar)
     */
    refreshAfterDelete: function(ids) {
        this.deleteQueue = this.deleteQueue.diff(ids);

        if (this.deleteMask) {
            this.deleteMask.hide();
        }

        if (this.usePagingToolbar) {
            this.pagingToolbar.refresh.show();
        }
    },

    /**
     * do something after deletion of records
     * - reload the store
     * 
     * @param {Array} [ids]
     */
    onAfterDelete: function(ids) {
        this.editBuffer = this.editBuffer.diff(ids);

        this.bufferedLoadGridData({
            removeStrategy: 'keepBuffered'
        });
    },

    /**
     * do something on delete failure
     *
     * @param ids
     * @param exception
     */
    onDeleteFailure: function(ids, exception) {
        this.refreshAfterDelete(ids);
        this.loadGridData();
        Tine.Tinebase.ExceptionHandler.handleRequestException(exception);
    },

    /**
     * refresh after edit/move
     */
    refreshAfterEdit: function(ids) {
        this.editBuffer = this.editBuffer.diff(ids);

        if (this.moveMask) {
            this.moveMask.hide();
        }
        if (this.editMask) {
            this.editMask.hide();
        }

        if (this.usePagingToolbar) {
            this.pagingToolbar.refresh.show();
        }
    },

    /**
     * do something after edit of records
     *
     * @param {Array} [ids]
     */
    onAfterEdit: function(ids) {
        this.editBuffer = this.editBuffer.diff(ids);

        this.bufferedLoadGridData({
            removeStrategy: 'keepBuffered'
        });
    }
});


/***/ }),
/* 188 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tine
 * @subpackage  Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.Tinebase', 'Tine.Tinebase.data');

Tine.Tinebase.data.Record = function(data, id) {
    if (id || id === 0) {
        this.id = id;
    } else if (data[this.idProperty]) {
        this.id = data[this.idProperty];
    } else {
        this.id = ++Ext.data.Record.AUTO_ID;
    }
    this.data = data;
    this.initData();
    this.ctime = new Date().getTime();
};

/**
 * @namespace Tine.Tinebase.data
 * @class     Tine.Tinebase.data.Record
 * @extends   Ext.data.Record
 * 
 * Baseclass of Tine 2.0 models
 */
Ext.extend(Tine.Tinebase.data.Record, Ext.data.Record, {
    /**
     * @cfg {String} appName
     * internal/untranslated app name (required)
     */
    appName: null,
    /**
     * @cfg {String} modelName
     * name of the model/record  (required)
     */
    modelName: null,
    /**
     * @cfg {String} idProperty
     * property of the id of the record
     */
    idProperty: 'id',
    /**
     * @cfg {String} titleProperty
     * property of the title attibute, used in generic getTitle function  (required)
     */
    titleProperty: null,
    /**
     * @cfg {String} recordName
     * untranslated record/item name
     */
    recordName: 'record',
    /**
     * @cfg {String} recordName
     * untranslated records/items (plural) name
     */
    recordsName: 'records',
    /**
     * @cfg {String} grantsPath
     * path (see _.get() to find grants
     */
    grantsPath: null,
    /**
     * @cfg {String} containerProperty
     * name of the container property
     */
    containerProperty: null,
    /**
     * @cfg {String} containerName
     * untranslated container name
     */
    containerName: 'container',
    /**
     * @cfg {string} containerName
     * untranslated name of container (plural)
     */
    containersName: 'containers',
    /**
     * default filter
     * @type {string}
     */
    defaultFilter: null,
    
    cfExp: /^#(.+)/,

    /**
     * template fn called when record is instanciated
     */
    initData: Ext.emptyFn,

    /**
     * Get the value of the {@link Ext.data.Field#name named field}.
     * @param {String} name The {@link Ext.data.Field#name name of the field} to get the value of.
     * @return {Object} The value of the field.
     */
    get: function(name) {
        var cfName = String(name).match(this.cfExp);
        
        if (cfName) {
            return this.data.customfields ? this.data.customfields[cfName[1]] : null;
        }
        
        return this.data[name];
    },
    
    /**
     * Set the value of the {@link Ext.data.Field#name named field}.
     * @param {String} name The {@link Ext.data.Field#name name of the field} to get the value of.
     * @return {Object} The value of the field.
     */
    set : function(name, value) {
        var encode = Ext.isPrimitive(value) ? String : Ext.encode,
            current = this.get(name),
            cfName;
            
        if (current !== null && encode(current) == encode(value)) {
            return;
        }
        this.dirty = true;
        if (!this.modified) {
            this.modified = {};
        }
        if (this.modified[name] === undefined) {
            this.modified[name] = current;
        }
        if (encode(value) == encode(this.modified[name])) {
            delete this.modified[name];
        }
        if (Object.keys(this.modified).length === 0) {
            this.dirty = false;
        }
        if (cfName = String(name).match(this.cfExp)) {
            var oldValueJSON = JSON.stringify(this.get('customfields') || {}),
                valueObject = JSON.parse(oldValueJSON);

            Tine.Tinebase.common.assertComparable(valueObject);
            valueObject[cfName[1]] = value;

            if (JSON.stringify(valueObject) != oldValueJSON) {
                this.set('customfields', valueObject);
            }
        } else {
            this.data[name] = value;
        }
        
        if (!this.editing) {
            this.afterEdit();
        }
    },
    
    /**
     * returns title of this record
     * 
     * @return {String}
     */
    getTitle: function() {
        if (Tine.Tinebase.data.TitleRendererManager.has(this.appName, this.modelName)) {
            return Tine.Tinebase.data.TitleRendererManager.get(this.appName, this.modelName)(this);
        } else {
            var s = this.titleProperty ? this.titleProperty.split('.') : [null];
            return (s.length > 0 && this.get(s[0]) && this.get(s[0])[s[1]]) ? this.get(s[0])[s[1]] : s[0] ? this.get(this.titleProperty) : '';
        }
    },
    /**
     * returns the id of the record
     */
    getId: function() {
        return this.get(this.idProperty ? this.idProperty : 'id');
    },

    /**
     * sets the id of the record
     *
     * @param {String} id
     */
    setId: function(id) {
        return this.set(this.idProperty ? this.idProperty : 'id', id);
    },

    /**
     * converts data to String
     * 
     * @return {String}
     */
    toString: function() {
        return Ext.encode(this.data);
    },
    
    /**
     * returns true if given record obsoletes this one
     * 
     * - returns false if record has no modlog properties to make 
     *   handling of updated records work in the grid panel
     * @see 0009464: user grid does not refresh after ctx menu action
     * 
     * @param {Tine.Tinebase.data.Record} record
     * @return {Boolean}
     */
    isObsoletedBy: function(record) {
        if (record.modelName !== this.modelName || record.getId() !== this.getId()) {
            throw new Ext.Error('Records could not be compared');
        }
        
        if (this.constructor.hasField('seq') && record.get('seq') != this.get('seq')) {
            return record.get('seq') > this.get('seq');
        }
        
        return (this.constructor.hasField('last_modified_time')) ? record.get('last_modified_time') > this.get('last_modified_time') : false;
    }
});

/**
 * Generate a constructor for a specific Record layout.
 * 
 * @param {Array} def see {@link Ext.data.Record#create}
 * @param {Object} meta information see {@link Tine.Tinebase.data.Record}
 * 
 * <br>usage:<br>
<b>IMPORTANT: the ngettext comments are required for the translation system!</b>
<pre><code>
var TopicRecord = Tine.Tinebase.data.Record.create([
    {name: 'summary', mapping: 'topic_title'},
    {name: 'details', mapping: 'username'}
], {
    appName: 'Tasks',
    modelName: 'Task',
    idProperty: 'id',
    titleProperty: 'summary',
    // ngettext('Task', 'Tasks', n);
    recordName: 'Task',
    recordsName: 'Tasks',
    containerProperty: 'container_id',
    // ngettext('to do list', 'to do lists', n);
    containerName: 'to do list',
    containesrName: 'to do lists'
});
</code></pre>
 * @static
 */
Tine.Tinebase.data.Record.create = function(o, meta) {
    var f = Ext.extend(Tine.Tinebase.data.Record, {});
    var p = f.prototype;
    Ext.apply(p, meta);
    p.fields = new Ext.util.MixedCollection(false, function(field) {
        return field.name;
    });
    for(var i = 0, len = o.length; i < len; i++) {
        if (o[i]['name'] == meta.containerProperty && meta.allowBlankContainer === false) {
            o[i]['allowBlank'] = false;
        }
        p.fields.add(new Ext.data.Field(o[i]));
    }
    f.getField = function(name) {
        return p.fields.get(name);
    };
    f.getMeta = function(name) {
        var value = null;
        switch(name) {
            case ('phpClassName'):
                value = p.appName + '_Model_' + p.modelName;
                break;
            default:
                value = p[name];
        }
        return value;
    };
    f.getDefaultData = function() {
        return {};
    };
    f.getFieldDefinitions = function() {
        return p.fields.items;
    };
    f.getFieldNames = function() {
        if (! p.fieldsarray) {
            var arr = p.fieldsarray = [];
            Ext.each(p.fields.items, function(item) {arr.push(item.name);});
        }
        return p.fieldsarray;
    };
    f.hasField = function(n) {
        return p.fields.indexOfKey(n) >= 0;
    };
    f.getRecordName = function() {
        var app = Tine.Tinebase.appMgr.get(p.appName),
            i18n = app && app.i18n ? app.i18n : window.i18n;

        return i18n.n_(p.recordName, p.recordsName, 1);
    };
    f.getModuleName = function () {
        var app = Tine.Tinebase.appMgr.get(p.appName),
            i18n = app && app.i18n ? app.i18n : window.i18n,
            moduleName;

        if (p.modelConfiguration && p.modelConfiguration.moduleName) {
            return i18n._(p.modelConfiguration.moduleName);
        }

        return p.moduleName ? i18n._(p.moduleName) : f.getRecordsName();
    };
    f.getRecordsName = function() {
        var app = Tine.Tinebase.appMgr.get(p.appName),
            i18n = app && app.i18n ? app.i18n : window.i18n;

        return i18n.n_(p.recordName, p.recordsName, 50);
    };
    f.getContainerName = function() {
        var app = Tine.Tinebase.appMgr.get(p.appName),
            i18n = app && app.i18n ? app.i18n : window.i18n;

        return i18n.n_(p.containerName, p.containersName, 1);
    };
    f.getContainersName = function() {
        var app = Tine.Tinebase.appMgr.get(p.appName),
            i18n = app && app.i18n ? app.i18n : window.i18n;

        return i18n.n_(p.containerName, p.containersName, 50);
    };
    f.getAppName = function() {
        var app = Tine.Tinebase.appMgr.get(p.appName),
            i18n = app && app.i18n ? app.i18n : window.i18n;

        return i18n._(p.appName);
    };
    /**
     * returns the php class name of the record itself or by the application(name) and model(name)
     * @param {mixed} app       the application instance or the application name or the record class
     * @param {mixed} model     the model name
     * @return {String} php class name
     */
    f.getPhpClassName = function(app, model) {
        // without arguments the php class name of the this is returned
        if (!app && !model) {
            return f.getMeta('phpClassName');
        }
        // if var app is a record class, the getMeta method is called
        if (Ext.isFunction(app.getMeta)) {
            return app.getMeta('phpClassName');
        }

        var appName = (Ext.isObject(app) && app.hasOwnProperty('name')) ? app.name : app;
        return appName + '_Model_' + model;
    };
    f.getModelConfiguration = function() {
        return p.modelConfiguration;
    };

    // sanitize containerProperty label
    var containerProperty = f.getMeta('containerProperty');
    if (containerProperty) {
        var field = p.fields.get(containerProperty);
        if (field) {
            field.label = p.containerName;
        }
    }
    if (!p.grantsPath) {
        p.grantsPath = 'data' + (containerProperty ? ('.' + containerProperty) : '') + '.account_grants';
    }
    Tine.Tinebase.data.RecordMgr.add(f);
    return f;
};

Tine.Tinebase.data.Record.generateUID = function(length) {
    length = length || 40;
        
    var s = '0123456789abcdef',
        uuid = new Array(length);
    for(var i=0; i<length; i++) {
        uuid[i] = s.charAt(Math.ceil(Math.random() *15));
    }
    return uuid.join('');
};

Tine.Tinebase.data.RecordManager = Ext.extend(Ext.util.MixedCollection, {
    add: function(record) {
        if (! Ext.isFunction(record.getMeta)) {
            throw new Ext.Error('only records of type Tinebase.data.Record could be added');
        }
        var appName = record.getMeta('appName'),
            modelName = record.getMeta('modelName');
            
        if (! appName && modelName) {
            throw new Ext.Error('appName and modelName must be in the metadatas');
        }
        
//        console.log('register model "' + appName + '.' + modelName + '"');
        Tine.Tinebase.data.RecordManager.superclass.add.call(this, appName + '.' + modelName, record);
    },
    
    get: function(appName, modelName) {
        if (Ext.isFunction(appName.getMeta)) {
            return appName;
        }
        if (! modelName && appName.modelName) {
            modelName = appName.modelName;
        }
        if (appName.appName) {
            appName = appName.appName;
        }
            
        if (! Ext.isString(appName)) {
            throw new Ext.Error('appName must be a string');
        }
        
        Ext.each([appName, modelName], function(what) {
            if (! Ext.isString(what)) return;
            var parts = what.split(/(?:_Model_)|(?:\.)/);
            if (parts.length > 1) {
                appName = parts[0];
                modelName = parts[1];
            }
        });
        
        return Tine.Tinebase.data.RecordManager.superclass.get.call(this, appName + '.' + modelName);
    }
});
Tine.Tinebase.data.RecordMgr = new Tine.Tinebase.data.RecordManager(true);

/**
 * create record from json string
 *
 * @param {String} json
 * @param {Tine.Tinebase.data.Record} recordClass
 * @returns {Tine.Tinebase.data.Record}
 */
Tine.Tinebase.data.Record.setFromJson = function(json, recordClass) {
    var jsonReader = new Ext.data.JsonReader({
        id: recordClass.idProperty,
        root: 'results',
        totalProperty: 'totalcount'
    }, recordClass);

    var recordData = {results: [
            Ext.isString(json) ? Ext.decode(json) : json
        ]},
        data = jsonReader.readRecords(recordData),
        record = data.records[0],
        recordId = record.get(record.idProperty);

    record.id = recordId ? recordId : 0;

    return record;
};


/***/ }),
/* 189 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.grid');


Tine.widgets.grid.attachmentRenderer = function(value, metadata, record) {
    var _ = window.lodash,
        result = '';

    if (_.isArray(value) && value.length) {
        result = '<div class="action_attach tine-grid-row-action-icon" />';
    }

    return result;
};


/***/ }),
/* 190 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.grid');


Tine.widgets.grid.imageRenderer = function(value, metadata, record) {
    var _ = window.lodash,
        result = '';

    if (value) {
        result = '<div class="action_image tine-grid-row-action-icon" ext:qtip="' +
            Ext.util.Format.htmlEncode('<div style="width:300px; height:300px;"><img src="' + String(value)
                .replace(/width=\d+/, 'width=290')
                .replace(/height=\d+/, 'height=300') +
            '" /></div>') +
        '"/>';
    }

    return result;
};


/***/ }),
/* 191 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(192);
__webpack_require__(193);
__webpack_require__(202);
__webpack_require__(985);
__webpack_require__(996);
__webpack_require__(997);
module.exports = __webpack_require__(3).Promise;


/***/ }),
/* 192 */
/***/ (function(module, exports) {



/***/ }),
/* 193 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $at = __webpack_require__(977)(true);

// 21.1.3.27 String.prototype[@@iterator]()
__webpack_require__(194)(String, 'String', function (iterated) {
  this._t = String(iterated); // target
  this._i = 0;                // next index
// 21.1.5.2.1 %StringIteratorPrototype%.next()
}, function () {
  var O = this._t;
  var index = this._i;
  var point;
  if (index >= O.length) return { value: undefined, done: true };
  point = $at(O, index);
  this._i += point.length;
  return { value: point, done: false };
});


/***/ }),
/* 194 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var LIBRARY = __webpack_require__(70);
var $export = __webpack_require__(12);
var redefine = __webpack_require__(196);
var hide = __webpack_require__(25);
var has = __webpack_require__(27);
var Iterators = __webpack_require__(50);
var $iterCreate = __webpack_require__(978);
var setToStringTag = __webpack_require__(75);
var getPrototypeOf = __webpack_require__(201);
var ITERATOR = __webpack_require__(8)('iterator');
var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
var FF_ITERATOR = '@@iterator';
var KEYS = 'keys';
var VALUES = 'values';

var returnThis = function () { return this; };

module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
  $iterCreate(Constructor, NAME, next);
  var getMethod = function (kind) {
    if (!BUGGY && kind in proto) return proto[kind];
    switch (kind) {
      case KEYS: return function keys() { return new Constructor(this, kind); };
      case VALUES: return function values() { return new Constructor(this, kind); };
    } return function entries() { return new Constructor(this, kind); };
  };
  var TAG = NAME + ' Iterator';
  var DEF_VALUES = DEFAULT == VALUES;
  var VALUES_BUG = false;
  var proto = Base.prototype;
  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
  var $default = $native || getMethod(DEFAULT);
  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
  var methods, key, IteratorPrototype;
  // Fix native
  if ($anyNative) {
    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
      // Set @@toStringTag to native iterators
      setToStringTag(IteratorPrototype, TAG, true);
      // fix for some old engines
      if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);
    }
  }
  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEF_VALUES && $native && $native.name !== VALUES) {
    VALUES_BUG = true;
    $default = function values() { return $native.call(this); };
  }
  // Define iterator
  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
    hide(proto, ITERATOR, $default);
  }
  // Plug for library
  Iterators[NAME] = $default;
  Iterators[TAG] = returnThis;
  if (DEFAULT) {
    methods = {
      values: DEF_VALUES ? $default : getMethod(VALUES),
      keys: IS_SET ? $default : getMethod(KEYS),
      entries: $entries
    };
    if (FORCED) for (key in methods) {
      if (!(key in proto)) redefine(proto, key, methods[key]);
    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
  }
  return methods;
};


/***/ }),
/* 195 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = !__webpack_require__(20) && !__webpack_require__(34)(function () {
  return Object.defineProperty(__webpack_require__(116)('div'), 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),
/* 196 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(25);


/***/ }),
/* 197 */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(27);
var toIObject = __webpack_require__(28);
var arrayIndexOf = __webpack_require__(980)(false);
var IE_PROTO = __webpack_require__(119)('IE_PROTO');

module.exports = function (object, names) {
  var O = toIObject(object);
  var i = 0;
  var result = [];
  var key;
  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
  // Don't enum bug & hidden keys
  while (names.length > i) if (has(O, key = names[i++])) {
    ~arrayIndexOf(result, key) || result.push(key);
  }
  return result;
};


/***/ }),
/* 198 */
/***/ (function(module, exports, __webpack_require__) {

// fallback for non-array-like ES3 and non-enumerable old V8 strings
var cof = __webpack_require__(51);
// eslint-disable-next-line no-prototype-builtins
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
  return cof(it) == 'String' ? it.split('') : Object(it);
};


/***/ }),
/* 199 */
/***/ (function(module, exports, __webpack_require__) {

// 7.1.15 ToLength
var toInteger = __webpack_require__(114);
var min = Math.min;
module.exports = function (it) {
  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};


/***/ }),
/* 200 */
/***/ (function(module, exports, __webpack_require__) {

var document = __webpack_require__(7).document;
module.exports = document && document.documentElement;


/***/ }),
/* 201 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
var has = __webpack_require__(27);
var toObject = __webpack_require__(122);
var IE_PROTO = __webpack_require__(119)('IE_PROTO');
var ObjectProto = Object.prototype;

module.exports = Object.getPrototypeOf || function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectProto : null;
};


/***/ }),
/* 202 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(982);
var global = __webpack_require__(7);
var hide = __webpack_require__(25);
var Iterators = __webpack_require__(50);
var TO_STRING_TAG = __webpack_require__(8)('toStringTag');

var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
  'TextTrackList,TouchList').split(',');

for (var i = 0; i < DOMIterables.length; i++) {
  var NAME = DOMIterables[i];
  var Collection = global[NAME];
  var proto = Collection && Collection.prototype;
  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
  Iterators[NAME] = Iterators.Array;
}


/***/ }),
/* 203 */
/***/ (function(module, exports, __webpack_require__) {

// getting tag from 19.1.3.6 Object.prototype.toString()
var cof = __webpack_require__(51);
var TAG = __webpack_require__(8)('toStringTag');
// ES3 wrong here
var ARG = cof(function () { return arguments; }()) == 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
  try {
    return it[key];
  } catch (e) { /* empty */ }
};

module.exports = function (it) {
  var O, T, B;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
    // builtinTag case
    : ARG ? cof(O)
    // ES3 arguments fallback
    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};


/***/ }),
/* 204 */
/***/ (function(module, exports, __webpack_require__) {

// 7.3.20 SpeciesConstructor(O, defaultConstructor)
var anObject = __webpack_require__(15);
var aFunction = __webpack_require__(71);
var SPECIES = __webpack_require__(8)('species');
module.exports = function (O, D) {
  var C = anObject(O).constructor;
  var S;
  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
};


/***/ }),
/* 205 */
/***/ (function(module, exports, __webpack_require__) {

var ctx = __webpack_require__(49);
var invoke = __webpack_require__(991);
var html = __webpack_require__(200);
var cel = __webpack_require__(116);
var global = __webpack_require__(7);
var process = global.process;
var setTask = global.setImmediate;
var clearTask = global.clearImmediate;
var MessageChannel = global.MessageChannel;
var Dispatch = global.Dispatch;
var counter = 0;
var queue = {};
var ONREADYSTATECHANGE = 'onreadystatechange';
var defer, channel, port;
var run = function () {
  var id = +this;
  // eslint-disable-next-line no-prototype-builtins
  if (queue.hasOwnProperty(id)) {
    var fn = queue[id];
    delete queue[id];
    fn();
  }
};
var listener = function (event) {
  run.call(event.data);
};
// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
if (!setTask || !clearTask) {
  setTask = function setImmediate(fn) {
    var args = [];
    var i = 1;
    while (arguments.length > i) args.push(arguments[i++]);
    queue[++counter] = function () {
      // eslint-disable-next-line no-new-func
      invoke(typeof fn == 'function' ? fn : Function(fn), args);
    };
    defer(counter);
    return counter;
  };
  clearTask = function clearImmediate(id) {
    delete queue[id];
  };
  // Node.js 0.8-
  if (__webpack_require__(51)(process) == 'process') {
    defer = function (id) {
      process.nextTick(ctx(run, id, 1));
    };
  // Sphere (JS game engine) Dispatch API
  } else if (Dispatch && Dispatch.now) {
    defer = function (id) {
      Dispatch.now(ctx(run, id, 1));
    };
  // Browsers with MessageChannel, includes WebWorkers
  } else if (MessageChannel) {
    channel = new MessageChannel();
    port = channel.port2;
    channel.port1.onmessage = listener;
    defer = ctx(port.postMessage, port, 1);
  // Browsers with postMessage, skip WebWorkers
  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
    defer = function (id) {
      global.postMessage(id + '', '*');
    };
    global.addEventListener('message', listener, false);
  // IE8-
  } else if (ONREADYSTATECHANGE in cel('script')) {
    defer = function (id) {
      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
        html.removeChild(this);
        run.call(id);
      };
    };
  // Rest old browsers
  } else {
    defer = function (id) {
      setTimeout(ctx(run, id, 1), 0);
    };
  }
}
module.exports = {
  set: setTask,
  clear: clearTask
};


/***/ }),
/* 206 */
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return { e: false, v: exec() };
  } catch (e) {
    return { e: true, v: e };
  }
};


/***/ }),
/* 207 */
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__(15);
var isObject = __webpack_require__(26);
var newPromiseCapability = __webpack_require__(123);

module.exports = function (C, x) {
  anObject(C);
  if (isObject(x) && x.constructor === C) return x;
  var promiseCapability = newPromiseCapability.f(C);
  var resolve = promiseCapability.resolve;
  resolve(x);
  return promiseCapability.promise;
};


/***/ }),
/* 208 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * Picker GridPanel
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.PickerGridPanel
 * @extends     Ext.grid.GridPanel
 * 
 * <p>Picker GridPanel</p>
 * <p><pre>
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.widgets.grid.PickerGridPanel
 */
Tine.widgets.grid.PickerGridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
    /**
     * @cfg {bool}
     * enable bottom toolbar
     */
    enableBbar: true,

    /**
     * @cfg {bool}
     * enable top toolbar (with search combo)
     */
    enableTbar: true,
    
    /**
     * store to hold records
     * 
     * @type Ext.data.Store
     * @property store
     */
    store: null,
    
    /**
     * record class
     * @cfg {Tine.Tinebase.data.Record} recordClass
     */
    recordClass: null,
    
    /**
     * defaults for new records of this.recordClass
     * @cfg {Object} recordClass
     */
    recordDefaults: null,
    
    /**
     * record class
     * @cfg {Tine.Tinebase.data.Record} recordClass
     */
    searchRecordClass: null,
    
    /**
     * search combo config
     * @cfg {} searchComboConfig
     */
    searchComboConfig: null,
    
    /**
     * is the row selected after adding?
     * @type Boolean
     */
    selectRowAfterAdd: true,
    
    /**
     * is the row highlighted after adding?
     * @type Boolean
     */
    highlightRowAfterAdd: false,
    
    /**
     * @type Ext.Menu
     * @property contextMenu
     */
    contextMenu: null,
    
    /**
     * @cfg {Array} contextMenuItems
     * additional items for contextMenu
     */
    contextMenuItems: null,
    
    /**
     * @cfg {Array} Array of column's config objects where the config options are in
     */
    configColumns: null,

    /**
     * @cfg {Bool} readOnly
     */
    readOnly: false,
    
    /**
     * @private
     */
    initComponent: function() {
        this.contextMenuItems = (this.contextMenuItems !== null) ? this.contextMenuItems : [];
        this.configColumns = (this.configColumns !== null) ? this.configColumns : [];
        this.searchComboConfig = this.searchComboConfig || {};
        
        this.labelField = this.labelField ? this.labelField : (this.recordClass && this.recordClass.getMeta ? this.recordClass.getMeta('titleProperty') : null);
        this.autoExpandColumn = this.autoExpandColumn? this.autoExpandColumn : this.labelField;
        
        this.initStore();
        this.initGrid();
        this.initActionsAndToolbars();


        this.on('afterrender', this.onAfterRender, this);

        Tine.widgets.grid.PickerGridPanel.superclass.initComponent.call(this);
    },

    onAfterRender: function() {
        this.setReadOnly(this.readOnly);
    },

    setReadOnly: function(readOnly) {
        this.readOnly = readOnly;
        var _ = window.lodash;

        var tbar = this.getTopToolbar();
        if (tbar) {
            this.getTopToolbar().items.each(function (item) {
                if (Ext.isFunction(item.setDisabled)) {
                    item.setDisabled(readOnly);
                } else if (item) {
                    item.disabled = readOnly;
                }
            }, this);
        }
        if (_.get(this, 'actionRemove.setDisabled')) {
            this.actionRemove.setDisabled(readOnly);
        }
    },

    /**
     * init store
     * @private
     */
    initStore: function() {
        
        if (!this.store) {
            this.store = new Ext.data.SimpleStore({
                sortInfo: this.defaultSortInfo || {
                    field: this.recordClass.getMeta('titleProperty'),
                    order: 'DESC'
                },
                fields: this.recordClass
            });
        }
        
        // focus+select new record
        this.store.on('add', this.focusAndSelect, this);
        this.store.on('beforeload', this.showLoadMask, this);
        this.store.on('load', this.hideLoadMask, this);
    },

    focusAndSelect: function(store, records, index) {
        (function() {
            if (this.rendered) {
                if (this.selectRowAfterAdd) {
                    this.getView().focusRow(index);
                    this.getSelectionModel().selectRow(index);
                } else if (this.highlightRowAfterAdd && records.length === 1){
                    // some eyecandy
                    var row = this.getView().getRow(index);
                    Ext.fly(row).highlight();
                }
            }
        }).defer(300, this);
    },

    /**
     * init actions and toolbars
     */
    initActionsAndToolbars: function() {
        
        this.actionRemove = new Ext.Action({
            text: i18n._('Remove record'),
            disabled: true,
            scope: this,
            handler: this.onRemove,
            iconCls: 'action_deleteContact',
            actionUpdater: this.actionRemoveUpdater
        });

        // init actions
        this.actionUpdater = new Tine.widgets.ActionUpdater({
            recordClass: this.recordClass,
            evalGrants: this.evalGrants
        });
        this.actionUpdater.addActions([
            this.actionRemove
        ]);

        this.selModel.on('selectionchange', function(sm) {
            this.actionUpdater.updateActions(sm);
        }, this);

        var contextItems = [this.actionRemove];
        this.contextMenu = new Ext.menu.Menu({
            plugins: [{
                ptype: 'ux.itemregistry',
                key:   'Tinebase-MainContextMenu'
            }],
            items: contextItems.concat(this.contextMenuItems)
        });
        
        // removes temporarily added items
        this.contextMenu.on('hide', function() {
            if(this.contextMenu.hasOwnProperty('tempItems') && this.contextMenu.tempItems.length) {
                Ext.each(this.contextMenu.tempItems, function(item) {
                    this.contextMenu.remove(item.itemId);
                }, this);
            }
            this.contextMenu.tempItems = [];
        }, this);
        
        if (this.enableBbar) {
            this.bbar = new Ext.Toolbar({
                items: [
                    this.actionRemove
                ].concat(this.contextMenuItems)
            });
        }

        if (this.enableTbar) {
            this.initTbar();
        }
    },
    
    /**
     * init top toolbar
     */
    initTbar: function() {
        this.tbar = new Ext.Toolbar({
            items: [
                this.getSearchCombo()
            ],
            listeners: {
                scope: this,
                resize: this.onTbarResize
            }
        });
    },
    
    onTbarResize: function(tbar) {
        if (tbar.items.getCount() == 1) {
            var combo = tbar.items.get(0),
                gridWidth = this.getGridEl().getWidth(),
                offsetWidth = combo.getEl() ? combo.getEl().getLeft() - this.getGridEl().getLeft() : 0;
            
            if (tbar.items.getCount() == 1) {
                tbar.items.get(0).setWidth(gridWidth - offsetWidth);
            }
        }
    },
    
    /**
     * init grid (column/selection model, ctx menu, ...)
     */
    initGrid: function() {
        this.colModel = this.getColumnModel();
        
        this.selModel = new Ext.grid.RowSelectionModel({multiSelect:true});
        
        // remove non-plugin config columns
        var nonPluginColumns = [];
        for (var i=0; i < this.configColumns.length; i++) {
            if (!this.configColumns[i].init || typeof(this.configColumns[i].init) != 'function') {
                nonPluginColumns.push(this.configColumns[i]);
            }
        }
        for (var i=0; i < nonPluginColumns.length; i++) {
            this.configColumns.remove(nonPluginColumns[i]);
        }
        this.plugins = this.configColumns;

        this.enableHdMenu = false;
        this.plugins.push(new Ext.ux.grid.GridViewMenuPlugin({}))
    
        // on selectionchange handler
        this.selModel.on('selectionchange', function(sm) {
            var rowCount = sm.getCount();
            this.actionRemove.setDisabled(this.readOnly || rowCount == 0);
        }, this);
        
        // on rowcontextmenu handler
        this.on('rowcontextmenu', this.onRowContextMenu.createDelegate(this), this);
    },
    
    /**
     * take columns property if defined, otherwise create columns from record class propery
     * @return {}
     */
    getColumnModel: function() {
        var _ = window.lodash,
            me = this;

        if (! this.colModel) {
            if (!this.columns) {
                var labelColumn = {
                    id: this.labelField,
                    // TODO use translated records name here
                    //header: String.format(i18n._('Selected {0}'),
                    //    this.recordClass.getMeta('recordsName')),
                    header: this.recordClass.getRecordsName(),
                    dataIndex: this.labelField
                };
                if (this.labelRenderer != Ext.emptyFn) {
                    labelColumn.renderer = this.labelRenderer;
                }
                this.columns = [labelColumn];
            } else {
                // convert string cols
                _.each(me.columns, function(col, idx) {
                    if (_.isString(col)) {
                        var config = Tine.widgets.grid.ColumnManager.get(me.recordClass.getMeta('appName'), me.recordClass.getMeta('modelName'), col, 'editDialog');
                        if (config) {
                            me.columns[idx] = config;
                        }
                    }
                });
                _.remove(me.columns, _.isString)
            }

            this.colModel = new Ext.grid.ColumnModel({
                defaults: {
                    sortable: false
                },
                columns: this.columns
            });
        }

        return this.colModel;
    },
    
    /**
     * that's the context menu handler
     * @param {} grid
     * @param {} row
     * @param {} e
     */
    onRowContextMenu: function(grid, row, e) {
        e.stopEvent();
        
        this.fireEvent('beforecontextmenu', grid, row, e);
        
        var selModel = grid.getSelectionModel();
        if(!selModel.isSelected(row)) {
            selModel.selectRow(row);
        }
        
        this.contextMenu.showAt(e.getXY());
    },
    
    /**
     * @return {Tine.Tinebase.widgets.form.RecordPickerComboBox|this.searchComboClass}
     */
    getSearchCombo: function() {
        if (! this.searchCombo) {
            var recordClass = (this.searchRecordClass !== null) ? this.searchRecordClass : this.recordClass,
                appName = recordClass.getMeta('appName');
                //model = recordClass.getModel();

            this.searchCombo = Tine.widgets.form.RecordPickerManager.get(appName, recordClass, Ext.apply({
                blurOnSelect: true,
                listeners: {
                    scope: this,
                    select: this.onAddRecordFromCombo
                }
            }, this.searchComboConfig));
        }

        return this.searchCombo;
    },
    
    /**
     * Is called when a record gets selected in the picker combo
     * 
     * @param {Ext.form.ComboBox} picker
     * @param {Record} recordToAdd
     */
    onAddRecordFromCombo: function(picker, recordToAdd) {
        // sometimes there are no record data given
        if (! recordToAdd) {
           return;
        }
        
        var record = new this.recordClass(Ext.applyIf(recordToAdd.data, this.recordDefaults || {}), recordToAdd.id);
        
        // check if already in
        if (! this.store.getById(record.id)) {
            this.store.add([record]);
        }
        
        picker.reset();
    },
    
    /**
     * remove handler
     * 
     * @param {} button
     * @param {} event
     */
    onRemove: function(button, event) {
        var selectedRows = this.getSelectionModel().getSelections();
        for (var i = 0; i < selectedRows.length; ++i) {
            this.store.remove(selectedRows[i]);
        }
    },
    
    /**
     * key down handler
     * @private
     */
    onKeyDown: function(e){
        if (e.ctrlKey) {
            switch (e.getKey()) {
                case e.A:
                    // select all records
                    this.getSelectionModel().selectAll(true);
                    e.preventDefault();
                    break;
            }
        } else {
            switch (e.getKey()) {
                case e.DELETE:
                    // delete selected record(s)
                    this.onRemove();
                    break;
            }
        }
    },

    showLoadMask: function() {
        var me = this;
        return me.afterIsRendered()
            .then(function() {
                if (! me.loadMask) {
                    me.loadMask = new Ext.LoadMask(me.getEl(), {msg: String.format(i18n._('Loading {0} ...'), me.recordClass.getRecordsName())});
                }
                me.loadMask.show.defer(100, me.loadMask);
            });
    },

    hideLoadMask: function() {
        if (this.loadMask) {
            this.loadMask.hide.defer(100, this.loadMask);
        }
        return Promise.resolve();
    }
});

Ext.reg('wdgt.pickergrid', Tine.widgets.grid.PickerGridPanel);


/***/ }),
/* 209 */
/***/ (function(module, exports, __webpack_require__) {

// most Object methods by ES6 should accept primitives
var $export = __webpack_require__(12);
var core = __webpack_require__(3);
var fails = __webpack_require__(34);
module.exports = function (KEY, exec) {
  var fn = (core.Object || {})[KEY] || Object[KEY];
  var exp = {};
  exp[KEY] = exec(fn);
  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
};


/***/ }),
/* 210 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
var $keys = __webpack_require__(197);
var hiddenKeys = __webpack_require__(121).concat('length', 'prototype');

exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  return $keys(O, hiddenKeys);
};


/***/ }),
/* 211 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3Csvg version='1.1' id='Ebene_1' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath id='Icon_Zeiterfassung_2_' d='M32.7,21.2c0-2.1-0.5-4-1.6-5.8c-1-1.8-2.4-3.2-4.2-4.2c-1.8-1-3.7-1.6-5.8-1.6s-4,0.5-5.8,1.6 s-3.2,2.4-4.2,4.2s-1.6,3.7-1.6,5.8s0.5,4,1.6,5.8c1,1.8,2.4,3.2,4.2,4.2c1.8,1,3.7,1.6,5.8,1.6s4-0.5,5.8-1.6 c1.8-1,3.2-2.4,4.2-4.2C32.2,25.2,32.7,23.3,32.7,21.2z M35.3,21.2c0,2.6-0.6,4.9-1.9,7.1c-1.3,2.2-3,3.9-5.2,5.2 c-2.2,1.3-4.5,1.9-7.1,1.9s-4.9-0.6-7.1-1.9c-2.2-1.3-3.9-3-5.2-5.2S7,23.7,7,21.2s0.6-4.9,1.9-7.1s3-3.9,5.2-5.2S18.6,7,21.2,7 s4.9,0.6,7.1,1.9s3.9,3,5.2,5.2C34.7,16.2,35.3,18.6,35.3,21.2z'/%3E %3Cline style='stroke: rgb(0, 0, 0); stroke-width: 3px;' x1='14.691' y1='14.619' x2='27.698' y2='27.601'/%3E %3Cline x1='27.251' y1='14.946' x2='14.577' y2='27.668' style='stroke: rgb(0, 0, 0); paint-order: stroke; stroke-width: 3px;'/%3E %3C/svg%3E\""

/***/ }),
/* 212 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M34.9,33.1l-1.8,1.8c-0.3,0.3-0.6,0.4-0.9,0.4c-0.3,0-0.6-0.1-0.9-0.4L21.2,24.8L11.1,34.9c-0.3,0.3-0.6,0.4-0.9,0.4 c-0.3,0-0.6-0.1-0.9-0.4l-1.8-1.8C7.1,32.8,7,32.5,7,32.2c0-0.3,0.1-0.6,0.4-0.9l10.1-10.1L7.4,11.1C7.1,10.8,7,10.5,7,10.2 c0-0.3,0.1-0.6,0.4-0.9l1.8-1.8C9.5,7.1,9.8,7,10.2,7c0.3,0,0.6,0.1,0.9,0.4l10.1,10.1L31.2,7.4C31.5,7.1,31.8,7,32.2,7 c0.3,0,0.6,0.1,0.9,0.4l1.8,1.8c0.3,0.3,0.4,0.6,0.4,0.9c0,0.3-0.1,0.6-0.4,0.9L24.8,21.2l10.1,10.1c0.3,0.3,0.4,0.6,0.4,0.9 C35.3,32.5,35.2,32.8,34.9,33.1z'/%3E %3C/svg%3E\""

/***/ }),
/* 213 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath id='item_x5F_move' d='M14,5.3c0.4-0.4,0.8-0.7,1.4-0.9C16,4.1,16.6,4,17.1,4h17c0.5,0,0.9,0.2,1.3,0.5 c0.4,0.4,0.5,0.8,0.5,1.3v30.3c0,0.5-0.2,0.9-0.5,1.3C35,37.8,34.6,38,34.1,38H8.6c-0.5,0-0.9-0.2-1.3-0.5c-0.4-0.4-0.5-0.8-0.5-1.3 V14.3c0-0.5,0.1-1.1,0.4-1.7C7.4,12,7.7,11.6,8,11.2L14,5.3z M15.7,7l-5.9,5.9c-0.2,0.2-0.3,0.4-0.4,0.8h7.1V6.6 C16.1,6.7,15.8,6.8,15.7,7z M33.5,35.6V6.4H18.9v7.9c0,0.5-0.2,0.9-0.5,1.3c-0.4,0.4-0.8,0.5-1.3,0.5H9.2v19.4H33.5z M16.7,20.5 c0.2-0.2,0.4-0.3,0.6-0.3h6.3c0.2,0,0.5,0.1,0.6,0.3c0.2,0.2,0.2,0.4,0.3,0.6v0.7c0,0.2-0.1,0.5-0.3,0.6c-0.2,0.2-0.4,0.3-0.6,0.3 h-2.8l6.3,6.3c0.2,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.4-0.3,0.6l-0.6,0.6c-0.2,0.2-0.4,0.3-0.6,0.3c-0.2,0-0.4-0.1-0.6-0.2l-6.3-6.3 l0,2.8c0,0.2-0.1,0.4-0.3,0.6c-0.2,0.2-0.4,0.3-0.6,0.3h-0.7c-0.2,0-0.5-0.1-0.6-0.3c-0.2-0.2-0.3-0.4-0.3-0.6v-6.3 C16.4,20.9,16.5,20.7,16.7,20.5z'/%3E %3C/svg%3E\""

/***/ }),
/* 214 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M39.6,7.9c-0.3-0.3-0.7-0.5-1.2-0.5h-9.9V5.6c0-0.5-0.2-0.8-0.5-1.2S27.4,4,27,4H11.6c-0.5,0-1,0.1-1.5,0.3 c-0.5,0.2-1,0.5-1.3,0.8l-5.3,5.3c-0.3,0.3-0.6,0.8-0.8,1.3c-0.2,0.5-0.3,1-0.3,1.5V33c0,0.5,0.2,0.8,0.5,1.2s0.7,0.5,1.2,0.5h9.9 v1.7c0,0.5,0.2,0.8,0.5,1.2S15,38,15.5,38h23c0.5,0,0.8-0.2,1.2-0.5s0.5-0.7,0.5-1.2V9C40.1,8.6,39.9,8.2,39.6,7.9z M5,12.1l5.4-5.4 c0.1-0.1,0.4-0.3,0.7-0.4v6.4H4.6C4.8,12.4,4.9,12.2,5,12.1z M15,13.9c-0.3,0.3-0.6,0.8-0.8,1.3c-0.2,0.5-0.3,1-0.3,1.5v15.8H4.5V15 h7.1c0.5,0,0.8-0.2,1.2-0.5s0.5-0.7,0.5-1.2V6.2h13.1v1.2h-3.3c-0.5,0-1,0.1-1.5,0.3c-0.5,0.2-1,0.5-1.3,0.8L15,13.9z M22.6,9.7v6.4 h-6.4c0.1-0.3,0.2-0.6,0.4-0.7l5.4-5.4C22.1,9.9,22.3,9.8,22.6,9.7z M38,35.8H16V18.3h7.1c0.5,0,0.8-0.2,1.2-0.5s0.5-0.7,0.5-1.2 V9.5H38V35.8z'/%3E %3Cpath d='M26.4,20.7c0.1-0.1,0.3-0.2,0.4-0.2h1.2c0.2,0,0.3,0.1,0.4,0.2s0.2,0.3,0.2,0.4v4.3h4.3c0.2,0,0.3,0.1,0.4,0.2 s0.2,0.3,0.2,0.4v1.2c0,0.2-0.1,0.3-0.2,0.4s-0.3,0.2-0.4,0.2h-4.3V32c0,0.2-0.1,0.3-0.2,0.4s-0.3,0.2-0.4,0.2h-1.2 c-0.2,0-0.3-0.1-0.4-0.2s-0.2-0.3-0.2-0.4v-4.3H22c-0.2,0-0.3-0.1-0.4-0.2s-0.2-0.3-0.2-0.4V26c0-0.2,0.1-0.3,0.2-0.4 s0.3-0.2,0.4-0.2h4.3v-4.3C26.3,20.9,26.3,20.8,26.4,20.7z'/%3E %3C/svg%3E\""

/***/ }),
/* 215 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cg%3E %3Cpath d='M15.9,26c-1.4-1.4-2.1-3.1-2.1-5.1c0-2,0.7-3.7,2.1-5.1c1.4-1.4,3.1-2.1,5.1-2.1c2,0,3.7,0.7,5.1,2.1 c0.8,0.8,1.4,1.7,1.7,2.7l6.1,6.1l3.4-0.5c0.2,0,0.3-0.1,0.4-0.3c0.1-0.2,0.2-0.3,0.2-0.5v-4.9c0-0.2-0.1-0.4-0.2-0.5 c-0.1-0.2-0.3-0.2-0.5-0.3l-4-0.6c-0.2-0.7-0.5-1.4-0.9-2.2c0.3-0.4,0.7-0.9,1.2-1.6c0.5-0.7,0.9-1.2,1.1-1.5 c0.1-0.2,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5c-0.5-0.8-1.7-2-3.6-3.8C30.8,7.1,30.7,7,30.5,7c-0.2,0-0.4,0.1-0.5,0.2l-3.1,2.4 c-0.6-0.3-1.3-0.6-2-0.8l-0.6-4.1c0-0.2-0.1-0.3-0.3-0.5C23.8,4.1,23.6,4,23.4,4h-4.9c-0.4,0-0.7,0.2-0.8,0.6 c-0.2,0.7-0.4,2.1-0.6,4.1c-0.7,0.2-1.4,0.5-2,0.8l-3-2.4C11.8,7.1,11.6,7,11.4,7c-0.3,0-1,0.5-2.1,1.6c-1.1,1.1-1.8,1.8-2.2,2.4 C7,11.1,7,11.3,7,11.4c0,0.2,0.1,0.4,0.2,0.5c1,1.2,1.8,2.2,2.4,3c-0.4,0.7-0.7,1.4-0.9,2l-4.1,0.6c-0.2,0-0.3,0.1-0.4,0.3 S4,18.3,4,18.5v4.9c0,0.2,0.1,0.4,0.2,0.5c0.1,0.2,0.3,0.2,0.5,0.3l4,0.6c0.2,0.7,0.5,1.4,0.9,2.2c-0.3,0.4-0.7,0.9-1.2,1.6 c-0.5,0.7-0.9,1.2-1.1,1.5c-0.1,0.2-0.2,0.3-0.2,0.5c0,0.2,0.1,0.4,0.2,0.5c0.6,0.8,1.8,2,3.6,3.7c0.2,0.2,0.3,0.2,0.6,0.2 c0.2,0,0.4-0.1,0.6-0.2l3.1-2.4c0.6,0.3,1.3,0.6,2,0.8l0.6,4.1c0,0.2,0.1,0.3,0.3,0.5c0.2,0.1,0.3,0.2,0.5,0.2h4.9 c0.4,0,0.7-0.2,0.8-0.6c0.2-0.7,0.4-1.9,0.6-3.7L19,27.9C17.8,27.6,16.8,26.9,15.9,26z'/%3E %3C/g%3E %3Cpath d='M35.7,32.8c0-0.3-0.1-0.6-0.3-0.8l-2.4-2.4c-0.2-0.2-0.5-0.3-0.8-0.3c-0.3,0-0.6,0.1-0.8,0.4c0,0,0.1,0.1,0.2,0.2 c0.1,0.1,0.2,0.2,0.3,0.3c0,0,0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.2,0.3c0,0.1,0,0.2,0,0.3c0,0.3-0.1,0.6-0.3,0.8s-0.5,0.3-0.8,0.3 c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2-0.1-0.3-0.2c-0.1-0.1-0.2-0.1-0.2-0.2c0,0-0.1-0.1-0.3-0.3s-0.2-0.2-0.2-0.2 c-0.3,0.2-0.4,0.5-0.4,0.9c0,0.3,0.1,0.6,0.3,0.8l2.4,2.4c0.2,0.2,0.5,0.3,0.8,0.3c0.3,0,0.6-0.1,0.8-0.3l1.7-1.7 C35.5,33.4,35.7,33.2,35.7,32.8z M27.4,24.6c0-0.3-0.1-0.6-0.3-0.8l-2.4-2.4c-0.2-0.2-0.5-0.3-0.8-0.3c-0.3,0-0.6,0.1-0.8,0.3 l-1.7,1.7c-0.2,0.2-0.3,0.5-0.3,0.8c0,0.3,0.1,0.6,0.3,0.8l2.4,2.4c0.2,0.2,0.5,0.3,0.8,0.3c0.3,0,0.6-0.1,0.8-0.4 c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.2-0.3-0.3c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.1-0.2-0.2-0.3c0-0.1,0-0.2,0-0.3 c0-0.3,0.1-0.6,0.3-0.8s0.5-0.3,0.8-0.3c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0.1,0.3,0.2c0.1,0.1,0.2,0.1,0.2,0.2c0,0,0.1,0.1,0.3,0.3 c0.1,0.1,0.2,0.2,0.2,0.2C27.3,25.2,27.4,24.9,27.4,24.6z M37.9,32.8c0,0.9-0.3,1.7-1,2.4l-1.7,1.7c-0.6,0.6-1.4,1-2.4,1 c-0.9,0-1.7-0.3-2.4-1L28,34.5c-0.6-0.6-1-1.4-1-2.4c0-1,0.3-1.8,1-2.4l-1-1c-0.7,0.7-1.5,1-2.4,1c-0.9,0-1.7-0.3-2.4-1l-2.4-2.4 c-0.7-0.7-1-1.4-1-2.4c0-0.9,0.3-1.7,1-2.4l1.7-1.7c0.6-0.6,1.4-1,2.4-1c0.9,0,1.7,0.3,2.4,1l2.4,2.4c0.6,0.6,1,1.4,1,2.4 c0,1-0.3,1.8-1,2.4l1,1c0.7-0.7,1.5-1,2.4-1c0.9,0,1.7,0.3,2.4,1l2.4,2.4C37.6,31.1,37.9,31.9,37.9,32.8z'/%3E %3C/svg%3E\""

/***/ }),
/* 216 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M35.3,9.4v8.3c0,0.3-0.1,0.6-0.4,0.8c-0.2,0.2-0.5,0.4-0.8,0.4h-8.3c-0.5,0-0.9-0.2-1.1-0.7c-0.2-0.5-0.1-0.9,0.3-1.3 l2.5-2.5c-1.8-1.7-4-2.5-6.4-2.5c-1.3,0-2.5,0.2-3.7,0.7c-1.2,0.5-2.2,1.2-3,2c-0.8,0.8-1.5,1.9-2,3c-0.5,1.2-0.7,2.4-0.7,3.7 s0.2,2.5,0.7,3.7c0.5,1.2,1.2,2.2,2,3c0.8,0.8,1.9,1.5,3,2c1.2,0.5,2.4,0.7,3.7,0.7c1.5,0,2.8-0.3,4.1-1c1.3-0.6,2.4-1.5,3.3-2.7 c0.1-0.1,0.2-0.2,0.4-0.2c0.2,0,0.3,0.1,0.5,0.2l2.5,2.5c0.1,0.1,0.2,0.2,0.2,0.4s0,0.3-0.1,0.4c-1.3,1.6-3,2.9-4.9,3.8 c-1.9,0.9-3.9,1.3-6,1.3c-1.9,0-3.7-0.4-5.5-1.1s-3.3-1.8-4.5-3c-1.3-1.3-2.3-2.8-3-4.5S7,23.1,7,21.2s0.4-3.7,1.1-5.5 s1.8-3.3,3-4.5s2.8-2.3,4.5-3S19.2,7,21.2,7c1.8,0,3.6,0.3,5.2,1c1.7,0.7,3.2,1.6,4.5,2.9l2.4-2.4c0.4-0.4,0.8-0.5,1.3-0.3 C35.1,8.5,35.3,8.8,35.3,9.4z'/%3E %3C/svg%3E\""

/***/ }),
/* 217 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M32.2,17.1h-0.7v-3.3c0,0,0,0,0-0.1c0-0.1,0-0.3-0.1-0.4l-5.5-6.2c0,0,0,0,0,0c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0 c0,0-0.1,0-0.1,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0H12.1C11.5,7,11,7.5,11,8.1v9h-0.7c-0.9,0-1.6,0.7-1.6,1.6V27c0,0.9,0.7,1.6,1.6,1.6 H11v5.7c0,0.6,0.5,1.1,1.1,1.1h18.3c0.6,0,1.1-0.5,1.1-1.1v-5.7h0.7c0.9,0,1.6-0.7,1.6-1.6v-8.3C33.8,17.8,33.1,17.1,32.2,17.1 L32.2,17.1z M12.1,8.1H25v5.7c0,0.3,0.2,0.6,0.6,0.6h4.9v2.8H12.1V8.1z M30.4,33.9H12.1v-5.4h18.3V33.9z M28.5,26.3 M18.5,24.2 c0,0.9-0.2,1.5-0.6,2s-0.9,0.7-1.6,0.7c-0.7,0-1.3-0.3-1.7-0.8c-0.4-0.6-0.6-1.4-0.6-2.4v-1.3c0-1,0.2-1.8,0.6-2.4s1-0.8,1.7-0.8 c0.7,0,1.2,0.2,1.6,0.7c0.4,0.5,0.6,1.1,0.6,2h-1.3c0-0.5-0.1-0.9-0.2-1.1s-0.4-0.3-0.7-0.3c-0.3,0-0.6,0.1-0.7,0.4 s-0.2,0.8-0.2,1.4v1.4c0,0.8,0.1,1.3,0.2,1.5c0.1,0.3,0.4,0.4,0.7,0.4c0.3,0,0.6-0.1,0.7-0.3c0.1-0.2,0.2-0.5,0.2-1.1H18.5z M22,24.7c0-0.3-0.1-0.5-0.2-0.7c-0.1-0.2-0.4-0.3-0.7-0.5c-0.6-0.3-1.1-0.6-1.4-1c-0.3-0.4-0.4-0.8-0.4-1.4c0-0.6,0.2-1.1,0.6-1.5 s0.9-0.6,1.5-0.6c0.4,0,0.7,0.1,1.1,0.3s0.5,0.5,0.7,0.8c0.2,0.4,0.2,0.8,0.2,1.2H22c0-0.4-0.1-0.6-0.2-0.8 c-0.1-0.2-0.3-0.3-0.6-0.3c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.6c0,0.2,0.1,0.4,0.2,0.6s0.4,0.3,0.7,0.5 c0.6,0.3,1.1,0.6,1.4,1c0.3,0.4,0.4,0.9,0.4,1.5c0,0.7-0.2,1.2-0.5,1.5c-0.4,0.4-0.8,0.6-1.4,0.6c-0.4,0-0.8-0.1-1.1-0.3 c-0.3-0.2-0.6-0.5-0.8-0.9c-0.2-0.4-0.3-0.8-0.3-1.3h1.3c0,0.4,0.1,0.8,0.2,1c0.1,0.2,0.4,0.3,0.7,0.3C21.8,25.6,22,25.3,22,24.7z M26.3,24.6l1.1-5.5h1.4l-1.8,7.6h-1.3l-1.8-7.6h1.4L26.3,24.6z'/%3E %3C/svg%3E\""

/***/ }),
/* 218 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M35.7,18c0,0.3-0.2,0.5-0.5,0.9l-6.5,6.3l1.5,8.9c0,0.1,0,0.2,0,0.4c0,0.3-0.1,0.5-0.2,0.6c-0.1,0.2-0.3,0.3-0.5,0.3 c-0.2,0-0.5-0.1-0.7-0.2l-8-4.2l-8,4.2c-0.3,0.1-0.5,0.2-0.7,0.2c-0.3,0-0.4-0.1-0.6-0.3c-0.1-0.2-0.2-0.4-0.2-0.6 c0-0.1,0-0.2,0-0.4l1.5-8.9l-6.5-6.3C6.1,18.5,6,18.2,6,18c0-0.4,0.3-0.7,1-0.8l9-1.3l4-8.1C20.2,7.2,20.5,7,20.9,7s0.6,0.2,0.9,0.7 l4,8.1l9,1.3C35.4,17.3,35.7,17.5,35.7,18z'/%3E %3C/svg%3E\""

/***/ }),
/* 219 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M16.8,10.3L14.1,8l-1.3,1.6l2.7,2.2L16.8,10.3z M29.6,9.6L28.3,8l-2.7,2.2l1.3,1.6L29.6,9.6z M25.1,8.4l-1.3-1.5l-1.5,1.4V4 h-2v4.2l-1.5-1.4l-1.3,1.5l3.9,3.4L25.1,8.4z'/%3E %3Cpath d='M15.6,24.7c-1.5,0.1-2.9,0.7-3.9,1.9H9.8c-0.8,0-1.5-0.2-2-0.6C7.3,25.7,7,25.1,7,24.3c0-3.4,0.6-5.2,1.8-5.2 c0.1,0,0.2,0.1,0.6,0.3s0.9,0.4,1.4,0.6c0.6,0.2,1.2,0.3,1.7,0.3c0.6,0,1.3-0.1,1.9-0.3c-0.1,0.4-0.1,0.7-0.1,0.9 C14.5,22.3,14.9,23.6,15.6,24.7z M31.5,34.2c0,1.2-0.4,2.1-1.1,2.8c-0.7,0.7-1.6,1-2.9,1H14.9c-1.2,0-2.1-0.3-2.9-1 c-0.7-0.7-1.1-1.6-1.1-2.8c0-0.5,0-1,0.1-1.5s0.1-1,0.2-1.6c0.1-0.5,0.2-1.1,0.4-1.5c0.2-0.5,0.4-0.9,0.6-1.4 c0.2-0.5,0.5-0.9,0.9-1.2c0.3-0.3,0.8-0.6,1.2-0.8c0.5-0.2,1-0.3,1.6-0.3c0.1,0,0.3,0.1,0.6,0.3c0.3,0.2,0.7,0.5,1.1,0.7 c0.4,0.2,0.9,0.5,1.5,0.7s1.3,0.3,1.9,0.3s1.3-0.1,1.9-0.3s1.2-0.5,1.5-0.7c0.4-0.2,0.8-0.5,1.1-0.7c0.3-0.2,0.5-0.3,0.6-0.3 c0.6,0,1.2,0.1,1.6,0.3c0.5,0.2,0.9,0.5,1.2,0.8c0.3,0.3,0.6,0.7,0.9,1.2c0.2,0.5,0.5,0.9,0.6,1.4c0.2,0.5,0.3,1,0.4,1.5 s0.2,1.1,0.2,1.6S31.5,33.7,31.5,34.2z M16.3,15.4c0,1-0.4,1.9-1.1,2.6s-1.6,1.1-2.6,1.1S10.7,18.7,10,18c-0.7-0.7-1.1-1.6-1.1-2.6 s0.4-1.9,1.1-2.6c0.7-0.7,1.5-1.1,2.6-1.1s1.9,0.4,2.6,1.1C15.9,13.5,16.3,14.4,16.3,15.4z M26.1,21c0,1.4-0.5,2.6-1.5,3.5 c-1,1-2.2,1.5-3.5,1.5c-1.4,0-2.6-0.5-3.5-1.5c-1-1-1.5-2.2-1.5-3.5s0.5-2.6,1.5-3.5c1-0.9,2.2-1.5,3.5-1.5c1.4,0,2.6,0.5,3.5,1.5 C25.7,18.5,26.1,19.6,26.1,21z M35.4,24.3c0,0.8-0.3,1.3-0.9,1.7c-0.5,0.4-1.2,0.6-2,0.6h-1.9c-1-1.2-2.3-1.9-3.9-1.9 c0.8-1.2,1.2-2.4,1.2-3.7c0-0.3,0-0.6-0.1-0.9c0.6,0.2,1.3,0.3,1.9,0.3c0.5,0,1.2-0.1,1.7-0.3c0.6-0.2,1.1-0.4,1.4-0.6 c0.4-0.2,0.5-0.3,0.6-0.3C34.8,19.2,35.4,20.9,35.4,24.3z M33.6,15.4c0,1-0.4,1.9-1.1,2.6s-1.6,1.1-2.6,1.1c-1,0-1.9-0.4-2.6-1.1 c-0.7-0.7-1.1-1.6-1.1-2.6s0.4-1.9,1.1-2.6c0.7-0.7,1.5-1.1,2.6-1.1c1,0,1.9,0.4,2.6,1.1C33.2,13.5,33.6,14.4,33.6,15.4z'/%3E %3C/svg%3E\""

/***/ }),
/* 220 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 221 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M35.8,7.9C35.2,7.3,34.5,7,33.7,7H9C8.1,7,7.4,7.3,6.9,7.9C6.3,8.4,6,9.1,6,10v22.4c0,0.8,0.3,1.5,0.9,2.1 C7.4,35,8.1,35.3,9,35.3h24.8c0.8,0,1.5-0.3,2.1-0.9s0.9-1.3,0.9-2.1V10C36.7,9.1,36.4,8.4,35.8,7.9z M20.2,27.7 c0,0.2,0,0.3-0.1,0.4c-0.1,0.1-0.2,0.2-0.4,0.2H8.9c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.1-0.3-0.1-0.4v-1.2c0-0.2,0-0.3,0.1-0.4 c0.1-0.1,0.2-0.2,0.4-0.2h10.8c0.1,0,0.3,0.1,0.4,0.2c0.1,0.1,0.1,0.3,0.1,0.4V27.7z M20.2,21.6c0,0.2,0,0.3-0.1,0.4 c-0.1,0.1-0.2,0.2-0.4,0.2H8.9c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.1-0.3-0.1-0.4v-1.2c0-0.2,0-0.3,0.1-0.4c0.1-0.1,0.2-0.2,0.4-0.2 h10.8c0.1,0,0.3,0.1,0.4,0.2c0.1,0.1,0.1,0.3,0.1,0.4V21.6z M20.2,15.5c0,0.2,0,0.3-0.1,0.4c-0.1,0.1-0.2,0.2-0.4,0.2H8.9 c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.1-0.3-0.1-0.4v-1.2c0-0.2,0-0.3,0.1-0.4c0.1-0.1,0.2-0.2,0.4-0.2h10.8c0.1,0,0.3,0.1,0.4,0.2 c0.1,0.1,0.1,0.3,0.1,0.4V15.5z M34.3,27.7c0,0.2,0,0.3-0.1,0.4c-0.1,0.1-0.2,0.2-0.4,0.2H23c-0.1,0-0.3-0.1-0.4-0.2 c-0.1-0.1-0.1-0.3-0.1-0.4v-1.2c0-0.2,0-0.3,0.1-0.4c0.1-0.1,0.2-0.2,0.4-0.2h10.8c0.1,0,0.3,0.1,0.4,0.2c0.1,0.1,0.1,0.3,0.1,0.4 V27.7z M34.3,21.6c0,0.2,0,0.3-0.1,0.4c-0.1,0.1-0.2,0.2-0.4,0.2H23c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.1-0.3-0.1-0.4v-1.2 c0-0.2,0-0.3,0.1-0.4c0.1-0.1,0.2-0.2,0.4-0.2h10.8c0.1,0,0.3,0.1,0.4,0.2c0.1,0.1,0.1,0.3,0.1,0.4V21.6z M34.3,15.5 c0,0.2,0,0.3-0.1,0.4c-0.1,0.1-0.2,0.2-0.4,0.2H23c-0.1,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.1-0.3-0.1-0.4v-1.2c0-0.2,0-0.3,0.1-0.4 c0.1-0.1,0.2-0.2,0.4-0.2h10.8c0.1,0,0.3,0.1,0.4,0.2c0.1,0.1,0.1,0.3,0.1,0.4V15.5z'/%3E %3C/svg%3E\""

/***/ }),
/* 222 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 223 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 224 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M40,28.1V32c0,0.2-0.1,0.3-0.2,0.5s-0.3,0.2-0.5,0.2H12.3c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5v-3.9 c0-0.2,0.1-0.3,0.2-0.5c0.1-0.1,0.3-0.2,0.5-0.2h27.1c0.2,0,0.3,0.1,0.5,0.2C40,27.8,40,28,40,28.1z M40,19v3.9 c0,0.2-0.1,0.3-0.2,0.5c-0.1,0.1-0.3,0.2-0.5,0.2H12.3c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5V19c0-0.2,0.1-0.3,0.2-0.5 c0.1-0.1,0.3-0.2,0.5-0.2h27.1c0.2,0,0.3,0.1,0.5,0.2C40,18.6,40,18.8,40,19z M40,9.1v3.9c0,0.2-0.1,0.3-0.2,0.5 c-0.1,0.1-0.3,0.2-0.5,0.2H12.3c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5V9.1c0-0.2,0.1-0.3,0.2-0.5 c0.1-0.1,0.3-0.2,0.5-0.2h27.1c0.2,0,0.3,0.1,0.5,0.2C40,8.7,40,8.9,40,9.1z'/%3E %3Cpath d='M10.1,9.1L5.3,14c-0.1,0.1-0.2,0.2-0.4,0.2S4.6,14.1,4.5,14l-2.3-2.3C2.1,11.5,2,11.4,2,11.3c0-0.1,0.1-0.3,0.2-0.4l0.1-0.1 c0.1-0.1,0.2-0.2,0.4-0.2s0.3,0.1,0.4,0.2l1.8,1.8l4.4-4.4C9.3,8.1,9.4,8,9.6,8C9.7,8,9.9,8.1,10,8.2l0.2,0.2 c0.1,0.1,0.2,0.2,0.2,0.4C10.3,8.9,10.3,9,10.1,9.1z'/%3E %3Cpath d='M10.1,18.6l-4.9,4.9c-0.1,0.1-0.2,0.2-0.4,0.2s-0.3-0.1-0.4-0.2l-2.3-2.3C2.1,21,2,20.9,2,20.7s0.1-0.3,0.2-0.4l0.1-0.1 C2.4,20.1,2.5,20,2.7,20s0.3,0.1,0.4,0.2L4.8,22l4.4-4.4c0.1-0.1,0.2-0.2,0.4-0.2c0.1,0,0.3,0.1,0.4,0.2l0.2,0.2 c0.1,0.1,0.2,0.2,0.2,0.4S10.3,18.5,10.1,18.6z'/%3E %3Cpath d='M10.1,27.6l-4.9,4.9c-0.1,0.1-0.2,0.2-0.4,0.2s-0.3-0.1-0.4-0.2l-2.3-2.3C2.1,30.1,2,29.9,2,29.8s0.1-0.3,0.2-0.4l0.1-0.1 c0.1-0.1,0.2-0.2,0.4-0.2s0.3,0.1,0.4,0.2L4.8,31l4.4-4.4c0.1-0.1,0.2-0.2,0.4-0.2c0.1,0,0.3,0.1,0.4,0.2l0.2,0.2 c0.1,0.1,0.2,0.2,0.2,0.4C10.3,27.4,10.3,27.5,10.1,27.6z'/%3E %3C/svg%3E\""

/***/ }),
/* 225 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,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"

/***/ }),
/* 226 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhZgAYAPcAAMzMzbW4yKGipKCho/v8/tvc3sbJzrTJ4rbL5M3k/8zj/svh/cvi/bvQ6brP6LnN5rbK48vh/Mrg+7rO58nd9sve9cLU6sTV6c/g9MfX6s7d7664xK+0urO4vs3S2Mff+8Xd+cng+sfe+LnO5rjN5bfM5Mze883f9M3d79Hh89Pi8sfV5NDd677H0cLIz8/f8MbU4tLg7tDe7NXj8dPh77/J07S5vq+0ubK2uszP0svO0cXIy9bY2qChovz9/t3e39rb3NjZ2tfY2dbX2H6t2c/U2M3S1snO0q6ytcLS3cjY48bW4bfDy6u1vL/Gy6yytquxtcnP06/Q5LDQ5K/P463M4KvK3rHQ5K/O4srb5sna5cjZ5MbX4r/P2b7O2K7Q467O4a3N4N3z/9Xp9MHS3MjZ48fY4sXW4LbCybK3urG2ua6ztrm+wbe8v7S5vLO4u67R49/0/+H1/+D0/tfq9Nrs9cvR1La6vLG1t8vP0crO0KKkpdrc3dja2+P2/+b3/+P0/OLz+7rFyuLz+svS1bq/wdXa3NTZ2+j5/9rq79np7ur6/+j4/ef3/OX0+dTa3NTX2NPW19LV1s7Z3MzX2uT0+MzNzfX19fLy8vHx8fDw8O/v7+7u7u3t7ezs7Ovr6+bm5uXl5eTk5OPj4+Li4uHh4eDg4N/f397e3t3d3dra2tnZ2djY2NfX19bW1tXV1dTU1NPT09LS0tHR0dDQ0M/Pz87Ozs3NzczMzMLCwsHBwcDAwL+/v76+vr29vby8vLu7u7q6urm5ubi4uLe3t7Ozs7KysrGxsbCwsK+vr66urq2traysrKurq6qqqqmpqaioqKenp6ampqOjo5+fn56enp2dnZycnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAZgAYAEAI/wADCBxIsKBAIggTKlzIsKHDhxAjSmzYqeKoUb8qatzYKUCFjxZGdfhIsmQFIllSkhn1JqXLl1mIkAw50mRJInFyjhnFJqfPn3FQqmQJEyaRWEibweK1zFo1ZrtORUMaK0CDq81iMbVGjRkvU9GuNiAipazSXk277gJb9gsRsUp5MePq9RQ0sUQS6I27rNrTqNH0JiBrdmnfv2yluNXEWJMtUb5KkRI2q1VjTQFUaFbhYpQNGCs4zPKwWYXQlE5GpfHSBcqsKC+JlHYh6nPo0aWJINqNiNCoQooStZH1iDei01mciFLD+snr2KuiPztV61eyYbpcYYIWfVWAB+Cfmf+iZZ1Y9u3gHxD5wl589WTmtUdj7za9eFq+kGF/lSlaeiILBHjfL8iY98p2AS6wXnvj5WcgJvOxR8QsFFZo4YWzWCXWhhzidcWHIIYoolsdloiXYCimiCIRIrYYoluZxBjjJrG40sosnMgYYwAz9NgjDTUYUUQLMfjYI3JZbMFEFHagoYRRRs4ApJBERknEIlhiycgkhxhCSSNZYomkkkc0+WRsnKQZyijDpJnmLriE4mYAGNSZwSg41FnnBgZkoOdpSYyCx0tN7JCES0ToeWeeevLpZ51E+CFpHaPcIamkguRRx6WACkqooYimIup9w+jHiyyaSCNqKgEc4KozptT/Uuowp6bq6gFEwKHrfcIUWKs0urp163SyHkNML7L0dysRIDTLq6/JRtMsCLnuOl6pxPwaLBGudAsrfsYEkwt/0HTrioYNfPtLuLrwF9ZVC36hbjHBZJcJNPS9ddW89ZJ7ol6wVkdvu/cKFm8zsf5C77j35ovhwxWiayKHLLroIokTd5iXihzrVbHFI04I8cMSZwwvyC1ibPK/Hav4McofuuXDzDTXbLMPARCg884890wAkkUZ5fPQOxNBNNFAB42ojp7EAgorqFyyyic68uijDDk8HTUPLBiJ3BJ6gLLKKZdEckZsRmKt9SVcex2mI5KIHXUflYT5tQ5yXwLJ2Yhu/+L3J6jc8onfnkwztd+bBJDC4hoUAAAKi78wgBAaLJ7CaWbwgQsXKZXRwxBmIGp5449HLgDllhPxx+qB/GDJIKsDskcQgaz+B+ZAbN7556GnRISborDpZpqdDB/ACchfMMoNyDdvQvMnnLYSEjBpEVvzyjMP/fPNEyHH93SM4sb35M9BvhzSj7JG9bF54v5Zc1nzDC+oROO+JwFQoH9czFxzzfypiIb+KHAa/lnjf/SLBqIGyL9ryK8X9RsgEcRAQQM+MIAUFEMBtRK/Z/QigIhShQjd8wtlECMXsOiPCFURAAS40D3AWAZ2UigNFyIgXjA0IQr7ky8b5tA8NLQhEf8+QMTpkGcZBuoPET+Aw/HEMInSyFcrpjigYgiDYdGYYivQ9S1fDMwVmZAGXuhTxX6FMV9i6aIxrsgfMcJLMOKZhcKuCMbAeIw+sJLjwtyVL1j48T7AGJi7/AgLdBlxjuOC0BgZJDBhEAxfEhILsQIpLn+9US8k3GN/DEZG6iiskjyUkCxGOQta1MIWuEilLWhBi1mMEl0OmAAJSgCBWpZgBBNwALymwEsqYCEMVbCCMKsABixQYQoqi+UsawmBW+bykglQAAMkEAIRWDMEEWCAAjzGyyn4EpjCtAIxjYlMkY3sQiUz2ctgprKVjaVlHFsnytxyTgylM2PyBFk7V7YbMXiuCGYvMmc9KXTPieXTYvtUpz9TdNCLESEgADs="

/***/ }),
/* 227 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M35.6,21c0-2.6-0.7-5.1-2-7.3s-3.1-4-5.3-5.3s-4.7-2-7.3-2s-5.1,0.7-7.3,2s-4,3.1-5.3,5.3s-2,4.7-2,7.3s0.7,5.1,2,7.3 s3.1,4,5.3,5.3s4.7,2,7.3,2s5.1-0.7,7.3-2s4-3.1,5.3-5.3S35.6,23.6,35.6,21z M38,21c0,3.1-0.8,5.9-2.3,8.5c-1.5,2.6-3.6,4.7-6.2,6.2 C26.9,37.2,24.1,38,21,38c-3.1,0-5.9-0.8-8.5-2.3c-2.6-1.5-4.7-3.6-6.2-6.2S4,24.1,4,21c0-3.1,0.8-5.9,2.3-8.5s3.6-4.7,6.2-6.2 S17.9,4,21,4c3.1,0,5.9,0.8,8.5,2.3s4.7,3.6,6.2,6.2C37.2,15.1,38,17.9,38,21z M19.6,22.4h-7.7c-0.2,0-0.4-0.1-0.5-0.2 c-0.1-0.1-0.2-0.3-0.2-0.5v-1.4c0-0.2,0.1-0.4,0.2-0.5c0.1-0.1,0.3-0.2,0.5-0.2h7.7h10.5c0.2,0,0.4,0.1,0.5,0.2 c0.1,0.1,0.2,0.3,0.2,0.5v1.4c0,0.2-0.1,0.4-0.2,0.5s-0.3,0.2-0.5,0.2H19.6z'/%3E %3C/svg%3E\""

/***/ }),
/* 228 */,
/* 229 */,
/* 230 */,
/* 231 */,
/* 232 */,
/* 233 */,
/* 234 */,
/* 235 */,
/* 236 */,
/* 237 */,
/* 238 */,
/* 239 */,
/* 240 */,
/* 241 */,
/* 242 */,
/* 243 */,
/* 244 */,
/* 245 */,
/* 246 */,
/* 247 */,
/* 248 */,
/* 249 */,
/* 250 */,
/* 251 */,
/* 252 */,
/* 253 */,
/* 254 */,
/* 255 */,
/* 256 */,
/* 257 */,
/* 258 */,
/* 259 */,
/* 260 */,
/* 261 */,
/* 262 */,
/* 263 */,
/* 264 */,
/* 265 */,
/* 266 */,
/* 267 */,
/* 268 */,
/* 269 */,
/* 270 */,
/* 271 */,
/* 272 */,
/* 273 */,
/* 274 */,
/* 275 */,
/* 276 */,
/* 277 */,
/* 278 */,
/* 279 */,
/* 280 */,
/* 281 */,
/* 282 */,
/* 283 */,
/* 284 */,
/* 285 */,
/* 286 */,
/* 287 */,
/* 288 */,
/* 289 */,
/* 290 */,
/* 291 */,
/* 292 */,
/* 293 */,
/* 294 */,
/* 295 */,
/* 296 */,
/* 297 */,
/* 298 */,
/* 299 */,
/* 300 */,
/* 301 */,
/* 302 */,
/* 303 */,
/* 304 */,
/* 305 */,
/* 306 */,
/* 307 */,
/* 308 */,
/* 309 */,
/* 310 */,
/* 311 */,
/* 312 */,
/* 313 */,
/* 314 */,
/* 315 */,
/* 316 */,
/* 317 */,
/* 318 */,
/* 319 */,
/* 320 */,
/* 321 */,
/* 322 */,
/* 323 */,
/* 324 */,
/* 325 */,
/* 326 */,
/* 327 */,
/* 328 */,
/* 329 */,
/* 330 */,
/* 331 */,
/* 332 */,
/* 333 */,
/* 334 */,
/* 335 */,
/* 336 */,
/* 337 */,
/* 338 */,
/* 339 */,
/* 340 */,
/* 341 */,
/* 342 */,
/* 343 */,
/* 344 */,
/* 345 */,
/* 346 */,
/* 347 */,
/* 348 */,
/* 349 */,
/* 350 */,
/* 351 */,
/* 352 */,
/* 353 */,
/* 354 */,
/* 355 */,
/* 356 */,
/* 357 */,
/* 358 */,
/* 359 */,
/* 360 */,
/* 361 */,
/* 362 */,
/* 363 */,
/* 364 */,
/* 365 */,
/* 366 */,
/* 367 */,
/* 368 */,
/* 369 */,
/* 370 */,
/* 371 */,
/* 372 */,
/* 373 */,
/* 374 */,
/* 375 */,
/* 376 */,
/* 377 */,
/* 378 */,
/* 379 */,
/* 380 */,
/* 381 */,
/* 382 */,
/* 383 */,
/* 384 */,
/* 385 */,
/* 386 */,
/* 387 */,
/* 388 */,
/* 389 */,
/* 390 */,
/* 391 */,
/* 392 */,
/* 393 */,
/* 394 */,
/* 395 */,
/* 396 */,
/* 397 */,
/* 398 */,
/* 399 */,
/* 400 */,
/* 401 */,
/* 402 */,
/* 403 */,
/* 404 */,
/* 405 */,
/* 406 */,
/* 407 */,
/* 408 */,
/* 409 */,
/* 410 */,
/* 411 */,
/* 412 */,
/* 413 */,
/* 414 */,
/* 415 */,
/* 416 */,
/* 417 */,
/* 418 */,
/* 419 */,
/* 420 */,
/* 421 */,
/* 422 */,
/* 423 */,
/* 424 */,
/* 425 */,
/* 426 */,
/* 427 */,
/* 428 */,
/* 429 */,
/* 430 */,
/* 431 */,
/* 432 */,
/* 433 */,
/* 434 */,
/* 435 */,
/* 436 */,
/* 437 */,
/* 438 */,
/* 439 */,
/* 440 */,
/* 441 */,
/* 442 */,
/* 443 */,
/* 444 */,
/* 445 */,
/* 446 */,
/* 447 */,
/* 448 */,
/* 449 */,
/* 450 */,
/* 451 */,
/* 452 */,
/* 453 */,
/* 454 */,
/* 455 */,
/* 456 */,
/* 457 */,
/* 458 */,
/* 459 */,
/* 460 */,
/* 461 */,
/* 462 */,
/* 463 */,
/* 464 */,
/* 465 */,
/* 466 */,
/* 467 */,
/* 468 */,
/* 469 */,
/* 470 */,
/* 471 */,
/* 472 */,
/* 473 */,
/* 474 */,
/* 475 */,
/* 476 */,
/* 477 */,
/* 478 */,
/* 479 */,
/* 480 */,
/* 481 */,
/* 482 */,
/* 483 */,
/* 484 */,
/* 485 */,
/* 486 */,
/* 487 */,
/* 488 */,
/* 489 */,
/* 490 */,
/* 491 */,
/* 492 */,
/* 493 */,
/* 494 */,
/* 495 */,
/* 496 */,
/* 497 */,
/* 498 */,
/* 499 */,
/* 500 */,
/* 501 */,
/* 502 */,
/* 503 */,
/* 504 */,
/* 505 */,
/* 506 */,
/* 507 */,
/* 508 */,
/* 509 */,
/* 510 */,
/* 511 */,
/* 512 */,
/* 513 */,
/* 514 */,
/* 515 */,
/* 516 */,
/* 517 */,
/* 518 */,
/* 519 */,
/* 520 */,
/* 521 */,
/* 522 */,
/* 523 */,
/* 524 */,
/* 525 */,
/* 526 */,
/* 527 */,
/* 528 */,
/* 529 */,
/* 530 */,
/* 531 */,
/* 532 */,
/* 533 */,
/* 534 */,
/* 535 */,
/* 536 */,
/* 537 */,
/* 538 */,
/* 539 */,
/* 540 */,
/* 541 */,
/* 542 */,
/* 543 */,
/* 544 */,
/* 545 */,
/* 546 */,
/* 547 */,
/* 548 */,
/* 549 */,
/* 550 */,
/* 551 */,
/* 552 */,
/* 553 */,
/* 554 */,
/* 555 */,
/* 556 */,
/* 557 */,
/* 558 */,
/* 559 */,
/* 560 */,
/* 561 */,
/* 562 */,
/* 563 */,
/* 564 */,
/* 565 */,
/* 566 */,
/* 567 */,
/* 568 */,
/* 569 */,
/* 570 */,
/* 571 */,
/* 572 */,
/* 573 */,
/* 574 */,
/* 575 */,
/* 576 */,
/* 577 */,
/* 578 */,
/* 579 */,
/* 580 */,
/* 581 */,
/* 582 */,
/* 583 */,
/* 584 */,
/* 585 */,
/* 586 */,
/* 587 */,
/* 588 */,
/* 589 */,
/* 590 */,
/* 591 */,
/* 592 */,
/* 593 */,
/* 594 */,
/* 595 */,
/* 596 */,
/* 597 */,
/* 598 */,
/* 599 */,
/* 600 */,
/* 601 */,
/* 602 */,
/* 603 */,
/* 604 */,
/* 605 */,
/* 606 */,
/* 607 */,
/* 608 */,
/* 609 */,
/* 610 */,
/* 611 */,
/* 612 */,
/* 613 */,
/* 614 */,
/* 615 */,
/* 616 */,
/* 617 */,
/* 618 */,
/* 619 */,
/* 620 */,
/* 621 */,
/* 622 */,
/* 623 */,
/* 624 */,
/* 625 */,
/* 626 */,
/* 627 */,
/* 628 */,
/* 629 */,
/* 630 */,
/* 631 */,
/* 632 */,
/* 633 */,
/* 634 */,
/* 635 */,
/* 636 */,
/* 637 */,
/* 638 */,
/* 639 */,
/* 640 */,
/* 641 */,
/* 642 */,
/* 643 */,
/* 644 */,
/* 645 */,
/* 646 */,
/* 647 */,
/* 648 */,
/* 649 */,
/* 650 */,
/* 651 */,
/* 652 */,
/* 653 */,
/* 654 */,
/* 655 */,
/* 656 */,
/* 657 */,
/* 658 */,
/* 659 */,
/* 660 */,
/* 661 */,
/* 662 */,
/* 663 */,
/* 664 */,
/* 665 */,
/* 666 */,
/* 667 */,
/* 668 */,
/* 669 */,
/* 670 */,
/* 671 */,
/* 672 */,
/* 673 */,
/* 674 */,
/* 675 */,
/* 676 */,
/* 677 */,
/* 678 */,
/* 679 */,
/* 680 */,
/* 681 */,
/* 682 */,
/* 683 */,
/* 684 */,
/* 685 */,
/* 686 */,
/* 687 */,
/* 688 */,
/* 689 */,
/* 690 */,
/* 691 */,
/* 692 */,
/* 693 */,
/* 694 */,
/* 695 */,
/* 696 */,
/* 697 */,
/* 698 */,
/* 699 */,
/* 700 */,
/* 701 */,
/* 702 */,
/* 703 */,
/* 704 */,
/* 705 */,
/* 706 */,
/* 707 */,
/* 708 */,
/* 709 */,
/* 710 */,
/* 711 */,
/* 712 */,
/* 713 */,
/* 714 */,
/* 715 */,
/* 716 */,
/* 717 */,
/* 718 */,
/* 719 */,
/* 720 */,
/* 721 */,
/* 722 */,
/* 723 */,
/* 724 */,
/* 725 */,
/* 726 */,
/* 727 */,
/* 728 */,
/* 729 */,
/* 730 */,
/* 731 */,
/* 732 */,
/* 733 */,
/* 734 */,
/* 735 */,
/* 736 */,
/* 737 */,
/* 738 */,
/* 739 */,
/* 740 */,
/* 741 */,
/* 742 */,
/* 743 */,
/* 744 */,
/* 745 */,
/* 746 */,
/* 747 */,
/* 748 */,
/* 749 */,
/* 750 */,
/* 751 */,
/* 752 */,
/* 753 */,
/* 754 */,
/* 755 */,
/* 756 */,
/* 757 */,
/* 758 */,
/* 759 */,
/* 760 */,
/* 761 */,
/* 762 */,
/* 763 */,
/* 764 */,
/* 765 */,
/* 766 */,
/* 767 */,
/* 768 */,
/* 769 */,
/* 770 */,
/* 771 */,
/* 772 */,
/* 773 */,
/* 774 */,
/* 775 */,
/* 776 */,
/* 777 */,
/* 778 */,
/* 779 */,
/* 780 */,
/* 781 */,
/* 782 */,
/* 783 */,
/* 784 */,
/* 785 */,
/* 786 */,
/* 787 */,
/* 788 */,
/* 789 */,
/* 790 */,
/* 791 */,
/* 792 */,
/* 793 */,
/* 794 */,
/* 795 */,
/* 796 */,
/* 797 */,
/* 798 */,
/* 799 */,
/* 800 */,
/* 801 */,
/* 802 */,
/* 803 */,
/* 804 */,
/* 805 */,
/* 806 */,
/* 807 */,
/* 808 */,
/* 809 */,
/* 810 */,
/* 811 */,
/* 812 */,
/* 813 */,
/* 814 */,
/* 815 */,
/* 816 */,
/* 817 */,
/* 818 */,
/* 819 */,
/* 820 */,
/* 821 */,
/* 822 */,
/* 823 */,
/* 824 */,
/* 825 */,
/* 826 */,
/* 827 */,
/* 828 */,
/* 829 */,
/* 830 */,
/* 831 */,
/* 832 */,
/* 833 */,
/* 834 */,
/* 835 */,
/* 836 */,
/* 837 */,
/* 838 */,
/* 839 */,
/* 840 */,
/* 841 */,
/* 842 */,
/* 843 */,
/* 844 */,
/* 845 */,
/* 846 */,
/* 847 */,
/* 848 */,
/* 849 */,
/* 850 */,
/* 851 */,
/* 852 */,
/* 853 */,
/* 854 */,
/* 855 */,
/* 856 */,
/* 857 */,
/* 858 */,
/* 859 */,
/* 860 */,
/* 861 */,
/* 862 */,
/* 863 */,
/* 864 */,
/* 865 */,
/* 866 */,
/* 867 */,
/* 868 */,
/* 869 */,
/* 870 */,
/* 871 */,
/* 872 */,
/* 873 */,
/* 874 */,
/* 875 */,
/* 876 */,
/* 877 */,
/* 878 */,
/* 879 */,
/* 880 */,
/* 881 */,
/* 882 */,
/* 883 */,
/* 884 */,
/* 885 */,
/* 886 */,
/* 887 */,
/* 888 */,
/* 889 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Tine 2.0
 *
 * @package     Tine
 * @subpackage  Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/**
 * webpack entry
 */
__webpack_require__(890);
var lodash = __webpack_require__(4);
var director = __webpack_require__(922);
var postal = __webpack_require__(14);
__webpack_require__(111);
__webpack_require__(923);
__webpack_require__(925);
__webpack_require__(112);
__webpack_require__(113);

// include traditional stuff as defined in jsb2
__webpack_require__(927);

__webpack_require__(2234);

module.exports = {
    director: director,
    postal: postal,
    lodash: lodash
};

/***/ }),
/* 890 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(891);
__webpack_require__(894);
__webpack_require__(905);
__webpack_require__(909);
__webpack_require__(920);
__webpack_require__(921);
module.exports = __webpack_require__(33).Promise;


/***/ }),
/* 891 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 19.1.3.6 Object.prototype.toString()
var classof = __webpack_require__(101);
var test = {};
test[__webpack_require__(6)('toStringTag')] = 'z';
if (test + '' != '[object z]') {
  __webpack_require__(44)(Object.prototype, 'toString', function toString() {
    return '[object ' + classof(this) + ']';
  }, true);
}


/***/ }),
/* 892 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = !__webpack_require__(46) && !__webpack_require__(170)(function () {
  return Object.defineProperty(__webpack_require__(103)('div'), 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),
/* 893 */
/***/ (function(module, exports, __webpack_require__) {

// 7.1.1 ToPrimitive(input [, PreferredType])
var isObject = __webpack_require__(45);
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function (it, S) {
  if (!isObject(it)) return it;
  var fn, val;
  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  throw TypeError("Can't convert object to primitive value");
};


/***/ }),
/* 894 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $at = __webpack_require__(895)(true);

// 21.1.3.27 String.prototype[@@iterator]()
__webpack_require__(172)(String, 'String', function (iterated) {
  this._t = String(iterated); // target
  this._i = 0;                // next index
// 21.1.5.2.1 %StringIteratorPrototype%.next()
}, function () {
  var O = this._t;
  var index = this._i;
  var point;
  if (index >= O.length) return { value: undefined, done: true };
  point = $at(O, index);
  this._i += point.length;
  return { value: point, done: false };
});


/***/ }),
/* 895 */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(104);
var defined = __webpack_require__(105);
// true  -> String#at
// false -> String#codePointAt
module.exports = function (TO_STRING) {
  return function (that, pos) {
    var s = String(defined(that));
    var i = toInteger(pos);
    var l = s.length;
    var a, b;
    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
    a = s.charCodeAt(i);
    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
      ? TO_STRING ? s.charAt(i) : a
      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
  };
};


/***/ }),
/* 896 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var create = __webpack_require__(897);
var descriptor = __webpack_require__(171);
var setToStringTag = __webpack_require__(108);
var IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
__webpack_require__(32)(IteratorPrototype, __webpack_require__(6)('iterator'), function () { return this; });

module.exports = function (Constructor, NAME, next) {
  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
  setToStringTag(Constructor, NAME + ' Iterator');
};


/***/ }),
/* 897 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
var anObject = __webpack_require__(24);
var dPs = __webpack_require__(898);
var enumBugKeys = __webpack_require__(176);
var IE_PROTO = __webpack_require__(107)('IE_PROTO');
var Empty = function () { /* empty */ };
var PROTOTYPE = 'prototype';

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = __webpack_require__(103)('iframe');
  var i = enumBugKeys.length;
  var lt = '<';
  var gt = '>';
  var iframeDocument;
  iframe.style.display = 'none';
  __webpack_require__(177).appendChild(iframe);
  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
  // createDict = iframe.contentWindow.Object;
  // html.removeChild(iframe);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
  iframeDocument.close();
  createDict = iframeDocument.F;
  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
  return createDict();
};

module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    Empty[PROTOTYPE] = anObject(O);
    result = new Empty();
    Empty[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = createDict();
  return Properties === undefined ? result : dPs(result, Properties);
};


/***/ }),
/* 898 */
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__(66);
var anObject = __webpack_require__(24);
var getKeys = __webpack_require__(174);

module.exports = __webpack_require__(46) ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = getKeys(Properties);
  var length = keys.length;
  var i = 0;
  var P;
  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
  return O;
};


/***/ }),
/* 899 */
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__(47);
var toIObject = __webpack_require__(106);
var arrayIndexOf = __webpack_require__(901)(false);
var IE_PROTO = __webpack_require__(107)('IE_PROTO');

module.exports = function (object, names) {
  var O = toIObject(object);
  var i = 0;
  var result = [];
  var key;
  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
  // Don't enum bug & hidden keys
  while (names.length > i) if (has(O, key = names[i++])) {
    ~arrayIndexOf(result, key) || result.push(key);
  }
  return result;
};


/***/ }),
/* 900 */
/***/ (function(module, exports, __webpack_require__) {

// fallback for non-array-like ES3 and non-enumerable old V8 strings
var cof = __webpack_require__(65);
// eslint-disable-next-line no-prototype-builtins
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
  return cof(it) == 'String' ? it.split('') : Object(it);
};


/***/ }),
/* 901 */
/***/ (function(module, exports, __webpack_require__) {

// false -> Array#indexOf
// true  -> Array#includes
var toIObject = __webpack_require__(106);
var toLength = __webpack_require__(175);
var toAbsoluteIndex = __webpack_require__(902);
module.exports = function (IS_INCLUDES) {
  return function ($this, el, fromIndex) {
    var O = toIObject($this);
    var length = toLength(O.length);
    var index = toAbsoluteIndex(fromIndex, length);
    var value;
    // Array#includes uses SameValueZero equality algorithm
    // eslint-disable-next-line no-self-compare
    if (IS_INCLUDES && el != el) while (length > index) {
      value = O[index++];
      // eslint-disable-next-line no-self-compare
      if (value != value) return true;
    // Array#indexOf ignores holes, Array#includes - not
    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
      if (O[index] === el) return IS_INCLUDES || index || 0;
    } return !IS_INCLUDES && -1;
  };
};


/***/ }),
/* 902 */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(104);
var max = Math.max;
var min = Math.min;
module.exports = function (index, length) {
  index = toInteger(index);
  return index < 0 ? max(index + length, 0) : min(index, length);
};


/***/ }),
/* 903 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
var has = __webpack_require__(47);
var toObject = __webpack_require__(904);
var IE_PROTO = __webpack_require__(107)('IE_PROTO');
var ObjectProto = Object.prototype;

module.exports = Object.getPrototypeOf || function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectProto : null;
};


/***/ }),
/* 904 */
/***/ (function(module, exports, __webpack_require__) {

// 7.1.13 ToObject(argument)
var defined = __webpack_require__(105);
module.exports = function (it) {
  return Object(defined(it));
};


/***/ }),
/* 905 */
/***/ (function(module, exports, __webpack_require__) {

var $iterators = __webpack_require__(906);
var getKeys = __webpack_require__(174);
var redefine = __webpack_require__(44);
var global = __webpack_require__(11);
var hide = __webpack_require__(32);
var Iterators = __webpack_require__(48);
var wks = __webpack_require__(6);
var ITERATOR = wks('iterator');
var TO_STRING_TAG = wks('toStringTag');
var ArrayValues = Iterators.Array;

var DOMIterables = {
  CSSRuleList: true, // TODO: Not spec compliant, should be false.
  CSSStyleDeclaration: false,
  CSSValueList: false,
  ClientRectList: false,
  DOMRectList: false,
  DOMStringList: false,
  DOMTokenList: true,
  DataTransferItemList: false,
  FileList: false,
  HTMLAllCollection: false,
  HTMLCollection: false,
  HTMLFormElement: false,
  HTMLSelectElement: false,
  MediaList: true, // TODO: Not spec compliant, should be false.
  MimeTypeArray: false,
  NamedNodeMap: false,
  NodeList: true,
  PaintRequestList: false,
  Plugin: false,
  PluginArray: false,
  SVGLengthList: false,
  SVGNumberList: false,
  SVGPathSegList: false,
  SVGPointList: false,
  SVGStringList: false,
  SVGTransformList: false,
  SourceBufferList: false,
  StyleSheetList: true, // TODO: Not spec compliant, should be false.
  TextTrackCueList: false,
  TextTrackList: false,
  TouchList: false
};

for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {
  var NAME = collections[i];
  var explicit = DOMIterables[NAME];
  var Collection = global[NAME];
  var proto = Collection && Collection.prototype;
  var key;
  if (proto) {
    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);
    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
    Iterators[NAME] = ArrayValues;
    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
  }
}


/***/ }),
/* 906 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var addToUnscopables = __webpack_require__(907);
var step = __webpack_require__(908);
var Iterators = __webpack_require__(48);
var toIObject = __webpack_require__(106);

// 22.1.3.4 Array.prototype.entries()
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
module.exports = __webpack_require__(172)(Array, 'Array', function (iterated, kind) {
  this._t = toIObject(iterated); // target
  this._i = 0;                   // next index
  this._k = kind;                // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
}, function () {
  var O = this._t;
  var kind = this._k;
  var index = this._i++;
  if (!O || index >= O.length) {
    this._t = undefined;
    return step(1);
  }
  if (kind == 'keys') return step(0, index);
  if (kind == 'values') return step(0, O[index]);
  return step(0, [index, O[index]]);
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
Iterators.Arguments = Iterators.Array;

addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');


/***/ }),
/* 907 */
/***/ (function(module, exports, __webpack_require__) {

// 22.1.3.31 Array.prototype[@@unscopables]
var UNSCOPABLES = __webpack_require__(6)('unscopables');
var ArrayProto = Array.prototype;
if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(32)(ArrayProto, UNSCOPABLES, {});
module.exports = function (key) {
  ArrayProto[UNSCOPABLES][key] = true;
};


/***/ }),
/* 908 */
/***/ (function(module, exports) {

module.exports = function (done, value) {
  return { value: value, done: !!done };
};


/***/ }),
/* 909 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var LIBRARY = __webpack_require__(173);
var global = __webpack_require__(11);
var ctx = __webpack_require__(68);
var classof = __webpack_require__(101);
var $export = __webpack_require__(67);
var isObject = __webpack_require__(45);
var aFunction = __webpack_require__(69);
var anInstance = __webpack_require__(910);
var forOf = __webpack_require__(911);
var speciesConstructor = __webpack_require__(178);
var task = __webpack_require__(179).set;
var microtask = __webpack_require__(916)();
var newPromiseCapabilityModule = __webpack_require__(109);
var perform = __webpack_require__(180);
var promiseResolve = __webpack_require__(181);
var PROMISE = 'Promise';
var TypeError = global.TypeError;
var process = global.process;
var $Promise = global[PROMISE];
var isNode = classof(process) == 'process';
var empty = function () { /* empty */ };
var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;
var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;

var USE_NATIVE = !!function () {
  try {
    // correct subclassing with @@species support
    var promise = $Promise.resolve(1);
    var FakePromise = (promise.constructor = {})[__webpack_require__(6)('species')] = function (exec) {
      exec(empty, empty);
    };
    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;
  } catch (e) { /* empty */ }
}();

// helpers
var isThenable = function (it) {
  var then;
  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
};
var notify = function (promise, isReject) {
  if (promise._n) return;
  promise._n = true;
  var chain = promise._c;
  microtask(function () {
    var value = promise._v;
    var ok = promise._s == 1;
    var i = 0;
    var run = function (reaction) {
      var handler = ok ? reaction.ok : reaction.fail;
      var resolve = reaction.resolve;
      var reject = reaction.reject;
      var domain = reaction.domain;
      var result, then;
      try {
        if (handler) {
          if (!ok) {
            if (promise._h == 2) onHandleUnhandled(promise);
            promise._h = 1;
          }
          if (handler === true) result = value;
          else {
            if (domain) domain.enter();
            result = handler(value);
            if (domain) domain.exit();
          }
          if (result === reaction.promise) {
            reject(TypeError('Promise-chain cycle'));
          } else if (then = isThenable(result)) {
            then.call(result, resolve, reject);
          } else resolve(result);
        } else reject(value);
      } catch (e) {
        reject(e);
      }
    };
    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach
    promise._c = [];
    promise._n = false;
    if (isReject && !promise._h) onUnhandled(promise);
  });
};
var onUnhandled = function (promise) {
  task.call(global, function () {
    var value = promise._v;
    var unhandled = isUnhandled(promise);
    var result, handler, console;
    if (unhandled) {
      result = perform(function () {
        if (isNode) {
          process.emit('unhandledRejection', value, promise);
        } else if (handler = global.onunhandledrejection) {
          handler({ promise: promise, reason: value });
        } else if ((console = global.console) && console.error) {
          console.error('Unhandled promise rejection', value);
        }
      });
      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
      promise._h = isNode || isUnhandled(promise) ? 2 : 1;
    } promise._a = undefined;
    if (unhandled && result.e) throw result.v;
  });
};
var isUnhandled = function (promise) {
  if (promise._h == 1) return false;
  var chain = promise._a || promise._c;
  var i = 0;
  var reaction;
  while (chain.length > i) {
    reaction = chain[i++];
    if (reaction.fail || !isUnhandled(reaction.promise)) return false;
  } return true;
};
var onHandleUnhandled = function (promise) {
  task.call(global, function () {
    var handler;
    if (isNode) {
      process.emit('rejectionHandled', promise);
    } else if (handler = global.onrejectionhandled) {
      handler({ promise: promise, reason: promise._v });
    }
  });
};
var $reject = function (value) {
  var promise = this;
  if (promise._d) return;
  promise._d = true;
  promise = promise._w || promise; // unwrap
  promise._v = value;
  promise._s = 2;
  if (!promise._a) promise._a = promise._c.slice();
  notify(promise, true);
};
var $resolve = function (value) {
  var promise = this;
  var then;
  if (promise._d) return;
  promise._d = true;
  promise = promise._w || promise; // unwrap
  try {
    if (promise === value) throw TypeError("Promise can't be resolved itself");
    if (then = isThenable(value)) {
      microtask(function () {
        var wrapper = { _w: promise, _d: false }; // wrap
        try {
          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
        } catch (e) {
          $reject.call(wrapper, e);
        }
      });
    } else {
      promise._v = value;
      promise._s = 1;
      notify(promise, false);
    }
  } catch (e) {
    $reject.call({ _w: promise, _d: false }, e); // wrap
  }
};

// constructor polyfill
if (!USE_NATIVE) {
  // 25.4.3.1 Promise(executor)
  $Promise = function Promise(executor) {
    anInstance(this, $Promise, PROMISE, '_h');
    aFunction(executor);
    Internal.call(this);
    try {
      executor(ctx($resolve, this, 1), ctx($reject, this, 1));
    } catch (err) {
      $reject.call(this, err);
    }
  };
  // eslint-disable-next-line no-unused-vars
  Internal = function Promise(executor) {
    this._c = [];             // <- awaiting reactions
    this._a = undefined;      // <- checked in isUnhandled reactions
    this._s = 0;              // <- state
    this._d = false;          // <- done
    this._v = undefined;      // <- value
    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
    this._n = false;          // <- notify
  };
  Internal.prototype = __webpack_require__(917)($Promise.prototype, {
    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
    then: function then(onFulfilled, onRejected) {
      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
      reaction.fail = typeof onRejected == 'function' && onRejected;
      reaction.domain = isNode ? process.domain : undefined;
      this._c.push(reaction);
      if (this._a) this._a.push(reaction);
      if (this._s) notify(this, false);
      return reaction.promise;
    },
    // 25.4.5.1 Promise.prototype.catch(onRejected)
    'catch': function (onRejected) {
      return this.then(undefined, onRejected);
    }
  });
  OwnPromiseCapability = function () {
    var promise = new Internal();
    this.promise = promise;
    this.resolve = ctx($resolve, promise, 1);
    this.reject = ctx($reject, promise, 1);
  };
  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
    return C === $Promise || C === Wrapper
      ? new OwnPromiseCapability(C)
      : newGenericPromiseCapability(C);
  };
}

$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });
__webpack_require__(108)($Promise, PROMISE);
__webpack_require__(918)(PROMISE);
Wrapper = __webpack_require__(33)[PROMISE];

// statics
$export($export.S + $export.F * !USE_NATIVE, PROMISE, {
  // 25.4.4.5 Promise.reject(r)
  reject: function reject(r) {
    var capability = newPromiseCapability(this);
    var $$reject = capability.reject;
    $$reject(r);
    return capability.promise;
  }
});
$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
  // 25.4.4.6 Promise.resolve(x)
  resolve: function resolve(x) {
    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
  }
});
$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(919)(function (iter) {
  $Promise.all(iter)['catch'](empty);
})), PROMISE, {
  // 25.4.4.1 Promise.all(iterable)
  all: function all(iterable) {
    var C = this;
    var capability = newPromiseCapability(C);
    var resolve = capability.resolve;
    var reject = capability.reject;
    var result = perform(function () {
      var values = [];
      var index = 0;
      var remaining = 1;
      forOf(iterable, false, function (promise) {
        var $index = index++;
        var alreadyCalled = false;
        values.push(undefined);
        remaining++;
        C.resolve(promise).then(function (value) {
          if (alreadyCalled) return;
          alreadyCalled = true;
          values[$index] = value;
          --remaining || resolve(values);
        }, reject);
      });
      --remaining || resolve(values);
    });
    if (result.e) reject(result.v);
    return capability.promise;
  },
  // 25.4.4.4 Promise.race(iterable)
  race: function race(iterable) {
    var C = this;
    var capability = newPromiseCapability(C);
    var reject = capability.reject;
    var result = perform(function () {
      forOf(iterable, false, function (promise) {
        C.resolve(promise).then(capability.resolve, reject);
      });
    });
    if (result.e) reject(result.v);
    return capability.promise;
  }
});


/***/ }),
/* 910 */
/***/ (function(module, exports) {

module.exports = function (it, Constructor, name, forbiddenField) {
  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
    throw TypeError(name + ': incorrect invocation!');
  } return it;
};


/***/ }),
/* 911 */
/***/ (function(module, exports, __webpack_require__) {

var ctx = __webpack_require__(68);
var call = __webpack_require__(912);
var isArrayIter = __webpack_require__(913);
var anObject = __webpack_require__(24);
var toLength = __webpack_require__(175);
var getIterFn = __webpack_require__(914);
var BREAK = {};
var RETURN = {};
var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
  var f = ctx(fn, that, entries ? 2 : 1);
  var index = 0;
  var length, step, iterator, result;
  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
  // fast case for arrays with default iterator
  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
    if (result === BREAK || result === RETURN) return result;
  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
    result = call(iterator, f, step.value, entries);
    if (result === BREAK || result === RETURN) return result;
  }
};
exports.BREAK = BREAK;
exports.RETURN = RETURN;


/***/ }),
/* 912 */
/***/ (function(module, exports, __webpack_require__) {

// call something on iterator step with safe closing on error
var anObject = __webpack_require__(24);
module.exports = function (iterator, fn, value, entries) {
  try {
    return entries ? fn(anObject(value)[0], value[1]) : fn(value);
  // 7.4.6 IteratorClose(iterator, completion)
  } catch (e) {
    var ret = iterator['return'];
    if (ret !== undefined) anObject(ret.call(iterator));
    throw e;
  }
};


/***/ }),
/* 913 */
/***/ (function(module, exports, __webpack_require__) {

// check on default Array iterator
var Iterators = __webpack_require__(48);
var ITERATOR = __webpack_require__(6)('iterator');
var ArrayProto = Array.prototype;

module.exports = function (it) {
  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
};


/***/ }),
/* 914 */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(101);
var ITERATOR = __webpack_require__(6)('iterator');
var Iterators = __webpack_require__(48);
module.exports = __webpack_require__(33).getIteratorMethod = function (it) {
  if (it != undefined) return it[ITERATOR]
    || it['@@iterator']
    || Iterators[classof(it)];
};


/***/ }),
/* 915 */
/***/ (function(module, exports) {

// fast apply, http://jsperf.lnkit.com/fast-apply/5
module.exports = function (fn, args, that) {
  var un = that === undefined;
  switch (args.length) {
    case 0: return un ? fn()
                      : fn.call(that);
    case 1: return un ? fn(args[0])
                      : fn.call(that, args[0]);
    case 2: return un ? fn(args[0], args[1])
                      : fn.call(that, args[0], args[1]);
    case 3: return un ? fn(args[0], args[1], args[2])
                      : fn.call(that, args[0], args[1], args[2]);
    case 4: return un ? fn(args[0], args[1], args[2], args[3])
                      : fn.call(that, args[0], args[1], args[2], args[3]);
  } return fn.apply(that, args);
};


/***/ }),
/* 916 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(11);
var macrotask = __webpack_require__(179).set;
var Observer = global.MutationObserver || global.WebKitMutationObserver;
var process = global.process;
var Promise = global.Promise;
var isNode = __webpack_require__(65)(process) == 'process';

module.exports = function () {
  var head, last, notify;

  var flush = function () {
    var parent, fn;
    if (isNode && (parent = process.domain)) parent.exit();
    while (head) {
      fn = head.fn;
      head = head.next;
      try {
        fn();
      } catch (e) {
        if (head) notify();
        else last = undefined;
        throw e;
      }
    } last = undefined;
    if (parent) parent.enter();
  };

  // Node.js
  if (isNode) {
    notify = function () {
      process.nextTick(flush);
    };
  // browsers with MutationObserver
  } else if (Observer) {
    var toggle = true;
    var node = document.createTextNode('');
    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new
    notify = function () {
      node.data = toggle = !toggle;
    };
  // environments with maybe non-completely correct, but existent Promise
  } else if (Promise && Promise.resolve) {
    var promise = Promise.resolve();
    notify = function () {
      promise.then(flush);
    };
  // for other environments - macrotask based on:
  // - setImmediate
  // - MessageChannel
  // - window.postMessag
  // - onreadystatechange
  // - setTimeout
  } else {
    notify = function () {
      // strange IE + webpack dev server bug - use .call(global)
      macrotask.call(global, flush);
    };
  }

  return function (fn) {
    var task = { fn: fn, next: undefined };
    if (last) last.next = task;
    if (!head) {
      head = task;
      notify();
    } last = task;
  };
};


/***/ }),
/* 917 */
/***/ (function(module, exports, __webpack_require__) {

var redefine = __webpack_require__(44);
module.exports = function (target, src, safe) {
  for (var key in src) redefine(target, key, src[key], safe);
  return target;
};


/***/ }),
/* 918 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var global = __webpack_require__(11);
var dP = __webpack_require__(66);
var DESCRIPTORS = __webpack_require__(46);
var SPECIES = __webpack_require__(6)('species');

module.exports = function (KEY) {
  var C = global[KEY];
  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
    configurable: true,
    get: function () { return this; }
  });
};


/***/ }),
/* 919 */
/***/ (function(module, exports, __webpack_require__) {

var ITERATOR = __webpack_require__(6)('iterator');
var SAFE_CLOSING = false;

try {
  var riter = [7][ITERATOR]();
  riter['return'] = function () { SAFE_CLOSING = true; };
  // eslint-disable-next-line no-throw-literal
  Array.from(riter, function () { throw 2; });
} catch (e) { /* empty */ }

module.exports = function (exec, skipClosing) {
  if (!skipClosing && !SAFE_CLOSING) return false;
  var safe = false;
  try {
    var arr = [7];
    var iter = arr[ITERATOR]();
    iter.next = function () { return { done: safe = true }; };
    arr[ITERATOR] = function () { return iter; };
    exec(arr);
  } catch (e) { /* empty */ }
  return safe;
};


/***/ }),
/* 920 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// https://github.com/tc39/proposal-promise-finally

var $export = __webpack_require__(67);
var core = __webpack_require__(33);
var global = __webpack_require__(11);
var speciesConstructor = __webpack_require__(178);
var promiseResolve = __webpack_require__(181);

$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {
  var C = speciesConstructor(this, core.Promise || global.Promise);
  var isFunction = typeof onFinally == 'function';
  return this.then(
    isFunction ? function (x) {
      return promiseResolve(C, onFinally()).then(function () { return x; });
    } : onFinally,
    isFunction ? function (e) {
      return promiseResolve(C, onFinally()).then(function () { throw e; });
    } : onFinally
  );
} });


/***/ }),
/* 921 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// https://github.com/tc39/proposal-promise-try
var $export = __webpack_require__(67);
var newPromiseCapability = __webpack_require__(109);
var perform = __webpack_require__(180);

$export($export.S, 'Promise', { 'try': function (callbackfn) {
  var promiseCapability = newPromiseCapability.f(this);
  var result = perform(callbackfn);
  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);
  return promiseCapability.promise;
} });


/***/ }),
/* 922 */
/***/ (function(module, exports, __webpack_require__) {



//
// Generated on Tue Dec 16 2014 12:13:47 GMT+0100 (CET) by Charlie Robbins, Paolo Fragomeni & the Contributors (Using Codesurgeon).
// Version 1.2.6
//

(function (exports) {

/*
 * browser.js: Browser specific functionality for director.
 *
 * (C) 2011, Charlie Robbins, Paolo Fragomeni, & the Contributors.
 * MIT LICENSE
 *
 */

var dloc = document.location;

function dlocHashEmpty() {
  // Non-IE browsers return '' when the address bar shows '#'; Director's logic
  // assumes both mean empty.
  return dloc.hash === '' || dloc.hash === '#';
}

var listener = {
  mode: 'modern',
  hash: dloc.hash,
  history: false,

  check: function () {
    var h = dloc.hash;
    if (h != this.hash) {
      this.hash = h;
      this.onHashChanged();
    }
  },

  fire: function () {
    if (this.mode === 'modern') {
      this.history === true ? window.onpopstate() : window.onhashchange();
    }
    else {
      this.onHashChanged();
    }
  },

  init: function (fn, history) {
    var self = this;
    this.history = history;

    if (!Router.listeners) {
      Router.listeners = [];
    }

    function onchange(onChangeEvent) {
      for (var i = 0, l = Router.listeners.length; i < l; i++) {
        Router.listeners[i](onChangeEvent);
      }
    }

    //note IE8 is being counted as 'modern' because it has the hashchange event
    if ('onhashchange' in window && (document.documentMode === undefined
      || document.documentMode > 7)) {
      // At least for now HTML5 history is available for 'modern' browsers only
      if (this.history === true) {
        // There is an old bug in Chrome that causes onpopstate to fire even
        // upon initial page load. Since the handler is run manually in init(),
        // this would cause Chrome to run it twise. Currently the only
        // workaround seems to be to set the handler after the initial page load
        // http://code.google.com/p/chromium/issues/detail?id=63040
        setTimeout(function() {
          window.onpopstate = onchange;
        }, 500);
      }
      else {
        window.onhashchange = onchange;
      }
      this.mode = 'modern';
    }
    else {
      //
      // IE support, based on a concept by Erik Arvidson ...
      //
      var frame = document.createElement('iframe');
      frame.id = 'state-frame';
      frame.style.display = 'none';
      document.body.appendChild(frame);
      this.writeFrame('');

      if ('onpropertychange' in document && 'attachEvent' in document) {
        document.attachEvent('onpropertychange', function () {
          if (event.propertyName === 'location') {
            self.check();
          }
        });
      }

      window.setInterval(function () { self.check(); }, 50);

      this.onHashChanged = onchange;
      this.mode = 'legacy';
    }

    Router.listeners.push(fn);

    return this.mode;
  },

  destroy: function (fn) {
    if (!Router || !Router.listeners) {
      return;
    }

    var listeners = Router.listeners;

    for (var i = listeners.length - 1; i >= 0; i--) {
      if (listeners[i] === fn) {
        listeners.splice(i, 1);
      }
    }
  },

  setHash: function (s) {
    // Mozilla always adds an entry to the history
    if (this.mode === 'legacy') {
      this.writeFrame(s);
    }

    if (this.history === true) {
      window.history.pushState({}, document.title, s);
      // Fire an onpopstate event manually since pushing does not obviously
      // trigger the pop event.
      this.fire();
    } else {
      dloc.hash = (s[0] === '/') ? s : '/' + s;
    }
    return this;
  },

  writeFrame: function (s) {
    // IE support...
    var f = document.getElementById('state-frame');
    var d = f.contentDocument || f.contentWindow.document;
    d.open();
    d.write("<script>_hash = '" + s + "'; onload = parent.listener.syncHash;<script>");
    d.close();
  },

  syncHash: function () {
    // IE support...
    var s = this._hash;
    if (s != dloc.hash) {
      dloc.hash = s;
    }
    return this;
  },

  onHashChanged: function () {}
};

var Router = exports.Router = function (routes) {
  if (!(this instanceof Router)) return new Router(routes);

  this.params   = {};
  this.routes   = {};
  this.methods  = ['on', 'once', 'after', 'before'];
  this.scope    = [];
  this._methods = {};

  this._insert = this.insert;
  this.insert = this.insertEx;

  this.historySupport = (window.history != null ? window.history.pushState : null) != null

  this.configure();
  this.mount(routes || {});
};

Router.prototype.init = function (r) {
  var self = this
    , routeTo;
  this.handler = function(onChangeEvent) {
    var newURL = onChangeEvent && onChangeEvent.newURL || window.location.hash;
    var url = self.history === true ? self.getPath() : newURL.replace(/.*#/, '');
    self.dispatch('on', url.charAt(0) === '/' ? url : '/' + url);
  };

  listener.init(this.handler, this.history);

  if (this.history === false) {
    if (dlocHashEmpty() && r) {
      dloc.hash = r;
    } else if (!dlocHashEmpty()) {
      self.dispatch('on', '/' + dloc.hash.replace(/^(#\/|#|\/)/, ''));
    }
  }
  else {
    if (this.convert_hash_in_init) {
      // Use hash as route
      routeTo = dlocHashEmpty() && r ? r : !dlocHashEmpty() ? dloc.hash.replace(/^#/, '') : null;
      if (routeTo) {
        window.history.replaceState({}, document.title, routeTo);
      }
    }
    else {
      // Use canonical url
      routeTo = this.getPath();
    }

    // Router has been initialized, but due to the chrome bug it will not
    // yet actually route HTML5 history state changes. Thus, decide if should route.
    if (routeTo || this.run_in_init === true) {
      this.handler();
    }
  }

  return this;
};

Router.prototype.explode = function () {
  var v = this.history === true ? this.getPath() : dloc.hash;
  if (v.charAt(1) === '/') { v=v.slice(1) }
  return v.slice(1, v.length).split("/");
};

Router.prototype.setRoute = function (i, v, val) {
  var url = this.explode();

  if (typeof i === 'number' && typeof v === 'string') {
    url[i] = v;
  }
  else if (typeof val === 'string') {
    url.splice(i, v, s);
  }
  else {
    url = [i];
  }

  listener.setHash(url.join('/'));
  return url;
};

//
// ### function insertEx(method, path, route, parent)
// #### @method {string} Method to insert the specific `route`.
// #### @path {Array} Parsed path to insert the `route` at.
// #### @route {Array|function} Route handlers to insert.
// #### @parent {Object} **Optional** Parent "routes" to insert into.
// insert a callback that will only occur once per the matched route.
//
Router.prototype.insertEx = function(method, path, route, parent) {
  if (method === "once") {
    method = "on";
    route = function(route) {
      var once = false;
      return function() {
        if (once) return;
        once = true;
        return route.apply(this, arguments);
      };
    }(route);
  }
  return this._insert(method, path, route, parent);
};

Router.prototype.getRoute = function (v) {
  var ret = v;

  if (typeof v === "number") {
    ret = this.explode()[v];
  }
  else if (typeof v === "string"){
    var h = this.explode();
    ret = h.indexOf(v);
  }
  else {
    ret = this.explode();
  }

  return ret;
};

Router.prototype.destroy = function () {
  listener.destroy(this.handler);
  return this;
};

Router.prototype.getPath = function () {
  var path = window.location.pathname;
  if (path.substr(0, 1) !== '/') {
    path = '/' + path;
  }
  return path;
};
function _every(arr, iterator) {
  for (var i = 0; i < arr.length; i += 1) {
    if (iterator(arr[i], i, arr) === false) {
      return;
    }
  }
}

function _flatten(arr) {
  var flat = [];
  for (var i = 0, n = arr.length; i < n; i++) {
    flat = flat.concat(arr[i]);
  }
  return flat;
}

function _asyncEverySeries(arr, iterator, callback) {
  if (!arr.length) {
    return callback();
  }
  var completed = 0;
  (function iterate() {
    iterator(arr[completed], function(err) {
      if (err || err === false) {
        callback(err);
        callback = function() {};
      } else {
        completed += 1;
        if (completed === arr.length) {
          callback();
        } else {
          iterate();
        }
      }
    });
  })();
}

function paramifyString(str, params, mod) {
  mod = str;
  for (var param in params) {
    if (params.hasOwnProperty(param)) {
      mod = params[param](str);
      if (mod !== str) {
        break;
      }
    }
  }
  return mod === str ? "([._a-zA-Z0-9-%()]+)" : mod;
}

function regifyString(str, params) {
  var matches, last = 0, out = "";
  while (matches = str.substr(last).match(/[^\w\d\- %@&]*\*[^\w\d\- %@&]*/)) {
    last = matches.index + matches[0].length;
    matches[0] = matches[0].replace(/^\*/, "([_.()!\\ %@&a-zA-Z0-9-]+)");
    out += str.substr(0, matches.index) + matches[0];
  }
  str = out += str.substr(last);
  var captures = str.match(/:([^\/]+)/ig), capture, length;
  if (captures) {
    length = captures.length;
    for (var i = 0; i < length; i++) {
      capture = captures[i];
      if (capture.slice(0, 2) === "::") {
        str = capture.slice(1);
      } else {
        str = str.replace(capture, paramifyString(capture, params));
      }
    }
  }
  return str;
}

function terminator(routes, delimiter, start, stop) {
  var last = 0, left = 0, right = 0, start = (start || "(").toString(), stop = (stop || ")").toString(), i;
  for (i = 0; i < routes.length; i++) {
    var chunk = routes[i];
    if (chunk.indexOf(start, last) > chunk.indexOf(stop, last) || ~chunk.indexOf(start, last) && !~chunk.indexOf(stop, last) || !~chunk.indexOf(start, last) && ~chunk.indexOf(stop, last)) {
      left = chunk.indexOf(start, last);
      right = chunk.indexOf(stop, last);
      if (~left && !~right || !~left && ~right) {
        var tmp = routes.slice(0, (i || 1) + 1).join(delimiter);
        routes = [ tmp ].concat(routes.slice((i || 1) + 1));
      }
      last = (right > left ? right : left) + 1;
      i = 0;
    } else {
      last = 0;
    }
  }
  return routes;
}

var QUERY_SEPARATOR = /\?.*/;

Router.prototype.configure = function(options) {
  options = options || {};
  for (var i = 0; i < this.methods.length; i++) {
    this._methods[this.methods[i]] = true;
  }
  this.recurse = options.recurse || this.recurse || false;
  this.async = options.async || false;
  this.delimiter = options.delimiter || "/";
  this.strict = typeof options.strict === "undefined" ? true : options.strict;
  this.notfound = options.notfound;
  this.resource = options.resource;
  this.history = options.html5history && this.historySupport || false;
  this.run_in_init = this.history === true && options.run_handler_in_init !== false;
  this.convert_hash_in_init = this.history === true && options.convert_hash_in_init !== false;
  this.every = {
    after: options.after || null,
    before: options.before || null,
    on: options.on || null
  };
  return this;
};

Router.prototype.param = function(token, matcher) {
  if (token[0] !== ":") {
    token = ":" + token;
  }
  var compiled = new RegExp(token, "g");
  this.params[token] = function(str) {
    return str.replace(compiled, matcher.source || matcher);
  };
  return this;
};

Router.prototype.on = Router.prototype.route = function(method, path, route) {
  var self = this;
  if (!route && typeof path == "function") {
    route = path;
    path = method;
    method = "on";
  }
  if (Array.isArray(path)) {
    return path.forEach(function(p) {
      self.on(method, p, route);
    });
  }
  if (path.source) {
    path = path.source.replace(/\\\//ig, "/");
  }
  if (Array.isArray(method)) {
    return method.forEach(function(m) {
      self.on(m.toLowerCase(), path, route);
    });
  }
  path = path.split(new RegExp(this.delimiter));
  path = terminator(path, this.delimiter);
  this.insert(method, this.scope.concat(path), route);
};

Router.prototype.path = function(path, routesFn) {
  var self = this, length = this.scope.length;
  if (path.source) {
    path = path.source.replace(/\\\//ig, "/");
  }
  path = path.split(new RegExp(this.delimiter));
  path = terminator(path, this.delimiter);
  this.scope = this.scope.concat(path);
  routesFn.call(this, this);
  this.scope.splice(length, path.length);
};

Router.prototype.dispatch = function(method, path, callback) {
  var self = this, fns = this.traverse(method, path.replace(QUERY_SEPARATOR, ""), this.routes, ""), invoked = this._invoked, after;
  this._invoked = true;
  if (!fns || fns.length === 0) {
    this.last = [];
    if (typeof this.notfound === "function") {
      this.invoke([ this.notfound ], {
        method: method,
        path: path
      }, callback);
    }
    return false;
  }
  if (this.recurse === "forward") {
    fns = fns.reverse();
  }
  function updateAndInvoke() {
    self.last = fns.after;
    self.invoke(self.runlist(fns), self, callback);
  }
  after = this.every && this.every.after ? [ this.every.after ].concat(this.last) : [ this.last ];
  if (after && after.length > 0 && invoked) {
    if (this.async) {
      this.invoke(after, this, updateAndInvoke);
    } else {
      this.invoke(after, this);
      updateAndInvoke();
    }
    return true;
  }
  updateAndInvoke();
  return true;
};

Router.prototype.invoke = function(fns, thisArg, callback) {
  var self = this;
  var apply;
  if (this.async) {
    apply = function(fn, next) {
      if (Array.isArray(fn)) {
        return _asyncEverySeries(fn, apply, next);
      } else if (typeof fn == "function") {
        fn.apply(thisArg, (fns.captures || []).concat(next));
      }
    };
    _asyncEverySeries(fns, apply, function() {
      if (callback) {
        callback.apply(thisArg, arguments);
      }
    });
  } else {
    apply = function(fn) {
      if (Array.isArray(fn)) {
        return _every(fn, apply);
      } else if (typeof fn === "function") {
        return fn.apply(thisArg, fns.captures || []);
      } else if (typeof fn === "string" && self.resource) {
        self.resource[fn].apply(thisArg, fns.captures || []);
      }
    };
    _every(fns, apply);
  }
};

Router.prototype.traverse = function(method, path, routes, regexp, filter) {
  var fns = [], current, exact, match, next, that;
  function filterRoutes(routes) {
    if (!filter) {
      return routes;
    }
    function deepCopy(source) {
      var result = [];
      for (var i = 0; i < source.length; i++) {
        result[i] = Array.isArray(source[i]) ? deepCopy(source[i]) : source[i];
      }
      return result;
    }
    function applyFilter(fns) {
      for (var i = fns.length - 1; i >= 0; i--) {
        if (Array.isArray(fns[i])) {
          applyFilter(fns[i]);
          if (fns[i].length === 0) {
            fns.splice(i, 1);
          }
        } else {
          if (!filter(fns[i])) {
            fns.splice(i, 1);
          }
        }
      }
    }
    var newRoutes = deepCopy(routes);
    newRoutes.matched = routes.matched;
    newRoutes.captures = routes.captures;
    newRoutes.after = routes.after.filter(filter);
    applyFilter(newRoutes);
    return newRoutes;
  }
  if (path === this.delimiter && routes[method]) {
    next = [ [ routes.before, routes[method] ].filter(Boolean) ];
    next.after = [ routes.after ].filter(Boolean);
    next.matched = true;
    next.captures = [];
    return filterRoutes(next);
  }
  for (var r in routes) {
    if (routes.hasOwnProperty(r) && (!this._methods[r] || this._methods[r] && typeof routes[r] === "object" && !Array.isArray(routes[r]))) {
      current = exact = regexp + this.delimiter + r;
      if (!this.strict) {
        exact += "[" + this.delimiter + "]?";
      }
      match = path.match(new RegExp("^" + exact));
      if (!match) {
        continue;
      }
      if (match[0] && match[0] == path && routes[r][method]) {
        next = [ [ routes[r].before, routes[r][method] ].filter(Boolean) ];
        next.after = [ routes[r].after ].filter(Boolean);
        next.matched = true;
        next.captures = match.slice(1);
        if (this.recurse && routes === this.routes) {
          next.push([ routes.before, routes.on ].filter(Boolean));
          next.after = next.after.concat([ routes.after ].filter(Boolean));
        }
        return filterRoutes(next);
      }
      next = this.traverse(method, path, routes[r], current);
      if (next.matched) {
        if (next.length > 0) {
          fns = fns.concat(next);
        }
        if (this.recurse) {
          fns.push([ routes[r].before, routes[r].on ].filter(Boolean));
          next.after = next.after.concat([ routes[r].after ].filter(Boolean));
          if (routes === this.routes) {
            fns.push([ routes["before"], routes["on"] ].filter(Boolean));
            next.after = next.after.concat([ routes["after"] ].filter(Boolean));
          }
        }
        fns.matched = true;
        fns.captures = next.captures;
        fns.after = next.after;
        return filterRoutes(fns);
      }
    }
  }
  return false;
};

Router.prototype.insert = function(method, path, route, parent) {
  var methodType, parentType, isArray, nested, part;
  path = path.filter(function(p) {
    return p && p.length > 0;
  });
  parent = parent || this.routes;
  part = path.shift();
  if (/\:|\*/.test(part) && !/\\d|\\w/.test(part)) {
    part = regifyString(part, this.params);
  }
  if (path.length > 0) {
    parent[part] = parent[part] || {};
    return this.insert(method, path, route, parent[part]);
  }
  if (!part && !path.length && parent === this.routes) {
    methodType = typeof parent[method];
    switch (methodType) {
     case "function":
      parent[method] = [ parent[method], route ];
      return;
     case "object":
      parent[method].push(route);
      return;
     case "undefined":
      parent[method] = route;
      return;
    }
    return;
  }
  parentType = typeof parent[part];
  isArray = Array.isArray(parent[part]);
  if (parent[part] && !isArray && parentType == "object") {
    methodType = typeof parent[part][method];
    switch (methodType) {
     case "function":
      parent[part][method] = [ parent[part][method], route ];
      return;
     case "object":
      parent[part][method].push(route);
      return;
     case "undefined":
      parent[part][method] = route;
      return;
    }
  } else if (parentType == "undefined") {
    nested = {};
    nested[method] = route;
    parent[part] = nested;
    return;
  }
  throw new Error("Invalid route context: " + parentType);
};



Router.prototype.extend = function(methods) {
  var self = this, len = methods.length, i;
  function extend(method) {
    self._methods[method] = true;
    self[method] = function() {
      var extra = arguments.length === 1 ? [ method, "" ] : [ method ];
      self.on.apply(self, extra.concat(Array.prototype.slice.call(arguments)));
    };
  }
  for (i = 0; i < len; i++) {
    extend(methods[i]);
  }
};

Router.prototype.runlist = function(fns) {
  var runlist = this.every && this.every.before ? [ this.every.before ].concat(_flatten(fns)) : _flatten(fns);
  if (this.every && this.every.on) {
    runlist.push(this.every.on);
  }
  runlist.captures = fns.captures;
  runlist.source = fns.source;
  return runlist;
};

Router.prototype.mount = function(routes, path) {
  if (!routes || typeof routes !== "object" || Array.isArray(routes)) {
    return;
  }
  var self = this;
  path = path || [];
  if (!Array.isArray(path)) {
    path = path.split(self.delimiter);
  }
  function insertOrMount(route, local) {
    var rename = route, parts = route.split(self.delimiter), routeType = typeof routes[route], isRoute = parts[0] === "" || !self._methods[parts[0]], event = isRoute ? "on" : rename;
    if (isRoute) {
      rename = rename.slice((rename.match(new RegExp("^" + self.delimiter)) || [ "" ])[0].length);
      parts.shift();
    }
    if (isRoute && routeType === "object" && !Array.isArray(routes[route])) {
      local = local.concat(parts);
      self.mount(routes[route], local);
      return;
    }
    if (isRoute) {
      local = local.concat(rename.split(self.delimiter));
      local = terminator(local, self.delimiter);
    }
    self.insert(event, local, routes[route]);
  }
  for (var route in routes) {
    if (routes.hasOwnProperty(route)) {
      insertOrMount(route, path.slice(0));
    }
  }
};



}( true ? exports : window));

/***/ }),
/* 923 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(79)(__webpack_require__(924))

/***/ }),
/* 924 */
/***/ (function(module, exports) {

module.exports = "/*! store2 - v2.5.9 - 2017-10-26\n* Copyright (c) 2017 Nathan Bubna; Licensed (MIT OR GPL-3.0) */\n;(function(window, define) {\n    var _ = {\n        version: \"2.5.9\",\n        areas: {},\n        apis: {},\n\n        // utilities\n        inherit: function(api, o) {\n            for (var p in api) {\n                if (!o.hasOwnProperty(p)) {\n                    o[p] = api[p];\n                }\n            }\n            return o;\n        },\n        stringify: function(d) {\n            return d === undefined || typeof d === \"function\" ? d+'' : JSON.stringify(d);\n        },\n        parse: function(s) {\n            // if it doesn't parse, return as is\n            try{ return JSON.parse(s); }catch(e){ return s; }\n        },\n\n        // extension hooks\n        fn: function(name, fn) {\n            _.storeAPI[name] = fn;\n            for (var api in _.apis) {\n                _.apis[api][name] = fn;\n            }\n        },\n        get: function(area, key){ return area.getItem(key); },\n        set: function(area, key, string){ area.setItem(key, string); },\n        remove: function(area, key){ area.removeItem(key); },\n        key: function(area, i){ return area.key(i); },\n        length: function(area){ return area.length; },\n        clear: function(area){ area.clear(); },\n\n        // core functions\n        Store: function(id, area, namespace) {\n            var store = _.inherit(_.storeAPI, function(key, data, overwrite) {\n                if (arguments.length === 0){ return store.getAll(); }\n                if (typeof data === \"function\"){ return store.transact(key, data, overwrite); }// fn=data, alt=overwrite\n                if (data !== undefined){ return store.set(key, data, overwrite); }\n                if (typeof key === \"string\" || typeof key === \"number\"){ return store.get(key); }\n                if (!key){ return store.clear(); }\n                return store.setAll(key, data);// overwrite=data, data=key\n            });\n            store._id = id;\n            try {\n                var testKey = '_safariPrivate_';\n                area.setItem(testKey, 'sucks');\n                store._area = area;\n                area.removeItem(testKey);\n            } catch (e) {}\n            if (!store._area) {\n                store._area = _.inherit(_.storageAPI, { items: {}, name: 'fake' });\n            }\n            store._ns = namespace || '';\n            if (!_.areas[id]) {\n                _.areas[id] = store._area;\n            }\n            if (!_.apis[store._ns+store._id]) {\n                _.apis[store._ns+store._id] = store;\n            }\n            return store;\n        },\n        storeAPI: {\n            // admin functions\n            area: function(id, area) {\n                var store = this[id];\n                if (!store || !store.area) {\n                    store = _.Store(id, area, this._ns);//new area-specific api in this namespace\n                    if (!this[id]){ this[id] = store; }\n                }\n                return store;\n            },\n            namespace: function(namespace, noSession) {\n                if (!namespace){\n                    return this._ns ? this._ns.substring(0,this._ns.length-1) : '';\n                }\n                var ns = namespace, store = this[ns];\n                if (!store || !store.namespace) {\n                    store = _.Store(this._id, this._area, this._ns+ns+'.');//new namespaced api\n                    if (!this[ns]){ this[ns] = store; }\n                    if (!noSession){ store.area('session', _.areas.session); }\n                }\n                return store;\n            },\n            isFake: function(){ return this._area.name === 'fake'; },\n            toString: function() {\n                return 'store'+(this._ns?'.'+this.namespace():'')+'['+this._id+']';\n            },\n\n            // storage functions\n            has: function(key) {\n                if (this._area.has) {\n                    return this._area.has(this._in(key));//extension hook\n                }\n                return !!(this._in(key) in this._area);\n            },\n            size: function(){ return this.keys().length; },\n            each: function(fn, _and) {// _and is purely for internal use (see keys())\n                for (var i=0, m=_.length(this._area); i<m; i++) {\n                    var key = this._out(_.key(this._area, i));\n                    if (key !== undefined) {\n                        if (fn.call(this, key, _and || this.get(key)) === false) {\n                            break;\n                        }\n                    }\n                    if (m > _.length(this._area)) { m--; i--; }// in case of removeItem\n                }\n                return _and || this;\n            },\n            keys: function() {\n                return this.each(function(k, list){ list.push(k); }, []);\n            },\n            get: function(key, alt) {\n                var s = _.get(this._area, this._in(key));\n                return s !== null ? _.parse(s) : alt || s;// support alt for easy default mgmt\n            },\n            getAll: function() {\n                return this.each(function(k, all){ all[k] = this.get(k); }, {});\n            },\n            transact: function(key, fn, alt) {\n                var val = this.get(key, alt),\n                    ret = fn(val);\n                this.set(key, ret === undefined ? val : ret);\n                return this;\n            },\n            set: function(key, data, overwrite) {\n                var d = this.get(key);\n                if (d != null && overwrite === false) {\n                    return data;\n                }\n                return _.set(this._area, this._in(key), _.stringify(data), overwrite) || d;\n            },\n            setAll: function(data, overwrite) {\n                var changed, val;\n                for (var key in data) {\n                    val = data[key];\n                    if (this.set(key, val, overwrite) !== val) {\n                        changed = true;\n                    }\n                }\n                return changed;\n            },\n            remove: function(key) {\n                var d = this.get(key);\n                _.remove(this._area, this._in(key));\n                return d;\n            },\n            clear: function() {\n                if (!this._ns) {\n                    _.clear(this._area);\n                } else {\n                    this.each(function(k){ _.remove(this._area, this._in(k)); }, 1);\n                }\n                return this;\n            },\n            clearAll: function() {\n                var area = this._area;\n                for (var id in _.areas) {\n                    if (_.areas.hasOwnProperty(id)) {\n                        this._area = _.areas[id];\n                        this.clear();\n                    }\n                }\n                this._area = area;\n                return this;\n            },\n\n            // internal use functions\n            _in: function(k) {\n                if (typeof k !== \"string\"){ k = _.stringify(k); }\n                return this._ns ? this._ns + k : k;\n            },\n            _out: function(k) {\n                return this._ns ?\n                    k && k.indexOf(this._ns) === 0 ?\n                        k.substring(this._ns.length) :\n                        undefined : // so each() knows to skip it\n                    k;\n            }\n        },// end _.storeAPI\n        storageAPI: {\n            length: 0,\n            has: function(k){ return this.items.hasOwnProperty(k); },\n            key: function(i) {\n                var c = 0;\n                for (var k in this.items){\n                    if (this.has(k) && i === c++) {\n                        return k;\n                    }\n                }\n            },\n            setItem: function(k, v) {\n                if (!this.has(k)) {\n                    this.length++;\n                }\n                this.items[k] = v;\n            },\n            removeItem: function(k) {\n                if (this.has(k)) {\n                    delete this.items[k];\n                    this.length--;\n                }\n            },\n            getItem: function(k){ return this.has(k) ? this.items[k] : null; },\n            clear: function(){ for (var k in this.items){ this.removeItem(k); } },\n            toString: function(){ return this.length+' items in '+this.name+'Storage'; }\n        }// end _.storageAPI\n    };\n\n    var store =\n        // safely set this up (throws error in IE10/32bit mode for local files)\n        _.Store(\"local\", (function(){try{ return localStorage; }catch(e){}})());\n    store.local = store;// for completeness\n    store._ = _;// for extenders and debuggers...\n    // safely setup store.session (throws exception in FF for file:/// urls)\n    store.area(\"session\", (function(){try{ return sessionStorage; }catch(e){}})());\n\n    if (typeof define === 'function' && define.amd !== undefined) {\n        define('store2', [], function () {\n            return store;\n        });\n    } else if (typeof module !== 'undefined' && module.exports) {\n        module.exports = store;\n    } else {\n        // expose the primary store fn to the global object and save conflicts\n        if (window.store){ _.conflict = window.store; }\n        window.store = store;\n    }\n\n})(this, this.define);\n"

/***/ }),
/* 925 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(79)(__webpack_require__(926))

/***/ }),
/* 926 */
/***/ (function(module, exports) {

module.exports = "/**\n * Copyright (c) 2013 ESHA Research\n * Dual licensed under the MIT and GPL licenses:\n *   http://www.opensource.org/licenses/mit-license.php\n *   http://www.gnu.org/licenses/gpl.html\n *\n * Makes it easy to watch for storage events by enhancing the events and\n * allowing binding to particular keys and/or namespaces.\n *\n * // listen to particular key storage events (yes, this is namespace sensitive)\n * store.on('foo', function listenToFoo(e){ console.log('foo was changed:', e); });\n * store.off('foo', listenToFoo);\n *\n * // listen to all storage events\n * store.on(function storageEvent(e){ console.log('web storage:', e); });\n * store.off(storageEvent);\n * \n * Status: ALPHA - useful, if you don't mind incomplete browser support for events\n */\n;(function(window, document, _) {\n    _.fn('on', function(key, fn) {\n        if (!fn) { fn = key; key = ''; }// shift args when needed\n        var s = this,\n            bound,\n            id = _.id(this._area);\n        if (window.addEventListener) {\n            window.addEventListener(\"storage\", bound = function(e) {\n                var k = s._out(e.key);\n                if (k && (!key || k === key)) {// must match key if listener has one\n                    var eid = _.id(e.storageArea);\n                    if (!eid || id === eid) {// must match area, if event has a known one\n                        return fn.call(s, _.event(k, s, e));\n                    }\n                }\n            }, false);\n        } else {\n            document.attachEvent(\"onstorage\", bound = function() {\n                return fn.call(s, window.event);\n            });\n        }\n        fn['_'+key+'listener'] = bound;\n        return s;\n    });\n    _.fn('off', function(key, fn) {\n        if (!fn) { fn = key; key = ''; }// shift args when needed\n        var bound = fn['_'+key+'listener'];\n        if (window.removeEventListener) {\n            window.removeEventListener(\"storage\", bound);\n        } else {\n            document.detachEvent(\"onstorage\", bound);\n        }\n        return this;\n    });\n    _.event = function(k, s, e) {\n        var event = {\n            key: k,\n            namespace: s.namespace(),\n            newValue: _.parse(e.newValue),\n            oldValue: _.parse(e.oldValue),\n            url: e.url || e.uri,\n            storageArea: e.storageArea,\n            source: e.source,\n            timeStamp: e.timeStamp,\n            originalEvent: e\n        };\n        if (_.cache) {\n            var min = _.expires(e.newValue || e.oldValue);\n            if (min) {\n                event.expires = _.when(min);\n            }\n        }\n        return event;\n    };\n    _.id = function(area) {\n        for (var id in _.areas) {\n            if (area === _.areas[id]) {\n                return id;\n            }\n        }\n    };\n})(window, document, window.store._);"

/***/ }),
/* 927 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(928);
__webpack_require__(929);
__webpack_require__(930);
__webpack_require__(931);
__webpack_require__(932);
__webpack_require__(933);
__webpack_require__(58);
__webpack_require__(59);
__webpack_require__(934);
__webpack_require__(935);
__webpack_require__(937);
__webpack_require__(938);
__webpack_require__(939);
__webpack_require__(940);
__webpack_require__(941);
__webpack_require__(942);
__webpack_require__(943);
__webpack_require__(944);
__webpack_require__(945);
__webpack_require__(946);
__webpack_require__(947);
__webpack_require__(948);
__webpack_require__(949);
__webpack_require__(950);
__webpack_require__(951);
__webpack_require__(952);
__webpack_require__(953);
__webpack_require__(954);
__webpack_require__(955);
__webpack_require__(956);
__webpack_require__(957);
__webpack_require__(958);
__webpack_require__(959);
__webpack_require__(960);
__webpack_require__(961);
__webpack_require__(962);
__webpack_require__(963);
__webpack_require__(964);
__webpack_require__(965);
__webpack_require__(966);
__webpack_require__(967);
__webpack_require__(968);
__webpack_require__(969);
__webpack_require__(970);
__webpack_require__(971);
__webpack_require__(972);
__webpack_require__(973);
__webpack_require__(974);
__webpack_require__(1002);
__webpack_require__(1003);
__webpack_require__(1004);
__webpack_require__(1005);
__webpack_require__(1006);
__webpack_require__(1007);
__webpack_require__(1008);
__webpack_require__(1009);
__webpack_require__(1010);
__webpack_require__(1011);
__webpack_require__(1012);
__webpack_require__(1013);
__webpack_require__(1014);
__webpack_require__(1015);
__webpack_require__(1016);
__webpack_require__(1017);
__webpack_require__(1018);
__webpack_require__(1019);
__webpack_require__(1020);
__webpack_require__(1021);
__webpack_require__(1022);
__webpack_require__(1023);
__webpack_require__(1024);
__webpack_require__(1025);
__webpack_require__(1026);
__webpack_require__(1027);
__webpack_require__(1028);
__webpack_require__(1029);
__webpack_require__(1030);
__webpack_require__(1031);
__webpack_require__(1032);
__webpack_require__(1033);
__webpack_require__(1034);
__webpack_require__(1035);
__webpack_require__(1036);
__webpack_require__(1037);
__webpack_require__(1038);
__webpack_require__(1039);
__webpack_require__(1040);
__webpack_require__(1041);
__webpack_require__(1042);
__webpack_require__(1043);
__webpack_require__(1044);
__webpack_require__(1045);
__webpack_require__(1046);
__webpack_require__(1047);
__webpack_require__(1048);
__webpack_require__(1049);
__webpack_require__(1050);
__webpack_require__(1051);
__webpack_require__(1052);
__webpack_require__(1053);
__webpack_require__(1054);
__webpack_require__(1055);
__webpack_require__(1056);
__webpack_require__(1057);
__webpack_require__(1058);
__webpack_require__(1059);
__webpack_require__(188);
__webpack_require__(1060);
__webpack_require__(1061);
__webpack_require__(1062);
__webpack_require__(1063);
__webpack_require__(1064);
__webpack_require__(1065);
__webpack_require__(1066);
__webpack_require__(182);
__webpack_require__(1067);
__webpack_require__(1068);
__webpack_require__(1069);
__webpack_require__(1070);
__webpack_require__(1071);
__webpack_require__(1072);
__webpack_require__(1073);
__webpack_require__(1074);
__webpack_require__(1075);
__webpack_require__(1076);
__webpack_require__(1077);
__webpack_require__(1078);
__webpack_require__(1079);
__webpack_require__(1080);
__webpack_require__(1081);
__webpack_require__(1082);
__webpack_require__(1083);
__webpack_require__(1084);
__webpack_require__(1085);
__webpack_require__(1086);
__webpack_require__(186);
__webpack_require__(1087);
__webpack_require__(1088);
__webpack_require__(1089);
__webpack_require__(1090);
__webpack_require__(1091);
__webpack_require__(1092);
__webpack_require__(1093);
__webpack_require__(1094);
__webpack_require__(1095);
__webpack_require__(1096);
__webpack_require__(1097);
__webpack_require__(1098);
__webpack_require__(1099);
__webpack_require__(1100);
__webpack_require__(1101);
__webpack_require__(1102);
__webpack_require__(1103);
__webpack_require__(1104);
__webpack_require__(1105);
__webpack_require__(1106);
__webpack_require__(1107);
__webpack_require__(1108);
__webpack_require__(1109);
__webpack_require__(1110);
__webpack_require__(1111);
__webpack_require__(1112);
__webpack_require__(1113);
__webpack_require__(1114);
__webpack_require__(1115);
__webpack_require__(1116);
__webpack_require__(1117);
__webpack_require__(1118);
__webpack_require__(1119);
__webpack_require__(1120);
__webpack_require__(1121);
__webpack_require__(1122);
__webpack_require__(1123);
__webpack_require__(1124);
__webpack_require__(1125);
__webpack_require__(1126);
__webpack_require__(1127);
__webpack_require__(208);
__webpack_require__(1128);
__webpack_require__(1129);
__webpack_require__(1130);
__webpack_require__(1131);
__webpack_require__(1132);
__webpack_require__(1133);
__webpack_require__(1134);
__webpack_require__(1135);
__webpack_require__(1136);
__webpack_require__(187);
__webpack_require__(1137);
__webpack_require__(1138);
__webpack_require__(1139);
__webpack_require__(1140);
__webpack_require__(184);
__webpack_require__(1141);
__webpack_require__(1142);
__webpack_require__(1143);
__webpack_require__(1144);
__webpack_require__(1145);
__webpack_require__(1146);
__webpack_require__(1147);
__webpack_require__(1148);
__webpack_require__(1149);
__webpack_require__(1150);
__webpack_require__(1151);
__webpack_require__(1152);
__webpack_require__(1153);
__webpack_require__(1154);
__webpack_require__(1155);
__webpack_require__(1156);
__webpack_require__(1157);
__webpack_require__(1158);
__webpack_require__(1159);
__webpack_require__(1160);
__webpack_require__(1161);
__webpack_require__(1162);
__webpack_require__(1163);
__webpack_require__(1164);
__webpack_require__(1165);
__webpack_require__(1166);
__webpack_require__(1167);
__webpack_require__(1168);
__webpack_require__(183);
__webpack_require__(1169);
__webpack_require__(1170);
__webpack_require__(1171);
__webpack_require__(1172);
__webpack_require__(1173);
__webpack_require__(1174);
__webpack_require__(1175);
__webpack_require__(1176);
__webpack_require__(1177);
__webpack_require__(1178);
__webpack_require__(1179);
__webpack_require__(1180);
__webpack_require__(1181);
__webpack_require__(1182);
__webpack_require__(1183);
__webpack_require__(1184);
__webpack_require__(1185);
__webpack_require__(1186);
__webpack_require__(1187);
__webpack_require__(185);
__webpack_require__(1188);
__webpack_require__(1189);
__webpack_require__(1190);
__webpack_require__(1191);
__webpack_require__(1192);
__webpack_require__(1193);
__webpack_require__(1195);
__webpack_require__(1196);
__webpack_require__(1197);
__webpack_require__(1198);
__webpack_require__(1199);
__webpack_require__(1200);
__webpack_require__(1201);
__webpack_require__(1202);
__webpack_require__(1203);
__webpack_require__(1204);
__webpack_require__(1205);
__webpack_require__(1206);
__webpack_require__(1207);
__webpack_require__(1208);
__webpack_require__(1209);
__webpack_require__(1247);
__webpack_require__(1249);
__webpack_require__(1284);
__webpack_require__(2119);
__webpack_require__(2121);
__webpack_require__(2123);
__webpack_require__(2125);
__webpack_require__(2130);
__webpack_require__(2132);
__webpack_require__(2137);
__webpack_require__(2139);
__webpack_require__(2142);
__webpack_require__(2144);
__webpack_require__(2149);
__webpack_require__(2151);
__webpack_require__(2153);
__webpack_require__(2156);
__webpack_require__(2158);
__webpack_require__(2160);
__webpack_require__(2164);
__webpack_require__(2170);
__webpack_require__(2172);
__webpack_require__(2179);
__webpack_require__(2181);
__webpack_require__(2183);
__webpack_require__(2185);
__webpack_require__(2187);
__webpack_require__(2189);
__webpack_require__(2191);
__webpack_require__(2193);
__webpack_require__(2195);
__webpack_require__(2200);
__webpack_require__(2204);
__webpack_require__(2207);
__webpack_require__(2217);
__webpack_require__(2219);
__webpack_require__(2222);
__webpack_require__(2224);
__webpack_require__(2229);
__webpack_require__(2231);


/***/ }),
/* 928 */
/***/ (function(module, exports) {

(function(){
    var ua = navigator.userAgent.toLowerCase(),
        check = function(r){
            return r.test(ua);
        },
        docMode = document.documentMode,
        isIE10 = ((check(/msie 10/) && docMode != 7 && docMode != 8  && docMode != 9) || docMode == 10),
        isIE11 = ((check(/trident\/7\.0/) && docMode != 7 && docMode != 8 && docMode != 9 && docMode != 10) || docMode == 11),
        isNewIE = (Ext.isIE9 || isIE10 || isIE11),
        isTouchDevice =
            // @see http://www.stucox.com/blog/you-cant-detect-a-touchscreen/
            'ontouchstart' in window        // works on most browsers
            || navigator.maxTouchPoints,    // works on IE10/11 and Surface
        isWebApp =
            // @see https://stackoverflow.com/questions/17989777/detect-if-ios-is-using-webapp/40932301#40932301
            (window.navigator.standalone == true)                           // iOS safari
            || (window.matchMedia('(display-mode: standalone)').matches),   // android chrome
        // NOTE: some browsers require user interaction (like click events)
        //       for focus to work (e.g. iOS dosn't show keyborad)
        supportsUserFocus = ! (isTouchDevice && !isWebApp);

    Ext.apply(Ext, {
        isIE10 : isIE10,
        isIE11 : isIE11,
        
        isNewIE : isNewIE,
        isTouchDevice: isTouchDevice,
        isWebApp: isWebApp,
        supportsUserFocus: supportsUserFocus
    })
})();

Ext.override(Ext.data.Store, {
    /**
     * String cast the id, as otherwise the entries are not found
     */
    indexOfId : function(id){
        return this.data.indexOfKey(String(id));
    },

    /**
     * promisified store load
     */
    promiseLoad: function(options) {
        var me = this;
        return new Promise(function (fulfill, reject) {
            try {
                me.load(Ext.apply(options || {}, {
                    callback: function (r, options, success) {
                        if (success) {
                            fulfill(r, options);
                        } else if (Ext.isFunction(reject)) {
                            reject(new Error(options));
                        }
                    }
                }));
            } catch (error) {
                if (Ext.isFunction(reject)) {
                    reject(new Error(options));
                }
            }
        });
    },

    nextLoad: function() {
        var me = this;
        return new Promise(function (resolve) {
            me.on('load', resolve, me, { single: true });
        });
    }
});

/**
 * for some reasons the original fix insertes two <br>'s on enter for webkit. But this is one to much
 */
Ext.apply(Ext.form.HtmlEditor.prototype, {
        fixKeys : function(){ // load time branching for fastest keydown performance
        if(Ext.isIE){
            return function(e){
                var k = e.getKey(),
                    doc = this.getDoc(),
                        r;
                if(k == e.TAB){
                    e.stopEvent();
                    r = doc.selection.createRange();
                    if(r){
                        r.collapse(true);
                        r.pasteHTML('&nbsp;&nbsp;&nbsp;&nbsp;');
                        this.deferFocus();
                    }
                }else if(k == e.ENTER){
                    r = doc.selection.createRange();
                    if(r){
                        var target = r.parentElement();
                        if(!target || target.tagName.toLowerCase() != 'li'){
                            e.stopEvent();
                            r.pasteHTML('<br />');
                            r.collapse(false);
                            r.select();
                        }
                    }
                }
            };
        }else if(Ext.isOpera){
            return function(e){
                var k = e.getKey();
                if(k == e.TAB){
                    e.stopEvent();
                    this.win.focus();
                    this.execCmd('InsertHTML','&nbsp;&nbsp;&nbsp;&nbsp;');
                    this.deferFocus();
                }
            };
        }else if(Ext.isWebKit){
            return function(e){
                var k = e.getKey();
                if(k == e.TAB){
                    e.stopEvent();
                    this.execCmd('InsertText','\t');
                    this.deferFocus();
                }
             };
        }
    }()
});

/**
 * fix broken ext email validator
 * 
 * @type RegExp
 */
Ext.apply(Ext.form.VTypes, {
    // 2011-01-05 replace \w with [^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F] to allow idn's
    emailFixed: /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:([^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F]|-)+\.)*[^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F]([^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F]|-){0,63})\.([^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F]{2,63}?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,63}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,63})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,63})\]?$)/i,

    urlFixed: /(((^https?)|(^ftp)):\/\/(([^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F]|-)+\.)+[^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F]{2,63}(\/([^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F]|-|%)+(\.[^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F]{2,})?)*((([^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F]|[\-\.\?\\\/+@&#;`~=%!])*)(\.[^\s,\x00-\x2F,\x3A-\x40,\x5B-\x60,\x7B-\x7F]{2,})?)*\/?)/i,
    
    email:  function(v) {
        return this.emailFixed.test(v);
    },
    
    url: function(v) {
        return this.urlFixed.test(v);
    }
});


/**
 * fix textfield allowBlank validation
 * taken from ext, added trim
 */
Ext.override(Ext.form.TextField, {
    validateValue : function(value){
        if(Ext.isFunction(this.validator)){
            var msg = this.validator(value);
            if(msg !== true){
                this.markInvalid(msg);
                return false;
            }
        }
        if(Ext.util.Format.trim(value).length < 1 || value === this.emptyText){ // if it's blank
             if(this.allowBlank){
                 this.clearInvalid();
                 return true;
             }else{
                 this.markInvalid(this.blankText);
                 return false;
             }
        }
        if(Ext.util.Format.trim(value).length < this.minLength){
            this.markInvalid(String.format(this.minLengthText, this.minLength));
            return false;
        }
        if(Ext.util.Format.trim(value).length > this.maxLength){
            this.markInvalid(String.format(this.maxLengthText, this.maxLength));
            return false;
        }   
        if(this.vtype){
            var vt = Ext.form.VTypes;
            if(!vt[this.vtype](value, this)){
                this.markInvalid(this.vtypeText || vt[this.vtype +'Text']);
                return false;
            }
        }
        if(this.regex && !this.regex.test(value)){
            this.markInvalid(this.regexText);
            return false;
        }
        return true;
    }
});

Ext.applyIf(Ext.tree.MultiSelectionModel.prototype, {
    /**
     * implement convinience function as expected from grid selection models
     * 
     * @namespace {Ext.tree}
     * @return {Node}
     */
    getSelectedNode: function() {
        var selection = this.getSelectedNodes();
        return Ext.isArray(selection) ? selection[0] : null
    }
});

/**
 * Expand offers a deep parameter to also expand all children as well as a callback function.
 * Before the callback was triggered after the first children were loaded now the callback is triggered when all children
 * are loaded of all nodes!
 */
Ext.override(Ext.tree.AsyncTreeNode, {
    expand: function (deep, anim, callback, scope) {
        if (this.loading) { // if an async load is already running, waiting til it's done
            var timer;
            var f = function () {
                if (!this.loading) { // done loading
                    clearInterval(timer);
                    this.expand(deep, anim, callback, scope);
                }
            }.createDelegate(this);
            timer = setInterval(f, 200);
            return;
        }
        if (!this.loaded) {
            if (this.fireEvent("beforeload", this) === false) {
                return;
            }
            this.loading = true;
            this.ui.beforeLoad(this);
            var loader = this.loader || this.attributes.loader || this.getOwnerTree().getLoader();
            if (loader) {
                loader.load(this, this.loadComplete.createDelegate(this, [deep, anim, callback, scope]), this);
                return;
            }
        }

        if (!this.expanded) {
            if (this.fireEvent('beforeexpand', this, deep, anim) === false) {
                return;
            }
            if (!this.childrenRendered) {
                this.renderChildren();
            }
            this.expanded = true;
            if (!this.isHiddenRoot() && (this.getOwnerTree().animate && anim !== false) || anim) {
                this.ui.animExpand(function () {
                    this.fireEvent('expand', this);

                    this.expandChildNodesCallback(deep, anim, callback, scope);
                }.createDelegate(this));
                return;
            } else {
                this.ui.expand();
                this.fireEvent('expand', this);
                this.runCallback(callback, scope || this, [this]);
            }
        } else {
            this.runCallback(callback, scope || this, [this]);
        }
        if (deep === true) {
            this.expandChildNodesCallback(deep, anim, callback, scope);
        }
    },

    expandChildNodesCallback: function (deep, anim, callback, scope) {
        var ticketFn = this.runCallback.deferByTickets(this, [callback, scope || this, [this]], false);
        var wrapTicket = ticketFn();

        if (deep === true) {
            var cs = this.childNodes;
            for(var i = 0, len = cs.length; i < len; i++) {
                cs[i].expand(deep, anim, ticketFn());
            }
        }

        wrapTicket();
    }
});

/**
 * fix timezone handling for date picker
 * 
 * The getValue function always returns 00:00:00 as time. So if a form got filled
 * with a date like 2008-10-01T21:00:00 the form returns 2008-10-01T00:00:00 although 
 * the user did not change the fieled.
 * 
 * In a multi timezone context this is fatal! When a user in a certain timezone set
 * a date (just a date and no time information), this means in his timezone the 
 * time range from 2008-10-01T00:00:00 to 2008-10-01T23:59:59. 
 * _BUT_ for an other user sitting in a different timezone it means e.g. the 
 * time range from 2008-10-01T02:00:00 to 2008-10-02T21:59:59.
 * 
 * So on the one hand we need to make sure, that the date picker only returns 
 * changed datetime information when the user did a change. 
 * 
 * @todo On the other hand we
 * need adjust the day +/- one day according to the timeshift. 
 */
/**
 * @private
 */
 Ext.form.DateField.prototype.setValue = function(date){
    // get value must not return a string representation, so we convert this always here
    // before memorisation
    if (Ext.isString(date)) {
        var v = Date.parseDate(date, Date.patterns.ISO8601Long);
        if (Ext.isDate(v)) {
            date = v;
        } else {
            date = Ext.form.DateField.prototype.parseDate.call(this, date);
        }
    }
    
    // preserve original datetime information
    this.fullDateTime = date;
    
    Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date)));
};
/**
 * @private
 */
Ext.form.DateField.prototype.getValue = function(){
    //var value = this.parseDate(Ext.form.DateField.superclass.getValue.call(this));
    
    // return the value that was set (has time information when unchanged in client) 
    // and not just the date part!
    var value =  this.fullDateTime;
    return value || "";
};

/**
 * We need to overwrite to preserve original time information because 
 * Ext.form.TimeField does not support seconds
 * 
 * @param {} time
 * @private
 */
 Ext.form.TimeField.prototype.setValue = function(time){
    this.fullDateTime = time;
    Ext.form.TimeField.superclass.setValue.call(this, this.formatDate(this.parseDate(time)));
};
/**
 * @private
 */
Ext.form.TimeField.prototype.getValue = function(){
    // return the value that was set (has time information when unchanged in client) 
    // and not just the date part!
    var value =  this.fullDateTime;
    
    return value ? this.parseDate(value).dateFormat('H:i') : "";
};

/**
 * check if sort field is in column list to avoid server exceptions
 */
Ext.grid.GridPanel.prototype.applyState  = Ext.grid.GridPanel.prototype.applyState.createInterceptor(function(state){
    var cm = this.colModel,
        s = state.sort;
    
    if (s && cm.getIndexById(s.field) < 0) {
        delete state.sort;
    }
});

/**
 * fix for table in cell
 */
Ext.grid.GridView.prototype.getCell  =  function(row, col){
    return this.fly(this.getRow(row)).query('td.x-grid3-cell')[col];
};

/**
 * fix interpretation of ISO-8601  formatcode (Date.patterns.ISO8601Long) 
 * 
 * Browsers do not support timezones and also javascripts Date object has no 
 * support for it.  All Date Objects are in _one_ timezone which may ore may 
 * not be the operating systems timezone the browser runs on.
 * 
 * parsing dates in ISO format having the timeshift appended (Date.patterns.ISO8601Long) lead to 
 * correctly converted Date Objects in the browsers timezone. This timezone 
 * conversion changes the the Date Parts and as such, javascipt widget 
 * representing date time information print values of the browsers timezone 
 * and _not_ the values send by the server!
 * 
 * So in a multi timezone envireonment, datetime information in the browser 
 * _must not_ be parsed including the offset. Just the values of the server 
 * side converted datetime information are allowed to be parsed.
 */
Date.parseIso = function(isoString) {
    return Date.parseDate(isoString.replace(/\+\d{2}\d{2}/, ''), 'Y-m-d\\Th:i:s');
};

/**
 * rename window
 */
Ext.Window.prototype.rename = function(newId) {
    // Note PopupWindows are identified by name, whereas Ext.windows
    // get identified by id this should be solved some time ;-)
    var manager = this.manager || Ext.WindowMgr;
    manager.unregister(this);
    this.id = newId;
    manager.register(this);
};

/**
 * utility class used by Button
 * 
 * Fix: http://yui-ext.com/forum/showthread.php?p=142049
 * adds the ButtonToggleMgr.getSelected(toggleGroup, handler, scope) function
 */
Ext.ButtonToggleMgr = function(){
   var groups = {};
   
   function toggleGroup(btn, state){
       if(state){
           var g = groups[btn.toggleGroup];
           for(var i = 0, l = g.length; i < l; i++){
               if(g[i] != btn){
                   g[i].toggle(false);
               }
           }
       }
   }
   
   return {
       register : function(btn){
           if(!btn.toggleGroup){
               return;
           }
           var g = groups[btn.toggleGroup];
           if(!g){
               g = groups[btn.toggleGroup] = [];
           }
           g.push(btn);
           btn.on("toggle", toggleGroup);
       },
       
       unregister : function(btn){
           if(!btn.toggleGroup){
               return;
           }
           var g = groups[btn.toggleGroup];
           if(g){
               g.remove(btn);
               btn.un("toggle", toggleGroup);
           }
       },
       
       getSelected : function(toggleGroup, handler, scope){
           var g = groups[toggleGroup];
           for(var i = 0, l = g.length; i < l; i++){
               if(g[i].pressed === true){
                   if(handler) {
                        handler.call(scope || g[i], g[i]);
                   }
                   return g[i];
               }
           }
           return;
       }
   };
}();

/**
 * add beforeloadrecords event
 */
Ext.data.Store.prototype.loadRecords = Ext.data.Store.prototype.loadRecords.createInterceptor(function(o, options, success) {
    var pass = this.fireEvent('beforeloadrecords', o, options, success, this);
    if (pass === false) {
        // fire load event so loading indicator stops
        this.fireEvent('load', this, this.data.items, options);
        return false;
    }
});

/**
 * state encoding converts null to empty object
 * 
 * -> take encoder/decoder from Ext 4.1 where this is fixed
 */
Ext.override(Ext.state.Provider, {
    /**
     * Decodes a string previously encoded with {@link #encodeValue}.
     * @param {String} value The value to decode
     * @return {Object} The decoded value
     */
    decodeValue : function(value){

        // a -> Array
        // n -> Number
        // d -> Date
        // b -> Boolean
        // s -> String
        // o -> Object
        // -> Empty (null)

        var me = this,
            re = /^(a|n|d|b|s|o|e)\:(.*)$/,
            matches = re.exec(unescape(value)),
            all,
            type,
            keyValue,
            values,
            vLen,
            v;
            
        if(!matches || !matches[1]){
            return; // non state
        }
        
        type = matches[1];
        value = matches[2];
        switch (type) {
            case 'e':
                return null;
            case 'n':
                return parseFloat(value);
            case 'd':
                return new Date(Date.parse(value));
            case 'b':
                return (value == '1');
            case 'a':
                all = [];
                if(value != ''){
                    values = value.split('^');
                    vLen   = values.length;

                    for (v = 0; v < vLen; v++) {
                        value = values[v];
                        all.push(me.decodeValue(value));
                    }
                }
                return all;
           case 'o':
                all = {};
                if(value != ''){
                    values = value.split('^');
                    vLen   = values.length;

                    for (v = 0; v < vLen; v++) {
                        value = values[v];
                        keyValue         = value.split('=');
                        all[keyValue[0]] = me.decodeValue(keyValue[1]);
                    }
                }
                return all;
           default:
                return value;
        }
    },

    /**
     * Encodes a value including type information.  Decode with {@link #decodeValue}.
     * @param {Object} value The value to encode
     * @return {String} The encoded value
     */
    encodeValue : function(value){
        var flat = '',
            i = 0,
            enc,
            len,
            key;
            
        if (value == null) {
            return 'e:1';    
        } else if(typeof value == 'number') {
            enc = 'n:' + value;
        } else if(typeof value == 'boolean') {
            enc = 'b:' + (value ? '1' : '0');
        } else if(Ext.isDate(value)) {
            enc = 'd:' + value.toGMTString();
        } else if(Ext.isArray(value)) {
            for (len = value.length; i < len; i++) {
                flat += this.encodeValue(value[i]);
                if (i != len - 1) {
                    flat += '^';
                }
            }
            enc = 'a:' + flat;
        } else if (typeof value == 'object') {
            for (key in value) {
                if (typeof value[key] != 'function' && value[key] !== undefined) {
                    flat += key + '=' + this.encodeValue(value[key]) + '^';
                }
            }
            enc = 'o:' + flat.substring(0, flat.length-1);
        } else {
            enc = 's:' + value;
        }
        return escape(enc);
    }
});

/**
 * fix focus related emptyText problems
 * 0008616: emptyText gets inserted into ComboBoxes when the Box gets Hidden while focused 
 */
Ext.form.TriggerField.prototype.cmpRegforFocusFix = [];

Ext.form.TriggerField.prototype.initComponent = Ext.form.TriggerField.prototype.initComponent.createSequence(function() {
    if (this.emptyText) {
        Ext.form.TriggerField.prototype.cmpRegforFocusFix.push(this);
    }
});

Ext.form.TriggerField.prototype.onDestroy = Ext.form.TriggerField.prototype.onDestroy.createInterceptor(function() {
    Ext.form.TriggerField.prototype.cmpRegforFocusFix.remove(this);
});

Ext.form.TriggerField.prototype.taskForFocusFix = new Ext.util.DelayedTask(function() {
    Ext.each(Ext.form.TriggerField.prototype.cmpRegforFocusFix, function(cmp) {
        if (cmp.rendered && cmp.el.dom == document.activeElement) {
            if(cmp.el.dom.value == cmp.emptyText){
                cmp.preFocus();
                cmp.hasFocus = true;
                cmp.setRawValue('');
            }
        }
    });
    Ext.form.TriggerField.prototype.taskForFocusFix.delay(1000);
});

Ext.form.TriggerField.prototype.taskForFocusFix.delay(1000);

Ext.form.TriggerField.prototype.cmpRegForResize = [];


Ext.form.TriggerField.prototype.initComponent = Ext.form.TriggerField.prototype.initComponent.createSequence(function() {
    Ext.form.TriggerField.prototype.cmpRegForResize.push(this);
});

Ext.form.TriggerField.prototype.taskForResize = new Ext.util.DelayedTask(function() {
    Ext.each(Ext.form.TriggerField.prototype.cmpRegForResize, function(cmp) {
        if (!cmp.rendered || !this.list) {
            Ext.form.TriggerField.prototype.taskForResize.delay(300);
            return;
        }
        
        var visible = !!window.lodash.get(cmp, 'el.dom.offsetParent', false);
        
        if (visible !== cmp.wasVisible && cmp.el.dom) {
            cmp.setWidth(cmp.width);
            if (cmp.wrap && cmp.wrap.dom) {
                cmp.wrap.setWidth(cmp.width);
            }
            cmp.syncSize();
        }
        
        cmp.wasVisible = visible;
    });
    Ext.form.TriggerField.prototype.taskForResize.delay(300);
});

Ext.form.TriggerField.prototype.taskForResize.delay(300);

Ext.override(Ext.form.TwinTriggerField, {
    getTriggerWidth: function(){
        var tw = 0;
        Ext.each(this.triggers, function(t, index){
            var triggerIndex = 'Trigger' + (index + 1),
                w = t.getWidth();
            if(w === 0 && !t['hidden' + triggerIndex]){
                tw += this.defaultTriggerWidth;
            }else{
                tw += w;
            }
        }, this);
        return tw;
    }
});

// fixing layers in LayerCombo
// TODO maybe expand this to all Ext.Layers:
// Ext.Layer.prototype.showAction = Ext.Layer.prototype.showAction.createSequence(function() {
// Ext.Layer.prototype.hideAction = Ext.Layer.prototype.hideAction.createSequence(function() {
Ext.form.ComboBox.prototype.expand = Ext.form.ComboBox.prototype.expand.createSequence(function() {
    // fix z-index problem when used in editorGrids
    // manage z-index by windowMgr
    this.list.setActive = Ext.emptyFn;
    this.list.setZIndex = Ext.emptyFn;
    Ext.WindowMgr.register(this.list);
    Ext.WindowMgr.bringToFront(this.list);
});
Ext.form.ComboBox.prototype.collapse = Ext.form.ComboBox.prototype.collapse.createSequence(function() {
    if (this.list) {
        Ext.WindowMgr.unregister(this.list);
    }
});

/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
/**
 * fix for nested css
 * @see https://forge.tine20.org/view.php?id=11884
 *
 * only cacheStyleSheet is affected, but we need to overwrite whole class (closure)
 */
Ext.util.CSS = function(){
    var rules = null;
    var doc = document;

    var camelRe = /(-[a-z])/gi;
    var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };

    return {
        /**
         * Creates a stylesheet from a text blob of rules.
         * These rules will be wrapped in a STYLE tag and appended to the HEAD of the document.
         * @param {String} cssText The text containing the css rules
         * @param {String} id An id to add to the stylesheet for later removal
         * @return {StyleSheet}
         */
        createStyleSheet : function(cssText, id){
            var ss;
            var head = doc.getElementsByTagName("head")[0];
            var rules = doc.createElement("style");
            rules.setAttribute("type", "text/css");
            if(id){
                rules.setAttribute("id", id);
            }
            if(Ext.isIE){
                head.appendChild(rules);
                ss = rules.styleSheet;
                ss.cssText = cssText;
            }else{
                try{
                    rules.appendChild(doc.createTextNode(cssText));
                }catch(e){
                    rules.cssText = cssText;
                }
                head.appendChild(rules);
                ss = rules.styleSheet ? rules.styleSheet : (rules.sheet || doc.styleSheets[doc.styleSheets.length-1]);
            }
            this.cacheStyleSheet(ss);
            return ss;
        },

        /**
         * Removes a style or link tag by id
         * @param {String} id The id of the tag
         */
        removeStyleSheet : function(id){
            var existing = doc.getElementById(id);
            if(existing){
                existing.parentNode.removeChild(existing);
            }
        },

        /**
         * Dynamically swaps an existing stylesheet reference for a new one
         * @param {String} id The id of an existing link tag to remove
         * @param {String} url The href of the new stylesheet to include
         */
        swapStyleSheet : function(id, url){
            this.removeStyleSheet(id);
            var ss = doc.createElement("link");
            ss.setAttribute("rel", "stylesheet");
            ss.setAttribute("type", "text/css");
            ss.setAttribute("id", id);
            ss.setAttribute("href", url);
            doc.getElementsByTagName("head")[0].appendChild(ss);
        },

        /**
         * Refresh the rule cache if you have dynamically added stylesheets
         * @return {Object} An object (hash) of rules indexed by selector
         */
        refreshCache : function(){
            return this.getRules(true);
        },

        // private
        cacheStyleSheet : function(ss){
            if(!rules){
                rules = {};
            }
            try{// try catch for cross domain access issue
                var ssRules = ss.cssRules || ss.rules,
                    sel,
                    selParts;
                for(var j = ssRules.length-1; j >= 0; --j){
                    // nested rules
                    if (ssRules[j].styleSheet) {
                        Ext.util.CSS.cacheStyleSheet(ssRules[j].styleSheet);
                    } else if (ssRules[j].selectorText) {
                        sel = ssRules[j].selectorText.toLowerCase();
                        rules[sel] = ssRules[j];
                        selParts = sel.split(', ');
                        if (selParts.length > 1) {
                            for(var p = selParts.length-1; p >= 0; --p){
                                rules[selParts[p]] = ssRules[j];
                            }
                        }
                    }
                }
            }catch(e){}
        },

        /**
         * Gets all css rules for the document
         * @param {Boolean} refreshCache true to refresh the internal cache
         * @return {Object} An object (hash) of rules indexed by selector
         */
        getRules : function(refreshCache){
            if(rules === null || refreshCache){
                rules = {};
                var ds = doc.styleSheets;
                for(var i =0, len = ds.length; i < len; i++){
                    try{
                        this.cacheStyleSheet(ds[i]);
                    }catch(e){}
                }
            }
            return rules;
        },

        /**
         * Gets an an individual CSS rule by selector(s)
         * @param {String/Array} selector The CSS selector or an array of selectors to try. The first selector that is found is returned.
         * @param {Boolean} refreshCache true to refresh the internal cache if you have recently updated any rules or added styles dynamically
         * @return {CSSRule} The CSS rule or null if one is not found
         */
        getRule : function(selector, refreshCache){
            var rs = this.getRules(refreshCache);
            if(!Ext.isArray(selector)){
                return rs[selector.toLowerCase()];
            }
            for(var i = 0; i < selector.length; i++){
                if(rs[selector[i]]){
                    return rs[selector[i].toLowerCase()];
                }
            }
            return null;
        },


        /**
         * Updates a rule property
         * @param {String/Array} selector If it's an array it tries each selector until it finds one. Stops immediately once one is found.
         * @param {String} property The css property
         * @param {String} value The new value for the property
         * @return {Boolean} true If a rule was found and updated
         */
        updateRule : function(selector, property, value){
            if(!Ext.isArray(selector)){
                var rule = this.getRule(selector);
                if(rule){
                    rule.style[property.replace(camelRe, camelFn)] = value;
                    return true;
                }
            }else{
                for(var i = 0; i < selector.length; i++){
                    if(this.updateRule(selector[i], property, value)){
                        return true;
                    }
                }
            }
            return false;
        }
    };
}();

// don't apply plugins to the menu, apply them only to the datepicker
Ext.override(Ext.menu.DateMenu, {
    initComponent : function(){
        this.on('beforeshow', this.onBeforeShow, this);
        if(this.strict = (Ext.isIE7 && Ext.isStrict)){
            this.on('show', this.onShow, this, {single: true, delay: 20});
        }
        Ext.apply(this, {
            plain: true,
            showSeparator: false,
            items: this.picker = new Ext.DatePicker(Ext.applyIf({
                internalRender: this.strict || !Ext.isIE,
                ctCls: 'x-menu-date-item',
                id: this.pickerId
            }, this.initialConfig))
        });

        // remove plugins from menu itself
        this.plugins = [];

        this.picker.purgeListeners();
        Ext.menu.DateMenu.superclass.initComponent.call(this);
        /**
         * @event select
         * Fires when a date is selected from the {@link #picker Ext.DatePicker}
         * @param {DatePicker} picker The {@link #picker Ext.DatePicker}
         * @param {Date} date The selected date
         */
        this.relayEvents(this.picker, ['select']);
        this.on('show', this.picker.focus, this.picker);
        this.on('select', this.menuHide, this);
        if(this.handler){
            this.on('select', this.handler, this.scope || this);
        }
    }
});

Ext.override(Ext.Component, {
    /**
     * is this component rendered?
     * @return {Promise}
     */
    afterIsRendered : function(){
        var me = this;
        if (this.rendered) {
            return Promise.resolve(me);
        }
        return new Promise(function(resolve) {
            me.on('render', resolve);
        });
    }
});

Ext.override(Ext.tree.TreePanel, {
    /**
     * Gets a node in this tree by its id
     * @param {String} id
     * @return {Node}
     */
    getNodeById : function(id){
        try {
            return this.nodeHash[id];
        } catch(e) {
            return null;
        }
    }
});

Ext.override(Ext.Component, {
    /**
     * is this component rendered?
     * @return {Promise}
     */
    afterIsRendered : function(){
        var me = this;
        if (this.rendered) {
            return Promise.resolve(me);
        }
        return new Promise(function(resolve) {
            me.on('render', resolve);
        });
    }
});

Ext.override(Ext.form.CheckboxGroup, {
    /**
     * is this component rendered?
     * @return {Promise}
     */
    getValue : function(){
        var _ = window.lodash,
            out = [];
        if (_.isArray(this.items)) {
            // not yet rendered
            _.each(this.items, function(item) {
                if (item.checked) {
                    out.push(item);
                }
            });
        } else {
            this.eachItem(function (item) {
                if (item.checked) {
                    out.push(item);
                }
            });
        }
        return out;
    },

    onBeforeEdit: function(o) {
        if (this.readOnly) {
            o.cancel = true;
        }
    },

    setReadOnly: function(readOnly) {
        this.readOnly = readOnly;
    }
});

Ext.layout.VBoxLayout.prototype.onLayout = Ext.layout.VBoxLayout.prototype.onLayout.createSequence(function() {
    if (! this.vboxfix) {
        this.container.on('resize', function (c) {
            var w = c.getWidth();
            c.items.each(function (i) {
                i.setWidth(w);
            })
        }, this);
        this.vboxfix = true;
    }
});

Ext.override(Ext.grid.EditorGridPanel, {
    initEvents : function(){
        Ext.grid.EditorGridPanel.superclass.initEvents.call(this);

        this.on('beforeedit', this.onBeforeEdit, this);

        this.getGridEl().on('mousewheel', this.stopEditing.createDelegate(this, [true]), this);
        this.on('columnresize', this.stopEditing, this, [true]);

        if(this.clicksToEdit == 1){
            this.on("cellclick", this.onCellDblClick, this);
        }else {
            var view = this.getView();
            if(this.clicksToEdit == 'auto' && view.mainBody){
                view.mainBody.on('mousedown', this.onAutoEditClick, this);
            }
            this.on('celldblclick', this.onCellDblClick, this);
        }
    },
    
    onBeforeEdit: function(o) {
        if (this.readOnly) {
            o.cancel = true;
        }
    },

    setReadOnly: function(readOnly) {
        this.readOnly = readOnly;
    }
});

Ext.override(Ext.layout.ToolbarLayout, {
    createMenuConfig : function(c, hideOnClick){
        var cfg = Ext.apply({}, c.initialConfig),
            group = c.toggleGroup;

        Ext.apply(cfg, {
            text: c.overflowText || c.text,
            iconCls: c.iconCls,
            icon: c.icon,
            itemId: c.itemId,
            disabled: c.disabled,
            handler: c.handler,
            scope: c.scope,
            menu: c.menu,
            hideOnClick: hideOnClick
        });
        if(group || c.enableToggle){
            Ext.apply(cfg, {
                iconCls: null,
                icon: null,
                toggle: function(pressed) {
                    this.setChecked(pressed);
                },
                group: group,
                checked: c.pressed,
                listeners: {
                    checkchange: function(item, checked){
                        c.toggle(checked);
                    }
                }
            });
        }
        delete cfg.ownerCt;
        delete cfg.xtype;
        delete cfg.id;
        return cfg;
    }
});

Ext.override(Ext.LoadMask, {
    onBeforeLoad: function() {
        if(!this.disabled){
            this.el.mask(this.msg, this.msgCls);
            Ext.fly(this.el.query('.ext-el-mask-msg')[0]).appendChild(Ext.DomHelper.createDom({tag: 'div', cls: 'x-mask-wait'}));
        }
    },
    onLoad : function(){
        this.el.unmask(this.removeMask);
    },
});

/***/ }),
/* 929 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Tine
 * @subpackage  Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/**
 * auto add selection checkbox for touch devices
 */
if (Ext.isTouchDevice) {
    Ext.grid.GridPanel.prototype.initComponent = Ext.grid.GridPanel.prototype.initComponent.createSequence(function() {
        var cm = this.getColumnModel(),
            sm = this.getSelectionModel(),
            cols = cm.columns || cm.config || [],
            hasCheckboxSelModel = false;

        if (! (sm instanceof Ext.grid.RowSelectionModel)) {
            return;
        }

        Ext.each(cols, function (col) {
            hasCheckboxSelModel = hasCheckboxSelModel || col.dataIndex == 'checked' || col.id == 'checked';
        });

        if (!hasCheckboxSelModel) {
            cols.unshift(sm);
        }
    });

    Ext.grid.RowSelectionModel.prototype.initEvents = Ext.grid.RowSelectionModel.prototype.initEvents.createSequence(function() {
        this.grid.on('render', function() {
            var view = this.grid.getView();
            view.mainBody.on('mousedown', this.onMouseDown, this);
            Ext.fly(view.innerHd).on('mousedown', this.onHdMouseDown, this);
        }, this);
    });

    Ext.each(['onMouseDown', 'onHdMouseDown', 'renderer', 'header', 'width', 'sortable', 'menuDisabled',
        'fixed', 'dataIndex', 'id'], function(p) {
        Ext.grid.RowSelectionModel.prototype[p] = Ext.grid.CheckboxSelectionModel.prototype[p];
    });
}

/***/ }),
/* 930 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.2.1
 * Copyright(c) 2006-2010 Ext JS, Inc.
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.Portal = Ext.extend(Ext.Panel, {
    layout : 'column',
    autoScroll : true,
    cls : 'x-portal',
    defaultType : 'portalcolumn',
    
    initComponent : function(){
        Ext.ux.Portal.superclass.initComponent.call(this);
        this.addEvents({
            validatedrop:true,
            beforedragover:true,
            dragover:true,
            beforedrop:true,
            drop:true
        });
    },

    initEvents : function(){
        Ext.ux.Portal.superclass.initEvents.call(this);
        this.dd = new Ext.ux.Portal.DropZone(this, this.dropConfig);
    },
    
    beforeDestroy : function() {
        if(this.dd){
            this.dd.unreg();
        }
        Ext.ux.Portal.superclass.beforeDestroy.call(this);
    }
});

Ext.reg('portal', Ext.ux.Portal);

Ext.ux.Portal.DropZone = Ext.extend(Ext.dd.DropTarget, {
    
    constructor : function(portal, cfg){
        this.portal = portal;
        Ext.dd.ScrollManager.register(portal.body);
        Ext.ux.Portal.DropZone.superclass.constructor.call(this, portal.bwrap.dom, cfg);
        portal.body.ddScrollConfig = this.ddScrollConfig;
    },
    
    ddScrollConfig : {
        vthresh: 50,
        hthresh: -1,
        animate: true,
        increment: 200
    },

    createEvent : function(dd, e, data, col, c, pos){
        return {
            portal: this.portal,
            panel: data.panel,
            columnIndex: col,
            column: c,
            position: pos,
            data: data,
            source: dd,
            rawEvent: e,
            status: this.dropAllowed
        };
    },

    notifyOver : function(dd, e, data){
        var xy = e.getXY(), portal = this.portal, px = dd.proxy;

        // case column widths
        if(!this.grid){
            this.grid = this.getGrid();
        }

        // handle case scroll where scrollbars appear during drag
        var cw = portal.body.dom.clientWidth;
        if(!this.lastCW){
            this.lastCW = cw;
        }else if(this.lastCW != cw){
            this.lastCW = cw;
            portal.doLayout();
            this.grid = this.getGrid();
        }

        // determine column
        var col = 0, xs = this.grid.columnX, cmatch = false;
        for(var len = xs.length; col < len; col++){
            if(xy[0] < (xs[col].x + xs[col].w)){
                cmatch = true;
                break;
            }
        }
        // no match, fix last index
        if(!cmatch){
            col--;
        }

        // find insert position
        var p, match = false, pos = 0,
            c = portal.items.itemAt(col),
            items = c.items.items, overSelf = false;

        for(var len = items.length; pos < len; pos++){
            p = items[pos];
            var h = p.el.getHeight();
            if(h === 0){
                overSelf = true;
            }
            else if((p.el.getY()+(h/2)) > xy[1]){
                match = true;
                break;
            }
        }

        pos = (match && p ? pos : c.items.getCount()) + (overSelf ? -1 : 0);
        var overEvent = this.createEvent(dd, e, data, col, c, pos);

        if(portal.fireEvent('validatedrop', overEvent) !== false &&
           portal.fireEvent('beforedragover', overEvent) !== false){

            // make sure proxy width is fluid
            px.getProxy().setWidth('auto');

            if(p){
                px.moveProxy(p.el.dom.parentNode, match ? p.el.dom : null);
            }else{
                px.moveProxy(c.el.dom, null);
            }

            this.lastPos = {c: c, col: col, p: overSelf || (match && p) ? pos : false};
            this.scrollPos = portal.body.getScroll();

            portal.fireEvent('dragover', overEvent);

            return overEvent.status;
        }else{
            return overEvent.status;
        }

    },

    notifyOut : function(){
        delete this.grid;
    },

    notifyDrop : function(dd, e, data){
        delete this.grid;
        if(!this.lastPos){
            return;
        }
        var c = this.lastPos.c, 
            col = this.lastPos.col, 
            pos = this.lastPos.p,
            panel = dd.panel,
            dropEvent = this.createEvent(dd, e, data, col, c,
                pos !== false ? pos : c.items.getCount());

        if(this.portal.fireEvent('validatedrop', dropEvent) !== false &&
           this.portal.fireEvent('beforedrop', dropEvent) !== false){

            dd.proxy.getProxy().remove();
            panel.el.dom.parentNode.removeChild(dd.panel.el.dom);
            
            if(pos !== false){
                c.insert(pos, panel);
            }else{
                c.add(panel);
            }
            
            c.doLayout();

            this.portal.fireEvent('drop', dropEvent);

            // scroll position is lost on drop, fix it
            var st = this.scrollPos.top;
            if(st){
                var d = this.portal.body.dom;
                setTimeout(function(){
                    d.scrollTop = st;
                }, 10);
            }

        }
        delete this.lastPos;
    },

    // internal cache of body and column coords
    getGrid : function(){
        var box = this.portal.bwrap.getBox();
        box.columnX = [];
        this.portal.items.each(function(c){
             box.columnX.push({x: c.el.getX(), w: c.el.getWidth()});
        });
        return box;
    },

    // unregister the dropzone from ScrollManager
    unreg: function() {
        Ext.dd.ScrollManager.unregister(this.portal.body);
        Ext.ux.Portal.DropZone.superclass.unreg.call(this);
    }
});


/***/ }),
/* 931 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.2.1
 * Copyright(c) 2006-2010 Ext JS, Inc.
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.PortalColumn = Ext.extend(Ext.Container, {
    layout : 'anchor',
    //autoEl : 'div',//already defined by Ext.Component
    defaultType : 'portlet',
    cls : 'x-portal-column'
});

Ext.reg('portalcolumn', Ext.ux.PortalColumn);


/***/ }),
/* 932 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.2.1
 * Copyright(c) 2006-2010 Ext JS, Inc.
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ux.Portlet = Ext.extend(Ext.Panel, {
    anchor : '100%',
    frame : true,
    collapsible : true,
    draggable : true,
    cls : 'x-portlet'
});

Ext.reg('portlet', Ext.ux.Portlet);


/***/ }),
/* 933 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tine
 * @subpackage  Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/**
 * NOTE: init.js is included before the tine2.0 code!
 */
 
/** --------------------- Ultra Generic JavaScript Stuff --------------------- **/

/**
 * create console pseudo object when firebug is disabled/not installed
 */
if (! window.console) window.console = {};
for (fn in {
        // maximum possible console functions based on firebug
        log: null , debug: null, info: null, warn: null, error: null, assert: null, dir: null, dirxml: null, group: null,
        groupEnd: null, time: null, timeEnd: null, count: null, trace: null, profile: null, profileEnd: null
    }) {
    window.console[fn] = window.console[fn] || function() {};
}

/** -------------------- Extjs Framework Initialisation -------------------- **/

/**
 * don't fill the ext stats
 */
Ext.BLANK_IMAGE_URL = "library/ExtJS/resources/images/default/s.gif";

/**
 * use empty image as secure url
 */
Ext.SSL_SECURE_URL = "library/ExtJS/resources/images/default/s.gif";

/**
 * use native json implementation because we had problems with utf8 linebreaks (\u2028 for example)
 * @see 0003356: Special characters in telephone numbers makes addressbook stop responding
 * @see 0009416: IE9: js error in (new) lead edit dialog
 * @note IE is principally capable to use native json, but for *some reason* it's not working properly
 *       so we don't use it for IE
 * @note and IE9 has some "circular references problem" with its native json ...
 * 
 * @type Boolean
 */
Ext.USE_NATIVE_JSON = ! Ext.isIE && ! Ext.isIE9;

/**
 * init ext quick tips
 */
Ext.QuickTips.init();

/**
 * hide the field label when the field is hidden
 */
Ext.layout.FormLayout.prototype.trackLabels = true;

/**
 * html encode all grid columns per default and convert spaces to &nbsp;
 */
Ext.grid.ColumnModel.defaultRenderer = Ext.util.Format.htmlEncode;
Ext.grid.Column.prototype.renderer = function(value) {
    var result = Ext.util.Format.htmlEncode(value);
    return result;
};

Ext.apply(Ext.data.JsonStore.prototype, {
    url:  'index.php',
    root: 'results',
    idProperty: 'id',
    totalProperty: 'totalcount'
});

/**
 * add more options to Ext.form.ComboBox
 */
Ext.form.ComboBox.prototype.initComponent = Ext.form.ComboBox.prototype.initComponent.createSequence(function() {
    if (this.expandOnFocus) {
        this.lazyInit = false;
        this.on('focus', function(){
            this.onTriggerClick();
        });
    }
    
    if (this.blurOnSelect){
        this.on('select', function(){
            this.blur(true);
            this.fireEvent('blur', this);
        }, this);
    }
});
Ext.form.ComboBox.prototype.triggerAction = 'all';


/**
 * additional date patterns
 * @see{Date}
 */
Date.patterns = {
    ISO8601Long:"Y-m-d H:i:s",
    ISO8601Short:"Y-m-d",
    ISO8601Time:"H:i:s",
    ShortDate: "n/j/Y",
    LongDate: "l, F d, Y",
    FullDateTime: "l, F d, Y g:i:s A",
    MonthDay: "F d",
    ShortTime: "g:i A",
    LongTime: "g:i:s A",
    SortableDateTime: "Y-m-d\\TH:i:s",
    UniversalSortableDateTime: "Y-m-d H:i:sO",
    YearMonth: "F, Y"
};

Ext.util.JSON.encodeDate = function(o){
    var pad = function(n) {
        return n < 10 ? "0" + n : n;
    };
    return '"' + o.getFullYear() + "-" +
        pad(o.getMonth() + 1) + "-" +
        pad(o.getDate()) + " " +
        pad(o.getHours()) + ":" +
        pad(o.getMinutes()) + ":" +
        pad(o.getSeconds()) + '"';
};

Date.prototype.toJSON = function(key) {
    var pad = function(n) {
        return n < 10 ? "0" + n : n;
    };
    return this.getFullYear() + "-" +
        pad(this.getMonth() + 1) + "-" +
        pad(this.getDate()) + " " +
        pad(this.getHours()) + ":" +
        pad(this.getMinutes()) + ":" +
        pad(this.getSeconds());
};

/**
 * additional formats
 */
Ext.util.Format = Ext.apply(Ext.util.Format, {
    money: function (v) {
        var _ = window.lodash,
            currencySymbol = Tine.Tinebase.registry.get('currencySymbol');
        
        if (!_.isNumber(v)) {
            v = Number(v);
        }
        
        return v.toLocaleString(Tine.Tinebase.registry.get('locale').locale) + " " + currencySymbol;
    },
    percentage: function(v){
        if(v === null) {
            return 'none';
        }
        if(!isNaN(v)) {
            return v + " %";
        } 
    },
    pad: function(v,l,s){
        if (!s) {
            s = '&nbsp;';
        }
        var plen = l-v.length;
        for (var i=0;i<plen;i++) {
            v += s;
        }
        return v;
    }
});

/**
 * html encoding for user generated content
 *
 * @param {String} value
 * @returns {String}
 */
Ext.XTemplate.prototype.encode = function(value) {
    return value ? Ext.util.Format.htmlEncode(value) : '';
};

/**
 * html encoding for user generated content when internally decoded (e.g. tooltips)
 *
 * @param {String} value
 * @returns {String}
 */
Ext.XTemplate.prototype.doubleEncode = function(value) {
    return value ? Tine.Tinebase.common.doubleEncode(value) : '';
};

/**
 * allow separate icons for small buttons - needed e.g. for animations
 * @type {Ext.Template}
 */
Ext.Button.buttonTemplate = new Ext.Template(
    '<table id="{4}" cellspacing="0" class="x-btn {3}"><tbody class="{1}">',
    '<tr><td class="x-btn-tl"><i>&#160;</i></td><td class="x-btn-tc"></td><td class="x-btn-tr"><i>&#160;</i></td></tr>',
    '<tr><td class="x-btn-ml"><i>&#160;</i></td><td class="x-btn-mc"><em class="{2}" unselectable="on"><button type="{0}"></button><div class="x-btn-image"></div></em></td><td class="x-btn-mr"><i>&#160;</i></td></tr>',
    '<tr><td class="x-btn-bl"><i>&#160;</i></td><td class="x-btn-bc"></td><td class="x-btn-br"><i>&#160;</i></td></tr>',
    '</tbody></table>');
Ext.Button.buttonTemplate.compile();

/***/ }),
/* 934 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2014 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * compatibility plugin for store to replace Ext.util.MixedCollection in registry & preferences
 */
;(function(store, _) {
    var _set = _.set,
        _remove = _.remove,
        _clear = _.clear,
        _get = _.get,
        _on = _.storeAPI.on,
        _isPrefExp = /\.preferences$/;

    _.stringify = function(d) {
        return d === undefined || typeof d === "function" ? d+'' : Ext.encode(d);
    };
    
    _.parse = function(s) {
        // if it doesn't parse, return as is
        try{ return Ext.decode(s); }catch(e){ return s; }
    };

    _.containsKey = function(key) {
        if (key && key.match(_isPrefExp)) {
            var parts = key.split('.');
            return !! Tine[parts[parts.length-3]]['preferences'];
        }

        return this.has(key);
    };

    _.get = function(area, key) {
        if (key && key.match(_isPrefExp)) {
            var parts = key.split('.');
            return Tine[parts[parts.length-3]]['preferences'];
        }
        return _get.apply(this, arguments);
    };

    /**
     * NOTE as localStorage don't sends events for own window, we need to
     * intercept store write options
     */
    _.set = function(area, key, string) {
        var oldValue = this.get(area, key),
            ret = _set.apply(this, arguments);

        this.fireEvent(key, oldValue, string);

        return ret;
    };

    _.remove = function(area, key) {
        var oldValue = this.get(area, key),
            ret = _remove.apply(this, arguments);

        this.fireEvent(key, oldValue, undefined);

        return ret;
    };

    _.clear = function(area) {
        // we come here without on clear without namespace only
        // hence no need to implement now
    };

    /**
     * fire a simulated storage event
     */
    _.fireEvent = function(key, oldValue, newValue) {
        if (Ext.isIE8 || Ext.isIE9) {
            // IEs fire same window events on their own
            return;
        }

        var event;
        if (document.createEvent) {
            event = document.createEvent('StorageEvent');
            event.initStorageEvent('storage', true, true, key, oldValue, newValue, window.location.href, window.localStorage);

            return dispatchEvent(event);
        } else {
            // IE < 9?
            event = document.createEventObject();
            event.eventType = "storage";
            //event.eventName = "storage";
            event.key = key;
            event.newValue = newValue;
            event.oldValue = oldValue;

            return document.fireEvent("onstorage", event);
        }
    };

    /**
     * NOTE: in Ext.util.MixedCollection you can't register for specific keys
     *       so we add this capability as a fours parameter
     * NOTE: we only support the replace event yet and do no mapping computations
     */
    _.fn('on', function(event, fn, scope, key) {

        // Ext.util.MixedCollection
        if (['clear','add','replace','remove','sort'].indexOf(event) >= 0) {
            if (event != 'replace') {
                throw new Ext.Error('event ' + event + ' not implemented in store.compat');
            }

            return _on.call(this, key, function(e) {
                if (!key || key == e.key) {
                    if (e.oldValue != e.newValue) {
                        return fn.call(scope||window, e.key, e.oldValue, e.newValue);
                    }
                }
            });
        }

        // fallback
        return _on.call(this, event, fn);
    });

    _.fn('add', _.storeAPI.set);
    _.fn('replace', _.storeAPI.set);
    _.fn('containsKey', _.containsKey);

})(window.store, window.store._);

/***/ }),
/* 935 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(79)(__webpack_require__(936))

/***/ }),
/* 936 */
/***/ (function(module, exports) {

module.exports = "// Copyright (c) 2013 Andris Reinman\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n(function(root, factory) {\n    \"use strict\";\n\n    if (typeof define === 'function' && define.amd) {\n        define(factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory();\n    } else {\n        root.addressparser = factory();\n    }\n}(this, function() {\n    \"use strict\";\n\n    /**\n     * Defines an object as a namespace for the parsing function\n     */\n    var addressparser = {};\n\n    /**\n     * Parses structured e-mail addresses from an address field\n     *\n     * Example:\n     *\n     *    \"Name <address@domain>\"\n     *\n     * will be converted to\n     *\n     *     [{name: \"Name\", address: \"address@domain\"}]\n     *\n     * @param {String} str Address field\n     * @return {Array} An array of address objects\n     */\n    addressparser.parse = function(str) {\n        var tokenizer = new addressparser.Tokenizer(str),\n            tokens = tokenizer.tokenize();\n\n        var addresses = [],\n            address = [],\n            parsedAddresses = [];\n\n        tokens.forEach(function(token) {\n            if (token.type === \"operator\" && (token.value === \",\" || token.value === \";\")) {\n                if (address.length) {\n                    addresses.push(address);\n                }\n                address = [];\n            } else {\n                address.push(token);\n            }\n        });\n\n        if (address.length) {\n            addresses.push(address);\n        }\n\n        addresses.forEach(function(address) {\n            address = addressparser._handleAddress(address);\n            if (address.length) {\n                parsedAddresses = parsedAddresses.concat(address);\n            }\n        });\n\n        return parsedAddresses;\n    };\n\n    /**\n     * Converts tokens for a single address into an address object\n     *\n     * @param {Array} tokens Tokens object\n     * @return {Object} Address object\n     */\n    addressparser._handleAddress = function(tokens) {\n        var token,\n            isGroup = false,\n            state = \"text\",\n            address,\n            addresses = [],\n            data = {\n                address: [],\n                comment: [],\n                group: [],\n                text: []\n            },\n            i, len;\n\n        // Filter out <addresses>, (comments) and regular text\n        for (i = 0, len = tokens.length; i < len; i++) {\n            token = tokens[i];\n\n            if (token.type === \"operator\") {\n                switch (token.value) {\n                    case \"<\":\n                        state = \"address\";\n                        break;\n                    case \"(\":\n                        state = \"comment\";\n                        break;\n                    case \":\":\n                        state = \"group\";\n                        isGroup = true;\n                        break;\n                    default:\n                        state = \"text\";\n                }\n            } else {\n                if (token.value) {\n                    data[state].push(token.value);\n                }\n            }\n        }\n\n        // If there is no text but a comment, replace the two\n        if (!data.text.length && data.comment.length) {\n            data.text = data.comment;\n            data.comment = [];\n        }\n\n        if (isGroup) {\n            // http://tools.ietf.org/html/rfc2822#appendix-A.1.3\n            data.text = data.text.join(\" \");\n            addresses.push({\n                name: data.text || (address && address.name),\n                group: data.group.length ? addressparser.parse(data.group.join(\",\")) : []\n            });\n        } else {\n            // If no address was found, try to detect one from regular text\n            if (!data.address.length && data.text.length) {\n                for (i = data.text.length - 1; i >= 0; i--) {\n                    if (data.text[i].match(/^[^@\\s]+@[^@\\s]+$/)) {\n                        data.address = data.text.splice(i, 1);\n                        break;\n                    }\n                }\n\n                var _regexHandler = function(address) {\n                    if (!data.address.length) {\n                        data.address = [address.trim()];\n                        return \" \";\n                    } else {\n                        return address;\n                    }\n                };\n\n                // still no address\n                if (!data.address.length) {\n                    for (i = data.text.length - 1; i >= 0; i--) {\n                        data.text[i] = data.text[i].replace(/\\s*\\b[^@\\s]+@[^@\\s]+\\b\\s*/, _regexHandler).trim();\n                        if (data.address.length) {\n                            break;\n                        }\n                    }\n                }\n            }\n\n            // If there's still is no text but a comment exixts, replace the two\n            if (!data.text.length && data.comment.length) {\n                data.text = data.comment;\n                data.comment = [];\n            }\n\n            // Keep only the first address occurence, push others to regular text\n            if (data.address.length > 1) {\n                data.text = data.text.concat(data.address.splice(1));\n            }\n\n            // Join values with spaces\n            data.text = data.text.join(\" \");\n            data.address = data.address.join(\" \");\n\n            if (!data.address && isGroup) {\n                return [];\n            } else {\n                address = {\n                    address: data.address || data.text || \"\",\n                    name: data.text || data.address || \"\"\n                };\n\n                if (address.address === address.name) {\n                    if ((address.address || \"\").match(/@/)) {\n                        address.name = \"\";\n                    } else {\n                        address.address = \"\";\n                    }\n\n                }\n\n                addresses.push(address);\n            }\n        }\n\n        return addresses;\n    };\n\n    /**\n     * Creates a Tokenizer object for tokenizing address field strings\n     *\n     * @constructor\n     * @param {String} str Address field string\n     */\n    addressparser.Tokenizer = function(str) {\n\n        this.str = (str || \"\").toString();\n        this.operatorCurrent = \"\";\n        this.operatorExpecting = \"\";\n        this.node = null;\n        this.escaped = false;\n\n        this.list = [];\n\n    };\n\n    /**\n     * Operator tokens and which tokens are expected to end the sequence\n     */\n    addressparser.Tokenizer.prototype.operators = {\n        \"\\\"\": \"\\\"\",\n        \"(\": \")\",\n        \"<\": \">\",\n        \",\": \"\",\n        \":\": \";\"\n    };\n\n    /**\n     * Tokenizes the original input string\n     *\n     * @return {Array} An array of operator|text tokens\n     */\n    addressparser.Tokenizer.prototype.tokenize = function() {\n        var chr, list = [];\n        for (var i = 0, len = this.str.length; i < len; i++) {\n            chr = this.str.charAt(i);\n            this.checkChar(chr);\n        }\n\n        this.list.forEach(function(node) {\n            node.value = (node.value || \"\").toString().trim();\n            if (node.value) {\n                list.push(node);\n            }\n        });\n\n        return list;\n    };\n\n    /**\n     * Checks if a character is an operator or text and acts accordingly\n     *\n     * @param {String} chr Character from the address field\n     */\n    addressparser.Tokenizer.prototype.checkChar = function(chr) {\n        if ((chr in this.operators || chr === \"\\\\\") && this.escaped) {\n            this.escaped = false;\n        } else if (this.operatorExpecting && chr === this.operatorExpecting) {\n            this.node = {\n                type: \"operator\",\n                value: chr\n            };\n            this.list.push(this.node);\n            this.node = null;\n            this.operatorExpecting = \"\";\n            this.escaped = false;\n            return;\n        } else if (!this.operatorExpecting && chr in this.operators) {\n            this.node = {\n                type: \"operator\",\n                value: chr\n            };\n            this.list.push(this.node);\n            this.node = null;\n            this.operatorExpecting = this.operators[chr];\n            this.escaped = false;\n            return;\n        }\n\n        if (!this.escaped && chr === \"\\\\\") {\n            this.escaped = true;\n            return;\n        }\n\n        if (!this.node) {\n            this.node = {\n                type: \"text\",\n                value: \"\"\n            };\n            this.list.push(this.node);\n        }\n\n        if (this.escaped && chr !== \"\\\\\") {\n            this.node.value += \"\\\\\";\n        }\n\n        this.node.value += chr;\n        this.escaped = false;\n    };\n\n    return addressparser;\n}));"

/***/ }),
/* 937 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Lars Kneschke <l.kneschke@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.widgets');

/**
 * Widget to display maps
 *
 * @namespace   Tine.widgets
 * @class       Tine.widgets.MapPanel
 * @extends     GeoExt.MapPanel
 */
Tine.widgets.MapPanel = Ext.extend(Ext.Panel, {
    initComponent: function() {

        Tine.widgets.MapPanel.superclass.initComponent.call(this);
    },

    afterRender: function() {
        var me = this;
        __webpack_require__.e/* require.ensure */(3).then((function() {
            __webpack_require__(231);
            __webpack_require__(232);

            // fix OpenLayers script location to find images/themes/...
            OpenLayers._getScriptLocation = function () {
                return 'library/OpenLayers/';
            };

            me.geoExtPanel = new GeoExt.MapPanel({
                zoom: me.zoom || 4,
                map:  new OpenLayers.Map(),
                layers: [
                    new OpenLayers.Layer.OSM()
                ]
            });

            me.add(me.geoExtPanel);
            me.fireEvent('mapAdded', me);

        }).bind(null, __webpack_require__)).catch(__webpack_require__.oe);

        Tine.widgets.MapPanel.superclass.afterRender.call(this);
    },

    setCenter: function(lon, lat) {
        this.geoExtPanel.center = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), this.geoExtPanel.map.getProjectionObject());
        this.geoExtPanel.map.setCenter(this.center);

        // add a marker
        var size = new OpenLayers.Size(32,32);
        var offset = new OpenLayers.Pixel(0, -size.h);
        var icon = new OpenLayers.Icon('images/oxygen/32x32/actions/flag-red.png', size, offset);

        var markers = new OpenLayers.Layer.Markers( "Markers" );
        markers.addMarker(new OpenLayers.Marker(this.geoExtPanel.center, icon));
        this.geoExtPanel.map.addLayer(markers);
    },

    beforeDestroy: function() {
        if (this.geoExtPanel && this.geoExtPanel.map) {
            delete this.geoExtPanel.map;
        }
        this.supr().beforeDestroy.apply(this, arguments);
    }
});

Ext.reg('widget-mappanel', Tine.widgets.MapPanel);


/***/ }),
/* 938 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2012-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets');

/**
 * @namespace   Tine.widgets
 * @class       Tine.widgets.ContentTypeTreePanel
 * @extends     Ext.tree.TreePanel
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @param       {Object} config Configuration options
 * @description
 * <p>Utility class for generating content type trees as used in the apps westpanel</p>
 *<p>Example usage:</p>
<pre><code>
var modulePanel =  new Tine.widgets.ContentTypeTreePanel({
    app: Tine.Tinebase.appMgr.get('Timetracker'),
    contentTypes: [{modelName: 'Timesheet', requiredRight: null}, {modelName: 'Timeaccount', requiredRight: 'manage'}],
    contentType: 'Timeaccount'
});
</code></pre>
 */
Tine.widgets.ContentTypeTreePanel = function(config) {
    Ext.apply(this, config);
        
    Tine.widgets.ContentTypeTreePanel.superclass.constructor.call(this);
};

Ext.extend(Tine.widgets.ContentTypeTreePanel, Ext.tree.TreePanel, {
    rootVisible : false,
    border : false,

    root: null,
    
    title: 'Modules', // i18n._('Modules')

    collapsible: true,
    baseCls: 'ux-arrowcollapse',
    animCollapse: true,
    titleCollapse:true,
    draggable : true,
    autoScroll: false,
    autoHeight: true,
    canonicalName: 'ModulPicker',
    
    collapsed: false,
    renderHidden: true,
    
    recordClass: null,
    /**
     * @cfg {Tine.Tinebase.Application} app
     */
    app: null,
    
    /**
     * @cfg {Array} contentTypes
     */
    contentTypes: null,
    
    /**
     * @cfg {String} contentType 
     */
    contentType: null,
    
    /**
     * Enable state
     * 
     * @type {Boolean}
     */
    stateful: true,
    
    /**
     * if a previous state has been applied, this is set to true.
     * if restoring the last state fails, this is set to false
     * 
     * @type Boolean
     */
    stateApplied: null,
    
    /**
     * define state events
     * 
     * @type {Array}
     */
    stateEvents: ['collapse', 'expand', 'collapsenode', 'expandnode'],
    
    /**
     * @private {Ext.tree.treeNode} the latest clicked node
     */
    lastClickedNode: null,
    
    /**
     * init
     */  
    initComponent: function() {
        this.stateId = this.app.name + (this.contentType ? this.contentType : '') + '-moduletree';
        Tine.widgets.ContentTypeTreePanel.superclass.initComponent.call(this);
        
        this.setTitle(i18n._(this.title));
        
        var treeRoot = new Ext.tree.TreeNode({
            expanded: true,
            text : '',
            allowDrag : false,
            allowDrop : false,
            icon : false
        });
        var groupNodes = {};
        this.setRootNode(treeRoot);
        var treeRoot = this.getRootNode();
        
        this.recordClass = Tine[this.app.appName].Model[this.contentType];
        
        this.on('click', this.saveClickedNodeState, this);
        
        Ext.each (this.contentTypes, function(ct) {
            var modelName = ct.hasOwnProperty('meta') 
                ? ct.meta.modelName 
                : (
                    ct.hasOwnProperty('model')
                        ? ct.model
                        : ct.modelName
                ); 
            
            var modelApp = ct.app ? ct.app : (ct.appName ? Tine.Tinebase.appMgr.get(ct.appName) : this.app);
            
            var recordClass = Tine[modelApp.appName].Model[modelName];

            if (! recordClass && !ct.text) {
                // module is disabled (feature switch) or otherwise non-functional
                return;
            }

            var contentType = ct.contentType ? ct.contentType : recordClass.getMeta('modelName');
            
            var group = recordClass ? recordClass.getMeta('group') : false;
            
            if (group) {
                if(! groupNodes[group]) {
                    groupNodes[group] = new Ext.tree.TreeNode({
                        id : 'modulenode-' + group,
                        iconCls: modelApp.appName + modelName,
                        text: modelApp.i18n._hidden(group),
                        leaf : false,
                        expanded: false
                    });
                    treeRoot.appendChild(groupNodes[group]);
                }
                var parentNode = groupNodes[group];
            } else {
                var parentNode = treeRoot;
            }
            
            // check requiredRight if any
            // add check for model name also
            if (
                ct.requiredRight && recordClass &&
                ! Tine.Tinebase.common.hasRight(ct.requiredRight, this.app.appName, recordClass.getMeta('recordsName').toLowerCase()) &&
                ! Tine.Tinebase.common.hasRight(ct.requiredRight, this.app.appName, recordClass.getMeta('modelName').toLowerCase()) &&
                ! Tine.Tinebase.common.hasRight(ct.requiredRight, this.app.appName, recordClass.getMeta('modelName').toLowerCase() + 's')
            ) return true;

            var c = {
                id : 'treenode-' + contentType,
                contentType: contentType,
                iconCls: ct.iconCls ? ct.iconCls : modelApp.appName + modelName,
                text: ct.text ? ct.text : recordClass.getModuleName(),
                leaf : true
            };
            
            if (ct.genericCtxActions && recordClass) {
                c.container = modelApp.getRegistry().get('default' + recordClass.getMeta('modelName') + 'Container');
            }
            
            var child = new Ext.tree.TreeNode(c);
            
            child.on('click', function() {
                this.app.getMainScreen().setActiveContentType(contentType);
            }, this);

            // append generic ctx-items (Tine.widgets.tree.ContextMenu)
            if (ct.genericCtxActions) {
                this['contextMenu' + modelName] = Tine.widgets.tree.ContextMenu.getMenu({
                    nodeName: modelApp.i18n.ngettext(recordClass.getMeta('recordName'), recordClass.getMeta('recordsName'), 12),
                    actions: ct.genericCtxActions,
                    scope: this,
                    backend: 'Tinebase_Container',
                    backendModel: 'Container'
                });
          
                child.on('contextmenu', function(node, event) {
                    event.stopEvent();
                    if(node.leaf) {
                        this.ctxNode = node;
                        this['contextMenu' + modelName].showAt(event.getXY());
                    }
                }, this);
            }
            
            parentNode.appendChild(child);
        }, this);
    },
    
    /**
     * saves the last clicked node as state
     * 
     * @param {Ext.tree.treeNode} node
     * @param {Ext.EventObjectImpl} event
     */
    saveClickedNodeState: function(node, event) {
        this.lastClickedNode = node;
        this.saveState();
    },
    
    /**
     * @see Ext.Component
     */
    getState: function() {
        var root = this.getRootNode();
        
        var state = {
            expanded: [],
            selected: this.lastClickedNode ? this.lastClickedNode.id : null
        };
        Ext.each(root.childNodes, function(node) {
            state.expanded.push(!! node.expanded);
        }, this);
        
        return state;
    },
    
    /**
     * applies state to cmp
     * 
     * @param {Object} state
     */
    applyState: function(state) {
        var root = this.getRootNode();
        Ext.each(state.expanded, function(isExpanded, index) {
            // check if node exists, as user might have lost permissions for modules
            if (root.childNodes[index]) {
                root.childNodes[index].expanded = isExpanded;
            }
        }, this);

        (function() {
            var node = this.getNodeById(state.selected);
            if (node) {
                node.select();
                this.stateApplied = true;
                var contentType = node.id.split('-')[1];
                this.app.getMainScreen().setActiveContentType(contentType ? contentType : '');
            } else {
                this.stateApplied = false;
            }
            
        }).defer(10, this);
    },
    
    /**
     * is called after render, calls the superclass and this.afterRenderSelectNode
     */
    afterRender: function () {
        Tine.widgets.ContentTypeTreePanel.superclass.afterRender.call(this);
        
        this.afterRenderSelectNode();
    },
    
    /**
     * is called after render and will be deferred, if state restoring is still running
     */
    afterRenderSelectNode: function() {
        // wait if we don't know already if the state could be applied
        if (this.stateful === true && this.stateApplied === null) {
            this.afterRenderSelectNode.defer(20, this)
            return;
        }
        
        // don't do anything, if a state has been applied
        if (this.stateful === true && this.stateApplied === true) {
            return;
        }
        
        // find treenode to select
        var treeNode = this.getRootNode().findChild('id', 'treenode-' + this.contentType);
        
        // if no treenode was found, try to find the module node
        if (! treeNode) {
            // get group by current contentType
            for (var index = 0; index < this.contentTypes.length; index++) {
                if (this.contentTypes[index].modelName == this.contentType) {
                    var group = this.contentTypes[index].group;
                }
            }
            
            // if a group was found, try to expand the node
            if (group) {
                var moduleNode = this.getRootNode().findChild('id', 'modulenode-' + group);
                if (moduleNode) {
                    moduleNode.expand();
                }
                // try to find node a bit later after expanding the parent, so we can be sure the node is rendered already
                (function() {
                    var treeNode = moduleNode.findChild('id', 'treenode-' + this.contentType);
                    if (treeNode) {
                        this.getSelectionModel().select(treeNode);
                    }
                }).defer(50, this);
            }
        } else {
            //  select the node if it has been found
            if (treeNode) {
                this.getSelectionModel().select(treeNode);
            }
        }
    },
    
    /**
     * initializes the state and is called before afterRender
     * 
     * @see Ext.Component
     */
    initState: function() {
        Tine.widgets.ContentTypeTreePanel.superclass.initState.call(this);
        
        (function() {
            if (this.stateApplied === null) {
                this.stateApplied = false;
            }
        }).defer(50, this);
    }
});


/***/ }),
/* 939 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <alex@stintzing.net>
 * @copyright   Copyright (c) 2009-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.form');
 
 /**
 * @namespace   Tine.widgets.form
 * @class       Tine.widgets.form.RecordPickerManager
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 */

Tine.widgets.form.RecordPickerManager = function() {

    var items = {};
  
    return {
        /**
         * returns a registered recordpicker or creates the default one
         * @param {String/Tinebase.Application} appName      expands to recordClass: Tine[appName].Model[modelName],
         * @param {String/Tinebase.data.Record} modelName               recordProxy: Tine[appName][modelName.toLowerCase() + 'Backend'])
         * @param {Object} config       additional Configuration
         * @return {Object} recordpicker
         */
        get: function(appName, modelName, config) {
            config = config || {};
    
            var appName = Ext.isString(appName) ? appName : appName.appName,
                modelName = Ext.isFunction(modelName) ? modelName.getMeta('modelName') : modelName,
                key = appName+modelName;

            if(items[key]) {   // if registered
                if(Ext.isString(items[key])) { // xtype
                    return Ext.ComponentMgr.create(config, items[key]);
                } else {
                    return new items[key](config);
                }
            } else {    // not registered, create default
                var defaultconfig = {
                    recordClass: Tine.Tinebase.data.RecordMgr.get(appName, modelName),
                    recordProxy: Tine[appName][modelName.toLowerCase() + 'Backend'],
                    loadingText: i18n._('Searching...')
                };
                Ext.apply(defaultconfig, config);
                return new Tine.Tinebase.widgets.form.RecordPickerComboBox(defaultconfig);
            }
        },
        
        /**
         * Registers a component
         * @param {String} appName          the application registered for
         * @param {String} modelName        the registered model name
         * @param {String/Object} component the component or xtype to register 
         */
        register: function(appName, modelName, component) {
            if(!Tine.hasOwnProperty('log')) {
                this.register.defer(100, this, [appName, modelName, component]);
                return false;
            }
            
            var appName = Ext.isString(appName) ? appName : appName.appName,
                modelName = Ext.isFunction(modelName) ? modelName.getMeta('modelName') : modelName,
                key = appName+modelName;

            Tine.log.debug('RecordPickerManager::registerItem: ' + appName + modelName);
            items[key] = component;
        }
    };
}();


/***/ }),
/* 940 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.form');

/**
 * central form field manager
 * - get form field for a given field
 * - register form field for a given field
 *
 * @namespace   Tine.widgets.form
 * @class       Tine.widgets.form.FieldManager
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @singleton
 */
Tine.widgets.form.FieldManager = function() {
    var fields = {};

    return {
        /**
         * const for category editDialog
         */
        CATEGORY_EDITDIALOG: 'editDialog',

        /**
         * const for category propertyGrid
         */
        CATEGORY_PROPERTYGRID: 'propertyGrid',

        /**
         * get form field of well known field names
         *
         * @param {String} fieldName
         * @return {Object}
         */
        getByFieldname: function(fieldName) {
            var field = null;

            return field;
        },

        /**
         * get form field by data type
         *
         * @param {String} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {String} category {editDialog|propertyGrid} optional.
         * @param {Object} config
         * @return {Object}
         */
        getByModelConfig: function(appName, modelName, fieldName, category, config) {
            var field = {},
                recordClass = Tine.Tinebase.data.RecordMgr.get(appName, modelName),
                modelConfig = recordClass ? recordClass.getModelConfiguration() : null,
                fieldDefinition = modelConfig && modelConfig.fields ? modelConfig.fields[fieldName] : {},
                fieldType = fieldDefinition.type || 'textfield',
                app = Tine.Tinebase.appMgr.get(appName),
                i18n = fieldDefinition.useGlobalTranslation ? window.i18n : app.i18n;


            if (fieldType === 'virtual' && fieldDefinition.config) {
                fieldType = fieldDefinition.config.type || 'textfield';
                fieldDefinition = fieldDefinition.config;
            }

            field.fieldLabel = i18n._hidden(fieldDefinition.label || fieldDefinition.fieldName);
            field.name = fieldName;
            field.disabled = !! (fieldDefinition.readOnly || fieldDefinition.disabled);
            field.allowBlank = !! (fieldDefinition.validators && fieldDefinition.validators.allowEmpty);

            if (fieldDefinition['default']) {
                field['default'] = i18n._hidden(fieldDefinition['default']);
            }

            switch (fieldType) {
                case 'money':
                    field.xtype = 'extuxmoneyfield';
                    break;
                case 'date':
                    field.xtype = 'datefield';
                    if (fieldDefinition.dateFormat) {
                        field.dateFormat = fieldDefinition.dateFormat;
                    }
                    break;
                case 'time':
                    field.xtype = 'timefield';
                    break;
                case 'datetime':
                    field.xtype = 'datetimefield'; // form ux.datetimefield
                    break;
                case 'bool':
                case 'boolean':
                    if (category === 'editDialog') {
                        field.xtype = 'checkbox';
                    } else {
                        field.xtype = 'booleancombo';
                    }
                    break;
                case 'integer':
                    field.xtype = 'numberfield';
                    field.allowDecimals = false;

                    if (fieldDefinition.specialType && fieldDefinition.specialType === 'percent') {
                        field.xtype = 'extuxnumberfield';
                        field.useThousandSeparator = false;
                        field.suffix = ' %';
                    }

                    if (fieldDefinition.max) {
                        field.maxValue = fieldDefinition.max;
                    }

                    if (fieldDefinition.min) {
                        field.minValue = fieldDefinition.min;
                    }
                    break;
                case 'float':
                    field.xtype = 'numberfield';
                    field.decimalPrecision = 2;

                    if (fieldDefinition.specialType && fieldDefinition.specialType === 'percent') {
                        field.xtype = 'extuxnumberfield';
                        field.suffix = ' %';
                    }

                    if (fieldDefinition.max) {
                        field.maxValue = fieldDefinition.max;
                    }

                    if (fieldDefinition.min) {
                        field.minValue = fieldDefinition.min;
                    }
                    break;
                case 'user':
                    field.xtype = 'addressbookcontactpicker';
                    field.userOnly = true;
                    field.useAccountRecord = true;
                    break;
                case 'relation':
                    if (fieldDefinition.config && fieldDefinition.config.appName && fieldDefinition.config.modelName) {
                        field.xtype = 'tinerelationpickercombo';
                        field.recordClass = Tine[fieldDefinition.config.appName].Model[fieldDefinition.config.modelName];
                        field.app = fieldDefinition.config.appName;
                        field.relationType = fieldDefinition.config.type;
                        field.modelUnique = true;
                        // TODO pass degree and other options in config?
                        field.relationDegree = 'sibling';
                    }
                    break;
                case 'record':
                    if (fieldDefinition.config && fieldDefinition.config.appName && fieldDefinition.config.modelName) {
                        var picker = Tine.widgets.form.RecordPickerManager.get(
                            fieldDefinition.config.appName,
                            fieldDefinition.config.modelName,
                            Ext.apply(field, config)
                        );
                        field = picker;
                    }
                    break;
                case 'keyfield':
                    field.xtype = 'widget-keyfieldcombo';
                    field.app = app;
                    field.keyFieldName = fieldDefinition.name;
                    break;
                case 'text':
                    field.xtype = 'textarea';
                    field.height = 70; // 5 lines
                    break;
                case 'stringAutocomplete':
                    field.xtype = 'tine.widget.field.AutoCompleteField';
                    field.recordClass = recordClass;
                    break;
                case 'numberableStr':
                case 'numberableInt':
                    field.xtype = 'textfield';
                    field.disabled = true;
                    break;
                default:
                    field.xtype = 'textfield';
                    break;
            }

            Ext.apply(field, config);

            return field;
        },

        /**
         * returns form field for given field
         *
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {String} category {editDialog|propertyGrid} optional.
         * @param {Object} config
         * @return {Object}
         */
        get: function(appName, modelName, fieldName, category, config) {
            var appName = this.getAppName(appName),
                modelName = this.getModelName(modelName),
                categoryKey = this.getKey([appName, modelName, fieldName, category]),
                genericKey = this.getKey([appName, modelName, fieldName]),
                config = config || {};

            // check for registered renderer
            var field = fields[categoryKey] ? fields[categoryKey] : fields[genericKey];

            // check for common names
            if (! field) {
                field = this.getByFieldname(fieldName);
            }

            // check for known datatypes
            if (! field) {
                field = this.getByModelConfig(appName, modelName, fieldName, category, config);
            }

            return field;
        },

        /**
         * register renderer for given field
         *
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {Object} field
         * @param {String} category {editDialog|propertyGrid} optional.
         */
        register: function(appName, modelName, fieldName, field, category) {
            var appName = this.getAppName(appName),
                modelName = this.getModelName(modelName),
                categoryKey = this.getKey([appName, modelName, fieldName, category]),
                genericKey = this.getKey([appName, modelName, fieldName]);

            fields[category ? categoryKey : genericKey] = field;
        },

        /**
         * check if a field is explicitly registered
         *
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {String} category {editDialog|propertyGrid} optional.
         * @return {Boolean}
         */
        has: function(appName, modelName, fieldName, category) {
            var appName = this.getAppName(appName),
                modelName = this.getModelName(modelName),
                categoryKey = this.getKey([appName, modelName, fieldName, category]),
                genericKey = this.getKey([appName, modelName, fieldName]);

            // check for registered renderer
            return (fields[categoryKey] ? fields[categoryKey] : fields[genericKey]) ? true : false;
        },

        /**
         * returns the modelName by modelName or record
         *
         * @param {Record/String} modelName
         * @return {String}
         */
        getModelName: function(modelName) {
            return Ext.isFunction(modelName) ? modelName.getMeta('modelName') : modelName;
        },

        /**
         * returns the modelName by appName or application instance
         *
         * @param {String/Tine.Tinebase.Application} appName
         * @return {String}
         */
        getAppName: function(appName) {
            return Ext.isString(appName) ? appName : appName.appName;
        },

        /**
         * returns a key by joining the array values
         *
         * @param {Array} params
         * @return {String}
         */
        getKey: function(params) {
            return params.join('_');
        }
    };
}();

/***/ }),
/* 941 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <alex@stintzing.net>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.widgets.dialog');

/**
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.AddToRecordPanel
 * @extends     Ext.FormPanel
 * @author      Alexander Stintzing <alex@stintzing.net>
 */

Tine.widgets.dialog.AddToRecordPanel = Ext.extend(Ext.FormPanel, {

    /**
     * the name of the application the record to be added belongs to
     * @cfg {String}
     */
    appName : null,
    
    /**
     * the record class of the record the selected records should be added to
     * @cfg {Tine.Tinebase.data.Record}
     */
    recordClass: null,
    
    /**
     * the selection filter if is filter select
     * @type {Object}
     */
    selectionFilter: null,
    
    /**
     * count of records to add to
     * @type {Integer}
     */
    count: null,
    
    /**
     * the calling app
     * @type {String}
     */
    callingApp: null,
    
    /**
     * the calling model
     * @type {String}
     */
    callingModel: null,
    
    /**
     * the relations to add as Json Encoded array or bool on filterSelection
     * @type {Boolean|String} 
     */
    addRelations: null,
    
    // private
    app: null,
    layout : 'fit',
    border : false,
    cls : 'tw-editdialog',
    labelAlign : 'top',
    anchor : '100% 100%',
    deferredRender : false,
    buttonAlign : null,
    bufferResize : 500,
    
    /**
     * initializes the component
     */
    initComponent: function() {
         
        if (!this.app) {
            this.app = Tine.Tinebase.appMgr.get(this.appName);
        }
            
        Tine.log.debug('initComponent: appName: ', this.appName);
        Tine.log.debug('initComponent: app: ', this.app);

        // init actions
        this.initActions();
        // init buttons and tbar
        this.initButtons();
        
        // get items for this dialog
        this.items = this.getFormItems();

        Tine.widgets.dialog.AddToRecordPanel.superclass.initComponent.call(this);
    },
    
    /**
     * initializes the actions
     */
    initActions: function() {
        this.action_cancel = new Ext.Action({
            text : i18n._('Cancel'),
            minWidth : 70,
            scope : this,
            handler : this.onCancel,
            iconCls : 'action_cancel'
        });
        
        this.action_update = new Ext.Action({
            text : i18n._('Ok'),
            minWidth : 70,
            scope : this,
            handler : this.onUpdate,
            iconCls : 'action_saveAndClose'
        });
    },

    /**
     * create the buttons
     * use preference settings for order of save and close buttons
     */
    initButtons : function() {
        this.fbar = ['->'];
        
        this.fbar.push(this.action_cancel, this.action_update);
    },    
    
    /**
     * is called on render, creates keymap
     * @param {} ct
     * @param {} position
     */
    onRender : function(ct, position) {
        Tine.widgets.dialog.AddToRecordPanel.superclass.onRender.call(this, ct, position);

        // generalized keybord map for edit dlgs
        new Ext.KeyMap(this.el, [ {
            key : [ 10, 13 ], // ctrl + return
            ctrl : true,
            fn : this.onUpdate,
            scope : this
        }]);

    },
    
    /**
     * is called on cancel
     */
    onCancel: function() {
        this.fireEvent('cancel');
        this.onClose();
    },
    
    /**
     * closes the window
     */
    onClose: function() {
        this.purgeListeners();
        this.window.close();
    },
    
    /**
     * returns true if the form is valid, must be overridden
     * @return {Boolean}
     */
    isValid: Ext.emptyFn,
    
    /**
     * returns the items of the form, must be overridden
     * @return {Object} with the configured items
     */
    getFormItems: Ext.emptyFn,
    
    /**
     * returns the configuration for the relations to be created, must be overridden
     * @return {Object}
     */
    getRelationConfig: function() {
        return {};
    },
    
    /**
     * returns the selected record. may be overridden.
     * @return {Object} config for the record to edit
     */
    getRecord: function() {
        var recordId = this.searchBox.getValue(), 
            record = this.searchBox.store.getById(recordId);
        return record;
    },
    
    /**
     * is called when ok-button is pressed and edit dialog should be opened
     */
    onUpdate: function() {
        if (this.isValid()) {
            if (this.app) {
                var ms = this.app.getMainScreen();
                if (ms) {
                    var cp = ms.getCenterPanel();
                }
            }
            cp.onEditInNewWindow({actionType: 'edit'}, this.getRecord() ? this.getRecord() : this.searchBox.selectedRecord, [{
                ptype:          'addrelations_edit_dialog',
                selectionFilter: this.selectionFilter,
                addRelations:    this.addRelations,
                relationConfig:  this.getRelationConfig(),
                callingApp:      this.callingApp,
                callingModel:    this.callingModel
            }]);
            this.onClose();
        }
    }
});

/***/ }),
/* 942 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.dialog');

/**
 * Base class for all Exception Handler dialogs
 * 
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.ExceptionHandlerDialog
 * @extends     Ext.FormPanel
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @constructor
 * @param {Object} config The configuration options.
 */

Tine.widgets.dialog.ExceptionHandlerDialog = Ext.extend(Ext.FormPanel, {
    
    // private
    layout : 'fit',
    border : false,
    cls : 'tw-editdialog',
    labelAlign : 'top',
    anchor : '100% 100%',
    deferredRender : false,
    buttonAlign : null,
    bufferResize : 500,
    
    fields: null,
    
    // private, auto set by exception
    /**
     * the calling application
     * 
     * @type Tine.Tinebase.Application
     */
    app: null,
    message: null,
    
    /**
     * the type of this exception handler dialog. May be error, warning, info, question
     * @type String
     */
    type: 'error',
    
    /**
     * the exception thrown by the server
     * 
     * @type {Object}
     */
    exception: null,
    
    /**
     * the callback function on OK
     * 
     * @type {Function}
     */
    callbackOnOk: null,
    
    /**
     * the callback scope on OK
     * @type {Object}
     */
    callbackOnOkScope: null,
    
    /**
     * the callback function on Cancel
     * 
     * @type {Function}
     */
    callbackOnCancel: null,
    
    /**
     * the callback scope on Cancel
     * @type {Object}
     */
    callbackOnCancelScope: null,
    
    /**
     * the callback function of Cancel and Ok, if not overwritten by callbackOnCancel or callbackOnOk
     * 
     * @type {Function}
     */
    callback: null,
    
    /**
     * the callback scope of Cancel and Ok, if not overwritten by callbackOnCancel or callbackOnOk
     * 
     * @type {Object}
     */
    callbackScope: null,
    
    messageHeight: 40,
    
    initComponent: function() {
        this.app = Tine.Tinebase.appMgr.get(this.exception.appName);
        this.message = this.app.i18n._hidden(this.exception.message);
        
        this.callbackOnOk = this.callbackOnOk ? this.callbackOnOk : (this.callback ? this.callback : this.onClose);
        this.callbackOnCancel = this.callbackOnCancel ? this.callbackOnCancel : (this.callback ? this.callback : this.onClose);
        this.callbackOnCancelScope = this.callbackOnCancelScope ? this.callbackOnCancelScope : (this.callbackScope ? this.callbackScope : this);
        this.callbackOnOkScope = this.callbackOnOkScope ? this.callbackOnOkScope : (this.callbackScope ? this.callbackScope : this);
        
        this.initActions();
        this.initButtons();
        this.initFormItems();
        
        Tine.widgets.dialog.ExceptionHandlerDialog.superclass.initComponent.call(this);
    },
    
    /**
     * create the buttons
     */
    initButtons : function() {
        this.fbar = [ '->', this.action_cancel, this.action_update ];
    },
    
    initFormItems: function() {
        this.items = {
            border: false,
            frame: true,
            layout: 'border',
            cls: 'x-window-dlg',
            items: [{
                region: 'north',
                xtype: 'displayfield',
                style: {
                    minHeight: '40px',
                    paddingLeft: '40px'
                },
                height: this.messageHeight,
                'name': 'message',
                value: this.message,
                hideLabel: true,
                cls: 'ext-mb-' + this.type
            }, {
                region: 'center',
                xtype: 'columnform',
                labelAlign: 'top',
                formDefaults: {
                    xtype:'textfield',
                    anchor: '100%',
                    labelSeparator: '',
                    columnWidth: 1,
                    allowBlank: false
                },
                items: this.fields
            }]
        };
    },
    
    /**
     * is called on render, creates keymap
     * @param {} ct
     * @param {} position
     */
    onRender : function(ct, position) {
        Tine.widgets.dialog.ExceptionHandlerDialog.superclass.onRender.call(this, ct, position);

        // generalized keybord map for edit dlgs
        new Ext.KeyMap(this.getEl(), [ {
            key : [ 10, 13 ], // ctrl + return
            ctrl : true,
            fn : this.callbackOnOk,
            scope : this
        }]);
    },
    
    onClose: function() {
        this.purgeListeners();
        this.window.close();
    },
    
    onOk: function() {
        var data = this.getForm().getFieldValues();
        this.callbackOnOk.call(this.callbackOnOkScope, data);
        this.onClose();
    },
    
    /**
     * initializes the actions
     */
    initActions: function() {
        this.action_cancel = new Ext.Action({
            text : i18n._('Cancel'),
            minWidth : 70,
            handler : this.callbackOnCancel,
            scope: this.callbackOnCancelScope,
            iconCls : 'action_cancel'
        });
        
        this.action_update = new Ext.Action({
            text : i18n._('Ok'),
            minWidth : 70,
            scope : this,
            handler: this.onOk,
            iconCls : 'action_saveAndClose'
        });
    }
});


/**
 * @param {Object}
 * 
 * @return {Ext.ux.Window}
 */
Tine.widgets.dialog.ExceptionHandlerDialog.openWindow = function(config) {
    
    var app = Tine.Tinebase.appMgr.get(config.exception.appName);
    
    if (config.hasOwnProperty('exception')) {
        if (config.exception.hasOwnProperty('title') && config.exception.title) {
            var title = app.i18n._hidden(config.exception.title);
        } else if(config.exception.hasOwnProperty('number') && config.exception.number) {
            var title = String.format(i18n._('{1} - Exception {0}'), config.exception.code, app.getTitle());
        } else {
            var title = String.format(i18n._('{0} - Unknown Exception'), app.getTitle());
        }
    }
    
    var window = Tine.WindowFactory.getExtWindow({
        title: title,
        width : config.hasOwnProperty('width') ? config.width: 290,
        height : config.hasOwnProperty('height') ? config.height : 95,
        contentPanelConstructor : 'Tine.widgets.dialog.ExceptionHandlerDialog',
        contentPanelConstructorConfig : config
    });
    
    return window;
};

/***/ }),
/* 943 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2015 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Ext.ux.util');

/**
 * @namespace   Ext.ux.util
 * @class       Ext.ux.util.Cookie
 */
Ext.ux.util.Cookie = function(config) {
    this.path = "/";
    this.expires = new Date(new Date().getTime()+(1000*60*60*24*7)); //7 days
    this.domain = null;
    this.secure = false;
    this.encode = false;
    Ext.apply(this, config);


};

Ext.override(Ext.ux.util.Cookie, {

    get: function(name) {
        var c = document.cookie + ";";
        var re = /\s?(.*?)=(.*?);/g;
        var matches;
        while((matches = re.exec(c)) != null){
            if (name == matches[1]) {
                return this.decodeValue(matches[2]);
            }
        }

        return null;
    },

    set: function(name, value){
        document.cookie = name + "=" + this.encodeValue(value) +
        ((this.expires == null) ? "" : ("; expires=" + this.expires.toGMTString())) +
        ((this.path == null) ? "" : ("; path=" + this.path)) +
        ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
        ((this.secure == true) ? "; secure" : "");
    },

    clear: function(name){
        var c = name + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT";

        document.cookie = c +
        ((this.path == null) ? "" : ("; path=" + this.path)) +
        ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
        ((this.secure == true) ? "; secure" : "");

        // if path/domain/secure didn't match, force delete. more actions might be nessesary
        // @see http://stackoverflow.com/questions/2959010/how-to-get-the-domain-value-for-a-cookie-in-javascript
        if (this.get(name)) {
            document.cookie = c;
        }
    },

    encodeValue: function(value) {
        return this.encode ? Ext.encode(value) : value;
    },

    decodeValue: function(raw) {
        return this.encode ? Ext.decode(raw) : raw;
    }

});

/***/ }),
/* 944 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Ext.ux.util.urlCoder');

/**
 * native encodeURIComponent converts space into %20 -> convert to modern +
 *
 * @param string
 * @returns {string}
 */
Ext.ux.util.urlCoder.encodeURIComponent = function(string) {
    return encodeURIComponent(string).replace(/\%20/gm,"+");
};

/**
 * native encodeURI converts space into %20 -> convert to modern +
 *
 * @param string
 * @returns {string}
 */
Ext.ux.util.urlCoder.encodeURI = function(string) {
    return encodeURI(string).replace(/\%20/gm,"+");
};

/**
 * native decodeURIComponent converts can't cope with modern + for spaces
 *
 * @param string
 * @returns {string}
 */
Ext.ux.util.urlCoder.decodeURIComponent = function(string) {
    return decodeURIComponent((string+'').replace(/\+/gm,"%20"));
};

/**
 * native decodeURI converts can't cope with modern + for spaces
 *
 * @param string
 * @returns {string}
 */
Ext.ux.util.urlCoder.decodeURI = function(string) {
    return decodeURI((string+'').replace(/\+/gm,"%20"));
};

/***/ }),
/* 945 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.3.0
 * Copyright(c) 2006-2010 Ext JS, Inc.
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ns("Ext.ux");

/**
 * @class Ext.ux.FieldLabeler
 * <p>A plugin for Field Components which renders standard Ext form wrapping and labels
 * round the Field at render time regardless of the layout of the Container.</p>
 * <p>Usage:</p>
 * <pre><code>
    {
        xtype: 'combo',
        plugins: [ Ext.ux.FieldLabeler ],
        triggerAction: 'all',
        fieldLabel: 'Select type',
        store: typeStore
    }
 * </code></pre>
 */
Ext.ux.FieldLabeler = (function(){

//  Pulls a named property down from the first ancestor Container it's found in
    function getParentProperty(propName) {
        for (var p = this.ownerCt; p; p = p.ownerCt) {
            if (p[propName]) {
                return p[propName];
            }
        }
    }

    return {

//      Add behaviour at important points in the Field's lifecycle.
        init: function(f) {
//          Replace the Field's onRender method with a sequence that calls the plugin's onRender after the Field's onRender
            f.onRender = f.onRender.createSequence(this.onRender);

//          We need to completely override the onResize method because of the complexity
            f.onResize = this.onResize;

//          Replace the Field's onDestroy method with a sequence that calls the plugin's onDestroy after the Field's onRender
            f.onDestroy = f.onDestroy.createSequence(this.onDestroy);
        },

        onRender: function() {
//          Do nothing if being rendered by a form layout
            if (this.ownerCt) {
                if (this.ownerCt.layout instanceof Ext.layout.FormLayout) {
                    return;
                }
            }

            this.resizeEl = (this.wrap || this.el).wrap({
                cls: 'x-form-element',
                style: (Ext.isIE || Ext.isOpera) ? 'position:absolute;top:0;left:0;overflow:visible' : ''
            });
            this.positionEl = this.itemCt = this.resizeEl.wrap({
                cls: 'x-form-item '
            });
            if (this.nextSibling()) {
                this.margins = {
                    top: 0,
                    right: 0,
                    bottom: this.positionEl.getMargins('b'),
                    left: 0
                };
            }
            this.actionMode = 'itemCt';

//          If our Container is hiding labels, then we're done!
            if (!Ext.isDefined(this.hideLabels)) {
                this.hideLabels = getParentProperty.call(this, "hideLabels");
            }
            if (this.hideLabels) {
                this.resizeEl.setStyle('padding-left', '0px');
                return;
            }

//          Collect the info we need to render the label from our Container.
            if (!Ext.isDefined(this.labelSeparator)) {
                this.labelSeparator = getParentProperty.call(this, "labelSeparator");
            }
            if (!Ext.isDefined(this.labelPad)) {
                this.labelPad = getParentProperty.call(this, "labelPad");
            }
            if (!Ext.isDefined(this.labelAlign)) {
                this.labelAlign = getParentProperty.call(this, "labelAlign") || 'left';
            }
            this.itemCt.addClass('x-form-label-' + this.labelAlign);

            if(this.labelAlign == 'top'){
                if (!this.labelWidth) {
                    this.labelWidth = 'auto';
                }
                this.resizeEl.setStyle('padding-left', '0px');
            } else {
                if (!Ext.isDefined(this.labelWidth)) {
                    this.labelWidth = getParentProperty.call(this, "labelWidth") || 100;
                }
                this.resizeEl.setStyle('padding-left', (this.labelWidth + (this.labelPad || 5)) + 'px');
                this.labelWidth += 'px';
            }

            this.label = this.itemCt.insertFirst({
                tag: 'label',
                cls: 'x-form-item-label',
                style: {
                    width: this.labelWidth
                },
                html: this.fieldLabel + (this.labelSeparator || ':')
            });
        },

//      private
//      Ensure the input field is sized to fit in the content area of the resizeEl (to the right of its padding-left)
//      We perform all necessary sizing here. We do NOT call the current class's onResize because we need this control
//      we skip that and go up the hierarchy to Ext.form.Field
        onResize: function(w, h) {
            Ext.form.Field.prototype.onResize.apply(this, arguments);
            w -= this.resizeEl.getPadding('l');
            if (this.getTriggerWidth) {
                this.wrap.setWidth(w);
                this.el.setWidth(w - this.getTriggerWidth());
            } else {
                this.el.setWidth(w);
            }
            if (this.el.dom.tagName.toLowerCase() == 'textarea') {
                var h = this.resizeEl.getHeight(true);
                if (!this.hideLabels && (this.labelAlign == 'top')) {
                    h -= this.label.getHeight();
                }
                this.el.setHeight(h);
            }
        },

//      private
//      Ensure that we clean up on destroy.
        onDestroy: function() {
            this.itemCt.remove();
        }
    };
})();


/***/ }),
/* 946 */
/***/ (function(module, exports) {

Ext.applyIf(Array.prototype, {
    /**
     * Returns an object with ids of records to delete, to create or to update
     *
     * @param {Array} toCompare Array to compare with
     * @return object An object with sub array properties 'toDelete', 'toCreate' and 'toUpdate'
     */
    getMigration: function(toCompare) {
        return {
            toDelete: this.diff(toCompare),
            toCreate: toCompare.diff(this),
            toUpdate: this.intersect(toCompare)
        };
    },
    
    /**
     * Returns an array containing all the entries from this array that are not present in any of the other arrays.
     * 
     * @param {Array} array1
     * @param {Array} [array2]
     * @param {Array} [...]
     */
    diff: function() {
        var allItems = [],
            diffs = [];
        
        // create an array containing all items of all args
        for (var i=0; i<arguments.length; i++) {
            allItems = allItems.concat(arguments[i]);
        }
        
        // check which item is not present in all args
        Ext.each(this, function(item) {
            if (allItems.indexOf(item) < 0) {
                diffs.push(item);
            }
        }, this);
        
        
        return diffs;
    },
    
    /**
     * simple map fn
     * 
     * @param {Function} fn
     */
    map: function(fn) {
        var map = [];
        Ext.each(this, function(v, i) {
            map.push(fn.call(this, v, i));
        }, this);
        
        return map;
    },
    
    /**
     * returns an array containing all the values of this array that are present in all the arguments.
     * 
     * @param {Array} array1
     * @param {Array} [array2]
     * @param {Array} [...]
     */
    intersect: function() {
        var allItems = [],
            intersect = [];
        
        // create an array containing all items of all args
        for (var i=0; i<arguments.length; i++) {
            allItems = allItems.concat(arguments[i]);
        }
        
        // check which item is not present in all args
        Ext.each(this, function(item) {
            if (allItems.indexOf(item) >= 0) {
                intersect.push(item);
            }
        }, this);
        
        
        return intersect;
    },
    
    /**
     * Creates a copy of this Array, filtered to contain only unique values.
     * @return {Array} The new Array containing unique values.
     */
    unique: function() {
        return Ext.unique(this);
    }
});

/*
var testArr = ["green", "red", "blue", "red"],
    diff1 = testArr.diff(["green", "yellow", "red"]),
    diff2 = testArr.diff(["green"], "yellow", "red", "blue");

if (diff1.length !== 1) console.error('Failed asserting that diff contains one entry');
if (diff1[0] !== "blue") console.error('Failed asserting that diff is "blue"');
if (diff2.length !== 0) console.error('Failed asserting that diff is empty');
*/


/***/ }),
/* 947 */
/***/ (function(module, exports) {

Ext.applyIf(Date.prototype, {
    /**
     * get time part in milliseconds
     * @returns {number}
     */
    getTimePart: function() {
        return 1000 * (3600 * this.getHours() + 60 * this.getMinutes() + this.getSeconds());
    }
});

Ext.applyIf(Date, {
    /**
     * returns date of timepart (starting at begin of time)
     *
     * @returns {Date}
     */
    parseTimePart: function(timeString, format) {
        var date = Date.parseDate(timeString, format),
            today = new Date().clearTime();

        return new Date(date-today);
    }
});

/***/ }),
/* 948 */
/***/ (function(module, exports) {

Ext.ns('Ext.ux');

/**
 * logging extension (only to console atm.)
 * 
 * NOTE: we extend the console object here so the console writer preserves 
 *       line number and files in its logging output!
 *       
 * @namespace   Ext.ux.log
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Ext.ux.log = window.console || {};

Ext.apply(Ext.ux.log, {
    /**
     * @cfg {Number} prio (defaults to 7)
     */
    PRIO: 7,
    
    /**
     * possible log levels
     * @type Object
     */
    priorities: {
        EMERG:    0,  // Emergency: system is unusable
        ALERT:    1,  // Alert: action must be taken immediately
        CRIT:     2,  // Critical: critical conditions
        ERR:      3,  // Error: error conditions
        ERROR:    3,  // Error: error conditions
        WARN:     4,  // Warning: warning conditions
        NOTICE:   5,  // Notice: normal but significant condition
        INFO:     6,  // Informational: informational messages
        DEBUG:    7,   // Debug: debug messages
        TRACE:    8   // Debug: debug messages
        
    },
    
    // only console writer atm.
    prioLogFnMap : {
        EMERG:    console.error,
        ALERT:    console.error,
        CRIT:     console.error,
        ERR:      console.error,
        ERROR:    console.error,
        WARN:     console.warn,
        NOTICE:   console.info,
        INFO:     console.info,
        DEBUG:    console.log,
        TRACE:    console.log
    },
    
    /**
     * returns current logging priority
     * 
     * @return {}
     */
    getPrio: function() {
        return this.PRIO;
    },
    
    /**
     * set logging priority
     * 
     * @namespace Ext.ux.log
     * @param {Number} prio
     */
    setPrio: function(prio) {
        this.PRIO = prio;
        for (var name in this.priorities) {
            this[name] = this[name.toLowerCase()] = prio >= this.priorities[name] ? this.prioLogFnMap[name] : Ext.emptyFn;
        }
    }
});

// init Ext.ux.log
Ext.onReady(function() {
    Ext.ux.log.setPrio(Ext.LOGLEVEL);
    Ext.ux.log.debug('logger initialized');
});


/***/ }),
/* 949 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Ext
 * @subpackage  ux
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Ext.ux');

/**
 * @namespace   Ext.ux
 * @class       Ext.ux.ConnectionStatus
 * @constructor
 */
Ext.ux.ConnectionStatus = function(config) {
    Ext.apply(this, config);
    Ext.ux.ConnectionStatus.superclass.constructor.call(this);
    
};

Ext.extend(Ext.ux.ConnectionStatus, Ext.Button, {
    /**
     * @cfg {boolean} showIcon
     */
    showIcon: true,
    
    /**
     * @property {String}
     */
    status: 'unknown',
    /**
     * @private
     */
    iconCls: 'x-ux-connectionstatus-unknown',
    
    /**
     * @property {bool} Browser supports online offline detection
     */
    isSuppoeted: null,
    
    /**
     * @private
     */
    handler: function() {
        if (this.isSuppoeted){
            this.toggleStatus();
        }
    },
    
    initComponent: function() {
        Ext.ux.ConnectionStatus.superclass.initComponent.call(this);
        
        this.onlineText = '(' + i18n._('online') + ')';
        this.offlineText = '(' + i18n._('offline') + ')';
        this.unknownText = '(' + i18n._('unknown') + ')';
        
        // M$ IE has not online/offline events yet
        if (Ext.isIE6 || Ext.isIE7 || ! window.navigator || window.navigator.onLine === undefined) {
            this.setStatus('unknown');
            this.isSupported = false;
        } else {
            this.setStatus(window.navigator.onLine ? 'online' : 'offline');
            this.isSupported = true;
        }
       
        //if (Ext.isGecko3) {
            Ext.getBody().on('offline', function() {
                this.setStatus('offline', true);
            }, this);
            
            Ext.getBody().on('online', function() {
                this.setStatus('online', true);
            }, this);
        //}
    },

    /**
     * toggles online status
     */
    toggleStatus: function() {
        this.setStatus(this.status == 'online' ? 'offline' : 'online');
    },
    
    setIconClass: function(iconCls) {
        this.supr().setIconClass.call(this, this.showIcon ? iconCls : '');
    },
    
    /**
     * sets online status
     */
    setStatus: function(status) {
        switch (status) {
            case 'online':
                this.status = status;
                this.setText(this.onlineText);
                this.setIconClass('x-ux-connectionstatus-online');
                break;
            case 'offline':
                this.status = status;
                this.setText(this.offlineText);
                this.setIconClass('x-ux-connectionstatus-offline');
                break;
            case 'unknown':
                this.status = status;
                this.setText(this.unknownText);
                this.setIconClass('x-ux-connectionstatus-unknown');
                // as HTML implementation status is verry poor atm. don't bother the user with this state
                this.hide();
                break;
            default:
                console.error('no such status:"' + status + '"');
                break;
        }
    }
});


/***/ }),
/* 950 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     MIT, BSD, and GPL
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Ext.ux.direct');

/**
 * @namespace   Ext.ux.direct
 * @class       Ext.ux.direct.JsonRpcProvider
 * @extends     Ext.direct.RemotingProvider
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * Ext.Direct provider for seamless integration with JSON RPC servers
 * 
 *  Ext.Direct.addProvider(Ext.apply(Ext.app.JSONRPC_API, {
        'type'     : 'jsonrpcprovider',
        'url'      : Ext.app.JSONRPC_API
    }));
 * 
 */
Ext.ux.direct.JsonRpcProvider = Ext.extend(Ext.direct.RemotingProvider, {
    
    /**
     * @cfg {Boolean} paramsAsHash
     */
    //paramsAsHash: true,
    
    /**
     * @cfg {Boolean} useNamedParams
     */
    useNamedParams: false,
    
    // private
    initAPI : function() {
        for (var method in this.services){
            var mparts = method.split('.');
            var cls = this.namespace[mparts[0]] || (this.namespace[mparts[0]] = {});
            cls[mparts[1]] = this.createMethod(mparts[0], Ext.apply(this.services[method], {
                name: mparts[1],
                len: this.services[method].parameters.length
            }));
        }
    },
    
    // private
    doCall : function(c, m, args) {
        var promise = new Promise(function(fulfill, reject) {
            var cb = args[m.len];
            if (! Ext.isFunction(cb)) {
                cb = Ext.emptyFn;
                args.push(cb);
                args.push(window);

            }

            args[m.len] = cb.createSequence(function(result, e) {
                if (e.status == 'failure') {
                    reject(e);
                } else if (e.type == 'exception') {
                    reject (new Error(e.error));
                } else {
                    fulfill(result);
                }
            });
        });

        // support named/hashed parameters e.g. from DirectProxy
        if (args[args.length-1].paramsAsHash) {
            var o = args.shift();
            for (var i = 0; i < m.parameters.length; i++) {
                args.splice(i,0, o[m.parameters[i].name]);
            }
        }
        
        Ext.ux.direct.JsonRpcProvider.superclass.doCall.call(this, c, m, args);

        return promise;
    },
    
    // private
    getCallData: function(t){
        var method = t.action + '.' + t.method,
            m  = t.provider.services[method],
            data = t.data || [];
        
        if (this.useNamedParams) {
            var data = {};
            Ext.each(m.parameters, function(param, i) {
                data[param['name']] = t.data[i];
                
                /* NOTE: Ext.Direct and the automatically creaeted DirectFn's don't support optional params, cause 
                 * callback and scope are expected on fixed positions!
                 
                var value = typeof t.data[i] !== 'function' ? t.data[i] : undefined;
                
                if (value === undefined && ! param.optional) {
                    value = param['default'];
                }
                
                if (value !== undefined) {
                    data[param['name']] = value;
                }
                */
            }, this);
        }
        
        return {
            jsonrpc: '2.0',
            method: method,
            params: data,
            id: t.tid
        };
    },

    // private
    createMethod : function(c, m){
        var f;
        if(!m.formHandler){
            f = function(){
                return this.doCall(c, m, Array.prototype.slice.call(arguments, 0));
            }.createDelegate(this);
        }else{
            f = function(form, callback, scope){
                return this.doForm(c, m, form, callback, scope);
            }.createDelegate(this);
        }
        f.directCfg = {
            action: c,
            method: m
        };
        return f;
    },

    // private
    onData: function(opt, success, xhr) {
        var rs = [].concat(Ext.decode(xhr.responseText));
        
        xhr.responseText = [];
        Ext.each(rs, function(rpcresponse, i) {
            xhr.responseText[i] = {
                type: rpcresponse.result ? 'rpc' : 'exception',
                result: rpcresponse.result,
                tid: rpcresponse.id,
                error: rpcresponse.error
            };
            
            if (xhr.responseText[i].type === 'rpc') {
                delete xhr.responseText.error;
            }
        });
        
        return Ext.ux.direct.JsonRpcProvider.superclass.onData.apply(this, arguments);
    }
});

Ext.Direct.PROVIDERS['jsonrpcprovider'] = Ext.ux.direct.JsonRpcProvider;


/***/ }),
/* 951 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Ext.ux');

Ext.ux.DatePickerWeekPlugin = function(config) {
    Ext.apply(this, config || {});
    
};

Ext.ux.DatePickerWeekPlugin.prototype = {
    /**
     * @cfg {String} weekHeaderString
     */
    weekHeaderString: 'WK',
    
    init: function(picker) {
        picker.onRender = picker.onRender.createSequence(this.onRender, picker);
        picker.update = picker.update.createSequence(this.update, picker);
        picker.handleDateClick = picker.handleDateClick.createSequence(this.handleDateClick, picker);
        picker.showMonthPicker = picker.showMonthPicker.createInterceptor(this.inspectMonthPickerClick, picker);
        picker.weekHeaderString = this.weekHeaderString;
        
        picker.getRowEl = this.getRowEl.createDelegate(picker);
        picker.selectWeek = this.selectWeek.createDelegate(picker);
        picker.clearSelection = this.clearSelection.createDelegate(picker);
        picker.onWkCellOver = this.onWkCellOver.createDelegate(picker);
        picker.onWkCellOut = this.onWkCellOut.createDelegate(picker);
    },
    
    onRender: function() {
        var innerCal = Ext.DomQuery.selectNode('table[class=x-date-inner]', this.getEl().dom);
        var trs = Ext.DomQuery.select('tr', innerCal);
        for (var el, i=0; i<trs.length; i++) {
            el = Ext.DomHelper.insertFirst(trs[i], i==0 ? '<th class="x-date-picker-wk-hd">' + this.weekHeaderString + '</th>' : '<td class="x-date-picker-wk"><a class="x-date-date" tabindex="1" hidefocus="on" href="#"><em><span>'+ i +'</span></em></td>');
            Ext.get(el).addListener({
                scope: this,
                mouseover: this.onWkCellOver,
                mouseout: this.onWkCellOut
            });
        }
        
        // update again;
        this.update(this.value);
        
        // shit, datePicker is not on BaxComponent ;-(
        //this.picker.getEl().container.on('resize', function() {
        //    console.log(this.picker.getEl());
        //}, this);
    },
    
    onWkCellOver: function(e, t) {
        var tr = e.getTarget('tr', 10 , true);
        tr.addClass('x-date-picker-wk-wkrowover');
    },
    
    onWkCellOut: function(e, t) {
        var tr = e.getTarget('tr', 10, true);
        tr.removeClass('x-date-picker-wk-wkrowover')
    },
    
    update: function(date, forceRefresh, weekNumber){
        var firstOfMonth = date.getFirstDateOfMonth(),
            startingPos = firstOfMonth.getDay()-this.startDay;

        if(startingPos < 0){
            startingPos += 7;
        }
        
        // NOTE "+1" to ensure ISO week!
        var startDate = firstOfMonth.add(Date.DAY, -1*startingPos + 1);

        // in some rare cases render might be too slow. But luckily we can ignore this because this is also rendered on click
        if (this.rendered == false) {
            return;
        }
        
        var wkCells = Ext.DomQuery.select('td[class=x-date-picker-wk]', this.getEl().dom);
        for (var i=0, id; i<wkCells.length; i++) {
            id = Ext.id() + ':' + startDate.add(Date.DAY, i*7).format('Y-m-d');
            wkCells[i].firstChild.firstChild.innerHTML = '<span id="' + id + '">' + startDate.add(Date.DAY, i*7).getWeekOfYear() + '</span>';
        }
        
        if (weekNumber) {
            this.clearSelection();
            
            if (! Ext.isArray(weekNumber)) {
                weekNumber = [weekNumber];
            }
            
            for (var i=0, row; i<weekNumber.length; i++) {
                row = this.getRowEl(weekNumber[i]);
                this.selectWeek(row);
            }
        }
        
    },
    
    handleDateClick: function(e) {
        target = e.getTarget('td[class=x-date-picker-wk]');
        if (target) {
            var row = target.parentNode;
            var weekNumber = target.firstChild.firstChild.firstChild.innerHTML;
            
            if (Ext.DomQuery.select('td[class=x-date-prevday]', row).length > 3 ) {
                this.showPrevMonth()
            } else if (Ext.DomQuery.select('td[class=x-date-nextday]', row).length > 4) {
                this.showNextMonth()
            } 
            
            // get row again
            row = this.getRowEl(weekNumber);
            
            // set new date value
            var value = Date.parseDate(row.firstChild.firstChild.firstChild.firstChild.id.split(':')[1], 'Y-m-d');
            this.setValue(value);
            
            // set selection
            this.clearSelection();
            this.selectWeek(row);
            
            this.fireEvent("select", this, this.value, weekNumber);
        }
    },
    
    getRowEl: function(weekNumber) {
        var wktds = Ext.DomQuery.select('td[class=x-date-picker-wk]', this.getEl().dom);
        for (var i=0; i<wktds.length; i++) {
            if (wktds[i].firstChild.firstChild.firstChild.innerHTML == weekNumber) {
                var rowEl = wktds[i].parentNode;
                break;
            }
        }
        
        return rowEl;
    },
    
    clearSelection: function() {
        var innerCal = Ext.DomQuery.selectNode('table[class=x-date-inner]', this.getEl().dom);
        var dates = Ext.DomQuery.select('td', innerCal);
        for (var i=0; i<dates.length; i++) {
            Ext.fly(dates[i]).removeClass('x-date-selected');
        }
    },
    
    /**
     * inspects month picker onClick event method
     * return false to cancel original onClick handler
     */
    inspectMonthPickerClick: Ext.emptyFn,
    
    selectWeek: function(rowEl) {
        if (rowEl) {
            // set new selection
            for (var j=1; j<rowEl.childNodes.length; j++) {
                Ext.fly(rowEl.childNodes[j]).addClass('x-date-selected');
            }
        }
    }
};


/***/ }),
/* 952 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     New BSD License
 * @author      www.steinarmyhre.com
 *
 */
 
Ext.ns('Ext.ux');

/**
 * @namespace   Ext.ux
 * @class       Ext.ux.ButtonLockedToggle & Ext.ux.tbButtonLockedToggle
 * @extends     Ext.Button
 * @description
 * The normal button, when enableToggle is used and toggleGroup is set correctly, still allows the user
 * to toggle off the toggled button by pressing on it. This class overrides the toggle-method so that
 * the toggled button is impossible to 'untoggle' other than programmatically or as a reaction
 * to any of the other buttons in the group getting toggled on.
 *
 * Toggle is by the way a very strange word when you repeat it enough.
 *
 * @author www.steinarmyhre.com
 * @constructor
 * Identical to Ext.Button and/or Ext.Toolbar.Button except that enableToggle is true by default.
 * @param (Object/Array) config A config object
 */
Ext.ux.ButtonLockedToggle = Ext.extend(Ext.Button,{
    enableToggle: true,

    toggle: function(state){
        if(state === undefined && this.pressed) {
            return;
        }
        state = state === undefined ? !this.pressed : state;
        if(state != this.pressed){
            if(state){
                if (this.el) this.el.addClass("x-btn-pressed");
                this.pressed = true;
                this.fireEvent("toggle", this, true);
            }else{
                if (this.el) this.el.removeClass("x-btn-pressed");
                this.pressed = false;
                this.fireEvent("toggle", this, false);
            }
            if(this.toggleHandler){
                this.toggleHandler.call(this.scope || this, this, state);
            }
        }
    }
});

//Ext.ux.tbButtonLockedToggle = Ext.extend(Ext.Toolbar.Button, Ext.ux.ButtonLockedToggle);
Ext.reg('btnlockedtoggle', Ext.ux.ButtonLockedToggle);
Ext.reg('tbbtnlockedtoggle', Ext.ux.ButtonLockedToggle);
//Ext.reg('tbbtnlockedtoggle', Ext.ux.tbButtonLockedToggle);


/***/ }),
/* 953 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Ext
 * @subpackage  ux
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/**
 * increase depth of cell selector depth for event delegation (defaults to 4) 
 */
if (Ext.grid.GridView.prototype.cellSelectorDepth < 6) {
    Ext.grid.GridView.prototype.cellSelectorDepth = 6;
}

Ext.ns('Ext.ux');

/**
 * Percentage select combo box
 * 
 * @namespace   Ext.ux
 * @class       Ext.ux.PercentCombo
 * @extends     Ext.form.ComboBox
 */
Ext.ux.PercentCombo = Ext.extend(Ext.form.ComboBox, {
    /**
     * @cfg {bool} autoExpand Autoexpand comboBox on focus.
     */
    autoExpand: false,
    /**
     * @cfg {bool} blurOnSelect blurs combobox when item gets selected
     */
    blurOnSelect: false,
    
    displayField: 'value',
    valueField: 'key',
    mode: 'local',
    triggerAction: 'all',
    emptyText: 'percent ...',
    lazyInit: false,
    forceSelection: true,
    itemSelector: 'div.search-item',
    
    //private
    initComponent: function(){
        Ext.ux.PercentCombo.superclass.initComponent.call(this);
        // allways set a default
        if(!this.value) {
            this.value = 0;
        }
        
        this.initTemplate();

        this.store = new Ext.data.SimpleStore({
            fields: ['key','value'],
            data: [
                    ['0',    '0%'],
                    ['10',  '10%'],
                    ['20',  '20%'],
                    ['30',  '30%'],
                    ['40',  '40%'],
                    ['50',  '50%'],
                    ['60',  '60%'],
                    ['70',  '70%'],
                    ['80',  '80%'],
                    ['90',  '90%'],
                    ['100','100%']
                ]
        });
        
        if (this.autoExpand) {
            this.lazyInit = false;
            this.on('focus', function(){
                this.selectByValue(this.getValue());
                this.onTriggerClick();
            });
        }
        
        if (this.blurOnSelect){
            this.on('select', function(){
                this.fireEvent('blur', this);
            }, this);
        }
    },
    
    setValue: function(value) {
        value = value ? value : 0;
        Ext.ux.PercentCombo.superclass.setValue.call(this, value);
    },
    
    /**
     * init template
     * @private
     */
    initTemplate: function() {
        if (! this.tpl) {
            this.tpl = new Ext.XTemplate(
                '<tpl for=".">',
                    '<div class="search-item">',
                        '<div class="x-progress-wrap PercentRenderer">',
                            '<div class="x-progress-inner PercentRenderer">',
                                '<div class="x-progress-bar PercentRenderer {[this.getColorClass(values)]}" style="width:{[this.getValue(values)]}%">',
                                    '<div class="PercentRendererText PercentRenderer">',
                                        '<div>{[this.getValue(values)]}%</div>',
                                    '</div>',
                                '</div>',
                            '</div>',
                        '</div>',
                    '</div>',
                '</tpl>',
                {
                    getValue: function(values) {
                        return values.key;
                    },
                    
                    getColorClass: function(values) {
                        return 'PercentRenderer-progress-bar' + values.key;
                    }
                }
            );
        }
    }
});
Ext.reg('extuxpercentcombo', Ext.ux.PercentCombo);

/**
 * Renders a percentage value to a percentage bar
 * @constructor
 */
Ext.ux.PercentRenderer = function(percent) {
    if (! Ext.ux.PercentRenderer.template) {
        Ext.ux.PercentRenderer.template = new Ext.XTemplate(
            '<div class="x-progress-wrap PercentRenderer">',
            '<div class="x-progress-inner PercentRenderer">',
                '<div class="x-progress-bar PercentRenderer {colorclass}" style="width:{percent}%">',
                    '<div class="PercentRendererText PercentRenderer">',
                        '<div>{percent}%</div>',
                    '</div>',
                '</div>',
                '<div class="x-progress-text x-progress-text-back PercentRenderer">',
                    '<div>&#160;</div>',
                '</div>',
            '</div>',
        '</div>'
        ).compile();
    }
    // this will enable a color scheme for each percentage on the progress bar
    var colorClass = "PercentRenderer-progress-bar"; 
    colorClass += Math.round(percent/10)+"0";

    return Ext.ux.PercentRenderer.template.apply({percent: percent, colorclass: colorClass});
};

/**
 * Renders a percentage value to a percentage bar / uploadrow
 * @constructor
 */
Ext.ux.PercentRendererWithName = function(value, metadata, record) {
  
    var metaStyle = '';
    
    if(record.fileRecord) {
        record = record.fileRecord;
    }
    
    if(record.get('type') == 'folder') {
        metadata.css = 'x-tinebase-typefolder';
    }
    else {

        var contenttype =  record.get('contenttype');
        if(contenttype) {
            var iconClass = contenttype.replace("/", "-");
            metadata.css = iconClass + '_16x16 ';
        }
               
        metadata.css += 'standardFileClass_16x16';
    }
    
    
    if (!Tine.Tinebase.uploadManager.isHtml5ChunkedUpload()) {

        var fileName = value;
        if (typeof value == 'object') {
            fileName = value.name;
        } 
    
        if(record.get('status') == 'uploading') {
            metadata.css = 'x-tinebase-uploadrow';
        }
        
        return Ext.util.Format.htmlEncode(fileName);
    }
    
    if (! Ext.ux.PercentRendererWithName.template) {
        Ext.ux.PercentRendererWithName.template = new Ext.XTemplate(
            '<div class="x-progress-wrap PercentRenderer" style="{display}">',
            '<div class="x-progress-inner PercentRenderer">',
                '<div class="x-progress-bar PercentRenderer" style="width:{percent}%;{additionalStyle}">',
                    '<div class="PercentRendererText PercentRenderer">',
                         '{fileName}',
                    '</div>',
                '</div>',
                '<div class="x-progress-text x-progress-text-back PercentRenderer">',
                    '<div>&#160;</div>',
                '</div>',
            '</div>',
        '</div>'
        ).compile();
    }
    
    if(value == undefined) {
        return '';
    }              
    
    var fileName = value;

    if (typeof value == 'object') {
        fileName = value.name;
    }
    fileName = Ext.util.Format.htmlEncode(fileName);
    var percent = record.get('progress');

    var additionalStyle = '';
    if(record.get('status') == 'paused' && percent < 100) {
        fileName = i18n._('(paused)') + '&#160;&#160;' + fileName;
        additionalStyle = 'background-image: url(\'styles/images/tine20/progress/progress-bg-y.gif\') !important;';
    }

    var display = 'width:0px';
    if(percent > -1 && percent < 100) {
        display = '';
        var renderedField = Ext.ux.PercentRendererWithName.template.apply({percent: percent, display: display, fileName: fileName
            , additionalStyle: additionalStyle}) ;
        return renderedField;
    }
    else {
        return fileName;
    }
    

};


/***/ }),
/* 954 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2012-2017 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.namespace('Tine.Tinebase');

__webpack_require__(182);
__webpack_require__(58);
__webpack_require__(59);
__webpack_require__(183);
__webpack_require__(184);
__webpack_require__(185);
__webpack_require__(186);
__webpack_require__(187);
__webpack_require__(188);
__webpack_require__(189);
__webpack_require__(190);

/**
 * Tinebase Application Starter
 * 
 * @namespace   Tine.Tinebase
 * @function    Tine.Tinebase.ApplicationStarter
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 */
Tine.Tinebase.ApplicationStarter = {
    
    /**
     * the applictions the user has access to
     * @type
     */
    userApplications: null,
    
    /**
     * type mapping
     * @type {Object}
     */
    types: {
        'date':     'date',
        'datetime': 'date',
        'time':     'date',
        'string':   'string',
        'text':     'string',
        'boolean':  'bool',
        'integer':  'int',
        'float':    'float'
    },
    
    /**
     * initializes the starter
     */
    init: function() {
        // Wait until appmgr is initialized
        if (! Tine.Tinebase.hasOwnProperty('appMgr')) {
            this.init.defer(100, this);
            return;
        }
        
        Tine.log.info('ApplicationStarter::init');
        
        if (! this.userApplications || this.userApplications.length == 0) {
            this.userApplications = Tine.Tinebase.registry.get('userApplications');
            this.createStructure(true);
        }
    },
    
    /**
     * returns the field
     * 
     * @param {Object} fieldDefinition
     * @return {Object}
     */
    getField: function(fieldDefinition, key) {
        // default type is auto
        var field = {
            name: key,
            fieldDefinition: fieldDefinition
        };
        
        if (fieldDefinition.type) {
            // add pre defined type
            field.type = this.types[fieldDefinition.type];
            switch (fieldDefinition.type) {
                case 'datetime':
                    field.dateFormat = Date.patterns.ISO8601Long;
                    break;
                case 'date':
                    field.dateFormat = Date.patterns.ISO8601Long;
                    break;
                case 'time':
                    field.dateFormat = Date.patterns.ISO8601Time;
                    break;
                case 'record':
                case 'records':
                    fieldDefinition.config.modelName = fieldDefinition.config.modelName.replace(/_/, '');
                    field.type = fieldDefinition.config.appName + '.' + fieldDefinition.config.modelName;
                    field.getRecordClass = function() {
                        return Tine.Tinebase.data.RecordMgr.get(field.type);
                    }
                    break;
            }
            // allow overwriting date pattern in model
            if (fieldDefinition.hasOwnProperty('dateFormat')) {
                field.dateFormat = fieldDefinition.dateFormat;
            }
            
            if (fieldDefinition.hasOwnProperty('label')) {
                field.label = fieldDefinition.label;
            }
        }
        
        // TODO: create field registry, add fields here
        return field;
    },
    /**
     * returns the grid renderer
     * @param {Object} config
     * @param {String} field
     * @return {Function}
     */
    getGridRenderer: function(config, field, appName, modelName) {
        var gridRenderer = null;
        if (config && field) {
            switch (config.type) {
                case 'record':
                    if (Tine.Tinebase.common.hasRight('view', config.config.appName, config.config.modelName.toLowerCase())) {
                        if (config.config.appName == appName && config.config.modelName == modelName) {
                            // pointing to same model
                            gridRenderer = function (value, row, record) {
                                var title = value && config.config.titleProperty ? value[config.config.titleProperty] : '';
                                return Ext.util.Format.htmlEncode(title);
                            };
                        } else {
                            gridRenderer = function (value, row, record) {
                                var foreignRecordClass = Tine[config.config.appName].Model[config.config.modelName];
                                if (foreignRecordClass) {
                                    var titleProperty = foreignRecordClass.getMeta('titleProperty');
                                    return record && record.get(field) ? Ext.util.Format.htmlEncode(record.get(field)[titleProperty]) : '';
                                } else {
                                    return value;
                                }
                            };
                        }
                    } else {
                        gridRenderer = null;
                    }
                    break;
                case 'integer':
                case 'float':
                    if (config.hasOwnProperty('specialType')) {
                        switch (config.specialType) {
                            case 'bytes1000':
                                gridRenderer = function(value, cell, record) {
                                    return Tine.Tinebase.common.byteRenderer(value, cell, record, 2, true);
                                };
                                break;
                            case 'bytes':
                                gridRenderer = function(value, cell, record) {
                                    return Tine.Tinebase.common.byteRenderer(value, cell, record, 2, false);
                                };
                                break;
                            case 'minutes':
                                gridRenderer = Tine.Tinebase.common.minutesRenderer;
                                break;
                            case 'seconds':
                                gridRenderer = Tine.Tinebase.common.secondsRenderer;
                                break;
                            case 'percent':
                                gridRenderer = function(value, cell, record) {
                                    return Tine.Tinebase.common.percentRenderer(value, config.type);
                                };
                                break;
                            default:
                                gridRenderer = Ext.util.Format.htmlEncode;
                        }
                    }
                    break;
                case 'user':
                    gridRenderer = Tine.Tinebase.common.usernameRenderer;
                    break;
                case 'keyfield': 
                    gridRenderer = Tine.Tinebase.widgets.keyfield.Renderer.get(appName, config.name);
                    break;
                case 'date':
                    gridRenderer = Tine.Tinebase.common.dateRenderer;
                    break;
                case 'datetime':
                    gridRenderer = Tine.Tinebase.common.dateTimeRenderer;
                    break;
                case 'time':
                    gridRenderer = Tine.Tinebase.common.timeRenderer;
                    break;
                case 'tag':
                    gridRenderer = Tine.Tinebase.common.tagsRenderer;
                    break;
                case 'container':
                    gridRenderer = Tine.Tinebase.common.containerRenderer;
                    break;
                case 'boolean':
                    gridRenderer = Tine.Tinebase.common.booleanRenderer;
                    break;
                case 'money':
                    gridRenderer = Ext.util.Format.money;
                    break;
                case 'attachments':
                    gridRenderer = Tine.widgets.grid.attachmentRenderer;
                    break;
                case 'image':
                    gridRenderer = Tine.widgets.grid.imageRenderer;
                    break;
                case 'relation':
                    var cc = config.config;
                    
                    if (cc && cc.type && cc.appName && cc.modelName) {
                        gridRenderer = new Tine.widgets.relation.GridRenderer({
                            appName: appName,
                            type: cc.type,
                            foreignApp: cc.appName,
                            foreignModel: cc.modelName
                        });
                        break; 
                    }
                default:
                    gridRenderer = Ext.util.Format.htmlEncode;
            }
        }
        return gridRenderer;
    },

    /**
     * used in getFilter for mapping types to filter
     * 
     * @type 
     */
    filterMap: function(type, fieldconfig, filter, filterconfig, appName, modelName, modelConfig) {
        switch (type) {
            case 'string':
            case 'text':
                break;
            case 'attachments':
                filter.label = window.i18n._('Attachment');
            case 'fulltext':
                filter.valueType = 'fulltext';
                break;
            case 'user':
                filter.valueType = 'user';
                break;
            case 'boolean': 
                filter.valueType = 'bool';
                filter.defaultValue = false;
                break;
            case 'record':
                filterconfig.options.modelName = filterconfig.options.modelName.replace(/_/, '');
                var foreignApp = filterconfig.options.appName;
                var foreignModel = filterconfig.options.modelName;
                
                // create generic foreign id filter
                var filterclass = Ext.extend(Tine.widgets.grid.ForeignRecordFilter, {
                    foreignRecordClass: foreignApp + '.' + foreignModel,
                    linkType: 'foreignId',
                    ownField: fieldconfig.key,
                    label: filter.label
                });
                // register foreign id field as appName.modelName.fieldKey
                var fc = appName + '.' + modelName + '.' + fieldconfig.key;
                Tine.widgets.grid.FilterToolbar.FILTERS[fc] = filterclass;
                filter = {filtertype: fc};
                break;
            case 'tag': 
                filter = {filtertype: 'tinebase.tag', app: appName};
                break;
            case 'container':
                var applicationName = filterconfig.appName ? filterconfig.appName : appName;
                var modelName = filterconfig.modelName ? filterconfig.modelName : modelName;
                filter = {
                    filtertype: 'tine.widget.container.filtermodel', 
                    app: applicationName, 
                    recordClass: applicationName + '.' + modelName,
                    field: fieldconfig.key,
                    label: fieldconfig.label,
                    callingApp: appName
                };
                break;
            case 'keyfield':
                filter.filtertype = 'tine.widget.keyfield.filter';
                filter.app = {name: appName};
                filter.keyfieldName = fieldconfig.name;
                break;
            case 'date':
                filter.valueType = 'date';
                break;
            case 'datetime':
                filter.valueType = 'date';
                break;
            case 'float':
            case 'integer':
            case 'money':
                filter.valueType = 'number';
        }
        return filter;
    },
    
    /**
     * returns filter
     * 
     * @param {String} fieldKey
     * @param {Object} filterconfig
     * @param {Object} fieldconfig
     * @return {Object}
     */
    getFilter: function(fieldKey, filterconfig, modelConfig) {
        // take field label if no filterlabel is defined
        // TODO Refactor: tag and tags see ticket 0008944
        // TODO Remove this ugly hack!
        if (fieldKey == 'tag') {
            fieldKey = 'tags';
        }
        var fieldconfig = modelConfig.fields[fieldKey];

        if (fieldconfig && fieldconfig.type === 'virtual') {
            fieldconfig = fieldconfig.config;
        }

        var appName = modelConfig.appName;
        var modelName = modelConfig.modelName;
        
        var app = Tine.Tinebase.appMgr.get(appName);
        if (! app) {
            Tine.log.error('Application ' + appName + ' not found!');
            return null;
        }
        
        // check right on foreign app
        if (fieldconfig && (fieldconfig.type == 'record' || fieldconfig.type == 'records')) {
            var opt = fieldconfig.config;
            
            if (opt && (! opt.doNotCheckModuleRight) && (! Tine.Tinebase.common.hasRight('view', opt.appName, opt.modelName.toLowerCase()))) {
                return null;
            }
        }
        
        var fieldTypeKey = (fieldconfig && fieldconfig.type) ? fieldconfig.type : (filterconfig && filterconfig.type) ? filterconfig.type : 'default',
            label = (filterconfig && filterconfig.hasOwnProperty('label')) ? filterconfig.label : (fieldconfig && fieldconfig.hasOwnProperty('label')) ? fieldconfig.label : null,
            globalI18n = ((filterconfig && filterconfig.hasOwnProperty('useGlobalTranslation')) || (fieldconfig && fieldconfig.hasOwnProperty('useGlobalTranslation')));
        
        if (! label) {
            return null;
        }
        // prepare filter
        var filter = {
            label: globalI18n ? i18n._(label) : app.i18n._(label),
            field: fieldKey
        };
        
        if (filterconfig) {
            if (filterconfig.hasOwnProperty('options') && (filterconfig.options.hasOwnProperty('jsFilterType') || filterconfig.options.hasOwnProperty('jsFilterValueType'))) {
                Tine.log.error('jsFilterType and jsFilterValueType are deprecated. Use jsConfig.<property> instead.');
            }
            // if js filter is defined in filterconfig.options, take this and return
            if (filterconfig.hasOwnProperty('jsConfig')) {
                Ext.apply(filter, filterconfig.jsConfig);
                return filter;
            } 
            
            try {
                filter = this.filterMap(fieldTypeKey, fieldconfig, filter, filterconfig, appName, modelName, modelConfig);
            } catch (e) {
                var keys = filterconfig.filter.split('_'),
                    filterkey = keys[0].toLowerCase() + '.' + keys[2].toLowerCase();
                    filterkey = filterkey.replace(/filter/g, '');
    
                if (Tine.widgets.grid.FilterToolbar.FILTERS[filterkey]) {
                    filter = {filtertype: filterkey};
                } else { // set to null if no filter could be found
                    filter = null;
                }
            }
        }

        return filter;
    },
    
    /**
     * if application starter should be used, here the js contents are (pre-)created
     */
    createStructure: function(initial) {
        var start = new Date();
        Ext.each(this.userApplications, function(app) {
            
            var appName = app.name;
            Tine.log.info('ApplicationStarter::createStructure for app ' + appName);
            Ext.namespace('Tine.' + appName);
            
            var models = Tine[appName].registry ? Tine[appName].registry.get('models') : null;
            
            if (models) {
                
                Tine[appName].isAuto = true;
                var contentTypes = [];
                
                // create translation
                Tine[appName].i18n = new Locale.Gettext();
                Tine[appName].i18n.textdomain(appName);
                
                // iterate models of this app
                Ext.iterate(models, function(modelName, modelConfig) {
                    // create main screen
                    if (! Tine[appName].hasOwnProperty('MainScreen')) {
                        Tine[appName].MainScreen = Ext.extend(Tine.widgets.MainScreen, {
                            app: appName,
                            contentTypes: contentTypes,
                            activeContentType: modelConfig.createModule ? modelName : null
                        });
                    }

                    var containerProperty = modelConfig.hasOwnProperty('containerProperty') ? modelConfig.containerProperty : null;
                    
                    modelName = modelName.replace(/_/, '');
                    
                    Ext.namespace('Tine.' + appName, 'Tine.' + appName + '.Model');
                    
                    var modelArrayName = modelName + 'Array',
                        modelArray = [];
                    
                    Tine.log.info('ApplicationStarter::createStructure for model ' + modelName);
                    
                    if (modelConfig.createModule) {
                        contentTypes.push(modelConfig);
                    }
                    
                    // iterate record fields
                    Ext.each(modelConfig.fieldKeys, function(key) {
                        var fieldDefinition = modelConfig.fields[key];

                        if (fieldDefinition.type === 'virtual') {
                            fieldDefinition = fieldDefinition.config;
                        }

                        // add field to model array
                        modelArray.push(this.getField(fieldDefinition, key));

                        if (fieldDefinition.label) {
                            // register grid renderer
                            if (initial) {
                                var renderer = null;
                                try {
                                    renderer = this.getGridRenderer(fieldDefinition, key, appName, modelName);
                                } catch (e) {
                                    Tine.log.err(e);
                                    renderer = null;
                                }
                                
                                if (Ext.isFunction(renderer)) {
                                    if (! Tine.widgets.grid.RendererManager.has(appName, modelName, key)) {
                                        Tine.widgets.grid.RendererManager.register(appName, modelName, key, renderer);
                                    }
                                } else if (Ext.isObject(renderer)) {
                                    if (! Tine.widgets.grid.RendererManager.has(appName, modelName, key)) {
                                        Tine.widgets.grid.RendererManager.register(appName, modelName, key, renderer.render, null, renderer);
                                    }
                                }
                            }
                        }
                        
                    }, this);
                    
                    // iterate virtual record fields
                    if (modelConfig.virtualFields && modelConfig.virtualFields.length) {
                        Ext.each(modelConfig.virtualFields, function(field) {
                            modelArray.push(this.getField(field, field.key));
                        }, this);
                    }
                    
                    // collect the filterModel
                    var filterModel = [];
                    Ext.iterate(modelConfig.filterModel, function(key, filter) {
                        var f = this.getFilter(key, filter, modelConfig);
                        
                        if (f) {
                            Tine.widgets.grid.FilterRegistry.register(appName, modelName, f);
                        }
                    }, this);
                    
                    // TODO: registry loses info if gridpanel resides in an editDialog
                    // delete filterModel as all filters are in the filter registry now
                    // delete modelConfig.filterModel;
                    
                    Tine[appName].Model[modelArrayName] = modelArray;
                    
                    // create model
                    if (! Tine[appName].Model.hasOwnProperty(modelName)) {
                        Tine[appName].Model[modelName] = Tine.Tinebase.data.Record.create(Tine[appName].Model[modelArrayName], 
                            Ext.copyTo({modelConfiguration: modelConfig}, modelConfig,
                               'idProperty,defaultFilter,appName,modelName,recordName,recordsName,titleProperty,containerProperty,containerName,containersName,group,copyOmitFields')
                        );
                        Tine[appName].Model[modelName].getFilterModel = function() {
                            return filterModel;
                        }
                    }
                    
                    Ext.namespace('Tine.' + appName);
                    
                    // create recordProxy
                    var recordProxyName = modelName.toLowerCase() + 'Backend';
                    if (! Tine[appName].hasOwnProperty(recordProxyName)) {
                        Tine[appName][recordProxyName] = new Tine.Tinebase.data.RecordProxy({
                            appName: appName,
                            modelName: modelName,
                            recordClass: Tine[appName].Model[modelName]
                        });
                    }
                    // if default data is empty, it will be resolved to an array
                    if (Ext.isArray(modelConfig.defaultData)) {
                        modelConfig.defaultData = {};
                    }
                    
                    // overwrite function
                    Tine[appName].Model[modelName].getDefaultData = function() {
                        if (! dd) {
                            var dd = Ext.decode(Ext.encode(modelConfig.defaultData));
                        }
                        
                        // find container by selection or use defaultContainer by registry
                        if (modelConfig.containerProperty) {
                            if (! dd.hasOwnProperty(modelConfig.containerProperty)) {
                                var app = Tine.Tinebase.appMgr.get(appName),
                                    registry = app.getRegistry(),
                                    ctp = app.getMainScreen().getWestPanel().getContainerTreePanel();
                                    
                                var container = (ctp && Ext.isFunction(ctp.getDefaultContainer) ? ctp.getDefaultContainer() : null)
                                    || (registry ? registry.get("default" + modelName + "Container") : null);
                                
                                if (container) {
                                    dd[modelConfig.containerProperty] = container;
                                }
                            }
                        }
                        return dd;
                    };

                    // create filter panel
                    var filterPanelName = modelName + 'FilterPanel';
                    if (! Tine[appName].hasOwnProperty(filterPanelName)) {
                        Tine[appName][filterPanelName] = function(c) {
                            Ext.apply(this, c);
                            Tine[appName][filterPanelName].superclass.constructor.call(this);
                        };
                        Ext.extend(Tine[appName][filterPanelName], Tine.widgets.persistentfilter.PickerPanel);
                    }
                    // create container tree panel, if needed
                    if (containerProperty) {
                        var containerTreePanelName = modelName + 'TreePanel';
                        if (! Tine[appName].hasOwnProperty(containerTreePanelName)) {
                            Tine[appName][containerTreePanelName] = Ext.extend(Tine.widgets.container.TreePanel, {
                                filterMode: 'filterToolbar',
                                recordClass: Tine[appName].Model[modelName]
                            });
                        }
                    }
                    
                    // create editDialog openWindow function only if edit dialog exists
                    var editDialogName = modelName + 'EditDialog';
                    if (! Tine[appName].hasOwnProperty(editDialogName)) {
                        Tine[appName][editDialogName] = Ext.extend(Tine.widgets.dialog.EditDialog, {
                            displayNotes: Tine[appName].Model[modelName].hasField('notes')
                        });
                    }

                    
                    if (Tine[appName].hasOwnProperty(editDialogName)) {
                        var edp = Tine[appName][editDialogName].prototype;
                        if (containerProperty && edp.showContainerSelector !== false) {
                            edp.showContainerSelector = true;
                        }
                        Ext.apply(edp, {
                            modelConfig:      Ext.encode(modelConfig),
                            modelName:        modelName,
                            recordClass:      Tine[appName].Model[modelName],
                            recordProxy:      Tine[appName][recordProxyName],
                            appName:          appName,
                            windowNamePrefix: modelName + 'EditWindow_'
                        });
                        if (! Ext.isFunction(Tine[appName][editDialogName].openWindow)) {
                            Tine[appName][editDialogName].openWindow  = function (cfg) {
                                var id = cfg.recordId ? cfg.recordId : ( (cfg.record && cfg.record.id) ? cfg.record.id : 0 );
                                var window = Tine.WindowFactory.getWindow({
                                    width: edp.windowWidth ? edp.windowWidth : 600,
                                    height: edp.windowHeight ? edp.windowHeight : 230,
                                    name: edp.windowNamePrefix + id,
                                    contentPanelConstructor: 'Tine.' + appName + '.' + editDialogName,
                                    contentPanelConstructorConfig: cfg
                                });
                                return window;
                            };
                        }
                    }
                    // create Gridpanel
                    var gridPanelName = modelName + 'GridPanel', 
                        gpConfig = {
                            modelConfig: modelConfig,
                            app: Tine.Tinebase.appMgr.get(appName),
                            recordProxy: Tine[appName][recordProxyName],
                            recordClass: Tine[appName].Model[modelName]
                        };
                        
                    if (! Tine[appName].hasOwnProperty(gridPanelName)) {
                        Tine[appName][gridPanelName] = Ext.extend(Tine.widgets.grid.GridPanel, gpConfig);
                    } else {
                        Ext.apply(Tine[appName][gridPanelName].prototype, gpConfig);
                    }

                    if (! Tine[appName][gridPanelName].prototype.detailsPanel) {
                        Tine[appName][gridPanelName].prototype.detailsPanel = {
                            xtype: 'widget-detailspanel',
                            recordClass: Tine[appName].Model[modelName]
                        }
                    }
                    // add model to global add splitbutton if set
                    if (modelConfig.hasOwnProperty('splitButton') && modelConfig.splitButton == true) {
                        var iconCls = appName + modelName;
                        if (! Ext.util.CSS.getRule('.' + iconCls)) {
                            iconCls = 'ApplicationIconCls';
                        }
                        Ext.ux.ItemRegistry.registerItem('Tine.widgets.grid.GridPanel.addButton', {
                            text: Tine[appName].i18n._('New ' + modelName), 
                            iconCls: iconCls,
                            scope: Tine.Tinebase.appMgr.get(appName),
                            handler: (function() {
                                var ms = this.getMainScreen(),
                                    cp = ms.getCenterPanel(modelName);
                                    
                                cp.onEditInNewWindow.call(cp, {});
                            }).createDelegate(Tine.Tinebase.appMgr.get(appName))
                        });
                    }
                    
                }, this);
            }
        }, this);
        
        var stop = new Date();
    }
}


/***/ }),
/* 955 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux');

/**
 * Class for handling of native browser popup window.
 * <p>This class is intended to make the usage of a native popup window as easy as dealing with a modal window.<p>
 * <p>Example usage:</p>
 * <pre><code>
 var win = new Ext.ux.PopupWindow({
     name: 'TasksEditWindow',
     width: 700,
     height: 300,
     url:index.php?method=Tasks.editTask&taskId=5
 });
 * </code></pre>
 * 
 * @namespace   Ext.ux
 * @class       Ext.ux.PopupWindow
 * @extends     Ext.Component
 */
Ext.ux.PopupWindow = function(config) {
    Ext.apply(this, config);
    this.contentPanelConstructorConfig = this.contentPanelConstructorConfig || {};

    this.addEvents({
        /**
         * @event beforecolse
         * @desc Fires before the Window is closed. A handler can return false to cancel the close.
         * @param {Ext.ux.PopupWindow}
         */
        "beforeclose" : true,
        /**
         * @event render
         * @desc  Fires after the viewport in the popup window is rendered
         * @param {Ext.ux.PopupWindow}
         */
        "render" : true,
        /**
         * @event close
         * @desc  Fired, when the window got closed
         */
        "close" : true
    });

    Ext.ux.PopupWindow.superclass.constructor.call(this);
};

Ext.extend(Ext.ux.PopupWindow, Ext.Component, {
    /**
     * @cfg    {String}
     * @param  {String} url
     * @desc   url to open
     */
    url: null,
    /**
     * @cfg {String} internal name of new window
     */
    name: 'new window',
    /**
     * @cfg {Int} width of new window
     */
    width: 500,
    /**
     * @cfg {Int} height of new window
     */
    height: 500,
    /**
     * @cfg {Bolean}
     */
    modal: false,
    /**
     * @cfg {String}
     */
    layout: 'fit',
    /**
     * @cfg {String}
     */
    title: null,
    /**
     * @cfg {String} Name of a constructor to create item property
     */
    contentPanelConstructor: null,
    /**
     * @cfg {Object} Config object to pass to itemContructor
     */
    contentPanelConstructorConfig: null,
    /**
     * @property {Browser Window}
     */
    popup: null,
    /**
     * @property {Ext.ux.PopupWindowMgr}
     */
    windowManager: null,

    renderTo: 'useRenderFn',

    /**
     * @private
     */
    initComponent: function(){
        if (! this.title) {
            this.title = Tine.title;
        }
        
        this.windowManager = Ext.ux.PopupWindowMgr;

        this.stateful = true;
        this.stateId = 'ux.popupwindow-' + this.contentPanelConstructor;
        this.on('resize', this.saveState, this, {delay:100});

        // M$ IE has its internal location bar in the viewport
        if (Ext.isIE) {
            this.height += 20;
        }

        // chrome counts window decoration and location bar to window height
        if (Ext.isChrome) {
            this.height += 40;
        }

        Ext.ux.PopupWindow.superclass.initComponent.call(this);

        //limit the window size
        this.width = Math.min(screen.availWidth, this.width);
        this.height = Math.min(screen.availHeight, this.height);
    },

    render: function() {
        // open popup window first to save time
        if (! this.popup) {
            this.popup = this.openWindow(this.name, this.url, this.width, this.height);
        }

        //. register window ( in fact register complete PopupWindow )
        this.windowManager.register(this);

        // does not work on reload!
        //this.popup.PopupWindow = this;

        // strange problems in FF
        //this.injectFramework(this.popup);

        // NOTE: Do not register unregister with this events,
        //       as it would be broken on window reloads!
        /*
         if (this.popup.addEventListener) {
         this.popup.addEventListener('load', this.onLoad, true);
         this.popup.addEventListener('unload', this.onClose, true);
         } else if (this.popup.attachEvent) {
         this.popup.attachEvent('onload', this.onLoad);
         this.popup.attachEvent('onunload', this.onClose);
         } else {
         this.popup.onload = this.onLoad;
         this.popup.onunload = this.onClose;
         }
         */
    },

    /**
     * Open browsers native popup
     *
     * @param {string}     windowName
     * @param {string}     url
     * @param width
     * @param height
     */
    openWindow: function (windowName, url, width, height) {
        var dualScreenLeft,
            dualScreenTop,
            w,
            h,
            left,
            top,
            popup;

        windowName = Ext.isString(windowName) ? windowName.replace(/[^a-zA-Z0-9_]/g, '') : windowName;

        // thanks to http://www.nigraphic.com/blog/java-script/how-open-new-window-popup-center-screen

        // Determine offsets in case of dualscreen
        dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
        dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;

        // Window should be opened on mid of tine window
        w = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
        h = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;

        // Determine correct left and top values including dual screen setup
        left = ((w / 2) - (width / 2)) + dualScreenLeft;
        top = ((h / 2) - (height / 2)) + dualScreenTop;

        try {
            popup = window.open(url, windowName, 'width=' + width + ',height=' + height + ',top=' + top + ',left=' + left +
                ',directories=no,toolbar=no,location=no,menubar=no,scrollbars=no,status=no,resizable=yes,dependent=no');
        }
        catch(e) {
            Tine.log.info('window.open Exception: ');
            Tine.log.info(e);

            popup = null;

        }

        if (! popup) {
            var openCode = "window.open('http://127.0.0.1/tine20/tine20/" + url + "','" + windowName + "','width=" + width + ",height=" + height + ",top=" + top + ",left=" + left +
                ",directories=no,toolbar=no,location=no,menubar=no,scrollbars=no,status=no,resizable=yes,dependent=no')";

            var exception = {
                openCode: openCode,
                popup: null
            };

            Tine.log.error('could not open popup window. openCode: ' + openCode);
            throw exception;
        }

        return popup;

    },

    getState : function() {
        return {
            width: this.popup.innerWidth,
            height: this.popup.innerHeight
        };
    },

    // state might have tiny window (e.g. because of small beamer attached)
    // -> only apply bigger states
    applyState : function(state){
        if(state){
            state.width = Math.max(state.width, this.width);
            state.height = Math.max(state.height, this.height);
        }

        Ext.ux.PopupWindow.superclass.applyState.call(this, state);
    },

    /**
     * rename window name
     * 
     * @param {String} new name
     */
    rename: function(newName) {
        this.windowManager.unregister(this);
        this.name = this.popup.name = newName;
        this.windowManager.register(this);
    },
    
    /**
     * Sets the title text for the panel and optionally the icon class.
     * 
     * @param {String} title The title text to set
     * @param {String} iconCls (optional) iconCls A user-defined CSS class that provides the icon image for this panel
     */
    setTitle: function(title, iconCls) {
        if (this.popup && this.popup.document) {
            this.popup.document.title = Ext.util.Format.stripTags(title);
        }
    },
    
    /**
     * Closes the window, removes it from the DOM and destroys the window object. 
     * The beforeclose event is fired before the close happens and will cancel 
     * the close action if it returns false.
     */
    close: function() {
        if(this.fireEvent("beforeclose", this) !== false){
            this.fireEvent('close', this);

            var popup = this.popup;

            this.destroy();

            if (this.navigateBackOnClose) {
                popup.history.back();
            } else {
                Ext.ux.PopupWindow.close(popup);
            }
        }
    },
    
    /**
     * @private
     * 
     * called after this.popups native onLoad
     * note: 'this' references the popup, whereas window references the parent
     */
    onLoad: function() {
        this.Ext.onReady(function() {
            this.navigateBackOnClose = this.popup.history.length > 1;
            //console.log(this);
            //console.log(window);
        }, this);
    },
    
    /**
     * @private
     * 
     * note: 'this' references the popup, whereas window references the parent
     */
    onClose: function() {

    },
    
    /**
     * @private
     */
    destroy: function() {
        Ext.ux.PopupWindow.superclass.destroy.call(this);
        
        this.purgeListeners();
        this.windowManager.unregister(this);

        this.popup = null;
    }
});

/**
 * close window and show close message
 *
 * @static
 * @param win
 */
Ext.ux.PopupWindow.close = function(win) {
    win = win || window;

    // defer messagebox as it should not be displayed too early
    win.setTimeout(function(){
        if (! win) {
            return;
        }

        win.Ext.MessageBox.alert(
            i18n._('Window can be closed'),
            String.format(i18n._('This Window can be closed now. To avoid this message please deactivate your browsers popup blocker for {0}'), Tine.title),
            function() {
                win.close();
            }
        );
    }, 2000);

    win.close();
};


/***/ }),
/* 956 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 

/**
 * An object that represents a group of {@link Ext.ux.PopupWindow}
 * 
 * @namespace   Ext.ux
 * @class       Ext.ux.PopupWindowGroup
 * @constructor
 */
Ext.ux.PopupWindowGroup = function(config) {
    config = config || {};
    
    /**
     * @cfg {window} mainWindow
     */
    var mainWindow = config.mainWindow || window;
    
    // mark mainWindow
    mainWindow.isMainWindow = true;
    
    var list = {};
    var accessList = [];
    var front = null;
    
    

    // private
    var cleanupClosedWindows = function() {
        var doc;
        for(var id in list){
            try {
                var newDate = new Date().getTime();

                if(list[id].registerTime && (list[id].registerTime/1 + 2000 > newDate/1)) {
                    
                    continue;
                }
                
                doc = list[id].popup.document;
                if(!Ext.isIE && !doc.defaultView) {
                    doc = false;
                }
            } catch(e)  {
                doc = false;
                
            }
            if (! doc) {
                list[id].destroy();
                accessList.remove(list[id]);
                list[id] = null;
                delete list[id];
            }
        }
    };
    
    var cleanUpTask = function() {
        cleanupClosedWindows();
        cleanUpTask.defer(10000);
    };
    
    cleanUpTask();
    
    /*
    // private
    var sortWindows = function(d1, d2){
        return (!d1._lastAccess || d1._lastAccess < d2._lastAccess) ? -1 : 1;
    };

    // private
    var orderWindows = function(){
        var a = accessList, len = a.length;
        if(len > 0){
            a.sort(sortWindows);
            var seed = a[0].manager.zseed;
            for(var i = 0; i < len; i++){
                var win = a[i];
                if(win && !win.hidden){
                    win.setZIndex(seed + (i*10));
                }
            }
        }
        activateLast();
    };

    // private
    var setActiveWin = function(win){
        if(win != front){
            if(front){
                front.setActive(false);
            }
            front = win;
            if(win){
                win.setActive(true);
            }
        }
    };

    // private
    var activateLast = function(){
        for(var i = accessList.length-1; i >=0; --i) {
            if(!accessList[i].hidden){
                setActiveWin(accessList[i]);
                return;
            }
        }
        // none to activate
        setActiveWin(null);
    };
*/
    return {

        register : function(win){

            win.registerTime = new Date().getTime();
            cleanupClosedWindows();
            if (! win.popup) {
                console.error('pure window instead of Ext.ux.PopupWindow got registered');
            }
            list[win.name] = win;
            accessList.push(win);
            //win.on('hide', activateLast);
        },

        unregister : function(win){
            list[win.name] = null;
            delete list[win.name];
            //win.un('hide', activateLast);
            accessList.remove(win);
        },

        /**
         * Gets a registered window by name.
         * @param {String/Object} name The name of the window or a browser window object
         * @return {Ext.ux.PopupWindow}
         */
        get : function(name){
            cleanupClosedWindows();
            name = typeof name == "object" ? name.name : name;
            return list[name];
        },
        
        /**
         * returns main window of this window group
         * 
         * @return window
         */
        getMainWindow: function() {
            return mainWindow;
        },
        
        /**
         * Brings the specified window to the front of any other active windows.
         * @param {String/Object} win The id of the window or a {@link Ext.Window} instance
         * @return {Boolean} True if the dialog was brought to the front, else false
         * if it was already in front
         */
        bringToFront : function(win){
            win = this.get(win);
            if(win != front){
                win._lastAccess = new Date().getTime();
                if(win.popup.focus) {
                    win.popup.focus();
                }
                
//                front = win;
                // NOTE: we don't recognise the front window yet
//                if (Ext.isOpera) {
//                    Ext.Msg.alert(i18n._("The window you want to work with is backgrounded. Your browser doesn't support to foreground the window for you, so you need to use your operating systems window switching features. Please send complaints to your browser vendor!"))
//                }
                //orderWindows();
                return true;
            }
            return false;
        },
        
        /**
         * Sends the specified window to the back of other active windows.
         * @param {String/Object} win The id of the window or a {@link Ext.Window} instance
         * @return {Ext.Window} The window
         */
        /*
        sendToBack : function(win){
            win = this.get(win);
            win._lastAccess = -(new Date().getTime());
            orderWindows();
            return win;
        },
        */
        
        /**
         * Hides all windows in the group.
         */
        /*
        hideAll : function(){
            for(var id in list){
                if(list[id] && typeof list[id] != "function" && list[id].isVisible()){
                    list[id].hide();
                }
            }
        },
        */
        
        /**
         * Gets the currently-active window in the group.
         * @return {Ext.Window} The active window
         */
        /*
        getActive : function(){
            return front;
        },
        */

        /**
         * Returns zero or more windows in the group using the custom search function passed to this method.
         * The function should accept a single {@link Ext.ux.PopupWindow} reference as its only argument and should
         * return true if the window matches the search criteria, otherwise it should return false.
         * @param {Function} fn The search function
         * @param {Object} scope (optional) The scope in which to execute the function (defaults to the window
         * that gets passed to the function if not specified)
         * @return {Array} An array of zero or more matching windows
         */
        getBy : function(fn, scope){
            cleanupClosedWindows();
            var r = [];
            for(var i = accessList.length-1; i >=0; --i) {
                var win = accessList[i];
                if(fn.call(scope||win, win) !== false){
                    r.push(win);
                }
            }
            return r;
        },

        /**
         * Executes the specified function once for every window in the group, passing each
         * window as the only parameter. Returning false from the function will stop the iteration.
         * @param {Function} fn The function to execute for each item
         * @param {Object} scope (optional) The scope in which to execute the function
         */
        each : function(fn, scope){
            cleanupClosedWindows();
            for(var id in list){
                if(list[id] && typeof list[id] != "function"){
                    if(fn.call(scope || list[id], list[id]) === false){
                        return;
                    }
                }
            }
        }
    };
};

/**
 * @class Ext.ux.PopupWindowMgr
 * @extends Ext.ux.PopupWindowGroup
 * The default global window group that is available automatically.  To have more than one group of 
 * popup windows, create additional instances of {@link Ext.ux.PopupWindowGroup} as needed.
 * @singleton
 */
try {
    Ext.ux.PopupWindowMgr = window.opener.Ext.ux.PopupWindowMgr ? 
        window.opener.Ext.ux.PopupWindowMgr :
        new Ext.ux.PopupWindowGroup();
} catch (e) {
    // we might have no access no opener
    Ext.ux.PopupWindowMgr = new Ext.ux.PopupWindowGroup();
}


/***/ }),
/* 957 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2018 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * 
 * TODO         play sound / vibrate?
 * TODO         allow to set display duration?
 */    
 
Ext.ns('Ext.ux.Notification');
    
Ext.ux.Notification = function(){
    return {
        show: function(title, text){
            
            // define icon url
            // TODO use relative path here
            var iconUrl = window.location.href.replace(/#+.*/, '') + '/images/tine_logo.png';
            
            // webkit notifications
            if (window.webkitNotifications !== undefined && window.webkitNotifications.checkPermission() == 0) { // 0 is PERMISSION_ALLOWED
                var notification = window.webkitNotifications.createNotification(iconUrl, title, text);
                notification.show();
                setTimeout(function () {
                    notification.cancel();
                }, 15000);

            // Notification (see https://notifications.spec.whatwg.org/)
            } else if (window.Notification && window.Notification.permission == 'granted') {
                var notification = new window.Notification(title, {
                    icon: iconUrl,
                    body: text
                });

                //notification.onclick = function () {
                //    window.open("http://stackoverflow.com/a/13328397/1269037");
                //};
                
            // default behaviour
            } else {
                Ext.ux.MessageBox.msg(title, text);
            }
        }
    };
}();


/***/ }),
/* 958 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext*/

Ext.ns('Ext.ux');

/**
 * @namespace   Ext.ux
 * @class       Ext.ux.WindowFactory
 * @contructor
 *
 * @cfg {String} windowType type of window {Ext|Browser|Air}
 */
Ext.ux.WindowFactory = function (config) {
    Ext.apply(this, config);
    
    switch (this.windowType) 
    {
    case 'Browser' :
        this.windowClass = Ext.ux.PopupWindow;
        this.windowManager = Ext.ux.PopupWindowMgr;
        break;
    case 'Ext' :
        this.windowClass = Ext.Window;
        this.windowManager = Ext.WindowMgr;
        break;
    case 'Air' :
        this.windowClass = Ext.air.NativeWindow;
        this.windowManager = Ext.air.NativeWindowManager;
        break;
    default :
        console.error('No such windowType: ' + this.windowType);
        break;
    }
};

/**
 * @class Ext.ux.WindowFactory
 */
Ext.ux.WindowFactory.prototype = {
    
    /**
     * @private
     */
    windowClass: null,
    /**
     * @private
     */
    windowManager: null,
    
    /**
     * @rivate
     */
    getBrowserWindow: function (config) {
        var win = Ext.ux.PopupWindowMgr.get(config.name);
        
        if (! win) {
            win = new this.windowClass(config);
        }
        
        Ext.ux.PopupWindowMgr.bringToFront(win);
        return win;
    },
    
    /**
     * @private
     */
    getExtWindow: function (c) {
        var win = Ext.WindowMgr.get(c.name);

        if (! win) {
            c.id = c.name;

            // add titleBar
            c.height = c.height + 20;
            // border width
            c.width = c.width + 16;

            // save normal size
            c.normSize = { width: c.width, height: c.height };

            //limit the window size
            c.height = Math.min(Ext.getBody().getBox().height, c.height);
            c.width = Math.min(Ext.getBody().getBox().width, c.width);

            c.layout = c.layout || 'fit';
            c.items = {
                layout: 'card',
                border: false,
                activeItem: 0,
                isWindowMainCardPanel: true,
                items: [this.getCenterPanel(c)]
            };

            // NOTE: is this still true ?? -> we can only handle one window yet
            c.modal = true;

            win = new Ext.Window(c);
            c.items.items[0].window = win;
        }
        
        // if initShow property is present and it is set to false don't show window, just return reference
        if (! c.hasOwnProperty('initShow') || c.initShow !== false) {
            win.show();
        }
        
        return win;
    },
    
    /**
     * constructs window items from config properties
     */
     getCenterPanel: function (config) {
        var items;

        if (config.contentPanelConstructor) {
            config.contentPanelConstructorConfig = config.contentPanelConstructorConfig || {};

            /*
             * IE fix for listeners
             * 
             * In IE we have two problems when dealing with listeners across windows
             * 1. listeners (functions) are defined in the parent window. a typeof (some function from parent) returns object in IE
             *    the Ext.Observable code can't deal with this
             * 2. listeners get executed by fn.apply(scope, arguments). For some reason in IE this dosn't work with functions defined
             *    in an other window.
             *    
             * To work around this, we create new fresh listeners in the new window and proxy the event calls
             * 
             * TODO there is a bug in this function -> it does not work correctly if scope is defined in listeners object and is not the first entry ... :(
             */
            var ls = config.contentPanelConstructorConfig.listeners;
            if (ls /* && Ext.isIE */) {
                var lsProxy = {};
                for (var p in ls) {
                    if (ls.hasOwnProperty(p) && p !== 'scope') {
                        // NOTE apply dosn't work here for some strange reason, so we hope that there are not more than 5 params
                        if (ls[p].fn) {
                            lsProxy[p] = function () {
                                ls[p].fn.call(ls[p].scope, arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
                            };
                        } else {
                            lsProxy[p] = function () {
                                ls[p].call(ls.scope, arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
                            };
                        }
                    }
                }
                config.contentPanelConstructorConfig.listeners = lsProxy;
            }
            
            // place a reference to current window class in the itemConstructor.
            // this may be overwritten depending on concrete window implementation
            config.contentPanelConstructorConfig.window = config;
            
            // find the constructor in this context
            var parts = config.contentPanelConstructor.split('.'),
            ref = window;
            
            for (var i = 0; i < parts.length; i += 1) {
                ref = ref[parts[i]];
            }
            
            // finally construct the content panel
            Tine.log.info('WindowFactory::getCenterPanel - construct content panel');
            items = new ref(config.contentPanelConstructorConfig);
            
            // remove x-window reference
            config.contentPanelConstructorConfig.listeners = null;
        } else {
            items = config.items ? config.items : {};
        }
        
        return items;
    },
    
    /**
     * getWindow
     * 
     * creates new window if not already exists.
     * brings window to front
     */
    getWindow: function (config) {
        var windowType = config.windowType || ((config.modal) ? 'Ext' : this.windowType);
        
        // Names are only allowed to be alnum
        config.name = Ext.isString(config.name) ? config.name.replace(/[^a-zA-Z0-9_]/g, '') : config.name;
        
        if (! config.title && config.contentPanelConstructorConfig && config.contentPanelConstructorConfig.title) {
        config.title = config.contentPanelConstructorConfig.title;
            delete config.contentPanelConstructorConfig.title;
        }
        
        switch (windowType) {
        case 'Browser' :
            try {
                return this.getBrowserWindow(config);
            } catch (e) {
                // fallthrough to Ext Window
            }
        case 'Ext' :
            return this.getExtWindow(config);
        default :
            console.error('No such windowType: ' + this.windowType);
            break;
        }
    }
};


/***/ }),
/* 959 */
/***/ (function(module, exports) {

/*
 * Ext JS Library 2.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */


/**
 * @class Ext.ux.SliderTip
 * @extends Ext.Tip
 * Simple plugin for using an Ext.Tip with a slider to show the slider value
 */
Ext.ux.SliderTip = Ext.extend(Ext.Tip, {
    minWidth: 10,
    offsets : [0, -10],
    init : function(slider){
        slider.on('dragstart', this.onSlide, this);
        slider.on('drag', this.onSlide, this);
        slider.on('dragend', this.hide, this);
        slider.on('destroy', this.destroy, this);
    },

    onSlide : function(slider){
        this.show();
        this.body.update(this.getText(slider));
        this.doAutoWidth();
        this.el.alignTo(slider.thumb, 'b-t?', this.offsets);
    },

    getText : function(slider){
        return slider.getValue();
    }
});


/***/ }),
/* 960 */
/***/ (function(module, exports) {

/*
 * @author Pontifex
 * @version 1.0
 *
 * @class Ext.ux.Wizard
 */
Ext.ns('Ext.ux');

/**
 * Ext.ux.Wizard Extension Class
 * 
 * @namespace   Ext.ux
 * @class       Ext.ux.Wizard
 * @extends     Ext.Panel
 * @constructor
 * @param {Object} config Configuration options
 */
Ext.ux.Wizard = function(config) {
 
    var _config = Ext.apply({
        
        layout: 'card',
        activeItem: 0,
        bodyStyle: 'paddingTop:15px',
        defaults: {
                // applied to each contained panel
                border: false
            },
        
        buttons  : [
            {text:'Previous', handler: this.movePrevious, scope: this, disabled:true},
            {text:'Next', handler: this.moveNext, scope: this},
            {text:'Finish', handler: this.finishHanlder, scope: this, disabled:true},
            {text:'Cancel', handler: this.hideHanlder, scope: this}
        ]
    }, config||{});
    
    this.currentItem = 0;
    this.template = new Ext.Template('Step {current} of {count}');
    this.mandatorySteps = _config.mandatorySteps;

    Ext.ux.Wizard.superclass.constructor.call(this, _config);
    
    this.addEvents('leave', 'activate', 'finish', 'cancel');
    this.on('render', function(){
        this.footer.addClass('x-panel-footer-wizard');
        this.footer.insertFirst({html: '<div class="x-panel-footer-wizard-status">&nbsp;</div>'});
        this.setStatus();
        return true;
    });
 
}; // end of Ext.ux.Wizard constructor
 
// extend
Ext.extend(Ext.ux.Wizard, Ext.Panel, {
    
    getCurrentStep: function() {
        return this.currentItem + 1;
    },
    getStepCount: function() {
        return this.items.items.length;
    },
    setCurrentStep: function(step) {
        this.move(step-1);
    },
     
    /**
     * @private
     */
    beforeMove: function(currentItem, nextItem, forward) {
        return this.fireEvent('leave', currentItem, nextItem, forward);
    },
    
    /**
     * @private
     */
    setStatus: function() {
        var BUTTON_PREVIOUS = 0;
        var BUTTON_NEXT = 1;
        var BUTTON_FINISH = 2;
        var BUTTON_CANCEL = 3;

        var isFirstItem = (this.getCurrentStep() == 1);
        var isLastItem = (this.getCurrentStep() == this.getStepCount());
        var minimunSteps = isNaN(parseInt(this.mandatorySteps)) ?
                           this.getStepCount() :
                           Math.min(Math.max(parseInt(this.mandatorySteps), 1), this.getStepCount());

        this.buttons[BUTTON_PREVIOUS].setDisabled(isFirstItem);
        this.buttons[BUTTON_NEXT].setDisabled(isLastItem);
        this.buttons[BUTTON_FINISH].setDisabled(!(isLastItem || (minimunSteps < this.getCurrentStep())));
                
        this.footer.first('div div', true).firstChild.innerHTML = this.template.applyTemplate({'current': this.getCurrentStep(), 'count': this.getStepCount()});
    },
    /**
     * @private
     */
    move: function(item) {
        if(item >= 0 && item < this.items.items.length) {
            
            if(this.beforeMove(this.layout.activeItem, this.items.items[item], item > this.currentItem)) {
                this.layout.setActiveItem(item);
                this.currentItem = item;
    
                this.setStatus();
                this.fireEvent('activate', this.layout.activeItem);
            }
        }
    },
    
    /**
     * @private
     */
    moveNext:function(btn,e){
        this.move(this.currentItem+1);
    },
    
    /**
     * @private
     */
    movePrevious:function(btn,e){
        this.move(this.currentItem-1);
    },
    
    /**
     * @private
     */
    hideHanlder :function(){
        if(this.fireEvent('cancel')) {
            this.hide();
        }
    },
    
    /**
     * @private
     */
    finishHanlder:function(){
        if(this.fireEvent('finish')) {
            this.hide();
        }
    }
});


/***/ }),
/* 961 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux');

/**
 * Generic widget for a twintriggerd search field
 * 
 * @namespace   Ext.ux
 * @class       Ext.ux.SearchField
 * @extends     Ext.form.TwinTriggerField
 */
Ext.ux.SearchField = Ext.extend(Ext.form.TwinTriggerField, {
    /**
     * @cfg {String} paramName
     */
    paramName : 'query',
    /**
     * @cfg {Bool} selectOnFocus
     */
    selectOnFocus : true,
    /**
     * @cfg {String} emptyText
     */
    emptyText: '',
    
    validationEvent:false,
    validateOnBlur:false,
    trigger1Class:'x-form-clear-trigger',
    trigger2Class:'x-form-search-trigger',
    hideTrigger1:true,
    width:180,
    hasSearch : false,
    /**
     * @private
     */
    initComponent : function(){
        this.emptyText = this.emptyText || i18n._('enter searchfilter');
        
        Ext.ux.SearchField.superclass.initComponent.call(this);
        this.on('specialkey', function(f, e){
            if (e.getKey() == e.ENTER){
                if (this.getValue() == '') {
                    this.onTrigger1Click();
                } else {
                    this.onTrigger2Click();
                }
            }
        }, this);
    },
    /**
     * @private
     */
    onTrigger1Click : function(){
        if (this.hasSearch) {
            this.el.dom.value = '';
            this.fireEvent('change', this, this.getRawValue(), this.startValue);
            this.startValue = this.getRawValue();
            this.triggers[0].hide();
            this.hasSearch = false;
        }
    },
    /**
     * @private
     */
    onTrigger2Click : function(){
        var v = this.getRawValue();
        this.fireEvent('change', this, this.getRawValue(), this.startValue);
        this.startValue = this.getRawValue();
        this.hasSearch = true;
        this.triggers[0][v.length < 1 ? 'hide' : 'show']();
    }
});

Ext.reg('ux-searchfield', Ext.ux.SearchField);


/***/ }),
/* 962 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Ext.ux.form');

/**
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.BrowseButton
 * @extends     Ext.Button
 */
Ext.ux.BrowseButton = Ext.extend(Ext.Button, {

    initComponent: function() {
        this.plugins = this.plugins || [];
        this.plugins.push( new Ext.ux.file.BrowsePlugin({}));
        
        Ext.ux.BrowseButton.superclass.initComponent.call(this);
    }
});

Ext.reg('browsebutton', Ext.ux.BrowseButton);


/***/ }),
/* 963 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * central column manager
 * - get column for a given column
 * - register column for a given column
 *
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.ColumnManager
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @singleton
 */
Tine.widgets.grid.ColumnManager = function() {
    var columns = {};

    return {
        /**
         * const for category editDialog
         */
        CATEGORY_EDITDIALOG: 'editDialog',

        /**
         * const for category mainScreen
         */
        CATEGORY_PROPERTYGRID: 'mainScreen',

        /**
         * get column of well known column names
         *
         * @param {String} columnName
         * @return {Object}
         */
        getByFieldname: function(columnName) {
            var column = null;

            return column;
        },

        /**
         * get column by data type
         *
         * @param {String} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {String} category {editDialog|mainScreen} optional.
         * @param {Object} config
         * @return {Object}
         */
        getByModelConfig: function(appName, modelName, fieldName, category, config) {
            var _ = window.lodash,
                column = {},
                recordClass = Tine.Tinebase.data.RecordMgr.get(appName, modelName),
                modelConfig = recordClass ? recordClass.getModelConfiguration() : null,
                fieldDefinition = _.get(modelConfig, 'fields.' + fieldName , {}),
                fieldType = fieldDefinition.type || 'string',
                app = Tine.Tinebase.appMgr.get(appName),
                i18n = fieldDefinition.useGlobalTranslation ? window.i18n : app.i18n;

            if (fieldDefinition.type === 'virtual') {
                fieldDefinition = fieldDefinition.config;
            }

            // don't show multiple record fields
            if (fieldDefinition.type == 'records') {
                return null;
            }

            // don't show parent property in dependency of an editDialog
            if (this.editDialog && fieldDefinition.hasOwnProperty('config') && fieldDefinition.config.isParent) {
                return null;
            }

            // don't show record field if the user doesn't have the right on the application
            if (fieldDefinition.type == 'record' && !(fieldDefinition.config && fieldDefinition.config.doNotCheckModuleRight) && (! Tine.Tinebase.common.hasRight('view', fieldDefinition.config.appName, fieldDefinition.config.modelName.toLowerCase() + 's'))) {
                return null;
            }

            if(fieldDefinition.type == 'attachments') {
                config.width = 20;
                config.resizable = false;
                config.header = window.i18n._('Attachments');
            }

            if(fieldDefinition.type == 'image') {
                config.width = 20;
                config.resizable = false;
                config.header = fieldDefinition.label == 'Image' ? window.i18n._('Image') : i18n._(fieldDefinition.label);
            }

            // If no label exists, don't use in grid
            if (! fieldDefinition.label) {
                return null;
            }

            Ext.applyIf(column, {
                id: fieldName,
                dataIndex: (fieldDefinition.type == 'relation') ? 'relations' : fieldName,
                header: i18n._(fieldDefinition.label),
                hidden: fieldDefinition.hasOwnProperty('shy') ? fieldDefinition.shy : false,    // defaults to false
                sortable: (fieldDefinition.hasOwnProperty('sortable') && fieldDefinition.sortable == false) ? false : true // defaults to true
            });

            if (fieldDefinition.hasOwnProperty('summaryType')) {
                column.summaryType = fieldDefinition.summaryType;
            }

            var renderer = Tine.widgets.grid.RendererManager.get(appName, modelName, fieldName, category);
            if (renderer) {
                column.renderer = renderer;
            }

            Ext.apply(column, config);

            return column;
        },

        /**
         * returns column for given column
         *
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {String} category {editDialog|mainScreen} optional.
         * @param {Object} config
         * @return {Object}
         */
        get: function(appName, modelName, fieldName, category, config) {
            var appName = this.getAppName(appName),
                modelName = this.getModelName(modelName),
                categoryKey = this.getKey([appName, modelName, fieldName, category]),
                genericKey = this.getKey([appName, modelName, fieldName]),
                config = config || {};

            // check for registered renderer
            var column = columns[categoryKey] ? columns[categoryKey] : columns[genericKey];

            // check for common names
            if (! column) {
                column = this.getByFieldname(fieldName);
            }

            // check for known datatypes
            if (! column) {
                column = this.getByModelConfig(appName, modelName, fieldName, category, config);
            }

            return column;
        },

        /**
         * register renderer for given column
         *
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {Object} column
         * @param {String} category {editDialog|mainScreen} optional.
         */
        register: function(appName, modelName, fieldName, column, category) {
            var appName = this.getAppName(appName),
                modelName = this.getModelName(modelName),
                categoryKey = this.getKey([appName, modelName, fieldName, category]),
                genericKey = this.getKey([appName, modelName, fieldName]);

            columns[category ? categoryKey : genericKey] = column;
        },

        /**
         * check if a column is explicitly registered
         *
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {String} category {editDialog|mainScreen} optional.
         * @return {Boolean}
         */
        has: function(appName, modelName, fieldName, category) {
            var appName = this.getAppName(appName),
                modelName = this.getModelName(modelName),
                categoryKey = this.getKey([appName, modelName, fieldName, category]),
                genericKey = this.getKey([appName, modelName, fieldName]);

            // check for registered renderer
            return (columns[categoryKey] ? columns[categoryKey] : columns[genericKey]) ? true : false;
        },

        /**
         * returns the modelName by modelName or record
         *
         * @param {Record/String} modelName
         * @return {String}
         */
        getModelName: function(modelName) {
            return Ext.isFunction(modelName) ? modelName.getMeta('modelName') : modelName;
        },

        /**
         * returns the modelName by appName or application instance
         *
         * @param {String/Tine.Tinebase.Application} appName
         * @return {String}
         */
        getAppName: function(appName) {
            return Ext.isString(appName) ? appName : appName.appName;
        },

        /**
         * returns a key by joining the array values
         *
         * @param {Array} params
         * @return {String}
         */
        getKey: function(params) {
            return params.join('_');
        }
    };
}();

/***/ }),
/* 964 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ns('Ext.ux.grid');

/**
 * @class Ext.ux.grid.CheckColumn
 * @extends Ext.util.Observable
 * GridPanel plugin to add a column with check boxes to a grid.
 * <p>Example usage:</p>
 * <pre><code>
// create the column
var checkColumn = new Ext.grid.CheckColumn({
   header: 'Indoor?',
   dataIndex: 'indoor',
   id: 'check',
   width: 55
});

// add the column to the column model
var cm = new Ext.grid.ColumnModel([{
       header: 'Foo',
       ...
    },
    checkColumn
]);

// create the grid
var grid = new Ext.grid.EditorGridPanel({
    ...
    cm: cm,
    plugins: [checkColumn], // include plugin
    ...
});
 * </code></pre>
 * In addition to storing a Boolean value within the record data, this
 * class toggles a css class between <tt>'x-grid3-check-col'</tt> and
 * <tt>'x-grid3-check-col-on'</tt> to alter the background image used for
 * a column.
 */
Ext.ux.grid.CheckColumn = function(config){
    Ext.apply(this, config);
    if(!this.id){
        this.id = Ext.id();
    }

    this.addEvents(

        /**
         * @event checkchange
         * Fires when a check state changes
         * @param {Ext.ux.grid.CheckColumn} this
         * @param {boolean} newvalue
         * @param {boolean} oldvalue
         * @param {Ext.data.Record} record
         */
        'checkchange'
    );

    this.renderer = this.renderer.createDelegate(this);
    Ext.ux.grid.CheckColumn.superclass.constructor.call(this);
};

Ext.extend(Ext.ux.grid.CheckColumn, Ext.util.Observable, {
    init : function(grid){
        this.grid = grid;
        this.grid.on('render', function(){
            var view = this.grid.getView();
            view.mainBody.on('mousedown', this.onMouseDown, this);
        }, this);
    },

    /**
     * Validate action is valid or not here
     *
     * If returned false, the setting won't be changed.
     *
     * @param checkbox
     * @param record
     * @return {boolean}
     */
    onBeforeCheck: function(checkbox, record) {
        return !this.grid.readOnly;
    },

    onMouseDown : function(e, t){
        if(Ext.fly(t).hasClass(this.createId())){
            e.stopEvent();
            var index = this.grid.getView().findRowIndex(t);
            var record = this.grid.store.getAt(index);

            if (this.onBeforeCheck(this, record)) {
                record.set(this.dataIndex, !record.data[this.dataIndex]);
                this.fireEvent('checkchange', this, record.data[this.dataIndex], !record.data[this.dataIndex], record);
            }
        }
    },

    renderer : function(v, p, record){
        p.css += ' x-grid3-check-col-td';
        return String.format('<div class="x-grid3-check-col{0} {1}">&#160;</div>', +v ? '-on' : '', this.createId());
    },
    
    createId : function(){
        return 'x-grid3-cc-' + this.id;
    }
});

// register ptype
Ext.preg('checkcolumn', Ext.ux.grid.CheckColumn);

// backwards compat
Ext.grid.CheckColumn = Ext.ux.grid.CheckColumn;

/***/ }),
/* 965 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Ext
 * @subpackage  ux
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Ext.ux.grid');

/**
 * @namespace   Ext.ux.grid
 * @class       Ext.ux.grid.ActionColumnPlugin
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * 
 * @plugin for Ext.ux.grid.GridPanel
 */

Ext.ux.grid.ActionColumnPlugin = function(config) {
    Ext.apply(this, config);
};

Ext.extend(Ext.ux.grid.ActionColumnPlugin, Ext.util.Observable, {
    
    // private
    isColumn: true,
    menuDisabled: true,
    
    grid: null,
    gridPanel: null,
    filterable: false,
    /**
     * the template to put the data into
     * 
     * @type {Ext.XTemplate}
     */
    tpl: null,
    
    /**
     * config property actions
     * 
     * @type {Array}
     */
    actions: null,
    
    actionHandlers: null,
    
    /**
     * the main template for one column
     * 
     * @type {String}
     */
    templateHTML: '<div class="ux-action-column">'
        +'<tpl for="actions">'
        +'<div ext:ux-action-column-id="{id}" ext:ux-action-column="{actionName}" class="ux-action-column-item {cls} <tpl if="text">'
        +'ux-action-column-text</tpl>" ext:qtip="{qtip}">'
        +'<tpl if="text"><span ext:qtip="{qtip}">{text}</span></tpl></div>'
        +'</tpl>'
        +'</div>',
    
    /**
     * initializes the plugin
     */
    init : function(grid) {
        this.gridPanel = grid;
        this.grid = grid.getGrid();
        this.initTemplate();
        this.width = 60;

        this.view = this.grid.getView();
        
        this.renderer = this.renderColumn.createDelegate(this);
        this.grid.on('click', this.onClick, this);
    },
    
    /**
     * the onclick handler, finds the action and the index and calls
     */
    onClick: function(e) {
        // handle row action click
        var target = e.getTarget('.ux-action-column-item');
        if (target) {
            var actionName = target.getAttribute(['ext:ux-action-column']);
            if (actionName) {
                var rowIndex = this.view.findRowIndex(target);
                if (rowIndex !== undefined) {
                    this.actionHandlers[actionName].call(this.gridPanel, rowIndex);
                }
            }
        }
    },
    
    /**
     * renders the data into the initialized template
     * 
     * @param {String} value
     * @param {Object} cell
     * @param {Ext.data.Record} record
     * @param {Number} row
     * @param {Number} col
     * @param {Ext.data.Store} store
     * 
     * @return {String}
     */
    renderColumn: function(value, cell, record, row, col, store) {
        return this.tpl.apply({data: record.data});
    },
    
    /**
     * initializes the template and sets actionHandlers
     */
    initTemplate:function() {
        var actions = [];
        this.actionHandlers = [];
        
        // put each action into a template
        Ext.each(this.actions, function(a, i) {
            var action = {
                cls: a.iconCls ? a.iconCls : '',
                text: a.text ? a.text : '  ',
                qtip: a.tooltip ? Ext.util.Format.htmlEncode(Ext.util.Format.htmlEncode(a.tooltip)) : null,
                actionName: a.name
            };
            
            this.actionHandlers[a.name] = a.callback;
            
            actions.push(action);
            
        }, this);
        
        this.tpl = new Ext.XTemplate((new Ext.XTemplate(this.templateHTML)).apply({actions: actions}));
    }
});

Ext.ComponentMgr.registerPlugin('grid-actioncolumn', Ext.ux.grid.ActionColumnPlugin);


/***/ }),
/* 966 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Ext
 * @subpackage  ux
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Ext.ux', 'Ext.ux.grid');

/**
 * Class for creating a edittable grid with quick add row on top.
 * <p>As form field for the quick add row, the quickaddField of the column definition is used.<p>
 * <p>The event 'newentry' is fired after the user finished editing the new row.<p>
 * <p>Example usage:</p>
 * <pre><code>
 var g =  new Ext.ux.grid.QuickaddGridPanel({
     ...
     quickaddMandatory: 'summary',
     columns: [
         {
             ...
             id: 'summary',
             quickaddField = new Ext.form.TextField({
                 emptyText: 'Add a task...'
             })
         },
         {
             ...
             id: 'due',
             quickaddField = new Ext.form.DateField({
                 ...
             })
         }
     ]
 });
 * </code></pre>
 *
 * @namespace   Ext.ux.grid
 * @class       Ext.ux.grid.QuickaddGridPanel
 * @extends     Ext.grid.EditorGridPanel
 */
Ext.ux.grid.QuickaddGridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
    /**
     * @cfg {String} quickaddMandatory 
     * Mandatory field which must be set before quickadd fields will be enabled
     */
    quickaddMandatory: false,
    /**
     * if set, the quickadd fields are validated on blur
     * @type Boolean
     */
    validate: false,
    
    /**
     * @cfg {Bool} resetAllOnNew
     * reset all fields after new record got created (per default only den mandatory field gets resetted).
     */
    resetAllOnNew: false,
    
    /**
     * @property {Bool} adding true if a quickadd is in process
     */
    adding: false,
    
    parentScope: null,
    
    /**
     * @private
     */
    initComponent: function(){
        
        this.idPrefix = Ext.id();
        
        Ext.ux.grid.QuickaddGridPanel.superclass.initComponent.call(this);
        this.addEvents(
            /**
             * @event newentry
             * Fires when add process is finished 
             * @param {Object} data of the new entry
             */
            'newentry'
        );
        
        this.cls = 'x-grid3-quickadd';
        
        // The customized header template
        this.initTemplates();
        
        // add our fields after view is rendered
        this.getView().afterRender = this.getView().afterRender.createSequence(this.renderQuickAddFields, this);

        if (! this.autoExpandColumn && this.quickaddMandatory) {
            this.autoExpandColumn = this.quickaddMandatory;
        }

        // init handlers
        this.quickaddHandlers = {
            scope: this,
            blur: function(field){
                this.doBlur.defer(250, this);
            },
            specialkey: function(f, e){
                var key = e.getKey();
                switch (key) {
                    case e.ENTER:
                        e.stopEvent();
                        f.el.blur();
                        if (f.triggerBlur){
                            f.triggerBlur();
                        }
                        break;
                    case e.ESC:
                        e.stopEvent();
                        f.setValue('');
                        f.el.blur();
                        break;
                }
            }
        };

        this.on('beforeedit', this.onBeforeEdit, this);
        this.on('validateedit', this.onValidateEdit, this);
    },
    
    /**
     * renders the quick add fields
     */
    renderQuickAddFields: function() {
        Ext.each(this.getCols(), function(column){
            if (column.quickaddField) {
                column.quickaddField.render(this.getQuickAddWrap(column));
                column.quickaddField.setDisabled(this.readOnly || column.id != this.quickaddMandatory);
                column.quickaddField.on(this.quickaddHandlers);
            }
        },this);


        this.colModel.on('configchange', this.syncFields, this);
        //this.colModel.on('widthchange', this.syncFields, this);
        this.colModel.on('hiddenchange', this.syncFields, this);
        this.on('resize', this.syncFields);
        this.on('columnresize', this.syncFields);
        this.colModel.on('columnmoved', this.syncFields, this);
        this.view.on('beforerefresh', this.onBeforeRefresh, this);
        this.view.on('refresh', this.onRefresh, this);
        this.syncFields();
        
        this.colModel.getColumnById(this.quickaddMandatory).quickaddField.on('focus', this.onMandatoryFocus, this);
    },

    onValidateEdit: function(o) {
        var _ = window.lodash,
            me = this,
            fieldDef = _.isFunction(_.get(me, 'recordClass.getField')) ?
                _.get(me.recordClass.getField(o.field), 'fieldDefinition') : null;


        if (_.get(fieldDef, 'type') == 'record') {
            var col = _.find(me.getCols(), {dataIndex: o.field}),
                recordData = _.get(col, 'editor.field.selectedRecord.data');

            // o.record.setValue(o.field, recordData);

            o.value = recordData ? recordData : o.value;
        }
    },

    /**
     * @private
     */
    doBlur: function(){
        
        // check if all quickadd fields are blured, validate them if required
        var focusedOrInvalid;
        Ext.each(this.getCols(true), function(item){
            if(item.quickaddField && (item.quickaddField.hasFocus || item.quickaddField.hasFocusedSubPanels || (this.validate && !item.quickaddField.isValid()))) {
                focusedOrInvalid = true;
            }
        }, this);
        
        // only fire a new record if no quickaddField is focused
        if (!focusedOrInvalid) {
            var data = {};
            Ext.each(this.getCols(true), function(item){
                if(item.quickaddField){
                    data[item.id] = item.quickaddField.selectedRecord ?
                        item.quickaddField.selectedRecord.data :
                        item.quickaddField.getValue();
                    item.quickaddField.setDisabled(item.id != this.quickaddMandatory);
                }
            }, this);
            
            if (this.colModel.getColumnById(this.quickaddMandatory).quickaddField.getValue() != '') {
                if (this.fireEvent('newentry', data)){
                    var quickAddField = this.colModel.getColumnById(this.quickaddMandatory).quickaddField;
                    if (quickAddField.resetOnNew !== false) {
                        quickAddField.setValue('');
                        if (this.validate) {
                            quickAddField.clearInvalid();
                        }
                    }
                    if (this.resetAllOnNew) {
                        var columns = this.colModel.config;
                        for (var i = 0, len = columns.length; i < len; i++) {
                            if(columns[i].quickaddField != undefined){
                               columns[i].quickaddField.setValue('');
                            }
                        }
                    }
                }
            }
            
            this.adding = false;
        }
        
    },
    
    /**
     * gets columns
     * 
     * @param {Boolean} visibleOnly
     * @return {Array}
     */
    getCols: function(visibleOnly) {
        if(visibleOnly === true){
            var visibleCols = [];
            Ext.each(this.colModel.config, function(column) {
                if (! column.hidden) {
                    visibleCols.push(column);
                }
            }, this);
            return visibleCols;
        }
        return this.colModel.config;
    },
    
    /**
     * returns wrap el for quick add filed of given col
     * 
     * @param {Ext.grid.Colum} col
     * @return {Ext.Element}
     */
    getQuickAddWrap: function(column) {
        return Ext.get(this.idPrefix + column.id);
    },
    
    /**
     * @private
     */
    initTemplates: function() {
        this.getView().templates = this.getView().templates ? this.getView().templates : {};
        var ts = this.getView().templates;
        
        var newRows = '';

        var cm = this.colModel;
        var ncols = cm.getColumnCount();
        for (var i=0; i<ncols; i++) {
            var colId = cm.getColumnId(i);
            newRows += '<td><div class="x-small-editor" id="' + this.idPrefix + colId + '"></div></td>';
        }
        
        ts.header = new Ext.Template(
            '<table border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',
            '<thead><tr class="x-grid3-hd-row">{cells}</tr></thead>',
            '<tbody><tr class="new-row">',
                newRows,
            '</tr></tbody>',
            '</table>'
        );
    },
    
    /**
     * @private
     */
    syncFields: function() {
        var newRowEl = Ext.get(Ext.DomQuery.selectNode('tr[class=new-row]', this.getView().mainHd.dom));
        
        var columns = this.getCols();
        for (var column, tdEl, i=columns.length -1; i>=0; i--) {
            column = columns[i];
            var tdEl = this.getQuickAddWrap(column).parent();
            
            // resort columns
            newRowEl.insertFirst(tdEl);
            
            // set hidden state
            tdEl.dom.style.display = column.hidden ? 'none' : '';
            
            // resize
            //tdEl.setWidth(column.width);
            if (column.quickaddField) {
                column.quickaddField.setSize(column.width -1);
            }
        }
    },

    // save our editors - they get overwritten on hd-refresh
    onBeforeRefresh: function() {
        Ext.each(this.getCols(), function(col) {
            if (col.quickaddField && col.quickaddField.rendered) {
                var el = col.quickaddField.el,
                    hdEl = el.up('.x-grid3');

                hdEl.appendChild(col.quickaddField.wrap ? col.quickaddField.wrap : el);
            }
        }, this);
    },

    // restore editors
    onRefresh:  function() {
        Ext.each(this.getCols(), function(col) {
            if (col.quickaddField && col.quickaddField.rendered) {
                var wrap = this.getQuickAddWrap(col);

                wrap.appendChild(col.quickaddField.wrap ? col.quickaddField.wrap : col.quickaddField.el);
            }
        }, this);
    },

    /**
     * @private
     */
    onMandatoryFocus: function() {
        if (this.readOnly) {
            return;
        }

        this.adding = true;
        Ext.each(this.getCols(true), function(item){
            if(item.quickaddField){
                item.quickaddField.setDisabled(false);
            }
        }, this);
    },

    beforeDragDrop: function() {
        if (this.readOnly) {
            return false;
        }
    },
    
    onBeforeEdit: function(o) {
        if (this.readOnly) {
            o.cancel = true;
        }
    },

    setReadOnly: function(readOnly) {
        this.readOnly = readOnly;

        Ext.each(this.getCols(true), function(item){
            if(item.quickaddField){
                item.quickaddField.setDisabled(readOnly || item.id != this.quickaddMandatory);
            }
        }, this);
    }
});


/***/ }),
/* 967 */
/***/ (function(module, exports) {

/*
 * Ext JS Library 2.1
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */
 
/**
 * @namespace   Ext.ux.grid
 * @class       Ext.ux.grid.RowExpander
 * @extends     Ext.util.Observable
 */
Ext.ux.grid.RowExpander = function(config){
    Ext.apply(this, config);

    this.addEvents({
        beforeexpand : true,
        expand: true,
        beforecollapse: true,
        collapse: true
    });

    Ext.ux.grid.RowExpander.superclass.constructor.call(this);

    if(this.tpl){
        if(typeof this.tpl == 'string'){
            this.tpl = new Ext.Template(this.tpl);
        }
        this.tpl.compile();
    }

    this.state = {};
    this.bodyContent = {};
};

    Ext.extend(Ext.ux.grid.RowExpander, Ext.util.Observable, {
        header: "",
        width: 20,
        sortable: false,
        fixed:true,
        dataIndex: '',
        id: 'expander',
        lazyRender : true,
        enableCaching: false,
    
        getRowClass : function(record, rowIndex, p, ds){
            p.cols = p.cols-1;
            var content = this.bodyContent[record.id];
            if(!content && !this.lazyRender){
                content = this.getBodyContent(record, rowIndex);
            }
            if(content){
                p.body = content;
            }
            return this.state[record.id] ? 'x-grid3-row-expanded' : 'x-grid3-row-collapsed';
        },
    
        init : function(grid){
            this.grid = grid;
    
            var view = grid.getView();
            view.getRowClass = this.getRowClass.createDelegate(this);
    
            view.enableRowBody = true;
    
            grid.on('render', function(){
                view.mainBody.on('mousedown', this.onMouseDown, this);
            }, this);
        },
    
        getBodyContent : function(record, index){
            if(!this.enableCaching){
                return this.tpl.apply(record.data);
            }
            var content = this.bodyContent[record.id];
            if(!content){
                content = this.tpl.apply(record.data);
                this.bodyContent[record.id] = content;
            }
            return content;
        },
    
        onMouseDown : function(e, t){
            if(t.className == 'x-grid3-row-expander'){
                e.stopEvent();
                var row = e.getTarget('.x-grid3-row');
                this.toggleRow(row);
            }
        },
    
        renderer : function(v, p, record){
            p.cellAttr = 'rowspan="2"';
            return '<div class="x-grid3-row-expander">&#160;</div>';
        },
    
        beforeExpand : function(record, body, rowIndex){
            if(this.fireEvent('beforexpand', this, record, body, rowIndex) !== false){
                if(this.tpl && this.lazyRender){
                    body.innerHTML = this.getBodyContent(record, rowIndex);
                }
                return true;
            }else{
                return false;
            }
        },
    
        toggleRow : function(row){
            if(typeof row == 'number'){
                row = this.grid.view.getRow(row);
            }
            this[Ext.fly(row).hasClass('x-grid3-row-collapsed') ? 'expandRow' : 'collapseRow'](row);
        },
    
        expandRow : function(row){
            if(typeof row == 'number'){
                row = this.grid.view.getRow(row);
            }
            var record = this.grid.store.getAt(row.rowIndex);
            var body = Ext.DomQuery.selectNode('tr:nth(2) div.x-grid3-row-body', row);
            if(this.beforeExpand(record, body, row.rowIndex)){
                this.state[record.id] = true;
                Ext.fly(row).replaceClass('x-grid3-row-collapsed', 'x-grid3-row-expanded');
                this.fireEvent('expand', this, record, body, row.rowIndex);
            }
        },
    
        collapseRow : function(row){
            if(typeof row == 'number'){
                row = this.grid.view.getRow(row);
            }
            var record = this.grid.store.getAt(row.rowIndex);
            var body = Ext.fly(row).child('tr:nth(1) div.x-grid3-row-body', true);
            if(this.fireEvent('beforcollapse', this, record, body, row.rowIndex) !== false){
                this.state[record.id] = false;
                Ext.fly(row).replaceClass('x-grid3-row-expanded', 'x-grid3-row-collapsed');
                this.fireEvent('collapse', this, record, body, row.rowIndex);
            }
        }
});


/***/ }),
/* 968 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @subpackage  widgets
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux.grid');

/**
 * Paging toolbar with build in selection support
 *
 * @namespace   Ext.ux.grid
 * @class       Ext.ux.grid.PagingToolbar
 * @extends     Ext.PagingToolbar
 * @constructor
 * @param       {Object} config
 */
Ext.ux.grid.PagingToolbar = Ext.extend(Ext.PagingToolbar, {
    /**
     * @cfg {Bool} displayPageInfo 
     * True to display the displayMsg (defaults to false)
     */
    displayPageInfo: false,
    /**
     * @cfg {Bool} displaySelectionHelper
     * True to display the selectionMsg (defaults to false)
     */
    displaySelectionHelper: false,
    /**
     * @cfg {Ext.grid.AbstractSelectionModel}
     */
    sm: null,
    
    /**
     * if this paging toolbar belongs to a nested grid, this must set to true to disable the reload
     * 
     * @type Boolean
     */
    nested: false,
    
    /**
     * @cfg {Bool} disableSelectAllPages
     */
    disableSelectAllPages: false,

    canonicalName: 'PagingToolbar',
    
    /**
     * @private
     */
    initComponent: function() {
        // initialise i18n
        this.selHelperText = {
            'main'         : i18n._('{0} selected'),
            'deselect'     : i18n._('Unselect all'),
            'selectall'    : i18n._('Select all pages ({0} records)'),
            'toggle'       : i18n._('Toggle selection')
        };

        Ext.ux.grid.PagingToolbar.superclass.initComponent.call(this);
        // if the grid is nested in an editdialog, disable refresh
        // TODO: remove this when using memoryproxy
        if (this.nested) {
            this.refresh.disable();
            this.refresh.addClass('x-ux-pagingtb-refresh-disabled');
        }
    },
    
    /**
     * @private
     */
    onRender : function(ct, position) {
        Ext.ux.grid.PagingToolbar.superclass.onRender.call(this, ct, position);
        
        if (this.displaySelectionHelper) {
            this.renderSelHelper();
        }
    },
    
    /**
     * @private
     */
    renderSelHelper: function() {
        this.deselectBtn = new Ext.Action({
            iconCls: 'x-ux-pagingtb-deselect',
            text: this.getSelHelperText('deselect'),
            scope: this,
            handler: function() {this.sm.clearSelections();}
        });
        this.selectAllPages = new Ext.Action({
            iconCls: 'x-ux-pagingtb-selectall',
            text: this.getSelHelperText('selectall'),
            scope: this,
            disabled: this.disableSelectAllPages,
            handler: function() {this.sm.selectAll();}
        });
        this.toggleSelectionBtn = new Ext.Action({
            iconCls: 'x-ux-pagingtb-toggle',
            text: this.getSelHelperText('toggle'),
            scope: this,
            handler: function() {this.sm.toggleSelection();}
        });
        
        this.addSeparator();
        this.selHelperBtn = new Ext.Action({
            xtype: 'tbsplit',
            text: this.getSelHelperText('main'),
            iconCls: 'x-ux-pagingtb-main',
            menu: new Ext.menu.Menu({
                items: [
                    this.deselectBtn,
                    this.selectAllPages,
                    this.toggleSelectionBtn
                ]
            })
        });
        
        this.add(this.selHelperBtn);
        
        // update buttons when data or selection changes
        this.sm.on('selectionchange', this.updateSelHelper, this);
        this.store.on('load', this.updateSelHelper, this);
    },
    
    /**
     * update all button descr.
     */
    updateSelHelper: function() {
        this.selHelperBtn.setText(this.getSelHelperText('main'));
        this.selectAllPages.setText(this.getSelHelperText('selectall'));
    },

    /**
     * get test for button
     * @param {String} domain 
     * @return {String}
     */
    getSelHelperText: function(domain) {
        var num;
        switch(domain) {
            case 'main':
                num = this.sm.getCount();
                break;
            case 'selectall':
                num = this.store.getTotalCount();
                break;
            default:
                return this.selHelperText[domain];
                break;
        }
        
        return String.format(this.selHelperText[domain], num);
    }    
});


/***/ }),
/* 969 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Ext
 * @subpackage  ux
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Ext.ux', 'Ext.ux.grid');

/**
 * Grid Drop Zone
 * 
 * @param {Ext.grid.GridPanel} grid
 * @param {Object} config
 */
Ext.ux.grid.GridDropZone = function(grid, config){
    this.view = grid.getView();
    this.grid = grid;
    
    Ext.ux.grid.GridDropZone.superclass.constructor.call(this, this.view.mainBody.dom, config);
};

Ext.extend(Ext.ux.grid.GridDropZone, Ext.dd.DropZone, {
    getTargetFromEvent: function(e) {
        return e.getTarget(this.view.rowSelector);
    },

    onNodeEnter : function(target, dd, e, data) { 
        //Ext.fly(target).addClass('x-grid3-row-selected');
    },

    onNodeOut : function(target, dd, e, data) {
        this.removeDropIndicators(target);
        //Ext.fly(target).removeClass('x-grid3-row-selected');
    },

    onNodeOver : function(target, dd, e, data){
        var pt = this.getDropPoint(e, target, dd),
            returnCls = this.dropNotAllowed,
            cls;
        
        if(this.isValidDropPoint(target, pt, dd, e, data)){
           if(pt == "above"){
               returnCls = this.view.findRowIndex(target) === 0 ? "x-tree-drop-ok-above" : "x-tree-drop-ok-between";
               cls = "x-grid3-drag-insert-above";
           }else if(pt == "below"){
               returnCls = this.view.findRowIndex(target) === this.grid.getStore().getCount() -1 ? "x-tree-drop-ok-below" : "x-tree-drop-ok-between";
               cls = "x-grid3-drag-insert-below";
           }else{
               returnCls = "x-tree-drop-ok-append";
               cls = "x-grid3-drag-append";
           }
           if(this.lastInsertClass != cls){
               Ext.fly(target).replaceClass(this.lastInsertClass, cls);
               this.lastInsertClass = cls;
           }
       }
       return returnCls;
    },
    
    removeDropIndicators : function(target){
        if(target){
            Ext.fly(target).removeClass([
                "x-grid3-drag-insert-above",
                "x-grid3-drag-insert-below",
                "x-grid3-drag-append"
            ]);
            this.lastInsertClass = "_noclass";
        }
    },
    
    getDropPoint : function(e, target, dd) {
        var dragEl = dd.ddel,
            t = Ext.lib.Dom.getY(target),
            b = t + target.offsetHeight,
            y = Ext.lib.Event.getPageY(e),
            q = (b - t) / 2;

        return y > (t + q) ? "below" : "above";
    },
    
    isValidDropPoint: function(target, pt, dd, e, data) {
        return true;
    }
});

/***/ }),
/* 970 */
/***/ (function(module, exports) {

/**
 * Ext.ux.grid.GridViewMenuPlugin
 * Copyright (c) 2008, http://www.siteartwork.de
 *
 * Ext.ux.grid.GridViewMenuPlugin is licensed under the terms of the
 *                  GNU Open Source LGPL 3.0
 * license.
 *
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the LGPL as published by the Free Software
 * Foundation, either version 3 of the License, or any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the LGPL License for more
 * details.
 *
 * You should have received a copy of the GNU LGPL along with
 * this program. If not, see <http://www.gnu.org/licenses/lgpl.html>.
 *
 */

Ext.ns('Ext.ux.grid');

/**
 * Renders a menu button to the upper right corner of the grid this plugin is
 * bound to. The menu items will represent the column model and hide/show
 * the columns on click.
 *
 * Note that you have to set the enableHdMenu-property of the bound grid to
 * "false" so this plugin does not interfere with the header menus of the grid's view.
 *
 * @namespace   Ext.ux.grid
 * @class       Ext.ux.grid.GridViewMenuPlugin
 * @extends     Object
 * @constructor
 *
 * @author Thorsten Suckow-Homberg <ts@siteartwork.de>
 */
Ext.ux.grid.GridViewMenuPlugin = Ext.extend(Object, {

    /**
     * The {Ext.grid.GridView} this plugin is bound to.
     * @type {Ext.grid.GridView}
     * @protected
     */
    _view : null,

    /**
     * The menu button that gets rendered to the upper right corner of the
     * grid's view.
     * @type {Ext.Element}
     * @protected
     */
    _menuBtn : null,

    /**
     * The menu that will be shown when the menu button gets clicked.
     * Named after the "colModel" property of the grid's view so this plugin
     * can easily operate in the scope of the view.
     * @type {Ext.Menu}
     */
    colMenu : null,

    /**
     * The column model of the grid this plugin is bound to.
     * Named after the "cm" property of the grid's view so this plugin
     * can easily operate in the scope of the view.
     * @type {Ext.grid.ColumnModel}
     */
    cm : null,

    /**
     * Inits this plugin.
     * Method is API-only. Will be called automatically from the grid this
     * plugin is bound to.
     *
     * @param {Ext.grid.GridPanel} grid
     *
     * @throws {Exception} throws an exception if the plugin recognizes the
     * grid's "enableHdMenu" property to be set to "true"
     */
    init : function(grid)
    {
        if (grid.enableHdMenu === true) {
            throw("Ext.ux.grid.GridViewMenuPlugin - grid's \"enableHdMenu\" property has to be set to \"false\"");
        }
        
        var v = this._view = grid.getView();
        v.afterMethod('initElements', this.initElements, this);
        v.afterMethod('initData', this.initData, this);
        v.afterMethod('onLayout', this._onLayout, this);
        v.beforeMethod('destroy', this._destroy, this);
        
        this.colMenu = new Ext.menu.Menu({
            listeners: {
                scope: this,
                beforeshow: this._beforeColMenuShow,
                itemclick: this._handleHdMenuClick
            }
        });
        
        this.colMenu.override({
            show : function(el, pos, parentMenu){
                this.parentMenu = parentMenu;
                if(!this.el){
                    this.render();
                }
                this.fireEvent("beforeshow", this);

                // show menu and constrain to viewport if necessary
                // ( + minor offset adjustments for pixel perfection)
                this.showAt(
                    this.el.getAlignToXY(el, pos || this.defaultAlign, [Ext.isWebKit? 2 : 1, 0]), 
                    parentMenu, 
                    true // true to constrain
                );
            }
        });
        

    },

// -------- listeners

    /**
     * Callback for the itemclick event of the menu.
     * Default implementation calls the view's handleHdMenuClick-method in the
     * scope of the view itself.
     *
     * @param {Ext.menu.BaseItem baseItem} item
     * @param {Ext.EventObject} e
     *
     * @return {Boolean} returns false if hiding the column represented by the
     * column is not allowed, otherwise true
     *
     * @protected
     */
    _handleHdMenuClick : function(item, e)
    {
        if (this.colMenu.items.indexOf(item) > 1) {
            return this._view.handleHdMenuClick(item, e);
        }
    },

    /**
     * Listener for the beforeshow-event of the menu.
     * Default implementation calls the view's beforeColMenuShow-method
     * in the scope of this plugin.
     *
     * Overwrite this for custom behavior.
     *
     * @param {Ext.menu.Menu} menu
     *
     * @protected
     */
    _beforeColMenuShow : function(menu)
    {
        this._view.beforeColMenuShow.call(this, menu);
        
        // menu title tweak
        this.colMenu.insert(0, new Ext.menu.Separator());
        this.colMenu.insert(0, new Ext.menu.TextItem({
            text: String.format(
                '<img src="{0}" class="x-menu-item-icon x-cols-icon" />{1}',
                Ext.BLANK_IMAGE_URL,
                this._view.columnsText
            ),
            style: 'line-height:16px;padding:3px 21px 3px 27px;'
        }));
    },

    /**
     * Listener for the click event of the menuBtn element.
     * Used internally to show the menu.
     *
     * @param {Ext.EventObject} e
     * @param {HtmlElement} t
     *
     * @protected
     */
    _handleHdDown : function(e, t)
    {
        if(Ext.fly(t).hasClass('x-grid3-hd-btn')){
            e.stopEvent();
            this.colMenu.show(t, "tr-br?");
        }
    },

// -------- helpers

    /**
     * Builds the element that gets added to teh grid's header for showing
     * the menu.
     * The default implementation will render the menu button into the upper
     * right corner of the grid.
     * Overwrite for custom behavior.
     *
     * @return {Ext.Element}
     *
     * @protected
     */
    _getMenuButton : function()
    {
        var a = document.createElement('a');
        a.className = 'ext-ux-grid-gridviewmenuplugin-menuBtn x-grid3-hd-btn';
        a.href = '#';

        return new Ext.Element(a);
    },

    /**
     * Sequenced function for storing the view's cm property,
     * Called in the scope of this plugin.
     */
    initData : function()
    {
        this.cm = this._view.cm;
    },

    /**
     * Sequenced function for adding the menuBtn to the grid's header.
     * Called in the scope of this plugin.
     */
    initElements : function()
    {
        this.menuBtn = this._getMenuButton();
        this._view.mainHd.dom.appendChild(this.menuBtn.dom);
        this.menuBtn.on("click", this._handleHdDown, this);
    },
    
    /**
     * sets the buttons size
     */
    _onLayout: function() {
        // Note: if hidden, IE returns no offsetHeight and also can not set it
        if (this._view.mainHd.dom.offsetHeight > 1) {
            this.menuBtn.dom.style.height = (this._view.mainHd.dom.offsetHeight-1)+'px';
        }
    },
    
    /**
     * Hooks into the view's destroy method and removes the menu and the menu
     * button.
     *
     * @protected
     */
    _destroy : function()
    {
        if(this.colMenu){
            this.colMenu.removeAll();
            Ext.menu.MenuMgr.unregister(this.colMenu);
            if (this.colMenu.getEl()) {
                this.colMenu.getEl().remove();
            }
            delete this.colMenu;
        }

        if(this._menuBtn){
            this._menuBtn.remove();
            delete this._menuBtn;
        }
    }

});


/***/ }),
/* 971 */
/***/ (function(module, exports) {

/**
 * Original version by harley.333
 * Updated 5/6/2011 by taylorbarstow
 *
 * FOUND HERE: http://www.sencha.com/forum/showthread.php?53118-Multiple-Cells-Selection-Model
 *
 * @licence @see https://www.sencha.com/legal/terms-of-use/
 *   Code posted on Sencha Forum is made available as is and we license to customers any
 *   rights we may have to such code under our commercial license agreement. This Code is
 *   not officially supported. Any such code is subject to the restrictions of the license
 *   for the related Sencha product.
 *
 * @class Ext.ux.grid.MultiCellSelectionModel
 * @extends Ext.grid.AbstractSelectionModel
 * Supports multiple selections and keyboard selection/navigation.
 * @constructor
 * @param {Object} config
 */
Ext.ux.grid.MultiCellSelectionModel = function(config){
    Ext.apply(this, config);
    this.selections = [];

    this.last = false;
    this.lastActive = false;

    this.addEvents(
        /**
         * @event selectionchange
         * Fires when the selection changes
         * @param {SelectionModel} this
         * @param {Array} selections A multi-dimensional array containing the indices of all selected cells ([[0,0],[1,1]])
         */
        "selectionchange",
        /**
         * @event beforecellselect
         * Fires when a cell is being selected, return false to cancel.
         * @param {Ext.ux.grid.MultiCellSelectionModel} this
         * @param {Array} cellInfo An array of cell indices ([rowIndex, columnIndex])
         * @param {Boolean} keepExisting False if other selections will be cleared
         */
        "beforecellselect",
        /**
         * @event cellselect
         * Fires when a cell is selected.
         * @param {Ext.ux.grid.MultiCellSelectionModel} this
         * @param {Array} cellInfo An array of cell indices ([rowIndex, columnIndex])
         */
        "cellselect",
        /**
         * @event celldeselect
         * Fires when a cell is deselected.
         * @param {Ext.ux.grid.MultiCellSelectionModel} this
         * @param {Array} cellInfo An array of cell indices ([rowIndex, columnIndex])
         */
        "celldeselect"
    );

    Ext.ux.grid.MultiCellSelectionModel.superclass.constructor.call(this);
};

Ext.extend(Ext.ux.grid.MultiCellSelectionModel, Ext.grid.AbstractSelectionModel,  {
    /**
     * @cfg {Boolean} singleSelect
     * True to allow selection of only one cell at a time (defaults to false)
     */
    singleSelect : false,

    /**
     * @cfg {Boolean} moveEditorOnEnter
     * False to turn off moving the editor to the next cell when the enter key is pressed
     */

    // private
    initEvents : function(){

        if(!this.grid.enableDragDrop && !this.grid.enableDrag){
            this.grid.on("cellmousedown", this.handleMouseDown, this);
        }else{ // allow click to work like normal
            this.grid.on("cellclick", function(grid, rowIndex, columnIndex, e) {
                if(e.button === 0 && !e.shiftKey && !e.ctrlKey) {
                    this.selectCell([rowIndex, columnIndex], false);
                    grid.view.focusCell(rowIndex, columnIndex);
                }
            }, this);
        }

        this.rowNav = new Ext.KeyNav(this.grid.getGridEl(), {
            "up" : function(e) {
                if (this.last == false) {
                    this.selectCell([0, 0]);
                } else if (this.lastActive[0] == 0) {
                    if (!e.shiftKey) {
                        var row = this.lastActive[0], col = this.lastActive[1];
                        this.clearSelections();
                        this.selectCell([row, col]);
                        this.grid.getView().focusCell(row, col);
                    }
                    return;
                } else {
                    var row, col;
                    row = this.lastActive[0] - 1;
                    col = this.lastActive[1];
                    if (!e.shiftKey) {
                        this.clearSelections();
                        this.selectCell([row, col]);
                    } else {
                        var last = this.last
                        this.selectRange(this.last, [row, col]);
                        this.last = last;
                    }
                    this.grid.getView().focusCell(row, col);
                    this.lastActive = [row, col];
                }
            },
            "down" : function(e) {
                if (this.last == false) {
                    this.selectCell([0, 0]);
                } else if (this.lastActive[0] == this.grid.getStore().getCount() - 1) {
                    if (!e.shiftKey) {
                        var row = this.lastActive[0], col = this.lastActive[1];
                        this.clearSelections();
                        this.selectCell([row, col]);
                        this.grid.getView().focusCell(row, col);
                    }
                    return;
                } else {
                    var row, col;
                    row = this.lastActive[0] + 1;
                    col = this.lastActive[1];
                    if (!e.shiftKey) {
                        this.clearSelections();
                        this.selectCell([row, col]);
                    } else {
                        var last = this.last
                        this.selectRange(this.last, [row, col]);
                        this.last = last;
                    }
                    this.grid.getView().focusCell(row, col);
                    this.lastActive = [row, col];
                }
            },
            "left" : function(e) {
                if (this.last == false) {
                    this.selectCell([0, 0]);
                } else if (this.lastActive[1] == 0) {
                    if (!e.shiftKey) {
                        var row = this.lastActive[0], col = this.lastActive[1];
                        this.clearSelections();
                        this.selectCell([row, col]);
                        this.grid.getView().focusCell(row, col);
                    }
                    return;
                } else {
                    var row, col;
                    row = this.lastActive[0];
                    col = this.lastActive[1] - 1;
                    if (!e.shiftKey) {
                        this.clearSelections();
                        this.selectCell([row, col]);
                    } else {
                        var last = this.last
                        this.selectRange(this.last, [row, col]);
                        this.last = last;
                    }
                    this.grid.getView().focusCell(row, col);
                    this.lastActive = [row, col];
                }
            },
            "right" : function(e) {
                if (this.last == false) {
                    this.selectCell([0, 0]);
                } else if (this.lastActive[1] == this.grid.getColumnModel().getColumnCount() - 1) {
                    if (!e.shiftKey) {
                        var row = this.lastActive[0], col = this.lastActive[1];
                        this.clearSelections();
                        this.selectCell([row, col]);
                        this.grid.getView().focusCell(row, col);
                    }
                    return;
                } else {
                    var row, col;
                    row = this.lastActive[0];
                    col = this.lastActive[1] + 1;
                    if (!e.shiftKey) {
                        this.clearSelections();
                        this.selectCell([row, col]);
                    } else {
                        var last = this.last
                        this.selectRange(this.last, [row, col]);
                        this.last = last;
                    }
                    this.grid.getView().focusCell(row, col);
                    this.lastActive = [row, col];
                }
            },
            scope: this
        });

        var view = this.grid.view;
        view.on("refresh", this.onRefresh, this);
        view.on("rowremoved", this.onRemove, this);
    },

    // private
    onRefresh : function(){
        this.clearSelections();
    },

    // private
    onRemove : function(v, index, r){
        this.deselectRange([index, 0], [index, this.grid.getColumnModel().getColumnCount()]);
    },

    /**
     * Gets the number of selected cells.
     * @return {Number}
     */
    getCount : function(){
        return this.selections.length;
    },

    /**
     * Selects the cell to the right of the last selected cell.
     * @param {Boolean} keepExisting (optional) True to keep existing selections
     * @return {Boolean} True if selection is successful, else false
     */
    selectRight : function(keepExisting){
        if(this.hasNext()){
            var row, col = this.last[1];
            if (col == this.grid.getColumnModel().getColumnCount() - 1) {
                row = this.last[0] + 1;
                col = 0;
            } else {
                row = this.last[0];
                col += 1;
            }

            this.selectCell([row, col], keepExisting);
            this.grid.getView().focusCell(this.last[0], this.last[1]);
            return true;
        }
        return false;
    },

    /**
     * Selects the cell underneath the last selected cell.
     * @param {Boolean} keepExisting (optional) True to keep existing selections
     * @return {Boolean} True if selection is successful, else false
     */
    selectDown : function(keepExisting) {
        var r, cols = this.grid.getColumnModel().getColumnCount();
        for (var i = 0; i < cols; i++) {
            r = this.selectRight(keepExisting);
            if (!r) break;
        }
        return r;
    },

    /**
     * Selects the cell above the last selected cell.
     * @param {Boolean} keepExisting (optional) True to keep existing selections
     * @return {Boolean} True if selection is successful, else false
     */
    selectUp : function(keepExisting) {
        var r, cols = this.grid.getColumnModel().getColumnCount();
        for (var i = 0; i < cols; i++) {
            r = this.selectLeft(keepExisting);
            if (!r) break;
        }
        return r;
    },

    /**
     * Selects the cell to the left of the last selected cell.
     * @param {Boolean} keepExisting (optional) True to keep existing selections
     * @return {Boolean} True if selection is successful, else false
     */
    selectLeft : function(keepExisting) {
        if (this.hasPrevious()) {
            var row, col = this.last[1];
            if (col == 0) {
                row = this.last[0] - 1;
                col = this.grid.getColumnModel().getColumnCount() - 1;
            } else {
                row = this.last[0];
                col -= 1;
            }

            this.selectCell([row, col], keepExisting);
            this.grid.getView().focusCell(this.last[0], this.last[1]);
            return true;
        }
        return false;
    },

    /**
     * Returns true if there is a next cell to select
     * @return {Boolean}
     */
    hasNext : function() {
        return this.last !== false && ((this.last[0] + 1) < this.grid.store.getCount() || (this.last[1] + 1) < this.grid.getColumnModel().getColumnCount());
    },

    /**
     * Returns true if there is a previous cell to select
     * @return {Boolean}
     */
    hasPrevious : function(){
        return this.last !== false && (this.last[0] != 0 || this.last[1] != 0);
    },


    /**
     * Returns the selected cell indices
     * @return {Array} Array of cell indices ([rowIndex, columnIndex])
     */
    getSelections : function() {
        return [].concat(this.selections);
    },

    /**
     * Returns the first selected cell index.
     * @return {Array} An array containing the row and column indexes of the first selected cell, or null if none selected.
     */
    getSelectedCell : function() {
        return this.selections.length > 0 ? [].concat(this.selections[0]) : null;
    },

    /**
     * Calls the passed function with each selection. If the function returns false, iteration is
     * stopped and this function returns false. Otherwise it returns true.
     * @param {Function} fn
     * @param {Object} scope (optional)
     * @return {Boolean} true if all selections were iterated
     */
    each : function(fn, scope) {
        var s = this.getSelections();
        for (var i = 0, len = s.length; i < len; i++) {
            if (fn.call(scope || this, s[i], i) === false) {
                return false;
            }
        }
        return true;
    },

    /**
     * Clears all selections.
     */
    clearSelections : function(){
        if(this.locked) return;
        for (var i = this.selections.length - 1; i >= 0 ; i--) {
            this.deselectCell(this.selections[i]);
        }
        this.selections = [];
        this.last = false;
    },


    /**
     * Selects all cells.
     */
    selectAll : function(){
        if(this.locked) return;
        this.selections = [];
        var row, col;
        var rowCount = this.grid.GetStore().getCount()
        var colCount = this.grid.GetColumnModel().getColumnCount()
        for(row = 0; row < rowCount; row++){
            for(col = 0; col < colCount; col++){
                this.selectCell([row, cell], true);
            }
        }
    },

    /**
     * Returns True if there is a selection.
     * @return {Boolean}
     */
    hasSelection : function(){
        return this.selections.length > 0;
    },

    /**
     * Returns True if the specified cell is selected.
     * @param {Array/Record} record The cell-index ([rowIndex, columnIndex]) to check
     * @return {Boolean}
     */
    isSelected : function(index){
        var s = this.selections;
        for (var i = 0; i < s.length; i++) {
            if (s[i][0] == index[0] && s[i][1] == index[1]) {
                return true;
            }
        }
        return false;
    },

    // private
    handleMouseDown : function(g, rowIndex, columnIndex, e){
        if(e.button !== 0 || this.isLocked()){
            return;
        };
        var view = this.grid.getView();
        if(e.shiftKey && this.last !== false){
            var last = this.last;
            this.selectRange(last, [rowIndex, columnIndex], e.ctrlKey);
            this.last = last; // reset the last
            this.lastActive = [rowIndex, columnIndex];
            view.focusCell(rowIndex, columnIndex);
        }else{
            var isSelected = this.isSelected([rowIndex, columnIndex]);
            if(e.ctrlKey && isSelected){
                this.deselectCell([rowIndex, columnIndex]);
            }else if(!isSelected || this.getCount() > 1){
                this.selectCell([rowIndex, columnIndex], e.ctrlKey || e.shiftKey);
                view.focusCell(rowIndex, columnIndex);
            }
        }
    },

    /**
     * Selects multiple cells.
     * @param {Array} cells Array of the indices ([rowIndex, columnIndex]) of the cells to select
     * @param {Boolean} keepExisting (optional) True to keep existing selections (defaults to false)
     */
    selectCells : function(cells, keepExisting){
        if(!keepExisting){
            this.clearSelections();
        }
        for(var i = 0, len = cells.length; i < len; i++){
            this.selectCell(cells[i], true);
        }
    },

    /**
     * Selects a range of cells. All cells in between startCell and endCell are also selected.
     * @param {Array} startCell The index of the first cell ([rowIndex, columnIndex]) in the range
     * @param {Array} endCell The index of the last cell ([rowIndex, columnIndex]) in the range
     * @param {Boolean} keepExisting (optional) True to retain existing selections
     */
    selectRange : function(startCell, endCell, keepExisting){
        if(this.locked) return;
        if(!keepExisting){
            this.clearSelections();
        }
        var row, col, colCount;
        var startRow = startCell[0];
        var startCol = startCell[1];
        var endRow = endCell[0];
        var endCol = endCell[1];
        if (endRow < startRow) {
            // flip 'em
            row = endRow;
            endRow = startRow;
            startRow = row;
        }
        if (endCol < startCol) {
            // flip 'em
            col = endCol;
            endCol = startCol;
            startCol = col;
        }
        for (row = startRow; row <= endRow; row++) {
            for (col = startCol; col <= endCol; col++) {
                this.selectCell([row, col], true);
            }
        }
    },

    /**
     * Deselects a range of cells. All cells in between startCell and endCell are also deselected.
     * @param {Array} startCell The index of the first cell ([rowIndex, columnIndex]) in the range
     * @param {Array} endCell The index of the last cell ([rowIndex, columnIndex]) in the range
     */
    deselectRange : function(startCell, endCell, preventViewNotify) {
        if(this.locked) return;
        var row, col, colCount;
        var startRow = startCell[0];
        var startCol = startCell[1];
        var endRow = endCell[0];
        var endCol = endCell[1];
        if (endRow < startRow) {
            // flip 'em
            row = endRow;
            endRow = startRow;
            startRow = row;
        }
        if (endCol < startCol) {
            // flip 'em
            col = endCol;
            endCol = startCol;
            startCol = col;
        }
        for (row = startRow; row <= endRow; row++) {
            for (col = startCol; col <= endCol; col++) {
                this.deselectCell([row, col], preventViewNotify);
            }
        }
    },

    /**
     * Selects a cell.
     * @param {Array} cell The index of the cell ([rowIndex, columnIndex]) to select
     * @param {Boolean} keepExisting (optional) True to keep existing selections
     */
    selectCell : function(index, keepExisting, preventViewNotify){
        if (this.locked) return;
        if (this.isSelected(index)) return;
        var row = index[0];
        var col = index[1];
        if (row < 0 || row >= this.grid.store.getCount()) return;
        if (col < 0 || col >= this.grid.getColumnModel().getColumnCount()) return;

        if (this.fireEvent("beforecellselect", this, index, keepExisting) !== false) {
            if (!keepExisting || this.singleSelect) {
                this.clearSelections();
            }
            this.selections.push(index);
            this.last = this.lastActive = index;
            if(!preventViewNotify) {
                this.grid.getView().onCellSelect(row, col);
            }
            this.fireEvent("cellselect", this, index);
            this.fireEvent("selectionchange", this, [].concat(this.selections));
        }
    },

    /**
     * Deselects a cell.
     * @param {Array} cell The index of the cell ([rowIndex, columnIndex]) to deselect
     */
    deselectCell : function(index, preventViewNotify){
        if (this.locked) return;
        if (this.last[0] == index[0] && this.last[1] == index[1]) {
            this.last = false;
        }
        if (this.lastActive[0] == index[0] && this.lastActive[1] == index[1]) {
            this.lastActive = false;
        }

        var s = this.selections;
        for (var i = 0; i < s.length; i++) {
            if (s[i][0] == index[0] && s[i][1] == index[1]) {
                this.selections.remove(s[i]);
                if (!preventViewNotify) {
                    this.grid.getView().onCellDeselect(index[0], index[1]);
                }
                this.fireEvent("celldeselect", this, index);
                this.fireEvent("selectionchange", this, [].concat(this.selections));
                return;
            }
        }

    },

    // private
    acceptsNav : function(row, col, cm){
        return !cm.isHidden(col) && cm.isCellEditable(col, row);
    },

    // private
    onEditorKey : function(field, e){
        var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor;
        var shift = e.shiftKey;
        if (k == e.TAB || k == e.ENTER) {
            e.stopEvent();
            g.stopEditing();
            this.clearSelections();

            var row, col, delta = shift ? -1 : 1;
            if (k == e.TAB) {
                newCell = g.walkCells(ed.row, ed.col+delta, delta, this.acceptsNav, this);
            } else {
                newCell = g.walkCells(ed.row+delta, ed.col, delta, this.acceptsNav, this);
            }

            if (newCell) {
                g.startEditing(newCell[0], newCell[1]);
            } else {
                this.selectCell([ed.row, ed.col]);
                g.getView().focusCell(ed.row, ed.col);
            }
        } else if (k == e.ESC) {
            g.stopEditing(true);
            this.selectCell([ed.row, ed.col]);
            g.getView().focusCell(ed.row, ed.col);
        }
    }
});

/***/ }),
/* 972 */
/***/ (function(module, exports) {


Ext.ns('Ext.ux.file');

/**
 * a simple file upload manager
 * collects all uploads
 * 
 * @namespace   Ext.ux.file
 * @class       Ext.ux.file.UploadManager
 */
Ext.ux.file.UploadManager = function(config) {
    
    Ext.apply(this, config);
    Ext.ux.file.UploadManager.superclass.constructor.apply(this, arguments);
    
    this.uploads = {};
    
    this.addEvents(
        /**
         * @event uploadcomplete
         * Fires when the upload was done successfully 
         * @param {Ext.ux.file.Upload} this
         * @param {Ext.Record} Ext.ux.file.Upload.file
         */
         'uploadcomplete',
        /**
         * @event uploadfailure
         * Fires when the upload failed 
         * @param {Ext.ux.file.Upload} this
         * @param {Ext.Record} Ext.ux.file.Upload.file
         */
         'uploadfailure',
        /**
         * @event uploadprogress
         * Fires on upload progress (html5 only)
         * @param {Ext.ux.file.Upload} this
         * @param {Ext.Record} Ext.ux.file.Upload.file
         * @param {XMLHttpRequestProgressEvent}
         */
         'uploadprogress',
         /**
          * @event uploadstart
          * Fires on upload progress (html5 only)
          * @param {Ext.ux.file.Upload} this
          * @param {Ext.Record} Ext.ux.file.Upload.file
          */
          'uploadstart',
         /**
          * @event uploadstart
          * Fires on upload progress (html5 only)
          * @param {Ext.ux.file.Upload} this
          * @param {Ext.Record} Ext.ux.file.Upload.file
          */
         'update'
    );
};
    
Ext.extend(Ext.ux.file.UploadManager, Ext.util.Observable, {
        /**
         * @cfg {Int} number of allowed concurrent uploads
         */
        maxConcurrentUploads: 3,
        
        /**
         * current running uploads
         */
        runningUploads: 0,
        
        /**
         * @cfg (String) upload id prefix
         */
        uploadIdPrefix: "tine-upload-",

        /**
         * holds the uploads
         */
        uploads: null,

        /**
         * counts session uploads
         */
        uploadCount: 0,

        /**
         * every upload in the upload manager gets queued initially
         * 
         * @param upload {Ext.ux.file.Upload} Upload object
         * @returns {String} upload id
         */
        queueUpload: function(upload) {
            var uploadId = this.uploadIdPrefix + (1000 + this.uploadCount++).toString();
            if(upload.id && upload.id !== -1) {
                uploadId = upload.id;
            }
            upload.id = uploadId;
            
            this.uploads[uploadId] = upload;
            this.relayEvents(upload, ['update']);
            
            upload.on('uploadcomplete', this.onUploadComplete, this);
            
            return uploadId;
        },

        /**
         * starts the upload
         * 
         * @param id {String} upload id
         * @returns {Ext.ux.file.Upload.file} upload file record
         */
        upload: function(id) {
            return this.uploads[id].upload();
        },

        /**
         * returns upload by id
         * 
         * @param id {String} upload id
         * @returns (Ext.ux.file.Upload} Upload object
         */
        getUpload: function(id) {
            return this.uploads[id];
        },

        /**
         * remove upload from the upload manager
         * 
         * @param {String} upload id
         */
        unregisterUpload: function(id) {
            delete this.uploads[id];
        },
        
        
        /**
         * indicates whether the HTML5 chunked upload is available
         * 
         * @returns {Boolean}
         */
        isHtml5ChunkedUpload: function() {

          if(window.File == undefined) return false;
          if(this.isHostMethod(File.prototype, 'slice') || this.isHostMethod(File.prototype, 'mozSlice') || this.isHostMethod(File.prototype, 'webkitSlice')) {
              return true;
          }
          else {
              return false;
          }
          
        },
        
        /**
         * checks for the existance of a method of an object
         * 
         * @param object    {Object}
         * @param property  {String} method name 
         * @returns {Boolean}
         */
        isHostMethod: function (object, property) {
            var t = typeof object[property];
            return t == 'function' || (!!(t == 'object' && object[property])) || t == 'unknown';
        },
        
        /**
         * are there as much as allowed uploads in progress
         * 
         * @returns {Boolean}
         */
        isBusy: function() {
            return (this.maxConcurrentUploads == this.runningUploads);
        },
        
        /**
         * are there uploads in progress or queued
         */
        isUploadsPending: function (){
            return (this.uploads.length > 0);
        },
        
        /**
         * on upload complete handler
         */
        onUploadComplete: function() {
            
            Tine.Tinebase.uploadManager.runningUploads 
                = Math.max(0, Tine.Tinebase.uploadManager.runningUploads - 1);
    
            for(var uploadKey in Tine.Tinebase.uploadManager.uploads){

                var upload = Tine.Tinebase.uploadManager.uploads[uploadKey];
                if(upload.isQueued() && !upload.isPaused() && !Tine.Tinebase.uploadManager.isBusy()) {
                    upload.setQueued(false);
                    upload.resumeUpload();
                    
                    break;
                }
           }
            
        }, 
        
        /**
         * on upload start handler
         */
        onUploadStart: function() {
            Tine.Tinebase.uploadManager.runningUploads 
                = Math.min(Tine.Tinebase.uploadManager.maxConcurrentUploads, Tine.Tinebase.uploadManager.runningUploads + 1);
        }
    
});


/***/ }),
/* 973 */
/***/ (function(module, exports) {

/* Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Martin Jatho <m.jatho@metaways.de>
 * @copyright   Copyright (c) 2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux.file');

/**
 * a simple file upload
 * objects of this class represent a single file uplaod
 * 
 * @namespace   Ext.ux.file
 * @class       Ext.ux.file.Upload
 * @extends     Ext.util.Observable
 * 
 * @constructor
 * @param       Object config
 */
Ext.ux.file.Upload = function(config) {
    
    Ext.apply(this, config);
    
    Ext.ux.file.Upload.superclass.constructor.apply(this, arguments);
    
    this.addEvents(
        /**
         * @event uploadcomplete
         * Fires when the upload was done successfully 
         * @param {Ext.ux.file.Upload} this
         * @param {Ext.Record} Ext.ux.file.Upload.file
         */
         'uploadcomplete',
        /**
         * @event uploadfailure
         * Fires when the upload failed 
         * @param {Ext.ux.file.Upload} this
         * @param {Ext.Record} Ext.ux.file.Upload.file
         */
         'uploadfailure',
        /**
         * @event uploadprogress
         * Fires on upload progress (html5 only)
         * @param {Ext.ux.file.Upload} this
         * @param {Ext.Record} Ext.ux.file.Upload.file
         * @param {XMLHttpRequestProgressEvent}
         */
         'uploadprogress',
         /**
          * @event uploadstart
          * Fires on upload progress (html5 only)
          * @param {Ext.ux.file.Upload} this
          * @param {Ext.Record} Ext.ux.file.Upload.file
          */
          'uploadstart',
         /**
          * @event uploadstart
          * Fires on upload progress (html5 only)
          * @param {Ext.ux.file.Upload} this
          * @param {Ext.Record} Ext.ux.file.Upload.file
          */
         'update'
    );
        
    if (! this.file && this.fileSelector) {
        this.file = this.fileSelector.getFileList()[0];
    }
    
    this.fileSize = (this.file.size ? this.file.size : this.file.fileSize);

    this.maxChunkSize = this.maxPostSize - 16384;
    this.currentChunkSize = this.maxChunkSize;
    
    this.tempFiles = [];
};
 

Ext.extend(Ext.ux.file.Upload, Ext.util.Observable, {
    
    id: -1,
    
    /**
     * @cfg {Int} maxFileUploadSize the maximum file size for traditinal form updoads
     */
    maxFileUploadSize: 20971520, // 20 MB
    /**
     * @cfg {Int} maxPostSize the maximum post size used for html5 uploads
     */
    maxPostSize: 20971520, // 20 MB
    /**
     * @property maxChunkSize the maximum chunk size used for html5 uploads
     * @type Int
     */
    maxChunkSize: 20955136,
    /**
     * @cfg {Int} minChunkSize the minimal chunk size used for html5 uploads
     */
    minChunkSize: 102400,
    
    /**
     *  max number of upload retries
     */
    MAX_RETRY_COUNT: 10,
    
    /**
     *  retry timeout in milliseconds
     */
    RETRY_TIMEOUT_MILLIS: 3000,
    
    /**
     *  retry timeout in milliseconds
     */
    CHUNK_TIMEOUT_MILLIS: 100,
    
    /**
     * @cfg {String} url the url we upload to
     */
    url: 'index.php',
    /**
     * @cfg {Ext.ux.file.BrowsePlugin} fileSelector
     * a file selector
     */
    fileSelector: null,
    
    /**
     * coresponding file record
     */
    fileRecord: null,
    
    /**
     * currentChunk to upload
     */
    currentChunk: null,
       
    /**
     * uploadPath
     */
    uploadPath: '/',
    
    /**
     * file to upload
     */
    file: null,
    
    /**
     * is this upload paused
     */
    paused: false,
    
    /**
     * is this upload queued
     */
    queued: false,    
    
    /**
     * collected tempforary files
     */
    tempFiles: new Array(),
    
    /**
     * did the last chunk upload fail
     */
    lastChunkUploadFailed: false,
    
    /**
     * current chunk to upload
     */
    currentChunk: null,
    
    /**
     * how many retries were made while trying to upload current chunk
     */
    retryCount: 0,
    
    /**
     * size of the current chunk
     */
    currentChunkSize: 0,
    
    /**
     * where the chunk begins in file (byte number)
     */
    currentChunkPosition: 0,
    
    /**
     * size of the file to upload
     */
    fileSize: 0,

    /**
     * method for uploading temp file
     */
    uploadTempFileMethod: 'Tinebase.uploadTempFile',
    
    /**
     * creates a form where the upload takes place in
     * @private
     */
    createForm: function() {
        var form = Ext.getBody().createChild({
            tag:'form',
            action:this.url,
            method:'post',
            cls:'x-hidden',
            id:Ext.id(),
            cn:[{
                tag: 'input',
                type: 'hidden',
                name: 'MAX_FILE_SIZE',
                value: this.maxFileUploadSize
            }]
        });
        return form;
    },
    
    /**
     * perform the upload
     * 
     * @return {Ext.Record} Ext.ux.file.Upload.file
     */
    upload: function() {
        if ((
                (! Ext.isGecko && window.XMLHttpRequest && window.File && window.FileList) || // safari, chrome, ...?
                (Ext.isGecko && window.FileReader) // FF
        ) && this.file) {
     
            // free browse plugin
            this.getInput();
            
            if (this.isHtml5ChunkedUpload()) {
                // calculate optimal maxChunkSize
                // TODO: own method for chunked upload
                
                var chunkMax = this.maxChunkSize;
                var chunkMin = this.minChunkSize;
                var actualChunkSize = this.maxChunkSize;

                if (this.fileSize > 5 * chunkMax) {
                    actualChunkSize = chunkMax;
                } else {
                    actualChunkSize = Math.max(chunkMin, this.fileSize / 5);
                }       
                this.maxChunkSize = actualChunkSize;
                
                if (Tine.Tinebase.uploadManager && Tine.Tinebase.uploadManager.isBusy()) {
                    this.createFileRecord(true);
                    this.setQueued(true);
                } else {
                    this.createFileRecord(false);
                    this.fireEvent('uploadstart', this);
                    this.fireEvent('update', 'uploadstart', this, this.fileRecord);
                    this.html5ChunkedUpload();
                }
                
                return this.fileRecord;

            } else {
                this.createFileRecord(false);
                this.fireEvent('uploadstart', this);
                this.fireEvent('update', 'uploadstart', this, this.fileRecord);
                this.html5upload();
                
                return this.fileRecord;
            }
        } else {
            return this.html4upload();
        }

    },
    
    /**
     * 2010-01-26 Current Browsers implemetation state of:
     *  http://www.w3.org/TR/FileAPI
     *  
     *  Interface: File | Blob | FileReader | FileReaderSync | FileError
     *  FF       : yes  | no   | no         | no             | no       
     *  safari   : yes  | no   | no         | no             | no       
     *  chrome   : yes  | no   | no         | no             | no       
     *  
     *  => no json rpc style upload possible
     *  => no chunked uploads posible
     *  
     *  But all of them implement XMLHttpRequest Level 2:
     *   http://www.w3.org/TR/XMLHttpRequest2/
     *  => the only way of uploading is using the XMLHttpRequest Level 2.
     */
    html5upload: function() {
                 
        // TODO: move to upload method / checks max post size
        if(this.maxPostSize/1 < this.file.size/1 && !this.isHtml5ChunkedUpload()) {
            this.fileRecord.html5upload = true;
            this.onUploadFail(null, null, this.fileRecord);
            return this.fileRecord;
        }
        
        var defaultHeaders = {
            "Content-Type"          : "application/octet-stream",
            "X-Tine20-Request-Type" : "HTTP",
            "X-Requested-With"      : "XMLHttpRequest"
        };
        
        var xmlData = this.file;
               
        if(this.isHtml5ChunkedUpload()) {
            xmlData = this.currentChunk;
        }

        var conn = new Ext.data.Connection({
            disableCaching: true,
            method: 'POST',
            url: this.url + '?method=' + this.uploadTempFileMethod,
            timeout: 300000, // 5 mins
            defaultHeaders: defaultHeaders
        });
                
        var transaction = conn.request({
            headers: {
                "X-File-Name"           : window.btoa(unescape(encodeURIComponent(this.fileRecord.get('name')))),
                "X-File-Type"           : this.fileRecord.get('type'),
                "X-File-Size"           : this.fileRecord.get('size')
            },
            xmlData: xmlData,
            success: this.onUploadSuccess.createDelegate(this, null, true),
            failure: this.onUploadFail.createDelegate(this, null, true) 
        });

        return this.fileRecord;
    },

    /**
     * Starting chunked file upload
     * 
     * @param {Boolean} whether this restarts a paused upload
     */
    html5ChunkedUpload: function() {
        this.prepareChunk();
        this.html5upload();
    },
    
    /**
     * resume this upload
     */
    resumeUpload: function() {
        this.setPaused(false);
        this.html5ChunkedUpload();
    },
    
    /**
     * calculation the next chunk size and slicing file
     */
    prepareChunk: function() {
        
        if(this.lastChunkUploadFailed) {
            this.currentChunkPosition = Math.max(0
                    , this.currentChunkPosition - this.currentChunkSize);

            this.currentChunkSize = Math.max(this.minChunkSize, this.currentChunkSize / 2);
        }
        else {
            this.currentChunkSize = Math.min(this.maxChunkSize, this.currentChunkSize * 2);
        }
        this.lastChunkUploadFailed = false;
        
        var nextChunkPosition = Math.min(this.fileSize, this.currentChunkPosition 
                +  this.currentChunkSize);
        var newChunk = this.sliceFile(this.file, this.currentChunkPosition, nextChunkPosition);
        
        if(nextChunkPosition/1 == this.fileSize/1) {
            this.lastChunk = true;
        }
                     
        this.currentChunkPosition = nextChunkPosition;
        this.currentChunk = newChunk;
       
    },
    
    /**
     * Setting final fileRecord states
     */
    finishUploadRecord: function(response) {
        
        response = Ext.util.JSON.decode(response.responseText);
        if(response.tempFile) {
            response = response.tempFile;
        }
                
        if(response.error == 0) {
            this.fileRecord.beginEdit();
            this.fileRecord.set('size', response.size);
            this.fileRecord.set('id', response.id);
            this.fileRecord.set('progress', 99);
            this.fileRecord.set('tempFile', '');
            this.fileRecord.set('tempFile', response);
            this.fileRecord.commit(false);
            this.fireEvent('uploadcomplete', this, this.fileRecord);
            this.fireEvent('update', 'uploadcomplete', this, this.fileRecord);

        }       
        else {
            this.fileRecord.beginEdit();
            this.fileRecord.set('status', 'failure');
            this.fileRecord.set('progress', -1);
            this.fileRecord.set('tempFile', '');
            this.fileRecord.set('tempFile', response);
            this.fileRecord.commit(false);
            this.fireEvent('update', 'uploadfailure', this, this.fileRecord);
                       
        }
                
    },
    
   
    /**
     * executed if a chunk or file got uploaded successfully
     */
    onUploadSuccess: function(response, options, fileRecord) {
        
        var responseObj = Ext.util.JSON.decode(response.responseText);

        this.retryCount = 0;

        if(responseObj.status && responseObj.status !== 'success') {
            this.onUploadFail(responseObj, options, fileRecord);
        }

        this.fileRecord.beginEdit();
        this.fileRecord.set('tempFile', responseObj.tempFile);
        this.fileRecord.set('size', 0);
        this.fileRecord.commit(false);

        this.fireEvent('update', 'uploadprogress', this, this.fileRecord);
        
        if(! this.isHtml5ChunkedUpload()) {

            this.finishUploadRecord(response);
        }       
        else {

            this.addTempfile(this.fileRecord.get('tempFile'));
            var percent = parseInt(this.currentChunkPosition * 100 / this.fileSize/1);
            
            if(this.lastChunk) {
                percent = 98;
            }

            this.fileRecord.beginEdit();
            this.fileRecord.set('progress', percent);
            this.fileRecord.commit(false);

            if(this.lastChunk) {

                window.setTimeout((function() {
                    Ext.Ajax.request({
                        timeout: 10*60*1000, // Overriding Ajax timeout - important!
                        params: {
                        method: 'Tinebase.joinTempFiles',
                        tempFilesData: this.tempFiles
                    },
                    success: this.finishUploadRecord.createDelegate(this), 
                    failure: this.finishUploadRecord.createDelegate(this)
                    });
                }).createDelegate(this), this.CHUNK_TIMEOUT_MILLIS);

            }
            else {
                window.setTimeout((function() {
                    if(!this.isPaused()) {
                        this.prepareChunk();
                        this.html5upload();
                    }
                }).createDelegate(this), this.CHUNK_TIMEOUT_MILLIS);
            }                                               

        }  

    },


    /**
     * executed if a chunk / file upload failed
     */
    onUploadFail: function(response, options, fileRecord) {

        if (this.isHtml5ChunkedUpload()) {
            
            this.lastChunkUploadFailed = true;
            this.retryCount++;
            
            if (this.retryCount > this.MAX_RETRY_COUNT) {
                
                this.fileRecord.beginEdit();
                this.fileRecord.set('status', 'failure');
                this.fileRecord.endEdit();

                this.fireEvent('update', 'uploadfailure', this, this.fileRecord);
            }
            else {
                window.setTimeout((function() {
                    this.prepareChunk();
                    this.html5upload();
                }).createDelegate(this), this.RETRY_TIMEOUT_MILLIS);
            }
        }
        else {
            this.fileRecord.beginEdit();
            this.fileRecord.set('status', 'failure');
            this.fileRecord.endEdit();

            this.fireEvent('update', 'uploadfailure', this, this.fileRecord);
        }
    },
    
    
    /**
     * uploads in a html4 fashion
     * 
     * @return {Ext.data.Connection}
     */
    html4upload: function() {
                
        var form = this.createForm();
        var input = this.getInput();
        form.appendChild(input);
        
        this.fileRecord = new Ext.ux.file.Upload.file({
            name: this.fileSelector.getFileName(),
            size: 0,
            type: this.fileSelector.getFileCls(),
            input: input,
            form: form,
            status: 'uploading',
            progress: 0
        });
        
        this.fireEvent('update', 'uploadprogress', this, this.fileRecord);
        
        if(this.maxFileUploadSize/1 < this.file.size/1) {
            this.fileRecord.html4upload = true;
            this.onUploadFail(null, null, this.fileRecord);
            return this.fileRecord;
        }
        
        Ext.Ajax.request({
            fileRecord: this.fileRecord,
            isUpload: true,
            method:'post',
            form: form,
            success: this.onUploadSuccess.createDelegate(this, [this.fileRecord], true),
            failure: this.onUploadFail.createDelegate(this, [this.fileRecord], true),
            params: {
                method: this.uploadTempFileMethod,
                requestType: 'HTTP'
            }
        });
        
        return this.fileRecord;
    },
    
    /**
     * creating initial fileRecord for this upload
     */
    createFileRecord: function(pending) {
               
        var status = "uploading";
        if(pending) {
            status = "pending";
        }

        this.fileRecord = new Ext.ux.file.Upload.file({
            name: this.file.name ? this.file.name : this.file.fileName,  // safari and chrome use the non std. fileX props
            type: (this.file.type ? this.file.type : this.file.fileType), // missing if safari and chrome
            size: 0,
            status: status,
            progress: 0,
            input: this.file,
            uploadKey: this.id
        });
        
        this.fireEvent('update', 'uploadprogress', this, this.fileRecord);

    },
   
    /** 
     * adding temporary file to array 
     * 
     * @param tempfile to add
     */
    addTempfile: function(tempFile) {
        this.tempFiles.push(tempFile);
        return true;
    },
    
    /**
     * returns the temporary files
     * 
     * @returns {Array} temporary files
     */
    getTempfiles: function() {
        return this.tempFiles;
    },
    
    /**
     * pause oder resume file upload
     * 
     * @param paused {Boolean} set true to pause file upload
     */
    setPaused: function(paused) {
        this.paused = paused;
        
        var pausedState = 'paused';
        if(!this.paused) {
            pausedState = 'uploading';
        }
            
        this.fileRecord.beginEdit();
        this.fileRecord.set('status', pausedState);
        this.fileRecord.endEdit();
        this.fireEvent('update', 'uploadpaused', this, this.fileRecord);
    },
    
    /**
     * indicates whether this upload ist paused
     * 
     * @returns {Boolean}
     */
    isPaused: function() {
        return this.paused;
    },
    
    /**
     * checks for the existance of a method of an object
     * 
     * @param object    {Object}
     * @param property  {String} method name 
     * @returns {Boolean}
     */
    isHostMethod: function (object, property) {
        var t = typeof object[property];
        return t == 'function' || (!!(t == 'object' && object[property])) || t == 'unknown';
    },
    
    /**
     * indicates whether the current browser supports der File.slice method
     * 
     * @returns {Boolean}
     */
    isHtml5ChunkedUpload: function() {
                    
        if(window.File == undefined) return false;
        if(this.isHostMethod(File.prototype, 'slice') || this.isHostMethod(File.prototype, 'mozSlice') || this.isHostMethod(File.prototype, 'webkitSlice')) {
            return this.fileSize > this.minChunkSize;
        }
        else {
            return false;
        }
    },
    
    // private
    getInput: function() {
        // NOTE: when a file got downloaded via url (CORS/xhr2) we don't have a input here
        if (! this.input && this.fileSelector && Ext.isFunction(this.fileSelector.detachInputFile)) {
            this.input = this.fileSelector.detachInputFile();
        }
        
        return this.input;
    },

    /**
     * slices the given file
     * 
     * @param file  File object
     * @param start start position
     * @param end   end position            
     * @param type  file type
     * @returns
     */
    sliceFile: function(file, start, end, type) {
        
        if(file.slice) {
            return file.slice(start, end);
        }
        else if(file.mozSlice) {
            return file.mozSlice(start, end, type);
        }
        else if(file.webkitSlice) {
            return file.webkitSlice(start, end);
        }
        else {
            return false;
        }
        
    },
    
    /**
     * sets dthe queued state of this upload
     * 
     * @param queued {Boolean}
     */
    setQueued: function (queued) {
        this.queued = queued;
        
        var queuedState = 'queued';
        if(!this.queued) {
            queuedState = 'uploading';
        }
            
        this.fileRecord.beginEdit();
        this.fileRecord.set('status', queuedState);
        this.fileRecord.endEdit();
        
        this.fireEvent('update', 'uploadqueued', this, this.fileRecord);
        
    },
    
    /**
     * indicates whether this upload is queued
     * 
     * @returns {Boolean}
     */
    isQueued: function() {
        return this.queued;
    }
    
            
});

/**
 * upload file record
 */
Ext.ux.file.Upload.file = Ext.data.Record.create([
    {name: 'id', type: 'text', system: true},
    {name: 'uploadKey', type: 'text', system: true},
    {name: 'name', type: 'text', system: true},
    {name: 'size', type: 'number', system: true},
    {name: 'type', type: 'text', system: true},
    {name: 'status', type: 'text', system: true},
    {name: 'progress', type: 'number', system: true},
    {name: 'form', system: true},
    {name: 'input', system: true},
    {name: 'url', system: true},
    {name: 'request', system: true},
    {name: 'path', system: true},
    {name: 'tempFile', system: true}
]);

Ext.ux.file.Upload.file.getFileData = function(file) {
    return Ext.copyTo({}, file.data, ['tempFile', 'name', 'path', 'size', 'type', 'id']);
};


/***/ }),
/* 974 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Tine 2.0
 *
 * @license      New BSD License
 * @author       loeppky - based on the work done by MaximGB in Ext.ux.UploadDialog (http://extjs.com/forum/showthread.php?t=21558)
 * @author       Michael Spahn <m.spahn@metaways.de>
 * @copyright    Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Ext.ux.file');

/**
 * @namespace   Ext.ux.file
 * @class       Ext.ux.file.BrowsePlugin
 * @param       {Object} config Configuration options
 */
Ext.ux.file.BrowsePlugin = function (config) {
    Ext.apply(this, config);
};

/**
 * @TODO: proxy mouse events
 */
Ext.ux.file.BrowsePlugin.prototype = {
    /**
     * @cfg {Boolean} multiple
     * allow multiple files to be selected (HTML 5 only)
     */
    multiple: false,
    /**
     * @cfg {Ext.Element} dropEl
     * element used as drop target if enableFileDrop is enabled
     */
    dropEl: null,
    /**
     * @cfg {Boolean} enableFileDrop
     * @see http://www.w3.org/TR/2008/WD-html5-20080610/editing.html
     *
     * enable drops from OS (defaults to true)
     */
    enableFileDrop: true,
    /**
     * @cfg {Boolean} enableFileDialog
     *
     * enable file dialog on click(defaults to true)
     */
    enableFileDialog: true,
    /**
     * @cfg {String} inputFileName
     * Name to use for the hidden input file DOM element.  Deaults to "file".
     */
    inputFileName: 'file',
    /**
     * @cfg {Function} onBrowseButtonClick
     */
    onBrowseButtonClick: Ext.emptyFn,
    /**
     * @property inputFileEl
     * @type Ext.Element
     * Element for the hidden file input.
     * @private
     */
    input_file: null,
    /**
     * @cfg handler
     * @type Function
     * The handler originally defined for the Ext.Button during construction using the "handler" config option.
     * We need to null out the "handler" property so that it is only called when a file is selected.
     * @private
     */
    handler: null,
    /**
     * @cfg scope
     * @type Object
     * The scope originally defined for the Ext.Button during construction using the "scope" config option.
     * While the "scope" property doesn't need to be nulled, to be consistent with handler, we do.
     * @private
     */
    scope: null,

    currentTreeNodeUI: null,

    /**
     * @see Ext.Button.initComponent
     */
    init: function (cmp) {
        this.component = cmp;

        if (cmp.handler && !Ext.isFunction(this.handler)) {
            this.handler = cmp.handler;
            cmp.handler = null;
            this.scope = cmp.scope || window;
            cmp.scope = null;
        }

        cmp.on('afterrender', this.onRender, this);
        cmp.on('destroy', this.onDestroy, this);
    },

    /**
     * drag and drop
     */
    onDragLeave: function (e) {
        e.stopPropagation();
        e.preventDefault();
        this.component.el.applyStyles(' background-color: transparent');
    },

    onDragOver: function (e) {
        e.stopPropagation();
        e.preventDefault();
        this.component.el.applyStyles(' background-color: #ebf0f5');
    },

    onDrop: function (e) {
        e.stopPropagation();
        e.preventDefault();
        this.component.el.applyStyles(' background-color: transparent');
        this.onBrowseButtonClick();
        var me = this;

        // easy cope with directories
        var fs = __webpack_require__(975),
            dt = e.browserEvent.dataTransfer;
            fs.getDataTransferFiles(dt).then(function(files) {
                me.onInputFileChange(e, window.lodash.map(files, 'fileObject'));
            });
    },

    onRender: function () {
        var me = this;

        if (me.enableFileDialog) {
            me.component.on('enable', this.onEnable, this);
            me.component.on('disable', this.onDisable, this);
            me.component.el.dom.addEventListener('click', function () {
                me.input_file.click();
            });
            me.createInputFile();
        }
        if (me.enableFileDrop && !Ext.isIE) {
            if (me.dropElSelector) {
                me.dropEl = me.component.el.up(me.dropElSelector);
            } else {
                me.dropEl = me.component.el;
            }

            me.dropEl.on('dragleave', me.onDragLeave, me);
            me.dropEl.on('dragover', me.onDragOver, me);
            me.dropEl.on('drop', me.onDrop, me);
        }
    },

    /**
     * clean up
     */
    onDestroy: function () {
        this.input_file = null;
        if (this.dropEl) {
            this.dropEl.un('dragleave', this.onDragLeave, this);
            this.dropEl.un('dragover', this.onDragOver, this);
            this.dropEl.un('drop', this.onDrop, this);
            this.dropEl = null;
        }
    },

    onEnable: function () {
        this.setDisabled(false);
    },

    onDisable: function () {
        this.setDisabled(true);
    },

    setDisabled: function (disabled) {
        this.input_file.disabled = disabled;
    },

    createInputFile: function () {
        this.input_file = document.createElement('input');
        this.input_file.setAttribute('name', this.inputFileName || Ext.id(this.component.el));
        this.input_file.setAttribute('type', 'file');
        this.input_file.setAttribute('style', 'display: none;');
        this.input_file.multiple = this.multiple;
        this.component.el.dom.appendChild(this.input_file);

        this.input_file.addEventListener('change', this.onInputFileChange.bind(this), false);
        this.input_file.addEventListener('click', function (e) {
            e.stopPropagation();
        });
    },

    /**
     * Handler when inputFileEl changes value (i.e. a new file is selected).
     * @param {FileList} files when input comes from drop...
     * @private
     */
    onInputFileChange: function (e, files) {
        var _ = window.lodash;

        if (files) {
            this.files = files;
        } else {
            if (e.dataTransfer) {
                this.files = e.dataTransfer.files;
            } else {
                this.files = e.target.files;
            }
        }

        if (!_.isFunction(e.getTarget)) {
            // backwards compatibility
            e.getTarget = function () {
                return this.target;
            };
        }

        if (this.handler) {
            this.handler.call(this.scope, this, e);
        }
    },

    getFileList: function () {
        return this.files;
    },

    /**
     * @return {Ext.Element} the input file element
     */
    getInputFile: function () {
        return this.input_file;
    },

    /**
     * get file name
     * @return {String}
     */
    getFileName: function () {
        var file = this.getFileList()[0];
        return file.name ? file.name : file.fileName;
    },

    /**
     * returns file class based on name extension
     * @return {String} class to use for file type icon
     */
    getFileCls: function () {

        var fparts = this.getFileName().split('.');
        if (fparts.length === 1) {
            return '';
        }
        else {
            return fparts.pop().toLowerCase();
        }
    },

    isImage: function () {
        var cls = this.getFileCls();
        return (cls === 'jpg' || cls === 'gif' || cls === 'png' || cls === 'jpeg');
    }
};

Ext.preg('ux.browseplugin', Ext.ux.file.BrowsePlugin);


/***/ }),
/* 975 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, '__esModule', { value: true });

function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }

var _Promise = _interopDefault(__webpack_require__(976));
var mimeTypes = _interopDefault(__webpack_require__(998));

var DEFAULT_FILES_TO_IGNORE = ['.DS_Store', // OSX indexing file
'Thumbs.db' // Windows indexing file
];

function shouldIgnoreFile(file) {
  return DEFAULT_FILES_TO_IGNORE.indexOf(file.name) >= 0;
}

function traverseDirectory(entry) {
  var reader = entry.createReader();
  // Resolved when the entire directory is traversed
  return new _Promise(function (resolveDirectory) {
    var iterationAttempts = [];
    var errorHandler = function errorHandler() {};
    function readEntries() {
      // According to the FileSystem API spec, readEntries() must be called until
      // it calls the callback with an empty array.
      reader.readEntries(function (batchEntries) {
        if (!batchEntries.length) {
          // Done iterating this particular directory
          resolveDirectory(_Promise.all(iterationAttempts));
        } else {
          // Add a list of promises for each directory entry.  If the entry is itself
          // a directory, then that promise won't resolve until it is fully traversed.
          iterationAttempts.push(_Promise.all(batchEntries.map(function (batchEntry) {
            if (batchEntry.isDirectory) {
              return traverseDirectory(batchEntry);
            }
            return _Promise.resolve(batchEntry);
          })));
          // Try calling readEntries() again for the same dir, according to spec
          readEntries();
        }
      }, errorHandler);
    }
    // initial call to recursive entry reader function
    readEntries();
  });
}

// package the file in an object that includes the fullPath from the file entry
// that would otherwise be lost
function packageFile(file, entry) {
  var fileTypeOverride = '';
  // handle some browsers sometimes missing mime types for dropped files
  var hasExtension = file.name && file.name.lastIndexOf('.') !== -1;
  if (hasExtension && !file.type) {
    fileTypeOverride = mimeTypes.lookup(file.name);
  }
  return {
    fileObject: file,
    type: file.type ? file.type : fileTypeOverride,
    name: file.name,
    size: file.size,
    fullPath: entry ? entry.fullPath : file.name
  };
}

function getFile(entry) {
  return new _Promise(function (resolve) {
    entry.file(function (file) {
      resolve(packageFile(file, entry));
    });
  });
}

function handleFilePromises(promises, fileList) {
  return _Promise.all(promises).then(function (files) {
    files.forEach(function (file) {
      if (!shouldIgnoreFile(file)) {
        fileList.push(file);
      }
    });
    return fileList;
  });
}

function getDataTransferFiles(dataTransfer) {
  var dataTransferFiles = [];
  var folderPromises = [];
  var filePromises = [];

  [].slice.call(dataTransfer.items).forEach(function (listItem) {
    if (typeof listItem.webkitGetAsEntry === 'function') {
      var entry = listItem.webkitGetAsEntry();

      if (entry && entry.isDirectory) {
        folderPromises.push(traverseDirectory(entry));
      } else {
        filePromises.push(getFile(entry));
      }
    } else {
      dataTransferFiles.push(listItem);
    }
  });
  if (folderPromises.length) {
    var flatten = function flatten(array) {
      return array.reduce(function (a, b) {
        return a.concat(Array.isArray(b) ? flatten(b) : b);
      }, []);
    };
    return _Promise.all(folderPromises).then(function (fileEntries) {
      var flattenedEntries = flatten(fileEntries);
      // collect async promises to convert each fileEntry into a File object
      flattenedEntries.forEach(function (fileEntry) {
        filePromises.push(getFile(fileEntry));
      });
      return handleFilePromises(filePromises, dataTransferFiles);
    });
  } else if (filePromises.length) {
    return handleFilePromises(filePromises, dataTransferFiles);
  }
  return _Promise.resolve(dataTransferFiles);
}

/**
 * This function should be called from both the onDrop event from your drag/drop
 * dropzone as well as from the HTML5 file selector input field onChange event
 * handler.  Pass the event object from the triggered event into this function.
 * Supports mix of files and folders dropped via drag/drop.
 *
 * Returns: an array of File objects, that includes all files within folders
 *   and subfolders of the dropped/selected items.
 */
function getDroppedOrSelectedFiles(event) {
  var dataTransfer = event.dataTransfer;
  if (dataTransfer && dataTransfer.items) {
    return getDataTransferFiles(dataTransfer).then(function (fileList) {
      return _Promise.resolve(fileList);
    });
  }
  var files = [];
  var dragDropFileList = dataTransfer && dataTransfer.files;
  var inputFieldFileList = event.target && event.target.files;
  var fileList = dragDropFileList || inputFieldFileList || [];
  // convert the FileList to a simple array of File objects
  for (var i = 0; i < fileList.length; i++) {
    files.push(packageFile(fileList[i]));
  }
  return _Promise.resolve(files);
}

/**
 * Html5 File Selector
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE.txt file in the root directory of this source tree.
 */

exports.getDataTransferFiles = getDataTransferFiles;
exports.getDroppedOrSelectedFiles = getDroppedOrSelectedFiles;
//# sourceMappingURL=index.js.map


/***/ }),
/* 976 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = { "default": __webpack_require__(191), __esModule: true };

/***/ }),
/* 977 */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(114);
var defined = __webpack_require__(115);
// true  -> String#at
// false -> String#codePointAt
module.exports = function (TO_STRING) {
  return function (that, pos) {
    var s = String(defined(that));
    var i = toInteger(pos);
    var l = s.length;
    var a, b;
    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
    a = s.charCodeAt(i);
    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
      ? TO_STRING ? s.charAt(i) : a
      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
  };
};


/***/ }),
/* 978 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var create = __webpack_require__(118);
var descriptor = __webpack_require__(72);
var setToStringTag = __webpack_require__(75);
var IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
__webpack_require__(25)(IteratorPrototype, __webpack_require__(8)('iterator'), function () { return this; });

module.exports = function (Constructor, NAME, next) {
  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
  setToStringTag(Constructor, NAME + ' Iterator');
};


/***/ }),
/* 979 */
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__(19);
var anObject = __webpack_require__(15);
var getKeys = __webpack_require__(73);

module.exports = __webpack_require__(20) ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = getKeys(Properties);
  var length = keys.length;
  var i = 0;
  var P;
  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
  return O;
};


/***/ }),
/* 980 */
/***/ (function(module, exports, __webpack_require__) {

// false -> Array#indexOf
// true  -> Array#includes
var toIObject = __webpack_require__(28);
var toLength = __webpack_require__(199);
var toAbsoluteIndex = __webpack_require__(981);
module.exports = function (IS_INCLUDES) {
  return function ($this, el, fromIndex) {
    var O = toIObject($this);
    var length = toLength(O.length);
    var index = toAbsoluteIndex(fromIndex, length);
    var value;
    // Array#includes uses SameValueZero equality algorithm
    // eslint-disable-next-line no-self-compare
    if (IS_INCLUDES && el != el) while (length > index) {
      value = O[index++];
      // eslint-disable-next-line no-self-compare
      if (value != value) return true;
    // Array#indexOf ignores holes, Array#includes - not
    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
      if (O[index] === el) return IS_INCLUDES || index || 0;
    } return !IS_INCLUDES && -1;
  };
};


/***/ }),
/* 981 */
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__(114);
var max = Math.max;
var min = Math.min;
module.exports = function (index, length) {
  index = toInteger(index);
  return index < 0 ? max(index + length, 0) : min(index, length);
};


/***/ }),
/* 982 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var addToUnscopables = __webpack_require__(983);
var step = __webpack_require__(984);
var Iterators = __webpack_require__(50);
var toIObject = __webpack_require__(28);

// 22.1.3.4 Array.prototype.entries()
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
module.exports = __webpack_require__(194)(Array, 'Array', function (iterated, kind) {
  this._t = toIObject(iterated); // target
  this._i = 0;                   // next index
  this._k = kind;                // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
}, function () {
  var O = this._t;
  var kind = this._k;
  var index = this._i++;
  if (!O || index >= O.length) {
    this._t = undefined;
    return step(1);
  }
  if (kind == 'keys') return step(0, index);
  if (kind == 'values') return step(0, O[index]);
  return step(0, [index, O[index]]);
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
Iterators.Arguments = Iterators.Array;

addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');


/***/ }),
/* 983 */
/***/ (function(module, exports) {

module.exports = function () { /* empty */ };


/***/ }),
/* 984 */
/***/ (function(module, exports) {

module.exports = function (done, value) {
  return { value: value, done: !!done };
};


/***/ }),
/* 985 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var LIBRARY = __webpack_require__(70);
var global = __webpack_require__(7);
var ctx = __webpack_require__(49);
var classof = __webpack_require__(203);
var $export = __webpack_require__(12);
var isObject = __webpack_require__(26);
var aFunction = __webpack_require__(71);
var anInstance = __webpack_require__(986);
var forOf = __webpack_require__(987);
var speciesConstructor = __webpack_require__(204);
var task = __webpack_require__(205).set;
var microtask = __webpack_require__(992)();
var newPromiseCapabilityModule = __webpack_require__(123);
var perform = __webpack_require__(206);
var promiseResolve = __webpack_require__(207);
var PROMISE = 'Promise';
var TypeError = global.TypeError;
var process = global.process;
var $Promise = global[PROMISE];
var isNode = classof(process) == 'process';
var empty = function () { /* empty */ };
var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;
var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;

var USE_NATIVE = !!function () {
  try {
    // correct subclassing with @@species support
    var promise = $Promise.resolve(1);
    var FakePromise = (promise.constructor = {})[__webpack_require__(8)('species')] = function (exec) {
      exec(empty, empty);
    };
    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;
  } catch (e) { /* empty */ }
}();

// helpers
var isThenable = function (it) {
  var then;
  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
};
var notify = function (promise, isReject) {
  if (promise._n) return;
  promise._n = true;
  var chain = promise._c;
  microtask(function () {
    var value = promise._v;
    var ok = promise._s == 1;
    var i = 0;
    var run = function (reaction) {
      var handler = ok ? reaction.ok : reaction.fail;
      var resolve = reaction.resolve;
      var reject = reaction.reject;
      var domain = reaction.domain;
      var result, then;
      try {
        if (handler) {
          if (!ok) {
            if (promise._h == 2) onHandleUnhandled(promise);
            promise._h = 1;
          }
          if (handler === true) result = value;
          else {
            if (domain) domain.enter();
            result = handler(value);
            if (domain) domain.exit();
          }
          if (result === reaction.promise) {
            reject(TypeError('Promise-chain cycle'));
          } else if (then = isThenable(result)) {
            then.call(result, resolve, reject);
          } else resolve(result);
        } else reject(value);
      } catch (e) {
        reject(e);
      }
    };
    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach
    promise._c = [];
    promise._n = false;
    if (isReject && !promise._h) onUnhandled(promise);
  });
};
var onUnhandled = function (promise) {
  task.call(global, function () {
    var value = promise._v;
    var unhandled = isUnhandled(promise);
    var result, handler, console;
    if (unhandled) {
      result = perform(function () {
        if (isNode) {
          process.emit('unhandledRejection', value, promise);
        } else if (handler = global.onunhandledrejection) {
          handler({ promise: promise, reason: value });
        } else if ((console = global.console) && console.error) {
          console.error('Unhandled promise rejection', value);
        }
      });
      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
      promise._h = isNode || isUnhandled(promise) ? 2 : 1;
    } promise._a = undefined;
    if (unhandled && result.e) throw result.v;
  });
};
var isUnhandled = function (promise) {
  if (promise._h == 1) return false;
  var chain = promise._a || promise._c;
  var i = 0;
  var reaction;
  while (chain.length > i) {
    reaction = chain[i++];
    if (reaction.fail || !isUnhandled(reaction.promise)) return false;
  } return true;
};
var onHandleUnhandled = function (promise) {
  task.call(global, function () {
    var handler;
    if (isNode) {
      process.emit('rejectionHandled', promise);
    } else if (handler = global.onrejectionhandled) {
      handler({ promise: promise, reason: promise._v });
    }
  });
};
var $reject = function (value) {
  var promise = this;
  if (promise._d) return;
  promise._d = true;
  promise = promise._w || promise; // unwrap
  promise._v = value;
  promise._s = 2;
  if (!promise._a) promise._a = promise._c.slice();
  notify(promise, true);
};
var $resolve = function (value) {
  var promise = this;
  var then;
  if (promise._d) return;
  promise._d = true;
  promise = promise._w || promise; // unwrap
  try {
    if (promise === value) throw TypeError("Promise can't be resolved itself");
    if (then = isThenable(value)) {
      microtask(function () {
        var wrapper = { _w: promise, _d: false }; // wrap
        try {
          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
        } catch (e) {
          $reject.call(wrapper, e);
        }
      });
    } else {
      promise._v = value;
      promise._s = 1;
      notify(promise, false);
    }
  } catch (e) {
    $reject.call({ _w: promise, _d: false }, e); // wrap
  }
};

// constructor polyfill
if (!USE_NATIVE) {
  // 25.4.3.1 Promise(executor)
  $Promise = function Promise(executor) {
    anInstance(this, $Promise, PROMISE, '_h');
    aFunction(executor);
    Internal.call(this);
    try {
      executor(ctx($resolve, this, 1), ctx($reject, this, 1));
    } catch (err) {
      $reject.call(this, err);
    }
  };
  // eslint-disable-next-line no-unused-vars
  Internal = function Promise(executor) {
    this._c = [];             // <- awaiting reactions
    this._a = undefined;      // <- checked in isUnhandled reactions
    this._s = 0;              // <- state
    this._d = false;          // <- done
    this._v = undefined;      // <- value
    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
    this._n = false;          // <- notify
  };
  Internal.prototype = __webpack_require__(993)($Promise.prototype, {
    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
    then: function then(onFulfilled, onRejected) {
      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
      reaction.fail = typeof onRejected == 'function' && onRejected;
      reaction.domain = isNode ? process.domain : undefined;
      this._c.push(reaction);
      if (this._a) this._a.push(reaction);
      if (this._s) notify(this, false);
      return reaction.promise;
    },
    // 25.4.5.1 Promise.prototype.catch(onRejected)
    'catch': function (onRejected) {
      return this.then(undefined, onRejected);
    }
  });
  OwnPromiseCapability = function () {
    var promise = new Internal();
    this.promise = promise;
    this.resolve = ctx($resolve, promise, 1);
    this.reject = ctx($reject, promise, 1);
  };
  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
    return C === $Promise || C === Wrapper
      ? new OwnPromiseCapability(C)
      : newGenericPromiseCapability(C);
  };
}

$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });
__webpack_require__(75)($Promise, PROMISE);
__webpack_require__(994)(PROMISE);
Wrapper = __webpack_require__(3)[PROMISE];

// statics
$export($export.S + $export.F * !USE_NATIVE, PROMISE, {
  // 25.4.4.5 Promise.reject(r)
  reject: function reject(r) {
    var capability = newPromiseCapability(this);
    var $$reject = capability.reject;
    $$reject(r);
    return capability.promise;
  }
});
$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
  // 25.4.4.6 Promise.resolve(x)
  resolve: function resolve(x) {
    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
  }
});
$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(995)(function (iter) {
  $Promise.all(iter)['catch'](empty);
})), PROMISE, {
  // 25.4.4.1 Promise.all(iterable)
  all: function all(iterable) {
    var C = this;
    var capability = newPromiseCapability(C);
    var resolve = capability.resolve;
    var reject = capability.reject;
    var result = perform(function () {
      var values = [];
      var index = 0;
      var remaining = 1;
      forOf(iterable, false, function (promise) {
        var $index = index++;
        var alreadyCalled = false;
        values.push(undefined);
        remaining++;
        C.resolve(promise).then(function (value) {
          if (alreadyCalled) return;
          alreadyCalled = true;
          values[$index] = value;
          --remaining || resolve(values);
        }, reject);
      });
      --remaining || resolve(values);
    });
    if (result.e) reject(result.v);
    return capability.promise;
  },
  // 25.4.4.4 Promise.race(iterable)
  race: function race(iterable) {
    var C = this;
    var capability = newPromiseCapability(C);
    var reject = capability.reject;
    var result = perform(function () {
      forOf(iterable, false, function (promise) {
        C.resolve(promise).then(capability.resolve, reject);
      });
    });
    if (result.e) reject(result.v);
    return capability.promise;
  }
});


/***/ }),
/* 986 */
/***/ (function(module, exports) {

module.exports = function (it, Constructor, name, forbiddenField) {
  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
    throw TypeError(name + ': incorrect invocation!');
  } return it;
};


/***/ }),
/* 987 */
/***/ (function(module, exports, __webpack_require__) {

var ctx = __webpack_require__(49);
var call = __webpack_require__(988);
var isArrayIter = __webpack_require__(989);
var anObject = __webpack_require__(15);
var toLength = __webpack_require__(199);
var getIterFn = __webpack_require__(990);
var BREAK = {};
var RETURN = {};
var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
  var f = ctx(fn, that, entries ? 2 : 1);
  var index = 0;
  var length, step, iterator, result;
  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
  // fast case for arrays with default iterator
  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
    if (result === BREAK || result === RETURN) return result;
  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
    result = call(iterator, f, step.value, entries);
    if (result === BREAK || result === RETURN) return result;
  }
};
exports.BREAK = BREAK;
exports.RETURN = RETURN;


/***/ }),
/* 988 */
/***/ (function(module, exports, __webpack_require__) {

// call something on iterator step with safe closing on error
var anObject = __webpack_require__(15);
module.exports = function (iterator, fn, value, entries) {
  try {
    return entries ? fn(anObject(value)[0], value[1]) : fn(value);
  // 7.4.6 IteratorClose(iterator, completion)
  } catch (e) {
    var ret = iterator['return'];
    if (ret !== undefined) anObject(ret.call(iterator));
    throw e;
  }
};


/***/ }),
/* 989 */
/***/ (function(module, exports, __webpack_require__) {

// check on default Array iterator
var Iterators = __webpack_require__(50);
var ITERATOR = __webpack_require__(8)('iterator');
var ArrayProto = Array.prototype;

module.exports = function (it) {
  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
};


/***/ }),
/* 990 */
/***/ (function(module, exports, __webpack_require__) {

var classof = __webpack_require__(203);
var ITERATOR = __webpack_require__(8)('iterator');
var Iterators = __webpack_require__(50);
module.exports = __webpack_require__(3).getIteratorMethod = function (it) {
  if (it != undefined) return it[ITERATOR]
    || it['@@iterator']
    || Iterators[classof(it)];
};


/***/ }),
/* 991 */
/***/ (function(module, exports) {

// fast apply, http://jsperf.lnkit.com/fast-apply/5
module.exports = function (fn, args, that) {
  var un = that === undefined;
  switch (args.length) {
    case 0: return un ? fn()
                      : fn.call(that);
    case 1: return un ? fn(args[0])
                      : fn.call(that, args[0]);
    case 2: return un ? fn(args[0], args[1])
                      : fn.call(that, args[0], args[1]);
    case 3: return un ? fn(args[0], args[1], args[2])
                      : fn.call(that, args[0], args[1], args[2]);
    case 4: return un ? fn(args[0], args[1], args[2], args[3])
                      : fn.call(that, args[0], args[1], args[2], args[3]);
  } return fn.apply(that, args);
};


/***/ }),
/* 992 */
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__(7);
var macrotask = __webpack_require__(205).set;
var Observer = global.MutationObserver || global.WebKitMutationObserver;
var process = global.process;
var Promise = global.Promise;
var isNode = __webpack_require__(51)(process) == 'process';

module.exports = function () {
  var head, last, notify;

  var flush = function () {
    var parent, fn;
    if (isNode && (parent = process.domain)) parent.exit();
    while (head) {
      fn = head.fn;
      head = head.next;
      try {
        fn();
      } catch (e) {
        if (head) notify();
        else last = undefined;
        throw e;
      }
    } last = undefined;
    if (parent) parent.enter();
  };

  // Node.js
  if (isNode) {
    notify = function () {
      process.nextTick(flush);
    };
  // browsers with MutationObserver
  } else if (Observer) {
    var toggle = true;
    var node = document.createTextNode('');
    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new
    notify = function () {
      node.data = toggle = !toggle;
    };
  // environments with maybe non-completely correct, but existent Promise
  } else if (Promise && Promise.resolve) {
    var promise = Promise.resolve();
    notify = function () {
      promise.then(flush);
    };
  // for other environments - macrotask based on:
  // - setImmediate
  // - MessageChannel
  // - window.postMessag
  // - onreadystatechange
  // - setTimeout
  } else {
    notify = function () {
      // strange IE + webpack dev server bug - use .call(global)
      macrotask.call(global, flush);
    };
  }

  return function (fn) {
    var task = { fn: fn, next: undefined };
    if (last) last.next = task;
    if (!head) {
      head = task;
      notify();
    } last = task;
  };
};


/***/ }),
/* 993 */
/***/ (function(module, exports, __webpack_require__) {

var hide = __webpack_require__(25);
module.exports = function (target, src, safe) {
  for (var key in src) {
    if (safe && target[key]) target[key] = src[key];
    else hide(target, key, src[key]);
  } return target;
};


/***/ }),
/* 994 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var global = __webpack_require__(7);
var core = __webpack_require__(3);
var dP = __webpack_require__(19);
var DESCRIPTORS = __webpack_require__(20);
var SPECIES = __webpack_require__(8)('species');

module.exports = function (KEY) {
  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];
  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
    configurable: true,
    get: function () { return this; }
  });
};


/***/ }),
/* 995 */
/***/ (function(module, exports, __webpack_require__) {

var ITERATOR = __webpack_require__(8)('iterator');
var SAFE_CLOSING = false;

try {
  var riter = [7][ITERATOR]();
  riter['return'] = function () { SAFE_CLOSING = true; };
  // eslint-disable-next-line no-throw-literal
  Array.from(riter, function () { throw 2; });
} catch (e) { /* empty */ }

module.exports = function (exec, skipClosing) {
  if (!skipClosing && !SAFE_CLOSING) return false;
  var safe = false;
  try {
    var arr = [7];
    var iter = arr[ITERATOR]();
    iter.next = function () { return { done: safe = true }; };
    arr[ITERATOR] = function () { return iter; };
    exec(arr);
  } catch (e) { /* empty */ }
  return safe;
};


/***/ }),
/* 996 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// https://github.com/tc39/proposal-promise-finally

var $export = __webpack_require__(12);
var core = __webpack_require__(3);
var global = __webpack_require__(7);
var speciesConstructor = __webpack_require__(204);
var promiseResolve = __webpack_require__(207);

$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {
  var C = speciesConstructor(this, core.Promise || global.Promise);
  var isFunction = typeof onFinally == 'function';
  return this.then(
    isFunction ? function (x) {
      return promiseResolve(C, onFinally()).then(function () { return x; });
    } : onFinally,
    isFunction ? function (e) {
      return promiseResolve(C, onFinally()).then(function () { throw e; });
    } : onFinally
  );
} });


/***/ }),
/* 997 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// https://github.com/tc39/proposal-promise-try
var $export = __webpack_require__(12);
var newPromiseCapability = __webpack_require__(123);
var perform = __webpack_require__(206);

$export($export.S, 'Promise', { 'try': function (callbackfn) {
  var promiseCapability = newPromiseCapability.f(this);
  var result = perform(callbackfn);
  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);
  return promiseCapability.promise;
} });


/***/ }),
/* 998 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/*!
 * mime-types
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */



/**
 * Module dependencies.
 * @private
 */

var db = __webpack_require__(999)
var extname = __webpack_require__(1001).extname

/**
 * Module variables.
 * @private
 */

var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/
var TEXT_TYPE_REGEXP = /^text\//i

/**
 * Module exports.
 * @public
 */

exports.charset = charset
exports.charsets = { lookup: charset }
exports.contentType = contentType
exports.extension = extension
exports.extensions = Object.create(null)
exports.lookup = lookup
exports.types = Object.create(null)

// Populate the extensions/types maps
populateMaps(exports.extensions, exports.types)

/**
 * Get the default charset for a MIME type.
 *
 * @param {string} type
 * @return {boolean|string}
 */

function charset (type) {
  if (!type || typeof type !== 'string') {
    return false
  }

  // TODO: use media-typer
  var match = EXTRACT_TYPE_REGEXP.exec(type)
  var mime = match && db[match[1].toLowerCase()]

  if (mime && mime.charset) {
    return mime.charset
  }

  // default text/* to utf-8
  if (match && TEXT_TYPE_REGEXP.test(match[1])) {
    return 'UTF-8'
  }

  return false
}

/**
 * Create a full Content-Type header given a MIME type or extension.
 *
 * @param {string} str
 * @return {boolean|string}
 */

function contentType (str) {
  // TODO: should this even be in this module?
  if (!str || typeof str !== 'string') {
    return false
  }

  var mime = str.indexOf('/') === -1
    ? exports.lookup(str)
    : str

  if (!mime) {
    return false
  }

  // TODO: use content-type or other module
  if (mime.indexOf('charset') === -1) {
    var charset = exports.charset(mime)
    if (charset) mime += '; charset=' + charset.toLowerCase()
  }

  return mime
}

/**
 * Get the default extension for a MIME type.
 *
 * @param {string} type
 * @return {boolean|string}
 */

function extension (type) {
  if (!type || typeof type !== 'string') {
    return false
  }

  // TODO: use media-typer
  var match = EXTRACT_TYPE_REGEXP.exec(type)

  // get extensions
  var exts = match && exports.extensions[match[1].toLowerCase()]

  if (!exts || !exts.length) {
    return false
  }

  return exts[0]
}

/**
 * Lookup the MIME type for a file path/extension.
 *
 * @param {string} path
 * @return {boolean|string}
 */

function lookup (path) {
  if (!path || typeof path !== 'string') {
    return false
  }

  // get the extension ("ext" or ".ext" or full path)
  var extension = extname('x.' + path)
    .toLowerCase()
    .substr(1)

  if (!extension) {
    return false
  }

  return exports.types[extension] || false
}

/**
 * Populate the extensions and types maps.
 * @private
 */

function populateMaps (extensions, types) {
  // source preference (least -> most)
  var preference = ['nginx', 'apache', undefined, 'iana']

  Object.keys(db).forEach(function forEachMimeType (type) {
    var mime = db[type]
    var exts = mime.extensions

    if (!exts || !exts.length) {
      return
    }

    // mime -> extensions
    extensions[type] = exts

    // extension -> mime
    for (var i = 0; i < exts.length; i++) {
      var extension = exts[i]

      if (types[extension]) {
        var from = preference.indexOf(db[types[extension]].source)
        var to = preference.indexOf(mime.source)

        if (types[extension] !== 'application/octet-stream' &&
          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {
          // skip the remapping
          continue
        }
      }

      // set the extension -> mime
      types[extension] = type
    }
  })
}


/***/ }),
/* 999 */
/***/ (function(module, exports, __webpack_require__) {

/*!
 * mime-db
 * Copyright(c) 2014 Jonathan Ong
 * MIT Licensed
 */

/**
 * Module exports.
 */

module.exports = __webpack_require__(1000)


/***/ }),
/* 1000 */
/***/ (function(module, exports) {

module.exports = {"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana"},"application/3gpp-ims+xml":{"source":"iana"},"application/a2l":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana"},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","extensions":["atomsvc"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana"},"application/bacnet-xdd+zip":{"source":"iana"},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana"},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana"},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/cbor":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana"},"application/ccxml+xml":{"source":"iana","extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana"},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana"},"application/cellml+xml":{"source":"iana"},"application/cfw":{"source":"iana"},"application/clue_info+xml":{"source":"iana"},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana"},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana"},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana"},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana"},"application/cstadata+xml":{"source":"iana"},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","extensions":["mpd"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana"},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana"},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/docbook+xml":{"source":"apache","extensions":["dbk"]},"application/dskpp+xml":{"source":"iana"},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/emergencycalldata.comment+xml":{"source":"iana"},"application/emergencycalldata.control+xml":{"source":"iana"},"application/emergencycalldata.deviceinfo+xml":{"source":"iana"},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana"},"application/emergencycalldata.serviceinfo+xml":{"source":"iana"},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana"},"application/emergencycalldata.veds+xml":{"source":"iana"},"application/emma+xml":{"source":"iana","extensions":["emma"]},"application/emotionml+xml":{"source":"iana"},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana"},"application/epub+zip":{"source":"iana","extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana"},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false,"extensions":["woff"]},"application/font-woff2":{"compressible":false,"extensions":["woff2"]},"application/framework-attributes+xml":{"source":"iana"},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geoxacml+xml":{"source":"iana"},"application/gml+xml":{"source":"iana","extensions":["gml"]},"application/gpx+xml":{"source":"apache","extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana"},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana"},"application/ibe-pkg-reply+xml":{"source":"iana"},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana"},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana"},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana"},"application/kpml-response+xml":{"source":"iana"},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana"},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana"},"application/lost+xml":{"source":"iana","extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana"},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","extensions":["mads"]},"application/manifest+json":{"charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana"},"application/mathml-presentation+xml":{"source":"iana"},"application/mbms-associated-procedure-description+xml":{"source":"iana"},"application/mbms-deregister+xml":{"source":"iana"},"application/mbms-envelope+xml":{"source":"iana"},"application/mbms-msk+xml":{"source":"iana"},"application/mbms-msk-response+xml":{"source":"iana"},"application/mbms-protection-description+xml":{"source":"iana"},"application/mbms-reception-report+xml":{"source":"iana"},"application/mbms-register+xml":{"source":"iana"},"application/mbms-register-response+xml":{"source":"iana"},"application/mbms-schedule+xml":{"source":"iana"},"application/mbms-user-service-description+xml":{"source":"iana"},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana"},"application/media_control+xml":{"source":"iana"},"application/mediaservercontrol+xml":{"source":"iana","extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","extensions":["meta4"]},"application/mets+xml":{"source":"iana","extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mmt-usd+xml":{"source":"iana"},"application/mods+xml":{"source":"iana","extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana"},"application/mrb-publish+xml":{"source":"iana"},"application/msc-ivr+xml":{"source":"iana"},"application/msc-mixer+xml":{"source":"iana"},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana"},"application/n-triples":{"source":"iana"},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana"},"application/news-groupinfo":{"source":"iana"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana"},"application/nss":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p2p-overlay+xml":{"source":"iana"},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana"},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana"},"application/pidf-diff+xml":{"source":"iana"},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","extensions":["pls"]},"application/poc-settings+xml":{"source":"iana"},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana"},"application/provenance+xml":{"source":"iana"},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.hpub+zip":{"source":"iana"},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana"},"application/pskc+xml":{"source":"iana","extensions":["pskcxml"]},"application/qsig":{"source":"iana"},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf"]},"application/reginfo+xml":{"source":"iana","extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","extensions":["rld"]},"application/rfc+xml":{"source":"iana"},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana"},"application/rls-services+xml":{"source":"iana","extensions":["rs"]},"application/route-apd+xml":{"source":"iana"},"application/route-s-tsid+xml":{"source":"iana"},"application/route-usd+xml":{"source":"iana"},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana"},"application/samlmetadata+xml":{"source":"iana"},"application/sbml+xml":{"source":"iana","extensions":["sbml"]},"application/scaip+xml":{"source":"iana"},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/sep+xml":{"source":"iana"},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","extensions":["shf"]},"application/sieve":{"source":"iana"},"application/simple-filter+xml":{"source":"iana"},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","extensions":["srx"]},"application/spirits-event+xml":{"source":"iana"},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","extensions":["grxml"]},"application/sru+xml":{"source":"iana","extensions":["sru"]},"application/ssdl+xml":{"source":"apache","extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","extensions":["ssml"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/tei+xml":{"source":"iana","extensions":["tei","teicorpus"]},"application/thraud+xml":{"source":"iana","extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/trig":{"source":"iana"},"application/ttml+xml":{"source":"iana"},"application/tve-trigger":{"source":"iana"},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana"},"application/urc-ressheet+xml":{"source":"iana"},"application/urc-targetdesc+xml":{"source":"iana"},"application/urc-uisocketdesc+xml":{"source":"iana"},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana"},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana"},"application/vnd.3gpp-prose+xml":{"source":"iana"},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana"},"application/vnd.3gpp.bsf+xml":{"source":"iana"},"application/vnd.3gpp.gmop+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana"},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana"},"application/vnd.3gpp.mid-call+xml":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana"},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana"},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana"},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana"},"application/vnd.3gpp.ussd+xml":{"source":"iana"},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana"},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","extensions":["mpkg"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avistar+xml":{"source":"iana"},"application/vnd.balsamiq.bmml+xml":{"source":"iana"},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana"},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana"},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","extensions":["wbs"]},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana"},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana"},"application/vnd.cybank":{"source":"iana"},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume-movie":{"source":"iana"},"application/vnd.desmume.movie":{"source":"apache"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana"},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana"},"application/vnd.dvb.notif-container+xml":{"source":"iana"},"application/vnd.dvb.notif-generic+xml":{"source":"iana"},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana"},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana"},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana"},"application/vnd.dvb.notif-init+xml":{"source":"iana"},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana"},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana"},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana"},"application/vnd.eszigno3+xml":{"source":"iana","extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana"},"application/vnd.etsi.asic-e+zip":{"source":"iana"},"application/vnd.etsi.asic-s+zip":{"source":"iana"},"application/vnd.etsi.cug+xml":{"source":"iana"},"application/vnd.etsi.iptvcommand+xml":{"source":"iana"},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana"},"application/vnd.etsi.iptvprofile+xml":{"source":"iana"},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana"},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana"},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana"},"application/vnd.etsi.iptvservice+xml":{"source":"iana"},"application/vnd.etsi.iptvsync+xml":{"source":"iana"},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana"},"application/vnd.etsi.mcid+xml":{"source":"iana"},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana"},"application/vnd.etsi.pstn+xml":{"source":"iana"},"application/vnd.etsi.sci+xml":{"source":"iana"},"application/vnd.etsi.simservs+xml":{"source":"iana"},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana"},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana"},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana"},"application/vnd.gov.sk.e-form+zip":{"source":"iana"},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana"},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana"},"application/vnd.imagemeter.image+zip":{"source":"iana"},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana"},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana"},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana"},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana"},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana"},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana"},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana"},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana"},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana"},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","extensions":["lasxml"]},"application/vnd.liberty-request+xml":{"source":"iana"},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","extensions":["lbe"]},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana"},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana"},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana"},"application/vnd.marlin.drm.license+xml":{"source":"iana"},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana"},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana"},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana"},"application/vnd.ms-printing.printticket+xml":{"source":"apache"},"application/vnd.ms-printschematicket+xml":{"source":"iana"},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana"},"application/vnd.nokia.iptv.config+xml":{"source":"iana"},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana"},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana"},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana"},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana"},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana"},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana"},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana"},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana"},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana"},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana"},"application/vnd.oipf.spdlist+xml":{"source":"iana"},"application/vnd.oipf.ueprofile+xml":{"source":"iana"},"application/vnd.oipf.userprofile+xml":{"source":"iana"},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana"},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana"},"application/vnd.oma.bcast.imd+xml":{"source":"iana"},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana"},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana"},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana"},"application/vnd.oma.bcast.sprov+xml":{"source":"iana"},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana"},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana"},"application/vnd.oma.cab-pcc+xml":{"source":"iana"},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana"},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana"},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana"},"application/vnd.oma.group-usage-list+xml":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana"},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana"},"application/vnd.oma.poc.final-report+xml":{"source":"iana"},"application/vnd.oma.poc.groups+xml":{"source":"iana"},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana"},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana"},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana"},"application/vnd.oma.xcap-directory+xml":{"source":"iana"},"application/vnd.omads-email+xml":{"source":"iana"},"application/vnd.omads-file+xml":{"source":"iana"},"application/vnd.omads-folder+xml":{"source":"iana"},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana"},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml-template":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"apache","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml-template":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"apache","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml-template":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"apache","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana"},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana"},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana"},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana"},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana"},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos+xml":{"source":"iana"},"application/vnd.paos.xml":{"source":"apache"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana"},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana"},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana"},"application/vnd.radisys.msml+xml":{"source":"iana"},"application/vnd.radisys.msml-audit+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana"},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana"},"application/vnd.radisys.msml-conf+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana"},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana"},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana"},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.software602.filler.form+xml":{"source":"iana"},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana"},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana"},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana"},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana"},"application/vnd.wv.ssp+xml":{"source":"iana"},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana"},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","extensions":["vxml"]},"application/vq-rtcpxr":{"source":"iana"},"application/watcherinfo+xml":{"source":"iana"},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-otf":{"source":"apache","compressible":true,"extensions":["otf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-ttf":{"source":"apache","compressible":true,"extensions":["ttf","ttc"]},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"apache","extensions":["der","crt","pem"]},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana"},"application/xaml+xml":{"source":"apache","extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana"},"application/xcap-caps+xml":{"source":"iana"},"application/xcap-diff+xml":{"source":"iana","extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana"},"application/xcap-error+xml":{"source":"iana"},"application/xcap-ns+xml":{"source":"iana"},"application/xcon-conference-info+xml":{"source":"iana"},"application/xcon-conference-info-diff+xml":{"source":"iana"},"application/xenc+xml":{"source":"iana","extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache"},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana"},"application/xmpp+xml":{"source":"iana"},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","extensions":["xpl"]},"application/xslt+xml":{"source":"iana","extensions":["xslt"]},"application/xspf+xml":{"source":"apache","extensions":["xspf"]},"application/xv+xml":{"source":"iana","extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana"},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana"},"application/yin+xml":{"source":"iana","extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana"},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana"},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/otf":{"compressible":true,"extensions":["otf"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana"},"image/emf":{"source":"iana"},"image/fits":{"source":"iana"},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana"},"image/jp2":{"source":"iana"},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jpm":{"source":"iana"},"image/jpx":{"source":"iana"},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana"},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana"},"image/tiff":{"source":"iana","compressible":false,"extensions":["tiff","tif"]},"image/tiff-fx":{"source":"iana"},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana"},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana"},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana"},"image/vnd.valve.source.texture":{"source":"iana"},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana"},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana"},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana"},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana"},"message/global-delivery-status":{"source":"iana"},"message/global-disposition-notification":{"source":"iana"},"message/global-headers":{"source":"iana"},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana"},"model/3mf":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/vnd.collada+xml":{"source":"iana","extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana"},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana"},"model/vnd.parasolid.transmit.binary":{"source":"iana"},"model/vnd.parasolid.transmit.text":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.valve.source.compiled-map":{"source":"iana"},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana"},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana"},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana","compressible":false},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/hjson":{"extensions":["hjson"]},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/slim":{"extensions":["slim","slm"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana"},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vp8":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}

/***/ }),
/* 1001 */
/***/ (function(module, exports, __webpack_require__) {

/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.
//
// 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.

// resolves . and .. elements in a path array with directory names there
// must be no slashes, empty elements, or device names (c:\) in the array
// (so also no leading and trailing slashes - it does not distinguish
// relative and absolute paths)
function normalizeArray(parts, allowAboveRoot) {
  // if the path tries to go above the root, `up` ends up > 0
  var up = 0;
  for (var i = parts.length - 1; i >= 0; i--) {
    var last = parts[i];
    if (last === '.') {
      parts.splice(i, 1);
    } else if (last === '..') {
      parts.splice(i, 1);
      up++;
    } else if (up) {
      parts.splice(i, 1);
      up--;
    }
  }

  // if the path is allowed to go above the root, restore leading ..s
  if (allowAboveRoot) {
    for (; up--; up) {
      parts.unshift('..');
    }
  }

  return parts;
}

// Split a filename into [root, dir, basename, ext], unix version
// 'root' is just a slash, or nothing.
var splitPathRe =
    /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
var splitPath = function(filename) {
  return splitPathRe.exec(filename).slice(1);
};

// path.resolve([from ...], to)
// posix version
exports.resolve = function() {
  var resolvedPath = '',
      resolvedAbsolute = false;

  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
    var path = (i >= 0) ? arguments[i] : process.cwd();

    // Skip empty and invalid entries
    if (typeof path !== 'string') {
      throw new TypeError('Arguments to path.resolve must be strings');
    } else if (!path) {
      continue;
    }

    resolvedPath = path + '/' + resolvedPath;
    resolvedAbsolute = path.charAt(0) === '/';
  }

  // At this point the path should be resolved to a full absolute path, but
  // handle relative paths to be safe (might happen when process.cwd() fails)

  // Normalize the path
  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
    return !!p;
  }), !resolvedAbsolute).join('/');

  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
};

// path.normalize(path)
// posix version
exports.normalize = function(path) {
  var isAbsolute = exports.isAbsolute(path),
      trailingSlash = substr(path, -1) === '/';

  // Normalize the path
  path = normalizeArray(filter(path.split('/'), function(p) {
    return !!p;
  }), !isAbsolute).join('/');

  if (!path && !isAbsolute) {
    path = '.';
  }
  if (path && trailingSlash) {
    path += '/';
  }

  return (isAbsolute ? '/' : '') + path;
};

// posix version
exports.isAbsolute = function(path) {
  return path.charAt(0) === '/';
};

// posix version
exports.join = function() {
  var paths = Array.prototype.slice.call(arguments, 0);
  return exports.normalize(filter(paths, function(p, index) {
    if (typeof p !== 'string') {
      throw new TypeError('Arguments to path.join must be strings');
    }
    return p;
  }).join('/'));
};


// path.relative(from, to)
// posix version
exports.relative = function(from, to) {
  from = exports.resolve(from).substr(1);
  to = exports.resolve(to).substr(1);

  function trim(arr) {
    var start = 0;
    for (; start < arr.length; start++) {
      if (arr[start] !== '') break;
    }

    var end = arr.length - 1;
    for (; end >= 0; end--) {
      if (arr[end] !== '') break;
    }

    if (start > end) return [];
    return arr.slice(start, end - start + 1);
  }

  var fromParts = trim(from.split('/'));
  var toParts = trim(to.split('/'));

  var length = Math.min(fromParts.length, toParts.length);
  var samePartsLength = length;
  for (var i = 0; i < length; i++) {
    if (fromParts[i] !== toParts[i]) {
      samePartsLength = i;
      break;
    }
  }

  var outputParts = [];
  for (var i = samePartsLength; i < fromParts.length; i++) {
    outputParts.push('..');
  }

  outputParts = outputParts.concat(toParts.slice(samePartsLength));

  return outputParts.join('/');
};

exports.sep = '/';
exports.delimiter = ':';

exports.dirname = function(path) {
  var result = splitPath(path),
      root = result[0],
      dir = result[1];

  if (!root && !dir) {
    // No dirname whatsoever
    return '.';
  }

  if (dir) {
    // It has a dirname, strip trailing slash
    dir = dir.substr(0, dir.length - 1);
  }

  return root + dir;
};


exports.basename = function(path, ext) {
  var f = splitPath(path)[2];
  // TODO: make this comparison case-insensitive on windows?
  if (ext && f.substr(-1 * ext.length) === ext) {
    f = f.substr(0, f.length - ext.length);
  }
  return f;
};


exports.extname = function(path) {
  return splitPath(path)[3];
};

function filter (xs, f) {
    if (xs.filter) return xs.filter(f);
    var res = [];
    for (var i = 0; i < xs.length; i++) {
        if (f(xs[i], i, xs)) res.push(xs[i]);
    }
    return res;
}

// String.prototype.substr - negative index don't work in IE8
var substr = 'ab'.substr(-1) === 'b'
    ? function (str, start, len) { return str.substr(start, len) }
    : function (str, start, len) {
        if (start < 0) start = str.length + start;
        return str.substr(start, len);
    }
;

/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(29)))

/***/ }),
/* 1002 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux.file');

/**
 * @namespace   Ext.ux.file
 * @class       Ext.ux.file.Download
 * @extends     Ext.util.Observable
 */
Ext.ux.file.Download = function(config) {
    config = config || {};
    Ext.apply(this, config);
    
    Ext.ux.file.Download.superclass.constructor.call(this);
    
    this.addEvents({
        'success': true,
        'fail': true,
        'abort': true
    });
};

Ext.extend(Ext.ux.file.Download, Ext.util.Observable, {
    url: 'index.php',
    method: 'POST',
    params: null,
    timeout: 1800000, // 30 minutes
    
    /**
     * @private 
     */
    form: null,
    transactionId: null,
    
    /**
     * start download
     */
    start: function() {
        this.form = Ext.getBody().createChild({
            tag:'form',
            method: this.method,
            cls:'x-hidden'
        });

        var con = new Ext.data.Connection({
            // firefox specific problem -> see http://www.extjs.com/forum/archive/index.php/t-44862.html
            //  "It appears that this is because the "load" is completing once the initial download dialog is displayed, 
            //  but the frame is then destroyed before the "save as" dialog is shown."
            //
            // TODO check if we can handle firefox event 'onSaveAsSubmit' (or something like that)
            //
            debugUploads: Ext.isGecko
        });
        
        this.transactionId = con.request({
            isUpload: true,
            form: this.form,
            params: this.params,
            scope: this,
            success: this.onSuccess,
            failure: this.onFailure,
            url: this.url,
            timeout: this.timeout
        });

        return this;
    },
    
    /**
     * abort download
     */
    abort: function() {
        Ext.Ajax.abort(this.transactionId);
        this.form.remove();
        this.fireEvent('abort', this);
    },
    
    /**
     * @private
     * 
     */
    onSuccess: function() {
        this.form.remove();
        this.fireEvent('success', this);
    },
    
    /**
     * @private
     * 
     */
    onFailure: function() {
        this.form.remove();
        this.fireEvent('fail', this);
    }
    
});


/***/ }),
/* 1003 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.ColorField
 * @extends     Ext.form.TriggerField
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * Provides a color input field with a {@link Ext.menu.ColorMenu} dropdown.
 * @constructor Create a new ColorField
 * @param {Object} config
 * @xtype colorfield
 */
Ext.ux.form.ColorField = Ext.extend(Ext.form.TriggerField, {
    listWidth: 150,
    editable: false,
    
    // private
    initComponent : function(){
        Ext.ux.form.ColorField.superclass.initComponent.call(this);
        
        this.store = new Ext.data.Store({});
        
        this.addEvents(
            /**
             * @event select
             * Fires when a color is selected via the color picker.
             * @param {Ext.form.ColorField} this
             * @param {String} color The color that was selected
             */
            'select'
        );

        this.on('afterrender', this.onAfterRender, this, {buffer: 500});
    },

    onAfterRender: function() {
        // if used as gridEditor
        if (this.inEditor) {
            var editorWrapEl = this.el.up('.x-grid-editor', 5);
            if (editorWrapEl) {
                this.editor = Ext.getCmp(editorWrapEl.id);
                this.editor.allowBlur = true;
                this.onTriggerClick();
            }
        }
    },

    // private
    onDestroy : function(){
        Ext.destroy(this.menu);
        Ext.ux.form.ColorField.superclass.onDestroy.call(this);
    },
    
    //private
    onTriggerClick : function(){
        if(this.disabled){
            return;
        }
        if(this.menu == null){
            this.menu = new Ext.menu.ColorMenu({
                hideOnClick: false
            });

        }
        this.onFocus();
        this.menuEvents('on');

        this.menu.show(this.el, "tl-bl?");
    },

    setValue : function(color){
        color = color || '#FFFFFF';

        this.el.setStyle('background', color);
        this.el.setStyle('color', color);

        return Ext.ux.form.ColorField.superclass.setValue.call(this, color);
    },
    
    //private
    menuEvents: function(method){
        this.menu[method]('select', this.onSelect, this);
        this.menu[method]('hide', this.onMenuHide, this);
        this.menu[method]('show', this.onMenuShow, this);
    },
    
    //private
    onSelect: function(m, d){
        this.setValue('#'+d);
        this.fireEvent('select', this, '#'+d);

        if (this.inEditor && this.editor) {
            this.editor.completeEdit();
        }

        this.menu.hide();
    },

    //private
    onMenuShow: function() {
        // manage z-index by windowMgr
        this.menu.setActive = Ext.emptyFn;
        this.menu.setZIndex = Ext.emptyFn;
        Ext.WindowMgr.register(this.menu);
        Ext.WindowMgr.bringToFront(this.menu);

        this.onFocus();
    },

    //private
    onMenuHide: function(){
        this.focus(false, 60);
        this.menuEvents('un');

        Ext.WindowMgr.unregister(this.menu);

        if (this.inEditor && this.editor) {
            this.editor.cancelEdit();
        }
    }
});

Ext.reg('colorfield', Ext.ux.form.ColorField);


/***/ }),
/* 1004 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Ext
 * @subpackage  ux
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * Class for creating text-fields with an icon in front of the label.
 * <p>Example usage:</p>
 * <pre><code>
 var field =  new Ext.ux.form.IconTextField({
     labelIcon: 'images/oxygen/16x16/actions/mail.png'
     fieldLabel: 'email',
     name: 'email',
 });
 * </code></pre>
 * 
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.IconTextField
 * @extends     Ext.form.TextField
 */
Ext.ux.form.IconTextField = Ext.extend(Ext.form.TextField, {
    /**
     * @cfg {String} LabelIcon icon to be displayed in front of the label
     */
    labelIcon: '',
    /**
     * @private
     */
    initComponent: function(){
         Ext.ux.form.IconTextField.superclass.initComponent.call(this);
         if (this.labelIcon.length > 0){
            this.fieldLabel = '<img src="' + this.labelIcon + '" class="x-ux-form-icontextfield-labelicon">' + this.fieldLabel;
         }
    }
});
Ext.reg('icontextfield', Ext.ux.form.IconTextField);


/***/ }),
/* 1005 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Ext
 * @subpackage  ux
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * Class for creating equal text-fields multiple times in a form.
 * If a value gets changed in one of the fields, all other will be updated
 * <p>Example usage:</p>
 * <pre><code>
 var dialog =  new Ext.Panel({
     layout: 'form',
     items: [
         {
             fieldLabel: 'First occurrence',
             xtype: 'mirrortextfield',
             name: 'themirrorfiled'
         },{
             fieldLabel: 'Normal field',
             xtype: 'textfield',
             name: 'someotherfield'
         },{
             fieldLabel: 'Second occurrence',
             xtype: 'mirrortextfield',
             name: 'themirrorfiled'
         },
     ]
 });
 * </code></pre>
 * 
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.MirrorTextField
 * @extends     Ext.ux.form.IconTextField
 */
Ext.ux.form.MirrorTextField = Ext.extend(Ext.ux.form.IconTextField, {
    /**
     * @private
     */
    initComponent: function(){
         Ext.ux.form.MirrorTextField.superclass.initComponent.call(this);
         Ext.ux.form.MirrorTextFieldManager.register(this);
    },
    /**
     * @private
     */
    setValue: function(value){
        Ext.ux.form.MirrorTextFieldManager.setAll(this, value);
    },
    /**
     * @private
     */
    onDestroy : function(){
        if(this.rendered){
            Ext.ux.form.MirrorTextFieldManager.unregister(this);
        }
    }
});
Ext.reg('mirrortextfield', Ext.ux.form.MirrorTextField);

/**
 * Helper for Ext.ux.form.MirrorTextField
 * @singleton
 */
Ext.ux.form.MirrorTextFieldManager = function() {
    var MirrorTextFields = {};
    
    function MirrorField(field, newValue, oldValue) {
        var m = MirrorTextFields[field.name];
        for(var i = 0, l = m.length; i < l; i++){
            m[i].setRawValue(newValue);
        }
        return true;
    }
    
    return {
        register: function(field) {
            var m = MirrorTextFields[field.name];
            if(!m){
                m = MirrorTextFields[field.name] = [];
            }
            m.push(field);
            field.on("change", MirrorField);
        },
        
        unregister: function(field) {
            var m = MirrorTextFields[field.name];
            if(m){
                m.remove(field);
                field.un("change", MirrorField);
            }
        },
        
        setAll: function(field, value) {
            var m = MirrorTextFields[field.name];
            if(m){
                MirrorField(field, value);
            }
        }
    };
}();


/***/ }),
/* 1006 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.ColumnFormPanel
 * @description
 * Helper Class for creating form panels with a horizontal layout. This class could be directly
 * created using the new keyword or by specifying the xtype: 'columnform'
 * Example usage:</p>
 * <pre><code>
var p = new Ext.ux.form.ColumnFormPanel({
    title: 'Horizontal Form Layout',
    items: [
        [
            {
                columnWidth: .6,
                fieldLabel:'Company Name', 
                name:'org_name'
            },
            {
                columnWidth: .4,
                fieldLabel:'Street', 
                name:'adr_one_street'
            }
        ],
        [
            {
                columnWidth: .7,
                fieldLabel:'Region',
                name:'adr_one_region'
            },
            {
                columnWidth: .3,
                fieldLabel:'Postal Code', 
                name:'adr_one_postalcode'
            }
        ]
    ]
});
</code></pre>
 */
Ext.ux.form.ColumnFormPanel = Ext.extend(Ext.Panel, {

    formDefaults: {
        xtype:'icontextfield',
        anchor: '100%',
        labelSeparator: '',
        columnWidth: .333
    },
    
    layout: 'hfit',
    labelAlign: 'top',

    /**
     * @private
     */
    initComponent: function() {
        var items = [];

        // each item is an array with the config of one row
        for (var i=0,j=this.items.length; i<j; i++) {
            
            var initialRowConfig = this.items[i];
            var rowConfig = {
                xtype: 'container',
                border: false,
                layout: 'column',
                items: [],
                listeners: {
                    scope: this,
                    beforeadd: this.onBeforeAddFromItem
                }
            };
            // each row consits n column objects
            for (var n=0,m=initialRowConfig.length; n<m; n++) {
                var column = initialRowConfig[n],
                    cell = this.wrapFormItem(column);

                rowConfig.items.push(cell);
            }
            items.push(rowConfig);
        }
        this.items = items;
        
        Ext.ux.form.ColumnFormPanel.superclass.initComponent.call(this);
    },

    onBeforeAddFromItem: function(column, c, index) {
        if (!c.isWraped) {
            var cell = this.wrapFormItem(c),
                rowItems = [cell].concat(column.items.items),
                totalWidth = 0;

            // normalize columnWidth to fit in row
            Ext.each(rowItems, function(c) {totalWidth += (c.columnWidth || 0)});
            Ext.each(rowItems, function(c) {
                if (c.columnWidth) {
                    c.columnWidth = c.columnWidth/totalWidth;
                }
            });

            column.insert(index, cell);
            return false;
        }
    },

    wrapFormItem: function(c) {
        var cell = {
            isWraped: true,
            columnWidth: c.columnWidth ? c.columnWidth : this.formDefaults.columnWidth,
            layout: 'form',
            labelAlign: this.labelAlign,
            defaults: this.formDefaults,
            bodyStyle: 'padding-left: 2px; padding-right: 2px;',
            border: false,
            items: c
        };

        if (c.width) {
            cell.width = c.width;
            delete cell.columnWidth;
        }

        return cell;
    }
});

Ext.reg('columnform', Ext.ux.form.ColumnFormPanel);



/***/ }),
/* 1007 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2014 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * A NumberField allows to force decimals and prefix, suffix handling
 * 
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.NumberField
 * @extends     Ext.form.NumberField
 */
Ext.ux.form.NumberField = Ext.extend(Ext.form.NumberField, {
    
    /**
     * shall the thousand operator be shown?
     * 
     * @type {Boolean}
     */
    useThousandSeparator: true,
    
    /**
     * allows a prefix before the value
     * 
     * @type {String}
     */
    suffix: null,
    
    /**
     * allows a suffix after the value
     * 
     * @type {String}
     */
    prefix: null,
    
    initComponent: function() {
        if (this.useThousandSeparator) {
            this.thousandSeparator = this.thousandSeparator ? this.thousandSeparator : (this.decimalSeparator == '.' ? ',' : '.');
        }
        
        Ext.ux.form.NumberField.superclass.initComponent.call(this);
        
        this.on('focus', this.emptyField, this);
    },
    
    emptyField: function() {
        if (this.getValue() == '0') {
            this.setRawValue("");
        }
    },
    
    /**
     * @see Ext.form.NumberField
     * 
     * if decimalSeparator is not ".", the decimals won't be shown if 0 in superclass, so fix it here
     * 
     * @param {String} v
     * @return {Ext.form.ComboBox}
     */
    setValue: function(v) {
        // If empty string!
        if (v == "") {
            v = "0";
        }

        Ext.ux.form.NumberField.superclass.setValue.call(this, v);
        
        var split = String(this.getValue()).split('.');

        var tenString = split[0];

        var prefix = '';

        if (tenString[0] == '-') {
            tenString = tenString.substr(1);
            prefix = '-';
        }

        if (split.length == 1) {
            var decimalString = '';
        } else {
            var decimalString = split[1];
        }
        
        while (decimalString.length < this.decimalPrecision) {
            decimalString += '0';
        }

        var tenStringValue = tenString;

        if (this.useThousandSeparator && tenString.length > 3) {
            
            var tenStringValue = '';

            var stringIndex = 0;
            var firstLength = tenString.length % 3;
            if (firstLength) {
                while (stringIndex < firstLength) {
                    tenStringValue += tenString[stringIndex];
                    stringIndex++;
                }

                tenStringValue += this.thousandSeparator;
            }
            
            var i = 0;
            while(stringIndex < tenString.length) {
                tenStringValue += tenString[stringIndex];
                stringIndex++;
                i++;
                if (i == 3 && (stringIndex != (tenString.length))) {
                    i = 0;
                    tenStringValue += this.thousandSeparator;
                }
            }
        }
        
        var showValue = (this.prefix ? this.prefix : '') + tenStringValue + this.decimalSeparator + decimalString + (this.suffix ? this.suffix : '');
        this.setRawValue(prefix + showValue);
        
        return this;
    },
    
    // private, overwrites Ext.form.NumberField.parseValue
    parseValue : function(value){
        if (!value) {
            return value;
        }
        
        if (this.useThousandSeparator) {
            var regex = new RegExp(((this.thousandSeparator == ".") ? '\\.' : this.thousandSeparator), 'g');
            value = value.replace(regex, '');
        }
        
        value = String(value).replace(regex, '', 'g');
        value = parseFloat(String(value).replace(this.decimalSeparator, "."));
        value = isNaN(value) ? '' : value;

        return value;
    },
    
    /**
     * @see Ext.form.NumberField
     * 
     * strips the prefix and suffix before superclass is validating
     * 
     * @param {String} value
     * @return {String}
     */
    validateValue: function(value) {
        if (value && this.prefix) {
            var regex = new RegExp(this.prefix, 'g');
            value = value.replace(regex, '');
        }
        
        if (value && this.suffix) {
            var regex = new RegExp(this.suffix, 'g');
            value = value.replace(regex, '');
        }
        
        if (value && this.useThousandSeparator) {
            var regex = new RegExp(((this.thousandSeparator == ".") ? '\\.' : this.thousandSeparator), 'g');
            value = value.replace(regex, '');
        }
        
        return Ext.ux.form.NumberField.superclass.validateValue.call(this, value);
    }
});

Ext.reg('extuxnumberfield', Ext.ux.form.NumberField);

/***/ }),
/* 1008 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext*/

Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * A combination range and paging control
 *
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.PeriodPicker
 * @extends     Ext.form.Field
 */
Ext.ux.form.PeriodPicker = Ext.extend(Ext.form.Field, {

    /**
     * @cfg {String} availableRanges
     * ranges available in range picker
     * _('Day'), _('Week'), _('Month'), _('Quarter'), _('Year')
     */
    availableRanges: 'day,week,month,quarter,year',

    /**
     * @cfg {String} range
     * initial range
     */
    range: 'month',

    /**
     * @cfg {Date} startDate
     * defaults to toDay, will be constraint to period, gets overwritten by value
     */
    startDate: null,

    /**
     * @cfg {Bool} periodIncludesUntil
     * the period includes until timestamp
     */
    periodIncludesUntil: false,

    initComponent: function() {
        Ext.ux.form.PeriodPicker.superclass.initComponent.call(this);

        this.value = Ext.ux.form.PeriodPicker.getPeriod(this.value ? this.value.from : this.startDate || new Date(), this.range, this.periodIncludesUntil);
        this.startDate = this.value.from;
        this.startValue = this.value;
    },

    /**
     * @return {Object} {from: Date, until: Date}
     */
    getValue: function() {
        return this.value;
    },

    /**
     * @param {Object} value {from: Date, until: Date}
     */
    setValue: function(value) {
        value.from = Ext.isDate(value.from) ? value.from : Date.parseDate(value.from, Date.patterns.ISO8601Long);
        value.until = Ext.isDate(value.until) ? value.until : Date.parseDate(value.until, Date.patterns.ISO8601Long);

        this.range = Ext.ux.form.PeriodPicker.getRange(value);
        this.value = Ext.ux.form.PeriodPicker.getPeriod(value.from, this.range , this.periodIncludesUntil);
        this.startDate = this.value.from;

        this.getRangeCombo().setValue(this.range);
        var dateString;

        switch(this.range) {
            case 'day':
                dateString = Tine.Tinebase.common.dateRenderer(this.startDate);
                break;
            case 'week':
                // NOTE: '+1' is to ensure we display the ISO8601 based week where weeks always start on monday!
                var wkStart = this.startDate.add(Date.DAY, this.startDate.getDay() < 1 ? 1 : 0);

                dateString = wkStart.getWeekOfYear() + ' - ' + this.startDate.format('Y');
                break;
            case 'month':
                dateString = Date.getShortMonthName(this.startDate.getMonth()) + ' ' + this.startDate.format('Y');
                break;
            case 'quarter':
                dateString = Math.ceil(+this.startDate.format('n')/3) + ' - ' + this.startDate.format('Y');
                break;
            case 'year':
                dateString = this.startDate.format('Y');
                break;
        }
        this.setPeriodText(dateString, new Date().between(this.value.from, this.value.until));

        if (JSON.stringify(this.value) != JSON.stringify(this.startValue)) {
            this.fireEvent('change', this, this.value, this.startValue);
        }

        this.startValue = this.value;
    },

    reset : function() {
        this.originalValue = this.startValue;

        Ext.ux.form.PeriodPicker.superclass.reset.apply(this, arguments);
    },

    setStartDate: function(startDate) {
        var value = Ext.ux.form.PeriodPicker.getPeriod(startDate, this.range, this.periodIncludesUntil);
        this.setValue(value);
    },

    setPeriodText: function(text, isThis) {
        this.el[(isThis ? 'add' : 'remove') + 'Class']('ux-pp-this');
        this.el.child('.ux-pp-period').update(Ext.util.Format.htmlEncode(text));
    },

    // private
    onRangeComboChange: function() {
        this.setValue(Ext.ux.form.PeriodPicker.getPeriod(this.startDate, this.getRangeCombo().getValue()), this.periodIncludesUntil);
    },

    // private
    onClick: function(e) {
        var mode = e.getTarget('.ux-pp-mode'),
            prev = e.getTarget('.ux-pp-prev'),
            next = e.getTarget('.ux-pp-next'),
            period = e.getTarget('.ux-pp-period');

        if (mode) {
            var newMode = this.mode != 'absolute' ? 'absolute' : 'relative';
            mode.removeClass('ux-pp-mode-' + this.mode);
            mode.addClass('ux-pp-mode-' + newMode);
            this.mode = newMode;

            // set period!
        } else if (next) {
            this.setStartDate(this.value.until.add(Date.SECOND, this.periodIncludesUntil ? 1 : 0));
        } else if (prev) {
            this.setStartDate(this.value.from.add(Date.DAY, -1));
        } else if (period) {
            this.getDatePickerMenu().show(period);
        }
    },

    // private
    onRender : function(ct, position){
        Ext.ux.form.PeriodPicker.superclass.onRender.call(this, ct, position);

        var rangeCombo = this.getRangeCombo();
        rangeCombo.render(this.el.child('.ux-pp-range'));
        rangeCombo.setWidth(this.getEl().getWidth() * 0.4);

        this.setValue(this.value);
        this.mon(this.getEl(), 'click', this.onClick, this);
    },

    // private
    getAutoCreate: function() {
        this.autoCreate = {
            tag: 'div',
                cls: 'ux-pp-field',
                cn: [{
                    tag: 'div',
                    cls: 'ux-pp-range',
                }, {
                    tag: 'div',
                    cls: 'ux-pp-controls',
                    cn: [/*{
                        tag: 'div',
                        cls: 'ux-pp-mode ux-pp-mode-' + this.mode
                    },*/ {
                        tag: 'div',
                        cls: 'ux-pp-prev'
                    }, {
                        tag: 'div',
                        cls: 'ux-pp-period'
                    }, {
                        tag: 'div',
                        cls: 'ux-pp-next'
                    }]
                }]
        };

        return Ext.ux.form.PeriodPicker.superclass.getAutoCreate.apply(this, arguments);
    },

    // private
    onResize: function (w, h) {
        Ext.ux.form.PeriodPicker.superclass.onResize.apply(this, arguments);

        this.getRangeCombo().setWidth(this.getEl().getWidth() * 0.4);
    },

    getRangeCombo: function() {
        if (! this.rangeCombo) {
            var fieldDef = [];
            Ext.each(this.availableRanges.split(','), function(range) {
                fieldDef.push([range, i18n._hidden(Ext.util.Format.capitalize(range))]);
            });

            this.rangeCombo = new Ext.form.ComboBox({
                typeAhead: true,
                triggerAction: 'all',
                mode: 'local',
                forceSelection: true,
                allowEmpty: false,
                editable: false,
                store: fieldDef,
                // value: this.range,
                listeners: {
                    scope: this,
                    select: this.onRangeComboChange
                }
            });
        }

        return this.rangeCombo;
    },

    /**
     * returns a new datepickerMenu
     *
     * @returns {Ext.menu.DateMenu}
     */
    getDatePickerMenu: function() {
            var me = this;

            return new Ext.menu.DateMenu({
                value: this.startDate,
                hideOnClick: true,
                focusOnSelect: true,
                plugins: [new Ext.ux.DatePickerWeekPlugin({
                    weekHeaderString: Tine.Tinebase.appMgr.get('Calendar').i18n._hidden('WK'),
                    inspectMonthPickerClick: function(btn, e) {
                        if (e.getTarget('button')) {
                            me.getRangeCombo().setValue('month');
                            me.range = 'month';
                            me.setStartDate(this.activeDate);
                            this.destroy();
                            return false;
                        }
                    }
                })],
                listeners: {
                    scope: this,
                    select: function(picker, value, weekNumber) {
                        this.getRangeCombo().setValue(weekNumber ? 'week' : 'day');
                        this.range = weekNumber ? 'week' : 'day';
                        this.setStartDate(value);
                    }
                }
            });
    }
});

/**
 * gets period
 *
 * @static
 * @param {Date} startDate date within period
 * @param {String} range day|week|month|year
 * @param {Bool} includeUntil
 * @return {Object} {from: Date, until: Date}
 */
Ext.ux.form.PeriodPicker.getPeriod = function(startDate, range, includeUntil) {
    var from, until;
    switch(range) {
        case 'day':
            from = startDate.clearTime(true);
            until = from.add(Date.DAY, 1);
            break;
        case 'week':
            from = startDate.clearTime(true).add(Date.DAY, -1 * startDate.getDay());
            if (Ext.DatePicker.prototype.startDay) {
                from = from.add(Date.DAY, Ext.DatePicker.prototype.startDay - (startDate.getDay() == 0 ? 7 : 0));
            }
            until = from.add(Date.DAY, 7);
            break;
        case 'month':
            from = startDate.clearTime(true).getFirstDateOfMonth();
            until = from.getLastDateOfMonth().add(Date.DAY, 1);
            break;
        case 'quarter':
            from = startDate.clearTime(true).getFirstDateOfMonth().add(Date.MONTH, -1 * ((+startDate.format('n')-1)%3));
            until = from.add(Date.MONTH, 2).getLastDateOfMonth().add(Date.DAY, 1);
            break;
        case 'year':
            var year = startDate.format('Y');
            from = Date.parseDate(year + '-01-01 00:00:00', 'Y-m-d H:i:s');
            until = Date.parseDate(++year + '-01-01 00:00:00', 'Y-m-d H:i:s');
            break;
    }

    if (includeUntil) {
        until = until.add(Date.SECOND, -1);
    }

    return {from: from, until: until};
};

/**
 * gets period
 *
 * @static
 * @param {Object} {from: Date, until: Date}
 * @return {String} range day|week|month|year
 */
Ext.ux.form.PeriodPicker.getRange = function(period) {
    var from = Ext.isDate(period.from) ? period.from : new Date(period.from),
        until = Ext.isDate(period.until) ? period.until : new Date(period.until),
        ms = from.getElapsed(until),
        msDay = 86400000;

    if (ms > msDay * 300) {
        return 'year';
    } else if (ms > msDay * 80) {
        return 'quarter';
    } else if (ms > msDay * 20) {
        return 'month';
    } else if (ms > msDay * 5) {
        return 'week';
    } else {
        return 'day'
    }

}
Ext.reg('ux-period-picker', Ext.ux.form.PeriodPicker)

/***/ }),
/* 1009 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.MoneyField
 * @extends     Ext.form.MoneyField
 */
Ext.ux.form.MoneyField = Ext.extend(Ext.ux.form.NumberField, {
    initComponent: function() {
        this.suffix = ' ' + Tine.Tinebase.registry.get('currencySymbol');
        this.decimalPrecision = 2;
        this.decimalSeparator = Tine.Tinebase.registry.get('decimalSeparator');

        this.supr().initComponent.apply(this, arguments);
    }
});

Ext.reg('extuxmoneyfield', Ext.ux.form.MoneyField);

/***/ }),
/* 1010 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.BytesField
 * @extends     Ext.form.NumberField
 */
Ext.ux.form.BytesField = Ext.extend(Ext.form.NumberField, {
    /**
     * @cfg {String} basePow
     * change this if the value is measured other than in bytes
     */
    basePow: 0,

    /**
     * @cfg {Number} divisor
     */
    divisor: 1024,

    /**
     * @cfg {String} forceUnit
     */
    forceUnit: false,

    suffixes: ['bytes', 'kb', 'mb', 'gb', 'tb', 'pb', 'eb', 'zb', 'yb'],

    decimalPrecision: 2,
    minValue: 0,
    baseChars : "0123456789bBkKmMgGtTpPeEzZyY ",

    initComponent: function() {
        this.decimalSeparator = Tine.Tinebase.registry.get('decimalSeparator');
        this.validateRe = new RegExp('([0-9' + this.decimalSeparator + ']+)\\s*([a-zA-Z]+)');

        this.supr().initComponent.apply(this, arguments);
    },

    validateValue : function(value){
        var _ = window.lodash,
            me = this,
            parts = String(value).match(this.validateRe),
            number = parts ? parts[1] : value,
            suffix = parts ? parts[2] : this.suffixes[this.basePow],
            pow = suffix ? this.suffixes.indexOf(suffix.toLowerCase()) : 0;

        if(!this.supr().validateValue.call(this, number)) {
            return false;
        }

        if (! _.reduce(me.suffixes, function(r, s) {
                return r || String(s).match(new RegExp('^' + suffix, 'i'));
            }, false)) {
            this.markInvalid(String.format(i18n._('{0} is not a valid unit'), suffix));
            return false;
        }

        return true;
    },


    parseValue : function(value){
        var parts = String(value).match(this.validateRe),
            number = parts ? parts[1] : value,
            suffix = parts ? parts[2] : this.suffixes[this.basePow],
            pow = suffix ? this.suffixes.indexOf(suffix.toLowerCase()) : 0;

        value = this.supr().parseValue.call(this, number);

        value = value * Math.pow(this.divisor, pow);

        value = value / Math.pow(this.divisor, this.basePow);

        // NOTE: decimals might come from bytes
        value = Math.round(value);

        return value;
    },

    setValue: function(value) {
        this.supr().setValue.call(this, value);

        value = value ?
            Tine.Tinebase.common.byteFormatter(value * Math.pow(this.divisor, this.basePow), this.forceUnit, this.decimalPrecision, false) :
            this.emptyText;

        this.setRawValue(value);

        return this;
    }
});

Ext.reg('extuxbytesfield', Ext.ux.form.BytesField);

/***/ }),
/* 1011 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Ext.ux.form.');

/**
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.LayerCombo
 * @extends     Ext.form.TriggerField
 * 
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * 
 * trigger field with support for extra layer on trigger click
 */
Ext.ux.form.LayerCombo = function(config) {
    Ext.ux.form.LayerCombo.superclass.constructor.call(this, config);
    
    this.addEvents(
        /**
         * @event beforecollapse
         * Fires before the layer is collapsed by calling the {@link #collapse} method.
         * Return false from an event handler to stop the collapse.
         * @param {LayerCombo} this
         */
        'beforecollapse'
    );
};

Ext.extend(Ext.ux.form.LayerCombo, Ext.form.TriggerField, {
    /**
     * @cfg {Boolean} hideButton Hide standard form buttons 
     */
    hideButtons: false,
    /**
     * @cfg {Object} config for innerForm
     */
    formConfig: null,
    /**
     * @cfg {Boolean} lazyInit <tt>true</tt> to not initialize the list for this combo until the field is focused
     * (defaults to <tt>true</tt>)
     */
    lazyInit : true,
    /**
     * @cfg {String} triggerClass An additional CSS class used to style the trigger button.  The trigger will always
     * get the class <tt>'x-form-trigger'</tt> and <tt>triggerClass</tt> will be <b>appended</b> if specified
     * (defaults to <tt>'x-form-arrow-trigger'</tt> which displays a downward arrow icon).
     */
    triggerClass : 'x-form-arrow-trigger',
    /**
     * @cfg {Boolean/String} shadow <tt>true</tt> or <tt>"sides"</tt> for the default effect, <tt>"frame"</tt> for
     * 4-way shadow, and <tt>"drop"</tt> for bottom-right
     */
    shadow : 'sides',
    /**
     * @cfg {String/Array} layerAlign A valid anchor position value. See <tt>{@link Ext.Element#alignTo}</tt> for details
     * on supported anchor positions and offsets. To specify x/y offsets as well, this value
     * may be specified as an Array of <tt>{@link Ext.Element#alignTo}</tt> method arguments.</p>
     * <pre><code>[ 'tl-bl?', [6,0] ]</code></pre>(defaults to <tt>'tr-br?'</tt>)
     */
    layerAlign : 'tl-bl?',
    /**
     * @cfg {String} layerClass The CSS class to add to the predefined <tt>'x-combo-layer'</tt> class
     * applied the dropdown layer element (defaults to '').
     */
    layerClass : '',
    /**
     * @cfg {Number} minLayerWidth The minimum width of the dropdown layer in pixels (defaults to <tt>70</tt>, will
     * be ignored if <tt>{@link #layerWidth}</tt> has a higher value)
     */
    minLayerWidth : 70,
    /**
     * @cfg {Number} layerWidth The width (used as a parameter to {@link Ext.Element#setWidth}) of the dropdown
     * layer (defaults to the width of the ComboBox field).  See also <tt>{@link #minLayerWidth}</tt>
     */
    /**
     * @cfg {Number} minLayerHeight The minimum height of the dropdown layer in pixels (defaults to <tt>70</tt>, will
     * be ignored if <tt>{@link #layerHeight}</tt> has a higher value)
     */
    minLayerHeight: 70,
    /**
     * @cfg {Number} layerHeight The width (used as a parameter to {@link Ext.Element#setHeight}) of the dropdown
     * layer (defaults to the width of the ComboBox field).  See also <tt>{@link #minLayerHeight}</tt>
     */
    
    /**
     * @property currentValue
     * @type mixed
     */
    currentValue: null,
    
    editable: false,
    
    /**
     * Hides the dropdown layer if it is currently expanded. Fires the {@link #collapse} event on completion.
     */
    collapse: function() {
        if(!this.isExpanded()){
            return;
        }
        if(this.fireEvent('beforecollapse', this) !== false){
            this.layer.hide();
            Ext.getDoc().un('mousewheel', this.collapseIf, this);
            Ext.getDoc().un('mousedown', this.collapseIf, this);
            this.fireEvent('collapse', this);
        }
    },
    
    
    /**
     * @private
     * @param {Ext.EventObject} e
     */
    collapseIf : function(e){
        if(Ext.WindowMgr.getActive() == this.layer && !e.within(this.wrap) && !e.within(this.layer)){
            this.collapse();

            if (this.inEditor && this.editor) {
                this.onCancel();
            }
        }
    },
    
    /**
     * this fn is here so this filed is detected like a combo
     * @private
     */
    doQuery: Ext.emptyFn,
    
    /**
     * Expands the dropdown layer if it is currently hidden. Fires the {@link #expand} event on completion.
     */
    expand: function() {
        if(this.isExpanded() || !this.hasFocus){
            return;
        }
        
        this.setFormValue(this.currentValue);
        this.layer.alignTo.apply(this.layer, [this.el].concat(this.layerAlign));
        this.layer.show();
        if(Ext.isGecko2){
            this.innerLayer.setOverflow('auto'); // necessary for FF 2.0/Mac
        }
        this.mon(Ext.getDoc(), {
            scope: this,
            mousewheel: this.collapseIf,
            mousedown: this.collapseIf
        });
        this.fireEvent('expand', this);
    },

    /**
     * get values from form
     * 
     * @return {mixed}
     */
    getFormValue: function() {
        var formValues = this.getInnerForm().getForm().getValues();
        return formValues;
    },
    
    /**
     * template fn for subclasses to return inner form items
     */
    getItems: function() {
        return [];
    },
    
    /**
     * <p>Returns the element used to house this ComboBox's pop-up layer. Defaults to the document body.</p>
     * A custom implementation may be provided as a configuration option if the floating layer needs to be rendered
     * to a different Element. An example might be rendering the layer inside a Menu so that clicking
     * the layer does not hide the Menu
     */
    getLayerParent : function() {
        return document.body;
    },
    
    /**
     * get buttons
     * 
     * @private
     */
    getButtons: function () {
        if (! this.hideButtons) {
            this.action_ok = new Ext.Action({
                text: i18n._('Ok'),
                scope: this,
                handler: this.onOk,
                iconCls: 'action_saveAndClose'
            });
            
            this.action_cancel = new Ext.Action({
                text: i18n._('Cancel'),
                scope: this,
                handler: this.onCancel,
                iconCls: 'action_cancel'
            });
            
            return [
                this.action_cancel,
                this.action_ok
            ];
        }
                
        return false;
    },
    
    /**
     * returns inner form of the layer
     * 
     */
    getInnerForm: function() {
        if (! this.innerForm) {
            this.innerForm = new Ext.form.FormPanel(Ext.apply({
                //labelWidth: 30,
                height: this.layerHeight || 'auto',
                border: false,
                cls: 'tw-editdialog',
                items: this.getItems(),
                buttonAlign: 'right',
                buttons: this.getButtons()
            }, this.formConfig));
        }
        
        return this.innerForm;
    },
    
    /**
     * Returns the currently selected field value or empty string if no value is set.
     * @return {String} value The selected value
     */
    getValue: function() {
        return Ext.decode(Ext.encode(this.currentValue));
    },
    
    initComponent: function() {
        Ext.ux.form.LayerCombo.superclass.initComponent.apply(this, arguments);

        this.on('afterrender', this.onAfterRender, this, {buffer: 500});
        this.on('beforedestroy', this.onBeforeDestory, this);
    },

    onAfterRender: function() {
        // if used as gridEditor
        if (this.inEditor) {
            var editorWrapEl = this.el.up('.x-grid-editor', 5);
            if (editorWrapEl) {
                this.editor = Ext.getCmp(editorWrapEl.id);
                this.editor.allowBlur = true;
                this.expand();
            }
        }
    },

    onBeforeDestory: function() {
        if (this.layer) {
            Ext.WindowMgr.unregister(this.layer);
        }
    },

    /**
     * init the dropdown layer
     * 
     * @private
     */
    initLayer: function() {
        if(!this.layer){
            var cls = 'ux-layercombo-layer',
                layerParent = Ext.getDom(this.getLayerParent() || Ext.getBody());

            this.layer = new Ext.Layer({
                parentEl: layerParent,
                shadow: this.shadow,
                cls: [cls, this.layerClass].join(' '),
                constrain:false
            });

            // manage z-index by windowMgr
            this.layer.setActive = Ext.emptyFn;
            Ext.WindowMgr.register(this.layer);
            Ext.WindowMgr.bringToFront(this.layer);

            var lw = this.layerWidth || Math.max(this.wrap.getWidth(), this.minLayerWidth);
            this.layer.setSize(lw, 0);
            this.assetHeight = 0;
            if(this.syncFont !== false){
                this.layer.setStyle('font-size', this.el.getStyle('font-size'));
            }
            if(this.title){
                this.header = this.layer.createChild({cls:cls+'-hd', html: this.title});
                this.assetHeight += this.header.getHeight();
            }

            this.innerLayer = this.layer.createChild({cls:cls+'-inner'});
            //this.mon(this.innerLayer, 'mouseover', this.onViewOver, this);
            //this.mon(this.innerLayer, 'mousemove', this.onViewMove, this);
            this.innerLayer.setWidth(lw - this.layer.getFrameWidth('lr'));
            
            var innerForm = this.getInnerForm();
            innerForm.render(this.innerLayer);
            
            this.setLayerHeight(this.layerHeight ? this.layerHeight : 'auto');
        }
    },

    /**
     * Returns true if the dropdown layer is expanded, else false.
     */
    isExpanded : function(){
        return this.layer && this.layer.isVisible();
    },
    
    /**
     * cancel handler
     */
    onCancel: function() {
        this.setValue(this.currentValue);
        this.collapse();

        if (this.inEditor && this.editor) {
            this.editor.cancelEdit();
        }
    },
    
    /**
     * do cleanup
     * 
     * @private
     */
    onDestroy : function(){
       if (this.dqTask){
           this.dqTask.cancel();
           this.dqTask = null;
       }
       Ext.destroy(
           this.resizer,
           this.layer
       );
       Ext.destroyMembers(this, 'hiddenField');
       Ext.form.ComboBox.superclass.onDestroy.call(this);
   },
 
    /**
     * ok handler
     */
    onOk: function() {
        this.collapse();
        var v = this.getFormValue();
        this.setValue(v);
        
        this.fireEvent('select', this, v);
        //this.startValue = v;

        if (this.inEditor && this.editor) {
            this.editor.completeEdit();
        }
    },
    
    /**
     * executed onRender
     * 
     * @private
     * 
     * @param {Ext.Container} ct
     * @param {Number} position
     */
    onRender : function(ct, position){
        if(this.hiddenName && !Ext.isDefined(this.submitValue)){
            this.submitValue = false;
        }
        Ext.ux.form.LayerCombo.superclass.onRender.apply(this, arguments);
        if(this.hiddenName){
            this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName,
                    id: (this.hiddenId||this.hiddenName)}, 'before', true);

        }
        if(Ext.isGecko){
            this.el.dom.setAttribute('autocomplete', 'off');
        }

        if(!this.lazyInit){
            this.initLayer();
        }else{
            this.on('focus', this.initLayer, this, {single: true});
        }
    },
    
    /**
     * Implements the default empty TriggerField.onTriggerClick function
     * 
     * @private
     */
    onTriggerClick : function(){
        if (this.readOnly || this.disabled){
            return;
        }
        if(this.isExpanded()){
            this.collapse();
            this.el.focus();
            if (this.inEditor && this.editor) {
                this.onCancel();
            }
        } else {
            this.onFocus({});
            this.expand()
        }
    },
    
    /**
     * set layer height
     * 
     * @param {Number} height
     */
    setLayerHeight: function(height) {
        if (! Ext.isNumber(height)) {
            height = this.innerForm.getHeight();
        }
        this.innerLayer.dom.style.height = '';
        var pad = this.layer.getFrameWidth('tb') + (this.resizable ? this.handleHeight : 0) + this.assetHeight;

        this.innerLayer.setHeight(height);
        this.layer.beginUpdate();
        this.layer.setHeight(height+pad);
        this.layer.alignTo.apply(this.layer, [this.el].concat(this.layerAlign));
        this.layer.endUpdate();
    },
    
    /**
     * Sets the specified value into the field.  If the value finds a match, the corresponding record text
     * will be displayed in the field.  If the value does not match the data value of an existing item,
     * and the valueNotFoundText config option is defined, it will be displayed as the default field text.
     * Otherwise the field will be blank (although the value will still be set).
     * 
     * @param {String} value The value to match
     * @return {Ext.form.Field} this
     */
    setValue: function(value) {
        var oldValue = this.currentValue;
        this.currentValue = value;
        Tine.Tinebase.common.assertComparable(this.currentValue);

        if (JSON.stringify(value) != JSON.stringify(oldValue)){
            this.fireEvent('change', this, value, oldValue);
        }

        return this;
    },
    
    /**
     * sets values to innerForm
     */
    setFormValue: function(value) {
        this.getInnerForm().getForm().setValues(value);
    }
});


/***/ }),
/* 1012 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * A ComboBox with a secondary trigger button that clears the contents of the ComboBox
 * 
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.ClearableComboBox
 * @extends     Ext.form.ComboBox
 */
Ext.ux.form.ClearableComboBox = Ext.extend(Ext.form.ComboBox, {     
    /**
     * @cfg {bool} disableClearer
     * disables the clearer
     */
    disableClearer: null,
    
    initComponent : function(){
        Ext.ux.form.ClearableComboBox.superclass.initComponent.call(this);
        this.triggerConfig = {
            tag: 'span', cls: 'x-form-twin-triggers', style: 'padding-right:2px',  // padding needed to prevent IE from clipping 2nd trigger button
            cn: [
                {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger x-form-clear-trigger"},
                {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.triggerClass}
            ]
        };
    },

    getTrigger: function (index) {
        return this.triggers[index];
    },

    initTrigger: function () {
        var ts = this.trigger.select('.x-form-trigger', true);
        this.wrap.setStyle('overflow', 'hidden');
        var triggerField = this;
        ts.each(function (t, all, index) {
            t.hide = function () {
                this.dom.style.display = 'none';
                triggerField.el.setWidth(triggerField.wrap.getWidth() - 21);
            };
            t.show = function () {
                this.dom.style.display = '';
                triggerField.el.setWidth(triggerField.wrap.getWidth() - 38);
            };
            var triggerIndex = 'Trigger' + (index + 1);

            if (this['hide' + triggerIndex]) {
                t.dom.style.display = 'none';
            }
            
            t.on("click", this['on' + triggerIndex + 'Click'], this, {preventDefault: true});
            t.addClassOnOver('x-form-trigger-over');
            t.addClassOnClick('x-form-trigger-click');
        }, this);
        
        this.triggers = ts.elements;
        this.triggers[0].hide();
    },
    
    // clear contents of combobox
    onTrigger1Click: function () {
        if (this.disabled) {
           return;
        }
        this.clearValue();
    },
    
    // pass to original combobox trigger handler
    onTrigger2Click: function () {
        this.onTriggerClick();
    },
    
    /**
     * reset
     */
    reset: function () {
        Ext.ux.form.ClearableComboBox.superclass.reset.apply(this, arguments);
        if (this.triggers && this.disableClearer !== true) {
            this.triggers[0].hide();
        }
    },
    
    /**
     * clear value
     */
    clearValue: function () {
        Ext.ux.form.ClearableComboBox.superclass.clearValue.apply(this, arguments);
        this.fireEvent('select', this, '', this.startValue);
        this.startValue = this.getRawValue();
        if (this.triggers && this.disableClearer !== true) {
            this.triggers[0].hide();
        }
    },
    
    // show clear trigger when item got selected
    onSelect: function (combo, record, index) {
        if (this.triggers && this.disableClearer !== true) {
            this.triggers[0].show();
        }
        Ext.ux.form.ClearableComboBox.superclass.onSelect.call(this, combo, record, index);
        this.startValue = this.getValue();
    },
    
    /**
     * @see Ext.form.ComboBox
     */
    setValue: function (value) {
        Ext.ux.form.ClearableComboBox.superclass.setValue.call(this, value);
        if (value && (this.triggers && this.disableClearer !== true)) {
            this.triggers[0].show();
        }
    },
    
    /**
     * @see Ext.form.ComboBox
     */
    assertValue : function(){
        
        var val = this.getRawValue(),
            rec;

        if (this.valueField && Ext.isDefined(this.value)){
            rec = this.findRecord(this.valueField, this.value);
        }
        if (!rec || rec.get(this.displayField) != val){
            rec = this.findRecord(this.displayField, val);
        }
        
        if (!rec && this.forceSelection){
            if (val.length > 0 && val != this.emptyText){
                this.el.dom.value = Ext.value(this.lastSelectionText, '');
                this.applyEmptyText();
            } else {
                this.clearValue();
            }
        } else {
            if (rec && this.valueField){
                // onSelect may have already set the value and by doing so
                // set the display field properly.  Let's not wipe out the
                // valueField here by just sending the displayField.
                if (this.value == val){
                    return;
                }
                val = rec.get(this.valueField || this.displayField);
            }
            
            this.selectedRecord = rec;
            
            // @see 0007622: losing non-contact recipient
            this.setRawValue(rec ? rec.get(this.displayField) : val);
        }
    }
});
Ext.reg('extuxclearablecombofield', Ext.ux.form.ClearableComboBox);

/***/ }),
/* 1013 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Ext.ux.form');

/**
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.ClearableTextField
 * @extends     Ext.form.TriggerField
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * Textfield with clearing trigger
 */
Ext.ux.form.ClearableTextField = Ext.extend(Ext.form.TriggerField, {
    /**
     * @cfg {Boolean} disableTrigger
     */
    disableTrigger: false,

    enableKeyEvents: true,
    triggerClass: 'x-form-clear-trigger',
    
    checkTrigger: function() {
        this.setHideTrigger(! (this.getValue() && !this.disableTrigger));
    },
    
    initComponent: function() {
        this.supr().initComponent.call(this);
        this.on('keyup', this.checkTrigger, this);
    },
    
    afterRender: function() {
        this.supr().afterRender.call(this);
        this.checkTrigger();
    },
    
    onTriggerClick: function() {
        var value = this.getValue();
        this.setValue('');
        
        if (value) {
            this.fireEvent('change', this, '', value);
        }
        
        this.checkTrigger();
        this.el.focus();
    },
    
    onDestroy: function() {
        this.un('keyup', this.checkTrigger);
    },
    
    setValue: function(value) {
        var ret = this.supr().setValue.call(this, value);
        this.checkTrigger();
        
        return ret;
    }
});
Ext.reg('extuxclearabletextfield', Ext.ux.form.ClearableTextField);


/***/ }),
/* 1014 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Ext.ux.form');

/**
 * A ComboBox with a (Ext.data.JsonStore) store that loads its data from a record in this format:
 * {
 *  value:1,
 *  records:[{
 *          totalcount: 2,
 *          results: {id: 0, name: 'name 1'}, {id: 1,name: 'name 2'}
 *      }]
 * }
 * 
 * use it like this:
 * {
 *   xtype:'reccombo',
 *   name: 'software_id',
 *   fieldLabel: this.app.i18n._('Software Version'),
 *   displayField: 'name',
 *   store: new Ext.data.Store({
 *      fields: Tine.Voipmanager.Model.SnomSoftware,
 *      proxy: Tine.Voipmanager.SnomSoftwareBackend,
 *      reader: Tine.Voipmanager.SnomSoftwareBackend.getReader(),
 *      remoteSort: true,
 *      sortInfo: {field: 'name', dir: 'ASC'}
 *   })
 * }
 *
 * @namespace   Ext.ux.form 
 * @class       Ext.ux.form.RecordsComboBox
 * @extends     Ext.form.ComboBox
 */
Ext.ux.form.RecordsComboBox = Ext.extend(Ext.form.ComboBox, {
    /**
     * default config
     */
    triggerAction: 'all',
    editable: false,
    forceSelection: true,
    valueField: 'id',
    
    /**
     * overwrite setValue() to get records
     * 
     * @param value
     */
    setValue: function(value) {
        var val = value;
        // check if object and load options from record
        if(typeof value === 'object' && Object.prototype.toString.call(value) === '[object Object]') {
            if(value['records'] !== undefined) {
                this.mode = 'local';
                this.store.loadData(value['records']);
            }
            val = value['value'];
        }
        Ext.ux.form.RecordsComboBox.superclass.setValue.call(this, val);
    }
});

// register xtype
Ext.reg('reccombo', Ext.ux.form.RecordsComboBox);


/***/ }),
/* 1015 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext*/

Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * A combination of datefield and timefield
 * 
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.DateTimeField
 * @extends     Ext.form.Field
 */
Ext.ux.form.DateTimeField = Ext.extend(Ext.form.Field, {
    autoEl: 'div',
    value: '',
    disabledClass: '',
    increment: 15,
    timeEditable: true,
    markedInvalid: false,

    // NOTE: minWidth gets not evaluated by ext - it's just a hint for consumers!
    minWidth: 160,

    /**
     * @cfg {Object} config to be applied to date field 
     */
    dateConf: null,
    
    /**
     * @cfg {Object} config to be applied to time field 
     */
    timeConf: null,
    
    /*
     * @cfg {String} Default Time in the form HH:MM, if null current time is used
     */
    defaultTime: null,
    
    initComponent: function () {
        Ext.ux.form.DateTimeField.superclass.initComponent.call(this);
        this.lastValues = [];
        this.on('change', this.onChange, this);

    },
    
    /**
     * Sets the default time when using the first time or after clearing the datefield
     * @param {Ext.form.Field}
     * @param {DateTime} newValue
     * @param {DateTime} oldValue
     */
    onChange: function(f, newValue, oldValue) {

        if(oldValue == '' && newValue) {
            var newDate = newValue.clone(),
                now = new Date(),
                times = (this.defaultTime) ? this.defaultTime.split(':') : [now.getHours(), now.getMinutes()];
                
            
            newDate.setHours(parseInt(times[0]));
            newDate.setMinutes(parseInt(times[1]));
                
            f.setValue(newDate);
        }
    },
    
    clearInvalid: function () {
        this.markedInvalid = false;
        
        if (this.dateField) {
            this.dateField.clearInvalid();
        }
        if (this.timeField) {
            this.timeField.clearInvalid();
        }
    },
    
    clearTime: function () {
        var dateTime = this.getValue();
        if (Ext.isDate(dateTime)) {
            this.setValue(this.getValue().clearTime(true));
        } else {
            this.timeField.setValue(new Date().clearTime());
        }
    },
    
    combineDateTime: function (date, time) {
        date = Ext.isDate(date) ? date : new Date.clearTime();
        
        if (Ext.isDate(time)) {
            date = date.clone();
            date.clearTime();
            date = date.add(Date.HOUR, time.getHours());
            date = date.add(Date.MINUTE, time.getMinutes());
        }
        
        return date;
    },
    
    getName: function () {
        return this.name;
    },
    
    getValue: function () {
        if (! this.dateField) {
            return this.value;
        }
        
        var date = this.dateField.getValue();
        var time = this.timeField.getValue();
        
        // this is odd, why doesn't Ext.form.TimeField a Date datatype?
        if (! Ext.isDate(time)) {
            time = Date.parseDate(time, 'H:i');
        }
        
        if (Ext.isDate(date)) {
            date = this.combineDateTime(date, time);
        }
        
        return date;
    },

    getRawValue: function() {
        if (! this.dateField) {
            return this.value;
        }

        var date = this.dateField.getRawValue();
        var time = this.timeField.getRawValue();

        return date + ' ' + time;
    },
    
    markInvalid: function (msg) {
        this.markedInvalid = true;
        
        this.dateField.markInvalid(msg);
        this.timeField.markInvalid(msg);
    },

    addClass: function (cls) {
        this.dateField.addClass(cls);
        this.timeField.addClass(cls);
    },

    removeClass: function (cls) {
        this.dateField.removeClass(cls);
        this.timeField.removeClass(cls);
    },
    
    onRender: function (ct, position) {
        var me = this,
            dateField = (this.allowBlank) ? Ext.ux.form.ClearableDateField : Ext.form.DateField;

        //Ext.ux.form.DateTimeField.superclass.onRender.call(this, ct, position);
        this.el = document.createElement(this.autoEl);
        this.el.id = this.getId();
        this.el = Ext.get(this.el);
        ct.dom.insertBefore(this.el.dom, position);
        this.el.applyStyles('overflow:visible;');

        this.el.blur = this.el.blur.createSequence(function() {
            me.dateField.el.blur();
            me.timeField.el.blur();
        });

        this.dateField = new dateField(Ext.apply({
            lazyRender: false,
            renderTo: this.el,
            readOnly: this.readOnly || this.dateFieldReadOnly,
            hideTrigger: this.hideTrigger,
            disabled: this.disabled || this.dateFieldDisabled,
            tabIndex: this.tabIndex === -1 ? this.tabIndex : false,
            allowBlank: this.allowBlank,
            value: this.value,
            listeners: {
                scope: this,
                change: this.onDateChange,
                select: this.onDateChange,
                focus: this.onDateFocus,
                blur: this.onDateBlur
            }
        }, this.dateConf || {}));
        
        this.timeField = new Ext.form.TimeField(Ext.apply({
            lazyRender: false,
            increment: this.increment,
            renderTo: this.el,
            readOnly: this.readOnly || this.timeFieldReadOnly,
            hideTrigger: this.hideTrigger,
            disabled: this.disabled || this.timeFieldDisabled,
            editable: this.timeEditable,
            tabIndex: this.tabIndex === -1 ? this.tabIndex : false,
            allowBlank: this.allowBlank,
            value: this.value,
            listeners: {
                scope: this,
                change: this.onTimeChange,
                select: this.onTimeChange,
                focus: this.onTimeFocus,
                blur: this.onTimeBlur
            }
        }, this.timeConf || {}));
        
    },

    triggerBlur: function() {
        if (this.dateField.hasFocus) {
            this.dateField.triggerBlur();
        } else if (this.timeField.hasFocus) {
            this.timeField.triggerBlur();
        }
    },

    onDateFocus: function () {
        if (! this.timeField.hasFocus) {
            this.hasFocus = true;
            this.fireEvent('focus', this);
        }
    },
    
    onDateBlur: function () {
        if (! this.timeField.hasFocus) {
            this.hasFocus = false;
            this.fireEvent('blur', this);
        }
    },

    onTimeFocus: function () {
        if (! this.dateField.hasFocus) {
            this.hasFocus = true;
            this.fireEvent('focus', this);
        }
    },

    onTimeBlur: function () {
        if (! this.dateField.hasFocus) {
            this.hasFocus = false;
            this.fireEvent('blur', this);
        }
    },
    
    onDateChange: function () {
        var newValue = this.getValue();
        this.setValue(newValue);
        this.fireEvent('change', this, newValue, this.lastValues.length > 1 ? this.lastValues[this.lastValues.length - 2] : '');
    },
    
    onResize: function (w, h) {
        Ext.ux.form.DateTimeField.superclass.onResize.apply(this, arguments);
        
        if(this.allowBlank) {
            var korrel = [0.65, 0.35];
        } else {
            var korrel = [0.55, 0.45];
        }
        
        // needed for readonly
        this.el.setHeight(20);
        
        this.el.setStyle({'position': 'relative'});
        
        this.dateField.wrap.setStyle({'position': 'absolute'});
        var dateFieldWidth = Math.abs(w * korrel[0] - 5);
        this.dateField.setWidth(dateFieldWidth);
        this.dateField.wrap.setWidth(dateFieldWidth);
        
        this.timeField.wrap.setStyle({'position': 'absolute'});
        var timeFieldWidth = Math.abs(w * korrel[1]);
        this.timeField.setWidth(timeFieldWidth);
        this.timeField.wrap.setWidth(timeFieldWidth);
        this.timeField.wrap.setLeft(dateFieldWidth + 5);
    },
    
    onTimeChange: function () {
        var newValue = this.getValue();
        this.setValue(newValue);
        this.fireEvent('change', this, newValue, this.lastValues.length > 1 ? this.lastValues[this.lastValues.length - 2] : '');
    },
    
    setDisabled: function (bool, what) {
        if (what !== 'time') {
            if (this.dateField) {
                this.dateField.setDisabled(bool);
            } else {
                this.dateFieldDisabled = true;
            }
        }
        
        if (what !== 'date') {
            if(this.timeField) {
                this.timeField.setDisabled(bool);
            } else {
                this.timeFieldDisabled = true;
            }
        }
        
        Ext.ux.form.DateTimeField.superclass.setDisabled.call(this, bool);
    },
    
    setReadOnly: function (bool, what) {
        if (what !== 'time' ) {
            if (this.dateField) {
                this.dateField.setReadOnly(bool);
            } else {
                this.dateFieldReadOnly = true;
            }
        }
        
        if (what !== 'date') {
            if (this.timeField) {
                this.timeField.setReadOnly(bool);
            } else {
                this.timeFieldReadOnly = true;
            }
        }

        Ext.ux.form.DateTimeField.superclass.setReadOnly.call(this, bool);
    },
    
    setRawValue: Ext.EmptyFn,
    
    setValue: function (value, skipHistory) {
        if (! skipHistory) {
            this.lastValues.push(value);
        }
        
        if (this.dateField && this.timeField) {
            this.dateField.setValue(value);
            this.timeField.setValue(value);
        }
        
        this.value = value;
    },
    
    undo: function () {
        if (this.lastValues.length > 1) {
            this.lastValues.pop();
            this.setValue(this.lastValues[this.lastValues.length - 1], true);
        } else {
            this.reset();
        }
    },
    
    isValid: function (preventMark) {
        return this.dateField.isValid(preventMark) && this.timeField.isValid(preventMark) && ! this.markedInvalid;
    }
});
Ext.reg('datetimefield', Ext.ux.form.DateTimeField);


/***/ }),
/* 1016 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext*/

Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * a yes/no combo box
 *
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.BooleanCombo
 * @extends     Ext.form.ComboBox
 */
Ext.ux.form.BooleanCombo = Ext.extend(Ext.form.ComboBox, {
    mode: 'local',
    forceSelection: true,
    allowEmpty: false,
    triggerAction: 'all',
    editable: false,

    initComponent: function () {
        this.store = [[true, i18n._('Yes')], [false, i18n._('No')]];
        this.supr().initComponent.call(this);
    }
});
Ext.reg('booleancombo', Ext.ux.form.BooleanCombo);


/***/ }),
/* 1017 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * A DateField with a secondary trigger button that clears the contents of the DateField
 *
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.ClearableDateField
 * @extends     Ext.form.DateField
 */
Ext.ux.form.ClearableDateField = Ext.extend(Ext.form.DateField, {
    initComponent : function(){
        Ext.ux.form.ClearableDateField.superclass.initComponent.call(this);

        this.triggerConfig = {
            tag:'span', cls:'x-form-twin-triggers',
            cn:[
                {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger x-form-clear-trigger"},            
                {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger x-form-date-trigger"}                            
            ]
        };
    },

    getTrigger : function(index){
        return this.triggers[index];
    },

    initTrigger : function(){
        var ts = this.trigger.select('.x-form-trigger', true);
        this.wrap.setStyle('overflow', 'hidden');
        var triggerField = this;
        ts.each(function(t, all, index){
            t.hide = function(){
                var w = triggerField.wrap.getWidth();
                this.dom.style.display = 'none';
                triggerField.el.setWidth(w-triggerField.trigger.getWidth());
            };
            t.show = function(){
                var w = triggerField.wrap.getWidth();
                this.dom.style.display = '';
                triggerField.el.setWidth(w-triggerField.trigger.getWidth());
            };
            var triggerIndex = 'Trigger'+(index+1);

            if(this['hide'+triggerIndex]){
                t.dom.style.display = 'none';
            }
            t.on("click", this['on'+triggerIndex+'Click'], this, {preventDefault:true});
            t.addClassOnOver('x-form-trigger-over');
            t.addClassOnClick('x-form-trigger-click');
        }, this);
        this.triggers = ts.elements;        
        this.triggers[0].hide();                   
    },
    
    validateValue : function(value) {
        if(value !== this.emptyText && value !== undefined && value.length > '1'){
            if (Ext.isArray(this.triggers) && this.triggers[0] && typeof this.triggers[0].show == 'function') {
                this.triggers[0].show();
            }
        }      
      
        return Ext.ux.form.ClearableDateField.superclass.validateValue.apply(this, arguments);
    },    
    // clear contents of combobox
    onTrigger1Click : function() {
        this.setValue('');
        this.fireEvent('select', this, '' , '');
        this.triggers[0].hide();
    },
    // pass to original combobox trigger handler
    onTrigger2Click : function() {
        this.onTriggerClick();
    },
    
    setValue: function(v) {
        if (Ext.isArray(this.triggers) && this.triggers[0] && typeof this.triggers[0].show == 'function') {
             this.triggers[0][ v ? 'show' : 'hide']();
        }
        
        return Ext.ux.form.ClearableDateField.superclass.setValue.apply(this, arguments);
    }
});
Ext.reg('extuxclearabledatefield', Ext.ux.form.ClearableDateField);


/***/ }),
/* 1018 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext, Tine*/

Ext.ns('Ext.ux.form');

/**
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.ImageField
 * 
 * <p>A field which displayes a image of the given url and optionally supplies upload
 * button with the feature to display the newly uploaded image on the fly</p>
 * <p>Example usage:</p>
 * <pre><code>
 var formField = new Ext.ux.form.ImageField({
     name: 'jpegimage',
     width: 90,
     height: 90
 });
 * </code></pre>
 */
Ext.ux.form.ImageField = Ext.extend(Ext.form.Field, {
    /**
     * @cfg {bool}
     */
    border: true,
    
    /**
     * @cfg {String}
     */
    defaultImage: 'images/icon-set/icon_undefined_contact.svg',
    
    
    defaultAutoCreate: {tag: 'div', cls: 'ux-imagefield-ct', cn: [
        {tag: 'img', cls: 'ux-imagefield-img'},
        {tag: 'div', cls: 'ux-imagefield-button'},
        {tag: 'div', cls: 'ux-imagefield-text'}
    ]},
    
    handleMouseEvents: true,
    
    initComponent: function () {
        this.plugins = this.plugins || [];
        this.scope = this;
        this.handler = this.onFileSelect;
        
        this.browsePlugin = new Ext.ux.file.BrowsePlugin({});
        this.plugins.push(this.browsePlugin);
        
        Tine.widgets.dialog.MultipleEditDialogPlugin.prototype.registerSkipItem(this);
        
        Ext.ux.form.ImageField.superclass.initComponent.call(this);
        this.value = this.defaultImage;
        
    },
    
    afterRender: function() {
        
        this.imageCt = this.el.child('img');
        this.buttonCt = this.el.child('div[class=ux-imagefield-button]');
        this.textCt = this.el.child('div[class=ux-imagefield-text]');
        
        if (this.border === false) {
            this.el.applyStyles({
                border: '0'
            });
        }
        
        this.loadMask = new Ext.LoadMask(this.buttonCt, {msg: i18n._('Loading'), msgCls: 'x-mask-loading'});
        this.textCt.setSize(this.width, this.height);
        var clickToEditText = i18n._('Click to edit');
        var tm = Ext.util.TextMetrics.createInstance(this.textCt);
        tm.setFixedWidth(this.width);
        this.textCt.applyStyles({
            top: ((this.height - tm.getHeight(clickToEditText)) / 2) + 'px'
        });
        this.textCt.insertHtml('afterBegin', clickToEditText);
        
        Ext.apply(this.browsePlugin, {
            buttonCt: this.buttonCt,
            renderTo: this.buttonCt
        });

        this.el.on('contextmenu', this.onContextMenu, this);

        Ext.ux.form.ImageField.superclass.afterRender.apply(this, arguments);
    },
    
    /**
    * returns value or empty string
    */
    getValue: function () {
        if (! this.value || this.value === this.defaultImage) {
            return '';
        } else {
            return String(this.value);
        }
    },
    
    /**
    * set value (image)
    */
    setValue: function (value) {
        Ext.ux.form.ImageField.superclass.setValue.call(this, value);
        if (! value || value === this.defaultImage) {
            this.value = this.defaultImage;
        } else {
            if (value instanceof Ext.ux.util.ImageURL || (Ext.isString(value) && value.match(/&/))) {
                this.value = Ext.ux.util.ImageURL.prototype.parseURL(value);
                this.value.width = (this.border === false ? this.width : this.width-2);
                this.value.height = (this.border === false ? this.height : this.height-2);
                this.value.ratiomode = 0;
            } else {
                this.setDefaultImage(value);
            }
        }
        this.updateImage();
    },
    
    /**
    * show image
    */
    updateImage: function () {
        var img = Ext.DomHelper.insertAfter(this.imageCt, '<img src="' + this.value + '"/>' , true);
        this.imageCt.remove();
        this.imageCt = img;
        this.textCt.setVisible(this.value === this.defaultImage);
        this.imageCt.setOpacity(this.value === this.defaultImage ? 0.2 : 1);
        
        img.on('load', function () {
            if (this.value === this.defaultImage) {
                this.imageCt.setStyle({
                    position: 'absolute',
                    top: ((this.height - this.imageCt.getHeight()) /2)+ 'px',
                    left: ((this.width - this.imageCt.getWidth()) /2) + 'px'
                });
            }
            this.loadMask.hide();
        }, this);
        img.on('error', function () {
            Ext.MessageBox.alert(i18n._('Image Failed'), i18n._('Could not load image. Please notify your Administrator')).setIcon(Ext.MessageBox.ERROR);
            this.loadMask.hide();
        }, this);
    },
    
    /**
    * set new default image
    */
    setDefaultImage: function (image) {
        if (this.value === this.defaultImage) {
            this.defaultImage = image;
            this.setValue(this.defaultImage);
        } else {
            this.defaultImage = image;
        }
    },
    
    /**
     * @private
     */
    onFileSelect: function (fileSelector) {
        if (! fileSelector.isImage()) {
            Ext.MessageBox.alert(i18n._('Not An Image'), i18n._('Please select an image file (gif/png/jpeg)')).setIcon(Ext.MessageBox.ERROR);
            return;
        }
        
        var files = fileSelector.getFileList();
        this.uploader = new Ext.ux.file.Upload({
            file: files[0],
            fileSelector: fileSelector
        });
        
        this.uploader.on('uploadcomplete', this.onUploadComplete, this);
        this.uploader.on('uploadfailure', this.onUploadFail, this);
        
        this.loadMask.show();
        
        var uploadKey = Tine.Tinebase.uploadManager.queueUpload(this.uploader);
        var fileRecord = Tine.Tinebase.uploadManager.upload(uploadKey);
        
        if (this.ctxMenu) {
            this.ctxMenu.hide();
        }
    },
    
    onUploadComplete: function(upload, record) {
        this.uploader.un('uploadcomplete', this.onUploadComplete, this);
        this.uploader.un('uploadfailure', this.onUploadFail, this);
        
        var value = new Ext.ux.util.ImageURL({
            id: record.get('tempFile').id,
            width: this.width,
            height: this.height,
            ratiomode: 0
        });
        this.setValue(value);
    },
    
    /**
     * @private
     */
    onUploadFail: function () {
        this.uploader.un('uploadcomplete', this.onUploadComplete, this);
        this.uploader.un('uploadfailure', this.onUploadFail, this);
        
        Ext.MessageBox.alert(i18n._('Upload Failed'), i18n._('Could not upload image. Please notify your Administrator')).setIcon(Ext.MessageBox.ERROR);
    },
    /**
     * executed on image contextmenu
     * @private
     */
    onContextMenu: function (e, input) {
        e.stopEvent();
        if (this.ctxMenu) {
            this.ctxMenu.destroy();
        }
        var upload = new Ext.menu.Item({
            text: i18n._('Change Image'),
            iconCls: 'action_uploadImage',
            handler: this.onFileSelect,
            scope: this,
            plugins: [new Ext.ux.file.BrowsePlugin({})]
        });
        this.ctxMenu = new Ext.menu.Menu({
            plugins: [{
                ptype: 'ux.itemregistry',
                key:   'Tinebase-MainContextMenu'
            }],
            items: [upload, {
                text: i18n._('Crop Image'),
                iconCls: 'action_cropImage',
                scope: this,
                disabled: true, 
                handler: function () {
                    var cropper = new Ext.ux.form.ImageCropper({
                        imageURL: this.value
                    });
                    
                    var dlg = new Tine.widgets.dialog.EditRecord({
                        handlerScope: this,
                        handlerCancle: this.close,
                        items: cropper
                    });
                    
                    var win = Tine.WindowFactory.getWindow({
                        width: 320,
                        height: 320,
                        title: i18n._('Crop Image'),
                        layout: 'fit',
                        items: dlg
                    });
                }
            }, {
                text: i18n._('Delete Image'),
                iconCls: 'action_delete',
                disabled: this.value === this.defaultImage,
                scope: this,
                handler: function () {
                    this.setValue('');
                }
                
            }, {
                text: i18n._('Show Original Image'),
                iconCls: 'action_originalImage',
                disabled: this.value === this.defaultImage,
                scope: this,
                handler: this.downloadImage
                
            }]
        });
        this.ctxMenu.showAt(e.getXY());
        
    },
    
    downloadImage: function () {
        var url = Ext.apply(this.value, {
            height: -1,
            width: -1
        }).toString();
        
        var window = Tine.WindowFactory.getWindow({
            url: url,
            name: 'showImage',
            width: 800,
            height: 600
        });
    },
    
    /**
    * clean up
    */
    onDestroy: function() {
        this.imageCt.remove();
        this.buttonCt.remove();
        this.textCt.remove();
        this.imageCt = null;
        this.buttonCt = null;
        this.textCt = null;
        this.loadMask.destroy();
        if (this.ctxMenu) {
            this.ctxMenu.destroy();
        }
        this.uploader = null;
        
        Ext.ux.form.ImageField.superclass.onDestroy.call(this);
    }
});
Ext.reg('ux.imagefield', Ext.ux.form.ImageField);

Ext.ns('Ext.ux.util');

/**
 * this class represents an image URL
 */
Ext.ux.util.ImageURL = function (config) {
    Ext.apply(this, config, {
        url: 'index.php',
        method: 'Tinebase.getImage',
        application: 'Tinebase',
        location: 'tempFile',
        width: 90,
        height: 120,
        ratiomode: 0,
        mtime: new Date().getTime()
    });
};
/**
 * generates an imageurl according to the class members
 * 
 * @return {String}
 */
Ext.ux.util.ImageURL.prototype.toString = function () {
    return this.url + 
        "?method=" + this.method + 
        "&application=" + this.application + 
        "&location=" + this.location + 
        "&id=" + this.id + 
        "&width=" + this.width + 
        "&height=" + this.height + 
        "&ratiomode=" + this.ratiomode + 
        "&mtime=" + this.mtime;
};
/**
 * parses an imageurl
 * 
 * @param  {String} url
 * @return {Ext.ux.util.ImageURL}
 */
Ext.ux.util.ImageURL.prototype.parseURL = function (url) {
    var urlString = url.toString(),
        params = {},
        lparams = urlString.substr(urlString.indexOf('?') + 1).split('&');
        
    for (var i = 0, j = lparams.length; i < j; i += 1) {
        var param = lparams[i].split('=');
        params[param[0]] = Ext.util.Format.htmlEncode(param[1]);
    }
    return new Ext.ux.util.ImageURL(params);
};



/***/ }),
/* 1019 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux.form');

/**
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.ImageCropper
 * @extends     Ext.Component
 */
Ext.ux.form.ImageCropper = function(config) {
    Ext.apply(this, config);

    Ext.ux.form.ImageCropper.superclass.constructor.apply(this, arguments);
    
    this.addEvents(
        /**
         * @event uploadcomplete
         * Fires when the upload was done successfully 
         * @param {String} croped image
         */
         'imagecropped'
    );
};

Ext.extend(Ext.ux.form.ImageCropper, Ext.Component, {
    /**
     * @property {Object} natrual size of image
     */
    imageSize: false,
    
    width: 320,
    height: 320,
    
    initComponent: function() {
        this.imageURL.width = 290;
        this.imageURL.height = 240;
        this.imageURL.ratiomode = 1;

        Ext.ux.form.ImageCropper.superclass.initComponent.call(this);
    },
    onRender: function(ct, position) {
        Ext.ux.form.ImageCropper.superclass.onRender.call(this, ct, position);
        this.wrapEl = Ext.DomHelper.insertFirst(ct, {tag: 'div'}, true);
        //this.maskEl = Ext.DomHelper.insertFirst(this.wrapEl, {tag: 'div', style: 'background-color: #000000'}, true);
        
        // bg image
        this.bgImageEl = Ext.DomHelper.insertFirst(this.wrapEl, {tag: 'img', id: 'yui_img', src: this.imageURL}, true);
        this.bgImageEl.setOpacity(0.5);
        
        // yui cropper is very fast. 
        // cause of the window usage the yui crop mask does not work, so we use the mask obove
        /*
        var Dom = YAHOO.util.Dom, 
        Event = YAHOO.util.Event;
    
        var crop = new YAHOO.widget.ImageCropper('yui_img');
        */
        
         // Ext only implementation is very slow!
         // the bad news is that the resizeable dosn't fire events while resizeing 
         // and that the dd onDrag looses scope
         this.fgImageEl = Ext.DomHelper.insertFirst(this.wrapEl, {tag: 'div', style: {
            width              : '100px',
            height             : '100px',
            position           : 'absolute',
            top                : '30px',
            left               : '30px',
            'background-image' : 'url(' + this.imageURL + ')',
            'background-repeat': 'no-repeat'
        }}, true);
        
        this.resizeable = new Ext.Resizable(this.fgImageEl, {
            wrap:true,
            pinned:true,
            handles: 's e se',
            draggable:true,
            dynamic:true
        });
        this.resizeable.dd.fgImageEl = this.fgImageEl;
        this.resizeable.dd.bgImageEl = this.bgImageEl;
        
        this.resizeable.dd.onDrag = this.syncImageEls;
        
        // fix opacity, which might be broken by the inherited window properties
        var rhs = this.resizeable.getEl().query('div.x-resizable-handle');
        for (var i=0, j=rhs.length; i<j; i++) {
            Ext.get(rhs[i]).setOpacity(1);
        }
        this.syncImageEls();
    },
    /**
     * sync fg image with bg image
     */
    syncImageEls: function() {
        var dx = this.bgImageEl.getX() - this.fgImageEl.getX();
        var dy = this.bgImageEl.getY() - this.fgImageEl.getY();
        this.fgImageEl.setStyle('background-position', dx + 'px ' + dy + 'px');
    }
});


/***/ }),
/* 1020 */
/***/ (function(module, exports) {

/**
 * Copyright (c) 2008, Steven Chim
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 * 
 *     * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
 *     * The names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
  * Ext.ux.form.Spinner Class
  *
  * @author  Steven Chim
  * @version Spinner.js 2008-08-27 v0.35
  *
  * @class Ext.ux.form.Spinner
  * @extends Ext.form.TriggerField
  */

Ext.ns("Ext.ux.form");

/**
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.Spinner
 * @extends     Ext.form.TriggerField
 */
Ext.ux.form.Spinner = function(config){
    Ext.ux.form.Spinner.superclass.constructor.call(this, config);
    this.addEvents({
        'spin' : true,
        'spinup' : true,
        'spindown' : true
    });
};

Ext.extend(Ext.ux.form.Spinner, Ext.form.TriggerField, {
    triggerClass : 'x-form-spinner-trigger',
    splitterClass : 'x-form-spinner-splitter',

    alternateKey : Ext.EventObject.shiftKey,
    strategy : undefined,

    //private
    onRender : function(ct, position){
        Ext.ux.form.Spinner.superclass.onRender.call(this, ct, position);

        this.splitter = this.wrap.createChild({tag:'div', cls:this.splitterClass, style:'width:13px; height:2px;'});
        this.splitter.show().setRight( (Ext.isIE) ? 1 : 2 );
        this.splitter.show().setTop(8);

        this.proxy = this.trigger.createProxy('', this.splitter, true);
        this.proxy.addClass("x-form-spinner-proxy");
        this.proxy.setStyle('left','0px');  
        this.proxy.setSize(14, 1);
        this.proxy.hide();
        this.dd = new Ext.dd.DDProxy(this.splitter.dom.id, "SpinnerDrag", {dragElId: this.proxy.id});

        this.initSpinner();
    },

    //private
    initTrigger : function(){
        this.trigger.addClassOnOver('x-form-trigger-over');
        this.trigger.addClassOnClick('x-form-trigger-click');
    },

    //private
    initSpinner : function(){
        this.keyNav = new Ext.KeyNav(this.el, {
            "up" : function(e){
                e.preventDefault();
                this.onSpinUp();
            },

            "down" : function(e){
                e.preventDefault();
                this.onSpinDown();
            },

            "pageUp" : function(e){
                e.preventDefault();
                this.onSpinUpAlternate();
            },

            "pageDown" : function(e){
                e.preventDefault();
                this.onSpinDownAlternate();
            },

            scope : this
        });

        this.repeater = new Ext.util.ClickRepeater(this.trigger);
        this.repeater.on("click", this.onTriggerClick, this, {preventDefault:true});
        this.trigger.on("mouseover", this.onMouseOver, this, {preventDefault:true});
        this.trigger.on("mouseout",  this.onMouseOut,  this, {preventDefault:true});
        this.trigger.on("mousemove", this.onMouseMove, this, {preventDefault:true});
        this.trigger.on("mousedown", this.onMouseDown, this, {preventDefault:true});
        this.trigger.on("mouseup",   this.onMouseUp,   this, {preventDefault:true});
        this.wrap.on("mousewheel",   this.handleMouseWheel, this);

        this.dd.setXConstraint(0, 0, 10);
        this.dd.setYConstraint(1500, 1500, 10);
        this.dd.endDrag = this.endDrag.createDelegate(this);
        this.dd.startDrag = this.startDrag.createDelegate(this);
        this.dd.onDrag = this.onDrag.createDelegate(this);

        /*
        jsakalos suggestion
        http://extjs.com/forum/showthread.php?p=121850#post121850 */
        if('object' == typeof this.strategy && this.strategy.xtype) {
            switch(this.strategy.xtype) {
                case 'number':
                    this.strategy = new Ext.ux.form.Spinner.NumberStrategy(this.strategy);
                    break;

                case 'date':
                    this.strategy = new Ext.ux.form.Spinner.DateStrategy(this.strategy);
                    break;

                case 'time':
                    this.strategy = new Ext.ux.form.Spinner.TimeStrategy(this.strategy);
                    break;

                default:
                    delete(this.strategy);
                    break;
            }
            delete(this.strategy.xtype);
        }

        if(this.strategy == undefined){
            this.strategy = new Ext.ux.form.Spinner.NumberStrategy();
        }
    },

    //private
    onMouseOver : function(){
        if(this.disabled){
            return;
        }
        var middle = this.getMiddle();
        this.__tmphcls = (Ext.EventObject.getPageY() < middle) ? 'x-form-spinner-overup' : 'x-form-spinner-overdown';
        this.trigger.addClass(this.__tmphcls);
    },

    //private
    onMouseOut : function(){
        this.trigger.removeClass(this.__tmphcls);
    },

    //private
    onMouseMove : function(){
        if(this.disabled){
            return;
        }
        var middle = this.getMiddle();
        if( ((Ext.EventObject.getPageY() > middle) && this.__tmphcls == "x-form-spinner-overup") ||
            ((Ext.EventObject.getPageY() < middle) && this.__tmphcls == "x-form-spinner-overdown")){
        }
    },

    //private
    onMouseDown : function(){
        if(this.disabled){
            return;
        }
        var middle = this.getMiddle();
        this.__tmpccls = (Ext.EventObject.getPageY() < middle) ? 'x-form-spinner-clickup' : 'x-form-spinner-clickdown';
        this.trigger.addClass(this.__tmpccls);
    },

    //private
    onMouseUp : function(){
        this.trigger.removeClass(this.__tmpccls);
    },

    //private
    onTriggerClick : function(){
        if(this.disabled || this.getEl().dom.readOnly){
            return;
        }
        var middle = this.getMiddle();
        var ud = (Ext.EventObject.getPageY() < middle) ? 'Up' : 'Down';
        this['onSpin'+ud]();
    },

    //private
    getMiddle : function(){
        var t = this.trigger.getTop();
        var h = this.trigger.getHeight();
        var middle = t + (h/2);
        return middle;
    },
    
    //private
    //checks if control is allowed to spin
    isSpinnable : function(){
        if(this.disabled || this.getEl().dom.readOnly){
            Ext.EventObject.preventDefault();    //prevent scrolling when disabled/readonly
            return false;
        }
        return true;
    },

    handleMouseWheel : function(e){
        //disable scrolling when not focused
        if(this.wrap.hasClass('x-trigger-wrap-focus') == false){
            return;
        }

        var delta = e.getWheelDelta();
        if(delta > 0){
            this.onSpinUp();
            e.stopEvent();
        } else if(delta < 0){
            this.onSpinDown();
            e.stopEvent();
        }
    },

    //private
    startDrag : function(){
        this.proxy.show();
        this._previousY = Ext.fly(this.dd.getDragEl()).getTop();
    },

    //private
    endDrag : function(){
        this.proxy.hide();
    },

    //private
    onDrag : function(){
        if(this.disabled){
            return;
        }
        var y = Ext.fly(this.dd.getDragEl()).getTop();
        var ud = '';

        if(this._previousY > y){ud = 'Up';}         //up
        if(this._previousY < y){ud = 'Down';}       //down

        if(ud != ''){
            this['onSpin'+ud]();
        }

        this._previousY = y;
    },

    //private
    onSpinUp : function(){
        if(this.isSpinnable() == false) {
            return;
        }
        if(Ext.EventObject.shiftKey == true){
            this.onSpinUpAlternate();
            return;
        }else{
            this.strategy.onSpinUp(this);
        }
        this.fireEvent("spin", this);
        this.fireEvent("spinup", this);
    },

    //private
    onSpinDown : function(){
        if(this.isSpinnable() == false) {
            return;
        }
        if(Ext.EventObject.shiftKey == true){
            this.onSpinDownAlternate();
            return;
        }else{
            this.strategy.onSpinDown(this);
        }
        this.fireEvent("spin", this);
        this.fireEvent("spindown", this);
    },

    //private
    onSpinUpAlternate : function(){
        if(this.isSpinnable() == false) {
            return;
        }
        this.strategy.onSpinUpAlternate(this);
        this.fireEvent("spin", this);
        this.fireEvent("spinup", this);
    },

    //private
    onSpinDownAlternate : function(){
        if(this.isSpinnable() == false) {
            return;
        }
        this.strategy.onSpinDownAlternate(this);
        this.fireEvent("spin", this);
        this.fireEvent("spindown", this);
    }

});

Ext.reg('uxspinner', Ext.ux.form.Spinner);


/***/ }),
/* 1021 */
/***/ (function(module, exports) {

/**
 * Copyright (c) 2008, Steven Chim
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 * 
 *     * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
 *     * The names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * Abstract Strategy
 *
 * @namespace   Ext.ux.form.Spinner
 * @class       Ext.ux.form.Spinner.Strategy
 * @extends     Ext.util.Observable
 */
Ext.ux.form.Spinner.Strategy = function(config){
    Ext.apply(this, config);
};

Ext.extend(Ext.ux.form.Spinner.Strategy, Ext.util.Observable, {
    defaultValue : 0,
    minValue : undefined,
    maxValue : undefined,
    incrementValue : 1,
    alternateIncrementValue : 5,
    validationTask : new Ext.util.DelayedTask(),
    
    onSpinUp : function(field){
        this.spin(field, false, false);
    },

    onSpinDown : function(field){
        this.spin(field, true, false);
    },

    onSpinUpAlternate : function(field){
        this.spin(field, false, true);
    },

    onSpinDownAlternate : function(field){
        this.spin(field, true, true);
    },

    spin : function(field, down, alternate){
        this.validationTask.delay(500, function(){field.validate();});
        //extend
    },

    fixBoundries : function(value){
        return value;
        //overwrite
    }
    
});

/**
 * Concrete Strategy: Numbers
 * 
 * @namespace   Ext.ux.form.Spinner
 * @class       Ext.ux.form.Spinner.NumberStrategy
 * @extends     Ext.ux.form.Spinner.Strategy
 */
Ext.ux.form.Spinner.NumberStrategy = function(config){
    Ext.ux.form.Spinner.NumberStrategy.superclass.constructor.call(this, config);
};

Ext.extend(Ext.ux.form.Spinner.NumberStrategy, Ext.ux.form.Spinner.Strategy, {

    allowDecimals : true,
    decimalPrecision : 2,
    
    spin : function(field, down, alternate){
        Ext.ux.form.Spinner.NumberStrategy.superclass.spin.call(this, field, down, alternate);

        var v = parseFloat(field.getValue());
        var incr = (alternate == true) ? this.alternateIncrementValue : this.incrementValue;

        (down == true) ? v -= incr : v += incr ;
        v = (isNaN(v)) ? this.defaultValue : v;
        v = this.fixBoundries(v);
        field.setRawValue(v);
    },

    fixBoundries : function(value){
        var v = value;

        if(this.minValue != undefined && v < this.minValue){
            v = this.minValue;
        }
        if(this.maxValue != undefined && v > this.maxValue){
            v = this.maxValue;
        }

        return this.fixPrecision(v);
    },
    
    // private
    fixPrecision : function(value){
        var nan = isNaN(value);
        if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){
            return nan ? '' : value;
        }
        return parseFloat(parseFloat(value).toFixed(this.decimalPrecision));
    }
});


/**
 * Concrete Strategy: Date
 *
 * @namespace   Ext.ux.form.Spinner
 * @class       Ext.ux.form.Spinner.DateStrategy
 * @extends     Ext.ux.form.Spinner.Strategy
 */
Ext.ux.form.Spinner.DateStrategy = function(config){
    Ext.ux.form.Spinner.DateStrategy.superclass.constructor.call(this, config);
};

Ext.extend(Ext.ux.form.Spinner.DateStrategy, Ext.ux.form.Spinner.Strategy, {
    defaultValue : new Date(),
    format : "Y-m-d",
    incrementValue : 1,
    incrementConstant : Date.DAY,
    alternateIncrementValue : 1,
    alternateIncrementConstant : Date.MONTH,

    spin : function(field, down, alternate){
        Ext.ux.form.Spinner.DateStrategy.superclass.spin.call(this, field, down, alternate);

        var v = field.getRawValue();
        
        v = Date.parseDate(v, this.format);
        var dir = (down == true) ? -1 : 1 ;
        var incr = (alternate == true) ? this.alternateIncrementValue : this.incrementValue;
        var dtconst = (alternate == true) ? this.alternateIncrementConstant : this.incrementConstant;

        if(typeof this.defaultValue == 'string'){
            this.defaultValue = Date.parseDate(this.defaultValue, this.format);
        }

        v = (v) ? v.add(dtconst, dir*incr) : this.defaultValue;

        v = this.fixBoundries(v);
        field.setRawValue(Ext.util.Format.date(v,this.format));
    },
    
    //private
    fixBoundries : function(date){
        var dt = date;
        var min = (typeof this.minValue == 'string') ? Date.parseDate(this.minValue, this.format) : this.minValue ;
        var max = (typeof this.maxValue == 'string') ? Date.parseDate(this.maxValue, this.format) : this.maxValue ;

        if(this.minValue != undefined && dt < min){
            dt = min;
        }
        if(this.maxValue != undefined && dt > max){
            dt = max;
        }

        return dt;
    }

});


/**
 * Concrete Strategy: Time
 *
 * @namespace   Ext.ux.form.Spinner
 * @class       Ext.ux.form.Spinner.TimeStrategy
 * @extends     Ext.ux.form.Spinner.DateStrategy
 */
Ext.ux.form.Spinner.TimeStrategy = function(config){
    Ext.ux.form.Spinner.TimeStrategy.superclass.constructor.call(this, config);
};

Ext.extend(Ext.ux.form.Spinner.TimeStrategy, Ext.ux.form.Spinner.DateStrategy, {
    format : "H:i",
    incrementValue : 1,
    incrementConstant : Date.MINUTE,
    alternateIncrementValue : 1,
    alternateIncrementConstant : Date.HOUR
});


/***/ }),
/* 1022 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Thomas Wadewitz <t.wadewitz@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * @todo        switch lock and trigger icons (because only the trigger icon has a round upper right corner)
 */
 
Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * Generic widget for a twin trigger combo field
 *
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.LockCombo
 * @extends     Ext.form.ComboBox
 */
Ext.ux.form.LockCombo = Ext.extend(Ext.form.ComboBox, {
    /**
     * @cfg {String} paramName
     */
    paramName : 'query',
    /**
     * @cfg {Bool} selectOnFocus
     */
    selectOnFocus : true,
    /**
     * @cfg {String} emptyText
     */
    emptyText: 'select entry...',
    
    hiddenFieldId: '',
    
    hiddenFieldData: '',
    
    validationEvent:false,
    validateOnBlur:false,
    trigger1Class:'x-form-trigger',
    trigger2ClassLocked:'x-form-locked-trigger',
    trigger2ClassUnlocked:'x-form-unlocked-trigger',
    hideTrigger1:false,
    width:180,
    hasSearch : false,
    /**
     * @private
     */
    initComponent : function(){
        Ext.ux.form.LockCombo.superclass.initComponent.call(this);

        if(!this.hiddenFieldData) {
            this.hiddenFieldData = '1';
        }

        this.triggerConfig = {
            tag:'span', cls:'x-form-twin-triggers', cn:[
            {tag: "img", id:'trigger1', src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger1Class},
            {tag: "img", id:'trigger2', src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " }
        ]};
    },

    getTrigger : function(index){
        return this.triggers[index];
    },

    initTrigger : function(){

        var ts = this.trigger.select('.x-form-trigger', true);
        this.wrap.setStyle('overflow', 'hidden');
        var triggerField = this;
        ts.each(function(t, all, index){
            t.hide = function(){
                var w = triggerField.wrap.getWidth();
                this.dom.style.display = 'none';
                triggerField.el.setWidth(w-triggerField.trigger.getWidth());
            };
            t.show = function(){
                var w = triggerField.wrap.getWidth();
                this.dom.style.display = '';
                triggerField.el.setWidth(w-triggerField.trigger.getWidth());
            };
            var triggerIndex = 'Trigger'+(index+1);

            if(this['hide'+triggerIndex]){
                t.dom.style.display = 'none';
            }
            t.on("click", this['on'+triggerIndex+'Click'], this, {preventDefault:true});
    
            if(t.id == 'trigger2') {
                if(this.hiddenFieldData == '0') {
                    var _cssClass = this.trigger2ClassLocked.toString();
                    t.addClass(_cssClass);
                }
                if(this.hiddenFieldData == '1' || !this.hiddenFieldData) {
                    var _cssClass = this.trigger2ClassUnlocked.toString();
                    t.addClass(_cssClass);
                }                
            }
    
            t.addClassOnOver('x-form-trigger-over');
            t.addClassOnClick('x-form-trigger-click');
        }, this);
        this.triggers = ts.elements;
    },
    

    onRender:function(ct, position) {
        Ext.ux.form.LockCombo.superclass.onRender.call(this, ct, position); // render the Ext.Button
        this.hiddenBox = ct.parent().createChild({tag:'input', type:'hidden', name: this.hiddenFieldId, id: this.hiddenFieldId, value: this.hiddenFieldData });
        Ext.ComponentMgr.register(this.hiddenBox);
    },


    onTrigger1Click: function(){
        if(this.disabled){
            return;
        }
        if(this.isExpanded()){
            this.collapse();
            this.el.focus();
        }else {
            this.onFocus({});
            if(this.triggerAction == 'all') {
                this.doQuery(this.allQuery, true);
            } else {
                this.doQuery(this.getRawValue());
            }
            this.el.focus();
        }
    },
    
    onTrigger2Click : function(){

        var _currentValue = Ext.getCmp(this.hiddenFieldId).getValue();
        
        var ts = this.trigger.select('.x-form-trigger', true);


        if (_currentValue == '0') {
            Ext.getCmp(this.hiddenFieldId).dom.value = '1';
     
            var _cssClass = this.trigger2ClassUnlocked.toString();
            ts.each(function(t, all, index){
                if (t.id == 'trigger2') {
                    t.dom.className = "x-form-trigger " + _cssClass;
                }
            });
        }
        else  {
            Ext.getCmp(this.hiddenFieldId).dom.value = '0';

            var _cssClass = this.trigger2ClassLocked.toString();
            ts.each(function(t, all, index){
                if (t.id == 'trigger2') {
                    t.dom.className = "x-form-trigger " + _cssClass;
                }
            });
        }
    }    
});
Ext.reg('lockCombo', Ext.ux.form.LockCombo);


/***/ }),
/* 1023 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux', 'Ext.ux.form');

/**
 * Generic widget for a twin trigger textfield
 *
 * @namespace   Ext.ux.form
 * @class       Ext.ux.form.LockTextfield
 * @extends     Ext.form.TriggerField
 */
Ext.ux.form.LockTextfield = Ext.extend(Ext.form.TriggerField, {
    hiddenFieldId: '',
    hiddenFieldData: '',
    
    triggerClassLocked: 'x-form-locked-trigger',
    triggerClassUnlocked: 'x-form-unlocked-trigger',
    
    /**
     * @private
     */
    initComponent: function() {
        this.triggerClass = (this.hiddenFieldData == '1') 
            ? this.triggerClassUnlocked 
            : this.triggerClassLocked;

        Ext.ux.form.LockTextfield.superclass.initComponent.call(this);
    },
    
    onRender:function(ct, position) {
        Ext.ux.form.LockTextfield.superclass.onRender.call(this, ct, position); // render the textfield
        this.hiddenBox = ct.parent().createChild({tag:'input', type:'hidden', name: this.hiddenFieldId, id: this.hiddenFieldId, value: this.hiddenFieldData });
        Ext.ComponentMgr.register(this.hiddenBox);
    },
    
    onTriggerClick: function() {
        //this.hiddenFieldData = (this.hiddenFieldData == '1') ? '0' : '1';
        //this.triggerClass = (this.hiddenFieldData == '1') ? 'x-form-unlocked-trigger' : 'x-form-locked-trigger';

        var _currentValue = Ext.getCmp(this.hiddenFieldId).getValue();

        if (_currentValue == '0') {
            Ext.getCmp(this.hiddenFieldId).dom.value = '1';
            this.trigger.removeClass(this.triggerClassLocked);
            this.trigger.addClass(this.triggerClassUnlocked);
        } else {
            Ext.getCmp(this.hiddenFieldId).dom.value = '0';
            this.trigger.removeClass(this.triggerClassUnlocked);
            this.trigger.addClass(this.triggerClassLocked);
        }
    }
});
Ext.reg('lockTextfield', Ext.ux.form.LockTextfield);


/***/ }),
/* 1024 */
/***/ (function(module, exports) {

/*!
 * MIT license
 */
/**
 * @author Shea Frederick - http://www.vinylfox.com
 * @class Ext.ux.form.HtmlEditor.MidasCommand
 * @extends Ext.util.Observable
 * <p>A base plugin for extending to create standard Midas command buttons.
 * googlecode project page: http://code.google.com/p/ext-ux-htmleditor-plugins/
 * </p>
 */
Ext.ns('Ext.ux.form.HtmlEditor');

/**
 * @namespace   Ext.ux.form.HtmlEditor
 * @class       Ext.ux.form.HtmlEditor.MidasCommand
 * @extends     Ext.util.Observable
 */
Ext.ux.form.HtmlEditor.MidasCommand = Ext.extend(Ext.util.Observable, {
    // private
    init: function(cmp){
        this.cmp = cmp;
        this.btns = [];
        this.cmp.on('render', this.onRender, this);
        this.cmp.on('initialize', this.onInit, this, {
            delay: 100,
            single: true
        });
    },
    // private
    onInit: function(){
        Ext.EventManager.on(this.cmp.getDoc(), {
            'mousedown': this.onEditorEvent,
            'dblclick': this.onEditorEvent,
            'click': this.onEditorEvent,
            'keyup': this.onEditorEvent,
            buffer: 100,
            scope: this
        });
    },
    // private
    onRender: function(){
        var midasCmdButton, tb = this.cmp.getToolbar(), btn;
        Ext.each(this.midasBtns, function(b){
            if (Ext.isObject(b)) {
                midasCmdButton = {
                    iconCls: 'x-edit-' + b.cmd,
                    handler: function(){
                        this.cmp.relayCmd(b.cmd);
                    },
                    scope: this,
                    tooltip: b.tooltip ||
                    {
                        title: b.title
                    },
                    overflowText: b.overflowText || b.title
                };
            } else {
                midasCmdButton = new Ext.Toolbar.Separator();
            }
            btn = tb.addButton(midasCmdButton);
            if (b.enableOnSelection) {
                btn.disable();
            }
            this.btns.push(btn);
        }, this);
    },
    // private
    onEditorEvent: function(){
        var doc = this.cmp.getDoc();
        Ext.each(this.btns, function(b, i){
            if (this.midasBtns[i].enableOnSelection || this.midasBtns[i].disableOnSelection) {
                if (doc.getSelection) {
                    if ((this.midasBtns[i].enableOnSelection && doc.getSelection() !== '') || (this.midasBtns[i].disableOnSelection && doc.getSelection() === '')) {
                        b.enable();
                    } else {
                        b.disable();
                    }
                } else if (doc.selection) {
                    if ((this.midasBtns[i].enableOnSelection && doc.selection.createRange().text !== '') || (this.midasBtns[i].disableOnSelection && doc.selection.createRange().text === '')) {
                        b.enable();
                    } else {
                        b.disable();
                    }
                }
            }
            if (this.midasBtns[i].monitorCmdState) {
                b.toggle(doc.queryCommandState(this.midasBtns[i].cmd));
            }
        }, this);
    }
});
/**
 * @namespace   Ext.ux.form.HtmlEditor
 * @class       Ext.ux.form.HtmlEditor.Divider
 * @extends     Ext.util.Observable
 * @author      Shea Frederick - http://www.vinylfox.com
 * 
 * <p>A plugin that creates a divider on the HtmlEditor. Used for separating additional buttons.</p>
 */
Ext.ux.form.HtmlEditor.Divider = Ext.extend(Ext.util.Observable, {
    // private
    init: function(cmp){
        this.cmp = cmp;
        this.cmp.on('render', this.onRender, this);
    },
    // private
    onRender: function(){
        this.cmp.getToolbar().addButton([new Ext.Toolbar.Separator()]);
    }
});
/**
 * @namespace   Ext.ux.form.HtmlEditor
 * @class       Ext.ux.form.HtmlEditor.IndentOutdent
 * @extends     Ext.ux.form.HtmlEditor.MidasCommand
 * @author      Shea Frederick - http://www.vinylfox.com
 * 
 * <p>A plugin that creates two buttons on the HtmlEditor for indenting and outdenting of selected text.</p>
 */
Ext.ux.form.HtmlEditor.IndentOutdent = Ext.extend(Ext.ux.form.HtmlEditor.MidasCommand, {
    // private
    midasBtns: ['|', {
        cmd: 'outdent',
        tooltip: {
            title: 'Outdent Text'
        },
        overflowText: 'Outdent Text'
    }, {
        cmd: 'indent',
        tooltip: {
            title: 'Indent Text'
        },
        overflowText: 'Indent Text'
    }]
});
/**
 * @namespace   Ext.ux.form.HtmlEditor
 * @class       Ext.ux.form.HtmlEditor.RemoveFormat
 * @extends     Ext.ux.form.HtmlEditor.MidasCommand
 * @author      Shea Frederick - http://www.vinylfox.com
 * 
 * <p>A plugin that creates a button on the HtmlEditor that will remove all formatting on selected text.</p>
 */
Ext.ux.form.HtmlEditor.RemoveFormat = Ext.extend(Ext.ux.form.HtmlEditor.MidasCommand, {
    midasBtns: ['|', {
        enableOnSelection: true,
        cmd: 'removeFormat',
        tooltip: {
            title: 'Remove Formatting'
        },
        overflowText: 'Remove Formatting'
    }]
});
/**
 * @namespace   Ext.ux.form.HtmlEditor
 * @class       Ext.ux.form.HtmlEditor.SubSuperScript
 * @extends     Ext.ux.form.HtmlEditor.MidasCommand
 * @author      Shea Frederick - http://www.vinylfox.com
 * 
 * <p>A plugin that creates two buttons on the HtmlEditor for superscript and subscripting of selected text.</p>
 */
Ext.ux.form.HtmlEditor.SubSuperScript = Ext.extend(Ext.ux.form.HtmlEditor.MidasCommand, {
    // private
    midasBtns: ['|', {
        enableOnSelection: true,
        cmd: 'subscript',
        tooltip: {
            title: 'Subscript'
        },
        overflowText: 'Subscript'
    }, {
        enableOnSelection: true,
        cmd: 'superscript',
        tooltip: {
            title: 'Superscript'
        },
        overflowText: 'Superscript'
    }]
});
/**
 * @namespace   Ext.ux.form.HtmlEditor
 * @class       Ext.ux.form.HtmlEditor.SpecialCharacters
 * @extends     Ext.util.Observable
 * @author      Shea Frederick - http://www.vinylfox.com
 * 
 * <p>A plugin that creates a button on the HtmlEditor for inserting special characters.</p>
 */
Ext.ux.form.HtmlEditor.SpecialCharacters = Ext.extend(Ext.util.Observable, {
    /**
     * @cfg {Array} specialChars
     * An array of additional characters to display for user selection.  Uses numeric portion of the ASCII HTML Character Code only. For example, to use the Copyright symbol, which is &#169; we would just specify <tt>169</tt> (ie: <tt>specialChars:[169]</tt>).
     */
    specialChars: [],
    /**
     * @cfg {Array} charRange
     * Two numbers specifying a range of ASCII HTML Characters to display for user selection. Defaults to <tt>[160, 256]</tt>.
     */
    charRange: [160, 256],
    // private
    init: function(cmp){
        this.cmp = cmp;
        this.cmp.on('render', this.onRender, this);
    },
    // private
    onRender: function(){
        var cmp = this.cmp;
        var btn = this.cmp.getToolbar().addButton({
            iconCls: 'x-edit-char',
            handler: function(){
                if (this.specialChars.length) {
                    Ext.each(this.specialChars, function(c, i){
                        this.specialChars[i] = ['&#' + c + ';'];
                    }, this);
                }
                for (i = this.charRange[0]; i < this.charRange[1]; i++) {
                    this.specialChars.push(['&#' + i + ';']);
                }
                var charStore = new Ext.data.ArrayStore({
                    fields: ['char'],
                    data: this.specialChars
                });
                this.charWindow = new Ext.Window({
                    title: 'Insert Special Character',
                    width: 436,
                    autoHeight: true,
                    layout: 'fit',
                    items: [{
                        xtype: 'dataview',
                        store: charStore,
                        ref: '../charView',
                        autoHeight: true,
                        multiSelect: true,
                        tpl: new Ext.XTemplate('<tpl for="."><div class="char-item">{char}</div></tpl><div class="x-clear"></div>'),
                        overClass: 'char-over',
                        itemSelector: 'div.char-item',
                        listeners: {
                            dblclick: function(t, i, n, e){
                                this.insertChar(t.getStore().getAt(i).get('char'));
                                this.charWindow.close();
                            },
                            scope: this
                        }
                    }],
                    buttons: [{
                        text: 'Insert',
                        handler: function(){
                            Ext.each(this.charWindow.charView.getSelectedRecords(), function(rec){
                                var c = rec.get('char');
                                this.insertChar(c);
                            }, this);
                            this.charWindow.close();
                        },
                        scope: this
                    }, {
                        text: 'Cancel',
                        handler: function(){
                            this.charWindow.close();
                        },
                        scope: this
                    }]
                });
                this.charWindow.show();
            },
            scope: this,
            tooltip: {
                title: 'Insert Special Character'
            },
            overflowText: 'Special Characters'
        });
    },
    /**
     * Insert a single special character into the document.
     * @param c String The special character to insert (not just the numeric code, but the entire ASCII HTML entity).
     */
    insertChar: function(c){
        if (c) {
            this.cmp.insertAtCursor(c);
        }
    }
});
/**
 * @namespace   Ext.ux.form.HtmlEditor
 * @class       Ext.ux.form.HtmlEditor.Table
 * @extends     Ext.util.Observable
 * @author      Shea Frederick - http://www.vinylfox.com
 * 
 * <p>A plugin that creates a button on the HtmlEditor for making simple tables.</p>
 */
Ext.ux.form.HtmlEditor.Table = Ext.extend(Ext.util.Observable, {
    // private
    cmd: 'table',
    /**
     * @cfg {Array} tableBorderOptions
     * A nested array of value/display options to present to the user for table border style. Defaults to a simple list of 5 varrying border types.
     */
    tableBorderOptions: [['none', 'None'], ['1px solid #000', 'Sold Thin'], ['2px solid #000', 'Solid Thick'], ['1px dashed #000', 'Dashed'], ['1px dotted #000', 'Dotted']],
    // private
    init: function(cmp){
        this.cmp = cmp;
        this.cmp.on('render', this.onRender, this);
    },
    // private
    onRender: function(){
        var cmp = this.cmp;
        var btn = this.cmp.getToolbar().addButton({
            iconCls: 'x-edit-table',
            handler: function(){
                if (!this.tableWindow){
                    this.tableWindow = new Ext.Window({
                        title: 'Insert Table',
                        closeAction: 'hide',
                        items: [{
                            itemId: 'insert-table',
                            xtype: 'form',
                            border: false,
                            plain: true,
                            bodyStyle: 'padding: 10px;',
                            labelWidth: 60,
                            labelAlign: 'right',
                            items: [{
                                xtype: 'numberfield',
                                allowBlank: false,
                                allowDecimals: false,
                                fieldLabel: 'Rows',
                                name: 'row',
                                width: 60
                            }, {
                                xtype: 'numberfield',
                                allowBlank: false,
                                allowDecimals: false,
                                fieldLabel: 'Columns',
                                name: 'col',
                                width: 60
                            }, {
                                xtype: 'combo',
                                fieldLabel: 'Border',
                                name: 'border',
                                forceSelection: true,
                                mode: 'local',
                                store: new Ext.data.ArrayStore({
                                    autoDestroy: true,
                                    fields: ['spec', 'val'],
                                    data: this.tableBorderOptions
                                }),
                                triggerAction: 'all',
                                value: 'none',
                                displayField: 'val',
                                valueField: 'spec',
                                width: 90
                            }]
                        }],
                        buttons: [{
                            text: 'Insert',
                            handler: function(){
                                var frm = this.tableWindow.getComponent('insert-table').getForm();
                                if (frm.isValid()) {
                                    var border = frm.findField('border').getValue();
                                    var rowcol = [frm.findField('row').getValue(), frm.findField('col').getValue()];
                                    if (rowcol.length == 2 && rowcol[0] > 0 && rowcol[0] < 10 && rowcol[1] > 0 && rowcol[1] < 10) {
                                        var html = "<table>";
                                        for (var row = 0; row < rowcol[0]; row++) {
                                            html += "<tr>";
                                            for (var col = 0; col < rowcol[1]; col++) {
                                                html += "<td width='20%' style='border: " + border + ";'>" + row + "-" + col + "</td>";
                                            }
                                            html += "</tr>";
                                        }
                                        html += "</table>";
                                        this.cmp.insertAtCursor(html);
                                    }
                                    this.tableWindow.hide();
                                }else{
                                    if (!frm.findField('row').isValid()){
                                        frm.findField('row').getEl().frame();
                                    }else if (!frm.findField('col').isValid()){
                                        frm.findField('col').getEl().frame();
                                    }
                                }
                            },
                            scope: this
                        }, {
                            text: 'Cancel',
                            handler: function(){
                                this.tableWindow.hide();
                            },
                            scope: this
                        }]
                    });
                
                }else{
                    this.tableWindow.getEl().frame();
                }
                this.tableWindow.show();
            },
            scope: this,
            tooltip: {
                title: 'Insert Table'
            },
            overflowText: 'Table'
        });
    }
});
/**
 * @namespace   Ext.ux.form.HtmlEditor
 * @class       Ext.ux.form.HtmlEditor.Word
 * @extends     Ext.util.Observable
 * @author      Shea Frederick - http://www.vinylfox.com
 * 
 * <p>A plugin that creates a button on the HtmlEditor for pasting text from Word without all the jibberish html.</p>
 */
Ext.ux.form.HtmlEditor.Word = Ext.extend(Ext.util.Observable, {
    curLength: 0,
    lastLength: 0,
    lastValue: '',
    wordPasteEnabled: true,
    // private
    init: function(cmp){
        
        this.cmp = cmp;
        this.cmp.on('render', this.onRender, this);
        this.cmp.on('initialize', this.onInit, this, {delay:100, single: true});
        
    },
    // private
    onInit: function(){
        
        Ext.EventManager.on(this.cmp.getDoc(), {
            'keyup': this.checkIfPaste,
            scope: this
        });
        this.lastValue = this.cmp.getValue();
        this.curLength = this.lastValue.length;
        this.lastLength = this.lastValue.length;
        
    },
    // private
    checkIfPaste: function(e){
        
        var diffAt = 0;
        this.curLength = this.cmp.getValue().length;
        
        if (e.V == e.getKey() && e.ctrlKey && this.wordPasteEnabled){
            
            this.cmp.suspendEvents();
            
            diffAt = this.findValueDiffAt(this.cmp.getValue());
            var parts = [
                this.cmp.getValue().substr(0, diffAt),
                this.fixWordPaste(this.cmp.getValue().substr(diffAt, (this.curLength - this.lastLength))),
                this.cmp.getValue().substr((this.curLength - this.lastLength)+diffAt, this.curLength)
            ];
            this.cmp.setValue(parts.join(''));
            
            this.cmp.resumeEvents();
        }
        
        this.lastLength = this.cmp.getValue().length;
        this.lastValue = this.cmp.getValue();
        
    },
    // private
    findValueDiffAt: function(val){
        
        for (i=0;i<this.curLength;i++){
            if (this.lastValue[i] != val[i]){
                return i;            
            }
        }
        
    },
    /**
     * Cleans up the jubberish html from Word pasted text.
     * @param wordPaste String The text that needs to be cleansed of Word jibberish html.
     * @return {String} The passed in text with all Word jibberish html removed.
     */
    fixWordPaste: function(wordPaste) {
        
        var removals = [/&nbsp;/ig, /[\r\n]/g, /<(xml|style)[^>]*>.*?<\/\1>/ig, /<\/?(meta|object|span)[^>]*>/ig,
            /<\/?[A-Z0-9]*:[A-Z]*[^>]*>/ig, /(lang|class|type|href|name|title|id|clear)=\"[^\"]*\"/ig, /style=(\'\'|\"\")/ig, /<![\[-].*?-*>/g, 
            /MsoNormal/g, /<\\?\?xml[^>]*>/g, /<\/?o:p[^>]*>/g, /<\/?v:[^>]*>/g, /<\/?o:[^>]*>/g, /<\/?st1:[^>]*>/g, /&nbsp;/g, 
            /<\/?SPAN[^>]*>/g, /<\/?FONT[^>]*>/g, /<\/?STRONG[^>]*>/g, /<\/?H1[^>]*>/g, /<\/?H2[^>]*>/g, /<\/?H3[^>]*>/g, /<\/?H4[^>]*>/g, 
            /<\/?H5[^>]*>/g, /<\/?H6[^>]*>/g, /<\/?P[^>]*><\/P>/g, /<!--(.*)-->/g, /<!--(.*)>/g, /<!(.*)-->/g, /<\\?\?xml[^>]*>/g, 
            /<\/?o:p[^>]*>/g, /<\/?v:[^>]*>/g, /<\/?o:[^>]*>/g, /<\/?st1:[^>]*>/g, /style=\"[^\"]*\"/g, /style=\'[^\"]*\'/g, /lang=\"[^\"]*\"/g, 
            /lang=\'[^\"]*\'/g, /class=\"[^\"]*\"/g, /class=\'[^\"]*\'/g, /type=\"[^\"]*\"/g, /type=\'[^\"]*\'/g, /href=\'#[^\"]*\'/g, 
            /href=\"#[^\"]*\"/g, /name=\"[^\"]*\"/g, /name=\'[^\"]*\'/g, / clear=\"all\"/g, /id=\"[^\"]*\"/g, /title=\"[^\"]*\"/g, 
            /<span[^>]*>/g, /<\/?span[^>]*>/g, /class=/g];
                    
        Ext.each(removals, function(s){
            wordPaste = wordPaste.replace(s, "");
        });
        
        // keep the divs in paragraphs
        wordPaste = wordPaste.replace(/<div[^>]*>/g, "<p>");
        wordPaste = wordPaste.replace(/<\/?div[^>]*>/g, "</p>");
        return wordPaste;
        
    },
    // private
    onRender: function() {
        
        this.cmp.getToolbar().add({
            iconCls: 'x-edit-wordpaste',
            pressed: true,
            handler: function(t){
                t.toggle(!t.pressed);
                this.wordPasteEnabled = !this.wordPasteEnabled;
            },
            scope: this,
            tooltip: {
                text: 'Cleanse text pasted from Word or other Rich Text applications'
            }
        });
        
    }
});
/**
 * @namespace   Ext.ux.form.HtmlEditor
 * @class       Ext.ux.form.HtmlEditor.HR
 * @extends     Ext.util.Observable
 * @author      Shea Frederick - http://www.vinylfox.com
 * 
 * <p>A plugin that creates a button on the HtmlEditor for inserting a horizontal rule.</p>
 */
Ext.ux.form.HtmlEditor.HR = Ext.extend(Ext.util.Observable, {
    // private
    cmd: 'hr',
    // private
    init: function(cmp){
        this.cmp = cmp;
        this.cmp.on('render', this.onRender, this);
    },
    // private
    onRender: function(){
        var cmp = this.cmp;
        var btn = this.cmp.getToolbar().addButton({
            iconCls: 'x-edit-hr',
            handler: function(){
                if (!this.hrWindow){
                    this.hrWindow = new Ext.Window({
                        title: 'Insert Rule',
                        closeAction: 'hide',
                        items: [{
                            itemId: 'insert-hr',
                            xtype: 'form',
                            border: false,
                            plain: true,
                            bodyStyle: 'padding: 10px;',
                            labelWidth: 60,
                            labelAlign: 'right',
                            items: [{
                                xtype: 'label',
                                html: 'Enter the width of the Rule in percentage<br/> followed by the % sign at the end, or to<br/> set a fixed width omit the % symbol.<br/>&nbsp;'
                            }, {
                                xtype: 'textfield',
                                maskRe: /[0-9]|%/,
                                regex: /^[1-9][0-9%]{1,3}/,
                                fieldLabel: 'Width',
                                name: 'hrwidth',
                                width: 60,
                                 listeners: {
                                    specialkey: function(f, e){
                                        if ((e.getKey() == e.ENTER || e.getKey() == e.RETURN) && f.isValid()) {
                                            this.doInsertHR();
                                        }else{
                                            f.getEl().frame();
                                        }
                                    },
                                    scope: this
                                }
                            }]
                        }],
                        buttons: [{
                            text: 'Insert',
                            handler: function(){
                                var frm = this.hrWindow.getComponent('insert-hr').getForm();
                                if (frm.isValid()){
                                    this.doInsertHR();
                                }else{
                                    frm.findField('hrwidth').getEl().frame();
                                }
                            },
                            scope: this
                        }, {
                            text: 'Cancel',
                            handler: function(){
                                this.hrWindow.hide();
                            },
                            scope: this
                        }]
                    });
                }else{
                    this.hrWindow.getEl().frame();
                }
                this.hrWindow.show();
            },
            scope: this,
            tooltip: {
                title: 'Insert Horizontal Rule'
            },
            overflowText: 'Horizontal Rule'
        });
    },
    // private
    doInsertHR: function(){
        var frm = this.hrWindow.getComponent('insert-hr').getForm();
        if (frm.isValid()) {
            var hrwidth = frm.findField('hrwidth').getValue();
            if (hrwidth) {
                this.insertHR(hrwidth);
            } else {
                this.insertHR('100%');
            }
            frm.reset();
            this.hrWindow.hide();
        }
    },
    /**
     * Insert a horizontal rule into the document.
     * @param w String The width of the horizontal rule as the <tt>width</tt> attribute of the HR tag expects. ie: '100%' or '400' (pixels).
     */
    insertHR: function(w){
        this.cmp.insertAtCursor('<hr width="' + w + '">');
    }
});

Ext.ux.form.HtmlEditor.PlainText = Ext.extend(Ext.util.Observable, {
    // private
    cmd: 'plain',
    // private
    init: function (cmp) {
        this.cmp = cmp;
        this.cmp.on('render', this.onRender, this);
    },
    // private
    onRender: function () {
        var cmp = this.cmp;
        this.cmp.getToolbar().addFill();
        var btn = this.cmp.getToolbar().addButton({
            iconCls: 'x-edit-toggleFormat',
            handler: function () {
                this.cmp.fireEvent('toggleFormat', 'text/plain');
            },
            tooltip: {
                title: i18n._('Convert to pure text')
            },
            scope: this
        });
    }
});

/***/ }),
/* 1025 */
/***/ (function(module, exports) {

Ext.ns('Ext.ux.form');

/**
 * make a combo box recent aware
 *  => present recents on empty query
 * 
 */
Ext.ux.form.ComboBoxRecentsPlugin = function(config) {
    Ext.apply(this, config);
};

Ext.ux.form.ComboBoxRecentsPlugin.prototype = {
    
    recordClass: null,
    domain: 'all',
    
    init: function(cmp) {
        this.cmp = cmp;
        
        this.recentsManager = new Tine.Tinebase.RecentsManager({
            recordClass: this.recordClass,
            domain: this.domain
        });
        
        // @TODO have a interface idea for 'other'
//        this.cmp.doQuery = this.cmp.doQuery.createInterceptor(this.onBeforeQuery, this);
        
        this.cmp.on('select', this.onSelect, this);
    },
    
    /**
     * fill store with recents for empty query
     * @param {String} q
     */
    onBeforeQuery: function(q) {
        if (! q) {
            var store = this.cmp.store,
                recents = this.recentsManager.getRecentRecords();
                
            if (recents) {
                var other = {};
                other[recordType.getMeta('idProperty')] = 'other';
                other[recordType.getMeta('titleProperty')] = String.format(i18n._('choose other {0}...'), recordType.getRecordsName());
                recents.push(new recordClass(other));
                
                this.cmp.store.loadRecords(recents, {add: false}, true);
                return false;
            }
        }
    },
    
    onSelect: function(cmp, record, index) {
        if (record && Ext.isFunction(record.get)) {
            this.recentsManager.addRecentRecord(record, this.domain);
        }
    },
    
    getStateId: function(model, domain) {
        return [model.getMeta('appName'), model.getMeta('modelName'), domain, 'recents'].join('-').toLowerCase();
    }
    
};

Ext.preg('Ext.ux.form.ComboBoxRecentsPlugin', Ext.ux.form.ComboBoxRecentsPlugin);

/***/ }),
/* 1026 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux', 'Ext.ux.layout');

/**
 * @namespace   Ext.ux.layout
 * @class       Ext.ux.layout.HorizontalFitLayout
 * @extends     Ext.layout.ContainerLayout
 * @description
 * <p>This is a base class for layouts that contain a single item that automatically expands horizontally to fill 
 * the horizontal dimenson of the layout's container.  This class is intended to be extended or created via the 
 * layout:'hfit' {@link Ext.Container#layout} config, and should generally not need to be created directly via 
 * the new keyword.</p>
 * <p>To fit a panel to a container horizontally using Horizontal FitLayout, simply set layout:'hfit' on the container 
 * and add a multiple panel to it.</p>
 * <p>Example usage:</p>
 * <pre><code>
var p = new Ext.Panel({
    title: 'Horizontal Fit Layout',
    layout:'hfit',
    items: [{
        title: 'Inner Panel One',
        html: '&lt;p&gt;This is the firsts inner panel content&lt;/p&gt;',
        border: false
    },{
        title: 'Inner Panel Two',
        html: '&lt;p&gt;This is the seconds inner panel content&lt;/p&gt;',
        border: false
    }]
});
</code></pre>
 */
Ext.ux.layout.HorizontalFitLayout = Ext.extend(Ext.layout.ContainerLayout, {
    /**
     * @cfg {bool} containsScrollbar
     */
    containsScrollbar: false,
    /**
     * @private
     */
    monitorResize:true,

    /**
     * @private
     */
    onLayout : function(ct, target){
        Ext.layout.FitLayout.superclass.onLayout.call(this, ct, target);
        if(!this.container.collapsed){
            var size = target.getStyleSize();
            size.width = ct.getContentTarget().isScrollable() ? size.width-Ext.getScrollBarWidth() : size.width;
            
            ct.items.each(function(item){
                this.setItemSize(item,  size);
            }, this);
        }
    },
    /**
     * @private
     */
    setItemSize : function(item, size){
        if(item && size.height > 0){ // display none?
            item.setWidth(size.width);
        }
    }
});
Ext.Container.LAYOUTS['hfit'] = Ext.ux.layout.HorizontalFitLayout;


/***/ }),
/* 1027 */
/***/ (function(module, exports) {

/*
 * Ext JS Library 2.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */

Ext.ns('Ext.ux.layout');

/**
 * @namespace   Ext.ux.layout
 * @class       Ext.ux.layout.CenterLayout
 * @extends     Ext.layout.FitLayout
 * 
 * <p>This is a very simple layout style used to center contents within a container.  This layout works within
 * nested containers and can also be used as expected as a Viewport layout to center the page layout.</p>
 * <p>As a subclass of FitLayout, CenterLayout expects to have a single child panel of the container that uses 
 * the layout.  The layout does not require any config options, although the child panel contained within the
 * layout must provide a fixed or percentage width.  The child panel's height will fit to the container by
 * default, but you can specify <tt>autoHeight:true</tt> to allow it to autosize based on its content height.  
 * Example usage:</p> 
 * <pre><code>
// The content panel is centered in the container
var p = new Ext.Panel({
    title: 'Center Layout',
    layout: 'ux.center',
    items: [{
        title: 'Centered Content',
        width: '75%',
        html: 'Some content'
    }]
});

// If you leave the title blank and specify no border
// you'll create a non-visual, structural panel just
// for centering the contents in the main container.
var p = new Ext.Panel({
    layout: 'ux.center',
    border: false,
    items: [{
        title: 'Centered Content',
        width: 300,
        autoHeight: true,
        html: 'Some content'
    }]
});
</code></pre>
 */
Ext.ux.layout.CenterLayout = Ext.extend(Ext.layout.FitLayout, {
    // private
    setItemSize : function(item, size){
        this.container.addClass('ux-layout-center');
        item.addClass('ux-layout-center-item');
        if(item && size.height > 0){
            if(item.width){
                size.width = item.width;
            }
            item.setSize(size);
        }
    }
});
Ext.Container.LAYOUTS['ux.center'] = Ext.ux.layout.CenterLayout;


/***/ }),
/* 1028 */
/***/ (function(module, exports) {

/*
 * Ext JS Library 3.0.0
 * Copyright(c) 2006-2009 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
// We are adding these custom layouts to a namespace that does not
// exist by default in Ext, so we have to add the namespace first:
Ext.ns('Ext.ux.layout');

/**
 * @namespace   Ext.ux.layout
 * @class       Ext.ux.layout.RowLayout
 * @extends     Ext.layout.ContainerLayout
 * 
 * <p>This is the layout style of choice for creating structural layouts in a multi-row format where the height of
 * each row can be specified as a percentage or fixed height.  Row widths can also be fixed, percentage or auto.
 * This class is intended to be extended or created via the layout:'ux.row' {@link Ext.Container#layout} config,
 * and should generally not need to be created directly via the new keyword.</p>
 * <p>RowLayout does not have any direct config options (other than inherited ones), but it does support a
 * specific config property of <b><tt>rowHeight</tt></b> that can be included in the config of any panel added to it.  The
 * layout will use the rowHeight (if present) or height of each panel during layout to determine how to size each panel.
 * If height or rowHeight is not specified for a given panel, its height will default to the panel's height (or auto).</p>
 * <p>The height property is always evaluated as pixels, and must be a number greater than or equal to 1.
 * The rowHeight property is always evaluated as a percentage, and must be a decimal value greater than 0 and
 * less than 1 (e.g., .25).</p>
 * <p>The basic rules for specifying row heights are pretty simple.  The logic makes two passes through the
 * set of contained panels.  During the first layout pass, all panels that either have a fixed height or none
 * specified (auto) are skipped, but their heights are subtracted from the overall container height.  During the second
 * pass, all panels with rowHeights are assigned pixel heights in proportion to their percentages based on
 * the total <b>remaining</b> container height.  In other words, percentage height panels are designed to fill the space
 * left over by all the fixed-height and/or auto-height panels.  Because of this, while you can specify any number of rows
 * with different percentages, the rowHeights must always add up to 1 (or 100%) when added together, otherwise your
 * layout may not render as expected.  Example usage:</p>
 * <pre><code>
// All rows are percentages -- they must add up to 1
var p = new Ext.Panel({
    title: 'Row Layout - Percentage Only',
    layout:'ux.row',
    items: [{
        title: 'Row 1',
        rowHeight: .25
    },{
        title: 'Row 2',
        rowHeight: .6
    },{
        title: 'Row 3',
        rowHeight: .15
    }]
});

// Mix of height and rowHeight -- all rowHeight values must add
// up to 1. The first row will take up exactly 120px, and the last two
// rows will fill the remaining container height.
var p = new Ext.Panel({
    title: 'Row Layout - Mixed',
    layout:'ux.row',
    items: [{
        title: 'Row 1',
        height: 120,
        // standard panel widths are still supported too:
        width: '50%' // or 200
    },{
        title: 'Row 2',
        rowHeight: .8,
        width: 300
    },{
        title: 'Row 3',
        rowHeight: .2
    }]
});
</code></pre>
 */
Ext.ux.layout.RowLayout = Ext.extend(Ext.layout.ContainerLayout, {
    // private
    monitorResize:true,

    // private
    isValidParent : function(c, target){
        return c.getEl().dom.parentNode == this.innerCt.dom;
    },

    // private
    onLayout : function(ct, target){
        var rs = ct.items.items, len = rs.length, r, i;

        if(!this.innerCt){
            target.addClass('ux-row-layout-ct');
            this.innerCt = target.createChild({cls:'x-row-inner'});
        }
        this.renderAll(ct, this.innerCt);

        var size = target.getViewSize();

        if(size.width < 1 && size.height < 1){ // display none?
            return;
        }

        var h = size.height - target.getPadding('tb'),
            ph = h;

        this.innerCt.setSize({height:h});

        // some rows can be percentages while others are fixed
        // so we need to make 2 passes

        for(i = 0; i < len; i++){
            r = rs[i];
            if(!r.rowHeight){
                ph -= (r.getSize().height + r.getEl().getMargins('tb'));
            }
        }

        ph = ph < 0 ? 0 : ph;

        for(i = 0; i < len; i++){
            r = rs[i];
            if(r.rowHeight){
                r.setSize({height: Math.floor(r.rowHeight*ph) - r.getEl().getMargins('tb')});
            }
        }
    }

    /**
     * @property activeItem
     * @hide
     */
});

Ext.Container.LAYOUTS['ux.row'] = Ext.ux.layout.RowLayout;


/***/ }),
/* 1029 */
/***/ (function(module, exports) {

Ext.ns('Ext.ux.layout.CardLayout');

Ext.ux.layout.CardLayout.helper = {
    /**
     * remove all items which should not be keeped -> don't have a keep flag
     *
     * @param {Ext.Panel} cardPanel
     */
    cleanupCardPanelItems: function (cardPanel) {
        if (cardPanel.items) {
            for (var i = 0, p; i < cardPanel.items.length; i++) {
                p = cardPanel.items.get(i);
                if (!p.keep) {
                    cardPanel.remove(p);
                }
            }
        }
    },

    /**
     * add or set given item
     *
     * @param {Ext.Panel} cardPanel
     * @param {Ext.Panel} item
     */
    setActiveCardPanelItem: function (cardPanel, item, keep) {
        // auto cleanup
        item.keep = !!keep;
        Ext.ux.layout.CardLayout.helper.cleanupCardPanelItems(cardPanel);

        if (cardPanel.items.indexOf(item) < 0) {
            cardPanel.add(item);
        }

        if (Ext.isFunction(cardPanel.layout.setActiveItem)) {
            cardPanel.layout.setActiveItem(item.id);
        } else {
            cardPanel.activeItem = cardPanel.items.indexOf(item);
        }

        cardPanel.doLayout();
    }
};


/***/ }),
/* 1030 */
/***/ (function(module, exports) {

/*
 * backport from Extjs 4.x  Ext.layout.container.Accordion
 */

Ext.ns('Ext.ux', 'Ext.ux.layout');

Ext.ux.layout.MultiAccordionLayout = function(config) {
    var me = this;

    Ext.ux.layout.MultiAccordionLayout.superclass.constructor(arguments);

    if (me.animate) {
        me.animatePolicy = Ext.apply({}, me.defaultAnimatePolicy);
    } else {
        me.animatePolicy = null;
    }
};

Ext.extend(Ext.ux.layout.MultiAccordionLayout, Ext.layout.VBoxLayout, {
    align: 'stretch',

    /**
     * @cfg {Boolean} fill
     * True to adjust the active item's height to fill the available space in the container, false to use the
     * item's current height, or auto height if not explicitly set.
     */
    fill : true,

    /**
     * @cfg {Boolean} autoWidth
     * Child Panels have their width actively managed to fit within the accordion's width.
     * @removed This config is ignored in ExtJS 4
     */

    /**
     * @cfg {Boolean} titleCollapse
     * True to allow expand/collapse of each contained panel by clicking anywhere on the title bar, false to allow
     * expand/collapse only when the toggle tool button is clicked.  When set to false,
     * {@link #hideCollapseTool} should be false also.
     */
    titleCollapse : true,

    /**
     * @cfg {Boolean} hideCollapseTool
     * True to hide the contained Panels' collapse/expand toggle buttons, false to display them.
     * When set to true, {@link #titleCollapse} is automatically set to true.
     */
    hideCollapseTool : false,

    /**
     * @cfg {Boolean} collapseFirst
     * True to make sure the collapse/expand toggle button always renders first (to the left of) any other tools
     * in the contained Panels' title bars, false to render it last. By default, this will use the
     * {@link Ext.panel.Panel#collapseFirst} setting on the panel. If the config option is specified on the layout,
     * it will override the panel value.
     */
    collapseFirst : undefined,

    /**
     * @cfg {Boolean} animate
     * True to slide the contained panels open and closed during expand/collapse using animation, false to open and
     * close directly with no animation. Note: The layout performs animated collapsing
     * and expanding, *not* the child Panels.
     */
    animate : true,
    /**
     * @cfg {Boolean} activeOnTop
     * Only valid when {@link #multi} is `false` and {@link #animate} is `false`.
     *
     * True to swap the position of each panel as it is expanded so that it becomes the first item in the container,
     * false to keep the panels in the rendered order.
     */
    activeOnTop : false,
    /**
     * @cfg {Boolean} multi
     * Set to true to enable multiple accordion items to be open at once.
     */
    multi: true,

    defaultAnimatePolicy: {
        y: true,
        height: true
    },

    // private
    onLayout : function(ct, target) {
        var items = ct.items.items;
        this.beforeRenderItems(items);

        this.container.on('afterlayout', this.updatePanelClasses, this);
        Ext.ux.layout.MultiAccordionLayout.superclass.onLayout.apply(this, arguments);
    },

    beforeRenderItems: function (items) {
        var me = this,
            ln = items.length,
            i = 0,
            owner = me.container.ownerCt,
            collapseFirst = me.collapseFirst,
            hasCollapseFirst = Ext.isDefined(collapseFirst),
            expandedItem,
            comp;

        for (; i < ln; i++) {
            comp = items[i];
            if (!comp.rendered) {
                // Set up initial properties for Panels in an accordion.
                if (hasCollapseFirst) {
                    comp.collapseFirst = collapseFirst;
                }
                if (me.hideCollapseTool) {
                    comp.hideCollapseTool = me.hideCollapseTool;
                    comp.titleCollapse = true;
                }
                else if (me.titleCollapse) {
                    comp.titleCollapse = me.titleCollapse;
                }

                delete comp.hideHeader;
                delete comp.width;
                comp.collapsible = true;
                comp.title = comp.title || '&#160;';
                // comp.addBodyCls('x-accordion-body');

                // If only one child Panel is allowed to be expanded
                // then collapse all except the first one found with collapsed:false
                // If we have hasExpanded set, we've already done this
                if (!me.multi && !me.hasExpanded) {
                    // If there is an expanded item, all others must be rendered collapsed.
                    if (me.expandedItem !== undefined) {
                        comp.collapsed = true;
                    }
                    // Otherwise expand the first item with collapsed explicitly configured as false
                    else if (comp.hasOwnProperty('collapsed') && comp.collapsed === false) {
                        me.expandedItem = i;
                    } else {
                        comp.collapsed = true;
                    }

                    // If only one child Panel may be expanded, then intercept expand/show requests.
                    owner.mon(comp, {
                        show: me.onComponentShow,
                        beforeexpand: me.onComponentExpand,
                        scope: me
                    });
                }

                // If we must fill available space, a collapse must be listened for and a sibling must
                // be expanded.
                if (me.fill) {
                    owner.mon(comp, {
                        beforecollapse: me.onComponentCollapse,
                        beforeexpand: me.onComponentExpand,
                        expand: me.layout,
                        collapse: me.layout,
                        scope: me
                    });
                }
            }
        }

        // If no collapsed:false Panels found, make the first one expanded.
        expandedItem = me.expandedItem;
        if (!me.hasExpanded) {
            if (expandedItem === undefined) {
                if (ln) {
                    items[0].collapsed = false;
                }
            } else if (me.activeOnTop) {
                expandedItem = items[expandedItem];
                expandedItem.collapsed = false;
                me.configureItem(expandedItem);
                owner.insert(0, expandedItem);
            }
            me.hasExpanded = true;
        }
    },

    configureItem: function(item) {

        Ext.ux.layout.MultiAccordionLayout.superclass.configureItem.apply(this, arguments);

        // We handle animations for the expand/collapse of items.
        // Items do not have individual borders
        item.animCollapse = item.border = false;

        // If filling available space, all Panels flex.
        if (this.fill) {
            item.flex = 1;
        }
    },

    onChildPanelRender: function(panel) {
        panel.header.addClass('x-accordion-hd');
    },

    updatePanelClasses: function(ct) {
        var children = ct.items.items,
            ln = children.length,
            siblingCollapsed = true,
            i, child, header;

        for (i = 0; i < ln; i++) {
            child = children[i];
            header = child.header;
            header.addClass('x-accordion-hd');

            if (siblingCollapsed) {
                header.removeClass('x-accordion-hd-sibling-expanded');
            } else {
                header.addClass('x-accordion-hd-sibling-expanded');
            }

            if (i + 1 == ln && child.collapsed) {
                header.addClass('x-accordion-hd-last-collapsed');
            } else {
                header.removeClass('x-accordion-hd-last-collapsed');
            }

            siblingCollapsed = child.collapsed;
        }
    },

    // When a Component expands, adjust the heights of the other Components to be just enough to accommodate
    // their headers.
    // The expanded Component receives the only flex value, and so gets all remaining space.
    onComponentExpand: function(toExpand) {
        var me = this,
            owner = me.container.ownerCt,
            multi = me.multi,
            animate = me.animate,
            moveToTop = !multi && !me.animate && me.activeOnTop,
            expanded,
            expandedCount, i,
            previousValue;

        toExpand.flex = 1;

        if (!me.processing) {
            me.processing = true;
            previousValue = owner.deferLayout;
            owner.deferLayout = true;
            expanded = multi ? [] : expanded = toExpand.ownerCt.items.filterBy(function(item) { return !item.collapsed}).items;
            expandedCount = expanded.length;

            // Collapse all other expanded child items (Won't loop if multi is true)
            for (i = 0; i < expandedCount; i++) {
                expanded[i].collapse();
            }

            if (moveToTop) {
                // Prevent extra layout when moving the item
                Ext.suspendLayouts();
                owner.insert(0, toExpand);
                Ext.resumeLayouts();
            }

            owner.deferLayout = previousValue;
            me.processing = false;
        }
    },

    onComponentCollapse: function(comp) {
        var me = this,
            owner = me.container.ownerCt,
            toExpand,
            expanded,
            previousValue;

        if (owner.items.getCount() === 1) {
            // do not allow collapse if there is only one item
            return false;
        }

        comp.flex = false;
        if (!me.processing) {
            me.processing = true;
            previousValue = owner.deferLayout;
            owner.deferLayout = true;
            toExpand = comp.ownerCt.items.itemAt(comp.ownerCt.items.indexOf(comp) +1) ||
                comp.ownerCt.items.itemAt(comp.ownerCt.items.indexOf(comp) -1);

            // If we are allowing multi, and the "toCollapse" component is NOT the only expanded Component,
            // then ask the box layout to collapse it to its header.
            if (me.multi) {
                expanded = comp.ownerCt.items.filterBy(function(item) { return !item.collapsed}).items;

                // If the collapsing Panel is the only expanded one, expand the following Component.
                // All this is handling fill: true, so there must be at least one expanded,
                if (expanded.length === 1) {
                    if (! toExpand) {
                        me.processing = false;
                        return false;
                    }
                    toExpand.expand();
                }

            } else if (toExpand) {
                toExpand.expand();
            }
            owner.deferLayout = previousValue;
            me.processing = false;
        }
    },

    onComponentShow: function(comp) {
        // Showing a Component means that you want to see it, so expand it.
        this.onComponentExpand(comp);
    }
});

Ext.Container.LAYOUTS['ux.multiaccordion'] = Ext.ux.layout.MultiAccordionLayout;

/***/ }),
/* 1031 */
/***/ (function(module, exports) {

/**
 * Tine 2.0
 * 
 * @package     Ext
 * @subpackage  ux
 * @license     BSD
 * @author      Shea Frederick
 * @copyright   Copyright (c) 2008 Shea Frederick
 *
 * based on public domain code from Shea Frederick
 * "Free as a bird. Use it anywhere or any way you like."
 * 
 * http://extjs.com/blog/2008/07/01/integrating-google-maps-api-with-extjs/
 */
Ext.ns('Ext.ux');
 
/**
 * @namespace   Ext.ux
 * @class       Ext.ux.GMapPanel
 * @extends     Ext.Panel
 */
Ext.ux.GMapPanel = Ext.extend(Ext.Panel, {
    initComponent : function(){
        
        var defConfig = {
            plain: true,
            zoomLevel: 3,
            yaw: 180,
            pitch: 0,
            zoom: 0,
            gmapType: 'map',
            border: false
        };
        
        Ext.applyIf(this,defConfig);
        
        Ext.ux.GMapPanel.superclass.initComponent.call(this);

    },
    afterRender : function(){
        
        var wh = this.ownerCt.getSize();
        Ext.applyIf(this, wh);
        
        Ext.ux.GMapPanel.superclass.afterRender.call(this);
        
        if (this.gmapType === 'map'){
            this.gmap = new GMap2(this.body.dom);
        }
        
        if (this.gmapType === 'panorama'){
            this.gmap = new GStreetviewPanorama(this.body.dom);
        }
        
        if (typeof this.addControl === 'object' && this.gmapType === 'map') {
            this.gmap.addControl(this.addControl);
        }
        
        if (typeof this.setCenter === 'object') {
            if (typeof this.setCenter.geoCodeAddr === 'string'){
                this.geoCodeLookup(this.setCenter.geoCodeAddr);
            }else{
                if (this.gmapType === 'map'){
                    var point = new GLatLng(this.setCenter.lat,this.setCenter['long']);
                    this.gmap.setCenter(point, this.zoomLevel);
                }
                if (typeof this.setCenter.marker === 'object' && typeof point === 'object'){
                    this.addMarker(point,this.setCenter.marker,this.setCenter.marker.clear);
                }
            }
            if (this.gmapType === 'panorama'){
                this.gmap.setLocationAndPOV(new GLatLng(this.setCenter.lat,this.setCenter['long']), {yaw: this.yaw, pitch: this.pitch, zoom: this.zoom});
            }
        }
        
        var dt = new Ext.util.DelayedTask();
        dt.delay(300, function(){
            this.addMarkers(this.markers);
        }, this);

    },
    onResize : function(w, h){

        if (typeof this.gmap == 'object') {
            this.gmap.checkResize();
        }
        
        Ext.ux.GMapPanel.superclass.onResize.call(this, w, h);

    },
    setSize : function(width, height, animate){
        
        if (typeof this.gmap == 'object') {
            this.gmap.checkResize();
        }
        
        Ext.ux.GMapPanel.superclass.setSize.call(this, width, height, animate);
        
    },
    getMap: function(){
        
        return this.gmap;
        
    },
    addMarkers: function(markers) {
        
        if (Ext.isArray(markers)){
            for (var i = 0; i < markers.length; i++) {
                var mkr_point = new GLatLng(markers[i].lat,markers[i]['long']);
                this.addMarker(mkr_point,markers[i].marker,false,markers[i].setCenter);
            }
        }
        
    },
    addMarker: function(point, marker, clear, center){
        
        Ext.applyIf(marker,G_DEFAULT_ICON);

        if (clear === true){
            this.gmap.clearOverlays();
        }
        if (center === true) {
            this.gmap.setCenter(point, this.zoomLevel);
        }
        
        var mark = new GMarker(point,marker);
        this.gmap.addOverlay(mark);

    },
    geoCodeLookup : function(addr) {
        
        this.geocoder = new GClientGeocoder();
        this.geocoder.getLocations(addr, this.addAddressToMap.createDelegate(this));
        
    },
    addAddressToMap : function(response) {
        
        if (!response || response.Status.code != 200) {
            Ext.MessageBox.alert('Error', 'Code '+response.Status.code+' Error Returned');
        } else {
            place = response.Placemark[0];
            addressinfo = place.AddressDetails;
            accuracy = addressinfo.Accuracy;
            if (accuracy === 0) {
                Ext.MessageBox.alert('Unable to Locate Address', 'Unable to Locate the Address you provided');
            }else{
                if (accuracy < 7) {
                    Ext.MessageBox.alert('Address Accuracy', 'The address provided has a low accuracy.<br><br>Level '+accuracy+' Accuracy (8 = Exact Match, 1 = Vague Match)');
                }else{
                    point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
                    if (typeof this.setCenter.marker === 'object' && typeof point === 'object'){
                        this.addMarker(point,this.setCenter.marker,this.setCenter.marker.clear,true);
                    }
                }
            }
        }
        
    }
 
});

Ext.reg('gmappanel',Ext.ux.GMapPanel);


/***/ }),
/* 1032 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux', 'Ext.ux.tree');

/**
 * @namespace   Ext.ux.tree
 * @class       Ext.ux.tree.CheckboxSelectionModel
 * @extends     Ext.util.Observable
 * 
 * Checkbox multi selection for a TreePanel.
 */
Ext.ux.tree.CheckboxSelectionModel = function(config){
   this.addEvents(
       /**
        * @event beforeselect
        * Fires before the selected node changes, return false to cancel the change
        * @param {DefaultSelectionModel} this
        * @param {TreeNode} node the node to select
        */
       "beforeselect",
       /**
        * @event selectionchange
        * Fires when the selected nodes change
        * @param {MultiSelectionModel} this
        * @param {Array} nodes Array of the selected nodes
        */
       "selectionchange"
   );
    Ext.apply(this, config);
    Ext.ux.tree.CheckboxSelectionModel.superclass.constructor.call(this);
};

Ext.extend(Ext.ux.tree.CheckboxSelectionModel, Ext.util.Observable, {
    /**
     * @cfg {Bool} activateLeafNodesOnly
     * true to only activate leaf nodes
     */
    activateLeafNodesOnly : false,
    
    /**
     * @cfg {bool} optimizeSelection
     * true to optimize selection
     */
    optimizeSelection: false,
    
    /**
     * @type Ext.tree.TreeNode
     * currently active node
     */
    activeNode: null,
    
    /**
     * @cfg {Boolean} defaultValue
     * default check value
     */
    defaultValue: false,
    
    /**
     * activate given node
     * 
     * @param {Ext.tree.TreeNode} node
     * @return {Boolean}
     */
    activate: function(node) {
        if (! node) {
            return;
        }
        
        if (this.activateLeafNodesOnly && ! node.isLeaf()) {
            return false;
        }
        
        if (this.activeNode) {
            this.activeNode.ui.onSelectedChange(false);
        }
        
        this.activeNode = node;
        node.ui.onSelectedChange(true);
    },
        
    /**
     * Clear all selections
     */
    clearSelections : function(suppressEvent) {
        this.suspendEvents(false);
        
        var sn = this.tree.getChecked();
        if(sn.length > 0){
            for(var i = 0, len = sn.length; i < len; i++){
                sn[i].ui.toggleCheck(false);
            }
        }
        
        this.resumeEvents();
    },
    
    /**
     * get active node
     * @return {Ext.tree.TreeNode}
     */
    getActiveNode: function() {
        return this.activeNode;
    },
    
    /**
     * Returns an array of the selected nodes
     * @return {Array}
     */
    getSelectedNodes: function() {
        return this.tree.getChecked();
    },
    
    init : function(tree){
        this.tree = tree;
        tree.getTreeEl().on("keydown", this.onKeyDown, this);
        tree.on("click", this.onNodeClick, this);
        tree.on("beforeappend", this.onBeforeAppend, this);
        tree.on("checkchange", this.onCheckChange, this);
        
    },
    
    /**
     * Returns true if the node is selected
     * @param {Ext.tree.TreeNode} node The node to check
     * @return {Boolean}
     */
    isSelected : function(node){
        if (node && node.ui) {
            return node.ui.isChecked();
        }
    },
    
    onBeforeAppend: function(tree, parent, node) {
        node.attributes.checked = this.defaultValue;
    },
    
    onCheckChange: function(node, checked) {
        if (checked) {
            this.activate(node);
            
            if (this.optimizeSelection) {
                this.optimize(node);
            }
            
        } else {
            
        }
        this.fireEvent("selectionchange", this, this.tree.getChecked());
    },
    
    onNodeClick : function(node){
        this.select(node);
        this.activate(node);
    },
    
    /**
     * Select a node.
     * @param {Ext.tree.TreeNode} node The node to select
     * @return {Text.tree.TreeNode} The selected node
     */
    select : function(node, e, keepExisting){
        if (! node.ui.isChecked() && this.fireEvent('beforeselect', this, node) !== false) {
            node.ui.toggleCheck(true);
        }
        return node;
    },
    
    /**
     * Deselect a node.
     * @param {Ext.tree.TreeNode} node The node to unselect
     */
    unselect : function(node){
        node.ui.toggleCheck(false);
    },
    
    /**
     * optimizes the selection
     */
    optimize: function(node) {
        this.suspendEvents();
            
        this.unselectChildNodes(node);
        
        // recursivly unselect parent nodes
        while(node = node.parentNode) {
            if (this.isSelected(node)) {
                node.unselect();
            }
        }
        
        this.resumeEvents();
    },
    
    /**
     * unselect child nodes of given node
     * 
     * @param {Ext.tree.TreeNode} node
     */
    unselectChildNodes: function(node) {
        if (node.isExpandable() && node.isExpanded()) {
            for (var i=0; i<node.childNodes.length; i++) {
                if (node.childNodes[i].isExpandable()) {
                    this.unselectChildNodes(node.childNodes[i]);
                }
                node.childNodes[i].unselect();
            }
        }
    },
    
    onKeyDown : Ext.tree.DefaultSelectionModel.prototype.onKeyDown,

    selectNext : Ext.tree.DefaultSelectionModel.prototype.selectNext,

    selectPrevious : Ext.tree.DefaultSelectionModel.prototype.selectPrevious
});


/***/ }),
/* 1033 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ns('Ext.ux.tree');

/**
 * @class Ext.ux.tree.TreeGridSorter
 * @extends Ext.tree.TreeSorter
 * Provides sorting of nodes in a {@link Ext.ux.tree.TreeGrid}.  The TreeGridSorter automatically monitors events on the
 * associated TreeGrid that might affect the tree's sort order (beforechildrenrendered, append, insert and textchange).
 * Example usage:<br />
 * <pre><code>
 new Ext.ux.tree.TreeGridSorter(myTreeGrid, {
     folderSort: true,
     dir: "desc",
     sortType: function(node) {
         // sort by a custom, typed attribute:
         return parseInt(node.id, 10);
     }
 });
 </code></pre>
 * @constructor
 * @param {TreeGrid} tree
 * @param {Object} config
 */
Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
    /**
     * @cfg {Array} sortClasses The CSS classes applied to a header when it is sorted. (defaults to <tt>['sort-asc', 'sort-desc']</tt>)
     */
    sortClasses : ['sort-asc', 'sort-desc'],
    /**
     * @cfg {String} sortAscText The text displayed in the 'Sort Ascending' menu item (defaults to <tt>'Sort Ascending'</tt>)
     */
    sortAscText : 'Sort Ascending',
    /**
     * @cfg {String} sortDescText The text displayed in the 'Sort Descending' menu item (defaults to <tt>'Sort Descending'</tt>)
     */
    sortDescText : 'Sort Descending',

    constructor : function(tree, config) {
        if(!Ext.isObject(config)) {
            config = {
                property: tree.columns[0].dataIndex || 'text',
                folderSort: true
            }
        }

        Ext.ux.tree.TreeGridSorter.superclass.constructor.apply(this, arguments);

        this.tree = tree;
        tree.on('headerclick', this.onHeaderClick, this);
        tree.ddAppendOnly = true;

        me = this;
        this.defaultSortFn = function(n1, n2){

            var dsc = me.dir && me.dir.toLowerCase() == 'desc';
            var p = me.property || 'text';
            var sortType = me.sortType;
            var fs = me.folderSort;
            var cs = me.caseSensitive === true;
            var leafAttr = me.leafAttr || 'leaf';

            if(fs){
                if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){
                    return 1;
                }
                if(!n1.attributes[leafAttr] && n2.attributes[leafAttr]){
                    return -1;
                }
            }
            var v1 = sortType ? sortType(n1) : (cs ? n1.attributes[p] : n1.attributes[p].toUpperCase());
            var v2 = sortType ? sortType(n2) : (cs ? n2.attributes[p] : n2.attributes[p].toUpperCase());
            if(v1 < v2){
                return dsc ? +1 : -1;
            }else if(v1 > v2){
                return dsc ? -1 : +1;
            }else{
                return 0;
            }
        };

        tree.on('afterrender', this.onAfterTreeRender, this, {single: true});
        tree.on('headermenuclick', this.onHeaderMenuClick, this);
    },

    onAfterTreeRender : function() {
        if(this.tree.hmenu){
            this.tree.hmenu.insert(0,
                {itemId:'asc', text: this.sortAscText, cls: 'xg-hmenu-sort-asc'},
                {itemId:'desc', text: this.sortDescText, cls: 'xg-hmenu-sort-desc'}
            );
        }
        this.updateSortIcon(0, 'asc');
    },

    onHeaderMenuClick : function(c, id, index) {
        if(id === 'asc' || id === 'desc') {
            this.onHeaderClick(c, null, index);
            return false;
        }
    },

    onHeaderClick : function(c, el, i) {
        if(c && !this.tree.headersDisabled){
            var me = this;

            me.property = c.dataIndex;
            me.dir = c.dir = (c.dir === 'desc' ? 'asc' : 'desc');
            me.sortType = c.sortType;
            me.caseSensitive === Ext.isBoolean(c.caseSensitive) ? c.caseSensitive : this.caseSensitive;
            me.sortFn = c.sortFn || this.defaultSortFn;

            this.tree.root.cascade(function(n) {
                if(!n.isLeaf()) {
                    me.updateSort(me.tree, n);
                }
            });

            this.updateSortIcon(i, c.dir);
        }
    },

    // private
    updateSortIcon : function(col, dir){
        var sc = this.sortClasses;
        var hds = this.tree.innerHd.select('td').removeClass(sc);
        hds.item(col).addClass(sc[dir == 'desc' ? 1 : 0]);
    }
});

/***/ }),
/* 1034 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
/**
 * @class Ext.tree.ColumnResizer
 * @extends Ext.util.Observable
 */
Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
    /**
     * @cfg {Number} minWidth The minimum width the column can be dragged to.
     * Defaults to <tt>14</tt>.
     */
    minWidth: 14,

    constructor: function(config){
        Ext.apply(this, config);
        Ext.tree.ColumnResizer.superclass.constructor.call(this);
    },

    init : function(tree){
        this.tree = tree;
        tree.on('render', this.initEvents, this);
    },

    initEvents : function(tree){
        tree.mon(tree.innerHd, 'mousemove', this.handleHdMove, this);
        this.tracker = new Ext.dd.DragTracker({
            onBeforeStart: this.onBeforeStart.createDelegate(this),
            onStart: this.onStart.createDelegate(this),
            onDrag: this.onDrag.createDelegate(this),
            onEnd: this.onEnd.createDelegate(this),
            tolerance: 3,
            autoStart: 300
        });
        this.tracker.initEl(tree.innerHd);
        tree.on('beforedestroy', this.tracker.destroy, this.tracker);
    },

    handleHdMove : function(e, t){
        var hw = 5,
            x = e.getPageX(),
            hd = e.getTarget('.x-treegrid-hd', 3, true);
        
        if(hd){                                 
            var r = hd.getRegion(),
                ss = hd.dom.style,
                pn = hd.dom.parentNode;
            
            if(x - r.left <= hw && hd.dom !== pn.firstChild) {
                var ps = hd.dom.previousSibling;
                while(ps && Ext.fly(ps).hasClass('x-treegrid-hd-hidden')) {
                    ps = ps.previousSibling;
                }
                if(ps) {                    
                    this.activeHd = Ext.get(ps);
    				ss.cursor = Ext.isWebKit ? 'e-resize' : 'col-resize';
                }
            } else if(r.right - x <= hw) {
                var ns = hd.dom;
                while(ns && Ext.fly(ns).hasClass('x-treegrid-hd-hidden')) {
                    ns = ns.previousSibling;
                }
                if(ns) {
                    this.activeHd = Ext.get(ns);
    				ss.cursor = Ext.isWebKit ? 'w-resize' : 'col-resize';                    
                }
            } else{
                delete this.activeHd;
                ss.cursor = '';
            }
        }
    },

    onBeforeStart : function(e){
        this.dragHd = this.activeHd;
        return !!this.dragHd;
    },

    onStart : function(e){
        this.tree.headersDisabled = true;
        this.proxy = this.tree.body.createChild({cls:'x-treegrid-resizer'});
        this.proxy.setHeight(this.tree.body.getHeight());

        var x = this.tracker.getXY()[0];

        this.hdX = this.dragHd.getX();
        this.hdIndex = this.tree.findHeaderIndex(this.dragHd);

        this.proxy.setX(this.hdX);
        this.proxy.setWidth(x-this.hdX);

        this.maxWidth = this.tree.outerCt.getWidth() - this.tree.innerBody.translatePoints(this.hdX).left;
    },

    onDrag : function(e){
        var cursorX = this.tracker.getXY()[0];
        this.proxy.setWidth((cursorX-this.hdX).constrain(this.minWidth, this.maxWidth));
    },

    onEnd : function(e){
        var nw = this.proxy.getWidth(),
            tree = this.tree;
        
        this.proxy.remove();
        delete this.dragHd;
        
        tree.columns[this.hdIndex].width = nw;
        tree.updateColumnWidths();
        
        setTimeout(function(){
            tree.headersDisabled = false;
        }, 100);
    }
});

/***/ }),
/* 1035 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
/**
 * @class Ext.ux.tree.TreeGridNodeUI
 * @extends Ext.tree.TreeNodeUI
 */
Ext.ux.tree.TreeGridNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
    isTreeGridNodeUI: true,

    renderElements : function(n, a, targetNode, bulkRender){
        var t = n.getOwnerTree(),
            cols = t.columns,
            c = cols[0],
            i, buf, len;

        this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : '';

        buf = [
             '<tbody class="x-tree-node">',
                '<tr ext:tree-node-id="', n.id ,'" class="x-tree-node-el x-tree-node-leaf ', a.cls, '">',
                    '<td class="x-treegrid-col">',
                        '<span class="x-tree-node-indent">', this.indentMarkup, "</span>",
                        '<img src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow">',
                        '<img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon', (a.icon ? " x-tree-node-inline-icon" : ""), (a.iconCls ? " "+a.iconCls : ""), '" unselectable="on">',
                        '<a hidefocus="on" class="x-tree-node-anchor" href="', a.href ? a.href : '#', '" tabIndex="1" ',
                            a.hrefTarget ? ' target="'+a.hrefTarget+'"' : '', '>',
                        '<span unselectable="on">', (c.tpl ? c.tpl.apply(a) : a[c.dataIndex] || c.text), '</span></a>',
                    '</td>'
        ];

        for(i = 1, len = cols.length; i < len; i++){
            c = cols[i];
            buf.push(
                    '<td class="x-treegrid-col ', (c.cls ? c.cls : ''), '">',
                        '<div unselectable="on" class="x-treegrid-text"', (c.align ? ' style="text-align: ' + c.align + ';"' : ''), '>',
                            (c.tpl ? c.tpl.apply(a) : a[c.dataIndex]),
                        '</div>',
                    '</td>'
            );
        }

        buf.push(
            '</tr><tr class="x-tree-node-ct"><td colspan="', cols.length, '">',
            '<table class="x-treegrid-node-ct-table" cellpadding="0" cellspacing="0" style="table-layout: fixed; display: none; width: ', t.innerCt.getWidth() ,'px;"><colgroup>'
        );
        for(i = 0, len = cols.length; i<len; i++) {
            buf.push('<col style="width: ', (cols[i].hidden ? 0 : cols[i].width) ,'px;" />');
        }
        buf.push('</colgroup></table></td></tr></tbody>');

        if(bulkRender !== true && n.nextSibling && n.nextSibling.ui.getEl()){
            this.wrap = Ext.DomHelper.insertHtml("beforeBegin", n.nextSibling.ui.getEl(), buf.join(''));
        }else{
            this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf.join(''));
        }

        this.elNode = this.wrap.childNodes[0];
        this.ctNode = this.wrap.childNodes[1].firstChild.firstChild;
        var cs = this.elNode.firstChild.childNodes;
        this.indentNode = cs[0];
        this.ecNode = cs[1];
        this.iconNode = cs[2];
        this.anchor = cs[3];
        this.textNode = cs[3].firstChild;
    },

    // private
    animExpand : function(cb){
        this.ctNode.style.display = "";
        Ext.ux.tree.TreeGridNodeUI.superclass.animExpand.call(this, cb);
    }
});

Ext.ux.tree.TreeGridRootNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
    isTreeGridNodeUI: true,

    // private
    render : function(){
        if(!this.rendered){
            this.wrap = this.ctNode = this.node.ownerTree.innerCt.dom;
            this.node.expanded = true;
        }

        if(Ext.isWebKit) {
            // weird table-layout: fixed issue in webkit
            var ct = this.ctNode;
            ct.style.tableLayout = null;
            (function() {
                ct.style.tableLayout = 'fixed';
            }).defer(1);
        }
    },

    destroy : function(){
        if(this.elNode){
            Ext.dd.Registry.unregister(this.elNode.id);
        }
        delete this.node;
    },

    collapse : Ext.emptyFn,
    expand : Ext.emptyFn
});

/***/ }),
/* 1036 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
/**
 * @class Ext.ux.tree.TreeGridLoader
 * @extends Ext.tree.TreeLoader
 */
Ext.ux.tree.TreeGridLoader = Ext.extend(Ext.tree.TreeLoader, {
    createNode : function(attr) {
        if (!attr.uiProvider) {
            attr.uiProvider = Ext.ux.tree.TreeGridNodeUI;
        }
        return Ext.tree.TreeLoader.prototype.createNode.call(this, attr);
    }
});

/***/ }),
/* 1037 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
(function() {    
    Ext.override(Ext.list.Column, {
        init : function() {            
            if(!this.type){
                this.type = "auto";
            }

            var st = Ext.data.SortTypes;
            // named sortTypes are supported, here we look them up
            if(typeof this.sortType == "string"){
                this.sortType = st[this.sortType];
            }

            // set default sortType for strings and dates
            if(!this.sortType){
                switch(this.type){
                    case "string":
                        this.sortType = st.asUCString;
                        break;
                    case "date":
                        this.sortType = st.asDate;
                        break;
                    default:
                        this.sortType = st.none;
                }
            }
        }
    });

    Ext.tree.Column = Ext.extend(Ext.list.Column, {});
    Ext.tree.NumberColumn = Ext.extend(Ext.list.NumberColumn, {});
    Ext.tree.DateColumn = Ext.extend(Ext.list.DateColumn, {});
    Ext.tree.BooleanColumn = Ext.extend(Ext.list.BooleanColumn, {});

    Ext.reg('tgcolumn', Ext.tree.Column);
    Ext.reg('tgnumbercolumn', Ext.tree.NumberColumn);
    Ext.reg('tgdatecolumn', Ext.tree.DateColumn);
    Ext.reg('tgbooleancolumn', Ext.tree.BooleanColumn);
})();


/***/ }),
/* 1038 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
/**
 * @class Ext.ux.tree.TreeGrid
 * @extends Ext.tree.TreePanel
 * 
 * @xtype treegrid
 */
Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
    rootVisible : false,
    useArrows : true,
    lines : false,
    borderWidth : Ext.isBorderBox ? 0 : 2, // the combined left/right border for each cell
    cls : 'x-treegrid',

    columnResize : true,
    enableSort : true,
    reserveScrollOffset : true,
    enableHdMenu : true,
    
    columnsText : 'Columns',

    initComponent : function() {
        if(!this.root) {
            this.root = new Ext.tree.AsyncTreeNode({text: 'Root'});
        }
        
        // initialize the loader
        var l = this.loader;
        if(!l){
            l = new Ext.ux.tree.TreeGridLoader({
                dataUrl: this.dataUrl,
                requestMethod: this.requestMethod,
                store: this.store
            });
        }else if(Ext.isObject(l) && !l.load){
            l = new Ext.ux.tree.TreeGridLoader(l);
        }
        else if(l) {
            l.createNode = function(attr) {
                if (!attr.uiProvider) {
                    attr.uiProvider = Ext.ux.tree.TreeGridNodeUI;
                }
                return Ext.tree.TreeLoader.prototype.createNode.call(this, attr);
            }
        }
        this.loader = l;
                            
        Ext.ux.tree.TreeGrid.superclass.initComponent.call(this);                    
        
        this.initColumns();
        
        if(this.enableSort) {
            this.treeGridSorter = new Ext.ux.tree.TreeGridSorter(this, this.enableSort);
        }
        
        if(this.columnResize){
            this.colResizer = new Ext.tree.ColumnResizer(this.columnResize);
            this.colResizer.init(this);
        }
        
        var c = this.columns;
        if(!this.internalTpl){                                
            this.internalTpl = new Ext.XTemplate(
                '<div class="x-grid3-header">',
                    '<div class="x-treegrid-header-inner">',
                        '<div class="x-grid3-header-offset">',
                            '<table cellspacing="0" cellpadding="0" border="0"><colgroup><tpl for="columns"><col /></tpl></colgroup>',
                            '<thead><tr class="x-grid3-hd-row">',
                            '<tpl for="columns">',
                            '<td class="x-grid3-hd x-grid3-cell x-treegrid-hd" style="text-align: {align};" id="', this.id, '-xlhd-{#}">',
                                '<div class="x-grid3-hd-inner x-treegrid-hd-inner" unselectable="on">',
                                     this.enableHdMenu ? '<a class="x-grid3-hd-btn" href="#"></a>' : '',
                                     '{header}<img class="x-grid3-sort-icon" src="', Ext.BLANK_IMAGE_URL, '" />',
                                 '</div>',
                            '</td></tpl>',
                            '</tr></thead>',
                        '</div></table>',
                    '</div></div>',
                '</div>',
                '<div class="x-treegrid-root-node">',
                    '<table class="x-treegrid-root-table" cellpadding="0" cellspacing="0" style="table-layout: fixed;"></table>',
                '</div>'
            );
        }
        
        if(!this.colgroupTpl) {
            this.colgroupTpl = new Ext.XTemplate(
                '<colgroup><tpl for="columns"><col style="width: {width}px"/></tpl></colgroup>'
            );
        }
    },

    initColumns : function() {
        var cs = this.columns,
            len = cs.length, 
            columns = [],
            i, c;

        for(i = 0; i < len; i++){
            c = cs[i];
            if(!c.isColumn) {
                c.xtype = c.xtype ? (/^tg/.test(c.xtype) ? c.xtype : 'tg' + c.xtype) : 'tgcolumn';
                c = Ext.create(c);
            }
            c.init(this);
            columns.push(c);
            
            if(this.enableSort !== false && c.sortable !== false) {
                c.sortable = true;
                this.enableSort = true;
            }
        }

        this.columns = columns;
    },

    onRender : function(){
        Ext.tree.TreePanel.superclass.onRender.apply(this, arguments);

        this.el.addClass('x-treegrid');
        
        this.outerCt = this.body.createChild({
            cls:'x-tree-root-ct x-treegrid-ct ' + (this.useArrows ? 'x-tree-arrows' : this.lines ? 'x-tree-lines' : 'x-tree-no-lines')
        });
        
        this.internalTpl.overwrite(this.outerCt, {columns: this.columns});
        
        this.mainHd = Ext.get(this.outerCt.dom.firstChild);
        this.innerHd = Ext.get(this.mainHd.dom.firstChild);
        this.innerBody = Ext.get(this.outerCt.dom.lastChild);
        this.innerCt = Ext.get(this.innerBody.dom.firstChild);
        
        this.colgroupTpl.insertFirst(this.innerCt, {columns: this.columns});
        
        if(this.hideHeaders){
            this.header.dom.style.display = 'none';
        }
        else if(this.enableHdMenu !== false){
            this.hmenu = new Ext.menu.Menu({id: this.id + '-hctx'});
            if(this.enableColumnHide !== false){
                this.colMenu = new Ext.menu.Menu({id: this.id + '-hcols-menu'});
                this.colMenu.on({
                    scope: this,
                    beforeshow: this.beforeColMenuShow,
                    itemclick: this.handleHdMenuClick
                });
                this.hmenu.add({
                    itemId:'columns',
                    hideOnClick: false,
                    text: this.columnsText,
                    menu: this.colMenu,
                    iconCls: 'x-cols-icon'
                });
            }
            this.hmenu.on('itemclick', this.handleHdMenuClick, this);
        }
    },

    setRootNode : function(node){
        node.attributes.uiProvider = Ext.ux.tree.TreeGridRootNodeUI;        
        node = Ext.ux.tree.TreeGrid.superclass.setRootNode.call(this, node);
        if(this.innerCt) {
            this.colgroupTpl.insertFirst(this.innerCt, {columns: this.columns});
        }
        return node;
    },
    
    clearInnerCt : function(){
        if(Ext.isIE){
            var dom = this.innerCt.dom;
            while(dom.firstChild){
                dom.removeChild(dom.firstChild);
            }
        }else{
            Ext.ux.tree.TreeGrid.superclass.clearInnerCt.call(this);
        }
    },
    
    initEvents : function() {
        Ext.ux.tree.TreeGrid.superclass.initEvents.apply(this, arguments);

        this.mon(this.innerBody, 'scroll', this.syncScroll, this);
        this.mon(this.innerHd, 'click', this.handleHdDown, this);
        this.mon(this.mainHd, {
            scope: this,
            mouseover: this.handleHdOver,
            mouseout: this.handleHdOut
        });
    },
    
    onResize : function(w, h) {
        Ext.ux.tree.TreeGrid.superclass.onResize.apply(this, arguments);
        
        var bd = this.innerBody.dom;
        var hd = this.innerHd.dom;

        if(!bd){
            return;
        }

        if(Ext.isNumber(h)){
            bd.style.height = this.body.getHeight(true) - hd.offsetHeight + 'px';
        }

        if(Ext.isNumber(w)){                        
            var sw = Ext.num(this.scrollOffset, Ext.getScrollBarWidth());
            if(this.reserveScrollOffset || ((bd.offsetWidth - bd.clientWidth) > 10)){
                this.setScrollOffset(sw);
            }else{
                var me = this;
                setTimeout(function(){
                    me.setScrollOffset(bd.offsetWidth - bd.clientWidth > 10 ? sw : 0);
                }, 10);
            }
        }
    },

    updateColumnWidths : function() {
        var cols = this.columns,
            colCount = cols.length,
            groups = this.outerCt.query('colgroup'),
            groupCount = groups.length,
            c, g, i, j;

        for(i = 0; i<colCount; i++) {
            c = cols[i];
            for(j = 0; j<groupCount; j++) {
                g = groups[j];
                g.childNodes[i].style.width = (c.hidden ? 0 : c.width) + 'px';
            }
        }
        
        for(i = 0, groups = this.innerHd.query('td'), len = groups.length; i<len; i++) {
            c = Ext.fly(groups[i]);
            if(cols[i] && cols[i].hidden) {
                c.addClass('x-treegrid-hd-hidden');
            }
            else {
                c.removeClass('x-treegrid-hd-hidden');
            }
        }

        var tcw = this.getTotalColumnWidth();                        
        Ext.fly(this.innerHd.dom.firstChild).setWidth(tcw + (this.scrollOffset || 0));
        this.outerCt.select('table').setWidth(tcw);
        this.syncHeaderScroll();    
    },
                    
    getVisibleColumns : function() {
        var columns = [],
            cs = this.columns,
            len = cs.length,
            i;
            
        for(i = 0; i<len; i++) {
            if(!cs[i].hidden) {
                columns.push(cs[i]);
            }
        }        
        return columns;
    },

    getTotalColumnWidth : function() {
        var total = 0;
        for(var i = 0, cs = this.getVisibleColumns(), len = cs.length; i<len; i++) {
            total += cs[i].width;
        }
        return total;
    },

    setScrollOffset : function(scrollOffset) {
        this.scrollOffset = scrollOffset;                        
        this.updateColumnWidths();
    },

    // private
    handleHdDown : function(e, t){
        var hd = e.getTarget('.x-treegrid-hd');

        if(hd && Ext.fly(t).hasClass('x-grid3-hd-btn')){
            var ms = this.hmenu.items,
                cs = this.columns,
                index = this.findHeaderIndex(hd),
                c = cs[index],
                sort = c.sortable;
                
            e.stopEvent();
            Ext.fly(hd).addClass('x-grid3-hd-menu-open');
            this.hdCtxIndex = index;
            
            this.fireEvent('headerbuttonclick', ms, c, hd, index);
            
            this.hmenu.on('hide', function(){
                Ext.fly(hd).removeClass('x-grid3-hd-menu-open');
            }, this, {single:true});
            
            this.hmenu.show(t, 'tl-bl?');
        }
        else if(hd) {
            var index = this.findHeaderIndex(hd);
            this.fireEvent('headerclick', this.columns[index], hd, index);
        }
    },

    // private
    handleHdOver : function(e, t){                    
        var hd = e.getTarget('.x-treegrid-hd');                        
        if(hd && !this.headersDisabled){
            index = this.findHeaderIndex(hd);
            this.activeHdRef = t;
            this.activeHdIndex = index;
            var el = Ext.get(hd);
            this.activeHdRegion = el.getRegion();
            el.addClass('x-grid3-hd-over');
            this.activeHdBtn = el.child('.x-grid3-hd-btn');
            if(this.activeHdBtn){
                this.activeHdBtn.dom.style.height = (hd.firstChild.offsetHeight-1)+'px';
            }
        }
    },
    
    // private
    handleHdOut : function(e, t){
        var hd = e.getTarget('.x-treegrid-hd');
        if(hd && (!Ext.isIE || !e.within(hd, true))){
            this.activeHdRef = null;
            Ext.fly(hd).removeClass('x-grid3-hd-over');
            hd.style.cursor = '';
        }
    },
                    
    findHeaderIndex : function(hd){
        hd = hd.dom || hd;
        var cs = hd.parentNode.childNodes;
        for(var i = 0, c; c = cs[i]; i++){
            if(c == hd){
                return i;
            }
        }
        return -1;
    },
    
    // private
    beforeColMenuShow : function(){
        var cols = this.columns,  
            colCount = cols.length,
            i, c;                        
        this.colMenu.removeAll();                    
        for(i = 1; i < colCount; i++){
            c = cols[i];
            if(c.hideable !== false){
                this.colMenu.add(new Ext.menu.CheckItem({
                    itemId: 'col-' + i,
                    text: c.header,
                    checked: !c.hidden,
                    hideOnClick:false,
                    disabled: c.hideable === false
                }));
            }
        }
    },
                    
    // private
    handleHdMenuClick : function(item){
        var index = this.hdCtxIndex,
            id = item.getItemId();
        
        if(this.fireEvent('headermenuclick', this.columns[index], id, index) !== false) {
            index = id.substr(4);
            if(index > 0 && this.columns[index]) {
                this.setColumnVisible(index, !item.checked);
            }     
        }
        
        return true;
    },
    
    setColumnVisible : function(index, visible) {
        this.columns[index].hidden = !visible;        
        this.updateColumnWidths();
    },

    /**
     * Scrolls the grid to the top
     */
    scrollToTop : function(){
        this.innerBody.dom.scrollTop = 0;
        this.innerBody.dom.scrollLeft = 0;
    },

    // private
    syncScroll : function(){
        this.syncHeaderScroll();
        var mb = this.innerBody.dom;
        this.fireEvent('bodyscroll', mb.scrollLeft, mb.scrollTop);
    },

    // private
    syncHeaderScroll : function(){
        var mb = this.innerBody.dom;
        this.innerHd.dom.scrollLeft = mb.scrollLeft;
        this.innerHd.dom.scrollLeft = mb.scrollLeft; // second time for IE (1/2 time first fails, other browsers ignore)
    },
    
    registerNode : function(n) {
        Ext.ux.tree.TreeGrid.superclass.registerNode.call(this, n);
        if(!n.uiProvider && !n.isRoot && !n.ui.isTreeGridNodeUI) {
            n.ui = new Ext.ux.tree.TreeGridNodeUI(n);
        }
    }
});

Ext.reg('treegrid', Ext.ux.tree.TreeGrid);

/***/ }),
/* 1039 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Ext.ux.display');

/**
 * @class       Ext.ux.display.DisplayPanel
 * @namespace   Ext.ux.display
 * @extends     Ext.form.FormPanel
 * 
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * 
 * <b>Panel for displaying information on record basis.</b>
 */
Ext.ux.display.DisplayPanel = Ext.extend(Ext.Panel, {
    
    /*
     * private
     */
    cls : 'x-ux-display',
    layout: 'ux.display',
    
    /**
     * holds all display fields of the panel
     * 
     * @type {Ext.util.MixedCollection}
     */
    fields: null,
    
    /**
     * initializes the component, builds this.fields, calls parent
     */
    initComponent: function() {
        Ext.ux.display.DisplayPanel.superclass.initComponent.call(this);
        
        this.fields = new Ext.util.MixedCollection();
        this.fields.addAll(this.findBy(function(c) {return Ext.isFunction(c.setValue)}));
    },
    
    /**
     * fills this fields with the corresponding record data
     * 
     * @param {Tine.Tinebase.data.Record} record
     */
    loadRecord: function(record) {
        this.fields.each(function(field) {
            var data = record.get(field.name) ? record.get(field.name) : '';
            field.setValue(data);
        });
    }
});

Ext.reg('ux.displaypanel', Ext.ux.display.DisplayPanel);


/***/ }),
/* 1040 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Ext.ux.display');

/**
 * @class       Ext.ux.display.DisplayField
 * @namespace   Ext.ux.display
 * @extends     Ext.form.DisplayField
 * 
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * 
 * <b>Field for displaying information in a displaypanel</b>
 */
Ext.ux.display.DisplayField = Ext.extend(Ext.form.DisplayField, {
    htmlEncode: true,
    nl2br: false,

    // don't enumerate as form field
    markInvalid: null,

    renderer: function(v) {
        return v;
    },

    // try to apply grid compatible renderer
    applyRenderer: function(v) {
        var parentWithRecord = this.findParentBy(function(c) {return !!c.record}),
            metadata = {css: {}, attr: {}},
            record = parentWithRecord ? parentWithRecord.record : null,
            store = record ? record.store : null;

        return this.renderer(v, metadata, record, 0, 0, store);
    },

    setRawValue : function(value) {
        var v = this.applyRenderer(value);

        if (String(v) == '[object Object]') {
            v = '...';
            this.hide();
        }
        
        if(this.htmlEncode){
            v = Ext.util.Format.htmlEncode(v);
        }
        
        if (this.nl2br) {
            v = Ext.util.Format.nl2br(v);
        }
        
        return this.rendered ? (this.el.dom.innerHTML = (Ext.isEmpty(v) ? '' : v)) : (this.value = v);
    }

});

Ext.reg('ux.displayfield', Ext.ux.display.DisplayField);


/***/ }),
/* 1041 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/**
 * @class Ext.ux.display.DisplayTextArea
 * @namespace Ext.ux.display
 * @extends Ext.Container
 * @author Cornelius Weiss <c.weiss@metaways.de>
 *
 * Textarea for displaying a text in a displaypanel
 */
Ext.ux.display.DisplayTextArea = Ext.extend(Ext.Container, {
    type: 'text/plain',
    htmlEncode: true,
    nl2br: true,
    linkify: true,

    autoScroll: true,

    layout: 'fit',
    cls: 'x-ux-display-textarea',

    initComponent: function() {
        this.supr().initComponent.call(this);

        if (this.type == 'text/plain') {
            this.htmlEncode = true;
            this.nl2br = true;
        } else {
            // rich content needs to be prepared by the server!
            this.linkify = false;
        }
    },

    renderer: Ext.ux.display.DisplayField.prototype.renderer,
    applyRenderer: Ext.ux.display.DisplayField.prototype.applyRenderer,

    afterRender: function() {
        this.supr().afterRender.call(this);
        if (this.value) {
            this.setValue(this.value);
        }
    },

    setValue : function(value) {
        if (value == this.value) {
            return;
        }

        this.value = value;

        if (! this.rendered) {
            return;
        }

        var v = this.renderer(value);

        if(this.htmlEncode){
            v = Ext.util.Format.htmlEncode(v);
        }

        if (this.nl2br) {
            v = Ext.util.Format.nl2br(v);
        }

        this.getEl().update(v);

        if (this.linkify) {
            Tine.Tinebase.common.linkifyText(v, this.getEl());
        }
    }
});

Ext.reg('ux.displaytextarea', Ext.ux.display.DisplayTextArea);


/***/ }),
/* 1042 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Ext.ux.layout');

/**
 * @namespace   Ext.ux.layout
 * @class       Ext.ux.layout.DisplayLayout
 * @extends     Ext.layout.FormLayout
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * 
 * <b>Layout for displaying information in a displaypanel</b>
 */
Ext.ux.layout.DisplayLayout = Ext.extend(Ext.layout.FormLayout, {
    /**
     * @cfg {String} background
     * one of {solid|border|none}
     */
    background: 'none',
    
    onLayout : function(ct, target) {
        Ext.ux.layout.DisplayLayout.superclass.onLayout.apply(this, arguments);
        
        target.addClass('x-ux-display-background-' + this.background);
        
        if (this.declaration && ! this.declEl) {
            this.declEl = target.createChild({dom: 'div', html: this.declaration, 'class': 'x-ux-display-declaration x-ux-display-background-declaration'});
        }
    },
    
    destroy: function() {
        if (this.declEl) {
            this.declEl.remove();
        }
        
        Ext.ux.layout.DisplayLayout.superclass.destroy.call(this);
    }
});

Ext.Container.LAYOUTS['ux.display'] = Ext.ux.layout.DisplayLayout;


/***/ }),
/* 1043 */
/***/ (function(module, exports) {

   
Ext.ns('Ext.ux');

Ext.ux.MessageBox = function(){
    var msgCt;

    function createBox(t, s){
        return ['<div class="x-ux-messagebox-msg">',
                '<div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>',
                '<div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc"><h3>', t, '</h3>', s, '</div></div></div>',
                '<div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>',
                '</div>'].join('');
    }
    return {
        msg : function(title, format){
            if(!msgCt){
                msgCt = Ext.DomHelper.insertFirst(document.body, {id:'x-ux-messagebox-msg-div'}, true);
            }
            msgCt.alignTo(document, 't-t');
            var s = String.format.apply(String, Array.prototype.slice.call(arguments, 1));
            var m = Ext.DomHelper.append(msgCt, {html:createBox(title, s)}, true);
            m.slideIn('t').pause(2).ghost("t", {remove:true});
        }
    };
}();


/***/ }),
/* 1044 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Ext.ux');


/**
 * @namespace   Ext.ux
 * @class       Ext.ux.TabPanelSortPlugin
 * 
 * @constructor
 * @param {Object} config Configurations options
 */
Ext.ux.TabPanelSortPlugin = function(config) {
    Ext.apply(this, config);
};

Ext.ux.TabPanelSortPlugin.prototype = {
    
    /**
     * @cfg {Object} dragZoneConfig
     */
    dragZoneConfig: null,
    
    /**
     * @cfg {Object} dropZoneConfig
     */
    dropZoneConfig: null,

    /**
     * @cfg {Number} pos
     * position
     */
    pos: null,

    /**
     * @cfg {Bool}
     */
    enableDD: true,

    /**
     * tabpanel
     * @type object
     */
    tabpanel: null,

    /**
     * init this plugin
     * 
     * @param {Ext.Component} cmp
     */
    init: function(cmp){
        this.tabpanel = cmp;
        
        this.tabpanel.addEvents(
            /**
             * @event tabsort
             * Fired when tabs where resorted
             * @param {Ext.TabPanel}
             */
            'tabsort'
        );
        
        this.tabpanel.on('beforerender', this.onBeforeRender, this);
        this.tabpanel.on('render', this.onRender, this);
    },

    onBeforeRender: function(tabpanel) {
        tabpanel.items.sort('ASC', function(a, b) {
            var posA = a.pos || (100 + 10*tabpanel.items.indexOf(a)),
                posB = b.pos || (100 + 10*tabpanel.items.indexOf(b));

            return posA - posB;
        });
    },

    /**
     * onRender define dragZone and dropZone
     * 
     * @param {Ext.TabPanel} tabpanel
     */
    onRender: function(tabpanel) {
        if (this.enableDD) {
            this.dragZone = new Ext.dd.DragZone(tabpanel.header, Ext.apply({
                getDragData: this.getDragData.createDelegate(this),
                getRepairXY: this.getRepairXY.createDelegate(this)
            }, this.dragZoneConfig || {}));

            this.dropZone = new Ext.dd.DropZone(tabpanel.header, Ext.apply({
                onNodeOver: this.onNodeOver.createDelegate(this),
                onNodeDrop: this.onNodeDrop.createDelegate(this),
                getTargetFromEvent: this.getTargetFromEvent.createDelegate(this)
            }, this.dropZoneConfig || {}));
        }
    },
    
    /**
     * gets static ddel
     * 
     * @return {Ext.Element}
     */
    getDDEl: function() {
        if (! this.ddel) {
            this.ddel = Ext.get(document.createElement('div'));
        }
        
        return this.ddel;
    },
    
    /**
     * Called when a mousedown occurs in this container. Looks in {@link Ext.dd.Registry}
     * for a valid target to drag based on the mouse down. Override this method
     * to provide your own lookup logic (e.g. finding a child by class name). Make sure your returned
     * object has a "ddel" attribute (with an HTML Element) for other functions to work.
     * @param {EventObject} e The mouse down event
     * @return {Object} The dragData
     */
    getDragData: function(e) {
        var target = this.tabpanel.findTargets(e);

        if (target.el) {
            this.pos = this.tabpanel.items.indexOf(target.item);
            
            var ddel = this.getDDEl();
            ddel.update(Ext.DomQuery.selectNode('span[class^=x-tab-strip-text]', target.el).innerHTML);
            
            return Ext.apply(target, {
                pos: this.pos,
                ddel: ddel.dom,
                repairXY: Ext.fly(target.el).getXY()
            });
        };
    },
    
    /**
     * Called while the DropZone determines that a {@link Ext.dd.DragSource} is over a drop node
     * that has either been registered or detected by a configured implementation of {@link #getTargetFromEvent}.
     * The default implementation returns this.dropNotAllowed, so it should be
     * overridden to provide the proper feedback.
     * 
     * @param {Object} nodeData The custom data associated with the drop node (this is the same value returned from
     * {@link #getTargetFromEvent} for this node)
     * @param {Ext.dd.DragSource} source The drag source that was dragged over this drop zone
     * @param {Event} e The event
     * @param {Object} data An object containing arbitrary data supplied by the drag source
     * @return {String} status The CSS class that communicates the drop status back to the source so that the
     * underlying {@link Ext.dd.StatusProxy} can be updated
     */
    onNodeOver : function(target, dd, e, data){
        var target = this.tabpanel.findTargets(e);
        if (target.el) {
            this.pos = this.tabpanel.items.indexOf(target.item);
            var box = Ext.fly(target.el).getBox(),
                side = (e.getXY()[0] > box.x + box.width/2) ? 'r' : 'l';
            
            if (this.pos > data.pos && side === 'l') {
//                Ext.fly(data.el).insertBefore(target.el);
                this.pos = --this.pos;
            } else if (this.pos < data.pos && side === 'r') {
//                Ext.fly(data.el).insertAfter(target.el);
                this.pos = ++this.pos;
            }
        }
        
        //@TODO: separation line
        return Ext.dd.DropZone.prototype.dropAllowed;
    },
    
    /**
     * Called when the DropZone determines that a {@link Ext.dd.DragSource} has been dropped onto
     * the drop node.  The default implementation returns false, so it should be overridden to provide the
     * appropriate processing of the drop event and return true so that the drag source's repair action does not run.
     * @param {Object} nodeData The custom data associated with the drop node (this is the same value returned from
     * {@link #getTargetFromEvent} for this node)
     * @param {Ext.dd.DragSource} source The drag source that was dragged over this drop zone
     * @param {Event} e The event
     * @param {Object} data An object containing arbitrary data supplied by the drag source
     * @return {Boolean} True if the drop was valid, else false
     */
    onNodeDrop: function(target, dd, e, data){
        if (this.pos == (this.tabpanel.items.length)-1) {
            Ext.fly(data.el).insertAfter(this.tabpanel.items.itemAt(this.pos).tabEl);
        } else {
            if (this.tabpanel.items.indexOf(data.item) < this.pos) {
                Ext.fly(data.el).insertBefore(this.tabpanel.items.itemAt(this.pos+1).tabEl);
            } else {
                Ext.fly(data.el).insertBefore(this.tabpanel.items.itemAt(this.pos).tabEl);
            }
        }
        
        this.tabpanel.items.remove(data.item);
        this.tabpanel.items.insert(this.pos, data.item);
        
        this.tabpanel.fireEvent('tabsort', this.tabpanel);
        return true;
    },
    
    /**
     * Called before a repair of an invalid drop to get the XY to animate to. By default returns
     * the XY of this.dragData.ddel
     * @param {EventObject} e The mouse up event
     * @return {Array} The xy location (e.g. [100, 200])
     */
    getRepairXY: function(e) {
        return this.dragZone.dragData.repairXY;
    },
    
    /**
     * Returns a custom data object associated with the DOM node that is the target of the event.  By default
     * this looks up the event target in the {@link Ext.dd.Registry}, although you can override this method to
     * provide your own custom lookup.
     * @param {Event} e The event
     * @return {Object} data The custom data
     */
    getTargetFromEvent: function(e) {
        return e.getTarget('ul[class^=x-tab]', 10);
    }
};

Ext.preg('ux.tabpanelsortplugin', Ext.ux.TabPanelSortPlugin);

/***/ }),
/* 1045 */
/***/ (function(module, exports) {

Ext.ns('Ext.ux');

/**
 * plugin to insert additional registered items into a container
 *
 * @namespace   Ext.ux
 * @class       Ext.ux.ItemRegistry
 * @autor       Cornelius Weiss <c.weiss@metaways.de>
 * @license     BSD, MIT and GPL
 *
 * @example
// register 'additional item' for myDialog
Ext.ux.ItemRegistry.registerItem('myDialog', 'add-item-xtype', 20);

// in myDialog use itemRegistyPlugin
myDialog = Ext.extend(Ext.Container, {
    ...
    plugins: [{
        ptype: 'ux.itemregistry',
        key:   'myDialog'
    }]
})
 */
Ext.ux.ItemRegistry = function (config) {
    Ext.apply(this, config);
};

/**
 * @static
 * @private
 */
Ext.ux.ItemRegistry.itemMap = {};
Ext.ux.ItemRegistry.AUTO_ID = 1;

/**
 * registers an item for a given key
 * @static
 * 
 * @param {String|Ext.Component|Object} key
 * @param {String/Constructor/Object} item
 * @param {Number} pos (optional)
 */
Ext.ux.ItemRegistry.registerItem = function(key, item, pos) {
    var _ = window.lodash;

    if (_.isString(key)) {
        if (!Ext.ux.ItemRegistry.itemMap.hasOwnProperty(key)) {
            Ext.ux.ItemRegistry.itemMap[key] = [];
        }

        Ext.ux.ItemRegistry.itemMap[key].push({
            item: item,
            pos: pos
        });
    }

    else {
        // initialised component
        var dynKey = 'Ext.ux.ItemRegistry-' + ++Ext.ux.ItemRegistry.AUTO_ID,
            plugin = new Ext.ux.ItemRegistry({key: dynKey});

        Ext.ux.ItemRegistry.registerItem(dynKey, item, pos);

        key.plugins = key.plugins || [];
        key.plugins.push(plugin);

        if (_.get(key, 'items.items')) {
            plugin.init(key);
        }
    }
};

Ext.ux.ItemRegistry.prototype = {
    /**
     * @cfg {String} key
     * key the items are registered under. If no key is given, the itemId
     * of the component will be used
     */
    key: null,

    init: function(cmp) {
        this.cmp = cmp;

        if (! this.key) {
            this.key = cmp.getItemId();
        }
        
        // give static item pos to existing items
        this.cmp.items.each(function(item, idx) {
            if (! item.hasOwnProperty('registerdItemPos')) {
                item.registerdItemPos = idx * 10;
            }
        }, this);

        var regItems = Ext.ux.ItemRegistry.itemMap[this.key] || [];



        Ext.each(regItems, function(reg) {
            // key hat / -> find item defined by first part and register item,regItem,possuffix -> return
            var path = String(reg.pos).split('/');
            if (path.length > 1) {
                var idx = +path.shift(),
                    item = this.cmp.items.get(idx);

                if (item) {
                    // console.info(path.join('/'))
                    Ext.ux.ItemRegistry.registerItem(this.cmp.items.get(idx), reg.item, path.join('/'));
                } else {
                    console.warn('cannot register for path - ' + path.join('/'));
                }
                return;

            }


            var addItem = this.getItem(reg),
                addPos = null;

            if (! addItem) {
                console.warn('item not found');
                return;
            }

            // insert item 
            this.cmp.items.each(function(item, idx) {
                if (addItem.registerdItemPos < item.registerdItemPos) {
                    this.cmp.insert(idx, addItem);
                    addPos = idx;
                    return false;
                }
                return true;
            }, this);

            if (! Ext.isNumber(addPos)) {
                this.cmp.add(addItem);
            }
        }, this);
    },

    getItem: function(reg) {
        var def = reg.item,
            item;
            
        if (typeof def === 'function') {
            try {
                item = new def(this.config);
            } catch (error) {
                console.error('Ext.ux.ItemRegistry::getItem failed to create')
                console.error(error);
                return;
            }
        } else {
            if (Ext.isString(def)) {
                def = {xtype: def};
            }
            
            item = this.cmp.lookupComponent(def);
        }

        item.registerdItemPos = reg.pos ? reg.pos : this.cmp.items.length * 10;
        
        return item;
    }
};
Ext.ComponentMgr.registerPlugin('ux.itemregistry', Ext.ux.ItemRegistry);

/* test - uncomment to run
if (! window.lodash) {
    window.lodash = _;
}

Ext.onReady(function() {
    var testWin = new Ext.Window({
        width: 640,
        height: 480,
        layout: 'fit',
        title: 'ux.itemregistry test',
        items: [{
            xtype: 'tabpanel',
            activeTab: 0,
            border: false,
            defaults: {border: false},
            itemId: 'testWin',
            plugins: ['ux.itemregistry'],
            items: [{
                title: 'basepanel',
                html: 'basepanel'
            }, {
                title: 'no pos',
                html: 'no pos'
            }, {
                title: 'pos 50',
                html: 'pos 50',
                registerdItemPos: 50
            }]
        }]
    });
    testWin.show();

    Ext.ux.ItemRegistry.registerItem(testWin.items.get(0), {
        xtype: 'panel',
        title: 'key-cmp',
        html: 'register item in an existing component'
    }, 80);
});

itemRegTestPanel20 = Ext.extend(Ext.Panel, {
    title: 'add panel pos 20',
    html: 'add panel pos 20',

    initComponent: function() {
        // example how to hook in owner
        this.on('added', function(me, owner, pos) {
            owner.on('tabchange', function() {
                console.log('tabchange');
            })
        }),

        itemRegTestPanel20.superclass.initComponent.call(this);
    }
});
Ext.ux.ItemRegistry.registerItem('testWin', itemRegTestPanel20, 20);

itemRegTestPanel60 = {
    xtype: 'panel',
    title: 'add panel pos 60',
    items: [{items: [{html: 'add panel pos 60'}]}]
};
Ext.ux.ItemRegistry.registerItem('testWin', itemRegTestPanel60, 60);
Ext.ux.ItemRegistry.registerItem(itemRegTestPanel60, {html: 'registered in component config'}, 20);
Ext.ux.ItemRegistry.registerItem('testWin', {html: 'registered with path position '}, '4/0/20');
*/


/***/ }),
/* 1046 */
/***/ (function(module, exports) {

Ext.applyIf(Function.prototype, {

    /**
     * defers execution on a ticket bases. The function gets executed when all registered tickets are back.
     * 
     * @namespace   Function
     * @autor       Cornelius Weiss <c.weiss@metaways.de>
     * @license     BSD, MIT and GPL
     *
     *
var sayHi = function(name){
alert('Hi, ' + name);
}

var ticketFn = sayHi.deferByTickets(this, ['Fred']);

// take ticket
var ticketFn1 = ticketFn();
var ticketFn2 = ticketFn();

// give tickets back
ticketFn1();
ticketFn2();

     * NOTE: the function gets never executed if not at least one ticket is taken and given back
     *
     * @param {Object} scope (optional) The scope (this reference) in which the function is executed.
     * @param {Array} args (optional) Overrides arguments for the call. (Defaults to the arguments passed by the caller)
     * @param {Boolean/Number} appendArgs (optional) if True args are appended to call args instead of overriding,
     * if a number the args are inserted at the specified position
     * @return {Function} ticketFn
     */
    deferByTickets: function(obj, args, appendArgs) {
        var fn = this.createDelegate(obj, args, appendArgs),
            waitTickets = [];
        
        // run if all tickets are back
        var run = function() {
            if (Ext.isEmpty(waitTickets)) {
                fn();
            }
        };

        return function() {
            var ticket = Ext.id();
            waitTickets.push(ticket);
            // fn to return wait ticket
            return function() {
                waitTickets.remove(ticket);
                run();
            };
        };
    }
});


/***/ }),
/* 1047 */
/***/ (function(module, exports) {

// Backport from Ext 4.0
Ext.applyIf(Function.prototype, {

    /**
     * <p>Creates a delegate function, optionally with a bound scope which, when called, buffers
     * the execution of the passed function for the configured number of milliseconds.
     * If called again within that period, the impending invocation will be canceled, and the
     * timeout period will begin again.</p>
     *
     * @param {Function} fn The function to invoke on a buffered timer.
     * @param {Number} buffer The number of milliseconds by which to buffer the invocation of the
     * function.
     * @param {Object} scope (optional) The scope (<code><b>this</b></code> reference) in which
     * the passed function is executed. If omitted, defaults to the scope specified by the caller.
     * @param {Array} args (optional) Override arguments for the call. Defaults to the arguments
     * passed by the caller.
     * @return {Function} A function which invokes the passed function after buffering for the specified time.
     */
    createBuffered: function(fn, buffer, scope, args) {
        return function(){
            var timerId;
            return function() {
                var me = this,
                    argsPassed = arguments;
                if (timerId) {
                    clearInterval(timerId);
                    timerId = null;
                }
                timerId = setTimeout(function(){
                    fn.apply(scope || me, args || argsPassed);
                }, buffer);
            };
        }();
    }
});


/***/ }),
/* 1048 */
/***/ (function(module, exports) {

/**
 * @class GetIt.GridPrinter
 * @author Ed Spencer (edward@domine.co.uk)
 * Class providing a common way of printing Ext.Components. Ext.ux.Printer.print delegates the printing to a specialised
 * renderer class (each of which subclasses Ext.ux.Printer.BaseRenderer), based on the xtype of the component.
 * Each renderer is registered with an xtype, and is used if the component to print has that xtype.
 * 
 * See the files in the renderers directory to customise or to provide your own renderers.
 * 
 * Usage example:
 * 
 * var grid = new Ext.grid.GridPanel({
 *   colModel: //some column model,
 *   store   : //some store
 * });
 * 
 * Ext.ux.Printer.print(grid);
 * 
 */
Ext.ux.Printer = function() {
  
  return {
    /**
     * @property renderers
     * @type Object
     * An object in the form {xtype: RendererClass} which is manages the renderers registered by xtype
     */
    renderers: {},
    
    /**
     * Registers a renderer function to handle components of a given xtype
     * @param {String} xtype The component xtype the renderer will handle
     * @param {Function} renderer The renderer to invoke for components of this xtype
     */
    registerRenderer: function(xtype, renderer) {
      this.renderers[xtype] = new (renderer)();
    },
    
    /**
     * Returns the registered renderer for a given xtype
     * @param {String} xtype The component xtype to find a renderer for
     * @return {Object/undefined} The renderer instance for this xtype, or null if not found
     */
    getRenderer: function(xtype) {
      return this.renderers[xtype];
    },

    findRenderer: function(component) {
        var xtypes = component.getXTypes().split('/'),
            renderer = undefined;

        //iterate backwards over the xtypes of this component, dispatching to the most specific renderer
        for (var i = xtypes.length - 1; i >= 0; i--){
            var xtype    = xtypes[i],
                renderer = this.getRenderer(xtype);

            if (renderer != undefined) {
                break;
            }
        }

        return renderer;
    },

    /**
     * Prints the passed grid. Reflects on the grid's column model to build a table, and fills it using the store
     * @param {Ext.Component} component The component to print
     */
    print: function(component) {
        var renderer = this.findRenderer(component);

        if (renderer != undefined) {
          renderer.print(component);
        }
    }
  };
}();

/**
 * Override how getXTypes works so that it doesn't require that every single class has
 * an xtype registered for it.
 */
Ext.override(Ext.Component, {
  getXTypes : function(){
      var tc = this.constructor;
      if(!tc.xtypes){
          var c = [], sc = this;
          while(sc){ //was: while(sc && sc.constructor.xtype) {
            var xtype = sc.constructor.xtype;
            if (xtype != undefined) c.unshift(xtype);
            
            sc = sc.constructor.superclass;
          }
          tc.xtypeChain = c;
          tc.xtypes = c.join('/');
      }
      return tc.xtypes;
  }
});


/***/ }),
/* 1049 */
/***/ (function(module, exports, __webpack_require__) {

/**
 * @class Ext.ux.Printer.BaseRenderer
 * @extends Object
 * @author Ed Spencer
 * @author Cornelius Weiß
 * Abstract base renderer class. Don't use this directly, use a subclass instead
 */
Ext.ux.Printer.BaseRenderer = Ext.extend(Object, {
    /**
    * @cfg {String} printStrategy window or iframe
    */
    printStrategy: 'iframe',

    /**
     * @property stylesheetPath
     * @type String
     * The path at which the print stylesheet can be found (defaults to 'stylesheets/print.css')
     */
    stylesheetPath: 'stylesheets/print.css',

    /**
    * @cfg {Boolean} useHtml2Canvas
    */
    useHtml2Canvas: false,

    debug: false,
  
    constructor: function(config) {
        Ext.apply(this, config);

        Ext.ux.Printer.BaseRenderer.superclass.constructor.call(this, config);
    },

    /**
    * template method to intercept when document is ready
    *
    * @param {Document} document
    * @pram {Ext.Component} component
    */
    onBeforePrint: Ext.emptyFn,

    /**
    * Prints the component
    * @param {Ext.Component} component The component to print
    */
    print: function(component) {
        var mask = new Ext.LoadMask(Ext.getBody(), {msg: i18n._("Preparing print, please wait...")});
        mask.show();

        if (this.debug) {
            this.printStrategy = 'window';
        }

        return this[this.printStrategy + 'Print'](component)
        .then(function() {
            mask.hide.defer(200, mask);
        })
        .catch(function(error) {
            mask.hide();
            Ext.Msg.show({
                title: i18n._('Printing Error'),
                msg: error,
                buttons: Ext.Msg.OK,
                icon: Ext.MessageBox.ERROR
            });
        });
    },
  
    /**
    * Prints the component using the new window strategy
    * @param {Ext.Component} component The component to print
    */
    windowPrint: function(component) {
        var name = component && component.getXType
             ? String.format("print_{0}_{1}", String(component.getXType()).replace(/(\.|-)/g, '_'), component.id.replace(/(\.|-)/g, '_'))
             : "print";

        var win = window.open('', name);

        var me = this;
        return me.generateHTML(component).then(function(html) {
            win.document.write(html);
            win.document.close();

            // gecko looses its document after document.close(). but fortunally waits with printing till css is loaded itself
            me.doPrint(win);
        });
    },

    /**
     * Prints the component using the hidden iframe strategy
     * @param {Ext.Component} component The component to print
     */
    iframePrint: function(component) {
        var me = this;
        return me.generateHTML(component).then(function(html) {
            var id = Ext.id(),
                frame = document.createElement('iframe'),
                style = {
                    position: 'absolute',
                    'background-color': '#FFFFFF',
                    width: '210mm',
                    height: '297mm',
                    top: '-10000px',
                    left: '-10000px'
                };

            if (this.debug) {
                Ext.apply(style, {
                    top: '0px',
                    left: '0px',
                    'z-index': 10000000
                });
            }

            Ext.fly(frame).set({
                id: id,
                name: id,
                style: style
            });

            document.body.appendChild(frame);

            Ext.fly(frame).set({
                src : Ext.SSL_SECURE_URL
            });

            var doc = frame.contentWindow.document || frame.contentDocument || WINDOW.frames[id].document;

            doc.open();
            doc.write(html);
            doc.close();

            // resize to full height as browser might print only the visible area
            var totalHeight = Ext.fly(doc.body).getHeight();
            Ext.fly(frame).setStyle('height', totalHeight+'px');

            return me.doPrintOnStylesheetLoad(frame.contentWindow, component);
        });
    },

    /**
     * check if style is loaded and do print afterwards
     *
     * @param {window} win
     */
    doPrintOnStylesheetLoad: function(win, component) {
        var me = this;
        return new Promise(function (fulfill, reject) {
            var checkcss = function(win, component) {
                var el = win.document.getElementById('csscheck'),
                    comp = el.currentStyle || getComputedStyle(el, null);

                if (comp.display !== "none") {
                    return checkcss.defer(10, me, [win, component]);
                }
                fulfill();
            };
            checkcss(win, component);
        })
            .then(function() {
                me.onBeforePrint(win.document, component);
            })
            .then(function() {
                return me.doPrint(win);
            });
    },

    doPrint: function(win) {
        var me = this;
        return new Promise(function (fulfill, reject) {
            if (me.useHtml2Canvas) {
                __webpack_require__.e/* require.ensure */(0).then((function() {
                    var html2canvas = __webpack_require__ (80);
                    var canvas = win.document.createElement("canvas");
                    canvas.width = win.innerWidth;
                    canvas.height = win.innerHeight;

                    me.setDPI(canvas, 300);

                    html2canvas(win.document.body, {
                        canvas: canvas,
                        grabMouse: false,
                        onrendered: function (canvas) {
                            var screenshot = canvas.toDataURL();
                            me.useHtml2Canvas = false;
                            win.document.body.innerHTML = '<img style="display: block; width: 100%" />';
                            win.document.body.firstChild.onload = me.doPrint.createDelegate(me, [win]);
                            win.document.body.firstChild.src = screenshot;
                            fulfill();
                        }
                    });
                }).bind(null, __webpack_require__)).catch(__webpack_require__.oe);

            } else {
                try {
                    if (!win.document.execCommand('print', false, null)) {
                        win.print();
                    }
                } catch(e) {
                    win.print();
                }
                if (!me.debug) {
                    win.close();
                }
                fulfill();
            }
        });
    },

    setDPI: function (canvas, dpi) {
        // Set up CSS size if it's not set up already
        if (!canvas.style.width)
            canvas.style.width = canvas.width + 'px';
        if (!canvas.style.height)
            canvas.style.height = canvas.height + 'px';

        var scaleFactor = dpi / 96;
        canvas.width = Math.ceil(canvas.width * scaleFactor);
        canvas.height = Math.ceil(canvas.height * scaleFactor);
        var ctx = canvas.getContext('2d');
        ctx.scale(scaleFactor, scaleFactor);
    },

    /**
    * Generates the HTML Markup which wraps whatever this.generateBody produces
    * @param {Ext.Component} component The component to generate HTML for
    * @return {String} An HTML fragment to be placed inside the print window
    */
    generateHTML: function(component) {
        var me = this;
        return new Promise(function (fulfill, reject) {
            me.prepareData(component).then(function(data) {
                me.generateBody(component, data).then(function(bodyHtml) {
                    fulfill(new Ext.XTemplate(
                        '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
                        '<html>',
                        '<head> ',
                        '<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />',
                        '<x-additional-headers />',
                        '<link href="' + me.stylesheetPath + '?' + new Date().getTime() + '" rel="stylesheet" type="text/css" media="screen,print" />',
                        '<title>' + me.getTitle(component) + '</title>',
                        '</head>',
                        '<body>',
                        '<div id="csscheck"></div>',
                        bodyHtml,
                        '</body>',
                        '</html>'
                    // NOTE: we need to append additional headers outside xtemplate as the template.compile has problems e.g. with complex css structures
                    ).apply(data).replace('<x-additional-headers />', me.getAdditionalHeaders()));
                });
            });
        });
    },
  
    /**
    * Returns the HTML that will be placed into the <head> element of th print window.
    * @param {Ext.Component} component The component to render
    * @return {String} The HTML fragment to place inside the print window's <head> element
    */
    getAdditionalHeaders: function(component) {
        return '';
    },
    
    /**
    * Returns the HTML that will be placed into the print window. This should produce HTML to go inside the
    * <body> element only, as <head> is generated in the print function
    * @param {Ext.Component} component The component to render
    * @param data The data extracted from the component
    * @return {String} The HTML fragment to place inside the print window's <body> element
    */
    generateBody: function(component, data) {
        return new Promise(function (fulfill, reject) {
            fulfill('')
        });
    },

    /**
    * Prepares data suitable for use in an XTemplate from the component
    * @param {Ext.Component} component The component to acquire data from
    * @return {Array} An empty array (override this to prepare your own data)
    */
    prepareData: function(component) {
        return new Promise(function (fulfill, reject) {
            fulfill(component);
        });
    },

    /**
    * Returns the title to give to the print window
    * @param {Ext.Component} component The component to be printed
    * @return {String} The window title
    */
    getTitle: function(component) {
        return typeof component.getTitle == 'function' ? component.getTitle() : (component.title || "Printing");
    }
});


/***/ }),
/* 1050 */
/***/ (function(module, exports) {

/**
 * @class Ext.ux.Printer.GridPanelRenderer
 * @extends Ext.ux.Printer.BaseRenderer
 * @author Ed Spencer
 * Helper class to easily print the contents of a grid. Will open a new window with a table where the first row
 * contains the headings from your column model, and with a row for each item in your grid's store. When formatted
 * with appropriate CSS it should look very similar to a default grid. If renderers are specified in your column
 * model, they will be used in creating the table. Override headerTpl and bodyTpl to change how the markup is generated
 */
Ext.ux.Printer.GridPanelRenderer = Ext.extend(Ext.ux.Printer.BaseRenderer, {
    headlineTpl: new Ext.XTemplate(
        '<div class="gridpanelrenderer_header_title">',
            '<h1>{header_title}</h1>',
        '</div>',
        '<div class="gridpanelrenderer_header_logo">',
            '{header_logo}',
        '</div>',
        '<div class="clear"></div>'
    ),

    /**
     * Generates the body HTML for the grid
     * @param {Ext.grid.GridPanel} grid The grid to print
     */
    generateBody: function (grid, data) {
        var me = this;

        // when called inside other components the outer generateHTML (outer page renderer) didn't prepare data
        // this is the case e.g. inside editDialogs - we don't load remote data then
        data = data || me.extractData(grid, grid.store.data.items);

        return new Promise(function (fulfill, reject) {
            var columns = me.getColumns(grid);

            //use the headerTpl and bodyTpl XTemplates to create the main XTemplate below
            var headings = me.headerTpl.apply(columns);
            var body = me.bodyTpl.apply(columns);

            var installLogoImg = Tine.Tinebase.common.getUrl('full') && Tine.Tinebase.registry.get('installLogo') ? '<img src="' + Tine.Tinebase.registry.get('installLogo') + '" />' : null;

            var header = me.headlineTpl.apply({
                header_title: Tine.Tinebase.registry.get('brandingTitle'),
                header_logo: installLogoImg
            });

            if (grid.title) {
                header += '<div class="rp-print-single-block-heading">' + grid.title + '</div>';
            }

            fulfill(new Ext.XTemplate(String.format('{0}<table>{1}<tpl for=".">{2}</tpl></table>', header, headings, body)).apply(data));
        });
    },

    /**
     * Prepares data from the grid for use in the XTemplate
     * @param {Ext.grid.GridPanel} grid The grid panel
     * @return {Array} Data suitable for use in the XTemplate
     */
    prepareData: function (grid) {
        var me = this;
        return new Promise(function (fulfill, reject) {
            //refetch data without paging
            grid.store.on('beforeload', function (store, options) {
                options.params = options.params || {};
                delete options.params.start;
                delete options.params.limit;

                // @TODO rethink - with local sort we don't need a remote query at all?
                if (! options.params.sort && !grid.store.remoteSort) {
                    var sortState = grid.store.getSortState();
                    options.params.sort = sortState.field;
                    options.params.dir = sortState.direction;
                }
            }, me, {'single': true});
            grid.store.on('beforeloadrecords', function (o, options, success, store) {
                var data = me.extractData(grid, o.records);
                fulfill(data);

                // don't touch original store!
                return false;
            }, me, {'single': true});

            grid.store.load();
        });
    },

    extractData: function (grid, records) {
        var columns = this.getColumns(grid),
            data = [];

        Ext.each(records, function (item) {
            var convertedData = {};

            //apply renderers from column model
            Ext.iterate(item.data, function (key, value) {
                Ext.each(columns, function (column) {
                    if (column.dataIndex == key) {
                        convertedData[key] = column.renderer ? column.renderer(value, null, item) : value;
                        convertedData[key] = convertedData[key] || '';
                        return false;
                    }
                });
            });

            data.push(convertedData);
        });

        return data;
    },
    /**
     * Returns the array of columns from a grid
     * @param {Ext.grid.GridPanel} grid The grid to get columns from
     * @return {Array} The array of grid columns
     */
    getColumns: function (grid) {
        var columns = [];

        Ext.each(grid.getColumnModel().config, function (col) {
            if (col.hidden != true) columns.push(col);
        }, this);

        return columns;
    },

    /**
     * @property headerTpl
     * @type Ext.XTemplate
     * The XTemplate used to create the headings row. By default this just uses <th> elements, override to provide your own
     */
    headerTpl: new Ext.XTemplate(
        '<tr><thead>',
        '<tpl for=".">',
        '<th>{header}</th>',
        '</tpl>',
        '</thead></tr>'
    ),

    /**
     * @property bodyTpl
     * @type Ext.XTemplate
     * The XTemplate used to create each row. This is used inside the 'print' function to build another XTemplate, to which the data
     * are then applied (see the escaped dataIndex attribute here - this ends up as "{dataIndex}")
     */
    bodyTpl: new Ext.XTemplate(
        '<tr>',
        '<tpl for=".">',
        '<td>\{{dataIndex}\}</td>',
        '</tpl>',
        '</tr>'
    )
});

Ext.ux.Printer.registerRenderer('grid', Ext.ux.Printer.GridPanelRenderer);


/***/ }),
/* 1051 */
/***/ (function(module, exports) {

/**
 * @class Ext.ux.Printer.ColumnTreeRenderer
 * @extends Ext.ux.Printer.BaseRenderer
 * @author Ed Spencer
 * Helper class to easily print the contents of a column tree
 */
Ext.ux.Printer.ColumnTreeRenderer = Ext.extend(Ext.ux.Printer.BaseRenderer, {

  /**
   * Generates the body HTML for the tree
   * @param {Ext.tree.ColumnTree} tree The tree to print
   */
  generateBody: function(tree) {
    var columns = this.getColumns(tree);
    
    //use the headerTpl and bodyTpl XTemplates to create the main XTemplate below
    var headings = this.headerTpl.apply(columns);
    var body     = this.bodyTpl.apply(columns);
    
    return String.format('<table>{0}<tpl for=".">{1}</tpl></table>', headings, body);
  },
    
  /**
   * Returns the array of columns from a tree
   * @param {Ext.tree.ColumnTree} tree The tree to get columns from
   * @return {Array} The array of tree columns
   */
  getColumns: function(tree) {
    return tree.columns;
  },
  
  /**
   * Descends down the tree from the root, creating an array of data suitable for use in an XTemplate
   * @param {Ext.tree.ColumnTree} tree The column tree
   * @return {Array} Data suitable for use in the body XTemplate
   */
  prepareData: function(tree) {
      var me = this;
      return new Promise(function (fulfill, reject) {
          var root = tree.root,
              data = [],
              cols = this.getColumns(tree),
              padding = me.indentPadding;

          var f = function (node) {
              if (node.hidden === true || node.isHiddenRoot() === true) return;

              var row = Ext.apply({depth: node.getDepth() * padding}, node.attributes);

              Ext.iterate(row, function (key, value) {
                  Ext.each(cols, function (column) {
                      if (column.dataIndex == key) {
                          row[key] = column.renderer ? column.renderer(value) : value;
                      }
                  }, me);
              });

              //the property used in the first column is renamed to 'text' in node.attributes, so reassign it here
              row[me.getColumns(tree)[0].dataIndex] = node.attributes.text;

              data.push(row);
          };

          root.cascade(f, me);

          fulfill(data);
      });
  },
  
  /**
   * @property indentPadding
   * @type Number
   * Number of pixels to indent node by. This is multiplied by the node depth, so a node with node.getDepth() == 3 will
   * be padded by 45 (or 3x your custom indentPadding)
   */
  indentPadding: 15,
  
  /**
   * @property headerTpl
   * @type Ext.XTemplate
   * The XTemplate used to create the headings row. By default this just uses <th> elements, override to provide your own
   */
  headerTpl:  new Ext.XTemplate(
    '<tr>',
      '<tpl for=".">',
        '<th width="{width}">{header}</th>',
      '</tpl>',
    '</tr>'
  ),
 
  /**
   * @property bodyTpl
   * @type Ext.XTemplate
   * The XTemplate used to create each row. This is used inside the 'print' function to build another XTemplate, to which the data
   * are then applied (see the escaped dataIndex attribute here - this ends up as "{dataIndex}")
   */
  bodyTpl:  new Ext.XTemplate(
    '<tr>',
      '<tpl for=".">',
        '<td style="padding-left: {[xindex == 1 ? "\\{depth\\}" : "0"]}px">\{{dataIndex}\}</td>',
      '</tpl>',
    '</tr>'
  )
});

Ext.ux.Printer.registerRenderer('columntree', Ext.ux.Printer.ColumnTreeRenderer);


/***/ }),
/* 1052 */
/***/ (function(module, exports) {


Ext.ux.Printer.FieldRenderer = Ext.extend(Ext.ux.Printer.BaseRenderer, {

    /**
     * Generates the body HTML for the field
     * @param {Ext.form.Field} field The field to print
     */
    generateBody: function(field) {
        var label = field.fieldLabel || field.ownerCt.title || '';

        return '' +
        '<div class="rp-print-single-details-row">' +
            '<span class="rp-print-single-label">' + label + '</span>' +
            '<span class="rp-print-single-value">' + field.getRawValue() + '</span>' +
        '</div>';

    }
});

Ext.ux.Printer.registerRenderer('field', Ext.ux.Printer.FieldRenderer);


/***/ }),
/* 1053 */
/***/ (function(module, exports) {


Ext.ux.Printer.CheckRenderer = Ext.extend(Ext.ux.Printer.BaseRenderer, {

    /**
     * Generates the body HTML for the checkbox
     * @param {Ext.form.Field} field The checkbox to print
     */
    generateBody: function(field) {
        var value = !!+field.getValue() ?  window.i18n._('Yes') : window.i18n._('No');

        return '' +
        '<div class="rp-print-single-details-row">' +
            '<span class="rp-print-single-label">' + (field.boxLabel || field.fieldLabel) + '</span>' +
            '<span class="rp-print-single-value">' + value + '</span>' +
        '</div>';

    }
});

Ext.ux.Printer.registerRenderer('checkbox', Ext.ux.Printer.CheckRenderer);


/***/ }),
/* 1054 */
/***/ (function(module, exports) {


Ext.ux.Printer.ComboRenderer = Ext.extend(Ext.ux.Printer.BaseRenderer, {

    /**
     * Generates the body HTML for the combo box
     * @param {Ext.form.Field} field The field to print
     */
    generateBody: function(field) {
        return '' +
        '<div class="rp-print-single-details-row">' +
            '<span class="rp-print-single-label">' + field.fieldLabel + '</span>' +
            '<span class="rp-print-single-value">' + field.getRawValue() + '</span>' +
        '</div>';

    }
});

Ext.ux.Printer.registerRenderer('combo', Ext.ux.Printer.ComboRenderer);


/***/ }),
/* 1055 */
/***/ (function(module, exports) {


Ext.ux.Printer.ContainerRenderer = Ext.extend(Ext.ux.Printer.BaseRenderer, {

    /**
     * Generates the body HTML for the container
     * @param {Ext.Container} container The container to print
     */
    generateBody: function(container) {
        var _ = window.lodash;

        return _.reduce(container.items.items, function(promise, cmp) {
            return promise.then(function(html) {
                return new Promise(function(resolve, reject) {
                    var renderer = Ext.ux.Printer.findRenderer(cmp),
                        result = renderer ? renderer.generateBody(cmp) : '';

                    if (_.isString(result)) {
                        resolve(html + result);
                    } else {
                        result.then(function(string) {
                            resolve(html + string);
                        })
                    }
                });
            });
        }, Promise.resolve(''));
    }
});

Ext.ux.Printer.registerRenderer('container', Ext.ux.Printer.ContainerRenderer);


/***/ }),
/* 1056 */
/***/ (function(module, exports) {


Ext.ux.Printer.PanelRenderer = Ext.extend(Ext.ux.Printer.ContainerRenderer, {

    /**
     * Generates the body HTML for the panel
     * @param {Ext.Panel} panel The panel to print
     */
    generateBody: function(panel) {
        return Ext.ux.Printer.PanelRenderer.superclass.generateBody.call(this, panel).then(function(html) {

            if (panel.header) {
                html = '<div class = "panel-header">' + panel.header + '</div>' + html;
            }

            return html;
        });
    }
});

Ext.ux.Printer.registerRenderer('panel', Ext.ux.Printer.PanelRenderer);


/***/ }),
/* 1057 */
/***/ (function(module, exports) {


Ext.ux.Printer.TagsRenderer = Ext.extend(Ext.ux.Printer.BaseRenderer, {

    /**
     * Generates the body HTML for the tagsPanel
     * @param {Tine.widgets.tags.TagPanel} tagsPanel
     */
    generateBody: function(tagsPanel) {
        var _ = window.lodash;

        return '<div class="cal-print-single-block-heading">' + i18n._('Tags') + '</div>' +
               '<div class="rp-print-single-block rp-print-single-tags">' +
                    tagsPanel.dataView.el.dom.innerHTML +
               '</div><br class="x-clear"><br>';
    }
});

Ext.ux.Printer.registerRenderer('Tine.widgets.tags.TagPanel', Ext.ux.Printer.TagsRenderer);


/***/ }),
/* 1058 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Offertory
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Ext.ux.Printer');

/**
 * Render any EditDialog.
 */
Ext.ux.Printer.EditDialogRenderer = Ext.extend(Ext.ux.Printer.BaseRenderer, {

    stylesheetPath: 'Tinebase/css/widgets/print.css',

    /**
     * @param {Tine.widgets.dialog.EditDialog} editDialog the edit dialog to print
     * @return {Array} Data suitable for use in the XTemplate
     */
    prepareData: function (editDialog) {
        return new Promise(function (fulfill, reject) {
            var _ = window.lodash;

            // hack to have all form items rendered
            _.each(editDialog.findByType('tabpanel'), function(tabpanel) {
                var active = tabpanel.getActiveTab();
                _.each(tabpanel.items.items, function(item) {
                    tabpanel.setActiveTab(item);
                });
                tabpanel.setActiveTab(active);
            });

            // wait for rendering
            (function() {
                var recordData = Ext.util.JSON.decode(Ext.util.JSON.encode(editDialog.record.data));

                editDialog.getForm().items.each(function (field) {
                    if (field instanceof Ext.form.ComboBox || ! Ext.isString(recordData[name])) {
                        var name = field.getName(),
                            isCustomField = String(name).match(/^customfield_(.*)/),
                            string = field.getRawValue();

                        if (isCustomField) {
                            _.set(recordData, 'customfields.' + isCustomField[1], string);
                        } else {
                            recordData[name] = string;

                        }
                    }
                });

                fulfill(recordData);
            }).defer(1000);

        });
    },

    generateBody: function (editDialog, data) {
        var _ = window.lodash,
            me = this,
            appName = editDialog.recordClass.getMeta('appName');

        data.titleHTML = editDialog.record.getTitle();
        data.customFieldHTML = Tine.widgets.customfields.Renderer.renderAll(appName, editDialog.recordClass, data.customfields);


        // @TODO render container
        // @TODO render tags, notes, attachments
        return new Promise(function (fulfill, reject) {
            me.generateRecordHTML(editDialog).then(function(recordHTML) {
                data.recordHTML = recordHTML;

                var bodyTpl = new Ext.XTemplate(
                    '<div class="rp-print-single">',
                    '    {[Tine.widgets.printer.headerRenderer()]}',
                    '    <div class="rp-print-single-summary">{titleHTML}</div>',
                    '    <table>',
                    '        <tr>',
                    '            <td>',
                    '            </td>',
                    '            <td>',
                    '                <div class="rp-print-single-block">',
                    '                    {values.recordHTML}',
                    '                    <br/>',
                    '                    {values.customFieldHTML}',
                    '                    <br/>',
                    '                    <div class="cal-print-single-block-heading">', window.i18n._('Related to'), '</div>',
                    '                    <div class="rp-print-single-block">',
                    '                        {[this.relationRenderer(values.relations)]}',
                    '                    </div>',
                    '                </div>',
                    '            </td>',
                    '        </tr>',
                    '    </table>',
                    '</div>',
                    {
                        relationRenderer: function (values) {
                            return Tine.widgets.relation.Renderer.renderAll(values);
                        }
                    });
                fulfill(bodyTpl.apply(data));
            })
        })
    },

    /**
     * generate html for direct record properties
     *
     *
     * @param editDialog
     * @param {Array} recordComponents Array of components/strings
     * @returns {Promise}
     */
    generateRecordHTML: function(editDialog, recordComponents) {
        var _ = window.lodash,
            me = this,
            appName = editDialog.recordClass.getMeta('appName'),
            app = Tine.Tinebase.appMgr.get(appName),
            form = editDialog.recordForm || editDialog.getForm(),
            fields = form.items.items;

        recordComponents = recordComponents || fields;

        return _.reduce(recordComponents || fields, function(promise, cmp) {
            return promise.then(function(html) {
                return new Promise(function(resolve, reject) {
                    var renderer = Ext.ux.Printer.findRenderer(_.isString(cmp) ? form.findField(cmp) : cmp),
                        result = renderer ? renderer.generateBody(cmp) : '';

                    if (_.isString(result)) {
                        resolve(html + result);
                    } else {
                        result.then(function(string) {
                            resolve(html + string);
                        })
                    }
                });
            });
        }, Promise.resolve(''));
    },

    getTitle: function(editDialog) {
        return editDialog.recordClass.getRecordName() + ': ' + editDialog.record.getTitle();
    }

});


/***/ }),
/* 1059 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2014 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase.data');

/**
 * central title renderer manager for records
 * 
 * @namespace   Tine.Tinebase.data
 * @class       Tine.Tinebase.data.TitleRendererManager
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @singleton
 */
Tine.Tinebase.data.TitleRendererManager = function() {
    var renderers = {};
    
    return {
        
        /**
         * returns renderer for given field
         * 
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {String} category {gridPanel|displayPanel} optional.
         * @return {Function}
         */
        get: function(appName, modelName) {
            return renderers[appName+modelName];
        },
        
        /**
         * register renderer for given field
         * 
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {Function} renderer
         * @param {String} category {gridPanel|displayPanel} optional.
         * @param {Object} scope to call renderer in, optional.
         */
        register: function(appName, modelName, renderer) {
            renderers[appName+modelName] = renderer;
        },
        
        /**
         * check if a renderer is explicitly registered
         * 
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {String} category {gridPanel|displayPanel} optional.
         * @return {Boolean}
         */
        has: function(appName, modelName) {
            // check for registered renderer
            return renderers[appName+modelName] ? true : false;
        }
    };
}();

/***/ }),
/* 1060 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
/**
 * @namespace Tine.Tinebase.data
 * @class     Tine.Tinebase.data.RecordStore
 * @extends   Ext.data.Store
 * @author    Cornelius Weiss <c.weiss@metaways.de>
 * 
 * Small helper class to create an {@link Ext.data.Store} configured with an
 * {@link Ext.data.DirectProxy} and {@link Ext.data.JsonReader} to make interacting
 * with an {@link Ext.Direct} Server-side {@link Ext.ux.direct.ZendFrameworkProvider} easier.
 * 
 * @xtype     tinerecordstore
 * @constructor
 * @param {Object} config config object
 */
Tine.Tinebase.data.RecordStore = function(c){
    /**
     * @cfg {bool} readOnly
     * set to true to skip creation of a writer
     */
    /**
     * @cfg {Tine.Tinebase.data.Record} recordClass
     * model of this proxy (required)
     */
    
    c.batchTransactions = false;
    
    c.appName = c.recordClass.getMeta('appName');
    c.modelName = c.recordClass.getMeta('modelName');

    if (! c.sortInfo) {
        // TODO we might want to use $defaultSortInfo of the model here (see Tine.widgets.grid.GridPanel.initStore)
        var titleProperty = c.recordClass.getMeta('titleProperty'),
            defaultSortField = Ext.isArray(titleProperty) ? titleProperty[1][0] : titleProperty,
            defaultSortInfo = c.recordClass.hasField(titleProperty) ? {
                field: defaultSortField,
                order: 'DESC'
            } : null;

        c.sortInfo = c.defaultSortInfo || defaultSortInfo;
    }
    
    if (typeof(c.reader) == 'undefined') {
        c.reader = new Ext.data.JsonReader({
            root: c.root || 'results',
            totalProperty: c.totalProperty || 'totalcount',
            id: c.recordClass.getMeta('idProperty')
        }, c.recordClass);
    }
    
    if (typeof(c.writer) == 'undefined' && ! c.readOnly) {
        c.writer = new Ext.data.JsonWriter({
        });
    }
    
    if (typeof(c.proxy) == 'undefined') {
        c.proxy = new Tine.Tinebase.data.RecordProxy({
            recordClass: c.recordClass
        });
    }
    
    Tine.Tinebase.data.RecordStore.superclass.constructor.call(this, c);
};
Ext.extend(Tine.Tinebase.data.RecordStore, Ext.data.Store, {});
Ext.reg('tinerecordstore', Tine.Tinebase.data.RecordStore);


/***/ }),
/* 1061 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.Tinebase.data');

/**
 * @namespace   Tine.Tinebase.data
 * @class       Tine.Tinebase.data.GroupedStoreCollection
 * @extends     Ext.util.MixedCollection
 *
 * grouping store collection
 *
 * automatically manages group stores
 *
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @constructor
 * @param {Object} config
 */
Tine.Tinebase.data.GroupedStoreCollection = function(config) {
    this.fixedGroups = [];
    Ext.apply(this, config);
    Tine.Tinebase.data.GroupedStoreCollection.superclass.constructor.call(this);

    this.store.on('beforeload', this.onStoreBeforeLoad, this);
    this.store.on('load', this.onStoreLoad, this);
    this.store.on('add', this.onStoreAdd, this);
    this.store.on('update', this.onStoreUpdate, this);
    this.store.on('remove', this.onStoreRemove, this);

    if (this.group) {
        this.applyGrouping();
    }
};

Ext.extend(Tine.Tinebase.data.GroupedStoreCollection, Ext.util.MixedCollection, {
    /**
     * @cfg {Ext.data.Store} store
     */
    store: null,

    /**
     * @cfg {String|Function} group
     */
    group: '',

    /**
     * @cfg {Array} fixedGroups
     * if present, these is the fixed set of groups
     */
    fixedGroups: null,

    /**
     * @cfg {Bool} groupOnLoad
     * apply grouping when store is loaded
     * NOTE: when disabled, grouping must be triggered manually
     */
    groupOnLoad: true,

    applyGrouping: function() {
        if (this.fixedGroups.length) {
            this.setFixedGroups(this.fixedGroups)
        }

        this.groupRecords(this.store.getRange(), false);
    },

    groupBy: function(group) {
        this.group = group;
        this.applyGrouping();
    },

    groupRecords: function(rs, append) {
        // put data into groups
        var groups = [];
        var records = [];
        Ext.each(rs, function(r) {
            var groupNames = this.getGroupNames(r);

            Ext.each(groupNames, function(groupName) {
                var idx = groups.indexOf(groupName);
                if (idx < 0) {
                    groups.push(groupName);
                    records.push([r.copy()]);
                } else {
                    records[idx].push(r.copy());
                }
            });
        }, this);

        // collection housekeeping
        if (! this.fixedGroups.length) {
            Ext.each(this.keys.concat(), function (groupName) {
                if (groups.indexOf(groupName) < 0) {
                    this.removeKey(groupName);
                }
            }, this);
        }

        if (! append) {
            // clear stores which have no longer data
            this.eachKey(function (groupName) {
                if (groups.indexOf(groupName) < 0) {
                    var store = this.getCloneStore(groupName);
                    store.loadRecords({records: []}, {add: append}, true);
                }
            }, this);
        }

        Ext.each(groups, function(groupName, idx) {
            var store = this.getCloneStore(groupName);
            // do we need a beforeload event here?
            store.loadRecords({records: records[idx]}, {add: append}, true);
        }, this);
    },

    setFixedGroups: function(groupNames) {
        this.fixedGroups = groupNames;
        if (groupNames.length) {
            this.setGroups(groupNames);
        }
        this.groupRecords(this.store.getRange(), false);
    },

    // add/delete cloneStores
    setGroups: function(groupNames) {
        Ext.each(this.keys.concat(), function(groupName) {
            if (groupNames.indexOf(groupName) < 0) {
                this.removeKey(groupName);
            }
        }, this);

        Ext.each(groupNames, function(groupName, idx) {
            var store = this.get(groupName);
            if (! store) {
                store = this.createCloneStore();
                this.addSorted(groupName, store);
            }
        }, this);
    },

    /**
     * gets groups of given record
     *
     * @param {Ext.data.record} record
     * @returns {Array}
     */
    getGroupNames: function(record) {
        var _ = window.lodash,
            groupNames = Ext.isFunction(this.group) ? this.group(record) : record.get(this.group);

        if (! Ext.isArray(groupNames)) {
            groupNames = [groupNames];
        }

        if (this.fixedGroups.length) {
            groupNames = _.intersection(groupNames, this.fixedGroups);
        }

        return groupNames;
    },

    onStoreBeforeLoad: function(store, options) {
        var ret = true;
        this.eachKey(function(groupName) {
            var store = this.get(groupName);
            ret = ret && store.fireEvent('beforeload', store, options);
        }, this);

        return ret;
    },

    onStoreLoad: function() {
        if (this.groupOnLoad) {
            this.applyGrouping();
        }
    },

    onStoreAdd: function(store, records, index) {
        this.suspendCloneStoreEvents = true;

        Ext.each(records, function(record) {
            Ext.each(this.getGroupNames(record), function(groupName) {
                var store = this.get(groupName),
                    existingRecord = store.getById(record.id);

                // NOTE: record might be existing as it was added to a cloneStore
                if (existingRecord) {
                    this.getCloneStore(groupName).replace(existingRecord, record.copy());
                } else {
                    this.getCloneStore(groupName).add([record.copy()]);
                }
            }, this);

        }, this);

        this.suspendCloneStoreEvents = false;
    },

    onStoreUpdate: function(store, record, operation) {
        this.suspendCloneStoreEvents = true;

        var groupNames = this.getGroupNames(record);
        this.eachKey(function(groupName) {
            var store = this.get(groupName),
                existingRecord = store.getById(record.id);

            if (existingRecord) {
                if (groupNames.indexOf(groupName) < 0) {
                    store.remove(existingRecord);
                } else {
                    store.replaceRecord(existingRecord, record.copy());
                }

            } else {
                store.add([record.copy()]);
            }
            groupNames.remove(groupName);
        }, this);

        Ext.each(groupNames, function(groupName) {
            var store = this.getCloneStore(groupName);
            store.add(record.copy());
        }, this);

        this.suspendCloneStoreEvents = false;
    },

    onStoreRemove: function(store, record, index) {
        this.suspendCloneStoreEvents = true;

        this.eachKey(function(groupName) {
            var store = this.get(groupName),
                existingRecord = store.getById(record.id);

            if (existingRecord) {
                store.remove(existingRecord);
            }

        }, this);

        this.suspendCloneStoreEvents = false;
    },

    getCloneStore: function(groupName) {
        var store = this.get(groupName);
        if (! store && !this.fixedGroups.length) {
            store = this.createCloneStore();
            this.addSorted(groupName, store);
        }

        return store;
    },

    addSorted: function(groupName, store) {
        var idx = this.length;

        if (this.sortFn) {
            var items = [store].concat(this.items);
            items.sort(this.sortFn);
            idx = items.indexOf(store);
        }

        this.insert(idx, groupName, store);
    },

    createCloneStore: function() {
        var clone = new Ext.data.Store({
            fields: this.store.fields,
            // load: this.mainStore.load.createDelegate(this.mainStore),
            // proxy: this.store.proxy,
            replaceRecord: function(o, n) {
                var idx = this.indexOf(o);
                this.remove(o);
                this.insert(idx, n);
            }
        });

        clone.on('add', this.onCloneStoreAdd, this);
        clone.on('update', this.onCloneStoreUpdate, this);
        clone.on('remove', this.onCloneStoreRemove, this);
        return clone;
    },

    onCloneStoreAdd: function(eventStore, rs) {
        if (this.suspendCloneStoreEvents) return;

        Ext.each(rs, function(r) {
            this.store.add(r.copy());
        }, this);
    },

    onCloneStoreUpdate: function(eventStore, r) {
        if (this.suspendCloneStoreEvents) return;

        var existingRecord = this.store.getById(r.id);

        if (existingRecord) {
            this.store.replaceRecord(existingRecord, r.copy());
        }
    },

    onCloneStoreRemove: function(store, r) {
        if (this.suspendCloneStoreEvents) return;

        var existingRecord = this.store.getById(r.id);

        if (existingRecord) {
            this.store.remove(existingRecord);
        }
    }
});

/***/ }),
/* 1062 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.Tinebase.data');

/**
 * @namespace   Tine.Tinebase.data
 * @class       Tine.Tinebase.data.RecordProxy
 * @extends     Ext.data.DataProxy
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * 
 * Generic record proxy for an model/datatype of an application
 * 
 * @constructor
 * @param {Object} config Config Object
 */
Tine.Tinebase.data.RecordProxy = function(c) {
    // we support all actions
    c.api = {read: true, create: true, update: true, destroy: true};
    
    Tine.Tinebase.data.RecordProxy.superclass.constructor.call(this, c);
    
    Ext.apply(this, c);
    this.appName    = this.appName    ? this.appName    : this.recordClass.getMeta('appName');
    this.modelName  = this.modelName  ? this.modelName  : this.recordClass.getMeta('modelName');
    this.idProperty = this.idProperty ? this.idProperty : this.recordClass.getMeta('idProperty');
    
    /* NOTE: in ExtJS records always are part of a store. The store is
             the only instance which triggers read/write actions.
             
             In our edit dialoges in contrast we work with single (store-less) 
             records and the handlers itselve trigger the read/write actions.
             This might change in future, but as long as we do so, we also need
             the reader/writer here.
     */
    this.jsonReader = new Ext.data.JsonReader(Ext.apply({
        id: this.idProperty,
        root: 'results',
        totalProperty: 'totalcount'
    }, c.readerConfig || {}), this.recordClass);
};

Ext.extend(Tine.Tinebase.data.RecordProxy, Ext.data.DataProxy, {
    /**
     * @cfg {Ext.data.Record} recordClass
     * record definition class  (required)
     */
    recordClass: null,
    
    /**
     * @type String 
     * @property appName
     * internal/untranslated app name
     */
    appName: null,
    
    /**
     * default value for timeout on searches
     * 
     * @type Number
     */
    searchTimeout: 60000,
    
    /**
     * default value for timeout on saving
     * 
     * @type Number
     */
    saveTimeout: 300000,
    
    /**
     * default value for timeout on deleting by filter
     * 
     * @type Number
     */
    deleteByFilterTimeout: 300000,
    
    /**
     * default value for timeout on deleting
     * 
     * @type Number
     */
    deleteTimeout: 120000,
    
    /**
     * @type String 
     * @property idProperty
     * property of the id of the record
     */
    idProperty: null,
    
    /**
     * @type String 
     * @property modelName
     * name of the model/record 
     */
    modelName: null,
    
    /**
     * id of last transaction
     * @property transId
     */
    transId: null,

    /**
     * TODO is this really needed?
     */
    onDestroyRecords: Ext.emptyFn,
    removeFromBatch: Ext.emptyFn,
    
    /**
     * Aborts any outstanding request.
     * @param {Number} transactionId (Optional) defaults to the last transaction
     */
    abort : function(transactionId) {
        return Ext.Ajax.abort(transactionId);
    },
    
    /**
     * Determine whether this object has a request outstanding.
     * @param {Number} transactionId (Optional) defaults to the last transaction
     * @return {Boolean} True if there is an outstanding request.
     */
    isLoading : function(transId){
        return Ext.Ajax.isLoading(transId);
    },
        
    /**
     * loads a single 'full featured' record
     * 
     * @param   {Ext.data.Record} record
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success {Ext.data.Record}
     */
    loadRecord: function(record, options) {
        options = options || {};
        options.params = options.params || {};
        options.beforeSuccess = function(response) {
            if (! options.suppressBusEvents) {
                this.postMessage('update', response.responseText);
            }
            return [this.recordReader(response)];
        };
        
        var p = options.params;
        p.method = this.appName + '.get' + this.modelName;
        p.id = Ext.isString(record) ? record : record.get(this.idProperty);
        
        return this.doXHTTPRequest(options);
    },

    promiseLoadRecord: function(record, options) {
        var me = this;
        return new Promise(function (fulfill, reject) {
            try {
                me.loadRecord(record, Ext.apply(options || {}, {
                    success: function (r) {
                        fulfill(r);
                    },
                    failure: function (error) {
                        reject(new Error(error));
                    }
                }));
            } catch (error) {
                if (Ext.isFunction(reject)) {
                    reject(new Error(options));
                }
            }
        });
    },

    /**
     * searches all (lightweight) records matching filter
     * 
     * @param   {Object} filter
     * @param   {Object} paging
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success {Object} root:[records], totalcount: number
     */
    searchRecords: function(filter, paging, options) {
        options = options || {};
        options.params = options.params || {};
        
        var p = options.params;
        
        p.method = this.appName + '.search' + this.modelName + 's';
        p.filter = (filter) ? filter : [];
        p.paging = paging;

        options.beforeSuccess = function(response) {
            return [this.jsonReader.read(response)];
        };
        
        // increase timeout as this can take a longer (1 minute)
        options.timeout = this.searchTimeout;
        
        return this.doXHTTPRequest(options);
    },
    
    /**
     * saves a single record
     * 
     * @param   {Ext.data.Record} record
     * @param   {Object} options
     * @param   {Object} additionalArguments
     * @return  {Number} Ext.Ajax transaction id
     * @success {Ext.data.Record}
     */
    saveRecord: function(record, options, additionalArguments) {
        options = options || {};
        options.params = options.params || {};
        options.beforeSuccess = function(response) {
            if (! options.suppressBusEvents) {
                // do we need to distingush create/update?
                this.postMessage('update', response.responseText);
            }
            return [this.recordReader(response)];
        };
        
        var p = options.params;
        p.method = this.appName + '.save' + this.modelName;
        p.recordData = record.data;
        if (additionalArguments) {
            Ext.apply(p, additionalArguments);
        }
        
        // increase timeout as this can take a longer (5 minutes)
        options.timeout = this.saveTimeout;
        
        return this.doXHTTPRequest(options);
    },

    promiseSaveRecord: function(record, options, additionalArguments) {
        var me = this;
        return new Promise(function (fulfill, reject) {
            try {
                me.saveRecord(record, Ext.apply(options || {}, {
                    success: function (r) {
                        fulfill(r);
                    },
                    failure: function (error) {
                        reject(new Error(error));
                    }
                }), additionalArguments);
            } catch (error) {
                if (Ext.isFunction(reject)) {
                    reject(new Error(options));
                }
            }
        });
    },

    /**
     * deletes multiple records identified by their ids
     * 
     * @param   {Array} records Array of records or ids
     * @param   {Object} options
     * @param   {Object} additionalArguments
     * @return  {Number} Ext.Ajax transaction id
     * @success 
     */
    deleteRecords: function(records, options, additionalArguments) {
        options = options || {};
        options.params = options.params || {};
        options.params.method = this.appName + '.delete' + this.modelName + 's';
        options.params.ids = this.getRecordIds(records);
        if (additionalArguments) {
            Ext.apply(options.params, additionalArguments);
        }

        options.beforeSuccess = function(response) {
            var _ = window.lodash,
                me = this;

            if (! Ext.isArray(records)) {
                records = [records];
            }

            if (! options.suppressBusEvents) {
                _.each(records, function (record) {
                    me.postMessage('delete', record.data);
                });
            }
        };

        // increase timeout as this can take a long time (2 mins)
        options.timeout = this.deleteTimeout;
        
        return this.doXHTTPRequest(options);
    },

    /**
     * deletes multiple records identified by a filter
     * 
     * @param   {Object} filter
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success 
     */
    deleteRecordsByFilter: function(filter, options) {
        options = options || {};
        options.params = options.params || {};
        options.params.method = this.appName + '.delete' + this.modelName + 'sByFilter';
        options.params.filter = filter;
        
        // increase timeout as this can take a long time (5 mins)
        options.timeout = this.deleteByFilterTimeout;
        
        return this.doXHTTPRequest(options);
    },
    
    /**
     * updates multiple records with the same data
     * 
     * @param   {Array} filter filter data
     * @param   {Object} updates
     * @return  {Number} Ext.Ajax transaction id
     * @success
     */
    updateRecords: function(filter, updates, options) {
        options = options || {};
        options.params = options.params || {};
        options.params.method = this.appName + '.updateMultiple' + this.modelName + 's';
        options.params.filter = filter;
        options.params.values = updates;
        
        options.beforeSuccess = function(response) {
            return [Ext.util.JSON.decode(response.responseText)];
        };
        
        return this.doXHTTPRequest(options);
    },
    
    /**
     * returns an array of ids
     * 
     * @private 
     * @param  {Ext.data.Record|Array}
     * @return {Array} of ids
     */
    getRecordIds : function(records) {
        var ids = [];
        
        if (! Ext.isArray(records)) {
            records = [records];
        }
        
        for (var i=0; i<records.length; i++) {
            ids.push(records[i].id ? records[i].id : records.id);
        }
        
        return ids;
    },
    
    /**
     * required method for Ext.data.Proxy, used by store
     */
    load : function(params, reader, callback, scope, arg){
        if(this.fireEvent("beforeload", this, params) !== false){
            
            // 2017-11-03 cweiss - NOTE: some ext widgets directly work on the paging params.
            //   and don't update eventually existing params.paging properties. So we ALWAYS
            //   NEED to construct a new paging object from the params here!
            var paging = {
                sort:  params.sort,
                dir:   params.dir,
                start: params.start,
                limit: params.limit
            };
            
            this.searchRecords(params.filter, paging, {
                params: params,
                scope: this,
                success: function(records) {
                    callback.call(scope||this, records, arg, true);
                },
                failure: function(exception) {
                    //this.fireEvent('exception', this, 'remote', 'read', options, response, arg);
                    this.fireEvent('loadexception', this, 'remote',  exception, arg);
                    callback.call(scope||this, exception, arg, false);
                }
            });
            
        } else {
            callback.call(scope||this, null, arg, false);
        }
    },
    
    /**
     * do the request
     * 
     * @param {} action
     * @param {} rs
     * @param {} params
     * @param {} reader
     * @param {} callback
     * @param {} scope
     * @param {} options
     */
    doRequest : function(action, rs, params, reader, callback, scope, options) {
        var opts = {
            params: params, 
            callback: callback,
            scope: scope
        };
        
        switch (action) {
            case Ext.data.Api.actions.create:
                this.saveRecord(rs, opts);
                break;
            case Ext.data.Api.actions.read:
                this.load(params, reader, callback, scope, options);
                break;
            case Ext.data.Api.actions.update:
                this.saveRecord(rs, opts);
                break;
            case Ext.data.Api.actions.destroy:
                this.deleteRecords(rs, opts);
                break;
        }
    },

    
    /**
     * returns reader
     * 
     * @return {Ext.data.DataReader}
     */
    getReader: function() {
        return this.jsonReader;
    },
    
    /**
     * reads a single 'fully featured' record from json data
     * 
     * NOTE: You might want to override this method if you have a more complex record
     * 
     * @param  XHR response
     * @return {Ext.data.Record}
     */
    recordReader: function(response) {
        return Tine.Tinebase.data.Record.setFromJson(response.responseText, this.recordClass);
    },
    
    /**
     * is request still loading?
     * 
     * @param  {Number} Ext.Ajax transaction id
     * @return {Bool}
     */
    isLoading: function(tid) {
        return Ext.Ajax.isLoading(tid);
    },
    
    /**
     * performs an Ajax request
     */
    doXHTTPRequest: function(options) {
        var requestOptions = {
            scope: this,
            params: options.params,
            callback: options.callback,
            success: function(response) {
                var args = [];
                if (typeof options.beforeSuccess == 'function') {
                    args = options.beforeSuccess.call(this, response);
                }

                if (typeof options.success == 'function') {
                    options.success.apply(options.scope, args);
                }
            },
            // note incoming options are implicitly json-rpc converted
            failure: function (response, jsonrpcoptions) {
                var responseData = Ext.decode(response.responseText),
                    exception = responseData.data ? responseData.data : responseData;
                    
                exception.request = jsonrpcoptions.jsonData;
                exception.response = response.responseText;

                var args = [exception];
                if (typeof options.beforeFailure == 'function') {
                    args = options.beforeFailure.call(this, response);
                }
                if (typeof options.failure == 'function') {
                    Tine.log.debug('Tine.Tinebase.data.RecordProxy::doXHTTPRequest -> call failure fn');
                    options.failure.apply(options.scope, args);
                }
                // requests with callback need to define their own exception handling
                else if (! options.callback) {
                    Tine.log.debug('Tine.Tinebase.data.RecordProxy::doXHTTPRequest -> handle exception');
                    this.handleRequestException(exception);
                } else {
                    Tine.log.debug('Tine.Tinebase.data.RecordProxy::doXHTTPRequest -> call callback fn');
                }
            }
        };
        
        if (options.timeout) {
            requestOptions.timeout = options.timeout;
        }
        
        this.transId = Ext.Ajax.request(requestOptions);
        
        return this.transId;
    },
    
    /**
     * default exception handler
     * 
     * @param {Object} exception
     */
    handleRequestException: function(exception) {
        Tine.Tinebase.ExceptionHandler.handleRequestException(exception);
    },

    /**
     * posts message about record crud action on central message bus
     * NOTE: we don't use the Ext internal write event as:
     *       a) to deal with cross window issues we only publish bare data
     *       b) to be able mix with other libraries
     *
     * @param {String} action [create|update|delete]
     * @param {Record} record
     */
    postMessage: function(action, record) {
        var _ = window.lodash,
            recordData = _.isFunction(record.beginEdit) ? record.data :
                         _.isString(record) ? JSON.parse(record) :
                         record;

        window.postal.publish({
            channel: "recordchange",
            topic: [this.appName, this.modelName, action].join('.'),
            data: recordData
        });
    }
});


/***/ }),
/* 1063 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @subpackage  data
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.Tinebase.data');

/**
 * Abstract Backdend for an model/datatype of an application
 * 
 * @namespace   Tine.Tinebase.data
 * @class       Tine.Tinebase.data.AbstractBackend
 * @extends     Ext.data.DataProxy
 * @constructor 
 */
Tine.Tinebase.data.AbstractBackend = function(config) {
    Tine.Tinebase.data.AbstractBackend.superclass.constructor.call(this);
    Ext.apply(this, config);
};

Ext.extend(Tine.Tinebase.data.AbstractBackend, Ext.data.DataProxy, {
    /**
     * @cfg {String} appName
     * internal/untranslated app name (required)
     */
    appName: null,
    /**
     * @cfg {String} modelName
     * name of the model/record  (required)
     */
    modelName: null,
    /**
     * @cfg {Ext.data.Record} recordClass
     * record definition class  (required)
     */
    recordClass: null,
    /**
     * @cfg {String} idProperty
     * property of the id of the record
     */
    idProperty: 'id',
    
    /**
     * loads a single 'full featured' record
     * 
     * @param   {Ext.data.Record} record
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success {Ext.data.Record}
     */
    loadRecord: function(record, options) {
        options.success.defer(1000, options.scope, record);
    },
    
    /**
     * searches all (lightweight) records matching filter
     * 
     * @param   {Object} filter
     * @param   {Object} paging
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success {Object} root:[recrods], totalcount: number
     */
    searchRecords: function(filter, paging, options) {
        options.success.defer(1000, options.scope, [{records: [], success: 1, totalRecords: 0}]);
    },
    
    /**
     * saves a single record
     * 
     * @param   {Ext.data.Record} record
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success {Ext.data.Record}
     */
    saveRecord: function(record, options) {
        record.commit(true);
        options.success.defer(1000, options.scope, [record]);
    },
    
    /**
     * deletes multiple records identified by their ids
     * 
     * @param   {Array} records Array of records or ids
     * @param   {Object} options
     * @return  {Number} Ext.Ajax transaction id
     * @success 
     */
    deleteRecords: function(records, options) {
        options.success.defer(1000, options.scope);
    },
    
    /**
     * updates multiple records with the same data
     * 
     * @param   {Array} filter filter data
     * @param   {Object} updates
     * @return  {Number} Ext.Ajax transaction id
     * @success
     */
    updateRecords: function(filter, updates, options) {
        options.success.defer(1000, options.scope, []);
    },
    
    /**
     * returns an array of ids
     * 
     * @private 
     * @param  {Ext.data.Record|Array}
     * @return {Array} of ids
     */
    getRecordIds : function(records) {
        var ids = [];
        
        if (! Ext.isArray(records)) {
            records = [records];
        }
        
        for (var i=0; i<records.length; i++) {
            ids.push(records[i].id ? records[i].id : records.id);
        }
        
        return ids;
    },
    
    /**
     * reqired method for Ext.data.Proxy, used by store
     * @todo read the specs and implement success/fail handling
     * @todo move reqest to searchRecord
     */
    load : function(params, reader, callback, scope, arg){
        if(this.fireEvent("beforeload", this, params) !== false){
            
            // move paging to own object
            var paging = {
                sort:  params.sort,
                dir:   params.dir,
                start: params.start,
                limit: params.limit
            };
            
            this.searchRecords(params.filter, paging, {
                scope: this,
                success: function(records) {
                    callback.call(scope||this, records, arg, true);
                }
            });
            
        } else {
            callback.call(scope||this, null, arg, false);
        }
    },
    
    /**
     * returns reader
     * 
     * @return {Ext.data.DataReader}
     */
    getReader: function() {
        
    },
    
    
    /**
     * is request still loading?
     * 
     * @param  {Number} Ext.Ajax transaction id
     * @return {Bool}
     */
    isLoading: function(tid) {
        
    }
    
});


/***/ }),
/* 1064 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2014 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase.data');

/**
 * tine 2.0 record clipboard
 * 
 * @namespace   Tine.Tinebase.data
 * @class       Tine.Tinebase.data.Clipboard
 * 
 * <p>Record Clipboard</p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * 
 * @singleton
 */
Tine.Tinebase.data.Clipboard = function() {
    var items = {};
    
    return {
        clear: function(appName, modelName) {
            var key = this.getKey(appName, modelName);
            items[key] = [];
        },
        
        getKey: function(appName, modelName) {
            
            var key = appName + modelName;
            
            if (! items.hasOwnProperty(key)) {
                items[key] = [];
            }
            
            return key;
        },
        
        push: function(record) {
            Tine.log.debug('Putting record to clipboard:');
            Tine.log.debug(record);
            
            var key = this.getKey(record.appName, record.modelName);
            
            items[key].push(record);
        },
        
        pull: function(appName, modelName, stay) {
            var key = this.getKey(appName, modelName);
            
            if (items[key].length == 0) {
                return null;
            }
            
            if (! stay) {
                Tine.log.debug('Releasing record from clipboard:');
                var record = items[key].pop();
            } else {
                Tine.log.debug('Fetching record from clipboard:');
                var i = items[key].length - 1;
                var record = items[key][i];
            }

            Tine.log.debug(record);
            
            return record;
        },
        
        /**
         * returns the ids of all records by appName and modelName as array
         * 
         * @return array
         */
        getIds: function(appName, modelName) {
            var key = appName + modelName;
            var ret = [];
            
            if (! items.hasOwnProperty(key)) {
                return ret;
            }
            
            if (items[key].length == 0) {
                return ret;
            }
            
            for (var index = 0; index < items[key].length; index++) {
                ret.push(items[key][index].get('id'));
            }
            
            return ret;
        },
        
        has: function(appName, modelName) {
            var key = appName + modelName;
            if (items.hasOwnProperty(key)) {
                return items[key].length > 0;
            }
            return false;
        }
    }
}();

/***/ }),
/* 1065 */
/***/ (function(module, exports) {

Ext.ns('Tine.Tinebase')

Tine.Tinebase.RecentsManager = function(config) {
    Ext.apply(this, config);
    
    if (! this.stateId) {
        this.stateId = [this.recordClass.getMeta('appName'), this.recordClass.getMeta('modelName'), this.domain, 'recents'].join('-').toLowerCase();
    }
}

Tine.Tinebase.RecentsManager.prototype = {
    /**
     * @cfg {Tine.data.Record} recordClass
     */
    recordClass: null,
    
    /**
     * @cfg {string} this.domain recents this.domain
     */
    domain: 'all',
    
    /**
     * @cfg {Integer} maximum number of recents
     */
    maxRecents: 10,
    
    addRecentRecord: function (record) {
        var id = record.getId(),
            recents = this.getRecentRecords(record.constructor, this.domain),
            dtSelect = new Date().getTime();
        
        // check if record is already in current recents
        Ext.each(recents, function(r) {
            if (r.getId() == id) {
                recents.remove(r);
                return false;
            }
        }, this);
        
        record.dtSelect = dtSelect;
        recents.push(record);
        
        recents.sort(function(a, b) {return a.dtSelect > b.dtSelect});
        recents.slice(0, this.maxRecents);
        
        this.saveRecentRecords(recents, record.constructor, this.domain);
    },
    
    getRecentRecords: function() {
        var stateId = this.getStateId(this.recordClass, this.domain), 
            recentsData = Ext.state.Manager.get(stateId),
            rs = [];
            
        if (Ext.isArray(recentsData)) {
            Ext.each(recentsData, function(recentData) {
                var recent = new this.recordClass(recentData);
                recent.dtSelect = recentData.dtSelect
                rs.push(recent);
            }, this);
        }
        
        return rs;
    },
    
    /**
     * @private
     */
    saveRecentRecords: function(recents) {
        var stateId = this.getStateId(this.recordClass, this.domain),
            recentsData = []
        
        Ext.each(recents, function(r) {
            var data = r.data;
            data['dtSelect'] = r.dtSelect;
            
            recentsData.push(data);
        }, this);
        
        Ext.state.Manager.set(stateId, recentsData);
        
    },
    
    getStateId: function() {
        return this.stateId;
    }
    
};

/***/ }),
/* 1066 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.Tinebase');

/**
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.StateProvider
 * @extends     Ext.state.Provider
 */
Tine.Tinebase.StateProvider = function(config) {
    Tine.Tinebase.StateProvider.superclass.constructor.call(this);
    Ext.apply(this, config);
    this.state = this.readRegistry();
};

Ext.extend(Tine.Tinebase.StateProvider, Ext.state.Provider, {
    
    // private
    clear: function(name){
        // persistent clear
        Tine.Tinebase.clearState(name);
        
        // store back in registry (as needed for popups)
        var stateInfo = Tine.Tinebase.registry.get('stateInfo');
        delete stateInfo[name];
        
        Tine.Tinebase.StateProvider.superclass.clear.call(this, name);
    },
    
    // private
    readRegistry: function() {
        var states = {};
        var stateInfo = Tine.Tinebase.registry.get('stateInfo');
        for (var name in stateInfo) {
            states[name] = this.decodeValue(stateInfo[name]);
        };
        
        return states;
    },
    
    // private
    set: function(name, value) {
        if (typeof value == "undefined" || value === null) {
            this.clear(name);
            return;
        }

        var stateInfo = Tine.Tinebase.registry.get('stateInfo'),
            encodedValue = this.encodeValue(value);

        if (stateInfo[name] != encodedValue) {
            // persistent save
            Tine.Tinebase.setState(name, encodedValue);

            // store back in registry (as needed for popups)
            stateInfo[name] = encodedValue;
            Tine.Tinebase.registry.set('stateInfo', stateInfo);
        }

        Tine.Tinebase.StateProvider.superclass.set.call(this, name, value);
    }
});


/***/ }),
/* 1067 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine', 'Tine.Tinebase');

/**
 * @namespace Tine.Tinebase
 * @class Tine.Tinebase.ExceptionHandler
 * @singleton
 * 
 * IE NOTE: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnscrpt/html/WebErrors2.asp
 *    "A common problem that bites many developers occurs when their onerror handler is not 
 *     called because they have script debugging enabled for Internet Explorer."
 *
 * central class for exception handling
 */
Tine.Tinebase.ExceptionHandler = function() {
    
    /**
     * handle window errors
     * 
     * NOTE: this isn't working cross browser and reports generated by this
     *       are useless most times as we don't have the trace and user tend to 
     *       not describe the problem. Moreover, in most cases, js exceptions are 
     *       not a problem for the UI anyway.
     *       
     *       Therefore we don't show the error reporting dialog anymore for js
     *       exceptions, but let the exception bubble, so browser specific error
     *       analysis is possible
     */
    var onWindowError = function() {
        
        var error = getNormalisedError.apply(this, arguments);
        
        var traceHtml = '<table>';
        for (p in error) {
            if (error.hasOwnProperty(p)) {
                traceHtml += '<tr><td><b>' + p + '</b></td><td>' + error[p] + '</td></tr>'
            }
        }
        traceHtml += '</table>';
        
         // check for special cases we don't want to handle
        if (traceHtml.match(/versioncheck/)) {
            return true;
        }
        // we don't wanna know fancy FF3.5 crome bugs
        if (traceHtml.match(/chrome/)) {
            return true;
        }
        // don't show openlayers error (occurs if window with contact is closed too fast)
        // TODO better fix this error ...
        if (traceHtml.match(/OpenLayers\.js/) && traceHtml.match(/element is null/)) {
            return true;
        }
        
        // let exception bubble to browser
        return false;
    };
    
    /**
     * @todo   make this working in safari
     * @return {string}
     */
    var getNormalisedError = function() {
        var error = {
            name       : 'unknown error',
            message    : 'unknown',
            code       : 'unknown',
            description: 'unknown',
            url        : 'unknown',
            line       : 'unknown',
            trace      : 'unknown'
        };
        
        // NOTE: Arguments is not always a real Array
        var args = [];
        for (var i=0; i<arguments.length; i++) {
            args[i] = arguments[i];
        }
        
        if (args[0] instanceof Error) { // Error object thrown in try...catch
            error.name        = args[0].name;
            error.message     = args[0].message;
            error.code        = args[0].number & 0xFFFF; //Apply binary arithmetic for IE number, firefox returns message string in element array element 0
            error.description = args[0].description;
            error.trace       = args[0].stack;

        } else if ((args.length == 3) && (typeof(args[2]) == "number")) { // Check the signature for a match with an unhandled exception
            error.name    = 'catchable exception';
            error.message = args[0];
            error.url     = args[1];
            error.line    = args[2];
        } else {
            error.message     = "An unknown JS error has occured.";
            error.description = 'The following information may be useful:' + "\n";
            for (var x = 0; x < args.length; x++) {
                try {
                    error.description += (Ext.encode(args[x]) + "\n");
                } catch (e) {
                    error.description += 'Could not encode error args: ' + e + "\n";
                }
            }
        }
        return error;
    };
    
    /**
     * generic request exception handling
     * 
     * NOTE: status codes 9xx are reserved for applications and must not be handled here!
     * 
     * @param {exception|Object} exception
     * @param {Function} callback
     * @param {Object}   callbackScope
     * @param {Function} callbackOnOk
     * @param {Object}   callbackOnOkScope
     */
    var handleRequestException = function(exception, callback, callbackScope, callbackOnOk, callbackOnOkScope) {
         if (! exception.code && exception.responseText) {
            // we need to decode the exception first
            var response = Ext.util.JSON.decode(exception.responseText);
            exception = response.data;
        }
        
        if (exception.appName != 'Tinebase' && Tine.Tinebase.ExceptionHandlerRegistry.has(exception.appName)) {
            // the registered function must return true to don't work on this generically
            if (Tine.Tinebase.ExceptionHandlerRegistry.get(exception.appName)(exception, callback, callbackScope, callbackOnOk, callbackOnOkScope) === true) {
                return;
            }
        } 
        
        var defaults = {
            buttons: Ext.Msg.OK,
            icon: Ext.MessageBox.WARNING,
            fn: callback,
            scope: callbackScope
        };
        
        Tine.log.debug('Tine.Tinebase.ExceptionHandler::handleRequestException -> Exception:');
        Tine.log.debug(exception);

        if (Tine.Tinebase.tineInit.isReloading) {
            Tine.log.debug('Tine.Tinebase.ExceptionHandler::handleRequestException -> Exception handling skipped because Tine 2.0 is reloading');
            return;
        }

        // TODO find a generic way for this, some kind of registry for each app to register sensitive information
        var request = (exception.request && Ext.isString(exception.request)) ? Ext.util.JSON.decode(exception.request) : null;
        if (request && request.method === 'Felamimail.saveMessage') {
            request.params.recordData.body = null;
            exception.request =  Ext.util.JSON.encode(request);
            Tine.log.debug(exception);
        }
    
        if (! callback) callback = Ext.emptyFn;
        if (! callbackScope) callbackScope = this;
        
        switch (exception.code) {
            // not authorised
            case 401:
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('Authorisation Required'),
                    msg: i18n._('Your session timed out. You need to login again.'),
                    fn: function() {
                        Tine.Tinebase.tineInit.isReloading = true;
                        Tine.Tinebase.tineInit.clearRegistry();

                        if (! window.isMainWindow) {
                            Ext.ux.PopupWindow.close();
                            return;
                        }
                        Tine.Tinebase.common.reload({
                            clearCache: true
                        });
                    }
                }));
                break;
            
            // insufficient rights
            case 403:
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('Insufficient Rights'),
                    msg: i18n._('Sorry, you are not permitted to perform this action'),
                    icon: Ext.MessageBox.ERROR
                }));
                break;
            
            // not found
            case 404:
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('Not Found'),
                    msg: i18n._('Sorry, your request could not be completed because the required data could not be found. In most cases this means that someone already deleted the data. Please refresh your current view.'),
                    icon: Ext.MessageBox.ERROR
                }));
                break;
            
            // concurrency conflict
            case 409:
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('Concurrent Updates'),
                    msg: i18n._('Someone else saved this record while you where editing the data. You need to reload and make your changes again.')
                }));
                break;
            
            // Service Unavailable!
            // Use this error code for generic problems like misconfig we don't want to see bugreports for
            case 503:
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('Service Unavailable'),
                    msg: i18n._('The server is currently unable to handle the request due to a temporary overloading, maintenance or misconfiguration of the server. Please try again or contact your administrator.')
                }));
                break;
                
            // invalid record exception
            case 505:
                var message = exception.message ? '<br /><b>' + i18n._('Server Message:') + '</b><br />' + exception.message : '';
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('Invalid Data'),
                    msg: i18n._('Your input data is not valid. Please provide valid data.') + message
                }));
                break;
            // server communication loss
            case 510:
                // NOTE: when communication is lost, we can't create a nice ext window.
                // NOTE: - reloads/redirects cancel all open xhr requests from the browser side
                //       - we need some way to distinguish server/client connection losses
                //       - the extjs xhr abstraction has no such feature
                //       - so we defer the alert. In case of reload/redirect the deferd fn dosn't get executed
                //         if the new contet/html arrives before the defer time is over.
                //       - this might not always be the case due to network, service or session problems
                (function() {alert(i18n._('Connection lost, please check your network!'))}).defer(1000);
                break;
                
            // transaction aborted / timeout
            case 520:
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('Timeout'),
                    msg: i18n._('Sorry, some timeout occured while processing your request. Please reload your browser, try again or contact your administrator.')
                }));
                
                break;
                
            // empty response
            case 540:
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('No Response'),
                    msg: i18n._('Sorry, the Server did not respond any data. Please reload your browser, try again or contact your administrator.')
                }));
                break;
            
            // memory exhausted
            case 550: 
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('Out of Resources'),
                    msg: i18n._('Sorry, the Server stated a "memory exhausted" condition. Please contact your administrator.')
                }));
                break;
                
            // generic error with message generated on the server
                
            case 600:
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._(exception.title),
                    msg: i18n._(exception.message)
                }));
                break;
                
            // user in no role
            case 610:
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('No Role Memberships'),
                    msg: i18n._('Your user account has no role memberships. Please contact your administrator.')
                }));
                break;

            // area is locked
            case 630:
                Tine.Tinebase.areaLocks.lock(exception.area);
                break;

            // Tinebase_Exception_InvalidRelationConstraints
            case 912: 
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._(exception.title),
                    msg: i18n._(exception.message)
                }));
                break;
                
            // lost/insufficent permissions for api call or bad api call
            case -32601:
                Ext.MessageBox.show(Ext.apply(defaults, {
                    title: i18n._('Method Not Found / Insufficent Permissions'),
                    msg: i18n._('You tried to access a function that is not available. Please reload your browser, try again or contact your administrator.')
                }));
                break;
            
            // generic failure -> notify developers
            default:
                var windowHeight = 400;
                if (Ext.getBody().getHeight(true) * 0.7 < windowHeight) {
                    windowHeight = Ext.getBody().getHeight(true) * 0.7;
                }
                
                if (! Tine.Tinebase.exceptionDlg) {
                    Tine.Tinebase.exceptionDlg = new Tine.Tinebase.ExceptionDialog({
                        height: windowHeight,
                        exception: exception,
                        listeners: {
                            close: function() {
                                Tine.Tinebase.exceptionDlg = null;
                            }
                        }
                    });
                    Tine.Tinebase.exceptionDlg.show();
                }
                break;
        }
        
        if (Tine.Tinebase.configManager.get('automaticBugreports') && ! Tine.Tinebase.exceptionDlg) {
            Tine.log.debug('Tine.Tinebase.ExceptionHandler::handleRequestException -> Activate non-interacive exception dialog.');
            Tine.Tinebase.exceptionDlg = new Tine.Tinebase.ExceptionDialog({
                exception: exception,
                nonInteractive: true,
                listeners: {
                    close: function() {
                        Tine.Tinebase.exceptionDlg = null;
                    }
                }
            });
            Tine.Tinebase.exceptionDlg.show();
        }
    };

    var handleException = function(exception) {
        exception = getNormalisedError(exception);

        // for the fast :-)
        Ext.applyIf(exception, {
            code: -1000
            // appName: this.app.appName,
        });
        console.error(exception.trace);
        handleRequestException(exception);
    };

    // init window error handler
    window.onerror = window.onerror && Ext.isFunction(window.onerror) && Ext.isFunction(window.onerror.createSequence) ?
        window.onerror.createSequence(onWindowError) :
        onWindowError;

    return {
        handleException: handleException,
        handleRequestException: handleRequestException
    };
}();


/***/ }),
/* 1068 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.Tinebase');

/**
 * @namespace Tine.Tinebase
 * @class Tine.Tinebase.ExceptionHandlerRegistry
 * @singleton
 * 
 * 
 */
Tine.Tinebase.ExceptionHandlerRegistry = function() {
    return {
        
        items: {},
        
        /**
         * registers a handler
         * 
         * @param {String} appName
         * @param {Function} handler
         */
        register: function(appName, handler) {
            this.items[appName] = handler;
        },
        
        /**
         * returns a handler for an application
         * 
         * @param {String} appName
         * @return {Function}
         */
        get: function(appName) {
            if (this.items.hasOwnProperty(appName)) {
                return this.items[appName];
            }

            return null;
        },
        
        /**
         * checks if a application exception handler has been registered already
         * 
         * @param {String} appName
         * @return {Bool}
         */
        has: function(appName) {
            if (this.items.hasOwnProperty(appName)) {
                return true;
            }
            
            return false;
        }
    }
}();


/***/ }),
/* 1069 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext, Tine, window*/

Ext.ns('Tine', 'Tine.Tinebase');
 
 /**
  * @namespace  Tine.Tinebase
  * @class      Tine.Tinebase.ExceptionDialog
  * @extends    Ext.Window
  */
Tine.Tinebase.ExceptionDialog = Ext.extend(Ext.Window, {
    
    width: 400,
    height: 600,
    xtype: 'panel',
    layout: 'fit',
    plain: true,
    closeAction: 'close',
    autoScroll: true,
    releaseMode: true,
    
    /**
     * non-interactive mode: do not show anything and just submit the report
     * 
     * @type Boolean
     */
    nonInteractive: false,
    
    /**
     * @private
     */
    initComponent: function () {
        this.currentAccount = Tine.Tinebase.registry.get('currentAccount');
        
        // check if we have the version in registry (is not the case in the setup)
        if (! Tine.Tinebase.registry.get('version') || Tine.Tinebase.registry.get('version').buildType != 'RELEASE') {
            this.releaseMode = false;
            this.width = 800;
        }
        
        var trace = '';
        if (Ext.isArray(this.exception.trace)) {
            for (var i = 0,j = this.exception.trace.length; i < j; i++) {
                trace += (this.exception.trace[i].file ? this.exception.trace[i].file : '[internal function]') +
                         (this.exception.trace[i].line ? '(' + this.exception.trace[i].line + ')' : '') + ': ' +
                         (this.exception.trace[i]['class'] ? '<b>' + this.exception.trace[i]['class'] + this.exception.trace[i].type + '</b>' : '') +
                         '<b>' + this.exception.trace[i]['function'] + '</b>' +
                        '(' + ((this.exception.trace[i].args && this.exception.trace[i].args[0]) ? this.exception.trace[i].args[0] : '') + ')<br/>';
            }
            
            this.exception.traceHTML = trace;
        }

        if (Ext.isString(this.exception.trace)) {
            this.exception.traceHTML = Ext.util.Format.nl2br(
                Ext.util.Format.htmlEncode(
                    this.exception.trace
                )
                .replace(/ /g, '&nbsp;')
                .replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;')
            );
        }

        this.title = i18n._('Abnormal End');
        this.items = this.getReportForm();
        
        Tine.Tinebase.ExceptionDialog.superclass.initComponent.call(this);
        
        this.on('show', function () {
            if (this.nonInteractive) {
                Tine.log.debug('Tine.Tinebase.ExceptionDialog::onShow -> Sending bugreport non-interactive ...');
                this.onSendReport();
            } else {
                // fix layout issue
                this.setHeight(this.getHeight() + 10);
            }
        }, this);
        
        this.on('close', function() {
            if (Tine.Tinebase.configManager.get('automaticBugreports') && ! this.nonInteractive) {
                Tine.log.debug('Tine.Tinebase.ExceptionDialog::onCancel -> Activate non-interacive exception dialog.');
                Tine.Tinebase.exceptionDlg = new Tine.Tinebase.ExceptionDialog({
                    exception: this.exception,
                    nonInteractive: true,
                    listeners: {
                        close: function() {
                            Tine.Tinebase.exceptionDlg = null;
                        }
                    }
                });
                Tine.Tinebase.exceptionDlg.show();
            }
        }, this);
    },
    
    /**
     * use button order based on preference
     * 
     * @private
     * @return {Array}
     */
    initButtons: function () {
        this.reportButtons = [{
            text: i18n._('Cancel'),
            iconCls: 'action_cancel',
            scope: this,
            handler: function () {
                this.close();
            }
        }, {
            text: i18n._('Send Report'),
            iconCls: 'action_saveAndClose',
            enabled: Tine.Tinebase.common.hasRight('report_bugs', 'Tinebase'),
            scope: this,
            handler: this.onSendReport
        }];

        return this.reportButtons;
    },
    
    /**
     * @private
     */
    getReportForm: function () {
        this.initButtons();
        
        this.reportForm = new Ext.FormPanel({
            id: 'tb-exceptiondialog-frompanel',
            bodyStyle: 'padding:5px;',
            buttonAlign: 'right',
            labelAlign: 'top',
            autoScroll: true,
            buttons: this.reportButtons,
            items: [{
                xtype: 'panel',
                border: false,
                html: '<div class="tb-exceptiondialog-text">' + 
                        '<p>' + i18n._('An error occurred, the program ended abnormal.') + '</p>' +
                        '<p>' + i18n._('The last action you made was potentially not performed correctly.') + '</p>' +
                        '<p>' + i18n._('Please help improving this software and notify the vendor. Include a brief description of what you where doing when the error occurred.') + '</p>' +
                    '</div>'
            }, {
                id: 'tb-exceptiondialog-description',
                height: 60,
                xtype: 'textarea',
                fieldLabel: i18n._('Description'),
                name: 'description',
                anchor: '95%',
                readOnly: false
            }, {
                xtype: 'fieldset',
                id: 'tb-exceptiondialog-send-contact',
                anchor: '95%',
                title: i18n._('Send Contact Information'),
                autoHeight: true,
                checkboxToggle: true,
                items: [{
                    id: 'tb-exceptiondialog-contact',
                    xtype: 'textfield',
                    hideLabel: true,
                    anchor: '100%',
                    name: 'contact',
                    value: (this.currentAccount) ? this.currentAccount.accountFullName + ' ' + this.currentAccount.accountEmailAddress : 'unknown'
                }]
            }, {
                xtype: 'panel',
                width: '95%',
                layout: 'form',
                collapsible: true,
                collapsed: this.releaseMode,
                title: i18n._('Details:'),
                defaults: {
                    xtype: 'textfield',
                    readOnly: true,
                    anchor: '95%'
                },
                html: '<div class="tb-exceptiondialog-details">' +
                        '<p class="tb-exceptiondialog-msg">' + this.exception.message + '</p>' +
                        '<p class="tb-exceptiondialog-trace">' + this.exception.traceHTML + '</p>' +
                    '</div>'
            }]
        });
        
        return this.reportForm;
    },
    
    /**
     * send the report to tine20.org bugracker
     * 
     * @private
     */
    onSendReport: function () {
        if (! this.nonInteractive) {
            Ext.MessageBox.wait(i18n._('Sending report...'), i18n._('Please wait a moment'));
        }
        var baseUrl = Tine.bugreportUrl;
        var hash = this.generateHash();
        
        this.exception.msg           = this.exception.message;
        this.exception.description   = Ext.getCmp('tb-exceptiondialog-description').getValue();
        this.exception.clientVersion = Tine.clientVersion;
        this.exception.serverVersion = (Tine.Tinebase.registry.get('version')) ? Tine.Tinebase.registry.get('version') : {};

        if (Ext.isArray(this.exception.clientProps)) {
            Ext.each(this.exception.clientProps, function(prop) {
                this.exception[prop] = null;
                delete this.exception[prop];
            }, this);

            delete this.exception['clientProps'];
        }

        // tinebase version
        Ext.each(Tine.Tinebase.registry.get('userApplications'), function (app) {
            if (app.name == 'Tinebase') {
                this.exception.tinebaseVersion = app;
                return false;
            }
        }, this);
        
        // append contact?
        if (! Ext.getCmp('tb-exceptiondialog-send-contact').collapsed) {
            this.exception.contact = Ext.getCmp('tb-exceptiondialog-contact').getValue();
        }


        var ua = navigator.userAgent.toLowerCase(),
            isIE = ua.match(/msie (\d+)/),
            useCOSR = !isIE || isIE[1] > 9;

        if (useCOSR) {
            // NOTE: - we create a new connection to not compromise the json key
            var conn = new Ext.data.Connection();
            conn.request({
                url: baseUrl,
                method: 'POST',
                jsonData: Ext.encode({
                    jsonrpc: '2.0',
                    method: 'API.reportBug',
                    id: ++Ext.Ajax.requestId,
                    params: {
                        hash: hash,
                        exception: this.exception
                    }
                })
            });
        } else {
            // NOTE:  - we have about 80 chars overhead (url, paramnames etc) in each request
            //        - 1024 chars are expected to be pass client/server limits savely => 940
            //        - base64 means about 30% overhead => 600
            var chunks = this.strChunk(Ext.util.JSON.encode(this.exception), 600);

            var img = [];
            for (var i = 0; i < chunks.length; i++) {
                var part = i + 1 + '/' + chunks.length;
                var data = {data: this.base64encode('hash=' + hash + '&part=' + part + '&data=' + chunks[i])};

                var url = baseUrl + '?' + Ext.urlEncode(data);
                img.push(Ext.DomHelper.insertFirst(this.el, {tag: 'img', src: url, hidden: true}, true));
            }
        }

        if (! this.nonInteractive) {
            window.setTimeout(this.showTransmissionCompleted, 4000);
        }
        
        this.close();
    },
    
    /**
     * @private
     */
    showTransmissionCompleted: function () {
        Ext.MessageBox.show({
            title: i18n._('Transmission Completed'),
            msg: i18n._('Your report has been sent. Thanks for your contribution') + '<br /><b>' + i18n._('Please restart your browser now!') + '</b>',
            buttons: Ext.MessageBox.OK,
            icon: Ext.MessageBox.INFO
        });
    },
    
    /**
     * @private
     */
    strChunk: function (str, chunklen) {
        var chunks = [];
        
        var numChunks = Math.ceil(str.length / chunklen);
        for (var i = 0; i < str.length; i +=  chunklen) {
            chunks.push(str.substr(i, chunklen));
        }
        return chunks;
    },
    
    /**
     * @private
     */
    generateHash: function () {
        // if the time isn't unique enough, the addition 
        // of random chars should be
        var t = String(new Date().getTime()).substr(4);
        var s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        for(var i = 0; i < 4; i++){
            t += s.charAt(Math.floor(Math.random()*26));
        }
        return t;
    },
    

    /**
     * base 64 encode given string
     * @private
     */
    base64encode : function (input) {
        var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        var output = "";
        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
        var i = 0;

        while (i < input.length) {

            chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);

            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;

            if (isNaN(chr2)) {
                enc3 = enc4 = 64;
            } else if (isNaN(chr3)) {
                enc4 = 64;
            }

            output = output +
            keyStr.charAt(enc1) + keyStr.charAt(enc2) +
            keyStr.charAt(enc3) + keyStr.charAt(enc4);

        }

        return output;
    }
});


/***/ }),
/* 1070 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase.container');

/**
 * Tinebase container class
 * 
 * @todo move container model here
 * 
 * @namespace   Tine.Tinebase.container
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.Tinebase.container = {
    /**
     * type for personal containers
     * 
     * @constant TYPE_PERSONAL
     * @type String
     */
    TYPE_PERSONAL: 'personal',
    
    /**
     * type for shared container
     * 
     * @constant TYPE_SHARED
     * @type String
     */
    TYPE_SHARED: 'shared',
    
    /**
     * @private
     * 
     * @property isLeafRegExp
     * @type RegExp
     */
    isLeafRegExp: /^\/personal\/[0-9a-z_\-]+\/|^\/shared\/[a-f0-9]+/i,
    
    /**
     * @private
     * 
     * @property isPersonalNodeRegExp
     * @type RegExp
     */
    isPersonalNodeRegExp: /^\/personal\/([0-9a-z_\-]+)$/i,
    
    /**
     * returns the path of the 'my ...' node
     * 
     * @return {String}
     */
    getMyNodePath: function() {
        return '/personal/' + Tine.Tinebase.registry.get('currentAccount').accountId;
    },
    
    /**
     * returns the file node path of the 'my ...' node
     * 
     * @return {String}
     */
    getMyFileNodePath: function() {
        return '/personal/' + Tine.Tinebase.registry.get('currentAccount').accountLoginName;
    },
    
    /**
     * returns true if given path represents a (single) container
     * 
     * NOTE: if path could only be undefined when server send container without path.
     *       This happens only in server json classes which only could return containers
     * 
     * @static
     * @param {String} path
     * @return {Boolean}
     */
    pathIsContainer: function(path) {
        return !Ext.isString(path) || !!path.match(Tine.Tinebase.container.isLeafRegExp);
    },
    
    /**
     * returns true if given path represents a personal container of current user
     * 
     * @param {String} path
     * @return {Boolean}
     */
    pathIsMyPersonalContainer: function(path) {
        var regExp = new RegExp('^' + window.lodash.escapeRegExp(Tine.Tinebase.container.getMyNodePath()) + '\/([0-9a-z_\-]+)$');
        var matches = String(path).match(regExp);
        
        return !!matches;
    },
    
    /**
     * returns owner id if given path represents an personal _node_
     * 
     * @static
     * @param {String} path
     * @return {String/Boolean}
     */
    pathIsPersonalNode: function(path) {
        if (! Ext.isString(path)) {
            return false;
        }
        var matches = path.match(Tine.Tinebase.container.isPersonalNodeRegExp);
        
        return matches ? matches[1] : false;
    },
    
    /**
     * gets translated container name by path
     * 
     * @static
     * @param {String} path
     * @param {String} containerName
     * @param {String} containersName
     * @return {String}
     */
    path2name: function(path, containerName, containersName) {
        switch (path) {
            case '/':           return String.format(i18n._('All {0}'), containersName);
            case '/shared':     return String.format(i18n._('Shared {0}'), containersName);
            case '/personal':   return String.format(i18n._('Other Users {0}'), containersName);
        }
        
        if (path === Tine.Tinebase.container.getMyNodePath()
                || path === Tine.Tinebase.container.getMyFileNodePath()) {
            return String.format(i18n._('My {0}'), containersName);
        }
        
        return path;
    },
    
    /**
     * returns container type (personal/shared) of given path
     * 
     * @static
     * @param {String} path
     * @return {String}
     */
    path2type: function(path) {
        var pathParts = Ext.isArray(path) ? path : String(path).split('/');
        
        return pathParts[1];
    },

    /**
     * get grants model of given container
     *
     * @static
     * @param container
     * @return {Record}
     */
    getGrantsModel: function(container) {
        var _ = window.lodash,
            containerData = _.isFunction(container.beginEdit) ? container.data : container,
            grantsModelName = _.get(containerData, 'xprops.Tinebase.Container.GrantsModel', 'Tinebase_Model_Grants'),
            grantsModel = Tine.Tinebase.data.RecordMgr.get(grantsModelName);

        return grantsModel || Tine.Tinebase.Model.Grant;
    }
};


/***/ }),
/* 1071 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

/**
 * Encapsuple string escaping and subsituting methods
 *
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.EncodingHelper
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @singleton
 * @return {string}
 */
Tine.Tinebase.EncodingHelper = {
    /**
     * Encode string
     *
     * @param value
     */
    encode: function(value) {
        if (!value) {
            return '';
        }

        value = Ext.util.Format.htmlEncode(value);
        return Ext.util.Format.nl2br(value);
    }
};




/***/ }),
/* 1072 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Tine 2.0
 * 
 * @package     Tine
 * @subpackage  Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/*global Ext, Tine, Locale*/

Ext.ns('Tine', 'Tine.Tinebase');

/**
 * static common helpers
 */
Tine.Tinebase.common = {
    /**
     *
     * @param {String} part
     */
    getUrl: function(part) {
        var pathname = window.location.pathname.replace('index.php', ''),
            hostname = window.location.host,
            protocol = window.location.protocol,
            url;

        switch (part) {
            case 'path':
                url = pathname;
                break;
            case 'full':
            default:
                url = protocol + '//' + hostname + pathname;
                break;
        }

        return url;

    },

    /**
     * reload client
     *
     * @param {Object} options
     *      {Boolean} keepRegistry
     *      {Boolean} clearCache
     */
    reload: function(options) {
        options = options || {};

        if (! options.keepRegistry) {
            Tine.Tinebase.tineInit.isReloading = true;
            Tine.Tinebase.tineInit.clearRegistry();
        }

        // give browser some time to clear registry
        window.setTimeout(function () {
            window.location.reload(!!options.clearCache);
        }, 500);
    },

    showDebugConsole: function () {
        if (! Ext.debug) {
            var head = document.getElementsByTagName("head")[0],
                scriptTag = document.createElement("script");
            
            scriptTag.setAttribute("src", 'library/ExtJS/src/debug.js');
            scriptTag.setAttribute("type", "text/javascript");
            head.appendChild(scriptTag);
            
            var scriptEl = Ext.get(scriptTag);
            scriptEl.on('load', function () {
                Ext.log('debug console initialised');
            });
            scriptEl.on('fail', function () {
                Ext.msg.alert('could not activate debug console');
            });
        } else {
            Ext.log('debug console reactivated');
        }
    },
    
    /**
     * Returns localised date and time string
     * 
     * @param {mixed} $_iso8601
     * @see Ext.util.Format.date
     * @return {String} localised date and time
     */
    dateTimeRenderer: function ($_iso8601) {
        var dateObj = $_iso8601 instanceof Date ? $_iso8601 : Date.parseDate($_iso8601, Date.patterns.ISO8601Long);
        
        return Ext.util.Format.date(dateObj, Locale.getTranslationData('Date', 'medium') + ' ' + Locale.getTranslationData('Time', 'medium'));
    },

    /**
     * Returns localised date string
     * 
     * @param {mixed} date
     * @see Ext.util.Format.date
     * @return {String} localised date
     */
    dateRenderer: function (date) {
        var dateObj = date instanceof Date ? date : Date.parseDate(date, Date.patterns.ISO8601Long);
        
        return Ext.util.Format.date(dateObj, Locale.getTranslationData('Date', 'medium'));
    },
    
    /**
     * Returns localised number string with two digits if no format is given
     * 
     * @param {Number} v The number to format.
     * @param {String} format The way you would like to format this text.
     * @see Ext.util.Format.number
     * 
     * @return {String} The formatted number.
     */
    floatRenderer: function(v, format) {
        if (! format) {
            // default format by locale and with two decimals
            format = '0' + Tine.Tinebase.registry.get('thousandSeparator') + '000' + Tine.Tinebase.registry.get('decimalSeparator') + '00';
        }
        return Ext.util.Format.number(v, format);
    },
    
    /**
     * Renders a float or integer as percent
     * 
     * @param {Number} v The number to format.
     * @see Ext.util.Format.number
     * 
     * @return {String} The formatted number.
     */
    percentRenderer: function(v, type) {
        if (! Ext.isNumber(v)) {
            v = 0;
        }
        
        v = Ext.util.Format.number(v, (type == 'float' ? '0.00' : '0'));
        
        if (type == 'float') {
            var decimalSeparator = Tine.Tinebase.registry.get('decimalSeparator');
            if (decimalSeparator == ',') {
                v = v.replace(/\./, ',');
            }
        }
        
        return v + ' %';
    },
    
    /**
     * Returns localised time string
     * 
     * @param {mixed} date
     * @see Ext.util.Format.date
     * @return {String} localised time
     */
    timeRenderer: function (date) {
        var dateObj = date instanceof Date ? date : Date.parseDate(date, Date.patterns.ISO8601Long);
        
        return Ext.util.Format.date(dateObj, Locale.getTranslationData('Time', 'medium'));
    },
    
    /**
     * renders bytes for filesize 
     * @param {Integer} value
     * @param {Object} metadata
     * @param {Tine.Tinebase.data.Record} record
     * @param {Integer} decimals
     * @param {Boolean} useDecimalValues
     * @return {String}
     */
    byteRenderer: function (value, metadata, record, decimals, useDecimalValues) {
        if (isNaN(parseInt(value, 10))) {
            return '';
        }
        return Tine.Tinebase.common.byteFormatter(value, null, decimals, useDecimalValues);
    },

    /**
     * format byte values
     * @param {String} value
     * @param {Boolean} forceUnit
     * @param {Integer} decimals
     * @param {Boolean} useDecimalValues
     */
    byteFormatter: function(value, forceUnit, decimals, useDecimalValues) {
        value = parseInt(value, 10);
        decimals = Ext.isNumber(decimals) ? decimals : 2;
        var decimalSeparator = Tine.Tinebase.registry.get('decimalSeparator'),
            suffix = ['Bytes', 'Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
            divisor = useDecimalValues ? 1000 : 1024;
            
        if (forceUnit) {
            var i = suffix.indexOf(forceUnit);
            i = (i == -1) ? 0 : i;
        } else {
            for (var i=0,j; i<suffix.length; i++) {
                if (value < Math.pow(divisor, i)) break;
            }
        }
        value = ((i<=1) ? value : Ext.util.Format.round(value/(Math.pow(divisor, Math.max(1, i-1))), decimals)) + ' ' + suffix[i];

        return String(value).replace('.', decimalSeparator);
    },
    
    /**
     * Returns rendered tags for grids
     * 
     * @param {mixed} tags
     * @return {String} tags as colored squares with qtips
     * 
     * TODO add style for tag divs
     */
    tagsRenderer: function (tags) {
        var result = '';
        if (tags) {
            for (var i = 0; i < tags.length; i += 1) {
                if (tags[i] && tags[i].name) {
                    var qtipText = Tine.Tinebase.common.doubleEncode(tags[i].name);
                    if (tags[i].description) {
                        qtipText += ' | ' + Tine.Tinebase.common.doubleEncode(tags[i].description);
                    }
                    if (tags[i].occurrence) {
                        qtipText += ' (' + i18n._('Usage:&#160;') + tags[i].occurrence + ')';
                    }
                    result += '<div ext:qtip="' + qtipText + '" class="tb-grid-tags" style="background-color:' + (tags[i].color ? tags[i].color : '#fff') + ';">&#160;</div>';
                }
            }
        }
        
        return result;
    },
    
    /**
     * render single tag
     * 
     * @param {Tine.Tinebase.Model.Tag} tag
     */
    tagRenderer: function(tag) {
        if (! Tine.Tinebase.common.tagRenderer.tpl) {
            Tine.Tinebase.common.tagRenderer.tpl = new Ext.XTemplate(
                '<div class="tb-grid-tags" style="background-color:{values.color};">&#160;</div>',
                '<div class="x-widget-tag-tagitem-text" ext:qtip="', 
                    '{[this.encode(values.name)]}', 
                    '<tpl if="type == \'personal\' ">&nbsp;<i>(' + i18n._('personal') + ')</i></tpl>',
                    '</i>&nbsp;[{occurrence}]',
                    '<tpl if="description != null && description.length &gt; 1"><hr>{[this.encode(values.description)]}</tpl>" >',
                    
                    '&nbsp;{[this.encode(values.name)]}',
                    '<tpl if="type == \'personal\' ">&nbsp;<i>(' + i18n._('personal') + ')</i></tpl>',
                '</div>',
            {
                encode: function(value) {
                     if (value) {
                        return Tine.Tinebase.common.doubleEncode(value);
                    } else {
                        return '';
                    }
                }
            }).compile();
        }
        
        var result =  i18n._('No Information');
        
        if (tag && Ext.isFunction(tag.beginEdit)) {
            // support records
            tag = tag.data;
        } else if (arguments[2] && Ext.isFunction(arguments[2].beginEdit)) {
            // support grid renderers
            tag = arguments[2].data;
        }
        
        // non objects are treated as ids and -> No Information
        if (Ext.isObject(tag)) {
            result = Tine.Tinebase.common.tagRenderer.tpl.apply(tag);
        }
        
        return result;
    },
    
    /**
     * Returns rendered containers
     * 
     * @TODO show qtip with grants
     * 
     * @param {mixed} container
     * @return {String} 
     */
    containerRenderer: function(container, metaData) {
        // lazy init tempalte
        if (! Tine.Tinebase.common.containerRenderer.tpl) {
            Tine.Tinebase.common.containerRenderer.tpl = new Ext.XTemplate(
                '<div class="x-tree-node-leaf x-unselectable file">',
                    '<img class="x-tree-node-icon" unselectable="on" src="', Ext.BLANK_IMAGE_URL, '">',
                    '<span style="color: {color};">&nbsp;&#9673;&nbsp</span>',
                    '<span> ', '{name}','</span>',
                '</div>'
            ).compile();
        }
        
        var result =  i18n._('No Information');
        
        // support container records
        if (container && Ext.isFunction(container.beginEdit)) {
            container = container.data;
        }
        
        // non objects are treated as ids and -> No Information
        if (Ext.isObject(container)) {
            var name = Ext.isFunction(container.beginEdit) ? container.get('name') : container.name,
                color = Ext.isFunction(container.beginEdit) ? container.get('color') : container.color;
            
            if (name) {
                result = Tine.Tinebase.common.containerRenderer.tpl.apply({
                    name: Ext.util.Format.htmlEncode(name).replace(/ /g,"&nbsp;"),
                    color: color ? color : '#808080'
                });
            } else if (Ext.isObject(metaData)) {
                metaData.css = 'x-form-empty-field';
            }
        }
        
        return result;
    },

    /**
     * Returns rendered relations
     *
     * @param {mixed} container
     * @return {String}
     *
     * TODO use/invent renderer registry to show more information on relations
     */
    relationsRenderer: function(relations, metaData) {
        // _('No Access') - we need this string in other apps if relation is not shown e.g. record_removed_reason
        var result = '';
        if (relations) {
            for (var i = 0; i < relations.length; i += 1) {
                if (relations[i]) {
                    var qtipText = Tine.Tinebase.common.doubleEncode(relations[i].type);
                    result += '<div ext:qtip="' + qtipText + '" class="tb-grid-tags" style="background-color:white"' + ';">&#160;</div>';
                }
            }
        }
        return result;
    },

    /**
     * Returns prettyfied minutes
     * 
     * @param  {Number} minutes
     * @param  {String} format -> {0} will be replaced by Hours, {1} with minutes
     * @param  {String} leadingZeros add leading zeros for given item {i|H}
     * @return {String}
     */
    minutesRenderer: function (minutes, format, leadingZeros) {
        var s,
            i = minutes % 60,
            H = Math.floor(minutes / 60),
            Hs;
        
        if (leadingZeros && (Ext.isString(leadingZeros) || leadingZeros === true)) {
            if (leadingZeros === true || (leadingZeros.match(/i/) && String(i).length === 1)) {
                i = '0' + String(i);
            }
            if (leadingZeros === true || (leadingZeros.match(/H/) && String(H).length === 1)) {
                H = '0' + String(H);
            }
        }
        
        if (! format || ! Ext.isString(format)) {
            s = String.format(i18n.ngettext('{0} minute', '{0} minutes', i), i);
            Hs = String.format(i18n.ngettext('{0} hour', '{0} hours', H), H);
            //var ds = String.format(i18n.ngettext('{0} workday', '{0} workdays', d), d);
            
            if (i === 0) {
                s = Hs;
            } else {
                s = H ? Hs + ', ' + s : s;
            }
            //s = d ? ds + ', ' + s : s;
            
            return s;
        }
        
        return String.format(format, H, i);
    },

    /**
     * Returns prettyfied seconds
     * 
     * @param  {Number} seconds
     * @return {String}
     */
    secondsRenderer: function (seconds) {
        
        var s = seconds % 60,
            m = Math.floor(seconds / 60),
            result = '';
        
        var secondResult = String.format(i18n.ngettext('{0} second', '{0} seconds', s), s);
        
        if (m) {
            result = Tine.Tinebase.common.minutesRenderer(m);
        }
        
        if (s) {
            if (result !== '') {
                result += ', ';
            }
            result += secondResult;
        }
        
        return result;
    },
    
    /**
     * Returns the formated username
     * 
     * @param {object} account object 
     * @return {string} formated user display name
     */
    usernameRenderer: function (accountObject) {
        var result = (accountObject) ? accountObject.accountDisplayName : '';
        
        return Ext.util.Format.htmlEncode(result);
    },
    
    /**
     * Returns a username or groupname with according icon in front
     */
    accountRenderer: function (accountObject, metadata, record, rowIndex, colIndex, store) {
        if (! accountObject) {
            return '';
        }
        var _ = window.lodash,
            type, iconCls, displayName, email;
        
        if (accountObject.accountDisplayName) {
            type = _.get(record, 'data.account_type', 'user');
            displayName = accountObject.accountDisplayName;

            // need to create a "dummy" app to call featureEnabled()
            // TODO: should be improved
            var tinebaseApp = new Tine.Tinebase.Application({
                appName: 'Tinebase'
            });
            if (tinebaseApp.featureEnabled('featureShowAccountEmail') && accountObject.accountEmailAddress) {
                // add email address if available
                email = accountObject.accountEmailAddress;
                displayName += ' (' + email + ')';
            }
        } else if (accountObject.name && ! _.get(record, 'data.account_type')) {
            type = 'group';
            displayName = accountObject.name;
        } else if (record && record.data.name) {
            type = record.data.type;
            displayName = record.data.name;

        // so odd, - new records, picked via pickerGridPanel
        } else if (record && record.data.account_name) {
            type = record.data.account_type;
            displayName = _.get(record, 'data.account_name.name', record.data.account_name);
        }
        
        if (displayName == 'Anyone') {
            displayName = i18n._(displayName);
            type = 'group';
        }
        
        iconCls = 'renderer renderer_account' + Ext.util.Format.capitalize(type) + 'Icon';
        return '<div class="' + iconCls  + '">&#160;</div>' + Ext.util.Format.htmlEncode(displayName || '');
    },
    
    /**
     * Returns account type icon
     * 
     * @return String
     */
    accountTypeRenderer: function (type) {
        var iconCls = (type) === 'user' ? 'renderer_accountUserIcon' : 'renderer_accountGroupIcon';
        
        return '<div style="background-position: 0px" class="' + iconCls  + '">&#160;</div>';
    },
    
    /**
     * Returns dropdown hint icon for editor grid columns with comboboxes
     * 
     * @return String
     */
    cellEditorHintRenderer: function (value) {
        return '<div style="position:relative">' + value + '<div class="tine-grid-cell-hint">&#160;</div></div>';
    },

    /**
     * return yes or no in the selected language for a boolean value
     * 
     * @param {string} value
     * @return {string}
     */
    booleanRenderer: function (value) {
        var translationString = String.format("{0}",(value == 1) ? Locale.getTranslationData('Question', 'yes') : Locale.getTranslationData('Question', 'no'));
        
        return translationString.substr(0, translationString.indexOf(':'));
    },

    /**
     * i18n renderer
     *
     * NOTE: needs to be bound to i18n object!
     *
     * renderer: Tine.Tinebase.common.i18nRenderer.createDelegate(this.app.i18n)
     * @param original
     */
    i18nRenderer: function(original) {
        return this._hidden(original);
    },

    /**
     * color renderer
     *
     * @param color
     */
    colorRenderer: function(color) {
        // normalize
        color = String(color).replace('#', '');

        return '<div style="background-color: #' + Ext.util.Format.htmlEncode(color) + '">&#160;</div>';
    },

    /**
     * foreign record renderer
     *
     * @param record
     * @param metadata
     *
     * TODO use title fn? allow to configure displayed field(s)?
     */
    foreignRecordRenderer: function(record, metaData) {
        return record && record.name ? record.name : '';
    },

    /**
     * sorts account/user objects
     * 
     * @param {Object|String} user_id
     * @return {String}
     */
    accountSortType: function(user_id) {
        if (user_id && user_id.accountDisplayName) {
            return user_id.accountDisplayName;
        } else if (user_id && user_id.n_fileas) {
            return user_id.n_fileas;
        } else if (user_id && user_id.name) {
            return user_id.name;
        } else {
            return user_id;
        }
    },

    /**
     * sorts records
     * 
     * @param {Object} record
     * @return {String}
     */
    recordSortType: function(record) {
        if (record && Ext.isFunction(record.getTitle)) {
            return record.getTitle();
        } else if (record && record.id) {
            return record.id;
        } else {
            return record;
        }
    },
    
    /**
     * check whether given value can be interpreted as true
     * 
     * @param {String|Integer|Boolean} value
     * @return {Boolean}
     */
    isTrue: function (value) {
        return value === 1 || value === '1' || value === true || value === 'true';
    },
    
    /**
     * check whether object is empty (has no property)
     * 
     * @param {Object} obj
     * @return {Boolean}
     */
    isEmptyObject: function (obj) {
        for (var name in obj) {
            if (obj.hasOwnProperty(name)) {
                return false;
            }
        }
        return true;
    },
    
    /**
     * clone function
     * 
     * @param {Object/Array} o Object or array to clone
     * @return {Object/Array} Deep clone of an object or an array
     */
    clone: function (o) {
        if (! o || 'object' !== typeof o) {
            return o;
        }
        
        if ('function' === typeof o.clone) {
            return o.clone();
        }
        
        var c = '[object Array]' === Object.prototype.toString.call(o) ? [] : {},
            p, v;
            
        for (p in o) {
            if (o.hasOwnProperty(p)) {
                v = o[p];
                if (v && 'object' === typeof v) {
                    c[p] = Tine.Tinebase.common.clone(v);
                }
                else {
                    c[p] = v;
                }
            }
        }
        return c;
    },
    
    /**
     * assert that given object is comparable
     * 
     * @param {mixed} o
     * @return {mixed} o
     */
    assertComparable: function(o) {
        // NOTE: Ext estimates Object/Array by a toString operation
        if (Ext.isObject(o) || Ext.isArray(o)) {
            Tine.Tinebase.common.applyComparableToString(o);
        }
        
        return o;
    },
    
    /**
     * apply Ext.encode as toString functino to given object
     * 
     * @param {mixed} o
     */
    applyComparableToString: function(o) {
        o.toString = function() {return Ext.encode(o)};
    },
    
    /**
     * check if user has right to view/manage this application/resource
     * 
     * @param   {String}      right (view, admin, manage)
     * @param   {String}      application
     * @param   {String}      resource (for example roles, accounts, ...)
     * @returns {Boolean} 
     */
    hasRight: function (right, application, resource) {

        if (! (Tine && Tine[application] && Tine[application].registry && Tine[application].registry.get('rights'))) {
            if (Tine.Tinebase.tineInit.isReloading) {
                Tine.log.info('Tine 2.0 is reloading ...');
            } else if (! Tine.Tinebase.appMgr) {
                console.error('Tine.Tinebase.appMgr not yet available');
            } else if (Tine.Tinebase.appMgr.get(application)) {
                console.error('Tine.' + application + '.rights is not available, initialisation Error! Reloading app.');
                // reload registry/mainscreen - registry problem?
                Tine.Tinebase.common.reload({});
            }
            return false;
        }
        var userRights = Tine[application].registry.get('rights'),
            allAppRights = Tine[application].registry.get('allrights');

        if (allAppRights && right === 'view' && allAppRights.indexOf('view') < 0) {
            // switch to run as app has no view right
            right = 'run';
        }

        var result = false;
        
        for (var i = 0; i < userRights.length; i += 1) {
            if (userRights[i] === 'admin') {
                result = true;
                break;
            }
            
            if (right === 'view' && (userRights[i] === 'view_' + resource || userRights[i] === 'manage_' + resource)) {
                result = true;
                break;
            }
            
            if (right === 'manage' && userRights[i] === 'manage_' + resource) {
                result = true;
                break;
            }
            
            if (right === userRights[i]) {
                result = true;
                break;
            }
        }
    
        return result;
    },
    
    /**
     * returns random integer number
     * @param {Integer} min
     * @param {Integer} max
     * @return {Integer}
     */
    getRandomNumber: function (min, max) {
        if (min > max) {
            return -1;
        }
        if (min === max) {
            return min;
        }
        return min + parseInt(Math.random() * (max - min + 1), 10);
    },
    /**
     * HTML-encodes a string twice
     * @param {String} value
     * @return {String}
     */
    doubleEncode: function(value) {
        return Ext.util.Format.htmlEncode(Ext.util.Format.htmlEncode(value));
    },

    /**
     * simple html to text conversion
     *
     * @param html
     * @returns {String}
     */
    html2text: function(html) {
        text = html.replace(/\n/g, ' ')
            .replace(/(<br[^>]*>)/g, '\n--br')
            .replace(/(<li[^>]*>)/g, '\n * ')
            .replace(/<(blockquote|div|dl|dt|dd|form|h1|h2|h3|h4|h5|h6|hr|p|pre|table|tr|td|li|section|header|footer)[^>]*>(?!\s*\<\/\1\>)/g, '\n--block')
            .replace(/<style(.+?)\/style>/g, '')
            .replace(/<(.+?)>/g, '')
            .replace(/&nbsp;/g, ' ')
            .replace(/--block(\n--block)+/g, '--block')
            .replace(/--block\n--br/g, '')
            .replace(/(--block|--br)/g, '');

        return Ext.util.Format.htmlDecode(text);
    },

    /**
     * linkify text
     *
     * @param {String} text
     * @param {Ext.Element|Function} cb
     */
    linkifyText: function(text, cb, scope) {
        __webpack_require__.e/* require.ensure */(1).then((function() {
            var linkify = __webpack_require__(233);
            var linkifyHtml = __webpack_require__(234);
            var linkifyed = linkifyHtml(text);

            if (Ext.isFunction(cb)) {
                cb.call(scope || window, linkifyed);
            } else {
                cb.update(linkifyed);
            }
        }).bind(null, __webpack_require__)).catch(__webpack_require__.oe);
    },

    /**
     * resolves an appName to applicationInstance or vice versa
     * returns applicationinstance if getInstance is true
     * @param {String/Tine.Tinebase.Application}    app 
     * @param {Boolean}                             getInstance
     */
    resolveApp: function(app, getInstance) {
        if(getInstance) {
            return Ext.isObject(app) ? app : Tinebase.appMgr.get(app);
        }
        return Ext.isObject(app) ? app.name : app;
    },
    
    /**
     * resolves model to modelName or returns recordClass if an application was given
     * @param {String/Tine.Tinebase.data.Record}    model
     * @param {String/Tine.Tinebase.Application}    app
     */
    resolveModel: function(model, app) {
        var modelName = Ext.isObject(model) ? model.getMeta('modelName') : model;
        if(app) {
            var appName = this.resolveApp(app);
            return Tine[appName].Model[modelName];
        }
        return modelName;
    },

    /**
     * Confirm application restart
     *
     * @param Boolean closewindow
     */
    confirmApplicationRestart: function (closewindow) {
        Ext.Msg.confirm(i18n._('Confirm'), i18n._('Restart application to apply new configuration?'), function (btn) {
            if (btn == 'yes') {
                // reload mainscreen to make sure registry gets updated
                Tine.Tinebase.common.reload();
                if (closewindow) {
                    window.close();
                }
            }
        }, this);
    },

    /**
     * Math.trunc polyfill
     *
     * https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc
     *
     * @param x
     * @return {*}
     */
    trunc: function (x) {
        if (isNaN(x)) {
            return NaN;
        }
        if (x > 0) {
            return Math.floor(x);
        }
        return Math.ceil(x);
    }
};

/*
var s = '<blockquote class="felamimail-body-blockquote"><div>Hello,</div><div><br></div><div>...</div></blockquote>';
if (Tine.Tinebase.common.html2text(s) != "\nHello,\n\n...") console.error('ignore empty div: "' + Tine.Tinebase.common.html2text(s) + '"');

var s = '<font face="tahoma, arial, helvetica, sans-serif" style="font-size: 11px; font-family: tahoma, arial, helvetica, sans-serif;"><span style="font-size: 11px;">​<font color="#808080">Dipl.-Phys. Cornelius Weiss</font></span></font><div style="font-size: 11px; font-family: tahoma, arial, helvetica, sans-serif;"><font face="tahoma, arial, helvetica, sans-serif" color="#808080"><span style="font-size: 11px;">Team Leader Software Engineering</span></font></div>';
if (Tine.Tinebase.common.html2text(s) != "​Dipl.-Phys. Cornelius Weiss\nTeam Leader Software Engineering") console.error('cope with styled div tag: '  + Tine.Tinebase.common.html2text(s));

var s = '<div><div><span><font><br></font></span></div></div>';
if (Tine.Tinebase.common.html2text(s) != "\n") console.error('cope with nested blocks: "' + Tine.Tinebase.common.html2text(s) + '"');
*/


/***/ }),
/* 1073 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2012-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

/**
 * central config
 */
Tine.Tinebase.configManager = function(){
    return {
        get: function(name, appName) {
            var registry = appName && Tine[appName] ? Tine[appName].registry : Tine.Tinebase.registry,
                config = registry ? registry.get('config') : false,
                pathParts = String(name).split('.'),
                path = pathParts.join('.value.') + (pathParts.length == 1 ? '.value' : '');

            return lodash.get(config, path);
        },
        set: function(name, value, appName) {
            var registry = appName && Tine[appName] ? Tine[appName].registry : Tine.Tinebase.registry,
                config = (registry ? registry.get('config') : false) || {},
                pathParts = String(name).split('.'),
                path = pathParts.join('.value.') + (pathParts.length == 1 ? '.value' : '');

            lodash.set(config, path, value);
            registry.set('config', config);
        }
    }
}();

/***/ }),
/* 1074 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

__webpack_require__(189);
__webpack_require__(190);

/**
 * central renderer manager
 * - get renderer for a given field
 * - register renderer for a given field
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.RendererManager
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @singleton
 */
Tine.widgets.grid.RendererManager = function() {
    var renderers = {};
    
    return {
        /**
         * const for category gridPanel
         */
        CATEGORY_GRIDPANEL: 'gridPanel',
        
        /**
         * const for category displayPanel
         */
        CATEGORY_DISPLAYPANEL: 'displayPanel',
        
        /**
         * default renderer - quote content
         */
        defaultRenderer: function(value) {
            return value ? Ext.util.Format.htmlEncode(value) : '';
        },
        
        /**
         * get renderer of well known field names
         * 
         * @param {String} fieldName
         * @return Function/null
         */
        getByFieldname: function(fieldName) {
            var renderer = null;
            
            if (fieldName == 'tags') {
                renderer = Tine.Tinebase.common.tagsRenderer;
            } else if (fieldName == 'notes') {
                // @TODO
                renderer = function(value) {return value ? i18n._('has notes') : '';};
            } else if (fieldName == 'relations') {
                renderer = Tine.Tinebase.common.relationsRenderer;
            } else if (fieldName == 'customfields') {
                // @TODO
                // we should not come here!
            } else if (fieldName == 'container_id') {
                renderer = Tine.Tinebase.common.containerRenderer;
            } else if (fieldName == 'attachments') {
                renderer = Tine.widgets.grid.attachmentRenderer;
            }
            
            return renderer;
        },
        
        /**
         * get renderer by data type
         * 
         * @param {String} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @return {Function}
         */
        getByDataType: function(appName, modelName, fieldName) {
            var renderer = null,
                recordClass = Tine.Tinebase.data.RecordMgr.get(appName, modelName),
                fieldDefinition = recordClass ? recordClass.getField(fieldName) : null,
                fieldType = fieldDefinition ? fieldDefinition.type : 'auto';
                
            switch(fieldType) {
                case 'date':
                    renderer = Tine.Tinebase.common.dateRenderer;
                    break;
                case 'boolean':
                    renderer = Tine.Tinebase.common.booleanRenderer;
                    break;
                case 'keyField':
                    var keyFieldName = fieldDefinition.keyFieldConfigName;
                    renderer = Tine.Tinebase.widgets.keyfield.Renderer.get(appName, keyFieldName);
                    break;
                case 'image':
                    renderer = Tine.widgets.grid.imageRenderer;
                    break;
                default:
                    renderer = this.defaultRenderer;
                    break;
            }
            
            return renderer;
        },
        
        /**
         * returns renderer for given field
         * 
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {String} category {gridPanel|displayPanel} optional.
         * @return {Function}
         */
        get: function(appName, modelName, fieldName, category) {
            var appName = this.getAppName(appName),
                modelName = this.getModelName(modelName),
                categoryKey = this.getKey([appName, modelName, fieldName, category]),
                genericKey = this.getKey([appName, modelName, fieldName]);
                
            // check for registered renderer
            var renderer = renderers[categoryKey] ? renderers[categoryKey] : renderers[genericKey];
            
            // check for common names
            if (! renderer) {
                renderer = this.getByFieldname(fieldName);
            }
            
            // check for known datatypes
            if (! renderer) {
                renderer = this.getByDataType(appName, modelName, fieldName);
            }
            
            return renderer ? renderer : this.defaultRenderer;
        },
        
        /**
         * register renderer for given field
         * 
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {Function} renderer
         * @param {String} category {gridPanel|displayPanel} optional.
         * @param {Object} scope to call renderer in, optional.
         */
        register: function(appName, modelName, fieldName, renderer, category, scope) {
            var appName = this.getAppName(appName),
                modelName = this.getModelName(modelName),
                categoryKey = this.getKey([appName, modelName, fieldName, category]),
                genericKey = this.getKey([appName, modelName, fieldName]);
                
            renderers[category ? categoryKey : genericKey] = scope ? renderer.createDelegate(scope) : renderer;
        },
        
        /**
         * check if a renderer is explicitly registered
         * 
         * @param {String/Tine.Tinebase.Application} appName
         * @param {Record/String} modelName
         * @param {String} fieldName
         * @param {String} category {gridPanel|displayPanel} optional.
         * @return {Boolean}
         */
        has: function(appName, modelName, fieldName, category) {
            var appName = this.getAppName(appName),
                modelName = this.getModelName(modelName),
                categoryKey = this.getKey([appName, modelName, fieldName, category]),
                genericKey = this.getKey([appName, modelName, fieldName]);
                
            // check for registered renderer
            return (renderers[categoryKey] ? renderers[categoryKey] : renderers[genericKey]) ? true : false;
        },
        
        /**
         * returns the modelName by modelName or record
         * 
         * @param {Record/String} modelName
         * @return {String}
         */
        getModelName: function(modelName) {
            return Ext.isFunction(modelName) ? modelName.getMeta('modelName') : modelName;
        },
        
        /**
         * returns the modelName by appName or application instance
         * 
         * @param {String/Tine.Tinebase.Application} appName
         * @return {String}
         */
        getAppName: function(appName) {
            return Ext.isString(appName) ? appName : appName.appName;
        },
        
        /**
         * returns a key by joining the array values
         * 
         * @param {Array} params
         * @return {String}
         */
        getKey: function(params) {
             return params.join('_');
        }
    };
}();

/***/ }),
/* 1075 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase.Model');

/**
 * @type {Array}
 * 
 * modlog Fields
 */

Tine.Tinebase.Model.modlogFields = [
    { name: 'creation_time',      type: 'date', dateFormat: Date.patterns.ISO8601Long, omitDuplicateResolving: true },
    { name: 'created_by',                                                              omitDuplicateResolving: true },
    { name: 'last_modified_time', type: 'date', dateFormat: Date.patterns.ISO8601Long, omitDuplicateResolving: true },
    { name: 'last_modified_by',                                                        omitDuplicateResolving: true },
    { name: 'is_deleted',         type: 'boolean',                                     omitDuplicateResolving: true },
    { name: 'deleted_time',       type: 'date', dateFormat: Date.patterns.ISO8601Long, omitDuplicateResolving: true },
    { name: 'deleted_by',                                                              omitDuplicateResolving: true },
    { name: 'seq',                                                                     omitDuplicateResolving: true }
];

/**
 * @type {Array}
 * generic Record fields
 */
Tine.Tinebase.Model.genericFields = Tine.Tinebase.Model.modlogFields.concat([
    { name: 'container_id', header: 'Container',                                       omitDuplicateResolving: false}
]);
    
/**
 * Model of a language
 */
Tine.Tinebase.Model.Language = Ext.data.Record.create([
    { name: 'locale' },
    { name: 'language' },
    { name: 'region' }
]);

/**
 * Model of a timezone
 */
Tine.Tinebase.Model.Timezone = Ext.data.Record.create([
    { name: 'timezone' },
    { name: 'timezoneTranslation' }
]);

/**
 * Model of a role
 */
Tine.Tinebase.Model.Role = Tine.Tinebase.data.Record.create([
    {name: 'id'},
    {name: 'name'},
    {name: 'description'}
], {
    appName: 'Tinebase',
    modelName: 'Role',
    idProperty: 'id',
    titleProperty: 'name',
    recordName: 'Role',
    recordsName: 'Roles'
});

/**
 * Model of a generalised account (user or group)
 */
Tine.Tinebase.Model.Account = Ext.data.Record.create([
    {name: 'id'},
    {name: 'type'},
    {name: 'name'},
    {name: 'data'} // todo: throw away data
]);

/**
 * Model of a container
 */
Tine.Tinebase.Model.Container = Tine.Tinebase.data.Record.create(Tine.Tinebase.Model.modlogFields.concat([
    {name: 'id'},
    {name: 'name'},
    {name: 'type'},
    {name: 'backend'},
    {name: 'order'},
    {name: 'color'},
    {name: 'application_id'},
    {name: 'owner_id'},
    {name: 'model'},
    {name: 'uuid'},
    {name: 'content_seq'},
    {name: 'account_grants'},
    {name: 'path'},
    {name: 'xprops'},
    // virtual
    {name: 'ownerContact'},
    {name: 'is_container_node', type: 'boolean'},
    {name: 'dtselect', type: 'number'},
]), {
    appName: 'Tinebase',
    modelName: 'Container',
    idProperty: 'id',
    titleProperty: 'name'
});

/**
 * Model of a grant
 */
Tine.Tinebase.Model.Grant = Tine.Tinebase.data.Record.create([
    {name: 'id'},
    {name: 'record_id'},
    {name: 'account_id'},
    {name: 'account_type'},
    {name: 'account_name', sortType: Tine.Tinebase.common.accountSortType},
    {name: 'freebusyGrant',type: 'boolean'},
    {name: 'readGrant',    type: 'boolean'},
    {name: 'addGrant',     type: 'boolean'},
    {name: 'editGrant',    type: 'boolean'},
    {name: 'deleteGrant',  type: 'boolean'},
    {name: 'privateGrant', type: 'boolean'},
    {name: 'exportGrant',  type: 'boolean'},
    {name: 'syncGrant',    type: 'boolean'},
    {name: 'downloadGrant',type: 'boolean'},
    {name: 'publishGrant', type: 'boolean'},
    {name: 'adminGrant',   type: 'boolean'}
], {
    appName: 'Tinebase',
    modelName: 'Grant',
    idProperty: 'id',
    titleProperty: 'account_name',
    // ngettext('Grant', 'Grants', n); gettext('Grant');
    recordName: 'Grant',
    recordsName: 'Grants'
});

/**
 * Model of a tag
 * 
 * @constructor {Tine.Tinebase.data.Record}
 */
Tine.Tinebase.Model.Tag = Tine.Tinebase.data.Record.create(Tine.Tinebase.Model.modlogFields.concat([
    {name: 'id'         },
    {name: 'app'        },
    {name: 'owner'      },
    {name: 'name'       },
    {name: 'type'       },
    {name: 'description'},
    {name: 'color'      },
    {name: 'occurrence' },
    {name: 'rights'     },
    {name: 'contexts'   },
    {name: 'selection_occurrence', type: 'number'}
]), {
    appName: 'Tinebase',
    modelName: 'Tag',
    idProperty: 'id',
    titleProperty: 'name',
    // ngettext('Tag', 'Tags', n); gettext('Tag');
    recordName: 'Tag',
    recordsName: 'Tags'
});

/**
 * replace template fields with data
 * @static
 */
Tine.Tinebase.Model.Tag.replaceTemplateField = function(tagData) {
    if (Ext.isArray(tagData)) {
        return Ext.each(tagData, Tine.Tinebase.Model.Tag.replaceTemplateField);
    }
    
    if (Ext.isFunction(tagData.beginEdit)) {
        tagData = tagData.data;
    }
    
    var replace = {
        'CURRENTDATE': Tine.Tinebase.common.dateRenderer(new Date()),
        'CURRENTTIME': Tine.Tinebase.common.timeRenderer(new Date()),
        'USERFULLNAME': Tine.Tinebase.registry.get('currentAccount').accountDisplayName
    };
    
    Ext.each(['name', 'description'], function(field) {
        for(var token in replace) {
            if (replace.hasOwnProperty(token) && Ext.isString(tagData[field])) {
                tagData[field] = tagData[field].replace(new RegExp('###' + token + '###', 'g'), replace[token]);
            }
        }
    }, this);
    
};

/**
 * Model of a PickerRecord
 * 
 * @constructor {Ext.data.Record}
 * 
 * @deprecated
 */
Tine.Tinebase.PickerRecord = Ext.data.Record.create([
    {name: 'id'}, 
    {name: 'name'}, 
    {name: 'data'}
]);

/**
 * Model of a note
 * 
 * @constructor {Ext.data.Record}
 */
Tine.Tinebase.Model.Note = Ext.data.Record.create([
    {name: 'id'             },
    {name: 'note_type_id'   },
    {name: 'note'           },
    {name: 'creation_time', type: 'date', dateFormat: Date.patterns.ISO8601Long },
    {name: 'created_by'     }
]);

/**
 * Model of a note type
 * 
 * @constructor {Ext.data.Record}
 */
Tine.Tinebase.Model.NoteType = Ext.data.Record.create([
    {name: 'id'             },
    {name: 'name'           },
    {name: 'icon'           },
    {name: 'icon_class'     },
    {name: 'description'    },
    {name: 'is_user_type'   }
]);

/**
 * Model of a customfield definition
 */
Tine.Tinebase.Model.Customfield = Ext.data.Record.create([
    { name: 'id'             },
    { name: 'application_id' },
    { name: 'model'          },
    { name: 'name'           },
    { name: 'definition'     },
    { name: 'account_grants' }
]);

/**
 * Model of a customfield value
 */
Tine.Tinebase.Model.CustomfieldValue = Ext.data.Record.create([
    { name: 'record_id'      },
    { name: 'customfield_id' },
    { name: 'value'          }
]);

/**
 * Model of a preference
 * 
 * @constructor {Ext.data.Record}
 */
Tine.Tinebase.Model.Preference = Ext.data.Record.create([
    {name: 'id'             },
    {name: 'name'           },
    {name: 'value'          },
    {name: 'type'           },
    {name: 'label'          },
    {name: 'description'    },
    {name: 'personal_only',         type: 'boolean' },
    {name: 'locked',                type: 'boolean' },
    {name: 'uiconfig'       },
    {name: 'options'        }
]);

/**
 * Model of an alarm
 * 
 * @constructor {Ext.data.Record}
 */
Tine.Tinebase.Model.Alarm = Tine.Tinebase.data.Record.create([
    {name: 'id'             },
    {name: 'record_id'      },
    {name: 'model'          },
    {name: 'alarm_time',      type: 'date', dateFormat: Date.patterns.ISO8601Long },
    {name: 'minutes_before',  sortType: Ext.data.SortTypes.asInt},
    {name: 'sent_time',       type: 'date', dateFormat: Date.patterns.ISO8601Long },
    {name: 'sent_status'    },
    {name: 'sent_message'   },
    {name: 'options'        }
], {
    appName: 'Tinebase',
    modelName: 'Alarm',
    idProperty: 'id',
    titleProperty: 'minutes_before',
    // ngettext('Alarm', 'Alarms', n); gettext('Alarm');
    recordName: 'Alarm',
    recordsName: 'Alarms',
    getOption: function(name) {
        var encodedOptions = this.get('options'),
            options = encodedOptions ? Ext.decode(encodedOptions) : {};
        
        return options[name];
    },
    setOption: function(name, value) {
        var encodedOptions = this.get('options'),
            options = encodedOptions ? Ext.decode(encodedOptions) : {};
        
        options[name] = value;
        this.set('options', Ext.encode(options));
    }
});

/**
 * @namespace Tine.Tinebase.Model
 * @class     Tine.Tinebase.Model.ImportJob
 * @extends   Tine.Tinebase.data.Record
 * 
 * Model of an import job
 */
Tine.Tinebase.Model.ImportJob = Tine.Tinebase.data.Record.create([
    {name: 'files'                  },
    {name: 'import_definition_id'   },
    {name: 'model'                  },
    {name: 'import_function'        },
    {name: 'container_id'           },
    {name: 'dry_run'                },
    {name: 'options'                }
], {
    appName: 'Tinebase',
    modelName: 'Import',
    idProperty: 'id',
    titleProperty: 'model',
    // ngettext('Import', 'Imports', n); gettext('Import');
    recordName: 'Import',
    recordsName: 'Imports'
});

/**
 * @namespace Tine.Tinebase.Model
 * @class     Tine.Tinebase.Model.ExportJob
 * @extends   Tine.Tinebase.data.Record
 * 
 * Model of an export job
 */
Tine.Tinebase.Model.ExportJob = Tine.Tinebase.data.Record.create([
    {name: 'scope'                  },
    {name: 'filter'                 },
    {name: 'export_definition_id'   },
    {name: 'format'                 },
    {name: 'exportFunction'         },
    {name: 'recordsName'            },
    {name: 'model'                  },
    {name: 'count', type: 'int'     },
    {name: 'options'                }
], {
    appName: 'Tinebase',
    modelName: 'Export',
    idProperty: 'id',
    titleProperty: 'model',
    // ngettext('Export', 'Export', n); gettext('Export');
    recordName: 'Export',
    recordsName: 'Exports'
});

/**
 * Model of an export/import definition
 * 
 * @constructor {Ext.data.Record}
 */
Tine.Tinebase.Model.ImportExportDefinition = Ext.data.Record.create(Tine.Tinebase.Model.genericFields.concat([
    {name: 'id'             },
    {name: 'name'           },
    {name: 'label', sortType: Ext.data.SortTypes.asUCText },
    {name: 'filename'       },
    {name: 'plugin'         },
    {name: 'description'    },
    {name: 'model'          },
    {name: 'plugin_options' }
]));

/**
 * @namespace Tine.Tinebase.Model
 * @class     Tine.Tinebase.Model.Credentials
 * @extends   Tine.Tinebase.data.Record
 * 
 * Model of user credentials
 */
Tine.Tinebase.Model.Credentials = Tine.Tinebase.data.Record.create([
    {name: 'id'},
    {name: 'username'},
    {name: 'password'}
], {
    appName: 'Tinebase',
    modelName: 'Credentials',
    idProperty: 'id',
    titleProperty: 'username',
    // ngettext('Credentials', 'Credentials', n); gettext('Credentials');
    recordName: 'Credentials',
    recordsName: 'Credentials'
});

/**
 * @namespace Tine.Tinebase.Model
 * @class     Tine.Tinebase.Model.Relation
 * @extends   Tine.Tinebase.data.Record
 * 
 * Model of a Relation
 */
Tine.Tinebase.Model.Relation = Tine.Tinebase.data.Record.create([
    {name: 'id'},
    {name: 'own_model'},
    {name: 'own_id'},
    {name: 'related_model'},
    {name: 'related_id'},
    {name: 'type'},
    {name: 'remark'},
    {name: 'related_record', sortType: Tine.Tinebase.common.recordSortType},
    {name: 'creation_time'}
], {
    appName: 'Tinebase',
    modelName: 'Relation',
    idProperty: 'id',
    titleProperty: 'related_model',
    // ngettext('Relation', 'Relations', n); gettext('Relation');
    recordName: 'Relation',
    recordsName: 'Relations'
});

/**
 * find duplicate relation in store
 *
 * @param store
 * @param record
 * @return int index in store
 */
Tine.Tinebase.Model.Relation.findDuplicate = function(store, record) {
    return store.findBy(function(r) {
        return r.get('related_model') == record.get('related_model') &&
            r.get('related_id') == record.get('related_id') &&
            r.get('type') == record.get('type');
    }, this);
};

/**
 * @namespace Tine.Tinebase.Model
 * @class     Tine.Tinebase.Model.Department
 * @extends   Tine.Tinebase.data.Record
 * 
 * Model of a Department
 */
Tine.Tinebase.Model.Department = Tine.Tinebase.data.Record.create([
    {name: 'id'},
    {name: 'name'},
    {name: 'description'}
], {
    appName: 'Tinebase',
    modelName: 'Department',
    idProperty: 'id',
    titleProperty: 'name',
    // ngettext('Department', 'Departments', n); gettext('Department');
    recordName: 'Department',
    recordsName: 'Departments'
});

Tine.Tinebase.Model.Department.getFilterModel = function() {
    return [
        {label: i18n._('Name'),          field: 'name',       operators: ['contains']}
    ];
};

/**
 * @namespace Tine.Tinebase.Model
 * @class     Tine.Tinebase.Model.Config
 * @extends   Tine.Tinebase.data.Record
 * 
 * Model of a application config settings
 */
Tine.Tinebase.Model.Config = Tine.Tinebase.data.Record.create([
    {name: 'id'},
    {name: 'application_id'},
    {name: 'name'},
    {name: 'value'},
    {name: 'label'},
    {name: 'description'},
    {name: 'type'},
    {name: 'clientRegistryInclude'},
    {name: 'setByAdminModule'},
    {name: 'setBySetupModule'},
    {name: 'default'},
    {name: 'source'}
    //{name: 'settings'}
], {
    appName: 'Tinebase',
    modelName: 'Config',
    idProperty: 'id',
    titleProperty: 'name',
    // ngettext('Config', 'Configs', n); gettext('Configs');
    recordName: 'Config',
    recordsName: 'Configs'
});

Tine.Tinebase.Model.Tree_NodeArray = Tine.Tinebase.Model.modlogFields.concat([
    { name: 'id' },
    { name: 'name', label: 'Name' }, // _('Name')
    { name: 'path', label: 'Path' }, // _('Path')
    { name: 'size', label: 'Size' }, // _('Size')
    { name: 'revision', label: 'Revision' }, // _('Revision')
    { name: 'available_revisions', label: 'Available Revision' }, // _('Available Revision')
    { name: 'type', label: 'Type' }, // _('Type')
    { name: 'contenttype', label: 'Content Type' }, // _('Content Type')
    { name: 'description', label: 'Description' }, // _('Description')
    { name: 'account_grants' },
    { name: 'grants', label: 'Grants' }, // _('Grants')
    { name: 'acl_node', label: 'Grants Folder' }, // _('Grants Folder')
    { name: 'object_id'},
    { name: 'revision_size', label: 'Revision Size' }, // _('Revision Size')
    { name: 'preview_count', label: 'Preview Count' }, // _('Preview Count')
    { name: 'isIndexed', label: 'Indexed' }, // _('Indexed')
    { name: 'pin_protected_node', label: 'Pin Protected' }, // _('Pin Protected')
    { name: 'quota', label: 'Quota'}, // _('Quota')
    { name: 'effectiveAndLocalQuota', label: 'Effective Quota' }, // _('Effective Quota')

    { name: 'relations' },
    { name: 'customfields' },
    { name: 'notes' },
    { name: 'tags' },

    { name: 'revisionProps' },
    { name: 'notificationProps' }
]);
/**
 * @namespace   Tine.Tinebase.Model
 * @class       Tine.Tinebase.Model.Tree_Node
 * @extends     Tine.Tinebase.data.Record
 */
Tine.Tinebase.Model.Tree_Node = Tine.Tinebase.data.Record.create(Tine.Tinebase.Model.Tree_NodeArray, {
    appName: 'Tinebase',
    modelName: 'Tree_Node',
    idProperty: 'id',
    titleProperty: 'name',
    // ngettext('File', 'Files', n); gettext('File');
    recordName: 'File',
    recordsName: 'Files'
});

Tine.widgets.grid.RendererManager.register('Tinebase', 'Tree_Node', 'size', Tine.Tinebase.common.byteRenderer);
Tine.widgets.grid.RendererManager.register('Tinebase', 'Tree_Node', 'revision_size', Tine.Tinebase.common.byteRenderer);

Tine.Tinebase.Model.KeyFieldRecord = Tine.Tinebase.data.Record.create([
    { name: 'id' },
    { name: 'value' },
    { name: 'i18nValue' },
    { name: 'icon' },
    { name: 'color' },
    { name: 'system' }
], {
    appName: 'Tinebase',
    modelName: 'KeyFieldRecord',
    idProperty: 'id',
    titleProperty: 'value'
});

Tine.Tinebase.Model.Path = Tine.Tinebase.data.Record.create([
    { name: 'id' },
    { name: 'path' },
    { name: 'shadow_path' },
    { name: 'creation_time' }
], {
    appName: 'Tinebase',
    modelName: 'Path',
    idProperty: 'id',
    titleProperty: 'path',
    // defaultFilter: 'path'
});

Tine.Tinebase.Model.Path.getFilterModel = function() {
    return [
        {label: i18n._('Query'),         field: 'query',       operators: ['contains']},
        {label: i18n._('Path'),          field: 'path',       operators: ['contains']}
    ];
};

/***/ }),
/* 1076 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

/**
 * <p>Abstract base class for all Tine applications</p>
 * 
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.Application
 * @extends     Ext.util.Observable
 * @consturctor
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.Tinebase.Application = function(config) {
    config = config || {};
    Ext.apply(this, config);
    
    Tine.Tinebase.Application.superclass.constructor.call(this);

    this.hasMainScreen = Ext.isBoolean(this.hasMainScreen) ? this.hasMainScreen :
        (this.getMainScreen != Tine.Tinebase.Application.prototype.getMainScreen ||
        typeof Tine[this.appName].MainScreen === 'function');

    this.i18n = new Locale.Gettext();
    this.i18n.textdomain(this.appName);

    this.init();
    if (Tine.CoreData && Tine.CoreData.Manager) {
        Tine.log.debug('Tine.Tinebase.Application - register core data for ' + this.appName)
        this.registerCoreData.defer(500, this);
    }
    this.initAutoHooks();
    this.initRoutes();
};

Ext.extend(Tine.Tinebase.Application, Ext.util.Observable , {
    
    /**
     * @cfg {String} appName
     * untranslated application name (required)
     */
    appName: null,
    
    /**
     * @cfg {Boolean} hasMainScreen
     */
    hasMainScreen: null,

    /**
     * @cfg {Object} routes
     */
    routes: null,

    /**
     * @cfg {String} defaultRoute
     */
    defaultRoute : 'mainscreen',

    /**
     * @property {Locale.gettext} i18n
     */
    i18n: null,

    /**
     * returns title of this application
     * 
     * @return {String}
     */
    getTitle: function() {
        return this.i18n._(this.appName);
    },
    
    /**
     * returns iconCls of this application
     * 
     * @param {String} target
     * @return {String}
     */
    getIconCls: function(target) {
        var iconCls = this.appName + 'IconCls';
        if (! Ext.util.CSS.getRule('.' + iconCls)) {
            iconCls = 'ApplicationIconCls';
        }

        return iconCls;
    },
    
    /**
     * returns the mainscreen of this application
     * 
     * @return {Tine.widgets.app.MainScreen}
     */
    getMainScreen: function() {
        if (this.hasMainScreen && !this.mainScreen) {
            this.mainScreen = new Tine[this.appName].MainScreen({
                app: this
            });
        }
        
        return this.mainScreen;
    },

    /**
     * returns registry of this app
     * 
     * @return {Ext.util.MixedCollection}
     */
    getRegistry: function() {
        return Tine[this.appName].registry;
    },
    
    /**
     * returns true if a specific feature is enabled for this application
     * 
     * @param {String} featureName
     * @return {Boolean}
     */
    featureEnabled: function(featureName) {
        var featureConfig = Tine[this.appName].registry.get("config").features,
            result = featureConfig && featureConfig.value[featureName];

        if (result == undefined) {
            // check defaults if key is missing
            result = featureConfig
                && featureConfig.definition
                && featureConfig.definition['default']
                && featureConfig.definition['default'][featureName];
        }

        return result;
    },
    
    /**
     * template function for subclasses to initialize application
     */
    init: Ext.emptyFn,

    /**
     * template function for subclasses to register app core data
     */
    registerCoreData: Ext.emptyFn,

    /**
     * init some auto hooks
     */
    initAutoHooks: function() {
        if (this.addButtonText) {
            Ext.ux.ItemRegistry.registerItem('Tine.widgets.grid.GridPanel.addButton', {
                text: this.i18n._hidden(this.addButtonText), 
                iconCls: this.getIconCls(),
                scope: this,
                handler: function() {
                    var ms = this.getMainScreen(),
                        cp = ms.getCenterPanel();
                        
                    cp.onEditInNewWindow.call(cp, {});
                }
            });
        }
    },

    initRoutes: function() {
        var route, action;

        if (this.routes) {
            for (route in this.routes) {
                if (this.routes.hasOwnProperty(route)) {
                    action = this.routes[route];
                    if (Ext.isString(action) && Ext.isFunction(this[action])) {
                        action = this[action].createDelegate(this);
                    }
                    if (route[0] != '/') {
                        route = '/' + this.appName + '/' + route;
                    }
                    Tine.Tinebase.router.on(route, action);
                }
            }
        }

        // default mainscreen route
        if (!this.routes || !this.routes['']) {
            var me = this;
            Tine.Tinebase.router.on('/' + this.appName, function() {
                Tine.Tinebase.MainScreenPanel.show(me);
            });
        }
    },

    /**
     * @param {String} action
     * @param {Array} params
     */
    dispatchRoute: function(action, params) {
        var route, methodName, paramNames;

        if (this.routes) {
            for (route in this.routes) {
                if (this.routes.hasOwnProperty(route)) {
                    paramNames = route.split('/');
                    if (action == paramNames.shift()) {
                        methodName = this.routes[route].action;
                        break;
                    }
                }
            }
        }

        if (methodName) {
            // @TODO validate parameters according to docs

            return this[methodName].apply(this, params);
        }

        Ext.MessageBox.show(Ext.apply(defaults, {
            title: i18n._('Not Supported'),
            msg: i18n._('Your request is not supported by this version.'),
            fn: function() {
                Tine.Tinebase.common.reload();
            }
        }));
    },

    /**
     * template function for subclasses is called before app activation. Return false to cancel activation
     */
    onBeforeActivate: Ext.emptyFn,
    
    /**
     * template function for subclasses is called after app activation.
     */
    onActivate: Ext.emptyFn,
    
    /**
     * template function for subclasses is called before app deactivation. Return false to cancel deactivation
     */
    onBeforeDeActivate: Ext.emptyFn,
    
    /**
     * template function for subclasses is called after app deactivation.
     */
    onDeActivate: Ext.emptyFn
    
});

Tine.Tinebase.featureEnabled = function(featureName) {
    // need to create a "dummy" app to call featureEnabled()
    var tinebaseApp = new Tine.Tinebase.Application({
        appName: 'Tinebase'
    });
    return tinebaseApp.featureEnabled(featureName);
};

/***/ }),
/* 1077 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Tine.Tinebase.widgets.keyfield');

/**
 * key field store
 * 
 * @namespace   Tine.Tinebase.widgets.keyfield
 * @param       {Object} config
 * @constructor
 */
Tine.Tinebase.widgets.keyfield.Store = function(config) {
    // init app
    config.app = Ext.isString(config.app) ? Tine.Tinebase.appMgr.get(config.app) : config.app;
    
    // get keyField config
    if (config.app.getRegistry()) {
        if (! config.keyFieldConfig) {
            config.keyFieldConfig = config.app.getRegistry().get('config')[config.keyFieldName];
        }

        // init data / translate values
        var data = config.keyFieldConfig && config.keyFieldConfig.value && config.keyFieldConfig.value.records && config.keyFieldConfig.value.records.length ? config.keyFieldConfig.value.records : [];
        Ext.each(data, function (d) {
            d.i18nValue = d.value ? config.app.i18n._hidden(d.value) : "";
            d.id = String(d.id);
        });
        config.data = data;
    }
    
    if (! config.keyFieldConfig) {
        throw ('No keyfield config found for ' + config.keyFieldName + ' in ' + config.app.appName + ' registry.');
    }
    
    var modelName = config.keyFieldConfig.definition
                    && config.keyFieldConfig.definition.options
                    && config.keyFieldConfig.definition.options.recordModel ?
                        config.keyFieldConfig.definition.options.recordModel :
                        "Tinebase_Model_KeyFieldRecord",
        recordClass = Tine.Tinebase.data.RecordMgr.get(modelName) || Tine.Tinebase.Model.KeyFieldRecord,
        fields = [].concat(recordClass.getFieldDefinitions());

    // add 'virtual' field
    fields.push({name: 'i18nValue'});
    this.recordClass = Ext.data.Record.create(fields);

    config.fields = this.recordClass;

    Tine.Tinebase.widgets.keyfield.Store.superclass.constructor.call(this, config);
};

/**
 * @namespace   Tine.Tinebase.widgets.keyfield
 * @class       Tine.Tinebase.widgets.keyfield.Store
 * @extends     Ext.data.JsonStore
 */
Ext.extend(Tine.Tinebase.widgets.keyfield.Store, Ext.data.JsonStore, {
    /**
     * @cfg {String/Application} app
     */
    app: null,
    
    /**
     * @cfg {String} keyFieldName 
     * name of key field
     */
    keyFieldName: null,
    
    /**
     * @property keyFieldConfig
     * @type Object
     */
    keyFieldConfig: null
});

/**
 * manages key field stores
 * 
 * @namespace   Tine.Tinebase.widgets.keyfield
 * @class       Tine.Tinebase.widgets.keyfield.StoreMgr
 * @singleton
 */
Tine.Tinebase.widgets.keyfield.StoreMgr = function(){
    var stores = {};
    
    return {
        /**
         * returns key field record store
         * 
         * @param {String/Application} app
         * @param {String} keyFieldName 
         * @return Ext.data.Store
         */
        get: function(app, keyFieldName) {
            var appName = Ext.isString(app) ? app : app.appName,
                key = appName + '_' + keyFieldName;
                
            if (! stores[key]) {
                stores[key] = new Tine.Tinebase.widgets.keyfield.Store({
                    app: app,
                    keyFieldName: keyFieldName
                });
            }
            
            return stores[key];
        },

        has: function(app, keyFieldName) {
            var store;
            try {
                store = this.get(app, keyFieldName);
            } catch (e){}

            return !! store;
        }
    };
}();


/***/ }),
/* 1078 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Tine.Tinebase.widgets.keyfield');

/**
 * key field combo
 * 
 * @namespace   Tine.Tinebase.widgets.keyfield
 * @class       Tine.Tinebase.widgets.keyfield.ComboBox
 * @extends     Ext.form.ComboBox
 */
Tine.Tinebase.widgets.keyfield.ComboBox = Ext.extend(Ext.form.ComboBox, {
    /**
     * @cfg {String/Application} app
     */
    app: null,
    
    /**
     * @cfg {String} keyFieldName 
     * name of key field
     */
    keyFieldName: null,

    /**
     * @cfg {Boolean} showIcon
     * show icon in list and value
     */
    showIcon: true,
    
    /**
     * sort by a field
     * 
     * @cfg {String} sortBy
     */
    sortBy: null,
    
    /* begin config */
    blurOnSelect  : true,
    expandOnFocus : true,
    mode          : 'local',
    displayField  : 'i18nValue',
    valueField    : 'id',
    /* end config */
    
    initComponent: function() {
        this.app = Ext.isString(this.app) ? Tine.Tinebase.appMgr.get(this.app) : this.app;

        // get keyField config
        this.keyFieldConfig = this.app.getRegistry().get('config')[this.keyFieldName];

        var definition = this.keyFieldConfig.definition,
            options = definition && definition.options || {};

        this.parentField = options.parentField;


        if (! this.value && ! this.parentField && (this.keyFieldConfig && Ext.isObject(this.keyFieldConfig.value) && this.keyFieldConfig.value.hasOwnProperty('default'))) {
            this.value = this.keyFieldConfig.value['default'];
        }

        this.store = Tine.Tinebase.widgets.keyfield.StoreMgr.get(this.app, this.keyFieldName);

        if (this.sortBy) {
            this.store.sort(this.sortBy);
        }
        
        this.showIcon = this.showIcon && this.store.find('icon', /^.+$/) > -1;
        
        this.initTpl();

        this.on('afterrender', this.onAfterRender, this, {buffer: 50});
        Tine.Tinebase.widgets.keyfield.ComboBox.superclass.initComponent.call(this);
    },
    
    initTpl: function() {
        if (this.showIcon) {
            this.tpl = '<tpl for="."><div class="x-combo-list-item"><img src="{icon}" class="tine-keyfield-icon"/>{' + this.displayField + '}</div></tpl>';
        }
    },

    onAfterRender: function() {
        if (this.parentField) {
            var formPanel = this.findParentBy(function (c) {
                    return Ext.isFunction(c.getForm)
                }),
                form = formPanel ? formPanel.getForm() : null,
                parentField = form ? form.findField(this.parentField) : null;

            if (parentField) {
                parentField.setValue = parentField.setValue.createSequence(this.applyParentValue, this);

                this.applyParentValue(parentField.getValue());
            }
        }
    },

    applyParentValue: function(parentValue){
        this.store.filter('id', parentValue);

        var parentRe = new RegExp('^' + window.lodash.escapeRegExp(parentValue)),
            defaultValues = this.keyFieldConfig && Ext.isObject(this.keyFieldConfig.value) && this.keyFieldConfig.value.hasOwnProperty('default') ? this.keyFieldConfig.value['default'] : false,
            defaultValue = '';

        // apply default if current value is not appropriate
        if (! String(this.getValue()).match(parentRe)) {
            Ext.each(defaultValues, function (candidate) {
                if (String(candidate).match(parentRe)) {
                    defaultValue = candidate;
                    return false;
                }
            }, this);

            this.setValue(defaultValue);
        }
    },

    doQuery: function() {
        this.onLoad();
    }
});

Ext.reg('widget-keyfieldcombo', Tine.Tinebase.widgets.keyfield.ComboBox);

/***/ }),
/* 1079 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Tine.Tinebase.widgets.keyfield');

/**
 * manages key field renderers
 * 
 * @namespace   Tine.Tinebase.widgets.keyfield
 * @class       Tine.Tinebase.widgets.keyfield.Renderer
 * @singleton
 */
Tine.Tinebase.widgets.keyfield.Renderer = function(){
    var renderers = {};
    
    return {
        /**
         * returns key field record renderer
         * 
         * @param {String/Application}  app
         * @param {String}              keyFieldName 
         * @param {String}              what pipe seperated field with text|icon
         * @return Ext.data.Store
         */
        get: function(app, keyFieldName, what) {
            try {
                var appName = Ext.isString(app) ? app : app.appName,
                    app = Tine.Tinebase.appMgr.get(appName),
                    store = Tine.Tinebase.widgets.keyfield.StoreMgr.get(app, keyFieldName),
                    what = what ? what : 'text|icon',
                    whatParts = what.split('|'),
                    key = appName + keyFieldName + what;
            } catch (e) {
                Tine.log.error(e);
            }
                
            if (! renderers[key]) {
                renderers[key] = function(id) {
                    if (! id) return "";
                    var record = store.getById(id),
                        i18nValue = record ? record.get('i18nValue') : app.i18n._hidden(id),
                        icon = record ? record.get('icon') : null,
                        string = '';
                        
                    if (whatParts.indexOf('icon') > -1 && icon) {
                        string = string + '<img src="' + icon + '" class="tine-keyfield-icon" ext:qtip="' + Ext.util.Format.htmlEncode(i18nValue) + '" />';
                    }
                        
                    if (whatParts.indexOf('text') > -1 && i18nValue) {
                        string = string + Ext.util.Format.htmlEncode(i18nValue);
                    }
                    
                    return string;
                }
            }
            
            return renderers[key];
        },
        
        /**
         * render a given value
         * 
         * @param {String/Application}  app
         * @param {String}              keyFieldName 
         * @return Ext.data.Store
         */
        render: function(app, keyFieldName, id) {
            var renderer = this.get(app, keyFieldName);
            
            return renderer(id);
        },
        
        /**
         * register a custom renderer
         * 
         * @param {String/Application}  app
         * @param {String}              keyFieldName 
         * @param {Function}            renderer
         */
        register: function(app, keyFieldName, renderer) {
            var appName = Ext.isString(app) ? app : app.appName,
                key = appName + '_' + keyFieldName;
                
            renderers[key] = renderer;
        }
    }
}();


/***/ }),
/* 1080 */
/***/ (function(module, exports) {

/**
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets');

/**
 * lang chooser widget
 *
 * @namespace   Tine.widgets
 * @class       Tine.widgets.LangChooser
 * @extends     Ext.form.ComboBox
 */
Tine.widgets.LangChooser = Ext.extend(Ext.form.ComboBox, {
    
    /**
     * @cfg {Sring}
     */
    fieldLabel: null,
    
    displayField: 'language',
    valueField: 'locale',
    triggerAction: 'all',
    editable: false,
    width: 100,
    listWidth: 200,
    
    initComponent: function () {
        this.value = Tine.Tinebase.registry.get('locale').language;
        this.fieldLabel = this.fieldLabel ? this.fieldLabel : i18n._('Language');
        
        this.tpl = new Ext.XTemplate(
            '<tpl for=".">' +
                '<div class="x-combo-list-item">' +
                    '{language} <tpl if="region.length &gt; 1">{region}</tpl> [{locale}]' + 
                '</div>' +
            '</tpl>', {
                encode: function (value) {
                    return Ext.util.Format.htmlEncode(value);
                }
            }
        );
        
        this.store = new Ext.data.JsonStore({
            id: 'locale',
            root: 'results',
            totalProperty: 'totalcount',
            fields: Tine.Tinebase.Model.Language,
            baseParams: {
                method: 'Tinebase.getAvailableTranslations'
            }
        });
        Tine.widgets.LangChooser.superclass.initComponent.call(this);
        
        this.on('select', this.onLangSelect, this);
    },
    
    onLangSelect: function (combo, localeRecord, idx) {
        var currentLocale = Tine.Tinebase.registry.get('locale').locale;
        var newLocale = localeRecord.get('locale');
        
        if (newLocale !== currentLocale) {
            Ext.MessageBox.wait(i18n._('Setting new language...'), i18n._('Please Wait'));
            
            Ext.Ajax.request({
                scope: this,
                params: {
                    method: 'Tinebase.setLocale',
                    localeString: newLocale,
                    saveaspreference: true,
                    setcookie: true
                },
                success: function (result, request) {
                    if (window.google && google.gears && google.gears.localServer) {
                        var pkgStore = google.gears.localServer.openStore('tine20-package-store');
                        if (pkgStore) {
                            google.gears.localServer.removeStore('tine20-package-store');
                        }
                    }
                    window.location.reload(true);
                }
            });
        }
    }
});
Ext.reg('tinelangchooser', Tine.widgets.LangChooser);



/***/ }),
/* 1081 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine', 'Tine.widgets');

/**
 * get a fresh set of actions
 *
 * NOTE: An Action is a piece of reusable functionality that can be abstracted
 * out of any particular component so that it can be usefully shared among
 * multiple components. Actions let you share handlers, configuration options
 * and UI updates across any components that support the Action interface
 * (primarily Ext.Toolbar, Ext.Button and Ext.menu.Menu components).
 *
 * NOTE: Using the same action multiple times requires a shared selection model
 *       a) action toolbar is valid for grid selections (and maybe tree selections
 *          and state). So the actions can't be shared with context menus!
 *       b) context menus for grid/tree have different selection mechanisms
 *          i) selected - when the item the context menu was issued on is
 *             part of the current tree/grid selection the context actions
 *             are updated with the current selection and have to be applied
 *             on all selected items
 *         ii) context - when the item the context menu was issued on is
 *             not part of the current grid/tree selection the context actions
 *             are updated with the single underlaying item and have to be applied
 *             to the underlaying item only.
 *          as only one context menu is visible at a time, it's ok to share
 *          actions in context menus, as they are updated with the selection
 *          before the menu is shown.
 *
 *
 * NOTE: Each action should have an action updater - even to apply initial sate.
 *       The action updater runs every time the selection/scope for the action changes.
 *
 * IMPORTANT: it's in the responsibility of the component which created the action
 *       to update it!
 *
 * NOTE: consumers don't directly listen to events fired by the event handlers
 *       all communication is done via the message bus or uploadManager
 *       @TODO rethink: do we need events/callbacks for e.g. for window close?
 *       @TODO do the consumers need something like 'opener'?
 */
Tine.widgets.ActionManager = function(config) {
    Ext.apply(this, config);
};

Tine.widgets.ActionManager.prototype = {

    /**
     * @cfg {Object} actionConfigs
     */
    actionConfigs: null,

    getConfig: function(type) {
        var  _ = window.lodash,
            name = _.upperFirst(type);

        return _.get(this.actionConfigs, name);
    },

    /**
     * check if actionConfigs for type is available
     *
     * @param {String}
     * @return {Bool}
     */
    has: function(type) {
        return !!this.getConfig(type);
    },

    /**
     * get new action by actionType
     *
     * @param {String} type
     * @param {Object} config
     * @returns {Ext.Action}
     */
    get: function(type, config) {
        var  _ = window.lodash;

        if (_.isArray(type)) {
            return _.map(type, _.bind(this.get, this, _, config));
        }

        config = config || {};
        // NOTE: we copy shared config into a new object to avoid "static" properties
        //       in the instances
        Ext.applyIf(config, this.getConfig(type));

        if (_.isString(config.app)) {
            config.app = Tine.Tinebase.appMgr.get(config.app);
        }

        if (!config.translationObject && config.app) {
            config.translationObject = config.app.i18n;
        }

        if (config.translationObject && config.text) {
            config.text = config.translationObject._hidden(config.text);
        }

        // NOTE: an Ext.Action can't be extended :-(
        var action = new Ext.Action(config);
        action.initialConfig.scope = action;
        if (_.isFunction(action.initialConfig.init)) {
            action.initialConfig.init.call(action.initialConfig);
        }

        return action;
    }
};

/***/ }),
/* 1082 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
 Ext.ns('Tine', 'Tine.widgets');
 
 Tine.widgets.ActionUpdater = function(config) {
    config = config || {};
    var actions = config.actions || [];
    config.actions = [];
    
    Ext.apply(this, config);

    if (this.recordClass && Ext.isFunction(this.recordClass.getMeta)) {
        this.grantsPath = this.recordClass.getMeta('grantsPath');
    }
    this.addActions(actions);
 };

 Tine.widgets.ActionUpdater.prototype = {
    /**
     * @cfg {Array|Toolbar} actions
     * all actions to update
     */
    actions: null,
    
    /**
     * @cfg {Bool} evalGrants
     * should grants of a grant-aware records be evaluated (defaults to true)
     */
    evalGrants: true,

    recordClass: null,

    grantsPath: null,
    
    /**
     * add actions to update
     * @param {Array|Toolbar} actions
     */
    addActions: function(actions) {
        if (Ext.isArray(actions)) {
            for (var i=0; i<actions.length; i++) {
                this.addAction(actions[i]);
            }
        } else if (Ext.isFunction(actions.each)) {
            actions.each(this.addAction, this);
        } else if (Ext.isObject(actions)) {
            for (var action in actions) {
                this.addAction(actions[action]);
            }
        }
    },
    
    /**
     * add a single action to update
     * @param {Ext.Action} action
     */
    addAction: function(action) {
        // register action once only!
        if (this.actions.indexOf(action) >= 0) {
            return;
        }

        // if action has to initialConfig it's no Ext.Action!
        if (action && action.initialConfig) {
            
            // in some cases our actionUpdater config is not in the initial config
            // this happens for direct extensions of button class, like the notes button
            if (action.requiredGrant) {
                Ext.applyIf(action.initialConfig, {
                    requiredGrant: action.requiredGrant,
                    actionUpdater: action.actionUpdater,
                    allowMultiple: action.allowMultiple,
                    singularText: action.singularText,
                    pluralText: action.pluralText,
                    translationObject: action.translationObject,
                    selections: []
                });
            }
            
            this.actions.push(action);

            if (action.initialConfig.menu) {
                this.addActions(action.initialConfig.menu.items ?
                    action.initialConfig.menu.items :
                    action.initialConfig.menu
                );
            }
        }
    },
    
    /**
     * performs the actual update
     * @param {Array|SelectionModel} records
     */
    updateActions: function(records) {
        var isFilterSelect = false,
            selectionModel = null;

        if (typeof(records.getSelections) == 'function') {
            isFilterSelect = records.isFilterSelect;
            selectionModel = records;
            records = records.getSelections();
        } else if (typeof(records.beginEdit) == 'function') {
            records = [records];
        }
        
        var grants = this.getGrantsSum(records);
        
        this.each(function(action) {
            // action updater opt-in fn has precedence over generic action updater!
            var actionUpdater = action.actionUpdater || action.initialConfig.actionUpdater;
            if (typeof(actionUpdater) == 'function') {
                var scope = action.scope || action.initialConfig.scope || window;
                actionUpdater.call(scope, action, grants, records, isFilterSelect);
            } else {
                this.defaultUpdater(action, grants, records, isFilterSelect);
            }

            // reference selection into action
            action.initialConfig.selections = records;
            action.initialConfig.isFilterSelect = isFilterSelect;
            action.initialConfig.selectionModel = selectionModel;

        }, this);
        
    },
    
    /**
     * default action updater
     * 
     * - sets disabled status based on grants and required grant
     * - sets disabled status based on allowMutliple
     * - sets action text (signular/plural text)
     * 
     * @param {Ext.Action} action
     * @param {Object} grants
     * @param {Object} records
     * @param {Boolean} isFilterSelect
     */
    defaultUpdater: function(action, grants, records, isFilterSelect) {
        var nCondition = records.length != 0 && (records.length > 1 ? action.initialConfig.allowMultiple : true),
            mCondition = records && records.length > 1,
            grantCondition = (! this.evalGrants) || grants[action.initialConfig.requiredGrant];

        // @todo discuss if actions are only to be touched if requiredGrant is set
        if (action.initialConfig.requiredGrant && action.initialConfig.requiredGrant != 'addGrant') {
            action.setDisabled(! (grantCondition && nCondition));
        }
        
        // disable on filter selection if required
        if(action.disableOnFilterSelection && isFilterSelect) {
            Tine.log.debug("disable on filter selection");
            action.setDisabled(true);
            return;
        }
        
        if (nCondition) {
            if (mCondition) {
                if (action.initialConfig.requiredMultipleRight) {
                    var right = action.initialConfig.requiredMultipleRight.split('_');
                    if (right.length == 2) {
                        action.setDisabled(!Tine.Tinebase.common.hasRight(right[0], action.initialConfig.scope.app.name, right[1]));
                    } else {
                        Tine.log.debug('multiple edit right was not properly applied');
                    }
                }
                if(action.initialConfig.requiredMultipleGrant) {
                    var hasRight = true;
                    if(Ext.isArray(records)) {
                        Ext.each(records, function(record) {
                            if(record.get('container_id') && record.get('container_id').account_grants) {
                                hasRight = (hasRight && (record.get('container_id').account_grants[action.initialConfig.requiredMultipleGrant]));
                            } else {
                                return false;
                            }
                        }, this);
                        action.setDisabled(! hasRight);
                    }
                }
            }
            if (action.initialConfig.singularText && action.initialConfig.pluralText && action.initialConfig.translationObject) {
                var text = action.initialConfig.translationObject.n_(action.initialConfig.singularText, action.initialConfig.pluralText, records.length);
                action.setText(text);
            }
        }
    },
    
    /**
     * Calls the specified function for each action
     * 
     * @param {Function} fn The function to call. The action is passed as the first parameter.
     * Returning <tt>false</tt> aborts and exits the iteration.
     * @param {Object} scope (optional) The scope in which to call the function (defaults to the action).
     */
    each: function(fn, scope) {
        for (var i=0; i<this.actions.length; i++) {
            if (fn.call(scope||this.actions[i], this.actions[i]) === false) break;
        }
    },
    
    /**
     * calculats the grants sum of the given record(s)
     * 
     * @param  {Array}  records
     * @return {Object} grantName: sum
     */
    getGrantsSum: function(records) {

        var _ = window.lodash,
            defaultGrant = records.length == 0 ? false : true,
            grants = {
                addGrant:       defaultGrant,
                adminGrant:     defaultGrant,
                deleteGrant:    defaultGrant,
                editGrant:      defaultGrant,
                readGrant:      defaultGrant,
                exportGrant:    defaultGrant,
                syncGrant:      defaultGrant
            };
        
        if (! this.evalGrants) {
            return grants;
        }
        
        var recordGrants;
        for (var i=0; i<records.length; i++) {
            recordGrants = _.get(records[i], this.grantsPath, null);
            // NOTE: we skip grant update for records without grantsPath
            if (recordGrants === null) {
                continue;
            }

            for (var grant in grants) {
                grants[grant] = _.get(grants, grant, false) && _.get(recordGrants, grant, false);
            }

            // custom grants model
            for (grant in recordGrants) {
                grants[grant] = _.get(grants, grant, defaultGrant) && _.get(recordGrants, grant, false);
            }
        }
        // if calculated admin right is true, overwrite all grants with true
        if(grants.adminGrant) {
            for (var grant in grants) {
                grants[grant] = true;
            }
        }
        
        return grants;
    }
};
 
/**
 * sets text and disabled status of a set of actions according to the grants 
 * of a set of records
 * @legacy use ActionUpdater Obj. instead!
 * 
 * @param {Array|SelectionModel} records
 * @param {Array|Toolbar}        actions
 * @param {String}               containerField
 * @param {Bool}                 skipGrants evaluation
 */
Tine.widgets.actionUpdater = function(records, actions, containerField, skipGrants) {
    if (!containerField) {
        containerField = 'container_id';
    }

    if (typeof(records.getSelections) == 'function') {
        records = records.getSelections();
    } else if (typeof(records.beginEdit) == 'function') {
        records = [records];
    }
    
    // init grants
    var defaultGrant = records.length == 0 ? false : true;
    var grants = {
        addGrant:    defaultGrant,
        adminGrant:  defaultGrant,
        deleteGrant: defaultGrant,
        editGrant:   defaultGrant,
        exportGrant: defaultGrant,
        readGrant:   defaultGrant,
        syncGrant:   defaultGrant
    };
    
    // calculate sum of grants
    for (var i=0; i<records.length; i++) {
        var recordGrants = records[i].get(containerField) ? records[i].get(containerField).account_grants : {};
        for (var grant in grants) {
            grants[grant] = grants[grant] & recordGrants[grant];
        }
    }

    // if calculated admin right is true, overwrite all grants with true
    if(grants.adminGrant) {
        for (var grant in grants) {
            grants[grant] = true;
        }
    }

    /**
     * action iterator
     */
    var actionIterator = function(action) {
        var initialConfig = action.initialConfig;
        if (initialConfig) {
            
            // happens for direct extensions of button class, like the notes button
            if (action.requiredGrant) {
                initialConfig = {
                    requiredGrant: action.requiredGrant,
                    allowMultiple: action.allowMultiple,
                    singularText: action.singularText,
                    pluralText: action.pluralText,
                    translationObject: action.translationObject
                };
            }
            
            // NOTE: we don't handle add action for the moment!
            var requiredGrant = initialConfig.requiredGrant;
            if (requiredGrant && requiredGrant != 'addGrant') {
                var enable = skipGrants || grants[requiredGrant];
                if (records.length > 1 && ! initialConfig.allowMultiple) {
                    enable = false;
                }
                if (records.length == 0) {
                    enable = false;
                }
                
                action.setDisabled(!enable);
                if (initialConfig.singularText && initialConfig.pluralText && initialConfig.translationObject) {
                    var text = initialConfig.translationObject.n_(initialConfig.singularText, initialConfig.pluralText, records.length);
                    action.setText(text);
                }
            }
        }
    };
    
    /**
     * call action iterator
     */
    switch (typeof(actions)) {
        case 'object':
            if (typeof(actions.each) == 'function') {
                actions.each(actionIterator, this);
            } else {
                for (var action in actions) {
                    actionIterator(actions[action]);
                }
            }
        break;
        case 'array':
            for (var i=0; i<actions.length; i++) {
                actionIterator(actions[i]);
            }
        break;
    }
    
};


/***/ }),
/* 1083 */
/***/ (function(module, exports) {

/**
 * Tine 2.0
 * 
 * @package     Tine
 * @subpackage  Widgets
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * @deprecated  use EditDialog instead. This class will be removed when all
 *              dialogs are moved to the EditDialog widget
 */

/*global Ext, Tine*/

Ext.ns('Tine.widgets', 'Tine.widgets.dialog');

/**
 * Generic 'Edit Record' dialog
 *
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.EditRecord
 * @extends     Ext.FormPanel
 */
Tine.widgets.dialog.EditRecord = Ext.extend(Ext.FormPanel, {
    /**
     * @cfg {Array} additional toolbar items
     */
    tbarItems: false,
    /**
     * @cfg {String} internal app name
     */
    appName: null,
    /**
     * @cfg {String} translated container item name
     */
    //containerItemName: 'record',
    /**
     * @cfg {String} translated container name
     */
    containerName: 'container',
    /**
     * @cfg {string} containerName
     * name of container (plural)
     */
    containersName: 'containers',
    /**
     * @cfg {String} name of the container property
     */
    containerProperty: 'container_id',
    /**
     * @cfg {Bool} show container selector in bottom area
     */
    showContainerSelector: false,
    /**
     * @cfg {Object} handlerScope scope, the defined handlers will be executed in 
     */
    handlerScope: null,
    /**
     * @cfg {function} handler for generic save and close action
     */
    handlerSaveAndClose: null,
    /**
     * @cfg {function} handler for generic save and close action
     */
    handlerApplyChanges: null,
    /**
     * @cfg {function} handler for generic save and close action
     */
    handlerCancel: null,
    /**
     * @cfg {String} layout of the containing window
     */
    windowLayout: 'border',
    /**
     * @property {Ext.Window|Ext.ux.PopupWindow|Ext.Air.Window}
     */
    window: null,
    
    // private
    bodyStyle: 'padding:5px',
    //layout: 'fit',
    anchor: '100% 100%',
    region: 'center',
    deferredRender: false,
    buttonAlign: 'right',
    cls: 'tw-editdialog',
    
    //private
    initComponent: function () {
        this.addEvents(
            /**
             * @event cancel
             * Fired when user pressed cancel button
             */
            'cancel',
            /**
             * @event saveAndClose
             * Fired when user pressed OK button
             */
            'saveAndClose',
            /**
             * @event update
             * @desc  Fired when the record got updated
             * @param {Ext.data.record} data data of the entry
             */
            'update',
            /**
             * @event apply
             * Fired when user pressed apply button
             */
            'apply');
        
        this.initHandlers();
        this.initActions();
        this.initButtons();
        
        Tine.widgets.dialog.EditRecord.superclass.initComponent.call(this);
    },
    
    /**
     * @private
     */
    onRender : function (ct, position) {
        Tine.widgets.dialog.EditRecord.superclass.onRender.call(this, ct, position);
        
        if (this.showContainerSelector) {
            this.recordContainerEl = this.footer.first().insertFirst({tag: 'div', style: {'position': 'relative', 'top': '4px', 'float': 'left'}});
            var ContainerForm = new Tine.widgets.container.SelectionComboBox({
                id: this.appName + 'EditRecordContainerSelector',
                fieldLabel: i18n._('Saved in'),
                width: 300,
                name: this.containerProperty,
                //itemName: this.containerItemName,
                containerName: this.containerName,
                containersName: this.containersName,
                appName: this.appName
            });
            this.getForm().add(ContainerForm);
            
            var containerSelect = new Ext.Panel({
                layout: 'form',
                border: false,
                renderTo: this.recordContainerEl,
                bodyStyle: {'background-color': '#F0F0F0'},
                items: ContainerForm
            });
        }
    },
    
    /**
     * Init actions
     */
    initActions: function () {
        this.action_saveAndClose = new Ext.Action({
            requiredGrant: 'editGrant',
            text: i18n._('Ok'),
            //tooltip: 'Save changes and close this window',
            minWidth: 70,
            //handler: this.onSaveAndClose,
            handler: this.handlerSaveAndClose,
            iconCls: 'action_saveAndClose',
            scope: this.handlerScope
        });
    
        this.action_applyChanges = new Ext.Action({
            requiredGrant: 'editGrant',
            text: i18n._('Apply'),
            //tooltip: 'Save changes',
            minWidth: 70,
            handler: this.handlerApplyChanges,
            iconCls: 'action_applyChanges',
            scope: this.handlerScope
            //disabled: true
        });
        
        this.action_cancel = new Ext.Action({
            text: i18n._('Cancel'),
            //tooltip: 'Reject changes and close this window',
            minWidth: 70,
            handler: this.handlerCancel,
            iconCls: 'action_cancel',
            scope: this.handlerScope
        });
        
        this.action_delete = new Ext.Action({
            requiredGrant: 'deleteGrant',
            text: i18n._('delete'),
            minWidth: 70,
            handler: this.handlerDelete,
            iconCls: 'action_delete',
            scope: this.handlerScope,
            disabled: true
        });
    },
    
    /**
     * init buttons
     * use preference settings for order of save and close buttons
     */
    initButtons: function () {
        var genericButtons = [
            this.action_delete
        ];
        
        this.buttons = [];

        this.buttons.push(this.action_cancel, this.action_saveAndClose);

       
        if (this.tbarItems) {
            this.tbar = new Ext.Toolbar({
                items: this.tbarItems
            });
        }
    },
    
    /**
     * @private
     */
    initHandlers: function () {
        this.handlerScope = this.handlerScope ? this.handlerScope : this;
        
        this.handlerSaveAndClose = this.handlerSaveAndClose ? this.handlerSaveAndClose : function (e, button) {
            this.handlerApplyChanges(e, button, true);
        };
        
        this.handlerCancel = this.handlerCancel ? this.handlerCancel : this.closeWindow;
    },
    
    /**
     * update (action updateer) top and bottom toolbars
     */
    updateToolbars: function (record, containerField) {
        var actions = [
            this.action_saveAndClose,
            this.action_applyChanges,
            this.action_delete,
            this.action_cancel
        ];
        Tine.widgets.actionUpdater(record, actions, containerField);
        Tine.widgets.actionUpdater(record, this.tbarItems, containerField);
    },
    
    /**
     * get top toolbar
     */
    getToolbar: function () {
        return this.getTopToolbar();
    },
    
    /**
     * @private
     */
    onCancel: function () {
        this.fireEvent('cancel');
        this.purgeListeners();
    },
    
    /**
     * @private
     */
    onSaveAndClose: function () {
        this.fireEvent('saveAndClose');
    },
    
    /**
     * @private
     */
    onApply: function () {
        this.fireEvent('apply');
    },
    
    /**
     * helper function to close window
     */
    closeWindow: function () {
        this.window.close();
    }
});

Ext.reg('tineeditrecord', Tine.widgets.dialog.EditRecord);



/***/ }),
/* 1084 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tine
 * @subpackage  Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets');

/**
 * check if newer version of Tine 2.0 is available
 * 
 * @namespace   Tine.widgets
 * @class       Tine.widgets.VersionCheck
 * @constructor
 */
Tine.widgets.VersionCheck = function() {
    
    var ds = new Ext.data.Store({
        proxy: new Ext.data.ScriptTagProxy({
            url: 'https://versioncheck.tine20.net/versionCheck/versionCheck.php'
        }),
        reader: new Ext.data.JsonReader({
            root: 'version'
        }, ['codeName', 'packageString', 'releaseTime', 'critical', 'build'])
    });
    ds.on('load', function(store, records) {
        if (! Tine.Tinebase.registry.get('version')) {
            return false;
        }
        
        var availableVersion = records[0];
            installedVersion = Tine.Tinebase.registry.get('version');
        
        Tine.log.debug('Available Tine version:');
        Tine.log.debug(availableVersion);
        Tine.log.debug('Installed Tine version:');
        Tine.log.debug(installedVersion);
        
        var local = Date.parseDate(installedVersion.releaseTime, Date.patterns.ISO8601Long);
        var latest = Date.parseDate(availableVersion.get('releaseTime'), Date.patterns.ISO8601Long);
        
        if (latest > local && Tine.Tinebase.common.hasRight('run', 'Tinebase')) {
            var versionString = availableVersion.get('codeName') + ' ' + availableVersion.get('packageString');
            if (availableVersion.get('critical') == true) {
                Ext.MessageBox.show({
                    title: i18n._('New version of Tine 2.0 available'),
                    msg: String.format(i18n._('Version "{0}" of Tine 2.0 is available.'), versionString) + "\n" +
                                 i18n._("It's a critical update and must be installed as soon as possible!"),
                    width: 500,
                    buttons: Ext.Msg.OK,
                    icon: Ext.MessageBox.ERROR
                });
            } else {
                Ext.MessageBox.show({
                    title: i18n._('New version of Tine 2.0 available'),
                    msg: String.format(i18n._('Version "{0}" of Tine 2.0 is available.'), versionString) + "\n" +
                                 i18n._('Please consider updating!'),
                    width: 400,
                    buttons: Ext.Msg.OK,
                    icon: Ext.MessageBox.INFO
                });
            }
        }
    }, this);
    
    ds.load({params: {version: Ext.util.JSON.encode(Tine.Tinebase.registry.get('version'))}});
};


/***/ }),
/* 1085 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Tine.widgets', 'Tine.widgets.dialog');

/**
 * Alarm Panel
 * 
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.AlarmPanel
 * @extends     Ext.Panel
 * 
 * @TODO add validation (alarm after alarmtime)
 */
Tine.widgets.dialog.AlarmPanel = Ext.extend(Ext.Panel, {
    
    /**
     * @cfg {string} name of alarm field
     */
    recordAlarmField: 'dtstart',
    
    //private
    layout      : 'fit',
    border      : true,
    frame       : true,
    canonicalName: 'AlarmGrid',

    initComponent: function() {
        this.title = this.title || i18n._('Alarms');
        
        this.alarmOptions = this.alarmOptions || [
            ['0',       i18n._('0 minutes before')],
            ['5',       i18n._('5 minutes before')],
            ['15',      i18n._('15 minutes before')],
            ['30',      i18n._('30 minutes before')],
            ['60',      i18n._('1 hour before')],
            ['120',     i18n._('2 hours before')],
            ['720',     i18n._('12 hours before')],
            ['1440',    i18n._('1 day before')],
            ['2880',    i18n._('2 days before')],
            ['custom',  i18n._('Custom Datetime')]
        ];
        
        this.items = this.alarmGrid = new Tine.widgets.grid.QuickaddGridPanel({
            layout: 'fit',
            autoExpandColumn: 'alarm_time',
            quickaddMandatory: 'minutes_before',
            frame: false,
            recordClass: Tine.Tinebase.Model.Alarm,
            onNewentry: this.onNewentry.createDelegate(this),
            cm: new Ext.grid.ColumnModel([{
                id: 'minutes_before', 
                header: i18n._('Alarm Time'),
                dataIndex: 'minutes_before', 
                width: 200, 
                hideable: false, 
                sortable: true,
                quickaddField: new Ext.form.ComboBox({
                    triggerAction   : 'all',
                    lazyRender      : false,
                    editable        : false,
                    mode            : 'local',
                    forceSelection  : true,
                    store: this.alarmOptions,
                    listeners       : {
                        scope: this,
                        beforeselect: function(combo, record, index) {
                            var alarmFieldDate = this.record ? this.record.get(this.recordAlarmField) : null;
                            
                            this.alarmTimeQuickAdd.setDisabled(record.data.field1 != 'custom');
                            
                            // preset a usefull value
                            if (Ext.isDate(alarmFieldDate) && record.data.field1 == 'custom') {
                                this.alarmTimeQuickAdd.setValue(alarmFieldDate.add(Date.MINUTE, -1 * Ext.isNumber(combo.getValue()) ? combo.getValue() : 0));
                            }
                            
                            if (record.data.field1 != 'custom') {
                                this.alarmTimeQuickAdd.setValue();
                            }
                        }
                    }
                }),
                editor: new Ext.form.ComboBox({
                    triggerAction   : 'all',
                    lazyRender      : false,
                    editable        : false,
                    mode            : 'local',
                    forceSelection  : true,
                    allowBlank      : false,
                    expandOnFocus   : true,
                    blurOnSelect    : true,
                    store: this.alarmOptions
                }),
                renderer: this.minutesBeforeRenderer.createDelegate(this)
            }, {
                id: 'alarm_time', 
                dataIndex: 'alarm_time', 
                hideable: false, 
                sortable: false,
                renderer: this.alarmTimeRenderer.createDelegate(this),
                quickaddField: this.alarmTimeQuickAdd = new Ext.ux.form.DateTimeField({
                    allowBlank      : true
                }),
                editor: new Ext.ux.form.DateTimeField({
                    allowBlank      : false
                })
            }])
        });
        
        this.alarmGrid.on('beforeedit', this.onBeforeEdit, this);
        this.alarmGrid.on('afteredit', this.onAfterEdit, this);
        Tine.widgets.dialog.AlarmPanel.superclass.initComponent.call(this);
        
    },
    
    onNewentry: function(recordData) {
        if (recordData.minutes_before == 'custom' && ! Ext.isDate(recordData.alarm_time)) {
            return false;
        }
        
        Tine.widgets.grid.QuickaddGridPanel.prototype.onNewentry.apply(this.alarmGrid, arguments);
        this.alarmGrid.store.sort('minutes_before', 'ASC');
    },
    
    onBeforeEdit: function(o) {
        if (o.field == 'alarm_time') {
            var minutesBefore = o.record.get('minutes_before'),
                alarmTime = o.record.get('alarm_time');
            
            // allow status setting if status authkey is present
            if (minutesBefore != 'custom') {
                o.cancel = true;
            } else if (alarmTime && ! Ext.isDate(alarmTime)) {
                var alarmDate = Date.parseDate(alarmTime, Date.patterns.ISO8601Long);
                o.record.set('alarm_time', '');
                o.record.set('alarm_time', alarmDate);
            }
        }
    },
    
    onAfterEdit: function(o) {
        if (o.record.get('minutes_before') == 'custom' && ! Ext.isDate(o.record.get('alarm_time'))) {
            var alarmFieldDate = this.record ? this.record.get(this.recordAlarmField) : null;
            
            o.record.set('alarm_time', Ext.isDate(alarmFieldDate) ? alarmFieldDate.clone() : new Date());
        }
        
        if (o.record.get('minutes_before') != 'custom') {
            o.record.set('alarm_time', '');
        }
        
        this.alarmGrid.store.sort('minutes_before', 'ASC');
    },
    
    minutesBeforeRenderer: function(value) {
        var string = null;
        Ext.each(this.alarmOptions, function(opt) {
            if (opt[0] == value) {
                string = opt[1];
                return false;
            }
        });
        
        if (! string ) {
            string = String.format(i18n._('{0} minutes before'), value);
        }
        
        return string;
    },
    
    alarmTimeRenderer: function(value, metaData, record) {
        return record.get('minutes_before') == 'custom' ? Tine.Tinebase.common.dateTimeRenderer.apply(this, arguments) : '';
    },
    
    /**
     * on record load event
     * 
     * @param {Object} record
     */
    onRecordLoad: function(record) {
        this.record = record;
        this.alarmGrid.store.removeAll();
        this.alarmGrid.setStoreFromArray(record.get('alarms') || []);
        
        this.alarmGrid.store.sort('minutes_before', 'ASC');
    },

    /**
     * on record update event
     * 
     * @param {Object} record
     */
    onRecordUpdate: function(record) {
        // we need to initialze alarms because stringcompare would detect no change of the arrays
        record.set('alarms', '');
        record.set('alarms', this.alarmGrid.getFromStoreAsArray());
    },
    
    /**
     * disable contents not panel
     */
    setDisabled: function(v) {
        this.el[v ? 'mask' : 'unmask']();
    }
});



/***/ }),
/* 1086 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.Tinebase.dialog');

/**
 * @namespace Tine.Tinebase
 * @class Tine.Tinebase.dialog.Dialog
 * @extends Ext.Panel
 */
Tine.Tinebase.dialog.Dialog = Ext.extend(Ext.FormPanel, {
    /**
     * @cfg {Number} windowWidth
     * width of dialog window
     */
    windowWidth: 300,
    /**
     * @cfg {Number} windowHeight
     * height of dialog window
     */
    windowHeight: 400,
    /**
     * @cfg {Tine.Tinebase.Application} app
     * instance of the app object (required if not appName is given)
     */
    app: null,
    /**
     * @cfg {String} appName
     * name of app (required if no app is given)
     */
    appName: null,
    /**
     * @cfg {String} OkButtonText
     * text of ok button (optional) default to _('Ok')
     */
    applyButtonText: '',
    /**
     * @cfg {String} cancelButtonText
     * text of cancel button (optional) defaults to _('Cancel')
     */
    cancelButtonText: '',
    /**
     * @cfg {String} canonicalName
     * canonical name of dialog (required) see getCanonicalPathSegment
     */
    canonicalName: '',

    cls: 'tw-editdialog',
    
    layout: 'fit',
    border: false,

    initComponent: function () {
        if (! this.app && this.appName) {
            this.app = Tine.Tinebase.appMgr.get(this.appName);
        }
        if (! this.appName && this.app) {
            this.appName = this.app.name;
        }

        this.fbar = ['->', {
            text: this.cancelButtonText ? this.app.i18n._hidden(this.cancelButtonText) : i18n._('Cancel'),
            minWidth: 70,
            ref: '../buttonCancel',
            scope: this,
            handler: this.onButtonCancel,
            iconCls: 'action_cancel'
        }, {
            text: this.applyButtonText ? this.app.i18n._hidden(this.applyButtonText) : i18n._('Ok'),
            minWidth: 70,
            ref: '../buttonApply',
            scope: this,
            handler: this.onButtonApply,
            iconCls: 'action_saveAndClose'
        }];

        Tine.Tinebase.dialog.Dialog.superclass.initComponent.call(this);
    },

    /**
     * template fn, implement to have specific data in the events
     */
    getEventData: Ext.emptyFn,

    onButtonCancel: function() {
        this.fireEvent.apply(this, ['cancel'].concat(this.getEventData('cancel')));
        this.purgeListeners();
        this.window.close();
    },

    onButtonApply: function() {
        this.fireEvent.apply(this, ['apply'].concat(this.getEventData('apply')));
        this.purgeListeners();
        this.window.close();
    },

    getCanonicalPathSegment: function () {
        return ['',
            this.appName,
            this.canonicalName,
        ].join(Tine.Tinebase.CanonicalPath.separator);
    }
});

/***/ }),
/* 1087 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/*global Ext, Tine*/

Ext.ns('Tine.widgets.dialog');

/**
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.SimpleRecordEditDialog
 * @extends     Tine.widgets.dialog.EditDialog
 * SimpleRecord Edit Dialog <br>
 *
 * @author      Philipp Schüle <p.schuele@metaways.de>
 */
Tine.widgets.dialog.SimpleRecordEditDialog = Ext.extend(Tine.widgets.dialog.EditDialog, {

    windowNamePrefix: 'SimpleRecordEditWindow_',

    getFormItems: function () {
        return {
            xtype: 'tabpanel',
            border: false,
            plain: true,
            activeTab: 0,
            plugins: [{
                ptype : 'ux.tabpanelkeyplugin'
            }],
            defaults: {
                hideMode: 'offsets'
            },
            items: [{
                title: this.app.i18n._(this.recordClass.getMeta('recordName')),
                autoScroll: true,
                border: false,
                frame: true,
                layout: 'border',
                items: [{
                    region: 'center',
                    xtype: 'columnform',
                    labelAlign: 'top',
                    formDefaults: {
                        xtype:'textfield',
                        anchor: '100%',
                        labelSeparator: '',
                        columnWidth: 1
                    },
                    items: [[{
                        fieldLabel: this.app.i18n._('Name'),
                        name: 'name',
                        allowBlank: false
                    }, {
                        fieldLabel: this.app.i18n._('Description'),
                        name: 'description',
                        xtype:'textarea'
                    }]
                    ]
                }]
            }, new Tine.widgets.activities.ActivitiesTabPanel({
                app: this.appName,
                record_id: (this.record && ! this.copyRecord) ? this.record.id : '',
                record_model: this.appName + '_Model_' + this.recordClass.getMeta('modelName')
            })
            ]
        };
    }
});


/***/ }),
/* 1088 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.editDialog');

/**
 * @namespace   Tine.widgets.editDialog
 * @class       Tine.widgets.dialog.MultipleEditDialogPlugin
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * 
 * @plugin for Tine.widgets.editDialog
 */
Tine.widgets.dialog.MultipleEditDialogPlugin = function(config) {
    Ext.apply(this, config);
    // uhh, quick hack to circumvent large refactoring
    // -> limitation: no two multiedit plugins shown at once (seems acceptable)
    Tine.widgets.dialog.MultipleEditDialogPlugin.prototype.skipItems = [];
};

Tine.widgets.dialog.MultipleEditDialogPlugin.prototype = {
    /**
     * the application calling this plugin
     */
    app : null,
    /**
     * the editDialog the plugin is applied to
     */
    editDialog : null,
    /**
     * the selected records 
     */
    selectedRecords: null,
    /**
     * the selections' filter
     */
    selectionFilter: null,
    /**
     * this record is created on the fly and never saved as is, only changes to this record are sent to the backend
     */
    interRecord: null,   
    /**
     * a shorthand for this.editDialog.getForm() 
     */
    form : null,
    /**
     * Array which holds the fieldConfigs which can be handled by this plugin
     * Array of Objects: { key: <the raw key>, type: <custom/default>', formField: <the corresponding form field>, recordKey: <used for getters/setters of the record>}
     * @type Array
     */
    handleFields: null,
    /**
     * if records are defined by a filterselection
     * @type 
     */
    isFilterSelect: null,
    
    /**
     * holds the fields which have been changed
     * @type {array} changedFields
     */
    changedFields: null,
    
    /**
     * count of all handled records
     * @type {Integer} totalRecordCount
     */
    totalRecordCount: null,
    
    /**
     * component registry to skip on multiple edit
     * @type {Array} skipItems
     */
    skipItems: [],
    
    /**
     * initializes the plugin
     */    
    init : function(ed) {
        ed.mode = 'local';
        ed.evalGrants = false;
        ed.onRecordLoad = ed.onRecordLoad.createSequence(this.onAfterRender, this);
        ed.onApplyChanges = ed.onApplyChanges.createInterceptor(this.onRecordUpdate, this);
        ed.onRecordUpdate = Ext.emptyFn;
        ed.initRecord = Ext.emptyFn;
        ed.useMultiple = true;
        ed.interRecord = new ed.recordClass({});
        ed.loadRecord = true;
        
        ed.on('load', function(editDialog, record, ticketFn) {
            this.loadInterceptor = ticketFn();
        }, this);
        
        this.app = Tine.Tinebase.appMgr.get(ed.app);
        this.form = ed.getForm();
        this.handleFields = [];
        this.interRecord = ed.interRecord;
        
        if (ed.action_saveAndClose) {
            ed.action_saveAndClose.enable();
        }
        ed.on('fieldchange', this.findChangedFields, this);
        
        if (ed.hasOwnProperty('isMultipleValid') && Ext.isFunction(ed.isMultipleValid)) {
            ed.isValid = ed.isMultipleValid;
        } else {
            ed.isValid = function() {return true};
        }
        
        this.editDialog = ed;
        
        // disable clearer of relation picker combos, otherwise the clearer will be shown before initializing
        if (this.editDialog.relationPickers) {
            Ext.each(this.editDialog.relationPickers, function(ff) {
                ff.combo.blurOnSelect = true;
                ff.combo.disableClearer = true;
            });
        }
    },
    
    /**
     * method to register components which are disabled on multiple edit
     * call this from the component to disable by: Tine.widgets.dialog.MultipleEditDialogPlugin.prototype.registerSkipItem(this);
     * @param {} item
     */
    registerSkipItem: function(item) {
        this.skipItems.push(item);
    },
    
    /**
     * handle fields for multiedit
     */
    onAfterRender : function() {
        // skip registered form items
        Ext.each(this.skipItems, function(item) {
            item.setDisabled(true);
        }, this);

        var keys = [];
        
        // disable container selector - just container_id
        var field = this.form.findField('container_id');
        if (field) {
            field.disable();
        }
        
        // get fields to handle
        Ext.each(this.editDialog.recordClass.getFieldNames(), function(key) {
            var field = this.form.findField(key);
            if (!field) {
                Tine.log.info('No field found for property "' + key + '". Ignoring...');
                return true;
            }
            Tine.log.info('Field found for property "' + key + '".');
            keys.push({key: key, type: 'default', formField: field, recordKey: key});
        }, this);
        
        // get customfields to handle
        var cfConfigs = Tine.widgets.customfields.ConfigManager.getConfigs(this.app, this.editDialog.recordClass);
        if (cfConfigs) {
            Ext.each(cfConfigs, function (config) {
                var field = this.form.findField('customfield_' + config.data.name);
                if (!field) {
                    Tine.log.info('No customfield found for property "' + config.data.name + '". Ignoring...');
                    return true;
                }
                Tine.log.info('Customfield found for property "' + config.data.name + '".');
                keys.push({key: config.data.name, type: 'custom', formField: field, recordKey: '#' + config.data.name});
            }, this);
        }
        
        // get relationpickerfields to handle
        if (this.editDialog.relationPickers) {
            Ext.each(this.editDialog.relationPickers, function(picker) {
                Tine.log.info('RelationPicker found. Using "' + '%' + picker.relationType + '-' + picker.fullModelName + '" as key.');
                keys.push({key: picker.relationType + '-' + picker.fullModelName, type: 'relation', formField: picker.combo, recordKey: '%' + picker.relationType + '-' + picker.fullModelName});
            });
        }

        Ext.each(keys, function(field) {
            var ff = field.formField;
            // disable fields which cannot be handled atm.
            if ((!(ff.isXType('textfield'))) && (!(ff.isXType('checkbox'))) && (!(ff.isXType('datetimefield'))) || ff.multiEditable === false) {
                Tine.log.debug('Disabling field for key "' + field.recordKey + '". Cannot be handled atm.');
                ff.setDisabled(true);
                this.interRecord.set(field.recordKey, '');
                return true;
            }
            // remove empty text
            if (ff.hasOwnProperty('emptyText')) {
                ff.emptyText = '';
            }
            
            // default event for init
            ff.startEvents = ['focus'];
            // default trigger event
            ff.triggerEvents = ['blur'];
            
            // special events for special field types
            if (ff.isXType('tinedurationspinner')) {
                ff.emptyOnZero = true;
                ff.startEvents = ['focus', 'spin'];
                ff.triggerEvents = ['spin', 'blur'];
            } else if (ff.isXType('tinerelationpickercombo')) {
                // leave as it is, otherwise tinerecordpickercombobox would match
            } else if (ff.isXType('tinerecordpickercombobox')) {
                ff.startEvents = ['focus', 'expand'];
                ff.triggerEvents = ['select', 'blur'];
            } else if (ff.isXType('checkbox')) {
                ff.startEvents = ['check'];
                ff.triggerEvents = ['check', 'blur'];
            }
            // add field to handlefields array
            this.handleFields.push(field);
            
            Ext.each(ff.startEvents, function(initEvent) {
                ff.on(initEvent, this.onInitField, this, [ff]);
            }, this);

        }, this);
        
        this.editDialog.record = this.interRecord;
        this.onRecordLoad();
    },
    
    /**
     * is called when an init handler for this field is called
     * @param {Object} ff the form field
     */
    onInitField: function(ff) {
        Tine.log.info('Init handler called for field "' + ff.name + '".');
        
        // if already initialized, dont't repeat setting start values and inserting button
        if (! ff.multipleInitialized) {
            if (! ff.isXType('checkbox')) {
                this.createMultiButton(ff);
            }
            
            var match = ff.hasOwnProperty('name') ? ff.name.match(/customfield_(.*)/) : null;
            if (match && match.length == 2) {
                var cf = this.interRecord.get('customfields');
                if (cf && cf.hasOwnProperty(match[1])) {
                    var startValue = cf[match[1]];
                } else {
                    var startValue = '';
                }
            } else {
                var startValue = this.interRecord.get(ff.name);
            }
            
            if (ff.isXType('addressbookcontactpicker') && ff.useAccountRecord) {
                ff.startRecord = startValue ? startValue : null;
                startValue = startValue['accountId'] ? startValue['accountId'] : null;
            } else if (ff.isXType('timefield')) {
                if (startValue.length) {
                    startValue = startValue.replace(/\d{4}-\d{2}-\d{2}\s/, '').replace(/:\d{2}$/, '');
                }
            } else if (ff.isXType('trigger') && ff.triggers) {
                ff.on('blur', this.hideTriggerClearer);
                ff.on('focus', this.hideTriggerClearer);
                ff.on('select', this.hideTriggerClearer);
            } else if (Ext.isObject(startValue)) {
                startValue = startValue[ff.recordClass.getMeta('idProperty')];
                ff.startRecord = new ff.recordClass(startValue);
            } else if (ff.isXType('checkbox')) {
                var startValue = (startValue == 1) ? true : false;
                ff.setValue(startValue);
            }
            ff.startingValue = (startValue == undefined || startValue == null) ? '' : startValue;
            
            Tine.log.info('Setting start value to "' + startValue + '".');
            
            Ext.each(ff.triggerEvents, function(triggerEvent) {
                ff.on(triggerEvent, this.onTriggerField, ff);
                ff.on('fieldchange', function() {
                    this.editDialog.fireEvent('fieldchange');
                }, this);
            }, this);
    
            ff.multipleInitialized = true;

            if (ff.isXType('tinedurationspinner') || ff.isXType('checkbox')) {
                ff.fireEvent(ff.triggerEvents[1]);
            }
            
        } else {
            if (ff.multiButton) {
                ff.multiButton.removeClass('hidden');
            }
        }
    },
    
    /**
     * hides the default clearer
     */
    hideTriggerClearer: function() {
        this.triggers[0].hide();
    },
    /**
     * creates the multibutton (button to reset or clear the field value)
     * @param {Ext.form.field} formField
     */
    createMultiButton: function(formField) {
        var subLeft = 18;
        if (formField.isXType('tinerecordpickercombobox')) {
            formField.disableClearer = true;
            subLeft += 19;
        } else if (formField.isXType('extuxclearabledatefield')) {
            formField.disableClearer = true;
            if (!formField.multi) {
                subLeft += 17;
            }
        } else if (formField.isXType('tine.widget.field.AutoCompleteField')) {
            // is trigger, but without button, so do nothing
        } else if (formField.isXType('trigger')) {
            if (! formField.hideTrigger) {
                subLeft += 17;
            }
        } else if (formField.isXType('datetimefield')) {
            subLeft += 17; 
        }
        var el = formField.el.parent().select('.tinebase-editmultipledialog-clearer'), 
            width = formField.getWidth(), 
            left = (width - subLeft) + 'px';
            
        formField.startLeft = (width - subLeft);

        if (el.elements.length > 0) {
            el.setStyle({left: left});
            el.removeClass('hidden');
            return;
        }
        
        // create Button
        formField.multiButton = new Ext.Element(document.createElement('img'));
        formField.multiButton.set({
            'src': Ext.BLANK_IMAGE_URL,
            'ext:qtip': Ext.util.Format.htmlEncode(i18n._('Delete value from all selected records')),
            'class': 'tinebase-editmultipledialog-clearer',
            'style': 'left:' + left
            });
        
        formField.multiButton.addClassOnOver('over');
        formField.multiButton.addClassOnClick('click');

        // handles the reset/restore button
        formField.multiButton.on('click', this.onMultiButton, formField);
        formField.el.insertSibling(formField.multiButton);
    },
    
    /**
     * is called if the multibutton of "this" field is triggered
     */
    onMultiButton: function() {
        Tine.log.debug('Multibutton called.');
        // scope: formField
        
        if (this.multiButton.hasClass('undo')) {
            Tine.log.debug('Resetting value to "' + this.startingValue + '".');
            
            if (this.startRecord) {
                
                this.store.removeAll();
                this.reset();
                
                if (this.multi) {
                    this.setValue('');
                } else {
                    this.setValue(this.startRecord);
                    this.value = this.startingValue;
                }
            } else {
                this.setValue(this.startingValue);
            }
            
            if (this.isXType('extuxclearabledatefield') && this.multi) {
                var startLeft = this.startLeft ? this.startLeft : 0;
                var parent = this.el.parent().select('.tinebase-editmultipledialog-clearer');
                parent.setStyle('left', startLeft + 'px');
            }
            if (this.multi) {
                this.cleared = false;
            }
        } else {
            Tine.log.debug('Clearing value.');
            if (this.isXType('extuxclearabledatefield') && this.multi) {
                var startLeft = this.startLeft ? this.startLeft : 0;
                startLeft -= 17;
                var parent = this.el.parent().select('.tinebase-editmultipledialog-clearer');
                parent.setStyle('left', startLeft + 'px');
            }
            if (this.store) {
                this.store.removeAll();
            }
            this.setValue('');
            if (this.multi) {
                this.cleared = true;
                this.allowBlank = this.origAllowBlank;
            }
        }
        // trigger event
        this.fireEvent(this.triggerEvents[0], this);
    },
    
    /*
     * is called when a trigger event is fired
     */
    onTriggerField: function(calledOnAfterRender) {
        // scope on formField
        Tine.log.info('Trigger handler called for field "' + this.name + '".');
        
        if (! this.el && calledOnAfterRender) {
            return;
        }
        if (! this.el && ! calledOnAfterRender) {
            this.on('afterrender', Tine.widgets.dialog.MultipleEditDialogPlugin.prototype.onTriggerField.createDelegate(this, [true]));
            return;
        }
        
        var ar = this.el.parent().select('.tinebase-editmultipledialog-dirty');
        var originalValue = this.hasOwnProperty('startingValue') ? this.startingValue : this.originalValue,
            currentValue;
        
        if (this.isXType('datefield')) {
            currentValue = this.fullDateTime ? this.fullDateTime.format('Y-m-d H:i:s') : '';
        } else if (this.isXType('timefield')) {
            currentValue = this.fullDateTime;
        } else {
            currentValue = this.getValue();
        }
        
        Tine.log.info('Start value: "' + originalValue + '", current: "' + currentValue + '"');
        if ((Ext.encode(originalValue) != Ext.encode(currentValue)) || (this.cleared === true)) {  // if edited or cleared
            // Create or set arrow
            if (ar.elements.length > 0) {
                ar.setStyle('display','block');
            } else {
                var arrow = new Ext.Element(document.createElement('img'));
                arrow.set({
                    'src': Ext.BLANK_IMAGE_URL,
                    'class': 'tinebase-editmultipledialog-dirty',
                    'height': 5,
                    'width': 5
                });
                this.el.insertSibling(arrow);
            }
            // Set field
            this.edited = true;
            this.removeClass('tinebase-editmultipledialog-noneedit');
            
            // Set button
            if (this.multiButton) {
                this.multiButton.addClass('undo');
                this.multiButton.removeClass('hidden');
                this.multiButton.set({'ext:qtip': Ext.util.Format.htmlEncode(i18n._('Undo change for all selected records'))});
            }
        } else {    // If set back
            // Set arrow
            if (ar.elements.length > 0) {
                ar.setStyle('display','none');
            }
            // Set field
            this.edited = false;
            if (this.multi) {
                this.addClass('tinebase-editmultipledialog-noneedit');
            }
            
            // Set button
            if (this.multiButton) {
                this.multiButton.removeClass('undo');
                this.multiButton.addClass('hidden');
                this.multiButton.set({'ext:qtip': Ext.util.Format.htmlEncode(i18n._('Delete value from all selected records'))});
            }
        }
        this.fireEvent('fieldchange');
    },
    /**
     * waits until the dialog is rendered and fetches real records by the filter on filter selection
     */
    onRecordLoad : function() {
        // fetch records from server on filterselection to get the exact difference
        if (this.isFilterSelect && this.selectionFilter) {
            this.fetchRecordsOnLoad();
        } else {
            var records = [];
            Ext.each(this.selectedRecords, function(recordData, index) {
                records.push(new this.editDialog.recordClass(recordData));
            }, this);
            this.onRecordPrepare(records);
        }
    },
    
    /**
     * find out which fields have differences
     */
    onRecordPrepare: function(records) {
        Ext.each(this.handleFields, function(field) {
            var refData = false;
            Ext.each(records, function(record, index) {
                if (field.type == 'relation') {
                    this.setFieldValue(field, false);
                } else {
                    // the first record of the selected is the reference
                    if (index === 0) {
                        refData = record.get(field.recordKey);
                    }
                    if ((Ext.encode(record.get(field.recordKey)) != Ext.encode(refData))) {
                        this.interRecord.set(field.recordKey, '');
                        this.setFieldValue(field, false);
                        return false;
                    } else {
                        if (index == records.length - 1) {
                            this.interRecord.set(field.recordKey, refData);
                            this.setFieldValue(field, true);
                            return true;
                        }
                    }
                }
            }, this);
        }, this);
        
        // TODO: grantsProperty not handled here, not needed at the moment but sometimes, perhaps.
//        var cp = this.editDialog.recordClass.getMeta('containerProperty') ? this.editDialog.recordClass.getMeta('containerProperty') : 'container_id';
//        if (this.interRecord.get(cp) !== undefined) {
//            this.interRecord.set(cp, {account_grants: {editGrant: true}});
//        }
        this.interRecord.dirty = false;
        this.interRecord.modified = {};
        
        this.editDialog.window.setTitle(String.format(i18n._('Edit {0} {1}'), this.totalRecordCount, this.editDialog.i18nRecordsName));

        Tine.log.debug('loading of the following intermediate record completed:');
        Tine.log.debug(this.interRecord);
        
        this.editDialog.updateToolbars(this.interRecord, this.editDialog.recordClass.getMeta('containerProperty'));
        if (this.editDialog.tbarItems) {
            Ext.each(this.editDialog.tbarItems, function(item) {
                if (Ext.isFunction(item.setDisabled)) item.setDisabled(true);
                item.multiEditable = false;
            });
        }
        
        this.loadInterceptor();
        
        // some field sanitizing
        Ext.each(this.handleFields, function(field) {
            // handle TimeFields to set original value (not possible before)
            if (field.formField.isXType('timefield')) {
                var value = this.interRecord.get(field.key);
                if (value) {
                    field.formField.setValue(new Date(value));
                }
            }
            // handle DateTimeFields to set original value
            else if (field.formField.isXType('datetimefield')) {
                var value = this.interRecord.get(field.key);
                if (value) {
                    field.formField.setValue(Date.parseDate(value, Date.patterns.ISO8601Long));
                }
            }
        }, this);
        
        return false;
    },

    
    /**
     * Set field value
     * @param {Ext.form.Field} field
     * @param {Boolean} samevalue true, if value is the same of all records
     */
    setFieldValue: function(field, samevalue) {
        var ff = field.formField;
        
        ff.removeClass('x-form-empty-field');
        
        if (! samevalue) {  // The records does not have the same value on this field
            ff.addClass('tinebase-editmultipledialog-noneedit');
            ff.origAllowBlank = ff.allowBlank;
            ff.allowBlank = true;
            ff.multi = true;
            
            ff.setValue('');
            ff.originalValue = '';
            ff.clearInvalid();
            Ext.QuickTips.register({
                target: ff,
                dismissDelay: 30000,
                title: i18n._('Different Values'),
                text: i18n._('This field has different values. Editing this field will overwrite the old values.'),
                width: 200
            });
            
            if (ff.isXType('checkbox')) {
                this.wrapCheckbox(ff);
            } 
        } else { // All records have the same value on this field
            if (ff.isXType('checkbox')) {
                ff.originalValue = this.interRecord.get(ff.name);
                ff.setValue(this.interRecord.get(ff.name));
            } else if (ff.isXType('tinerecordpickercombobox')) {
                var val = this.interRecord.get(field.recordKey);
                if (val) {
                    if (!ff.isXType('addressbookcontactpicker')) {
                        ff.startRecord = new ff.recordClass(val);
                    } else {
                        ff.startRecord = val;
                    }
                }
            } else {
                ff.setValue(this.interRecord.get(field.recordKey));
            }
        }
        ff.edited = false;

        if (ff.isXType('checkbox')) {
            ff.on('check', function() {
                this.edited = (this.originalValue !== this.getValue());
            });
        }
    },
    
    /**
     * Wraps the checkbox with dirty colored span
     * @param {Ext.form.Field} checkbox
     */
    wrapCheckbox: function(checkbox) {
        if (checkbox.rendered !== true) {
            this.wrapCheckbox.defer(100, this, [checkbox]);
            return;
        }
        checkbox.getEl().wrap({tag: 'span', 'class': 'tinebase-editmultipledialog-dirtycheck'});
        checkbox.originalValue = null;
        checkbox.setValue(false);
    },
    
    findChangedFields: function() {
        this.changedFields = [];
        Ext.each(this.handleFields, function(field) {
            if (field.formField.edited === true) {
                this.changedFields.push(field);
            }
        }, this);
    },
    
    /**
     * is called when the form is submitted. only fieldvalues with edited=true are committed 
     * @return {Boolean}
     */
    onRecordUpdate: function() {
        if (!this.editDialog.isMultipleValid()) {
            Ext.MessageBox.alert(i18n._('Errors'), i18n._('Please fix the errors noted.'));
            Ext.each(this.handleFields, function(item) {
                if (item.activeError) {
                    if (!item.edited) item.activeError = null;
                }
            });
            return false;
        }
        
        
        this.changedHuman = '<br /><br /><ul>';
        var changes = [];
        
        Ext.each(this.changedFields, function(field) {
            var ff = field.formField,
                renderer = Ext.util.Format.htmlEncode;
                
            var label = ff.fieldLabel ? ff.fieldLabel : ff.boxLabel ? ff.boxLabel : ff.ownerCt.fieldLabel;
                    label = label ? label : ff.ownerCt.title;
                    
            changes.push({name: (field.type == 'relation') ? field.recordKey : ff.getName(), value: ff.getValue()});
                    
            this.changedHuman += '<li><span style="font-weight:bold">' + label + ':</span> ';
            if (ff.isXType('checkbox')) {
                    renderer = Tine.Tinebase.common.booleanRenderer;
                } else if (ff.isXType('tinedurationspinner')) {
                    renderer = Tine.Tinebase.common.minutesRenderer;
                }
                
                this.changedHuman += ff.lastSelectionText ? renderer(ff.lastSelectionText) : renderer(ff.getValue());
                this.changedHuman += '</li>';
        }, this);

        // cope with added relations
        if (this.editDialog.relationsPanel) {
            Ext.each(this.editDialog.relationsPanel.getData(), function (relation) {
                var rrc = Tine.Tinebase.data.RecordMgr.get(relation['related_model']),
                    rr = new rrc(relation['related_record']),
                    modelName = rrc.getRecordName(),
                    title = rr.getTitle(),
                    type = relation['type'] || " ";

                relation['own_id'] = "";
                relation['related_record'] = "";

                changes.push({name: '%add', value: Ext.encode(relation)});
                this.changedHuman += '<li><span style="font-weight:bold">' + String.format(i18n._('Add {0} Relation'), modelName) + ':</span> ';
                this.changedHuman += Ext.util.Format.htmlEncode(title);
                this.changedHuman += '</li>';
            }, this);
        }

        this.changedHuman += '</ul>';
        var filter = this.selectionFilter;
        if (changes.length > 0) {
            Ext.MessageBox.confirm(i18n._('Confirm'), String.format(i18n._('Do you really want to change these {0} records?') + this.changedHuman, this.totalRecordCount),
                function(_btn) {
                if (_btn == 'yes') {
                    Ext.MessageBox.wait(i18n._('Please wait'),i18n._('Applying changes'));
                    Ext.Ajax.request({
                        url: 'index.php',
                        timeout: 3600000, // 1 hour
                        params: {
                            method: 'Tinebase.updateMultipleRecords',
                            appName: this.editDialog.recordClass.getMeta('appName'),
                            modelName: this.editDialog.recordClass.getMeta('modelName'),
                            changes: changes,
                            filter: filter
                        },
                        success: function(_result, _request) {
                            Ext.MessageBox.hide();
                            var resp = Ext.decode(_result.responseText);
                            if (resp.failcount > 0) {
                                var window = Tine.widgets.dialog.MultipleEditResultSummary.openWindow({
                                    response: _result.responseText,
                                    appName: this.app.appName,
                                    recordClass: this.editDialog.recordClass
                                });
                                window.on('close', function() {
                                    this.editDialog.fireEvent('update');
                                    this.editDialog.onCancel();
                                }, this);
                            } else {
                                this.editDialog.fireEvent('update');
                                this.editDialog.onCancel();
                            }
                        },
                        failure : function(exception) {
                            Tine.Tinebase.ExceptionHandler.handleRequestException(exception, this.onUpdateFailure, this);
                        },
                        scope: this
                    });
                }
            }, this);
        } else {
            this.editDialog.onCancel();
        }
        return false;
    },
    
    /**
     * 
     * @param {} btn
     * @param {} dialog
     */
    onUpdateFailure: function(btn, dialog) {
        this.form.clear();
        this.onRecordLoad();
    },
    
    /**
     * fetch records from backend on selectionFilter
     */
    fetchRecordsOnLoad: function() {
        Tine.log.debug('Fetching additional records...');
        this.editDialog.recordProxy.searchRecords(this.selectionFilter, null, {
            scope: this,
            success: function(result) {
                this.onRecordPrepare.call(this, result.records);
            }
        });
    }
};

Ext.ComponentMgr.registerPlugin('multiple_edit_dialog', Tine.widgets.dialog.MultipleEditDialogPlugin);



/***/ }),
/* 1089 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.editDialog');

/**
 * @namespace   Tine.widgets.editDialog
 * @class       Tine.widgets.dialog.AddRelationsDialogPlugin
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * 
 * @plugin for Tine.widgets.editDialog
 */
Tine.widgets.dialog.AddRelationsEditDialogPlugin = function(config) {
    Ext.apply(this, config);
};

Tine.widgets.dialog.AddRelationsEditDialogPlugin.prototype = {
    /**
     * the recordClass of the calling component
     * @type {Ext.data.Record} recordClass
     */
    recordClass: null,
    
    /**
     * the editDialog the plugin is applied to
     * @type {Tine.widgets.dialog.EditDialog} editDialog
     */
    editDialog : null,
    
    /**
     * relations to add
     * @type {Array}
     */
    addRelations: null,
    
    /**
     * the selection filter
     * @type {Object} selectionFilter
     */
    selectionFilter: null,
    
    /**
     * the application name of the calling component
     * @type {String} callingApp
     */
    callingApp: null,
    
    /**
     * the model name of the calling component
     * @type {String} callingModel
     */
    callingModel: null,
    
    /**
     * the configuration for the relations
     * @type {Object} relationConfig
     */
    relationConfig: null,
    
    /**
     * the record proxy of the calling app
     * @type {Tine.Tinebase.data.RecordProxy} recordProxy
     */
    recordProxy: null,
    
    /**
     * initializes the plugin
     * @var {Tine.widgets.dialog.EditDialog} ed
     */    
    init: function(ed) {
        
        ed.on('load', function(editDialog, record, ticketFn) {
            this.interceptor = ticketFn();
            this.fetchRecords();
        }, this);
        
        Tine.log.info('Init plugin "Tine.widgets.dialog.AddRelationsDialogPlugin"...');
        // fetch default relation config is none is given
        this.relationConfig = this.relationConfig ? this.relationConfig : {};
        Ext.each(ed.app.getRegistry().get('relatableModels'), function(rc) {
            if(rc.relatedApp == this.callingApp && rc.relatedModel == this.callingModel) {
                Ext.applyIf(this.relationConfig, rc['default']);
                return false;
            }
        }, this);
        
        this.editDialog = ed;
        this.recordClass = Tine[this.callingApp].Model[this.callingModel];
        this.recordProxy = new Tine.Tinebase.data.RecordProxy({
            recordClass: this.recordClass
        });
    },
    
    /**
     * hook in after this.editDialog.initRecord
     */
    fetchRecords: function() {
        if(Ext.isBoolean(this.addRelations)) {
            Tine.log.debug('Fetching additional records...');
            this.recordProxy.searchRecords(this.selectionFilter, null, {
                scope: this,
                success: function(result) {
                    this.addRelationsOnLoad(result.records);
                }
            });
        } else {
            var records = [];
            Ext.each(this.addRelations, function(plainRecord) {
                records.push(this.recordProxy.recordReader({responseText: Ext.encode(plainRecord)}));
            }, this)
            this.addRelationsOnLoad(records);
        }
    },
    
    /**
     * adds the relations to the record
     * @param {Array} records
     */
    addRelationsOnLoad: function(records) {
        var ownIdProperty = this.editDialog.recordClass.getMeta('idProperty'),
            foreignIdProperty = this.recordClass.getMeta('idProperty');
        
        var existingRelations = this.editDialog.record.get('relations');
            existingRelations = Ext.isArray(existingRelations) ? existingRelations : [];
            
        var addRelations = [];
        
        Ext.each(records, function(record) {
            var add = true;
            Ext.each(existingRelations, function(existingRelation) {
                
                if((record.get(foreignIdProperty) == existingRelation.related_record[foreignIdProperty])) {
                    add = false;
                    return;
                }
            }, this);

            if(add) {
                if(record.data.hasOwnProperty('relations')) {
                    delete record.data.relations;
                }
                var relation = {
                    own_backend: "Sql",
                    related_degree: "sibling",
                    own_id: this.editDialog.record.get(ownIdProperty),
                    own_model: this.editDialog.app.name + '_Model_' + this.editDialog.recordClass.getMeta('modelName'),
                    related_backend: "Sql",
                    related_id: record.get(foreignIdProperty),
                    related_model: this.callingApp + '_Model_' + this.callingModel,
                    related_record: record.data,
                    remark: "",
                    type: ""
                };
                Ext.apply(relation, this.relationConfig);
                addRelations.push(relation);
            }
        }, this);
        
        Ext.each(existingRelations, function(existingRelation) {
            if (existingRelation.related_record.hasOwnProperty('relation')) {
                delete existingRelation.related_record.relation;
            }
        }, this);

        this.editDialog.record.set('relations', existingRelations.concat(addRelations));
        this.interceptor();
    }
};

Ext.ComponentMgr.registerPlugin('addrelations_edit_dialog', Tine.widgets.dialog.AddRelationsEditDialogPlugin);

/***/ }),
/* 1090 */
/***/ (function(module, exports) {


Ext.ns('Tine.widgets.dialog');

Tine.widgets.dialog.MultipleEditResultSummary = function(config) {
    
    Tine.widgets.dialog.MultiOptionsDialog.superclass.constructor.call(this, config);
    
    this.options = config.options || {};
    this.scope = config.scope || window;
};

/**
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.MultipleEditResultSummary
 * @extends     Ext.FormPanel
 */
Ext.extend(Tine.widgets.dialog.MultipleEditResultSummary, Ext.FormPanel, {
      
    layout : 'fit',
    border : false,      
    labelAlign : 'top',
    items: null,
    anchor : '100% 100%',
    
    /**
     * Store holding the Exceptions
     * @type Ext.Store
     */
    store: null,
    
    /**
     * Json Response from updateMultipleRecords
     * @type String
     */
    response: null,

    /**
     * The appname of the calling app
     * @type String 
     */
    appName: null,
    
    /**
     * The calling app
     * @type Tinebase.Application
     */
    app: null,
    
    /**
     * {Ext.data.Record} recordClass
     * record definition class  (required)
     */
    recordClass: null,
    
    initComponent: function() {
        this.response = Ext.decode(this.response);
        
        if (!this.app) {
            this.app = Tine.Tinebase.appMgr.get(this.appName);
        }
        
        // init some translations
        if (this.app.i18n && this.recordClass !== null) {
            this.i18nRecordName = this.app.i18n.n_hidden(this.recordClass.getMeta('recordName'), this.recordClass.getMeta('recordsName'), 1);
            this.i18nRecordsName = this.app.i18n._hidden(this.recordClass.getMeta('recordsName'));
        }
        
        // init actions
        this.initActions();
        // init buttons and tbar
        this.initButtons();
        
        this.initStore();
        
        // get items for this dialog
        this.items = this.getFormItems();
       
        Tine.widgets.dialog.MultipleEditResultSummary.superclass.initComponent.call(this);
    },
    
    /**
     * init actions
     */
    initActions: function() {
        this.action_update = new Ext.Action({
            text : i18n._('OK'),
            minWidth : 70,
            scope : this,
            handler : this.onCancel,
            iconCls : 'action_saveAndClose'
        });
    },
    
    initStore: function() {
        this.store = new Ext.data.JsonStore({
                mode: 'local',
                idProperty: 'id',
                fields: ['id', 'record','message'],
                sortInfo: {
                    field: 'record',
                    direction: 'ASC'
                }
            });
        this.store.loadData(this.response.exceptions);
    },
    
    /**
     * init buttons
     */
    initButtons : function() {
        this.fbar = [ '->', this.action_update ];
    },  
    
    /**
     * is called when the component is rendered
     * @param {} ct
     * @param {} position
     */
    onRender : function(ct, position) {
        Tine.widgets.dialog.MultipleEditResultSummary.superclass.onRender.call(this, ct, position);

        // generalized keybord map for edit dlgs
        var map = new Ext.KeyMap(this.el, [ {
            key : [ 10, 13 ], // ctrl + return
            ctrl : true,
            fn : this.onCancel,
            scope : this
        } ]);

    },
       
    /**
     * closes the window
     */
    onCancel: function() {
        this.fireEvent('cancel');
        this.purgeListeners();
        this.window.close();
    },    
    
    getFormItems: function() {
        if(this.items) return this.items;
        var allrecs = this.response.totalcount + this.response.failcount;
        
        var rn = (allrecs>1) ? this.i18nRecordsName : this.i18nRecordName;
        var summary = String.format( (allrecs>1) ? i18n._('You edited {0} {1}.') : i18n._('You edited {0} {1}.'), allrecs, rn);
        summary += '<br />';
        rn = (this.response.totalcount>1) ? this.i18nRecordsName : this.i18nRecordName;
        summary += String.format( (this.response.totalcount>1) ? i18n._('{0} {1} have been updated properly.') : i18n._('{0} {1} has been updated properly.'), this.response.totalcount, rn);
        summary += '<br />';
        rn = (this.response.failcount>1) ? this.i18nRecordsName : this.i18nRecordName;
        summary += String.format( (this.response.failcount>1) ? i18n._('{0} {1} have invalid data after updating. These {1} have not been changed.') : i18n._('{0} {1} has invalid data after updating. This {1} has not been changed.'), this.response.failcount, rn);
       
        return {
            border: false,
            cls : 'x-ux-display',
            layout: 'ux.display',
            
            frame: true,
            autoScroll: true,
            items: [
                {
                    height: 100,
                    border: false,
                    items: [{
                        hideLabel: true,
                        xtype: 'ux.displayfield',
                        value: summary,
                        htmlEncode: false,
                        style: 'padding: 0 5px; color: black',
                        cls: 'x-panel-mc'
                    }],
                    hideLabel: true,
                    ref: '../../summaryPanelInfo',
                    layout: 'ux.display',
                    layoutConfig: {
                        background: 'border'
                    }
                }, {
                    baseCls: 'ux-arrowcollapse',
                    cls: 'ux-arrowcollapse-plain',
                    collapsible: true,
                    hidden: false,
                    flex: 1,
                    title:'',
                    ref: '../../summaryPanelFailures',
                    items: [{
                        xtype: 'grid',
                        store: this.store,
                        autoHeight: true,
                        columns: [
                            { id: 'id', header: i18n._('Index'), width: 60, sortable: false, dataIndex: 'id', hidden: true},
                            { id: 'record', header: this.i18nRecordName, width: 160, sortable: true, dataIndex: 'record', renderer: function(value) {
                                return value.n_fn;
                            }},
                            { id: 'failure', header: i18n._('Failure'), width: 60, sortable: true, dataIndex: 'message'}
                        ],
                        autoExpandColumn: 'failure'
                    }]
                }
            ]
        };
    }

});


Tine.widgets.dialog.MultipleEditResultSummary.openWindow = function (config) {
    var window = Tine.WindowFactory.getWindow({
        width: 600,
        height: 450,
        modal: true,
        title: i18n._('Summary'),
        contentPanelConstructor: 'Tine.widgets.dialog.MultipleEditResultSummary',
        contentPanelConstructorConfig: config
    });
    return window;
};

/***/ }),
/* 1091 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.widgets.display');

/**
 * @class       Tine.widgets.display.RecordDisplayPanel
 * @namespace   Tine.widgets.display
 * @extends     Ext.ux.display.DisplayPanel
 *
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 *
 * Panel for displaying information of a singel record.
 */
Tine.widgets.display.RecordDisplayPanel = Ext.extend(Ext.ux.display.DisplayPanel, {

    /**
     * @cfg {Ext.data.Record} recordClass
     * record definition class
     */
    recordClass: null,

    /**
     * @property {String}
     */
    appName: null,
    /**
     * @property {String}
     */
    modelName: null,
    /**
     * @property {Tine.Tinebase.Application}
     */
    app: null,

    /* private */
    layout: 'fit',
    border: false,

    /**
     * initializes the component, builds this.fields, calls parent
     */
    initComponent: function() {
        this.appName = this.recordClass.getMeta('appName');
        this.modelName = this.recordClass.getMeta('modelName');

        this.app = Tine.Tinebase.appMgr.get(this.appName);

        var containerProperty = this.recordClass.getMeta('containerProperty');
        if (! this.containerRenderer && this.recordClass.hasField(containerProperty)) {
            this.containerRenderer = Tine.widgets.grid.RendererManager.get(this.appName, this.modelName, containerProperty, Tine.widgets.grid.RendererManager.CATEGORY_DISPLAYPANEL);
        }

        this.items = [{
            layout: 'vbox',
            border: false,
            layoutConfig: {
                align:'stretch'
            },
            items: [{
                layout: 'hbox',
                flex: 0,
                height: 16,
                border: false,
                style: 'padding-left: 5px; padding-right: 5px',
                layoutConfig: {
                    align:'stretch'
                },
                items: this.getHeadlineItems()
            }, {
                layout: 'hbox',
                flex: 1,
                border: false,
                layoutConfig: {
                    padding:'5',
                    align:'stretch'
                },
                defaults:{
                    margins:'0 5 0 0'
                },
                items: this.getBodyItems()
            }]
        }];

        Tine.widgets.display.RecordDisplayPanel.superclass.initComponent.call(this);
    },

    getHeadlineItems: function() {
        var headlineItems = [{
            flex: 0.5,
            xtype: 'ux.displayfield',
            name: this.recordClass.getMeta('titleProperty'),
            style: 'padding-top: 2px',
            cls: 'x-ux-display-header',
            htmlEncode: false,
            renderer: this.titleRenderer.createDelegate(this)
        }];

        if (this.recordClass.getMeta('containerProperty')) {
            headlineItems.push({
                flex: 0.5,
                xtype: 'ux.displayfield',
                style: 'text-align: right;',
                cls: 'x-ux-display-header',
                name: this.recordClass.getMeta('containerProperty'),
                htmlEncode: false,
                renderer: this.containerRenderer
            });
        }

        return headlineItems;
    },

    /**
     * @returns {Array.<*>}
     */
    getBodyItems: function() {
        var modelConfig = this.recordClass.getModelConfiguration(),
            typesToExclude = ['records'], // most likely never fetch from backend in any grid view!
            fieldsToExclude = ['alarms', 'tags', 'notes', 'attachments', 'relations', 'customfields',
                this.recordClass.getMeta('idProperty'),
                this.recordClass.getMeta('titleProperty'),
                this.recordClass.getMeta('containerProperty')
            ],
            fieldNames = this.recordClass.getFieldNames(),
            displayFields = [],
            displayAreas = [],
            textDisplayAreas = [],
            fieldDisplayArea = {
                flex: 1,
                layout: 'ux.display',
                labelWidth: 150,
                autoScroll: true,
                layoutConfig: {
                    background: 'solid'
                }
            };

        Ext.each(Tine.Tinebase.Model.genericFields, function(field) {fieldsToExclude.push(field.name)});

        Ext.each(fieldNames, function(fieldName) {
            var fieldDefinition = modelConfig.fields[fieldName],
                fieldType = fieldDefinition.type || 'textfield',
                field = {
                    xtype: 'ux.displayfield',
                    name: fieldDefinition.fieldName,
                    htmlEncode: false,
                    ctCls: 'tine-tinebase-recorddisplaypanel-displayfield',
                    fieldLabel: this.app.i18n._hidden(fieldDefinition.label || fieldDefinition.fieldName)
                };
            
            if (typesToExclude.indexOf(fieldDefinition.type) !== -1) {
                return;
            }

            if (fieldType === 'virtual') {
                field.fieldLabel = this.app.i18n._hidden(fieldDefinition.config.label);
                fieldType = fieldDefinition.config.type || 'textfield';
            }

            if (fieldsToExclude.indexOf(fieldDefinition.fieldName) < 0 && !fieldDefinition.shy) {
                if (fieldType === 'text') {
                    Ext.apply(field, {
                        flex: 1,
                        cls: 'x-ux-display-background-border',
                        xtype: 'ux.displaytextarea'
                    });
                    textDisplayAreas.push(field);
                } else if (fieldType === 'image') {
                    // should be the first area
                    displayAreas.unshift({
                        width: 90,
                        layout: 'ux.display',
                        layoutConfig: {
                            background: 'solid'
                        },
                        items: [{
                            xtype: 'ux.displayfield',
                            name: fieldDefinition.fieldName,
                            cls: 'preview-panel-image',
                            anchor: '100% 100%',
                            hideLabel: true,
                            htmlEncode: false,
                            // TODO move image renderer to Tinebase
                            //renderer: Tine.widgets.grid.RendererManager.get(this.appName, this.modelName,
                            // fieldDefinition.fieldName, Tine.widgets.grid.RendererManager.CATEGORY_DISPLAYPANEL)
                            renderer: Tine.widgets.grid.RendererManager.get('Addressbook', 'Addressbook_Model_Contact',
                                fieldDefinition.fieldName, Tine.widgets.grid.RendererManager.CATEGORY_DISPLAYPANEL)
                        }]
                    });
                } else {
                    var renderer = Tine.widgets.grid.RendererManager.get(this.appName, this.modelName,
                        fieldDefinition.fieldName, Tine.widgets.grid.RendererManager.CATEGORY_DISPLAYPANEL);
                    if (renderer) {
                        // in case a rendered value contains newlines, we convert them into <br />
                        field.renderer = function() {
                            let rendererValue = this.renderer.apply(this.me, arguments);
                            if (rendererValue && window.lodash.isString(rendererValue) && rendererValue.includes("\n")) {
                                return Ext.util.Format.nl2br(rendererValue);
                            } else {
                                return rendererValue;
                            }
                        }.bind({me: this, renderer: renderer})
                        
                    }
                    displayFields.push(field);
                }
            }
        }, this);

        // auto height
        this.defaultHeight = 25 +  displayFields.length * 18;

        fieldDisplayArea.items = displayFields;
        displayAreas.push(fieldDisplayArea);
        return displayAreas.concat(textDisplayAreas);
    },

    loadRecord: function(record) {
        this.record = record;
        this.supr().loadRecord.apply(this, arguments);
    },

    titleRenderer: function(title) {
        return this.record ? Tine.Tinebase.EncodingHelper.encode(this.record.getTitle()) : Tine.Tinebase.EncodingHelper.encode(title);
    }
});

Ext.reg('ux.displaypanel', Ext.ux.display.DisplayPanel);


/***/ }),
/* 1092 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.widgets.display');

/**
 * @class       Tine.widgets.display.DefaultDisplayPanel
 * @namespace   Tine.widgets.display
 * @extends     Ext.ux.display.DisplayPanel
 *
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 *
 * Panel for displaying default info.
 */
Tine.widgets.display.DefaultDisplayPanel = Ext.extend(Ext.ux.display.DisplayPanel, {

    /**
     * @cfg {Ext.data.Record} recordClass
     * record definition class
     */
    recordClass: null,

    /**
     * @property {String}
     */
    appName: null,
    /**
     * @property {String}
     */
    modelName: null,
    /**
     * @property {Tine.Tinebase.Application}
     */
    app: null,

    /* private */
    layout: 'fit',
    border: false,

    /**
     * initializes the component, builds this.fields, calls parent
     */
    initComponent: function() {
        this.appName = this.recordClass.getMeta('appName');
        this.modelName = this.recordClass.getMeta('modelName');

        this.app = Tine.Tinebase.appMgr.get(this.appName);

        this.items = [{
            layout: 'hbox',
            border: false,
            defaults:{margins:'0 5 0 0'},
            layoutConfig: {
                padding:'5',
                align:'stretch'
            },
            items: [{
                flex: 1,
                border: false,
                layout: 'ux.display',
                layoutConfig: {
                    background: 'solid',
                    declaration: this.recordClass.getRecordsName()
                }
            }]
        }];

        Tine.widgets.display.DefaultDisplayPanel.superclass.initComponent.call(this);
    }
});

Ext.reg('ux.displaypanel', Ext.ux.display.DisplayPanel);


/***/ }),
/* 1093 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <alex@stintzing.net>
 * @copyright   Copyright (c) 2009-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Ext.ux');

/**
 * @namespace   Ext.ux
 * @class       Ext.ux.TabPanelKeyPlugin
 * @author      Alexander Stintzing <alex@stintzing.net>
 */
Ext.ux.TabPanelKeyPlugin = function(config) {
    Ext.apply(this, config);
};

Ext.ux.TabPanelKeyPlugin.prototype = {
    panel : null,
        
    init : function(panel) {
        this.panel = panel;
        this.panel.on('afterrender', this.onRender, this);
        this.panel.on('add', this.onItemAdd, this);
    },
    
    /**
     * creates shortcuts for tabs
     */
    onRender: function() {
        
        if (! this.panel.rendered) {
            this.onRender.defer(250, this);
            return;
        }

        var tabCount = this.panel.items.length;
        
        for (var index = 0; index < tabCount; index++) {
            var item = this.panel.items.items[index];
            this.registerKeyMap(item, index);
        }
    },

    onItemAdd: function(panel, item, index) {
        this.registerKeyMap(item, index);
    },

    registerKeyMap: function(item, index, el) {
        el = el || Ext.getBody();

        if(item.disabled !== true) {
            new Ext.KeyMap(el, [{
                key: index + 49,
                ctrl: true,
                scope: this,
                fn: this.switchTab
            }]);
        }
    },

    /**
     * switch to tab
     * @param Integer code
     */
    switchTab: function(code) {
        var number = parseInt(code) - 49;
        if (this.panel) {
            this.panel.setActiveTab(number);
        }
    }
}

Ext.preg('ux.tabpanelkeyplugin', Ext.ux.TabPanelKeyPlugin);

/***/ }),
/* 1094 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.editDialog');

/**
 * Token Mode Edit Plugin
 * 
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.TokenModeEditDialogPlugin
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @constructor
 * @param {Object} config The configuration options.
 */
Tine.widgets.dialog.TokenModeEditDialogPlugin = function(config) {
    Ext.apply(this, config);
};

Tine.widgets.dialog.TokenModeEditDialogPlugin.prototype = {
    
    /**
     * @property app
     * @type Tine.Tinebase.Application
     */
    app : null,
    
    /**
     * @property editDialog
     * @type Tine.widgets.dialog.EditDialog
     */
    editDialog : null,
    
    /**
     * @property form
     * @type Ext.form.BasicForm
     */
    form : null,
    
    /**
     * @property inTokenMode
     * @type Boolean
     */
    inTokenMode: false,
    
    /**
     * @property selection
     * @type Array
     */
    selection: null,
    
    init : function(editDialog) {
        
        this.editDialog = editDialog;
        this.app = Tine.Tinebase.appMgr.get(this.editDialog.app);
        this.form = this.editDialog.getForm();
        
        if (this.editDialog.rendered) {
            this.onAfterRender();
        } else {
            this.editDialog.on('afterrender', this.onAfterRender, this);
        }
        
        this.editDialog.onRecordLoad = this.editDialog.onRecordLoad.createSequence(this.onRecordLoad, this);
    },
    
    onAfterRender: function() {
        this.editDialog.getEl().on('keydown', function (e) {
            if (e.ctrlKey && e.getKey() === e.T) {
                if (this.inTokenMode) {
                    this.endTokenMode();
                } else {
                    this.startTokenMode();
                }
            }
        }, this);
    },
    
    onRecordLoad: function() {
        if (this.inTokenMode) {
            // restart token mode defered to don't consume time before closeing
            this.startTokenMode.defer(100, this);
        }
    },
    
    startTokenMode: function() {
        this.initialize();
        
        if (this.inTokenMode) {
            this.endTokenMode();
        }
        
        this.inTokenMode = true;
        
        this.selection = [];
        
        this.form.items.each(function(item) {
            if (item instanceof Ext.form.TextField && ! item.disabled && ! item.forceSelection) {
                if (item.rendered) {
                    this.tokenizeField(item);
                } else {
                    item.on('render', this.tokenizeField, this);
                }
            }
        }, this);
    },
    
    endTokenMode: function() {
        if (this.inTokenMode) {
            this.inTokenMode = false;
            Ext.select('div[class^=tinebase-tokenedit-tokenbox]', this.editDialog.getEl()).remove();
            
            
            this.form.items.each(function(item) {
                item.un('render', this.tokenizeField, this);
                item.un('resize', this.syncFieldSize, this);
            }, this);
        }
    },
    
    initialize: function() {
        if (! this.isInitialized) {
            this.isInitialized = true;
            
            //this.editDialog.getEl().on('dblclick', this.endTokenMode, this);
            
            this.dragZone = new Ext.dd.DragZone(this.editDialog.getEl(), {
                getDragData: this.getDragData.createDelegate(this),
                getRepairXY: Ext.emptyFn
            });
            
            this.dropZone = new Ext.dd.DropZone(this.editDialog.getEl(), {
                onNodeOver: this.onNodeOver.createDelegate(this),
                onNodeDrop: this.onNodeDrop.createDelegate(this),
                getTargetFromEvent: this.getTargetFromEvent.createDelegate(this)
            });
            
            this.editDialog.getEl().on('mousedown', this.onClick, this);
        }
    },
    
    tokenizeField: function(field) {
        if (! this.inTokenMode || ! field.itemCt) {
            // token mode might be stopped in the meantime
            return;
        }
        
        var el = field.itemCt.insertFirst({
            'tag': 'div',
            'class': 'tinebase-tokenedit-tokenbox x-form-text' + (field instanceof Ext.form.TextArea ? ' tinebase-tokenedit-tokenbox-area' : '')
        });
        
        this.syncFieldSize(field);
        field.on('resize', this.syncFieldSize, this);
        
        var value = Ext.util.Format.htmlEncode(field.getValue());
        if (value) {
            value = value.replace(/\n/g, ' &#x21A9; ');
            
            var tokens = String(value).split(/\s+/);
            this.getTokenTpl().overwrite(el, tokens);
        }
    },
    
    syncFieldSize: function(field) {
        var el = field.itemCt.down('div[class^=tinebase-tokenedit-tokenbox]');
        
        el.setBox(field.el.getBox());
    },
    
    getTokenTpl: function() {
        if (! this.tokenTpl) {
            this.tokenTpl = new Ext.XTemplate(
                '<tpl for=".">',
                    '<span class="tinebase-tokenedit-token">{.}</span>',
                '</tpl>'
            ).compile();
        }
        
        return this.tokenTpl;
    },
    
    onClick: function(e) {
        
        if (this.processedEvent == e.browserEvent) {
            return;
        }
        
        this.processedEvent = e.browserEvent;
        
        var target = e.getTarget('.tinebase-tokenedit-token', 10, true);
        if (target) {
            if (e.ctrlKey) {
                if (this.selection.indexOf(target) < 0) {
                    this.selection.push(target);
                    target.addClass('tinebase-tokenedit-token-selected');
                } else {
                    this.selection.remove(target);
                    target.removeClass('tinebase-tokenedit-token-selected');
                }
            } else {
                Ext.each(this.selection, function(el) {
                    el.removeClass('tinebase-tokenedit-token-selected');
                }, this);
                this.selection = [target];
                target.addClass('tinebase-tokenedit-token-selected');
            }
        }
    },
    
    getDragData: function(e) {
        var target = e.getTarget('.tinebase-tokenedit-token', 10, true);
            
        if (target) {
            // autoselect token
            if (this.selection.indexOf(target) < 0) {
                this.onClick(e);
            }
            this.processedEvent = e.browserEvent;
            
            var ddel = new Ext.Element(document.createElement('div'));
            ddel.id = Ext.id();
            
            var sourceFields = [];
            
            Ext.each(this.selection, function(el) {
                sourceFields.push(Ext.getCmp(el.parent('div[class^=tinebase-tokenedit-tokenbox]').parent('div').child('*[id^=ext-comp]').id));
                
                var clone = el.dom.cloneNode(true);
                clone.id = Ext.id();
                ddel.appendChild(clone);
            }, this);
            
            return {
                ddel: ddel.dom,
                sourceFields: sourceFields
                
            }
        }
    },
    
    getTargetFromEvent: function(e) {
        var target = e.getTarget('.tinebase-tokenedit-tokenbox', 10, true);
        
        this.getPositionEl().setStyle('display', target ? 'inline-block' : 'none');
        return target;
    },
    
    onNodeOver: function(target, dd, e, data) {
        var tokens = target.query('.tinebase-tokenedit-token'),
            nextToken = null,
            nextTokenBox = null,
            eventXY = e.getXY();
        
        // find the 'nearest' other token
        Ext.each(tokens, function(el) {
            var token = Ext.get(el),
                box = token.getBox();
                
            var dx = eventXY[0] > box[0] ?
                Math.max(0, Math.min(eventXY[0] - box[0], eventXY[0] - box['right'])) :
                Math.max(0, Math.min(box[0] - eventXY[0], box['right'] - eventXY[0]));
                
            var dy = eventXY[1] > box[1] ?
                Math.max(0, Math.min(eventXY[1] - box[1], eventXY[1] - box['bottom'])) :
                Math.max(0, Math.min(box[1] - eventXY[1], box['bottom'] - eventXY[1]));
            
            token.distance = dx + dy;
            
            if (! nextToken || token.distance < nextToken.distance) {
                nextToken = token;
                nextTokenBox = box;
            }
        }, this);
        
        if (nextToken) {
            // show positioning symbol left or right to nearest token
            data.insertPosition = eventXY[0] > (nextTokenBox['x'] + nextTokenBox['width']/2) ? 'insertAfter' : 'insertBefore';
            
            this.getPositionEl()[data.insertPosition](nextToken);
        } else {
            target.insertFirst(this.getPositionEl());
        }
        
        // cache nextToken
        data.nextToken = nextToken;
        return Ext.dd.DropZone.prototype.dropAllowed;
    },
    
    onNodeDrop : function(target, dd, e, data) {
        var field = Ext.getCmp(target.up('div').child('*[id^=ext-comp]').id),
            positionEl = this.getPositionEl();
        
        positionEl.setStyle('display', 'none');
        
        Ext.each(this.selection, function(el) {
            el.insertBefore(positionEl);
        }, this);
        
        // update source and target fields
        Ext.each([field].concat(data.sourceFields), function(f) {
            var value = [];
            
            Ext.each(f.itemCt.query('.tinebase-tokenedit-token'), function(el) {
                value.push(el.innerHTML);
            }, this);
            
            value = value.join(' ');
            value = Ext.util.Format.htmlDecode(value.replace(/\s*\u21A9\s*/g, '\n'));
            
            f.setValue(value);
        }, this);
    },
    
    getPositionEl: function() {
        if (! this.positionEl) {
            this.positionEl = this.editDialog.getEl().createChild({
                'tag':  'span',
                'class': 'tinebase-tokenedit-position',
                'html' : '&nbsp;'
            });
        }
        
        return this.positionEl;
    }
};

/***/ }),
/* 1095 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.dialog');

/**
 * Wizard Panel
 * 
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.WizardPanel
 * @extends     Ext.Panel
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @constructor
 * @param {Object} config The configuration options.
 */
Tine.widgets.dialog.WizardPanel = Ext.extend(Ext.Panel, {
    
    // private config overrides
    cls: 'tw-editdialog',
    border: false,
    layout: 'card',
    activeItem: 0,
    
    /**
     * init this wizard
     */
    initComponent: function() {
        this.addEvents(
            /**
             * @event cancel
             * @desc Fired when user pressed cancel button
             * @param {WizardPanel} this
             * @parm {Ext.Panel} active panel
             */
            'cancel',
            
            /**
             * @event finish
             * @desc Fired when user pressed finish button
             * @param {WizardPanel} this
             * @parm {Ext.Panel} active panel
             */
            'finish'
        );
        
        this.initFooterBar();
        
        this.on('afterrender', this.onAfterRender, this);
        Tine.widgets.dialog.WizardPanel.superclass.initComponent.call(this);
    },
    
    /**
     * back button handler
     */
    onBackButton: function() {
        return Ext.isFunction(this.layout.activeItem.onBackButton) ?
            this.layout.activeItem.onBackButton() :
            this.navigate(-1);
    },
    
    /**
     * next button handler
     */
    onNextButton: function() {
        return Ext.isFunction(this.layout.activeItem.onNextButton) ?
            this.layout.activeItem.onNextButton() :
            this.navigate(+1);
    },
    
    /**
     * cancel button handler
     */
    onCancelButton: function() {
        if (Ext.isFunction(this.layout.activeItem.onCancelButton)) {
            return this.layout.activeItem.onCancelButton();
        }
        
        else {
            this.fireEvent('cancel', this, this.layout.activeItem);
        }
    },
    
    /**
     * finish button handler
     */
    onFinishButton: function() {
        if (Ext.isFunction(this.layout.activeItem.onFinishButton)) {
            return this.layout.activeItem.onFinishButton();
        }
        
        else {
            this.fireEvent('finish', this, this.layout.activeItem);
        }
    },
    
    /**
     * navigate to panel
     * 
     * @param {Number/String} ref
     */
    navigate: function(ref) {
        var currentIndex = this.items.indexOf(this.layout.activeItem),
            toActivatePanel = Ext.isNumber(ref) ? 
                this.items.get(currentIndex + ref) :
                this.items.get(ref);
        
        if (toActivatePanel) {
            this.layout.setActiveItem(toActivatePanel);
            toActivatePanel.doLayout();
        }
        
        this.manageButtons();
    },
    
    /**
     * manage footer buttons
     */
    manageButtons: function() {
        Ext.each(['back', 'next', 'cancel', 'finish'], function(key) {
            if (this[key + 'Button'] && Ext.isFunction(this[key + 'IsAllowed'])) {
                this[key + 'Button'].setDisabled(!this[key + 'IsAllowed']());
            }
        }, this);
    },
    
    /**
     * check if back button is allowed
     */
    backIsAllowed: function() {
        var panelCondition = Ext.isFunction(this.layout.activeItem.backIsAllowed) ?
            this.layout.activeItem.backIsAllowed() : true;
        
        return panelCondition && this.items.indexOf(this.layout.activeItem) > 0;
    },
    
    /**
     * check if next button is allowed
     */
    nextIsAllowed: function() {
        var panelCondition = Ext.isFunction(this.layout.activeItem.nextIsAllowed) ?
            this.layout.activeItem.nextIsAllowed() : true;
        
        return panelCondition && this.items.indexOf(this.layout.activeItem) < this.items.getCount() -1;
    },
    
    /**
     * check if cancel button is allowed
     */
    cancelIsAllowed: function() {
        var panelCondition = Ext.isFunction(this.layout.activeItem.cancelIsAllowed) ?
            this.layout.activeItem.cancelIsAllowed() : true;
        
        return panelCondition && true;
    },
    
    /**
     * check if finish button is allowed
     */
    finishIsAllowed: function() {
        var panelCondition = Ext.isFunction(this.layout.activeItem.finishIsAllowed) ?
            this.layout.activeItem.finishIsAllowed() : true;
        
        return panelCondition && this.items.indexOf(this.layout.activeItem) == this.items.getCount() -1;
    },
    
    /**
     * init footer bar
     */
    initFooterBar: function() {
        this.fbar = ['->',{
            text: i18n._('Back'),
            minWidth: 70,
            ref: '../backButton',
            iconCls: 'action_previous',
            scope: this,
            handler: this.onBackButton
        }, {
            text: i18n._('Next'),
            minWidth: 70,
            ref: '../nextButton',
            iconCls: 'action_next',
            scope: this,
            handler: this.onNextButton
        }, {
            text: i18n._('Cancel'),
            minWidth: 70,
            ref: '../cancelButton',
            iconCls: 'action_cancel',
            scope: this,
            handler: this.onCancelButton
        }, {
            text: i18n._('Finish'),
            minWidth: 70,
            ref: '../finishButton',
            iconCls: 'action_saveAndClose',
            scope: this,
            handler: this.onFinishButton
        }];
    },
    
    /**
     * called after this wizard is rendered
     */
    onAfterRender: function() {
        this.manageButtons();
    }
});

Ext.reg('tw-wizardpanel', Tine.widgets.dialog.WizardPanel);

/***/ }),
/* 1096 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Admin
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets', 'Tine.widgets.dialog');

/**
 * admin settings panel
 * 
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.AdminPanel
 * @extends     Tine.widgets.dialog.EditDialog
 * 
 * <p>Admin Panel</p>
 * <p><pre>
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.widgets.dialog.AdminPanel
 */
Tine.widgets.dialog.AdminPanel = Ext.extend(Tine.widgets.dialog.EditDialog, {
    /**
     * @private
     */
    appName: 'Admin',
    recordClass: Tine.Tinebase.Model.Config,
    evalGrants: false,
    
    //private
    initComponent: function(){
        this.record = new this.recordClass({
            id: this.appName
        });
        
        Tine.widgets.dialog.AdminPanel.superclass.initComponent.call(this);
    },
    
    /**
     * executed after record got updated from proxy
     */
    onRecordLoad: function() {
        // interrupt process flow until dialog is rendered
        if (! this.rendered) {
            this.onRecordLoad.defer(250, this);
            return;
        }
        
        this.window.setTitle(String.format(i18n._('Change settings for application {0}'), this.appName));
        
        if (this.fireEvent('load', this) !== false) {
            var settings = this.record.get('settings'),
                form = this.getForm();
            for (var setting in settings) {
                form.findField(setting).setValue(settings[setting]);
            }
        
            form.clearInvalid();
            
            this.loadMask.hide();
        }
    },
    
    /**
     * executed when record gets updated from form
     */
    onRecordUpdate: function() {
        // merge changes from form into settings
        var settings = this.record.get('settings'),
            form = this.getForm(),
            newSettings = {};

        for (var setting in settings) {
            newSettings[setting] = form.findField(setting).getValue();
        }
        
        this.record.set('settings', newSettings);
        
        // TODO update registry
    },
    
    /**
     * returns dialog
     * 
     * NOTE: when this method gets called, all initalisation is done.
     * 
     * @return {Object}
     * @private
     */
    getFormItems: function() {
        
        return {
            xtype: 'tabpanel',
            activeTab: 0,
            border: false,
            items: [{
                title: i18n._('Defaults'),
                autoScroll: true,
                border: false,
                frame: true,
                xtype: 'columnform',
                formDefaults: {
                    anchor: '90%',
                    labelSeparator: '',
                    columnWidth: 1
                },
                items: this.getConfigItems()
            }]
        };
    },
    
    /**
     * get config items
     * - overwrite this in subclasses
     * 
     * @return {Array}
     */
    getConfigItems: function() {
        return [];
    }
});


/***/ }),
/* 1097 */
/***/ (function(module, exports) {

/**
 * Tine 2.0
 * 
 * @package     Tine
 * @subpackage  Widgets
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * TODO         add general local + modal dialog (can be used here, in Tine.Courses.AddMemberDialog and ...)
 */

Ext.ns('Tine.widgets', 'Tine.widgets.dialog');

/**
 * Generic 'Credentials' dialog
 * 
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.CredentialsDialog
 * @extends     Tine.widgets.dialog.EditDialog
 * @constructor
 * @param       {Object} config The configuration options.
 */
Tine.widgets.dialog.CredentialsDialog = Ext.extend(Tine.widgets.dialog.EditDialog, {

    credentialsId: null,
    
    /**
     * @private
     */
    windowNamePrefix: 'CredentialsWindow_',
    loadRecord: false,
    tbarItems: [],
    evalGrants: false,
    sendRequest: true,
    mode: 'local',
    
    /**
     * returns dialog
     */
    getFormItems: function() {
        return {
            bodyStyle: 'padding:5px;',
            buttonAlign: 'right',
            labelAlign: 'top',
            border: false,
            layout: 'form',
            defaults: {
                xtype: 'textfield',
                anchor: '90%',
                listeners: {
                    scope: this,
                    specialkey: function(field, event) {
                        if (event.getKey() == event.ENTER) {
                            this.onApplyChanges();
                        }
                    }
                }
            },
            items: [{
                fieldLabel: i18n._('Username'),
                name: 'username',
                allowBlank: false
            },{
                fieldLabel: i18n._('Password'),
                name: 'password',
                inputType: 'password'
            }]
        };
    },
    
    /**
     * executed after record got updated from proxy
     * 
     * @private
     */
    onRecordLoad: function() {
        // interrupt process flow till dialog is rendered
        if (! this.rendered) {
            this.onRecordLoad.defer(250, this);
            return;
        }
        
        var title = this.windowTitle || this.app.i18n._('Please enter your credentials');
        this.window.setTitle(title);
        
        this.getForm().loadRecord(this.record);
        
        this.loadMask.hide();
    },
    
    /**
     * generic apply changes handler
     */
    onApplyChanges: function() {
        var form = this.getForm();
        if(form.isValid()) {
            var values = form.getValues();
            
            if (this.sendRequest) {
                this.loadMask.show();
                
                var params = {
                    method: this.appName + '.changeCredentials',
                    password: values.password,
                    username: values.username,
                    id: this.credentialsId
                };
                
                Ext.Ajax.request({
                    params: params,
                    scope: this,
                    success: function(_result, _request){
                        this.loadMask.hide();
                        this.fireEvent('update', _result);
                        this.purgeListeners();
                        this.window.close();
                    }
                });
            } else {
                this.fireEvent('update', values);
                this.window.close();
            }
            
        } else {
            Ext.MessageBox.alert(i18n._('Errors'), i18n._('Please fix the errors noted.'));
        }
    }
});

/**
 * credentials dialog popup / window
 */
Tine.widgets.dialog.CredentialsDialog.openWindow = function (config) {
    var window = Tine.WindowFactory.getWindow({
        width: 240,
        height: 180,
        name: Tine.widgets.dialog.CredentialsDialog.windowNamePrefix + Ext.id(),
        contentPanelConstructor: 'Tine.widgets.dialog.CredentialsDialog',
        contentPanelConstructorConfig: config,
        modal: true
    });
    return window;
};


/***/ }),
/* 1098 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @subpackage  widgets
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * @todo        add filter toolbar
 * @todo        use proxy store?
 */

Ext.ns('Tine.widgets', 'Tine.widgets.dialog');

/**
 * 'Edit Preferences' dialog
 *
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.Preferences
 * @extends     Ext.FormPanel
 * @constructor
 * @param       {Object} config The configuration options.
 */
Tine.widgets.dialog.Preferences = Ext.extend(Ext.FormPanel, {
    /**
     * @property {Locale.gettext} i18n
     */
    i18n: null,

    /**
     * @property {Tine.widgets.dialog.PreferencesCardPanel} prefsCardPanel
     */
    prefsCardPanel: null,
    
    /**
     * @property {Tine.widgets.dialog.PreferencesTreePanel} treePanel
     */
    treePanel: null,
    
    /**
     * @property {Object} prefPanels
     * here we store the pref panels for all apps
     */    
    prefPanels: {},

    /**
     * @property {boolean} adminMode
     * when adminMode is activated -> show defaults/forced values
     */    
    adminMode: false,

    /**
     * @property {Object} prefPanels
     * here we store the pref panels for all apps [admin mode]
     */    
    adminPrefPanels: {},
    
    /**
     * @cfg String  initialCardName to select after render
     */
    initialCardName: null,
    
    // private
    layout: 'fit',
    cls: 'tw-editdialog',
    anchor:'100% 100%',
    buttonAlign: 'right',
    border: false,
    
    //private
    initComponent: function(){
        this.addEvents(
            /**
             * @event cancel
             * Fired when user pressed cancel button
             */
            'cancel',
            /**
             * @event saveAndClose
             * Fired when user pressed OK button
             */
            'saveAndClose',
            /**
             * @event update
             * @desc  Fired when the record got updated
             * @param {Json String} data data of the entry
             */
            'update'
        );
        
        this.i18n = new Locale.Gettext();
        this.i18n.textdomain('Tinebase');

        this.initActions();
        this.initButtons();
        this.items = this.getItems();
        
        Tine.widgets.dialog.Preferences.superclass.initComponent.call(this);
    },
    
    /**
     * init actions
     * 
     * @todo only allow admin mode if user has admin right
     */
    initActions: function() {
        this.action_saveAndClose = new Ext.Action({
            text: i18n._('Ok'),
            minWidth: 70,
            scope: this,
            handler: this.onSaveAndClose,
            iconCls: 'action_saveAndClose'
        });
    
        this.action_cancel = new Ext.Action({
            text: i18n._('Cancel'),
            minWidth: 70,
            scope: this,
            handler: this.onCancel,
            iconCls: 'action_cancel'
        });

        this.action_switchAdminMode = new Ext.Action({
            text: i18n._('Admin Mode'),
            minWidth: 70,
            scope: this,
            handler: this.onSwitchAdminMode,
            iconCls: 'action_adminMode',
            enableToggle: true
        });
    },
    
    /**
     * init buttons
     * use preference settings for order of save and close buttons
     */
    initButtons: function () {
        this.buttons = [];
        
        this.buttons.push(this.action_cancel, this.action_saveAndClose);

        this.tbar = new Ext.Toolbar({
            items: [ this.action_switchAdminMode ]
        });
    },
    
    /**
     * returns dialog
     * 
     * NOTE: when this method gets called, all initalisation is done.
     */
    getItems: function() {
        this.prefsCardPanel = new Tine.widgets.dialog.PreferencesCardPanel({
            region: 'center'
        });
        this.treePanel = new Tine.widgets.dialog.PreferencesTreePanel({
            title: i18n._('Applications'),
            region: 'west',
            width: 200,
            border: false,
            frame: false,
            initialNodeId: this.initialCardName
        })
        return [{
            xtype: 'panel',
            autoScroll: true,
            border: false,
            frame: false,
            layout: 'border',
            items: [
                this.treePanel,
                this.prefsCardPanel
            ]
        }];
    },
    
    /**
     * @private
     */
    onRender: function (ct, position) {
        Tine.widgets.dialog.Preferences.superclass.onRender.call(this, ct, position);
        
        // recalculate height, as autoHeight fails for Ext.Window ;-(
        this.setHeight(Ext.fly(this.el.dom.parentNode).getHeight());
        
        this.window.setTitle(this.i18n._('Edit Preferences'));
        this.loadMask = new Ext.LoadMask(ct, {msg: i18n._('Loading ...')});
    },
    
    /**
     * @private
     */
    onCancel: function () {
        this.fireEvent('cancel');
        this.purgeListeners();
        this.window.close();
    },

    /**
     * @private
     * 
     * TODO check if this is working correctly
     */
    onDestroy: function(){
        // delete panels
        for (var panelName in this.adminPrefPanels) {
            if (this.adminPrefPanels.hasOwnProperty(panelName)) {
                if (this.adminPrefPanels[panelName] !== null) {
                    this.adminPrefPanels[panelName].destroy();
                    this.adminPrefPanels[panelName] = null;
                }
            }
        }
        for (panelName in this.prefPanels) {
            if (this.prefPanels.hasOwnProperty(panelName)) {
                if (this.prefPanels[panelName] !== null) {
                    this.prefPanels[panelName].destroy();
                    this.prefPanels[panelName] = null;
                }
            }
        }
        this.prefsCardPanel.destroy();
        this.prefsCardPanel = null;
        
        Tine.widgets.dialog.Preferences.superclass.onDestroy.apply(this, arguments);
    },
    
    /**
     * @private
     */
    onSaveAndClose: function(){
        this.onApplyChanges(true);
        this.fireEvent('saveAndClose');
    },
    
    /**
     * apply changes handler
     */
    onApplyChanges: function(closeWindow) {
        
        if (! this.isValid()) {
            Ext.MessageBox.alert(i18n._('Errors'), i18n._('You need to correct the red marked fields before config could be saved'));
            return;
        }
        
        this.loadMask.show();
        
        // get values from card panels
        var data = this.getValuesFromPanels();
        
        // save preference data
        Ext.Ajax.request({
            scope: this,
            params: {
                method: 'Tinebase.savePreferences',
                data: data,
                adminMode: (this.adminMode) ? 1 : 0
            },
            success: function(response) {
                this.loadMask.hide();
                
                // update registry
                this.updateRegistry(Ext.util.JSON.decode(response.responseText).results);
                
                if (closeWindow) {
                    this.purgeListeners();
                    this.window.close();
                }
            },
            failure: function (response) {
                Ext.MessageBox.alert(i18n._('Errors'), i18n._('Saving of preferences failed.'));
            }
        });
    },
    
    /**
     * check all panels if they are valid
     * 
     * @return {Boolean}
     */
    isValid: function() {
        var panel = {};
        var panelsToSave = (this.adminMode) ? this.adminPrefPanels : this.prefPanels;

        for (panelName in panelsToSave) {
            panel = panelsToSave[panelName];
            if (panel && typeof panel.isValid === 'function' && ! panel.isValid()) {
                return false;
            }
        }
        
        return true;
    },
    
    /**
     * get values from card panels
     * 
     * @return {Object} with form data
     */
    getValuesFromPanels: function() {
        var panel, data = {};
        var panelsToSave = (this.adminMode) ? this.adminPrefPanels : this.prefPanels;

        for (panelName in panelsToSave) {
            if (panelsToSave.hasOwnProperty(panelName)) {
                panel = panelsToSave[panelName];
                if (panel !== null) {
                    data[panel.appName] = {};
                    for (var j=0; j < panel.items.length; j++) {
                        var item = panel.items.items[j];
                        if (item && item.name) {
                            if (this.adminMode) {
                                // filter personal_only (disabled) items
                                if (! item.disabled) {
                                    data[panel.appName][item.prefId] = {value: item.getValue(), name: item.name};
                                    data[panel.appName][item.prefId].type = (Ext.getCmp(item.name + '_writable').getValue() == 1) ? 'default' : 'forced';
                                }
                            } else {
                                data[panel.appName][item.name] = {value: item.getValue()};
                            }
                        }
                    }
                }
            }
        }
        
        return data;
    },
    
    /**
     * update registry after saving of prefs
     * 
     * @param {Object} data
     */
    updateRegistry: function(data) {
        for (application in data) {
            if (data.hasOwnProperty(application)) {
                appPrefs = data[application];
                var registryValues = Tine[application].registry.get('preferences');
                var changed = false;
                for (var i=0; i < appPrefs.length; i++) {
                    if (registryValues.get(appPrefs[i].name) != appPrefs[i].value) {
                        registryValues.replace(appPrefs[i].name, appPrefs[i].value);
                        changed = true;
                    }
                }
                
                if (changed) {
                    Tine[application].registry.replace('preferences', registryValues);
                }
            }
        }
    },
    
    /**
     * onSwitchAdminMode
     * 
     * @private
     * 
     * @todo enable/disable apps according to admin right for applications
     */
    onSwitchAdminMode: function(button, event) {
        this.adminMode = (!this.adminMode);
        
        if (this.adminMode) {
            this.prefsCardPanel.addClass('prefpanel_adminMode');
        } else {
            this.prefsCardPanel.removeClass('prefpanel_adminMode');
        }
        
        // activate panel in card panel
        var selectedNode = this.treePanel.getSelectionModel().getSelectedNode();
        if (selectedNode) {
            this.showPrefsForApp(this.treePanel.getSelectionModel().getSelectedNode().id);
        }
        
        this.treePanel.checkGrants(this.adminMode);
    },

    /**
     * init app preferences store
     * 
     * @param {String} appName
     * 
     * @todo use generic json backend here?
     */
    initPrefStore: function(appName) {
        this.loadMask.show();
        
        // set filter to get only default/forced values if in admin mode
        var filter = (this.adminMode) ? [{field: 'account', operator: 'equals', value: {accountId: 0, accountType: 'anyone'}}] : '';
        
        var store = new Ext.data.JsonStore({
            fields: Tine.Tinebase.Model.Preference,
            baseParams: {
                method: 'Tinebase.searchPreferencesForApplication',
                applicationName: appName,
                filter: filter
            },
            listeners: {
                load: this.onStoreLoad,
                scope: this
            },
            root: 'results',
            totalProperty: 'totalcount',
            id: 'id',
            remoteSort: false
        });
        
        store.load();
    },

    /**
     * called after a new set of preference Records has been loaded
     * 
     * @param  {Ext.data.Store} this.store
     * @param  {Array}          loaded records
     * @param  {Array}          load options
     */
    onStoreLoad: function(store, records, options) {
        var appName = store.baseParams.applicationName;
        
        var card = new Tine.widgets.dialog.PreferencesPanel({
            prefStore: store,
            appName: appName,
            adminMode: this.adminMode
        });
        
        card.on('change', function(appName) {
            // mark card as changed in tree
            var node = this.treePanel.getNodeById(appName);
            node.setText(node.text + '*');
        }, this);
        
        // add to panel registry
        if (this.adminMode) {
            this.adminPrefPanels[appName] = card;
        } else {
            this.prefPanels[appName] = card;
        }
        
        this.activateCard(card, false);
        this.loadMask.hide();
    },
    
    /**
     * activateCard in preferences panel
     * 
     * @param {Tine.widgets.dialog.PreferencesPanel} panel
     * @param {boolean} exists
     */
    activateCard: function(panel, exists) {
        if (!exists) {
            this.prefsCardPanel.add(panel);
            this.prefsCardPanel.layout.container.add(panel);
        }
        this.prefsCardPanel.layout.setActiveItem(panel.id);
        panel.doLayout();
    },
    
    /**
     * showPrefsForApp 
     * - check stores (create new store if not exists)
     * - activate pref panel for app
     * 
     * @param {String} appName
     */
    showPrefsForApp: function(appName) {
        
        // TODO: invent panel hooking approach here
        if (appName === 'Tinebase.UserProfile') {
            
            if (! this.prefPanels[appName]) {
                this.prefPanels[appName] = new Tine.Tinebase.UserProfilePanel({
                    appName: appName
                });
                this.activateCard(this.prefPanels[appName], false);
            } 
        }
            
        var panel = (this.adminMode) ? this.adminPrefPanels[appName] : this.prefPanels[appName];

        if (!this.adminMode) {
            // check grant for pref and enable/disable button
            this.action_switchAdminMode.setDisabled(!Tine.Tinebase.common.hasRight('admin', appName));
        }
        
        // check stores/panels
        if (!panel) {
            // add new card + store
            this.initPrefStore(appName);
        } else {
            this.activateCard(panel, true);
        }
    }
});

/**
 * Timetracker Edit Popup
 */
Tine.widgets.dialog.Preferences.openWindow = function (config) {
    var window = Tine.WindowFactory.getWindow({
        width: 800,
        height: 470,
        name: 'Preferences',
        contentPanelConstructor: 'Tine.widgets.dialog.Preferences',
        contentPanelConstructorConfig: config
    });
    return window;
};


/***/ }),
/* 1099 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @subpackage  widgets
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * @todo        create generic app tree panel?
 * @todo        add button: set default value(s)
 */

Ext.ns('Tine.widgets', 'Tine.widgets.dialog');

/**
 * preferences application tree panel
 * 
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.PreferencesTreePanel
 * @extends     Ext.tree.TreePanel
 */
Tine.widgets.dialog.PreferencesTreePanel = Ext.extend(Ext.tree.TreePanel, {

    /**
     * @cfg String  initialNodeId to select after render
     */
    initialNodeId: null,
    
    // presets
    iconCls: 'x-new-application',
    rootVisible: true,
    border: false,
    autoScroll: true,
    bodyStyle: 'background-color:white',
    
    /**
     * initComponent
     * 
     */
    initComponent: function(){
        
        Tine.widgets.dialog.PreferencesTreePanel.superclass.initComponent.call(this);
        
        this.initTreeNodes();
        this.initHandlers();
        this.selectInitialNode.defer(200, this);
    },

    /**
     * select initial node
     */
    selectInitialNode: function() {
        var initialNode = (this.initialNodeId !== null) ? this.getNodeById(this.initialNodeId) : this.getRootNode();
        this.fireEvent('click', initialNode);
    },
    
    /**
     * initTreeNodes with Tinebase and apps prefs
     * 
     * @private
     */
    initTreeNodes: function() {
        
        // general preferences are tree root
        var treeRoot = new Ext.tree.TreeNode({
            text: i18n._('General Preferences'),
            id: 'Tinebase',
            draggable: false,
            allowDrop: false,
            expanded: true
        });
        this.setRootNode(treeRoot);
        
        // add all apps
        var allApps = Tine.Tinebase.appMgr.getAll();

        // sort nodes by translated title (text property)
//        new Ext.tree.TreeSorter(this, {
//            folderSort: true,
//            dir: "asc"
//        });

        // add "My Profile"
        if (Tine.Tinebase.common.hasRight('manage_own_profile', 'Tinebase')) {
            var profileNode = new Ext.tree.TreeNode({
                text: i18n._('My Profile'),
                cls: 'file',
                iconCls: 'tinebase-accounttype-user',
                id: 'Tinebase.UserProfile',
                leaf: null
            });
            treeRoot.appendChild(profileNode);
        }
        
        // console.log(allApps);
        allApps.each(function(app) {
            if (app && Ext.isFunction(app.getTitle)) {
                
                var node = new Ext.tree.TreeNode({
                    text: app.getTitle(),
                    cls: 'file',
                    id: app.appName,
                    iconCls: app.getIconCls('PreferencesTreePanel'),
                    leaf: null
                });
        
                treeRoot.appendChild(node);
            }
        }, this);
    },
    
    /**
     * initTreeNodes with Tinebase and apps prefs
     * 
     * @private
     */
    initHandlers: function() {
        this.on('click', function(node){
            // note: if node is clicked, it is not selected!
            node.getOwnerTree().selectPath(node.getPath());
            node.expand();
            
            // get parent pref panel
            var parentPanel = this.findParentByType(Tine.widgets.dialog.Preferences);

            // add panel to card panel to show prefs for chosen app
            parentPanel.showPrefsForApp(node.id);
            
        }, this);
        
        this.on('beforeexpand', function(_panel) {
            if(_panel.getSelectionModel().getSelectedNode() === null) {
                _panel.expandPath('/Tinebase');
                _panel.selectPath('/Tinebase');
            }
            _panel.fireEvent('click', _panel.getSelectionModel().getSelectedNode());
        }, this);
    },

    /**
     * check grants for tree nodes / apps
     * 
     * @param {Bool} adminMode
     */
    checkGrants: function(adminMode) {
        var root = this.getRootNode();
                
        root.eachChild(function(node) {
            // enable or disable according to admin rights / admin mode
            if (!Tine.Tinebase.common.hasRight('admin', node.id) && adminMode) {
                node.disable();
            } else {
                node.enable();
            }
        });
    }
});


/***/ }),
/* 1100 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @subpackage  widgets
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * TODO         add pref description to input fields
 */

Ext.ns('Tine.widgets', 'Tine.widgets.dialog');

/**
 * preferences card panel
 * -> this panel is filled with the preferences subpanels containing the pref stores for the apps
 * 
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.PreferencesCardPanel
 * @extends     Ext.Panel
 */
Tine.widgets.dialog.PreferencesCardPanel = Ext.extend(Ext.Panel, {
    
    //private
    layout: 'card',
    border: false,
    frame: true,
    labelAlign: 'top',
    autoScroll: true,
    defaults: {
        anchor: '100%'
    },
    
    initComponent: function() {
        this.title = i18n._('Preferences');
        Tine.widgets.dialog.PreferencesCardPanel.superclass.initComponent.call(this);
    }
});

/**
 * preferences panel with the preference input fields for an application
 * 
 * @todo add checkbox type
 */
Tine.widgets.dialog.PreferencesPanel = Ext.extend(Ext.Panel, {
    
    /**
     * the prefs store
     * @cfg {Ext.data.Store}
     */
    prefStore: null,
    
    /**
     * @cfg {String} appName
     */
    appName: 'Tinebase',

    /**
     * @cfg {Boolean} adminMode activated?
     */
    adminMode: false,
    
    //private
    layout: 'form',
    border: true,
    labelAlign: 'top',
    autoScroll: true,
    defaults: {
        anchor: '95%',
        labelSeparator: ''
    },
    bodyStyle: 'padding:5px',
    
    /**
     * init component
     * @private
     */
    initComponent: function() {
        
        this.addEvents(
            /**
             * @event change
             * @param appName
             * Fired when a value is changed
             */
            'change'
        );
        
        if (this.prefStore && this.prefStore.getCount() > 0) {
            Tine.log.debug('Tine.widgets.dialog.PreferencesPanel::initComponent() -> Adding pref items from store:');
            Tine.log.debug(this.prefStore);
            
            this.items = [];
            this.prefStore.each(function(pref) {
                // check if options available -> use combobox or textfield
                var fieldDef = {
                    fieldLabel: pref.get('label'),
                    name: pref.get('name'),
                    value: pref.get('value'),
                    listeners: {
                        scope: this,
                        change: function(field, newValue, oldValue) {
                            // fire change event
                            this.fireEvent('change', this.appName);
                        }
                    },
                    prefId: pref.id,
                    description: pref.get('description')
                };
                
                var options = pref.get('options');
                // NOTE: some prefs have no default and only one option (e.g. std email account)
                if (options.length > 1 || (options.length == 1 && options[0][0] !== '_default_')) {
                    if (pref.get('uiconfig') && pref.get('uiconfig').xtype) {
                        // TODO support admin mode / currently this is personal_only
                        Ext.apply(fieldDef, {
                            xtype: pref.get('uiconfig').xtype,
                            recordClass: Tine[pref.get('uiconfig').appName].Model[pref.get('uiconfig').model],
                            value: pref.get('value') === '_default_' ? [] : pref.get('value'),
                        });
                    } else {
                        Ext.apply(fieldDef, {
                            xtype: (this.adminMode ? 'lockCombo' : 'combo'),
                            store: pref.get('options'),
                            mode: 'local',
                            forceSelection: true,
                            allowBlank: false,
                            triggerAction: 'all'
                        });
                    }
                } else {
                    Ext.apply(fieldDef, {
                        xtype: (this.adminMode ? 'lockTextfield' : 'textfield'),
                        defaultValue: (options[0] && options[0][1]) ? options[0][1] : '',
                        isValid: function() {
                            // crude hack to guess type (prefs need DTD)
                            var type = this.defaultValue.match(/\(([0-9]*)\)$/) ? 'int' : 'string',
                                value = this.getValue();
                            
                            // default is always valid
                            if (value == '_default_') {
                                return true;
                            }
                            
                            if (type == 'int') {
                                return !! String(value).match(/^\d+$/);
                            }
                            
                            return true;
                        },
                        setValue: function(v) {
                            v = v == '_default_' ? this.defaultValue : v;
                            Ext.form.TextField.prototype.setValue.call(this, v);
                        },
                        getValue: function() {
                            var value = Ext.form.TextField.prototype.getValue.call(this);
                            return value == this.defaultValue ? '_default_' : value;
                        },
                        postBlur: function() {
                            var value = this.getValue();
                            if (value === '') {
                                this.setValue('_default_');
                            }
                        }
                    });
                }
                
                if (this.adminMode) {
                    // set lock (value forced => hiddenFieldData = '0')
                    fieldDef.hiddenFieldData = (pref.get('type') == 'forced') ? '0' : '1';
                    fieldDef.hiddenFieldId = pref.get('name') + '_writable';
                    // disable personal only fields (not quite sure why we get a string here in personal_only field)
                    fieldDef.disabled = (pref.get('personal_only') === '1' || pref.get('personal_only') === true);
                } else {
                    fieldDef.disabled = (pref.get('type') == 'forced' || pref.get('locked') == true);
                }
                
                try {
                    var fieldObj = Ext.ComponentMgr.create(fieldDef);
                    this.items.push(fieldObj);

                    // ugh a bit ugly
                    // what does that do??
                    pref.fieldObj = fieldObj;
                } catch (e) {
                    Tine.log.debug(e);
                    Tine.log.error('Unable to create preference field "' + pref.get('name') + '". Check definition!');
                    this.prefStore.remove(pref);
                }
            }, this);

        } else {
            this.html = '<div class="x-grid-empty">' + i18n._('There are no preferences for this application.') + "</div>";
        }
        
        Ext.QuickTips.init();

        Tine.widgets.dialog.PreferencesPanel.superclass.initComponent.call(this);
    },
    
    /**
     * afterRender -> adds qtips to all elements
     * 
     * @private
     * 
     * @todo add qtip to label as well
     */
    afterRender: function() {
        Tine.widgets.dialog.PreferencesPanel.superclass.afterRender.call(this);
        
        // NOTE: server side translations have problems with quotes. Preferences with quotes
        //       in their description don't get translated. Thus we (re) translate them here
        //       as the js translations are much better
        var app = Tine.Tinebase.appMgr.get(this.appName),
            gt  = app ? app.i18n._.createDelegate(app.i18n) : i18n._.createDelegate(i18n);
        
        if (this.items && this.items.items) {
            for (var i=0; i < this.items.items.length; i++) {
                var field = this.items.items[i];
                Ext.QuickTips.register({
                    target: field,
                    dismissDelay: 30000,
                    title: Ext.util.Format.htmlEncode(gt(field.fieldLabel)),
                    text: Ext.util.Format.htmlEncode(gt(field.description)),
                    width: 200
                });
            }
        }
    },
    
    /**
     * check validity for all panel items
     * 
     * @return {Boolean}
     */
    isValid: function() {
        var isValid = true;
        
        if (this.items && this.items.items) {
            var field;
            for (var i=0; i < this.items.items.length; i++) {
                field = this.items.items[i];
                if (! field.isValid()) {
                    field.markInvalid();
                    isValid = false;
                }
            }
        }
        
        return isValid;
    }
});


/***/ }),
/* 1101 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.dialog');

/**
 * Generic 'Import' dialog
 *
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.ImportDialog
 * @extends     Tine.widgets.dialog.EditDialog
 * @constructor
 * @param       {Object} config The configuration options.
 * 
 * TODO add app grid to show results when dry run is selected
 */
Tine.widgets.dialog.ImportDialog = Ext.extend(Tine.widgets.dialog.WizardPanel, {
    /**
     * @cfg {String} appName (required)
     */
    appName: null,
    
    /**
     * @cfg {String} modelName (required)
     */
    modelName: null, 
    
    /**
     * @cfg {String} defaultImportContainer
     */
    defaultImportContainer: null,
    
    /**
     * @property allowedFileExtensions
     * @type Array
     */
    allowedFileExtensions: null,
    
    /**
     * @property recordClass
     * @type Tine.Tinebase.data.Record
     */
    recordClass: null,
    
    /**
     * @property definitionsStore
     * @type Ext.data.JsonStore
     */
    definitionsStore: null,
    
    /**
     * @property selectedDefinition
     * @type Ext.data.Record
     */
    selectedDefinition: null,
    
    /**
     * @property exceptionStore
     * @type Ext.data.JsonStore
     */
    exceptionStore: null,
    
    /**
     * @property lastImportResponse
     * @type Objcet resutls of the last import request
     */
    lastImportResponse: null,

    /**
     * canonical name
     * @cfg {String} canonicalName
     */
    canonicalName: 'ImportDialog',

    // private config overrides
    windowNamePrefix: 'ImportWindow_',

    /**
     * init import wizard
     */
    initComponent: function() {

        Tine.log.debug('Tine.widgets.dialog.ImportDialog::initComponent this');
        Tine.log.debug(this);

        this.app = Tine.Tinebase.appMgr.get(this.appName);
        this.recordClass = Tine.Tinebase.data.RecordMgr.get(this.appName, this.modelName);

        this.allowedFileExtensions = [];

        // init definitions
        this.definitionsStore = new Ext.data.JsonStore({
            fields: Tine.Tinebase.Model.ImportExportDefinition,
            root: 'results',
            totalProperty: 'totalcount',
            remoteSort: false
        });

        if (Tine[this.appName].registry.get('importDefinitions')) {
            Ext.each(Tine.widgets.importAction.getImports(this.recordClass), function(defData) {
                var options = defData.plugin_options,
                    extension = options ? options.extension : null;
                
                defData.label = this.app.i18n._hidden(options && options.label ? options.label : defData.name);
                
                if (this.allowedFileExtensions.indexOf(extension) == -1) {
                    this.allowedFileExtensions = this.allowedFileExtensions.concat(extension);
                }
                
                this.definitionsStore.addSorted(new Tine.Tinebase.Model.ImportExportDefinition(defData, defData.id));
            }, this);
            this.definitionsStore.sort('label');
        }
        if (! this.selectedDefinition) {
            var defaultConfig = Tine[this.appName].registry.get('defaultImportDefinition'),
                defaultExists = defaultConfig && this.definitionsStore.getById(defaultConfig.id);

            this.selectedDefinition = defaultExists ?
                this.definitionsStore.getById(defaultConfig.id) :
                this.definitionsStore.getAt(0);
        }

        // init exception store
        this.exceptionStore = new Ext.data.JsonStore({
            mode: 'local',
            idProperty: 'index',
            fields: ['index', 'code', 'message', 'exception', 'resolveStrategy', 'resolvedRecord', 'isResolved']
        });

        this.items = this.getItems();

        Tine.widgets.dialog.ImportDialog.superclass.initComponent.call(this);
    },

    /**
     * returns canonical path part
     * @returns {string}
     */
    getCanonicalPathSegment: function () {
        if (this.recordClass) {
            return ['',
                this.recordClass.getMeta('appName'),
                this.canonicalName,
                this.recordClass.getMeta('modelName'),
            ].join(Tine.Tinebase.CanonicalPath.separator);
        }
    },

    getItems: function() {
        return [
            this.getFilePanel(),
            this.getOptionsPanel(),
            this.getConflictsPanel(),
            this.getSummaryPanel()
        ];
    },
    
    /**
     * close window on cancel
     */
    onCancelButton: function() {
        this.fireEvent('cancel', this, this.layout.activeItem);
        this.window.close();
    },

    /**
     * do import request
     * 
     * @param {Function} callback
     * @param {Object}   importOptions
     */
    doImport: function(callback, importOptions, clientRecordData) {
        Ext.Ajax.request({
            scope: this,
            timeout: 1800000, // 30 minutes
            callback: this.onImportResponse.createDelegate(this, [callback], true),
            params: {
                method: this.appName + '.import' + this.recordClass.getMeta('modelName')  + 's',
                tempFileId: this.uploadButton.getTempFileId(),
                definitionId: this.definitionCombo.getValue(),
                importOptions: Ext.apply({
                    container_id: this.containerCombo ? this.containerCombo.getValue() : null,
                    autotags: this.tagsPanel.getFormField().getValue()
                }, importOptions || {}),
                clientRecordData: clientRecordData
            }
        });
    },
    
    /**
     * called when import request sends response
     * 
     * @param {Object}   request
     * @param {Boolean}  success
     * @param {Object}   response
     * @param {Function} callback
     */
    onImportResponse: function(request, success, response, callback) {
        response = Ext.util.JSON.decode(response.responseText);
        
        Tine.log.debug('Tine.widgets.dialog.ImportDialog::onImportResponse server response');
        Tine.log.debug(response);
        
        this.lastImportResponse = response;

        if (success) {
            // load exception store
            this.exceptionStore.loadData(response.exceptions);
            this.exceptionStore.filterBy(this.exceptionStoreFilter, this);

            if (this.exceptionStore.getCount()) {
                this.loadConflict(0);
            }

            // finally apply callback
            if (Ext.isFunction(callback)) {
                callback.call(this, request, success, response);
            }
        } else {
            this.checkMask.hide();
            Tine.Tinebase.ExceptionHandler.handleRequestException(response.data);
        }
    },
    
    exceptionStoreFilter: function(record, id) {
        return record.get('code') == 629 && ! record.get('isResolved');
    },
    
    /********************************************************** FILE PANEL **********************************************************/
    
    /**
     * returns the file panel of this wizard (step 1)
     * 
     * @TODO restrict allowed extensions on definition selection OR
     *       restirct allowed definitions on file selection
     */
    getFilePanel: function() {
        if (this.filePanel) {
            return this.filePanel;
        }
        
        var def = this.selectedDefinition,
            description = def ? this.app.i18n._hidden(def.get('description')) : '',
            options = def ? def.get('plugin_options') : null,
            example = options && options.example ? options.example : '';
            
        return {
            title: i18n._('Choose File and Format'),
            layout: 'vbox',
            border: false,
            xtype: 'ux.displaypanel',
            frame: true,
            ref: '../filePanel',
            canonicalName: 'ImportFileAndFormat',
            items: [{
                xtype: 'panel',
                baseCls: 'ux-subformpanel',
                title: i18n._('Choose Import File'),
                height: 100,
                items: [{
                    xtype: 'label',
                    html: '<p>' + i18n._('Please choose the file that contains the records you want to add to Tine 2.0').replace(/Tine 2\.0/g, Tine.title) + '</p><br />'
                }, {
                    xtype: 'tw.uploadbutton',
                    ref: '../../uploadButton',
                    text: String.format(i18n._('Select file containing your {0}'), this.recordClass.getRecordsName()),
                    handler: this.onFileReady,
                    allowedTypes: this.allowedFileExtensions,
                    scope: this
                }]
            }, {
                xtype: 'panel',
                baseCls: 'ux-subformpanel',
                title: i18n._('What should the file you upload look like?'),
                flex: 1,
                items: [/*{
                    xtype: 'label',
                    cls: 'tb-login-big-label',
                    html: i18n._('What should the file you upload look like?') + '<br />'
                },*/ {
                    xtype: 'label',
                    html: '<p>' + i18n._('Tine 2.0 does not understand all kind of files you might want to upload. You will have to manually adjust your file so Tine 2.0 can handle it.').replace(/Tine 2\.0/g, Tine.title) + '</p><br />'
                }, {
                    xtype: 'label',
                    html: '<p>' + i18n._('Following you find a list of all supported import formats and a sample file, how Tine 2.0 expects your file to look like.').replace(/Tine 2\.0/g, Tine.title) + '</p><br />'
                }, {
                    xtype: 'label',
                    html: '<p>' + i18n._('Please select the import format of the file you want to upload').replace(/Tine 2\.0/g, Tine.title) + '</p>'
                }, {
                    xtype: 'combo',
                    ref: '../../definitionCombo',
                    store: this.definitionsStore,
                    displayField:'label',
                    valueField:'id',
                    mode: 'local',
                    triggerAction: 'all',
                    editable: false,
                    allowBlank: false,
                    forceSelection: true,
                    width: 400,
                    value: this.selectedDefinition ? this.selectedDefinition.id : null,
                    listeners: {
                        scope: this,
                        'select': this.onDefinitionSelect
                    }
                }, {
                    xtype: 'label',
                    ref: '../../exampleLink',
                    html: example ? ('<p><a href="' + example + '">' + i18n._('Download example file') + '</a></p>') : '<p>&nbsp;</p>'
                }, {
                    xtype: 'displayfield',
//                    fieldLabel: i18n._('Import description'),
                    ref: '../../definitionDescription',
                    height: 70,
                    value: description,
                    cls: 'x-ux-display-background-border',
                    style: 'padding-left: 5px;'
                }]
            }],
            nextIsAllowed: (function() {
                return this.definitionCombo && this.definitionCombo.getValue() && this.uploadButton && this.uploadButton.fileRecord;
            }).createDelegate(this)
        };
    },
    
    onFileReady: function() {
        this.manageButtons();
    },
    
    /**
     * select handler of definition combo
     */
    onDefinitionSelect: function(combo, record, index) {
        var description = record.get('description'),
            options = record.get('plugin_options'),
            example = options && options.example ? options.example : '';
        
        this.selectedDefinition = record;
        
        this.definitionDescription.setValue(description);
        this.exampleLink.setText(example ? ('<p><a href="' + example + '">' + i18n._('Download example file') + '</a></p>') : '<p>&nbsp;</p>', false);
        
        this.manageButtons();
    },
    
    /**
     * get options of the plugin from the currently selected definition
     */
    getImportPluginOptions: function() {
        var options = this.selectedDefinition ? this.selectedDefinition.get('plugin_options') : null;
            
        return options || {};
    },
    
    /********************************************************** OPTIONS PANEL **********************************************************/
    getOptionsPanel: function() {
        if (this.optionsPanel) {
            return this.optionsPanel;
        }

        var items = [];

        if (null !== this.recordClass.getContainerName()) {
            items = items.concat([{
                xtype: 'label',
                html: '<p>' + String.format(i18n._('Select {0} to add you {1} to:'), this.recordClass.getContainerName(), this.recordClass.getRecordsName()) + '</p>'
            }, new Tine.widgets.container.SelectionComboBox({
                id: this.app.appName + 'EditDialogContainerSelector',
                width: 300,
                ref: '../containerCombo',
                stateful: false,
                containerName: this.recordClass.getContainerName(),
                containersName: this.recordClass.getContainersName(),
                appName: this.appName,
                recordClass: this.recordClass,
                value: this.defaultImportContainer,
                listeners: {
                    scope: this,
                    select: function () {
                        this.manageButtons();
                    }
                },
                requiredGrant: false, // 'add' ?
                style: 'margin-bottom: 15px;'
            })]);
        }

        items.push(new Tine.widgets.tags.TagPanel({
            canonicalName: 'ImportTags',
            app: this.appName,
            ref: '../tagsPanel',
            style: 'border: 1px solid silver; border-top: none;',
            border: true,
            collapsible: false,
            height: 200
        }));

        return {
            title: i18n._('Set Import Options'),
            layout: 'fit',
            border: false,
            xtype: 'form',
            frame: true,
            ref: '../optionsPanel',
            canonicalName: 'ImportOptions',
            items: items,
            
            listeners: {
                scope: this,
                show: function() {
                   var options = this.getImportPluginOptions();
                
                    if (options.autotags) {
                        var tags = options.autotags;
                        
                        Ext.each([].concat(tags), function(tag) {
                            tag.name = this.app.i18n._hidden(tag.name);
                            tag.description = this.app.i18n._hidden(tag.description);
                        }, this);
                        
                        this.tagsPanel.getFormField().setValue(tags);
                    }

                    if (this.containerCombo) {
                        this.containerCombo.setValue(options.container_id ? options.container_id : this.defaultImportContainer);
                    }
                }
            },
            
            /**
             * check if next button is allowed
             */
            nextIsAllowed: (function() {
                if (null !== this.recordClass.getContainerName()) {
                    return this.containerCombo && this.containerCombo.getValue();
                }

                return true;
            }).createDelegate(this),
            
            /**
             * next button handler for this panel
             */
            onNextButton: (function() {
                if (! this.checkMask) {
                    this.checkMask = new Ext.LoadMask(this.getEl(), {msg: i18n._('Checking Import')});
                }
                
                this.checkMask.show();
            
                this.doImport(function(request, success, response) {
                    this.checkMask.hide();
                    
                    // jump to finish panel if no conflicts where detected
                    if (! response.duplicatecount) {
                        this.navigate(+2);
                    } else {
                        this.navigate(+1);
                    }
                }, {dryrun: true});
                
            }).createDelegate(this)
        }
    },
    
    
    /********************************************************** CONFLICT PANEL **********************************************************/
    
    getConflictsPanel: function() {
        if (this.conflictsPanel) {
            return this.conflictsPanel;
        }
        
        return {
            title: i18n._('Resolve Conflicts'),
            layout: 'vbox',
            border: false,
            xtype: 'form',
            frame: true,
            ref: '../conflictsPanel',
            canonicalName: 'ImportResolveConflicts',
            items: [/*{
                xtype: 'label',
                ref: '../conflictsLabel',
                rawText: '<p>' + i18n._('There are {0} {1} that might already exist.') + '</p>',
                html: '<p></p>',
                height: 20
            },*/ {
                xtype: 'paging',
                ref: '../conflictPagingToolbar',
                pageSize: 1,
                beforePageText: i18n._('Conflict'),
                firstText : i18n._('First Conflict'),
                prevText : i18n._('Previous Conflict'),
                nextText : i18n._('Next Conflict'),
                lastText : i18n._('Last Conflict'),
                store: this.exceptionStore,
                doLoad: this.loadConflict.createDelegate(this),
                onLoad: Ext.emptyFn,
                listeners: {afterrender: function(t){t.refresh.hide();}},
                items: [this.conflictIndexText = new Ext.Toolbar.TextItem({}), '->', {
                    text: i18n._('Conflict is resolved'),
                    xtype: 'splitbutton',
                    scope: this,
                    handler: this.onResolveConflict,
                    menu: [{
                        text: i18n._('Resolve all conflicts'),
                        scope: this,
                        handler: this.onResolveAllConflict
                    }]
                }]
            }, new Tine.widgets.dialog.DuplicateResolveGridPanel({
                flex: 1,
                ref: '../duplicateResolveGridPanel',
                header: false,
                app: this.app,
                store: new Tine.widgets.dialog.DuplicateResolveStore({
                    app: this.app,
                    recordClass: this.recordClass
                })
            })],
            listeners: {
                scope: this,
                show: function() {
                    if (! this.exceptionStore.isFiltered()) {
                        this.exceptionStore.filterBy(this.exceptionStoreFilter, this);
                        this.manageButtons();
                    }
                }
            },
            /**
             * check if next button is allowed
             */
            nextIsAllowed: (function() {
                var nextIsAllowed = true;
                
                // check if all conflicts are resolved
                this.exceptionStore.each(function(exception) {
                    if (! exception.get('isResolved')) {
                        nextIsAllowed = false;
                        return false;
                    }
                }, this);
                
                return nextIsAllowed;
                
            }).createDelegate(this)
        };
    },
    
    /**
     * mark current conflict resolved
     */
    onResolveConflict: function() {
        var index = this.conflictPagingToolbar.cursor,
            record = this.exceptionStore.getAt(index),
            resolveStore = this.duplicateResolveGridPanel.getStore(),
            resolveStrategy = resolveStore.resolveStrategy,
            resolveRecord = resolveStore.getResolvedRecord();
        
        // mark exception record resolved
        record.set('resolveStrategy', resolveStrategy);
        record.set('resolvedRecord', resolveRecord);
        record.set('isResolved', true);
        
        // load next conflict
        this.exceptionStore.filterBy(this.exceptionStoreFilter, this);
        this.manageButtons();
        
        this.loadConflict(this.exceptionStore.getCount() > index ? index : index-1);
        
        if (Ext.isFunction(arguments[0])) {
            return arguments[0].call(this);
        }
    },
    
    /**
     * resolve all conflicts using current strategy
     */
    onResolveAllConflict: function() {
        
        // @TODO: disable grid to spedup things?
        if (this.exceptionStore.getCount() > 0) {
            this.conflictMask.show();
            this.conflictMask.hidden = false;
            
            return this.onResolveConflict.defer(20, this, [this.onResolveAllConflict]);
        } else {
            this.conflictMask.hide();
            this.conflictMask.hidden = true;
        }
    },
    
    /**
     * load conflict with given index
     * 
     * @param {Number} index
     */
    loadConflict: function(index) {
        if (! this.conflictMask) {
            this.conflictMask = new Ext.LoadMask(this.getEl(), {msg: i18n._('Processing Conflict Data'), hidden: true});
        }

        // give DOM the time to show loadMask
        if (this.conflictMask.hidden) {
            this.conflictMask.show();
            this.conflictMask.hidden = false;
            
            return this.loadConflict.defer(200, this, arguments);
        }
            
        var thisRecord = this.exceptionStore.getAt(this.conflictPagingToolbar.cursor),
            nextRecord = this.exceptionStore.getAt(index),
            resolveStore = this.duplicateResolveGridPanel.getStore();
            
        // preserv changes
        if (this.conflictPagingToolbar.cursor != index && thisRecord && resolveStore.getCount()) {
            thisRecord.set('resolvedRecord', resolveStore.getResolvedRecord());
            thisRecord.set('resolveStrategy', resolveStore.resolveStrategy);
        }
        
        if (nextRecord) {
            resolveStore.loadData(nextRecord.get('exception'), nextRecord.get('resolveStrategy') || resolveStore.resolveStrategy, nextRecord.get('resolvedRecord'));
        } else {
            resolveStore.removeAll();
            this.duplicateResolveGridPanel.getView().mainBody.update('<br />  ' + i18n._('No conflict to resolve'));
            // defer navigation to complete this step before
            this.navigate.defer(200, this, [+1]);
        }
        
        
        // update paging toolbar
        var p = this.conflictPagingToolbar,
            ap = index+1,
            ps = this.exceptionStore.getCount();
            
        p.cursor = index;
        p.afterTextItem.setText(String.format(p.afterPageText, ps));
        p.inputItem.setValue(ap);
        p.first.setDisabled(ap == 1);
        p.prev.setDisabled(ap == 1);
        p.next.setDisabled(ap == ps);
        p.last.setDisabled(ap == ps);
        this.conflictIndexText.setText(nextRecord ? 
            String.format(i18n._('(This is record {0} in your import file)'), nextRecord.get('index') + 1) :
            i18n._('No conflict to resolve')
        );
        
        this.conflictMask.hide();
        this.conflictMask.hidden = true;
    },
    
    /********************************************************** SUMMARY PANEL **********************************************************/
    
    getSummaryPanel: function() {
        if (this.summaryPanel) {
            return this.summaryPanel;
        }
        var exceptionExpander = new Ext.ux.grid.RowExpander({
            tpl : new Ext.XTemplate('{[this.showClientRecord(values)]}', { showClientRecord: function(values) {
                if (values && values.exception && values.exception.clientRecord) {
                    // there is no generic detailsPanel retirval yet
//                    if (Ext.isObject(values.exception.clientRecord)) {
//                        var detailsPanel = new Tine.Addressbook.ContactGridDetailsPanel({});
//                        
//                        return detailsPanel.tpl.apply(values.exception.clientRecord);
//                    }
                    return Ext.util.Format.htmlEncode(Ext.encode(values.exception.clientRecord));
                } else {
                    return i18n._('No Detail Informations');
                }
            }})
        });
        return {
            title: i18n._('Summary'),
            border: false,
            xtype: 'ux.displaypanel',
            frame: true,
            ref: '../summaryPanel',
            autoScroll: true,
            canonicalName: 'ImportSummary',
            items: [{
                height: 100,
                ref: '../summaryPanelInfo',
                border: false,
                layout: 'ux.display',
                layoutConfig: {
                    background: 'border'
                }
            }, {
                ref: '../summaryPanelFailures',
                baseCls: 'ux-arrowcollapse',
                cls: 'ux-arrowcollapse-plain',
                collapsible: true,
                hidden: true,
                flex: 1,
                title:'',
                items: [{
                    xtype: 'grid',
                    store: this.exceptionStore,
                    autoHeight: true,
                    plugins: exceptionExpander,
                    columns: [
                        exceptionExpander,
                        { id: 'index', header: i18n._('Index'), width: 60, sortable: false, dataIndex: 'index'},
                        { id: 'exception', header: i18n._('Record'), width: 120, sortable: false, dataIndex: 'exception', renderer: function(exception) {
                            // TODO find a way to show record more pretty
                            return exception.clientRecord ? Ext.util.JSON.encode(exception.clientRecord) : '';
                        }},
                        { id: 'failure', header: i18n._('Failure'), width: 60, sortable: false, dataIndex: 'message'}
                    ],
                    autoExpandColumn: 'failure'
                }]
            }],
            listeners: {
                scope: this,
                show: this.onSummaryPanelShow
            },
            
            /**
             * finish button handler for this panel
             */
            onFinishButton: (function() {
                if (! this.importMask) {
                    this.importMask = new Ext.LoadMask(this.getEl(), {msg: String.format(i18n._('Importing {0}'), this.recordClass.getRecordsName())});
                }
                this.importMask.show();
                
                // collect client data
                var clientRecordData = [];
                var importOptions = {};
                
                this.exceptionStore.clearFilter(true);
                this.exceptionStore.each(function(r) {
                    clientRecordData.push({
                        recordData: r.get('resolvedRecord').data,
                        resolveStrategy: r.get('resolveStrategy') || 'discard',
                        index: r.get('index')
                    });
                });
                
                this.doImport(function(request, success, response) {
                    this.importMask.hide();
                    
                    this.fireEvent('finish', this, this.layout.activeItem);
                    
                    if (response.failcount > 0 && Ext.isArray(response.exceptions) && response.exceptions.length > 0) {
                        // show errors and fence finish/back btn
                        this.backButton.setDisabled(true);
                        this.finishButton.setHandler(function() {this.window.close()}, this);
                        
                        this.summaryPanelInfo.hide();
                        this.exceptionStore.clearFilter(true);
                        
                        this.summaryPanelFailures.show();
                        this.summaryPanelFailures.setTitle(String.format(i18n._('{0} records had failures and where discarded.'), response.failcount));
                    } else {
                        this.window.close();
                    }
                }, importOptions, clientRecordData);
                
            }).createDelegate(this)
            
        }
    },
    
    /**
     * summary panel show handler
     */
    onSummaryPanelShow: function() {
        if (! this.summaryPanelInfo.rendered) {
            return this.onSummaryPanelShow.defer(100, this);
        }

        // calc metrics
        var rsp = this.lastImportResponse,
            totalcount = rsp.totalcount,
            failcount = 0,
            mergecount = 0,
            discardcount = 0;
            
        this.exceptionStore.clearFilter();
        this.exceptionStore.each(function(r) {
            var strategy = r.get('resolveStrategy');
            if (! strategy || !Ext.isString(strategy)) {
                failcount++;
            } else if (strategy == 'keep') {
                totalcount++;
            } else if (strategy.match(/^merge.*/)) {
                mergecount++;
            } else if (strategy == 'discard') {
                discardcount++;
            }
        }, this);
        
        var tags = this.tagsPanel.getFormField().getValue(),
            container = this.containerCombo ? this.containerCombo.selectedContainer : null,
            info = [String.format(i18n._('In total we found {0} records in your import file.'), rsp.totalcount + rsp.duplicatecount + rsp.failcount)];
            
            if (totalcount && null !== this.recordClass.getContainerName()) {
                info.push(String.format(i18n._('{0} of them will be added as new records into: "{1}".'),
                    totalcount, 
                    Tine.Tinebase.common.containerRenderer(container).replace('<div', '<span').replace('</div>', '</span>')
                ));
            }
            
            if (mergecount + discardcount) {
                info.push(String.format(i18n._('{0} of them where identified as duplicates.'), mergecount + discardcount));
                
                if (mergecount) {
                    info.push(String.format(i18n._('From the identified duplicates {0} will be merged into the existing records.'), mergecount));
                }
                
                if (discardcount) {
                    info.push(String.format(i18n._('From the identified duplicates {0} will be discarded.'), discardcount));
                }
            }
            
            if (Ext.isArray(tags) && tags.length) {
                var tagNames = [],
                    tagRecord = null;
                Ext.each(tags, function(tag) {
                    if (Ext.isString(tag)) {
                        tagRecord = this.tagsPanel.recordTagsStore.getById(tag);
                        tag = (tagRecord) ? tagRecord.data : null;
                    }
                    if (tag) {
                        tagNames.push(tag.name)
                    }
                }, this);
                info.push(String.format(i18n._('All records will be tagged with: "{0}" so you can find them easily.'), tagNames.join(', ')));
            }
            
        this.summaryPanelInfo.update('<div style="padding: 5px;">' + info.join('<br />') + '</div>');
        
        // failures
        if (failcount) {
            this.exceptionStore.filterBy(function(record, id) {
                return ! (record.get('code') == 629 && ! record.get('isResolved'));
            });
            this.summaryPanelFailures.show();
            this.summaryPanelFailures.setTitle(String.format(i18n._('{0} records have failures and will be discarded.'), failcount));
            
        }
    }
});

/**
 * credentials dialog popup / window
 */
Tine.widgets.dialog.ImportDialog.openWindow = function (config) {
    var window = Tine.WindowFactory.getWindow({
        width: 800,
        height: 600,
        name: Tine.widgets.dialog.ImportDialog.windowNamePrefix + Ext.id(),
        contentPanelConstructor: 'Tine.widgets.dialog.ImportDialog',
        contentPanelConstructorConfig: config//,
//        modal: true
    });
    return window;
};


/***/ }),
/* 1102 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2014 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.dialog');

/**
 * Simple Import Dialog
 *
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.ImportDialog
 * @extends     Tine.widgets.dialog.EditDialog
 * @constructor
 * @param       {Object} config The configuration options.
 * 
 * TODO add app grid to show results when dry run is selected
 */
Tine.widgets.dialog.SimpleImportDialog = Ext.extend(Tine.widgets.dialog.ImportDialog, {
    /**
     * init import wizard
     */
    initComponent: function() {
        Tine.log.debug('Tine.widgets.dialog.SimpleImportDialog::initComponent this');
        Tine.log.debug(this);

        this.app = Tine.Tinebase.appMgr.get(this.appName);
        this.recordClass = Tine.Tinebase.data.RecordMgr.get(this.appName, this.modelName);

        this.allowedFileExtensions = [];

        // init definitions
        this.definitionsStore = new Ext.data.JsonStore({
            fields: Tine.Tinebase.Model.ImportExportDefinition,
            root: 'results',
            totalProperty: 'totalcount',
            remoteSort: false
        });

        if (Tine[this.appName].registry.get('importDefinitions')) {
            Ext.each(Tine.widgets.importAction.getImports(this.recordClass), function(defData) {
                var options = defData.plugin_options,
                    extension = options ? options.extension : null;
                
                defData.label = this.app.i18n._hidden(options && options.label ? options.label : defData.name);
                
                if (this.allowedFileExtensions.indexOf(extension) == -1) {
                    this.allowedFileExtensions = this.allowedFileExtensions.concat(extension);
                }
                
                this.definitionsStore.addSorted(new Tine.Tinebase.Model.ImportExportDefinition(defData, defData.id));
            }, this);
            this.definitionsStore.sort('label');
        }
        if (! this.selectedDefinition) {
            var defaultConfig = Tine[this.appName].registry.get('defaultImportDefinition'),
                defaultExists = defaultConfig && this.definitionsStore.getById(defaultConfig.id);

            this.selectedDefinition = defaultExists ?
                this.definitionsStore.getById(defaultConfig.id) :
                this.definitionsStore.getAt(0);
        }

        this.items = [this.getFilePanel()];

        Tine.widgets.dialog.ImportDialog.superclass.initComponent.call(this);
    },

    /**
     * do import request
     * 
     * @param {Function} callback
     * @param {Object}   importOptions
     */
    doImport: function(callback, importOptions, clientRecordData) {
        Ext.Ajax.request({
            scope: this,
            timeout: 1800000, // 30 minutes
            callback: this.onImportResponse.createDelegate(this, [callback], true),
            params: {
                method: this.appName + '.import' + this.recordClass.getMeta('modelName')  + 's',
                tempFileId: this.uploadButton.getTempFileId(),
                definitionId: this.definitionCombo.getValue(),
                importOptions: Ext.apply({
                    container_id: this.containerCombo.getValue()
                }, importOptions || {}),
                clientRecordData: clientRecordData
            }
        });
    },
    
    /**
     * called when import request sends response
     * 
     * @param {Object}   request
     * @param {Boolean}  success
     * @param {Object}   response
     * @param {Function} callback
     */
    onImportResponse: function(request, success, response, callback) {
        response = Ext.util.JSON.decode(response.responseText);
        
        Tine.log.debug('Tine.widgets.dialog.SimpleImportDialog::onImportResponse server response');
        Tine.log.debug(response);
        
        this.lastImportResponse = response;
        
        // finlay apply callback
        if (Ext.isFunction(callback)) {
            callback.call(this, request, success, response);
        }
    },
    
    getTypeSelection: function() {
        
    },
    
    /**
     * returns the file panel of this wizard (step 1)
     */
    getFilePanel: function() {
        if (this.filePanel) {
            return this.filePanel;
        }
        
        var def = this.selectedDefinition,
            description = def ? this.app.i18n._hidden(def.get('description')) : '',
            options = def ? def.get('plugin_options') : null,
            example = options && options.example ? options.example : '';
            
        return {
            title: i18n._('Choose File and Format'),
            layout: 'vbox',
            border: false,
            xtype: 'ux.displaypanel',
            frame: true,
            ref: '../filePanel',
            items: [{
                xtype: 'panel',
                baseCls: 'ux-subformpanel',
                title: i18n._('Choose Import File'),
                height: 100,
                items: [{
                    xtype: 'label',
                    html: '<p>' + i18n._('Please choose the file that contains the records you want to add to Tine 2.0').replace(/Tine 2\.0/g, Tine.title) + '</p><br />'
                }, {
                    xtype: 'tw.uploadbutton',
                    ref: '../../uploadButton',
                    text: String.format(i18n._('Select file containing your {0}'), this.recordClass.getRecordsName()),
                    handler: this.onFileReady,
                    allowedTypes: this.allowedFileExtensions,
                    scope: this
                }]
            },{
                xtype: 'panel',
                baseCls: 'ux-subformpanel',
                title: i18n._('Set Import Options'),
                height: 100,
                items: [{
                    xtype: 'label',
                    html: '<p>' + String.format(i18n._('Select {0} to add you {1} to:'), this.recordClass.getContainerName(), this.recordClass.getRecordsName()) + '</p>'
                }, new Tine.widgets.container.SelectionComboBox({
                    id: this.app.appName + 'EditDialogContainerSelector',
                    width: 300,
                    ref: '../../containerCombo',
                    stateful: false,
                    recordClass: this.recordClass,
                    containerName: this.recordClass.getContainerName(),
                    containersName: this.recordClass.getContainersName(),
                    appName: this.appName,
                    value: this.defaultImportContainer,
                    requiredGrant: false
                })]
            },
            {
                xtype: 'panel',
                baseCls: 'ux-subformpanel',
                title: i18n._('What should the file you upload look like?'),
                flex: 1,
                items: [
                {
                    xtype: 'label',
                    html: '<p>' + i18n._('Tine 2.0 does not understand all kind of files you might want to upload. You will have to manually adjust your file so Tine 2.0 can handle it.').replace(/Tine 2\.0/g, Tine.title) + '</p><br />'
                }, {
                    xtype: 'label',
                    html: '<p>' + i18n._('Following you find a list of all supported import formats and a sample file, how Tine 2.0 expects your file to look like.').replace(/Tine 2\.0/g, Tine.title) + '</p><br />'
                }, {
                    xtype: 'label',
                    html: '<p>' + i18n._('Please select the import format of the file you want to upload').replace(/Tine 2\.0/g, Tine.title) + '</p>'
                }, {
                    xtype: 'combo',
                    ref: '../../definitionCombo',
                    store: this.definitionsStore,
                    displayField:'label',
                    valueField:'id',
                    mode: 'local',
                    triggerAction: 'all',
                    editable: false,
                    allowBlank: false,
                    forceSelection: true,
                    width: 400,
                    value: this.selectedDefinition ? this.selectedDefinition.id : null,
                    listeners: {
                        scope: this,
                        'select': this.onDefinitionSelect
                    }
                }, {
                    xtype: 'label',
                    ref: '../../exampleLink',
                    html: example ? ('<p><a href="' + example + '">' + i18n._('Download example file') + '</a></p>') : '<p>&nbsp;</p>'
                }, {
                    xtype: 'displayfield',
                    ref: '../../definitionDescription',
                    height: 70,
                    value: description,
                    cls: 'x-ux-display-background-border',
                    style: 'padding-left: 5px;'
                }]
            }],
            
            /**
            * finish button handler for this panel
            */
            onFinishButton: (function() {
                if (! this.importMask) {
                    this.importMask = new Ext.LoadMask(this.getEl(), {msg: String.format(i18n._('Importing {0}'), this.recordClass.getRecordsName())});
                }
                this.importMask.show();

                // collect client data
                var clientRecordData = [];
                var importOptions = {};

                this.doImport(function(request, success, response) {
                    this.importMask.hide();

                    this.fireEvent('finish', this, this.layout.activeItem);

                    if (Ext.isArray(response.exceptions) && response.exceptions.length > 0) {
                        this.backButton.setDisabled(true);
                        this.finishButton.setHandler(function() {this.window.close()}, this);
                    } else {
                        this.window.close();
                    }
                }, importOptions, clientRecordData);
            }).createDelegate(this),
            
            finishIsAllowed: (function() {
                return this.definitionCombo && this.definitionCombo.getValue() && this.uploadButton && this.uploadButton.fileRecord && this.containerCombo && this.containerCombo.getValue();
            }).createDelegate(this)
        };
    }
});

/**
 * Create new import window
 */
Tine.widgets.dialog.SimpleImportDialog.openWindow = function (config) {
    var window = Tine.WindowFactory.getWindow({
        width: 800,
        height: 600,
        name: Tine.widgets.dialog.SimpleImportDialog.windowNamePrefix + Ext.id(),
        contentPanelConstructor: 'Tine.widgets.dialog.SimpleImportDialog',
        contentPanelConstructorConfig: config
    });
    return window;
};


/***/ }),
/* 1103 */
/***/ (function(module, exports) {

/**
 * Tine 2.0
 * 
 * @package     Tine
 * @subpackage  Widgets
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 */

Ext.ns('Tine.widgets', 'Tine.widgets.dialog');

/**
 * Generic 'Export' dialog
 *
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.ExportDialog
 * @extends     Tine.widgets.dialog.EditDialog
 * @constructor
 * @param       {Object} config The configuration options
 * 
 * TODO         add template for def combo (shows description, format?, ...)
 * 
 */
Tine.widgets.dialog.ExportDialog = Ext.extend(Tine.widgets.dialog.EditDialog, {
    
    /**
     * @cfg {String} appName
     */
    appName: null,
    /**
     * @cfg {Number} height
     */
    height: 150,
    /**
     * @cfg {Number} width
     */
    width: 400,

    // private
    windowNamePrefix: 'ExportWindow_',
    loadMask: false,
    tbarItems: [],
    evalGrants: false,
    sendRequest: true,
    mode: 'local',
    
    //private
    initComponent: function(){
        this.app = Tine.Tinebase.appMgr.get(this.appName);
        
        this.recordClass = Tine.Tinebase.Model.ExportJob;
        this.saveAndCloseButtonText = i18n._('Export');
        

        this.definitionsStore = new Ext.data.JsonStore({
            fields: Tine.Tinebase.Model.ImportExportDefinition,
            root: 'results',
            totalProperty: 'totalcount',
            idProperty: 'id',
            remoteSort: false
        });

        var recordClass = Tine.Tinebase.data.RecordMgr.get(this.record.get('model')),
            scope = this.record.get('scope'),
            exportDefinitions = Tine.widgets.exportAction.getExports(recordClass, false, scope);

        // check if initial data available
        if (Tine[this.appName].registry.get('exportDefinitions')) {
            Ext.each(exportDefinitions, function(defData) {
                var options = defData.plugin_options,
                    extension = options ? options.extension : null;
                
                defData.label = this.app.i18n._hidden(defData.label ? defData.label : defData.name);
                this.definitionsStore.addSorted(new Tine.Tinebase.Model.ImportExportDefinition(defData, defData.id));
            }, this);
            this.definitionsStore.sort('label');
        }
        
        Tine.widgets.dialog.ExportDialog.superclass.initComponent.call(this);
    },
    
    /**
     * executed after record got updated from proxy
     */
    onRecordLoad: function() {
        // interrupt process flow until dialog is rendered
        if (! this.rendered) {
            this.onRecordLoad.defer(250, this);
            return;
        }
        
        this.window.setTitle(String.format(i18n._('Export {0} {1}'), this.record.get('count'), this.record.get('recordsName')));
    },

    /**
     * returns dialog
     */
    getFormItems: function() {
        if (this.record) {
            // remove all definitions that does not share the (grid) model / store.filter() did not do the job
            this.definitionsStore.each(function(record) {
                if (record.get('model') !== this.record.get('model') || record.get('favorite') == '1') {
                    this.definitionsStore.remove(record);
                }
            }, this);
        }
            
        return {
            bodyStyle: 'padding:5px;',
            buttonAlign: 'right',
            labelAlign: 'top',
            border: false,
            layout: 'form',
            defaults: {
                anchor: '100%'
            },
            items: [{
                xtype: 'combo',
                fieldLabel: i18n._('Export definition'),
                name:'export_definition_id',
                store: this.definitionsStore,
                displayField:'label',
                mode: 'local',
                triggerAction: 'all',
                editable: false,
                allowBlank: false,
                forceSelection: true,
                emptyText: i18n._('Select Export Definition ...'),
                valueField: 'id',
                value: (this.definitionsStore.getCount() > 0) ? this.definitionsStore.getAt(0).id : null 
            }]
        };
    },
    
    /**
     * apply changes handler
     */
    onApplyChanges: function(closeWindow) {
        var form = this.getForm();
        if (form.isValid()) {
            this.onRecordUpdate();

            Tine.widgets.exportAction.downloadExport(this.record);
            this.window.close();
            
        } else {
            Ext.MessageBox.alert(i18n._('Errors'), i18n._('Please fix the errors noted.'));
        }
    }
});

Tine.widgets.dialog.ExportDialog.openWindow = function (config) {
    return Tine.WindowFactory.getWindow({
        width: Tine.widgets.dialog.ExportDialog.prototype.width,
        height: Tine.widgets.dialog.ExportDialog.prototype.height,
        name: Tine.widgets.dialog.ExportDialog.prototype.windowNamePrefix + Ext.id(),
        contentPanelConstructor: 'Tine.widgets.dialog.ExportDialog',
        contentPanelConstructorConfig: config,
        modal: true
    });
};


/***/ }),
/* 1104 */
/***/ (function(module, exports) {


Ext.ns('Tine.widgets.dialog');

Tine.widgets.dialog.MultiOptionsDialog = function(config) {
    
    Tine.widgets.dialog.MultiOptionsDialog.superclass.constructor.call(this, config);
    
    this.options = config.options || {};
    this.scope = config.scope || window;
};

/**
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.MultiOptionsDialog
 * @extends     Ext.FormPanel
 */
Ext.extend(Tine.widgets.dialog.MultiOptionsDialog, Ext.FormPanel, {
    /**
     * @cfg {Array} options
     * @see {Ext.fom.CheckBoxGroup}
     */   
    options: null,
    /**
     * @cfg {Object} scope
     */
    scope: null,
    /**
     * @cfg {String} questionText defaults to i18n._('What would you like to do?')
     */
    questionText: null,
    /**
     * @cfg {String} invalidText defaults to i18n._('You need to select an option!')
     */
    invalidText: null,
    /**
     * @cfg {Function} handler
     */
    handler: Ext.emptyFn,
    /**
     * @cfg {Boolean} allowCancel
     */
    allowCancel: false,
    
    windowNamePrefix: 'MultiOptionsDialog',
    bodyStyle:'padding:5px',
    layout: 'fit',
    border: false,
    cls: 'tw-editdialog',
    anchor:'100% 100%',
    deferredRender: false,
    buttonAlign: null,
    bufferResize: 500,
    
    initComponent: function() {
        // init buttons and tbar
        this.initButtons();
        
        this.itemsName = this.id + '-radioItems';
        
        // get items for this dialog
        this.items = [{
            layout: 'hbox',
            border: false,
            layoutConfig: {
                align:'stretch'
            },
            items: [{
                border: false,
                html: '<div class="x-window-dlg"><div class="ext-mb-icon ext-mb-question"></div></div>',
                flex: 0,
                width: 45
            }, {
                border: false,
                layout: 'fit',
                flex: 1,
                autoScroll: true,
                items: [{
                    xtype: 'label',
                    border: false,
                    cls: 'ext-mb-text',
                    html: this.questionText || i18n._('What would you like to do?')
                }, {
                    xtype: 'radiogroup',
                    hideLabel: true,
                    itemCls: 'x-check-group-alt',
                    columns: 1,
                    name: 'optionGroup',
                    items: this.getItems()
                }]
            }]
        }];
        
        this.supr().initComponent.call(this);
    },
    
    /**
     * init buttons
     */
    initButtons: function() {
        this.fbar = ['->', {
            xtype: 'button',
            text: i18n._('Ok'),
            minWidth: 70,
            scope: this,
            handler: this.onOk,
            iconCls: 'action_saveAndClose'
        }, {
            xtype: 'button',
            text: i18n._('Cancel'),
            minWidth: 70,
            scope: this,
            hidden: !this.allowCancel,
            handler: this.onCancel,
            iconCls: 'action_cancel'
        }];
    },
    
    getItems: function() {
        var items = [];
        Ext.each(this.options, function(option) {
            items.push({
                checked: !! option.checked,
                disabled: !! option.disabled,
                fieldLabel: '',
                labelSeparator: '',
                boxLabel: option.text,
                name: this.itemsName,
                inputValue: option.name
            });
        }, this);
        
        return items;
    },
    
    onOk: function() {
        var field = this.getForm().findField('optionGroup');
        var selecedRadio = field.getValue();
        
        var option = selecedRadio ? selecedRadio.getGroupValue() : null;
        
        if (! option) {
            field.markInvalid(this.invalidText || i18n._('You need to select an option!'));
            return;
        }
        this.handler.call(this.scope, option);
        this.window.close();
    },
    
    onCancel: function() {
        this.handler.call(this.scope, 'cancel');
        this.window.close();
    }
});

/**
 * grants dialog popup / window
 */
Tine.widgets.dialog.MultiOptionsDialog.openWindow = function (config) {
    var window = Tine.WindowFactory.getWindow({
        width: config.width || 400,
        height: config.height || 150,
        closable: false,
        name: Tine.widgets.dialog.MultiOptionsDialog.windowNamePrefix + Ext.id(),
        contentPanelConstructor: 'Tine.widgets.dialog.MultiOptionsDialog',
        contentPanelConstructorConfig: config,
        modal: true
    });
    return window;
};


/***/ }),
/* 1105 */
/***/ (function(module, exports) {


Ext.ns('Tine.widgets.dialog');

Tine.widgets.dialog.FileListDialog = function(config) {
    
    Tine.widgets.dialog.FileListDialog.superclass.constructor.call(this, config);
    
    this.options = config.options || {};
    this.scope = config.scope || window;
};

/**
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.FileListDialog
 * @extends     Ext.FormPanel
 */
Ext.extend(Tine.widgets.dialog.FileListDialog, Ext.FormPanel, {
    /**
     * @cfg {Array} options
     * @see {Ext.fom.CheckBoxGroup}
     */   
    options: null,
    /**
     * @cfg {Object} scope
     */
    scope: null,
    /**
     * @cfg {String} questionText defaults to i18n._('What would you like to do?')
     */
    questionText: null,
    /**
     * @cfg {String} invalidText defaults to i18n._('You need to select an option!')
     */
    invalidText: null,
    /**
     * @cfg {Function} handler
     */
    handler: Ext.emptyFn,
    /**
     * @cfg {Boolean} allowCancel
     */
    allowCancel: false,
    
    windowNamePrefix: 'FileListDialog',
    bodyStyle:'padding:5px',
    layout: 'fit',
    border: false,
    cls: 'tw-editdialog',
    anchor:'100% 100%',
    deferredRender: false,
    buttonAlign: null,
    bufferResize: 500,
    
    initComponent: function() {
        // init buttons and tbar
        this.initButtons();
        
        this.itemsName = this.id + '-fileList';
        
        // get items for this dialog
        this.items = [{
            layout: 'hbox',
            border: false,
            layoutConfig: {
                align:'stretch'
            },
            items: [{
                border: false,
                layout: 'fit',
                flex: 1,
                autoScroll: true,
                items: [{
                    xtype: 'label',
                    border: false,
                    cls: 'ext-mb-text',
                    html: this.text
                }]
            }]
        }];
        
        this.supr().initComponent.call(this);
    },
    
    /**
     * init buttons
     * use preference settings for order of yes and no buttons
     */
    initButtons: function () {
        this.fbar = ['->'];
        
        var noBtn = {
            xtype: 'button',
            text: i18n._('No'),
            minWidth: 70,
            scope: this,
            handler: this.onCancel,
            iconCls: 'action_cancel'
        };
        
        var yesBtn = {
            xtype: 'button',
            text: i18n._('Yes'),
            minWidth: 70,
            scope: this,
            handler: this.onOk,
            iconCls: 'action_applyChanges'
        }; 
        
        this.fbar.push(noBtn, yesBtn);
    },
    
    onOk: function() {
        this.handler.call(this.scope, 'yes');
        this.window.close();
    },
    
    onCancel: function() {
        this.handler.call(this.scope, 'no');
        this.window.close();
    }
});

/**
 * grants dialog popup / window
 */
Tine.widgets.dialog.FileListDialog.openWindow = function (config) {
    var window = Tine.WindowFactory.getWindow({
        width: config.width || 400,
        height: config.height || 150,
        closable: false,
        name: Tine.widgets.dialog.FileListDialog.windowNamePrefix + Ext.id(),
        contentPanelConstructor: 'Tine.widgets.dialog.FileListDialog',
        contentPanelConstructorConfig: config,
        modal: true
    });
    return window;
};


/***/ }),
/* 1106 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.dialog');

/**
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.DuplicateMergeDialog
 * @extends     Ext.FormPanel
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * 
 * @param {Object} config The configuration options.
 */

Tine.widgets.dialog.DuplicateMergeDialog = Ext.extend(Ext.FormPanel, {
    
    appName : null,
    app: null,
    modelName: null,
    
    recordClass: null,
    recordProxy: null,
    loadMask: null,
    
    layout : 'fit',
    border : false,
    cls : 'tw-editdialog',    

    labelAlign : 'top',

    anchor : '100% 100%',
    deferredRender : false,
    buttonAlign : null,
    bufferResize : 500,
    
    /**
     * init component
     */
    initComponent: function() {

        if (!this.app) {
            this.app = Tine.Tinebase.appMgr.get(this.appName);
        }

        this.recordClass = Tine.Tinebase.data.RecordMgr.get(this.appName, this.modelName);
        this.selections = Ext.decode(this.selections);
        this.records = [];
        
        this.recordProxy = Tine[this.appName][this.recordClass.getMeta('recordName').toLowerCase() + 'Backend'];
        
        if(!this.recordProxy) {
            return;
        }
        
        Ext.each(this.selections, function(rec) {
            this.records.push(this.recordProxy.recordReader({responseText: Ext.encode(rec)}));
        }, this );
        
        Tine.log.debug('initComponent: appName: ', this.appName);
        Tine.log.debug('initComponent: app: ', this.app);

        // init actions
        this.initActions();

        // get items for this dialog
        this.items = this.getFormItems();

        Tine.widgets.dialog.DuplicateMergeDialog.superclass.initComponent.call(this);
    },
    /**
     * initializes the actions for the buttons
     */
    initActions: function() {
        this.action_cancel = new Ext.Action({
            text : i18n._('Cancel'),
            minWidth : 70,
            scope : this,
            handler : this.onCancel,
            iconCls : 'action_cancel'
        });

        this.action_update = new Ext.Action({
            text : i18n._('OK'),
            minWidth : 70,
            scope : this,
            handler : this.onUpdate,
            iconCls : 'action_saveAndClose'
        });
        
        this.fbar = [ '->', this.action_cancel, this.action_update ];
    },
    
    /**
     * is called to resolve the records
     */
    onUpdate: function() {
        var store = this.gridPanel.getStore(),
            updateRecord = store.getResolvedRecord(),
            removeRecords = [],
            allRecords = store.duplicates.concat([store.clientRecord]),
            strategy = this.gridPanel.actionCombo.getValue();
        
        Tine.log.debug('Tine.widgets.dialog.DuplicateMergeDialog::onUpdate() - strategy:');
        Tine.log.debug(this.gridPanel.actionCombo.getValue());
        
        Tine.log.debug('Tine.widgets.dialog.DuplicateMergeDialog::onUpdate() - allRecords:');
        Tine.log.debug(allRecords);

        if (strategy === 'mergeTheirs') {
            // we need to use the first id and seq in update record
            updateRecord.id = allRecords[0].id;
            updateRecord.set('seq', allRecords[0].get('seq'));
        } else {
            // we need to use the second id + seq (from clientRecord) in update record
            updateRecord.id = allRecords[1].id;
            updateRecord.set('seq', allRecords[1].get('seq'));
        }
        updateRecord.data.id = updateRecord.id;

        Tine.log.debug('Tine.widgets.dialog.DuplicateMergeDialog::onUpdate() - updateRecord:');
        Tine.log.debug(updateRecord);
        
        Ext.each(allRecords, function(rec) {
            if (rec.id != updateRecord.id) {
                removeRecords.push(rec);
            }
        });

        Tine.log.debug('Tine.widgets.dialog.DuplicateMergeDialog::onUpdate() - removeRecords:');
        Tine.log.debug(removeRecords);
        
        this.loadMask = new Ext.LoadMask(this.getEl(), {msg: i18n._('Merging Records...')});
        this.loadMask.show();
        
        this.recordProxy.saveRecord(updateRecord, {
            scope: this,
            success: function(newRecord) {
                this.removeDuplicates(removeRecords);
            },
            failure: function(failure) {
                this.onFailure('update', failure);
            }
        });
    },
    
    /**
     * remove duplicate records, when update of the new record succeeded
     * @param {Array} removeRecords
     */
    removeDuplicates: function(removeRecords) {
        this.recordProxy.deleteRecords(removeRecords, {
            scope: this,
            success: function() {
                this.onSuccess();
            },
            failure: function(failure) {
                this.onFailure('remove', failure);
            }
        });
    },
    
    /**
     * is called when a failure on saving the merge result or deleting the duplicate happens
     * @param {} step
     * @param {} failure
     */
    onFailure: function(step, failure) {
        if(step == 'update') {
             Tine.Tinebase.ExceptionHandler.handleRequestException(failure, function() { if (this.loadMask) this.loadMask.hide(); }, this);
        } else {
             Ext.MessageBox.alert(i18n._('Merge Failed'), String.format(i18n._('The merge succeeded, but the duplicate {0} could not be deleted.'), this.recordClass.getRecordName()), function() { Tine.Tinebase.ExceptionHandler.handleRequestException(failure); if (this.loadMask) this.loadMask.hide();}, this);
        }
    },
    /**
     * returns the form items of this panel
     * @return {}
     */
    getFormItems: function() {
        return {
            layout: 'border',
            items: [{
                region: 'center',
                layout: 'fit',
                items: [new Tine.widgets.dialog.DuplicateResolveGridPanel({
                    ref: '../../gridPanel',
                    app: this.app,
                    recordClass: this.recordClass,
                    store: new Tine.widgets.dialog.DuplicateResolveStore({
                        recordClass: this.recordClass,
                        defaultResolveStrategy: 'mergeMine',
                        app: this.app,
                        data: {
                            clientRecord: this.records.shift(),
                            duplicates: this.records
                        },
                        // TODO we might add some grants handling here to show the user if she can't edit, update or delete the records
                        // strategy can't be set to 'keep' here
                        checkEditGrant: Ext.emptyFn
                    }),
                    listeners: {
                        afterrender: function() {
                            var recordsName = this.recordClass.getRecordsName(),
                                recordName = this.recordClass.getRecordName();
                
                            // change actionComboListEls
                            this.actionCombo.store = new Ext.data.ArrayStore({
                                id: 0,
                                fields: ['value', 'text'],
                                data: [
                                    ['mergeMine', String.format(i18n._('Merge {0}, prefer First'), recordsName)],
                                    ['mergeTheirs', String.format(i18n._('Merge {0}, prefer Second'), recordsName)]
                                ]
                            });
                            this.actionCombo.setWidth(400);
                            this.onStoreLoad();
                
                            // change title
                            this.setTitle(String.format(i18n._('Merge {0}'), recordsName));
                            
                            // change column headers
                            this.getColumnModel().setColumnHeader(this.getColumnModel().getIndexById('clientValue'), String.format(i18n._('First {0}'), recordName));
                            this.getColumnModel().setColumnHeader(this.getColumnModel().getIndexById('value0'), String.format(i18n._('Second {0}'), recordName));
                            this.getColumnModel().setColumnHeader(this.getColumnModel().getIndexById('finalValue'), String.format(i18n._('Final {0}'), recordName));
                        }
                    }
                    })]
            }]
        };
    },
    
    onSuccess: function() {
        this.window.fireEvent('contentschange');
        this.onCancel();
    },
    
    onCancel: function() {
        this.window.purgeListeners();
        this.window.close();
    }
    
});

Tine.widgets.dialog.DuplicateMergeDialog.getWindow = function(config) {
    return Tine.WindowFactory.getWindow({
        width: 800,
        height: 600,
        name: Tine.widgets.dialog.ImportDialog.windowNamePrefix + Ext.id(),
        contentPanelConstructor: 'Tine.widgets.dialog.DuplicateMergeDialog',
        contentPanelConstructorConfig: config
    });
};

/***/ }),
/* 1107 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2015 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.dialog');

/**
 * 
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.DuplicateResolveGridPanel
 * @extends     Ext.grid.EditorGridPanel
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @constructor
 * @param {Object} config The configuration options.
 */
Tine.widgets.dialog.DuplicateResolveGridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     * instance of the app object (required)
     */
    app: null,

    // private config overrides
    cls: 'tw-editdialog',
    border: false,
    layout: 'fit',
    enableColumnMove: false,
    stripeRows: true,
    trackMouseOver: false,
    clicksToEdit:2,
    enableHdMenu : false,
    viewConfig : {
        forceFit:true
    },

    initComponent: function() {

        this.title = i18n._('The record you try to add might already exist.');

        this.view = new Ext.grid.GroupingView({
            forceFit:true,
            hideGroupedColumn: true,
            groupTextTpl: '{group}'
        });

        this.initColumnModel();
        this.initToolbar();

        this.store.on('load', this.onStoreLoad, this);
        this.store.on('strategychange', this.onStoreLoad, this);
        this.on('cellclick', this.onCellClick, this);
        this.on('afterrender', this.onAfterRender, this);
        this.on('afteredit', this.onAfterEdit, this);

        Tine.widgets.dialog.DuplicateResolveGridPanel.superclass.initComponent.call(this);
    },

    onAfterRender: function() {
        // apply initial strategy
        this.onStoreLoad();
    },

    /**
     * is called on doubleclick on a cell and sets the editor if the cell is the finalValue
     * 
     * @param {Ext.grid.EditorGridPanel} grid
     * @param {number} rowIndex
     * @param {number} colIndex
     * @param {Ext.EventObject} e
     */
    onCellDblClick: function(grid, rowIndex, colIndex, e) {
        var strategy = this.actionCombo.getValue();
        
        // editing is just possible if strategy "keep" is chosen, or the finalValue when choosing strategy "mergeTheirs" or "mergeMine"
        if (! (((colIndex == 4) && (strategy == 'mergeMine' || strategy == 'mergeTheirs')) 
            || (strategy == 'keep' && (colIndex == 2)))) {
            return;
        }
        
        var cm = this.getColumnModel();
        var column = cm.getColumnAt(colIndex);
        var record = this.store.getAt(rowIndex);
        
        var fieldDef = record.get('fieldDef');
        
        if (! Ext.isFunction(fieldDef.type)) {
            switch (fieldDef.type) {
                case 'string':
                    column.setEditor(new Ext.form.TextField({}));
                    break;
                case 'date':
                    column.setEditor(new Ext.ux.form.ClearableDateField({}));
                    break;
                case 'int':
                    column.setEditor(new Ext.form.NumberField({}));
                    break;
                default:
                    // TODO: allow more types, create FieldRegistry
                    return;
            }
            this.startEditing(rowIndex, colIndex);
        } else {
            return;
        }
    },
    
    /**
     * is called after edit a field
     * 
     * @param {Ext.EventObject} e
     */
    onAfterEdit: function(e) {
        var record = this.store.getAt(e.row);
        if (e.field == 'clientValue') {
            record.set('finalValue', e.value);
        }
        this.stopEditing();
    },
    
    /**
     * adopt final value to the one selected
     * 
     * @param {Ext.grid.EditorGridPanel} grid
     * @param {number} rowIndex
     * @param {number} colIndex
     * @param {Ext.EventObject} e
     */
    onCellClick: function(grid, rowIndex, colIndex, e) {
        var dataIndex = this.getColumnModel().getDataIndex(colIndex),
            resolveRecord = this.store.getAt(rowIndex);

        if (resolveRecord && dataIndex && dataIndex.match(/clientValue|value\d+/)) {
            if (e.shiftKey && Ext.isString(resolveRecord.get(dataIndex))) {
                // combine string values if shift is pressed
                var record = this.store.getAt(rowIndex),
                    combined = record.get('clientValue') + ' / ' + record.get('value0'),
                    colToSelect = (colIndex == 2) ? 3 : 2,
                    otherCellEl = this.getView().getCell(rowIndex, colToSelect);

                if (otherCellEl) {
                    // TODO it would be nicer if this worked ...
                    //Ext.fly(otherCellEl).addClass('x-grid3-cell-selected');
                    Ext.fly(otherCellEl).highlight();
                }

                resolveRecord.set('finalValue', combined);
            } else {
                resolveRecord.set('finalValue', resolveRecord.get(dataIndex));
            }

            var celEl = this.getView().getCell(rowIndex, this.getColumnModel().getIndexById('finalValue'));
            if (celEl) {
                Ext.fly(celEl).highlight();
            }
        }
    },

    /**
     * called when the store got new data
     */
    onStoreLoad: function() {
        var strategy = this.store.resolveStrategy;

        this.actionCombo.setValue(strategy);
        this.applyStrategy(strategy);
    },

    /**
     * select handler of action combo
     */
    onActionSelect: function(combo, record, idx) {
        var strategy = record.get('value');

        this.applyStrategy(strategy);
        this.store.applyStrategy(strategy);
    },

    /**
     * apply an action (generate final data)
     * - mergeTheirs:   merge keep existing values (discards client record)
     * - mergeMine:     merge, keep client values (discards client record)
     * - discard:       discard client record
     * - keep:          keep client record (create duplicate)
     * 
     * @param {Ext.data.Store} store with field records (DuplicateResolveModel)
     * @param {Sting} strategy
     */
    applyStrategy: function(strategy) {
        var cm = this.getColumnModel(),
            view = this.getView();

        if (cm) {
            cm.setHidden(cm.getIndexById('clientValue'), strategy == 'discard');
            cm.setHidden(cm.getIndexById('finalValue'), strategy == 'keep');

            if (view && view.grid) {
                this.getView().refresh();
            }
        }
    },
    
    /**
     * init our column model
     */
    initColumnModel: function() {
        var valueRendererDelegate = this.valueRenderer.createDelegate(this);

        this.cm = new Ext.grid.ColumnModel([{
            header: i18n._('Field Group'),
            width:50, 
            sortable: true, 
            dataIndex:'group', 
            id: 'group', 
            menuDisabled:true
        }, {
            header: i18n._('Field Name'),
            width:50, 
            sortable: true, 
            dataIndex:'i18nFieldName', 
            id: 'i18nFieldName', 
            menuDisabled:true
        }, {
            header: i18n._('My Value'),
            width:50, 
            resizable:false, 
            dataIndex: 'clientValue', 
            id: 'clientValue', 
            menuDisabled:true, 
            renderer: valueRendererDelegate
        }, {
            header: i18n._('Existing Value'),
            width:50, 
            resizable:false, 
            dataIndex: 'value' + this.store.duplicateIdx, 
            id: 'value' + this.store.duplicateIdx, 
            menuDisabled:true, 
            renderer: valueRendererDelegate
        }, {
            header: i18n._('Final Value'),
            width:50, 
            resizable:false, 
            dataIndex: 'finalValue', 
            id: 'finalValue', 
            menuDisabled:true,
            renderer: valueRendererDelegate,
            editable: true
        }]);
    },

    /**
     * init the toolbar
     */
    initToolbar: function() {
        this.tbar = [{
            xtype: 'label',
            text: i18n._('Action:') + ' '
        }, {
            xtype: 'combo',
            ref: '../actionCombo',
            typeAhead: true,
            width: 350,
            triggerAction: 'all',
            lazyRender:true,
            mode: 'local',
            valueField: 'value',
            displayField: 'text',
            value: this.store.resolveStrategy,
            store: new Ext.data.ArrayStore({
                id: 0,
                fields: ['value', 'text'],
                data: [
                    ['mergeTheirs', i18n._('Merge, keeping existing details')],
                    ['mergeMine',   i18n._('Merge, keeping my details')],
                    ['discard',     i18n._('Keep existing record and discard mine')],
                    ['keep',        i18n._('Keep both records')]
                ]
            }),
            listeners: {
                scope: this, 
                select: this.onActionSelect
            }
        }];
    },

    /**
     * interceptor for all renderers
     * - manage colors
     * - pick appropriate renderer
     */
    valueRenderer: function(value, metaData, record, rowIndex, colIndex, store) {
        var fieldName = record.get('fieldName'),
            dataIndex = this.getColumnModel().getDataIndex(colIndex),
            renderer = Tine.widgets.grid.RendererManager.get(this.app, this.store.recordClass, fieldName, Tine.widgets.grid.RendererManager.CATEGORY_GRIDPANEL);

        // color management
        if (dataIndex && dataIndex.match(/clientValue|value\d+/) && !this.store.resolveStrategy.match(/(keep|discard)/)) {
            var action = record.get('finalValue') == value ? 'keep' : 'discard';
            metaData.css = 'tine-duplicateresolve-' + action + 'value';
        }
        
        return renderer.apply(this, arguments);
    }
});

/**
 * @class Tine.widgets.dialog.DuplicateResolveModel
 * A specific {@link Ext.data.Record} type that represents a field/clientValue/doublicateValues/finalValue set and is made to work with the
 * {@link Tine.widgets.dialog.DuplicateResolveGridPanel}.
 * @constructor
 */
Tine.widgets.dialog.DuplicateResolveModel = Ext.data.Record.create([
    {name: 'fieldName', type: 'string'},
    {name: 'fieldDef', type: 'fieldDef'},
    {name: 'group', type: 'string'},
    {name: 'i18nFieldName', type: 'string'},
    'clientValue', 'value0' , 'value1' , 'value2' , 'value3' , 'value4', 'finalValue'
]);

Tine.widgets.dialog.DuplicateResolveStore = Ext.extend(Ext.data.GroupingStore, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     * instance of the app object (required)
     */
    app: null,

    /**
     * @cfg {Ext.data.Record} recordClass
     * record definition class  (required)
     */
    recordClass: null,

    /**
     * @cfg {Ext.data.DataProxy} recordProxy
     */
    recordProxy: null,

    /**
     * @cfg {Object/Record} clientRecord
     */
    clientRecord: null,

    /**
     * @cfg {Array} duplicates
     * array of Objects or Records
     */
    duplicates: null,

    /**
     * @cfg {String} resolveStrategy
     * default resolve action
     */
    resolveStrategy: null,

    /**
     * @cfg {String} defaultResolveStrategy
     * default resolve action
     */
    defaultResolveStrategy: 'mergeTheirs',

    // private config overrides
    idProperty: 'fieldName',
    fields: Tine.widgets.dialog.DuplicateResolveModel,

    groupField: 'group',
//    groupOnSort: true,
//    remoteGroup: false,
    sortInfo: {field: 'group', oder: 'ASC'},

    constructor: function(config) {
        var initialData = config.data;
        delete config.data;

        this.reader = new Ext.data.JsonReader({
            idProperty: this.idProperty,
            fields: this.fields
        });

        Tine.widgets.dialog.DuplicateResolveStore.superclass.constructor.apply(this, arguments);

        if (! this.recordProxy && this.recordClass) {
            this.recordProxy = new Tine.Tinebase.data.RecordProxy({
                recordClass: this.recordClass
            });
        }

        // forece duplicate 0 atm.
        this.duplicateIdx = 0;

        if (initialData) {
            this.loadData(initialData);
        }
    },

    loadData: function(data, resolveStrategy, finalRecord) {
        // init records
        this.clientRecord = this.createRecord(data.clientRecord);

        this.duplicates = data.duplicates;
        Ext.each([].concat(this.duplicates), function(duplicate, idx) {this.duplicates[idx] = this.createRecord(this.duplicates[idx]);}, this);

        this.resolveStrategy = resolveStrategy || this.defaultResolveStrategy;

        if (finalRecord) {
            finalRecord = this.createRecord(finalRecord);
        }

        var fieldDefinitions = this.recordClass.getFieldDefinitions(),
            cfDefinitions = Tine.widgets.customfields.ConfigManager.getConfigs(this.app, this.recordClass, true);

        var recordsToAdd = [];
        Ext.each(fieldDefinitions.concat(cfDefinitions), function(field) {
            
            if (field.omitDuplicateResolving) {
                return;
            }

            var fieldName = field.name,
                fieldGroup = field.uiconfig ? field.uiconfig.group : field.group,
                recordData = {
                    fieldName: fieldName,
                    fieldDef: field,
                    i18nFieldName: field.label ? this.app.i18n._hidden(field.label) : this.app.i18n._hidden(fieldName),
                    clientValue: Tine.Tinebase.common.assertComparable(this.clientRecord.get(fieldName))
                };

            recordData.group = fieldGroup ? this.app.i18n._hidden(fieldGroup) : recordData.i18nFieldName;
            Ext.each([].concat(this.duplicates), function(duplicate, idx) {recordData['value' + idx] =  Tine.Tinebase.common.assertComparable(this.duplicates[idx].get(fieldName));}, this);

            var record = new Tine.widgets.dialog.DuplicateResolveModel(recordData, fieldName);

            if (finalRecord) {
                if (finalRecord.modified && finalRecord.modified.hasOwnProperty(fieldName)) {
//                    Tine.log.debug('Tine.widgets.dialog.DuplicateResolveStore::loadData ' + fieldName + 'changed from  ' + finalRecord.modified[fieldName] + ' to ' + finalRecord.get(fieldName));
                    record.set('finalValue', finalRecord.modified[fieldName]);

                }

                record.set('finalValue', finalRecord.get(fieldName));
            }

            recordsToAdd.push(record);
        }, this);

        this.insert(0, recordsToAdd);
        
        if (! finalRecord) {
            this.applyStrategy(this.resolveStrategy);
        }

        this.sortData();
        this.fireEvent('load', this);
    },

    /**
     * custom sorter
     * 
     * @param {String} f (ignored atm.)
     * @param {String} direction
     */
    sortData: function(f, direction) {
        direction = direction || 'ASC';
        var groupConflictScore = {};
            
        this.each(function(r) {
            var group = r.get('group'),
                myValue = String(r.get('clientValue')).replace(/^undefined$|^null$|^\[\]$/, ''),
                theirValue = String(r.get('value' + this.duplicateIdx)).replace(/^undefined$|^null$|^\[\]$/, '');
            
            if (! groupConflictScore.hasOwnProperty(group)) {
                groupConflictScore[group] = 990;
            }
            
            if (myValue || theirValue) {
                groupConflictScore[group] -= 1;
            }
            
            if (myValue != theirValue) {
                groupConflictScore[group] -= 10;
            }
            
        }, this);
        
        this.data.sort('ASC', function(r1, r2) {
            var g1 = r1.get('group'),
                v1 = String(groupConflictScore[g1]) + g1,
                g2 = r2.get('group'),
                v2 = String(groupConflictScore[g2]) + g2;
                
            return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
        });
    },

    /**
     * apply an strategy (generate final data)
     * - mergeTheirs:   merge keep existing values (discards client record)
     * - mergeMine:     merge, keep client values (discards client record)
     * - discard:       discard client record
     * - keep:          keep client record (create duplicate)
     * 
     * @param {Sting} strategy
     */
    applyStrategy: function(strategy) {
        Tine.log.debug('Tine.widgets.dialog.DuplicateResolveStore::applyStrategy() - action: ' + strategy);
        
        this.resolveStrategy = strategy;
        this.checkEditGrant();

        this.each(function(resolveRecord) {
            var theirs = resolveRecord.get('value' + this.duplicateIdx),
                mine = resolveRecord.get('clientValue'),
                location = this.resolveStrategy === 'keep' ? 'mine' : 'theirs';

            // undefined or empty theirs value -> keep mine
            if (this.resolveStrategy == 'mergeTheirs' && ['', 'null', 'undefined', '[]'].indexOf(String(theirs)) > -1) {
                location = 'mine';
            }

            // only keep mine if its not undefined or empty
            if (this.resolveStrategy == 'mergeMine' && ['', 'null', 'undefined', '[]'].indexOf(String(mine)) < 0) {
                location = 'mine';
            }

            // special merge for tags
            if (resolveRecord.get('fieldName') == 'tags') {
                resolveRecord.set('finalValue', this.mergeTags(mine, theirs));
            } else {
                resolveRecord.set('finalValue', location === 'mine' ? mine : theirs);
            }
            
            Tine.log.debug('Tine.widgets.dialog.DuplicateResolveStore::applyStrategy() - resolved record field: ' + resolveRecord.get('fieldName'));
            Tine.log.debug(resolveRecord);
        }, this);
        
        this.commitChanges();
    },

    /**
     * merge tags
     *
     * @param {Array} mine
     * @param {Array} theirs
     *
     * TODO generalize me for "merge-able" values
     */
    mergeTags: function(mine, theirs) {
        var result = [],
            records = Tine.Tinebase.common.assertComparable([].concat(this.resolveStrategy != 'discard' ? mine : []).concat(this.resolveStrategy != 'keep' ? theirs : [])),
            recordIds = [];

        // remove duplicates (TODO should be simplified)
        Ext.each(records, function(value) {
            if (value && recordIds.indexOf(value['id']) < 0) {
                result.push(value);
                recordIds.push(value['id']);
            }
        });

        return result;
    },
    
    checkEditGrant: function() {
        var grant = ! this.recordClass.getMeta('containerProperty') ? true : this.duplicates[this.duplicateIdx].get('container_id') ? this.duplicates[this.duplicateIdx].get(this.recordClass.getMeta('containerProperty')).account_grants['editGrant'] : false;

        // change strategy from merge to keep if user has no rights to merge
        if (this.resolveStrategy.match(/^merge/) && ! grant) {
            Tine.log.info('Tine.widgets.dialog.DuplicateResolveStore::checkEditGrant() - user has no editGrant, changing strategy to keep');
            this.resolveStrategy = 'keep';
            this.fireEvent('strategychange', this, this.resolveStrategy);
        }
    },

    /**
     * returns record with conflict resolved data
     */
    getResolvedRecord: function() {
        var record = (this.resolveStrategy == 'keep' ? this.clientRecord : this.duplicates[this.duplicateIdx]).copy();

        this.each(function(resolveRecord) {
            var fieldName = resolveRecord.get('fieldName'),
                finalValue = resolveRecord.get('finalValue'),
                modified = resolveRecord.modified || {};

            // also record changes
            if (modified.hasOwnProperty('finalValue')) {
                Tine.log.debug('Tine.widgets.dialog.DuplicateResolveStore::getResolvedRecord ' + fieldName + ' changed from ' + modified.finalValue + ' to ' + finalValue);
                record.set(fieldName, Tine.Tinebase.common.assertComparable(modified.finalValue));
            }

            record.set(fieldName, Tine.Tinebase.common.assertComparable(finalValue));

        }, this);

        Tine.log.debug('Tine.widgets.dialog.DuplicateResolveStore::getResolvedRecord() resolved record:');
        Tine.log.debug(record);
        
        return record;
    },

    /**
     * create record from data
     * 
     * @param {Object} data
     * @return {Record}
     */
    createRecord: function(data) {
        return Ext.isFunction(data.beginEdit) ? data : this.recordProxy.recordReader({responseText: Ext.encode(data)});
    }
});


/***/ }),
/* 1108 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.Tinebase.widgets', 'Tine.widgets.grid');

/**
 * grid details panel
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.DetailsPanel
 * @extends     Ext.Panel
 * 
 * <p>Grid Details Panel</p>
 * <p><pre>
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.widgets.grid.DetailsPanel
 */
Tine.widgets.grid.DetailsPanel = Ext.extend(Ext.Panel, {
    /**
     * @cfg {Number} defaultHeight
     * default Heights
     */
    defaultHeight: 125,

    /**
     * @cfg {Ext.data.Record} recordClass
     * record definition class
     */
    recordClass: null,

    /**
     * @cfg {Bool} listenMessageBus
     * listen to messagebus for record changes
     */
    listenMessageBus: true,

    /**
     * @property grid
     * @type Tine.widgets.grid.GridPanel
     */
    grid: null,

    /**
     * @property record
     * @type Tine.Tinebase.data.Record
     */
    record: null,
    
    /**
     * @property defaultInfosPanel holds panel for default information
     * @type Ext.Panel
     */
    defaultInfosPanel: null,
    
    /**
     * @property singleRecordPanel holds panel for single record details
     * @type Ext.Panel
     */
    singleRecordPanel: null,
    
    /**
     * @property multiRecordsPanel holds panel for multi selection aggregates/information
     * @type Ext.Panel
     */
    multiRecordsPanel: null,

    /**
     * @private
     */
    border: false,
    autoScroll: true,
    layout: 'card',
    activeItem: 0,
    
    /**
     * get panel for default information
     * 
     * @return {Ext.Panel}
     */
    getDefaultInfosPanel: function() {
        if (! this.defaultInfosPanel) {
            if (this.recordClass) {
                this.defaultInfosPanel = new Tine.widgets.display.DefaultDisplayPanel({
                    recordClass : this.recordClass
                });
                this.defaultHeight = Math.max(this.defaultHeight, this.defaultInfosPanel.defaultHeight);
            } else {
                this.defaultInfosPanel = new Ext.Panel(this.defaults);
            }
        }
        return this.defaultInfosPanel;
    },
    
    /**
     * get panel for single record details
     * 
     * @return {Ext.Panel}
     */
    getSingleRecordPanel: function() {
        if (! this.singleRecordPanel) {

            if (this.recordClass) {
                this.singleRecordPanel = new Tine.widgets.display.RecordDisplayPanel({
                    recordClass : this.recordClass
                });
                this.defaultHeight = Math.max(this.defaultHeight, this.singleRecordPanel.defaultHeight);
            } else {
                this.singleRecordPanel = new Ext.Panel(this.defaults);
            }
        }
        return this.singleRecordPanel;
    },
    
    /**
     * get panel for multi selection aggregates/information
     * 
     * @return {Ext.Panel}
     */
    getMultiRecordsPanel: function() {
        if (! this.multiRecordsPanel) {
            this.multiRecordsPanel = new Ext.Panel(this.defaults);
        }
        return this.multiRecordsPanel;
    },
        
    /**
     * inits this details panel
     */
    initComponent: function() {

        this.items = [
            this.getDefaultInfosPanel(),
            this.getSingleRecordPanel(),
            this.getMultiRecordsPanel()
        ];
        
        // NOTE: this defaults overwrites configs in already instanciated configs -> see docu
        Ext.each(this.items, function(item) {
            Ext.applyIf(item, {
                border: false,
                autoScroll: true,
                layout: 'fit'
            });
        }, this);

        if (this.listenMessageBus && this.recordClass) {
            this.initMessageBus();
        }

        Tine.widgets.grid.DetailsPanel.superclass.initComponent.apply(this, arguments);
    },

    initMessageBus: function() {
        postal.subscribe({
            channel: "recordchange",
            topic: [this.recordClass.getMeta('appName'), this.recordClass.getMeta('modelName'), '*'].join('.'),
            callback: this.onRecordChanges.createDelegate(this)
        });
    },

    /**
     * bus notified about record changes
     */
    onRecordChanges: function(data, e) {
        var _ = window.lodash;

        if (this.singleRecordPanel.isVisible() && this.record.id == data.id) {
            this.record = Tine.Tinebase.data.Record.setFromJson(data, this.recordClass);
            this.updateDetails(this.record, this.getSingleRecordPanel().body);
        }
    },

    /**
     * update template
     * 
     * @param {Tine.Tinebase.data.Record} record
     * @param {Mixed} body
     */
    updateDetails: function(record, body) {
        if (this.tpl) {
            this.tpl.overwrite(body, record.data);
        } else {
            this.getSingleRecordPanel().loadRecord.defer(100, this.getSingleRecordPanel(), [record]);
        }
    },
    
    /**
     * show default template
     * 
     * @param {Mixed} body
     */
    showDefault: function(body) {
        if (this.defaultTpl && body) {
            this.defaultTpl.overwrite(body);
        }
    },
    
    /**
     * show template for multiple rows
     * 
     * @param {Ext.grid.RowSelectionModel} sm
     * @param {Mixed} body
     */
    showMulti: function(sm, body) {
        if (this.multiTpl) {
            this.multiTpl.overwrite(body);
        }
    },
    
    /**
     * bind grid to details panel
     * 
     * @param {Tine.widgets.grid.GridPanel} grid
     */
    doBind: function(grid) {
        this.grid = grid;
        
        /*
        grid.getSelectionModel().on('selectionchange', function(sm) {
            if (this.updateOnSelectionChange) {
                this.onDetailsUpdate(sm);
            }
        }, this);
        */
        
        grid.store.on('load', function(store) {
            this.onDetailsUpdate(grid.getSelectionModel());
        }, this);
    },
    
    /**
     * update details panel
     * 
     * @param {Ext.grid.RowSelectionModel} sm
     */
    onDetailsUpdate: function(sm) {
        var count = sm.getCount();
        if (count === 0 || sm.isFilterSelect) {
            if(this.layout && Ext.isFunction(this.layout.setActiveItem)) {
                this.layout.setActiveItem(this.getDefaultInfosPanel());
            }
            this.showDefault(this.getDefaultInfosPanel().body);
            this.record = null;
        } else if (count === 1) {
            this.layout.setActiveItem(this.getSingleRecordPanel());
            this.record = sm.getSelected();
            this.updateDetails(this.record, this.getSingleRecordPanel().body);
        } else if (count > 1) {
            this.layout.setActiveItem(this.getMultiRecordsPanel());
            this.record = sm.getSelected();
            this.showMulti(sm, this.getMultiRecordsPanel().body);
        }
    },
    
    /**
     * get load mask
     * 
     * @return {Ext.LoadMask}
     */
    getLoadMask: function() {
        if (! this.loadMask) {
            this.loadMask = new Ext.LoadMask(this.el);
        }
        
        return this.loadMask;
    },
    
    /**
     * Wraps the items with default layout
     * 
     * @param {Array} items
     * @return {Object}
     */
    wrapPanel: function(items, labelWidth) {
        return {
            layout: 'fit',
            border: false,
            items: [{
                layout: 'vbox',
                border: false,
                layoutConfig: {
                    align:'stretch'
                },
                items: [{
                    layout: 'hbox',
                    flex: 1,
                    border: false,
                    layoutConfig: {
                        padding:'5',
                        align:'stretch'
                    },
                    defaults:{
                        margins:'0 5 0 0'
                    },
                    items: [{
                        flex: 2,
                        layout: 'ux.display',
                        labelWidth: labelWidth,
                        padding: 10,
                        layoutConfig: {
                            background: 'solid',
                            margins: '0 5 0 0'
                        },
                        items: items
                    }]
                }]
            }]
        }
    }
});

Ext.reg('widget-detailspanel', Tine.widgets.grid.DetailsPanel);

/***/ }),
/* 1109 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * TODO         add year to 'inweek' filter?
 */
Ext.ns('Tine.widgets.grid');

/**
 * Model of filter
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FilterModel
 * @extends     Ext.util.Observable
 * @constructor
 */
Tine.widgets.grid.FilterModel = function(config) {
    Ext.apply(this, config);
    Tine.widgets.grid.FilterModel.superclass.constructor.call(this);
    
    this.addEvents(
      /**
       * @event filtertrigger
       * is fired when user request to update list by filter
       * @param {Tine.widgets.grid.FilterToolbar}
       */
      'filtertrigger'
    );
    
    this.initComponent();
};

Ext.extend(Tine.widgets.grid.FilterModel, Ext.util.Observable, {
    /**
     * @cfg {String} label 
     * label for the filter
     */
    label: '',
    
    /**
     * @cfg {String} field
     * name of th field to filter
     */
    field: '',
    
    /**
     * @cfg {String} valueType
     * type of value
     */
    valueType: 'string',
    
    /**
     * @cfg {String} defaultValue
     * default value
     */
    defaultValue: null,
    
    /**
     * @cfg {Array} operators
     * valid operators
     */
    operators: null,
    
    /**
     * @cfg {String} defaultOperator
     * name of the default operator
     */
    defaultOperator: null,
    
    /**
     * @cfg {Array} customOperators
     * define custom operators
     */
    customOperators: null,
    
    /**
     * @cfg {Ext.data.Store|Array} 
     * used by combo valueType
     */
    store: null,
    
    /**
     * @cfg {String} displayField
     * used by combo valueType
     */
    displayField: null,
    
    /**
     * @cfg {String} valueField
     * used by combo valueType
     */
    valueField: null,

    /**
     * @cfg filterValueWidth
     * @type Integer
     */
    filterValueWidth: 200,

    /**
     * @cfg dateFilterSupportsPeriod
     * @type Boolean
     */
    dateFilterSupportsPeriod: true,
    
    /**
     * holds the future operators of date filters. Auto set by getDateFutureOps
     * 
     * @type {Array}
     */
    dateFutureOps: null,
    
    /**
     * holds the future operators of date filters. Auto set by getDatePastOps
     * 
     * @type {Array}
     */
    datePastOps: null,
    
    /**
     * @private
     */
    initComponent: function() {
        this.isFilterModel = true;
        
        if (! this.operators) {
            this.operators = [];
        }
        
        
        if (this.defaultOperator === null) {
            switch (this.valueType) {
                
                case 'date':
                    this.defaultOperator = 'within';
                    break;
                case 'account':
                case 'group':
                case 'user':
                case 'bool':
                case 'number':
                case 'percentage':
                case 'combo':
                case 'country':
                    this.defaultOperator = 'equals';
                    break;
                case 'string':
                default:
                    this.defaultOperator = 'contains';
                    break;
            }
        }
        
        if (this.defaultValue === null) {
            switch (this.valueType) {
                case 'customfield':
                case 'string':
                    this.defaultValue = '';
                    break;
                case 'bool':
                    this.defaultValue = '1';
                    break;
                case 'percentage':
                    this.defaultValue = '0';
                    break;
                case 'date':
                case 'account':
                case 'group':
                case 'user':
                case 'number':
                case 'country':
                default:
                    break;
            }
        }
        
        this.datePastOps = this.getDatePastOps();
        this.dateFutureOps = this.getDateFutureOps();
    },
    
    /**
     * returns past operators for date fields, may be overridden
     * 
     * @return {Array}
     */
    getDatePastOps: function() {
        return [
            ['dayThis',         i18n._('today')],
            ['dayLast',         i18n._('yesterday')],
            ['weekThis',        i18n._('this week')],
            ['weekLast',        i18n._('last week')],
            ['weekBeforeLast',  i18n._('the week before last')],
            ['monthThis',       i18n._('this month')],
            ['monthLast',       i18n._('last month')],
            ['monthThreeLast',  i18n._('last three months')],
            ['monthSixLast',    i18n._('last six months')],
            ['anytime',         i18n._('anytime')],
            ['quarterThis',     i18n._('this quarter')],
            ['quarterLast',     i18n._('last quarter')],
            ['yearThis',        i18n._('this year')],
            ['yearLast',        i18n._('last year')]
        ];
    },
    
    /**
     * returns future operators for date fields, may be overridden
     * 
     * @return {Array}
     */
    getDateFutureOps: function() {
        return [
            ['dayNext',         i18n._('tomorrow')],
            ['weekNext',        i18n._('next week')],
            ['monthNext',       i18n._('next month')],
            ['quarterNext',     i18n._('next quarter')],
            ['yearNext',        i18n._('next year')]
        ];
    },
    
    onDestroy: Ext.emptyFn,

    getItemGender: function() {
        var me = this,
            app = Tine.Tinebase.appMgr.get(me.app),
            i18n = app ? app.i18n : window.i18n,
            gender = this.gender || i18n._hidden('GENDER_' + me.label);

        return String(gender).match(/^GENDER_/) ? 'other' : gender;
    },
    /**
     * operator renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    operatorRenderer: function (filter, el) {
        var _ = window.lodash,
            me = this,
            gender = me.getItemGender(),
            operatorStore = new Ext.data.JsonStore({
            fields: ['operator', 'label'],
            data: [
                {operator: 'contains',      label: i18n._('contains')},
                {operator: 'wordstartswith',label: i18n._('contains word starting with')},
                {operator: 'notcontains',   label: i18n._('contains not')},
                {operator: 'regex',         label: i18n._('reg. exp.')},
                {operator: 'equals',        label: i18n._('is equal to')},
                {operator: 'equalsspecial', label: i18n._('is equal to without (-, )')},
                {operator: 'greater',       label: i18n._('is greater than')},
                {operator: 'less',          label: i18n._('is less than')},
                {operator: 'not',           label: i18n._('is not')},
                {operator: 'in',            label: formatMessage('{gender, select, male {one of} female {one of} other {one of}}', {gender: gender})},
                {operator: 'notin',         label: formatMessage('{gender, select, male {none of} female {none of} other {none of}}', {gender: gender})},
                {operator: 'before',        label: i18n._('is before')},
                {operator: 'after',         label: i18n._('is after')},
                {operator: 'within',        label: i18n._('is within')},
                {operator: 'inweek',        label: i18n._('is in week no.')},
                {operator: 'startswith',    label: i18n._('starts with')},
                {operator: 'endswith',      label: i18n._('ends with')},
                {operator: 'definedBy',     label: i18n._('defined by')}
            ].concat(this.getCustomOperators() || []),
            remoteSort: false,
            sortInfo: {
                field: 'label',
                direction: 'ASC'
            }
        });

        // filter operators
        if (this.operators.length == 0) {
            switch (this.valueType) {
                case 'fulltext':
                    this.operators.push('wordstartswith');
                    break;
                case 'string':
                    this.operators.push('contains', 'notcontains', 'equals', 'startswith', 'endswith', 'not', 'in', 'notin');
                    break;
                case 'customfield':
                    this.operators.push('contains', 'equals', 'startswith', 'endswith', 'not');
                    break;
                case 'date':
                    this.operators.push('equals', 'before', 'after', 'within', 'inweek');
                    break;
                case 'number':
                case 'percentage':
                    this.operators.push('equals', 'greater', 'less');
                    break;
                default:
                    this.operators.push(this.defaultOperator);
                    break;
            }
        }
        
        if (this.operators.length > 0) {
            operatorStore.each(function(operator) {
                if (this.operators.indexOf(operator.get('operator')) < 0 ) {
                    operatorStore.remove(operator);
                }
            }, this);
        }

        // add registered / custom operators
        _.each(this.operators, function(operator) {
            if (_.isObject(operator)) {
                operatorStore.loadData([{operator: operator.operator.filterName,     label: operator.label}], true);
            }
        });

        if (operatorStore.getCount() > 1) {
            var operator = new Ext.form.ComboBox({
                filter: filter,
                width: 80,
                id: 'tw-ftb-frow-operatorcombo-' + filter.id,
                mode: 'local',
                lazyInit: false,
                emptyText: i18n._('select a operator'),
                forceSelection: true,
                typeAhead: true,
                triggerAction: 'all',
                store: operatorStore,
                displayField: 'label',
                valueField: 'operator',
                value: filter.get('operator') ? filter.get('operator') : this.defaultOperator,
                tpl: '<tpl for="."><div class="x-combo-list-item tw-ftb-operator-{operator}">{label}</div></tpl>',
                renderTo: el
            });
            operator.on('select', function(combo, newRecord, newKey) {
                if (combo.value != combo.filter.get('operator')) {
                    this.onOperatorChange(combo.filter, combo.value);
                }
            }, this);
            
            operator.on('blur', function(combo) {
                if (combo.value != combo.filter.get('operator')) {
                    this.onOperatorChange(combo.filter, combo.value);
                }
            }, this);
            
        } else if (this.operators[0] == 'freeform') {
            var operator = new Ext.form.TextField({
                filter: filter,
                width: 100,
                emptyText: this.emptyTextOperator || '',
                value: filter.get('operator') ? filter.get('operator') : '',
                renderTo: el
            });
        } else {
            var operator = new Ext.form.Label({
                filter: filter,
                width: 100,
                style: {margin: '0px 10px'},
                getValue: function() { return operatorStore.getAt(0).get('operator'); },
                text : operatorStore.getAt(0).get('label'),
                renderTo: el,
                setValue: Ext.emptyFn
            });
        }
        
        return operator;
    },
    
    /**
     * get custom operators
     * 
     * @return {Array}
     */
    getCustomOperators: function() {
        return this.customOperators || [];
    },
    
    /**
     * called on operator change of a filter row
     * @private
     */
    onOperatorChange: function(filter, newOperator) {
        filter.set('operator', newOperator);
        filter.set('value', '');
        
        // for date filters we need to rerender the value section
        if (this.valueType == 'date') {
            switch (newOperator) {
                case 'within':
                    filter.numberfield.hide();
                    filter.datePicker.hide();
                    filter.withinCombo.show();
                    filter.formFields.value = filter.withinCombo;
                    break;
                case 'inweek':
                    filter.withinCombo.hide();
                    filter.datePicker.hide();
                    filter.numberfield.show();
                    filter.formFields.value = filter.numberfield;
                    break;
                default:
                    filter.withinCombo.hide();
                    filter.numberfield.hide();
                    filter.datePicker.show();
                    filter.formFields.value = filter.datePicker;
            }
        }

        var _ = window.lodash,
            valueField = _.get(filter, 'formFields.value');

        if (valueField instanceof Ext.ux.form.ClearableTextField) {
            valueField.disableTrigger = (newOperator != 'contains');
            valueField.checkTrigger();
        }
    },
    
    /**
     * value renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    valueRenderer: function(filter, el) {
        var value,
            fieldWidth = this.filterValueWidth,
            commonOptions = {
                filter: filter,
                width: fieldWidth,
                id: 'tw-ftb-frow-valuefield-' + filter.id,
                renderTo: el,
                value: filter.data.value ? filter.data.value : this.defaultValue
            };
        
        switch (this.valueType) {
            case 'date':
                value = this.dateValueRenderer(filter, el);
                break;
            case 'percentage':
                value = new Ext.ux.PercentCombo(Ext.apply(commonOptions, {
                    listeners: {
                        'specialkey': function(field, e) {
                             if(e.getKey() == e.ENTER){
                                 this.onFiltertrigger();
                             }
                        },
                        'select': this.onFiltertrigger,
                        scope: this
                    }
                }));
                break;
            case 'user':
                value = new Tine.Addressbook.SearchCombo(Ext.apply(commonOptions, {
                    listWidth: 350,
                    emptyText: i18n._('Search Account ...'),
                    userOnly: true,
                    name: 'organizer',
                    nameField: 'n_fileas',
                    useAccountRecord: true,
                    listeners: {
                        'specialkey': function(field, e) {
                             if(e.getKey() == e.ENTER){
                                 this.onFiltertrigger();
                             }
                        },
                        'select': this.onFiltertrigger,
                        scope: this
                    }
                }));
                break;
            case 'bool':
                value = new Ext.form.ComboBox(Ext.apply(commonOptions, {
                    mode: 'local',
                    forceSelection: true,
                    triggerAction: 'all',
                    store: [
                        [0, Locale.getTranslationData('Question', 'no').replace(/:.*/, '')], 
                        [1, Locale.getTranslationData('Question', 'yes').replace(/:.*/, '')]
                    ],
                    listeners: {
                        'specialkey': function(field, e) {
                             if(e.getKey() == e.ENTER){
                                 this.onFiltertrigger();
                             }
                        },
                        'select': this.onFiltertrigger,
                        scope: this
                    }
                }));
                break;
            case 'combo':
                var comboConfig = Ext.apply(commonOptions, {
                    mode: 'local',
                    forceSelection: true,
                    triggerAction: 'all',
                    store: this.store,
                    listeners: {
                        'specialkey': function(field, e) {
                             if(e.getKey() == e.ENTER){
                                 this.onFiltertrigger();
                             }
                        },
                        'select': this.onFiltertrigger,
                        scope: this
                    }
                });
                if (this.displayField !== null && this.valueField !== null) {
                    comboConfig.displayField = this.displayField;
                    comboConfig.valueField = this.valueField;
                }
                value = new Ext.form.ComboBox(comboConfig);
                break;
            case 'country':
                value = new Tine.widgets.CountryCombo(Ext.apply(commonOptions, {
                }));
                break;
            case 'customfield':
            case 'string':
            case 'number':
            default:
                value = new Ext.ux.form.ClearableTextField(Ext.apply(commonOptions, {
                    emptyText: this.emptyText,
                    listeners: {
                        scope: this,
                        specialkey: function(field, e){
                            if(e.getKey() == e.ENTER){
                                this.onFiltertrigger();
                            }
                        }
                    }
                }));
                break;
        }
        
        return value;
    },
    
    /**
     * called on value change of a filter row
     * @private
     */
    onValueChange: function(filter, newValue) {
        filter.set('value', newValue);
    },
    
    /**
     * render a date value
     * 
     * we place a picker and a combo in the dom element and hide the one we don't need yet
     */
    dateValueRenderer: function(filter, el) {
        var me = this,
            operator = filter.get('operator') ? filter.get('operator') : this.defaultOperator;
        
        var valueType = 'datePicker';
        switch (operator) {
            case 'within':
                valueType = 'withinCombo';
                break;
            case 'inweek':
                valueType = 'numberfield';
                break;
        }
        
        var comboOps = this.pastOnly ? this.datePastOps : this.dateFutureOps.concat(this.datePastOps);
        var comboValue = 'weekThis';
        if (filter.data.value && filter.data.value.toString().match(/^[a-zA-Z]+$/)) {
            comboValue = filter.data.value.toString();
        } else if (filter.data.value && filter.data.value.from) {
            comboValue = filter.data.value;
        } else if (this.defaultValue && this.defaultValue.toString().match(/^[a-zA-Z]+$/)) {
            comboValue = this.defaultValue.toString();
        }
        if (this.dateFilterSupportsPeriod) {
            comboOps.unshift(['period', i18n._('Period ...')]);
        }

        filter.withinCombo = new Ext.form.ComboBox({
            hidden: valueType != 'withinCombo',
            filter: filter,
            width: this.filterValueWidth,
            renderTo: el,
            mode: 'local',
            lazyInit: false,
            forceSelection: true,
            typeAhead: true,
            triggerAction: 'all',
            store: comboOps,
            editable: false,
            listeners: {
                'specialkey': function(field, e) {
                     if(e.getKey() == e.ENTER){
                         this.onFiltertrigger();
                     }
                },
                'select': function(c) {
                    if (c.getValue() != 'period') {
                        this.onFiltertrigger();
                    }
                },
                scope: this
            }
        });
        filter.withinCombo.origSetValue = filter.withinCombo.setValue;
        filter.withinCombo.origGetValue = filter.withinCombo.getValue;
        filter.withinCombo.origOnSelect = filter.withinCombo.onSelect;
        filter.withinCombo.setValue = function(value) {
            // try to convert some values when initialising
            var range = this.range || (value && value.from ?
                Ext.ux.form.PeriodPicker.getRange(value):
                Ext.ux.form.PeriodPicker.prototype.range);

            if (me.dateFilterSupportsPeriod && ! this.manualSelect && value != 'period' && !value.from) {
                range = window.lodash.get(String(value).match(/(day|week|month|quater|year)This$/), 1);
                if (range) {
                    value = 'period';
                }
            }

            if (value == 'period' || value.from) {
                this.setRawValue('');

                if (! this.pp) {
                    this.pp = new Ext.ux.form.PeriodPicker({
                        range: range,
                        periodIncludesUntil: true,
                        width: me.filterValueWidth - 18,
                        cls: 'x-pp-combo',
                        'renderTo': this.wrap
                    });
                    this.pp.on('change', me.onFiltertrigger, me , {buffer: 250});
                }
                this.pp.show();
                if (value.from) {
                    this.pp.setValue(value);
                }
            } else {
                if (this.pp) {
                    this.pp.hide();
                }
                return this.origSetValue(value);
            }
        };

        filter.withinCombo.getValue = function(value) {
            if (this.pp && this.pp.isVisible()) {
                return this.pp.getValue();
            } else {
                return this.origGetValue()
            }
        };

        filter.withinCombo.onSelect = function() {
            this.manualSelect = true;
            return this.origOnSelect.apply(this, arguments);
        };

        filter.withinCombo.setValue(comboValue);

        var pickerValue = '';
        if (Ext.isDate(filter.data.value)) {
            pickerValue = filter.data.value;
        } else if (Ext.isDate(Date.parseDate(filter.data.value, Date.patterns.ISO8601Long))) {
            pickerValue = Date.parseDate(filter.data.value, Date.patterns.ISO8601Long);
        } else if (Ext.isDate(this.defaultValue)) {
            pickerValue = this.defaultValue;
        }
        
        filter.datePicker = new Ext.form.DateField({
            hidden: valueType != 'datePicker',
            filter: filter,
            width: this.filterValueWidth,
            value: pickerValue,
            renderTo: el,
            listeners: {
                'specialkey': function(field, e) {
                     if(e.getKey() == e.ENTER){
                         this.onFiltertrigger();
                     }
                },
                'select': this.onFiltertrigger,
                scope: this
            }
        });
        
        filter.numberfield = new Ext.form.NumberField({
            hidden: valueType != 'numberfield',
            filter: filter,
            width: this.filterValueWidth,
            value: pickerValue,
            renderTo: el,
            minValue: 1,
            maxValue: 52,
            maxLength: 2,   
            allowDecimals: false,
            allowNegative: false,
            listeners: {
                scope: this,
                specialkey: function(field, e){
                    if(e.getKey() == e.ENTER){
                        this.onFiltertrigger();
                    }
                }
            }
        });
        
        // upps, how to get a var i only know the name of???
        return filter[valueType];
    },
    
    /**
     * @private
     */
    onFiltertrigger: function() {
        // auto search on filter change only if set in user preferences
        if (parseInt(Tine.Tinebase.registry.get('preferences').get('filterChangeAutoSearch'), 10) === 1) {
            this.fireEvent('filtertrigger', this);
        }
    }
});

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FilterRegistry
 * @singleton
 */
Tine.widgets.grid.FilterRegistry = function() {
    var filters = {};
    
    return {
        register: function(appName, modelName, filter) {
            var key = appName + '.' + modelName;
            if (! filters[key]) {
                filters[key] = [];
            }
            
            filters[key].push(filter);
        },
        
        get: function(appName, modelName) {
            if (Ext.isFunction(appName.getMeta)) {
                modelName = appName.getMeta('modelName');
                appName = appName.getMeta('appName');
            }
            
            var key = appName + '.' + modelName;
            
            return filters[key] || [];
        }
    };
}();


/***/ }),
/* 1110 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * Model of filter
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.MonthFilter
 * @extends     Tine.widgets.grid.FilterModel
 */

Tine.widgets.grid.MonthFilter = Ext.extend(Tine.widgets.grid.FilterModel, {
    
    valueType: 'date',
    defaultValue: 'monthLast',
    dateFilterSupportsPeriod: false,

    appName: null,
    label: null,
    
    /**
     * @private
     */
    initComponent: function() {
        Tine.widgets.grid.MonthFilter.superclass.initComponent.call(this);
        
        this.app = Tine.Tinebase.appMgr.get(this.appName);
        this.label = this.label ? this.app.i18n._hidden(this.label) : i18n._("Month");
        
        this.operators = ['within', 'before', 'after', 'equals'];
    },
    
    /**
     * called on operator change of a filter row
     * @private
     */
    onOperatorChange: function(filter, newOperator) {
        filter.set('operator', newOperator);
        filter.set('value', '');
        
        // for date filters we need to rerender the value section
        switch (newOperator) {
            case 'within':
                filter.numberfield.hide();
                filter.datePicker.hide();
                filter.textfield.hide();
                filter.withinCombo.show();
                filter.formFields.value = filter.withinCombo;
                break;
            case 'inweek':
                filter.withinCombo.hide();
                filter.datePicker.hide();
                filter.textfield.hide();
                filter.numberfield.show();
                filter.formFields.value = filter.numberfield;
                break;
            case 'equals':
                filter.withinCombo.hide();
                filter.datePicker.hide();
                filter.numberfield.hide();
                filter.textfield.show();
                filter.formFields.value = filter.textfield;
                break;
            default:
                filter.withinCombo.hide();
                filter.numberfield.hide();
                filter.textfield.hide();
                filter.datePicker.show();
                filter.formFields.value = filter.datePicker;
        }
    },
    
    /**
     * render a date value
     * 
     * we place a picker and a combo in the dom element and hide the one we don't need yet
     */
    dateValueRenderer: function(filter, el) {
        var operator = filter.get('operator') ? filter.get('operator') : this.defaultOperator;
        
        if (! filter.textfield) {
            filter.textfield = new Ext.ux.form.ClearableTextField({
                filter: filter,
                hidden: true,
                width: this.filterValueWidth,
                id: 'tw-ftb-frow-valuefield-' + filter.id,
                renderTo: el,
                value: filter.data.value ? filter.data.value : '',
                emptyText: this.emptyText,
                listeners: {
                    scope: this,
                    change: function() { this.onFiltertrigger() },
                    specialkey: function(field, e){
                        if(e.getKey() == e.ENTER){
                            this.onFiltertrigger();
                        }
                    }
                }
            });
        }
        
        if (operator != 'equals') {
            return Tine.widgets.grid.MonthFilter.superclass.dateValueRenderer.call(this, filter, el);
        }
        
        return filter.textfield;
    },
    /**
     * returns past operators for date fields, may be overridden
     * 
     * @return {Array}
     */
    getDatePastOps: function() {
        return [
            ['monthThis',       i18n._('this month')],
            ['monthLast',       i18n._('last month')],
            ['quarterThis',     i18n._('this quarter')],
            ['quarterLast',     i18n._('last quarter')],
            ['yearThis',        i18n._('this year')],
            ['yearLast',        i18n._('last year')]
        ];
    },
    
    /**
     * returns future operators for date fields, may be overridden
     * 
     * @return {Array}
     */
    getDateFutureOps: function() {
        return [
        ];
    }
});

/***/ }),
/* 1111 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.widgets.grid');

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FilterPlugin
 * @extends     Ext.util.Observable
 * <p>Base class for all grid filter plugins.</p>
 * @constructor
 */
Tine.widgets.grid.FilterPlugin = function(config) {
    config = config || {};
    Ext.apply(this, config);
    
    this.addEvents(
        /**
         * @event change
         * Fired when the filter changed.
         * @param {Tine.widgets.grid.FilterPlugin} this
         */
        'change'
    );
    
    Tine.widgets.grid.FilterPlugin.superclass.constructor.call(this);
};

Ext.extend(Tine.widgets.grid.FilterPlugin, Ext.util.Observable, {
    /**
     * @property {Ext.grid.GridPanel} grid
     */
    grid: null,
    
    /**
     * @property {Ext.data.Store} store
     */
    store: null,
    
    /**
     * @property {String} xtype
     */
    xtype: 'filterplugin',
    
    /**
     * main method which must return the filter object of this filter
     * 
     * @return {Object}
     */
    getValue: Ext.emptyFn,
    
    /**
     * returns gird panel this filterplugin is bound to/for
     * 
     * @return {Ext.Panel}
     */
    getGridPanel: function() {
        return this.grid;
    },
    
    /**
     * main method which must set the filter from given data
     * 
     * @param {Array} all filters
     */
    setValue: Ext.emptyFn,
    
    /**
     * plugin method of Ext.grid.GridPanel
     * 
     * @param {Ext.grid.GridPanel} grid
     */
    init: function(grid) {
        this.grid = grid;
        this.store = grid.store;
        this.doBind();
    },
    
    /**
     * binds this plugin to the grid store
     */
    doBind: function() {
        this.store.on('beforeload', this.onBeforeLoad, this);
        this.store.on('load', this.onLoad, this);
    },
    
    /**
     * fires our change event
     */
    onFilterChange: function() {
        if (this.getGridPanel() && typeof this.getGridPanel().getView === 'function') {
            this.getGridPanel().getView().isPagingRefresh = true;
        }
        
        if (this.store) {
            this.store.load({});
        }
    },
    
    /**
     * called before store loads
     */
    onBeforeLoad: function(store, options) {
        options = options || {};
        options.params = options.params || {};
        options.params.filter = options.params.filter ? options.params.filter : [];

        this.lastStoreTransactionId = options.transactionId;

        var value = this.getValue();
        if (value && Ext.isArray(options.params.filter)) {
            value = Ext.isArray(value) ? value : [value];
            for (var i=0; i<value.length; i++) {
                options.params.filter.push(value[i]);
            }
        }
    },
    
    /**
     * called after store data loaded
     */
    onLoad: function(store, records, options) {
        if (this.lastStoreTransactionId && options.transactionId && this.lastStoreTransactionId !== options.transactionId) {
            Tine.log.debug('FilterPlugin::onLoad - do not set non recent filter data');
            return;
        }

        if (Ext.isArray(store.proxy.jsonReader.jsonData.filter)) {
            
            // filter plugin has to 'pick' its records
            this.setValue(store.proxy.jsonReader.jsonData.filter);
        }
    }
});


/***/ }),
/* 1112 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.widgets.grid');

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FilterButton
 * @extends     Ext.Button
 * <p>Toggle Button to be used as filter</p>
 * @constructor
 */
Tine.widgets.grid.FilterButton = function(config) {
    config = config || {};
    Ext.apply(this, config);
    
    Tine.widgets.grid.FilterButton.superclass.constructor.call(this);
    Ext.applyIf(this, new Tine.widgets.grid.FilterPlugin());
};

Ext.extend(Tine.widgets.grid.FilterButton, Ext.Button, {
    /**
     * @cfg {String} field the filed to filter
     */
    field: null,
    /**
     * @cfg {String} operator operator of filter (defaults 'equals')
     */
    operator: 'equals',
    /**
     * @cfg {Bool} invert true if loging should be inverted (defaults false)
     */
    invert: false,
    
    /**
     * @private only toggle actions make sense as filters!
     */
    enableToggle: true,
    
    /**
     * @private
     */
    getValue: function() {
        return {field: this.field, operator: this.operator, value: this.invert ? !this.pressed : this.pressed};
    },
    
    /**
     * @private
     */
    setValue: function(filters) {
        for (var i=0; i<filters.length; i++) {
            if (filters[i].field == this.field) {
                this.toggle(this.invert ? !filters[i].value : !!filters[i].value);
                break;
            }
        }
    },
    
    /**
     * @private
     */
    handler: function() {
        this.onFilterChange();
    }
});

Ext.reg('wdgt.filterbutton', Tine.widgets.grid.FilterButton);


/***/ }),
/* 1113 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.widgets.grid');

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.ExportButton
 * @extends     Ext.Button
 * <p>export button</p>
 * @constructor
 */
Tine.widgets.grid.ExportButton = function(config) {
    config = config || {};
    Ext.apply(this, config);
    config.handler = this.doExport.createDelegate(this);
    
    Tine.widgets.grid.ExportButton.superclass.constructor.call(this, config);
};

Ext.extend(Tine.widgets.grid.ExportButton, Ext.Action, {
    /**
     * @cfg {Tine.Tinebase.data.Record} recordClass
     */
    recordClass: null,

    /**
     * @cfg {Object} definition
     */
    definition: '',

    /**
     * @cfg {Function} getExportOptions
     */
    getExportOptions: null,

    /**
     * @cfg {String} icon class
     */
    iconCls: 'action_export',

    /**
     * @cfg {String} format of export (default: csv)
     */
    format: 'csv',

    /**
     * @cfg {String} definitionId
     */
    definitionId: null,

    /**
     * @cfg {String} export function (for example: Timetracker.exportTimesheets)
     */
    exportFunction: null,

    /**
     * @cfg {Tine.widgets.grid.FilterSelectionModel} sm
     */
    sm: null,
    /**
     * @cfg {Tine.widgets.grid.GridPanel} gridPanel
     * use this alternativly to sm
     */
    gridPanel: null,
    /**
     * @cfg {Boolean} showExportDialog
     */
    showExportDialog: false,

    /**
     * add sub menu with attached/related templates
     *
     * @param action
     * @param grants
     * @param records
     * @param isFilterSelect
     */
    actionUpdater: function(action, grants, records, isFilterSelect) {
        var _ = window.lodash,
            favorite = _.get(action, 'initialConfig.definition.favorite'),
            scope = _.get(action, 'initialConfig.definition.scope'),
            format = _.get(action, 'initialConfig.definition.format'),
            handler = _.get(action, 'initialConfig.handler');

        if (_.isFunction(handler) && favorite == '1' && records.length == 1) {
            var record = records[0],
                attachments = _.get(record, 'data.attachments', []),
                relations = _.get(record, 'data.relations', []),
                relatedFiles = _.map(_.filter(relations, {related_model: 'Filemanager_Model_Node'}), 'related_record'),
                allFiles = _.concat(attachments, relatedFiles),
                menuItems = _.reduce(allFiles, function(result, file) {
                    if (_.endsWith(file.name, format)) {
                        result.push({
                            text: file.name,
                            handler: handler.createDelegate(action, [{template: file.id}])
                        });
                    }
                    return result;
                }, []);

            if (menuItems.length) {
                _.each(action.items, function(item) {
                    item.menu = new Ext.menu.Menu({
                        items: menuItems
                    });
                });
            }
        }
    },

    /**
     * do export
     */
    doExport: function(options) {
        var _ = window.lodash,
            appName, filter, model,
            count = 1;

        // options could be action (default handler signature)
        options = !options || options.el ? {} : options;

        if (this.gridPanel) {
            // get selection model
            if (!this.sm) {
                this.sm = this.gridPanel.grid.getSelectionModel();
            }

            // return if no rows are selected
            if (this.sm.getCount() === 0) {
                return false;
            }

            this.recordClass = this.recordClass || this.gridPanel.recordClass;
            filter = this.sm.getSelectionFilter();
            count = this.sm.getCount();
            options.sortInfo = this.gridPanel.getStore().sortInfo;
        }

        if (_.isFunction(this.getExportOptions)) {
            _.assign(options, this.getExportOptions());
        }

        appName = this.recordClass.getMeta('appName');
        model = this.recordClass.getMeta('phpClassName');
        this.exportFunction = this.exportFunction || (appName + '.export' + this.recordClass.getMeta('modelName') + 's');

        var exportJob = new Tine.Tinebase.Model.ExportJob({
            scope: this.definition.scope,
            filter: filter,
            format: this.format,
            exportFunction: this.exportFunction,
            count: count,
            export_definition_id: this.definitionId,
            recordsName: this.recordClass.getRecordsName(),
            model: model,
            options: options
        });

        if (this.showExportDialog) {
            Tine.widgets.dialog.ExportDialog.openWindow({
                appName: appName,
                record: exportJob
            });
        } else {
            Tine.widgets.exportAction.downloadExport(exportJob);
        }
    }
});



/***/ }),
/* 1114 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine', 'Tine.widgets', 'Tine.widgets.exportAction');

Tine.widgets.exportAction.SCOPE_SINGLE = 'single';
Tine.widgets.exportAction.SCOPE_MULTI = 'multi';
Tine.widgets.exportAction.SCOPE_HIDDEN = 'hidden';

/**
 * get all (favorite) export definitions for given model
 *
 * @param {Tine.Tinebase.data.Record} recordClass
 * @param {Object} exportConfig
 */
Tine.widgets.exportAction.getExports = function (recordClass, favorites, scope) {
    var _ = window.lodash,
        appName = recordClass.getMeta('appName'),
        phpClassName = recordClass.getMeta('phpClassName'),
        app = Tine.Tinebase.appMgr.get(appName),
        allExportDefinitions = _.get(app.getRegistry().get('exportDefinitions'), 'results', []),
        exportDefinitions = _.filter(allExportDefinitions, {model: phpClassName});

    if (_.isBoolean(favorites)) {
        exportDefinitions = _.filter(exportDefinitions, function(d) {
            if (favorites) {
                return d.favorite === '1';
            } else {
                return d.favorite === '0' || d.favorite === null;
            }
        });
    }

    if (_.isString(scope)) {
        exportDefinitions = _.filter(exportDefinitions, function(d) {
            return Tine.widgets.exportAction.SCOPE_HIDDEN !== d.scope && (d.scope === null || d.scope == "" || d.scope == scope);
        });
    }

    return _.sortBy(exportDefinitions, 'order');
};

Tine.widgets.exportAction.getExportMenuItems = function (recordClass, exportConfig, scope) {
    var _ = window.lodash,
        appName = recordClass.getMeta('appName'),
        app = Tine.Tinebase.appMgr.get(appName),
        exportDefinitions = Tine.widgets.exportAction.getExports(recordClass, true, scope);

    return _.reduce(exportDefinitions, function(items, definition) {
        items.push(new Tine.widgets.grid.ExportButton(_.assign({
            recordClass: recordClass,
            definition: definition,
            text: app.i18n._hidden(definition.label ? definition.label : definition.name),
            format: '',
            definitionId: definition.id,
            iconCls: definition.icon_class,
            order: definition.order
        }, exportConfig)));

        return items;
    }, []);
};

Tine.widgets.exportAction.getExportButton = function(recordClass, exportConfig, scope, additionalItems) {
    if (!recordClass || !Tine.Tinebase.appMgr.isEnabled(recordClass.getMeta('appName'))) return;

    var _ = window.lodash,
        appName = recordClass.getMeta('appName'),
        recordName = recordClass.getRecordName(),
        recordsName = recordClass.getRecordsName(),
        exportFunction = appName + '.export' + recordClass.getMeta('modelName') + 's',
        allItems = Tine.widgets.exportAction.getExports(recordClass, null, scope),
        menuItems = Tine.widgets.exportAction.getExportMenuItems(recordClass, exportConfig, scope);

    if (allItems.length > menuItems.length) {
        menuItems.push(new Tine.widgets.grid.ExportButton(_.assign({
            exportScope: scope,
            recordClass: recordClass,
            text: i18n._('Export as ...'),
            iconCls: 'action_export',
            showExportDialog: true,
            exportFunction: exportFunction,
            order: 1000
        }, exportConfig)));
    }

    menuItems = menuItems.concat(additionalItems || []);

    return menuItems.length ? new Ext.Action({
        requiredGrant: 'exportGrant',
        text: String.format(i18n.ngettext('Export {0}', 'Export {0}', 50), recordsName),
        singularText: String.format(i18n.ngettext('Export {0}', 'Export {0}', 1), recordName),
        pluralText:  String.format(i18n.ngettext('Export {0}', 'Export {0}', 1), recordsName),
        translationObject: i18n,
        iconCls: 'action_export',
        scope: this,
        disabled: true,
        allowMultiple: true,
        menu: {
            items: menuItems
        }
    }) : null;
};

/**
 * execute and download export
 *
 * @param {Tine.Tinebase.Model.ExportJob} exportJob
 */
Tine.widgets.exportAction.downloadExport = function(exportJob) {
    var _ = window.lodash,
        filter = exportJob.get('filter'),
        options = _.assign(exportJob.get('options'), {
            format: exportJob.get('format'),
            definitionId: exportJob.get('export_definition_id')
        });

        if (options.filter) {
            filter = options.filter;
            delete options.filter;
        }

    new Ext.ux.file.Download({
        params: {
            method: exportJob.get('exportFunction'),
            requestType: 'HTTP',
            filter: Ext.util.JSON.encode(filter),
            options: Ext.util.JSON.encode(options)
        }
    }).start();
};

/***/ }),
/* 1115 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine', 'Tine.widgets', 'Tine.widgets.importAction');

Tine.widgets.importAction.SCOPE_SINGLE = 'single';
Tine.widgets.importAction.SCOPE_MULTI = 'multi';
Tine.widgets.importAction.SCOPE_HIDDEN = 'hidden';

/**
 * get all (favorite) import definitions for given model
 *
 * @param {Tine.Tinebase.data.Record} recordClass
 * @param {Object} importConfig
 */
Tine.widgets.importAction.getImports = function (recordClass, favorites, scope) {
    var _ = window.lodash,
        appName = recordClass.getMeta('appName'),
        phpClassName = recordClass.getMeta('phpClassName'),
        app = Tine.Tinebase.appMgr.get(appName),
        allImportDefinitions = _.get(app.getRegistry().get('importDefinitions'), 'results', []),
        importDefinitions = _.filter(allImportDefinitions, {model: phpClassName});

    if (_.isBoolean(favorites)) {
        importDefinitions = _.filter(importDefinitions, function(d) {
            if (favorites) {
                return d.favorite === '1';
            } else {
                return d.favorite === '0' || d.favorite === null;
            }
        });
    }

    if (_.isString(scope)) {
        importDefinitions = _.filter(importDefinitions, function(d) {
            return Tine.widgets.importAction.SCOPE_HIDDEN !== d.scope && (d.scope === null || d.scope == "" || d.scope == scope);
        });
    }

    return _.sortBy(importDefinitions, 'order');
};


/***/ }),
/* 1116 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FilterToolbar
 * @extends     Ext.Panel
 * 
 * <br>Usage:<br>
     <pre><code>
     tb = new Tine.widgets.grid.FilterToolbar({
         filterModels: [
            {label: 'Full Name', field: 'n_fn', defaultOperator: 'contains'},
            {label: 'Container', field: 'container_id', operatorRenderer: function() {...}, valueRenderer: function() {...}},
            {label: 'Contact', field: 'quicksearch'}
         ],
         defaultFilter: 'quicksearch',
         filters: [
            {field: 'n_fn', operator: 'contains', value: 'Smith'},
            {field: 'container_id', operator: 'equals', value: 4}
        ]
     });
    </code></pre>
 * @constructor
 * @param {Object} config
 */
Tine.widgets.grid.FilterToolbar = function(config) {
    Ext.apply(this, config);
    Tine.widgets.grid.FilterToolbar.superclass.constructor.call(this);
    
    // become filterPlugin
    Ext.applyIf(this, new Tine.widgets.grid.FilterPlugin());
    
    this.childSheets = {};
};

/**
 * Filter registry
 * @type Object
 */
Tine.widgets.grid.FilterToolbar.FILTERS = {};

Ext.extend(Tine.widgets.grid.FilterToolbar, Ext.Panel, {
    
    /**
     * @cfg {Array} array of filter models (possible filters in this toolbar)
     */
    filterModels: null,
    
    /**
     * @cfg {String} fieldname of default filter
     */
    defaultFilter: null,
    
    /**
     * @cfg {Tine.Tinebase.data.Record} model this filter is for
     */
    recordClass: null,
    
    /**
     * @cfg {Bool} allowSaving (defaults to false)
     */
    allowSaving: false,
    
    /**
     * @cfg {Bool} neverAllowSaving (defaults to false)
     */
    neverAllowSaving: false,

    /**
     * @cfg {Bool} showSearchButton (defaults to true)
     */
    showSearchButton: true,
    
    /**
     * define if the filters should be sorted by the "sort" field.
     * 
     * @type {Boolean}
     */
    customFilterSorting: false,
    
    filterFieldWidth: 240,
    filterValueWidth: 200,
    
    /**
     * @cfg {String} row prefix (defaults to i18n._('Show'))
     */
    rowPrefix: null,
    
    /**
     * @property childSheets
     * @type Object
     */
    childSheets: null,
    
    /**
     * @property isActive
     * @type Boolean
     */
    isActive: true,
    
    /**
     * does any of all of the filters match (or/and)
     * 
     * @type String
     */
    conjunctionOperator: 'and',
    // _('and')
    // _('or')

    header: false,
    border: false,
    monitorResize: true,
    region: 'north',
    layout: 'fit',
    canonicalName: 'FilterToolbar',
    //split: true,
    
    record: Ext.data.Record.create([
        {name: 'field'},
        {name: 'operator'},
        {name: 'value'}
    ]),
    
    frowIdPrefix: 'tw-ftb-frowid-',
    
    /**
     * @private
     */
    initTemplates : function() {
        var ts = this.templates || {};
        if(!ts.master) {
            ts.master = new Ext.Template(
                '<div class="tw-filtertoolbar x-toolbar x-small-editor" hidefocus="true">',
                    '<table style="width: auto;" border="0" cellpadding="0" cellspacing="0">',
                         '{tbody}', 
                     '</table>',
                '</div>'
            );
        }
        if(!ts.filterrow){
            ts.filterrow = new Ext.Template(
                '<tr id="{id}" class="fw-ftb-frow">',
                    '<td class="tw-ftb-frow-pbutton"></td>',
                    '<td class="tw-ftb-frow-mbutton"></td>',
                    '<td class="tw-ftb-frow-prefix">{prefix}</td>',
                    '<td class="tw-ftb-frow-field" width="' + this.filterFieldWidth + 'px">{field}</td>',
                    '<td class="tw-ftb-frow-operator" width="90px" >{operator}</td>',
                    '<td class="tw-ftb-frow-value" width="' + this.filterValueWidth + 'px">{value}</td>',
                    '<td class="tw-ftb-frow-searchbutton"></td>',
                    //'<td class="tw-ftb-frow-deleteallfilters"></td>',
                    //'<td class="tw-ftb-frow-savefilterbutton"></td>',
                '</tr>'
            );
        }
        
        for(var k in ts){
            var t = ts[k];
            if(t && typeof t.compile == 'function' && !t.compiled){
                t.disableFormats = true;
                t.compile();
            }
        }

        this.templates = ts;
    },
    
    /**
     * @private
     */
    initActions: function() {
        this.actions = {
            addFilterRow: new Ext.Button({
                //disabled: true,
                tooltip: i18n._('add new filter'),
                iconCls: 'action_addFilter',
                scope: this,
                handler: this.addFilter
            }),
            removeAllFilters: new Ext.Button({
                tooltip: i18n._('reset all filters'),
                iconCls: 'action_delAllFilter',
                scope: this,
                handler: this.deleteAllFilters
            }),
            startSearch: new Ext.Button({
                text: i18n._('start search'),
                iconCls: 'action_startFilter',
                scope: this,
                handler: function() {
                    this.onFiltertrigger();
                }
            }),
            saveFilter: new Ext.Button({
                tooltip: i18n._('save as favorite'),
                iconCls: 'action_saveFilter',
                handler: this.onSaveFilter.createDelegate(this)
            })
        };

        this.action_loadFilter = new Ext.Action({
            text: i18n._('Load a favorite'),
            hidden: true,
            iconCls: 'action-tinebase-favorite',
            scope: this,
            handler: this.onLoadFilter
        });
    },
    
    /**
     * @private
     */
    onRender: function(ct, position) {
        Tine.widgets.grid.FilterToolbar.superclass.onRender.call(this, ct, position);
        
        // only get app and enable saving if this.store is available (that is not the case in the activities panel)
        // at this point the plugins are initialised
        if (! this.app && this.store) {
            this.app = Tine.Tinebase.appMgr.get(this.store.proxy.recordClass.getMeta('appName'));
        }
        // automatically enable saving
        if (! this.neverAllowSaving && this.app && this.app.getMainScreen() && typeof this.app.getMainScreen().getWestPanel == 'function' && this.app.getMainScreen().getWestPanel().hasFavoritesPanel) {
            this.allowSaving = true;
        }
        
        // render static table
        this.renderTable();
        
        // render each filter row into table
        this.filterStore.each(function(filter) {
            this.renderFilterRow(filter);
        }, this);
        
        // render static action buttons
        for (var action in this.actions) {
            this.actions[action].hidden = true;
            this.actions[action].render(this.bwrap);
        }
        
        // wrap search button an set it always mouse-overed
        this.searchButtonWrap = this.actions.startSearch.getEl().wrap();
        this.searchButtonWrap.addClass('x-btn-over');
        
        // arrange static action buttons
        this.onFilterRowsChange();
        
        if (! this.parentSheet) {
            this.tbar = new Ext.Toolbar({
                items: [],
                hidden: true
            });
            this.tbar.render(this.el, 0);
            
//            // tab bar to start or filters
//            this.tabBar = new Ext.Panel({
//                cls: 'tw-ftb-criteria-tabs',
//                border: false,
//                height: Ext.isGecko ? 22 : 20,
//                items: new Ext.TabPanel({
//                    border: false,
//                    plain: true,
//                    activeItem: 1,
//                    items: [{title: 'combination', html:''}, {title: 'criteria 1', html:''}, {title: 'criteria 2', html: ''}, {iconCls: 'action_add', title: '&nbsp;', html: ''}]
//                })
//            });
//            this.tabBar.render(this.el, 0);
        }
        
        this.breadCrumb = new Ext.Action({
            text: (this.parentSheet ? '&gt;&nbsp;&nbsp;&nbsp;' : '') + this.title,
            scope: this,
            handler: function() {
                this.setActiveSheet(this);
            }
        });
    },
    
    generateTitle: function() {
        var title = this.id;
        
        if (this.recordClass) {
            var app = Tine.Tinebase.appMgr.get(this.recordClass.getMeta('appName')),
                recordName = this.recordClass.getMeta('recordName'),
                recordsName = this.recordClass.getMeta('recordsName');
                
            title = app.i18n.n_hidden(recordName, recordsName, 50);
        }
        
        return title;
    },
    
    /**
     * is persiting this filterPanel is allowed
     * 
     * @return {Boolean}
     */
    isSaveAllowed: function() {
        return this.allowSaving;
    },
    
    /**
     * called when the title of this panel changes
     * 
     * @param {Ext.Panel} panel
     * @param {String} title
     */
    onTitleChange: function(panel, title) {
        if (this.breadCrumb) {
            this.breadCrumb.setText((this.parentSheet ? '&gt;&nbsp;&nbsp;&nbsp;' : '') + title);
        }
    },
    
    /**
     * save filterset as persisten filter
     */
    onSaveFilter: function() {
        this.app.getMainScreen().getWestPanel().getFavoritesPanel().saveFilter();
    },
    
    onLoadFilter: function() {
        Ext.Msg.alert('sorry', 'not yet implemented');
    },
    
    /**
     * renders static table
     * @private
     */
    renderTable: function() {
        var ts = this.templates;
        var tbody = '';
        
        this.filterStore.each(function(filter){
            tbody += ts.filterrow.apply({
                id: this.frowIdPrefix + filter.id
            });
        }, this);
        
        this.tableEl = ts.master.overwrite(this.bwrap, {tbody: tbody}, true);
    },
    
    /**
     * renders the filter specific stuff of a single filter row
     * 
     * @param {Ext.data.Record} el representing a filter tr tag
     * @private
     */
    renderFilterRow: function(filter) {
        filter.formFields = {};
        var filterModel = this.getFilterModel(filter);
        if (! filterModel) {
            Tine.log.warn('Tine.widgets.grid.FilterToolbar::renderFilterRow no filterModel found');
            Tine.log.warn(filter);
            this.filterStore.remove(filter);
            return;
        }
        var fRow = this.bwrap.child('tr[id='+ this.frowIdPrefix + filter.id + ']');
        
        // field
        filter.formFields.field = new Ext.form.ComboBox({
            filter: filter,
            width: this.filterFieldWidth,
            minListWidth: 240, // will be ignored if width is heigher
            resizable: true,
            id: 'tw-ftb-frow-fieldcombo-' + filter.id,
            mode: 'local',
            lazyInit: false,
            emptyText: i18n._('select a field'),
            forceSelection: true,
            typeAhead: true,
            triggerAction: 'all',
            store: this.fieldStore,
            displayField: 'label',
            valueField: 'field',
            value: filterModel.field,
            renderTo: fRow.child('td[class=tw-ftb-frow-field]'),
            validator: this.validateFilter.createDelegate(this),
            tpl: '<tpl for="."><div class="x-combo-list-item tw-ftb-field-{field}">{label}</div></tpl>'
        });
        filter.formFields.field.setValue = filter.formFields.field.setValue.createInterceptor(function() {
            // NOTE: as this.fieldStore is a shared store we need to clear the filter before we use it,
            //       otherwise the record (e.g. query) might not be in the store
            this.fieldStore.clearFilter();
        }, this);
        
        filter.formFields.field.on('select', function(combo, newRecord, newKey) {
            if (combo.value != combo.filter.get('field')) {
                this.onFieldChange(combo.filter, combo.value);
            }
        }, this);
        
        filter.formFields.field.on('blur', function(combo) {
            if (combo.value != combo.filter.get('field')) {
                this.onFieldChange(combo.filter, combo.value);
            }
        }, this);
        
        // operator
        filter.formFields.operator = filterModel.operatorRenderer(filter, fRow.child('td[class^=tw-ftb-frow-operator]'));
        
        // value
        filter.formFields.value = filterModel.valueRenderer(filter, fRow.child('td[class^=tw-ftb-frow-value]'));
        
        filter.deleteRowButton = new Ext.Button({
            id: 'tw-ftb-frow-deletebutton-' + filter.id,
            tooltip: i18n._('Delete this filter'),
            filter: filter,
            iconCls: 'action_delThisFilter',
            renderTo: fRow.child('td[class=tw-ftb-frow-mbutton]'),
            scope: this,
            handler: function(button) {
                this.deleteFilter(button.filter);
            }
        });
    },
    
    /**
     * validate if type ahead is in our filter store
     * @return {Bool}
     */
    validateFilter: function(value) {
        return this.fieldStore.query('label', value).getCount() != 0;
    },
    
    /**
     * @private
     */
    arrangeButtons: function() {

        var numFilters = this.filterStore.getCount();
        
        if (numFilters == 0) {
            Tine.log.info('Tine.widgets.grid.FilterToolbar::arrangeButtons no filters found!');
            return;
        }
        
        var firstId = this.filterStore.getAt(0).id;
        var lastId = this.filterStore.getAt(numFilters-1).id;
        
        this.filterStore.each(function(filter){
            var tr = this.bwrap.child('tr[id='+ this.frowIdPrefix + filter.id + ']');
            
            if (tr) {
                tr.child('td[class=tw-ftb-frow-prefix]').dom.innerHTML = '<span style="width: 25px; display: inline-block">' + i18n._(this.conjunctionOperator) + '<span>';
            }
            
            if (filter.id == lastId) {
                if (tr) {
                    // move add filter button
                    tr.child('td[class=tw-ftb-frow-pbutton]').insertFirst(this.actions.addFilterRow.getEl());
                    this.actions.addFilterRow.show();
                    // move start search button
                    tr.child('td[class=tw-ftb-frow-searchbutton]').insertFirst(this.searchButtonWrap);
                }
                if (this.showSearchButton) {
                    this.actions.startSearch.show();
                }
                // move delete all filters
                // tr.child('td[class=tw-ftb-frow-deleteallfilters]').insertFirst(this.actions.removeAllFilters.getEl());
                this.actions.removeAllFilters.setVisible(numFilters > 1);
                // move save filter button
                // tr.child('td[class=tw-ftb-frow-savefilterbutton]').insertFirst(this.actions.saveFilter.getEl());
                this.actions.saveFilter.setVisible(this.allowSaving && numFilters > 1);
            }
            
            if (filter.id == firstId) {
                if (tr) {
                    tr.child('td[class=tw-ftb-frow-prefix]').dom.innerHTML = this.rowPrefix;
                }
                
                // hack for the save/delete all btns which are now in the first row
                //if (Ext.isSafari) {
                    this.actions.removeAllFilters.getEl().applyStyles('float: left');
                //} else {
                //    this.actions.saveFilter.getEl().applyStyles('display: inline');
                //    this.actions.removeAllFilters.getEl().applyStyles('display: inline');
                //}
                
                if (tr) {
                    tr.child('td[class=tw-ftb-frow-searchbutton]').insertFirst(this.actions.saveFilter.getEl());
                    tr.child('td[class=tw-ftb-frow-searchbutton]').insertFirst(this.actions.removeAllFilters.getEl());
                }
                
                //tr.child('td[class=tw-ftb-frow-pmbutton]').insertFirst(this.actions.removeAllFilters.getEl());
                //this.actions.removeAllFilters.setVisible(numFilters > 1);
            }
        }, this);
    },
    
    doLayout: function() {
        if (typeof this.layout.layout == 'function') {
            Tine.widgets.grid.FilterToolbar.superclass.doLayout.apply(this, arguments);
        }

        if (this.rendered) {
            this.arrangeButtons();
            
            this.filterStore.each(function(filter){
                for (var formItemName in filter.formFields) {
                    if (filter.formFields[formItemName] && typeof filter.formFields[formItemName].syncSize == 'function') {
                        filter.formFields[formItemName].setWidth(filter.formFields[formItemName].width);
                        if (filter.formFields[formItemName].wrap) {
                            filter.formFields[formItemName].wrap.setWidth(filter.formFields[formItemName].width);
                        }
                        filter.formFields[formItemName].syncSize();
                    }
                }
            }, this);
        }
    },
    
    /**
     * called  when a filter action is to be triggered (start new search)
     * @private
     */
    onFiltertrigger: function() {
        if (! this.supressEvents) {
            this.onFilterChange();
        }
    },
    
    /**
     * called on field change of a filter row
     * @private
     */
    onFieldChange: function(filter, newField) {
        var oldFilterModel = this.getFilterModel(filter),
            oldOperator = filter.formFields.operator.getValue(),
            oldValue    = filter.formFields.value.getValue();
        
        // only use old operator/value for textfields
        var f = filter.formFields.value;
        if (typeof f.selectText != 'function' || typeof f.doQuery == 'function') {
            oldValue = '';
        }
        
        if (oldFilterModel && Ext.isFunction(oldFilterModel.onDestroy)) {
            oldFilterModel.onDestroy(filter);
        }
        
        // NOTE: removeMode got introduced on ext3.1 but is not docuemented
        //       'childonly' is no ext mode, we just need something other than 'container'
        filter.formFields.operator.removeMode = 'childsonly';
        filter.formFields.value.removeMode = 'childsonly';
        
        filter.formFields.operator.destroy();
        delete filter.formFields.operator;
        filter.formFields.value.destroy();
        delete filter.formFields.value;
        
        var filterModel = this.getFilterModel(newField);
        var fRow = this.bwrap.child('tr[id='+ this.frowIdPrefix + filter.id + ']');
        
        var opEl = fRow.child('td[class^=tw-ftb-frow-operator]');
        var valEl = fRow.child('td[class^=tw-ftb-frow-value]');
        
        filter.set('field', newField);
        filter.set('operator', '');
        filter.set('value', '');
        
        filter.formFields.operator = filterModel.operatorRenderer(filter, opEl);
        filter.formFields.value = filterModel.valueRenderer(filter, valEl);
        
        // only use old operator/value for textfields
        var f = filter.formFields.value;
        if (oldValue && typeof f.selectText == 'function' && typeof f.doQuery != 'function') {
            var o = filter.formFields.operator;
            
            if (typeof o.findRecord == 'function') {
                if (typeof o.setValue == 'function' && o.findRecord(o.valueField, oldOperator)) {
                    o.setValue(oldOperator);
                }
                filter.formFields.value.setValue(oldValue);
                filter.formFields.value.selectText.defer(50, filter.formFields.value);
            }
        }
    },
    
    /**
     * @private
     */
    initComponent: function() {
        this.title = this.generateTitle();
        this.on('titlechange', this.onTitleChange, this);
        
        Tine.widgets.grid.FilterToolbar.superclass.initComponent.call(this);
        
        this.on('show', function() {
            this.doLayout();
        }, this);
        
        if (this.rowPrefix === null) {
            this.rowPrefix = i18n._('Show');
        }
        
        this.initTemplates();
        this.initActions();
        
        // init filters
        this.filters = Ext.isArray(this.filters) ? this.filters : [];
        if (this.filters.length < 1) {
            this.filters = [{field: this.defaultFilter}];
        }
        this.filterStore = new Ext.data.JsonStore({
            fields: this.record,
            data: this.filters
        });

        // init filter models
        this.filterModelMap = {};
        var filtersFields = [];
        
        if (this.recordClass && ! this.filterModels) {
            // TODO: getFilterModel should not be used anymore. This should completely done by the registry.
            this.filterModels = Ext.isFunction(this.recordClass.getFilterModel) ? this.recordClass.getFilterModel() : [];
        }
        
        
        if (this.recordClass) {
            // concat registered filters
            this.filterModels = this.filterModels.concat(Tine.widgets.grid.FilterRegistry.get(this.recordClass));

            // auto add foreign record filter on demand
            var foreignRecordFilter = this.createFilterModel({filtertype: 'foreignrecord', ownRecordClass: this.recordClass, isGeneric: true});
            if (foreignRecordFilter.operatorStore.getCount() > 0) {
                this.filterModels.push(foreignRecordFilter);
            }
            
            // auto add self id filter
            // add own record filter by default but ignore if set
            if (this.ownRecordFilter !== false) {
                this.ownRecordFilterModel = this.createFilterModel({filtertype: 'ownrecord', ownRecordClass: this.recordClass});
                this.filterModels.push(this.ownRecordFilterModel);
            }
        }
        
        
        for (var i=0; i<this.filterModels.length; i++) {
            try {
                var config = this.filterModels[i],
                    fm;

                if (config.valueType === 'fulltext' && !Tine.Tinebase.registry.get('fulltextAvailable')) {
                    continue;
                }

                fm = this.createFilterModel(config);
            } catch (e) {
                Tine.log.error('Could not create filter model - skipping');
                Tine.log.error(e.stack ? e.stack : e);
                Tine.log.debug(config);
                continue;
            }
            
            this.filterModelMap[fm.field] = fm;
            filtersFields.push(fm);
            
            fm.on('filtertrigger', this.onFiltertrigger, this);
            
            // insert subfilters
            if (Ext.isFunction(fm.getSubFilters)) {
                Ext.each(fm.getSubFilters(), function(sfm) {
                    sfm.superFilter = fm;
                    
                    // :<field> indicates a left hand filter
                    sfm.field = ':' + sfm.field;
                    
                    this.filterModelMap[sfm.field] = sfm;
                    filtersFields.push(sfm);
                    sfm.on('filtertrigger', this.onFiltertrigger, this);
                }, this);
            }
        }
        
        // init filter selection
        this.fieldStore = new Ext.data.JsonStore({
            fields: this.customFilterSorting ? ['field', 'label', 'sort'] : ['field', 'label'],
            data: filtersFields,
            remoteSort: false,
            sortInfo: this.customFilterSorting ? {
                field: 'sort',
                direction: 'ASC'
            } : {
                field: 'label',
                direction: 'ASC'
            }
        });
    },
    
    /**
     * called when a filter row gets added/deleted
     * @private
     */
    onFilterRowsChange: function() {
        if (! this.supressEvents && Ext.isFunction(this.ownerCt.layout.layout)) {
            this.ownerCt.layout.layout();
        }
        this.doLayout();
    },
    
    createFilterModel: function(config) {
        if (config && config.isFilterModel) {
            return config;
        }
        
        // push this filtertoolbar in config
        config.ftb = this;

        if (config.filtertype) {
            // filter from reg
            return new Tine.widgets.grid.FilterToolbar.FILTERS[config.filtertype](config);
        } else {
            return new Tine.widgets.grid.FilterModel(config);
        }
    },
    
    /**
     * returns filterModel
     * 
     * @param {String} fieldName
     * @return {Tine.widgets.grid.FilterModel}
     */
    getFilterModel: function(field) {
        var fieldName = Ext.isFunction(field.get) ? field.get('field') : field;
  
        if (! fieldName && field.data && field.data.condition) {
            return this.ownRecordFilterModel;
        }
        
        return this.filterModelMap[fieldName];
    },
    
    /**
     * adds a new filter row
     */
    addFilter: function(filter) {
        if (! filter || arguments[1]) {
            filter = new this.record({
                field: this.defaultFilter
            });
        }
        this.filterStore.add(filter);

        if (this.bwrap) {
            var fRow = this.templates.filterrow.insertAfter(this.bwrap.child('tr[class=fw-ftb-frow]:last'), {
                id: 'tw-ftb-frowid-' + filter.id
            }, true);

            this.renderFilterRow(filter);
        }

        this.onFilterRowsChange();

        return filter;
    },
    
    /**
     * resets a filter
     * @param {Ext.Record} filter to reset
     */
    resetFilter: function(filter) {
        
    },
    
    /**
     * deletes a filter
     * @param {Ext.Record} filter to delete
     */
    deleteFilter: function(filter) {
        var fRow = this.bwrap ? this.bwrap.child('tr[id=tw-ftb-frowid-' + filter.id + ']') : null;
        //var isLast = this.filterStore.getAt(this.filterStore.getCount()-1).id == filter.id;
        var isLast = this.filterStore.getCount() == 1,
            filterModel = this.getFilterModel(filter);
            
        this.filterStore.remove(this.filterStore.getById(filter.id));

        if (filter.formFields) {
            filter.formFields.field.destroy();
            filter.formFields.operator.destroy();
            filter.formFields.value.destroy();
        }
        
        if (filterModel && Ext.isFunction(filterModel.onDestroy)) {
            filterModel.onDestroy(filter);
        }
        
        if (isLast && this.bwrap) {
            // add a new first row
            var firstFilter = this.addFilter();
            
            // save buttons somewhere
            for (var action in this.actions) {
                this.actions[action].hide();
                this.bwrap.insertFirst(action == 'startSearch' ? this.searchButtonWrap : this.actions[action].getEl());
            }
        }
        
        if (fRow) {
            fRow.remove();
        }
        
        this.onFilterRowsChange();
        
        if (!this.supressEvents) {
            this.onFiltertrigger();
        }
    },
    
    /**
     * deletes all filters
     */
    deleteAllFilters: function() {
        this.supressEvents = true;
        
        this.filterStore.each(function(filter) {
            this.deleteFilter(filter);
        },this);
        
        this.supressEvents = false;
        this.onFiltertrigger();
        this.onFilterRowsChange();
    },
    
    getValue: function() {
        var filters = [];
        
        this.filterStore.each(function(filter) {
            var filterModel = this.getFilterModel(filter),
                line = Ext.isFunction(filterModel.getFilterData) ? filterModel.getFilterData(filter) : this.getFilterData(filter);
            
            if (line.field && Ext.isString(line.field) &&  line.field.match(/:/)) {
                var parts = line.field.split(':');
                
                // customfield handling
                if (parts[0] == 'customfield') {
                    filters.push({field: 'customfield', operator: line.operator, value: {cfId: parts[1], value: line.value}});
                }
                
                else if (filterModel && filterModel.superFilter) {
                    // if we are a childfilter of a recordclass of the subfilter, just place the subfilter
                    if (this.parentSheet && this.parentSheet.recordClass == filterModel.superFilter.foreignRecordClass) {
                        filters.push(line);
                        return;
                    }
                    
                    // check if filter of type superfilter is present
                    if (this.filterStore.find('field', filterModel.superFilter.field) < 0) {
                        
                        // create one
                        // @TODO HIDE? -> see ForeignRecordFilter line ~300
                        var superFilter = this.addFilter(new this.record({field: filterModel.superFilter.field, operator: 'definedBy'}));
                        line = this.getFilterData(superFilter);
                        filters.push(line);
                    }
                }
            } else {
                filters.push(line);
            }
        }, this);
        
        return filters;
    },
    
    /**
     * @static
     * @param {filterRecord} filter
     */
    getFilterData: function(filter) {
        var line = {};
                
        for (var formfield in filter.formFields) {
            line[formfield] = filter.formFields[formfield].getValue();
        }
        
        // fill data with filter record data in case form field not exist (not rendered)
        filter.fields.each(function(field)  {
            var name = field.name;
            if (! line.hasOwnProperty(name)) {
                line[name] = filter.get(name);
            }
        }, this);
        
        // append id
        line.id = filter.id;

        return line;
    },
    
    /**
     * set filterData in a filter
     * 
     * @static
     * @param {filterRecord} filter
     * @param {Object} filterData
     * @return {filterRecord}
     */
    setFilterData: function(filter, filterData) {
        if (filter.formFields) {
            filter.beginEdit();
            Ext.each(['field', 'operator', 'value'], function(t) {
                filter.set(t, filterData[t]);
                if (Ext.isFunction(filter.formFields[t].setValue)) {
                    filter.formFields[t].setValue(filterData[t]);
                }
            }, this);
            filter.endEdit();
        }
        
        
        return filter;
    },
    
    setValue: function(filters) {
        
        if (! filters) {
            return;
        }
        
        this.supressEvents = true;
        
        var oldFilters = [];
        this.filterStore.each(function(filterRecord) {
            oldFilters.push(filterRecord);
        }, this);
        
        var filterModel, filterData, filterRecord;
        
        // custom fields handling
        for (var i=0; i<filters.length; i++) {
            filterData = filters[i];
            if (filterData.value && filterData.value.cfId) {
                filters[i].field = filterData.field + ':' + filterData.value.cfId;
                filters[i].value = filterData.value.value;
            }
        }

        for (var i=0; i<filters.length; i++) {
            filterRecord = null;
            filterData = filters[i];
            filterModel = filterData.condition ? this.ownRecordFilterModel : this.filterModelMap[filterData.field];
            
            if (filterModel) {
                if (filterData.id) {
                    filterRecord = this.filterStore.getById(filterData.id);
                }
                
                // refresh existing filters
                if (filterRecord) {
                    Ext.isFunction(filterModel.setFilterData) ? filterModel.setFilterData(filterRecord, filterData) : this.setFilterData(filterRecord, filterData);
                    oldFilters.remove(filterRecord);
                } 
                
                // add non existing filters only if they where not created implicitly by server
                else if (! filterData.implicit) {
                    // NOTE: don't use filterData.id here, it's a ext-comp-* which comes from a different session
                    // and might be a totally different element yet.
                    filterRecord = new this.record(filterData);
                    this.addFilter(filterRecord);
                }
            }
            
        }
        
        // remove unused filters
        Ext.each(oldFilters, function(filterRecord) {
            this.deleteFilter(filterRecord);
        }, this);
        
        this.supressEvents = false;
        this.onFilterRowsChange();
    },
    
    /**
     * gets filter data of all filter plugins
     * 
     * NOTE: As we can't find all filter plugins directly we need a litte hack 
     *       to get their data
     *       
     *       We register ourselve as latest beforeload.
     *       In the options.filter we have the filters then.
     */
    getAllFilterData: function() {
        this.store.on('beforeload', this.storeOnBeforeload, this);
        this.store.load();
        this.store.un('beforeload', this.storeOnBeforeload, this);
        
        return this.allFilterData;
    },
    
    storeOnBeforeload: function(store, options) {
        this.allFilterData = options.params.filter;
        this.store.fireEvent('exception');
        return false;
    },
    
    onDestroy: function() {
        if (this.parentSheet) {
            this.parentSheet.removeFilterSheet(this);
        }
    },
    
    /***** sheets functions *****/
    addFilterSheet: function(ftb) {
        ftb.ownerCt = this.ownerCt;
        ftb.parentSheet = this;
        this.childSheets[ftb.id] = ftb;
        
        ftb.onFilterChange = this.onFilterChange.createDelegate(this);
    },
    
    removeFilterSheet: function(ftb) {
        if (! this.childSheets[ftb.id].destroying) {
            this.childSheets[ftb.id].destroy();
        }
        delete this.childSheets[ftb.id];
        
        if (ftb == this.activeSheet) {
            this.setActiveSheet.defer(100, this, [this]);
        }
    },
    
    setActiveSheet: function(sheet) {
        var ftb = Ext.isString(sheet) ? (sheet = this.id ? this : this.childSheets[sheet]) : sheet,
            rootSheet = this.getRootSheet(),
            parentSheets = sheet.getParentSheets();
        
        if (! ftb.rendered) {
            ftb.render(this.el);
        }
        
        this.bwrap[ftb == this ? 'show' : 'hide']();
        
        for( var ftbId in this.childSheets) {
            if (this.childSheets.hasOwnProperty(ftbId)) {
                if (ftb == this.childSheets[ftbId]) {
                    this.childSheets[ftbId].show();
                    this.childSheets[ftbId].setActiveSheet(sheet);
                } else {
                    this.childSheets[ftbId].hide();
                }
            }
        }
        
        // show toolbar on demand
        if (ftb != rootSheet) {
            rootSheet.tbar.removeAll();
            Ext.each(parentSheets, function(sheet) {
                sheet.breadCrumb.enable();
                rootSheet.tbar.add(sheet.breadCrumb);
            }, this);
            ftb.breadCrumb.disable();
            rootSheet.tbar.add(ftb.breadCrumb, '->', ftb.action_loadFilter);
            rootSheet.tbar.show();
            rootSheet.tbar.doLayout();
        } else {
            rootSheet.tbar.hide();
        }
        
        this.activeSheet = ftb;
        this.onFilterRowsChange();
    },
    
    getParentSheets: function(parents) {
        parents = parents || [];
        
        if (this.parentSheet) {
            parents.unshift(this.parentSheet);
            return this.parentSheet.getParentSheets(parents);
        }
        
        return parents;
    },
    
    getRootSheet: function() {
        return this.parentSheet ? this.parentSheet.getRootSheet() : this;
    }
});

Ext.reg('tinewidgetsfiltertoolbar', Tine.widgets.grid.FilterToolbar);


/***/ }),
/* 1117 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

Tine.widgets.grid.FilterStructureTreePanel = Ext.extend(Ext.tree.TreePanel, {
    
    /**
     * @cfg {Tine.widgets.grid.FilterPanel} filterPanel
     */
    filterPanel: null,
    
    cls: 'tw-ftb-filterstructure-treepanel',
    autoScroll: true,
    border: false,
    useArrows: true,
    collapsible: true,
    collapsed: true,
    baseCls: 'ux-arrowcollapse',
    animCollapse: true,
    titleCollapse:true,
    rootVisible: false,
    
//    draggable : true,
                        
//    rootVisible: false,
    
    initComponent: function() {
        this.title = [
            '<span ext:qtip="',
            Ext.util.Format.htmlEncode(i18n._('Show records that match to one of the following filters')),
            '">',
            Ext.util.Format.htmlEncode(i18n._('or alternatively')),
            '</span>'
        ].join('');
        
//        this.tbar = [{
//            text: '+',
//            scope: this,
//            handler: this.onAddFilterPanel
//        }];
        
        this.root = {
            path: '/',
//            iconCls: this.filterPanel.activeFilterPanel.app ? this.filterPanel.activeFilterPanel.app.getIconCls() : '',
            expanded: true,
//            text: i18n._('or alternatively'),
//            qtip: i18n._('Show records that match to one of the following filters'),
            children: [
                this.createNode(this.filterPanel.activeFilterPanel),
                {id: 'addFilterPanel', text: i18n._('Add alternative filter'), iconCls: 'action_add', leaf: true}
            ]
        };
        
        this.contextMenu = new Ext.menu.Menu({
            plugins: [{
                ptype: 'ux.itemregistry',
                key:   'Tinebase-MainContextMenu'
            }],
            items: [{
                text: i18n._('Remove Filter'),
                iconCls: 'action_remove',
                scope: this,
                handler: this.onCtxRemove
            }]
        });
        
        this.on('click', this.onClick, this);
        this.on('beforeclick', this.onBeforeClick, this);
        this.on('contextmenu', this.onContextMenu, this);
        this.on('checkchange', this.onCheckChange, this);
        this.on('afterrender', this.onAfterRender, this);
        this.on('insert', this.onNodeInsert, this);
        this.on('textchange', this.onNodeTextChange, this);
        this.on('expandnode', this.filterPanel.manageHeight, this.filterPanel);
        this.on('collapsenode', this.filterPanel.manageHeight, this.filterPanel);
        this.on('collapse', this.filterPanel.manageHeight, this.filterPanel);
        this.on('expand', this.filterPanel.manageHeight, this.filterPanel);
        this.filterPanel.on('filterpaneladded', this.onFilterPanelAdded, this);
        this.filterPanel.on('filterpanelremoved', this.onFilterPanelRemoved, this);
        this.filterPanel.on('filterpanelactivate', this.onFilterPanelActivate, this);
        this.filterPanel.activeFilterPanel.on('titlechange', this.onFilterPanelTitleChange, this);
        
        this.editor = new Ext.tree.TreeEditor(this);
        this.editor.on('startedit', function(el, value) {
            this.editor.setValue(Ext.util.Format.htmlDecode(value));
        }, this);
        
        Tine.widgets.grid.FilterStructureTreePanel.superclass.initComponent.call(this);
    },
    
    onContextMenu: function(node, e) {
        e.stopEvent();
        if (this.getRootNode().childNodes.length > 2 && node.id != 'addFilterPanel') {
            this.contextMenu.contextNode = node;
            this.contextMenu.showAt(e.getXY());
        }
    },
    
    onCtxRemove: function() {
        if (this.contextMenu.contextNode) {
            this.filterPanel.removeFilterPanel(this.contextMenu.contextNode.id);
        }
    },
    
    onAfterRender: function() {
        this.onFilterPanelActivate(this.filterPanel, this.filterPanel.activeFilterPanel);
//        this.getRootNode().collapse();
    },
    
    /**
     * called when the text of a noded changed
     * 
     * @param {Ext.tree.TreeNode} node
     * @param {String} text
     * @param {String} oldText
     */
    onNodeTextChange: function(node, text, oldText) {
        if (node.attributes && node.attributes.filterPanel) {
            node.attributes.filterPanel.setTitle(Ext.util.Format.htmlEncode(text));
        }
    },
    
    /**
     * called when a node got inserted to this tree
     * 
     * @param {Ext.tree.TreePanel} tree
     * @param {Ext.tree.TreeNode} parent
     * @param {Ext.tree.TreeNode} node
     */
    onNodeInsert: function(tree, parent, node) {
        
        var clickEl = Ext.EventObject.target ? Ext.EventObject.getTarget('.x-tree-node-el', 10) : null,
            isUserActionInsert = clickEl && Ext.fly(clickEl, '_treeEvents').getAttribute('tree-node-id', 'ext') == 'addFilterPanel' ? true : false,
            nodeCount = this.getRootNode().childNodes.length;
        
        // expand this panel if more than 2 childnodes (initial + add)
        if (nodeCount > 2 && this.collapsed) {
            this.expand();
        }
            
        // start editor for new node (if initialted by user)
        if (isUserActionInsert) {
            this.editor.triggerEdit.defer(100, this.editor, [node]);
        }
    },
    
    /**
     * called when a filterPanel gets added
     * 
     * @param {Tine.widgets.grid.filterPanel} filterToolbar
     * @param {Tine.widgets.grid.filterToolbar} filterPanel
     */
    onFilterPanelAdded: function(filterToolbar, filterPanel) {
//        this.getRootNode().appendChild(this.createNode(filterPanel));
//        var newNode = this.createNode(filterPanel);
//        newNode
        this.getRootNode().insertBefore(this.createNode(filterPanel), this.getNodeById('addFilterPanel'));
        filterPanel.on('titlechange', this.onFilterPanelTitleChange, this);
    },
    
    /**
     * called when a filterPanel gets removed
     * 
     * @param {Tine.widgets.grid.filterPanel} filterToolbar
     * @param {Tine.widgets.grid.filterToolbar} filterPanel
     */
    onFilterPanelRemoved: function(filterToolbar, filterPanel) {
        var node = this.getNodeById(filterPanel.id);
        delete node.filterPanel;
        if (node) {
            node.remove();
        }
    },
    
    /**
     * called when a filterPanel gets activated
     * 
     * @param {Tine.widgets.grid.filterPanel} filterToolbar
     * @param {Tine.widgets.grid.filterToolbar} filterPanel
     */
    onFilterPanelActivate: function(filterToolbar, filterPanel) {
        var node = this.getNodeById(filterPanel.id);

        if (this.getSelectionModel().isSelected(node)) {
            return;
        }

        if (node) {
            this.suspendEvents();
            node.select();
            this.resumeEvents();
        }
    },
    
    /**
     * called when a filterPanel title changed
     * 
     * @param {Tine.widgets.grid.filterToolbar} filterPanel
     * @param {String} text
     */
    onFilterPanelTitleChange: function(filterPanel, text) {
        var node = this.getNodeById(filterPanel.id);
        if (node) {
            this.suspendEvents();
            node.setText(text);
            this.resumeEvents();
        }
    },
    
    onBeforeClick: function(node) {
        if (node.id == 'addFilterPanel') {
            this.onAddFilterPanel();
            return false;
        }
    },
    
    onAddFilterPanel: function() {
        var filterPanel = this.filterPanel.addFilterPanel();
        this.filterPanel.setActiveFilterPanel(filterPanel);
    },
    
    onCheckChange: function(node, checked) {
        node.attributes.filterPanel.isActive = checked;
    },
    
    onClick: function(node) {
        if (node.attributes && node.attributes.filterPanel) {
            this.filterPanel.setActiveFilterPanel(node.attributes.filterPanel);
        }
    },
    
    createNode: function(filterPanel) {
        // mark filterPanel active
        filterPanel.isActive = true;
        
        return {
            checked: true,
            editable: true,
            id: filterPanel.id,
            filterPanel: filterPanel,
            leaf: true,
            text: filterPanel.title ? filterPanel.title : filterPanel.id,
            iconCls: filterPanel.app ? filterPanel.app.getIconCls() : 'leaf'
        };
    }
});


/***/ }),
/* 1118 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

Tine.widgets.grid.FilterPanel = function(config) {
    this.filterToolbarConfig = config;

    // the plugins won't work there
    delete this.filterToolbarConfig.plugins;
    
    // apply some filterPanel configs
    Ext.each(['onFilterChange', 'getAllFilterData'], function(p) {
        if (config.hasOwnProperty(p)) {
            this[p] = config[p];
        }
    }, this);
    
    // become filterPlugin
    Ext.applyIf(this, new Tine.widgets.grid.FilterPlugin());
    
    this.filterPanels = [];
    
    this.addEvents(
        /**
         * @event filterpaneladded
         * Fires when a filterPanel is added
         * @param {Tine.widgets.grid.FilterPanel} this
         * @param {Tine.widgets.grid.FilterToolbar} the filterPanel added
         */
        'filterpaneladded',
        
        /**
         * @event filterpanelremoved
         * Fires when a filterPanel is removed
         * @param {Tine.widgets.grid.FilterPanel} this
         * @param {Tine.widgets.grid.FilterToolbar} the filterPanel removed
         */
        'filterpanelremoved',
        
        /**
         * @event filterpanelactivate
         * Fires when a filterPanel is activated
         * @param {Tine.widgets.grid.FilterPanel} this
         * @param {Tine.widgets.grid.FilterToolbar} the filterPanel activated
         */
        'filterpanelactivate'
    );
    Tine.widgets.grid.FilterPanel.superclass.constructor.call(this, {});
};

Ext.extend(Tine.widgets.grid.FilterPanel, Ext.Panel, {

    /**
     * @property activeFilterPanel
     * @type Tine.widgets.grid.FilterToolbar
     */
    activeFilterPanel: null,
    
    /**
     * @property filterPanels map filterPanelId => filterPanel
     * @type Object
     */
    filterPanels: null,
    
    /**
     * @property criteriaCount
     * @type Number
     */
    criteriaCount: 0,
    
    cls: 'tw-ftb-filterpanel',
    layout: 'border',
    border: false,

    /**
     * We expect the filter panel to be layouted
     */
    forceLayout: true,
    
    initComponent: function() {
        
        var filterPanel = this.addFilterPanel();
        this.filterModelMap = filterPanel.filterModelMap;
        this.activeFilterPanel = filterPanel;
        
        // this.initQuickFilterField();

        this.advancedSearchEnabled = Tine.Tinebase.featureEnabled('featureShowAdvancedSearch') &&
            this.filterToolbarConfig.app.enableAdvancedSearch;

        this.recordClass = this.filterToolbarConfig.recordClass;

        this.items = [{
            region: 'east',
            width: 200,
            border: false,
            layout: 'fit',
            split: true,
            items: [new Tine.widgets.grid.FilterStructureTreePanel({filterPanel: this})]
        }, {
            region: 'center',
            border: false,
            layout: 'card',
            activeItem: 0,
            items: [filterPanel],
            autoScroll: false,
            listeners: {
                scope: this,
                afterlayout: this.manageHeight
            }
        }];
        
        Tine.widgets.grid.FilterPanel.superclass.initComponent.call(this);

        this.quickFilterPlugin = new Tine.widgets.grid.FilterToolbarQuickFilterPlugin({
            syncFields: false
        });
        this.quickFilterPlugin.init(this);
    },
    
    /**
     * is persiting this filterPanel is allowed
     * 
     * @return {Boolean}
     */
    isSaveAllowed: function() {
        return this.activeFilterPanel.allowSaving;
    },

    getAllFilterData: Tine.widgets.grid.FilterToolbar.prototype.getAllFilterData,
    storeOnBeforeload: Tine.widgets.grid.FilterToolbar.prototype.storeOnBeforeload,

    onFilterRowsChange: function() {
        this.activeFilterPanel.doLayout();
        this.manageHeight();
    },

    onFiltertrigger: function() {
        this.activeFilterPanel.onFiltertrigger();
    },

    manageHeight: function() {
        if (this.rendered && this.activeFilterPanel.rendered) {
            var tbHeight = this.activeFilterPanel.getHeight(),
                northHeight = this.layout.north ? this.layout.north.panel.getHeight() + 1 : 0,
                eastHeight = this.layout.east && this.layout.east.panel.getEl().child('ul') ? ((this.layout.east.panel.getEl().child('ul').getHeight()) + 29) : 0,
                height = Math.min(Math.max(eastHeight, tbHeight + northHeight), 120);
            
            this.setHeight(height);

            // manage scrolling
            if (this.layout.center && tbHeight > 120) {
                this.layout.center.panel.el.child('div[class^="x-panel-body"]', true).scrollTop = 1000000;
                this.layout.center.panel.el.child('div[class^="x-panel-body"]', false).applyStyles('overflow-y: auto');
            }
            if (this.layout.east && eastHeight > 120) {
                this.layout.east.panel.el.child('div[class^="x-panel-body"]', true).scrollTop = 1000000;
            }
            this.ownerCt.layout.layout();
        }
    },
    
    onAddFilterPanel: function() {
        var filterPanel = this.addFilterPanel();
        this.setActiveFilterPanel(filterPanel);
    },
    
    addFilterPanel: function(config) {
        config = config || {};
        
        var filterPanel = new Tine.widgets.grid.FilterToolbar(Ext.apply({}, this.filterToolbarConfig, config));
        filterPanel.onFilterChange = this.onFilterChange.createDelegate(this);
        
        this.filterPanels[filterPanel.id] = filterPanel;
        this.criteriaCount++;
        
        if (this.criteriaCount > 1 && filterPanel.title == filterPanel.generateTitle()) {
            filterPanel.setTitle(filterPanel.title + ' ' + this.criteriaCount);
        }
        this.fireEvent('filterpaneladded', this, filterPanel);
        return filterPanel;
    },
    
    /**
     * remove filter panel
     * 
     * @param {mixed} filterPanel
     */
    removeFilterPanel: function(filterPanel) {
        filterPanel = Ext.isString(filterPanel) ? this.filterPanels[filterPanel] : filterPanel;
        
        if (! this.filterPanels[filterPanel.id].destroying) {
            this.filterPanels[filterPanel.id].destroy();
        }
        
        delete this.filterPanels[filterPanel.id];
        this.criteriaCount--;
        
        this.fireEvent('filterpanelremoved', this, filterPanel);
        
        for (var id in this.filterPanels) {
            if (this.filterPanels.hasOwnProperty(id)) {
                return this.setActiveFilterPanel(this.filterPanels[id]);
            }
        }
    },
    
    setActiveFilterPanel: function(filterPanel) {
        filterPanel = Ext.isString(filterPanel) ? this.filterPanels[filterPanel] : filterPanel;
        this.activeFilterPanel = filterPanel;

        if (this.layout.center) {
            this.layout.center.panel.add(filterPanel);
            this.layout.center.panel.layout.setActiveItem(filterPanel.id);
        }
        
        filterPanel.doLayout();
        if (filterPanel.activeSheet) {
         // solve layout problems (#6332)
            filterPanel.setActiveSheet(filterPanel.activeSheet);
        }
        this.manageHeight.defer(100, this);
        
        this.fireEvent('filterpanelactivate', this, filterPanel);
    },

    getQuickFilterField: function() {
        return this.quickFilterPlugin.getQuickFilterField();
    },

    getQuickFilterPlugin: function() {
        return this.quickFilterPlugin;
    },

    getValue: function() {
        var filters = [];
        

        for (var id in this.filterPanels) {
            if (this.filterPanels.hasOwnProperty(id) && this.filterPanels[id].isActive) {
                filters.push({'condition': 'AND', 'filters': this.filterPanels[id].getValue(), 'id': id, label: Ext.util.Format.htmlDecode(this.filterPanels[id].title)});
            }
        }
        
        // NOTE: always trigger a OR condition, otherwise we sould loose inactive FilterPanles
        return [{'condition': 'OR', 'filters': filters, id: 'FilterPanel'}];
    },

    setValue: function(value) {
        // save last filter ?
        var prefs;
        if ((prefs = this.filterToolbarConfig.app.getRegistry().get('preferences')) && prefs.get('defaultpersistentfilter') == '_lastusedfilter_') {
            var lastFilterStateName = this.filterToolbarConfig.recordClass.getMeta('appName') + '-' + this.filterToolbarConfig.recordClass.getMeta('recordName') + '-lastusedfilter';
            
            if (Ext.encode(Ext.state.Manager.get(lastFilterStateName)) != Ext.encode(value)) {
                Tine.log.debug('Tine.widgets.grid.FilterPanel::setValue save last used filter');
                Ext.state.Manager.set(lastFilterStateName, value);
            }
        }
        
        // NOTE: value is always an array representing a filterGroup with condition AND (server limitation)!
        //       so we need to route "alternate criterias" (OR on root level) through this filterGroup for transport
        //       and scrape them out here -> this also means we whipe all other root level filters (could only be implicit once)
        var alternateCriterias = false;
        Ext.each(value, function(filterData) {
            if (filterData.condition && filterData.condition == 'OR') {
                value = filterData.filters;
                alternateCriterias = true;
                return false;
            }
        }, this);
        
        
        if (! alternateCriterias) {
            // reset criterias
//            this.criteriaCount = 0;
//            this.activeFilterPanel.setTitle(String.format(i18n._('Criteria {0}'), ++this.criteriaCount));
            this.activeFilterPanel.setTitle(this.activeFilterPanel.generateTitle());
            for (var id in this.filterPanels) {
                if (this.filterPanels.hasOwnProperty(id)) {
                    if (this.filterPanels[id] != this.activeFilterPanel) {
                        this.removeFilterPanel(this.filterPanels[id]);
                    }
                }
            }
            
            this.activeFilterPanel.setValue(value);

        } 
        
        // OR condition on root level
        else {
            var keepFilterPanels = [],
                activeFilterPanel = this.activeFilterPanel;
            
            Ext.each(value, function(filterData) {
                var filterPanel;
                
                // refresh existing filter panel
                if (filterData.id && this.filterPanels.hasOwnProperty(filterData.id)) {
                    filterPanel = this.filterPanels[filterData.id];
                }
                
                // create new filterPanel
                else {
                    // NOTE: don't use filterData.id here, it's a ext-comp-* which comes from a different session
                    // and might be a totally different element yet.
                    filterPanel = this.addFilterPanel();
                    this.setActiveFilterPanel(filterPanel);
                }
                
                filterPanel.setValue(filterData.filters);
                keepFilterPanels.push(filterPanel.id);
                
                if (filterData.label) {
                    filterPanel.setTitle(Ext.util.Format.htmlEncode(filterData.label));
                }
                
            }, this);
            
            // (re)activate filterPanel
            this.setActiveFilterPanel(keepFilterPanels.indexOf(activeFilterPanel.id) > 0 ? activeFilterPanel : keepFilterPanels[0]);
            
            
            // remove unused panels
            for (var id in this.filterPanels) {
                if (this.filterPanels.hasOwnProperty(id) && keepFilterPanels.indexOf(id) < 0 && this.filterPanels[id].isActive == true) {
                    this.removeFilterPanel(id);
                }
            }
            
        }
    }
});

/***/ }),
/* 1119 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * TODO         container filter should extend this
 */
Ext.ns('Tine.widgets.grid');

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.PickerFilter
 * @extends     Tine.widgets.grid.FilterModel
 */
Tine.widgets.grid.PickerFilter = Ext.extend(Tine.widgets.grid.FilterModel, {
    /**
     * @property Tine.Tinebase.Application app
     */
    app: null,
    
    /**
     * @cfg field
     * @type String
     */
    field: '',

    /**
     * @cfg defaultOperator
     * @type String
     */
    defaultOperator: 'in',

    /**
     * @cfg defaultValue
     * @type String
     */
    defaultValue: '',

    /**
     * @cfg label
     * @type String
     */
    label: '',

    /**
     * @cfg multiselectField
     */
    multiselectFieldConfig: null,
    
    /**
     * record picker
     * 
     * @type Tine.Tinebase.widgets.form.RecordPickerComboBox
     */
    picker: null,
    
    /**
     * record class
     * 
     * @type Tine.Tinebase.data.Record
     */
    recordClass: null,
    
    /**
     * @private
     */
    initComponent: function() {
        this.operators = this.operators || ['equals', 'not', 'in', 'notin'];
        
        // TODO invent a picker registry
        if (this.picker === null) {
            this.picker = (this.recordClass == Tine.Addressbook.Model.Contact) ?  Tine.Addressbook.SearchCombo : Tine.Tinebase.widgets.form.RecordPickerComboBox;
        }
        this.multiselectFieldConfig = this.multiselectFieldConfig || {
            selectionWidget: new this.picker ({
                app: this.app,
                recordClass: this.recordClass,
                blurOnSelect: true
            }),
            recordClass: this.recordClass,
            isSelectionVisible: function() {
                return this.selectionWidget.isExpanded();
            }
        };
        
        Tine.widgets.grid.PickerFilter.superclass.initComponent.call(this);
    },
    
    /**
     * called on operator change of a filter row
     * @private
     * 
     * TODO keep value widget if old operator / new operator use the same widget?
     */
    onOperatorChange: function(filter, newOperator, keepValue) {
        var oldOperator = filter.formFields.operator.getValue(),
            oldValues = [].concat(filter.formFields.value.getValue()),
            oldValuesStore = filter.formFields.value.store,
            el = Ext.select('tr[id=' + this.ftb.frowIdPrefix + filter.id + '] td[class^=tw-ftb-frow-value]', this.ftb.el).first();
        
        // make sure we have the old value record datas
        Ext.each(oldValues, function(value, idx) {
            try {
                if (Ext.isPrimitive(value)) {
                    oldValues[idx] = oldValuesStore.getById(value).data
                }
            } catch (e) {
                Tine.log.warn('Tine.widgets.grid.PickerFilter::onOperatorChange could not get record data');
            }
        }, this);
        
        Tine.widgets.grid.PickerFilter.superclass.onOperatorChange.apply(this, arguments);
        
        // NOTE: removeMode got introduced on ext3.1 but is not documented
        //       'childonly' is no ext mode, we just need something other than 'container'
        if (filter.formFields.value && Ext.isFunction(filter.formFields.value.destroy)) {
            filter.formFields.value.removeMode = 'childsonly';
            filter.formFields.value.destroy();
            delete filter.formFields.value;
        }
        
        filter.formFields.value = this.valueRenderer(filter, el);
        
        // retain value(s) on operator change (single -> multi, multi -> multi)
        if (['in', 'notin'].indexOf(newOperator) > -1) {
            filter.formFields.value.setValue(oldValues);
        }
    },
    
    /**
     * value renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    valueRenderer: function(filter, el) {
        if (filter.formFields.value) {
            return filter.formFields.value;
        }

        var operator = filter.get('operator') ? filter.get('operator') : this.defaultOperator,
            value;
            
        Tine.log.debug('Tine.widgets.grid.PickerFilter::valueRenderer() - Creating new value field for ' + operator + ' operator.')

        switch(operator) {
            case 'equals':
            case 'not':
                value = this.getPicker(filter, el);
                break;
            default:
                value = this.getPickerGridLayerCombo(filter, el);
        }

        value.on('specialkey', function(field, e){
             if (e.getKey() == e.ENTER){
                 this.onFiltertrigger();
             }
        }, this);
        value.on('select', this.onFiltertrigger, this);
        
        return value;
    },
    
    /**
     * get record picker
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     * 
     */
    getPicker: function(filter, el) {
        Tine.log.debug('Tine.widgets.grid.PickerFilter::getPicker()');
        
        var result = new this.picker ({
            app: this.app,
            recordClass: this.recordClass,
            filter: filter,
            blurOnSelect: true,
            width: this.filterValueWidth,
//            listWidth: 500,
//            listAlign: 'tr-br',
            id: 'tw-ftb-frow-valuefield-' + filter.id,
            value: filter.data.value ? filter.data.value : this.defaultValue,
            renderTo: el
        });
        
        return result;
    },

    /**
     * get picker grid layer combo
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     * 
     */
    getPickerGridLayerCombo: function(filter, el) {
        return new Tine.widgets.grid.PickerFilterValueField(Ext.apply({
            app: this.app,
            filter: filter,
            width: this.filterValueWidth,
            id: 'tw-ftb-frow-valuefield-' + filter.id,
            value: filter.data.value ? filter.data.value : this.defaultValue,
            renderTo: el
        }, this.multiselectFieldConfig));
    }
});

Tine.widgets.grid.FilterToolbar.FILTERS['tinebase.pickerfilter'] = Tine.widgets.grid.PickerFilter;

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.PickerFilterValueField
 * @extends     Ext.ux.form.LayerCombo
 */
Tine.widgets.grid.PickerFilterValueField = Ext.extend(Ext.ux.form.LayerCombo, {
    layerHeight: 200,
    hideButtons: false,
    formConfig: {
        labelAlign: 'left',
        labelWidth: 30
    },
    labelField: 'name',
    recordClass: null,
    valueStore: null,

    selectionWidget: null,
    labelRenderer: Ext.emptyFn,
    
    /**
     * init
     */
    initComponent: function() {
        this.on('beforecollapse', this.onBeforeCollapse, this);
        if (! this.store) {
            this.store = new Ext.data.SimpleStore({
                fields: this.recordClass
            });
        }
        
        Tine.widgets.grid.PickerFilterValueField.superclass.initComponent.call(this);
    },
    
    /**
     * get form values
     * 
     * @return {Array}
     */
    getFormValue: function() {
        var values = [];

        this.store.each(function(record) {
            values.push(record.data);
        }, this);
        
        return values;
    },
    
    /**
     * get items
     * 
     * @return {Array}
     */
    getItems: function() {
        var me = this,
            items = [];

        this.initSelectionWidget();
        
        this.pickerGridPanel = new Tine.widgets.grid.PickerGridPanel({
            height: this.layerHeight || 'auto',
            recordClass: this.recordClass,
            store: this.store,
            autoExpandColumn: this.labelField,
            getColumnModel: this.getColumnModel.createDelegate(this),
            initActionsAndToolbars: function() {
                Tine.widgets.grid.PickerGridPanel.prototype.initActionsAndToolbars.call(this);
                this.tbar = new Ext.Toolbar({
                    layout: 'fit',
                    items: [ me.selectionWidget ]
                });
            }
        });
        
        items.push(this.pickerGridPanel);
        
        return items;
    },
    
    /**
     * init selection widget
     */
    initSelectionWidget: function() {
        this.selectionWidget.on('select', this.onRecordSelect, this);
    },
    
    /**
     * @return Ext.grid.ColumnModel
     */
    getColumnModel: function() {
        var labelColumn = {id: this.labelField, header: String.format(i18n._('Selected  {0}'), this.recordClass.getMeta('recordsName')), dataIndex: this.labelField};
        if (this.labelRenderer != Ext.emptyFn) {
            labelColumn.renderer = this.labelRenderer;
        }
        
        return new Ext.grid.ColumnModel({
            defaults: {
                sortable: false
            },
            columns:  [ labelColumn ]
        });
    },
    
    /**
     * record select
     * 
     * @param {String} field
     * @param {Object} recordData
     */
    onRecordSelect: function(field, recordData) {
        this.addRecord(recordData);
        this.selectionWidget.suspendEvents();
        this.selectionWidget.clearValue();
        this.selectionWidget.resumeEvents();
    },
    
    /**
     * adds record from selection widget to store
     * 
     * @param {Object} recordData
     */
    addRecord: function(recordData) {
        Tine.log.debug('Tine.widgets.grid.PickerFilterValueField::addRecord()');
        Tine.log.debug(recordData);
        
        var data = (recordData.data) ? recordData.data : recordData.attributes ? recordData.attributes : recordData;
        
        var existingRecord = this.store.getById(recordData.id);
        if (! existingRecord) {
            this.store.add(new this.recordClass(data));
            
        } else {
            var idx = this.store.indexOf(existingRecord);
            var row = this.pickerGridPanel.getView().getRow(idx);
            Ext.fly(row).highlight();
        }
        
        if (this.selectionWidget.selectPanel) {
            this.selectionWidget.selectPanel.close();
        }
    },
    
    /**
     * @param {String} value
     * @return {Ext.form.Field} this
     */
    setValue: function(value) {
        value = Ext.isArray(value) ? value : [value];
        
        Tine.log.debug('Tine.widgets.grid.PickerFilterValueField::setValue()');
        Tine.log.debug(value);
        
        var recordText = [];
        this.currentValue = [];
        
        this.store.removeAll();
        var record, id, text;
        for (var i=0; i < value.length; i++) {
            text = this.getRecordText(value[i]);
            if (text && text !== '') {
                recordText.push(text);
            }
        }
        
        this.setRawValue(recordText.join(', '));
        
        return this;
    },
    
    /**
     * get text from record defined by value (id or something else)
     * 
     * @param {String|Object} value
     * @return {String}
     */
    getRecordText: function(value) {
        var id = (Ext.isString(value)) ? value : value.id,
            record = (this.valueStore) ? this.valueStore.getById(id) : ((! Ext.isString(value)) ? new this.recordClass(value, id) : null);
            
        Tine.log.debug('Tine.widgets.grid.PickerFilterValueField::getRecordText()');
        Tine.log.debug(record);
            
        if (! record) {
            return '';
        }
        
        // always copy/clone record because it can't exist in 2 different stores
        this.store.add(record.copy());
        this.currentValue.push(record.id);
        
        var text = record.get(this.labelField);
        text = (this.labelRenderer != Ext.emptyFn) ? this.labelRenderer(text) : text;
        
        return text;
    },
    
    /**
     * cancel collapse if ctx menu or record selection is shown
     * 
     * @return Boolean
     */
    onBeforeCollapse: function() {
        var result = true;
        
        if (this.pickerGridPanel) {
            var contextMenuVisible = this.pickerGridPanel.contextMenu && ! this.pickerGridPanel.contextMenu.hidden,
                selectionVisible = this.isSelectionVisible();
            result = ! (contextMenuVisible || selectionVisible);
        }
        
        Tine.log.debug('Tine.widgets.grid.PickerFilterValueField::onBeforeCollapse() - collapse: ' + result);
        
        return result;
    },
    
    /**
     * is selection visible ?
     * - overwrite this when extending to make sure that the selection widget is no longer visible on collapse
     * 
     * @return {Boolean}
     */
    isSelectionVisible: function() {
        return false;
    }
});


/***/ }),
/* 1120 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FilterToolbarQuickFilterPlugin
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * This plugin provides an external filter field (quickfilter) as a plugin of a filtertoolbar.
 * The filtertoolbar itself will be hidden no filter is set.
 * 
 * @example
 <pre><code>
    // init quickfilter as plugin of filtertoolbar
    this.quickSearchFilterToolbarPlugin = new Tine.widgets.grid.FilterToolbarQuickFilterPlugin();
    this.filterToolbar = new Tine.widgets.grid.FilterToolbar({
        filterModels: Tine.Addressbook.Model.Contact.getFilterModel(),
        defaultFilter: 'query',
        filters: [],
        plugins: [
            this.quickSearchFilterToolbarPlugin
        ]
    });
    
    // put quickfilterfield in a toolbar
    this.tbar = new Ext.Toolbar({
        '->',
        this.quickSearchFilterToolbarPlugin.getQuickFilterField()
    })
</code></pre>
 */
Tine.widgets.grid.FilterToolbarQuickFilterPlugin = function(config) {
    config = config || {};
    
    this.criteriaIgnores = config.criteriaIgnores || [
        {field: 'container_id', operator: 'equals', value: {path: '/'}},
        {field: 'query',        operator: 'contains',    value: ''}
    ];
        
    Ext.apply(this, config);
};

Tine.widgets.grid.FilterToolbarQuickFilterPlugin.prototype = {
    /**
     * @cfg {String} quickFilterField
     * 
     * name of quickfilter filed in filter definitions
     */
    quickFilterField: 'query',
    
    /**
     * filter toolbar we are plugin of
     * 
     * @type {Tine.widgets.grid.FilterToolbar} ftb
     */
    ftb: null,
    
    /**
     * external quick filter field
     * 
     * @type {Ext.ux.searchField} quickFilter
     */
    quickFilter: null,
    
    /**
     * filter row of filter toolbar where a quickfilter is set
     * 
     * @type {Ext.data.record}
     */
    quickFilterRow: null,
    
    /**
     * @cfg {Array} criterias to ignore
     */
    criteriaIgnores: null,

    /**
     * @cfg {Bool} syncFields
     * sync with filtertoolbar
     */
    syncFields: true,

    
    /**
     * bind value field of this.quickFilterRow to sync process
     */
    bind: function() {
        this.quickFilterRow.formFields.value.on('keyup', this.syncField, this);
        this.quickFilterRow.formFields.value.on('change', this.syncField, this);
    },
    
    /**
     * gets the (extra) quick filter toolbar items
     * 
     * @return {Ext.ButtonGroup}
     */
    getQuickFilterField: function() {
        if (! this.quickFilterGroup) {
            this.quickFilterGroup = new Ext.ButtonGroup({
                columns: 1,
                items: [
                    this.quickFilter, {
                        xtype: 'toolbar',
                        style: {border: 0, background: 'none'},
                        items: [this.criteriaText, '->', this.detailsToggleBtn]
                    }
                ]
            });
        }
        
        return this.quickFilterGroup;
    },
    
    getQuickFilterPlugin: function() {
        return this;
    },
    
    /**
     * gets the quick filter field from the filtertoolbar which is in sync with
     * the (extra) quick filter field. 
     */
    getQuickFilterRowField: function() {
        if (! this.quickFilterRow) {
            // NOTE: at this point there is no query filter in the filtertoolbar
            var filter = new this.ftb.record({field: this.quickFilterField, value: this.quickFilter.getValue()});
            this.ftb.addFilter(filter);
        }
        
        return this.quickFilterRow;
    },
    
    /**
     * called by filtertoolbar in plugin init process
     * 
     * @param {Tine.widgets.grid.FilterToolbar} ftb
     */
    init: function(ftb) {
        this.ftb = ftb;
        if (this.syncFields) {
            this.ftb.renderFilterRow = this.ftb.renderFilterRow.createSequence(this.onAddFilter, this);
            this.ftb.onFieldChange = this.ftb.onFieldChange.createSequence(this.onFieldChange, this);
            this.ftb.deleteFilter = this.ftb.deleteFilter.createInterceptor(this.onBeforeDeleteFilter, this);
        }

        this.origGetValue        = this.ftb.getValue;
        this.ftb.getValue        = this.onGetValue.createDelegate(this);
        this.ftb.setValue        = this.ftb.setValue.createSequence(this.onSetValue, this);
        this.ftb.onRender        = this.ftb.onRender.createSequence(this.onRender, this);
        
        
        //this.ftb.onFilterRowsChange = this.ftb.onFilterRowsChange.createInterceptor(this.onFilterRowsChange, this);
        this.ftb.getQuickFilterField = this.getQuickFilterField.createDelegate(this);
        this.ftb.getQuickFilterPlugin = this.getQuickFilterPlugin.createDelegate(this);
        
        this.quickFilter = new Ext.ux.SearchField({
            width: 300,
            enableKeyEvents: true
        });
        
        this.quickFilter.onTrigger1Click = this.quickFilter.onTrigger1Click.createSequence(this.onQuickFilterClear, this);
        this.quickFilter.onTrigger2Click = this.quickFilter.onTrigger2Click.createSequence(this.onQuickFilterTrigger, this);

        if (this.syncFields) {
            this.quickFilter.on('keyup', this.syncField, this);
            this.quickFilter.on('change', this.syncField, this);
        }
        
        this.criteriaText = new Ext.Panel({
            border: 0,
            html: '',
            bodyStyle: {
                border: 0,
                background: 'none', 
                'text-align': 'left', 
                'line-height': '11px'
            }
        });
        
        var stateful = !! this.ftb.recordClass;
        // autogenerate stateId
        if (stateful) {
            var stateId = this.ftb.recordClass.getMeta('appName') + '-' + this.ftb.recordClass.getMeta('recordName') + '-FilterToolbar-QuickfilterPlugin';
        }
        
        this.detailsToggleBtn = new Ext.Button({
            style: {'margin-top': '2px'},
            enableToggle: true,
            text: i18n._('show details'),
            tooltip: i18n._('Always show advanced filters'),
            scope: this,
            handler: this.onDetailsToggle,
            stateful: stateful,
            stateId : stateful ? stateId : null,
            getState: function() {
                return {detailsButtonPressed: this.pressed};
            },
            applyState: function(state) {
                if (state.detailsButtonPressed) {
                    this.setText( i18n._('hide details'));
                    this.toggle(state.detailsButtonPressed);
                }
            },
            stateEvents: ['toggle'],
            listeners: {
                scope: this,
                render: function() {
                    // limit width of this.criteriaText
                    this.criteriaText.setWidth(this.quickFilterGroup.getWidth() - this.detailsToggleBtn.getWidth());
                }
            }
        });
        
        this.ftb.hide();
    },
    
    /**
     * called when a filter is added to the filtertoolbar
     * 
     * @param {Ext.data.Record} filter
     */
    onAddFilter: function(filter) {
        if (filter.get('field') == this.quickFilterField && ! this.quickFilterRow) {
            this.quickFilterRow = filter;
            this.bind();
            
            // preset quickFilter with filterrow value
            this.syncField(filter.formFields.value);
        }
        
    },
    
    /**
     * called when the details toggle button gets toggled
     * 
     * @param {Ext.Button} btn
     */
    onDetailsToggle: function(btn) {
        btn.setText(btn.pressed ? i18n._('hide details') : i18n._('show details'));
        
        this.ftb[btn.pressed ? 'show' : 'hide']();
        
        // cares for resizing
        this.ftb.onFilterRowsChange();
    },
    
    /**
     * called when a filter field of the filtertoolbar changes
     */
    onFieldChange: function(filter, newField) {
        if (filter == this.quickFilterRow) {
            this.onBeforeDeleteFilter(filter);
        }
        
        if (newField == this.quickFilterField) {
            this.onAddFilter(filter);
        }
    },
    
    /**
     * called when the filterrows of the filtertoolbar changes
     * 
     * we detect the hidestatus of the filtertoolbar
     *
    onFilterRowsChange: function() {
        this.ftb.searchButtonWrap.removeClass('x-btn-over');
        
        if (this.ftb.filterStore.getCount() <= 1 
            && this.ftb.filterStore.getAt(0).get('field') == this.quickFilterField
            && !this.ftb.filterStore.getAt(0).formFields.value.getValue()
            && !this.detailsToggleBtn.pressed) {
            
            this.ftb.hide();
        } else {
            this.ftb.show();
        }
    },
    */
    
    /**
     * called before a filter row is deleted from filtertoolbar
     * 
     * @param {Ext.data.Record} filter
     */
    onBeforeDeleteFilter: function(filter) {
        if (filter == this.quickFilterRow) {
            this.quickFilter.setValue('');
            this.unbind();
            delete this.quickFilterRow;
            
            // look for an other quickfilterrow
            this.ftb.filterStore.each(function(f) {
                if (f != filter && f.get('field') == this.quickFilterField ) {
                    this.onAddFilter(f);
                    return false;
                }
            }, this);
        }
    },
    
    /**
     * called when the (external) quick filter is cleared
     */
    onQuickFilterClear: function() {
        if (this.syncFields) {
            this.ftb.deleteFilter(this.quickFilterRow);
        }
        this.quickFilter.reset();
        this.onQuickFilterTrigger();
    },
    
    /**
     * called when the (external) filter triggers filter action
     */
    onQuickFilterTrigger: function() {
        this.ftb.onFiltertrigger.call(this.ftb);
        this.ftb.onFilterRowsChange.call(this.ftb);
    },
    
    /**
     * called after onRender is called for the filter toolbar
     * 
     * @param {Array} filters
     */
    onRender: function() {
        this.onDetailsToggle(this.detailsToggleBtn);
    },
    
    /**
     * called after setValue is called for the filter toolbar
     * 
     * @param {Array} filters
     */
    onSetValue: function(filters) {
        var _ = window.lodash;

        this.setCriteriaText(filters);

        if (! this.syncFields) {
            this.quickFilter.setValue(_.get(_.find(filters, {field: this.quickFilterField}), 'value', ''));
        }
    },

    onGetValue: function() {
        var value = this.origGetValue.call(this.ftb);

        if (! this.syncFields) {
            value.push({field: this.quickFilterField, operator: 'contains', value: this.quickFilter.getValue(), id: 'quickFilter'});
        }

        return value;
    },

    getCriteriasText: function(filters) {
        var criterias = [];

        Ext.each(filters, function(f) {
            for (var i=0, criteria, ignore; i<this.criteriaIgnores.length; i++) {
                criteria = this.criteriaIgnores[i];
                ignore = true;

                for (var p in criteria) {
                    if (criteria.hasOwnProperty(p)) {
                        if (Ext.isString(criteria[p]) || Ext.isEmpty(f[p]) ) {
                            ignore &= f.hasOwnProperty(p) && f[p] === criteria[p];
                        } else {
                            for (var pp in criteria[p]) {
                                if (criteria[p].hasOwnProperty(pp)) {
                                    ignore &= f.hasOwnProperty(p) && typeof f[p].hasOwnProperty == 'function' && f[p].hasOwnProperty(pp) && f[p][pp] === criteria[p][pp];
                                }
                            }
                        }
                    }
                }

                if (ignore || f.id == 'quickFilter') {
                    // don't judge them as criterias
                    return;
                }
            }

            if (this.ftb.filterModelMap && this.ftb.filterModelMap[f.field]) {
                criterias.push(this.ftb.filterModelMap[f.field].label);
            } else if (f.condition == 'OR' || f.condition == 'AND'){
                criterias = criterias.concat(this.getCriteriasText(f.filters));
            }
        }, this);

        return criterias;
    },

    /**
     * sets this.criteriaText according to filters
     * 
     * @param {Array} filters
     */
    setCriteriaText: function(filters) {
        var text = '' , 
            criterias = this.getCriteriasText(filters);

        if (! Ext.isEmpty(criterias)) {
            text = String.format(i18n.ngettext('Your view is limited by {0} criteria:', 'Your view is limited by {0} criterias:', criterias.length), criterias.length) +
                   '<br />' +
                   '&nbsp;' + criterias.join(', ');
        }

        // If toolbar is hidden, there is no component to update!
        if(this.criteriaText.getContentTarget()) {
            this.criteriaText.update(text);
        }
    },
    
    /**
     * syncs field contents of this.quickFilterRow and this.quickFilter
     * 
     * @param {Ext.EventObject} e
     * @param {Ext.form.Field} field
     */
    syncField: function(field) {
        if (field == this.quickFilter) {
            this.getQuickFilterRowField().formFields.value.setValue(this.quickFilter.getValue());
        } else {
            this.quickFilter.setValue(this.quickFilterRow.formFields.value.getValue());
        }
    },
    
    /**
     * unbind value field of this.quickFilterRow from sync process
     */
    unbind: function() {
        this.quickFilterRow.formFields.value.un('keyup', this.syncField, this);
        this.quickFilterRow.formFields.value.un('change', this.syncField, this);
    }
};


/***/ }),
/* 1121 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * a row selection model capable to return filters
 * @constructor
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FilterSelectionModel
 * @extends     Ext.grid.RowSelectionModel
 */
Tine.widgets.grid.FilterSelectionModel = Ext.extend(Ext.grid.RowSelectionModel, {
    /**
     * @cfg {Ext.data.Store}
     */
    store: null,
    
    /**
     * @cfg {Tine.widgets.grid.GridPanel}
     */
    gridPanel: null,
    
    /**
     * @property {Bool}
     */
    isFilterSelect: false,
    
    /**
     * Returns filterData representing current selection
     * 
     * @return {Array} filterData
     */
    getSelectionFilter: function() {
        if(! this.isFilterSelect) {
            var filter = this.getFilterOfRowSelection();
        } else {
            /* cruide hack lets save it as comment, maybe we need it some time ;-)
            var opts = {}
            for (var i=0; i<this.store.events.beforeload.listeners.length; i++) {
                if (this.store.events.beforeload.listeners[i].scope.xtype == 'filterplugin') {
                    this.store.events.beforeload.listeners[i].fireFn.call(this.store.events.beforeload.listeners[i].scope, this.store, opts);
                }
            }
            //console.log(opts.params.filter);
            return opts.params.filter;
            */
            var filter = this.getAllFilterData();
        }
        return filter;
    },
    
    /**
     * get current selection as collection
     * 
     * @return {Ext.util.MixedCollection}
     */
    getSelectionsCollection: function() {
        return this.selections;
    },
    
    /**
     * returns ids of currently visible page
     * 
     * @return {Array}
     */
    getCurrentPageIds: function() {
        var ids = [];
        this.store.each(function(record) {
            ids.push(record.id);
        }, this);
        
        return ids;
    },
    
    /**
     * gets filter data of all filter plugins
     * 
     * NOTE: As we can't find all filter plugins directly we need a litte hack 
     *       to get their data
     *       
     *       We register ourselve as latest beforeload.
     *       In the options.filter we have the filters then.
     */
    getAllFilterData: function() {
        this.store.on('beforeload', this.storeOnBeforeload, this);
        this.store.load();
        this.store.un('beforeload', this.storeOnBeforeload, this);
        
        return this.allFilterData;
    },
    
    storeOnBeforeload: function(store, options) {
        this.allFilterData = options.params.filter;
        this.store.fireEvent('exception');
        return false;
    },
    
    /**
     * selects all rows 
     * @param {Bool} onlyPage select only rows from current page
     * @return {Void}
     */
    selectAll: function(onlyPage) {
        this.isFilterSelect = !onlyPage;
        
        Tine.widgets.grid.FilterSelectionModel.superclass.selectAll.call(this);
    },
    
    /**
     * @private
     */
    onRefresh : function(){
        this.clearSelections(true);
        Tine.widgets.grid.FilterSelectionModel.superclass.onRefresh.call(this);
    },
    
    /**
     * @private
     */
    onRemove : function(v, index, r){
        this.clearSelections(true);
        Tine.widgets.grid.FilterSelectionModel.superclass.onRemove.call(this, v, index, r);
    },
    
    /**
     * Deselects a row.
     * @param {Number} row The index of the row to deselect
     */
    deselectRow : function(index, preventViewNotify) {
        this.isFilterSelect = false;
        Tine.widgets.grid.FilterSelectionModel.superclass.deselectRow.call(this, index, preventViewNotify);
    },
    
    /**
     * Clears all selections.
     */
    clearSelections: function(silent) {
        this.suspendEvents();
        this.isFilterSelect = false;
        
        Tine.widgets.grid.FilterSelectionModel.superclass.clearSelections.call(this);
        
        this.resumeEvents();
        if (! silent) {
            this.fireEvent('selectionchange', this);
        }
    },
    
    /**
     * toggle selection
     */
    toggleSelection: function() {
        if (this.isFilterSelect) {
            this.clearSelections();
        } else {
            this.suspendEvents();
            
            var index;
            this.store.each(function(record) {
                index = this.store.indexOf(record);
                if (this.isSelected(index)) {
                    this.deselectRow(index);
                } else {
                    this.selectRow(index, true);
                }
            }, this);
            
            this.resumeEvents();
            this.fireEvent('selectionchange', this);
        }
    },
    
    /**
     * Returns number of selected rows
     * 
     * @return {Number}
     */
    getCount: function() {
        if(! this.isFilterSelect) {
            return Tine.widgets.grid.FilterSelectionModel.superclass.getCount.call(this);
        } else {
            return this.store.getTotalCount();
        }
    },
   
    /**
     * converts a 'normal' row selection into a filter
     * 
     * @private
     * @return {Array} filterData
     */
    getFilterOfRowSelection: function() {
        //var idProperty = this.store.fields.getMeta('idProperty');
        var idProperty = this.store.reader.meta.id;
        var ids = [];
        this.each(function(record) {
            ids.push(record.id);
        });
        return [{field: idProperty, operator: 'in', value: ids}];
    }
});


/***/ }),
/* 1122 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * Foreign Record Filter
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.ForeignRecordFilter
 * @extends     Tine.widgets.grid.FilterModel
 * 
 * <p>Filter for foreign records</p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 */
Tine.widgets.grid.ForeignRecordFilter = Ext.extend(Tine.widgets.grid.FilterModel, {
    
    /**
     * @cfg {Application} app (required)
     */
    app: null,
    
    /**
     * @cfg {Application} ownRecordClass own record class for generic filter row
     */
    ownRecordClass: null,
    
    /**
     * @cfg {Record} foreignRecordClass needed for explicit defined filters
     */
    foreignRecordClass : null,
    
    /**
     * @cfg {String} linkType {relation|foreignId} needed for explicit defined filters
     */
    linkType: 'relation',
    
    /**
     * @cfg {String} filterName server side filterGroup Name, needed for explicit defined filters
     */
    filterName: null,
    
    /**
     * @cfg {String} ownField for explicit filterRow
     */
    ownField: null,
    
    /**
     * @cfg {String} editDefinitionText untranslated edit definition button text
     */
    editDefinitionText: 'Edit definition', // i18n._('Edit definition')
    
    /**
     * @cfg {Object} optional picker config
     */
    pickerConfig: null,
    
    /**
     * @cfg {String} startDefinitionText untranslated start definition button text
     */
    startDefinitionText: 'Start definition', // i18n._('Start definition')
    
    /**
     * @property this filterModel is the generic filterRow
     * @type Boolean
     */
    isGeneric: false,
    
    field: 'foreignRecord',
    
    /**
     * ignore this php models (filter is not shown)
     * @cfg {Array}
     */
    ignoreRelatedModels: null,
    
    /**
     * @private
     */
    initComponent: function() {
        if (this.foreignRecordClass) {
            this.foreignRecordClass = Tine.Tinebase.data.RecordMgr.get(this.foreignRecordClass);
        }
        
        // TODO: remove this when files can be searched
        this.ignoreRelatedModels = this.ignoreRelatedModels ? this.ignoreRelatedModels.push('Filemanager_Model_Node') : ['Filemanager_Model_Node'];
        // TODO: remove this when ProductAggregates can be searched (or move this exception to Sales app)
        this.ignoreRelatedModels.push('Sales_Model_ProductAggregate');
        
        if (this.ownField) {
            this.field = this.ownField;
        }
        
        this['init' + (this.isGeneric ? 'Generic' : 'Explicit')]();
        Tine.widgets.grid.ForeignRecordFilter.superclass.initComponent.call(this);
    },
    
    /**
     * init the generic foreign filter row
     */
    initGeneric: function() {
            
        this.label = i18n._('Related to');
        
        var operators = [];
        
        // linkType relations automatic list
        if (this.ownRecordClass.hasField('relations')) {
            var operators = [];
            Ext.each(Tine.widgets.relation.Manager.get(this.app, this.ownRecordClass, this.ignoreRelatedModels), function(relation) {
                if (Tine.Tinebase.common.hasRight('run', relation.relatedApp)) {
                    // TODO: leave label as it is?
                    var label = relation.text.replace(/ \(.+\)/,'');
                    operators.push({operator: {linkType: 'relation', foreignRecordClass: Tine.Tinebase.common.resolveModel(relation.relatedModel, relation.relatedApp)}, label: label});
                }
            }, this);
        }
        // get operators from registry
        Ext.each(Tine.widgets.grid.ForeignRecordFilter.OperatorRegistry.get(this.ownRecordClass), function(def) {
            // translate label
            var foreignRecordClass = Tine.Tinebase.data.RecordMgr.get(def.foreignRecordClass),
                appName = foreignRecordClass.getMeta('appName'),
                app = Tine.Tinebase.appMgr.get(appName),
                label = app ? app.i18n._hidden(def.label) : def.label;

            operators.push({operator: {linkType: def.linkType, foreignRecordClass: foreignRecordClass, filterName: def.filterName}, label: label});
        }, this);
        
        // we need this to detect operator changes
        Ext.each(operators, function(o) {o.toString = this.objectToString}, this);
        
        this.operatorStore = new Ext.data.JsonStore({
            fields: ['operator', 'label'],
            data: operators
        });
        
        if ( this.operatorStore.getCount() > 0) {
            this.defaultOperator = this.operatorStore.getAt(0).get('operator');
        }
    },
    
    /**
     * init an explicit filter row
     */
    initExplicit: function() {
        this.foreignField = this.foreignRecordClass.getMeta('idProperty');

        var foreignApp = Tine.Tinebase.appMgr.get(this.foreignRecordClass.getMeta('appName')),
            i18n;
        if (foreignApp) {
            i18n = foreignApp.i18n;
        } else {
            i18n = new Locale.Gettext();
            i18n.textdomain('Tinebase');
        }

        if (! this.label) {
            this.label = i18n.n_(this.foreignRecordClass.getMeta('recordName'), this.foreignRecordClass.getMeta('recordsName'), 1);
        } else {
            this.label = i18n._(this.label);
        }

        if (! this.operators) {
            this.operators = ['equals', 'not', 'definedBy'];
        }

        // get operators from registry
        if (this.ownRecordClass) {
            Ext.each(Tine.widgets.grid.ForeignRecordFilter.OperatorRegistry.get(this.ownRecordClass), function (def) {
                // translate label
                var foreignRecordClass = Tine.Tinebase.data.RecordMgr.get(def.foreignRecordClass),
                    appName = foreignRecordClass.getMeta('appName'),
                    app = Tine.Tinebase.appMgr.get(appName),
                    label = app ? app.i18n._hidden(def.label) : def.label;

                this.operators.push({
                    operator: Ext.apply(def, {
                        foreignRecordClass: foreignRecordClass
                    }),
                    label: label
                });
            }, this);
        }


        if (! this.defaultOperator) {
            this.defaultOperator = 'equals';
        }
    },
    
    /**
     * onDefineRelatedRecord
     * 
     * @param {} filter
     */
    onDefineRelatedRecord: function(filter) {
        Tine.log.debug('Tine.widgets.grid.ForeignRecordFilter::onDefineRelatedRecord() - filter:');
        Tine.log.debug(filter);
        
        if (! filter.toolbar) {
            this.createRelatedRecordToolbar(filter);
        }
        
        this.ftb.setActiveSheet(filter.toolbar);
        filter.formFields.value.setText((this.editDefinitionText));
    },
    
    /**
     * get related record value data
     * 
     * NOTE: generic filters have their foreign record definition in the values
     */
    getRelatedRecordValue: function(filter) {
        var _ = window.lodash,
            me = this,
            filters = filter.toolbar ? filter.toolbar.getValue() : [],
            foreignRecordClass = filter.foreignRecordDefinition.foreignRecordClass,
            value;
            
        if (this.isGeneric) {
            value = {
                appName: foreignRecordClass.getMeta('appName'),
                modelName: foreignRecordClass.getMeta('modelName'),
                linkType: filter.foreignRecordDefinition.linkType,
                filterName : filter.foreignRecordDefinition.filterName,
                filters: filters
            };
            
        } else {
            value = filters;

            var operator = filter.get('operator') || filter.formFields.operator.origGetValue(),
                registeredOperator = _.get(_.find(this.operators, function(o) { return _.get(o, 'operator.filterName') == operator;}), 'operator', false);

            if (registeredOperator) {
                value.push({
                    filterName: registeredOperator.filterName,
                    field: ':' + registeredOperator.field,
                    operator: registeredOperator.operator,
                    value: filter.formFields.value.value
                });
            } else {
                // get value for idField if our own operator is not definedBy
                if (filter.get('operator') != 'definedBy') {
                    value.push({
                        field: ':' + foreignRecordClass.getMeta('idProperty'),
                        operator: filter.get('operator'),
                        value: filter.formFields.value.value
                    });
                }

                // get values of filters of our toolbar we are superfilter for (left hand stuff)
                this.ftb.filterStore.each(function (filter) {
                    var filterModel = this.ftb.getFilterModel(filter);
                    if (filterModel.superFilter && filterModel.superFilter == this) {
                        var filterData = this.ftb.getFilterData(filter);
                        value.push(filterData);
                    }
                }, this);
            }
            
        }
        
        return value;
    },
    
    /**
     * set related record value data
     * @param {} filter
     */
    setRelatedRecordValue: function(filter) {
        var _ = window.lodash,
            me = this,
            value = filter.get('value'),
            operator = filter.get('operator') || filter.formFields.operator.origGetValue(),
            isRegisteredOperator = _.get(_.find(this.operators, function(o) { return _.get(o, 'operator.filterName') == operator;}), 'operator', false);
        
        if (isRegisteredOperator || ['equals', 'not', 'oneOf'].indexOf(operator) >= 0) {
            // NOTE: if setValue got called in the valueField internally, value is arguments[1] (createCallback)
            return filter.formFields.value.origSetValue(arguments.length ? arguments[1] : value);
        }
        
        // generic: choose right operator : appname -> generic filters have no subfilters an if one day, no left hand once!
        if (this.isGeneric) {
            // get operator
            this.operatorStore.each(function(r) {
                var operator = r.get('operator'),
                    foreignRecordClass = operator.foreignRecordClass;
                    
                if (foreignRecordClass.getMeta('appName') == value.appName && foreignRecordClass.getMeta('modelName') == value.modelName) {
                    filter.formFields.operator.setValue(operator);
                    filter.foreignRecordDefinition = operator;
                    return false;
                }
            }, this);
            
            // set all content on childToolbar
            if (Ext.isObject(filter.foreignRecordDefinition) && value && Ext.isArray(value.filters) && value.filters.length) {
                if (! filter.toolbar) {
                    this.createRelatedRecordToolbar(filter);
                }
                
                filter.toolbar.setValue(value.filters);
                
                // change button text
                if (filter.formFields.value && Ext.isFunction(filter.formFields.value.setText)) {
                    filter.formFields.value.setText(i18n._(this.editDefinitionText));
                }
            }
            
            
        } else {
            if (! Ext.isArray(value)) return;
            
            // explicit chose right operator /equals / in /definedBy: left sided values create (multiple) subfilters in filterToolbar
            var foreignRecordDefinition = filter.foreignRecordDefinition,
                foreignRecordClass = foreignRecordDefinition.foreignRecordClass,
                foreignRecordIdProperty = foreignRecordClass.getMeta('idProperty'),
                parentFilters = [];
                
            Ext.each(value, function(filterData, i) {
                if (! Ext.isString(filterData.field)) return;
                
                if (filterData.implicit) parentFilters.push(filterData);
                    
                var parts = filterData.field.match(/^(:)?(.*)/),
                    leftHand = !!parts[1],
                    field = parts[2];
                
                if (leftHand) {
                    // leftHand id property and registered operators are handled below
                    if (field == foreignRecordIdProperty || filterData.filterName) {
                        return;
                    }

                    // move filter to leftHand/parent filterToolbar
                    if (this.ftb.getFilterModel(filterData.field)) {
                        // ftb might have a record with this id
                        // and we can't keep it yet
                        delete filterData.id;
                        this.ftb.addFilter(new this.ftb.record(filterData));
                    }
                    
                    parentFilters.push(filterData);
                }
            }, this);
            
            // remove parent filters
            Ext.each(parentFilters, function(filterData) {value.remove(filterData);}, this);
            
            // if there where no remaining childfilters, hide this filterrow
            if (! value.length)  {
                // prevent loop
                filter.set('value', '###NOT SET###');
                filter.set('value', '');
                
                filter.formFields.operator.setValue(this.defaultOperator);
                this.onOperatorChange(filter, this.defaultOperator, false);
                
                // if (not empty value through operator chage)
                Tine.log.info('hide row -> not yet implemented');
            }
            
            // a single id filter is always displayed in the parent Toolbar with our own filterRow
            else if (value.length == 1 && [foreignRecordIdProperty, ':' + foreignRecordIdProperty].indexOf(value[0].field) > -1) {
                filter.set('value', value[0].value);
                filter.formFields.operator.setValue(value[0].operator);
                this.onOperatorChange(filter, value[0].operator, true);
            }

            // a single registered filter is always displayed in the parent Toolbar with our own filterRow
            else if (value.length == 1 && (registeredOperator = _.get(_.find(this.operators, function(o) { return _.get(o, 'operator.filterName') == value[0].filterName;}), 'operator', false))) {
                filter.set('value', value[0].value);
                filter.formFields.operator.setValue(registeredOperator.filterName);
                this.onOperatorChange(filter, registeredOperator.filterName, true);
                filter.formFields.value.origSetValue(value[0].value)
            }
            
            // set remaining child filters
            else {
                if (! filter.toolbar) {
                    this.createRelatedRecordToolbar(filter);
                }
                
                filter.toolbar.setValue(value);
                
                filter.formFields.operator.setValue('definedBy');
            }
        }
        
    },
    
    /**
     * create a related record toolbar
     */
    createRelatedRecordToolbar: function(filter) {
        Tine.log.debug('Tine.widgets.grid.ForeignRecordFilter::createRelatedRecordToolbar() - filter:');
        Tine.log.debug(filter);
        
        var foreignRecordDefinition = filter.foreignRecordDefinition,
            foreignRecordClass = foreignRecordDefinition.foreignRecordClass,
            filterModels = foreignRecordClass.getFilterModel(),
            ftb = this.ftb;

        if (! filter.toolbar) {
            // add our subfilters in this toolbar (right hand)
            if (Ext.isFunction(this.getSubFilters)) {
                filterModels = filterModels.concat(this.getSubFilters());
            }

            filter.toolbar = new Tine.widgets.grid.FilterToolbar({
                recordClass: foreignRecordClass,
                filterModels: filterModels,
                defaultFilter: foreignRecordClass.getMeta('defaultFilter') ? foreignRecordClass.getMeta('defaultFilter') : 'query'
            });
            
            ftb.addFilterSheet(filter.toolbar);
            
            // force rendering as we can't set values on non rendered toolbar atm.
            this.ftb.setActiveSheet(filter.toolbar);
            this.ftb.setActiveSheet(this.ftb);
        }
    },
    
    /**
     * operator renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    operatorRenderer: function (filter, el) {
        var operator;
        
        // init operator value
        filter.set('operator', filter.get('operator') ? filter.get('operator') : this.defaultOperator);
        
        if (! this.isGeneric) {
            operator = Tine.widgets.grid.ForeignRecordFilter.superclass.operatorRenderer.apply(this, arguments);
            filter.foreignRecordDefinition = {linkType: this.linkType, foreignRecordClass: this.foreignRecordClass, filterName: this.filterName}
        } else {
            operator = new Ext.form.ComboBox({
                filter: filter,
                width: 80,
                id: 'tw-ftb-frow-operatorcombo-' + filter.id,
                mode: 'local',
                lazyInit: false,
                emptyText: i18n._('select a operator'),
                forceSelection: true,
                typeAhead: true,
                triggerAction: 'all',
                store: this.operatorStore,
                displayField: 'label',
                valueField: 'operator',
                value: filter.get('operator'),
                renderTo: el
            });
            operator.on('select', function(combo, newRecord, newKey) {
                if (combo.value != combo.filter.get('operator')) {
                    this.onOperatorChange(combo.filter, combo.value);
                }
            }, this);
            
            // init foreignRecordDefinition
            filter.foreignRecordDefinition = filter.get('operator');
        }
        
        
        operator.origGetValue = operator.getValue.createDelegate(operator);
        
        // op is always AND atm.
        operator.getValue = function() {
            return 'AND';
        };
        
//        var origSetValue = operator.setValue.createDelegate(operator);
//        operator.setValue = function(value) {
//            origSetValue(value == 'AND' ? 'definedBy' : value);
//        }
        
        return operator;
    },
    
    /**
     * called on operator change of a filter row
     * @private
     */
    onOperatorChange: function(filter, newOperator, keepValue) {
        if (this.isGeneric) {
            filter.foreignRecordDefinition = newOperator;
        }
        
        if (filter.get('operator') != newOperator) {
            if (filter.toolbar) {
                filter.toolbar.destroy();
                delete filter.toolbar;
            }
        }
        
        filter.set('operator', newOperator);

        if (! keepValue) {
            filter.set('value', '');
        }
        
        var el = Ext.select('tr[id=' + this.ftb.frowIdPrefix + filter.id + '] td[class^=tw-ftb-frow-value]', this.ftb.el).first();
        
        // NOTE: removeMode got introduced on ext3.1 but is not docuemented
        //       'childonly' is no ext mode, we just need something other than 'container'
        if (filter.formFields.value && Ext.isFunction(filter.formFields.value.destroy)) {
            filter.formFields.value.removeMode = 'childsonly';
            filter.formFields.value.destroy();
            delete filter.formFields.value;
        }
        
        filter.formFields.value = this.valueRenderer(filter, el);
    },
    
    /**
     * value renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    valueRenderer: function(filter, el) {
        var _ = window.lodash,
            me = this,
            operator = filter.get('operator') ? filter.get('operator') : this.defaultOperator,
            value;

        switch(operator) {
            case 'equals':
            case 'not':
                
                value = Tine.widgets.form.RecordPickerManager.get(this.foreignRecordClass.getMeta('appName'), this.foreignRecordClass, Ext.apply({
                    filter: filter,
                    blurOnSelect: true,
                    width: this.filterValueWidth,
                    listWidth: 500,
                    listAlign: 'tr-br',
                    id: 'tw-ftb-frow-valuefield-' + filter.id,
                    value: filter.data.value ? filter.data.value : this.defaultValue,
                    renderTo: el
                }, this.pickerConfig));
                
                value.on('specialkey', function(field, e){
                     if(e.getKey() == e.ENTER){
                         this.onFiltertrigger();
                     }
                }, this);

                value.origSetValue = value.setValue.createDelegate(value);

                break;

            default:
                var def = _.get(_.find(this.operators, function(o) { return _.get(o, 'operator.filterName') == operator;}), 'operator', {}),
                    backup = _.reduce(_.keys(def), function(bkup, key) {
                        return _.set(bkup, key, me[key]);
                    }, {}),
                    valueType = _.get(def, 'valueType');

                // cope with operator registry values
                if ( valueType) {
                    _.assign(me, def);
                    value = Tine.widgets.grid.FilterModel.prototype.valueRenderer.call(me, filter, el);
                    _.assign(me, backup);

                    value.origSetValue = value.setValue.createDelegate(value);
                } else {
                    this.setRelatedRecordValue(filter);

                    if (!filter.formFields.value) {
                        value = new Ext.Button({
                            text: i18n._(this.startDefinitionText),
                            filter: filter,
                            width: this.filterValueWidth,
                            id: 'tw-ftb-frow-valuefield-' + filter.id,
                            renderTo: el,
                            handler: this.onDefineRelatedRecord.createDelegate(this, [filter]),
                            scope: this
                        });

                        // show button
                        el.addClass('x-btn-over');

                        // change text if setRelatedRecordValue had child filters
                        if (filter.toolbar) {
                            value.setText((this.editDefinitionText));
                        }

                    } else {
                        value = filter.formFields.value;
                    }
                }
                break;
        }

        value.setValue = this.setRelatedRecordValue.createDelegate(this, [filter], 0);
        value.getValue = this.getRelatedRecordValue.createDelegate(this, [filter]);
        
        return value;
    },
    
//    getSubFilters: function() {
//        var filterConfigs = this.foreignRecordClass.getFilterModel();
//        
//        Ext.each(filterConfigs, function(config) {
//            this.subFilterModels.push(Tine.widgets.grid.FilterToolbar.prototype.createFilterModel.call(this, config));
//        }, this);
//        
//        return this.subFilterModels;
//    },
    
    objectToString: function() {
        return Ext.encode(this);
    },
    
    onDestroy: function(filterRecord) {
        if(filterRecord.toolbar) {
            this.ftb.removeFilterSheet(filterRecord.toolbar);
            
            delete filterRecord.toolbar;
        }
        
    }
});
    
/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FilterRegistry
 * @singleton
 */
Tine.widgets.grid.ForeignRecordFilter.OperatorRegistry = function() {
    var operators = {};
    
    return {
        register: function(appName, modelName, operator) {
            var key = appName + '.' + modelName;
            if (! operators[key]) {
                operators[key] = [];
            }
            
            operators[key].push(operator);
        },
        
        get: function(appName, modelName) {
            if (Ext.isFunction(appName.getMeta)) {
                modelName = appName.getMeta('modelName');
                appName = appName.getMeta('appName');
            }
        
            var key = appName + '.' + modelName;
            
            return operators[key] || [];
        }
    };
}();

Tine.widgets.grid.FilterToolbar.FILTERS['foreignrecord'] = Tine.widgets.grid.ForeignRecordFilter;


/***/ }),
/* 1123 */
/***/ (function(module, exports) {

/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ns('Ext.ux.grid');

/**
 * @class Ext.ux.grid.GroupSummary
 * @extends Ext.util.Observable
 * A GridPanel plugin that enables dynamic column calculations and a dynamically
 * updated grouped summary row.
 */
Ext.ux.grid.GroupSummary = Ext.extend(Ext.util.Observable, {
    /**
     * @cfg {Function} summaryRenderer Renderer example:<pre><code>
summaryRenderer: function(v, params, data){
    return ((v === 0 || v > 1) ? '(' + v +' Tasks)' : '(1 Task)');
},
     * </code></pre>
     */
    /**
     * @cfg {String} summaryType (Optional) The type of
     * calculation to be used for the column.  For options available see
     * {@link #Calculations}.
     */

    constructor : function(config){
        Ext.apply(this, config);
        Ext.ux.grid.GroupSummary.superclass.constructor.call(this);
    },
    
    init : function(grid){
        this.grid = grid;
        var v = this.view = grid.getView();
        v.doGroupEnd = this.doGroupEnd.createDelegate(this);

        v.afterMethod('onColumnWidthUpdated', this.doWidth, this);
        v.afterMethod('onAllColumnWidthsUpdated', this.doAllWidths, this);
        v.afterMethod('onColumnHiddenUpdated', this.doHidden, this);
        v.afterMethod('onUpdate', this.doUpdate, this);
        v.afterMethod('onRemove', this.doRemove, this);

        if(!this.rowTpl){
            this.rowTpl = new Ext.Template(
                '<div class="x-grid3-summary-row" style="{tstyle}">',
                '<table class="x-grid3-summary-table" border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',
                    '<tbody><tr>{cells}</tr></tbody>',
                '</table></div>'
            );
            this.rowTpl.disableFormats = true;
        }
        this.rowTpl.compile();

        if(!this.cellTpl){
            this.cellTpl = new Ext.Template(
                '<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} {css}" style="{style}">',
                '<div class="x-grid3-cell-inner x-grid3-col-{id}" unselectable="on">{value}</div>',
                "</td>"
            );
            this.cellTpl.disableFormats = true;
        }
        this.cellTpl.compile();
    },

    /**
     * Toggle the display of the summary row on/off
     * @param {Boolean} visible <tt>true</tt> to show the summary, <tt>false</tt> to hide the summary.
     */
    toggleSummaries : function(visible){
        var el = this.grid.getGridEl();
        if(el){
            if(visible === undefined){
                visible = el.hasClass('x-grid-hide-summary');
            }
            el[visible ? 'removeClass' : 'addClass']('x-grid-hide-summary');
        }
    },

    renderSummary : function(o, cs){
        cs = cs || this.view.getColumnData();
        var cfg = this.grid.getColumnModel().config,
            buf = [], c, p = {}, cf, last = cs.length-1;
            
        for(var i = 0, len = cs.length; i < len; i++){
            c = cs[i];
            cf = cfg[i];
            p.id = c.id;
            p.style = c.style;
            p.css = i == 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
            if(cf.summaryType || cf.summaryRenderer){
                p.value = (cf.summaryRenderer || c.renderer)(o.data[c.name], p, o);
            }else{
                p.value = i == 0 ? '<div style="position:relative" ext:model="' + o.data.model + '" ext:qtip="' + i18n._('Export Records from these Positions') + '" class="x-menu-item-icon action_export">&nbsp;</div>' : '';
            }
            if(p.value == undefined || p.value === "") p.value = "&#160;";
            buf[buf.length] = this.cellTpl.apply(p);
        }

        return this.rowTpl.apply({
            tstyle: 'width:'+this.view.getTotalWidth()+';',
            cells: buf.join('')
        });
    },

    /**
     * @private
     * @param {Object} rs
     * @param {Object} cs
     */
    calculate : function(rs, cs){
        var data = {}, r, c, cfg = this.grid.getColumnModel().config, cf;
        for(var j = 0, jlen = rs.length; j < jlen; j++){
            r = rs[j];
            for(var i = 0, len = cs.length; i < len; i++){
                c = cs[i];
                cf = cfg[i];
                if(cf.summaryType){
                    data[c.name] = Ext.ux.grid.GroupSummary.Calculations[cf.summaryType](data[c.name] || 0, r, c.name, data);
                }
            }
        }
        return data;
    },

    doGroupEnd : function(buf, g, cs, ds, colCount){
        var data = this.calculate(g.rs, cs);
        data.model = g.rs[0].data.model;
        buf.push('</div>', this.renderSummary({data: data}, cs), '</div>');
    },

    doWidth : function(col, w, tw){
        var gs = this.view.getGroups(), s;
        for(var i = 0, len = gs.length; i < len; i++){
            s = gs[i].childNodes[2];
            s.style.width = tw;
            s.firstChild.style.width = tw;
            s.firstChild.rows[0].childNodes[col].style.width = w;
        }
    },

    doAllWidths : function(ws, tw){
        var gs = this.view.getGroups(), s, cells, wlen = ws.length;
        for(var i = 0, len = gs.length; i < len; i++){
            s = gs[i].childNodes[2];
            s.style.width = tw;
            s.firstChild.style.width = tw;
            cells = s.firstChild.rows[0].childNodes;
            for(var j = 0; j < wlen; j++){
                cells[j].style.width = ws[j];
            }
        }
    },

    doHidden : function(col, hidden, tw){
        var gs = this.view.getGroups(), s, display = hidden ? 'none' : '';
        for(var i = 0, len = gs.length; i < len; i++){
            s = gs[i].childNodes[2];
            s.style.width = tw;
            s.firstChild.style.width = tw;
            s.firstChild.rows[0].childNodes[col].style.display = display;
        }
    },

    // Note: requires that all (or the first) record in the
    // group share the same group value. Returns false if the group
    // could not be found.
    refreshSummary : function(groupValue){
        return this.refreshSummaryById(this.view.getGroupId(groupValue));
    },

    getSummaryNode : function(gid){
        var g = Ext.fly(gid, '_gsummary');
        if(g){
            return g.down('.x-grid3-summary-row', true);
        }
        return null;
    },

    refreshSummaryById : function(gid){
        var g = Ext.getDom(gid);
        if(!g){
            return false;
        }
        var rs = [];
        this.grid.getStore().each(function(r){
            if(r._groupId == gid){
                rs[rs.length] = r;
            }
        });
        var cs = this.view.getColumnData(),
            data = this.calculate(rs, cs),
            markup = this.renderSummary({data: data}, cs),
            existing = this.getSummaryNode(gid);
        
        if (existing){
            g.removeChild(existing);
        }
        Ext.DomHelper.append(g, markup);
        return true;
    },

    doUpdate : function(ds, record){
        this.refreshSummaryById(record._groupId);
    },

    doRemove : function(ds, record, index, isUpdate){
        if(!isUpdate){
            this.refreshSummaryById(record._groupId);
        }
    },

    /**
     * Show a message in the summary row.
     * <pre><code>
grid.on('afteredit', function(){
    var groupValue = 'Ext Forms: Field Anchoring';
    summary.showSummaryMsg(groupValue, 'Updating Summary...');
});
     * </code></pre>
     * @param {String} groupValue
     * @param {String} msg Text to use as innerHTML for the summary row.
     */
    showSummaryMsg : function(groupValue, msg){
        var gid = this.view.getGroupId(groupValue),
             node = this.getSummaryNode(gid);
        if(node){
            node.innerHTML = '<div class="x-grid3-summary-msg">' + msg + '</div>';
        }
    }
});

//backwards compat
Ext.grid.GroupSummary = Ext.ux.grid.GroupSummary;


/**
 * Calculation types for summary row:</p><div class="mdetail-params"><ul>
 * <li><b><tt>sum</tt></b> : <div class="sub-desc"></div></li>
 * <li><b><tt>count</tt></b> : <div class="sub-desc"></div></li>
 * <li><b><tt>max</tt></b> : <div class="sub-desc"></div></li>
 * <li><b><tt>min</tt></b> : <div class="sub-desc"></div></li>
 * <li><b><tt>average</tt></b> : <div class="sub-desc"></div></li>
 * </ul></div>
 * <p>Custom calculations may be implemented.  An example of
 * custom <code>summaryType=totalCost</code>:</p><pre><code>
// define a custom summary function
Ext.ux.grid.GroupSummary.Calculations['totalCost'] = function(v, record, field){
    return v + (record.data.estimate * record.dat7a.rate);
};
 * </code></pre>
 * @property Calculations
 */

Ext.ux.grid.GroupSummary.Calculations = {
    'sum' : function(v, record, field){
        return v + (record.data[field]||0);
    },

    'count' : function(v, record, field, data){
        return data[field+'count'] ? ++data[field+'count'] : (data[field+'count'] = 1);
    },

    'max' : function(v, record, field, data){
        var v = record.data[field];
        var max = data[field+'max'] === undefined ? (data[field+'max'] = v) : data[field+'max'];
        return v > max ? (data[field+'max'] = v) : max;
    },

    'min' : function(v, record, field, data){
        var v = record.data[field];
        var min = data[field+'min'] === undefined ? (data[field+'min'] = v) : data[field+'min'];
        return v < min ? (data[field+'min'] = v) : min;
    },

    'average' : function(v, record, field, data){
        var c = data[field+'count'] ? ++data[field+'count'] : (data[field+'count'] = 1);
        var t = (data[field+'total'] = ((data[field+'total']||0) + (record.data[field]||0)));
        return t === 0 ? 0 : t / c;
    }
};
Ext.grid.GroupSummary.Calculations = Ext.ux.grid.GroupSummary.Calculations;

/**
 * @class Ext.ux.grid.HybridSummary
 * @extends Ext.ux.grid.GroupSummary
 * Adds capability to specify the summary data for the group via json as illustrated here:
 * <pre><code>
{
    data: [
        {
            projectId: 100,     project: 'House',
            taskId:    112, description: 'Paint',
            estimate:    6,        rate:     150,
            due:'06/24/2007'
        },
        ...
    ],

    summaryData: {
        'House': {
            description: 14, estimate: 9,
                   rate: 99, due: new Date(2009, 6, 29),
                   cost: 999
        }
    }
}
 * </code></pre>
 *
 */
Ext.ux.grid.HybridSummary = Ext.extend(Ext.ux.grid.GroupSummary, {
    /**
     * @private
     * @param {Object} rs
     * @param {Object} cs
     */
    calculate : function(rs, cs){
        var gcol = this.view.getGroupField(),
            gvalue = rs[0].data[gcol],
            gdata = this.getSummaryData(gvalue);
        return gdata || Ext.ux.grid.HybridSummary.superclass.calculate.call(this, rs, cs);
    },

    /**
     * <pre><code>
grid.on('afteredit', function(){
    var groupValue = 'Ext Forms: Field Anchoring';
    summary.showSummaryMsg(groupValue, 'Updating Summary...');
    setTimeout(function(){ // simulate server call
        // HybridSummary class implements updateSummaryData
        summary.updateSummaryData(groupValue,
            // create data object based on configured dataIndex
            {description: 22, estimate: 888, rate: 888, due: new Date(), cost: 8});
    }, 2000);
});
     * </code></pre>
     * @param {String} groupValue
     * @param {Object} data data object
     * @param {Boolean} skipRefresh (Optional) Defaults to false
     */
    updateSummaryData : function(groupValue, data, skipRefresh){
        var json = this.grid.getStore().reader.jsonData;
        if(!json.summaryData){
            json.summaryData = {};
        }
        json.summaryData[groupValue] = data;
        if(!skipRefresh){
            this.refreshSummary(groupValue);
        }
    },

    /**
     * Returns the summaryData for the specified groupValue or null.
     * @param {String} groupValue
     * @return {Object} summaryData
     */
    getSummaryData : function(groupValue){
        var json = this.grid.getStore().reader.jsonData;
        if(json && json.summaryData){
            return json.summaryData[groupValue];
        }
        return null;
    }
});

//backwards compat
Ext.grid.HybridSummary = Ext.ux.grid.HybridSummary;

Ext.ComponentMgr.registerPlugin('grouping_grid', Ext.ux.grid.GroupSummary);


/***/ }),
/* 1124 */
/***/ (function(module, exports) {


/**
 * filter own records
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.OwnRecordFilter
 * @extends     Tine.widgets.grid.ForeignRecordFilter
 * 
 * @constructor
 */
Tine.widgets.grid.OwnRecordFilter = Ext.extend(Tine.widgets.grid.ForeignRecordFilter, {
    
    isGeneric: false,

    initComponent: function() {
        this.label = this.ftb.generateTitle();
        this.field = this.ownRecordClass.getMeta('idProperty');
        this.defaultOperator = 'definedBy';
        this.foreignRecordClass = this.ownRecordClass;
        
        Tine.widgets.grid.OwnRecordFilter.superclass.initComponent.call(this);
    },
    
    getFilterData: function(filterRecord) {
        var data = {
            field: this.field,
            id: filterRecord.id,
            label: filterRecord.toolbar ? filterRecord.toolbar.title : null
        };
        
        if (filterRecord.get('operator') == 'equals') {
            Ext.apply(data, {
                operator: 'equals',
                value: filterRecord.formFields.value.getValue()[0].value
            });
        } else {
            Ext.apply(data, {
                condition: filterRecord.condition || 'AND', 
                filters: this.getRelatedRecordValue(filterRecord)
            });
        }
        
        return data;
    },
    
    setFilterData: function(filterRecord, filterData) {
        // work around store compare bug
        if (Ext.isObject(filterData.filters)) {
            filterData.filters.toString = this.objectToString
        }
        
        if (filterData.operator == 'equals') {
            filterData.operator = 'AND';
            
            filterData.value = [{
                field: ':' + this.field,
                operator: 'equals',
                value: filterData.value
            }];
            filterData.value.toString = this.objectToString;
            
            filterRecord.set('operator', 'AND');
            filterRecord.set('value', filterData.value);
        } else {
            filterRecord.condition = filterData.condition || 'AND';
        }
        
        //filterRecord.set('value', filterData.filters);
        this.setRelatedRecordValue(filterRecord);
    },
    
    setRelatedRecordValue: function(filterRecord) {
        
        if (filterRecord.data.filters) {
            filterRecord.set('value', filterRecord.data.filters);
            delete filterRecord.data.filters;
        }
        
        Tine.widgets.grid.OwnRecordFilter.superclass.setRelatedRecordValue.apply(this, arguments);
    }
});

Tine.widgets.grid.FilterToolbar.FILTERS['ownrecord'] = Tine.widgets.grid.OwnRecordFilter;

/***/ }),
/* 1125 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * quickadd grid panel
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.QuickaddGridPanel
 * @extends     Ext.ux.grid.QuickaddGridPanel
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.widgets.grid.QuickaddGridPanel
 */
Tine.widgets.grid.QuickaddGridPanel = Ext.extend(Ext.ux.grid.QuickaddGridPanel, {
    /**
     * @cfg {Tine.Tinebase.data.Record} recordClass
     */
    recordClass: null,
    /**
     * @cfg {Tine.Tinebase.widgets.Dialog.EditDialog} editDialog
     */
    editDialog: null,
    /**
     * @cfg {String} parentRecordField
     */
    parentRecordField: null,

    /**
     * @cfg {String} dataField
     * @deprecated
     * use this (single) field as data instead of whole data object
     */
    dataField: null,
    /**
     * @cfg {Bool} useBBar
     */
    useBBar: false,
    
    /**
     * @private
     */
    clicksToEdit:'auto',
    frame: true,

    /**
     * @private
     */
    initComponent: function() {
        var _ = window.lodash,
            me = this,
            parent = me.findParentBy(function(c){return !!c.record})
                || me.findParentBy(function(c) {return c.editDialog});

        this.defaultSortInfo = this.defaultSortInfo || {};

        this.initGrid();
        this.initActions();

        this.on('rowcontextmenu', this.onRowContextMenu, this);
        if (! this.store) {
            // create basic store
            this.store = new Ext.data.Store({
                // explicitly create reader
                sortInfo: this.defaultSortInfo,
                reader: new Ext.data.ArrayReader({
                        idIndex: 0  // id for each record will be the first element
                    },
                    this.recordClass
                )
            });
        }

        if (me.parentRecordField && !this.editDialog) {
            me.editDialog = _.get(parent, 'editDialog');
        }
        if (me.editDialog && me.parentRecordField) {
            me.editDialog.on('load', me.onRecordLoad, me);
            me.editDialog.on('recordUpdate', me.onRecordUpdate, me);
        }

        Tine.widgets.grid.QuickaddGridPanel.superclass.initComponent.call(this);
        
        this.on('newentry', this.onNewentry, this);
    },

    /**
     * init grid
     */
    initGrid: function() {
        this.enableHdMenu = false;
        this.plugins = this.plugins || [];
        this.plugins.push(new Ext.ux.grid.GridViewMenuPlugin({}));
        
        this.sm = new Ext.grid.RowSelectionModel();
        this.sm.on('selectionchange', function(sm) {
            var rowCount = sm.getCount();
            this.deleteAction.setDisabled(rowCount == 0);
        }, this);
        
        this.cm = (! this.cm) ? this.getColumnModel() : this.cm;
    },
    
    /**
     * @private
     */
    initActions: function() {
        this.deleteAction = new Ext.Action({
            text: i18n._('Remove'),
            iconCls: 'actionDelete',
            handler : this.onDelete,
            scope: this,
            disabled: true
        });
        
        if (this.useBBar) {
            this.bbar = [this.deleteAction];
        }
    },
    
    /**
     * get column model
     * 
     * @return {Ext.grid.ColumnModel}
     */
    getColumnModel: function() {
        var _ = window.lodash,
            me = this;

        if (! this.colModel) {
            if (this.columns) {
                // convert string cols
                _.each(me.columns, function(col, idx) {
                    if (_.isString(col)) {
                        var config = Tine.widgets.grid.ColumnManager.get(me.recordClass.getMeta('appName'), me.recordClass.getMeta('modelName'), col, 'editDialog');
                        // NOTE: in editor grids we need a type based certain min-width
                        if (config) {
                            me.columns[idx] = config;
                            _.each(['quickaddField', 'editor'], function(prop) {
                                config[prop] = Ext.ComponentMgr.create(Tine.widgets.form.FieldManager.getByModelConfig(
                                    me.recordClass.getMeta('appName'),
                                    me.recordClass.getMeta('modelName'),
                                    col,
                                    Tine.widgets.form.FieldManager.CATEGORY_PROPERTYGRID
                                ));
                                config.width = config.width || config[prop].minWidth ? Math.max(config.width || 0, config[prop].minWidth || 0) : config.width;
                            });
                        }
                    }
                });
                _.remove(me.columns, _.isString)
            }

            this.colModel = new Ext.grid.ColumnModel({
                defaults: {
                    sortable: false
                },
                columns: this.columns || []
            });
        }

        return this.colModel;
    },
    
    /**
     * new entry event -> add new record to store
     * 
     * @param {Object} recordData
     * @return {Boolean}
     */
    onNewentry: function(recordData) {
        var _ = window.lodash,
            defaultData = Ext.isFunction(this.recordClass.getDefaultData) ?
                this.recordClass.getDefaultData() : {},
            newRecord = new this.recordClass(defaultData, Ext.id());

        _.each(recordData, function(val, key) {
            if (val) {
                // we want to see the red dirty triangles
                Tine.Tinebase.common.assertComparable(val);
                newRecord.set(key, '');
            }

            newRecord.set(key, val);
        });

        this.store.insert(0 , [newRecord]);

        return true;
    },
    
    /**
     * delete event
     */
    onDelete: function() {
        var selectedRows = this.getSelectionModel().getSelections();
        for (var i = 0; i < selectedRows.length; ++i) {
            this.store.remove(selectedRows[i]);
        }
    },
    
    onRowContextMenu: function(grid, row, e) {
        e.stopEvent();
        var selModel = grid.getSelectionModel();
        if(!selModel.isSelected(row)) {
            // disable preview update if config option is set to false
            this.updateOnSelectionChange = this.updateDetailsPanelOnCtxMenu;
            selModel.selectRow(row);
        }

        this.getContextMenu().showAt(e.getXY());
        // reset preview update
        this.updateOnSelectionChange = true;
    },
    
    /**
     * creates and returns the context  menu
     * @return {Ext.menu.Menu}
     */
    getContextMenu: function() {
        if (! this.contextMenu) {
            var items = [this.deleteAction];

            // lookup additional items
            items = items.concat(this.getContextMenuItems());

            this.contextMenu = new Ext.menu.Menu({
                plugins: [{
                    ptype: 'ux.itemregistry',
                    key:   'Tinebase-MainContextMenu'
                }],
                items: items
            });
        }

        if (this.readOnly) {
            this.deleteAction.setDisabled(true);
        }

        return this.contextMenu;
    },

    getContextMenuItems: function() {
        return [];
    },
    
    /**
     * get next available id
     * @return {Number}
     */
    getNextId: function() {
        var newid = this.store.getCount() + 1;
        
        while (this.store.getById(newid)) {
            newid++;
        }
        
        return newid;
    },

    /**
     * get values from store (as array)
     * 
     * @param {Array}
     * 
     * TODO improve this
     */
    setStoreFromArray: function(data) {
        this.store.clearData();

        for (var i = data.length-1; i >=0; --i) {
            var recordData = {}
            if (this.dataField === null) {
                recordData = data[i];
            } else {
                recordData[this.dataField] = data[i];
            }

            this.store.insert(0, new this.recordClass(recordData));
        }
    },
    
    /**
     * get values from store (as array)
     * 
     * @return {Array}
     */
    getFromStoreAsArray: function(deleteAutoIds) {
        var result = Tine.Tinebase.common.assertComparable([]);
        this.store.each(function(record) {
            var data = (this.dataField === null) ? record.data : record.get(this.dataField);
            if (deleteAutoIds && String(data.id).match(/ext-gen/)) {
                delete data.id;
            }
            result.push(data);
        }, this);

        return result;
    },

    onRecordLoad: function(editDialog, record, ticketFn) {
        var _ = window.lodash,
            me = this,
            data = _.get(record, 'data.' + me.parentRecordField) || [],
            idProperty = me.recordClass.getMeta('idProperty'),
            copyOmitFields = _.filter(me.recordClass.getModelConfiguration().fields, {copyOmit: true});

        /* generic client driven resolve attempt
        var byType = _.groupBy(me.recordClass.getModelConfiguration().fields, 'type'),
            recordsByType = _.groupBy(_.get(byType, 'record', []), function(f) {
                return _.get(f, 'config.appName', '') + '.' + _.get(f, 'config.modelName', '')
            }),
            idMap = {};

        _.assign(byType, recordsByType);

        _.each(['user', 'Addressbook.Contact'], function(type) {
            _.each(byType[type], function(field) {
                idMap[type] = _.uniq(_.concat(_.get(idMap, type, []), _.compact(_.map(data, field.key))));
            });
        });

        // resolve all user and Addressbook.contact -> argh, there is no user API
        */

        if (me.editDialog.copyRecord) {
            _.each(data, function(recordData) {
                recordData[idProperty] = Tine.Tinebase.data.Record.generateUID();
                _.each(copyOmitFields, function (copyOmitField) {
                    delete (recordData[copyOmitField.key]);
                });
            });
        }
        me.setStoreFromArray(data);

    },

    onRecordUpdate: function(editDialog, record) {
        var _ = window.lodash,
            me = this,
            data = me.getFromStoreAsArray();

        record.set(me.parentRecordField, data);
    }
});


/***/ }),
/* 1126 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 * @version     $Id
 */

/*global Ext, Tine*/

Ext.ns('Tine.widgets.grid');

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FileUploadGrid
 * @extends     Ext.grid.GridPanel
 *
 * <p>FileUpload grid for dialogs</p>
 * <p>
 * </p>
 *
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 *
 * @param       {Object} config
 *
 * @constructor Create a new  Tine.widgets.grid.FileUploadGrid
 */
Tine.widgets.grid.FileUploadGrid = Ext.extend(Ext.grid.EditorGridPanel, {

    /**
     * @cfg filesProperty
     * @type String
     */
    filesProperty: 'files',

    /**
     * @cfg showTopToolbar
     * @type Boolean
     * TODO     think about that -> when we deactivate the top toolbar, we lose the dropzone for files!
     */
    //showTopToolbar: null,

    /**
     * @cfg {Bool} readOnly
     */
    readOnly: false,

    /**
     * config values
     * @private
     */
    header: false,
    border: false,
    deferredRender: false,
    autoExpandColumn: 'name',
    showProgress: true,

    i18nFileString: null,


    fileSelectionDialog: null,

    /**
     * init
     * @private
     */
    initComponent: function () {
        this.i18nFileString = this.i18nFileString ? this.i18nFileString : i18n._('File');

        this.record = this.record || null;

        // init actions
        this.actionUpdater = new Tine.widgets.ActionUpdater({
            evalGrants: false
        });

        this.initToolbarAndContextMenu();
        this.initStore();
        this.initColumnModel();
        this.initSelectionModel();


        if (!this.plugins) {
            this.plugins = [];
        }

        this.plugins.push(new Ext.ux.grid.GridViewMenuPlugin({}));

        this.enableHdMenu = false;

        Tine.widgets.grid.FileUploadGrid.superclass.initComponent.call(this);

        this.on('rowcontextmenu', function (grid, row, e) {
            e.stopEvent();
            var selModel = grid.getSelectionModel();
            if (!selModel.isSelected(row)) {
                selModel.selectRow(row);
            }
            this.contextMenu.showAt(e.getXY());
        }, this);

        if (!this.record || this.record.id === 0) {
            this.on('celldblclick', function (grid, rowIndex, columnIndex, e) {
                // Don't download if the cell has an editor, just go on with the event
                if (grid.getColumns()[columnIndex] && grid.getColumns()[columnIndex].editor) {
                    return true;
                }

                // In case cell has no editor, just assume a download is intended
                e.stopEvent();
                this.onDownload()
            }, this);
        }
    },

    setReadOnly: function (readOnly) {
        this.readOnly = readOnly;
        this.action_add.setDisabled(readOnly);
        this.action_remove.setDisabled(readOnly);
    },

    /**
     * on upload failure
     * @private
     */
    onUploadFail: function (uploader, fileRecord) {

        var dataSize;
        if (fileRecord.html5upload) {
            dataSize = Tine.Tinebase.registry.get('maxPostSize');
        }
        else {
            dataSize = Tine.Tinebase.registry.get('maxFileUploadSize');
        }

        Ext.MessageBox.alert(
            i18n._('Upload Failed'),
            i18n._('Could not upload file. Filesize could be too big. Please notify your Administrator. Max upload size:') + ' ' + parseInt(dataSize, 10) / 1048576 + ' MB'
        ).setIcon(Ext.MessageBox.ERROR);

        this.getStore().remove(fileRecord);
        if (this.loadMask) this.loadMask.hide();
    },

    /**
     * on remove
     * @param {} button
     * @param {} event
     */
    onRemove: function (button, event) {

        var selectedRows = this.getSelectionModel().getSelections();
        for (var i = 0; i < selectedRows.length; i += 1) {
            this.store.remove(selectedRows[i]);
            var upload = Tine.Tinebase.uploadManager.getUpload(selectedRows[i].get('uploadKey'));
            if (upload) {
                upload.setPaused(true);
            }
        }
    },


    /**
     * on pause
     * @param {} button
     * @param {} event
     */
    onPause: function (button, event) {

        var selectedRows = this.getSelectionModel().getSelections();
        for (var i = 0; i < selectedRows.length; i++) {
            var upload = Tine.Tinebase.uploadManager.getUpload(selectedRows[i].get('uploadKey'));
            upload.setPaused(true);
        }
        this.getSelectionModel().deselectRange(0, this.getSelectionModel().getCount());
    },


    /**
     * on resume
     * @param {} button
     * @param {} event
     */
    onResume: function (button, event) {

        var selectedRows = this.getSelectionModel().getSelections();
        for (var i = 0; i < selectedRows.length; i++) {
            var upload = Tine.Tinebase.uploadManager.getUpload(selectedRows[i].get('uploadKey'));
            upload.resumeUpload();
        }
        this.getSelectionModel().deselectRange(0, this.getSelectionModel().getCount());
    },


    /**
     * init toolbar and context menu
     * @private
     */
    initToolbarAndContextMenu: function () {
        var me = this;

        this.action_add = new Ext.Action(this.getAddAction());

        this.action_remove = new Ext.Action({
            text: String.format(i18n._('Remove {0}'), this.i18nFileString),
            iconCls: 'action_remove',
            scope: this,
            disabled: true,
            handler: this.onRemove
        });

        this.action_pause = new Ext.Action({
            text: i18n._('Pause upload'),
            iconCls: 'action_pause',
            scope: this,
            handler: this.onPause,
            actionUpdater: this.isPauseEnabled
        });

        this.action_resume = new Ext.Action({
            text: i18n._('Resume upload'),
            iconCls: 'action_resume',
            scope: this,
            handler: this.onResume,
            actionUpdater: this.isResumeEnabled
        });

        this.tbar = [
            this.action_add
        ];

        this.tbar.push(this.action_remove);

        this.contextMenu = new Ext.menu.Menu({
            plugins: [{
                ptype: 'ux.itemregistry',
                key: 'Tinebase-MainContextMenu'
            }],
            items: [
                this.action_remove,
                this.action_pause,
                this.action_resume
            ]
        });

        this.actionUpdater.addActions([
            this.action_pause,
            this.action_resume
        ]);

    },

    /**
     * init store
     * @private
     */
    initStore: function () {
        this.store = new Ext.data.SimpleStore({
            fields: Ext.ux.file.Upload.file
        });

        this.store.on('add', this.onStoreAdd, this);

        this.loadRecord(this.record);
    },

    onStoreAdd: function (store, records, idx) {
        Ext.each(records, function (attachment) {
            if (attachment.get('url')) {
                // we can't use Ext.data.connection here as we can't control xhr obj. directly :-(
                var me = this,
                    url = attachment.get('url'),
                    name = url.split('/').pop(),
                    xhr = new XMLHttpRequest();

                xhr.open('GET', url, true);
                xhr.responseType = 'blob';

                store.suspendEvents();
                attachment.set('name', name);
                attachment.set('type', name.split('.').pop());
                store.resumeEvents();

                xhr.onprogress = function (e) {
                    var progress = Math.floor(100 * e.loaded / e.total) + '% loaded';
                    console.log(e);
                };


                xhr.onload = function (e) {
//                    attachment.set('type', xhr.response.type);
//                    attachment.set('size', xhr.response.size);

                    var upload = new Ext.ux.file.Upload({
                        file: new File([xhr.response], name),
                        type: xhr.response.type,
                        size: xhr.response.size
                    });
                    // work around chrome bug which dosn't take type from blob
                    upload.file.fileType = xhr.response.type;

                    var uploadKey = Tine.Tinebase.uploadManager.queueUpload(upload);
                    var fileRecord = Tine.Tinebase.uploadManager.upload(uploadKey);

                    upload.on('uploadfailure', me.onUploadFail, me);
                    upload.on('uploadcomplete', me.onUploadComplete, fileRecord);
                    upload.on('uploadstart', Tine.Tinebase.uploadManager.onUploadStart, me);

                    store.remove(attachment);
                    store.add(fileRecord);

                };

                xhr.send();

            }
        }, this);
    },

    /**
     * download file
     *
     * @param {} button
     * @param {} event
     */
    onDownload: function (button, event) {
        var _ = window.lodash,
            selectedRows = this.getSelectionModel().getSelections(),
            fileRow = selectedRows[0],
            recordId = _.get(this.record, 'id', false),
            tempFile = fileRow.get('tempFile');

        if (recordId !== false && (!recordId || (Ext.isObject(tempFile && tempFile.status !== 'complete')))) {
            Tine.log.debug('Tine.widgets.grid.FileUploadGrid::onDownload - file not yet available for download');
            return;
        }

        Tine.log.debug('Tine.widgets.grid.FileUploadGrid::onDownload - selected file:');
        Tine.log.debug(fileRow);

        if (Ext.isObject(tempFile)) {
            this.downloadTempFile(tempFile.id);
        } else {
            this.downloadNode(recordId, fileRow.id)
        }
    },

    /**
     * returns add action
     *
     * @return {Object} add action config
     */
    getAddAction: function () {
        var me = this;

        return {
            text: String.format(i18n._('Add {0}'), me.i18nFileString),
            iconCls: 'action_add',
            scope: me,
            plugins: [{
                ptype: 'ux.browseplugin',
                multiple: true,
                enableFileDialog: false,
                dropElSelector: 'div[id=' + this.id + ']',
                handler: this.onFilesSelect.createDelegate(me)
            }],
            handler: me.openDialog
        };
    },

    // Constructs a new dialog and opens it. Better to construct a new one everyt
    openDialog: function () {
        this.fileSelectionDialog = new Tine.Tinebase.FileSelectionDialog({
            handler: this.onFilesSelect.createDelegate(this)
        });

        this.fileSelectionDialog.openWindow()
    },

    /**
     * populate grid store
     *
     * @param {} record
     */
    loadRecord: function (record) {
        if (record && record.get(this.filesProperty)) {
            var files = record.get(this.filesProperty);
            for (var i = 0; i < files.length; i += 1) {
                var file = new Ext.ux.file.Upload.file(files[i]);
                file.data.status = 'complete';
                this.store.add(file);
            }
        }
    },

    /**
     * init cm
     */
    initColumnModel: function () {
        this.cm = new Ext.grid.ColumnModel(this.getColumns());
    },

    getColumns: function () {
        var columns = [{
            resizable: true,
            id: 'name',
            dataIndex: 'name',
            width: 300,
            header: i18n._('name'),
            renderer: Ext.ux.PercentRendererWithName
        }, {
            resizable: true,
            id: 'size',
            dataIndex: 'size',
            width: 70,
            header: i18n._('size'),
            renderer: Ext.util.Format.fileSize
        }, {
            resizable: true,
            id: 'type',
            dataIndex: 'type',
            width: 70,
            header: i18n._('type')
            // TODO show type icon?
            //renderer: Ext.util.Format.fileSize
        }];

        return columns;
    },

    /**
     * init sel model
     * @private
     */
    initSelectionModel: function () {
        this.selModel = new Ext.grid.RowSelectionModel({multiSelect: true});

        this.selModel.on('selectionchange', function (selModel) {
            var rowCount = selModel.getCount();
            this.action_remove.setDisabled(this.readOnly || rowCount === 0);
            this.actionUpdater.updateActions(selModel);

        }, this);
    },

    /**
     * upload new file and add to store
     *
     * @param {} btn
     * @param {} e
     */
    onFilesSelect: function (fileSelector, e) {
        if (window.lodash.isArray(fileSelector)) {
            this.onFileSelectFromFilemanager(fileSelector);
            return;
        }


        var files = fileSelector.getFileList();
        Ext.each(files, function (file) {

            var upload = new Ext.ux.file.Upload({
                file: file,
                fileSelector: fileSelector
            });

            var uploadKey = Tine.Tinebase.uploadManager.queueUpload(upload);
            var fileRecord = Tine.Tinebase.uploadManager.upload(uploadKey);

            upload.on('uploadfailure', this.onUploadFail, this);
            upload.on('uploadcomplete', this.onUploadComplete, fileRecord);
            upload.on('uploadstart', Tine.Tinebase.uploadManager.onUploadStart, this);

            if (fileRecord.get('status') !== 'failure') {
                this.store.add(fileRecord);
            }


        }, this);

    },

    /**
     * Add one or more files from filemanager
     *
     * @param nodes
     */
    onFileSelectFromFilemanager: function (nodes) {
        var me = this;

        Ext.each(nodes, function (node) {
            var record = new Tine.Filemanager.Model.Node(node);

            if (me.store.find('name', record.get('name')) === -1) {
                me.store.add(record);
            } else {
                Ext.MessageBox.show({
                    title: i18n._('Failure'),
                    msg: i18n._('This file is already attached to this record.'),
                    buttons: Ext.MessageBox.OK,
                    icon: Ext.MessageBox.ERROR
                });
            }
        });
    },

    onUploadComplete: function (upload, fileRecord) {
        fileRecord.beginEdit();
        fileRecord.set('status', 'complete');
        fileRecord.set('progress', 100);
        fileRecord.commit(false);
        Tine.Tinebase.uploadManager.onUploadComplete();
    },

    /**
     * returns true if files are uploading atm
     *
     * @return {Boolean}
     */
    isUploading: function () {
        var uploadingFiles = this.store.query('status', 'uploading');
        return (uploadingFiles.getCount() > 0);
    },

    isPauseEnabled: function (action, grants, records) {

        for (var i = 0; i < records.length; i++) {
            if (records[i].get('type') === 'folder') {
                action.hide();
                return;
            }
        }

        for (var i = 0; i < records.length; i++) {
            if (!records[i].get('status') || (records[i].get('type ') !== 'folder' && records[i].get('status') !== 'paused'
                    && records[i].get('status') !== 'uploading' && records[i].get('status') !== 'pending')) {
                action.hide();
                return;
            }
        }

        action.show();

        for (var i = 0; i < records.length; i++) {
            if (records[i].get('status')) {
                action.setDisabled(false);
            }
            else {
                action.setDisabled(true);
            }
            if (records[i].get('status') && records[i].get('status') !== 'uploading') {
                action.setDisabled(true);
            }

        }
    },

    isResumeEnabled: function (action, grants, records) {
        for (var i = 0; i < records.length; i++) {
            if (records[i].get('type') === 'folder') {
                action.hide();
                return;
            }
        }

        for (var i = 0; i < records.length; i++) {
            if (!records[i].get('status') || (records[i].get('type ') !== 'folder' && records[i].get('status') !== 'uploading'
                    && records[i].get('status') !== 'paused' && records[i].get('status') !== 'pending')) {
                action.hide();
                return;
            }
        }

        action.show();

        for (var i = 0; i < records.length; i++) {
            if (records[i].get('status')) {
                action.setDisabled(false);
            }
            else {
                action.setDisabled(true);
            }
            if (records[i].get('status') && records[i].get('status') !== 'paused') {
                action.setDisabled(true);
            }

        }
    },

    downloadNode: function (recordId, id) {
        new Ext.ux.file.Download({
            params: {
                method: 'Tinebase.downloadRecordAttachment',
                requestType: 'HTTP',
                nodeId: id,
                recordId: recordId,
                modelName: this.app.name + '_Model_' + this.editDialog.modelName
            }
        }).start();
    },

    downloadTempFile: function (id) {
        new Ext.ux.file.Download({
            params: {
                method: 'Tinebase.downloadTempfile',
                requestType: 'HTTP',
                tmpfileId: id
            }
        }).start();
    }
});


/***/ }),
/* 1127 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * TODO maybe we should generalize parts of this and have a common parent for this and Tine.widgets.relation.GenericPickerGridPanel
 * TODO add more columns
 * TODO allow to edit description
 */
Ext.ns('Tine.widgets.dialog');

/**
 * @namespace   Tine.widgets.dialog
 * @class       Tine.widgets.dialog.AttachmentsGridPanel
 * @extends     Tine.widgets.grid.FileUploadGrid
 * @author      Philipp Schüle <p.schuele@metaways.de>
 */
Tine.widgets.dialog.AttachmentsGridPanel = Ext.extend(Tine.widgets.grid.FileUploadGrid, {
    /**
     * @cfg for FileUploadGrid
     */
    filesProperty: 'attachments',
    
    /**
     * The calling EditDialog
     * @type Tine.widgets.dialog.EditDialog
     */
    editDialog: null,
    
    /**
     * title
     * 
     * @type String
     */
    title: null,
    
    /**
     * the record
     * @type Record
     */
    record: null,

    /**
     * @type Tinebase.Application
     */
    app: null,

    /**
     * @cfg {String} requiredGrant to make actions
     */
    requiredGrant: 'editGrant',

    /**
     * @cfg {Number} pos
     * position 300 = 100 + 100*2 -> means second one after app specific tabs
     */
    pos: 300,

    /* config */
    frame: true,
    border: true,
    autoScroll: true,
    layout: 'fit',
    canonicalName: 'AttachmentsGrid',
    registerEditDialogEvents: true,

    /**
     * initializes the component
     */
    initComponent: function() {
        this.record = this.editDialog.record;
        this.app = this.editDialog.app;
        this.title = this.i18nTitle = i18n._('Attachments');
        this.i18nFileString = i18n._('Attachment');
        
        Tine.widgets.dialog.MultipleEditDialogPlugin.prototype.registerSkipItem(this);

        if (this.registerEditDialogEvents) {
            this.editDialog.on('recordUpdate', this.onRecordUpdate, this);
            this.editDialog.on('load', this.onLoadRecord, this);
        }

        Tine.widgets.dialog.AttachmentsGridPanel.superclass.initComponent.call(this);
        
        this.initActions();
    },
    
    /**
     * get columns
     * @return Array
     */
    getColumns: function() {
        var columns = [{
            resizable: true,
            id: 'name',
            dataIndex: 'name',
            width: 150,
            header: i18n._('Name'),
            renderer: Ext.ux.PercentRendererWithName,
            sortable: true
        }, {
            resizable: true,
            id: 'size',
            dataIndex: 'size',
            width: 50,
            header: i18n._('Size'),
            renderer: Ext.util.Format.fileSize,
            sortable: true
        }, {
            resizable: true,
            id: 'contenttype',
            dataIndex: 'contenttype',
            width: 80,
            header: i18n._('Content Type'),
            sortable: true
        },{ id: 'creation_time',      header: i18n._('Creation Time'),         dataIndex: 'creation_time',         renderer: Tine.Tinebase.common.dateRenderer,     width: 80,
            sortable: true },
          { id: 'created_by',         header: i18n._('Created By'),            dataIndex: 'created_by',            renderer: Tine.Tinebase.common.usernameRenderer, width: 80,
            sortable: true }
        ];
        
        return columns;
    },
    
    /**
     * init store
     * @private
     */
    initStore: function () {
        this.store = new Ext.data.SimpleStore({
            fields: Tine.Tinebase.Model.Tree_Node
        });
    },
    
    /**
     * initActions
     */
    initActions: function () {
        this.action_download = new Ext.Action({
            requiredGrant: 'readGrant',
            allowMultiple: false,
            actionType: 'download',
            text: i18n._('Download'),
            handler: this.onDownload,
            iconCls: 'action_download',
            scope: this,
            disabled: true,
            hidden: !Tine.Tinebase.configManager.get('downloadsAllowed')
        });

        // TODO: does user need rights for Filemanager?
        if (Tine.Tinebase.appMgr.isEnabled('Filemanager') && Tine.Tinebase.configManager.get('filesystem').createPreviews) {
            this.action_preview = Tine.Filemanager.nodeActionsMgr.get('preview', {
                initialApp: this.app,
                sm: this.getSelectionModel()
            });
        }

        this.actionUpdater.addActions([this.action_download, this.action_preview]);
        this.getTopToolbar().addItem(this.action_download);
        this.contextMenu.addItem(this.action_download);
        
        this.on('rowdblclick', this.onRowDbClick, this);
        this.on('keydown', this.onKeyDown, this);
    },

    onKeyDown: function(e) {
        var selectedRows = this.getSelectionModel().getSelections(),
            rowRecord = selectedRows[0];

        if (e.getKey() == e.SPACE && Tine.Tinebase.configManager.get('filesystem').createPreviews && rowRecord.data.type == 'file' && !this.readOnly) {
            this.action_preview.execute();
        }
    },

    onRowDbClick: function () {
        var _ = window.lodash,
            downloadsAllowed = Tine.Tinebase.configManager.get('downloadsAllowed');

        // TODO: does user need rights for Filemanager?
        if (! Tine.Tinebase.appMgr.isEnabled('Filemanager') && downloadsAllowed) {
            this.onDownload();
            return;
        }

        var prefs = Tine.Tinebase.appMgr.get('Filemanager').getRegistry().get('preferences');

        var selectedRows = this.getSelectionModel().getSelections(),
            rowRecord = selectedRows[0];

        if (prefs.get('dbClickAction') === 'download' && downloadsAllowed && !this.readOnly) {
            this.onDownload();
        } else if (Tine.Tinebase.configManager.get('filesystem').createPreviews && prefs.get('dbClickAction') === 'preview' && rowRecord.data.type == 'file' && !this.readOnly) {
            this.action_preview.execute();
        }
    },

    /**
     * is called from onApplyChanges of the edit dialog per save event
     * 
     * @param {Tine.widgets.dialog.EditDialog} dialog
     * @param {Tine.Tinebase.data.Record} record
     * @return {Boolean}
     */
    onRecordUpdate: function(dialog, record) {
        if (record.data.hasOwnProperty('attachments')) {
            delete record.data.attachments;
        }
        var attachments = this.getData();
        record.set('attachments', attachments);
    },
    
    /**
     * updates the title ot the tab
     * @param {Integer} count
     */
    updateTitle: function(count) {
        count = Ext.isNumber(count) ? count : this.store.getCount();
        this.setTitle(this.i18nTitle + ' (' + count + ')');
    },
    
    /**
     * populate store
     * 
     * @param {EditDialog} editDialog
     * @param {Record} record
     * @param {Function} ticketFn
     */
    onLoadRecord: function(editDialog, record, ticketFn) {
        var _ = window.lodash,
            interceptor = ticketFn(),
            attachments = record.get('attachments'),
            evalGrants = editDialog.evalGrants,
            hasRequiredGrant = !evalGrants || _.get(record, record.constructor.getMeta('grantsPath') + '.' + this.requiredGrant);

        this.store.removeAll();

        if (attachments && attachments.length > 0) {
            this.updateTitle(attachments.length);
            var attachmentRecords = [];
            
            Ext.each(attachments, function(attachment) {
                attachmentRecords.push(new Tine.Tinebase.Model.Tree_Node(attachment, attachment.id));
            }, this);
            this.store.add(attachmentRecords);
        } else {
            this.updateTitle(0);
        }
        
        // add other listeners after population
        if (this.store) {
            this.store.on('update', this.updateTitle, this);
            this.store.on('add', this.updateTitle, this);
            this.store.on('remove', this.updateTitle, this);
        }
        if (Ext.isFunction(interceptor)) {
            interceptor();
        }

        this.setReadOnly(! hasRequiredGrant);
    },

    /**
     * get attachments data as array
     * 
     * @return {Array}
     */
    getData: function() {
        var attachments = [];
        
        this.store.each(function(attachment) {
            attachments.push(attachment.data);
        }, this);

        return attachments;
    }
});


/***/ }),
/* 1128 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.grid');

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.MappingPickerGridPanel
 * @extends     Tine.widgets.grid.PickerGridPanel
 *
 *
 * pick mapped dependent records with can be grouped by other records optionally
 *
 * Example: Project Members(Addressbook.Contact) grouped by Addressbook.Lists
 *
 * NOTE: Members must be defined as mapped dependent records because the (single) referenceId is stored on the depended
 *       record side - we can't add a field to Contacts AND a Contact might me member of multiple Projects.
 *
 * NOTE: Group defining records must be defined as separate map as dynamic typed dependencies not possible in modelconfig
 *
   projectMemberGroupsGrid = Ext.extend(Tine.widgets.grid.MappingPickerGridPanel, {
       field: 'membergroups',
       mappingField: 'groupMemberId'
   });
   projectMembersGrid = Ext.extend(Tine.widgets.grid.MappingPickerGridPanel, {
       field: 'members',
       mappingField: 'memberId',
       groupRecordsGrid: projectMemberGroupsGrid
   });
 *
 * @TODO: both grids should be part of this picker widget
 * @TODO: than the group grid could optional be merged as typed (client only) records here
 * @TODO: when records via group needs own properties in the mapping (e.g. last action), then the server
 *        needs to persist the resolved groupmembers and flag them as gropumembers (see calendar attendee)
 */
Tine.widgets.grid.MappingPickerGridPanel = Ext.extend(Tine.widgets.grid.PickerGridPanel, {

    /**
     * @cfg {String} field - required!
     * field of mapping records.
     */
    field: null,
    /**
     * @cfg {String} mappingField - required!
     * forward reference field in mapping record.
     */
    mappingField: null,
    /**
     * @cfg {String} groupRecordsGrid - optional
     * property name of grid which group records. The groups get automatically resolved when specified
     */
    groupRecordsGrid: null,

    frame: true,
    height: 200,

    initComponent: function() {
        var _ = window.lodash,
            me = this,
            parent = me.findParentBy(function(c) {return c.editDialog}),
            editDialog = _.get(parent, 'editDialog'),
            mappingFieldDef = editDialog.recordClass.getField(me.field),
            mappingRecordClass = mappingFieldDef.getRecordClass(),
            recordDef = mappingRecordClass.getField(me.mappingField),
            recordClass = recordDef.getRecordClass();

        editDialog.on('load', me.onRecordLoad, me);
        editDialog.on('recordUpdate', me.onRecordUpdate, me);

        me.editDialog = editDialog;
        me.recordClass = recordClass;
        me.mappingRecordClass = mappingRecordClass;
        me.store = new Tine.Tinebase.data.RecordStore({
            readOnly: true,
            autoLoad: false,
            recordClass: me.recordClass
        });
        me.store.on('add', me.onRecordUpdate, me);
        me.store.on('update', me.onRecordUpdate, me);
        me.store.on('remove', me.onRecordUpdate, me);

        me.referenceField = mappingFieldDef.fieldDefinition.config.refIdField;

        me.title = recordClass.getRecordsName();

        me.mappingRecordStore = new Tine.Tinebase.data.RecordStore({
            readOnly: true,
            autoLoad: false,
            recordClass: me.mappingRecordClass
        });

        me.afterIsRendered().then(function() {
            var groupRecordStore = _.get(me.editDialog, [me.groupRecordsGrid, 'store'].join('.')),
                groupField = _.get(me.editDialog, [me.groupRecordsGrid, 'field'].join('.')),
                groupMappingField = _.get(me.editDialog, [me.groupRecordsGrid, 'mappingField'].join('.')),
                columns = [].concat(me.colModel.config);

            if (groupRecordStore) {
                groupRecordStore.on('add', me.onRecordLoad, me);
                groupRecordStore.on('remove', me.onRecordLoad, me);

                columns.unshift({
                    dataIndex: me.recordClass.getMeta('idProperty'),
                    header: i18n._('via'),
                    width: 150,
                    renderer: function(id, meta, record) {
                        return _.reduce(me.mappingRecordStore.data.items, function(names, mappingRecord) {
                            if (_.get(mappingRecord, 'data.' + me.mappingField) == id) {
                                var groupRecordId = _.get(mappingRecord, 'json.' + groupMappingField, ''),
                                    groupRecord = groupRecordStore.getById(groupRecordId);

                                if (groupRecord) {
                                    names.push(groupRecord.getTitle());
                                }
                            }
                            return names;
                        }, []).join(', ');
                    }
                });

                me.colModel.setConfig(columns);
            }

        });

        Tine.widgets.grid.MappingPickerGridPanel.superclass.initComponent.apply(me, arguments);
    },

    onRecordLoad: function() {
        var _ = window.lodash,
            me = this,
            mappingRecordsData = _.get(me.editDialog.record, 'data.' + me.field) || [],
            recordIds = _.reduce(mappingRecordsData, function(ids, mappingRecordData) {
                var recordId = mappingRecordData[me.mappingField];

                return ids.concat([recordId]);
            }, []);

        if (me.editDialog.copyRecord) {
            _.each(mappingRecordsData, function(mappingRecordData) {
                mappingRecordData[me.recordClass.getMeta('idProperty')] = Tine.Tinebase.data.Record.generateUID();
                mappingRecordData[me.referenceField] = me.editDialog.record.id;
            });
        }
        me.mappingRecordStore.loadData({results: mappingRecordsData});

        // fence onRecordUpdate
        me.store.isLoaded = false;

        me.resolveGroupRecords(recordIds).then(function() {
            // NOTE: we don't use resolved data yet - data is missing
            if (false) {
                // data is already resolved
                me.store.loadData({results: recordIds}, false);
                me.store.isLoaded = true;
            } else {
                me.store.on('load', function() { me.store.isLoaded = true; }, me, {single: true});
                recordIds = _.reduce(recordIds, function(ids, recordId) {
                    return ids.concat(_.isString(recordId) ? recordId : recordId.id);
                }, []);
                me.store.load({
                    params: {
                        filter: [
                            {field: 'id', operator: 'in', value: recordIds}
                        ]
                    }
                });
            }
        });
    },

    // resolve corresponding records from groupField
    resolveGroupRecords: function(recordIds) {
        var _ = window.lodash,
            me = this,
            groupField = _.get(me.editDialog, [me.groupRecordsGrid, 'field'].join('.')),
            groupMappingField = _.get(me.editDialog, [me.groupRecordsGrid, 'mappingField'].join('.')),
            groupRecordsData = _.get(me.editDialog.record, 'data.' + groupField) || [];

        return !groupRecordsData.length ? Promise.resolve() :
            new Promise(function(resolve) {
                var groupMappingFieldDef = me.recordClass.getField(groupField),
                    groupMappingRecoredClass = groupMappingFieldDef.getRecordClass(),
                    groupFieldDef = groupMappingRecoredClass.getField(groupMappingField),
                    groupRecoredClass = groupFieldDef.getRecordClass(),
                    getGroupRecordMethod = _.get(Tine, groupRecoredClass.getMeta('appName') + '.get' + groupRecoredClass.getMeta('modelName')),
                    getRecordPromises = _.reduce(groupRecordsData, function(promises, groupRecordData) {
                        var id = _.get(groupRecordData, groupMappingField + '.id') || _.get(groupRecordData, groupMappingField );

                        return promises.concat(getGroupRecordMethod(id));
                    }, []);

                me.showLoadMask();

                Promise.all(getRecordPromises).then(function(values) {
                    _.each(values, function(groupRecordData) {
                        var groupRecord = Tine.Tinebase.data.Record.setFromJson(groupRecordData, groupRecoredClass),
                            groupTitle = groupRecord.getTitle(),
                            mappingRecordsData = _.get(groupRecordData, me.field) || [];

                        me.mappingRecordStore.loadData({results: mappingRecordsData}, true);
                        _.each(mappingRecordsData, function(mappingRecordData) {
                            var recordId = mappingRecordData[me.mappingField];

                            recordIds.push(recordId);
                        });

                    });
                    resolve();
                });

            });
    },

    onRecordUpdate: function() {
        var _ = window.lodash,
            me = this,
            recordsData = Tine.Tinebase.common.assertComparable([]);

        _.each(me.store.data.items, function(record, idx) {
            var mappingRecord = {},
                existingMappingIdx = me.mappingRecordStore.find(me.mappingField, record.id),
                existingMappingRecord = existingMappingIdx >= 0 ? me.mappingRecordStore.getAt(existingMappingIdx) : null,
                existingRefId = existingMappingRecord ? existingMappingRecord.get(me.referenceField) : null;

            if (me.isGroupRecord(record)) return;

            mappingRecord[me.mappingField] = record.id;
            mappingRecord[me.referenceField] = me.editDialog.record.id;

            recordsData.push(mappingRecord);
        });

        if (me.store.isLoaded) {
            me.editDialog.record.set(this.field, recordsData);
        }
    },

    actionRemoveUpdater: function(action, grants, records) {
        var _ = window.lodash,
            me = this,
            containsGroupRecord = _.reduce(records, function(r, s) {
                return r || me.isGroupRecord(s);
            }, false);

        action.setDisabled(containsGroupRecord);
    },

    isGroupRecord: function(record) {
        var me = this,
            existingMappingIdx = me.mappingRecordStore.find(me.mappingField, record.id),
            existingMappingRecord = existingMappingIdx >= 0 ? me.mappingRecordStore.getAt(existingMappingIdx) : null,
            existingRefId = existingMappingRecord ? existingMappingRecord.get(me.referenceField) : null;

        if (existingMappingRecord && !existingRefId) return true;
        if (existingRefId && existingRefId != me.editDialog.record.id) return true;

        return false;
    }

});

/***/ }),
/* 1129 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * Link GridPanel
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.LinkGridPanel
 * @extends     Tine.widgets.grid.PickerGridPanel
 * 
 * <p>Link GridPanel</p>
 * <p><pre>
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.widgets.grid.LinkGridPanel
 */
Tine.widgets.grid.LinkGridPanel = Ext.extend(Tine.widgets.grid.PickerGridPanel, {
    
    /**
     * @cfg for PickerGridPanel
     */
    recordClass: Tine.Tinebase.Model.Relation,
    autoExpandColumn: 'name',
    enableTbar: true,
    clicksToEdit: 1,
    selectRowAfterAdd: false,

    editDialog: null,

    /**
     * the record
     * @type Record 
     */
    record: null,
    
    /**
     * relation types can be stored in keyfield
     * @type 
     */
    relationTypesKeyfieldName: null,
    
    /**
     * relation types for combobox in editor grid
     * @type Array
     */
    relationTypes: null,
    
    /**
     * default relation type
     * @type String
     */
    defaultType: '',
    
    /**
     * @type Tinebase.Application 
     */
    app: null,

    /**
     * @cfg {String} requiredGrant to make actions
     */
    requiredGrant: 'editGrant',

    typeColumnHeader: null,

    /**
     * @return Ext.grid.ColumnModel
     * @private
     */
    getColumnModel: function () {
        if (! this.colModel) {
            this.typeEditor = (this.relationTypesKeyfieldName)
                ? new Tine.Tinebase.widgets.keyfield.ComboBox({
                    app: this.app.appName,
                    keyFieldName: this.relationTypesKeyfieldName
                })
                : (this.relationTypes)
                    ? new Ext.form.ComboBox({
                        displayField: 'label',
                        valueField: 'relation_type',
                        mode: 'local',
                        triggerAction: 'all',
                        lazyInit: false,
                        autoExpand: true,
                        blurOnSelect: true,
                        listClass: 'x-combo-list-small',
                        store: new Ext.data.SimpleStore({
                            fields: ['label', 'relation_type'],
                            data: this.relationTypes
                        })
                    })
                    : null;

            this.colModel = new Ext.grid.ColumnModel({
                defaults: {
                    sortable: true
                },
                columns: [
                    {
                        id: 'name',
                        header: i18n._('Name'),
                        dataIndex: 'related_record',
                        renderer: this.relatedRecordRender,
                        scope: this
                    }, {
                        id: 'type',
                        header: (this.typeColumnHeader) ? this.typeColumnHeader : i18n._('Type'),
                        dataIndex: 'type',
                        width: 100,
                        sortable: true,
                        renderer: (this.relationTypesKeyfieldName)
                            ? Tine.Tinebase.widgets.keyfield.Renderer.get(this.app.appName, this.relationTypesKeyfieldName)
                            : this.relationTypeRenderer,
                        scope: this,
                        editor: this.typeEditor
                    }
                ].concat(this.configColumns)
            });
        }
        return this.colModel;
    },
    
    /**
     * related record renderer
     * 
     * @param {Record} value
     * @return {String}
     */
    relatedRecordRender: function(value) {
        var result = '';
        
        if (value) {
            result = Ext.util.Format.htmlEncode(value.get(this.searchRecordClass.getMeta('titleProperty')));
        }
        
        return result;
    },
    
    /**
     * type renderer
     * 
     * @param {String} value
     * @return {String}
     */
    relationTypeRenderer: function(value) {
        var result = '';
        
        if (value) {
            result = this.app.i18n._(Ext.util.Format.capitalize(value));
        }
        
        return result;
    },
    
    /**
     * is called after selecting a record in the combo
     * 
     * @param {Tine.Tinebase.widgets.form.RecordPickerComboBox} picker the triggering combo box
     * @param {Tine.Tinebase.data.Record} recordToAdd
     */
    onAddRecordFromCombo: function(picker, recordToAdd) {

        // if no record is given, do nothing
        if (! recordToAdd) {
            return;
        }
        
        var record = new Tine.Tinebase.Model.Relation(Ext.apply({
            related_record: new this.newRecordClass(recordToAdd.data, recordToAdd.id),
            related_id: recordToAdd.id,
            own_id: (this.record) ? this.record.id : null
        }, picker.relationDefaults), recordToAdd.id);
        
        Tine.log.debug('Adding new relation:');
        Tine.log.debug(record);

        // check if already in
        if (this.store.findExact('related_id', recordToAdd.id) === -1) {
            var recordType = record.get('type');
            if (! Ext.isString(recordType) && recordType['default']) {
                record.set('type', recordType['default']);
                record.commit();
            }
            this.store.add([record]);
        }
        
        picker.reset();
    },
    
    /**
     * populate store and set record
     * 
     * @param {Record} record
     */
    onRecordLoad: function(record) {
        var _ = window.lodash,
            evalGrants = this.editDialog.evalGrants,
            hasRequiredGrant = !evalGrants || _.get(record, record.constructor.getMeta('grantsPath') + '.' + this.requiredGrant);


        if (this.record) {
            return;
        }

        this.record = record;

        Tine.log.debug('Loading relations into store...');
        if (record.get('relations') && record.get('relations').length > 0) {
            var relationRecords = [];
            Ext.each(record.get('relations'), function(relation) {
                relation.related_record = new this.searchRecordClass(
                    relation.related_record, 
                    relation.related_id
                );
                relationRecords.push(new Tine.Tinebase.Model.Relation(relation, relation.id));
                
            }, this);
            this.store.add(relationRecords);
        }
        
        // activate highlighting after initial load
        (function() {
            this.highlightRowAfterAdd = true;
        }).defer(400, this);

        // TODO perhaps we should filter all that do not match the model

        this.setReadOnly(!hasRequiredGrant);
    },
    
    /**
     * get relations data as array
     *
     * @TODO: do not manupilate store data
     * 
     * @return {Array}
     */
    getData: function() {
        var _ = window.lodash,
            relations = [];

        this.store.each(function(record) {
            var relatedRecordData = _.get(record, 'data.related_record.data', false);
            if (relatedRecordData) {
                record.data.related_record = relatedRecordData;
            }
            relations.push(record.data);
        }, this);
        
        return relations;
    }
});

Ext.reg('wdgt.linkgrid', Tine.widgets.grid.LinkGridPanel);


/***/ }),
/* 1130 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * TODO         this is only used by the Felamimail flag filter atm, we should try to replace this / generalize it
 *              @see Tine.widgets.grid.PickerFilter
 */
Ext.ns('Tine.widgets.grid');

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FilterModelMultiSelect
 * @extends     Tine.widgets.grid.FilterModel
 * 
 * @author      Philipp Schuele <p.schuele@metaways.de>
 */
Tine.widgets.grid.FilterModelMultiSelect = Ext.extend(Tine.widgets.grid.FilterModel, {
    /**
     * @property Tine.Tinebase.Application app
     */
    app: null,
    
    /**
     * @cfg field
     * @type String
     */
    field: '',

    /**
     * @cfg defaultOperator
     * @type String
     */
    defaultOperator: 'in',

    /**
     * @cfg defaultValue
     * @type String
     */
    defaultValue: '',

    /**
     * @cfg label
     * @type String
     */
    label: '',

    /**
     * @cfg multiselectField
     */
    multiselectFieldConfig: null,
    
    /**
     * @private
     */
    initComponent: function() {
        this.operators = this.operators || ['in', 'notin'];
        this.multiselectFieldConfig = this.multiselectFieldConfig || {};
        
        Tine.widgets.grid.FilterModelMultiSelect.superclass.initComponent.call(this);
    },
    
    /**
     * value renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    valueRenderer: function(filter, el) {
        var value = new Tine.widgets.grid.FilterModelMultiSelectValueField(Ext.apply({
            app: this.app,
            filter: filter,
            width: this.filterValueWidth,
            id: 'tw-ftb-frow-valuefield-' + filter.id,
            value: filter.data.value ? filter.data.value : this.defaultValue,
            renderTo: el
        }, this.multiselectFieldConfig));
        value.on('specialkey', function(field, e){
             if(e.getKey() == e.ENTER){
                 this.onFiltertrigger();
             }
        }, this);
        value.on('select', this.onFiltertrigger, this);
        
        return value;
    }
});

Tine.widgets.grid.FilterToolbar.FILTERS['tinebase.multiselect'] = Tine.widgets.grid.FilterModelMultiSelect;

/**
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.FilterModelMultiSelectValueField
 * @extends     Ext.ux.form.LayerCombo
 * 
 * @author      Philipp Schuele <p.schuele@metaways.de>
 */
Tine.widgets.grid.FilterModelMultiSelectValueField = Ext.extend(Ext.ux.form.LayerCombo, {
    hideButtons: false,
    formConfig: {
        labelAlign: 'left',
        labelWidth: 30
    },
    labelField: 'name',
    xtype: 'checkbox',
    recordClass: null,
    valueStore: null,

    selectionWidget: null,
    labelRenderer: Ext.emptyFn,
    
    /**
     * init
     */
    initComponent: function() {
        this.on('beforecollapse', this.onBeforeCollapse, this);
        if (! this.store) {
            this.store = new Ext.data.SimpleStore({
                fields: this.recordClass
            });
        }
        
        Tine.widgets.grid.FilterModelMultiSelectValueField.superclass.initComponent.call(this);
    },
    
    /**
     * get form values
     * 
     * @return {Array}
     */
    getFormValue: function() {
        var values = [];

        if (this.xtype == 'checkbox') {
            var formValues = this.getInnerForm().getForm().getValues();
            for (var id in formValues) {
                if (formValues[id] === 'on' && this.valueStore.getById(id)) {
                    values.push(id);
                }
            }
        } else {
            this.store.each(function(record) {
                values.push(record.data);
            }, this);            
        }
        
        return values;
    },
    
    /**
     * get items
     * 
     * @return {Array}
     */
    getItems: function() {
        var items = [];

        if (this.xtype == 'wdgt.pickergrid') {
            this.initSelectionWidget();
            
            // defeat scoping :)
            selectionWidget = this.selectionWidget;
            
            this.pickerGridPanel = new Tine.widgets.grid.PickerGridPanel({
                height: this.layerHeight || 'auto',
                recordClass: this.recordClass,
                store: this.store,
                autoExpandColumn: this.labelField,
                getColumnModel: this.getColumnModel.createDelegate(this),
                initActionsAndToolbars: function() {
                    Tine.widgets.grid.PickerGridPanel.prototype.initActionsAndToolbars.call(this);
                    this.tbar = new Ext.Toolbar({
                        layout: 'fit',
                        items: [ selectionWidget ]
                    });
                }
            });
            
            items.push(this.pickerGridPanel);
            
        } else if (this.xtype == 'checkbox') {
            this.valueStore.each(function(record) {
                items.push({
                    xtype: this.xtype,
                    boxLabel: record.get(this.labelField),
                    name: record.get('id')
                    //icon: record.get('status_icon'),
                });
            }, this);
        }
        
        return items;
    },
    
    /**
     * init selection widget
     */
    initSelectionWidget: function() {
        this.selectionWidget.on('select', this.onRecordSelect, this);
    },
    
    /**
     * @return Ext.grid.ColumnModel
     */
    getColumnModel: function() {
        var labelColumn = {id: this.labelField, header: String.format(i18n._('Selected  {0}'), this.recordClass.getMeta('recordsName')), dataIndex: this.labelField};
        if (this.labelRenderer != Ext.emptyFn) {
            labelColumn.renderer = this.labelRenderer;
        }
        
        return new Ext.grid.ColumnModel({
            defaults: {
                sortable: false
            },
            columns:  [ labelColumn ]
        });
    },
    
    /**
     * record select
     * 
     * @param {String} field
     * @param {Object} recordData
     */
    onRecordSelect: function(field, recordData) {
        this.addRecord(recordData);        
        this.selectionWidget.clearValue();
    },
    
    /**
     * adds record from selection widget to store
     * 
     * @param {Object} recordData
     */
    addRecord: function(recordData) {
        var data = (recordData.data) ? recordData.data : recordData.attributes ? recordData.attributes : recordData;
        
        var existingRecord = this.store.getById(recordData.id);
        if (! existingRecord) {
            
            this.store.add(new Tine.Tinebase.Model.Container(data));
            
        } else {
            var idx = this.store.indexOf(existingRecord);
            var row = this.pickerGridPanel.getView().getRow(idx);
            Ext.fly(row).highlight();
        }
        
        this.selectionWidget.selectPanel.close();
    },
    
    /**
     * @param {String} value
     * @return {Ext.form.Field} this
     */
    setValue: function(value) {
        value = Ext.isArray(value) ? value : [value];
        
        var recordText = [];
        this.currentValue = [];
        
        if (this.xtype == 'checkbox') {
            this.valueStore.each(function(record) {
                var id = record.get('id');
                var name = record.get(this.labelField);
                Ext.each(value, function(valueId) {
                    // NOTE: no type match id's might be int or string and should match anyway!
                    if (valueId == id) {
                        recordText.push(name);
                        this.currentValue.push(id);
                    }
                }, this);
            }, this);
        } else {
            this.store.removeAll();
            var record, id, text;
            for (var i=0; i < value.length; i++) {
                text = this.getRecordText(value[i]);
                if (text && text !== '') {
                    recordText.push(text);
                }
            }
        }
        
        this.setRawValue(recordText.join(', '));
        
        return this;
    },
    
    /**
     * get text from record defined by value (id or something else)
     * 
     * @param {String|Object} value
     * @return {String}
     */
    getRecordText: function(value) {
        var text = '';
        
        id = (Ext.isString(value)) ? value : value.id;
        record = this.valueStore.getById(id);
        if (record) {
            this.currentValue.push(record.id);
            // always copy/clone record because it can't exist in 2 different stores
            this.store.add(record.copy());
            text = record.get(this.labelField);
            text = (this.labelRenderer != Ext.emptyFn) ? this.labelRenderer(text) : text;
        }
        
        return text;
    },
    
    /**
     * cancel collapse if ctx menu or record selection is shown
     * 
     * @return Boolean
     */
    onBeforeCollapse: function() {
        if (this.pickerGridPanel) {
            var contextMenuVisible = this.pickerGridPanel.contextMenu && ! this.pickerGridPanel.contextMenu.hidden,
                selectionVisible = this.isSelectionVisible();
            
            return ! (contextMenuVisible || selectionVisible);
        } else {
            return true;
        }
    },
    
    /**
     * is selection visible ?
     * - overwrite this when extending to make sure that the selection widget is no longer visible on collapse
     * 
     * @return {Boolean}
     */
    isSelectionVisible: function() {
        return false;
    },
    
    /**
     * sets values to innerForm
     */
    setFormValue: function(value) {
        if (this.xtype == 'checkbox') {
            this.getInnerForm().getForm().items.each(function(item) {
                item.setValue(value.indexOf(item.name) >= 0 ? 'on' : 'off');
            }, this);
        }
    }
});


/***/ }),
/* 1131 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Ext
 * @subpackage  ux
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Stefanie Stamer <s.stamer@metaways.de>
 * @copyright   Copyright (c) 2007-2017 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.grid');


Tine.widgets.grid.QuotaRenderer = function(usage, limit, useSoftQuota) {
    // template singleton
    if (! Tine.widgets.grid.QuotaRenderer.tpl) {
        Tine.widgets.grid.QuotaRenderer.tpl = new Ext.XTemplate(
            '<div class="x-progress-wrap PercentRenderer" <tpl if="qtip">ext:qtitle="' + i18n._('Quota usage') + '" qwidth="200" qtip="{qtip}"></tpl>',
                '<div class="x-progress-inner PercentRenderer">',
                    '<div class="x-progress-bar PercentRenderer {cls}"<tpl if="Ext.isNumber(percent)"> style="width:{percent}%"</tpl>>',
                        '<div class="PercentRendererText PercentRenderer">',
                            '<div>{[Tine.Tinebase.common.byteRenderer(values.usage)]}</div>',
                        '</div>',
                    '</div>',
                    '<div class="x-progress-text x-progress-text-back PercentRenderer">',
                        '<div>&#160;</div>',
                    '</div>',
                '</div>',
            '</div>'
        ).compile();
    }

    usage = parseInt(usage);
    limit = parseInt(limit);

    var data = {
        usage: usage,
        limit: limit,
        percent: limit ? Math.round(usage/limit * 100) : null,
        quota: Tine.Tinebase.configManager.get('quota'),
        cls: limit ?
            'PercentBar-below':
            'QuotaRenderer-unlimited',
        qtip: limit ? (String.format(i18n._('{0} available (total: {1})'),
            Tine.Tinebase.common.byteRenderer(limit - usage),
            Tine.Tinebase.common.byteRenderer(limit))) : ''
    };

    // this will enable a color scheme for soft quota or reached limit
    if (data.limit && useSoftQuota && data.percent >= data.quota.softQuota) {
        data.cls = "PercentBar-over";
    }
    if (data.limit && data.usage >= data.limit) {
        data.cls = "PercentBar-limit";
    }

     return Tine.widgets.grid.QuotaRenderer.tpl.apply(data);
};


/***/ }),
/* 1132 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.relation');

/**
 * @namespace   Tine.widgets.relation
 * @class       Tine.widgets.relation.Manager
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 */
Tine.widgets.relation.Manager = function() {

    var items = {};
    var ignoreApplications = ['Admin', 'Setup', 'Tinebase', 'ActiveSync'];

    return {
        /**
         * returns the relations config
         * @param {String/Tine.Tinebase.Application} app
         * @param {String/Tine.Tinebase.data.Record} recordClass
         * @param {Array} ignoreModels the php model names to ignore (they won't be returned)
         */
        get: function(app, recordClass, ignoreModels) {
            var key = this.getKey(app, recordClass);

            // create if not cached
            if(items[key] === undefined) {
                if (Ext.isString(recordClass)) {
                    app = Tine.Tinebase.common.resolveApp(app);
                    recordClass = Tine[app]['Model'][recordClass];
                }
                this.create(recordClass, key);
            }
            
            var allRelations = items[key];
            var usedRelations = [];
            // sort out ignored models
            if (ignoreModels) {
                Ext.each(allRelations, function(relation) {
                    if(ignoreModels.indexOf(relation.relatedApp + '_Model_' + relation.relatedModel) == -1) {
                        usedRelations.push(relation);
                    }
                }, this);
            } else {
                return allRelations;
            }
            
            return usedRelations;
        },

        /**
         * returns the relations config existence
         * @param {String/Tine.Tinebase.Application} app
         * @param {String/Tine.Tinebase.data.Record} recordClass
         * @return {Boolean}
         */
        has: function(app, recordClass) {
            var key = this.getKey(app, recordClass);
            
            // create if not cached
            if(items[key] === undefined) this.create(recordClass, key);
            return items[key] ? true : false;
        },

        /**
         * creates the relations config if found in registry
         * @param Tine.Tinebase.data.Record recordClass
         * @param {String} key
         * @return {Boolean}
         */
        create: function(recordClass, key) {
            var registered = [];
            if(!items[key]) items[key] = [];

            // add generic relations when no config exists
            Tine.Tinebase.data.RecordMgr.each(function(rec) {
                if (Tine.Tinebase.common.hasRight('run', rec.getMeta('appName')) && (ignoreApplications.indexOf(rec.getMeta('appName')) == -1) && (rec.getFieldNames().indexOf('relations') > -1)) {
                    items[key].push({
                        ownModel: recordClass.getMeta('recordName'),
                        relatedApp: rec.getMeta('appName'),
                        relatedModel: rec.getMeta('modelName'),
                        text: rec.getRecordName() + ' (' + rec.getAppName() + ')'
                    });
                }
            });

            // set to false, so not try again
            if(items[key].length == 0) items[key] = false;
        },
        
        /**
         * returns the key (appName + modelName)
         * @param {String/Tine.Tinebase.Application} appName
         * @param {String/Tine.Tinebase.data.Record} modelName
         * @return {String}
         */
        getKey: function(appName, modelName) {
            var appName = Tine.Tinebase.common.resolveApp(appName);
            var modelName = Tine.Tinebase.common.resolveModel(modelName);
            return appName + modelName;
        }
    };

}();

/***/ }),
/* 1133 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.relation');

/**
 * @namespace   Tine.widgets.relation
 * @class       Tine.widgets.relation.GridRenderer
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @extends     Ext.Component
 */
Tine.widgets.relation.GridRenderer = function(config) {
    Ext.apply(this, config);
    Tine.widgets.relation.GridRenderer.superclass.constructor.call(this);
};

Ext.extend(Tine.widgets.relation.GridRenderer, Ext.Component, {
    appName:      null,
    type:         null,
    foreignApp:   null,
    foreignModel: null,
    relModel:     null,
    recordClass:  null,
    
    /**
     * initializes the component
     */
    initComponent: function() {
        Tine.log.debug('Initializing relation renderer with config:');
        Tine.log.debug('appName: ' + this.appName + ', type: ' + this.type + ', foreignApp: ' + this.foreignApp + ', foreignModel: ' + this.foreignModel);
        this.relModel = this.foreignApp + '_Model_' + this.foreignModel;
    },
    
    /**
     * 
     * @param {Array} relations
     */
    render: function(relations) {
        if ((! relations) || (relations.length == 0)) {
            return '';
        }
        
        if (! this.recordClass) {
            if (! Tine[this.foreignApp]) {
                Tine.log.warn('Tine.widgets.relation.GridRenderer::render - ForeignApp not found: ' + this.foreignApp);
                return '';
            }
            
            this.recordClass = Tine[this.foreignApp].Model[this.foreignModel];
        }
        
        for (var index = 0; index < relations.length; index++) {
            var el = relations[index];
            if (el.type == this.type && el.related_model == this.relModel) {
                if (!el.related_record) {
                    return i18n._('No Access');
                }
                var record = new this.recordClass(el.related_record);
                return Ext.util.Format.htmlEncode(record.getTitle());
            }
        }
    }
});


/***/ }),
/* 1134 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.relation');

/**
 * @namespace   Tine.widgets.relation
 * @class       Tine.widgets.relation.MenuItemManager
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 */
Tine.widgets.relation.MenuItemManager = function() {
    var items = {};
    return {
        /**
         * registers the menuitem. just add the config for this action as item.
         * @param {String} appName
         * @param {String} modelName
         * @param {Object} itemConfig
         */
        register: function(appName, modelName, itemConfig) {
            var key = appName + modelName;
            
            if(!items[key]) {
                items[key] = [];
            }
            
            items[key].push(itemConfig);
        },
        
        /**
         * returns registered menuitems. add runtime config here.
         * @param {String} appName
         * @param {String} modelName
         * @param {Object} config
         * @return {Array}
         */
        get: function(appName, modelName, config) {
            var key = appName + modelName;
            var ret = [];

            if(items[key]) {
                Ext.each(items[key], function(item) {
                    ret.push(new Ext.Action(Ext.apply({}, item, config)));
                });
            }
            return ret;
        }
    }
}();

/***/ }),
/* 1135 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Tine 2.0
 *
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2012-2014 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.widgets.relation');

__webpack_require__(208);

/**
 * @namespace   Tine.widgets.relation
 * @class       Tine.widgets.relation.GenericPickerGridPanel
 * @extends     Tine.widgets.grid.PickerGridPanel
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 */
Tine.widgets.relation.GenericPickerGridPanel = Ext.extend(Tine.widgets.grid.PickerGridPanel, {
    /**
     * @cfg for PickerGridPanel
     */
    recordClass: Tine.Tinebase.Model.Relation,
    clicksToEdit: 1,
    selectRowAfterAdd: false,
    
    /**
     * disable Toolbar creation, create a custom one
     * @type Boolean
     */
    enableTbar: false,
    title: null,
    /**
     * the record
     * @type Record
     */
    record: null,

    /**
     *
     * @type {String}
     */
    ownRecordClass: null,
    /**
     * @type Tinebase.Application
     */
    app: null,
    /**
     * The calling EditDialog
     * @type Tine.widgets.dialog.EditDialog
     */
    editDialog: null,
    /**
     * reference to relationPanelRegistry from the editdialog
     * 
     * @type {Array}
     */
    relationPanelRegistry: null,
    /* private */
    /**
     * configuration fetched from registry
     * @type {Object}
     * autoconfig
     */
    possibleRelations: null,
    /**
     * Selects the Model to relate to
     * @type {Ext.form.ComboBox} modelCombo
     */
    modelCombo: null,
    /**
     * Array with searchcombos for each model
     * @type {Array}
     */
    searchCombos: null,
    /**
     * The by the modelcombo activated model
     * @type {String}
     */
    activeModel: null,
    /**
     * Array of possible degrees
     * @type {Array} degreeData
     */
    degreeData: null,
    /**
     * keyfieldConfigs shortcuts
     * @type {Object} keyFieldConfigs
     */
    keyFieldConfigs: null,
    /**
     * constrains config
     * @type {Object} constraintsConfig
     */
    constraintsConfig: null,

    /**
     * @cfg {String} requiredGrant to make actions
     */
    requiredGrant: 'editGrant',

    /**
     * @cfg {Boolean} hideRelatedDegree
     * true to hide the degree column
     */
    hideRelatedDegree: true,

    /**
     * @cfg {Number} pos
     * position 200 = 100 + 100*3 -> means third one after app specific tabs
     */
    pos: 400,

    /* config */
    frame: true,
    border: true,
    autoScroll: true,
    layout: 'fit',
    stateful: true,
    stateId: 'widgets-relation-genereic-picker-grid',
    canonicalName: 'RelationsGrid',

    /**
     * initializes the component
     */
    initComponent: function() {
        this.record = this.editDialog.record;
        this.app = this.editDialog.app;
        this.ownRecordClass = this.editDialog.recordClass;
        
        this.ignoreRelatedModels = this.editDialog.ignoreRelatedModels ? [].concat(this.editDialog.ignoreRelatedModels) : [];
        this.relationPanelRegistry = this.editDialog.relationPanelRegistry;
        
        if (this.relationPanelRegistry && this.relationPanelRegistry.length) {
            Ext.each(this.relationPanelRegistry, function(panel) {
                if (panel.relatedPhpModel) {
                    this.ignoreRelatedModels.push(panel.relatedPhpModel);
                }
            }, this);
        }
        
        this.possibleRelations = Tine.widgets.relation.Manager.get(this.app, this.ownRecordClass, this.ignoreRelatedModels);
        
        this.initTbar();
        this.viewConfig = {
            getRowClass: this.getViewRowClass,
            enableRowBody: true
            };
        this.actionEditInNewWindow = new Ext.Action({
            text: i18n._('Edit record'),
            disabled: true,
            scope: this,
            handler: this.onEditInNewWindow,
            iconCls: 'action_edit'
        });
        
        this.title = this.i18nTitle = i18n.ngettext('Relation', 'Relations', 50);
        
        this.on('rowdblclick', this.onEditInNewWindow.createDelegate(this), this);
        
        this.on('beforecontextmenu', this.onBeforeContextMenu.createDelegate(this), this);
        
        this.contextMenuItems = [this.actionEditInNewWindow];
        // preparing keyfield and constrains configs
        this.keyFieldConfigs = {};
        this.constraintsConfig = {};
        
        Ext.each(this.app.getRegistry().get('relatableModels'), function(rel) {
            if (rel.ownModel == this.ownRecordClass.getMeta('modelName')) {
                if (rel.keyfieldConfig) {
                    if (rel.keyfieldConfig.from == 'foreign') {
                        this.keyFieldConfigs[rel.relatedApp + rel.relatedModel] = {app: rel.relatedApp, name: rel.keyfieldConfig.name};
                    } else {
                        this.keyFieldConfigs[this.app.name + rel.ownModel] = {app: this.app.name, name: rel.keyfieldConfig.name};
                    }
                }
                if (rel.config) {
                    this.constraintsConfig[rel.relatedApp + rel.relatedModel] = rel.config;
                }
            }
        }, this);

        this.degreeData = [
            ['sibling', i18n._('Sibling')],
            ['parent', i18n._('Parent')],
            ['child', i18n._('Child')]
        ];
        
        this.on('beforeedit', this.onBeforeRowEdit, this);
        this.on('validateedit', this.onValidateRowEdit, this);
        this.on('afteredit', this.onAfterRowEdit, this);
        
        this.editDialog.on('recordUpdate', this.onRecordUpdate, this);
        this.editDialog.on('load', this.loadRecord, this);

        Tine.widgets.relation.GenericPickerGridPanel.superclass.initComponent.call(this);

        this.selModel.on('selectionchange', function(sm) {
            this.actionEditInNewWindow.setDisabled(sm.getCount() != 1);
        }, this);
        
        this.store.on('add', this.onAdd, this);
    },
    
    /**
     * is called from onApplyChanges of the edit dialog per save event
     * 
     * @param {Tine.widgets.dialog.EditDialog} dialog
     * @param {Tine.Tinebase.data.Record} record
     * @return {Boolean}
     */
    onRecordUpdate: function(dialog, record) {
        // update from relationsPanel if any
        if (this.isValid()) {
            if (record.data.hasOwnProperty('relations')) {
                record.data.relations = null;
                delete record.data.relations;
            }
            var relations = [];
            
            Ext.each(this.relationPanelRegistry, function(panel) {
                relations = relations.concat(this.getData(panel.store));
            }, this);
            
            relations = relations.concat(this.getData());
            
            record.set('relations', relations);
        } else {
            this.editDialog.loadMask.hide();
            this.editDialog.saving = false;
            return false;
        }
    },
    
    /**
     * updates the title ot the tab
     * @param {Number} count
     */
    updateTitle: function(count) {
        if (! Ext.isNumber(count)) {
            count = 0;
            this.store.each(function(record){
                if (this.ignoreRelatedModels.indexOf(record.get('related_model')) == -1) {
                    count++;
                }
            }, this);
        }
        
        this.setTitle(this.i18nTitle + ' (' + count + ')');
    },
    
    /**
     * creates the toolbar
     */
    initTbar: function() {
        var items = [this.getModelCombo(), ' '];
        items = items.concat(this.createSearchCombos());

        this.tbar = new Ext.Toolbar({
            items: items
        });
    },

    /**
     * adds invalid row class to a invalid row and adds the error qtip
     * 
     * @param {Tine.Tinebase.data.Record} record
     * @param {Integer} index
     * @param {Object} rowParams
     * @param {Ext.data.store} store
     * @scope this.view
     * @return {String}
     */
    getViewRowClass: function(record, index, rowParams, store) {
        var relatedModel = record.get('related_model').split('_Model_');
            relatedModel = Tine[relatedModel[0]].Model[relatedModel[1]];
        
        var ownModel = record.get('own_model').split('_Model_');
            ownModel = Tine[ownModel[0]].Model[ownModel[1]];
            
        if (this.invalidRowRecords && this.invalidRowRecords.indexOf(record.id) !== -1) {
            rowParams.body = '<div style="height: 19px; margin-top: -19px" ext:qtip="' +
                String.format(i18n._("The maximum number of {0} with the type \"{1}\" is reached. Please change the type of this relation"), ownModel.getRecordsName(), this.grid.typeRenderer(record.get('type'), null, record))
                + '"></div>';
            return 'tine-editorgrid-row-invalid';
        } else if (this.invalidRelatedRecords && this.invalidRelatedRecords.indexOf(record.id) !== -1) {
            rowParams.body = '<div style="height: 19px; margin-top: -19px" ext:qtip="' +
                String.format(i18n._("The maximum number of {0}s with the type \"{1}\" is reached at the {2} you added. Please change the type of this relation or edit the {2}"), ownModel.getRecordsName(), this.grid.typeRenderer(record.get('type'), null, record), relatedModel.getRecordName())
                + '"></div>';
            return 'tine-editorgrid-row-invalid';
        }
        
        rowParams.body='';
        return '';
    },
    
    /**
     * calls the editdialog for the model
     */
    onEditInNewWindow: function() {
        var _ = window.lodash,
            record = this.getRelatedRecord(this.getSelectionModel().getSelected()),
            openMethod = record ? _.get(Tine, record.appName + '.' + record.modelName + 'EditDialog.openWindow') : null;

        if (! record) {
            return;
        }

        if (openMethod) {
            openMethod({
                record: record,
                mode: 'remote'
            });
        } else {
            Ext.MessageBox.show({
                buttons: Ext.Msg.OK,
                icon: Ext.MessageBox.WARNING,
                title: i18n._('No Dialog'),
                msg: i18n._("The Record can't be opened. There doesn't exist any dialog for editing this Record!")
            });
        }
    },

    /**
     * create record from recordData
     *
     * @param relationRecord
     * @returns {null|Tine.Tinebase.data.Record}
     */
    getRelatedRecord: function(relationRecord) {
        var modelName = relationRecord.get('related_model'),
            recordClass = Tine.Tinebase.data.RecordMgr.get(modelName),
            recordData = relationRecord.get('related_record');

        if (recordData) {
            return Ext.isFunction(window.lodash.get(recordData, 'beginEdit')) ?
                recordData :
                Tine.Tinebase.data.Record.setFromJson(recordData, recordClass);
        }

        return null;
    },

    /**
     * is called before context menu is shown
     * adds additional menu items from Tine.widgets.relation.MenuItemManager
     * @param {Tine.widgets.grid.PickerGridPanel} grid
     * @param {Integer} index
     * @return {Boolean}
     */
    onBeforeContextMenu: function(grid, index) {
        var record = grid.store.getAt(index),
            rm = record.get('related_model');
            if(!rm) {
                return;
            }
        var model = rm.split('_Model_');
        
        var app = Tine.Tinebase.appMgr.get(model[0]);
        var additionalItems = Tine.widgets.relation.MenuItemManager.get(model[0], model[1], {
            scope: app,
            grid: grid,
            gridIndex: index
        });
        
        Ext.each(additionalItems, function(item) {
            item.setText(app.i18n._(item.getText()));
            this.contextMenu.add(item);
            if(! this.contextMenu.hasOwnProperty('tempItems')) {
                this.contextMenu.tempItems = [];
            }
            this.contextMenu.tempItems.push(item);
        }, this);
    },
    
    /**
     * creates the model combo
     * @return {Ext.form.ComboBox}
     */
    getModelCombo: function() {
        if (!this.modelCombo) {
            var data = [];
            var id = 0;

            Ext.each(this.possibleRelations, function(rel) {
                data.push([id, rel.text, rel.relatedApp, rel.relatedModel]);
                id++;
            }, this);

            this.modelCombo = new Ext.form.ComboBox({
                store: new Ext.data.ArrayStore({
                    fields: ['id', 'text', 'appName', 'modelName'],
                    data: data
                }),

                allowBlank: false,
                forceSelection: true,
                value: data.length > 0 ? data[0][0] : null,
                displayField: 'text',
                valueField: 'id',
                idIndex: 0,
                mode: 'local',
                triggerAction: 'all',
                selectOnFocus: true,
                listeners: {
                    scope: this,
                    select: this.onModelComboSelect
                }
            });

        }
        return this.modelCombo;
    },
    
    /**
     * is called on change listener of this.modelCombo
     * 
     * @param {Ext.form.ComboBox} combo the calling combo
     * @param {Ext.data.record} selected the selected record
     * @param {Number} index the selection index
     */
    onModelComboSelect: function(combo, selected, index) {
        this.showSearchCombo(selected.get('appName'), selected.get('modelName'));
    },
    
    /**
     * creates the searchcombos for the models
     * @return {Tine.Tinebase.widgets.form.RecordPickerComboBox}
     */
    createSearchCombos: function() {
        var sc = [];
        this.searchCombos = {};

        Ext.each(this.possibleRelations, function(rel) {
            var key = rel.relatedApp+rel.relatedModel;
            this.searchCombos[key] = Tine.widgets.form.RecordPickerManager.get(rel.relatedApp, rel.relatedModel,{
                width: 300,
                allowBlank: true,
                listeners: {
                    scope: this,
                    select: this.onAddRecordFromCombo
                }
            });
            sc.push(this.searchCombos[key]);
            this.searchCombos[key].hide();
        }, this);

        this.showSearchCombo(this.possibleRelations[0].relatedApp, this.possibleRelations[0].relatedModel);
        return sc;
    },
    
    /**
     * shows the active model searchcombo
     * @param {String} appName
     * @param {String} modelName
     */
    showSearchCombo: function(appName, modelName) {
        var key = appName+modelName;
        if(this.activeModel) this.searchCombos[this.activeModel].hide();
        this.searchCombos[key].show();
        this.activeModel = appName+modelName;
    },
    /**
     * returns the active search combo
     * @return {}
     */
    getActiveSearchCombo: function() {
        return this.searchCombos[this.activeModel];
    },

    /**
     * @return Ext.grid.ColumnModel
     * @private
     */
    getColumnModel: function () {

        if (! this.colModel) {

            this.degreeEditor = new Ext.form.ComboBox({
                store: new Ext.data.ArrayStore({
                    fields: ['id', 'value'],
                    data: this.degreeData
                }),
                allowBlank: false,
                displayField: 'value',
                valueField: 'id',
                mode: 'local'
            });

            this.colModel = new Ext.grid.ColumnModel({
                defaults: {
                    sortable: true,
                    width: 180
                },
                columns: [
                    {id: 'related_model', dataIndex: 'related_model', header: i18n._('Record'), editor: false, renderer: this.relatedModelRenderer.createDelegate(this), scope: this},
                    {id: 'related_record', dataIndex: 'related_record', header: i18n._('Description'), renderer: this.relatedRecordRenderer.createDelegate(this), editor: false, scope: this},
                    {id: 'remark', dataIndex: 'remark', header: i18n._('Remark'), renderer: this.remarkRenderer.createDelegate(this), editor: Ext.form.Field, scope: this, width: 120},
                    {id: 'related_degree', hidden: this.hideRelatedDegree, dataIndex: 'related_degree', header: i18n._('Dependency'), editor: this.degreeEditor, renderer: this.degreeRenderer.createDelegate(this), scope: this, width: 100},
                    {id: 'type', dataIndex: 'type', renderer: this.typeRenderer, header: i18n._('Type'),  scope: this, width: 120, editor: true},
                    {id: 'creation_time', dataIndex: 'creation_time', editor: false, renderer: Tine.Tinebase.common.dateTimeRenderer, header: i18n._('Creation Time'), width: 140}
                ]
            });
        }
        return this.colModel;
    },
    /**
     * creates the special editors
     * @param {} o
     */
    onBeforeRowEdit: function(o) {
        if (this.readOnly) {
            o.cancel = true;
            return;
        }

        var model = o.record.get('related_model').split('_Model_');
        var app = model[0];
        model = model[1];
        var colModel = o.grid.getColumnModel();

        // create editor if values are defined in the constraints config
        switch (o.field) {
            case 'type':
                var editor = null;
                if (this.constraintsConfig[app+model]) {
                    editor = this.getTypeEditor(this.constraintsConfig[app+model], this.app);
                } else if (this.keyFieldConfigs[app+model]) {
                    editor = new Tine.Tinebase.widgets.keyfield.ComboBox({
                        app: app,
                        keyFieldName: this.keyFieldConfigs[app+model].name
                    });
                }
                if (editor) {
                    colModel.config[o.column].setEditor(editor);
                } else {
                    colModel.config[o.column].setEditor(null);
                }
                break;
            default: return;
        }
        
        if (colModel.config[o.column].editor) {
            colModel.config[o.column].editor.selectedRecord = null;
        }
    },

    /**
     * returns the type editors for each row in the grid
     * 
     * @param {Object} config
     * @param {Tine.Tinebase.Application}
     * 
     * @return {}
     */
    getTypeEditor: function(config, app) {
        var data = [['', '-']];
        Ext.each(config, function(c){
            data.push([c.type.toUpperCase(), app.i18n._hidden(c.text)]);
        });
        
        return new Ext.form.ComboBox({
            store: new Ext.data.ArrayStore({
                fields: ['id', 'value'],
                data: data
            }),
            allowBlank: true,
            displayField: 'value',
            valueField: 'id',
            mode: 'local',
            constraintsConfig: config,
            listeners: {
                scope: this,
                select: this.onTypeChange
            },
            tpl: '<tpl for="."><div class="x-combo-list-item">{value}&nbsp;</div></tpl>'
        });
    },

    /**
     * is called on type change, sets the relationpickercombos accordingly
     * 
     * @param {Ext.form.ComboBox} combo
     * @param {Tine.Tinebase.data.Record} record
     * @param {Number} index
     */
    onTypeChange: function(combo, record, index) {
        
        var newType = combo.getValue();
        var oldType = combo.startValue;
        
        var rp = this.editDialog.relationPickers;
        if (rp && rp.length) {
            var relatedRecord;
            Ext.each(rp, function(picker) {
                // remove record from old combo
                if (picker.relationType == oldType) {
                    relatedRecord = picker.combo.selectedRecord;
                    picker.clear();
                }
            }, this);
            
            Ext.each(rp, function(picker) {
                if (picker.relationType == newType) {
                    picker.setValue(relatedRecord);
                }
            }, this);
        }
    },
    
    /**
     * related record renderer
     *
     * @param {Record} value
     * @return {String}
     */
    relatedRecordRenderer: function (recData, meta, relRec) {
        if (recData === undefined) {
            // record has been removed by acl/area lock/...
            meta.css = 'x-form-empty-field';
            return i18n._('No Access');
        }
        var relm = relRec.get('related_model');
        if (! relm) {
            return '';
        }
        var split = relm.split('_Model_'); 
        var recordClass = Tine[split[0]].Model[split[1]];
        var record = new recordClass(recData);
        var result = '';
        if (recData) {
            result = Ext.util.Format.htmlEncode(record.getTitle());
        }
        return result;
    },
    
    /**
     * renders the remark
     * @param {String} value
     * @param {Object} row
     * @param {Tine.Tinebase.data.Record} record
     * @return {String}
     */
    remarkRenderer: function(value, row, record) {
        if (record && record.get('related_model')) {
            var app = Tine.Tinebase.appMgr.get(record.get('related_model').split('_Model_')[0]);
        }
        if (! value) {
            value = '';
        } else if (Ext.isObject(value)) {
            var str = '';
            Ext.iterate(value, function(label, val) {
                str += app.i18n._(Ext.util.Format.capitalize(label)) + ': ' + (Ext.isNumber(val) ? val : Ext.util.Format.capitalize(val)) + ', ';
            }, this);
            value = str.replace(/, $/,'');
        } else if (Ext.isArray(value)) {
            var str = '';
            Ext.each(value, function(val) {
                str += (Ext.isNumber(val) ? val : Ext.util.Format.capitalize(val)) + ', ';
            }, this);
            value = str.replace(/, $/,'');
        } else if(value.match(/^\[.*\]$/)) {
            value = Ext.decode(value);
            return this.remarkRenderer(value);
        }
        
        return Ext.util.Format.htmlEncode(value);
    },
    /**
     * renders the degree
     * @param {String} value
     * @return {String}
     */
    degreeRenderer: function(value, metaData, record, rowIndex, colIndex, store) {
        if (! this.degreeDataObject) {
            this.degreeDataObject = {};
            Ext.each(this.degreeData, function(dd) {
                this.degreeDataObject[dd[0]] = dd[1];
            }, this);
        }

        var html = this.degreeDataObject[value] ? i18n._(this.degreeDataObject[value]) : '',
            qtip = null;

        if (value != 'sibling') {
            var relatedRecord = this.getRelatedRecord(record),
                ownTitle = this.record.getTitle(),
                relatedTitle = relatedRecord ? relatedRecord.getTitle() : '',
                path = value == 'parent' ? (relatedTitle + '/' + ownTitle) : (relatedTitle + '/' + ownTitle);

            qtip = Tine.widgets.path.pathRenderer(path);
            // TODO make css work
            html = '<div ext:qtip="' + Ext.util.Format.htmlEncode(qtip) + '">' +
                '<span class="x-tine-relation-degree-value">' + html + '</span></div>';
        }

        return html;
    },

    /**
     * renders the titleProperty of the models
     * @param {String} value
     * @return {String}
     */
    relatedModelRenderer: function(value) {
        if(!value) {
            return '';
        }
        var split = value.split('_Model_');
        var model = Tine[split[0]].Model[split[1]];
        return '<span class="tine-recordclass-gridicon ' + model.getMeta('appName') + model.getMeta('modelName') + '">&nbsp;</span>' + model.getRecordName() + ' (' + model.getAppName() + ')';
    },

    /**
     * renders the type
     * @param {String} value
     * @param {Object} row
     * @param {Tine.Tinebase.data.Record} rec
     * @return {String}
     */
    typeRenderer: function(value, row, rec) {
        if(! rec.get('own_model') || ! rec.get('related_model')) {
            return '';
        }
        var o = rec.get('own_model').split('_Model_').join('');
        var f = rec.get('related_model').split('_Model_').join('');

        var renderer = Ext.util.Format.htmlEncode;
        if (this.constraintsConfig[f]) {
            Ext.each(this.constraintsConfig[f], function(c){
                if(c.type == value) value = this.app.i18n._hidden(c.text);
            }, this);
        } else if(this.keyFieldConfigs[o]) {
            renderer = Tine.Tinebase.widgets.keyfield.Renderer.get(this.keyFieldConfigs[o].app, this.keyFieldConfigs[o].name);
        } else if(this.keyFieldConfigs[f]) {
            renderer = Tine.Tinebase.widgets.keyfield.Renderer.get(this.keyFieldConfigs[f].app, this.keyFieldConfigs[f].name);
        } else {
            // lookup other side
            var _ = window.lodash,
                ownRecordClass = Tine.Tinebase.data.RecordMgr.get(rec.get('own_model')),
                foreignRecordClass = Tine.Tinebase.data.RecordMgr.get(rec.get('related_model')),
                foreignApp = foreignRecordClass ? Tine.Tinebase.appMgr.get(foreignRecordClass.getMeta('appName')) : null,
                foreignRelConfs = foreignApp ? foreignApp.getRegistry().get('relatableModels') : [],
                foreignRelConf = ownRecordClass ?_.find(foreignRelConfs, {
                    relatedApp: ownRecordClass.getMeta('appName'),
                    relatedModel: ownRecordClass.getMeta('modelName'),
                }) : null,
                foreignRelTypeConf = _.find(_.get(foreignRelConf, 'config', []), {type: value});


            if (foreignRelTypeConf && foreignRelTypeConf.text) {
                value = foreignApp.i18n._hidden(foreignRelTypeConf.text);
            }
        }

        return renderer(value);
    },

    /**
     * returns the default relation values
     * @return {Array}
     */
    getRelationDefaults: function() {
        return {
            own_backend: 'Sql',
            related_backend: 'Sql',
            own_id: (this.record) ? this.record.id : null,
            own_model: this.ownRecordClass.getPhpClassName()
        };
    },

    /**
     * is called when selecting a record in the searchCombo (relationpickercombo)
     */
    onAddRecordFromCombo: function(node) {
        var record = null;

        if (this.getActiveSearchCombo().hasOwnProperty('store')) {
            record = this.getActiveSearchCombo().store.getById(this.getActiveSearchCombo().getValue())
        } else {
            record = node;
        }

        if (! record) {
            return;
        }
        
        if (Ext.isArray(this.constraintsConfig[this.activeModel])) {
            var relconf = {type: this.constraintsConfig[this.activeModel][0]['type']};
        } else {
            var relconf = {};
        }
        
        this.onAddRecord(record, relconf);

        if (Ext.isFunction(this.getActiveSearchCombo().collapse)) {
            this.getActiveSearchCombo().collapse();
        }
        if (Ext.isFunction(this.getActiveSearchCombo().reset)) {
            this.getActiveSearchCombo().reset();
        }
    },

    /**
     * call to add relation from an external component
     *
     *  @todo refactor this trash
     *
     * @param {Tine.Tinebase.data.Record} record
     * @param {Object} relconf
     */
    onAddRecord: function(record, relconf) {
        if (record) {
            if (! relconf) {
                relconf = {};
            }
            if (record.data && record.data.hasOwnProperty('relations')) {
                record.data.relations = null;
                delete record.data.relations;
            }
            var rc = this.getActiveSearchCombo().recordClass;
            var relatedPhpModel = rc.getPhpClassName();

            var app = rc.getMeta('appName'), model = rc.getMeta('modelName'), f = app + model;
            var type = '';

            if (this.constraintsConfig[f] && this.constraintsConfig[f].length) {
                // per default the first defined type is used
                var type = this.constraintsConfig[f][0].type;
            }
            
            var rc = this.getActiveSearchCombo().recordClass,
                relatedPhpModel = rc.getPhpClassName(),
                appName = rc.getMeta('appName'), 
                model = rc.getMeta('modelName'), 
                f = appName + model,
                type = '';

            var relationRecord = new Tine.Tinebase.Model.Relation(Ext.apply(this.getRelationDefaults(), Ext.apply({
                related_record: record.data || record,
                related_id: record.id,
                related_model: relatedPhpModel,
                type: type,
                related_degree: 'sibling'
            }, relconf)), Ext.id());
            
            var mySideValid = true;
            
            if (this.constraintsConfig[f]) {
                if (this.constraintsConfig[f].length) {
                    // per default the first defined type is used
                    var type = this.constraintsConfig[f][0].type;
                }
                // validate constrains config from own side
                mySideValid = this.checkLocalConstraints(appName, model, relationRecord, type);
            }
            
            // if my side is not valid, it's ok to skip related constraints validation, the relation is marked invalid already
            if (mySideValid) {
                this.validateRelatedConstrainsConfig(record, relationRecord);
            } else {
                this.onAddNewRelationToStore(relationRecord, record);
            }
        }
    },
    
    /**
     * validates the constrains of the related record , fetches the relations
     * 
     * @param {Tine.Tinebase.data.Record} record
     * @param {Tine.Tinebase.Model.Relation} relationRecord
     */
    validateRelatedConstrainsConfig: function(record, relationRecord) {
        var rc = relationRecord.get('related_model').split(/_Model_/);
        var rc = Tine[rc[0]].Model[rc[1]];

        var appName = rc.getMeta('appName'); 
        var model = rc.getMeta('modelName'); 
        var relatedApp = Tine.Tinebase.appMgr.get(appName); 
        var relatedConstrainsConfig = relatedApp.getRegistry().get('relatableModels');
        var ownRecordClassName = this.editDialog.recordClass.getMeta('modelName');
        var relatedRecordProxy = this.getActiveSearchCombo().recordProxy
            || Tine[appName][(model.toLowerCase() + 'Backend')]
            || new Tine.Tinebase.data.RecordProxy({
                appName: appName,
                modelName: model,
                recordClass: rc
            });
        
        if (! Ext.isFunction(record.get)) {
            record = relatedRecordProxy.recordReader({responseText: Ext.encode(record)});
        }
        
        if (relatedConstrainsConfig) {
            for (var index = 0; index < relatedConstrainsConfig.length; index++) {
                var rcc = relatedConstrainsConfig[index];
                
                if ((rcc.relatedApp == this.app.name) && (rcc.relatedModel == ownRecordClassName)) {
                    var myRelatedConstrainsConfig = rcc;
                    break;
                }
            }
        }
        
        // validate constrains config from other side if a config exists
        if (myRelatedConstrainsConfig) {
            // if relations hasn't been fetched already, fetch them now
            if (! Ext.isArray(record.data.relations) || record.data.relations.length === 0) {
                relatedRecordProxy.loadRecord(record, { 
                    success: function(record) {
                        // if record has relations, validate each relation
                        if (Ext.isArray(record.get('relations')) && record.get('relations').length > 0) {
                            this.onValidateRelatedConstrainsConfig(myRelatedConstrainsConfig.config, relationRecord, appName, model, record);
                        } else {
                            // if there aren't any relations, no validation is needed
                            this.onAddNewRelationToStore(relationRecord, record);
                        }
                    },
                    // don't break on failure, use given record instead
                    failure: this.onAddNewRelationToStore.createDelegate(this, [relationRecord, record]),
                    scope: this
                });
            
            } else {
                this.onValidateRelatedConstrainsConfig(myRelatedConstrainsConfig.config, relationRecord, appName, model, record);
            }
        } else {
            this.onAddNewRelationToStore(relationRecord, record);
        }
    },
    
    /**
     * validates the constrains of the related record after fetching relations
     * 
     * @param {Object} constraintsConfig
     * @param {Tine.Tinebase.Model.Relation} relationRecord
     * @param {String} relatedAppName
     * @param {String} relatedModelName
     * @param {Tine.Tinebase.data.Record} record
     */
    onValidateRelatedConstrainsConfig: function(constraintsConfig, relationRecord, relatedAppName, relatedModelName, record) {
        
        var invalid = false;
        
        Ext.each(constraintsConfig, function(conf) {
        
            if (conf.hasOwnProperty('max') && conf.max > 0 && (conf.type == relationRecord.get('type'))) {
                var rr = record.get('relations'),
                    count = 0;
                
                for (var index = 0; index < rr.length; index++) {
                    if (rr[index].type == conf.type) {
                        count++;
                    }
                }
                
                if (count >= conf.max) {
                    if (! this.view) {
                        this.view = {};
                    }
                    if (! this.view.invalidRelatedRecords) {
                        this.view.invalidRelatedRecords = [];
                    }
                    
                    this.view.invalidRelatedRecords.push(relationRecord.id);

                    invalid = true;
                }
            } 
        }, this);
        
        if (! invalid && Ext.isArray(this.view.invalidRelatedRecords)) {
            var index = this.view.invalidRelatedRecords.indexOf(record.getId());
            if (index > -1) {
                this.view.invalidRelatedRecords.splice(index, 1);
            }
        }

        this.onAddNewRelationToStore(relationRecord, record);
    },
    
    /**
     * Is called after all validation is done
     * 
     * @param {Tine.Tinebase.Model.Relation} relationRecord
     * @param {Tine.Tinebase.data.Record} record
     */
    onAddNewRelationToStore: function(relationRecord, record) {
        var _ = window.lodash;

        if (_.get(relationRecord, 'data.related_record.relations', false)) {
            relationRecord.data.related_record.relations = null;
            delete relationRecord.data.related_record.relations;
        }

        if (this.relationCheck(relationRecord)) {
            Tine.log.debug('Adding new relation:');
            Tine.log.debug(relationRecord);
            this.store.add([relationRecord]);
        }

        this.view.refresh();
    },
    
    /**
     * checks if record to add is already linked or is the same record
     * @param {Tine.Tinebase.data.Record} recordToAdd
     * @param {String} relatedModel
     * @return {Boolean}
     */
    relationCheck: function(recordToAdd, relatedModel) {
        var duplicateIdx = Tine.Tinebase.Model.Relation.findDuplicate(this.store, recordToAdd),
            duplicateIsSelf = this.store.getAt(duplicateIdx) == recordToAdd,
            add = !duplicateIsSelf;

        if (duplicateIdx >= 0 && ! duplicateIsSelf) {
            Ext.MessageBox.show({
                title: i18n._('Failure'),
                msg: i18n._('The record you tried to link is already linked. Please edit the existing link.'),
                buttons: Ext.MessageBox.OK,
                icon: Ext.MessageBox.INFO
            });
            add = false;
            return false;
        }

        // don't allow to relate itself
        if((this.ownRecordClass.getMeta('phpClassName') == relatedModel) && recordToAdd.getId() == this.editDialog.record.getId()) {
            Ext.MessageBox.show({
                title: i18n._('Failure'),
                msg: i18n._('You tried to link a record with itself. This is not allowed!'),
                buttons: Ext.MessageBox.OK,
                icon: Ext.MessageBox.ERROR  
            });
            add = false;
        }
        return add;
    },
    
    /**
     * is called after a row has been edited
     * @param {Object} o
     */
    onAfterRowEdit: function(o) {
        this.onUpdate(o.grid.store, o.record);
        this.view.refresh();
    },
    
    /**
     * validates constrains config, is called after row edit
     * @param {Object} o
     */
    onValidateRowEdit: function(o) {
        if (o.field === 'type') {
            
            var index = -1;
            
            this.store.remove(o.record.getId());
            this.removeFromInvalidRelatedRecords(o.record);
            this.removeFromInvalidRowRecords(o.record);
            
            var model = o.record.get('related_model').split('_Model_');
            var app = model[0];
            
            model = model[1];
            
            // check constrains from own_record side
            if (this.constraintsConfig[app + model]) {
                this.checkLocalConstraints(app, model, o.record, o.value, o.originalValue);
            }
            
            // check constrains from other side
            this.validateRelatedConstrainsConfig(o.record.get('related_record'), o.record, true);
        }
        
        return true;
    },
    
    /**
     * Checks local relation constraints
     * 
     * @param {} app
     * @param {} model
     * @param {} checkRecord
     * @param {} type
     * @param {} oldType
     * 
     * @return {Bool}
     */
    checkLocalConstraints: function(app, model, checkRecord, type, oldType) {
        // remove itself at first
        
        if (! this.view.invalidRowRecords) {
            this.view.invalidRowRecords = [];
        }
            
        var retVal = true;
        
        this.view.invalidRowRecords.remove(checkRecord.get('id'));
        Ext.each(this.constraintsConfig[app + model], function(conf) {
            // check new value
            if (conf.max && conf.max > 0 && (conf.type == type)) {
                var resNew = this.store.queryBy(function(record, id) {
                    if ((type == record.get('type')) && (record.get('related_model') == (app + '_Model_' + model))) {
                        return true;
                    } else {
                        return false;
                    }
                }, this);
                
                // add all record ids to invalidRecords, if maximum is reached
                if(resNew.getCount() >= conf.max) {
                    resNew.each(function(item) {
                        if (this.view.invalidRowRecords.indexOf(item.id) === -1) {
                            this.view.invalidRowRecords.push(item.id);
                            retVal = false;
                        }
                    }, this);
                    if (this.view.invalidRowRecords.indexOf(checkRecord.id) === -1) {
                        this.view.invalidRowRecords.push(checkRecord.id);
                        retVal = false;
                    }
                }
            }
            
            if (oldType) {
                this.checkOldValidations(app, model, checkRecord, oldType);
            }
        }, this);

        return retVal;
    },
    
    /**
     * checks existing relation constraints
     * 
     * @param {} app
     * @param {} model
     * @param {} checkRecord
     * @param {} type
     */
    checkOldValidations: function(app, model, checkRecord, type) {
        // check old value if given
        var configs = this.constraintsConfig[app + model];
        
        if (configs) {
            for (var index = 0; index < configs.length; index++) {
                var conf = configs[index];
                if (conf.hasOwnProperty('max') && conf.max > 0 && (conf.type == type)) {
                    var resOld = this.store.queryBy(function(record, id) {
                        if ((type == record.get('type')) && (record.get('related_model') == (app + '_Model_' + model))) {
                            return true;
                        } else {
                            return false;
                        }
                    }, this);
                    
                    if (this.view.hasOwnProperty('invalidRowRecords') && Ext.isArray(this.view.invalidRowRecords)) {
                        if ((resOld.getCount() - 1) <= conf.max) {
                            resOld.each(function(item) {
                                this.view.invalidRowRecords.remove(item.id);
                            }, this);
                        }
                    }
                }
            }
        }
        
        this.view.refresh();
    },
    
    /**
     * removes a record from invalid records array
     * 
     * @param {Tine.Tinebase.data.Record} record
     */
    removeFromInvalidRelatedRecords: function(record) {
        if (Ext.isArray(this.view.invalidRelatedRecords)) {
            var index = this.view.invalidRelatedRecords.indexOf(record.id);
            if (index > -1) {
                this.view.invalidRelatedRecords.splice(index, 1);
            }
        }
    },
    
    /**
     * removes a record from invalid records array
     * 
     * @param {Tine.Tinebase.data.Record} record
     */
    removeFromInvalidRowRecords: function(record) {
        if (Ext.isArray(this.view.invalidRowRecords)) {
            var index = this.view.invalidRowRecords.indexOf(record.id);
            if (index > -1) {
                this.view.invalidRowRecords.splice(index, 1);
            }
        }
    },
    
    /**
     * is called when a record is added to the store
     * @param {Ext.data.SimpleStore} store
     * @param {Array} records
     */
    onAdd: function(store, records) {
        Ext.each(records, function(record) {
            Ext.each(this.editDialog.relationPickers, function(picker) {
                if(record.get('related_record') && picker.relationType == record.get('type') && record.get('related_id') != picker.getValue() && picker.fullModelName == record.get('related_model')) {
                    var split = picker.fullModelName.split('_Model_');
                    picker.combo.selectedRecord = new Tine[split[0]].Model[split[1]](record.get('related_record'));
                    picker.combo.startRecord = new Tine[split[0]].Model[split[1]](record.get('related_record'));
                    picker.combo.setValue(picker.combo.selectedRecord);
                    picker.combo.startValue = picker.combo.selectedRecord.get(this.recordClass.getMeta('idProperty'));
                }
            }, this);
        }, this);
    },
    /**
     * is called when a record in the grid changes
     * @param {Ext.data.SimpleStore} store
     * @param {} record
     */
    onUpdate: function(store, record) {
        store.each(function(record) {
            Ext.each(this.editDialog.relationPickers, function(picker) {
                if(picker.relationType == record.get('type') && picker.fullModelName == record.get('related_model')) {
                    picker.setValue(record.get('related_record'));
                }
            }, this);
        }, this);
        this.updateTitle();
    },

    /**
     * populate store and set record
     * @param {Record} record
     */
    loadRecord: function(dialog, record, ticketFn) {
        var _ = window.lodash,
            me = this,
            interceptor = ticketFn(),
            evalGrants = dialog.evalGrants,
            hasRequiredGrant = !evalGrants || _.get(record, record.constructor.getMeta('grantsPath') + '.' + this.requiredGrant);

        this.store.removeAll();

        var relations = _.get(record, 'data.relations');

        if (relations) {
            this.loadRelations(relations, interceptor);
        } else {
            Tine.Tinebase.getRelations('Calendar_Model_Event', record.get('id'), null, [], null, function (response, request) {
                if (response) {
                    me.loadRelations(response.results, interceptor);
                }
            }.createDelegate(this));
        }

        this.setReadOnly(! hasRequiredGrant);
    },

    loadRelations: function(relations, interceptor) {
        if (relations && relations.length > 0) {
            var relationRecords = [];
            
            Ext.each(relations, function(relation) {
                if (this.ignoreRelatedModels) {
                    if (relation.hasOwnProperty('related_model') && this.ignoreRelatedModels.indexOf(relation.related_model) == -1) {
                        relationRecords.push(new Tine.Tinebase.Model.Relation(relation, relation.id));
                    }
                } else {
                    relationRecords.push(new Tine.Tinebase.Model.Relation(relation, relation.id));
                }
            }, this);
            this.store.add(relationRecords);
            
            // sort by creation time
            this.store.sort('creation_time', 'DESC');
            this.updateTitle();
        } else {
            this.updateTitle(0);
        }

        // add other listeners after population
        if (this.store) {
            this.store.on('update', this.onUpdate, this);
            this.store.on('add', this.updateTitle, this);
            this.store.on('remove', function(store, records, index) {
                Ext.each(records, function(record) {
                    Ext.each(this.editDialog.relationPickers, function(picker) {
                        if (picker.relationType == record.get('type') && record.get('related_id') == picker.getValue() && picker.fullModelName == record.get('related_model')) {
                            picker.clear();
                        }
                    }, this);
                }, this);
                this.updateTitle();
            }, this);
        }
        interceptor();
    },
    
    /**
     * remove handler
     * 
     * @param {} button
     * @param {} event
     */
    onRemove: function(button, event) {
        var selectedRows = this.getSelectionModel().getSelections();
        
        for (var index = 0; index < selectedRows.length; index++) {
            var split = selectedRows[index].get('related_model').split('_Model_');
            
            this.checkOldValidations(split[0], split[1], selectedRows[index], selectedRows[index].get('type'));
            
            this.removeFromInvalidRowRecords(selectedRows[index]);
            this.removeFromInvalidRelatedRecords(selectedRows[index]);
        }
        
        Tine.widgets.relation.GenericPickerGridPanel.superclass.onRemove.call(this, button, event);
    },
    
    /**
     * checks if there are invalid relations
     * @return {Boolean}
     */
    isValid: function() {
        if (this.view) {
            if (this.view.hasOwnProperty('invalidRowRecords') && (this.view.invalidRowRecords.length > 0)) {
                return false;
            }
            if (this.view.hasOwnProperty('invalidRelatedRecords') && (this.view.invalidRelatedRecords.length > 0)) {
                return false;
            }
        }
        return true;
    },

    /**
     * get relations data as array
     * 
     * @param store if no store is given, this.store will be iterated
     * @return {Array}
     */
    getData: function(store) {
        store = store ? store : this.store;
        var relations = [];
        store.each(function(record) {
            if (record.data.related_record) {
                record.data.related_record.relations = null;
                record.data.related_record.relation = null;
                delete record.data.related_record.relations;
                delete record.data.related_record.relation;
            }
            relations.push(record.data);
        }, this);

        return relations;
    }
});


/***/ }),
/* 1136 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.printer');

/**
 * @namespace   Tine.widgets.printer
 * @class       Tine.widgets.printer.RecordRenderer
 * @author      Stefanie Stamer <s.stamer@metaways.de>
 */
Tine.widgets.printer.fieldRenderer = function(appName, record, fieldValue, label){
    var html = '',
        app = Tine.Tinebase.appMgr.get(appName),
        value = fieldValue ? fieldValue : '';

    html = '<span class="rp-print-single-label">' + app.i18n._(label)
        + '</span><span class="rp-print-single-value">' + value + '</span>';


    return html;
};

Tine.widgets.printer.fieldsRenderer = function(appName, record, fieldName){
    var html = '';

    Ext.each(fieldName, function(field) {
        html += '<div class="rp-print-single-details-row">' +
            '<span class="rp-print-single-value">'+ field + '</span>' +
            '</div>';
    }, this);

    return html;
};

Tine.widgets.printer.headerRenderer = function() {
    return  '<div class="rp-print-single-logo"><img src="' + Tine.installLogo + '"></div>';
};


/***/ }),
/* 1137 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2013-2015 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.grid');

/**
 * Bbar Grid Panel
 * 
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.GridPanel
 * @extends     Tine.widgets.grid.GridPanel
 * 
 * <p>Bbar Grid Panel</p>
 * <p><pre>
 *     Grid panel with bottom toolbar for add/edit/delete buttons
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.widgets.grid.BbarGridPanel
 */
Tine.widgets.grid.BbarGridPanel = Ext.extend(Tine.widgets.grid.GridPanel, {
    
    editDialogRecordProperty: null,
    editDialog: null,
    storeRemoteSort: false,
    usePagingToolbar: false,
    
    /**
     * inits this cmp
     * 
     * @private
     */
    initComponent: function() {
        this.bbar = [];
        
        this.i18nEmptyText = this.i18nEmptyText ||
            String.format(i18n._(
                "There could not be found any {0}. Please try to change your filter-criteria or view-options."),
                this.i18nRecordsName
            );

        Tine.widgets.grid.BbarGridPanel.superclass.initComponent.call(this);
        
        this.fillBottomToolbar();
        
        this.store.on('add', this.updateTitle, this);
        this.store.on('remove', this.updateTitle, this);

        // update count of tab
        if (this.editDialogRecordProperty) {
            (function () {
                this.updateTitle((
                    this.editDialog.record.data.hasOwnProperty(this.editDialogRecordProperty)
                        && this.editDialog.record.data[this.editDialogRecordProperty])
                    ? this.editDialog.record.data[this.editDialogRecordProperty].length
                    : 0
                );
            }).defer(100, this);
        }
    },

    /**
     * overwrites the default function
     */
    initFilterPanel: function() {},
    
    /**
     * updates the title ot the tab
     * 
     * @param {Number} count
     */
    updateTitle: function(count) {
        count = Ext.isNumber(count) ? count : this.store.getCount();
        this.setTitle((count > 1 ? this.i18nRecordsName : this.i18nRecordName) + ' (' + count + ')');
    },
    
    /**
     * will be called in Edit Dialog Mode
     */
    fillBottomToolbar: function() {
        var tbar = this.getBottomToolbar();
        tbar.addButton(new Ext.Button(this.action_editInNewWindow));
        tbar.addButton(new Ext.Button(this.action_addInNewWindow));
        tbar.addButton(new Ext.Button(this.action_deleteRecord));
    }
});


/***/ }),
/* 1138 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase.widgets.keyfield');

/**
 * @namespace   Tine.Tasks
 * @class       Tine.Tinebase.widgets.keyfield.Filter
 * @extends     Tine.widgets.grid.FilterModel
 * 
 * @author      Philipp Schüle <p.schuele@metaways.de>
 */
Tine.Tinebase.widgets.keyfield.Filter = Ext.extend(Tine.widgets.grid.FilterModel, {
    /**
     * @property Tine.Tinebase.Application app
     */
    app: null,
    
    /**
     * @cfg
     * @type String
     */
    keyfieldName: null,
    
    defaultOperator: 'in',
    
    /**
     * @private
     */
    initComponent: function() {
        this.operators = ['in', 'notin'];

        if (this.defaultAll) {
            this.defaultValue = [];
            Tine.Tinebase.widgets.keyfield.StoreMgr.get(this.app.name, this.keyfieldName).each(function(keyFieldRecord) {
                this.defaultValue.push(keyFieldRecord.get('id'));
            }, this)
        }
        Tine.Tinebase.widgets.keyfield.Filter.superclass.initComponent.call(this);
    },
    
    /**
     * value renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    valueRenderer: function(filter, el) {
        var value = new Tine.Tinebase.widgets.keyfield.FilterValueField({
            app: this.app,
            filter: filter,
            width: this.filterValueWidth,
            id: 'tw-ftb-frow-valuefield-' + filter.id,
            value: filter.data.value ? filter.data.value : this.defaultValue,
            renderTo: el,
            keyfieldName: this.keyfieldName
        });
        value.on('specialkey', function(field, e){
             if(e.getKey() == e.ENTER){
                 this.onFiltertrigger();
             }
        }, this);
        value.on('select', this.onFiltertrigger, this);
        
        return value;
    }
});

Tine.widgets.grid.FilterToolbar.FILTERS['tine.widget.keyfield.filter'] = Tine.Tinebase.widgets.keyfield.Filter;

/**
 * @namespace   Tine.Tasks
 * @class       Tine.Tinebase.widgets.keyfield.FilterValueField
 * @extends     Ext.ux.form.LayerCombo
 * 
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * 
 * TODO think about using Tine.widgets.grid.PickerFilterValueField
 */
Tine.Tinebase.widgets.keyfield.FilterValueField = Ext.extend(Ext.ux.form.LayerCombo, {
    hideButtons: false,
    formConfig: {
        labelAlign: 'left',
        labelWidth: 30
    },
    
    /**
     * @property Tine.Tinebase.Application app
     */
    app: null,
    
    /**
     * @cfg
     * @type String
     */
    keyfieldName: null,
    
    getFormValue: function() {
        var ids = [];
        var keyfieldStore = Tine.Tinebase.widgets.keyfield.StoreMgr.get(this.app.name, this.keyfieldName);
        
        var formValues = this.getInnerForm().getForm().getValues();
        for (var id in formValues) {
            if (formValues[id] === 'on' && keyfieldStore.getById(id)) {
                ids.push(id);
            }
        }
        
        return ids;
    },
    
    getItems: function() {
        var items = [];
        Tine.Tinebase.widgets.keyfield.StoreMgr.get(this.app.name, this.keyfieldName).each(function(keyfieldRecord) {
            var checkbox = {
                xtype: 'checkbox',
                boxLabel: keyfieldRecord.get('i18nValue'),
                icon: keyfieldRecord.get('icon'),
                name: keyfieldRecord.get('id')
            };
            
            if (checkbox.icon) {
                checkbox.boxLabel = '<img src="' + keyfieldRecord.get('icon') + '" class="tine-keyfield-icon"/>' + checkbox.boxLabel;
            }
            
            items.push(checkbox);
        }, this);
        
        return items;
    },
    
    /**
     * @param {String} value
     * @return {Ext.form.Field} this
     */
    setValue: function(value) {
        value = Ext.isArray(value) ? value : [value];
        value = value.map(function(v) {return String(v);});
        
        var keyfieldRecordText = [];
        this.currentValue = [];
        
        Tine.Tinebase.widgets.keyfield.StoreMgr.get(this.app.name, this.keyfieldName).each(function(keyfieldRecord) {
            var id = keyfieldRecord.get('id');
            var name = keyfieldRecord.get('i18nValue');
            if (value.indexOf(id) >= 0) {
                keyfieldRecordText.push(name);
                this.currentValue.push(id);
            }
        }, this);
        
        this.setRawValue(keyfieldRecordText.join(', '));
        
        return this;
    },
    
    /**
     * sets values to innerForm
     */
    setFormValue: function(value) {
        this.getInnerForm().getForm().items.each(function(item) {
            item.setValue(value.indexOf(item.name) >= 0 ? 'on' : 'off');
        }, this);
    }
});


/***/ }),
/* 1139 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2015 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase.widgets.keyfield');

/**
 * quickadd grid panel
 *
 * @TODO: add extra options hasColor, hasIcon, hasStandard?
 * 
 * @namespace   Tine.Tinebase.widgets.keyfield
 * @class       Tine.Tinebase.widgets.keyfield.ConfigGrid
 * @extends     Tine.widgets.grid.QuickaddGridPanel
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2015 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Tinebase.widgets.keyfield.ConfigGrid
 */
Tine.Tinebase.widgets.keyfield.ConfigGrid = Ext.extend(Tine.widgets.grid.QuickaddGridPanel, {

    /**
     * @cfg {record} (optional) configRecord keyFieldConfig record
     */
    configRecord: null,

    keyFieldOptions: null,

    autoExpandColumn: 'value',
    quickaddMandatory: 'id',
    resetAllOnNew: true,
    useBBar: true,
    border: false,
    defaultCheck: null,
    hasDefaultCheck: true,
    cols: null,

    /**
     * @private
     */
    initComponent: function() {
        if (this.configRecord) {
            // used withing config system
            this.keyFieldOptions = this.configRecord.get('options') || {};
            this.configApp = Tine.Tinebase.appMgr.getById(this.configRecord.get('application_Id'));
        } else {
            // defaults
            this.keyFieldOptions = {
                recordModel : 'Tinebase_Model_KeyFieldRecord'
            }
        }

        this.keyFieldConfig = {};
        this.configI18n = this.configApp ? this.configApp.i18n : i18n;
        this.initStore();

        if (this.hasDefaultCheck) {
            this.defaultCheck = new Ext.ux.grid.CheckColumn({
                id: 'default',
                header: i18n._('Default'),
                dataIndex: 'default',
                sortable: false,
                align: 'center',
                width: 55
            });
            this.plugins = [this.defaultCheck];
        }

        Tine.Tinebase.widgets.keyfield.ConfigGrid.superclass.initComponent.call(this);

        this.getSelectionModel().on('selectionchange', function(sm) {
            var rows = sm.getSelections()
                deletedDisabled = rows.length == 0;

            Ext.each(sm.getSelections(), function(record) {
                deletedDisabled |= record.data.system;
            });
            this.deleteAction.setDisabled(deletedDisabled);
        }, this);

        this.on('beforeedit', this.onBeforeValueEdit, this);
    },

    /**
     * init keyfield store
     *
     * for "normal" keyFields we could work on the default store (client side)
     * this way the client dosn't need a client reload
     *
     *
     */
    initStore: function() {
        var recordClass = this.keyFieldOptions.recordModel && Tine.Tinebase.data.RecordMgr.get(this.keyFieldOptions.recordModel) || Tine.Tinebase.Model.KeyFieldRecord,
            fields = [].concat(recordClass.getFieldDefinitions());

        // add default field
        if (this.hasDefaultCheck) {
            fields.unshift({name: 'default'});
        }

        this.recordClass = Tine.Tinebase.data.Record.create(fields, {});

        this.store = new Ext.data.Store({
            reader: new Ext.data.ArrayReader({idIndex: 0}, this.recordClass),
            listeners: {
                scope: this,
                'update': function (store, rec, operation) {
                    rec.commit(true);

                    // be sure that only one default is checked
                    if (this.hasDefaultCheck && rec.get('default')) {
                        // reset other default of same parentId
                        var parentId = this.getParentId(rec);

                        store.each(function (r) {
                            if (this.getParentId(r) == parentId && r.id !== rec.id) {
                                r.set('default', false);
                                r.commit(true);
                            }
                        }, this);
                    }
                }
            }
        });
    },

    getParentId: function(r) {
        var parts = String(r.get('id')).split(':'),
            parentId = parts.length > 1 ? parts[0] : '';

        return parentId;
    },

    /**
     * @returns {Ext.grid.ColumnModel}
     */
    getColumnModel: function () {
        if (! this.cols) {
            var fields = this.recordClass.getFieldDefinitions(),
                cols = [
                    this.defaultCheck,
                    {
                        id: 'id',
                        header: i18n._('ID'),
                        dataIndex: 'id',
                        hideable: false,
                        sortable: false,
                        editor: new Ext.form.TextField({}),
                        quickaddField: new Ext.form.TextField({
                            emptyText: i18n._('Add a New ID...')
                        })
                    }, {
                        id: 'value',
                        header: i18n._('Value'),
                        dataIndex: 'value',
                        hideable: false,
                        sortable: false,
                        editor: new Ext.form.TextField({}),
                        quickaddField: new Ext.form.TextField({
                            emptyText: i18n._('Add a New Value...')
                        })
                    }
                ];

            Ext.each(fields, function (field) {
                if (['default', 'id', 'value', 'i18nValue', 'system'].indexOf(field.name) == -1) {
                    switch (field.name) {
                        case 'color':
                            cols.push({
                                id: 'color',
                                header: i18n._('Color'),
                                dataIndex: 'color',
                                sortable: false,
                                width: 50,
                                editor: new Ext.ux.form.ColorField({}),
                                renderer: Tine.Tinebase.common.colorRenderer
                            });
                            break;
                        case 'icon':
                            // not supported yet
                            break;
                        default:
                            cols.push(this.getColumn(field));
                            break;
                    }
                }
            }, this);
        } else {
            cols = this.cols;
        }

        return new Ext.grid.ColumnModel(cols);
    },

    getColumn: function(field) {
        var col = {
            id: field.name,
            header: field.label ? this.configI18n._(field.label) : field.name,
            dataIndex: field.name,
            sortable: false,
            width: field.uiConfig && field.uiConfig.width ? field.uiConfig.width : 50
        };

        switch (field.type) {
            case 'bool':
                Ext.applyIf(col, {
                    align: 'center',
                    width: 55
                });
                col = new Ext.ux.grid.CheckColumn(col);
                this.plugins.push(col);
                break;
            case 'percentage':
                Ext.applyIf(col, {
                    renderer: Ext.ux.PercentRenderer,
                    editor: new Ext.ux.PercentCombo({
                        autoExpand: true,
                        blurOnSelect: true
                    }),
                    quickaddField: new Ext.ux.PercentCombo({
                        autoExpand: true
                    })
                });
                break;
            default:
                col.editor = new Ext.form.TextField({});
                break;
        }

        return col;
    },

    onBeforeValueEdit: function(o) {
        if (o.record.data.system == true) {
            o.cancel = true;
        }

    },
        /**
     * Do some checking on new entry add
     * 
     * @param {Object} recordData
     */
    onNewentry: function (recordData) {
        // check if id exists in grid
        if (this.store.findExact('id', recordData.id) !== -1) {
            Ext.Msg.alert(i18n._('Error'), i18n._('ID already exists'));
            return false;
        }

        if (this.keyFieldOptions.parentField && ! String(recordData.id).match(/^.+:.+$/)) {
            Ext.Msg.alert(i18n._('Error'), i18n._('ID needs to follow the syntax PARENTID:ID'));
            return false;
        }

        // if value is empty, set it to ID
        if (Ext.isEmpty(recordData.value)) {
            recordData.value = recordData.id;
        }

        Tine.Tinebase.widgets.keyfield.ConfigGrid.superclass.onNewentry.apply(this, arguments);
    },

    /**
     * @param value
     */
    setValue: function (value) {
        this.keyFieldConfig = Ext.decode(Ext.encode(value));

        this.setStoreFromArray(value.records);

        // if there is default value check it
        if (value['default']) {
            // there might be multiple defaults in case of dependend keyFields
            var defaults = Ext.isArray(value['default']) ? value['default'] : [value['default']];
            Ext.each(defaults, function(def) {
                var defaultRecIdx = this.store.findExact('id', def);
                if (defaultRecIdx !== -1) {
                    this.store.getAt(defaultRecIdx).set('default', true);
                }
            }, this);
        }
    },

    /**
     * @returns {Array}
     */
    getValue: function () {
        // don't touch other configs than records & default
        var value = Ext.decode(Ext.encode(this.keyFieldConfig)) || {};

        var records = [],
            defaults = [];

        this.store.each(function (rec) {
            var data = Ext.apply({}, rec.data);
            if (data['default'] == true) {
                defaults.push(data.id);
            }
            delete(data['default']);
            records.push(data);

        });

        value['records'] = records;
        value['default'] = Ext.isArray(value['default']) ? defaults : defaults[0];
        Tine.Tinebase.common.assertComparable(value);

        return value;
    },

    /**
     * @returns {boolean}
     */
    isValid: function () {
        return true;
    }
});


/***/ }),
/* 1140 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2015 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.Tinebase.widgets.keyfield');

/**
 * config grid panel
 *
 * @namespace   Tine.Admin.config
 * @class       Tine.Admin.config.ConfigField
 * @extends     Tine.widgets.grid.LayerCombo
 */
Tine.Tinebase.widgets.keyfield.ConfigField = Ext.extend(Ext.ux.form.LayerCombo, {

    /**
     * @cfg {Admin.Model.Config} ConfigRecord
     */
    configRecord: null,

    hideButtons: false,
    layerAlign: 'tr-br?',
    minLayerWidth: 400,
    layerHeight: 300,
    allowBlur: true,

    lazyInit: true,

    formConfig: {
        labelAlign: 'left',
        labelWidth: 30
    },

    configGrid: null,

    initComponent: function () {
        this.on('beforecollapse', this.onBeforeCollapse, this);

        this.supr().initComponent.call(this);
    },

    getFormValue: function () {
        return this.configGrid.getValue();
    },

    getItems: function () {

        this.configGrid = new Tine.Tinebase.widgets.keyfield.ConfigGrid({
            title: i18n._('Key Field Records'),
            height: this.layerHeight - 40 || 'auto',
            configRecord: this.configRecord,
            onStoreChange: Ext.emptyFn
        });

        return [this.configGrid];
    },

    /**
     * cancel collapse if ctx menu is shown
     */
    onBeforeCollapse: function () {

        return (!this.configGrid.contextMenu || this.configGrid.contextMenu.hidden) && !this.configGrid.editing;
    },

    /**
     * @param {String} value
     * @return {Ext.form.Field} this
     */
    setValue: function (value) {
        this.currentValue = value;
        Tine.Tinebase.common.assertComparable(this.currentValue);

        this.setRawValue('...');
        return this;
    },

    /**
     * sets values to innerForm
     */
    setFormValue: function (value) {
        this.configGrid.setValue(this.currentValue);
    }
});


/***/ }),
/* 1141 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.widgets', 'Tine.widgets.tree');

/**
 * returns generic tree context menu with
 * - create/add
 * - rename
 * - delete
 * - edit grants
 * 
 * ctxNode class var is required in calling class
 */
Tine.widgets.tree.ContextMenu = {
    /**
     * @cfg {Tine.widgets.ActionManager} actionMgr
     */
    actionMgr: null,

    /**
     * create new Ext.menu.Menu with actions
     * 
     * @param {} config has the node name, actions, etc.
     * @return {}
     */
    getMenu: function(config) {
        
        this.config = config;
                
        /****************** create ITEMS array ****************/
              
        this.action_add = new Ext.Action({
            text: String.format(i18n._('Add {0}'), this.config.nodeName),
            iconCls: 'action_add',
            handler: this.addNode,
            requiredGrant: 'addGrant',
            scope: this.config
        });
        
        this.action_rename = new Ext.Action({
            text: String.format(i18n._('Rename {0}'), this.config.nodeName),
            iconCls: 'action_rename',
            handler: this.renameNode,
            scope: this.config,
            requiredGrant: 'editGrant',
            allowMultiple: false
        });
        
        this.action_delete = new Ext.Action({
            text: String.format(i18n.ngettext('Delete {0}', 'Delete {0}', 1), this.config.nodeName),
            iconCls: 'action_delete',
            handler: this.deleteNode,
            scope: this.config,
            requiredGrant: 'deleteGrant',
            allowMultiple: true
        });
        
        this.action_grants = new Ext.Action({
            text: String.format(i18n._('Manage {0} Permissions'), this.config.nodeName),
            iconCls: 'action_managePermissions',
            handler: this.managePermissions,
            requiredGrant: 'editGrant',
            scope: this.config
        });
        
        this.action_properties = new Ext.Action({
            text: String.format(i18n._('{0} Properties'), this.config.nodeName),
            iconCls: 'action_manageProperties',
            handler: this.manageProperties,
            requiredGrant: 'readGrant',
            scope: this.config
        });
        
        // TODO is edit grant required?
        this.action_changecolor = new Ext.Action({
            text: String.format(i18n._('Set {0} color'), this.config.nodeName),
            iconCls: 'action_changecolor',
//            requiredGrant: 'editGrant',
            allowMultiple: true,
            menu: new Ext.menu.ColorMenu({
                scope: this,
                listeners: {
                    select: this.changeNodeColor,
                    scope: this.config
                }
            })
        });
        
        this.action_reload = new Ext.Action({
            text: String.format(i18n._('Reload {0}'), this.config.nodeName),
            iconCls: 'x-tbar-loading',
            handler: this.reloadNode,
            scope: this.config
        });
        
        // TODO move the next 5 to Filemanager!
        this.action_resume = new Ext.Action({
            text: String.format(i18n._('Resume upload'), config.nodeName),
            iconCls: 'action_resume',
            handler: this.onResume,
            scope: this.config,
            actionUpdater: this.isResumeEnabled
        });
        this.action_pause = new Ext.Action({
            text: String.format(i18n._('Pause upload'), config.nodeName),
            iconCls: 'action_pause',
            handler: this.onPause,
            actionUpdater: this.isPauseEnabled,
            scope: this.config
        });
        
        this.action_download = new Ext.Action({
            text: String.format(i18n._('Download'), config.nodeName),
            iconCls: 'action_filemanager_save_all',
            handler: this.downloadFile,
            actionUpdater: this.isDownloadEnabled,
            scope: this.config
        });
        
        this.action_publish = new Ext.Action({
            text: String.format(i18n._('Publish'), config.nodeName),
            iconCls: 'action_publish',
            handler: this.publishFile,
            actionUpdater: true,
            scope: this.config
        });

        var items = [],
            method = '',
            action;

        for (var i=0; i < config.actions.length; i++) {
            action = config.actions[i];

            if (Ext.isString(action)) {
                method = 'action_' + action;
                if (this.actionMgr && this.actionMgr.has(action)) {
                    items.push(this.actionMgr.get(action));
                } else if (this[method]) {
                    items.push(this[method]);
                } else {
                    Tine.log.warn('Tine.widgets.tree.ContextMenu.getMenu: action "' + action + '" is not definded');
                    continue;
                }

            }

            else if (action && action.isAction) {
                items.push(action);
            }

            else if (Ext.isObject(action)) {
                items.push(new Ext.Action(action));
            }

            else {
                Tine.log.warn('Tine.widgets.tree.ContextMenu.getMenu: can\'t cope with action :');
                Tine.log.warn(action);
            }

        }

        /******************* return menu **********************/
        
        return new Ext.menu.Menu({
            plugins: [{
                ptype: 'ux.itemregistry',
                key:   'Tinebase-MainContextMenu'
            }],
            items: items
        });
    },
    
    /**
     * create tree node
     */
    addNode: function() {
        Ext.MessageBox.prompt(String.format(i18n._('New {0}'), this.nodeName), String.format(i18n._('Please enter the name of the new {0}:'), this.nodeName), function(_btn, _text) {
            if( this.scope.ctxNode && _btn == 'ok') {
                if (! _text) {
                    Ext.Msg.alert(String.format(i18n._('No {0} added'), this.nodeName), String.format(i18n._('You have to supply a {0} name!'), this.nodeName));
                    return;
                }
                Ext.MessageBox.wait(i18n._('Please wait'), String.format(i18n._('Creating {0}...' ), this.nodeName));
                var parentNode = this.scope.ctxNode;
                
                var params = {
                    method: this.backend + '.add' + this.backendModel,
                    name: _text
                };
                
                // TODO try to generalize this and move app specific stuff to app
                
                if (this.backendModel == 'Node') {
                    params.application = this.scope.app.appName || this.scope.appName;
                    var filename = parentNode.attributes.nodeRecord.data.path + '/' + _text;
                    params.filename = filename;
                    params.type = 'folder';
                    params.method = this.backend + ".createNode";
                }
                else if (this.backendModel == 'Container') {
                    params.application = this.scope.app.appName || this.scope.appName;
                    params.containerType = Tine.Tinebase.container.path2type(parentNode.attributes.path);
                    params.modelName = this.scope.app.getMainScreen().getActiveContentType();
                } 
                else if (this.backendModel == 'Folder') {
                    var parentFolder = Tine.Tinebase.appMgr.get('Felamimail').getFolderStore().getById(parentNode.attributes.folder_id);
                    params.parent = parentFolder.get('globalname');
                    params.accountId = parentFolder.get('account_id');
                }
                
                Ext.Ajax.request({
                    params: params,
                    scope: this,
                    success: function(result, request){
                        var nodeData = Ext.util.JSON.decode(result.responseText);

                        if (nodeData.length == 0) {
                            Tine.log.err('Server returned empty node data!');
                            Ext.MessageBox.hide();
                            return;
                        }

                        // TODO add + icon if it wasn't expandable before
                        if(nodeData.type == 'folder') {
                            var nodeData = Ext.util.JSON.decode(result.responseText);

                            var app = Tine.Tinebase.appMgr.get(this.scope.app.appName);
                            var newNode = app.getMainScreen().getWestPanel().getContainerTreePanel().createTreeNode(nodeData, parentNode);
                            parentNode.appendChild(newNode);
                        }
                        else {
                            var newNode = this.scope.loader.createNode(nodeData);
                            parentNode.appendChild(newNode);
                        }
                        
                        parentNode.expand();
                        this.scope.fireEvent('containeradd', nodeData);
                                              
                        Ext.MessageBox.hide();
                    },
                    failure: function(result, request) {
                        var nodeData = Ext.util.JSON.decode(result.responseText);
                        
                        var appContext = Tine[this.scope.app.appName];
                        if(appContext && appContext.handleRequestException) {
                            appContext.handleRequestException(nodeData.data);
                        }
                    }
                });
                
            }
        }, this);
    },
    
    /**
     * rename tree node
     */
    renameNode: function() {
        if (this.scope.ctxNode) {
    
            var node = this.scope.ctxNode;
            Ext.MessageBox.show({
                title: String.format(i18n._('Rename {0}'), this.nodeName),
                msg: String.format(i18n._('Please enter the new name of the {0}:'), this.nodeName),
                buttons: Ext.MessageBox.OKCANCEL,
                value: Ext.util.Format.htmlDecode(node.attributes.longName || node.text),
                fn: function(_btn, _text){
                    if (_btn == 'ok') {
                        if (! _text) {
                            Ext.Msg.alert(String.format(i18n._('Not renamed {0}'), this.nodeName), String.format(i18n._('You have to supply a {0} name!'), this.nodeName));
                            return;
                        }
                        
                        var params = {
                            method: this.backend + '.rename' + this.backendModel,
                            newName: _text
                        };
                        
                        params.application = this.scope.app.appName || this.scope.appName;

                        if (this.backendModel == 'Node') {
                            var filename = node.attributes.path;
                            params.sourceFilenames = [filename];
                            
                            var targetFilename = "/";
                            var sourceSplitArray = filename.split("/");
                            for (var i=1; i<sourceSplitArray.length-1; i++) {
                                targetFilename += sourceSplitArray[i] + '/';
                            }
                            
                            params.destinationFilenames = [targetFilename + _text];
                            params.method = this.backend + '.moveNodes';
                        }
                        
                        // TODO try to generalize this
                        if (this.backendModel == 'Container') {
                            params.containerId = node.attributes.container.id;
                        } else if (this.backendModel == 'Folder') {
                            var folder = Tine.Tinebase.appMgr.get('Felamimail').getFolderStore().getById(node.attributes.folder_id);
                            params.oldGlobalName = folder.get('globalname');
                            params.accountId = folder.get('account_id');
                        }
                        
                        Ext.Ajax.request({
                            params: params,
                            scope: this,
                            success: function(_result, _request){
                            
                                var nodeData = Ext.util.JSON.decode(_result.responseText);
                                node.setText(Ext.util.Format.htmlEncode(_text));
                                
                                this.scope.fireEvent('containerrename', nodeData, node, _text);
                                                              
                            },
                            failure: function(result, request) {
                                var nodeData = Ext.util.JSON.decode(result.responseText);
                                
                                var appContext = Tine[this.scope.app.appName];
                                if(appContext && appContext.handleRequestException) {
                                    appContext.handleRequestException(nodeData.data);
                                }
                            }
                        });
                    }
                },
                scope: this,
                prompt: true,
                icon: Ext.MessageBox.QUESTION
            });
        }
    },
    
    /**
     * delete tree node
     */
    deleteNode: function() {
        
        if (this.scope.ctxNode) {
            var node = this.scope.ctxNode;
            
            Tine.log.debug('Tine.widgets.tree.ContextMenu::deleteNode()');
            Tine.log.debug(node);
            
            Ext.MessageBox.confirm(i18n._('Confirm'), String.format(i18n._('Do you really want to delete the {0} "{1}"?'), this.nodeName, node.text), function(_btn){
                if ( _btn == 'yes') {
                    
                    var params = {
                        method: this.backend + '.delete' + this.backendModel
                    };
                    
                    if (this.backendModel == 'Node') {
                                           
                        var filenames = [node.attributes.path];
                        params.application = this.scope.app.appName || this.scope.appName;
                        params.filenames = filenames;
                        params.method = this.backend + ".deleteNodes";
                    
                    } else if (this.backendModel == 'Container') {
                        params.containerId = node.attributes.container.id;
                    } else if (this.backendModel == 'Folder') {
                        var folder = Tine.Tinebase.appMgr.get('Felamimail').getFolderStore().getById(node.attributes.folder_id);
                        params.folder = folder.get('globalname');
                        params.accountId = folder.get('account_id');
                    } else {
                        // use default json api style
                        params.ids = [node.id];
                        params.method = params.method + 's';
                    }
                    
                    Ext.Ajax.request({
                        params: params,
                        scope: this,
                        success: function(_result, _request){
                              
                            if(node) {
                                if(node.isSelected()) {
                                    this.scope.getSelectionModel().select(node.parentNode);
                                    this.scope.fireEvent('click', node.parentNode, Ext.EventObject.setEvent());
                                }

                                node.remove();
                                if (this.backendModel == 'Container') {
                                    this.scope.fireEvent('containerdelete', node.attributes.container);
                                } else if (this.backendModel == 'Node') {
                                    this.scope.fireEvent('containerdelete', node);
                                } else {
                                    this.scope.fireEvent('containerdelete', node.attributes);
                                }
                            }
                           
                        },
                        failure: function(result, request) {
                            var nodeData = Ext.util.JSON.decode(result.responseText);
                            var appContext = Tine[this.scope.app.appName];
                            if(appContext && appContext.handleRequestException) {
                                appContext.handleRequestException(nodeData.data);
                            }
                        }
                    });
                }
            }, this);
        }
    },
    
    /**
     * change tree node color
     */
    changeNodeColor: function(cp, color) {
        if (this.scope.ctxNode) {
            var node = this.scope.ctxNode;
            node.getUI().addClass("x-tree-node-loading");
                Ext.Ajax.request({
                    params: {
                        method: this.backend + '.set' + this.backendModel + 'Color',
                        containerId: node.attributes.container.id,
                        color: '#' + color
                    },
                    scope: this,
                    success: function(_result, _request){
                        var nodeData = Ext.util.JSON.decode(_result.responseText);
                        node.getUI().colorNode.setStyle({color: nodeData.color});
                        node.attributes.color = nodeData.color;
                        this.scope.fireEvent('containercolorset', nodeData);
                        node.getUI().removeClass("x-tree-node-loading");
                    },
                    failure: function(result, request) {
                        var nodeData = Ext.util.JSON.decode(result.responseText);
                        
                        var appContext = Tine[this.scope.app.appName];
                        if(appContext && appContext.handleRequestException) {
                            appContext.handleRequestException(nodeData.data);
                        }
                    }
                });
        
        }
    },
    
    /**
     * manage permissions
     * 
     */
    managePermissions: function() {

        if (this.scope.ctxNode) {
            var node = this.scope.ctxNode,
                grantsContainer;
            if(node.attributes.nodeRecord && node.attributes.nodeRecord.data.name) {
                grantsContainer = node.attributes.nodeRecord.data.name;
            } else if(node.attributes.container) {
                grantsContainer = node.attributes.container;
            }
            
            var window = Tine.widgets.container.GrantsDialog.openWindow({
                title: String.format(i18n._('Manage Permissions for {0} "{1}"'), this.nodeName, Ext.util.Format.htmlEncode(grantsContainer.name)),
                containerName: this.nodeName,
                grantContainer: grantsContainer,
                app: this.scope.app.appName
            });
        }
        
    },
    
    /**
     * manage properties
     * 
     */
    manageProperties: function() {
        if (this.scope.ctxNode) {
            var node = this.scope.ctxNode,
                grantsContainer,
                ctxNodeName;
            if (node.attributes.nodeRecord && node.attributes.nodeRecord.data.name) {
                grantsContainer = node.attributes.nodeRecord.data.name;
            } else if(node.attributes.container) {
                grantsContainer = node.attributes.container;
            }

            ctxNodeName = grantsContainer.name ? grantsContainer.name : grantsContainer;
            
            var window = Tine.widgets.container.PropertiesDialog.openWindow({
                title: String.format(i18n._('Properties for {0} "{1}"'), this.nodeName, Ext.util.Format.htmlEncode(ctxNodeName)),
                containerName: this.nodeName,
                grantContainer: grantsContainer,
                app: this.scope.app.appName
            });
        }
    },
    
    /**
     * reload node
     */
    reloadNode: function() {
        if (this.scope.ctxNode) {
            var tree = this.scope;
            this.scope.ctxNode.reload(function(node) {
                node.expand();
                node.select();
                // update grid
                tree.filterPlugin.onFilterChange();
            });
        }
    }
    
};


/***/ }),
/* 1142 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 */
Ext.ns('Tine.widgets', 'Tine.widgets.tree');

/**
 * filter plugin for container tree
 * 
 * @namespace Tine.widgets.tree
 * @class     Tine.widgets.tree.FilterPlugin
 * @extends   Tine.widgets.grid.FilterPlugin
 */
Tine.widgets.tree.FilterPlugin = Ext.extend(Tine.widgets.grid.FilterPlugin, {
    /**
     * @cfg {Tree Panel} treePanel (required)
     */
    treePanel: null,
    
    /**
     * @cfg field
     * @type String
     */
    field: 'container_id',

    /**
     * @cfg nodeAttributeField
     * @type String
     */
    nodeAttributeField: 'container',
    
    /**
     * @cfg singleNodeOperator
     * @type String
     */
    singleNodeOperator: 'equals',
    
    /**
     * @cfg selectNodes
     * @type Boolean
     */
    selectNodes: true,
    
    /**
     * get container filter object
     * 
     * @return {Object}
     */
    getFilter: function() {
        var filter = {field: this.field},
            sm = this.treePanel.getSelectionModel(),
            multiSelection = typeof sm.getSelectedNodes === 'function',
            selection = multiSelection ? sm.getSelectedNodes() : [sm.getSelectedNode()];
        
        filter.operator = multiSelection ? 'in' : this.singleNodeOperator;
            
        var values = [];
        Ext.each(selection, function(node) {
            if (node) {
                // if path was override in frontend for any reason, restore it
                var container = node.attributes[this.nodeAttributeField];
                container.path = node.attributes.originalPath || node.attributes.path;
                values.push(container);
            }
        }, this);
        
        filter.value = Ext.isEmpty(values) ? '' : filter.operator === 'in' ? values : values[0];
        return filter;
    },
    
    /**
     * gets value of this container filter
     */
    getValue: function() {
        // only return values if gridFilter mode
        if (this.treePanel.filterMode !== 'gridFilter') {
            return null;
        }
        
        return this.getFilter();
    },
    
    /**
     * sets the selected container (node) of this tree
     * 
     * @param {Array} all filters
     */
    setValue: function(filters) {
        if (! this.selectNodes) {
            return null;
        }

        var sm = this.treePanel.getSelectionModel();
        sm.clearSelections(true);
        
        // use first OR panel in case of filterPanel
        Ext.each(filters, function(filterData) {
            if (filterData.condition && filterData.condition == 'OR') {
                filters = filterData.filters[0].filters;
                return false;
            }
        }, this);
        
        Ext.each(filters, function(filter) {
            if (filter.field !== this.field || Ext.isEmpty(filter.value)) {
                return;
            }
            
            // save active Element, so we can restore focus after selecting nodes
            this.lastFocusEl = document.activeElement;
            
            // save west panel scrolling position so we can restore it after selecting nodes
            var westPanel = this.treePanel.app.getMainScreen().westPanel;
            if (westPanel && westPanel.body) {
                var scroller = westPanel.body.dom;
                if (scroller) {
                    this.leftPanelScrollTop = scroller.scrollTop;
                }
            }

            this.treePanel.getSelectionModel().suspendEvents();
            this.selectValue(filter.value);
        }, this);
    },
    
    /**
     * select tree node(s)
     * 
     * @param {String} value
     */
    selectValue: function(value) {
        var values = Ext.isArray(value) ? value : [value];
            
            
        Ext.each(values, function(value, idx) {
            if (Ext.isString(value) && ! value.path) {
                value = values[idx] = {path: value};
            }
            
            var containerPath = value && Ext.isString(value.path) ? value.path.split('/') : [''],
                containerId = containerPath.pop(),
                namePath = value && Ext.isString(value.name) ? value.name.split('/') : [''];
                if (namePath[0] == "") {
                    namePath.shift();
                }
                namePath.pop();
                namePath.push(containerId);
                
            containerPath = containerPath.concat(namePath).join('/');
            var treePath = this.treePanel.getTreePath(containerPath);
            
            this.selectPath.call(this.treePanel, treePath, null, function() {
                // mark this expansion as done and check if all are done
                value.isExpanded = true;
                var allValuesExpanded = true;
                Ext.each(values, function(v) {
                    allValuesExpanded &= v.isExpanded;
                }, this);
                
                if (allValuesExpanded) {
                    this.treePanel.getSelectionModel().resumeEvents();
                    
                    if (this.leftPanelScrollTop) {
                        try {
                            this.treePanel.app.getMainScreen().westPanel.body.dom.scrollTop = this.leftPanelScrollTop;
                        } catch (e) {}
                    } 
                    
                    (function() {
                        try {
                            if (this.lastFocusEl) {
                                var scroller = Ext.fly(this.lastFocusEl).up('div[class$=-scroller]'),
                                    scrollTop = scroller ? scroller.dom.scrollTop : null;
                                    
                                // TODO: is this needed (the element is already focused, atm. IE breaks (https://forge.tine20.org/mantisbt/view.php?id=6916))?
                                if(!Ext.isIE) {
                                    Ext.fly(this.lastFocusEl).focus();
                                }
                                
                                if (scrollTop) {
                                    scroller.dom.scrollTop = scrollTop;
                                }
                            }
                        } catch (e) {}
                    }).defer(10, this);
                    
                }
            }.createDelegate(this), true);
        }, this);
    },
    
    /**
     * Selects the node in this tree at the specified path. A path can be retrieved from a node with {@link Ext.data.Node#getPath}
     * @param {String} path
     * @param {String} attr (optional) The attribute used in the path (see {@link Ext.data.Node#getPath} for more info)
     * @param {Function} callback (optional) The callback to call when the selection is complete. The callback will be called with
     * (bSuccess, oSelNode) where bSuccess is if the selection was successful and oSelNode is the selected node.
     * @param {keep} bool keep current selection
     */
    selectPath : function(path, attr, callback, keep){
        attr = attr || 'id';
        var keys = path.split(this.pathSeparator),
            v = keys.pop();

        if (keys.length > 1) {
            var f = function (success, node) {
                if (success && node) {
                    var n = node.findChild(attr, v) || node.findChild('path', node.attributes.path + '/' + v);
                    if (n) {
                        n.getOwnerTree().getSelectionModel().select(n, false, keep);
                        if (callback) {
                            callback(true, n);
                        }
                    } else if (callback) {
                        callback(false, n);
                    }
                } else {
                    if (callback) {
                        callback(false, node);
                    }
                }
            };
            this.expandPath(keys.join(this.pathSeparator), attr, f);
        }else{
            this.root.select();
            if(callback){
                callback(true, this.root);
            }
        }
    }
});


/***/ }),
/* 1143 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.widgets', 'Tine.widgets.customfields');

Tine.widgets.customfields.ConfigManager = function() {
    var stores = {};
    var idMap = {};
    
    var getStore = function(app) {
        app = Tine.Tinebase.appMgr.get(app);
        if (! stores[app.appName]) {
            var _ = window.lodash,
                allCfs = (Ext.isFunction(app.getRegistry)) ? app.getRegistry().get('customfields') : null;

            // set defaults -- uiconfig are empty strings :-(
            _.each(allCfs, function(cfConfig) {
                _.each({tab: 'customfields', 'group': '', sort: 0}, function(defaultValue, field) {
                    if (_.get(cfConfig, 'definition.uiconfig.' + field, '') == '') {
                        _.set(cfConfig, 'definition.uiconfig.' + field, defaultValue);
                    }
                });
            });

            stores[app.appName] = new Ext.data.JsonStore({
                fields: Tine.Tinebase.Model.Customfield,
                data: allCfs ? allCfs : []
            });
            
            // place customefield keyFieldConfig in registry so we can use the standard widgets
            // keyfields are used for key/value customfields with a defined store 
            stores[app.appName].each(function(cfConfig) {
                idMap[cfConfig.id] = cfConfig;
                var definition = cfConfig.get('definition'),
                    options = definition.options ? definition.options : {},
                    keyFieldConfig = definition.keyFieldConfig ? definition.keyFieldConfig : null;
                    
                if (keyFieldConfig) {
                    var config = app.getRegistry().get('config');
                    config[cfConfig.get('name')] = keyFieldConfig;
                    app.getRegistry().set('config', config);
                }
            });
        }
        
        return stores[app.appName];
    };
    
    /**
     * convert config record to record field
     * 
     * @param  {Record} cfConfig
     * @return {Ext.data.Field} field definition
     */
    var config2Field = function(cfConfig) {
        var def = cfConfig.get('definition');
        
        return new Ext.data.Field(Ext.apply({
            name: '#' + cfConfig.get('name')
        }, def));
    };
    
    return {
        /**
         * returns single field config by id
         *
         * @param customfieldId
         * @param asField
         * @return {Record}
         */
        getById: function(customfieldId, asField) {
            var cfConfig = idMap[customfieldId];

            return asField ? config2Field(cfConfig) : cfConfig;
        },

        /**
         * returns a single field config
         * 
         * @param {String/Application}  app
         * @param {String}              model
         * @param {String}              name
         * @param {Boolean}             asField
         * @return {Record}
         */
        getConfig: function (app, model, name, asField) {
            var cfStore = getStore(app),
                cfConfig = null;
            
            cfStore.clearFilter(true);
            cfStore.filter('model', model);
            cfConfig = cfStore.findExact('name', name);
            cfConfig = cfConfig > -1 ? cfStore.getAt(cfConfig): null;
            cfStore.clearFilter(true);
            
            return asField ? config2Field(cfConfig) : cfConfig;
            
        },
        
        /**
         * returns a single field config
         * 
         * @param {String/Application}  app
         * @param {String}              model
         * @param {Boolean}             asFields
         * @return {Array}
         */
        getConfigs: function(app, model, asFields) {
            if (Ext.isFunction(model.getMeta)) {
                model = model.getMeta('appName') + '_Model_' + model.getMeta('modelName');
            }
            
            var cfStore = getStore(app),
                cfConfigs = [];
            
            cfStore.clearFilter(true);
            cfStore.filter('model', model);
            cfStore.each(function(r) {cfConfigs.push(r);});
            cfStore.clearFilter(true);
            
            if (asFields) {
                Ext.each(cfConfigs, function(cfConfig, idx) {
                    cfConfigs[idx] = config2Field(cfConfig);
                }, this);
            }
            
            return cfConfigs;
        }
    }
}();

/***/ }),
/* 1144 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.widgets.customfields');

/**
 * wrap for lazy cf init
 *
 * use like this:
 * {
 *    columnWidth: 0.5,
 *    xtype: 'customfield',
 *    modelName: 'Addressbook_Model_Contact',
 *    customFieldName: 'test'
 * }
 */
Tine.widgets.customfields.Field = Ext.extend(Ext.Panel, {
    layout: 'form',
    autoHeight: true,
    border: false,
    initComponent: function() {
        this.appName = this.appName ? this.appName : this.modelName.split('_')[0];

        var fieldConfig = Tine.widgets.customfields.ConfigManager.getConfig(this.appName, this.modelName, this.customFieldName),
            field = Tine.widgets.customfields.Field.get(this.appName, fieldConfig, {
                anchor: '100%',
                labelSeparator: ''
            });

        this.items = [field];
        Tine.widgets.customfields.Field.superclass.initComponent.call(this);
    }
});

    /**
     * get the form field 
     *
     * @static
     * @param {Tine.Tinebase.Application} app the application the customfield belongs to
     * @param {Tine.Tinebase.data.Record} cfConfig customfields config record
     * @param {Object} config additional field config
     * @param {Tine.widgets.dialog.EditDialog} editDialog the calling editdialog - just needed if record must not link itself
     * 
     * @return {Ext.form.Field}
     */
    Tine.widgets.customfields.Field.get = function (app, cfConfig, config, editDialog) {
        if (! cfConfig) {
            Tine.log.error('cfConfig empty -> skipping field');
            return Ext.ComponentMgr.create({xtype: 'hidden'});
        }
        
        var _ = window.lodash,
            def = cfConfig.get('definition'),
            uiConfig = def && def.uiconfig ? def.uiconfig : {},
            fieldDef = {
                fieldLabel: def.label,
                name: 'customfield_' + cfConfig.get('name'),
                xtype: (def.value_search == 1) ? 'customfieldsearchcombo' : uiConfig.xtype,
                customfieldId: cfConfig.id,
                readOnly: cfConfig.get('account_grants').indexOf('writeGrant') < 0,
                requiredGrant: 'editGrant'
            };
            
            // auto xtype per data type
            // @todo support array of scalars
            // @todo suppot recordSets of model
            if (! uiConfig.xtype && def.type && ! def.value_search) {
                switch (Ext.util.Format.lowercase(def.type)) {
                    case 'keyfield':
                        var options = def.options ? def.options : {},
                            keyFieldConfig = def.keyFieldConfig ? def.keyFieldConfig : null;
                            
                        Ext.apply(fieldDef, {
                            xtype: 'widget-keyfieldcombo',
                            app: options.app ? options.app : app,
                            keyFieldName: options.keyFieldName ? options.keyFieldName : cfConfig.get('name'),
                            sortBy: 'id'
                        });
                        break;
                    case 'record':
                        var options = def.options ? def.options : {},
                           recordConfig = def.recordConfig ? def.recordConfig : null;
                            
                        Ext.apply(fieldDef, {
                            xtype: 'tinerecordpickercombobox',
                            app: options.app ? options.app : app,
                            resizable: true,
                            recordClass: eval(recordConfig.value.records),
                            allowLinkingItself: false,
                            editDialog: editDialog
                        });
                        break;
                    case 'recordlist':
                        var options = def.options ? def.options : {},
                            recordListConfig = def.recordListConfig ? def.recordListConfig : null;

                        Ext.apply(fieldDef, {
                            xtype: 'tinerecordspickercombobox',
                            app: options.app ? options.app : app,
                            resizable: true,
                            recordClass: eval(recordListConfig.value.records),
                            allowLinkingItself: false,
                            editDialog: editDialog
                        });
                        break;
                    case 'integer':
                    case 'int':
                        fieldDef.xtype = 'numberfield';
                        break;
                    case 'date':
                        fieldDef.xtype = 'datefield';
                        fieldDef.listAlign = 'tr-br?';
                        break;
                    case 'time':
                        fieldDef.xtype = 'timefield';
                        fieldDef.listAlign = 'tr-br?';
                        break;
                    case 'datetime':
                        fieldDef.xtype = 'datetimefield';
                        fieldDef.listAlign = 'tr-br?';
                        break;
                    case 'boolean':
                    case 'bool':
                        fieldDef.xtype = 'checkbox';
                        fieldDef.hideLabel = true;
                        fieldDef.boxLabel = fieldDef.fieldLabel;
                        break;
                    case 'textarea':
                        fieldDef.xtype = 'textarea';
                        break;
                    case 'string':
                    default:
                        fieldDef.xtype = 'textfield';
                        break;
                }
            }
            
        if (def.length) {
            fieldDef.maxLength = def.length;
        }
        
        if (def.required) {
            fieldDef.allowBlank = false;
        }

        // custom code overrides
        var overwritesKey = cfConfig.get('model').replace(/_/g, '.') + '.' + cfConfig.get('name');
        var overwrites = _.get(Tine, overwritesKey, {});

        try {
            fieldDef = _.assign(fieldDef, config, overwrites);
            return Ext.ComponentMgr.create(fieldDef);
        } catch (e) {
            Tine.log.debug(e);
            Tine.log.error('Unable to create custom field "' + cfConfig.get('name') + '". Check definition:');
            Tine.log.error(fieldDef);
            return Ext.ComponentMgr.create({xtype: 'hidden'});
        }
    };

Ext.reg('customfield', Tine.widgets.customfields.Field);


/***/ }),
/* 1145 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2015 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.widgets', 'Tine.widgets.customfields');

/**
 * @namespace   Tine.widgets.customfields
 * @class       Tine.widgets.customfields.FilterModel
 * @extends     Tine.widgets.grid.FilterModel
 */
Tine.widgets.customfields.FilterModel = Ext.extend(Tine.widgets.grid.FilterModel, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     */
    app: null,
    
    /**
     * @cfg {Record} cfConfig
     */
    cfConfig: null,
    
    valueType: 'customfield',
    
    /**
     * @private
     */
    initComponent: function() {
        this.field = 'customfield:' + this.cfConfig.id;
        this.cfDefinition = this.cfConfig.get('definition');
        this.label =  this.cfDefinition.label;
        
        switch (this.cfDefinition.type) {
            case 'record':
            case 'keyField':
                this.operators = ['equals', 'not' /* , 'in', 'notin' */];
                this.defaultOperator = 'equals';
                this.valueRenderer = this.cfValueRenderer;
                break;
            case 'integer':
            case 'int':
                this.operators = ['equals', 'greater', 'less'];
                this.defaultOperator = 'equals';
                break;
            case 'bool':
            case 'boolean':
                this.valueType = 'bool';
                this.defaultOperator = 'equals';
                this.defaultValue = '0';
                break;
            case 'date':
            case 'datetime':
                this.valueType = 'date';
                this.defaultOperator = 'within';
        }
        
        Tine.widgets.customfields.FilterModel.superclass.initComponent.call(this);
    },
    
    /**
     * returns valueType of given filter
     * 
     * added for cf of type record and keyField
     * 
     * @param {Record} filter
     * @return {String}
     */
    getValueType: function (filter) {
        var operator  = filter.get('operator') ? filter.get('operator') : this.defaultOperator,
            valueType = 'selectionComboBox';

        return valueType;
    },
    
    /**
     * called on operator change of a filter row
     * 
     * modified for cf of type record and keyField
     * 
     * @private
     */
    onOperatorChange: function (filter, newOperator) {
        this.supr().onOperatorChange.call(this, filter, newOperator);
        
        if (['record', 'keyField'].indexOf(this.cfDefinition.type) !== -1) {
            var valueType = this.getValueType(filter);
            
            for (var valueField in filter.valueFields) {
                if (filter.valueFields.hasOwnProperty(valueField)) {
                    filter.valueFields[valueField][valueField === valueType ? 'show' : 'hide']();
                }
            }
            
            filter.formFields.value = filter.valueFields[valueType];
            if (valueType === 'selectionComboBox' && Ext.isArray(filter.formFields.value.value)) {
                filter.formFields.value.setValue(filter.formFields.value.value[0]);
            }
        }
    },
        
    /**
     * cf value renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    cfValueRenderer: function(filter, el) {        
        var valueType   = this.getValueType(filter),
            fieldWidth  = this.filterValueWidth;
                    
        filter.valueFields = {};
        
        filter.valueFields.selectionComboBox = Tine.widgets.customfields.Field.get(this.app, this.cfConfig, {
            hidden: valueType !== 'selectionComboBox',
            width: fieldWidth,
            minListWidth: 350,
            value: filter.data.value ? filter.data.value : this.defaultValue,
            resizable: true,
            filter: filter,
            id: 'tw-ftb-frow-valuefield-' + filter.id,
            renderTo: el,
            listeners: {
                scope: this,
                'specialkey': function (field, e) {
                    if (e.getKey() === e.ENTER) {
                        this.onFiltertrigger();
                    }
                },
                'select': this.onFiltertrigger
            }
        });

        return filter.valueFields[valueType];
    }
});
Tine.widgets.grid.FilterToolbar.FILTERS['tinebase.customfield'] = Tine.widgets.customfields.FilterModel;



/***/ }),
/* 1146 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Tine.widgets.customfields');

/**
 * manages key field renderers
 * 
 * @namespace   Tine.widgets.customfields
 * @class       Tine.widgets.customfields.Renderer
 * @singleton
 */
Tine.widgets.customfields.Renderer = function(){
    var renderers = {};
    
    return {
        /**
         * returns key field record renderer
         * 
         * @param {String/Application}  app
         * @param {Record}              cfConfig 
         * @param {String}              what pipe seperated field with text|icon
         * @return Ext.data.Store
         */
        get: function(app, cfConfig, what) {
            var appName = Ext.isString(app) ? app : app.appName,
                app = Tine.Tinebase.appMgr.get(appName),
                cfDefinition = cfConfig.get('definition'),
                cfName = cfConfig.get('name'),
                what = what ? what : 'text|icon',
                whatParts = what.split('|'),
                key = appName + cfConfig.id + what;
                
            if (! renderers[key]) {
                if (['keyfield' /*, 'bool', 'boolean'*/].indexOf(Ext.util.Format.lowercase(cfDefinition.type)) > -1) {
                    // NOTE existingkeyfields might come from an other app!
                    var app = cfDefinition.options && Ext.isString(cfDefinition.options.app) ? cfDefinition.options.app : app;
                    var keyFieldName = cfDefinition.options && Ext.isString(cfDefinition.options.keyFieldName) ? cfDefinition.options.keyFieldName : cfName;
                    renderers[key] = function(customfields) {
                        return Tine.Tinebase.widgets.keyfield.Renderer.render(app, keyFieldName, customfields[cfName]);
                    };
                    
                } else if (['record'].indexOf(Ext.util.Format.lowercase(cfDefinition.type)) > -1) {
                    renderers[key] = function(customfields) {
                        var recordClass = eval(cfDefinition.recordConfig.value.records);
                                                
                        return Ext.isObject(customfields[cfName]) && customfields[cfName].hasOwnProperty(recordClass.getMeta('titleProperty'))
                            ? customfields[cfName][recordClass.getMeta('titleProperty')]
                            : customfields[cfName];
                    };
                } else {
                    renderers[key] = function(customfields) {
                        switch (cfDefinition.type)
                        {
                            case 'date':
                                return Tine.Tinebase.common.dateRenderer(customfields[cfName]);
                            case 'datetime':
                                return Tine.Tinebase.common.dateTimeRenderer(customfields[cfName]);
                            case 'time':
                                return Tine.Tinebase.common.timeRenderer(customfields[cfName]);
                            case 'boolean':
                                return Tine.Tinebase.common.booleanRenderer(customfields[cfName]);
                            default:
                                return Ext.util.Format.htmlEncode(customfields[cfName] || "");
                        }
                    };
                }
            }
            
            return renderers[key];
        },
        
        /**
         * render a given value
         * 
         * @param {String/Application}  app
         * @param {Record}              cfConfig 
         * @return Ext.data.Store
         */
        render: function(app, cfConfig, id) {
            var renderer = this.get(app, cfConfig);
            
            return renderer(id);
        },

        renderAll: function(app, model, data) {
            var cfDefs = Tine.widgets.customfields.ConfigManager.getConfigs(app, model),
                html = '';

            Ext.each(cfDefs, function(cfDef) {
                var renderedValue = this.render(app, cfDef, data);

                html += '<div class="customfield-rendered-row print-single-details-row">' +
                    '<span class="customfield-rendered-label">'+ cfDef.get('definition').label + '</span>' +
                    '<span class="customfield-rendered-value">'+ renderedValue + '</span>' +
                '</div>';
            }, this);

            return html;
        },

        /**
         * register a custom renderer
         * 
         * @param {String/Application}  app
         * @param {Record}              cfConfig 
         * @param {Function}            renderer
         */
        register: function(app, cfConfig, renderer) {
            var appName = Ext.isString(app) ? app : app.appName,
                cfDefinition = cfConfig.get('definition'),
                cfName = cfConfig.get('name'),
                key = appName + cfConfig.id;
                
            renderers[key] = renderer;
        }
    }
}();


/***/ }),
/* 1147 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.widgets', 'Tine.widgets.customfields');

/**
 * CustomfieldsSearchCombo
 * 
 * @namespace   Tine.Tinebase.widgets.customfields
 * @class       Tine.Tinebase.widgets.customfields.CustomfieldSearchCombo
 * @extends     Ext.form.ComboBox
 * 
 * <p>Customfields Search Combo</p>
 * <p>
 * searches for custom field values 
 * 
 * <pre>
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Tinebase.widgets.customfields.CustomfieldSearchCombo
 */
Tine.widgets.customfields.CustomfieldSearchCombo = Ext.extend(Ext.form.ComboBox, {
    
    /**
     * @property customfieldId
     * @type String
     */
    customfieldId: null,
    
    /**
     * config
     */
    forceSelection: false,
    triggerAction: 'all',
    minChars: 1,
    pageSize: 50,
    displayField: 'value',
    valueField: 'value',
    enableKeyEvents: true,
    
    /**
     * @private
     */
    initComponent: function() {
        this.pageSize = parseInt(Tine.Tinebase.registry.get('preferences').get('pageSize'), 10) || this.pageSize;

        this.store = new Ext.data.JsonStore({
            fields: Tine.Tinebase.Model.CustomfieldValue,
            baseParams: {
                method: 'Tinebase.searchCustomFieldValues',
                sort: 'value',
                dir: 'ASC'
            },
            root: 'results',
            totalProperty: 'totalcount'
        });
        
        this.on('beforequery', this.onBeforeQuery, this);
        this.on('keypress', this.syncValues, this, {buffer: 500});
        
        Tine.widgets.customfields.CustomfieldSearchCombo.superclass.initComponent.call(this);
    },
    
    /**
     * prepare paging
     * 
     * @param {Ext.data.Store} store
     * @param {Object} options
     */
    onBeforeLoad: function(store, options) {
        options.params.paging = {
            start: options.params.start,
            limit: options.params.limit
        };
    },
    
    /**
     * sync values so values don't get lost if no value is explicitly selected
     * this happens e.g. when ctrl+enter after searching
     */
    syncValues: function() {
        var val = this.getRawValue();
        this.setValue(val);
    },
     
    /**
     * use beforequery to set query filter
     * 
     * @param {Object} qevent
     */
    onBeforeQuery: function(qevent){
        this.store.baseParams.filter = [
            {field: 'customfield_id',   operator: 'equals',     value: this.customfieldId },
            {field: 'value',            operator: 'group',      value: '' },
            {field: 'value',            operator: 'contains', value: qevent.query }
        ];
    }
});

Ext.reg('customfieldsearchcombo', Tine.widgets.customfields.CustomfieldSearchCombo);


/***/ }),
/* 1148 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.widgets.customfields');

Tine.widgets.customfields.EditDialogPlugin = function (config) {
    Ext.apply(this, config);
    this.tabPanelPosition = 20;
};

Tine.widgets.customfields.EditDialogPlugin.prototype = {
    /**
     * @type Tine.Tinebase.Application app
     */
    app: null,
    
    /**
     * @type Tine.widgets.dialog.EditDialog editDialog
     */
    editDialog: null,
    
    init: function(editDialog) {
        this.editDialog = editDialog;
        
        // edit dialog without recordClass cannot have custom fields
        if(!this.editDialog.recordClass) {
            return;
        }
        
        this.app = Tine.Tinebase.appMgr.get(this.editDialog.app);
        this.customfieldsValue = [];
        
        // compute cf's for cf tab and add a cf tab on demand
        this.editDialog.on('beforerender', this.onBeforeRender, this);
        
        // fill/buffer all cf's with values
        this.editDialog.on('load', this.onRecordLoad, this);
        
        // get all cf values
        this.editDialog.onRecordUpdate = this.editDialog.onRecordUpdate.createSequence(this.onRecordUpdate, this);
    },
    
    /**
     * dispatch values from customfield property
     */
    onRecordLoad: function() {
        var form = this.editDialog.getForm(),
            modelName = this.editDialog.recordClass.getMeta('appName') + '_Model_' + this.editDialog.recordClass.getMeta('modelName'),
            name,
            field,
            cfConfig;

        this.customfieldsValue = this.editDialog.record.get('customfields') || {};
        
        for (name in this.customfieldsValue) {
            field = form.findField('customfield_' + name);
            cfConfig = Tine.widgets.customfields.ConfigManager.getConfig(this.app, modelName, name);
            
            if (cfConfig) {
                // transform datetime values
                if (['date', 'datetime'].indexOf(Ext.util.Format.lowercase(cfConfig.get('definition').type)) != -1) {
                    this.customfieldsValue[name] = Date.parseDate(this.customfieldsValue[name], Date.patterns.ISO8601Long);
                }
                
                if (field) {
                    if(field.isXType('combo') && Ext.isObject(this.customfieldsValue[name])) {
                        var record = new field.recordClass(this.customfieldsValue[name]);
                        field.setValue(record);
                    } else {
                        field.setValue(this.customfieldsValue[name]);
                    }
                }
            }
        }
    },
    
    /**
     * combile cf values in customfield property
     */
    onRecordUpdate: function() {
        var form = this.editDialog.getForm();
        
        form.items.each(function(f) {
            var name = f.getName();
            
            if (Ext.isString(name) && name.match(/^customfield_(.+)$/)) {
                name = name.match(/^customfield_(.+)$/)[1];
                
                this.customfieldsValue[name] = f.getValue();
            }
        }, this);
        
        this.customfieldsValue.toString = function() {
            return Ext.util.JSON.encode(this.customfieldsValue);
        }
        
        this.editDialog.record.set('customfields', this.customfieldsValue);
    },
    
    /**
     * create cf tab on demand
     */
    onBeforeRender: function() {
        var _ = window.lodash,
            modelName = this.editDialog.recordClass.getMeta('appName') + '_Model_' + this.editDialog.recordClass.getMeta('modelName'),
            allCfConfigs = Tine.widgets.customfields.ConfigManager.getConfigs(this.app, modelName),
            tabPanel = this.getTabPanel(),
            form = this.editDialog.getForm(),
            cfConfigs = [];
        
        // remove already applied cfs / fill the mixed collection
        Ext.each(allCfConfigs, function(cfConfig) {
            if (! form.findField('customfield_' + cfConfig.get('name'))) {
                cfConfigs.push(cfConfig);
            }
        }, this);
        
        _.each(_.groupBy(cfConfigs, 'data.definition.uiconfig.tab'), _.bind(function(fields, tabId) {
            var tab = tabPanel.items.get(_.isNaN(+tabId) || ['', null].indexOf(tabId) >= 0? tabId : +tabId);
            if (! tab) {
                this.addCFTab(fields, tabId);
            } else {
                // evaluate group here?
                _.each(fields, _.bind(function(fieldConfig) {
                    var formField = Tine.widgets.customfields.Field.get(this.app, fieldConfig, {}, this.editDialog),
                        pos = _.get(fieldConfig, 'data.definition.uiconfig.order');

                    Ext.ux.ItemRegistry.registerItem(tab, formField, pos);
                }, this));

            }
        }, this));
    },

    getTabPanel: function () {
        if (! this.tabPanel) {
            // find the first tabPanel and add it there
            this.tabPanel = this.editDialog.items.find(function (item) {
                return Ext.isObject(item) && Ext.isFunction(item.getXType) && item.getXType() == 'tabpanel';
            });
        }

        return this.tabPanel;
    },

    /**
     * create a cf tab
     * 
     * @param {Collection} cfConfigs
     * @param {String} tabName
     */
    addCFTab: function(cfConfigs, tabName) {
        var _ = window.lodash,
            groups = _.groupBy(cfConfigs, 'data.definition.uiconfig.group'),
            items = [];

        _.each(groups, _.bind(function(fields, groupName) {
            groupName = !groupName && tabName == 'customfields' ? 'General' : groupName;
            fields = _.sortBy(fields, 'data.definition.uiconfig.order');

            var fieldObjects = _.map(fields, _.bind(Tine.widgets.customfields.Field.get, this, this.app, _, {anchor: '95%'}, this.editDialog));
            if (groupName) {
                items.push(new Ext.form.FieldSet({
                    title: i18n._hidden(groupName),
                    autoHeight:true,
                    autoWidth:true,
                    labelAlign: 'top',
                    labelWidth: '90%',
                    collapsible:true,
                    items: fieldObjects
                }));
            } else {
                items = items.concat(fieldObjects);
            }
        }, this));

        this.getTabPanel().add(new Ext.Panel({
            title: (!tabName || tabName == 'customfields') ? i18n._('Custom Fields') : i18n._hidden(tabName),
            pos: this.tabPanelPosition,
            layout: 'form',
            border: true,
            frame: true,
            labelAlign: 'top',
            autoScroll: true,
            items: items,
            defaults: {
                anchor: '100%',
                labelSeparator: ''
            }
        }));

        this.tabPanelPosition = this.tabPanelPosition++;
    }
};

Ext.preg('tinebase.widgets.customfield.editdialogplugin', Tine.widgets.customfields.EditDialogPlugin)

/***/ }),
/* 1149 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * TODO         this is only used in the phone dial dialog, do we need that?
 */
 
Ext.ns('Tine.widgets', 'Tine.widgets.customfields');

/**
 * CustomfieldsCombo
 * 
 * @namespace   Tine.widgets.customfields
 * @class       Tine.widgets.customfields.CustomfieldsCombo
 * @extends     Ext.form.ComboBox
 * 
 */
Tine.widgets.customfields.CustomfieldsCombo = Ext.extend(Ext.form.ComboBox, {
    
    typeAhead: false,
    forceSelection: true,
    mode: 'local',
    triggerAction: 'all',    
    
    
    initComponent: function() {
        
        Tine.widgets.customfields.CustomfieldsCombo.superclass.initComponent.call(this);

    },
    
    
       stateEvents: ['select'],
     getState: function() { return this.getValue(); },
    applyState: function(state) { this.setValue(state); }
});




/***/ }),
/* 1150 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.widgets', 'Tine.widgets.relation');

/**
 * @namespace   Tine.widgets.relation
 * @class       Tine.widgets.relation.FilterModel
 * @extends     Tine.widgets.grid.FilterModel
 * 
 * @todo CARE FOR SHEET DESTRUCTON!
 * @todo CARE FOR OPERATOR CHANGE
 */
Tine.widgets.relation.FilterModel = Ext.extend(Tine.widgets.grid.FilterModel, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     */
    app: null,
    
    valueType: 'relation',
    field: 'relation',
    
    /**
     * @private
     */
    initComponent: function() {
        this.label = i18n._('Relation');
        
        // @TODO wipe some models?
        var relatedModels = [];
        Tine.Tinebase.data.RecordMgr.eachKey(function(operator, record) {
            if (record.hasField('relations') && Ext.isFunction(record.getFilterModel)) {
                var label = Tine.Tinebase.appMgr.get(record.getMeta('appName')).i18n._hidden(record.getMeta('recordsName'));
                
                relatedModels.push({operator: operator, label: label});
            }
        }, this);
        
        
        this.relatedModelStore = this.fieldStore = new Ext.data.JsonStore({
            fields: ['operator', 'label'],
            data: relatedModels
        });
        
        this.defaultOperator = this.relatedModelStore.getAt(0).get('operator');
        
        Tine.widgets.relation.FilterModel.superclass.initComponent.call(this);
        
    },
    
    onDefineRelatedRecord: function(filter) {
        Tine.log.debug('Tine.widgets.relation.FilterModel::onDefineRelatedRecord() - filter:');
        Tine.log.debug(filter);
        
        if (! filter.sheet) {
            var operator = filter.formFields.operator.getValue(),
                recordClass = Tine.Tinebase.data.RecordMgr.get(operator);
                
            Tine.log.debug('Tine.widgets.relation.FilterModel::onDefineRelatedRecord() - recordClass:');
            Tine.log.debug(recordClass);
            
            filter.sheet = new Tine.widgets.grid.FilterToolbar({
                recordClass: recordClass,
                defaultFilter: 'query'
            });
            
            this.ftb.addFilterSheet(filter.sheet);
        }
        
        this.ftb.setActiveSheet(filter.sheet);
        filter.formFields.value.setText(i18n._('Defined by ...'));
    },
    
    /**
     * operator renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    operatorRenderer: function (filter, el) {
        var operator = new Ext.form.ComboBox({
            filter: filter,
            width: 80,
            id: 'tw-ftb-frow-operatorcombo-' + filter.id,
            mode: 'local',
            lazyInit: false,
            emptyText: i18n._('select a operator'),
            forceSelection: true,
            typeAhead: true,
            triggerAction: 'all',
            store: this.relatedModelStore,
            displayField: 'label',
            valueField: 'operator',
            value: filter.get('operator') ? filter.get('operator') : this.defaultOperator,
            renderTo: el
        });
        operator.on('select', function(combo, newRecord, newKey) {
            if (combo.value != combo.filter.get('operator')) {
                this.onOperatorChange(combo.filter, combo.value);
            }
        }, this);
        
        return operator;
    },
    
    /**
     * value renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    valueRenderer: function(filter, el) {
        var value = new Ext.Button({
            text: i18n._('Define ...'),
            filter: filter,
            width: this.filterValueWidth,
            id: 'tw-ftb-frow-valuefield-' + filter.id,
            renderTo: el,
            value: filter.data.value ? filter.data.value : this.defaultValue,
            handler: this.onDefineRelatedRecord.createDelegate(this, [filter]),
            scope: this,
            getValue: function() {}
        });
        
        // show button
        el.addClass('x-btn-over');
        
        return value;
    }
});

Tine.widgets.grid.FilterToolbar.FILTERS['tinebase.relation'] = Tine.widgets.relation.FilterModel;



/***/ }),
/* 1151 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Tine.widgets.relation');

/**
 * manages renderers
 * 
 * @namespace   Tine.widgets.relation
 * @class       Tine.widgets.relation.Renderer
 * @singleton
 */
Tine.widgets.relation.Renderer = function(){
    var renderers = {};
    
    return {
        renderAll: function(relations) {
            var html = '';

            Ext.each(relations, function(relation) {

                var relatedRecord = relation.related_record,
                    relatedModel = relation.related_model.split('_Model_'),
                    app = Tine.Tinebase.appMgr.get(relatedModel[0]),
                    model = relatedModel[1],
                    relatedModel = Tine[relatedModel[0]].Model[relatedModel[1]],
                    record = new relatedModel(relatedRecord);

                html += '<div class="customfield-rendered-row print-single-details-row">' +
                    '<span class="customfield-rendered-label">'+ app.i18n._(model) + '</span>' +
                    '<span class="customfield-rendered-value">'+ record.getTitle() + '</span>' +
                '</div>';
            }, this);

            return html;
        },

        /**
         * register a custom renderer
         * 
         * @param {String/Application}  app
         * @param {Record}              cfConfig 
         * @param {Function}            renderer
         */
        register: function(app, relations, renderer) {
            var key = appName + record.id;
                
            renderers[key] = renderer;
        }
    }
}();


/***/ }),
/* 1152 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @subpackage  widgets
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext, Tine*/

Ext.ns('Tine.widgets.account');

/**
 * Account Picker GridPanel
 *
 * @namespace   Tine.widgets.account
 * @class       Tine.widgets.account.PickerGridPanel
 * @extends     Tine.widgets.grid.PickerGridPanel
 *
 * <p>Account Picker GridPanel</p>
 * <p><pre>
 * TODO         use selectAction config?
 * </pre></p>
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * @param       {Object} config
 * @constructor Create a new Tine.widgets.account.PickerGridPanel
 */
Tine.widgets.account.PickerGridPanel = Ext.extend(Tine.widgets.grid.PickerGridPanel, {
    /**
     * @cfg {String} one of 'user', 'group', 'both', 'myself'
     * selectType
     */
    selectType: 'user',

    /**
     * @cfg{String} selectTypeDefault 'user' or 'group' defines which accountType is selected when  {selectType} is true
     */
    selectTypeDefault: 'user',

    /**
     * @cfg {Ext.Action}
     * selectAction
     */
    //selectAction: false,

    /**
     * @cfg {bool}
     * add 'anyone' selection if selectType == 'both'
     */
    selectAnyone: true,

    /**
     * @cfg {bool}
     * add button to add the current user
     */
    selectMyself: false,

    /**
     * @cfg {bool}
     * add role selection
     */
    selectRole: false,

    /**
     * @cfg {bool}
     * show hidden (user) contacts / (group) lists
     */
    showHidden: false,

    /**
     * get only users with defined status (enabled, disabled, expired)
     * get all -> 'enabled expired disabled'
     *
     * @type String
     * @property userStatus
     */
    userStatus: 'enabled',

    /**
     * @cfg {bool} have the record account properties an account prefix?
     */
    hasAccountPrefix: false,

    /**
     * @cfg {String} recordPrefix
     */
    recordPrefix: '',

    /**
     * grid config
     * @private
     */
    autoExpandColumn: 'name',

    /**
     * @private
     */
    initComponent: function () {
        this.recordPrefix = (this.hasAccountPrefix) ? 'account_' : '';

        this.recordClass = this.recordClass || Tine.Tinebase.Model.Account;
        this.groupRecordClass = this.groupRecordClass || Tine.Addressbook.Model.List;
        this.roleRecordClass = this.roleRecordClass || Tine.Tinebase.Model.Role;

        if (Tine.Tinebase.configManager.get('anyoneAccountDisabled')) {
            Tine.log.info('Tine.widgets.account.PickerGridPanel::initComponent() -> select anyone disabled in config');
            this.selectAnyone = false;
        }
        Tine.widgets.account.PickerGridPanel.superclass.initComponent.call(this);

        this.store.sort(this.recordPrefix + 'name');
    },

    /**
     * init top toolbar
     */
    initTbar: function() {
        this.accountTypeSelector = this.getAccountTypeSelector();

        var items = [this.getSearchCombo('user'), this.getSearchCombo('group'), this.getSearchCombo('role')];
        var combo = this.getSearchCombo(this.selectTypeDefault).show();
        combo.setDisabled(this.selectType === 'myself');

        this.comboPanel = new Ext.Panel({
            layout: 'hfit',
            border: false,
            items: items,
            columnWidth: 1
        });

        this.tbar = new Ext.Toolbar({
            items: [
                this.accountTypeSelector,
                this.comboPanel
            ],
            layout: 'column'
        });
    },

    /**
     * define actions
     *
     * @return {Ext.Action}
     */
    getAccountTypeSelector: function () {
        var userActionCfg = {
            text: i18n._('Search User'),
            scope: this,
            iconCls: 'tinebase-accounttype-user',
            handler: this.onSwitchCombo.createDelegate(this, ['contact', 'tinebase-accounttype-user'])
        };
        var groupActionCfg = {
            text: i18n._('Search Group'),
            scope: this,
            iconCls: 'tinebase-accounttype-group',
            handler: this.onSwitchCombo.createDelegate(this, ['group', 'tinebase-accounttype-group'])
        };
        var roleActionCfg = {
            text: i18n._('Search Role'),
            scope: this,
            iconCls: 'tinebase-accounttype-role',
            handler: this.onSwitchCombo.createDelegate(this, ['role', 'tinebase-accounttype-role'])
        };
        var anyoneActionCfg = {
            text: i18n._('Add Anyone'),
            scope: this,
            iconCls: 'tinebase-accounttype-addanyone',
            handler: this.onAddAnyone
        };
        var myselfActionCfg = {
            text: i18n._('Add Myself'),
            scope: this,
            iconCls: 'tinebase-accounttype-user',
            handler: this.onAddMyself.createDelegate(this)
        };

        // set items
        var items = [];

        switch (this.selectType) {
            case 'both':
                items = items.concat([userActionCfg, groupActionCfg]);
                if (this.selectRole) {
                    items.push(roleActionCfg)
                }
                if (this.selectAnyone) {
                    items.push(anyoneActionCfg);
                }
                break;
            case 'user':
                items = [userActionCfg];
                break;
            case 'group':
                items = [groupActionCfg];
                break;
            case 'myself':
                items = [myselfActionCfg];
                break;
        }

        if (this.selectType !== 'myself' && this.selectMyself === true) {
            items.push(myselfActionCfg);
        }

        // create action
        return new Ext.Action({
            width: 20,
            text: '',
            disabled: false,
            iconCls: (this.selectTypeDefault === 'user') ? 'tinebase-accounttype-user' : 'tinebase-accounttype-group',
            menu: new Ext.menu.Menu({
                items: items
            }),
            scope: this
        });
    },

    /**
     * add anyone to grid
     */
    onAddAnyone: function() {
        var recordData = (this.recordDefaults !== null) ? this.recordDefaults : {};
        recordData[this.recordPrefix + 'type'] = 'anyone';
        recordData[this.recordPrefix + 'name'] = i18n._('Anyone');
        recordData[this.recordPrefix + 'id'] = 0;
        var record = new this.recordClass(recordData, 0);

        // check if already in
        if (! this.store.getById(record.id)) {
            this.store.add([record]);
        }
    },

    onAddMyself: function () {
        var currentUser = Tine.Tinebase.registry.get('currentAccount'),
            record,
            recordData = (this.recordDefaults !== null) ? this.recordDefaults : {};

        // user record
        recordData[this.recordPrefix + 'id'] = currentUser.accountId;
        recordData[this.recordPrefix + 'type'] = 'user';
        recordData[this.recordPrefix + 'name'] = currentUser.accountDisplayName;
        recordData[this.recordPrefix + 'data'] = currentUser;


        record = new this.recordClass(recordData, currentUser.accountId);

        // check if already in
        if (! this.store.getById(record.id)) {
            this.store.add([record]);
        }
    },

    getSearchCombo: function(type) {
        type = type == 'user' ? 'contact' : type;
        var combo = this['get' + Ext.util.Format.capitalize(type) + 'SearchCombo']();

        // This combobox doesn't need a validator.
        combo.validator = function () {
            return true;
        };

        return combo;
    },

    /**
     * @return {Tine.Addressbook.SearchCombo}
     */
    getContactSearchCombo: function () {
        if (! this.contactSearchCombo) {
            this.contactSearchCombo = new Tine.Addressbook.SearchCombo({
                hidden: true,
                accountsStore: this.store,
                emptyText: i18n._('Search for users ...'),
                newRecordClass: this.recordClass,
                newRecordDefaults: this.recordDefaults,
                recordPrefix: this.recordPrefix,
                userOnly: true,
                onSelect: this.onAddRecordFromCombo,
                additionalFilters: (this.showHidden) ? [{field: 'showDisabled', operator: 'equals', value: true}] : []
            });
        }

        return this.contactSearchCombo;
    },

    /**
     * @return {Tine.Tinebase.widgets.form.RecordPickerComboBox}
     */
    getGroupSearchCombo: function () {
        if (! this.groupSearchCombo) {
            this.groupSearchCombo = new Tine.Tinebase.widgets.form.RecordPickerComboBox({
                hidden: true,
                accountsStore: this.store,
                blurOnSelect: true,
                recordClass: this.groupRecordClass,
                newRecordClass: this.recordClass,
                newRecordDefaults: this.recordDefaults,
                recordPrefix: this.recordPrefix,
                emptyText: i18n._('Search for groups ...'),
                onSelect: this.onAddRecordFromCombo
            });
        }

        return this.groupSearchCombo;
    },

    getRoleSearchCombo: function() {
        if (! this.roleSearchCombo) {
            this.roleSearchCombo = new Tine.Tinebase.widgets.form.RecordPickerComboBox({
                hidden: true,
                accountsStore: this.store,
                blurOnSelect: true,
                recordClass: this.roleRecordClass,
                newRecordClass: this.recordClass,
                newRecordDefaults: this.recordDefaults,
                recordPrefix: this.recordPrefix,
                emptyText: i18n._('Search for roles ...'),
                onSelect: this.onAddRecordFromCombo
            });
        }

        return this.roleSearchCombo;
    },

    /**
     * @return Ext.grid.ColumnModel
     * @private
     */
    getColumnModel: function () {
        if (! this.colModel) {
            this.colModel = new Ext.grid.ColumnModel({
                defaults: {
                    sortable: true
                },
                columns: [
                    {
                        id: 'name',
                        header: i18n._('Name'),
                        dataIndex: this.recordPrefix + 'name',
                        renderer: Tine.Tinebase.common.accountRenderer
                    }
                ].concat(this.configColumns)
            });
        }

        return this.colModel;
    },

    /**
     * @param {Record} recordToAdd
     *
     * TODO make reset work correctly -> show emptyText again
     */
    onAddRecordFromCombo: function (recordToAdd) {
        var recordData = {},
            record,
            type = String(recordToAdd.constructor.getMeta('modelName')).toLowerCase();

        // role record selected
        if (type == 'role') {
            recordData[this.recordPrefix + 'id'] = recordToAdd.data.id;
            recordData[this.recordPrefix + 'type'] = 'role';
            recordData[this.recordPrefix + 'name'] = recordToAdd.data.name;
            recordData[this.recordPrefix + 'data'] = recordToAdd.data;
        }
        // account record selected
        else if (recordToAdd.data.account_id) {
            // user account record
            recordData[this.recordPrefix + 'id'] = recordToAdd.data.account_id;
            recordData[this.recordPrefix + 'type'] = 'user';
            recordData[this.recordPrefix + 'name'] = recordToAdd.data.n_fileas;
            recordData[this.recordPrefix + 'data'] = recordToAdd.data;
        }
        // group or addressbook list record selected
        else if (recordToAdd.data.group_id || recordToAdd.data.id) {
            recordData[this.recordPrefix + 'id'] = recordToAdd.data.group_id || recordToAdd.data.id;
            recordData[this.recordPrefix + 'type'] = 'group';
            recordData[this.recordPrefix + 'name'] = recordToAdd.data.name;
            recordData[this.recordPrefix + 'data'] = recordToAdd.data;
        }

        record = new this.newRecordClass(Ext.applyIf(recordData, this.newRecordDefaults), recordData[this.recordPrefix + 'id']);

        // check if already in
        if (! this.accountsStore.getById(record.id)) {
            this.accountsStore.add([record]);
        }
        this.collapse();
        this.clearValue();
        this.reset();
    },

    /**
     *
     * @param {String} show
     * @param {String} iconCls
     *
     */
    onSwitchCombo: function (show, iconCls) {
        Ext.each(['contact', 'group', 'role'], function(type) {
            this.getSearchCombo(type).setVisible(show == type);
        }, this);

        this.getSearchCombo(show).setWidth('auto');
        this.accountTypeSelector.setIconClass(iconCls);

    }
});
Ext.reg('tinerecordpickergrid', Tine.widgets.account.PickerGridPanel);


/***/ }),
/* 1153 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2014 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.widgets', 'Tine.widgets.account');

/**
 * @namespace   Tine.widgets.account
 * @class       Tine.widgets.account.ChangeAccountAction
 * @extends     Ext.Action
 */
Tine.widgets.account.ChangeAccountAction = function(config) {
    config.text = config.text ? config.text : i18n._('Change user account');
    config.iconCls = 'tinebase-accounttype-group';
    config.tooltip = i18n._('Switch to another user\'s account');
    
    config.handler = this.handleClick.createDelegate(this);
    Ext.apply(this, config);
    
    Tine.widgets.account.ChangeAccountAction.superclass.constructor.call(this, config);
};

Ext.extend(Tine.widgets.account.ChangeAccountAction, Ext.Action, {
    
    loadMask: null,
    returnToOriginalUser: false,
    
    getFormItems: function() {
        var roleChangeAllowed = Tine.Tinebase.registry.get("config").roleChangeAllowed.value,
            currentAccountName = Tine.Tinebase.registry.get('currentAccount').accountLoginName,
            store = [];
            
        Tine.log.debug(roleChangeAllowed);
        
        Ext.each(roleChangeAllowed[currentAccountName], function(account) {
            store.push([account, account]);
        });
        
        this.accountSelect = new Ext.form.ComboBox({
            hideLabel: true,
            anchor: '100%',
            app: this.app,
            forceSelection: true,
            store: store,
            listeners: {
                scope: this,
                render: function(field) {
                    field.focus(false, 500);
                },
                select: function() {
                    this.okButton.setDisabled(false);
                    // TODO submit on select?
                    //this.onOk();
                }
            }
        });
        
        return [{
            xtype: 'label',
            text: i18n._('Switch to this user account:')
        }, this.accountSelect
        ];
    },
    
    handleClick: function() {
        
        if (this.returnToOriginalUser) {
            this.onOk();
            return;
        }
        
        this.okButton = new Ext.Button({
            text: i18n._('Ok'),
            minWidth: 70,
            scope: this,
            handler: this.onOk,
            disabled: true,
            iconCls: 'action_saveAndClose'
        });
        
        this.win = Tine.WindowFactory.getWindow({
            layout: 'fit',
            width: 300,
            height: 150,
            padding: '5px',
            modal: true,
            title: i18n._('Select Account'),
            items: [{
                xtype: 'form',
                buttonAlign: 'right',
                padding: '5px',
                items: this.getFormItems(),
                buttons: [{
                    text: i18n._('Cancel'),
                    minWidth: 70,
                    scope: this,
                    handler: this.onCancel,
                    iconCls: 'action_cancel'
                }, this.okButton]
            }]
        });
    },
    
    onCancel: function() {
        this.win.close();
    },
    
    onOk: function() {
        if (this.win) {
            this.loadMask = new Ext.LoadMask(this.win.getEl(), {msg: i18n._('Changing user account ...')});
            this.loadMask.show();
        }
        
        var accountToSelect = this.returnToOriginalUser ? null : this.accountSelect.getValue();
        Tine.Tinebase.changeUserAccount(accountToSelect, this.onSuccess.createDelegate(this));
    },
    
    onSuccess: function() {
        Tine.Tinebase.common.reload({});
    }
});


/***/ }),
/* 1154 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets', 'Tine.widgets.container');

/**
 * Container select ComboBox widget
 * 
 * @namespace   Tine.widgets.container
 * @class       Tine.widgets.container.SelectionComboBox
 * @extends     Ext.form.ComboBox
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.widgets.container.SelectionComboBox = Ext.extend(Ext.form.ComboBox, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     */
    app: null,
    /**
     * @cfg {Boolean} allowNodeSelect
     */
    allowNodeSelect: false,

    allowToplevelNodeSelect: true,

    /**
     * @cfg {array}
     * default container
     */
    defaultContainer: false,
    /**
     * @cfg {Number} how many chars of the containername to display
     */
    displayLength: 25,
    /**
     * @property {Object} currently displayed container
     */
    selectedContainer: null,
    /**
     * @cfg {Number} list width
     */    
    listWidth: 400,
    /**
     * @cfg {string} containerName
     * name of container (singular)
     */
    containerName: 'container',
    /**
     * @cfg {string} containersName
     * name of container (plural)
     */
    containersName: 'containers',
    /**
     * @cfg {Boolean} hideTrigger2
     */
    hideTrigger2: true,
    /**
     * @cfg {String} startPath a container path to start with
     * possible values are: '/', '/personal/someAccountId', '/shared' (defaults to '/')
     * 
     * NOTE: container paths could not express tree paths .../otherUsers!
     */
    startPath: '/',
    /**
     * @cfg {Tine.data.Record} recordClass
     */
    recordClass: null,
    /**
     * @cfg {Array} requiredGrants
     * grants which are required to select leaf node(s)
     */
    requiredGrants: null,
    
    /**
     * @cfg {String} requiredGrant (legacy - should not be used any more)
     * grants which is required to select leaf node(s)
     */
    requiredGrant: null,
    
    /**
     *  @cfg {Number} trigger2width
     */
    trigger2width: 100,
    
    // private
    allowBlank: false,
    triggerAction: 'all',
    forceAll: true,
    lazyInit: true,
    editable: false,
    clearFilterOnReset: false,
    
    stateful: true,
    stateEvents: ['select'],
    
    mode: 'remote',
    valueField: 'id',
    displayField: 'name',
    treePanelClass: Tine.widgets.container.TreePanel,
    
    /**
     * is set to true if subpanels (selectionDialog) are active
     * useful in QuickAddGrid
     * @type Boolean
     */
    hasFocusedSubPanels: null,

    /**
     * @private
     */
    initComponent: function() {
        // autoinit config
        this.appName = ! this.appName && this.recordClass ? this.recordClass.getAppName() : this.appName;
        this.containerName = this.containerName == 'container' && this.recordClass ? this.recordClass.getContainerName() : this.containerName;
        this.containersName = this.containersName == 'containers' && this.recordClass ? this.recordClass.getContainersName() : this.containersName;

        // init state
        if (this.stateful && !this.stateId) {
            if (! this.recordClass) {
                this.stateful = false;
            } else {
                this.stateId = this.recordClass.getMeta('appName') + '-tinebase-widgets-container-selectcombo-' + this.recordClass.getMeta('modelName');
            }
        }

        // legacy handling for requiredGrant
        if(this.requiredGrant && ! this.requiredGrants) {
            this.requiredGrants = [this.requiredGrant];
        } else if (! this.requiredGrant && ! this.requiredGrants) {
            // set default required Grants
            this.requiredGrants = ['readGrant'];
        }

        // no state saving for startPath != /
        this.on('beforestatesave', function() {return this.startPath === '/';}, this);
        
        this.initStore();
        
        this.otherRecord = new Tine.Tinebase.Model.Container({id: 'other', name: String.format(i18n._('choose other {0}...'), this.containerName)}, 'other');
        this.store.add(this.otherRecord);
        
        this.emptyText = String.format(i18n._('Select a {0}'), this.containerName);
        
        // init triggers (needs to be done before standard initTrigger template fn)
        if (! this.hideTrigger2) {
            if (this.triggerClass == 'x-form-arrow-trigger') {
                this.triggerClass = 'x-form-arrow-trigger-rectangle';
            }
            
            this.triggerConfig = {
                tag:'span', cls:'x-form-twin-triggers', cn:[
                {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.triggerClass},
                {tag:'span', cls:'tw-containerselect-trigger2', cn:[
                    {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger tw-containerselect-trigger2-bg"},
                    {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger tw-containerselect-trigger2"},
                    {tag: "div", style: {position: 'absolute', top: 0, left: '5px'}}
                ]}
            ]};
            
        }

        // autoconfig app
        if (! this.app && this.appName) {
            this.app = Tine.Tinebase.appMgr.get(this.appName);
        }
        if (! this.app && this.recordClass) {
            this.app = Tine.Tinebase.appMgr.get(this.recordClass.getMeta('appName'));
        }
        if (this.app && ! this.appName) {
            this.appName = this.app.appName;
        }

        this.recents = {};

        Tine.widgets.container.SelectionComboBox.superclass.initComponent.call(this);
        
        if (this.defaultContainer) {
            this.selectedContainer = this.defaultContainer;
            this.value = this.defaultContainer.name;
        }
        this.on('blur', function() {
            if(this.hasFocusedSubPanels) {
                return false;
            }
        }, this);
    },
    
    /**
     * @private
     */
    initStore: function() {
        var state = this.stateful ? Ext.state.Manager.get(this.stateId) : null;
        var recentsData = state && state.recentsData || [];

        this.store = new Ext.data.JsonStore({
            id: 'id',
            data: {results: recentsData},
            remoteSort: false,
            fields: Tine.Tinebase.Model.Container,
            root: 'results',
            totalProperty: 'totalcount',
            listeners: {
                beforeload: this.onBeforeLoad.createDelegate(this),
                load: this.onStoreLoad.createDelegate(this)
            }
        });
        this.setStoreFilter();
    },
    
    initTrigger : function(){
        if (! this.hideTrigger2) {
            var t1 = this.trigger.first();
            var t2 = this.trigger.last();
            this.trigger2 = t2;
            
            t1.on("click", this.onTriggerClick, this, {preventDefault:true});
            t2.on("click", this.onTrigger2Click, this, {preventDefault:true});
            
            t1.addClassOnOver('x-form-trigger-over');
            t1.addClassOnClick('x-form-trigger-click');
            
            t2.addClassOnOver('x-form-trigger-over');
            t2.addClassOnClick('x-form-trigger-click');
            
            
        } else {
            Tine.widgets.container.SelectionComboBox.superclass.initTrigger.call(this);
        }
    },
    
    manageRecents: function(recent) {
        recent.set('dtselect', new Date().getTime());
        
        this.store.remove(this.otherRecord);
        this.store.clearFilter();
        this.store.sort('dtselect', 'DESC');
        
        // keep 10 containers and the nodes in betwwen
        var containerKeepCount = 0;
        this.store.each(function(record) {
            if (containerKeepCount < 10) {
                if (! record.get('is_container_node')) {
                    containerKeepCount += 1;
                }
                return;
            }
            this.store.remove(record);
        }, this);
        this.setStoreFilter();
        this.store.add(this.otherRecord);
    },
    
    /**
     * prepare params for remote search (this.startPath == /personal/*
     * 
     * @param {} store
     * @param {} options
     */
    onBeforeLoad: function(store, options) {
        options.params = {
            method: 'Tinebase_Container.searchContainers',
            filter: [
                {field: 'application_id', operator: 'equals', value: this.app.id },
            ]
        };
        if (this.recordClass) {
            options.params.filter.push(
                {field: 'model', operator: 'equals', value: this.recordClass.getMeta('phpClassName')}
            );
        }

        if (Tine.Tinebase.container.pathIsPersonalNode(this.startPath)) {
            // direct search
            options.params.filter.push(
                {field: 'type',     operator: 'equals', value: Tine.Tinebase.container.TYPE_PERSONAL},
                {field: 'owner_id', operator: 'equals', value: Tine.Tinebase.container.pathIsPersonalNode(this.startPath)}
            );
        } else {
            // validate recents
            this.recents = {};
            this.store.each(function(r) {
                if (r != this.otherRecord) {
                    this.recents[r.id] = r.get('dtselect');
                }
            }, this);

            options.params.filter.push(
                {field: 'id',       operator: 'in',     value: Object.keys(this.recents)}
            );
        }
    },

    onStoreLoad: function() {
        if (! this.store) return;

        if (! Tine.Tinebase.container.pathIsPersonalNode(this.startPath)) {
            this.store.each(function(r) {
                r.set('dtselect', this.recents[r.id]);
            }, this);
            this.store.sort('dtselect', 'DESC');
            this.store.add(this.otherRecord);
        }
    },

    /**
     * filter store according to this.startPath and this.allowNodeSelect
     * 
     * NOTE: If this.startPath != '/' resents are not used as we force remote loads,
     *       thus we don't need to filter in this case!
     */
    setStoreFilter: function() {
        this.store.clearFilter();
        this.store.sort('dtselect', 'DESC');
        
        var skipBoundary = this.store.getAt(Math.max(this.store.getCount(), 10) -1);
        var dtselectMin = skipBoundary ? skipBoundary.get('dtselect') : -1;
        
        this.store.filterBy(function(record) {
            var keep = (this.allowNodeSelect || !record.get('is_container_node')) && record.get('dtselect') > dtselectMin;
            return keep;
        }, this);
    },
    
    setTrigger2Text: function(text) {
        var trigger2 = this.trigger.last().last().update(text);
    },
    
    setTrigger2Disabled: function(bool) {
        if (bool) {
            this.trigger2.setOpacity(0.5);
            this.trigger2.un("click", this.onTrigger2Click, this, {preventDefault:true});
        } else {
            this.trigger2.setOpacity(1);
            this.trigger2.on("click", this.onTrigger2Click, this, {preventDefault:true});
        }
    },
    
    getTrigger2: function() {
        return this.trigger2;
    },
    
    onTrigger2Click: Ext.emptyFn,
    
    // private: only blur if dialog is closed
    onBlur: function() {
        if (!this.dlg) {
            return Tine.widgets.container.SelectionComboBox.superclass.onBlur.apply(this, arguments);
        }
    },
    
    onSelect: function(record, index) {
        this.hasFocusedSubPanels = true;
        if (record == this.otherRecord) {
            this.onChoseOther();
        } else {
            this.manageRecents(record);
            Tine.widgets.container.SelectionComboBox.superclass.onSelect.apply(this, arguments);
        }
    },
    
    /**
     * @private
     */
    onChoseOther: function() {
        this.collapse();
        this.dlg = new Tine.widgets.container.SelectionDialog({
            recordClass: this.recordClass,
            allowNodeSelect: this.allowNodeSelect,
            allowToplevelNodeSelect: this.allowToplevelNodeSelect,
            requiredGrants: this.requiredGrants,
            treePanelClass: this.treePanelClass
        });

        this.dlg.on('select', function(d, node) {
            this.hasFocusedSubPanels = false;
            var container = this.setValue(node.attributes.container);
            this.manageRecents(container);
            this.fireEvent('select', this, node.attributes.container);

            if (this.blurOnSelect) {
                this.fireEvent('blur', this);
            }
        }, this);
    },
    
    /**
     * @private
     */
    getValue: function(){
        return (this.selectedContainer !== null) ? this.selectedContainer.id : '';
    },
    
    /**
     * @private
     */
    setValue: function(container) {
        
        if (! container) {
            return;
        }

        if (container.hasOwnProperty('get') && Ext.isFunction(container.get)) {
            // container is a record -> already in store -> nothing to do
        } else if (this.store.getById(container)) {
            // store already has a record of this container
            container = this.store.getById(container);
            
        } else if (container.path || container.id) {
            if (container.path && this.store.findExact('path', container.path) >= 0) {
                // store already has a record of this container -> refresh
                this.store.remove(this.store.getAt(this.store.findExact('path', container.path)));
            }

            // ignore server name for node 'My containers'
            if (container.path && container.path === Tine.Tinebase.container.getMyNodePath()) {
                container.name = null;
            }
            container.name = container.name || Tine.Tinebase.container.path2name(container.path, this.containerName, this.containersName);
            container.id = container.id ||container.path;
            
            container = new Tine.Tinebase.Model.Container(container, container.id);
            
            this.store.add(container);
        } else {
            // reject container
            return this;
        }

        if (Ext.isObject(container.get('name'))) {
            // sanitize name for display
            container.set('name', container.get('name').name);
        }

        container.set('is_container_node', !!!Tine.Tinebase.container.pathIsContainer(container.get('path')));
        this.selectedContainer = container.data;
        
        // make sure other is _last_ entry in list
        this.store.remove(this.otherRecord);
        this.store.add(this.otherRecord);

        Tine.widgets.container.SelectionComboBox.superclass.setValue.call(this, container.id);
        
        if (container.account_grants) {
            this.setDisabled(! container.account_grants.deleteGrant);
        }
        
        if (this.qtip) {
            this.qtip.remove();
        }
        
        return container;
    },
    
    /**
     * Resets the current field value to the originally loaded value and clears any validation messages.
     * See {@link Ext.form.BasicForm}.{@link Ext.form.BasicForm#trackResetOnLoad trackResetOnLoad}
     */
    reset : function() {
        this.supr().setValue(this.originalValue);
        this.supr().reset.call(this);
    },
    
    applyState: Ext.emptyFn,
    
    /**
     * @private
     */
    getState: function() {
        var recentsData = [];
        this.store.clearFilter();
        this.store.remove(this.otherRecord);
        
        this.store.each(function(container) {
            var data = Ext.copyTo({}, container.data, Tine.Tinebase.Model.Container.getFieldNames());
            recentsData.push(data);
        }, this);
        
        this.setStoreFilter();
        this.store.add(this.otherRecord);
        
        return {
            recentsData : recentsData
        };
    }
});
Ext.reg('tinewidgetscontainerselectcombo', Tine.widgets.container.SelectionComboBox);

Tine.widgets.form.RecordPickerManager.register('Tinebase', 'Container', Tine.widgets.container.SelectionComboBox);


/***/ }),
/* 1155 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets', 'Tine.widgets.container');

/**
 * @namespace Tine.widgets.container
 * @class Tine.widgets.container.SelectionDialog
 * @extends Ext.Component
 *
 * This widget shows a modal container selection dialog
 */
Tine.widgets.container.SelectionDialog = Ext.extend(Ext.Component, {
    /**
     * @cfg {Boolean} allowNodeSelect
     */
    allowNodeSelect: false,
    /**
     * @cfg {Boolean} allowToplevelNodeSelect
     */
    allowToplevelNodeSelect: true,
    /**
     * @cfg {Tine.data.Record} recordClass
     */
    recordClass: false,
    /**
     * @cfg {?} defaultContainer
     */
    defaultContainer: null,
    /**
     * @cfg {string}
     * title of dialog
     */
    title: null,
    /**
     * @cfg {Number}
     */
    windowHeight: 400,
    /**
     * @property {Ext.Window}
     */
    win: null,
    /**
     * @property {Ext.tree.TreePanel}
     */
    tree: null,
    /**
     * @cfg {Array} requiredGrants
     * grants which are required to select leaf node(s)
     */
    requiredGrants: ['readGrant'],

    treePanelClass: null,

    allowNonLeafSelection: false,

    /**
     * @private
     */
    initComponent: function(){
        Tine.widgets.container.SelectionDialog.superclass.initComponent.call(this);

        var containerName = this.recordClass ? this.recordClass.getContainerName() : i18n._('Container');
        this.title = this.title ? this.title : String.format(i18n._('please select a {0}'), containerName);

        this.cancelAction = new Ext.Action({
            text: i18n._('Cancel'),
            iconCls: 'action_cancel',
            minWidth: 70,
            handler: this.onCancel,
            scope: this
        });

        this.okAction = new Ext.Action({
            disabled: true,
            text: i18n._('Ok'),
            iconCls: 'action_saveAndClose',
            minWidth: 70,
            handler: this.onOk,
            scope: this
        });

        // adjust window height
        if (Ext.getBody().getHeight(true) * 0.7 < this.windowHeight) {
            this.windowHeight = Ext.getBody().getHeight(true) * 0.7;
        }

        this.initTree();

        this.win = Tine.WindowFactory.getWindow({
            title: this.title,
            closeAction: 'close',
            modal: true,
            width: 375,
            height: this.windowHeight,
            minWidth: 375,
            minHeight: this.windowHeight,
            layout: 'fit',
            plain: true,
            bodyStyle: 'padding:5px;',
            buttonAlign: 'right',

            buttons: [
                this.cancelAction,
                this.okAction
            ],

            items: [ this.tree ]
        });
    },

    initTree: function() {
        this.treePanelClass = this.treePanelClass || Tine.widgets.container.TreePanel;

        this.tree = new this.treePanelClass({
            recordClass: this.recordClass,
            allowMultiSelection: false,
            defaultContainer: this.defaultContainer || this.TriggerField ? this.TriggerField.defaultContainer : null,
            requiredGrants: this.requiredGrants,
            hasContextMenu: false
        });

        this.tree.on('click', this.onTreeNodeClick, this);
        this.tree.on('dblclick', this.onTreeNoceDblClick, this);
    },

    /**
     * @private
     */
    onTreeNodeClick: function(node) {

        var disable = ! (node.leaf
            || (this.allowNodeSelect
                    // TODO create isTopLevelNode() in Tine.Tinebase.container
                && (this.allowToplevelNodeSelect
                    || node.attributes
                    && (
                        (node.attributes.path.match(/^\/personal/) && node.attributes.path.split("/").length > 3)
                        || (node.attributes.path.match(/^\/other/) && node.attributes.path.split("/").length > 3)
                        || (node.attributes.path.match(/^\/shared/) && node.attributes.path.split("/").length > 2)
                    )
                )
            )
        );

        (function() {
            if (this.requiredGrants) {
                var selectedContainer = this.tree.getSelectedContainer(this.requiredGrants, false, true);
                disable = !selectedContainer;
            }
            this.okAction.setDisabled(disable);

        }).defer(100, this);

        if (! node.leaf ) {
            node.expand();
        }
    },

    /**
     * @private
     */
    onTreeNoceDblClick: function(node) {
        if (! this.okAction.isDisabled()) {
            this.onOk();
        }
    },

    /**
     * @private
     */
    onCancel: function() {
        this.onClose();
    },

    /**
     * @private
     */
    onClose: function() {
        this.win.close();
    },

    /**
     * @private
     */
    onOk: function() {
        var  node = this.tree.getSelectionModel().getSelectedNode();
        if (node) {
            if (this.fireEvent('select', this, node) !== false) {
                this.onClose();
            }
        }
    }
});


/***/ }),
/* 1156 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2011-2014 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets', 'Tine.widgets.container');

/**
 * render the CalDAV Url into property panel of containers
 * 
 * @class   Tine.widgets.container.CalDAVContainerPropertiesHookField
 * @extends Ext.form.TextField
 */
Tine.widgets.container.CalDAVContainerPropertiesHookField = Ext.extend(Ext.form.TextField, {

    anchor: '100%',
    readOnly: true,
    
    /**
     * @private
     */
    initComponent: function() {
        this.on('added', this.onContainerAdded, this);

        Tine.widgets.container.CalDAVContainerPropertiesHookField.superclass.initComponent.call(this);
    },
    
    /**
     * @private
     */
    onContainerAdded: function() {
        this.app = Tine.Tinebase.appMgr.get(this.appName);
        this.fieldLabel = i18n._('CalDAV URL');
        
        this.propertiesDialog = this.findParentBy(function(p) {return !! p.grantContainer});
        this.grantContainer = this.propertiesDialog.grantContainer;
        
        if (this.grantContainer.application_id && this.grantContainer.application_id.name) {
            this.hasCalDAVSupport = (this.grantContainer.application_id.name == this.appName);
        } else {
            this.hasCalDAVSupport = this.grantContainer.application_id === this.app.id;
        }
        
        this.hidden = ! this.hasCalDAVSupport;

        // calDAV URL
        this.value = [
            Tine.Tinebase.common.getUrl('full').replace(/\/$/, ''), // might have an trailing /, we can safely remove it!
            '/calendars/',
            Tine.Tinebase.registry.get('currentAccount').contact_id,
            '/',
            this.grantContainer.id
        ].join('');
    }
});


/***/ }),
/* 1157 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2011-2015 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets', 'Tine.widgets.container');

/**
 * Container Grants grid
 * 
 * @namespace   Tine.widgets.container
 * @class       Tine.widgets.container.GrantsDialog
 * @extends     Tine.widgets.dialog.EditDialog
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2011 Metaways Infosystems GmbH (http://www.metaways.de)
 * @constructor
 * @param {Object} config The configuration options.
 */
Tine.widgets.container.GrantsGrid = Ext.extend(Tine.widgets.account.PickerGridPanel, {

    /**
     * @cfg {Array} data of Tine.Tinebase.Model.Container
     * Container to manage grants for
     */
    grantContainer: null,
    
    /**
     * @cfg {Boolean}
     * always show the admin grant (default: false)
     */
    alwaysShowAdminGrant: false,
    
    /**
     * Tine.widgets.account.PickerGridPanel config values
     */
    selectType: 'both',
    selectTypeDefault: 'group',
    selectRole: true,
    hasAccountPrefix: true,

    /**
     * canonical name
     * @cfg {String} canonicalName
     */
    canonicalName: 'GrantsGrid',

    readGrantTitle: 'Read', // i18n._('Read')
    readGrantDescription: 'The grant to read records of this container', // i18n._('The grant to read records of this container')
    addGrantTitle: 'Add', // i18n._('Add')
    addGrantDescription: 'The grant to add records to this container', // i18n._('The grant to add records to this container')
    editGrantTitle: 'Edit', // i18n._('Edit')
    editGrantDescription: 'The grant to edit records in this container', // i18n._('The grant to edit records in this container')
    deleteGrantTitle: 'Delete', // i18n._('Delete')
    deleteGrantDescription: 'The grant to delete records in this container', // i18n._('The grant to delete records in this container')
    exportGrantTitle: 'Export', // i18n._('Export')
    exportGrantDescription: 'The grant to export records from this container', // i18n._('The grant to export records from this container')
    syncGrantTitle: 'Sync', // i18n._('Sync')
    syncGrantDescription: 'The grant to synchronise records with this container', // i18n._('The grant to synchronise records with this container')
    adminGrantTitle: 'Admin', // i18n._('Admin')
    adminGrantDescription: 'The grant to administrate this container', // i18n._('The grant to administrate this container')
    
    /**
     * @private
     */
    initComponent: function () {
        if (! this.recordDefaults) {
            this.recordDefaults = {
                readGrant: true,
                exportGrant: true,
                syncGrant: true
            };
        }

        if (! this.recordClass) {
            this.recordClass = Tine.Tinebase.container.getGrantsModel(this.grantContainer);
        }

        if (! this.app) {
            this.app = Tine.Tinebase.appMgr.get(this.recordClass.getMeta('appName'));
        }

        this.initColumns();

        if (! this.store) {
            this.store = new Ext.data.JsonStore({
                root: 'results',
                totalProperty: 'totalcount',
                id: 'account_id',
                fields: this.recordClass
            });
        }
        
        Tine.widgets.container.GrantsGrid.superclass.initComponent.call(this);
        
        this.getStore().on('update', this.onStoreUpdate, this);
        
        this.getStore().on('load', function(store) {
            store.each(function(r) {this.onStoreUpdate(store, r)}, this);
        }, this);
    },

    onStoreUpdate: function(store, record, operation) {
        if (this.alwaysShowAdminGrant || (this.grantContainer && this.grantContainer.type == 'shared')) {
            if (record.get('adminGrant')) {
                // set all grants and mask other checkboxes
                Ext.each(this.getColumnModel().columns, function(col, colIdx) {
                    var matches;
                    if (col.dataIndex && (matches = col.dataIndex.match(/^([a-z]+)Grant$/)) && matches[1] != 'admin') {
                        record.set(col.dataIndex, true);
                    }
                }, this);
                
            } else {
                // make sure grants are not masked
            }
        }
    },
    
    /**
     * init grid columns
     */
    initColumns: function() {
        var _ = window.lodash,
            me = this,
            getTranslation = function(string) {
                var translation = me.app.i18n._hidden(string);

                return translation != string ? translation : window.i18n._hidden(string);
            },
            grants = _.reduce(this.recordClass.getFieldNames(), function(grants, name) {
                var isGrant = name.match(/(.+)Grant$/),
                    grant = isGrant ? isGrant[1] : false;

                if (grant && ['freebusy', 'private', 'download', 'publish', 'admin'].indexOf(grant) < 0 ) {
                    grants.push(grant);
                }

                if (grant == 'admin' && me.recordClass.hasField('admin') && me.grantContainer && me.grantContainer.type == 'shared') {
                    grants.push(grant);
                }

                return grants;
            }, []);

        // manage runtime depended grants
        // NOTE: this could also be solved withe the useGrant method!
        if (this.grantContainer) {
            grants = Tine.widgets.container.GrantsManager.getByContainer(this.grantContainer);
        }

        if (this.alwaysShowAdminGrant && this.recordClass.hasField('admin')) {
            grants.push('admin');
        }
        
        this.configColumns = [];
        
        Ext.each(grants, function(grant) {
            var header = getTranslation(this[grant + 'GrantTitle']);
            this.configColumns.push(new Ext.ux.grid.CheckColumn({
                id: grant,
                header: String(header).replace(/\s+/, '<br>'),
                tooltip: '<b>' + header + '</b><br>' + getTranslation(this[grant + 'GrantDescription']),
                dataIndex: grant + 'Grant',
                width: 55,
                onBeforeCheck: this.onBeforeCheck.createDelegate(this)
            }));
        }, this);
    },

    useGrant: function(grant, use) {
        var cm = this.getColumnModel(),
            findFn = function(o) { return o.id == grant;},
            current = lodash.find(cm.config, findFn),
            config = lodash.find(this.configColumns, findFn);

        if (use && ! current) {
            cm.setConfig(cm.config.push(config));
        } else if (! use && current) {
            cm.setConfig(lodash.filter(cm.config, lodash.negate(findFn)));
        }
    },

    onBeforeCheck: function(checkbox, record) {
        return !this.readOnly;
    }
});

/**
 * grants by model registry
 *
 * @type {{defaultGrants, getByContainer, register}}
 */
Tine.widgets.container.GrantsManager = function() {
    /**
     * contains Array of grants or a function that returns the grants depending on some condition
     *
     * @type {Object}
     */
    var grantsForModels = {};

    return {
        /**
         * default grants
         *
         * @return Array
         */
        defaultGrants: function() {
            return ['read', 'add', 'edit', 'delete', 'export', 'sync'];
        },

        /**
         * get container grants for specific container
         *
         * @param {Tine.Tinebase.Model.Container} container
         * @return Array
         */
        getByContainer: function(container) {
            var modelName = container.model || container,
                grants  = grantsForModels[modelName]
                    ? (Ext.isFunction(grantsForModels[modelName]) ? grantsForModels[modelName](container) : grantsForModels[modelName])
                    : this.defaultGrants();

            return grants;
        },

        /**
         * register grants or grants function for given model
         *
         * @param {Record/String} modelName
         * @param {Array|Function} grants
         */
        register: function(modelName, grantsOrFunction) {
            grantsForModels[modelName] = grantsOrFunction;
        },
    };
}();


/***/ }),
/* 1158 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets', 'Tine.widgets.container');

/**
 * Container Grants dialog
 * 
 * @namespace   Tine.widgets.container
 * @class       Tine.widgets.container.GrantsDialog
 * @extends     Tine.widgets.dialog.EditDialog
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 * @constructor
 * @param {Object} config The configuration options.
 */
Tine.widgets.container.GrantsDialog = Ext.extend(Tine.widgets.dialog.EditDialog, {
    
    /**
     * @cfg {Tine.Tinebase.container.models.container}
     * Container to manage grants for
     */
    grantContainer: null,
    
    /**
     * @cfg {string}
     * Name of container folders, e.g. Addressbook
     */
    containerName: null,
    
    /**
     * @private {Ext.data.JsonStore}
     */
    grantsStore: null,
    
    /**
     * @private
     */
    windowNamePrefix: 'ContainerGrantsWindow_',
    loadRecord: false,
    tbarItems: [],
    evalGrants: false,

    /**
     * @private
     */
    initComponent: function() {
        this.containerName = this.containerName ? this.containerName : i18n._('Folder');

        this.grantsGrid = new Tine.widgets.container.GrantsGrid({
            grantContainer: this.grantContainer
        });
        
        Ext.apply(this.grantsGrid.getStore(), {
            baseParams: {
                method: 'Tinebase_Container.getContainerGrants',
                containerId: this.grantContainer.id
            }
        });
        this.grantsGrid.getStore().load();
        
        Tine.widgets.container.GrantsDialog.superclass.initComponent.call(this);
    },
    
    /**
     * init record to edit
     * 
     * - overwritten: we don't have a record here 
     */
    initRecord: function() {
    },
    
    /**
     * returns dialog
     */
    getFormItems: function() {
        return this.grantsGrid;
    },
    
    /**
     * @private
     */
    onApplyChanges: function(closeWindow) {
        Ext.MessageBox.wait(i18n._('Please wait'), i18n._('Updating Grants'));
        
        var grants = [];
        this.grantsGrid.getStore().each(function(_record){
            grants.push(_record.data);
        });
        
              
        Ext.Ajax.request({
            params: {
                method: 'Tinebase_Container.setContainerGrants',
                containerId: this.grantContainer.id,
                grants: grants
            },
            scope: this,
            success: function(_result, _request){
                Ext.MessageBox.hide();
                if (closeWindow) {
                    this.purgeListeners();
                    this.window.close();
                    return;
                }
                var grants = Ext.util.JSON.decode(_result.responseText);
                this.grantsGrid.getStore().loadData(grants, false);
            },
            failure: function(response, options) {
                var responseText = Ext.util.JSON.decode(response.responseText);
                
                if (responseText.data.code == 505) {
                    Ext.Msg.show({
                       title:   i18n._('Error'),
                       msg:     i18n._('You are not allowed to remove all admins for this container!'),
                       icon:    Ext.MessageBox.ERROR,
                       buttons: Ext.Msg.OK
                    });
                    
                } else {
                    // call default exception handler
                    var exception = responseText.data ? responseText.data : responseText;
                    Tine.Tinebase.ExceptionHandler.handleRequestException(exception);
                }                
            }
        });
    }
});

/**
 * grants dialog popup / window
 */
Tine.widgets.container.GrantsDialog.openWindow = function (config) {
    var window = Tine.WindowFactory.getWindow({
        width: 700,
        height: 450,
        name: Tine.widgets.container.GrantsDialog.windowNamePrefix + Ext.id(),
        contentPanelConstructor: 'Tine.widgets.container.GrantsDialog',
        contentPanelConstructorConfig: config,
        modal: true
    });
    return window;
};


/***/ }),
/* 1159 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets', 'Tine.widgets.container');

/**
 * @namespace   Tine.widgets.container
 * @class       Tine.widgets.container.TreePanel
 * @extends     Ext.tree.TreePanel
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @param       {Object} config Configuration options
 * @description
 * <p>Utility class for generating container trees as used in the apps tree panel</p>
 * <p>This widget handles all container related actions like add/rename/delte and manager permissions<p>
 *<p>Example usage:</p>
<pre><code>
var taskPanel =  new Tine.containerTreePanel({
    app: Tine.Tinebase.appMgr.get('Tasks'),
    recordClass: Tine.Tasks.Model.Task
});
</code></pre>
 */
Tine.widgets.container.TreePanel = function(config) {
    Ext.apply(this, config);

    this.addEvents(
        /**
         * @event containeradded
         * Fires when a container was added
         * @param {container} the new container
         */
        'containeradd',
        /**
         * @event containerdelete
         * Fires when a container got deleted
         * @param {container} the deleted container
         */
        'containerdelete',
        /**
         * @event containerrename
         * Fires when a container got renamed
         * @param {container} the renamed container
         */
        'containerrename',
        /**
         * @event containerpermissionchange
         * Fires when a container got renamed
         * @param {container} the container whose permissions where changed
         */
        'containerpermissionchange',
        /**
         * @event containercolorset
         * Fires when a container color got changed
         * @param {container} the container whose color where changed
         */
        'containercolorset'
    );

    Tine.widgets.container.TreePanel.superclass.constructor.call(this);
};

Ext.extend(Tine.widgets.container.TreePanel, Ext.tree.TreePanel, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     */
    app: null,
    /**
     * @cfg {Boolean} allowMultiSelection (defaults to true)
     */
    allowMultiSelection: true,
    /**
     * @cfg {String} defaultContainerPath
     */
    defaultContainerPath: null,
    /**
     * @cfg {array} extraItems additional items to display under all
     */
    extraItems: null,
    /**
     * @cfg {String} filterMode one of:
     *   - gridFilter: hooks into the grids.store
     *   - filterToolbar: hooks into the filterToolbar (container filterModel required)
     */
    filterMode: 'gridFilter',
    /**
     * @cfg {Tine.data.Record} recordClass
     */
    recordClass: null,
    /**
     * @cfg {Array} requiredGrants
     * grants which are required to select leaf node(s)
     */
    requiredGrants: null,

    /**
     * @cfg {Boolean} useContainerColor
     * use container colors
     */
    useContainerColor: false,
    /**
     * @cfg {Boolean} useProperties
     * use container properties
     */
    useProperties: true,

    /**
     * @property {Object}
     * modelConfiguration of recordClass (if available)
     */
    modelConfiguration: null,

    /**
     * @cfg {String}
     * canonical name
     */
    canonicalName: 'ContainerTree',

    /**
     * Referenced grid panel
     */
    gridPanel: null,

    /**
     * TODO move fields to the right place
     *
     * @property {Array}
     */
    filtersToRemove: ['container_id', 'attender', 'path'],

    useArrows: true,
    border: false,
    autoScroll: true,
    enableDrop: true,
    ddGroup: 'containerDDGroup',
    hasPersonalContainer: true,
    hasContextMenu: true,

    /**
     * @fixme not needed => all events hand their events over!!!
     *
     * @property ctxNode holds treenode which got a contextmenu
     * @type Ext.tree.TreeNode
     */
    ctxNode: null,

    /**
     * No user interactions, menus etc. allowed except for browsing
     */
    readOnly: false,

    /**
     * init this treePanel
     */
    initComponent: function() {
        if (! this.appName && this.recordClass) {
            this.appName = this.recordClass.getMeta('appName');
        }
        if (! this.app) {
            this.app = Tine.Tinebase.appMgr.get(this.appName);
        }

        if (this.allowMultiSelection) {
            this.selModel = new Ext.tree.MultiSelectionModel({});
        }

        if (this.recordClass) {
            this.modelConfiguration = this.recordClass.getModelConfiguration();
        }

        if (this.modelConfiguration) {
            this.hasPersonalContainer = this.modelConfiguration.hasPersonalContainer !== false;
        }

        var containerName = this.recordClass ? this.recordClass.getContainerName() : 'container';
        var containersName = this.recordClass ? this.recordClass.getContainersName() : 'containers';

        //ngettext('container', 'containers', n);
        this.containerName = this.containerName || this.app.i18n.n_hidden(containerName, containersName, 1);
        this.containersName = this.containersName || this.app.i18n._hidden(containersName);

        this.loader = this.loader || new Tine.widgets.tree.Loader({
            getParams: this.onBeforeLoad.createDelegate(this),
            inspectCreateNode: this.onBeforeCreateNode.createDelegate(this)
        });

        this.loader.on('virtualNodesSelected', this.onVirtualNodesSelected.createDelegate(this));

        var extraItems = this.getExtraItems();
        this.root = this.getRoot(extraItems);
        if (!this.hasPersonalContainer && ! extraItems.length) {
            this.rootVisible = false;
        }

        if (!this.readOnly && !this.dropConfig) {
            // init drop zone
            this.dropConfig = {
                ddGroup: this.ddGroup || 'TreeDD',
                appendOnly: this.ddAppendOnly === true,
                /**
                 * @todo check acl!
                 */
                onNodeOver: function (n, dd, e, data) {
                    var node = n.node;

                    // auto node expand check
                    if (node.hasChildNodes() && !node.isExpanded()) {
                        this.queueExpand(node);
                    }
                    return node.attributes.allowDrop ? 'tinebase-tree-drop-move' : false;
                },
                isValidDropPoint: function (n, dd, e, data) {
                    return n.node.attributes.allowDrop;
                },
                completeDrop: Ext.emptyFn
            };
        }

        if (this.hasContextMenu) {
            this.initContextMenu();
        }

        this.getSelectionModel().on('beforeselect', this.onBeforeSelect, this);
        this.getSelectionModel().on('selectionchange', this.onSelectionChange, this);

        this.on('click', this.onClick, this);
        if (this.hasContextMenu) {
            this.on('contextmenu', this.onContextMenu, this);
        }

        if (!this.readOnly) {
            this.on('beforenodedrop', this.onBeforeNodeDrop, this);
            this.on('append', this.onAppendNode, this);
            this.on('beforecollapsenode', this.onBeforeCollapse, this);
        }

        Tine.widgets.container.TreePanel.superclass.initComponent.call(this);
    },

    /**
     * @param nodes
     */
    onVirtualNodesSelected: function (nodes) {
        this.suspendEvents();

        if (0 === nodes.length) {
            return;
        }


        var sm = this.getSelectionModel();

        if (sm && sm.selNodes) {
            sm.clearSelections(true);

            for (var i = 0; i < nodes.length; i++) {
                var node = nodes[i];

                if (sm.isSelected(node)) {
                    sm.lastSelNode = node;
                    continue;
                }

                sm.selNodes.push(node);
                sm.selMap[node.id] = node;
                sm.lastSelNode = node;
                node.ui.onSelectedChange(true);
            }
        }

        if (this.filterMode == 'filterToolbar' && this.filterPlugin) {
            this.onFilterChange();
        }
        
        this.resumeEvents();
    },

    /**
     * returns canonical path part
     * @returns {string}
     */
    getCanonicalPathSegment: function () {
        if (this.recordClass) {
            return [
                this.recordClass.getMeta('modelName'),
                this.canonicalName,
            ].join(Tine.Tinebase.CanonicalPath.separator);
        }
    },

    getRoot: function(extraItems)
    {
        return {
            path: '/',
            cls: 'tinebase-tree-hide-collapsetool',
            expanded: true,
            children: [{
                path: Tine.Tinebase.container.getMyNodePath(),
                id: 'personal',
                hidden: !this.hasPersonalContainer
            }, {
                path: '/shared',
                id: 'shared'
            }, {
                path: '/personal',
                id: 'otherUsers',
                hidden: !this.hasPersonalContainer
            }].concat(extraItems)
        };
    },

    /**
     * template fn for subclasses to set default path
     *
     * @return {String}
     */
    getDefaultContainerPath: function() {
        return this.defaultContainerPath || '/';
    },

    /**
     * template fn for subclasses to append extra items
     *
     * @return {Array}
     */
    getExtraItems: function() {
        return this.extraItems || [];
    },

    /**
     * returns a filter plugin to be used in a grid
     */
    getFilterPlugin: function() {
        if (!this.filterPlugin) {
            this.filterPlugin = new Tine.widgets.tree.FilterPlugin({
                treePanel: this
            });
        }

        return this.filterPlugin;
    },

    /**
     * returns object of selected container/filter or null/default
     *
     * @param {Array} [requiredGrants]
     * @param {Tine.Tinebase.Model.Container} [defaultContainer]
     * @param {Boolean} onlySingle use default if more than one container in selection
     * @return {Tine.Tinebase.Model.Container}
     */
    getSelectedContainer: function(requiredGrants, defaultContainer, onlySingle) {
        var container = defaultContainer,
            sm = this.getSelectionModel(),
            selection = typeof sm.getSelectedNodes == 'function' ? sm.getSelectedNodes() : [sm.getSelectedNode()];

        if (Ext.isArray(selection) && selection.length > 0 && (! onlySingle || selection.length === 1 || ! container)) {
            container = this.getContainerFromSelection(selection, requiredGrants) || container;
        }
        // postpone this as we don't get the whole container record here
//        else if (this.filterMode == 'filterToolbar' && this.filterPlugin) {
//            container = this.getContainerFromFilter() || container;
//        }

        return container;
    },

    /**
     * get container from selection
     *
     * @param {Array} selection
     * @param {Array} requiredGrants
     * @return {Tine.Tinebase.Model.Container}
     */
    getContainerFromSelection: function(selection, requiredGrants) {
        var result = null;

        Ext.each(selection, function(node) {
            if (node && Tine.Tinebase.container.pathIsContainer(node.attributes.container.path)) {
                if (! requiredGrants || this.hasGrant(node, requiredGrants)) {
                    result = node.attributes.container;
                    // take the first one
                    return false;
                }
            }
        }, this);

        return result;
    },

    /**
     * get container from filter toolbar
     *
     * @param {Array} requiredGrants
     * @return {Tine.Tinebase.Model.Container}
     *
     * TODO make this work -> atm we don't get the account grants here (why?)
     */
    getContainerFromFilter: function(requiredGrants) {
        var result = null;

        // check if single container is selected in filter toolbar 
        var ftb = this.filterPlugin.getGridPanel().filterToolbar,
            filterValue = null;

        ftb.filterStore.each(function(filter) {
            if (filter.get('field') == this.recordClass.getMeta('containerProperty')) {
                filterValue = filter.get('value');
                if (filter.get('operator') == 'equals') {
                    result = filterValue;
                } else if (filter.get('operator') == 'in' && filterValue.length == 1){
                    result = filterValue[0];
                }
                // take the first one
                return false;
            }
        }, this);

        return result;
    },

    /**
     * convert containerPath to treePath
     *
     * @param {String}  containerPath
     * @return {String} treePath
     */
    getTreePath: function(containerPath) {
        var treePath = '/' + this.getRootNode().id + (containerPath !== '/' ? containerPath : '');

        // replace personal with otherUsers if personal && ! personal/myaccountid
        var matches = containerPath.match(/^\/personal\/{0,1}([0-9a-z_\-]*)\/{0,1}/i);
        if (matches) {
            if (matches[1] != Tine.Tinebase.registry.get('currentAccount').accountId) {
                treePath = treePath.replace('personal', 'otherUsers');
            } else {
                treePath = treePath.replace('personal/'  + Tine.Tinebase.registry.get('currentAccount').accountId, 'personal');
            }
        }

        return treePath;
    },

    /**
     * checkes if user has requested grant for given container represented by a tree node
     *
     * @param {Ext.tree.TreeNode} node
     * @param {Array} grant
     * @return {}
     */
    hasGrant: function(node, grants) {
        var attr = node.attributes,
            condition = false;

        if(attr && attr.leaf) {
            condition = true;
            Ext.each(grants, function(grant) {
                condition = condition && attr.container.account_grants[grant];
            }, this);
        }

        return condition;
    },

    /**
     * @private
     * - select default path
     */
    afterRender: function() {
        Tine.widgets.container.TreePanel.superclass.afterRender.call(this);

        var defaultContainerPath = this.getDefaultContainerPath();

        if (defaultContainerPath && defaultContainerPath != '/') {
            var root = '/' + this.getRootNode().id;

            this.expand();

            // @TODO use getTreePath() when filemanager is fixed
            (function() {
                // no initial load triggering here
                this.getSelectionModel().suspendEvents();
                this.selectPath(root + defaultContainerPath);
                this.getSelectionModel().resumeEvents();
            }).defer(100, this);
        } else if (! this.hasPersonalContainer) {
            this.expandPath('/shared');
        }
    },

    /**
     * copy from Tine.Filemanager.NodeTreePanel
     * 
     * @todo: Maybe it makes sence to override expand path in extFixes? 
     * 
     * @param path
     * @param attr
     * @param callback
     */
    expandPath : function(path, attr, callback){
        if (! path.match(/^\/xnode-/)) {
            path = this.getTreePath(path);
        }

        var keys = path.split(this.pathSeparator);
        var curNode = this.root;
        var curPath = curNode.attributes.path;
        var index = 1;
        var f = function(){
            if(++index == keys.length){
                if(callback){
                    callback(true, curNode);
                }
                return;
            }

            if (index > 2) {
                var c = curNode.findChild('path', curPath + '/' + keys[index]);
            } else {
                var c = curNode.findChild('id', keys[index]);
            }
            if(!c){
                if(callback){
                    callback(false, curNode);
                }
                return;
            }
            curNode = c;
            curPath = c.attributes.path;
            c.expand(false, false, f);
        };
        curNode.expand(false, false, f);
    },
    
    /**
     * @private
     */
    initContextMenu: function() {

        this.contextMenuUserFolder = Tine.widgets.tree.ContextMenu.getMenu({
            nodeName: this.containerName,
            actions: ['add'],
            scope: this,
            backend: 'Tinebase_Container',
            backendModel: 'Container'
        });

        this.contextMenuSingleContainer = Tine.widgets.tree.ContextMenu.getMenu({
            nodeName: this.containerName,
            actions: ['delete', 'rename', 'grants'].concat(
                this.useProperties ? ['properties'] : []
            ).concat(
                this.useContainerColor ? ['changecolor'] : []
            ),
            scope: this,
            backend: 'Tinebase_Container',
            backendModel: 'Container'
        });

        this.contextMenuSingleContainerProperties = Tine.widgets.tree.ContextMenu.getMenu({
            nodeName: this.containerName,
            actions: ['properties'],
            scope: this,
            backend: 'Tinebase_Container',
            backendModel: 'Container'
        });
    },

    /**
     * called when node is appended to this tree
     */
    onAppendNode: function(tree, parent, appendedNode, idx) {
        if (appendedNode.leaf && this.hasGrant(appendedNode, this.requiredGrants)) {
            if (this.useContainerColor) {
                appendedNode.ui.render = appendedNode.ui.render.createSequence(function () {
                    this.colorNode = Ext.DomHelper.insertAfter(this.iconNode, {
                        tag: 'span',
                        html: '&nbsp;&#9673;&nbsp',
                        style: {color: appendedNode.attributes.container.color || '#808080'}
                    }, true);
                }, appendedNode.ui);
            }
        }
    },

    /**
     * expand automatically on node click
     *
     * @param {} node
     * @param {} e
     */
    onClick: function(node, e) {
        var sm = this.getSelectionModel(),
            selectedNode = sm.getSelectedNode();

        // NOTE: in single select mode, a node click on a selected node does not trigger 
        //       a selection change. We need to do this by hand here
        if (! this.allowMultiSelection && node == selectedNode) {
            this.onSelectionChange(sm, node);
        }

        node.expand();
    },

    /**
     * show context menu
     *
     * @param {} node
     * @param {} event
     */
    onContextMenu: function(node, event) {
        this.ctxNode = node;
        var container = node.attributes.container,
            path = container.path,
            owner;

        if (! Ext.isString(path)) {
            return;
        }

        event.stopPropagation();
        event.preventDefault();

        if (Tine.Tinebase.container.pathIsContainer(path)) {
            if (container.account_grants && container.account_grants.adminGrant) {
                this.contextMenuSingleContainer.showAt(event.getXY());
            } else {
                this.contextMenuSingleContainerProperties.showAt(event.getXY());
            }
        } else if (path.match(/^\/shared$/) && (Tine.Tinebase.common.hasRight('admin', this.app.appName) || Tine.Tinebase.common.hasRight('manage_shared_folders', this.app.appName))){
            this.contextMenuUserFolder.showAt(event.getXY());
        } else if (Tine.Tinebase.registry.get('currentAccount').accountId == Tine.Tinebase.container.pathIsPersonalNode(path)){
            this.contextMenuUserFolder.showAt(event.getXY());
        }
    },

    /**
     * adopt attr
     *
     * @param {Object} attr
     */
    onBeforeCreateNode: function(attr) {
        if (attr.accountDisplayName) {
            attr.name = attr.accountDisplayName;
            attr.path = '/personal/' + attr.accountId;
            attr.id = attr.accountId;
        }

        if (! attr.name && attr.path) {
            attr.name = Tine.Tinebase.container.path2name(attr.path, this.containerName, this.containersName);
        }

        if ('shared' === attr.id && !this.hasPersonalContainer) {
            attr.name = this.containersName;
        }
        
        Ext.applyIf(attr, {
            text: attr.name,
            qtip: attr.name,
            leaf: !!attr.account_grants,
            allowDrop: !!attr.account_grants && attr.account_grants.addGrant
        });

        attr.text = Tine.Tinebase.EncodingHelper.encode(attr.text);
        attr.qtip = Tine.Tinebase.EncodingHelper.encode(attr.qtip);

        // copy 'real' data to container space
        attr.container = Ext.copyTo({}, attr, Tine.Tinebase.Model.Container.getFieldNames());
    },

    /**
     * returns params for async request
     *
     * @param {Ext.tree.TreeNode} node
     * @return {Object}
     */
    onBeforeLoad: function(node) {
        var path = node.attributes.path;
        var type = Tine.Tinebase.container.path2type(path);
        var owner = Tine.Tinebase.container.pathIsPersonalNode(path);

        if (type === 'personal' && ! owner) {
            type = 'otherUsers';
        }

        var params = {
            method: 'Tinebase_Container.getContainer',
            application: this.app.appName,
            containerType: type,
            requiredGrants: this.requiredGrants,
            owner: owner
        };

        return params;
    },

    /**
     * permit selection of nodes with missing required grant
     *
     * @param {} sm
     * @param {} newSelection
     * @param {} oldSelection
     * @return {Boolean}
     */
    onBeforeSelect: function(sm, newSelection, oldSelection) {

        if (this.requiredGrant && newSelection.isLeaf()) {
            var accountGrants =  newSelection.attributes.container.account_grants || {};
            if (! accountGrants[this.requiredGrant]) {
                var message = '<b>' +String.format(i18n._("You are not allowed to select the {0} '{1}':"), this.containerName, newSelection.attributes.text) + '</b><br />' +
                              String.format(i18n._("{0} grant is required for desired action"), this.requiredGrant);
                Ext.Msg.alert(i18n._('Insufficient Grants'), message);
                return false;
            }
        }
    },

    /**
     * record got dropped on container node
     *
     * @param {Object} dropEvent
     * @private
     *
     * TODO use Ext.Direct
     */
    onBeforeNodeDrop: function(dropEvent) {
        var targetContainerId = dropEvent.target.id;

        // get selection filter from grid
        var sm = this.app.getMainScreen().getCenterPanel().getGrid().getSelectionModel();
        if (sm.getCount() === 0) {
            return false;
        }
        var filter = sm.getSelectionFilter();

        // move messages to folder
        Ext.Ajax.request({
            params: {
                method: 'Tinebase_Container.moveRecordsToContainer',
                targetContainerId: targetContainerId,
                filterData: filter,
                model: this.recordClass.getMeta('modelName'),
                applicationName: this.recordClass.getMeta('appName')
            },
            scope: this,
            success: function(result, request){
                // update grid
                this.app.getMainScreen().getCenterPanel().loadGridData();
            }
        });

        // prevent repair actions
        dropEvent.dropStatus = true;
        return true;
    },

    /**
     * require reload when node is collapsed
     */
    onBeforeCollapse: function(node) {
        // NOTE: we should somehow keep the state if user expands again -> seams hard
        // var selections = this.getSelectionModel().getSelectedNodes();

        this.getSelectionModel().suspendEvents();
        node.removeAll();
        node.loaded = false;

        this.getSelectionModel().resumeEvents();
    },

    onFilterChange: function() {
        // get filterToolbar
        var ftb = this.filterPlugin.getGridPanel().filterToolbar;

        // in case of filterPanel
        ftb = ftb.activeFilterPanel ? ftb.activeFilterPanel : ftb;

        // remove all ftb container and /toberemoved/ filters
        ftb.supressEvents = true;
        ftb.filterStore.each(function(filter) {
            var field = filter.get('field');
            if (this.filtersToRemove.indexOf(field) > -1) {
                ftb.deleteFilter(filter);
            }
        }, this);
        ftb.supressEvents = false;

        // set ftb filters according to tree selection
        var containerFilter = this.getFilterPlugin().getFilter();
        ftb.addFilter(new ftb.record(containerFilter));

        ftb.onFiltertrigger();
    },

    /**
     * called when tree selection changes
     *
     * @param {} sm
     * @param {} nodes
     */
    onSelectionChange: function(sm, nodes) {

        if (this.filterMode == 'gridFilter' && this.filterPlugin) {
            this.filterPlugin.onFilterChange();
        }
        if (this.filterMode == 'filterToolbar' && this.filterPlugin) {

            this.onFilterChange();

            // finally select the selected node, as filtertrigger clears all selections
            sm.suspendEvents();
            Ext.each(nodes, function(node) {
                sm.select(node, Ext.EventObject, true);
            }, this);
            sm.resumeEvents();
        }
    },

    /**
     * selects path by container Path
     *
     * @param {String} containerPath
     * @param {String} [attr]
     * @param {Function} [callback]
     */
    selectContainerPath: function(containerPath, attr, callback) {
        return this.selectPath(this.getTreePath(containerPath), attr, callback);
    },

    /**
     * get default container for new records
     *
     * @param {String} default container registry key
     * @return {Tine.Tinebase.Model.Container}
     */
    getDefaultContainer: function(registryKey) {
        if (! registryKey) {
            registryKey = 'defaultContainer';
        }

        var container = Tine[this.appName].registry.get(registryKey);

        return this.getSelectedContainer('addGrant', container, true);
    }
});


/***/ }),
/* 1160 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets', 'Tine.widgets.container');

/**
 * Container Properties dialog
 * 
 * @namespace   Tine.widgets.container
 * @class       Tine.widgets.container.PropertiesDialog
 * @extends     Tine.widgets.dialog.EditDialog
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 * @constructor
 * @param {Object} config The configuration options.
 */
Tine.widgets.container.PropertiesDialog = Ext.extend(Tine.widgets.dialog.EditDialog, {
    
    /**
     * @cfg {Tine.Tinebase.container.models.container}
     * Container to manage grants for
     */
    grantContainer: null,
    
    /**
     * @cfg {string}
     * Name of container folders, e.g. Addressbook
     */
    containerName: null,
    
    /**
     * @private
     */
    windowNamePrefix: 'ContainerPropertiesWindow_',
    loadRecord: false,
    tbarItems: [],
    evalGrants: false,

    /**
     * @private
     */
    initComponent: function() {
        var _ = window.lodash,
            me = this,
            getTranslation = function(string) {
                var translation = me.grantsModelApp.i18n._hidden(string);

                return translation != string ? translation : window.i18n._hidden(string);
            };

        if (! this.grantsModel) {
            this.grantsModel = Tine.Tinebase.container.getGrantsModel(this.grantContainer);
        }

        if (! this.grantsModelApp) {
            this.grantsModelApp = Tine.Tinebase.appMgr.get(this.grantsModel.getMeta('appName'));
        }

        // my grants
        this.myGrants = [];
        for (var grant in this.grantContainer.account_grants) {
            if (this.grantContainer.account_grants.hasOwnProperty(grant)
                && this.grantContainer.account_grants[grant]
                && Tine.widgets.container.GrantsGrid.prototype[grant + 'Title']
                && this.grantsModel.hasField(grant)
            ) {
                this.myGrants.push({
                    title: getTranslation(Tine.widgets.container.GrantsGrid.prototype[grant + 'Title']),
                    description: getTranslation(Tine.widgets.container.GrantsGrid.prototype[grant + 'Description'])
                })
            }
        }
        
        this.myGrantsTemplate = new Ext.XTemplate(
            '<tpl for=".">',
                '<span class="tine-wordbox" ext:qtip="','{[this.encode(values.description)]}','">','{[this.encode(values.title)]}','</span>',
            '</tpl>',
            {
                encode: function(description) { return Tine.Tinebase.common.doubleEncode(description); }
            }
        ).compile();
        
        Tine.widgets.container.PropertiesDialog.superclass.initComponent.call(this);
    },

    /**
     * returns canonical path part
     * @returns {string}
     */
    getCanonicalPathSegment: function () {
        return ['',
            this.app,
            this.canonicalName,
            'ContainerProperties',
            this.grantsModel.getMeta('')
        ].join(Tine.Tinebase.CanonicalPath.separator);
    },

    /**
     * init record to edit
     * 
     * - overwritten: we don't have a record here 
     */
    initRecord: function() {
    },
    
    /**
     * returns dialog
     */
    getFormItems: function() {
        return {
            xtype: 'tabpanel',
            border: false,
            plain:true,
            activeTab: 0,
            border: false,
            items:[{
                title: i18n._('Properties'),
                border: false,
                frame: true,
                layout: 'form',
                labelAlign: 'top',
                labelSeparator: '',
                layoutConfig: {
                    trackLabels: true
                },
                plugins: [{
                    ptype: 'ux.itemregistry',
                    key:   'Tine.widgets.container.PropertiesDialog.FormItems.Properties'
                }],
                items: [{
                    xtype: 'textfield',
                    anchor: '100%',
                    readOnly: true,
                    fieldLabel: i18n._('Name'),
                    value: this.grantContainer.name
                }, {
                    xtype: 'colorfield',
                    width: 40,
                    readOnly: true,
                    fieldLabel: i18n._('Color'),
                    value: this.grantContainer.color
                }, {
                    xtype: 'label',
                    anchor: '100%',
                    readOnly: true,
                    fieldLabel: i18n._('My Grants'),
                    html: this.myGrantsTemplate.applyTemplate(this.myGrants)
                }]
            }]
        };
    },
    
    /**
     * @private
     */
    onApplyChanges: function() {
        this.purgeListeners();
        this.window.close();
    }
});

/**
 * grants dialog popup / window
 */
Tine.widgets.container.PropertiesDialog.openWindow = function (config) {
    var window = Tine.WindowFactory.getWindow({
        width: 700,
        height: 450,
        name: Tine.widgets.container.PropertiesDialog.windowNamePrefix + Ext.id(),
        contentPanelConstructor: 'Tine.widgets.container.PropertiesDialog',
        contentPanelConstructorConfig: config,
        modal: true
    });
    return window;
};


/***/ }),
/* 1161 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * TODO         extend Tine.widgets.grid.PickerFilter
 */
Ext.ns('Tine.widgets.container');

/**
 * @namespace   Tine.widgets.container
 * @class       Tine.widgets.container.FilterModel
 * @extends     Tine.widgets.grid.FilterModel
 * 
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.widgets.container.FilterModel = Ext.extend(Tine.widgets.grid.FilterModel, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     */
    app: null,
    
    /**
     * If this component is called from another app than the container belongs to, set this to this app
     * 
     * @cfg {Tine.Tinebase.Application} callingApp
     */
    callingApp: null,
    
    /**
     * @cfg {Tine.Tinebase.data.Record} recordClass
     * record definition class  (required)
     */
    recordClass: null,
    
    /**
     * @cfg {Array} operators allowed operators
     */
    operators: ['equals', 'in', 'not', 'notin'],
    
    /**
     * @cfg {String} field container field (defaults to container_id)
     */
    field: 'container_id',
    
    /**
     * the label of the filter (autoset from containing recordClass, if none is given)
     * 
     * @type {String}
     */
    label: null,
    
    /**
     * @cfg {String} defaultOperator default operator, one of <tt>{@link #operators} (defaults to equals)
     */
    defaultOperator: 'equals',
    
    /**
     * @cfg {String} defaultValue default value (defaults to all)
     */
    defaultValue: {path: '/'},
    
    /**
     * @private
     */
    initComponent: function() {
        // get recordClass if string is given
        if (Ext.isString(this.recordClass)) {
            var split = this.recordClass.split('.');
            this.recordClass = Tine[split[0]].Model[split[1]];
        }
        
        // get application if string is given
        if (Ext.isString(this.app)) {
            this.app = Tine.Tinebase.appMgr.get(this.app);
        }
        
        // get calling application if string is given
        if (Ext.isString(this.callingApp)) {
            this.callingApp = Tine.Tinebase.appMgr.get(this.callingApp);
        }
        
        Tine.widgets.container.FilterModel.superclass.initComponent.call(this);
        
        this.containerName  = this.app.i18n.n_hidden(this.recordClass.getMeta('containerName'), this.recordClass.getMeta('containersName'), 1);
        this.containersName = this.app.i18n._hidden(this.recordClass.getMeta('containersName'));

        this.label = this.label ? this.callingApp.i18n._(this.label) : this.containerName;
        this.gender = this.app.i18n._hidden('GENDER_' + this.recordClass.getMeta('containerName'));
    },
    
    /**
     * returns valueType of given filter
     * 
     * @param {Record} filter
     * @return {String}
     */
    getValueType: function(filter) {
        var operator = filter.get('operator') ? filter.get('operator') : this.defaultOperator;
        
        var valueType = 'selectionComboBox';
        switch (operator) {
            case 'notin':
            case 'in':
                valueType = 'FilterModelMultipleValueField';
                break;
        }
        
        return valueType;
    },
    
    /**
     * called on operator change of a filter row
     * @private
     */
    onOperatorChange: function(filter, newOperator) {
        this.supr().onOperatorChange.call(this, filter, newOperator);
        
        var valueType = this.getValueType(filter);
        
        for (var valueField in filter.valueFields) {
            filter.valueFields[valueField][valueField == valueType ? 'show' : 'hide']();
        };
        
        filter.formFields.value = filter.valueFields[valueType];
        filter.formFields.value.setWidth(filter.formFields.value.width);
        filter.formFields.value.wrap.setWidth(filter.formFields.value.width);
        filter.formFields.value.syncSize();
    },
    
    /**
     * value renderer
     * 
     * @param {Ext.data.Record} filter line
     * @param {Ext.Element} element to render to 
     */
    valueRenderer: function(filter, el) {
        var valueType = this.getValueType(filter);
        
        filter.valueFields = {};
        filter.valueFields.selectionComboBox = new Tine.widgets.container.SelectionComboBox({
            hidden: valueType != 'selectionComboBox',
            app: this.app,
            filter: filter,
            width: this.filterValueWidth,
            listWidth: 200,
            //id: 'tw-ftb-frow-valuefield-' + filter.id,
            value: filter.data.value ? filter.data.value : this.defaultValue,
            renderTo: el,
            allowNodeSelect: true,
            recordClass: this.recordClass,
            appName: this.recordClass.getMeta('appName'),
            containerName: this.containerName,
            containersName: this.containersName,
            getValue: function() {
                return this.selectedContainer ? this.selectedContainer.path : null;
            },
            setValue: function(value) {
                if (this.filter.get('operator') == 'specialNode' || this.filter.get('operator') == 'personalNode' ) {
                    var operatorText = this.filter.data.operator === 'personalNode' ? i18n._('is personal of') : i18n._('is equal to');
                    
                    // use equals for node 'My containers'
                    if (value.path && value.path === Tine.Tinebase.container.getMyNodePath()) {
                        operatorText = i18n._('is equal to')
                    }
                    this.filter.formFields.operator.setRawValue(operatorText);
                }
            
                return Tine.widgets.container.SelectionComboBox.prototype.setValue.call(this, value);
            },
            listeners: {
                scope: this, 
                select: this.onFiltertrigger,
                specialkey: function(field, e){
                     if(e.getKey() == e.ENTER){
                         this.onFiltertrigger();
                     }
                }
            }
        });
        
        filter.valueFields.FilterModelMultipleValueField = new Tine.widgets.container.FilterModelMultipleValueField({
            hidden: valueType != 'FilterModelMultipleValueField',
            app: this.app,
            recordClass: this.recordClass,
            containerName: this.containerName,
            containersName: this.containersName,
            filter: filter,
            width: this.filterValueWidth,
            //id: 'tw-ftb-frow-valuefield-' + filter.id,
            value: filter.data.value ? filter.data.value : this.defaultValue,
            renderTo: el,
            listeners: {
                scope: this, 
                select: this.onFiltertrigger,
                specialkey: function(field, e){
                     if(e.getKey() == e.ENTER){
                         this.onFiltertrigger();
                     }
                }
            }
        });
        
        return filter.valueFields[valueType];
    }
});

Tine.widgets.grid.FilterToolbar.FILTERS['tine.widget.container.filtermodel'] = Tine.widgets.container.FilterModel;


/**
 * @namespace   Tine.widgets.container
 * @class       Tine.widgets.container.FilterModelMultipleValueField
 * @extends     Ext.ux.form.LayerCombo
 * 
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.widgets.container.FilterModelMultipleValueField = Ext.extend(Ext.ux.form.LayerCombo, {
    /**
     * @cfg {string} containerName
     * name of container (singular)
     */
    containerName: 'container',
    
    /**
     * @cfg {string} containerName
     * name of container (plural)
     */
    containersName: 'containers',
    
    /**
     * @cfg {Tine.Tinebase.data.Record} recordClass
     * record definition class  (required)
     */
    recordClass: null,
    
    hideButtons: false,
    layerAlign : 'tr-br?',
    minLayerWidth: 400,
    layerHeight: 300,
    
    lazyInit: true,
    
    formConfig: {
        labelAlign: 'left',
        labelWidth: 30
    },
    
    initComponent: function() {
        this.containerName = this.containerName == 'container' && this.recordClass ? this.recordClass.getContainerName() : this.containerName;
        this.containersName = this.containersName == 'containers' && this.recordClass ? this.recordClass.getContainersName() : this.containersName;

        this.on('beforecollapse', this.onBeforeCollapse, this);
        this.store = new Ext.data.SimpleStore({
            fields: this.recordClass
        });
        
        this.supr().initComponent.call(this);
    },
    
    /**
     * @return Ext.grid.ColumnModel
     */
    getColumnModel: function() {
        return new Ext.grid.ColumnModel({
            defaults: {
                sortable: false
            },
            columns:  [
                {id: 'name', header: String.format(i18n._('Selected {0}'), this.containersName), dataIndex: 'name'}
            ]
        });
    },
    
    /**
     * 
     * @return {Array} of containerData
     */
    getFormValue: function() {
        var container = [];
        
        this.store.each(function(containerRecord) {
            container.push(containerRecord.data);
        }, this);
        
        return container;
    },
    
    getItems: function() {
        var containerSelectionCombo = this.containerSelectionCombo = new Tine.widgets.container.SelectionComboBox({
            allowNodeSelect: true,
            allowBlank: true,
            blurOnSelect: true,
            recordClass: this.recordClass,
            appName: this.recordClass.getMeta('appName'),
            containerName: this.containerName,
            containersName: this.containersName,
            listeners: {
                scope: this, 
                select: this.onContainerSelect
            }
        });
                
        this.containerGridPanel = new Tine.widgets.grid.PickerGridPanel({
            height: this.layerHeight || 'auto',
            recordClass: Tine.Tinebase.Model.Container,
            store: this.store,
            autoExpandColumn: 'name',
            getColumnModel: this.getColumnModel.createDelegate(this),
            initActionsAndToolbars: function() {
                Tine.widgets.grid.PickerGridPanel.prototype.initActionsAndToolbars.call(this);
                
                this.tbar = new Ext.Toolbar({
                    layout: 'fit',
                    items: [
                        containerSelectionCombo
                    ]
                });
            }
        });
        var items = [this.containerGridPanel];
        
        return items;
    },
    
    /**
     * cancel collapse if ctx menu or container selection is shown
     * 
     * @return Boolean
     */
    onBeforeCollapse: function() {
        var contextMenuVisible = this.containerGridPanel.contextMenu && ! this.containerGridPanel.contextMenu.hidden,
            containerSelectionVisible = this.containerSelectionCombo.dlg && ! this.containerSelectionCombo.dlg.win.isDestroyed;
            
        return ! (contextMenuVisible || this.containerSelectionCombo.isExpanded() || containerSelectionVisible);
    },
    
    onContainerSelect: function(field, containerData) {
        var existingRecord = this.store.getById(containerData.id);
        if (! existingRecord) {
            var data = (containerData.data) ? containerData.data : containerData;
            this.store.add(new Tine.Tinebase.Model.Container(data));
            
        } else {
            var idx = this.store.indexOf(existingRecord);
            var row = this.containerGridPanel.getView().getRow(idx);
            Ext.fly(row).highlight();
        }
        
        this.containerSelectionCombo.clearValue();
    },
    
    /**
     * @param {Array/Object} value
     * @return {Ext.form.Field} this
     */
    setValue: function(value) {
        this.value = value;
        value = Ext.isArray(value) ? value : [value];

        this.currentValue = [];
        
        this.store.removeAll();
        var containerNames = [];
        Ext.each(value, function(containerData) {
            // ignore broken value
            if (! containerData) return;

            // ignore server name for node 'My containers'
            if (containerData.path && containerData.path === Tine.Tinebase.container.getMyNodePath()) {
                containerData.name = null;
            }
            containerData.name = containerData.name || Tine.Tinebase.container.path2name(containerData.path, this.containerName, this.containersName);
            containerData.id = containerData.id ||containerData.path;
            
            this.store.add(new Tine.Tinebase.Model.Container(containerData));
            this.currentValue.push(containerData);
            containerNames.push(containerData.name);
        }, this);
        
        this.setRawValue(containerNames.join(', '));
        return this;
    },
    
    /**
     * sets values to innerForm
     */
    setFormValue: function(value) {
        // nothing to do
    }
});

Ext.reg('containerspicker', Tine.widgets.container.FilterModelMultipleValueField);

/***/ }),
/* 1162 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * TODO make initial color work again in Ext.menu.ColorMenu
 */
 
Ext.ns('Tine.widgets', 'Tine.widgets.tags');

/**
 * Class for a single tag panel
 * 
 * @namespace   Tine.widgets.tags
 * @class       Tine.widgets.tags.TagPanel
 * @extends     Ext.Panel
 */
Tine.widgets.tags.TagPanel = Ext.extend(Ext.Panel, {
    /**
     * @cfg {Tine.Tinebase.Application} app Application which uses this panel
     */
    app: null,
    /**
     * @cfg {String} recordId Id of record this panel is displayed for
     */
    recordId: '',
    /**
     * @cfg {Array} tags Initial tags
     */
    tags: null,
    /**
     * @var {Ext.data.JsonStore}
     * Holds tags of the record this panel is displayed for
     */
    recordTagsStore: null,
    /**
     * @var {Ext.data.JsonStore} Store for available tags
     */
    availableTagsStore: false,
    /**
     * @var {Ext.form.ComboBox} live search field to search tags to add
     */
    searchField: null,
    
    iconCls: 'action_tag',
    layout: 'fit',
    bodyStyle: 'padding: 2px 2px 2px 2px',
    collapsible: true,
    border: false,
    
    /**
     * @private
     */
    initComponent: function(){
        this.title =  i18n._('Tags') + ' (0)';
        this.app = Ext.isString(this.app) ? Tine.Tinebase.appMgr.get(this.app) : this.app;
        
        // init recordTagsStore
        this.tags = [];
        var that = this;
        
        this.recordTagsStore = new Ext.data.JsonStore({
            id: 'id',
            fields: Tine.Tinebase.Model.Tag,
            data: this.tags,
            scope: that,
            listeners: {
                add: that.onChange,
                load: that.onChange,
                remove: that.onChange,
                scope: that
            }
        });
        
        // init availableTagsStore
        this.availableTagsStore = new Ext.data.JsonStore({
            id: 'id',
            root: 'results',
            totalProperty: 'totalCount',
            fields: Tine.Tinebase.Model.Tag,
            baseParams: {
                method: 'Tinebase.searchTags',
                filter: {
                    application: this.app.appName,
                    grant: 'use'
                },
                paging : {}
            }
        });

        this.searchField = new Tine.widgets.tags.TagCombo({
            app: this.app,
            onlyUsableTags: true,
            disableClearer: true
        });
        this.searchField.on('select', function(searchField, selectedTag){
            if(this.recordTagsStore.getById(selectedTag.id) === undefined) {
                this.recordTagsStore.add(selectedTag);
            }
            searchField.blur();
            searchField.reset();
        },this);

        this.bottomBar = new Ext.Container({
            layout: 'column',
            items: [
                Ext.apply(this.searchField, {columnWidth: .99}),
                this.addTagButton = new Ext.Button({
                    text: '',
                    width: 16,
                    iconCls: 'action_add',
                    tooltip: i18n._('Add a new personal tag'),
                    scope: this,
                    hidden: !Tine.Tinebase.common.hasRight('use_personal_tags', this.app.appName),
                    handler: function() {
                        Ext.Msg.prompt(i18n._('Add New Personal Tag'),
                                       i18n._('Please note: You create a personal tag. Only you can see it!') + ' <br />' + i18n._('Enter tag name:'),
                            function(btn, text) {
                                if (btn == 'ok'){
                                    this.onTagAdd(text);
                                }
                            },
                        this, false, this.searchField.lastQuery);
                    }
                })
            ]

        });

        var tagTpl = new Ext.XTemplate(
            '<tpl for=".">',
               '<div class="x-widget-tag-tagitem" id="{id}">',
                    '<div class="x-widget-tag-tagitem-color" style="background-color: {color};">&#160;</div>', 
                    '<div class="x-widget-tag-tagitem-text" ext:qtip="', 
                        '{[this.encode(values.name)]}', 
                        '<tpl if="type == \'personal\' ">&nbsp;<i>(' + i18n._('personal') + ')</i></tpl>',
                        '</i>&nbsp;[{occurrence}]',
                        '<tpl if="description != null && description.length &gt; 1"><hr>{[this.encode(values.description)]}</tpl>" >',
                        
                        '&nbsp;{[this.encode(values.name)]}',
                    '</div>',
                '</div>',
            '</tpl>' ,{
                encode: function(value) {
                    return Tine.Tinebase.common.doubleEncode(value);
                }
            }
        );
        
        this.dataView = new Ext.DataView({
            store: this.recordTagsStore,
            tpl: tagTpl,
            autoHeight:true,
            multiSelect: true,
            overClass:'x-widget-tag-tagitem-over',
            selectedClass:'x-widget-tag-tagitem-selected',
            itemSelector:'div.x-widget-tag-tagitem',
            emptyText: i18n._('No Tags to display')
        });
        this.dataView.on('contextmenu', function(dataView, selectedIdx, node, event){
            if (!this.dataView.isSelected(selectedIdx)) {
                this.dataView.clearSelections();
                this.dataView.select(selectedIdx);
            }
            event.stopEvent();
            
            var selectedTags = this.dataView.getSelectedRecords();
            var selectedTag = selectedTags.length == 1 ? selectedTags[0] : null;
            
            var allowDelete = true;
            for (var i=0; i<selectedTags.length; i++) {
                if (selectedTags[i].get('type') == 'shared') {
                    allowDelete = false;
                }
            }
            
            var menu = new Ext.menu.Menu({
                plugins: [{
                    ptype: 'ux.itemregistry',
                    key:   'Tinebase-MainContextMenu'
                }],
                items: [
                    new Ext.Action({
                        scope: this,
                        text: i18n.ngettext('Detach tag', 'Detach tags', selectedTags.length),
                        iconCls: 'x-widget-tag-action-detach',
                        handler: function() {
                            for (var i=0,j=selectedTags.length; i<j; i++){
                                this.recordTagsStore.remove(selectedTags[i]);
                            }
                        }
                    }),
                    '-',
                    {
                        text: i18n._('Edit tag'),
                        disabled: !(selectedTag && allowDelete),
                        menu: {
                            items: [
                                new Ext.Action({
                                    text: i18n._('Rename Tag'),
                                    selectedTag: selectedTag,
                                    scope: this,
                                    handler: function(action) {
                                        var tag = action.selectedTag;
                                        Ext.Msg.prompt(i18n._('Rename Tag') + ' "'+ tag.get('name') +'"', i18n._('Please enter a new name:'), function(btn, text){
                                            if (btn == 'ok'){
                                                tag.set('name', text);
                                                this.onTagUpdate(tag);
                                            }
                                        }, this, false, tag.get('name'));
                                    }
                                }),
                                new Ext.Action({
                                    text: i18n._('Edit Description'),
                                    selectedTag: selectedTag,
                                    scope: this,
                                    handler: function(action) {
                                        var tag = action.selectedTag;
                                        Ext.Msg.prompt(i18n._('Description for tag') + ' "'+ tag.get('name') +'"', i18n._('Please enter new description:'), function(btn, text){
                                            if (btn == 'ok'){
                                                tag.set('description', text);
                                                this.onTagUpdate(tag);
                                            }
                                        }, this, 30, tag.get('description'));
                                    }
                                }),
                                new Ext.Action({
                                    text: i18n._('Change Color'),
                                    iconCls: 'action_changecolor',
                                    scope: this,
                                    menu: new Ext.menu.ColorMenu({
                                        // not working any longer ->
                                        //value: selectedTag ? selectedTag.get('color') : '#FFFFFF',
                                        // something like this should work -> 
                                        // (from extjs api doc: (value) The initial color to highlight (should be a valid 6-digit color hex code without the # symbol). Note that the hex codes are case-sensitive.)
                                        //value: selectedTag ? Ext.util.Format.lowercase(selectedTag.get('color').substr(1)) : 'ffffff',
                                        scope: this,
                                        listeners: {
                                            select: function(menu, color) {
                                                color = '#' + color;
                                                
                                                if (selectedTag.get('color') != color) {
                                                    selectedTag.set('color', color);
                                                    this.onTagUpdate(selectedTag);
                                                }
                                            },
                                            scope: this
                                        }
                                    })                                        
                                })                                    
                            ]
                        }
                    },
                    new Ext.Action({
                        disabled: !allowDelete,
                        scope: this,
                        text: i18n.ngettext('Delete Tag', 'Delete Tags', selectedTags.length),
                        iconCls: 'action_delete',
                        handler: function() {
                            var tagsToDelete = [];
                            for (var i=0,j=selectedTags.length; i<j; i++){
                                // don't request to delete non existing tags
                                if (selectedTags[i].id.length > 20) {
                                    tagsToDelete.push(selectedTags[i].id);
                                }
                            }
                            
                            // @todo use correct strings: Realy -> Really / disapear -> disappear
                            Ext.MessageBox.confirm(
                                i18n.ngettext('Really delete selected tag?', 'Really delete selected tags?', selectedTags.length),
                                i18n.ngettext('The selected tag will be deleted and disappear for all entries',
                                                        'The selected tags will be removed and disappear for all entries', selectedTags.length), 
                                function(btn) {
                                    if (btn == 'yes'){
                                        Ext.MessageBox.wait(i18n._('Please wait a moment...'), i18n.ngettext('Deleting Tag', 'Deleting Tags', selectedTags.length));
                                        Ext.Ajax.request({
                                            params: {
                                                method: 'Tinebase.deleteTags', 
                                                ids: tagsToDelete
                                            },
                                            success: function(_result, _request) {
                                                // reset avail tag store
                                                this.availableTagsStore.lastOptions = null;
                                                
                                                for (var i=0,j=selectedTags.length; i<j; i++){
                                                    this.recordTagsStore.remove(selectedTags[i]);
                                                }
                                                Ext.MessageBox.hide();
                                            },
                                            failure: function ( result, request) {
                                                Ext.MessageBox.alert(i18n._('Failed'), i18n._('Could not delete Tag(s).'));
                                            },
                                            scope: this 
                                        });
                                    }
                            }, this);
                        }
                    })
                ]
            });

            if (! this.searchField.disabled) {
                menu.showAt(event.getXY());
            }

        },this);
        
        this.formField = {
            layout: 'form',
            items: new Tine.widgets.tags.TagFormField({
                tagsPanel: this,
                recordTagsStore: this.recordTagsStore
            })
        };
        
        this.items = [{
            xtype: 'panel',
            layout: 'fit',
            bbar: this.bottomBar,
            items: [
                this.dataView,
                this.formField
            ]
        }];
        
        Tine.widgets.dialog.MultipleEditDialogPlugin.prototype.registerSkipItem(this);
        Tine.widgets.tags.TagPanel.superclass.initComponent.call(this);
    },
    
    getFormField: function() {
        return this.formField.items;
    },
    
    /**
     * @private
     */
    onTagAdd: function(tagName) {
        if (tagName.length < 3) {
            Ext.Msg.show({
               title: i18n._('Notice'),
               msg: i18n._('The minimum tag length is three.'),
               buttons: Ext.Msg.OK,
               animEl: 'elId',
               icon: Ext.MessageBox.INFO
            });
        } else {
            var isAttached = false;
            this.recordTagsStore.each(function(tag){
                if(tag.data.name == tagName) {
                    isAttached = true;
                }
            },this);
            
            if (!isAttached) {
                var tagToAttach = false;
                this.availableTagsStore.each(function(tag){
                    if(tag.data.name == tagName) {
                        tagToAttach = tag;
                    }
                }, this);
                
                if (!tagToAttach) {
                    tagToAttach = new Tine.Tinebase.Model.Tag({
                        name: tagName,
                        type: 'personal',
                        description: '',
                        color: '#FFFFFF'
                    });
                    
                    if (! Ext.isIE) {
                        this.el.mask();
                    }
                    Ext.Ajax.request({
                        params: {
                            method: 'Tinebase.saveTag', 
                            tag: tagToAttach.data
                        },
                        success: function(_result, _request) {
                            var tagData = Ext.util.JSON.decode(_result.responseText);
                            var newTag = new Tine.Tinebase.Model.Tag(tagData, tagData.id);
                            this.recordTagsStore.add(newTag);
                            
                            // reset avail tag store
                            this.availableTagsStore.lastOptions = null;
                            this.el.unmask();
                        },
                        failure: function ( result, request) {
                            Ext.MessageBox.alert(i18n._('Failed'), i18n._('Could not create tag.'));
                            this.el.unmask();
                        },
                        scope: this 
                    });
                } else {
                    this.recordTagsStore.add(tagToAttach);
                }
            }
        }
    },
    onTagUpdate: function(tag) {
        if (tag.get('name').length < 3) {
            Ext.Msg.show({
               title: i18n._('Notice'),
               msg: i18n._('The minimum tag length is three.'),
               buttons: Ext.Msg.OK,
               animEl: 'elId',
               icon: Ext.MessageBox.INFO
            });
        } else {
            this.el.mask();
            Ext.Ajax.request({
                params: {
                    method: 'Tinebase.saveTag', 
                    tag: tag.data
                },
                success: function(_result, _request) {
                    // reset avail tag store
                    this.availableTagsStore.lastOptions = null;
                    this.el.unmask();
                },
                failure: function ( result, request) {
                    Ext.MessageBox.alert(i18n._('Failed'), i18n._('Could not update tag.'));
                    this.el.unmask();
                },
                scope: this 
            });
        }
    },
    
    /**
     * updates the title
     */
    onChange: function() {
        if (this.recordTagsStore) {
            this.title = i18n._('Tags') + ' (' + this.recordTagsStore.getCount() + ')';
            if (this.header) {
                this.setTitle(this.title);
            }
        }
    }
    
});

Ext.reg('Tine.widgets.tags.TagPanel', Tine.widgets.tags.TagPanel);

/**
 * @private Helper class to have tags processing in the standard form/record cycle
 */
Tine.widgets.tags.TagFormField = Ext.extend(Ext.form.Field, {
    /**
     * @cfg {Ext.data.JsonStore} recordTagsStore a store where the record tags are in.
     */
    recordTagsStore: null,
    
    name: 'tags',
    hidden: true,
    labelSeparator: '',

    requiredGrant: 'editGrant',

    /**
     * @private
     */
    initComponent: function() {
        Tine.widgets.tags.TagFormField.superclass.initComponent.call(this);
        //this.hide();
    },
    /**
     * returns tags data of the current record
     */
    getValue: function() {
        var value = [];
        this.recordTagsStore.each(function(tag){
            if(tag.id.length > 5 && ! String(tag.id).match(/ext-record/)) {
                //if we have a valid id we just return the id
                value.push(tag.id);
            } else {
                //it's a new tag and will be saved on the fly
                value.push(tag.data);
            }
        });
        return value;
    },
    /**
     * sets tags from an array of tag data objects (not records)
     */
    setValue: function(value){
        // set empty value
        value = value || []; 
        
        // replace template fields
        Tine.Tinebase.Model.Tag.replaceTemplateField(value);
        
        this.recordTagsStore.loadData(value);
    },

    setDisabled: function(disabled) {
        // disable combo, btn, context
        this.tagsPanel.searchField.setDisabled(disabled);
        this.tagsPanel.addTagButton.setDisabled(disabled);
    }

});

/**
 * Dialog for editing a tag itself
 */
Tine.widgets.tags.TagEditDialog = Ext.extend(Ext.Window, {
    width: 200,
    height: 300,
    layout: 'fit',
    margins: '0px 5px 0px 5px',
    
    initComponent: function() {
        this.items = new Ext.form.FormPanel({
            defaults: {
                xtype: 'textfield',
                anchor: '100%'
            },
            labelAlign: 'top',
            items: [
                {
                    name: 'name',
                    fieldLabel: 'Name'
                },
                {
                    name: 'description',
                    fieldLabel: i18n._('Description')
                },
                {
                    name: 'color',
                    fieldLabel: i18n._('Color')
                }
            ]
            
        });
        
        Tine.widgets.tags.TagEditDialog.superclass.initComponent.call(this);
    }
});

Tine.widgets.tags.EditDialog = Ext.extend(Ext.Window, {
    layout:'border',
    width: 640,
    heigh: 480,
    
    initComponent: function() {
        this.items = [
        {
            region: 'west',
            split: true
        },
        {
            region: 'center',
            split: true
        }
        ];
        Tine.widgets.tags.EditDialog.superclass.call(this);
    }
});


/***/ }),
/* 1163 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * TODO         use new filter syntax in onBeforeQuery when TagFilter is refactored and extends Tinebase_Model_Filter_FilterGroup 
 */
 
Ext.ns('Tine.widgets', 'Tine.widgets.tags');

/**
 * @namespace   Tine.widgets.tags
 * @class       Tine.widgets.tags.TagCombo
 * @extends     Ext.ux.form.ClearableComboBox
 */
Tine.widgets.tags.TagCombo = Ext.extend(Ext.ux.form.ClearableComboBox, {
    /**
     * @cfg {Tine.Tinebase.Application} app
     */
    app: null,
    
    /**
     * @cfg {Bool} findGlobalTags true to find global tags during search (default: true)
     */
    findGlobalTags: true,

    /**
     * @cfg {Bool} onlyUsableTags true to find only usable flags for the user (default: true)
     */
    onlyUsableTags: false,
    
    emptyText: null,
    typeAhead: true,
    mode: 'remote',
    triggerAction: 'all',
    displayField: 'name',
    valueField: 'id',
    minChars: 3,
    
    /**
     * @private
     */
    initComponent: function() {
        this.emptyText = this.emptyText ? this.emptyText : i18n._('tag name');
        
        this.initStore();
        this.initTemplate();
        
        Tine.widgets.tags.TagCombo.superclass.initComponent.call(this);
        
        this.on('select', this.onSelectRecord, this);
        
        this.on('beforequery', this.onBeforeQuery, this);
    },
    
    /**
     * hander of select event
     * NOTE: executed after native onSelect method
     */
    onSelectRecord: function(){
        var v = this.getValue();
        
        if(String(v) !== String(this.startValue)){
            this.fireEvent('change', this, v, this.startValue);
        }
        
    },
    
    /**
     * use beforequery to set query filter
     * 
     * @param {Event} qevent
     */
    onBeforeQuery: function(qevent){
        
        var filter = {
            name: (qevent.query && qevent.query != '') ? '%' + qevent.query + '%' : '',
            application: this.app ? this.app.appName : '',
            grant: (this.onlyUsableTags) ? 'use' : 'view' 
        };
        
        this.store.baseParams.filter = filter;
    },

    /**
     * set value
     * 
     * @param {} value
     */
    setValue: function(value) {
        
        if (typeof value === 'object' && Object.prototype.toString.call(value) === '[object Object]') {
            if (! this.store.getById(value.id)) {
                this.store.addSorted(new Tine.Tinebase.Model.Tag(value));
            }
            value = value.id;
        }
        
        Tine.widgets.tags.TagCombo.superclass.setValue.call(this, value);
        
    },
    
    /**
     * init store
     */
    initStore: function() {
        var baseParams = {
            method: 'Tinebase.searchTags',
            paging: {}
        };
        
        this.store = new Ext.data.JsonStore({
            id: 'id',
            root: 'results',
            totalProperty: 'totalCount',
            fields: Tine.Tinebase.Model.Tag,
            baseParams: baseParams
        });

    },
    
    /**
     * init template
     */
    initTemplate: function() {
        this.tpl = new Ext.XTemplate(
            '<tpl for=".">', 
                '<div class="x-combo-list-item">',
                    '<div class="tb-grid-tags" style="background-color:{values.color};">&#160;</div>',
                    '<div class="x-widget-tag-tagitem-text" ext:qtip="', 
                        '{[this.encode(values.name)]}', 
                        '<tpl if="type == \'personal\' ">&nbsp;<i>(' + i18n._('personal') + ')</i></tpl>',
                        '</i>&nbsp;[{occurrence}]',
                        '<tpl if="description != null && description.length &gt; 1"><hr>{[this.encode(values.description)]}</tpl>" >',
                        
                        '&nbsp;{[this.encode(values.name)]}',
                        '<tpl if="type == \'personal\' ">&nbsp;<i>(' + i18n._('personal') + ')</i></tpl>',
                    '</div>',
                '</div>', 
            '</tpl>',
            {
                encode: function(value) {
                     if (value) {
                        return Tine.Tinebase.common.doubleEncode(value);
                    } else {
                        return '';
                    }
                }
            }
        );
    }
});

Ext.reg('Tine.widgets.tags.TagCombo', Tine.widgets.tags.TagCombo);
Tine.widgets.form.RecordPickerManager.register('Tinebase', 'Tag', Tine.widgets.tags.TagCombo);



/***/ }),
/* 1164 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license http://www.gnu.org/licenses/agpl.html AGPL Version 3 
 * @author Alexander Stintzing <alex@stintzing.net>
 * @copyright Copyright (c) 2007-2009
 * Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * TODO use new filter syntax in onBeforeQuery when TagFilter is refactored and
 * extends Tinebase_Model_Filter_FilterGroup
 */

Ext.ns('Tine.widgets', 'Tine.widgets.tags');

/**
 * @namespace Tine.widgets.tags
 * @class Tine.widgets.tags.TagToggleBox
 * @extends Ext.tree.TreePanel
 */
Tine.widgets.tags.TagToggleBox = Ext.extend(Ext.form.FormPanel, {

    layout : 'fit',
    border : false,
    cls : 'tw-editdialog',
    store : null,
    buttonAlign : 'right',
    win: null,
    mode: null,
    
    anchor : '100% 100%',
    
    loadMask: null,

    initComponent : function() {
        
        this.addEvents('cancel', 'update', 'close');
        this.initStore();
        this.initTemplate();
        this.initView();

        this.initActions();

        this.initButtons();

        this.items = this.getFormItems();

        Tine.widgets.tags.TagToggleBox.superclass.initComponent.call(this);
    },

    initActions : function() {
        this.action_update = new Ext.Action({
                    text : (this.mode == 'detach') ? i18n._('Detach Tags') : i18n._('Attach Tags'),
                    minWidth : 70,
                    scope : this,
                    handler : this.onUpdate,
                    iconCls : 'action_saveAndClose'
                });
        this.action_cancel = new Ext.Action({
                    text : i18n._('Cancel'),
                    minWidth : 70,
                    scope : this,
                    handler : this.onCancel,
                    iconCls : 'action_cancel'
                });

    },

    initStore : function() {
            
        this.store = new Ext.data.JsonStore({
                    id : 'id',
                    root : 'results',
                    totalProperty : 'totalCount',
                    fields : Tine.Tinebase.Model.Tag,
                    baseParams : {
                        method : 'Tinebase.searchTagsByForeignFilter',
                        filterData: this.selectionModel.getSelectionFilter(),
                        filterName: this.recordClass.getMeta('appName') + '_Model_' +  this.recordClass.getMeta('modelName') + 'Filter'
                        }
                });
        
        this.store.load();
        
    },

    initButtons : function() {
        this.fbar = ['->', this.action_cancel, this.action_update];
    },
    
    getFormItems : function() {
        return {
            border : false,
            frame : true,
            layout : 'form',
            items : [{
                region : 'center',
                layout : {
                    align : 'stretch',
                    type : 'vbox'
                }
            }, this.view]
        };
    },
    
    initTemplate: function() {
        this.tpl = new Ext.XTemplate(
            '<tpl for=".">', 
                '<div class="x-combo-list-item">',
                    '<input class="tagcheckel" type="checkbox" style="margin-right:3px;float:left" id="{values.id}" /><div class="tb-grid-tags" style="margin-top:2px;background-color:{values.color};">&#160;</div>',
                    '<div class="x-widget-tag-tagitem-text" style="margin-top:1px" ext:qtip="', 
                        '{[this.encode(values.name)]}', 
                        '<tpl if="type == \'personal\' ">&nbsp;<i>(' + i18n._('personal') + ')</i></tpl>',
                        '</i>&nbsp;[{occurrence}]',
                        '<tpl if="description != null && description.length &gt; 1"><hr>{[this.encode(values.description)]}</tpl>" >',
                        
                        '&nbsp;{[this.encode(values.name)]}&nbsp;({values.selection_occurrence})',
                        '<tpl if="type == \'personal\' ">&nbsp;<i>(' + i18n._('personal') + ')</i></tpl>',
                    '</div>',
                '</div>', 
            '</tpl>',
            {
                encode: function(value) {
                     if (value) {
                        return Tine.Tinebase.common.doubleEncode(value);
                    } else {
                        return '';
                    }
                }
            }
        );
    },
    
    
    initView : function() {
        this.view = new Ext.DataView({
            anchor : '100% 100%',
            autoScroll : true,
            store : this.store,
            tpl : this.tpl,
            emptyText : i18n._('No Tags to detach found in the selected records'),
            loadingText : i18n._('Please Wait...'),
            style : 'background:#fff;'
        });
    },
    
    onCancel: function() {
        this.fireEvent('cancel');
    },
    // TODO: formitems could not be fetched by formpanel->getform->getvalues
    onUpdate: function() {
        
        this.loadMask = new Ext.LoadMask(this.getEl(), {msg: i18n._('Detaching Tags')});
        this.loadMask.show();
        
        var els = Ext.select('input.tagcheckel');
        var checked = [];
        els.each(function(el){
            if(el.dom.checked) checked.push(el.id);
        });

        var filter = this.selectionModel.getSelectionFilter();
        var filterModel = this.recordClass.getMeta('appName') + '_Model_' +  this.recordClass.getMeta('modelName') + 'Filter';
        
        Tine.Tinebase.detachTagsFromMultipleRecords(filter, filterModel, checked, this.onUpdated.createDelegate(this));

    },
    
    onUpdated: function() {
        this.loadMask.hide();
        this.fireEvent('updated');
    }
    

});


/***/ }),
/* 1165 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.widgets', 'Tine.widgets.tags');

/**
 * @namespace   Tine.widgets.tags
 * @class       Tine.widgets.tags.TagFilter
 * @extends     Tine.widgets.grid.PickerFilter
 */
Tine.widgets.tags.TagFilter = Ext.extend(Tine.widgets.grid.PickerFilter, {
    
    field: 'tag',
    defaultOperator: 'equals',
    
    /**
     * @private
     */
    initComponent: function() {
        this.picker = Tine.widgets.tags.TagCombo;
        this.recordClass = Tine.Tinebase.Model.Tag;
        
        Tine.widgets.tags.TagFilter.superclass.initComponent.call(this);
        
        this.label = i18n._('Tag');
    }
});
Tine.widgets.grid.FilterToolbar.FILTERS['tinebase.tag'] = Tine.widgets.tags.TagFilter;



/***/ }),
/* 1166 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.widgets', 'Tine.widgets.tags');

/**
 * @namespace   Tine.widgets.tags
 * @class       Tine.widgets.tags.TagsMassAttachAction
 * @extends     Ext.Action
 */
Tine.widgets.tags.TagsMassAttachAction = function(config) {
    config.text = config.text ? config.text : i18n._('Add Tags');
    config.iconCls = 'action_tag';
    config.handler = config.handler ? config.handler : this.handleClick.createDelegate(this);
    config.scope = config.scope ? config.scope : this.handleClick.createDelegate(this);
    Ext.apply(this, config);
    
    this.store = new Ext.data.SimpleStore({
        fields: Tine.Tinebase.Model.Tag
    });
    
    this.store.on('add', this.manageOkBtn, this);
    this.store.on('remove', this.manageOkBtn, this);
    
    Tine.widgets.tags.TagsMassAttachAction.superclass.constructor.call(this, config);
};

Ext.extend(Tine.widgets.tags.TagsMassAttachAction, Ext.Action, {
    
    /**
     * called when tags got updates
     * 
     * @type Function
     */
    updateHandler: Ext.emptyFn,
    
    /**
     * scope of update handler
     * 
     * @type Object
     */
    updateHandlerScope: null,
    
    loadMask: null,
    
    /**
     * @cfg {mixed} selectionModel
     * 
     * selection model (required)
     */
    selectionModel: null,
    
    /**
     * @cfg {function} recordClass
     * 
     * record class of records to filter for (required)
     */
    recordClass: null,
    
    getFormItems: function() {
        return new Tine.widgets.grid.PickerGridPanel({
            height: 'auto',
            searchComboConfig: {app: this.app},
            recordClass: Tine.Tinebase.Model.Tag,
            store: this.store,
            labelRenderer: Tine.Tinebase.common.tagRenderer
        });
    },
    
    manageOkBtn: function() {
        if (this.win && this.win.okButton) {
            this.win.okButton.setDisabled(! this.store.getCount());
        }
    },
    
    handleClick: function() {
        // NOTE: in gridPanels ctxMenu (and so this action) is only created once
        this.store.removeAll();
        
        this.win = Tine.WindowFactory.getWindow({
            layout: 'fit',
            width: 300,
            height: 300,
            padding: '5px',
            modal: true,
            closeAction: 'hide', // mhh not working :-(
            title: i18n._('Select Tags'),
            items: [{
                xtype: 'form',
                buttonAlign: 'right',
                border: false,
                layout: 'fit',
                items: this.getFormItems(),
                buttons: [{
                    text: i18n._('Cancel'),
                    minWidth: 70,
                    scope: this,
                    handler: this.onCancel,
                    iconCls: 'action_cancel'
                }, {
                    text: i18n._('Ok'),
                    ref: '../../../okButton',
                    disabled: this.store ? !this.store.getCount() : true,
                    minWidth: 70,
                    scope: this,
                    handler: this.onOk,
                    iconCls: 'action_saveAndClose'
                }]
            }]
        });
    },
    
    onCancel: function() {
        this.win.close();
    },
    
    onOk: function() {
        var tags = [];
        this.store.each(function(r) {
            tags.push(r.data);
        }, this);
        
        if (! tags) {
            this.win.close();
            return;
        }
        
        this.loadMask = new Ext.LoadMask(this.win.getEl(), {msg: i18n._('Attaching Tag')});
        this.loadMask.show();
        
        var filter = this.selectionModel.getSelectionFilter();
        var filterModel = this.recordClass.getMeta('appName') + '_Model_' +  this.recordClass.getMeta('modelName') + 'Filter';
        
        // can't use Ext direct because the timeout is not configurable
        //Tine.Tinebase.attachTagToMultipleRecords(filter, filterModel, tag, this.onSuccess.createDelegate(this));
        Ext.Ajax.request({
            scope: this,
            timeout: 1800000, // 30 minutes
            success: this.onSuccess.createDelegate(this),
            params: {
                method: 'Tinebase.attachMultipleTagsToMultipleRecords',
                filterData: filter,
                filterName: filterModel,
                tags: tags
            },
            failure: function(response, options) {
                this.loadMask.hide();
                Tine.Tinebase.ExceptionHandler.handleRequestException(response, options);
            }
        });
    },
    
    onSuccess: function() {
        this.updateHandler.call(this.updateHandlerScope || this);
        this.loadMask.hide();
        this.win.close();
    }
});


/***/ }),
/* 1167 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.widgets', 'Tine.widgets.tags');

/**
 * @namespace   Tine.widgets.tags
 * @class       Tine.widgets.tags.TagsMassDetachAction
 * @extends     Ext.Action
 */
Tine.widgets.tags.TagsMassDetachAction = function(config) {
    config.text = config.text ? config.text : i18n._('Detach tag(s)');
    config.iconCls = 'x-widget-tag-action-detach';
    config.handler = this.handleClick.createDelegate(this);
    Ext.apply(this, config);
    
    Tine.widgets.tags.TagsMassDetachAction.superclass.constructor.call(this, config);
};

Ext.extend(Tine.widgets.tags.TagsMassDetachAction, Ext.Action, {
    
    /**
     * called when tags got updates
     * 
     * @type Function
     */
    updateHandler: Ext.emptyFn,
    
    /**
     * scope of update handler
     * 
     * @type Object
     */
    updateHandlerScope: null,
    
    /**
     * @cfg {mixed} selectionModel
     * 
     * selection model (required)
     */
    selectionModel: null,
    
    /**
     * @cfg {function} recordClass
     * 
     * record class of records to filter for (required)
     */
    recordClass: null,
    
    formPanel: null,
    
    initFormPanel: function() {
        this.formPanel = new Tine.widgets.tags.TagToggleBox({
            selectionModel: this.selectionModel,
            recordClass: this.recordClass,
            callingAction: this,
            mode: 'detach'
        });
        
        this.formPanel.on('cancel', function() {
            this.purgeListeners();
            this.win.close();
        });
        
        this.formPanel.on('updated', function() {
            this.callingAction.onSuccess();
        });
        
    },
     
    handleClick: function() {
        this.initFormPanel();
        this.win = Tine.WindowFactory.getWindow({
            layout: 'fit',
            width: 300,
            height: 150,
            modal: true,       
            title: i18n._('Select Tag(s) to detach'),
            items: this.formPanel

        });
        
        this.formPanel.win = this.win;
        
    },
 
    onSuccess: function() {
        this.updateHandler.call(this.updateHandlerScope || this);
        this.win.close();
    }
});


/***/ }),
/* 1168 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.mainscreen');

/**
 * @namespace   Tine.widgets.mainscreen
 * @class       Tine.widgets.mainscreen.WestPanel
 * @extends     Ext.ux.Portal
 * 
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * 
 * @todo make save button working again -> move to here
 * 
 * @constructor
 * @xtype       tine.widgets.mainscreen.westpanel
 */
Tine.widgets.mainscreen.WestPanel = function(config) {
    Ext.apply(this, config);
    
    this.defaults = {};
    
    Tine.widgets.mainscreen.WestPanel.superclass.constructor.apply(this, arguments);
};

Ext.extend(Tine.widgets.mainscreen.WestPanel, Ext.ux.Portal, {
    
    /**
     * @cfg {Array} contentTypes
     * Array of Objects
     * Object Properties: "model", "requiredRight"
     * Prop. model (e.g. "Abc") will be expanded to Tine.Application.Model.Abc
     * Prop. requiredRight (e.g. "read") will be expanded to Tine.Tinebase.common.hasRight('read', this.app.appName, recordClass.getMeta('recordsName').toLowerCase())
     * Prop. singularContainerMode (bool): when true, the records of the model doesn't have containers, so no containertreepanel is rendered
     *                                     but a containertreenode must be defined in Application.js
     * Prop. genericCtxActions (Array of Strings e.g. "['rename','grant']") Creates a Tine.widgets.tree.ContextMenu with the actions in this array                                    
     */
    contentTypes: null,

    /**
     * @cfg {String} contentType
     * defines the contentType (e.g. Xyz), which will be expanded to Tine.Application.Model.Xyz, this panel controls 
     */
    contentType: null,
    
    /**
     * @cfg {String} containerTreeClass
     * name of container tree class in namespace of this app (defaults to TreePanel)
     * the class name will be expanded to Tine[this.appName][this.containerTreePanelClassName]
     */
    containerTreePanelClassName: 'TreePanel',
    
    /**
     * @cfg {String} favoritesPanelClassName
     * name of favorites class in namespace of this app (defaults to FilterPanel)
     * the class name will be expanded to Tine[this.appName][this.favoritesPanelClassName]
     */
    favoritesPanelClassName: 'FilterPanel',
    
    /**
     * @cfg {Bool} hasContentTypeTreePanel
     * west panel has modulePanel (defaults to null -> autodetection)
     */
    hasContentTypeTreePanel: null,
    
    /**
     * @cfg {Bool} hasContainerTreePanel
     * west panel has containerTreePanel (defaults to null -> autodetection)
     */
    hasContainerTreePanel: null,
    
    /**
     * @cfg {Bool} hasFavoritesPanel
     * west panel has favorites panel (defaults to null -> autodetection)
     */
    hasFavoritesPanel: null,
    
    layout: 'column',
    cls : 'x-portal',
    defaultType : 'portalcolumn',
    autoHeight: true,
    border: false,
    stateful: true,
    stateEvents: ['collapse', 'expand', 'drop'],

    /**
     * inits this west panel
     */
    initComponent: function() {
        this.stateId = this.app.appName + this.getContentType() + '-mainscreen-westpanel';
        this.canonicalName = this.canonicalName ? this.canonicalName : this.getContentType();
        var fpcn = this.getContentType() + this.favoritesPanelClassName;
        this.hasFavoritesPanel = Ext.isBoolean(this.hasFavoritesPanel) ? this.hasFavoritesPanel : !! Tine[this.app.appName][fpcn];
        this.hasContentTypeTreePanel = Ext.isArray(this.contentTypes) && this.contentTypes.length > 1;
        
        if (this.hasContainerTreePanel === null) {
            this.hasContainerTreePanel = true;

            if (this.contentTypes) {
                var def = Tine.widgets.MainScreen.prototype.getContentTypeDefinition.call(this, this.contentType);
                if (def && def.singularContainerMode) {
                    this.hasContainerTreePanel = false;
                }
            }
        }
        
        this.items = this.getPortalColumn();
        Tine.widgets.mainscreen.WestPanel.superclass.initComponent.apply(this, arguments);
    },
    
    /**
     * called after rendering process
     */
    afterRender: function() {
        Tine.widgets.mainscreen.WestPanel.superclass.afterRender.apply(this, arguments);
        
        this.getPortalColumn().items.each(function(item, idx) {
            // kill x-scrollers
            if (item.getEl && item.getEl()) {
                this.xScrollKiller(item);
            } else {
                item.on('afterrender', this.xScrollKiller, this);
            }
            
            //bubble state events
            // fire selectionchange event of all items as westPanel events
            item.enableBubble(['collapse', 'expand', 'selectionchange']);
        }, this);
    },
    
    /**
     * initializes the stateif no state is saved
     * overwrites the Ext.Component initState method
     */
    initState: function() {
        var state = Ext.state.Manager.get(this.stateId) ? Ext.state.Manager.get(this.stateId) : this.getState();
        
        if(this.fireEvent('beforestaterestore', this, state) !== false){
            this.applyState(Ext.apply({}, state));
            this.fireEvent('staterestore', this, state);
        }
    },
    
    /**
     * applies state to cmp
     * 
     * @param {Object} state
     */
    applyState: function(state) {
        var collection = this.getPortalColumn().items,
            c = new Array(collection.getCount()), k = collection.keys, items = collection.items;
        
        Ext.each(state.order, function(position, idx) {
            c[idx] = {key: k[position], value: items[position], index: position};
        }, this);
        
        for(var i = 0, len = collection.length; i < len; i++){
            if (c[i] && c[i].value) {
                items[i] = c[i].value;
                k[i] = c[i].key;
            }
        }
        collection.fireEvent('sort', collection);
        
        collection.each(function(item, idx) {
            if ((! item) || typeof item.addFill === 'function') return;
            if (item.getEl()) {
                item[state.collapsed[idx] ? 'collapse' : 'expand'](false);
            } else {
                item.collapsed = !!state.collapsed[idx];
            }
        }, this);
        
    },
    
    /**
     * returns additional items for the westpanel
     * template fn to be overrwiten by subclasses
     * 
     * @return {Array} of Ext.Panel
     */
    getAdditionalItems: function() {
        return this.additionalItems || [];
    },

    getContentType: function() {
        return (this.contentType) ? this.contentType : '';
    },
    
    /**
     * returns containerTree panel
     * 
     * @return {Tine.Tinebase.widgets.ContainerTreePanel}
     */
    getContainerTreePanel: function() {
        var contentType = this.app.getMainScreen().getActiveContentType(),
            panelName = contentType + 'TreePanel';

        if (! this[panelName]) {
            if (Tine[this.app.appName].hasOwnProperty(panelName)) {
                this[panelName] = new Tine[this.app.appName][panelName]({app: this.app});
            } else {
                this[panelName] = new Tine.widgets.persistentfilter.PickerPanel({app: this.app, contentType: contentType});
            }
            this[panelName].on('click', function (node, event) {
                // no scope here -> this means containerTree
                if(node != this.lastClickedNode) {
                    this.lastClickedNode = node;
                    this.fireEvent('selectionchange');
                }
            });
        }
        
        return this[panelName];

    },
    
    /**
     * returns favorites panel
     * 
     * @return {Ext.Panel}
     */
    getFavoritesPanel: function() {
        var ct = this.app.getMainScreen().getActiveContentType(),
            panelName = window.lodash.upperFirst(ct + 'FilterPanel');
        
        try {
            if(!this[panelName]) {
                var fpConfig = {
                    
                    rootVisible : false,
                    border : false,
                    collapsible : true,
                
                    root: null,
                    
                    titleCollapse: true,
                    title: '',
                    baseCls: 'ux-arrowcollapse',
                    
                    app: this.app,
                    contentType: ct,
                    recordClass: this.recordClass,

                    style: {
                        width: '100%',
                        overflow: 'hidden'
                    },
                    
                    treePanel: (this.hasContainerTreePanel) ? this.getContainerTreePanel() : null,
                    listeners: {
                        scope: this,
                        click: function (node, event) {
                            // this is westPanel
                            // fire westpanel event on favorite change
                            if(node != this.lastClickedNode) {
                                this.lastClickedNode = node;
                                this.fireEvent('selectionchange');
                            }
                        }
                    }
                };
                if (Tine[this.app.name].hasOwnProperty(panelName)) {
                    this[panelName] = new Tine[this.app.appName][panelName](fpConfig);
                } else {
                    this[panelName] = new Tine.widgets.persistentfilter.PickerPanel(fpConfig);
                }
            }
        } catch(e) {
            Tine.log.info('No Favorites Panel created');
        }
        
        return this[panelName];
    },
    
    /**
     * returns filter plugin of west panel for given content type
     * 
     * @param {String} contentType
     * @return {Tine.widgets.grid.FilterPlugin}
     */
    getFilterPlugin: function(contentType) {
        if (this.hasContainerTreePanel) {
            return this.getContainerTreePanel().getFilterPlugin();
        } else {
            return new Tine.widgets.grid.FilterPlugin({
                getValue: function() {
                    return [
                    ];
                }
            });
        }
    },
    
    /**
     * returns the one and only portalcolumn of this west panel
     * 
     * @return {Ext.ux.PortalColumn}
     */
    getPortalColumn: function() {
        if (! this.portalColumn) {

            var items = [];
            
            if (this.hasContainerTreePanel) {
                var containerTreePanel = this.getContainerTreePanel();
                
                var containersName = containerTreePanel.recordClass
                    ? containerTreePanel.recordClass.getContainersName()
                    : i18n._('containers');
                
                // recheck if container tree is a container tree as in apps not dealing
                // with containers we don't want a collapsed arrow header
                var isContainerTreePanel = typeof containerTreePanel.selectContainerPath === 'function';
                
                if (isContainerTreePanel) {
                    this.defaults = {
                        collapsible: true,
                        baseCls: 'ux-arrowcollapse',
                        animCollapse: true,
                        titleCollapse:true,
                        draggable : true,
                        autoScroll: false
                    };
                }
                
                items.push(Ext.apply(this.getContainerTreePanel(), {
                    title: isContainerTreePanel ? containersName : false,
                    collapsed: isContainerTreePanel
                }, this.defaults));
                
            }
            
            if (this.hasFavoritesPanel) {
                // favorites panel
                items.unshift(Ext.apply(this.getFavoritesPanel(), {
                    title: i18n._('Favorites')
                }, this.defaults));
            }
            
            items = items.concat(this.getAdditionalItems());

            // save original/programatical position
            // NOTE: this has to be done before applyState!
            if (items.length) {
                Ext.each(items, function(item, idx) {
                    item.startPosition = idx;
                }, this);
            }
            this.portalColumn = new Ext.ux.PortalColumn({
                columnWidth: 1,
                items: items
            });
            
            this.portalColumn.on('resize', function(cmp, width) {
                this.portalColumn.items.each(function(item) {
                    item.setWidth(width);
                }, this);
            }, this);
        }

        return this.portalColumn;
    },
    
    /**
     * gets state of this cmp
     */
    getState: function() {
        var state = {
            order: [],
            collapsed: []
        };
        
        this.getPortalColumn().items.each(function(item, idx) {
            state.order.push(item.startPosition);
            state.collapsed.push(!!item.collapsed);
        }, this);
        
        return state;
    },
    
    /**
     * kill x scrollers of given component
     * 
     * @param {Ext.Component} cmp
     */
    xScrollKiller:  function(cmp) {
        var panelEls = cmp.getEl().child('div[class^=' + this.defaults.baseCls + '-body]');
        if (panelEls) {
            panelEls.applyStyles('overflow-x: hidden');
            // IE 11 dosn't respect the style :-(
            panelEls.on('scroll', function(e) {
                panelEls.dom.scrollLeft = 0;
            });
        }
    }
});

Ext.reg('tine.widgets.mainscreen.westpanel', Tine.widgets.mainscreen.WestPanel);


/***/ }),
/* 1169 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.Tinebase');
/**
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.LicenseScreen
 * @extends     Ext.Window
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * 
 * @param {Object} config The configuration options.
 */

Tine.Tinebase.LicenseScreen = Ext.extend(Ext.Window, {
    
    closeAction: 'close',
    modal: true,
    width: 400,
    height: 360,
    minWidth: 400,
    minHeight: 360,
    layout: 'fit',
    title: null,
    
    /**
     * init component
     */
    initComponent: function() {

        this.title = i18n._('License');
        
        this.items = {
            layout: 'fit',
            border: false,
            padding: 10,
            autoScroll:true,
            autoLoad: {
                url: 'LICENSE',
                isUpload: true,
                method: 'GET',
                callback: function(el, s, response) {
                    el.update(Ext.util.Format.nl2br(response.responseText));
                }
            },
            buttons: [{
                text: i18n._('Ok'),
                iconCls: 'action_saveAndClose',
                handler: this.close,
                scope: this
            }]
        };
        
        Tine.Tinebase.LicenseScreen.superclass.initComponent.call(this);
    }
});

/***/ }),
/* 1170 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.Tinebase');

/**
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.CreditsScreen
 * @extends     Ext.Window
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 * 
 * @param {Object} config The configuration options.
 */

Tine.Tinebase.CreditsScreen = Ext.extend(Ext.Window, {
    
    closeAction: 'close',
    modal: true,
    width: 400,
    height: 360,
    minWidth: 400,
    minHeight: 360,
    layout: 'fit',
    title: null,
    
    /**
     * init component
     */
    initComponent: function() {

        this.title = i18n._('Credits');
        
        this.items = {
            layout: 'fit',
            border: false,
            
            padding: 10,
            autoScroll:true,
            autoLoad: {
                url: 'CREDITS',
                isUpload: true,
                method: 'GET',
                callback: function(el, s, response) {
                    el.update(Ext.util.Format.nl2br(response.responseText));
                }
            },
            buttons: [{
                text: i18n._('Ok'),
                iconCls: 'action_saveAndClose',
                handler: this.close,
                scope: this
            }]
        };
        
        Tine.Tinebase.CreditsScreen.superclass.initComponent.call(this);
    }
});


/***/ }),
/* 1171 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.widgets');

/**
 * Widget for country selection
 *
 * @namespace   Tine.widgets
 * @class       Tine.widgets.CountryCombo
 * @extends     Ext.form.ComboBox
 */
Tine.widgets.CountryCombo = Ext.extend(Ext.form.ComboBox, {
    fieldLabel: 'Country',
    displayField:'translatedName',
    valueField:'shortName',
    typeAhead: true,
    forceSelection: true,
    mode: 'local',
    triggerAction: 'all',
    selectOnFocus:true,
    
    /**
     * @private
     */
    initComponent: function() {
        this.store = this.getCountryStore();
        this.emptyText = i18n._('Select a country...');
        
        Tine.widgets.CountryCombo.superclass.initComponent.call(this);
    },
    /**
     * @private store has static content
     */
    getCountryStore: function(){
        var store = Ext.StoreMgr.get('Countries');
        if(!store) {
            store = new Ext.data.JsonStore({
                baseParams: {
                    method:'Tinebase.getCountryList'
                },
                root: 'results',
                id: 'shortName',
                fields: ['shortName', 'translatedName'],
                remoteSort: false,
                sortInfo: {
                    field: 'translatedName',
                    direction: 'ASC'
                }
            });
            Ext.StoreMgr.add('Countries', store);
        }
        
        var countryList = Locale.getTranslationList('CountryList');
        if (countryList) {
            var storeData = {results: []};
            for (var shortName in countryList) {
                storeData.results.push({shortName: shortName, translatedName: countryList[shortName]});
            }
            store.loadData(storeData);
        }
        return store;
    }
});

Ext.reg('widget-countrycombo', Tine.widgets.CountryCombo);


/***/ }),
/* 1172 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @author      Michael Spahn <m.spahn@metaways.de
 * @copyright   Copyright (c) 2007-2014 Metaways Infosystems GmbH (http://www.metaways.de)
 **/

/*global Ext, Tine, Locale*/

Ext.ns('Tine.widgets', 'Tine.widgets.activities');


/************************* tab panel *********************************/

/**
 * Class for a activities tab with notes/activities grid*
 * 
 * @namespace   Tine.widgets.activities
 * @class       Tine.widgets.activities.ActivitiesTabPanel
 * @extends     Ext.Panel
 */
Tine.widgets.activities.ActivitiesTabPanel = Ext.extend(Ext.Panel, {

    /**
     * @cfg {String} app Application which uses this panel
     */
    app: '',
    
    /**
     * @var {Ext.data.JsonStore}
     * Holds activities of the record this panel is displayed for
     */
    store: null,
    
    /**
     * the translation object
     */
    translation: null,

    /**
     * @cfg {Object} paging defaults
     */
    paging: {
        start: 0,
        limit: 20,
        sort: 'creation_time',
        dir: 'DESC'
    },

    /**
     * the record id
     */
    record_id: null,
    
    /**
     * the record model
     */
    record_model: null,

    /**
     * @cfg {Number} pos
     * position 500 = 100 + 100*4 -> means fourth one after app specific tabs
     */
    pos: 500,

    /**
     * other config options
     */
    title: null,
    layout: 'fit',
    canonicalName: 'HistoryGrid',
    
    getActivitiesGrid: function () {
        // @todo add row expander on select ?
        // @todo add context menu ?
        // @todo add buttons ?        
        // @todo add more renderers ?
        
        // the columnmodel
        var columnModel = new Ext.grid.ColumnModel([
            { resizable: true, id: 'note_type_id', header: this.translation.gettext('Type'), dataIndex: 'note_type_id', width: 15, 
                renderer: Tine.widgets.activities.getTypeIcon },
            { resizable: true, id: 'note', header: this.translation.gettext('Note'), dataIndex: 'note', renderer: this.noteRenderer.createDelegate(this)},
            { resizable: true, id: 'created_by', header: this.translation.gettext('Created By'), dataIndex: 'created_by', width: 70},
            { resizable: true, id: 'creation_time', header: this.translation.gettext('Timestamp'), dataIndex: 'creation_time', width: 50, 
                renderer: Tine.Tinebase.common.dateTimeRenderer }
        ]);

        columnModel.defaultSortable = true; // by default columns are sortable
        
        // the rowselection model
        var rowSelectionModel = new Ext.grid.RowSelectionModel({multiSelect: true});

        // the paging toolbar
        var pagingToolbar = new Ext.PagingToolbar({
            pageSize: parseInt(Tine.Tinebase.registry.get('preferences').get('pageSize'), 10) || 50,
            store: this.store,
            displayInfo: true,
            displayMsg: this.translation.gettext('Displaying history records {0} - {1} of {2}'),
            emptyMsg: this.translation.gettext("No history to display")
        });

        // the gridpanel
        var gridPanel = new Ext.grid.GridPanel({
            cls: 'tw-activities-grid',
            store: this.store,
            cm: columnModel,
            tbar: pagingToolbar,     
            selModel: rowSelectionModel,
            border: false,                  
            //autoExpandColumn: 'note',
            //enableColLock:false,
            //autoHeight: true,
            viewConfig: {
                autoFill: true,
                forceFit: true,
                ignoreAdd: true,
                autoScroll: true
            }  
        });
        
        return gridPanel;
    },

    noteRenderer: function(note) {
        var editDialog = this.findParentBy(function(c){return !!c.record}),
            record = editDialog ? editDialog.record : {},
            recordClass = Tine.Tinebase.data.RecordMgr.get(this.record_model) || Tine.Tinebase.data.RecordMgr.get(this.app + '_Model_' + this.record_model),
            appName = recordClass.getMeta('appName'),
            app = Tine.Tinebase.appMgr.get(appName),
            i18n = app ? app.i18n : window.i18n;

        note = Ext.util.Format.htmlEncode(note);
        note = note.replace(/( +[^ ]+ \(.*? -&gt; [^)]*)\)/g, '<br> \u00A0\u2022\u00A0 $&');

        if (recordClass) {
            Ext.each(recordClass.getFieldDefinitions(), function(field) {
                var _ = window.lodash,
                    i18nLabel = field.label ? i18n._hidden(field.label) : field.name,
                    regexp = new RegExp(' (' + _.escapeRegExp(field.name) +'|' + _.escapeRegExp(i18nLabel) + ') \\((.*?) (-&gt;) ([^)]*)\\)'),
                    struct = regexp.exec(note),
                    label = struct && struct.length == 5 ? struct[1] : null,
                    oldValue = label ? struct[2] : null,
                    newValue = label ? struct[4] : null,
                    renderer = Tine.widgets.grid.RendererManager.get(appName, recordClass, field.name, Tine.widgets.grid.RendererManager.CATEGORY_GRIDPANEL);

                if (label) {
                    var oldValue = renderer(oldValue, {}, record),
                        newValue = renderer(newValue, {}, record);

                    note = note.replace(regexp, i18nLabel + ' (' + oldValue + ' \u27bd ' + newValue + ')');
                } else {
                    // alternative form
                    regexp = new RegExp(' (' + _.escapeRegExp(field.name) +'|' + _.escapeRegExp(i18nLabel) + ') \\((.*)\\)');

                    struct = regexp.exec(note);
                    label = struct && struct.length == 3 ? struct[1] : null;
                    var value = label ? struct[2] : null;

                    note = note.replace(regexp, '<br> \u00A0\u2022\u00A0 ' + i18nLabel + ' (' + value + ')');
                }

            }, this);
        }

        return note;
    },

    /**
     * init the contacts json grid store
     */
    initStore: function () {

        this.store = new Ext.data.JsonStore({
            id: 'id',
            autoLoad: false,
            root: 'results',
            totalProperty: 'totalcount',
            fields: Tine.Tinebase.Model.Note,
            remoteSort: true,
            baseParams: {
                method: 'Tinebase.searchNotes'
            },
            sortInfo: {
                field: this.paging.sort,
                direction: this.paging.dir
            }
        });
        
        // register store
        Ext.StoreMgr.add('NotesGridStore', this.store);
        
        // prepare filter
        this.store.on('beforeload', function (store, options) {
            if (!options.params) {
                options.params = {};
            }
            
            // paging toolbar only works with this properties in the options!
            options.params.sort  = store.getSortState() ? store.getSortState().field : this.paging.sort;
            options.params.dir   = store.getSortState() ? store.getSortState().direction : this.paging.dir;
            options.params.start = options.params.start ? options.params.start : this.paging.start;
            options.params.limit = options.params.limit ? options.params.limit : this.paging.limit;
            
            options.params.paging = Ext.copyTo({}, options.params, 'sort,dir,start,limit');
            
            var filterToolbar = Ext.getCmp('activitiesFilterToolbar'),
                filter = filterToolbar ? filterToolbar.getValue() : [],
            // sanitize model name, we need APP_Model_MODELNAME here
                model = this.record_model.match(/_Model_/) ? this.record_model : this.app + '_Model_' + this.record_model;

            filter.push(
                {field: 'record_model', operator: 'equals', value: model },
                {field: 'record_id', operator: 'equals', value: this.getRecordId() },
                {field: 'record_backend', operator: 'equals', value: 'Sql' }
            );
                        
            options.params.filter = filter;
        }, this);
        
        // add new notes from notes store
        this.store.on('load', function (store, operation) {
            var notesStore = Ext.StoreMgr.lookup('NotesStore');
            if (notesStore) {
                notesStore.each(function (note) {
                    if (!note.data.creation_time) {
                        store.insert(0, note);
                    }
                });
            }
        }, this);
    },

    /**
     * @public
     *
     * @returns {string}
     */
    getRecordId: function() {
        return (this.record_id) ? this.record_id : 0;
    },

    /**
     * @private
     */
    initComponent: function () {

        // get translations
        this.translation = new Locale.Gettext();
        this.translation.textdomain('Tinebase');
        
        // translate / update title
        this.title = this.translation.gettext('History');
        
        // get store
        this.initStore();

        // get grid
        this.activitiesGrid = this.getActivitiesGrid();
        
        // the filter toolbar
        var filterToolbar = new Tine.widgets.grid.FilterToolbar({
            id : 'activitiesFilterToolbar',
            filterModels: [
                {label: i18n._('Quick Search'), field: 'query',         operators: ['contains']},
                //{label: this.translation._('Time'), field: 'creation_time', operators: ['contains']}
                {label: this.translation.gettext('Time'), field: 'creation_time', valueType: 'date', pastOnly: true}
                // user search is note working yet -> see NoteFilter.php
                //{label: this.translation._('User'), field: 'created_by', defaultOperator: 'contains'},
                // type search isn't implemented yet
                //{label: this.translation._('Type'), field: 'note_type_id', defaultOperator: 'contains'}
            ],
            defaultFilter: 'query',
            filters: []
        });
        
        filterToolbar.on('change', function () {
            this.store.load({});
        }, this);
                                                
        this.items = [        
            new Ext.Panel({
                layout: 'border',
                items: [{
                    region: 'center',
                    xtype: 'panel',
                    layout: 'fit',
                    border: false,
                    items: this.activitiesGrid
                }, {
                    region: 'north',
                    border: false,
                    items: filterToolbar,
                    listeners: {
                        scope: this,
                        afterlayout: function (ct) {
                            ct.suspendEvents();
                            ct.setHeight(filterToolbar.getHeight());
                            ct.ownerCt.layout.layout();
                            ct.resumeEvents();
                        }
                    }
                }]
            })
        ];
                
        // load store on activate
        this.on('activate', function (panel) {
            panel.store.load({});
        });
        
        // no support for multiple edit
        Tine.widgets.dialog.MultipleEditDialogPlugin.prototype.registerSkipItem(this);
        
        Tine.widgets.activities.ActivitiesTabPanel.superclass.initComponent.call(this);
    }
});
Ext.reg('tineactivitiestabpanel', Tine.widgets.activities.ActivitiesTabPanel);

/************************* helper *********************************/

/**
 * get note / activities types store
 * if available, load data from initial data
 *
 * @return Ext.data.JsonStore with activities types
 *
 * @todo translate type names / descriptions
 */
Tine.widgets.activities.getTypesStore = function () {
    var store = Ext.StoreMgr.get('noteTypesStore');
    if (!store) {
        store = new Ext.data.JsonStore({
            fields: Tine.Tinebase.Model.NoteType,
            baseParams: {
                method: 'Tinebase.getNoteTypes'
            },
            root: 'results',
            totalProperty: 'totalcount',
            id: 'id',
            remoteSort: false
        });
        /*if (Tine.Tinebase.registry.get('NoteTypes')) {
            store.loadData(Tine.Tinebase.registry.get('NoteTypes'));
        } else*/
        if (Tine.Tinebase.registry.get('NoteTypes')) {
            store.loadData(Tine.Tinebase.registry.get('NoteTypes'));
        }
        Ext.StoreMgr.add('noteTypesStore', store);
    }

    return store;
};

/**
 * get type icon
 *
 * @param   id of the note type record
 * @returns img tag with icon source
 *
 * @todo use icon_class here
 */
Tine.widgets.activities.getTypeIcon = function (id) {
    var typesStore = Tine.widgets.activities.getTypesStore();
    var typeRecord = typesStore.getById(id);
    if (typeRecord) {
        return '<img src="' + typeRecord.data.icon + '" ext:qtip="' + Tine.Tinebase.common.doubleEncode(typeRecord.data.description) + '"/>';
    } else {
        return '';
    }
};


/***/ }),
/* 1173 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2014 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.activities');

/**
 * @namespace   Tine.widgets.activities
 * @class       Tine.widgets.activities.ActivitiesGridPanel
 * @extends     Ext.grid.GridPanel
 * @author      Michael Spahn <m.spahn@metaways.de>
 */
Tine.widgets.activities.ActivitiesGridPanel = Ext.extend(Ext.grid.GridPanel, {
    /**
     * The calling EditDialog
     * @type Tine.widgets.activities.EditDialog
     */
    editDialog: null,

    /**
     * title
     *
     * @type String
     */
    title: null,

    /**
     * the record
     * @type Record
     */
    record: null,

    /**
     * @type Tinebase.Application
     */
    app: null,

    /**
     * @cfg {String} requiredGrant to make actions
     */
    requiredGrant: 'editGrant',

    /**
     * @cfg {Number} pos
     * position 200 = 100 + 100*1 -> means first one after app specific tabs
     */
    pos: 200,

    /* config */
    frame: true,
    border: true,
    autoScroll: true,
    layout: 'fit',
    canonicalName: 'NotesGrid',

    store: null,

    viewConfig: {},

    /**
     * initializes the component
     */
    initComponent: function () {
        this.record = this.editDialog.record;
        this.app = this.editDialog.app;
        this.title = this.i18nTitle = i18n._('Notes');

        // init actions
        this.actionUpdater = new Tine.widgets.ActionUpdater({
            evalGrants: false
        });

        this.initToolbarAndContextMenu();
        this.initStore();
        this.initColumnModel();
        this.initSelectionModel();

        //Tine.widgets.dialog.MultipleEditDialogPlugin.prototype.registerSkipItem(this);
        this.editDialog.on('load', this.onLoadRecord, this);
        this.editDialog.on('recordUpdate', this.onRecordUpdate, this);

        Tine.widgets.activities.ActivitiesGridPanel.superclass.initComponent.call(this);

        this.on('rowcontextmenu', function (grid, row, e) {
            e.stopEvent();
            var selModel = grid.getSelectionModel();
            if (!selModel.isSelected(row)) {
                selModel.selectRow(row);
            }
            this.contextMenu.showAt(e.getXY());
        }, this);
    },

    /**
     * get columns
     * @return Array
     */
    getColumns: function () {
        var columns = [
            {
                id: 'note_type_id',
                header: i18n._('Type'),
                dataIndex: 'note_type_id',
                renderer: Tine.widgets.activities.getTypeIcon,
                width: 30
            },
            {
                id: 'note',
                dataIndex: 'note',
                width: 500,
                header: i18n._('Note'),
                sortable: true,
                renderer: this.renderMultipleLines
            },
            {
                id: 'created_by',
                header: i18n._('Created By'),
                dataIndex: 'created_by'
            },
            {
                id: 'creation_time',
                header: i18n._('Creation time'),
                dataIndex: 'creation_time',
                width: 120,
                renderer: Tine.Tinebase.common.dateTimeRenderer
            }
        ];

        return columns;
    },

    /**
     * There is no option to display multiple lines in extjs 3.* this renderer replaces newlines with html breaks
     *
     * @param value
     * @returns {string}
     */
    renderMultipleLines: function (value) {
        return '<div style="white-space:normal !important;">' + Ext.util.Format.nl2br(Ext.util.Format.htmlEncode(value)) + '</div>';
    },

    /**
     * Setup column model for grid
     */
    initColumnModel: function () {
        this.cm = new Ext.grid.ColumnModel(this.getColumns());
        this.cm.defaultSortable = true; // by default columns are sortable
    },

    /**
     * init store
     * @private
     */
    initStore: function () {
        this.store = new Ext.data.SimpleStore({
            fields: Tine.Tinebase.Model.Note
        });
    },

    /**
     * updates the title ot the tab
     * @param {Integer} count
     */
    updateTitle: function (count) {
        count = Ext.isNumber(count) ? count : this.store.getCount();
        this.setTitle(this.i18nTitle + ' (' + count + ')');
    },

    /**
     * is called from onApplyChanges of the edit dialog per save event
     *
     * @param {Tine.widgets.dialog.EditDialog} dialog
     * @param {Tine.Tinebase.data.Record} record
     * @return {Boolean}
     */
    onRecordUpdate: function(dialog, record) {
        if (record.data.hasOwnProperty('notes')) {
            record.data.notes = null;
            delete record.data.notes;
        }

        record.set('notes', this.getData());
    },

    /**
     * populate store
     *
     * @param {EditDialog} editDialog
     * @param {Record} record
     * @param {Function} ticketFn
     */
    onLoadRecord: function (editDialog, record, ticketFn) {
        var _ = window.lodash,
            interceptor = ticketFn(),
            notes = record.get('notes'),
            evalGrants = editDialog.evalGrants,
            hasRequiredGrant = !evalGrants || _.get(record, record.constructor.getMeta('grantsPath') + '.' + this.requiredGrant);

        this.store.purgeListeners();
        this.store.removeAll();

        if (notes && notes.length > 0) {
            this.updateTitle(notes.length);
            var notesRecords = [];

            Ext.each(notes, function (notes) {
                notesRecords.push(new Tine.Tinebase.Model.Tree_Node(notes, notes.id));
            }, this);
            this.store.add(notesRecords);
        } else {
            this.updateTitle(0);
        }

        // add other listeners after population
        if (this.store) {
            this.store.on('update', this.updateTitle, this);
            this.store.on('add', this.updateTitle, this);
            this.store.on('remove', this.updateTitle, this);
        }
        interceptor();

        this.setReadOnly(! hasRequiredGrant);
    },

    setReadOnly: function(readOnly) {
        this.readOnly = readOnly;
        this.action_add.setDisabled(readOnly);
        this.action_remove.setDisabled(readOnly);
    },

    /**
     * init sel model
     * @private
     */
    initSelectionModel: function () {
        this.selModel = new Ext.grid.RowSelectionModel({multiSelect: true});

        this.selModel.on('selectionchange', function (selModel) {
            var rowCount = selModel.getCount();
            this.actionUpdater.updateActions(selModel);
            this.action_remove.setDisabled(this.readOnly);

            // The tine server can't handle edits for notes at the moment
            // @todo make this work
            //this.action_edit.setDisabled(this.readOnly);
        }, this);
    },

    /**
     * init toolbar and context menu
     * @private
     */
    initToolbarAndContextMenu: function () {
        this.action_add = new Ext.Action({
            text: String.format(i18n._('Add {0}'), this.i18nTitle),
            iconCls: 'action_add',
            scope: this,
            handler: this.addNote
        });

        this.action_edit = new Ext.Action({
            text: String.format(i18n._('Edit {0}'), this.i18nTitle),
            iconCls: 'action_edit',
            scope: this,
            disabled: true,
            visible: false,
            handler: this.addNote
        });

        this.action_remove = new Ext.Action({
            text: String.format(i18n._('Remove {0}'), this.i18nTitle),
            iconCls: 'action_remove',
            scope: this,
            disabled: true,
            handler: this.removeNote
        });

        //@todo make tine edit notes if client sents modified data
        this.tbar = [
            this.action_add,
            //this.action_edit,
            this.action_remove
        ];

        //@todo make tine edit notes if client sents modified data
        this.contextMenu = new Ext.menu.Menu({
            plugins: [{
                ptype: 'ux.itemregistry',
                key:   'Tinebase-MainContextMenu'
            }],
            items: [
                //this.action_edit,
                this.action_remove
            ]
        });
    },

    /**
     * Handler: Remove every selected note, 1 or more
     * @param sel
     */
    removeNote: function (sel) {
        Ext.each(this.getSelectionModel().getSelections(), function (record) {
            this.store.remove(this.store.getById(record.id));
        });
    },

    /**
     * Handler: Opens a dialog and for note creation and saves to store
     * @param action
     * @param event
     */
    addNote: function (button, event) {
        var typesStore = Tine.widgets.activities.getTypesStore();
        var data = [];


        // if is edit
        var selectedRecord = this.getSelectionModel().getSelected();
        if (selectedRecord && button.iconCls == 'action_edit') {
            var typeId = selectedRecord.get('type_id');
            var note = selectedRecord.get('note');
            var recordId = selectedRecord.id;
        }

        typesStore.each(function (record) {
            if (record.data.is_user_type == 1) {
                data.push({'type_id': record.data.id,'name': record.data.name});
            }
        }, this);

        this.filteredTypeStore =  new Ext.data.JsonStore({
            fields: [
                'type_id',
                'name'
            ],
            data: data,
            idIndex: 0
        });

        this.typeComboBox = new Ext.form.ComboBox({
            store: this.filteredTypeStore,
            valueField: 'type_id',
            mode: 'local',
            displayField: 'name',
            fieldLabel: i18n._('Type'),
            forceSelection: true,
            allowEmpty: false,
            editable: false,
            anchor: '100% 100%'
        });

        this.typeComboBox.setValue(typeId || 1);

        this.onClose = function () {
            this.window.close();
        };

        this.onCancel = function () {
            this.onClose();
        };

        this.onOk = function () {
            if (this.formPanel.getForm().findField('notification').validate()) {
                var text = this.formPanel.getForm().findField('notification').getValue();
                this.onNoteAdd(text, this.typeComboBox.getValue(), recordId);
                this.onClose();
            }
        };

        this.cancelAction = new Ext.Action({
            text: i18n._('Cancel'),
            iconCls: 'action_cancel',
            minWidth: 70,
            handler: this.onCancel,
            scope: this
        });

        this.okAction = new Ext.Action({
            text: i18n._('Ok'),
            iconCls: 'action_saveAndClose',
            minWidth: 70,
            handler: this.onOk,
            scope: this
        });

        var buttons = [];
        if (Tine.Tinebase.registry && Tine.Tinebase.registry.get('preferences') && Tine.Tinebase.registry.get('preferences').get('dialogactionsOrderStyle') === 'Windows') {
            buttons.push(this.okAction, this.cancelAction);
        }
        else {
            buttons.push(this.cancelAction, this.okAction);
        }

        this.formPanel = new Ext.FormPanel({
            labelAlign: 'top',
            border: false,
            frame: true,
            buttons: buttons,
            items: [
                this.typeComboBox,
                {
                    xtype: 'textarea',
                    name: 'notification',
                    fieldLabel: i18n._('Enter new note:'),
                    labelSeparator: '',
                    allowBlank: false,
                    value: note || '',
                    anchor: '100% 100%'
                }
            ]
        });

        this.window = Tine.WindowFactory.getWindow({
            title: i18n._('Add Note'),
            width: 500,
            height: 450,
            modal: true,
            actionAlign: 'right',
            border: false,
            items: this.formPanel
        });
    },

    /**
     * on add note
     * - add note to activities panel
     */
    onNoteAdd: function (text, typeId, recordId) {
        if (text && typeId  && recordId == undefined) {
            var newNote = new Tine.Tinebase.Model.Note({note_type_id: typeId, note: text});
            this.store.add(newNote);
        } else if (text, typeId, recordId) {
            this.store.getById(recordId).set('note_type_id', typeId);
            this.store.getById(recordId).set('note', text);
        }
    },

    /**
     * get notes data as array
     *
     * @return {Array}
     */
    getData: function () {
        var notes = [];

        this.store.each(function (record) {
            notes.push(record.data);
        });

        return notes;
    }
});


/***/ }),
/* 1174 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/*global Ext, Tine*/

Ext.ns('Tine.Tinebase.widgets.form');

/**
 * @namespace   Tine.Tinebase.widgets.form
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @class       Tine.Tinebase.widgets.form.RecordPickerComboBox
 * @extends     Ext.form.ComboBox
 * 
 * <p>Abstract base class for recordPickers like account/group pickers </p>
 * 
 * Usage:
 * <pre><code>
var resourcePicker = new Tine.Tinebase.widgets.form.RecordPickerComboBox({
    recordClass: Tine.Calendar.Model.Resource
});
   </code></pre>
 */
Tine.Tinebase.widgets.form.RecordPickerComboBox = Ext.extend(Ext.ux.form.ClearableComboBox, {
    /**
     * @cfg {bool} blurOnSelect
     * blur this combo when record got selected, useful to be used in editor grids (defaults to false)
     */
    blurOnSelect: false,
    
    /**
     * @cfg {Tine.Tinebase.data.Record} recordClass
     * model of record to be picked (required) 
     */
    recordClass: null,
    
    /**
     * @cfg {Tine.Tinebase.data.RecordProxy} recordProxy
     * record backend 
     */
    recordProxy: null,
    
    /**
     * @property app
     * @type Tine.Tinebase.Application
     */
    app: null,
    
    /**
     * @type Tine.Tinebase.data.Record selectedRecord
     * @property selectedRecord 
     * The last record which was selected
     */
    selectedRecord: null,
    
    /**
     * sort by field
     * 
     * @type String 
     */
    sortBy: null,
    
    /**
     * sort direction
     * 
     * @type String 
     */
    sortDir: 'ASC',
    
    /**
     * @type string
     * @property lastStoreTransactionId
     */
    lastStoreTransactionId: null,
    
    /**
     * if set to false, it is not possible to add the same record handled in this.editDialog
     * this.editDialog must also be set
     * 
     * @cfg {Boolean} allowLinkingItself
     */
    allowLinkingItself: null,
    
    /**
     * the editDialog, the form is nested in. Just needed if this.allowLinkingItself is set to false
     * 
     * @type Tine.widgets.dialog.EditDialog editDialog
     */
    editDialog: null,
    
    /**
     * always use additional filter
     * 
     * @type {Array}
     */
    additionalFilters: null,
    
    triggerAction: 'all',
    pageSize: 50,
    minChars: 3,
    forceSelection: true,
    minListWidth: 300,

    // NOTE: minWidth gets not evaluated by ext - it's just a hint for consumers!
    minWidth: 180,
    
    initComponent: function () {
        this.app = Tine.Tinebase.appMgr.get(this.recordClass.getMeta('appName'));
        this.displayField = this.recordClass.getMeta('titleProperty');
        this.valueField = this.recordClass.getMeta('idProperty');
        this.disableClearer = ! this.allowBlank;

        this.emptyText = this.emptyText ||
            (this.readOnly || this.disabled ? '' : String.format(i18n._('Search for {0} ...'), this.recordClass.getRecordName()));

        this.loadingText = i18n._('Searching...');

        this.pageSize = parseInt(Tine.Tinebase.registry.get('preferences').get('pageSize'), 10) || this.pageSize;

        this.store = new Tine.Tinebase.data.RecordStore({
            readOnly: true,
            proxy: this.recordProxy || undefined,
            totalProperty: this.totalProperty,
            root: this.root,
            recordClass: this.recordClass
        });
        
        this.on('beforequery', this.onBeforeQuery, this);
        this.store.on('beforeloadrecords', this.onStoreBeforeLoadRecords, this);
        this.initTemplate();
        
        Tine.Tinebase.widgets.form.RecordPickerComboBox.superclass.initComponent.call(this);
    },
    
    /**
     * respect record.getTitle method
     */
    initTemplate: function() {
        if (! this.tpl) {
            this.tpl = new Ext.XTemplate('<tpl for="."><div class="x-combo-list-item" ext:qtip="{[this.doubleEncode(values.description)]}">{[this.getTitle(values.' + this.recordClass.getMeta('idProperty') + ')]}</div></tpl>', {
                getTitle: (function(id) {
                    var record = this.getStore().getById(id),
                        title = record ? record.getTitle() : ' ';
                    
                    return Ext.util.Format.htmlEncode(title);
                }).createDelegate(this)
            });
        }
    },

    // TODO re-init this.list if it goes away?
    // NOTE: we sometimes lose this.list (how?). prevent error by checking existence.
    doResize: function(w){
        if(!Ext.isDefined(this.listWidth) && this.list){
            var lw = Math.max(w, this.minListWidth);
            this.list.setWidth(lw);
            this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));
        }
    },

    /**
     * prepare paging and sort
     * 
     * @param {Ext.data.Store} store
     * @param {Object} options
     */
    onBeforeLoad: function (store, options) {
        Tine.Tinebase.widgets.form.RecordPickerComboBox.superclass.onBeforeLoad.call(this, store, options);

        this.lastStoreTransactionId = options.transactionId = Ext.id();

        Ext.apply(options.params, {
            sort: (this.sortBy) ? this.sortBy : this.displayField,
            dir: this.sortDir
        });
    },
    
    /**
     * onStoreBeforeLoadRecords
     * 
     * @param {Object} o
     * @param {Object} options
     * @param {Boolean} success
     * @param {Ext.data.Store} store
     */
    onStoreBeforeLoadRecords: function(o, options, success, store) {
        if (! this.lastStoreTransactionId || options.transactionId && this.lastStoreTransactionId !== options.transactionId) {
            Tine.log.debug('Tine.Tinebase.widgets.form.RecordPickerComboBox::onStoreBeforeLoadRecords cancelling old transaction request.');
            return false;
        }
    },
    
    /**
     * use beforequery to set query filter
     * 
     * @param {Object} qevent
     */
    onBeforeQuery: function (qevent) {
        var filter = [
            {field: 'query', operator: 'contains', value: qevent.query }
        ];
        if (this.additionalFilters !== null && this.additionalFilters.length > 0) {
            for (var i = 0; i < this.additionalFilters.length; i++) {
                filter.push(this.additionalFilters[i]);
            }
        }
        this.store.baseParams.filter = filter;
        this.tpl.lastQuery = qevent.query;
    },

    /**
     * get last usesed query
     *
     * @returns {String}
     */
    getLastQuery: function() {
        return this.lastQuery;
    },

    /**
     * relay contextmenu events
     * 
     * @param {Ext.Container} ct
     * @param {Number} position
     * @private
     */
    onRender : function(ct, position){
        Tine.Tinebase.widgets.form.RecordPickerComboBox.superclass.onRender.call(this, ct, position);
        
        var c = this.getEl();
 
        this.mon(c, {
            scope: this,
            contextmenu: Ext.emptyFn
        });
 
        this.relayEvents(c, ['contextmenu']);
    },
    
    /**
     * store a copy of the selected record
     * 
     * @param {Tine.Tinebase.data.Record} record
     * @param {Number} index
     */
    onSelect: function (record, index) {
        this.selectedRecord = record;
        return Tine.Tinebase.widgets.form.RecordPickerComboBox.superclass.onSelect.call(this, record, index);
    },
    
    /**
     * on keypressed("enter") event to add record
     * 
     * @param {Tine.Addressbook.SearchCombo} combo
     * @param {Event} event
     */ 
    onSpecialkey: function (combo, event) {
        if (event.getKey() === event.ENTER) {
            var id = combo.getValue();
            var record = this.store.getById(id);
            this.onSelect(record);
        }
    },
    
    /**
     * set value and prefill store if needed
     * 
     * @param {mixed} value
     */
    setValue: function (value) {
        if (value) {
            
            // value is a record
            if (typeof(value.get) === 'function') {
                if (this.store.indexOf(value) < 0) {
                    this.store.addSorted(value);
                }
                value = value.get(this.valueField);
            }
            
            // value is a js object
            else if (Ext.isObject(value)) {
                var record = this.recordProxy ? this.recordProxy.recordReader({responseText: Ext.encode(value)}) : new this.recordClass(value)
                if (! this.store.getById(value.id)) {
                    this.store.addSorted(record);
                }
                value = value[this.valueField] || '';
            }
            
            // value is the current id
            else if (Ext.isPrimitive(value) && value == this.getValue()) {
                return this.setValue(this.selectedRecord);
            }
        }
        
        var r = (value !== "") ? this.findRecord(this.valueField, /* id = */ value) : null,
            text = value,
            description = '';
        
        if (r){
            text = r.getTitle();
            description = r.get('description') || description;
            this.selectedRecord = r;
            if (this.allowLinkingItself === false) {
                // check if editDialog exists
                if (this.editDialog && this.editDialog.record && r.getId() == this.editDialog.record.getId()) {
                    Ext.MessageBox.show({
                        title: i18n._('Failure'),
                        msg: i18n._('You tried to link a record with itself. This is not allowed!'),
                        buttons: Ext.MessageBox.OK,
                        icon: Ext.MessageBox.ERROR  
                    });
                    return;
                }
            }
            
        } else if (Ext.isDefined(this.valueNotFoundText)){
            text = this.valueNotFoundText;
        }
        this.lastSelectionText = text;
        if (this.hiddenField){
            this.hiddenField.value = Ext.value(value, '');
        }
        Tine.Tinebase.widgets.form.RecordPickerComboBox.superclass.setValue.call(this, text);
        
        var el = this.getEl();
        if (el) {
            el.set({qtip: Tine.Tinebase.common.doubleEncode(description)});
        }
        
        this.value = value;
        return this;
    }
});
Ext.reg('tinerecordpickercombobox', Tine.Tinebase.widgets.form.RecordPickerComboBox);


/***/ }),
/* 1175 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Alexander Stintzing <alex@stintzing.net>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.relation');

/**
 * @namespace   Tine.widgets.relation
 * @class       Tine.widgets.relation.PickerCombo
 * @author      Alexander Stintzing <a.stintzing@metaways.de>
 */

Tine.widgets.relation.PickerCombo = Ext.extend(Ext.Container, {

    // private
    items: null,
    combo: null,
    layout: 'fit',
    /**
     * @cfg {Tine.widgets.dialog.EditDialog}
     */
    editDialog: null,
    /**
     * @cfg {Tine.Tinebase.data.Record} recordClass
     */
    recordClass: null,
    /**
     * @cfg {Ext.data.SimpleStore} store 
     */
    store: null,

    app: null,

    /**
     * initializes the component
     */
    initComponent: function() {
        if (!this.app && this.recordClass) {
            this.app = Tine.Tinebase.appMgr.get(this.recordClass.getMeta('appName'));
        }

        this.combo = Tine.widgets.form.RecordPickerManager.get(this.app, this.recordClass, Ext.applyIf({},this));
        this.items = [this.combo];

        this.deferredLoading();

        Tine.widgets.relation.PickerCombo.superclass.initComponent.call(this);
    },

    /**
     * wait until the relationPanel is created
     */
    deferredLoading: function() {

        if (!this.editDialog.relationsPanel) {
            this.deferredLoading.defer(100, this);
            return;
        }

        this.store = this.editDialog.relationsPanel.getStore();
        this.fullModelName = this.recordClass.getMeta('appName') + '_Model_' + this.recordClass.getMeta('modelName');

        this.combo.on('select', function() {
            var value = this.combo.getValue();

            if (value.length) {
                // check if another relationPicker has the same record selected
                if (this.modelUnique) {
                    var hasDuplicate = false,
                        fieldName;

                    Ext.each(this.editDialog.relationPickers, function(picker) {
                        if(picker != this) {
                            if(picker.getValue() == this.getValue()) {
                                hasDuplicate = true;
                                fieldName = picker.fieldLabel;
                                return false;
                            }
                        }
                    }, this);
                }

                if (hasDuplicate) {
                    if(this.combo.startRecord) {
                        var split = this.fullModelName.split('_Model_');
                        var startRecord = this.combo.startRecord;
                    } else {
                        startRecord = null;
                    }
                    this.combo.reset();
                    this.combo.setValue(startRecord);
                    this.combo.selectedRecord = startRecord;
                    this.combo.markInvalid(String.format(i18n._('The {1} "{2}" is already used in the Field "{0}" and can be linked only once!'), fieldName, this.recordClass.getRecordName(), recordToAdd.get(this.recordClass.getMeta('titleProperty'))));
                    return false;
                }

                if (value != this.combo.startValue) {
                    this.removeIdFromStore(this.combo.startValue);
                }
                this.addRecord(this.combo.selectedRecord);
            } else {
                this.removeIdFromStore(this.combo.startValue);
            }
        }, this);

        if (!this.editDialog.relationPickers) this.editDialog.relationPickers = [];
        this.editDialog.relationPickers.push(this);
    },

    /**
     * Add a record to store if not existing
     * @param recordToAdd
     */
    addRecord: function (recordToAdd) {
        var record = this.store.findBy(function (record) {
            if (record && record.get('related_id') === this.combo.getValue() && record.get('type') === this.relationType) {
                return true;
            }
        }, this);

        if (record === -1) {
            var relationRecord = new Tine.Tinebase.Model.Relation(Ext.apply(this.editDialog.relationsPanel.getRelationDefaults(), {
                related_record: recordToAdd.data,
                related_id: recordToAdd.id,
                related_model: this.fullModelName,
                type: this.relationType,
                related_degree: this.relationDegree
            }), recordToAdd.id);

            this.combo.startRecord = recordToAdd;
            this.store.add(relationRecord);
        }
    },

    /**
     * removes the relation record by the related record id, if the type is the same handled by this combo
     * @param {String} id
     */
    removeIdFromStore: function(id) {
        if(id) {
            var oldRecPos = this.store.findBy(function(record) {
                if(record) {
                    if(record.get('related_id') == id && record.get('type') == this.relationType) return true;
                } else {
                    return false;
                }
            }, this);
            this.store.removeAt(oldRecPos);
        }
    },

    /**
     * Shortcut for the equivalent method of the combo
     */
    setValue: function(v) {
        // If v might be a record, we try to select it and if not in store we create it in relation store
        if (v.hasOwnProperty('data')) {
            this.addRecord(v);
        }

        return this.combo.setValue(v);
    },
    
    /**
     * Shortcut for the equivalent method of the combo
     */
    clear: function() {
        this.combo.startRecord = null;
        return this.combo.setValue(null);
    },
    
    /**
     * Shortcut for the equivalent method of the combo
     */
    getValue: function() {
        return this.combo.getValue();
    },
    
    /**
     * Shortcut for the equivalent method of the combo
     */
    setReadOnly: function(v) {
        return this.combo.setReadOnly(v);
    }
});

Ext.reg('tinerelationpickercombo', Tine.widgets.relation.PickerCombo);

/***/ }),
/* 1176 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.Tinebase.widgets.form');

/**
 * config grid panel
 *
 * @namespace   Tine.Tinebase.widgets.form
 * @class       Tine.Tinebase.widgets.form.RecordsPickerCombo
 * @extends     Tine.widgets.grid.LayerCombo
 */
Tine.Tinebase.widgets.form.RecordsPickerCombo = Ext.extend(Ext.ux.form.LayerCombo, {

    hideButtons: false,
    layerAlign: 'tr-br?',
    minLayerWidth: 400,
    layerHeight: 300,
    allowBlur: true,

    lazyInit: true,

    formConfig: {
        labelAlign: 'left',
        labelWidth: 30
    },

    pickerGrid: null,
    inEditor: true,
    recordClass: null,

    // NOTE: minWidth gets not evaluated by ext - it's just a hint for consumers!
    minWidth: 200,

    initComponent: function () {
        this.emptyText = this.emptyText || (this.readOnly || this.disabled ? '' : i18n._('Search for records ...'));
        this.currentValue = this.currentValue || [];

        Tine.Tinebase.widgets.form.RecordsPickerCombo.superclass.initComponent.call(this);
        this.store = new Ext.data.SimpleStore({
            fields: this.recordClass
        });

        this.on('beforecollapse', this.onBeforeCollapse, this);
    },

    getItems: function () {
        this.pickerGrid = new Tine.widgets.grid.PickerGridPanel({
            recordClass: this.recordClass,
            height: this.layerHeight - 40 || 'auto',
            onStoreChange: Ext.emptyFn,
            store: this.store
        });

        return [this.pickerGrid];
    },

    /**
     * cancel collapse if ctx menu is shown
     */
    onBeforeCollapse: function () {
        return this.pickerGrid
            && (!this.pickerGrid.contextMenu || this.pickerGrid.contextMenu.hidden)
            && !this.pickerGrid.editing;
    },

    /**
     * @param {String} value
     * @return {Ext.form.Field} this
     */
    setValue: function (value) {
        var _ = window.lodash;

        value = value || [];
        this.setStoreFromArray(value);
        if (this.rendered) {
            var text = _.reduce(this.store.data.items, function(result, record) {
                return result.concat(record.getTitle());
            }, []).join(', ');
            this.setRawValue(text || this.emptyText);
            this.el[(text ? 'remove' : 'add') + 'Class'](this.emptyClass);
        }

        var oldValue = this.currentValue;
        this.currentValue = value;
        Tine.Tinebase.common.assertComparable(this.currentValue);

        if (JSON.stringify(value) != JSON.stringify(oldValue)){
            this.fireEvent('change', this, value, oldValue);
        }

        return this;
    },

    reset : function() {
        this.currentValue = this.originalValue;

        Tine.Tinebase.widgets.form.RecordsPickerCombo.superclass.reset.apply(this, arguments);
    },

    afterRender: function () {

        Tine.Tinebase.widgets.form.RecordsPickerCombo.superclass.afterRender.apply(this, arguments);
        if (this.currentValue) {
            this.setValue(this.currentValue);
        }
    },
    /**
     * sets values to innerForm (grid)
     */
    setFormValue: function (value) {
        if (!value) {
            value = [];
        }

        this.setStoreFromArray(value);
    },

    /**
     * retrieves values from grid
     *
     * @returns {*|Array}
     */
    getFormValue: function () {
        return this.getFromStoreAsArray();
    },

    /**
     * get values from store (as array)
     *
     * @param {Array}
     *
     */
    setStoreFromArray: function(data) {
        data = data || [];
        //this.pickerGrid.getStore().clearData();
        this.store.removeAll();

        for (var i = data.length-1; i >=0; --i) {
            var recordData = data[i],
                newRecord = new this.recordClass(recordData);
            this.store.insert(0, newRecord);
        }
    },

    /**
     * get values from store (as array)
     *
     * @return {Array}
     *
     */
    getFromStoreAsArray: function() {
        var result = [];
        this.store.each(function(record) {
            result.push(record.data);
        }, this);

        return result;
    }
});

Ext.reg('tinerecordspickercombobox', Tine.Tinebase.widgets.form.RecordsPickerCombo);


/***/ }),
/* 1177 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.widgets.grid');

/**
 * config grid panel
 *
 * @namespace   Tine.widgets.grid
 * @class       Tine.widgets.grid.PickerGridLayerCombo
 * @extends     Tine.Tinebase.widgets.form.RecordsPickerCombo
 */
Tine.widgets.grid.PickerGridLayerCombo = Ext.extend(Tine.Tinebase.widgets.form.RecordsPickerCombo, {

    /**
     * @cfg {Record} gridRecordClass
     */
    gridRecordClass: null,

    initComponent: function () {
        this.recordClass = this.gridRecordClass;
        Tine.widgets.grid.PickerGridLayerCombo.superclass.initComponent.call(this);

    }

});

Ext.reg('tinepickergridlayercombo', Tine.widgets.grid.PickerGridLayerCombo);


/***/ }),
/* 1178 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     form
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine.Tinebase.widgets.form');
 
/**
 * Configuration Panel
 * 
 * @namespace   Tine.Tinebase.widgets.form
 * @class       Tine.Tinebase.widgets.form.ConfigPanel
 * @extends     Ext.FormPanel
 * 
 * <p>Configuration Panel</p>
 * <p><pre>
 * NOTE: 
 * - For each section in the config file, a group in the form is added.
 * - Form names are constructed <section>_<subsection>... and transformed transparently by this component
 * - Enabling and Disabling of sections is handled automatically if you give the id 'setup-<section>-group' 
 *   to the checkboxToggle enabled fieldset
 *   
 * TODO         make TABS work
 * TODO         add reload button
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Tinebase.widgets.form.ConfigPanel
 */
Tine.Tinebase.widgets.form.ConfigPanel = Ext.extend(Ext.FormPanel, {
    
    /**
     * @cfg {String} saveMethod 
     * save method (for example 'Setup.saveConfig')
     */
    saveMethod: '',
    
    /**
     * @cfg {String} registryKey 
     * registry key (for example 'configData')
     */
    registryKey: '',
    
    /**
     * @cfg {Array} actionToolbarItems
     * additional items for actionToolbar
     */
    actionToolbarItems: [],

    /**
     * form panel cfg
     * 
     * @private
     */
    border: false,
    bodyStyle:'padding:5px 5px 0',
    labelAlign: 'left',
    labelSeparator: ':',
    labelWidth: 150,
    autoScroll: true,
    
    /**
     * application object
     * 
     * @property app
     * @type Tine.Tinebase.Application
     */
    app: null,

    /**
     * save config and update setup registry
     */
    onSaveConfig: function() {
        if (this.isValid()) {
            var configData = this.form2config();

            this.loadMask.show();
            Ext.Ajax.request({
                scope: this,
                params: {
                    method: this.saveMethod,
                    data: configData
                },
                success: function(response) {
                    var regData = Ext.util.JSON.decode(response.responseText);
                    // replace some registry data
                    for (key in regData) {
                        if (key != 'status') {
                            Tine.Setup.registry.replace(key, regData[key]);
                        }
                    }
                    this.loadMask.hide();
                },
                failure: function(response, options) {
                    this.loadMask.hide();
                    var responseText = Ext.util.JSON.decode(response.responseText),
                        exception = responseText.data ? responseText.data : responseText;
                        
                    switch (exception.code) {
                        // Service Unavailable! / configuration problem
                        case 503:
                            Ext.MessageBox.show({
                                title: i18n._('Configuration Problem'),
                                msg: exception.message,
                                buttons: Ext.Msg.OK,
                                icon: Ext.MessageBox.WARNING,
                                fn: function() {
                                    // TODO only reload own config data
                                    Tine.Tinebase.common.reload({});
                                }
                            });
                            break;
                        default:
                            Tine.Tinebase.ExceptionHandler.handleRequestException(exception);
                    }
                }
            });
        } else {
            this.alertInvalidData();
        }
    },
    
    alertInvalidData: function() {
        Ext.Msg.alert(this.app.i18n._('Invalid configuration'), this.app.i18n._('You need to correct the red marked fields before config could be saved'));
    },
    
    /**
     * @private
     */
    initComponent: function() {
        this.initActions();
        this.items = this.getFormItems();

        Tine.Tinebase.widgets.form.ConfigPanel.superclass.initComponent.call(this);
    },
    
    /**
     * @private
     */
    onRender: function(ct, position) {
        Tine.Tinebase.widgets.form.ConfigPanel.superclass.onRender.call(this, ct, position);
        
        // always the same shit! when form panel is rendered, the form fields are not yet rendered ;-(
        this.config2form.defer(250, this, [Tine.Setup.registry.get(this.registryKey)]);
        
        Tine.Setup.registry.on('replace', this.applyRegistryState, this);
        
        this.loadMask = new Ext.LoadMask(ct, {msg: this.app.i18n._('Transferring Configuration...')});
    },
    
    /**
     * applies registry state to this cmp
     */
    applyRegistryState: function() {
    
    },

    /**
     * returns config form (extending classes need to overwrite this)
     * 
     * @private
     * @return {Array} items
     */
    getFormItems: function() {
        return [];
    },
    
    /**
     * transforms form data into a config object
     * 
     * @return {Object} configData
     */
    form2config: function() {
        // getValues only returns RAW HTML content... and we don't want to 
        // define a record here
        var formData = {};
        this.getForm().items.each(function(field) {
            formData[field.name] = field.getValue();
        });
        
        var configData = {};
        var keyParts, keyPart, keyGroup, dataPath;
        for (var key in formData) {
            keyParts = key.split('_');
            dataPath = configData;
            
            while (keyPart = keyParts.shift()) {
                if (keyParts.length == 0) {
                    dataPath[keyPart] = formData[key];
                } else {
                    if (!dataPath[keyPart]) {
                        dataPath[keyPart] = {};
                        
                        // is group active?
                        keyGroup = Ext.getCmp('setup-' + keyPart + '-group');
                        if (keyGroup && keyGroup.checkboxToggle) {
                            dataPath[keyPart].active = !keyGroup.collapsed;
                        }
                    }
                
                    dataPath = dataPath[keyPart];
                }
            }
        }
        return configData;
    },
    
    /**
     * loads form with config data
     * 
     * @param  {Object} configData
     */
    config2form: function(configData) {
        var formData = arguments[1] ? arguments[1] : {};
        var currKey  = arguments[2] ? arguments[2] : '';
        
        var keyGroup;
        for (key in configData) {
            if(typeof configData[key] == 'object') {
                this.config2form(configData[key], formData, currKey ? currKey + '_' + key : key);
            } else {
                formData[currKey + '_' + key] = configData[key];
                
                // activate group?
                keyGroup = Ext.getCmp('setup-' + currKey + '-group');
                if (keyGroup && key == 'active' && configData.active) {
                    keyGroup.expand();
                }
            }
        }
        
        // skip transform calls
        if (! currKey) {
            this.getForm().setValues(formData);
            this.applyRegistryState();
        }
    },
    
    /**
     * @private
     */
    initActions: function() {
        this.action_saveConfig = new Ext.Action({
            text: this.app.i18n._('Save config'),
            iconCls: 'setup_action_save_config',
            scope: this,
            handler: this.onSaveConfig,
            disabled: true
        });
        
        // TODO add this to reload registry and update form / button
        /*
        this.action_reloadConfig = new Ext.Action({
            text: this.app.i18n._('Reload config'),
            handler: function() {
                Tine.Setup.registry.get(this.registryKey).on('replace', this.config2form, this, [Tine.Setup.registry.get(this.registryKey)]);
                Tine.Tinebase.tineInit.initRegistry();
            },
            iconCls: 'x-tbar-loading',
            scope: this
        });
        */

        this.actions = [
            this.action_saveConfig
            //this.action_reloadConfig
        ];
        
        this.actionToolbar = new Ext.Toolbar({
            items: this.actions.concat(this.actionToolbarItems)
        });
    },
    
    /**
     * checks if form is valid
     * 
     * @return {Boolean}
     */
    isValid: function() {
        var form = this.getForm();
        return form.isValid();
    },
    
    /**
     * change card layout card according to combo value
     * 
     * @param {Ext.form.ComboBox} combo
     * @param {String} backendIdPrefix
     */
    changeCard: function(combo, backendIdPrefix) {
        var value = combo.getValue();
        Tine.log.debug('changeCard() -> value: ' + value);
        
        var cardPanel = Ext.getCmp(backendIdPrefix + 'CardLayout'),
            cardLayout = (cardPanel) ? cardPanel.getLayout() : null;
        
        if (cardLayout && cardLayout !== 'card') {
            Tine.log.debug('changeCard() -> set active item: ' + backendIdPrefix + value);
            cardLayout.setActiveItem(backendIdPrefix + value);
        }
    }
});


/***/ }),
/* 1179 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.Tinebase.widgets.form');

Tine.Tinebase.widgets.form.AutoCompleteField = Ext.extend(Ext.form.ComboBox, {
    
    /**
     * @cfg {String} property 
     * property to autocomplete (required)
     */
    property: null,
    
    /**
     * @cfg {Ext.data.Record} recordClass
     * record definition class  (required)
     */
    recordClass: null,
    
    /**
     * config
     */
    forceSelection: false,
    triggerAction: 'all',
    minChars: 3,
    queryParam: 'startswith',
    hideTrigger: true,
    
    /**
     * @private
     */
    initComponent: function() {
        if (! this.property && this.name) {
            this.property = this.name;
        }
        
        this.displayField = this.valueField = this.property;
        
        this.store = new Ext.data.JsonStore({
            fields: [this.property],
            baseParams: {
                method:  'Tinebase.autoComplete',
                appName: this.recordClass.getMeta('appName'),
                modelName: this.recordClass.getMeta('modelName'),
                property: this.property
            },
            root: 'results',
            totalProperty: 'totalcount'
        });
        
        
        Tine.Tinebase.widgets.form.AutoCompleteField.superclass.initComponent.call(this);
    }
});

Ext.reg('tine.widget.field.AutoCompleteField', Tine.Tinebase.widgets.form.AutoCompleteField);


/***/ }),
/* 1180 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.form');

/**
 * Upload Button
 * 
 * @namespace   Tine.widgets.form
 * @class       Tine.widgets.form.FileUploadButton
 * @extends     Ext.Button
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @constructor
 * @param {Object} config The configuration options.
 */
Tine.widgets.form.FileUploadButton = Ext.extend(Ext.Button, {
    /**
     * @cfg {Array} allowedTypes
     * array with allowed file types (for example: ['jpg', 'gif', 'png']
     */
    allowedTypes: null,

    /**
     * @cfg {String} uploadTempFileMethod
     */
    uploadTempFileMethod: 'Tinebase.uploadTempFile',

    /**
     * @cfg {String} uploadUrl
     */
    uploadUrl: 'index.php',

    /**
     * @property browsePlugin
     * @type Ext.ux.file.BrowsePlugin
     */
    browsePlugin: null,
    
    // private config overrides
    iconCls: 'action_import',

    multiple: false,
    
    /**
     * init this upload button
     */
    initComponent: function() {
        this.origHandler = this.handler;
        this.origScope = this.scope;
        this.origIconCls = this.iconCls;
        
        this.handler = this.onFileSelect;
        this.scope = this;
        
        this.browsePlugin = new Ext.ux.file.BrowsePlugin({
            multiple: this.multiple
        });
        
        this.plugins = this.plugins || [];
        this.plugins.push(this.browsePlugin);
        
        Tine.widgets.form.FileUploadButton.superclass.initComponent.call(this);
    },
    
    /**
     * called when a file got selected
     * 
     * @param {ux.BrowsePlugin} fileSelector
     * @param {Ext.EventObj} e
     */
    onFileSelect: function(fileSelector, event) {
        if (Ext.isArray(this.allowedTypes) && this.allowedTypes.indexOf(fileSelector.getFileCls()) < 0) {
            Ext.MessageBox.alert(i18n._('Wrong File Type'), [i18n._('Please select a file with one of the following extensions:'), '<br />', this.allowedTypes].join('')).setIcon(Ext.MessageBox.ERROR);
            return;
        }
        
        this.upload = new Ext.ux.file.Upload({
            fileSelector: fileSelector,
            uploadTempFileMethod: this.uploadTempFileMethod,
            url: this.uploadUrl
        });
        this.upload.on('uploadcomplete', this.onUploadComplete, this);
        
        this.setIconClass('x-btn-wait');
        this.upload.upload();
    },
    
    /**
     * called when the upload completed
     * 
     * @param {Ext.ux.file.Upload} upload
     * @param {Ext.ux.file.Upload.file} fileRecord
     */
    onUploadComplete: function(upload, fileRecord) {
        this.fileRecord = fileRecord;
        
        this.setText([fileRecord.get('name'), ' (', Tine.Tinebase.common.byteRenderer(fileRecord.get('size')), ')'].join(''));
//        this.setIconClass(this.origIconCls);
        this.setIconClass('action_saveAndClose');
        
        // autowidth does not work
        this.setWidth(Ext.util.TextMetrics.measure(this.btnEl, this.text).width + 20);
        
        if (Ext.isFunction(this.origHandler)) {
            this.origHandler.apply(this.origScope, arguments);
        }
    },
    
    getTempFileId: function() {
        return this.fileRecord ? this.fileRecord.get('tempFile').id : null;
    }
    
});

Ext.reg('tw.uploadbutton', Tine.widgets.form.FileUploadButton);

/***/ }),
/* 1181 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2012 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/*global Ext, Tine*/

Ext.ns('Tine.Tinebase.widgets.form');

/**
 * This is a TriggerField which generates a random UID on click
 * (UID generated by Tine.Tinebase.data.Record.generateUID())
 * 
 * @namespace   Tine.Tinebase.widgets.form
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @class       Tine.Tinebase.widgets.form.UidTriggerField
 * @extends     Ext.form.TriggerField
 */
Tine.Tinebase.widgets.form.UidTriggerField = Ext.extend(Ext.form.TriggerField, {

    itemCls: 'tw-uidTriggerField',
    enableKeyEvents: true,

    /**
     * Overrides initComponent to reenable field if it is empty
     */
    initComponent: function () {
        this.on('keyup', function() {
            this.setHideTrigger(!!this.getValue())
        }, this);

        Tine.Tinebase.widgets.form.UidTriggerField.superclass.initComponent.call(this);
    },

    /**
     * Overrides setValue and shows trigger field if value is empty and hides if it is filled
     *
     * @return {Ext.form.Field} this
     * @param value
     */
    setValue: function (value) {
        this.setHideTrigger(this.getValue());
        return Tine.Tinebase.widgets.form.UidTriggerField.superclass.setValue.call(this, value);
    },

    /**
     * Fills field on click with a random, unique checksum and hides trigger button
     */
    onTriggerClick: function () {
        if (!this.getValue()) {
            this.setValue(Tine.Tinebase.data.Record.generateUID());
            this.setHideTrigger(true);
        }
    }
});

Ext.reg('tw-uidtriggerfield',Tine.Tinebase.widgets.form.UidTriggerField);


/***/ }),
/* 1182 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.Tinebase.widgets.form');

/**
 * Simple password field widget to allow toggling between text and password field
 *
 * @namespace   Tine.Tinebase.widgets.form
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @class       Tine.Tinebase.widgets.form.PasswordTriggerField
 * @extends     Ext.form.TriggerField
 */
Tine.Tinebase.widgets.form.PasswordTriggerField = Ext.extend(Ext.form.TwinTriggerField, {
    /**
     * @cfg {Boolean} locked: true,
     */
    locked: true,
    /**
     * @cfg {Boolean} locked: true,
     */
    clipboard: true,

    itemCls: 'tw-passwordTriggerField',
    enableKeyEvents: true,

    initComponent: function() {
        // NOTE: we need to have this in the instance - otherwise we'd overwrite the prototype
        this.defaultAutoCreate = {tag: "input", type: "password", size: "16", autocomplete: "off"};

        this.defaultAutoCreate.type = this.locked ? 'password' : 'text';
        Tine.Tinebase.widgets.form.PasswordTriggerField.superclass.initComponent.apply(this, arguments);
    },

    initTrigger: function () {
        Tine.Tinebase.widgets.form.PasswordTriggerField.superclass.initTrigger.apply(this, arguments);
        this.triggers[0].set({'ext:qtip': i18n._('Cleartext/Hidden')});
        this.triggers[1].set({'ext:qtip': i18n._('Copy to Clipboard')});
        if (this.locked) {
            this.triggers[0].addClass('locked');
        }
        if (! this.clipboard) {
            this.triggers[1].hide();
        }
    },

    onTrigger1Click: function () {
        if (this.el.dom.type === 'text') {
            this.el.dom.type = 'password';
            this.triggers[0].addClass('locked');
        } else {
            this.el.dom.type = 'text';
            this.triggers[0].removeClass('locked');
        }
    },

    onTrigger2Click: function () {
        // NOTE: password fields can not be copied
        var type = this.el.dom.type;
        this.el.dom.type = 'text';
        this.el.dom.select();
        document.execCommand("copy");
        this.el.dom.type = type;
        this.selectText(String(this.getValue()).length);
    }
});

Ext.reg('tw-passwordTriggerField', Tine.Tinebase.widgets.form.PasswordTriggerField);


/***/ }),
/* 1183 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.Tinebase.widgets.dialog');

Tine.Tinebase.widgets.dialog.PasswordDialog = Ext.extend(Tine.Tinebase.dialog.Dialog, {
    /**
     * @cfg {Boolean} allowEmptyPassword
     * Allow to proceed with an empty password
     */
    allowEmptyPassword: false,

    /**
     * @cfg {Boolean} hasPwGen
     * dialog provides password generation action
     */
    hasPwGen: true,

    /**
     * @cfg {Boolean} locked
     * password field is locked (****) per default
     */
    locked: true,

    /**
     * @cfg {String} windowTitle
     * title text when openWindow is used
     */
    windowTitle: '',

    /**
     * @cfg {String} questionText
     * question label for user prompt
     */
    questionText: '',

    /**
     * @cfg {String} passwordFieldLabel
     * label of password field
     */
    passwordFieldLabel: '',

    /**
     * @property {Tine.Tinebase.widgets.form.PasswordTriggerField} passwordField
     * Password field
     */
    passwordField: null,

    layout: 'fit',
    border: false,


    /**
     * Constructor.
     */
    initComponent: function () {
        this.windowTitle = this.windowTitle || i18n._('Set password');

        this.items = [{
            border: false,
            frame: true,
            layout: 'border',
            items: [{
                region: 'center',
                border: false,
                xtype: 'columnform',
                labelAlign: 'top',
                formDefaults: {
                    xtype: 'textfield',
                    anchor: '100%',
                    labelSeparator: '',
                    columnWidth: 1
                },
                items: [
                    [{
                        xtype: 'tw-passwordTriggerField',
                        fieldLabel: this.passwordFieldLabel || i18n._('Password'),
                        name: 'password',
                        maxLength: 100,
                        allowBlank: this.allowEmptyPassword,
                        locked: this.locked,
                        clipboard: this.hasPwGen,
                        ref: '../../../../passwordField',
                        listeners: {
                            scope: this,
                            keyup: this.onChange,
                            keydown: this.onKeyDown
                        }
                    }]
                ]
            }]
        }];

        if (this.questionText) {
            this.items[0].items[0].items[0].unshift({
                xtype: 'label',
                text: this.questionText
            }, {
                xtype: 'label',
                html: '<br>'
            })
        }

        var me = this;

        this.pwgenAction = new Ext.Action({
            disabled: false,
            text: i18n._('Generate password'),
            minWidth: 70,
            iconCls: 'action_managePermissions',
            handler: this.onPWGen.createDelegate(me),
            scope: this
        });

        if (this.hasPwGen) {
            this.tbar = [
                this.pwgenAction
            ];
        }

        Tine.Tinebase.widgets.dialog.PasswordDialog.superclass.initComponent.call(this);
    },

    afterRender: function () {
        Tine.Tinebase.widgets.dialog.PasswordDialog.superclass.afterRender.call(this);
        this.buttonApply.setDisabled(!this.allowEmptyPassword);

        this.passwordField.focus(true, 100);
    },

    /**
     * Generate pw
     */
    onPWGen: function () {
        var policyConfig = Tine.Tinebase.configManager.get('downloadPwPolicy');

        config = {
            minLength: policyConfig ? policyConfig.pwPolicyMinLength : 12,
            minWordChars: policyConfig ? policyConfig.pwPolicyMinWordChars : 5,
            minUppercaseChars: policyConfig ? policyConfig.pwPolicyMinUppercaseChars : 1,
            minSpecialChars: policyConfig ? policyConfig.pwPolicyMinSpecialChars : 1,
            minNumericalChars: policyConfig ? policyConfig.pwPolicyMinNumbers : 1
        };

        var gen = new Tine.Tinebase.PasswordGenerator(config);

        this.passwordField.setValue(gen.generatePassword());
        // revalidate button
        this.onChange(this.passwordField);
    },

    onKeyDown: function(f, e) {
        if (e.getKey() === e.ENTER) {
            this.onButtonApply()
        }
    },

    /**
     * Disable ok button if no password entered
     * @param el
     */
    onChange: function (el) {
        this.buttonApply.setDisabled(!this.allowEmptyPassword && el.getValue().length === 0)
    },

    getEventData: function (event) {
        if (event === 'apply') {
            return [this.passwordField.getValue()];
        }
    },

    /**
     * Creates a new pop up dialog/window (acc. configuration)
     *
     * @returns {null}
     */
    openWindow: function (config) {
        config = config || {};
        this.window = Tine.WindowFactory.getWindow(Ext.apply({
            title: this.windowTitle,
            closeAction: 'close',
            modal: true,
            width: 400,
            height: 130 +
                (this.hasPwGen ? 20 : 0) +
                (Math.ceil(this.questionText.length/70) * 20),
            layout: 'fit',
            items: [
                this
            ]
        }, config));

        return this.window;
    }
});

/***/ }),
/* 1184 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.Tinebase.widgets.dialog');

Tine.Tinebase.widgets.dialog.SecondFactorDialog = Ext.extend(Tine.Tinebase.widgets.dialog.PasswordDialog, {
    hasPwGen: false,
    allowEmptyPassword: true,
    height: 120,

    initComponent: function() {

        this.title = i18n._('Second Factor Password Required');

        Tine.Tinebase.widgets.dialog.SecondFactorDialog.superclass.initComponent.call(this);

        this.on('passwordEntered', function (password) {

            window.postal.publish({
                channel: "messagebus",
                topic: 'secondfactor.check'
            });

            this.loadMask = new Ext.LoadMask(this.getEl(), {
                msg: i18n._('Validating password...')
            });
            this.loadMask.show();

            Ext.Ajax.request({
                params: {
                    method: 'Tinebase.validateSecondFactor',
                    password: password,
                },
                success: function (_result, _request) {
                    this.loadMask.hide();
                    var response = Ext.util.JSON.decode(_result.responseText);
                    // TODO add data to messagebus events?

                    if (response.success) {
                        window.postal.publish({
                            channel: "messagebus",
                            topic: 'secondfactor.valid'
                        });

                        if (! Tine.Tinebase.widgets.dialog.SecondFactorDialog.presenceObserver) {
                            var secondFactorLifetime = Tine.Tinebase.registry.get('secondFactorSessionLifetime') || 15;
                            Tine.Tinebase.widgets.dialog.SecondFactorDialog.presenceObserver = new Tine.Tinebase.PresenceObserver({
                                maxAbsenceTime: secondFactorLifetime / 3, // ping server each secondFactorLifetime / 3 minutes
                                absenceCallback: function (lastPresence, po) {
                                    window.postal.publish({
                                        channel: "messagebus",
                                        topic: 'secondfactor.invalid'
                                    });
                                },
                                presenceCallback: function (lastPresence) {
                                    // report presence to server
                                    Tine.Tinebase.reportPresence(Ext.encode(lastPresence));
                                }
                            });

                        } else {
                            Tine.Tinebase.widgets.dialog.SecondFactorDialog.presenceObserver.startChecking();
                        }

                    } else {
                        window.postal.publish({
                            channel: "messagebus",
                            topic: 'secondfactor.invalid'
                        });

                        this.passwordField.setValue('');

                        // TODO fix z-index?
                        //Ext.MessageBox.show({
                        //    title: i18n._('Wrong Password'),
                        //    msg: i18n._('Invalid second factor password given'),
                        //    buttons: Ext.MessageBox.OK
                        //});
                    }
                },
                failure: function() {
                    // TODO do some more?
                    this.loadMask.hide();
                },
                scope: this
            });
        }, this);
    }
});


/***/ }),
/* 1185 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2016-2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.form');

/**
 * Generic 'Edit Record' form
 *
 * @namespace   Tine.widgets.form
 * @class       Tine.widgets.form.RecordForm
 * @extends     Ext.ux.form.ColumnFormPanel
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @constructor
 * @param {Object} config The configuration options.
 */

Tine.widgets.form.RecordForm = Ext.extend(Ext.ux.form.ColumnFormPanel, {
    /**
     * record definition class  (required)
     * @cfg {Ext.data.Record} recordClass
     */
    recordClass: null,

    /**
     * {Tine.widgets.dialog.EditDialog} editDialog
     */
    editDialog: null,

    initComponent: function() {
        var appName = this.recordClass.getMeta('appName'),
            app = Tine.Tinebase.appMgr.get(appName),
            fieldNames = this.recordClass.getFieldNames(),
            modelConfig = this.recordClass.getModelConfiguration(),
            fieldsToExclude = ['description', 'tags', 'notes', 'attachments', 'relations', 'customfields'];

        Ext.each(Tine.Tinebase.Model.genericFields, function(field) {fieldsToExclude.push(field.name)});
        fieldsToExclude.push(this.recordClass.getMeta('idProperty'));

        this.items = [];

        // sometimes we need the instances from registry (e.g. printing)
        this.editDialog.recordForm = this;

        Ext.each(fieldNames, function(fieldName) {
            var fieldDefinition = modelConfig.fields[fieldName];
            // exclude: genericFields, idProperty, wellKnown(description, tags, customfields, relations, attachments, notes)
            if (fieldsToExclude.indexOf(fieldDefinition.fieldName) < 0 && ! fieldDefinition.shy) {
                var field = Tine.widgets.form.FieldManager.get(app, this.recordClass, fieldDefinition.fieldName, 'editDialog');
                if (field) {
                    // apply basic layout
                    field.columnWidth = 1;
                    // add edit dialog
                    // TODO do this for all fields??
                    if (this.editDialog) {
                        field.editDialog = this.editDialog;
                    }

                    this.items.push([field]);
                }
            }
        }, this);

        Tine.widgets.form.RecordForm.superclass.initComponent.call(this);
    }
});

Ext.reg('recordform', Tine.widgets.form.RecordForm);

/***/ }),
/* 1186 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.persistentfilter.model');


/**
 * @namespace   Tine.widgets.persistentfilter
 * @class       Tine.widgets.persistentfilter.model.PersistentFilter
 * @extends     Tine.Tinebase.data.Record
 * 
 * <p>Model of a Persistent Filter</p>
 * 
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * 
 * @param       {Object} data
 * @constructor
 * Create a new Tine.widgets.persistentfilter.model.PersistentFilter Record
 */
Tine.widgets.persistentfilter.model.PersistentFilter = Tine.Tinebase.data.Record.create(Tine.Tinebase.Model.genericFields.concat([
    {name: 'id'},
    {name: 'application_id'},
    {name: 'account_id'},
    {name: 'model'},
    {name: 'filters'},
    {name: 'name'},
    {name: 'description'},
    {name: 'grants'},
    {name: 'account_grants'}
]), {
    appName: 'Tinebase',
    modelName: 'PersistentFilter',
    idProperty: 'id',
    titleProperty: 'name',

    recordName: 'Favorite',
    recordsName: 'Favorites',
    
    /**
     * is a shared persistent filter
     * 
     * @return {Boolean}
     */
    isShared: function() {
        return this.get('account_id') === null;
    },
    
    /**
     * is a persistent filter (localized) which is shipped
     * 
     * @return {Boolean}
     */
    isShipped: function() {
        return ((this.get('account_id') === null) && (this.get('created_by') === null));
    },  
    
    /**
     * is default of current user
     * 
     * @return {Boolean}
     */
    isDefault: function() {
        var app = Tine.Tinebase.appMgr.getById(this.get('application_id'));
        return this.app && this.get('id') === app.getRegistry().get('preferences').get('defaultpersistentfilter');
    }
});

/**
 * @namespace   Tine.widgets.persistentfilter
 * 
 * @param       {String} appName
 * @return      {model.PersistentFilter} or null
 */
Tine.widgets.persistentfilter.model.PersistentFilter.getDefaultFavorite = function(appName, modelName) {
    var app = Tine.Tinebase.appMgr.get(appName),
        appPrefs = app.getRegistry().get('preferences'),
        defaultFavoriteId = appPrefs ? appPrefs.get('defaultpersistentfilter') : null;
   
    if (defaultFavoriteId === '_lastusedfilter_') {
        var filterData = Ext.state.Manager.get(appName + '-' + modelName + '-lastusedfilter');
        
        return filterData ? new Tine.widgets.persistentfilter.model.PersistentFilter({
            'filters': filterData,
            'name': '_lastusedfilter_'
        }) : null;
        
    }
    return defaultFavoriteId ? Tine.widgets.persistentfilter.store.getPersistentFilterStore().getById(defaultFavoriteId) : null
};

/**
 * @namespace   Tine.widgets.persistentfilter
 * @class       Tine.Tinebase.data.RecordProxy
 * @singelton   Tine.widgets.persistentfilter.model.persistentFilterProxy
 * 
 * <p>Backend for Persistent Filter</p>
 * 
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 */
Tine.widgets.persistentfilter.model.persistentFilterProxy = new Tine.Tinebase.data.RecordProxy({
    appName: 'Tinebase_PersistentFilter',
    modelName: 'PersistentFilter',
    recordClass: Tine.widgets.persistentfilter.model.PersistentFilter
});


/***/ }),
/* 1187 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2010-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.widgets.persistentfilter.store');

/**
 * @namespace   Tine.widgets.persistentfilter
 * @class       Tine.widgets.persistentfilter.store.PersistentFilterStore
 * @extends     Ext.data.ArrayStore
 * 
 * <p>Store for Persistent Filter Records</p>
 * 
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.widgets.persistentfilter.store.PersistentFilterStore
 */
Tine.widgets.persistentfilter.store.PersistentFilterStore = Ext.extend(Ext.data.ArrayStore, {

});

/**
 * @namespace   Tine.widgets.persistentfilter
 * 
 * get store of all persistent filters
 * 
 * @static
 * @singleton
 * @return {PersistentFilterStore}
 */
Tine.widgets.persistentfilter.store.getPersistentFilterStore = function() {
    if (! Tine.widgets.persistentfilter.store.persistentFilterStore) {
        if (window.isMainWindow) {
            var fields = Tine.widgets.persistentfilter.model.PersistentFilter.getFieldDefinitions();
            
            // create store
            var s = Tine.widgets.persistentfilter.store.persistentFilterStore = new Tine.widgets.persistentfilter.store.PersistentFilterStore({
                fields: fields
            });
            
            // populate store
            var persistentFiltersData = Tine.Tinebase.registry.get("persistentFilters").results;

            Ext.each(persistentFiltersData, function(data,index) {
                var filterRecord = new Tine.widgets.persistentfilter.model.PersistentFilter(data);
                s.add(filterRecord);
            }, this);
        } else {
            // TODO test this in IE!
            var mainWindow = Ext.ux.PopupWindowMgr.getMainWindow();
            Tine.widgets.persistentfilter.store.persistentFilterStore = mainWindow.Tine.widgets.persistentfilter.store.getPersistentFilterStore();
        }
    }
    
    return Tine.widgets.persistentfilter.store.persistentFilterStore;
}


/***/ }),
/* 1188 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license http://www.gnu.org/licenses/agpl.html AGPL Version 3 @author
 * @author Alexander Stintzing <a.stintzing@metaways.de> 
 * @copyright Copyright (c) 2009-2012
 * Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.widgets.persistentfilter');

/**
 * @namespace Tine.widgets.persistentfilter
 * @class Tine.widgets.persistentfilter.EditPersistentFilterPanel
 * @extends Ext.FormPanel
 * 
 * <p>
 * PersistentFilter Edit Dialog
 * </p>
 * 
 * @author Alexander Stintzing <a.stintzing@metaways.de>
 * @license http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * 
 * @param {Object} config
 */
Tine.widgets.persistentfilter.EditPersistentFilterPanel = Ext.extend(Ext.FormPanel, {
    layout : 'fit',
    border : false,
    cls : 'tw-editdialog',

    bodyStyle : 'padding:5px',
    labelAlign : 'top',

    anchor : '100% 100%',
    deferredRender : false,
    buttonAlign : null,
    bufferResize : 500,
    
    /**
     * the application the panel belongs to. (auto set by initComponent)
     * 
     * @type {Tine.Tinebase.Application} app
     */
    app: null,
    
    /**
     * initializes the component
     */
    initComponent : function() {
        this.addEvents('cancel', 'save', 'close');
        // init actions
        this.initActions();
        // init buttons and tbar
        this.initButtons();

        this.app = Tine.Tinebase.appMgr.get(this.window.app.name);
        
        // get items for this dialog
        this.items = this.getFormItems();

        Tine.widgets.persistentfilter.EditPersistentFilterPanel.superclass.initComponent.call(this);
    },
    
    /**
     * initializes the actions
     */
    initActions : function() {
        this.action_save = new Ext.Action({
            text : i18n._('OK'),
            minWidth : 70,
            scope : this,
            handler : this.onSave,
            iconCls : 'action_saveAndClose'
        });
        this.action_cancel = new Ext.Action({
            text : i18n._('Cancel'),
            minWidth : 70,
            scope : this,
            handler : this.onCancel,
            iconCls : 'action_cancel'
        });
    },

    /**
     * initializes the buttons
     * use preference settings for order of save and close buttons
     */
    initButtons : function() {
        this.fbar = ['->'];
        
        this.fbar.push(this.action_cancel, this.action_save);
    },

    /**
     * @private
     */
    onRender : function(ct, position) {
        Tine.widgets.dialog.EditDialog.superclass.onRender.call(this, ct, position);
        
        // load grants
        if (this.window.record) {
            var grants = this.window.record.get('grants') || [];
            this.getGrantsStore().loadData({results: grants});
        }

        // generalized keybord map for edit dlgs
        new Ext.KeyMap(this.el, [{
            key : [13],
            ctrl : false,
            fn : this.onSave,
            scope : this
        }]);
    },
    
    /**
     * is called on save
     */
    onSave : function() {
        if (! this.window.record) {
            this.window.record = this.getNewEmptyRecord();
        }
        var record = this.window.record,
            shipped = this.window.record.isShipped(),
            // if any field has changed of a shipped record, use translation
            shippedChanged = ((shipped && this.inputTitle.getValue() != this.app.i18n._(this.window.record.get('name'))) ||
                              (shipped && this.inputDescription.getValue() != this.app.i18n._(this.window.record.get('description'))) ||
                              ((this.hasRight() || this.hasEditGrant()) && ! this.inputCheck.getValue()));
        
        if (this.inputTitle.isValid()) {
            if (! shipped || shippedChanged) {
                record.set('name', this.inputTitle.getValue());
            }
        } else {
            Ext.Msg.alert(i18n._('Favorite not saved'), this.inputTitle.getActiveError());
            return;
        }

        // Description of the favorite
        if (this.inputDescription.isValid()) {
            if (! shipped || shippedChanged) {
                record.set('description', this.inputDescription.getValue());
            }
        }
        
        record.set('account_id', Tine.Tinebase.registry.get('currentAccount').accountId);
        
        if (this.hasRight() || this.hasEditGrant()) {
            // Favorite Checkbox
            if (this.inputCheck.getValue()) {
                record.set('account_id', null);
            }
            
            // set grants
            this.window.record.set('grants', '');
            var grants = [];
            this.grantsStore.each(function(record){
                grants.push(record.data);
            });
            this.window.record.set('grants', grants);
        }
        this.window.fireEvent('update');
        this.purgeListeners();
        this.window.purgeListeners();
        this.window.close();
    },

    /**
     * is called on cancel
     */
    onCancel : function() {
        this.fireEvent('cancel');
        this.purgeListeners();
        this.window.close();
    },

    /**
     * returns the needed form items
     * @return {Object}
     */
    getFormItems : function() {
        var record = this.window.record,
            shipped = record && record.isShipped(),
            title = (shipped) ? this.app.i18n._(record.get('name')) : record ? record.get('name') : '',
            description = (shipped) ? this.app.i18n._(record.get('description')) : record ? record.get('description') : '';

        this.inputTitle = new Ext.form.TextField({
            value: title,
            allowBlank : false,
            fieldLabel : i18n._('Title'),
            width : '97%',
            minLength : 1,
            maxLength : 40
        });

        this.inputDescription = new Ext.form.TextField({
            value: description,
            allowBlank : true,
            fieldLabel : i18n._('Description'),
            width : '97%',
            minLength : 0,
            maxLength : 255
        });

        this.inputCheck = new Ext.form.Checkbox({
            checked: (record) ? record.isShared() : false,
            hideLabel: true,
            boxLabel: i18n._('Shared Favorite (visible by all users)'),
            disabled: ! this.hasRight(),
            listeners: {
                'check': function(checkbox, value) {
                    Tine.log.debug('Tine.widgets.persistentfilter.EditPersistentFilterPanel::inputCheck.check -> ' + value);
                    if (value) {
                        this.getGrantsGrid().enable();
                    } else {
                        this.getGrantsGrid().disable();
                    }
                },
                scope: this
            }
        });
        
        var items = [
            {
                region : 'center',
                layout : {
                    align : 'stretch',
                    type : 'vbox'
                }
            }, 
            this.inputTitle, 
            this.inputDescription
        ];
        
        if (this.hasRight() || this.hasEditGrant()) {
            items.push(this.inputCheck);
            items.push(this.getGrantsGrid());
        }
        
        return {
            border : false,
            frame : true,
            layout : 'form',
            items : items
        };
    },
    
    /**
     * get grants grid
     * 
     * @return Tine.widgets.account.PickerGridPanel
     */
    getGrantsGrid: function() {
        if (! this.grantsGrid) {
            var columns = [
                new Ext.ux.grid.CheckColumn({
                    header: i18n._('Read'),
                    dataIndex: 'readGrant',
                    tooltip: i18n._('The grant to see and use this filter'),
                    width: 55
                }),
                new Ext.ux.grid.CheckColumn({
                    header: i18n._('Edit'),
                    tooltip: i18n._('The grant to edit this filter'),
                    dataIndex: 'editGrant',
                    width: 55
                }),
                new Ext.ux.grid.CheckColumn({
                    header: i18n._('Delete'),
                    tooltip: i18n._('The grant to delete this filter'),
                    dataIndex: 'deleteGrant',
                    width: 55
                })
            ];
            
            this.grantsGrid = new Tine.widgets.account.PickerGridPanel({
                selectType: 'both',
                title:  i18n._('Permissions'),
                store: this.getGrantsStore(),
                hasAccountPrefix: true,
                configColumns: columns,
                //selectAnyone: true,
                selectTypeDefault: 'group',
                height : 250,
                // TODO improve layout: use border layout, move this panel to center to allow dynamic resizing
                //width: 'auto',
                //height : '100%',
                //height : 'auto',
                disabled: ! this.window.record || ! this.window.record.isShared(),
                recordClass: Tine.Tinebase.Model.Grant
            });
        }
        return this.grantsGrid;
    },
    
    /**
     * get grants store
     * 
     * @return Ext.data.JsonStore
     */
    getGrantsStore: function() {
        if (! this.grantsStore) {
            this.grantsStore = new Ext.data.JsonStore({
                root: 'results',
                totalProperty: 'totalcount',
                // use account_id here because that simplifies the adding of new records with the search comboboxes
                id: 'account_id',
                fields: Tine.Tinebase.Model.Grant
            });
        }
        return this.grantsStore;
    },
    
    /**
     * checks the managed_shared_<this.modelName>_right
     * @return {}
     */
    hasRight: function() {
        var right = Tine.Tinebase.common.hasRight('manage_shared_' + this.window.modelName.toLowerCase() + '_favorites', this.window.app.name);
        return right;
    },
    
    /**
     * check if user has grant on record 
     * 
     * @param {Record} record
     * @param {String} requiredGrant
     * @return {Boolean}
     * 
     * TODO move this to generic Record
     */
    hasEditGrant: function() {
        var record = this.window.record,
            accountGrants = record ? (record.account_grants || record.data.account_grants) : false,
            result = (accountGrants && accountGrants['editGrant'] == true);
            
        Tine.log.debug('hasEditGrant() -> ' + result);
        return result;
    }
});


/***/ }),
/* 1189 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.cweiss@metaways.de>
 * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

Ext.ns('Tine.widgets.path');

/**
 * paths block renderer
 *
 * @param {Array} paths
 * @param {String} queryString
 * @returns {string}
 */
Tine.widgets.path.pathsRenderer = function(paths, queryString) {
    var pathsString = '';

    if (Ext.isArray(paths)) {
        Ext.each(paths, function(path) {
            pathsString += Tine.widgets.path.pathRenderer(path, queryString);
        });
    }

    return pathsString ? '<div class="tb-widgets-path-pathsblock">' + pathsString + '</div>' : pathsString;
};

/**
 * single path renderer
 *
 * @param path
 * @param queryString
 * @returns {string}
 */
Tine.widgets.path.pathRenderer = function(path, queryString) {
    var _ = window.lodash,
        pathName = String(_.get(path, "path", path)),
        queryParts = String(queryString || '').trim().split(' ');

    pathName = pathName
        .replace(/^\//, '')
        .replace(/\//g, '\u0362');

    pathName = Ext.util.Format.htmlEncode(pathName);

    if (queryParts.length) {
        var queryMatchCount = 0,
            search = '';

        Ext.each(queryParts, function(queryPart, idx) {
            search += (search ? '|(' :'(') + window.lodash.escapeRegExp(queryPart) + ')';
        });

        pathName = pathName.replace(new RegExp(search,'gi'), function(match) {
            queryMatchCount++;
            return '<span class="tb-widgets-path-pathitem-match">' + match + '</span>';
        });

        // skip path if no token matched
        if (queryParts.length > queryMatchCount) {
            pathName = '';
        }
    }

    var qtip = pathName.replace(/(?:{(.*?)}){0,1}\u0362/g, function(all, type) {
        return "<br/>&nbsp;" + (type ? type + ' ' : '') + '<span class="tb-widgets-path-pathitem-separator">' + Ext.util.Format.htmlEncode('\u00BB') + '</span>&nbsp;';
    });

    pathName = pathName.replace(/(?:{(.*?)}){0,1}\u0362/g, function(all, type) {
        return "&nbsp;" + (type ? '<span class="tb-widgets-path-pathitem-type">' + type[0] + '</span>' : '') + '<span class="tb-widgets-path-pathitem-separator">' + Ext.util.Format.htmlEncode('\u00BB') + '</span>&nbsp;';
    });


    return pathName ? '<div class="tb-widgets-path-pathitem" ext:qtip="' + Ext.util.Format.htmlEncode(qtip) + '">' + pathName + '</div>' : pathName;
}


/***/ }),
/* 1190 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010-2017 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
 Ext.ns('Tine', 'Tine.Tinebase');
 
 /**
  * @namespace  Tine.Tinebase
  * @class      Tine.Tinebase.PasswordChangeDialog
  * @extends    Ext.Window
  */
Tine.Tinebase.PasswordChangeDialog = Ext.extend(Ext.Window, {
    
    id: 'changePassword_window',
    closeAction: 'close',
    modal: true,
    width: 350,
    height: 230,
    minWidth: 350,
    minHeight: 230,
    layout: 'fit',
    plain: true,
    title: null,
    // password or pin
    pwType: 'password',

    initComponent: function() {
        this.currentAccount = Tine.Tinebase.registry.get('currentAccount');
        this.passwordLabel = this.pwType === 'pin' ? i18n._('PIN') : i18n._('Password');
        this.title = (this.title !== null) ? this.title : String.format(
            i18n._('Change {0} For "{1}"'),
            this.passwordLabel,
            this.currentAccount.accountDisplayName
        );
        
        this.items = new Ext.FormPanel({
            bodyStyle: 'padding:5px;',
            buttonAlign: 'right',
            labelAlign: 'top',
            anchor:'100%',
            id: 'changePasswordPanel',
            defaults: {
                xtype: 'textfield',
                inputType: 'password',
                anchor: '100%'
            },
            items: [{
                id: 'oldPassword',
                fieldLabel: String.format(i18n._('Old {0}'), this.passwordLabel),
                name:'oldPassword'
            },{
                id: 'newPassword',
                fieldLabel: String.format(i18n._('New {0}'), this.passwordLabel),
                name:'newPassword'
            },{
                id: 'newPasswordSecondTime',
                fieldLabel: String.format(i18n._('Repeat new {0}'), this.passwordLabel),
                name:'newPasswordSecondTime'
            }],
            buttons: [{
                text: i18n._('Cancel'),
                iconCls: 'action_cancel',
                handler: function() {
                    Ext.getCmp('changePassword_window').close();
                }
            }, {
                text: i18n._('Ok'),
                iconCls: 'action_saveAndClose',
                handler: function() {
                    var form = Ext.getCmp('changePasswordPanel').getForm();
                    var values;
                    if (form.isValid()) {
                        values = form.getValues();
                        if (values.newPassword == values.newPasswordSecondTime) {
                            Ext.Ajax.request({
                                waitTitle: i18n._('Please Wait!'),
                                waitMsg: String.format(i18n._('Changing {0}'), this.passwordLabel),
                                params: {
                                    method: this.pwType === 'pin' ? 'Tinebase.changePin' : 'Tinebase.changePassword',
                                    oldPassword: values.oldPassword,
                                    newPassword: values.newPassword
                                },
                                success: function(_result, _request){
                                    var response = Ext.util.JSON.decode(_result.responseText);
                                    if (response.success) {
                                        Ext.getCmp('changePassword_window').close();
                                        Ext.MessageBox.show({
                                            title: i18n._('Success'),
                                            msg: String.format(i18n._('Your {0} has been changed.'), this.passwordLabel),
                                            buttons: Ext.MessageBox.OK,
                                            icon: Ext.MessageBox.INFO
                                        });
                                        if (this.pwType === 'password') {
                                            Ext.Ajax.request({
                                                params: {
                                                    method: 'Tinebase.updateCredentialCache',
                                                    password: values.newPassword
                                                }
                                            });
                                        }
                                    } else {
                                        Ext.MessageBox.show({
                                            title: i18n._('Failure'),
                                            msg: response.errorMessage,
                                            buttons: Ext.MessageBox.OK,
                                            icon: Ext.MessageBox.ERROR  
                                        });
                                    }
                                },
                                scope: this
                            });
                        } else {
                            Ext.MessageBox.show({
                                title: i18n._('Failure'),
                                msg: String.format(i18n._('{0} mismatch, please correct.'), this.passwordLabel),
                                buttons: Ext.MessageBox.OK,
                                icon: Ext.MessageBox.ERROR 
                            });
                        }
                    }
                },
                scope: this
            }]
        });
        
        Tine.Tinebase.PasswordChangeDialog.superclass.initComponent.call(this);
    }
});


/***/ }),
/* 1191 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */

 Ext.ns('Tine', 'Tine.Tinebase');

 /**
  * @namespace  Tine.Tinebase
  * @class      Tine.Tinebase.AboutDialog
  * @extends    Ext.Window
  */
Tine.Tinebase.AboutDialog = Ext.extend(Ext.Window, {

    closeAction: 'close',
    modal: true,
    width: 400,
    height: 360,
    minWidth: 400,
    minHeight: 360,
    layout: 'fit',
    title: null,

    initAboutTpl: function() {
        this.aboutTpl = new Ext.XTemplate(
            '<div class="tb-about-dlg">',
                '<div class="tb-about-img"><a href="{logoLink}" target="_blank"><img src="{logo}" /></a></div>',
                '<div class="tb-link-home"><a href="{logoLink}" target="_blank">{linkText}</a></div>',
                '<div class="tb-about-version">Version: {codeName}</div>',
                '<div class="tb-about-build">({packageString})</div>',
                '<div class="tb-about-copyright">Copyright: 2007-{[new Date().getFullYear()]}&nbsp;<a href="http://www.metaways.de/produkte/tine-20.html" target="_blank">Metaways Infosystems GmbH</a></div>',
                '<div class="tb-about-credits-license"><p><a href="javascript:void()" class="license" /><a href="javascript:void()" class="credits" /></p></div>',
            '</div>'
        );
    },
    
    initComponent: function() {
        this.title = String.format(i18n._('About {0}'), Tine.title);
        
        this.initAboutTpl();
        
        var version = (Tine.Tinebase.registry.get('version')) ? Tine.Tinebase.registry.get('version') : {
            codeName: 'unknown',
            packageString: 'unknown'
        };

        this.items = {
            layout: 'fit',
            border: false,
            html: this.aboutTpl.applyTemplate({
                logo: Tine.logo,
                logoLink: Tine.weburl,
                linkText: String.format(i18n._('Learn more about {0}'), Tine.title),
                codeName: version.codeName,
                packageString: version.packageString
            }),
            buttons: [{
                text: i18n._('Ok'),
                iconCls: 'action_saveAndClose',
                handler: this.close,
                scope: this
            }]
        };
        
        // create links
        this.on('afterrender', function() {
            var el = this.getEl().select('div.tb-about-dlg div.tb-about-credits-license a.license');
            el.insertHtml('beforeBegin', ' ' + i18n._('Released under different') + ' ');
            el.insertHtml('beforeEnd', i18n._('Open Source Licenses'));
            el.on('click', function(){
                var ls = new Tine.Tinebase.LicenseScreen();
                ls.show();
            });
            
            var el = this.getEl().select('div.tb-about-dlg div.tb-about-credits-license a.credits');
            el.insertHtml('beforeBegin', ' ' + i18n._('with the help of our') + ' ');
            el.insertHtml('beforeEnd', i18n._('Contributors'));
            el.on('click', function() {
                var cs = new Tine.Tinebase.CreditsScreen();
                cs.show();
            });
            
            
        }, this);

        Tine.Tinebase.AboutDialog.superclass.initComponent.call(this);
    }
});


/***/ }),
/* 1192 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

/**
 * Main appStarter/picker app pile panel
 * 
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.AppPile
 * @extends     Ext.Panel
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.Tinebase.AppPile = Ext.extend(Ext.Panel, {
    /**
     * @property apps
     * @type Ext.util.Observable
     */
    apps: null,
    
    /**
     * @property defaultApp
     * @type Tine.Application
     */
    defaultApp: null,
    
    /**
     * @private
     * @property {Object} items
     * holds internal item elements
     */
    els: {},
    
    /**
     * @private
     */
    border: false,
    layout: 'fit',
    autoScroll: true,
    
    /**
     * @private
     * @todo: register app.on('titlechange', ...)
     */
    initComponent: function() {
        this.apps = Tine.Tinebase.appMgr.getAll();
        this.defaultApp = Tine.Tinebase.appMgr.getDefault();

        Tine.Tinebase.MainScreen.on('appactivate', this.onActivateApp, this);
        
        Tine.Tinebase.AppPile.superclass.initComponent.call(this);
        
        this.tpl = new Ext.XTemplate(
            '<div class="x-panel-header x-panel-header-noborder x-unselectable x-accordion-hd">',
                '<img class="x-panel-inline-icon {iconCls}" src="' + Ext.BLANK_IMAGE_URL + '"/>',
                '<span class="x-panel-header-text app-panel-apptitle-text">{title}</span>',
            '</div>'
        ).compile();

    },
    
    /**
     * @private
     */
    onRender: function(ct, position) {
        Tine.Tinebase.AppPile.superclass.onRender.call(this, ct, position);

        this.apps.each(function(app) {
            if (app.hasMainScreen) {
                this.els[app.appName] = this.tpl.insertFirst(this.body, {title: app.getTitle(), iconCls: app.getIconCls()}, true);
                this.els[app.appName].setStyle('cursor', 'pointer');
                this.els[app.appName].addClassOnOver('app-panel-header-over');
                this.els[app.appName].on('click', this.onAppTitleClick, this, app);
            }
            
        }, this);
        
        // limit to max pile height
        this.on('resize', function() {
            var appHeaders = Ext.DomQuery.select('div[class^=x-panel-header]', this.el.dom);
            for (var i=0, height=0; i<appHeaders.length; i++) {
                height += Ext.fly(appHeaders[i]).getHeight();
            }
            if (arguments[2] && arguments[2] > height) {
                this.setHeight(height);
            }
        });
        this.setActiveItem(this.els[this.defaultApp.appName]);
    },
    
    /**
     * executed when an app get activated by mainscreen
     * 
     * @param {Tine.Application} app
     */
    onActivateApp: function(app) {
        this.setActiveItem(this.els[app.appName]);
    },
    
    /**
     * @private
     */
    onAppTitleClick: function(e, dom, app) {
        this.setActiveItem(Ext.get(dom));
        Tine.Tinebase.MainScreen.activate(app);
    },
    
    /**
     * @private
     */
    setActiveItem: function(el) {
        for (var appName in this.els) {
            if (el) {
                if (el == this.els[appName] || el.parent() == this.els[appName]) {
                    this.els[appName].addClass('app-panel-header-active');
                } else {
                    this.els[appName].removeClass('app-panel-header-active');
                }
            }
        }
    }
});


/***/ }),
/* 1193 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

__webpack_require__(1194);

/**
 * Main appStarter/picker tab panel
 * 
 * @todo discuss: have a set of default apps?
 * 
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.AppTabsPanel
 * @extends     Ext.TabPanel
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.Tinebase.AppTabsPanel = function(config) {
    Ext.apply(this, config);
    this.plugins = [new Ext.ux.TabPanelSortPlugin({
        dragZoneConfig: {
            onBeforeDrag: this.onBeforeDrag.createDelegate(this),
            scroll: false
        },
        dropZoneConfig: {
            getTargetFromEvent: this.getTargetFromEvent.createDelegate(this)
        }
    }), 'ux.tabpanelstripcompressorplugin'];
    
    Tine.Tinebase.AppTabsPanel.superclass.constructor.call(this, config);
};

Ext.extend(Tine.Tinebase.AppTabsPanel, Ext.TabPanel, {
    stateful: true,
    stateEvents: ['add', 'remove', 'tabchange', 'tabsort'],
    stateId: 'tinebase-mainscreen-apptabs',
    
    /**
     * @cfg {Array} of Strings currentTab ids
     */
    currentTabs: null,
    
    // private
    findTargets : function(e){
        var item = null,
            itemEl = e.getTarget('li:not(.x-tab-edge)', this.strip);

        if(itemEl){
            item = this.getComponent(itemEl.id.split(this.idDelimiter)[1]);
            if(item && item.disabled){
                return {
                    close : null,
                    item : null,
                    el : null
                };
            }
        }
        return {
            close : e.getTarget('.x-tab-strip-close', this.strip),
            item : item,
            el : itemEl
        };
    },
    
    /**
     * init appTabsPanel
     */
    initComponent: function() {
        Ext.apply(this, Ext.state.Manager.get(this.stateId));
        
        this.initMenu();
        
        this.items = [{
            id: this.app2id('menu'),
            title: Tine.title,
            iconCls: 'tine-favicon',
            closable: true,
            noCompress: true,
            listeners: {
                scope: this,
                beforeclose: this.onBeforeTabClose
            }
        }].concat(this.getDefaultTabItems());
        
        // set states last active app to the sessions default app
        //Tine.Tinebase.appMgr.setDefault(this.id2appName(this.activeTab));

        Tine.Tinebase.MainScreen.on('appactivate', this.onActivateApp, this);
        this.on('beforetabchange', this.onBeforeTabChange, this);
        this.on('tabsort', this.onTabChange, this);
        this.on('add', this.onTabChange, this);
        this.on('remove', this.onTabChange, this);
        
        this.supr().initComponent.call(this);
        
        // fake an access stack
        for (var i=1, tabCount=this.items.getCount(); i<tabCount; i++) {
            this.stack.add(this.items.get(i));
        }
    },

    setActiveTab : function(item) {
        this.supr().setActiveTab.apply(this, arguments);

        var appName = this.id2appName(item);
        if (appName !== 'menu') {
            var app = Tine.Tinebase.appMgr.get(appName),
                activeApp = Tine.Tinebase.MainScreen.getActiveApp();

            if (app != activeApp) {
                Tine.Tinebase.router.setRoute('/' + app.appName);
            }
        }
    },

    /**
     * init the combined appchooser/tine menu
     */
    initMenu: function() {
        this.menu = new Ext.menu.Menu({
            layout: 'column',
            width: 400,
            autoHeight: true,
            style: {
                'background-image': 'none'
            },
            defaults: {
                xtype: 'menu',
                floating: false,
                columnWidth: 0.5,
                hidden: false,
                listeners: {
                    scope: this,
                    itemclick: function(item, e) {
                        this.menu.hide();
                    }
                },
                style: {
                    //'border-color': 'transparent'
                    'border': '0'
                }
            },
            items: [{
                items: this.getAppItems(),
                style: {'border-right': '1px solid #E2E2E3'}
            }, {
                plugins: [{
                    ptype: 'ux.itemregistry',
                    key:   'Tine.Tinebase.AppMenu.Additionals'
                }],
                items: Tine.Tinebase.MainScreen.getMainMenu().getMainActions()
            }]
        });
    },
    
    /**
     * executed after render
     */
    afterRender: function() {
        // no state from tab!
        this.activeTab = undefined;

        this.supr().afterRender.apply(this, arguments);
        
        this.menuTabEl = Ext.get(this.getTabEl(0));
        this.menuTabEl.addClass('tine-mainscreen-apptabspanel-menu-tabel');
        
        // remove plain style
        this.header.removeClass('x-tab-panel-header-plain');
    },
    
    /**
     * get app items for the tabPanel
     * 
     * @return {Array}
     */
    getAppItems: function() {
        var appItems = [];
        Tine.Tinebase.appMgr.getAll().each(function(app) {
            if (app.hasMainScreen) {
                appItems.push({
                    text: app.getTitle(),
                    iconCls: app.getIconCls(),
                    handler: this.onAppItemClick.createDelegate(this, [app])
                });
            }
        }, this);
        
        return appItems.reverse();
    },
    
    /**
     * get default tab items configurations
     * 
     * @return {Array}
     */
    getDefaultTabItems: function() {
        if (Ext.isEmpty(this.currentTabs)) {
            this.currentTabs = [this.id2appName(Tine.Tinebase.appMgr.getDefault())];
        }
        
        var tabItems = [];
        
        Ext.each(this.currentTabs, function(appName) {
            var app = Tine.Tinebase.appMgr.get(appName);
            if (app) {
                tabItems.push(this.getTabItem(app));
            }
        }, this);
        
        return tabItems;
    },
    
    /**
     * deny drag on menuEl
     * @param {} e
     * @return {}
     */
    onBeforeDrag: function(data, e) {
        return e.getTarget('li[class*=mainscreen-apptabspanel-menu-tabel]', 10) ? false : true;
    },
    
    /**
     * deny drop on menuEl
     * @param {} e
     * @return {}
     */
    getTargetFromEvent: function(e) {
        var target = e.getTarget('ul[class^=x-tab]', 10),
            li = this.findTargets(e);
            
        if (li.el && li.el == this.menuTabEl.dom) {
            return false;
        }
        
        return target;
    },
            
    /**
     * get tabs state
     * 
     * @return {Object}
     */
    getState: function() {
        return {
            currentTabs: this.currentTabs,
            activeTab: Ext.isNumber(this.activeTab) ? this.activeTab : this.items.indexOf(this.activeTab)
        };
    },
    
    /**
     * get tab item configuration
     * 
     * @param {Tine.Application} app
     * @return {Object}
     */
    getTabItem: function(app) {
        return {
            id: this.app2id(app),
            title: app.getTitle(),
            iconCls: app.getIconCls(),
            closable: true,
            listeners: {
                scope: this,
                beforeclose: this.onBeforeTabClose
            }
        };
    },
    
    /**
     * executed when an app get activated by mainscreen
     * 
     * @param {Tine.Application} app
     */
    onActivateApp: function(app) {
        var tab = this.getItem(this.app2id(app)) || this.add(this.getTabItem(app));
        
        this.setActiveTab(tab);
    },
    
    /**
     * executed when an app item in this.menu is clicked
     * 
     * @param {Tine.Application} app
     */
    onAppItemClick: function(app) {
        Tine.Tinebase.MainScreen.activate(app);
        
        this.menu.hide();
    },
    
    /**
     * executed on tab changes
     * 
     * @param {TabPanel} this
     * @param {Panel} newTab The tab being activated
     * @param {Panel} currentTab The current active tab
     */
    onBeforeTabChange: function(tp, newTab, currentTab) {
        if (this.id2appName(newTab) === 'menu') {
            this.menu.show(this.menuTabEl, 'tl-bl');
            return false;
        }
    },
    
    /**
     * executed before a tab panel is closed
     * 
     * @param {Ext.Panel} tab
     * @return {boolean}
     */
    onBeforeTabClose: function(tab) {
        if (this.id2appName(tab) === 'menu') {
            return this.onBeforeTabChange(this, tab, this.activeTab);
        }
        
        // don't close last app panel
        return this.items.getCount() > 2;
    },
    
    /**
     * executed when tabs chages
     */
    onTabChange: function() {
        var tabCount = this.items.getCount();
        var closable = tabCount > 2;
        
        this.currentTabs = [];
        
        for (var i=1, tab, el; i<tabCount; i++) {
            tab = this.items.get(i);
            
            // update currentTabs
            this.currentTabs.push(this.id2appName(tab.id));
            
            // handle closeables
            tab.closable = closable;
            el = this.getTabEl(i);
            if (el) {
                Ext.get(el)[closable ? 'addClass' : 'removeClass']('x-tab-strip-closable');
            }
        }
    },
    
    /**
     * returns appName of given tab/id
     * 
     * @param {Ext.Panel/String/Number} id
     * @return {String} appName
     */
    id2appName: function(id) {
        if (Ext.isNumber(id)) {
            if (Ext.isArray(this.items)) {
                id = this.items[id] ? this.items[id].id : null;
            } else {
                id = this.items.get(id);
            }
        }
        
        if (Ext.isObject(id) && ! Ext.isEmpty(id)) {
            id = id.id;
        }
        
        if (Ext.isString(id)) {
            return id.split('-').pop();
        }
        
        return null;
    },
    
    /**
     * returns tab id of given app
     * @param {Tine.Application/String} app
     */
    app2id: function(app) {
        var appName = app.appName || app;
        
        return this.id + '-' + appName;
    }
});


/***/ }),
/* 1194 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Ext.ux');


/**
 * @namespace   Ext.ux
 * @class       Ext.ux.TabPanelStripCompressorPlugin
 *
 * @constructor
 * @param {Object} config Configurations options
 */
Ext.ux.TabPanelStripCompressorPlugin = function(config) {
    Ext.apply(this, config);
};

Ext.ux.TabPanelStripCompressorPlugin.prototype = {

    /**
     * tabpanel
     * @type object
     */
    tabpanel: null,

    /**
     * init this plugin
     *
     * @param {Ext.Component} cmp
     */
    init: function(cmp){
        this.tabpanel = cmp;
        this.originalWidth = {};
        this.compressedWidth = {};
        this.compressed = [];

        this.tabpanel.on('render', this.onRender, this);
    },

    onRender: function(tabpanel) {
        this.tabpanel.ownerCt.on('resize', this.onResize, this);
        this.tabpanel.on('add', this.onResize, this, {buffer: 100});
        this.tabpanel.on('remove', this.onResize, this, {buffer: 100});
        this.tabpanel.on('tabchange', this.onResize, this);
        this.onResize();
    },

    onResize: function() {
        active = this.tabpanel.strip.down('li.x-tab-strip-active');
        if (active) {
            Ext.fly(active).child('.x-tab-strip-inner', true).style.width = 'auto';
        }

        var count = this.tabpanel.items.length,
            ce = this.tabpanel.tabPosition != 'bottom' ? 'header' : 'footer',
            ow = this.tabpanel[ce].dom.offsetWidth,
            aw = this.tabpanel[ce].dom.clientWidth,
            edge = this.tabpanel.strip.down('li.x-tab-edge').getBox().right,
            lis = this.tabpanel.strip.query('li:not(.x-tab-edge)');

        this.saveOriginalWidths(lis);

        if (edge > aw) {
            this.compress(lis, edge-aw);
        } else {
            this.expand(lis, aw-edge);
        }
    },

    compress: function(lis, by) {
        var _ = window.lodash,
            me = this,
            toCompress = me.getDynamic(lis),
            potential = _.reduce(toCompress, function(p, li) {
                return p.concat(Ext.fly(li).child('.x-tab-strip-inner', true).offsetWidth - 16);
            }, []),
            widths = me.getCompressedWidth(potential, by);

        _.each(toCompress, function(li, i) {
            var inner = Ext.fly(li).child('.x-tab-strip-inner', true);
            inner.style.width = (16 + widths[i]) + 'px';
        });
    },

    expand: function(lis, by) {
        var _ = window.lodash,
            me = this,
            toExpand = me.getDynamic(lis),
            potential = _.reduce(toExpand, function(p, li) {
                var originalWidth = me.originalWidth[li.id];
                return p.concat(originalWidth - Ext.fly(li).child('.x-tab-strip-inner', true).offsetWidth);
            }, []),
            widths = me.getExpandWidth(potential, by);

        _.each(toExpand, function(li, i) {
            var originalWidth = me.originalWidth[li.id],
                inner = Ext.fly(li).child('.x-tab-strip-inner', true);
            inner.style.width = (originalWidth-widths[i]) + 'px';
        });
    },

    // beginn with largest
    getCompressedWidth(potential, by) {
        var _ = window.lodash,
            used = 0,
            map = _.groupBy(potential),
            sorted = _.uniq([].concat(potential).sort(function (a, b) {
                return a - b;
            })),
            currWidth = sorted[sorted.length-1],
            currWidhtCount = map[currWidth].length,
            d = Math.min(by, sorted.length > 1 ?
                ((sorted[sorted.length-1] - sorted[sorted.length-2]) * currWidhtCount) :
                (sorted[0] * currWidhtCount)
            ),
            widths = _.map(potential, function(w) {
                var newWidth = w;
                if (w == currWidth) {
                    newWidth = w-d/currWidhtCount;
                    used += w-newWidth;
                }
                return newWidth;
            });

        if (used < by && _.sum(widths) && used > 1) {
            // console.warn('widths: ' + widths + ' by: ' + by + ' used: ' + used)
            return this.getCompressedWidth(widths, by-used);
        }

        return widths;
    },

    // expand aquidistantly (all with potential at the same rate)
    getExpandWidth: function(potential, by) {
        var _ = window.lodash,
            used = 0,
            sorted = _.compact(_.uniq([].concat(potential).sort(function (a, b) {
                return a - b;
            }))),
            expandCount = sorted.length,
            currWidth = sorted[0],
            d = Math.min(by/expandCount, currWidth),
            widths = _.map(potential, function(w) {
                var newWidth = w;
                if (w) {
                    newWidth = w-d;
                    used += d;
                }
                return newWidth;
            });

        if (used < by && _.sum(widths) && used > 1) {
            // console.warn('widths: ' + widths + ' by: ' + by + ' used: ' + used)
            return this.getExpandWidth(widths, by-used);
        }

        return widths;
    },

    getDynamic: function(lis) {
        var _ = window.lodash,
            me = this;

        return _.filter(lis, function(li) {
            return !me.tabpanel.get(li.id.split('__')[1]).noCompress &&
                !Ext.fly(li).hasClass('x-tab-strip-active');
        });
    },
    saveOriginalWidths: function(lis) {
        for(var i = 0, len = lis.length; i < len; i++) {
            if (! this.originalWidth[lis[i].id] && !Ext.fly(lis[i]).hasClass('x-tab-strip-active')) {
                var text = Ext.fly(lis[i]).child('.x-tab-strip-text', true);
                this.originalWidth[lis[i].id] = text.offsetWidth;
            }
        }
    }
};

Ext.preg('ux.tabpanelstripcompressorplugin', Ext.ux.TabPanelStripCompressorPlugin);

/***/ }),
/* 1195 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

Tine.Tinebase.MainContextMenu = Ext.extend(Ext.menu.Menu, {

    /**
     * context component
     * @property {Ext.Component}
     */
    context: null,

    initComponent: function() {
        this.plugins = [{
            ptype: 'ux.itemregistry',
            key:   'Tinebase-MainContextMenu'
        }];

        this.items = [];

        this.supr().initComponent.call(this);
    },

    onRender: function() {
        // hide fist separator
        var firstItem = this.items.get(0);
        if (firstItem && firstItem.isXType('menuseparator')) {
            this.items.get(0).hide();
        }
        this.supr().onRender.call(this);
    }
});

/**
 * show main/global context menu if it has itmes
 *
 * @static
 * @param {Ext.EventObject} e
 * @returns {Ext.Component}
 */
Tine.Tinebase.MainContextMenu.showIf = function(e) {
    var menu = new Tine.Tinebase.MainContextMenu({});

    if (menu.items.length) {
        menu.showAt(e.getXY());
    }
};

/**
 * get main context items
 *
 * @static
 * @param {Ext.EventObject} e
 * @returns {Ext.util.MixedCollection}
 */
Tine.Tinebase.MainContextMenu.getItems = function(e) {
    var menu = new Tine.Tinebase.MainContextMenu({});

    return menu.items;
};

/**
 * get target component
 *
 * @static
 * @param {Ext.EventObject} e
 * @returns {Ext.Component}
 */
Tine.Tinebase.MainContextMenu.getCmp = function(e) {
    var target = e && e.target ? e.getTarget('[id^=ext-comp]', 30) : null,
        component = target ? Ext.ComponentMgr.get(target.id) : null;

    return component;
};


/***/ }),
/* 1196 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

/**
 * Tine 2.0 jsclient main menu
 * 
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.MainMenu
 * @extends     Ext.Toolbar
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.Tinebase.MainMenu = Ext.extend(Ext.Toolbar, {
    /**
     * @cfg {Boolean} showMainMenu
     */
    showMainMenu: false,
    style: {'padding': '0px 2px'},
    cls: 'tbar-mainmenu',
    
    /**
     * @type Array
     * @property mainActions
     */
    mainActions: null,
    
    initComponent: function() {
        this.initActions();
        this.onlineStatus = new Ext.ux.ConnectionStatus({
            showIcon: false
        });
        
        this.items = this.getItems();
        
        var buttonTpl = new Ext.Template(
            '<table id="{4}" cellspacing="0" class="x-btn {3}"><tbody class="{1}">',
            '<tr><td class="x-btn-ml"><i>&#160;</i></td><td class="x-btn-mc"><em class="{2}" unselectable="on"><button type="{0}"></button></em></td><td class="x-btn-mr"><i>&#160;</i></td></tr>',
            '</tbody></table>'
        ).compile();
        
        Ext.each(this.items, function(item) {
            item.template = buttonTpl;
        }, this);

        this.plugins = this.plugins || [];
        this.plugins.push({
            ptype: 'ux.itemregistry',
            key:   'Tine.Tinebase.MainMenu'
        });

        this.supr().initComponent.call(this);
    },
    
    getItems: function() {
        return [{
            text: Tine.title,
            hidden: !this.showMainMenu,
            menu: {
                id: 'Tinebase_System_Menu', 
                items: this.getMainActions()
        }},
        '->',
        this.actionLearnMore,
        // TODO add a bigger spacer here?
        { xtype: 'spacer' },
        {
            text: Ext.util.Format.htmlEncode(String.format(i18n._('User: {0}'), Tine.Tinebase.registry.get('currentAccount').accountDisplayName)),
            menu: this.getUserActions(),
            menuAlign: 'tr-br',
            iconCls: Tine.Tinebase.registry.get('userAccountChanged') ? 'renderer_accountUserChangedIcon' : 'renderer_accountUserIcon'
        },
        this.onlineStatus, 
        this.action_logout];
    },
    
    /**
     * returns all main actions
     * 
     * @return {Array}
     */
    getMainActions: function() {
        if (! this.mainActions) {
            this.mainActions = [
                this.action_aboutTine,
                this.action_userManual,
                '-',
                this.getUserActions(),
                '-',
                this.action_logout
            ];
            
            if (Tine.Tinebase.registry.get("version").buildType.match(/(DEVELOPMENT|DEBUG)/)) {
                this.mainActions.splice(2, 0, '-', this.action_showDebugConsole);
            }
        }
        
        return this.mainActions;
    },
    
    getUserActions: function() {

        if (! this.userActions) {
            this.userActions = [
                this.action_editProfile,
                this.action_showPreferencesDialog,
                this.action_notificationPermissions,
                this.action_changePassword
            ];

            if (Tine.Tinebase.registry.get('secondFactorPinChangeAllowed')) {
                this.userActions = this.userActions.concat(this.action_changePin);
            }
            
            if (Tine.Tinebase.registry.get('userAccountChanged')) {
                this.action_returnToOriginalUser = new Tine.widgets.account.ChangeAccountAction({
                    returnToOriginalUser: true,
                    text: i18n._('Return to original user account')
                });
                this.userActions = this.userActions.concat(this.action_returnToOriginalUser);
                
            } else if (Tine.Tinebase.registry.get("config") 
                && Tine.Tinebase.registry.get("config").roleChangeAllowed 
                && Tine.Tinebase.registry.get("config").roleChangeAllowed.value) 
            {
                this.action_changeUserAccount = new Tine.widgets.account.ChangeAccountAction({});
                
                var roleChangeAllowed = Tine.Tinebase.registry.get("config").roleChangeAllowed.value,
                    currentAccountName = Tine.Tinebase.registry.get('currentAccount').accountLoginName;
                if (roleChangeAllowed[currentAccountName]) {
                    this.userActions = this.userActions.concat(this.action_changeUserAccount);
                }
            }
            
            var regItems = Ext.ux.ItemRegistry.itemMap['Tine.Tinebase.MainMenu.userActions'] || [];
            
            Ext.each(regItems, function(reg) {
                var addItem = def = reg.item;

                this.userActions.push(addItem);
            }, this);
        }
        return this.userActions;
    },
    
    /**
     * initialize actions
     * @private
     */
    initActions: function() {
        this.action_aboutTine = new Ext.Action({
            text: String.format(i18n._('About {0}'), Tine.title),
            handler: this.onAboutTine20,
            iconCls: 'action_about'
        });
        
        this.action_userManual = new Ext.Action({
            text: String.format(i18n._('Help')),
            iconCls: 'action_userManual',
            handler: this.onLoadUserManual,
            scope: this
        });

        this.action_showDebugConsole = new Ext.Action({
            text: i18n._('Debug Console (Ctrl + F11)'),
            handler: Tine.Tinebase.common.showDebugConsole,
            iconCls: 'tinebase-action-debug-console'
        });
        
        this.action_showPreferencesDialog = new Ext.Action({
            text: i18n._('Preferences'),
            disabled: false,
            handler: this.onEditPreferences,
            iconCls: 'action_adminMode'
        });

        this.action_editProfile = new Ext.Action({
            text: i18n._('Edit Profile'),
            disabled: ! Tine.Tinebase.common.hasRight('manage_own_profile', 'Tinebase'),
            handler: this.onEditProfile,
            iconCls: 'tinebase-accounttype-user'
        });
        
        this.action_changePassword = new Ext.Action({
            text: i18n._('Change password'),
            handler: this.onChangePassword,
            disabled: (! Tine.Tinebase.configManager.get('changepw')),
            iconCls: 'action_password'
        });

        this.action_changePin = new Ext.Action({
            text: i18n._('Change PIN'),
            handler: this.onChangePin,
            //disabled: (! Tine.Tinebase.configManager.get('changepin')),
            iconCls: 'action_password'
        });

        this.action_logout = new Ext.Action({
            text: i18n._('Logout'),
            tooltip:  String.format(i18n._('Logout from {0}'), Tine.title),
            iconCls: 'action_logOut',
            handler: this.onLogout,
            scope: this
        });
        
        this.actionLearnMore = new Ext.Action({
            text: String.format(i18n._('Learn more about {0}'), Tine.title),
            tooltip: Tine.weburl,
            iconCls: 'tine-favicon',
            handler: function() {
                window.open(Tine.weburl, '_blank');
            },
            scope: this
        });
        
        this.action_notificationPermissions = new Ext.Action({
            text: i18n._('Allow desktop notifications'),
            tooltip:  i18n._('Request permissions for webkit desktop notifications.'),
            iconCls: 'action_edit',
            disabled: ! window.Notification || this.systemTrayNotificationsEnabled(),
            handler: this.requestNotificationPermission,
            scope: this
        });
    },

    systemTrayNotificationsEnabled: function() {
        return (window.Notification && window.Notification.permission == 'granted')
    },

    requestNotificationPermission: function() {
        window.Notification.requestPermission(Ext.emptyFn);
    },
    
    /**
     * open new window/tab to show help and tutorial
     */
    onLoadUserManual: function() {
        window.open(Tine.helpUrl,'_blank');
    },
    
    /**
     * @private
     */
    onAboutTine20: function() {
        var aboutDialog = new Tine.Tinebase.AboutDialog();
        aboutDialog.show();
    },
    
    /**
     * @private
     */
    onChangePassword: function() {
        var passwordDialog = new Tine.Tinebase.PasswordChangeDialog();
        passwordDialog.show();
    },

    /**
     * @private
     */
    onChangePin: function() {
        var passwordDialog = new Tine.Tinebase.PasswordChangeDialog({
            pwType: 'pin',
        });
        passwordDialog.show();
    },

    /**
     * @private
     */
    onEditPreferences: function() {
        Tine.widgets.dialog.Preferences.openWindow({});
    },

    /**
     * @private
     */
    onEditProfile: function() {
        Tine.widgets.dialog.Preferences.openWindow({
            initialCardName: 'Tinebase.UserProfile'
        });
    },
    
    /**
     * the logout button handler function
     * @private
     */
    onLogout: function() {
        if (Tine.Tinebase.registry.get('confirmLogout') != '0') {
            Ext.MessageBox.confirm(i18n._('Confirm'), i18n._('Are you sure you want to logout?'), function(btn, text) {
                if (btn == 'yes') {
                    this._doLogout();
                }
            }, this);
        } else {
            this._doLogout();
        }
    },
    
    /**
     * logout user & redirect
     * @static
     */
    _doLogout: function() {
        Ext.MessageBox.wait(i18n._('Logging you out...'), i18n._('Please wait!'));
        Ext.Ajax.request( {
            params : {
                method : Ext.isObject(Tine.Setup) ? 'Setup.logout' : 'Tinebase.logout'
            },
            callback : function(options, success, response) {
                // clear the authenticated mod_ssl session
                if (document.all == null) {
                    if (window.crypto && Ext.isFunction(window.crypto.logout)) {
                        window.crypto.logout();
                    }
                } else {
                    document.execCommand('ClearAuthenticationCache');
                }

                Tine.Tinebase.common.reload({
                    clearCache: true
                });
            }
        });
    }
});


/***/ }),
/* 1197 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.Tinebase');

/**
 * Tine 2.0 jsclient MainScreen with app selection, menu etc.
 * 
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.MainScreenPanel
 * @extends     Ext.Container
 * @singleton   
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */

Tine.Tinebase.MainScreenPanel = function(config) {
    this.addEvents(
        /**
         * @event beforeappappactivate
         * fired before an application gets appactivated. Retrun false to stop activation
         * @param {Tine.Aplication} app about to appactivate
         */
        'beforeappappactivate',
        /**
         * @event appactivate
         * fired when an application gets appactivated
         * @param {Tine.Aplication} appactivated app
         */
        'appactivate',
        /**
         * @event beforeappappdeactivate
         * fired before an application gets appdeactivated. Retrun false to stop deactivation
         * @param {Tine.Aplication} app about to appdeactivate
         */
        'beforeappappdeactivate',
        /**
         * @event appdeactivate
         * fired when an application gets appdeactivated
         * @param {Tine.Aplication} appdeactivated app
         */
        'appdeactivate',
        /**
         * @event windowopenexception
         * windowopenexceptionated
         * @param {} Exception
         */
        'windowopenexception'
    );

    // NOTE: this is a cruid method to create some kind of singleton...
    Tine.Tinebase.MainScreen = this;

    Tine.Tinebase.MainScreenPanel.superclass.constructor.call(this, config);
}

Ext.extend(Tine.Tinebase.MainScreenPanel, Ext.Container, {
    
    border: false,
    layout: {
        type:'vbox',
        align:'stretch',
        padding:'0'
    },

    /**
     * the active app
     * @type {Tine.Tinebase.Application}
     */
    app: null,

    /**
     * @private
     */
    initComponent: function() {
        this.initLayout();
        this.supr().initComponent.apply(this, arguments);
    },

    /**
     * @private
     */
    initLayout: function() {
        this.items = [{
            ref: 'topBox',
            cls: 'tine-mainscreen-topbox',
            border: false,
            html: '<div class="tine-mainscreen-topbox-left"></div><div class="tine-mainscreen-topbox-middle"></div><div class="tine-mainscreen-topbox-right"></div>'
        }, {
            cls: 'tine-mainscreen-mainmenu',
            height: 20,
            layout: 'fit',
            border: false,
            items: this.getMainMenu()
        }, {
            ref: 'appTabs',
            cls: 'tine-mainscreen-apptabs',
            hidden: this.hideAppTabs,
            border: false,
            height: 20,
            items: new Tine.Tinebase.AppTabsPanel({
                plain: true
            })
        }, {
            ref: 'centerPanel',
            cls: 'tine-mainscreen-centerpanel',
            flex: 1,
            border: false,
            layout: 'card'
        }];
    },
    
    /**
     * returns main menu
     * 
     * @return {Ext.Menu}
     */
    getMainMenu: function() {
        if (! this.mainMenu) {
            this.mainMenu = new Tine.Tinebase.MainMenu({
                showMainMenu: false
            });
        }
        
        return this.mainMenu;
    },

    /**
     * returns center (card) panel
     *
     * @returns {Ext.Panel}
     */
    getCenterPanel: function() {
        return this.centerPanel;
    },

    /**
     * appMgr app activation listener
     * 
     * @param {Tine.Application} app
     */
    onAppActivate: function(app) {
        Tine.log.info('Activating app ' + app.appName);
        
        this.app = app;
        
        // set document / browser title
        var postfix = (Tine.Tinebase.registry.get('titlePostfix')) ? Tine.Tinebase.registry.get('titlePostfix') : '',
            // some apps (Felamimail atm) can add application specific title postfixes
            // TODO generalize this
            appPostfix = (document.title.match(/^\([0-9]+\) /)) ? document.title.match(/^\([0-9]+\) /)[0] : '';
        document.title = Ext.util.Format.stripTags(appPostfix + Tine.title + postfix  + ' - ' + app.getTitle());
    },
    
    /**
     * executed after rendering process
     * 
     * @private
     */
    afterRender: function() {
        this.supr().afterRender.apply(this, arguments);
        
        // check for new version
        // TODO add helper function for fetching config ... this condition sucks.
        if ((      ! Tine.Tinebase.registry.get("config")
                || ! Tine.Tinebase.registry.get("config").versionCheck
                ||   Tine.Tinebase.registry.get("config").versionCheck.value
            ) && Tine.Tinebase.common.hasRight('check_version', 'Tinebase')
        ) {
            Tine.widgets.VersionCheck();
        }
        
        if (Tine.Tinebase.registry.get('mustchangepw')) {
            var passwordDialog = new Tine.Tinebase.PasswordChangeDialog({
                title: i18n._('Your password expired. Please enter a new user password:')
            });
            passwordDialog.show();
        }
    },

    /**
     * activate application
     *
     * @param {Tine.Application} app
     * @return {Boolean}
     */
    activate: function(app) {
        if (app) {
            // activation via routing only
            if (Tine.Tinebase.router.getRoute()[0] != app.appName) {
                Tine.Tinebase.router.setRoute('/' + app.appName);
                return;
            }

            if (app == this.getActiveApp()) {
                // app is already active, nothing to do
                return true;
            }

            if (this.app) {
                if ((this.fireEvent('beforeappappdeactivate', this.app) === false || this.app.onBeforeDeActivate() === false)) {
                    return false;
                }

                this.app.onDeActivate();
                this.fireEvent('appdeactivate', this.app);
                this.app = null;
            }

            if (this.fireEvent('beforeappappactivate', app) === false || app.onBeforeActivate() === false) {
                return false;
            }

            this.setActiveCenterPanel(app.getMainScreen(), true);

            this.app = app;
            this.onAppActivate(app);

            app.onActivate();
            this.fireEvent('appactivate', app);
        } else {
            app = Tine.Tinebase.appMgr.getDefault();
            Tine.Tinebase.router.setRoute('/' + app.appName);
        }
    },

    /**
     * returns currently activated app
     * @return {Tine.Application}
     */
    getActiveApp: function() {
        return this.app;
    },

    /**
     * set the active center panel
     * @param panel
     */
    setActiveCenterPanel: function(panel, keep) {
        if (panel.app) {
            // neede for legacy handling
            this.app = panel.app;
        }
        var cardPanel = this.getCenterPanel();

        Ext.ux.layout.CardLayout.helper.setActiveCardPanelItem(cardPanel, panel, keep);
    },


    /**
     * sets the active content panel
     *
     * @deprecated
     * @param {Ext.Panel} item Panel to activate
     * @param {Bool} keep keep panel
     */
    setActiveContentPanel: function(panel, keep) {
        Tine.log.warn('Tine.Tinebase.MainScreenPanel.setActiveContentPanel is deprecated, use <App>.Mainscreen.setActiveContentPanel instead ' + new Error().stack);
        return this.app.getMainScreen().setActiveContentPanel(panel, keep);
    },

    /**
     * sets the active tree panel
     *
     * @deprecated
     * @param {Ext.Panel} panel Panel to activate
     * @param {Bool} keep keep panel
     */
    setActiveTreePanel: function(panel, keep) {
        Tine.log.warn('Tine.Tinebase.MainScreenPanel.setActiveTreePanel is deprecated, use <App>.Mainscreen.setActiveTreePanel instead ' + new Error().stack);
        return this.app.getMainScreen().setActiveTreePanel(panel, keep);
    },

    /**
     * sets the active module tree panel
     *
     * @deprecated
     * @param {Ext.Panel} panel Panel to activate
     * @param {Bool} keep keep panel
     */
    setActiveModulePanel: function(panel, keep) {
        Tine.log.warn('Tine.Tinebase.MainScreenPanel.setActiveModulePanel is deprecated, use <App>.Mainscreen.setActiveModulePanel instead ' + new Error().stack);
        return this.app.getMainScreen().setActiveModulePanel(panel, keep);
    },

    /**
     * sets item
     *
     * @deprecated
     * @param {Ext.Toolbar} panel toolbar to activate
     * @param {Bool} keep keep panel
     */
    setActiveToolbar: function(panel, keep) {
        Tine.log.warn('Tine.Tinebase.MainScreenPanel.setActiveToolbar is deprecated, use <App>.Mainscreen.setActiveToolbar instead ' + new Error().stack);
        return this.app.getMainScreen().setActiveToolbar(panel, keep);
    },

    /**
     * gets the currently displayed toolbar
     *
     * @deprecated
     * @return {Ext.Toolbar}
     */
    getActiveToolbar: function() {
        Tine.log.warn('Tine.Tinebase.MainScreenPanel.getActiveToolbar is deprecated, use <App>.Mainscreen.getActiveToolbar instead ' + new Error().stack);
        return this.app.getMainScreen().getActiveToolbar();
    }
});

/**
 * lazy mainscreen init
 *
 * @static
 * @param app
 */
Tine.Tinebase.MainScreenPanel.show = function(app) {
    var mainCardPanel = Tine.Tinebase.viewport.tineViewportMaincardpanel;

    if (! Tine.Tinebase.MainScreen) {
        new Tine.Tinebase.MainScreenPanel();
        mainCardPanel.add(Tine.Tinebase.MainScreen);
        mainCardPanel.layout.setActiveItem(Tine.Tinebase.MainScreen.id);
        Tine.Tinebase.MainScreen.doLayout();
    }

    Tine.Tinebase.MainScreen.activate(app);
};


/***/ }),
/* 1198 */
/***/ (function(module, exports) {

/* 
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009-2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/*global Ext, Tine*/
 
Ext.ns('Tine.Tinebase');

/**
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.LoginPanel
 * @extends     Ext.Panel
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.Tinebase.LoginPanel = Ext.extend(Ext.Panel, {
    
    /**
     * @cfg {String} defaultUsername prefilled username
     */
    defaultUsername: '',
    
    /**
     * @cfg {String} defaultPassword prefilled password
     */
    defaultPassword: '',
    
    /**
     * @cfg {String} loginMethod server side login method
     */
    loginMethod: 'Tinebase.login',

    /**
     * @cfg {String} onLogin callback after successfull login
     */
    onLogin: Ext.emptyFn,
    
    /**
     * @cfg {Boolean} show infobox (survey, links, text)
     */
    showInfoBox: true,
    
    /**
     * @cfg {String} scope scope of login callback
     */
    scope: null,
    
    layout: 'fit',
    border: false,
    
    /**
     * return loginPanel
     * 
     * @return {Ext.FormPanel}
     */
    getLoginPanel: function () {
        //Do we have a custom Logo for branding?
        var modSsl = Tine.Tinebase.registry.get('modSsl'),
            secondFactor = Tine.Tinebase.registry.get('secondFactor'),
            logo = Tine.installLogo;

        if (! this.loginPanel) {
            this.loginPanel = new Ext.FormPanel({
                width: 460,
                height: 290,
                frame: true,
                labelWidth: 90,
                cls: 'tb-login-panel',
                items: [{
                    xtype: 'container',
                    cls: 'tb-login-lobobox',
                    border: false,
                    html: '<a target="_blank" href="' + Tine.websiteUrl + '" border="0"><img src="' + logo + '" /></a>'
                }, {
                    xtype: 'label',
                    cls: 'tb-login-big-label',
                    text: i18n._('Login')
                }, {
                    xtype: 'tinelangchooser',
                    name: 'locale',
                    width: 170,
                    tabindex: 1
                }, {
                    xtype: 'textfield',
                    tabindex: 2,
                    width: 170,
                    fieldLabel: i18n._('Username'),
                    name: 'username',

                    allowBlank: modSsl ? false : true,
                    validateOnBlur: false,
                    selectOnFocus: true,
                    value: this.defaultUsername ? this.defaultUsername : undefined,
                    disabled: modSsl ? true : false,
                    listeners: {
                        scope: this,
                        render: function (field) {
                            field.el.dom.setAttribute('autocapitalize', 'none');
                            field.el.dom.setAttribute('autocorrect', 'off');
                            if (Ext.supportsUserFocus) {
                                field.focus(false, 250);
                            }
                        },
                        focus: function(field) {
                            if (Ext.isTouchDevice) {
                                Ext.getBody().dom.scrollTop = this.loginPanel.getBox()['y'] - 10;
                            }
                        }
                    }
                }, {
                    xtype: 'textfield',
                    tabindex: 3,
                    width: 170,
                    inputType: 'password',
                    fieldLabel: i18n._('Password'),
                    name: 'password',
                    selectOnFocus: true,
                    value: this.defaultPassword,
                    disabled: modSsl ? true : false,
                    listeners: {
                        render: this.setLastLoginUser.createDelegate(this) 
                    }
                }, {
                    xtype: 'textfield',
                    tabindex: 4,
                    width: 170,
                    inputType: 'password',
                    hidden: secondFactor ? false : true,
                    fieldLabel: i18n._('Two-Factor Authentication Code'),
                    id: 'otp',
                    name: 'otp',
                    selectOnFocus: true
                }, {
                    xtype: 'displayfield',
                    style: {
                        align: 'center',
                        marginTop: '10px'
                    },
                    value: i18n._('Certificate detected. Please, press Login button to proceed.'),
                    hidden: modSsl ? false : true
                }, {
                    xtype: 'container',
                    id:'contImgCaptcha',
                    layout: 'form',
                    style: { visibility:'hidden' },
                    items:[{
                       xtype: 'textfield',
                       width: 170,
                       labelSeparator: '',
                       id: 'security_code',
                       value: null,
                       name: 'securitycode'
                    }, {
                       fieldLabel:(' '),
                       labelSeparator: '',
                       items:[
                           new Ext.Component({
                               autoEl: { 
                                   tag: 'img',
                                   id: 'imgCaptcha'
                               }
                           })]
                    }]
                  }
                ],
                buttonAlign: 'right',
                buttons: [{
                    xtype: 'button',
                    width: 120,
                    text: i18n._('Login'),
                    scope: this,
                    handler: this.onLoginPress
                }]
            });
        }
        
        return this.loginPanel;
    },

    setLastLoginUser: function (field) {
        var lastUser;
        lastUser = Ext.util.Cookies.get('TINE20LASTUSERID');
        if (lastUser) {
            this.loginPanel.getForm().findField('username').setValue(lastUser);
            field.focus(false,250);
        }
    },
    
    getVersionPanel: function () {
        if (! this.versionPanel) {
            var version = (Tine.Tinebase.registry.get('version')) ? Tine.Tinebase.registry.get('version') : {
                codeName: 'unknown',
                packageString: 'unknown'
            };
            
            var versionHtml = '<label class="tb-version-label">' + i18n._('Version') + ':</label> ' +
                              '<label class="tb-version-codename">' + version.codeName + '</label> ' +
                              '<label class="tb-version-packagestring">(' + version.packageString + ')</label>';
            this.versionPanel = new Ext.Container({
                layout: 'fit',
                cls: 'tb-version-tinepanel',
                border: false,
                defaults: {xtype: 'label'},
                items: [{
                    html: versionHtml
                }]
            })
        }

        return this.versionPanel;
    },

    getCommunityPanel: function () {
        if (! this.communityPanel) {
            var translationPanel = [],
                stats = Locale.translationStats,
                version = Tine.clientVersion.packageString.match(/\d+\.\d+\.\d+/),
                language = Tine.Tinebase.registry.get('locale').language,
                // TODO make stats work again (currently displays 100% for all langs)
                //percentageCompleted =  stats ? Math.floor(100 * stats.translated / stats.total) : undefined;
                percentageCompleted = undefined;

            this.communityPanel = new Ext.Container({
                layout: 'fit',
                cls: 'tb-login-tinepanel',
                border: false,
                defaults: {xtype: 'label'},
                items: [{
                    cls: 'tb-login-big-label',
                    html: String.format(i18n._('{0} is made for you'), Tine.title)
                }, {
                    html: '<p>' + String.format(i18n._('{0} wants to make business collaboration easier and more enjoyable - for your needs! So you are warmly welcome to discuss with us, bring in ideas and get help.'), Tine.title) + '</p>'
                }, {
                    cls: 'tb-login-big-label-spacer',
                    html: '&nbsp;'
                }, {
                    html: '<ul>' +
                    '<li><a target="_blank" href="' + Tine.weburl + '" border="0">' + String.format(i18n._('{0} Homepage'), Tine.title) + '</a></li>' +
                    '<li><a target="_blank" href="http://www.tine20.org/forum/" border="0">' + String.format(i18n._('{0} Forum'), Tine.title) + '</a></li>' +
                    '</ul><br/>'
                }, {
                    cls: 'tb-login-big-label',
                    html: i18n._('Translations')
                }, {
                    html: Ext.isDefined(percentageCompleted) ? ('<p>' + String.format(i18n._('Translation state of {0}: {1}%.'), language, percentageCompleted) + '</p>') : ''
                }, {
                    html: '<p>' + String.format(i18n._('If the state of your language is not satisfying, or if you miss a language, please consider becoming a {0} translator.'), Tine.title) + '</p>'
                }, {
                    html: '<br/><ul>' +
                    '<li><a target="_blank" href="https://github.com/tine20/Tine-2.0-Open-Source-Groupware-and-CRM/wiki/EN%3Atranslation-Howto" border="0">' + String.format(i18n._('{0} Translation Howto'), Tine.title) + '</a></li>' +
                    '<li><a target="_blank" href="https://www.transifex.com/projects/p/tine20/" border="0">' + i18n._('Detailed Language Statistics') + '</a></li>'
                    + '</ul>'
                }]
            });
        }

        return this.communityPanel;
    },

    getPoweredByPanel: function () {
        if (! this.poweredByPanel) {
            this.poweredByPanel = new Ext.Container({
                layout: 'fit',
                cls: 'powered-by-panel',
                width: 200,
                height: 50,
                border: false,
                defaults: {xtype: 'label'},
                items: [{
                    html: "<div class='tine-viewport-poweredby' style='position: absolute; bottom: 10px; right: 10px; font:normal 12px arial, helvetica,tahoma,sans-serif;'>" + 
                        i18n._("Powered by:") + " <a target='_blank' href='" + Tine.weburl + "' title='" + i18n._("online open source groupware and crm") + "'>" + Tine.title + "</a>"
                }]
            });
        }
        
        return this.poweredByPanel;
    },
    
    getSurveyData: function (cb) {
        var ds = new Ext.data.Store({
            proxy: new Ext.data.ScriptTagProxy({
                url: 'https://versioncheck.tine20.net/surveyCheck/surveyCheck.php'
            }),
            reader: new Ext.data.JsonReader({
                root: 'survey'
            }, ['title', 'subtitle', 'duration', 'langs', 'link', 'enddate', 'htmlmessage', 'version'])
        });
        
        ds.on('load', function (store, records) {
            var survey = records[0];
            
            cb.call(this, survey);
        }, this);
        ds.load({params: {lang: Tine.Tinebase.registry.get('locale').locale}});
    },
    
    getSurveyPanel: function () {
        if (! this.surveyPanel) {
            this.surveyPanel = new Ext.Container({
                layout: 'fit',
                cls: 'tb-login-surveypanel',
                border: false,
                defaults: {xtype: 'label'},
                items: []
            });
            
            if (! Tine.Tinebase.registry.get('denySurveys')) {
                Tine.log.debug('getSurveyPanel() - fetching survey data ...');
                this.getSurveyData(function (survey) {
                    Tine.log.debug(survey);
                    if (typeof survey.get === 'function') {
                        var enddate = Date.parseDate(survey.get('enddate'), Date.patterns.ISO8601Long);
                        var version = survey.get('version');
                        
                        Tine.log.debug('Survey version: ' + version + ' / Tine version: ' + Tine.clientVersion.packageString) ;
                        Tine.log.debug('Survey enddate: ' + enddate);
                        
                        if (Ext.isDate(enddate) && enddate.getTime() > new Date().getTime() && 
                            Tine.clientVersion.packageString.indexOf(version) === 0) {
                            Tine.log.debug('Show survey panel');
                            survey.data.lang_duration = String.format(i18n._('about {0} minutes'), survey.data.duration);
                            survey.data.link = 'https://versioncheck.tine20.net/surveyCheck/surveyCheck.php?participate';
                            
                            this.surveyPanel.add([{
                                cls: 'tb-login-big-label',
                                html: i18n._('Tine 2.0 needs your help')
                            }, {
                                html: '<p>' + i18n._('We regularly need your feedback to make the next Tine 2.0 releases fit your needs even better. Help us and yourself by participating:') + '</p>'
                            }, {
                                html: this.getSurveyTemplate().apply(survey.data)
                            }, {
                                xtype: 'button',
                                width: 120,
                                text: i18n._('participate!'),
                                handler: function () {
                                    window.open(survey.data.link);
                                }
                            }]);
                            this.surveyPanel.doLayout();
                        }
                    }
                });
            }
        }
        
        return this.surveyPanel;
    },
    
    getSurveyTemplate: function () {
        if (! this.surveyTemplate) {
            this.surveyTemplate = new Ext.XTemplate(
                '<br/ >',
                '<p><b>{title}</b></p>',
                '<p><a target="_blank" href="{link}" border="0">{subtitle}</a></p>',
                '<br/>',
                '<p>', i18n._('Languages'), ': {langs}</p>',
                '<p>', i18n._('Duration'), ': {lang_duration}</p>',
                '<br/>').compile();
        }
        
        return this.surveyTemplate;
    },
    
    /**
     * checks browser compatibility and show messages if unknown/incompatible
     * 
     * ie6, gecko2 -> bad
     * unknown browser -> may not work
     * 
     * @return {Ext.Container}
     * 
     * TODO find icons with the correct license
     */
    getBrowserIncompatiblePanel: function() {
        if (! this.browserIncompatiblePanel) {
            this.browserIncompatiblePanel = new Ext.Container({
                layout: 'fit',
                cls: 'tb-login-surveypanel',
                border: false,
                defaults: {xtype: 'label'},
                items: []
            });
            
            var browserSupport = 'compatible';
            if (Ext.isIE6 || Ext.isGecko2) {
                browserSupport = 'incompatible';
            } else if (
                ! (Ext.isWebKit || Ext.isGecko || Ext.isIE || Ext.isNewIE)
            ) {
                // yepp we also mean -> Ext.isOpera
                browserSupport = 'unknown';
            }
            
            var items = [];
            if (browserSupport == 'incompatible') {
                items = [{
                    cls: 'tb-login-big-label',
                    html: i18n._('Browser incompatible')
                }, {
                    html: '<p>' + i18n._('Your browser is not supported by Tine 2.0.') + '<br/><br/></p>'
                }];
            } else if (browserSupport == 'unknown') {
                items = [{
                    cls: 'tb-login-big-label',
                    html: i18n._('Browser incompatible?')
                }, {
                    html: '<p>' + i18n._('You are using an unrecognized browser. This could result in unexpected behaviour.') + '<br/><br/></p>'
                }];
            }
            
            if (browserSupport != 'compatible') {
                this.browserIncompatiblePanel.add(items.concat([{
                    html: '<p>' + i18n._('You might try one of these browsers:') + '<br/>'
                        + '<a href="http://www.google.com/chrome" target="_blank">Google Chrome</a><br/>'
                        + '<a href="http://www.mozilla.com/firefox/" target="_blank">Mozilla Firefox</a><br/>'
                        + '<a href="http://www.apple.com/safari/download/" target="_blank">Apple Safari</a><br/>'    
                        + '<a href="http://www.microsoft.com/windows/internet-explorer/default.aspx" target="_blank">Microsoft Internet Explorer</a>'
                        + '<br/></p>'
                }]));
                this.browserIncompatiblePanel.doLayout();
            }
        }
        
        return this.browserIncompatiblePanel;
    },
    
    initComponent: function () {
        this.initLayout();
        
        this.supr().initComponent.call(this);
    },
    
    initLayout: function () {
        var infoPanelItems = (this.showInfoBox) ? [
            this.getBrowserIncompatiblePanel(),
            this.getCommunityPanel(),
            this.getSurveyPanel()
        ] : [];
        
        this.infoPanel = new Ext.Container({
            cls: 'tb-login-infosection',
            border: false,
            width: 300,
            height: 520, // bad idea to hardcode height here
            layout: 'vbox',
            layoutConfig: {
                align: 'stretch'
            },
            items: infoPanelItems
        });
        
        this.items = [{
            xtype: 'container',
            layout: window.innerWidth < 768 ? 'column' : 'absolute',
            border: false,
            items: [
                this.getLoginPanel(),
                this.infoPanel,
                this.getPoweredByPanel(),
                this.getVersionPanel()
            ]
        }];
    },
    
    /**
     * do the actual login
     */
    onLoginPress: function () {
        var form = this.getLoginPanel().getForm(),
            values = form.getValues();
            
        if (form.isValid()) {
            Ext.MessageBox.wait(i18n._('Logging you in...'), i18n._('Please wait'));

            Ext.Ajax.request({
                scope: this,
                params : {
                    method: this.loginMethod,
                    username: values.username,
                    password: values.password,
                    securitycode: values.securitycode,
                    otp: values.otp
                },
                timeout: 60000, // 1 minute
                success:function(response) {
                    var responseData = Ext.util.JSON.decode(response.responseText);
                    if (responseData.success === true) {
                        Ext.MessageBox.wait(String.format(i18n._('Login successful. Loading {0}...'), Tine.title), i18n._('Please wait!'));
                        window.document.title = this.originalTitle;
                        response.responseData = responseData;
                        this.onLogin.call(this.scope, response);
                    } else {
                        var modSsl = Tine.Tinebase.registry.get('modSsl');
                        var resultMsg = modSsl ? i18n._('There was an error verifying your certificate!') :
                            i18n._('Your username and/or your password are wrong!');
                        Ext.MessageBox.show({
                            title: i18n._('Login failure'),
                            msg: resultMsg,
                            buttons: Ext.MessageBox.OK,
                            icon: Ext.MessageBox.ERROR,
                            fn: function () {
                                this.getLoginPanel().getForm().findField('password').focus(true);
                                if(document.getElementById('useCaptcha')) {
                                    if(typeof responseData.c1 != 'undefined') {
                                        document.getElementById('imgCaptcha').src = 'data:image/png;base64,' + responseData.c1;
                                        document.getElementById('contImgCaptcha').style.visibility = 'visible';
                                    }
                                }
                            }.createDelegate(this)
                        });
                    }
                }
            });
        } else {
            Ext.MessageBox.alert(i18n._('Errors'), i18n._('Please fix the errors noted.'));
        }
    },
    
    onRender: function (ct, position) {
        this.supr().onRender.apply(this, arguments);
        
        this.map = new Ext.KeyMap(this.el, [{
            key : [10, 13],
            scope : this,
            fn : this.onLoginPress
        }]);
        
        this.originalTitle = window.document.title;
        var postfix = (Tine.Tinebase.registry.get('titlePostfix')) ? Tine.Tinebase.registry.get('titlePostfix') : '';
        window.document.title = Ext.util.Format.stripTags(Tine.title + postfix + ' - ' + i18n._('Please enter your login data'));
    },
    
    onResize: function () {
        this.supr().onResize.apply(this, arguments);

        var box      = this.getBox(),
            loginBox = this.getLoginPanel().rendered ? this.getLoginPanel().getBox() : {width : this.getLoginPanel().width, height: this.getLoginPanel().height},
            infoBox  = this.infoPanel.rendered ? this.infoPanel.getBox() : {width : this.infoPanel.width, height: this.infoPanel.height};

        var top = (box.height - loginBox.height) / 2;
        if (box.height - top < infoBox.height) {
            top = box.height - infoBox.height;
        }
        
        var loginLeft = (box.width - loginBox.width) / 2;
        if (loginLeft + loginBox.width + infoBox.width > box.width) {
            loginLeft = box.width - loginBox.width - infoBox.width;
        }
                
        this.getLoginPanel().setPosition(loginLeft, top);
        this.infoPanel.setPosition(loginLeft + loginBox.width, top);
        this.getPoweredByPanel().setPosition(box.width - this.poweredByPanel.width, box.height - this.poweredByPanel.height);
    },
    
    renderSurveyPanel: function (survey) {
        var items = [{
            cls: 'tb-login-big-label',
            html: i18n._('Tine 2.0 needs your help')
        }, {
            html: '<p>' + i18n._('We regularly need your feedback to make the next Tine 2.0 releases fit your needs even better. Help us and yourself by participating:') + '</p>'
        }];
    }
});


/***/ }),
/* 1199 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
/*global Ext, Tine, Locale*/
 
Ext.ns('Tine.Tinebase');

/**
 * admin settings panel
 * 
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.AdminPanel
 * @extends     Ext.TabPanel
 * 
 * <p>Tinebase Admin Panel</p>
 * <p><pre>
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Tinebase.AdminPanel
 * @TODO        Invent some kind of registry for inner panels
 */
Tine.Tinebase.AdminPanel = Ext.extend(Ext.TabPanel, {
    
    activeItem: 0,
    border: false,
    
    /**
     * @private
     */
    initComponent: function () {
        this.items = new Tine.Tinebase.Admin.UserProfileConfigPanel({});
        
        Tine.Tinebase.AdminPanel.superclass.initComponent.call(this);
    }
});

/**
 * Tinebase Admin Panel Popup
 * 
 * @param   {Object} config
 * @return  {Ext.ux.Window}
 */
Tine.Tinebase.AdminPanel.openWindow = function (config) {
    var window = Tine.WindowFactory.getWindow({
        width: 500,
        height: 470,
        name: 'tinebase-admin-panel',
        contentPanelConstructor: 'Tine.Tinebase.AdminPanel',
        contentPanelConstructorConfig: config
    });
};

Ext.ns('Tine.Tinebase.Admin');
Tine.Tinebase.Admin.UserProfileConfigPanel = Ext.extend(Ext.Panel, { // TODO: extend some kind of AppAdminPanel

    layout: 'fit',
    border: false,
    
    /**
     * @private
     */
    initComponent: function () {
        this.title = i18n._('Profile Information');
        this.items = [];
        
        this.applyAction = new Ext.Action({
            text: i18n._('Apply'),
            disabled: true,
            iconCls: 'action_applyChanges',
            handler: this.applyConfig.createDelegate(this)
        });
        this.buttons = [this.applyAction];
        
        Tine.Tinebase.getUserProfileConfig(this.initProfileTable, this);
        
        this.supr().initComponent.call(this);
    },
    
    afterRender: function () {
        this.supr().afterRender.apply(this, arguments);
        
        this.loadMask = new Ext.LoadMask(this.getEl(), {msg: i18n._('Please Wait')});
        if (! this.store) {
            (function () {
                this.loadMask.show();
            }).defer(50, this);
        }
    },
    
    applyConfig: function () {
        var userProfileConfig = {
            readableFields: [],
            updateableFields: []
        };
        
        this.store.each(function (field) {
            var fieldName = field.get('fieldName');
            
            if (field.get('readGrant')) {
                userProfileConfig.readableFields.push(fieldName);
            }
            if (field.get('editGrant')) {
                userProfileConfig.updateableFields.push(fieldName);
            }
        }, this);
        
        this.loadMask.show();
        Tine.Tinebase.setUserProfileConfig(userProfileConfig, function () {
            this.store.commitChanges();
            this.applyAction.setDisabled(true);
            this.loadMask.hide();
        }, this);
        
    },
    
    initProfileTable: function (userProfileConfig) {
        var adbI18n = new Locale.Gettext();
        adbI18n.textdomain('Addressbook');
        
        var fieldData = [];
        
        Ext.each(userProfileConfig.possibleFields, function (fieldName) {
            var fieldDefinition = Tine.Addressbook.Model.Contact.getField(fieldName);
            fieldData.push([
                fieldName,
                adbI18n._hidden(fieldDefinition.label),
                userProfileConfig.readableFields.indexOf(fieldName) >= 0,
                userProfileConfig.updateableFields.indexOf(fieldName) >= 0
            ]);
        }, this);
        
        this.store = new Ext.data.ArrayStore({
            autoDestroy: true,
            fields: ['fieldName', 'fieldLabel', 'readGrant', 'editGrant'],
            data: fieldData,
            listeners: {
                scope: this,
                update: this.onStoreUpdate
            }
        });
        
        var cbs = [
            new Ext.ux.grid.CheckColumn({
                header: i18n._('Read'),
                tooltip: i18n._('The field is readable part of the profile'),
                dataIndex: 'readGrant',
                width: 55
            }), new Ext.ux.grid.CheckColumn({
                header: i18n._('Edit'),
                tooltip: i18n._('The field is editable part of the profile'),
                dataIndex: 'editGrant',
                width: 55
            })
        ];
        
        this.userProfileConfigGrid = new Ext.grid.EditorGridPanel({
            layout: 'fit',
            store: this.store,
            autoExpandColumn: 'fieldName',
            plugins: cbs,
            columns: [{
                id: 'fieldName',
                header: i18n._('Field Name'),
                dataIndex: 'fieldLabel'
            }].concat(cbs)
        });
        
        this.add(this.userProfileConfigGrid);
        this.doLayout();
        
        if (this.loadMask) {
            this.loadMask.hide();
        }
    },
    
    onStoreUpdate: function () {
        this.applyAction.setDisabled(false);
    }
});


/***/ }),
/* 1200 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

/**
 * user profile panel
 * 
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.UserProfilePanel
 * @extends     Ext.form.FormPanel
 * @consturctor
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 */
Tine.Tinebase.UserProfilePanel = Ext.extend(Ext.Panel, {
    genericFields: ['account_id', 'created_by', 'creation_time', 'last_modified_by',
                      'last_modified_time', 'is_deleted', 'deleted_time', 'deleted_by'],
    layout: 'form',
    border: true,
    labelAlign: 'top',
    autoScroll: true,
    defaults: {
        anchor: '95%',
        labelSeparator: ''
    },
    bodyStyle: 'padding:5px',
    
    initComponent: function() {
        Tine.Tinebase.getUserProfile(Tine.Tinebase.registry.get('currentAccount').accountId, this.onData.createDelegate(this));
        this.items = [];
        
        this.supr().initComponent.apply(this, arguments);
    },
    
    onData: function(userProfileInfo) {
        var userProfile      = userProfileInfo.userProfile,
            readableFields   = userProfileInfo.readableFields,
            updateableFields = userProfileInfo.updateableFields;
            
        var adbI18n = new Locale.Gettext();
        adbI18n.textdomain('Addressbook');
        
        Ext.each(readableFields, function(fieldName) {
            // don't display generic fields
            var fieldDefinition = Tine.Addressbook.Model.Contact.getField(fieldName);
            
            if (! fieldDefinition) {
                return;
            }
            
            switch (fieldName) {
                default: 
                    this.add(new Ext.form.TextField({
                        hidden: this.genericFields.indexOf(fieldName) >= 0,
                        name: fieldName, 
                        value: userProfile[fieldName],
                        fieldLabel: adbI18n._hidden(fieldDefinition.label),
                        readOnly: updateableFields.indexOf(fieldName) < 0
                    }));
                    break;
            }
        }, this);
        
        this.doLayout();
    }
});


/***/ }),
/* 1201 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * translations for js prototypes
 * 
 * @package     Tine
 * @subpackage  Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.namespace('Tine.Tinebase');

/**
 * this is called in tineInit::initLocale() to make sure we translate some plugin strings by overwriting prototype values
 */
Tine.Tinebase.prototypeTranslation = function() {
    // html editor plugin translations
    Ext.ux.form.HtmlEditor.IndentOutdent.prototype.midasBtns[1].tooltip.title = i18n._('Outdent Text');
    Ext.ux.form.HtmlEditor.IndentOutdent.prototype.midasBtns[1].overflowText = i18n._('Outdent Text');
    Ext.ux.form.HtmlEditor.IndentOutdent.prototype.midasBtns[2].tooltip.title = i18n._('Indent Text');
    Ext.ux.form.HtmlEditor.IndentOutdent.prototype.midasBtns[2].overflowText = i18n._('Indent Text');
    Ext.ux.form.HtmlEditor.RemoveFormat.prototype.midasBtns[1].tooltip.title = i18n._('Remove Formatting');
    Ext.ux.form.HtmlEditor.RemoveFormat.prototype.midasBtns[1].overflowText = i18n._('Remove Formatting');
}


/***/ }),
/* 1202 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase.CanonicalPath');

/**
 * @static
 * @type {string}
 */
Tine.Tinebase.CanonicalPath.separator = '/';

/**
 * get full canonical path of given component
 *
 * $static
 * @param {Ext.Component} component
 */
Tine.Tinebase.CanonicalPath.getPath = function(component) {
    var _ = window.lodash,
        pathParts = [],
        pathPart;

    while (component) {
        pathPart = Tine.Tinebase.CanonicalPath.getPathPart(component);

        if (pathPart && !pathParts.join(Tine.Tinebase.CanonicalPath.separator).match(new RegExp('^' + _.escapeRegExp(pathPart)))) {
            pathParts.unshift(pathPart);
        }

        // stop if pathPart starts with a separator -> counts as root
        component = String(pathPart).charAt(0) != Tine.Tinebase.CanonicalPath.separator && Ext.isFunction(component.findParentBy) ?
            component.findParentBy(Tine.Tinebase.CanonicalPath.hasPathPart) : false;
    }

    return pathParts.join(Tine.Tinebase.CanonicalPath.separator);
};

/**
 * return canonical path part
 *
 * @static
 * @param {Ext.Component} component
 * @returns {String}
 */
Tine.Tinebase.CanonicalPath.getPathPart = function(component) {
    return Tine.Tinebase.CanonicalPath.hasPathPart(component) ?
        component.getCanonicalPathSegment() : '';
};

/**
 * checks if component has canonical path part
 *
 * @static
 * @param {Ext.Component} component
 * @returns {Bool}
 */
Tine.Tinebase.CanonicalPath.hasPathPart = function(component) {
    return Ext.isFunction(component.getCanonicalPathSegment);
};

/**
 * activate  as much as possible :)
 *
 * @TODO
 *  - activate views/ranges (e.g. calendar)
 *  - activate filtertoolbar
 *  - activate and find paths in windows
 * @TODO
 * - rethink forward resolution/activation of paths, we need this for tests to stear UI
 *
 * @private
 * @static
 */
Tine.Tinebase.CanonicalPath.activateAll = function() {
    Tine.Tinebase.appMgr.apps.each(function (app) {
        Tine.Tinebase.MainScreen.activate(app);
        var mainScreen = app.getMainScreen(),
            westPanel = mainScreen ? mainScreen.getWestPanel() : null,
            moduleTree = mainScreen && mainScreen.useModuleTreePanel && Ext.isFunction(mainScreen.getModuleTreePanel) ?
                mainScreen.getModuleTreePanel() : null;

        // activate mainscreens of all contenttypes
        if (moduleTree && Ext.isFunction(moduleTree.getRootNode)) {
            Ext.each(moduleTree.getRootNode().childNodes, function (node) {
                mainScreen.setActiveContentType(node.attributes.contentType);
            });
        } else if (westPanel && Ext.isFunction(westPanel.getRootNode)) {
            Ext.each(westPanel.getRootNode().childNodes, function (node) {
                // Admin, but not Voipmanager :)
                if (! node.childNodes.length) {
                    node.fireEvent('click', node, {});
                }
            });
        }
    });

    // query for all openWindow methods
    var openers = {};
    var rfn = function(o) {
        lodash.forEach(o, function(value, key) {
            if (lodash.isObject(value) && lodash.isFunction(value.openWindow)) {
                openers[key] = value.openWindow;
            } else if (lodash.isPlainObject(value)) {
                rfn(value);
            }
        });
    }
    rfn(Tine);

    Tine.WindowFactory.windowType = 'Ext';
    lodash.forEach(openers, function(opnr, name) {
        try {
            console.info(name);
            opnr({});
        } catch(e) {}

    });
};

/**
 * gets canonical pathes of all created components
 *
 * @private
 * @static
 * @returns {Array}
 */
Tine.Tinebase.CanonicalPath.getAllPaths = function() {
    var paths = [];
    Ext.ComponentMgr.all.each(function(component) {
        var canonicalPath = Tine.Tinebase.CanonicalPath.getPath(component);
        if (canonicalPath) {
            paths.push(canonicalPath);
        }
    });

    return paths.unique().sort();
};

/**
 * generic canonical name support for components
 */
Ext.override(Ext.Component, {
    /**
     * canonical name
     * @cfg {String} canonicalName
     */
    canonicalName: null,

    /**
     * returns canonical name / path segment
     * @returns {string}
     */
    getCanonicalPathSegment: function() {
        return this.canonicalName
    }
});


/***/ }),
/* 1203 */
/***/ (function(module, exports) {

if (Ext.isTouchDevice) {
    Tine.widgets.grid.FilterToolbar.prototype.filterFieldWidth = 160;
    Tine.widgets.grid.FilterToolbar.prototype.filterValueWidth = 160;
    Tine.widgets.grid.FilterModel.prototype.filterValueWidth = 160;
}

/***/ }),
/* 1204 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiß <c.cweiss@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine', 'Tine.Tinebase');

/**
 * checks users presence according to dom events
 *
 * NOTE: this method intercepts Ext.EventObjectImpl as a lot of events might not bubble till window object
 *       This needs to be adopted as more other frameworks we introduce
 *
 * @namespace  Tine.Tinebase
 * @class      Tine.Tinebase.PresenceObserver
 */
Tine.Tinebase.PresenceObserver = function(config) {
    Ext.apply(this, config);

    this.checkTask = new Ext.util.DelayedTask(this.checkPresence, this);
    this.startChecking();
};

Tine.Tinebase.PresenceObserver.prototype = {
    /**
     * @cfg {integer} maxAbsenceTime in minutes
     */
    maxAbsenceTime: 240,

    /**
     * @cfg {integer} presenceCheckInterval in seconds
     */
    presenceCheckInterval: 5,

    /**
     * @cfg {Function} callback to be called when absence is detected
     */
    absenceCallback: Ext.emptyFn,

    /**
     * @cfg {Function} callback to be called each time presence is detected
     */
    presenceCallback: Ext.emptyFn,

    /**
     * @cfg {Object} scope to the callbacks are called in
     */
    scope: window,

    /**
     * @property {Ext.util.DelayedTask} checkTask
     */
    checkTask: null,

    startChecking: function() {
        var now = new Date();
        firstCheck = now.add(Date.MINUTE, this.maxAbsenceTime);

        this.state = 'presence';
        this.setLastPresence(now);

        Tine.log.debug('Tine.Tinebase.PresenceObserver.startChecking register fist presence check for ' + firstCheck);
        this.checkTask.delay(this.maxAbsenceTime * 60000);
    },

    stopChecking: function() {
        this.checkTask.cancel();
    },

    checkPresence: function() {
        var now = new Date(),
            nowTS = now.getTime(),
            lastPresence = this.getLastPresence(),
            state = lastPresence + this.maxAbsenceTime * 60000 <= nowTS ? 'absence' : 'presence';

        Tine.log.debug('Tine.Tinebase.PresenceObserver.checkPresence checking presece now ' + now);
        Tine.log.debug('Tine.Tinebase.PresenceObserver.checkPresence state: "' + state + '" as last presence detected at ' + new Date(lastPresence));

        if (state == 'absence') {
            Tine.log.info('Tine.Tinebase.PresenceObserver.checkPresence no presence detected for ' + this.maxAbsenceTime + ' minutes');
            if (this.state == 'presence') {
                this.state = 'absence';
                this.absenceCallback.call(this.scope, new Date(lastPresence), this);
            }
            // wait for user to return
            this.checkTask.delay(this.presenceCheckInterval * 1000);

        } else {
            var nextCheck = this.maxAbsenceTime * 60000 - (nowTS - lastPresence);
            Tine.log.debug('Tine.Tinebase.PresenceObserver.checkPresence next presence check at ' + now.add(Date.MILLI, nextCheck));
            this.state = 'presence';
            this.checkTask.delay(nextCheck);
            this.presenceCallback.call(this.scope, new Date(lastPresence), this);
        }
    },

    /**
     * get last presence timestamp
     *
     * @returns {number}
     */
    getLastPresence: function() {

        var myLastPresence = // last prsence from this window
                Tine.Tinebase.PresenceObserver.lastPresence,
            otherLastPresence = // last presence set by other windows
                Tine.Tinebase.registry.get('lastPresence');

        if (myLastPresence > otherLastPresence) {
            this.setLastPresence(myLastPresence);
        }

        return Tine.Tinebase.PresenceObserver.lastPresence;
    },

    setLastPresence: function(ts) {
        ts = ts.getTime ? ts.getTime() : ts;
        Tine.Tinebase.PresenceObserver.lastPresence = ts;
        Tine.Tinebase.registry.set('lastPresence', ts);
    }
};

/**
 * @static {Number} lastPresence last event timestamp
 */
Tine.Tinebase.PresenceObserver.lastPresence = null;


Ext.EventObjectImpl.prototype.setEvent = Ext.EventObjectImpl.prototype.setEvent.createInterceptor(function(e) {
    // timeStamp property of object sucks, see https://developers.google.com/web/updates/2016/01/high-res-timestamps
    Tine.Tinebase.PresenceObserver.lastPresence = new Date().getTime();
});

/***/ }),
/* 1205 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine.Tinebase');

/**
 * PasswordGenerator.
 *
 * @param config
 * @constructor
 */
Tine.Tinebase.PasswordGenerator = function (config) {
    this.minLength = config.minLength || 12;
    this.minWordChars = config.minWordChars || 5;
    this.minUppercaseChars = config.minUppercaseChars || 1;
    this.minSpecialChars = config.minSpecialChars || 1;
    this.minNumericalChars = config.minNumericalChars || 0;
};

Tine.Tinebase.PasswordGenerator.prototype = {
    /**
     * Ascii range for uppercase characters
     * @private
     */
    uppercaseChars: [65, 90],
    /**
     * Ascii range for lowercase characters
     * @private
     */
    lowercaseChars: [97, 122],
    /**
     * Ascii range for special chars
     * @private
     */
    specialChars: [33, 46],
    /**
     * Ascii range for numerical chars
     * @private
     */
    numericalChars: [48, 57],

    /**
     * Characters to be used in password
     * @private
     */
    characters: [],

    /**
     * Generates a random password based on the minimal criteria defined in config
     */
    generatePassword: function () {
        this.characters = [];

        this.addCharsOfType(this.uppercaseChars, this.minUppercaseChars);
        this.addCharsOfType(this.specialChars, this.minSpecialChars);
        this.addCharsOfType(this.numericalChars, this.minNumericalChars);
        this.addCharsOfType(this.lowercaseChars, this.minWordChars);
        this.addCharsOfType(this.lowercaseChars, this.minLength - this.characters.length);

        var _ = window.lodash;

        return _.join(_.shuffle(this.characters), '');
    },

    /**
     * @private
     * @param range
     * @param min
     */
    addCharsOfType: function(range, min) {
        for(var i = 0; i < min; i++) {
            this.characters.push(this.getRandomCharOfRange(range));
        }
    },

    /**
     * @private
     * @param range
     * @return {string}
     */
    getRandomCharOfRange: function (range) {
        var _ = window.lodash;
        return String.fromCharCode(_.random(range[0], range[1]));
    }
};

/***/ }),
/* 1206 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

/**
 * File picker dialog
 *
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.RangeSliderComponent
 * @extends     Ext.Component
 * @constructor
 * @param       {Object} config The configuration options.
 */
Tine.Tinebase.RangeSliderComponent = Ext.extend(Ext.BoxComponent, {
    minWidth: 100,
    height: 25,

    slider: null,
    sliderResizer: null,
    sliderLabel: null,
    sliderBorder: null,

    maxRange: 23.99,

    currentStart: 0,
    currentEnd: 23.99,

    cls: 'rangeslider-component',

    name: null,

    /**
     * @private
     */
    initComponent: function () {
        this.supr().initComponent.apply(this, arguments);
        this.on('afterrender', this.onAfterRender);
    },

    /**
     * We have an element called sliderBorder which can be styled.
     *
     * The sliderWrap is used to calculate positions of the slider within this element, therefor you shouldn't apply
     * box model affecting styles to the slider itself or the the sliderWrap.
     *
     * The slider is a simple div which is managed by Ext.Resizable and contains a span which can be used as a label.
     *
     * @todo: maybe this can be done better
     *
     * @private
     */
    initSlider: function () {
        this.sliderWrap = new Ext.Element(document.createElement('div'));

        this.sliderBorder = new Ext.Element(document.createElement('div'));
        this.sliderBorder.addClass('rangeslider-component-sliderBorder');

        this.slider = new Ext.Element(document.createElement('div'));
        this.slider.addClass('rangeslider-component-slider');

        this.sliderLabel = new Ext.Element(document.createElement('span'));
        this.sliderLabel.setHeight(this.height);
        this.sliderLabel.addClass('rangeslider-component-slider-label');

        this.slider.appendChild(this.sliderLabel);
        this.sliderWrap.appendChild(this.slider);

        this.sliderBorder.appendChild(this.sliderWrap);

        this.getEl().appendChild(this.sliderBorder);

        this.sliderResizer = new Ext.Resizable(this.slider, {
            handles: 'e w',
            pinned: true,
            dynamic: true
        });
    },

    /**
     * @private
     */
    onAfterRender: function () {
        this.initSlider();
        this.setSliderWidth(this.currentStart, this.currentEnd);
    },

    /**
     * @private
     *
     * In case you won't use this class for a hour, min slider, you should override this function and update the label yourself
     */
    updateLabel: function () {
        this.sliderLabel.setWidth(this.sliderResizer.getEl().getWidth());

        if (this.sliderLabel.getWidth() > this.slider.getWidth()) {
            this.sliderLabel.hide();
        } else {
            this.sliderLabel.show();
        }

        var hoursStart = Tine.Tinebase.common.trunc(this.currentStart);
        var minStart = Tine.Tinebase.common.trunc(Math.round((this.currentStart % 1) * 100) * 0.60);

        var hoursEnd = Tine.Tinebase.common.trunc(this.currentEnd);
        var minEnd = Tine.Tinebase.common.trunc((this.currentEnd % 1) * 100 * 0.60);

        var startDate = new Date();
        startDate.setHours(hoursStart);
        startDate.setMinutes(minStart);

        var endDate = new Date();
        endDate.setHours(hoursEnd);
        endDate.setMinutes(minEnd);

        var pattern = 'H:i';

        this.sliderLabel.update(startDate.format(pattern) + ' - ' + endDate.format(pattern));
    },

    /**
     * @private
     */
    getCropFactor: function () {
        return this.sliderWrap.getWidth(true) / this.maxRange;
    },

    /**
     * @private
     */
    onSliderResize: function () {
        var el = this.sliderResizer.getEl();
        var offsetLeft = el.getOffsetsTo(this.sliderWrap)[0];
        var offsetWidth = el.dom.offsetWidth;
        var cropFactor = this.getCropFactor();

        this.currentStart = offsetLeft / cropFactor;
        this.currentEnd = (offsetLeft + offsetWidth) / cropFactor;

        var invalidState = false;

        if (this.currentEnd > this.maxRange) {
            this.currentEnd = this.maxRange;

            invalidState = true;
        }

        if (this.currentStart < 0) {
            this.currentStart = 0;

            invalidState = true;
        }

        if (true === invalidState) {
            this.setSliderWidth(this.currentStart, this.currentEnd);
        }

        this.updateLabel();
    },

    /**
     *  @private
     */
    resizeElement: function () {
        var box = Ext.Resizable.prototype.resizeElement.apply(this.sliderResizer);

        this.onSliderResize();

        return box;
    },

    /**
     * Set the slider width
     *
     * @param start 0-23.99
     * @param end 0-23.99
     */
    setSliderWidth: function (start, end) {
        // End is not allowed to be smaller
        if (end < start) {
            return;
        }

        this.currentStart = start;
        this.currentEnd = end;

        var cropFactor = this.getCropFactor();
        var leftOffset = start * cropFactor;
        var width = (end * cropFactor) - (start * cropFactor);

        this.slider.alignTo(this.sliderWrap, 'tl-tl', [leftOffset, 0]);

        this.sliderResizer.resizeElement = this.resizeElement.createDelegate(this);
        this.sliderResizer.on('resize', this.onSliderResize.createDelegate(this));

        this.sliderResizer.resizeTo(width, this.sliderResizer.getEl().getHeight());
    },

    /**
     * Returns current span
     */
    getRange: function () {
        return [this.currentStart, this.currentEnd];
    },

    /**
     * Set slider to a certain position by entering an array with start and end
     */
    setRange: function (range) {
        if (!Ext.isArray(range) || range.length !== 2) {
            return;
        }

        this.setSliderWidth(range[0], range[1]);
    }
});

/***/ }),
/* 1207 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license      http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author       Michael Spahn <m.spahn@metaways.de>
 * @copyright    Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
Ext.ns('Tine.widgets.form');

/**
 * Upload Button
 *
 * @namespace   Tine.widgets.form
 * @class       Tine.widgets.form.FileSelectionArea
 * @extends     Ext.Button
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @constructor
 * @param {Object} config The configuration options.
 */
Tine.widgets.form.FileSelectionArea = Ext.extend(Tine.widgets.form.FileUploadButton, {
    cls: 'tw-FileSelectionArea',

    multiple: true,

    /**
     * init this upload button
     */
    initComponent: function () {
        this.events = [
            /**
             * Fires when a file was selected
             */
            'fileSelected'
        ];
        Tine.widgets.form.FileSelectionArea.superclass.initComponent.call(this);
    },

    // bye bye layout probs.
    doAutoWidth: Ext.emptyFn,

    /**
     * called when a file got selected
     *
     * @param {ux.BrowsePlugin} fileSelector
     * @param {Ext.EventObject} event
     */
    onFileSelect: function (fileSelector, event) {
        this.fireEvent('fileSelected', fileSelector, event);
    },

    getTempFileId: function () {
        return this.fileRecord ? this.fileRecord.get('tempFile').id : null;
    }

});

Ext.reg('tw.uploadarea', Tine.widgets.form.FileSelectionArea);

/***/ }),
/* 1208 */
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Michael Spahn <m.spahn@metaways.de>
 * @copyright   Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
Ext.ns('Tine.Tinebase');

/**
 * File picker dialog
 *
 * @namespace   Tine.Tinebase
 * @class       Tine.Tinebase.FileSelectionDialog
 * @extends     Tine.Tinebase.dialog.Dialog
 * @constructor
 * @param       {Object} config The configuration options.
 */
Tine.Tinebase.FileSelectionDialog = Ext.extend(Tine.Tinebase.dialog.Dialog, {
    layout: 'fit',

    /**
     * Dialog window
     */
    window: null,

    /**
     * Window title
     */
    title: null,

    /**
     * Hide panel header by default
     */
    header: false,

    /**
     * The validated and choosen node
     */
    nodes: null,

    /**
     * Filepicker singleton
     */
    filePicker: null,

    windowNamePrefix: 'FileSelectionDialog_',
    cls: 'tw-editdialog',

    /**
     * Constructor.
     */
    initComponent: function () {
        this.items = {
            xtype: 'tabpanel',
            border: false,
            plain: true,
            activeTab: 1,
            plugins: [{
                ptype: 'ux.tabpanelkeyplugin'
            }],
            items: []
        };


        this.fbar = [
            '->',
            this.okAction
        ];

        this.initFilemanager();
        this.initFileupload();

        Tine.Tinebase.FileSelectionDialog.superclass.initComponent.call(this);
    },

    handler: function (fileSelector, e) {
        throw new Error('Handler not implemented.');
    },

    initFilemanager: function () {
        if (!Tine.Tinebase.appMgr.isEnabled('Filemanager')) {
            return;
        }

        this.items.items.push({
            layout: 'fit',
            title: i18n._('Filemanager'),
            items: [
                this.getFilePicker()
            ]
        });
    },

    getEventData: function () {
        return this.nodes;
    },
    
    afterRender: function () {
        Tine.Tinebase.widgets.dialog.PasswordDialog.superclass.afterRender.call(this);
        this.buttonApply.setDisabled(true);
    },

    initFileupload: function () {
        this.fileSelectionArea = new Tine.widgets.form.FileSelectionArea({
            text: i18n._('Select or drop file to upload'),
            region: 'center',
            margins: {top: 5, right: 5, bottom: 5, left: 5}
        });

        this.items.items.push({
            layout: 'border',
            title: i18n._('Fileupload'),
            items: [
                this.fileSelectionArea
            ]
        });

        this.fileSelectionArea.on('fileSelected', this.onFileLocalfileSelected.createDelegate(this));
    },

    onFileLocalfileSelected: function (selector, e) {
        this.handler(selector, e);
        this.window.close();
    },
    

    /**
     * Create a new filepicker and register listener
     * @returns {*}
     */
    getFilePicker: function () {
        if (this.filePicker === null) {
            this.filePicker = new Tine.Filemanager.FilePicker({
                constraint: 'file',
                singleSelect: false
            });

            this.filePicker.on('nodeSelected', this.onNodesSelected.createDelegate(this));
            this.filePicker.on('invalidNodeSelected', this.onInvalidNodesSelected.createDelegate(this));
        }

        return this.filePicker;
    },

    /**
     * If a node was selected
     * @param nodes
     */
    onNodesSelected: function (nodes) {
        this.nodes = nodes;
        this.buttonApply.setDisabled(false);
    },

    /**
     * If an invalid node was selected
     */
    onInvalidNodesSelected: function () {
        this.buttonApply.setDisabled(true);
    },

    onButtonApply: function() {
        this.handler(this.nodes);
        Tine.Tinebase.FileSelectionDialog.superclass.onButtonApply.apply(this, arguments);
    },
    
    /**
     * Creates a new pop up dialog/window (acc. configuration)
     *
     * @returns {null}
     */
    openWindow: function (config) {
        if (this.window) {
            return this.window;
        }

        config = config || {};

        this.window = Tine.WindowFactory.getWindow(Ext.apply({
            title: this.windowTitle,
            closeAction: 'close',
            modal: true,
            width: 550,
            height: 500,
            plain: true,
            layout: 'fit',
            items: [
                this
            ]
        }, config));

        return this.window;
    }
});

/***/ }),
/* 1209 */
/***/ (function(module, exports, __webpack_require__) {

/*
 * Tine 2.0
 * 
 * @package     Tine
 * @subpackage  Tinebase
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2007-2013 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 * TODO         allow to add user defined part to Tine.title
 */

/*global Ext, Tine, google, OpenLayers, Locale, */

/** ------------------------- Ext.ux Initialisation ------------------------ **/

Ext.ux.Printer.BaseRenderer.prototype.stylesheetPath = 'Tinebase/js/ux/Printer/print.css';


/** ------------------------ Tine 2.0 Initialisation ----------------------- **/

/**
 * @class Tine
 * @singleton
 */
Ext.namespace('Tine', 'Tine.Tinebase', 'Tine.Calendar');

/**
 * version of Tine 2.0 javascript client version, gets set a build / release time <br>
 * <b>Supported Properties:</b>
 * <table>
 *   <tr><td><b>buildType</b></td><td> type of build</td></tr>
 *   <tr><td><b>buildDate</b></td><td> date of build</td></tr>
 *   <tr><td><b>buildRevision</b></td><td> revision of build</td></tr>
 *   <tr><td><b>codeName</b></td><td> codename of release</td></tr>
 *   <tr><td><b>packageString</b></td><td> packageString of release</td></tr>
 *   <tr><td><b>releaseTime</b></td><td> releaseTime of release</td></tr>
 * </table>
 * @type {Object}
 */
Tine.clientVersion = {};
Tine.clientVersion.buildType="DEBUG";
Tine.clientVersion.buildDate="2018-06-14 15:48:31";
Tine.clientVersion.buildRevision = '2018.02.6-48-g8aa553f';
Tine.clientVersion.codeName = '2018.02';
Tine.clientVersion.packageString = '2018.02.7';
Tine.clientVersion.releaseTime = '2018-06-14 15:48:23';

/**
 * title of app (gets set at build time)
 * 
 * @type String
 */
Tine.logo = 'images/tine_logo.png';
Tine.title = 'Tine 2.0 \u00ae';
Tine.weburl = 'http://www.tine20.com/1/welcome-community/';
Tine.helpUrl = 'https://github.com/tine20/Tine-2.0-Open-Source-Groupware-and-CRM/wiki';
Tine.bugreportUrl = 'https://api.tine20.net/bugreport.php';

/**
 * quiet logging in release mode
 */
Ext.LOGLEVEL = Tine.clientVersion.buildType === 'RELEASE' ? 0 : 7;
Tine.log = Ext.ux.log;

Ext.namespace('Tine.Tinebase');

/**
 * @class Tine.Tinebase.tineInit
 * @namespace Tine.Tinebase
 * @sigleton
 * static tine init functions
 */
Tine.Tinebase.tineInit = {
    /**
     * @cfg {String} getAllRegistryDataMethod
     */
    getAllRegistryDataMethod: 'Tinebase.getAllRegistryData',

    /**
     * @cfg {Boolean} stateful
     */
    stateful: true,

    /**
     * @cfg {String} jsonKeyCookieId
     */
    jsonKeyCookieId: 'TINE20JSONKEY',

    /**
     * @cfg {String} requestUrl
     */
    requestUrl: 'index.php',
    
    /**
     * prefix for localStorage keys
     * @type String
     */
    lsPrefix: Tine.Tinebase.common.getUrl('path') + 'Tine',
    
    onPreferenceChangeRegistered: false,
    
    initWindow: function () {
        Ext.getBody().on('keydown', function (e) {
            if (e.ctrlKey && e.getKey() === e.A && ! (e.getTarget('form') || e.getTarget('input') || e.getTarget('textarea'))) {
                // disable the native 'select all'
                e.preventDefault();
            } else if (e.getKey() === e.BACKSPACE && ! (e.getTarget('form') || e.getTarget('input') || e.getTarget('textarea'))) {
                // disable the native 'history back'
                e.preventDefault();
            } else if (!window.isMainWindow && e.ctrlKey && e.getKey() === e.T) {
                // disable the native 'new tab' if in popup window
                e.preventDefault();
            } else if (window.isMainWindow && e.ctrlKey && (e.getKey() === e.L || e.getKey() === e.DELETE)) {
                // reload on ctrl-l
                Tine.Tinebase.common.reload({
                    clearCache: true
                });
            } else if (e.ctrlKey && e.getKey() === e.S ) {
                Ext.ux.screenshot.ux(window, {download: true, grabMouse: !e.shiftKey});
            }
        });
        
        // disable generic drops
        Ext.getBody().on('dragover', function (e) {
            e.stopPropagation();
            e.preventDefault();
            e.browserEvent.dataTransfer.dropEffect = 'none';
        }, this);

        // generic context menu
        Ext.getBody().on('contextmenu', function (e) {
            var target = e.getTarget('a',1 ,true) ||
                e.getTarget('input[type=text]',1 ,true) ||
                e.getTarget('textarea',1 ,true);
            if (target) {
                // allow native context menu for links
                return;
            }

            e.stopPropagation();
            e.preventDefault();

            Tine.Tinebase.MainContextMenu.showIf(e);
        }, this);

        Ext.getBody().on('click', function(e) {
            var target = e.getTarget('a', 1, true),
                href = target ? target.getAttribute('href') : '';

            if (target && href && href != '#') {
                // open internal links in same window (use router)
                if (window.isMainWindow === true) {
                    if (target.getAttribute('target') === '_blank') {

                        if (href.match(new RegExp('^' + window.lodash.escapeRegExp(Tine.Tinebase.common.getUrl())))) {
                            target.set({
                                href: decodeURI(href),
                                target: "_self"
                            });
                        }
                    }
                } else {
                    e.preventDefault();

                    if (e.ctrlKey || e.metaKey) {
                        var win = window.open(href, '_blank', null, true);
                        win.opener = null;
                    } else {
                        window.opener.location.href = href;
                        window.close();
                    }
                }
            }
        }, this);
    },

    initPostal: function () {
        if (! window.postal) {
            return;
        }

        var config = postal.fedx.transports.xwindow.configure();
        postal.fedx.transports.xwindow.configure( {
            localStoragePrefix: Tine.Tinebase.tineInit.lsPrefix + '.' + config.localStoragePrefix
        } );
        postal.instanceId('xwindow-' + _.random(0,1000));
        postal.configuration.promise.createDeferred = function() {
            return Promise.defer();
        };
        postal.configuration.promise.getPromise = function(dfd) {
            return dfd.promise;
        };
        postal.fedx.configure({
            filterMode: 'blacklist'
        });

        postal.fedx.signalReady();

        postal.addWireTap( function( d, e ) {
            Tine.log.debug( "ID: " + postal.instanceId() + " " + JSON.stringify( e, null, 4 ) );
        } );
    },
    
    initDebugConsole: function () {
        var map = new Ext.KeyMap(Ext.getDoc(), [{
            key: [122], // F11
            ctrl: true,
            fn: Tine.Tinebase.common.showDebugConsole
        }]);
    },

    /**
     * Each window has exactly one viewport containing a card layout in its lifetime
     * The default card is a splash screen.
     * 
     * default wait panel (picture only no string!)
     */
    initBootSplash: function () {
        Ext.util.CSS.updateRule('.tine-favicon', 'background-image', 'url(favicon/30/png)');

        Tine.Tinebase.viewport = new Ext.Viewport({
            layout: 'fit',
            border: false,
            items: {
                xtype: 'container',
                ref: 'tineViewportMaincardpanel',
                isWindowMainCardPanel: true,
                layout: 'card',
                border: false,
                activeItem: 0,
                items: [{
                    xtype: 'container',
                    border: false,
                    layout: 'fit',
                    width: 16,
                    height: 16,
                    // the content elements come from the initial html so they are displayed fastly
                    contentEl: Ext.select('div[class^=tine-viewport-]')
                }]
            }
        });
    },

    initLoginPanel: function() {
        if (window.isMainWindow && ! Tine.loginPanel) {
            var mainCardPanel = Tine.Tinebase.viewport.tineViewportMaincardpanel;
            Tine.loginPanel = new Tine.Tinebase.LoginPanel({
                defaultUsername: Tine.Tinebase.registry.get('defaultUsername'),
                defaultPassword: Tine.Tinebase.registry.get('defaultPassword')
            });
            mainCardPanel.add(Tine.loginPanel);
        }
    },

    showLoginBox: function(cb, scope) {
        var mainCardPanel = Tine.Tinebase.viewport.tineViewportMaincardpanel,
            activeItem = mainCardPanel.layout.activeItem;

        mainCardPanel.layout.setActiveItem(Tine.loginPanel.id);
        Tine.loginPanel.doLayout();
        Tine.loginPanel.onLogin = function(response) {
            mainCardPanel.layout.setActiveItem(activeItem);
            cb.call(scope||window, response);
        };
    },

    renderWindow: function () {
        Tine.log.info('renderWindow::start');

        // check if user is already logged in
        if (! Tine.Tinebase.registry.get('currentAccount')) {
            Tine.Tinebase.tineInit.showLoginBox(function(response){
                Tine.log.info('tineInit::renderWindow -fetch users registry');
                Tine.Tinebase.tineInit.initRegistry(true, function() {
                    if (Ext.isWebApp) {
                        Tine.Tinebase.registry.set('sessionId', response.responseData.sessionId);
                        Tine.Tinebase.registry.set('usercredentialcache', Tine.Tinebase.tineInit.jsonKeyCookieProvider.get('usercredentialcache'));
                    }
                    Tine.log.info('tineInit::renderWindow - registry fetched, render main window');
                    Ext.MessageBox.hide();
                    Tine.Tinebase.tineInit.checkClientVersion();
                    Tine.Tinebase.tineInit.initWindowMgr();
                    Tine.Tinebase.tineInit.renderWindow();
                });
            });
            
            return;
        } else {
            var sessionLifeTime = Tine.Tinebase.registry.get('sessionLifeTime') || 86400,

                // log out after sessionLifeTime of absence (NOTE: session is not over due to background requests)
                sessionLifeTimeObserver = new Tine.Tinebase.PresenceObserver({
                    maxAbsenceTime: sessionLifeTime / 60,
                    absenceCallback: function(lastPresence, po) {
                        Tine.Tinebase.MainMenu.prototype._doLogout();
                    }
                }),

                // report users presence to server
                userPresenceObserver = new Tine.Tinebase.PresenceObserver({
                    maxAbsenceTime: 3,
                    presenceCallback: function(lastPresence, po) {
                        Tine.Tinebase.reportPresence(lastPresence);
                    }
                });
        }

        Tine.Tinebase.router = new director.Router().init();
        Tine.Tinebase.router.configure({notfound: function () {
            var defaultApp = Tine.Tinebase.appMgr.getDefault();
            Tine.Tinebase.router.setRoute('/' + defaultApp.appName);
        }});

        var route = Tine.Tinebase.router.getRoute(),
            winConfig = Ext.ux.PopupWindowMgr.get(window);

        Tine.Tinebase.ApplicationStarter.init();
        Tine.Tinebase.appMgr.getAll();

        if (winConfig) {
            var mainCardPanel = Tine.Tinebase.viewport.tineViewportMaincardpanel,
                card = Tine.WindowFactory.getCenterPanel(winConfig);

            mainCardPanel.add(card);
            mainCardPanel.layout.setActiveItem(card.id);
            card.doLayout();
        } else {
            Tine.Tinebase.router.dispatch('on', '/' + route.join('/'));
        }
    },

    initAjax: function () {
        Ext.Ajax.url = Tine.Tinebase.tineInit.requestUrl;
        Ext.Ajax.method = 'POST';
        
        Ext.Ajax.defaultHeaders = {
            'X-Tine20-Request-Type' : 'JSON'
        };
        
        Ext.Ajax.transactions = {};

        Tine.Tinebase.tineInit.jsonKeyCookieProvider = new Ext.ux.util.Cookie({
            path: String(Tine.Tinebase.common.getUrl('path')).replace(/\/$/, '')
        });

        /**
         * inspect all requests done via the ajax singleton
         * 
         * - send custom headers
         * - send json key 
         * - implicitly transform non jsonrpc requests
         * 
         * NOTE: implicitly transformed reqeusts get their callback fn's proxied 
         *       through generic response inspectors as defined below
         */
        Ext.Ajax.on('beforerequest', function (connection, options) {

            var jsonKey = Tine.Tinebase.registry && Tine.Tinebase.registry.get ? Tine.Tinebase.registry.get('jsonKey') : '',
                jsonKeyCookieId = Tine.Tinebase.tineInit.jsonKeyCookieId,
                cookieJsonKey = Tine.Tinebase.tineInit.jsonKeyCookieProvider.get(jsonKeyCookieId);

            if (cookieJsonKey) {
                Tine.Tinebase.tineInit.jsonKeyCookieProvider.clear(jsonKeyCookieId);
                // NOTE cookie reset is not always working in IE, so we need to check jsonKey again
                if (cookieJsonKey && cookieJsonKey != "null") {
                    jsonKey = cookieJsonKey;
                    Tine.Tinebase.registry.set('jsonKey', jsonKey);
                }
            }

            options.headers = options.headers || {};
            options.headers['X-Tine20-JsonKey'] = jsonKey;
            options.headers['X-Tine20-TransactionId'] = Tine.Tinebase.data.Record.generateUID();
            
            options.url = Ext.urlAppend((options.url ? options.url : Tine.Tinebase.tineInit.requestUrl),  'transactionid=' + options.headers['X-Tine20-TransactionId']);
            
            // convert non Ext.Direct request to jsonrpc
            // - convert params
            // - convert error handling
            if (options.params && !options.isUpload) {
                var params = {};
                
                var def = Tine.Tinebase.registry.get('serviceMap') ? Tine.Tinebase.registry.get('serviceMap').services[options.params.method] : false;
                if (def) {
                    // sort parms according to def
                    for (var i = 0, p; i < def.parameters.length; i += 1) {
                        p = def.parameters[i].name;
                        params[p] = options.params[p];
                    }
                } else {
                    for (var param in options.params) {
                        if (options.params.hasOwnProperty(param) && param !== 'method') {
                            params[param] = options.params[param];
                        }
                    }
                }
                
                options.jsonData = Ext.encode({
                    jsonrpc: '2.0',
                    method: options.params.method,
                    params: params,
                    id: ++Ext.Direct.TID
                });
                
                options.cbs = {};
                options.cbs.success  = options.success  || null;
                options.cbs.failure  = options.failure  || null;
                options.cbs.callback = options.callback || null;
                
                options.isImplicitJsonRpc = true;
                delete options.params;
                delete options.success;
                delete options.failure;
                delete options.callback;
            }
            
            Ext.Ajax.transactions[options.headers['X-Tine20-TransactionId']] = {
                date: new Date(),
                json: options.jsonData
            };
        });


        
        /**
         * inspect completed responses => staus code == 200
         * 
         * - detect resoponse errors (e.g. html from xdebug) and convert to exceptional states
         * - implicitly transform requests from JSONRPC
         * 
         *  NOTE: All programatically catchable exceptions lead to successfull requests
         *        with the jsonprc protocol. For implicitly converted jsonprc requests we 
         *        transform error states here and route them to the error methods defined 
         *        in the request options
         *        
         *  NOTE: Illegal json data responses are mapped to error code 530
         *        Empty resonses (Ext.Decode can't deal with them) are maped to 540
         *        Memory exhausted to 550
         */
        Ext.Ajax.on('requestcomplete', function (connection, response, options) {
            delete Ext.Ajax.transactions[options.headers['X-Tine20-TransactionId']];
            
            // detect resoponse errors (e.g. html from xdebug) and convert into error response
            if (! options.isUpload && ! response.responseText.match(/^([{\[])|(<\?xml)+/)) {
                var exception = {
                    code: response.responseText !== "" ? 530 : 540,
                    message: response.responseText !== "" ? 'illegal json data in response' : 'empty response',
                    traceHTML: response.responseText,
                    request: options.jsonData,
                    response: response.responseText
                };
                
                // Fatal error: Allowed memory size of n bytes exhausted (tried to allocate m bytes) 
                if (response.responseText.match(/^Fatal error: Allowed memory size of /m)) {
                    Ext.apply(exception, {
                        code: 550,
                        message: response.responseText
                    });
                }
                
                // encapsulate as jsonrpc response
                var requestOptions = Ext.decode(options.jsonData);
                response.responseText = Ext.encode({
                    jsonrpc: requestOptions.jsonrpc,
                    id: requestOptions.id,
                    error: {
                        code: -32000,
                        message: exception.message,
                        data: exception
                    }
                });
            }
            
            // strip jsonrpc fragments for non Ext.Direct requests
            if (options.isImplicitJsonRpc) {
                var jsonrpc = Ext.decode(response.responseText);
                if (jsonrpc.result) {
                    response.responseText = Ext.encode(jsonrpc.result);
                    
                    if (options.cbs.success) {
                        options.cbs.success.call(options.scope, response, options);
                    }
                    if (options.cbs.callback) {
                        options.cbs.callback.call(options.scope, options, true, response);
                    }
                } else {
                    
                    response.responseText = Ext.encode(jsonrpc.error);
                    
                    if (options.cbs.failure) {
                        options.cbs.failure.call(options.scope, response, options);
                    } else if (options.cbs.callback) {
                        options.cbs.callback.call(options.scope, options, false, response);
                    } else {
                        var responseData = Ext.decode(response.responseText);
                            
                        exception = responseData.data ? responseData.data : responseData;
                        exception.request = options.jsonData;
                        exception.response = response.responseText;
                        
                        Tine.Tinebase.ExceptionHandler.handleRequestException(exception);
                    }
                }
            }
        });
        
        /**
         * inspect request exceptions
         *  - convert to jsonrpc compatiple exceptional states
         *  - call generic exception handler if no handler is defined in request options
         *  
         * NOTE: Request exceptions are exceptional state from web-server:
         *       -> status codes != 200 : This kind of exceptions are not part of the jsonrpc protocol
         *       -> timeouts: status code 520
         */
        Ext.Ajax.on('requestexception', function (connection, response, options) {
            delete Ext.Ajax.transactions[options.headers['X-Tine20-TransactionId']];
            // map connection errors to errorcode 510 and timeouts to 520
            var errorCode = response.status > 0 ? response.status :
                            (response.status === 0 ? 510 : 520);
                            
            // convert into error response
            if (! options.isUpload) {
                var exception = {
                    code: errorCode,
                    message: 'request exception: ' + response.statusText,
                    traceHTML: response.responseText,
                    request: options.jsonData,
                    requestHeaders: options.headers,
                    openTransactions: Ext.Ajax.transactions,
                    response: response.responseText
                };
                
                // encapsulate as jsonrpc response
                var requestOptions = Ext.decode(options.jsonData);
                response.responseText = Ext.encode({
                    jsonrpc: requestOptions.jsonrpc,
                    id: requestOptions.id,
                    error: {
                        code: -32000,
                        message: exception.message,
                        data: exception
                    }
                });
            }
            
            // NOTE: Tine.data.RecordProxy is implicitRPC atm.
            if (options.isImplicitJsonRpc) {
                var jsonrpc = Ext.decode(response.responseText);
                
                response.responseText = Ext.encode(jsonrpc.error);
                    
                if (options.cbs.failure) {
                    options.cbs.failure.call(options.scope, response, options);
                } else if (options.cbs.callback) {
                    options.cbs.callback.call(options.scope, options, false, response);
                } else {
                    var responseData = Ext.decode(response.responseText);
                    
                    exception = responseData.data ? responseData.data : responseData;
                    
                    Tine.Tinebase.ExceptionHandler.handleRequestException(exception);
                }
                
            } else if (! options.failure && ! options.callback) {
                Tine.Tinebase.ExceptionHandler.handleRequestException(exception);
            }
        });
    },

    /**
     * init registry
     *
     * @param {Boolean} forceReload
     * @param {Function} cb
     * @param {Object} scope
     */
    initRegistry: function (forceReload, cb, scope) {
        Tine.Tinebase.registry = store.namespace(Tine.Tinebase.tineInit.lsPrefix + '.' + 'Tinebase.registry');

        var version = Tine.Tinebase.registry.get('version'),
            userApplications = Tine.Tinebase.registry.get('userApplications') || [];

        var reloadNeeded =
               !version
            || !userApplications
            || userApplications.length < 2;

        if (forceReload || reloadNeeded) {
            Tine.Tinebase.tineInit.clearRegistry();

            Ext.Ajax.request({
                timeout: 120000, // 2 minutes
                params: {
                    method: Tine.Tinebase.tineInit.getAllRegistryDataMethod
                },
                failure: function () {
                    // if registry could not be loaded, this is mostly due to missconfiguaration
                    // don't send error reports for that!
                    Tine.Tinebase.ExceptionHandler.handleRequestException({
                        code: 503
                    });
                },
                success: function (response, request) {
                    var registryData = Ext.util.JSON.decode(response.responseText);
                    for (var app in registryData) {
                        if (registryData.hasOwnProperty(app)) {
                            var appData = registryData[app];
                            Ext.ns('Tine.' + app);
                            Tine[app].registry = store.namespace(Tine.Tinebase.tineInit.lsPrefix + '.' + app + '.registry');

                            for (var key in appData) {
                                if (appData.hasOwnProperty(key)) {
                                    if (key === 'preferences') {
                                        Tine[app].preferences = store.namespace(Tine.Tinebase.tineInit.lsPrefix + '.' + app + '.preferences');
                                        for (var pref in appData[key]) {
                                            if (appData[key].hasOwnProperty(pref)) {
                                                Tine[app].preferences.set(pref, appData[key][pref]);
                                            }
                                        }

                                    } else {
                                        Tine[app].registry.set(key, appData[key]);
                                    }
                                }
                            }
                        }
                    }

                    Tine.Tinebase.tineInit.onRegistryLoad();

                    cb.call(scope);
                }
            });
        } else {
            for (var app,i=0;i<userApplications.length;i++) {
                app = userApplications[i].name;
                Ext.ns('Tine.' + app);
                Tine[app].registry = store.namespace(Tine.Tinebase.tineInit.lsPrefix + '.' + app + '.registry');
                Tine[app].preferences = store.namespace(Tine.Tinebase.tineInit.lsPrefix + '.' + app + '.preferences');
            }

            Tine.Tinebase.tineInit.onRegistryLoad();
            cb.call(scope);
        }


    },

    /**
     * apply registry data
     */
    onRegistryLoad: function() {
        if (! Tine.Tinebase.tineInit.onPreferenceChangeRegistered 
            && Tine.Tinebase.registry.get('preferences')
            && Tine.Tinebase.registry.get('currentAccount')
            && ! Ext.isNewIE
        ) {
            Tine.log.info('tineInit::onRegistryLoad - register onPreferenceChange handler');
            Tine.Tinebase.preferences.on('replace', Tine.Tinebase.tineInit.onPreferenceChange);
            Tine.Tinebase.tineInit.onPreferenceChangeRegistered = true;
        }

        Tine.helpUrl = Tine.Tinebase.registry.get('helpUrl') || Tine.helpUrl;
        //Do we have a custom weburl for branding?
        Tine.weburl = Tine.Tinebase.registry.get('brandingWeburl') ? Tine.Tinebase.registry.get('brandingWeburl') : Tine.weburl;
        Tine.websiteUrl = Tine.Tinebase.registry.get('websiteUrl') ? Tine.Tinebase.registry.get('websiteUrl') : Tine.weburl;
        
        //DO we have a custom title for branding?
        Tine.title = Tine.Tinebase.registry.get('brandingTitle') ? Tine.Tinebase.registry.get('brandingTitle') : Tine.title;
        Tine.logo = Tine.Tinebase.registry.get('brandingLogo') ? Tine.Tinebase.registry.get('brandingLogo') : Tine.logo;

        if (Tine.Tinebase.registry.get('installLogo')) {
            Tine.installLogo = Tine.Tinebase.registry.get('installLogo');
        } else if (Tine.Tinebase.registry.get('brandingLogo')) {
            Tine.installLogo = Tine.Tinebase.registry.get('brandingLogo');
        } else {
            Tine.installLogo = Tine.logo;
        }

        if (Ext.isWebApp && Tine.Tinebase.registry.get('sessionId')) {
            // restore session cookie
            Tine.Tinebase.tineInit.jsonKeyCookieProvider.set('TINE20SESSID', Tine.Tinebase.registry.get('sessionId'));
            Tine.Tinebase.tineInit.jsonKeyCookieProvider.set('usercredentialcache', Tine.Tinebase.registry.get('usercredentialcache'));
        }

        Ext.override(Ext.ux.file.Upload, {
            maxFileUploadSize: Tine.Tinebase.registry.get('maxFileUploadSize'),
            maxPostSize: Tine.Tinebase.registry.get('maxPostSize')
        });

        Tine.Tinebase.tineInit.initExtDirect();

        formatMessage.setup({
            locale: Tine.Tinebase.registry.get('locale').locale || 'en'
        });

        Tine.Tinebase.tineInit.initState();

        if (Tine.Tinebase.registry.get('currentAccount')) {
            Tine.Tinebase.tineInit.initAppMgr();
        }

        Tine.Tinebase.tineInit.initUploadMgr();

        Tine.Tinebase.tineInit.initLoginPanel();

        // we don't want iOS/Andorid to place stuff to some other cloud
        // we might need to add a real config for this
        // it's not clear how to detect devices w.o. local storage or clients which place
        // downloads in a cloud :-(
        Tine.Tinebase.configManager.set('downloadsAllowed', !Ext.isTouchDevice);

        var AreaLocks = __webpack_require__(1210);
        Tine.Tinebase.areaLocks = new AreaLocks.AreaLocks();
    },

    /**
     * check client version and reload on demand
     */
    checkClientVersion: function() {
        var serverHash = Tine.Tinebase.registry.get('version').filesHash,
            clientHash = Tine.clientVersion.filesHash;

        if (clientHash && clientHash != serverHash) {
            Ext.MessageBox.show({
                buttons: Ext.Msg.OK,
                icon: Ext.MessageBox.WARNING,
                title: i18n._('Your Client is Outdated'),
                msg: i18n._('A new client is available, press OK to get this version'),
                fn: function() {
                    Tine.Tinebase.common.reload({
                        keepRegistry: false,
                        clearCache: true
                    });
                }
            });
        }
    },

    /**
     * remove all registry data
     */
    clearRegistry: function() {
        Tine.log.info('tineInit::clearRegistry');
        if (Ext.isFunction(store.namespace)) {
            store.namespace(Tine.Tinebase.tineInit.lsPrefix).clearAll();
        }
    },

    /**
     * executed when a value in Tinebase registry/preferences changed
     *
     * @param {string} key
     * @param {value} oldValue
     * @param {value} newValue
     */
    onPreferenceChange: function (key, oldValue, newValue) {
        if (Tine.Tinebase.tineInit.isReloading) {
            return;
        }
        
        switch (key) {
            case 'windowtype':
            case 'confirmLogout':
            case 'timezone':
            case 'locale':
                Tine.log.info('tineInit::onPreferenceChange - reload mainscreen');
                Tine.Tinebase.common.reload({
                    clearCache: key == 'locale'
                });

                break;
        }
    },
    
    /**
     * initialise window and windowMgr (only popup atm.)
     */
    initWindowMgr: function () {
        // touch UI support
        if (Ext.isTouchDevice) {
            __webpack_require__.e/* require.ensure */(4).then((function() {
                __webpack_require__(235); // global by include :-(

                Ext.apply (Ext.EventObject, {
                    // NOTE: multipoint gesture events have no xy, so we need to grab it from gesture
                    getXY: function() {
                        if (this.browserEvent &&
                            this.browserEvent.gesture &&
                            this.browserEvent.gesture.center) {
                            this.xy = [this.browserEvent.gesture.center.x, this.browserEvent.gesture.center.y];
                        }

                        return this.xy;
                    }
                });

                var mc = new Hammer.Manager(Ext.getDoc().dom, {
                    domEvents: true
                });

                // convert two finger taps into contextmenu clicks
                mc.add(new Hammer.Tap({
                    event: 'contextmenu',
                    pointers: 2
                }));
                // convert double taps into double clicks
                mc.add(new Hammer.Tap({
                    event: 'dblclick',
                    taps: 2
                }));

                // NOTE: document scroll only happens when soft keybord is displayed and therefore viewport scrolls.
                //       in this case, content might not be accessable
                //Ext.getDoc().on('scroll', function() {
                //
                //}, this);

            }).bind(null, __webpack_require__)).catch(__webpack_require__.oe);
        }

        Ext.getDoc().on('orientationchange', function() {
            // @TODO: iOS safari only?
            var metas = document.getElementsByTagName('meta');
            for (var i = 0; i < metas.length; i++) {
                if (metas[i].name == "viewport") {
                    metas[i].content = "width=device-width, maximum-scale=1.0";
                    // NOTE: if we don't release the max scale here, we get wired layout effects
                    metas[i].content = "width=device-width, maximum-scale=10, user-scalable=no";
                }
            }
            // NOTE: need to hide soft-keybord before relayouting to preserve layout
            document.activeElement.blur();
            Tine.Tinebase.viewport.doLayout.defer(500, Tine.Tinebase.viewport);
        }, this);

        // adjust modal windows when browser gets resized (also orientation change)
        Tine.Tinebase.viewport.on('resize', function(viewport, adjWidth, adjHeight, rawWidth, rawHeight) {
            Ext.WindowMgr.each(function(win) {
                var currSize = win.getSize(),
                    normSize = win.normSize || currSize,
                    maxSize = {width: adjWidth, height: adjHeight};

                win.setSize(
                    Math.min(Math.max(currSize.width, normSize.width), maxSize.width),
                    Math.min(Math.max(currSize.height, normSize.height), maxSize.height)
                );

                win.center();
            });
        }, this, {buffer: 150});

        // initialise window types
        var windowType = 'Browser';
        Ext.ux.PopupWindow.prototype.url = Tine.Tinebase.common.getUrl();
        if (Tine.Tinebase.registry && Tine.Tinebase.registry.get('preferences')) {
            // update window factory window type (required after login)
            windowType = Tine.Tinebase.registry.get('preferences').get('windowtype');
            if (! windowType) {
                windowType = 'Browser';
            }
        }
        windowType = Ext.isTouchDevice ? 'Ext' : windowType;

        Tine.WindowFactory = new Ext.ux.WindowFactory({
            windowType: windowType
        });
    },
    /**
     * initialise state provider
     */
    initState: function () {
        if (Tine.Tinebase.tineInit.stateful === true) {
            if (window.isMainWindow || Ext.isIE) {
                // NOTE: IE is as always pain in the ass! cross window issues prohibit serialisation of state objects
                Ext.state.Manager.setProvider(new Tine.Tinebase.StateProvider());
            } else {
                var mainWindow = Ext.ux.PopupWindowMgr.getMainWindow();
                Ext.state.Manager = mainWindow.Ext.state.Manager;
            }
        }
    },
    
    /**
     * add provider to Ext.Direct based on Tine servicemap
     */
    initExtDirect: function () {
        var sam = Tine.Tinebase.registry.get('serviceMap');
        
        Ext.Direct.addProvider(Ext.apply(sam, {
            'type'     : 'jsonrpcprovider',
            'namespace': 'Tine',
            'url'      : sam.target
        }));
    },

    /**
     * initialise application manager
     */
    initAppMgr: function () {
        if (! Ext.isIE9 && ! Ext.isIE && ! window.isMainWindow) {
            // return app from main window for non-IE browsers
            Tine.Tinebase.appMgr = Ext.ux.PopupWindowMgr.getMainWindow().Tine.Tinebase.appMgr;
        } else {
            Tine.Tinebase.appMgr = new Tine.Tinebase.AppManager();
        }
    },
    
    /**
     * initialise upload manager
     */
    initUploadMgr: function () {
        Tine.Tinebase.uploadManager = new Ext.ux.file.UploadManager();
    },
    
    /**
     * config locales
     */
    initLocale: function () {
        //Locale.setlocale(Locale.LC_ALL, '');
        window.i18n = new Locale.Gettext();
        window.i18n.textdomain('Tinebase');

        window._ = function (msgid) {
            Tine.log.warn('_() is deprecated, please use i18n._ instead' + new Error().stack);
            return window.i18n.dgettext('Tinebase', msgid);
        };

        Tine.Tinebase.prototypeTranslation();

        var formatMessage = __webpack_require__(90);

        // NOTE: we use gettext tooling for template selection
        //       as there is almost no tooling for icu-messages out there
        formatMessage.setup({
            missingTranslation: 'ignore'
        });

        // auto template selection with gettext
        window.formatMessage = function(template) {
            arguments[0] = window.i18n._hidden(template);
            return formatMessage.apply(formatMessage, arguments);
        };
        window.lodash.assign(window.formatMessage, formatMessage);
    }
};

Ext.onReady(function () {
    Tine.Tinebase.tineInit.initWindow();
    Tine.Tinebase.tineInit.initPostal();
    Tine.Tinebase.tineInit.initDebugConsole();
    Tine.Tinebase.tineInit.initBootSplash();
    Tine.Tinebase.tineInit.initLocale();
    Tine.Tinebase.tineInit.initAjax();

    Tine.Tinebase.tineInit.initRegistry(false, function() {
        Tine.Tinebase.tineInit.checkClientVersion();
        Tine.Tinebase.tineInit.initWindowMgr();
        Tine.Tinebase.tineInit.renderWindow();
    });
});


/***/ }),
/* 1210 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _interopRequireDefault = __webpack_require__(21);

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.providers = exports.AreaLocks = void 0;

var _promise = _interopRequireDefault(__webpack_require__(124));

var _classCallCheck2 = _interopRequireDefault(__webpack_require__(52));

var _createClass2 = _interopRequireDefault(__webpack_require__(125));

var _UserPasswordProvider = _interopRequireDefault(__webpack_require__(126));

var _PinProvider = _interopRequireDefault(__webpack_require__(1245));

var _TokenProvider = _interopRequireDefault(__webpack_require__(1246));

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/* global Ext,Tine,i18n,postal */
var providers = {
  UserPassword: _UserPasswordProvider.default,
  Pin: _PinProvider.default,
  Token: _TokenProvider.default
};
exports.providers = providers;

var AreaLocks =
/*#__PURE__*/
function () {
  /**
   * @property {Object} areaOptions run time area options
   */

  /**
   * @property {Object} providerInstances areaName: providerInstance
   */

  /**
   * @property {Object} unlockPromises areaName: unlockPromise
   */
  function AreaLocks() {
    (0, _classCallCheck2.default)(this, AreaLocks);
    this.areaOptions = {};
    this.providerInstances = {};
    this.unlockPromises = {};
  }

  (0, _createClass2.default)(AreaLocks, [{
    key: "getProvider",
    value: function getProvider(config, lockState) {
      if (!this.providerInstances[config.area]) {
        if (!providers[config.provider]) {
          Tine.log.error('AreaLocks.getProvider no such provider: ' + config.provider);
          return;
        }

        this.providerInstances[config.area] = new providers[config.provider](config);
        this.providerInstances[config.area].on('unlock', this.onUnlock, this);
        this.providerInstances[config.area].on('lock', this.onLock, this);
        this.providerInstances[config.area].on('unlocking', this.manageMask.bind(this, config.area), this);
        this.providerInstances[config.area].on('stateChange', this.onStateChange, this);
      }

      this.providerInstances[config.area].setState(lockState);
      return this.providerInstances[config.area];
    }
  }, {
    key: "onUnlock",
    value: function onUnlock(provider) {
      var area = provider.area;
      this.manageMask(area);
      postal.publish({
        channel: 'areaLocks',
        topic: [area, 'unlocked'].join('.'),
        data: provider.getState()
      });
    }
  }, {
    key: "onLock",
    value: function onLock(provider) {
      var me = this;
      var area = provider.area;
      this.manageMask(area);
      postal.publish({
        channel: 'areaLocks',
        topic: [area, 'locked'].join('.'),
        data: provider.getState()
      }); // auto unlock

      var options = me.getOptions(area);

      if (options.maskEl && options.maskEl.isVisible(true)) {
        me.unlock(area);
      }
    }
  }, {
    key: "onStateChange",
    value: function onStateChange(provider, state) {
      this.setLockState(provider.area, state);
    }
    /**
     * get areaLock config
     *
     * config definition:
     * [{
     *   area: 'string',        // name of area
     *   provider: 'string',    // PIN, token(auth_privaicyIdea), password, capture, ip, ...
     *   validity: 'once', '    // 'session', 'lifetime', 'presence', 'someotherthingonlyproviderunderstands',
     *   lifetime: seconds,     // absolute lifetime from unlock
     *   individual: true,      // each area must be unlocked individually (when applied hierarchically / with same provider) -> NOT YET
     *
     *   ... provider specific _public_ options
     * }]
     *
     * @param {String} area
     * @return {Object}
     */

  }, {
    key: "getConfig",
    value: function getConfig(area) {
      var _ = window.lodash;
      var config = Tine.Tinebase.configManager.get('areaLocks', 'Tinebase');

      var areaConfig = _.find(_.get(config, 'records', []), {
        area: area
      });

      return areaConfig;
    }
    /**
     * get areaLock state from registry
     *
     * [{
     *   area: 'string',
     *   expires: datetime (user timezone)
     *   ... provider specific _public_ state (would need server side event system - might not be needed)
     * }]
     */

  }, {
    key: "getLockState",
    value: function getLockState(area) {
      var _ = window.lodash;
      var lockStates = Tine.Tinebase.registry.get('areaLocks');
      return _.find(lockStates, {
        area: area
      });
    }
    /**
     * set areaLock state in registry
     *
     * @param {String|Provider} area
     * @param {Object} lockState
     */

  }, {
    key: "setLockState",
    value: function setLockState(area, lockState) {
      var _ = window.lodash;

      if (!Ext.isString(area)) {
        lockState = area.getState();
        area = area.area;
      }

      var lockStates = Tine.Tinebase.registry.get('areaLocks') || [];

      _.remove(lockStates, {
        area: area
      });

      lockStates.push(lockState);
      Tine.Tinebase.registry.set('areaLocks', lockStates);
    }
  }, {
    key: "manageMask",
    value: function manageMask(area) {
      var _this = this;

      var me = this;
      var options = me.getOptions(area); // @TODO: support array of maskEls?

      if (options.maskEl) {
        me.isLocked(area).then(function (isLocked) {
          if (isLocked) {
            var conf = _this.getConfig(area);

            if (!conf) return _promise.default.reject(new Error('no areaLock configured for: ' + area));

            var lockState = _this.getLockState(area);

            var provider = _this.getProvider(conf, lockState);

            if (provider.isUnlocking) {
              options.maskEl.mask(i18n._('Unlocking ...'), 'x-mask-loading');
            } else {
              var mask = options.maskEl.mask(i18n._('Click here to unlock this area.'), 'tb-arealocks-msg');
              mask.next().on('click', function () {
                me.unlock(area);
              });
            }
          } else {
            options.maskEl.unmask();
          }
        });
      }
    } // public functions

  }, {
    key: "lock",
    value: function lock(area) {
      var me = this;
      return me.isLocked(area).then(function (locked) {
        if (locked) {
          // it's already locked
          return _promise.default.resolve();
        } else {
          var conf = me.getConfig(area);
          var lockState = me.getLockState(area);
          var provider = me.getProvider(conf, lockState);
          return provider.lock();
        }
      });
    }
  }, {
    key: "unlock",
    value: function unlock(area) {
      var me = this;
      return me.isLocked(area).then(function (locked) {
        if (!locked) {
          // it's already unlocked
          return _promise.default.resolve();
        } else {
          var conf = me.getConfig(area);
          var lockState = me.getLockState(area);
          var provider = me.getProvider(conf, lockState);
          me.manageMask(area);

          if (!me.unlockPromises[area]) {
            me.unlockPromises = provider.unlock().finally(function () {
              me.unlockPromises[area] = null;
            }).catch(function () {
              // @TODO show failure message?
              me.unlock(area);
            });
          }

          return me.unlockPromises[area];
        }
      });
    }
  }, {
    key: "setOptions",
    value: function setOptions(area, options) {
      this.areaOptions[area] = options;
    }
  }, {
    key: "getOptions",
    value: function getOptions(area) {
      return this.areaOptions[area] || {};
    }
  }, {
    key: "isLocked",
    value: function isLocked(area, askServer) {
      var conf = this.getConfig(area);
      if (!conf) return _promise.default.reject(new Error('no areaLock configured for: ' + area));
      var lockState = this.getLockState(area);
      var provider = this.getProvider(conf, lockState);
      return provider.isLocked(askServer);
    }
  }, {
    key: "hasLock",
    value: function hasLock(area) {
      var conf = this.getConfig(area);
      return !!conf;
    }
  }]);
  return AreaLocks;
}();

exports.AreaLocks = AreaLocks;

/***/ }),
/* 1211 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(1212);

/***/ }),
/* 1212 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(1213);
var $Object = __webpack_require__(3).Object;
module.exports = function defineProperty(it, key, desc) {
  return $Object.defineProperty(it, key, desc);
};


/***/ }),
/* 1213 */
/***/ (function(module, exports, __webpack_require__) {

var $export = __webpack_require__(12);
// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
$export($export.S + $export.F * !__webpack_require__(20), 'Object', { defineProperty: __webpack_require__(19).f });


/***/ }),
/* 1214 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(1215);
module.exports = __webpack_require__(3).Object.getPrototypeOf;


/***/ }),
/* 1215 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.9 Object.getPrototypeOf(O)
var toObject = __webpack_require__(122);
var $getPrototypeOf = __webpack_require__(201);

__webpack_require__(209)('getPrototypeOf', function () {
  return function getPrototypeOf(it) {
    return $getPrototypeOf(toObject(it));
  };
});


/***/ }),
/* 1216 */
/***/ (function(module, exports, __webpack_require__) {

var _Symbol$iterator = __webpack_require__(1217);

var _Symbol = __webpack_require__(1219);

function _typeof2(obj) { if (typeof _Symbol === "function" && typeof _Symbol$iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof _Symbol === "function" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }

function _typeof(obj) {
  if (typeof _Symbol === "function" && _typeof2(_Symbol$iterator) === "symbol") {
    module.exports = _typeof = function _typeof(obj) {
      return _typeof2(obj);
    };
  } else {
    module.exports = _typeof = function _typeof(obj) {
      return obj && typeof _Symbol === "function" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? "symbol" : _typeof2(obj);
    };
  }

  return _typeof(obj);
}

module.exports = _typeof;

/***/ }),
/* 1217 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(1218);

/***/ }),
/* 1218 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(193);
__webpack_require__(202);
module.exports = __webpack_require__(127).f('iterator');


/***/ }),
/* 1219 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(1220);

/***/ }),
/* 1220 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(1221);
__webpack_require__(192);
__webpack_require__(1226);
__webpack_require__(1227);
module.exports = __webpack_require__(3).Symbol;


/***/ }),
/* 1221 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// ECMAScript 6 symbols shim
var global = __webpack_require__(7);
var has = __webpack_require__(27);
var DESCRIPTORS = __webpack_require__(20);
var $export = __webpack_require__(12);
var redefine = __webpack_require__(196);
var META = __webpack_require__(1222).KEY;
var $fails = __webpack_require__(34);
var shared = __webpack_require__(120);
var setToStringTag = __webpack_require__(75);
var uid = __webpack_require__(74);
var wks = __webpack_require__(8);
var wksExt = __webpack_require__(127);
var wksDefine = __webpack_require__(128);
var enumKeys = __webpack_require__(1223);
var isArray = __webpack_require__(1224);
var anObject = __webpack_require__(15);
var toIObject = __webpack_require__(28);
var toPrimitive = __webpack_require__(117);
var createDesc = __webpack_require__(72);
var _create = __webpack_require__(118);
var gOPNExt = __webpack_require__(1225);
var $GOPD = __webpack_require__(130);
var $DP = __webpack_require__(19);
var $keys = __webpack_require__(73);
var gOPD = $GOPD.f;
var dP = $DP.f;
var gOPN = gOPNExt.f;
var $Symbol = global.Symbol;
var $JSON = global.JSON;
var _stringify = $JSON && $JSON.stringify;
var PROTOTYPE = 'prototype';
var HIDDEN = wks('_hidden');
var TO_PRIMITIVE = wks('toPrimitive');
var isEnum = {}.propertyIsEnumerable;
var SymbolRegistry = shared('symbol-registry');
var AllSymbols = shared('symbols');
var OPSymbols = shared('op-symbols');
var ObjectProto = Object[PROTOTYPE];
var USE_NATIVE = typeof $Symbol == 'function';
var QObject = global.QObject;
// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;

// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
var setSymbolDesc = DESCRIPTORS && $fails(function () {
  return _create(dP({}, 'a', {
    get: function () { return dP(this, 'a', { value: 7 }).a; }
  })).a != 7;
}) ? function (it, key, D) {
  var protoDesc = gOPD(ObjectProto, key);
  if (protoDesc) delete ObjectProto[key];
  dP(it, key, D);
  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
} : dP;

var wrap = function (tag) {
  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
  sym._k = tag;
  return sym;
};

var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
  return typeof it == 'symbol';
} : function (it) {
  return it instanceof $Symbol;
};

var $defineProperty = function defineProperty(it, key, D) {
  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
  anObject(it);
  key = toPrimitive(key, true);
  anObject(D);
  if (has(AllSymbols, key)) {
    if (!D.enumerable) {
      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
      it[HIDDEN][key] = true;
    } else {
      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
      D = _create(D, { enumerable: createDesc(0, false) });
    } return setSymbolDesc(it, key, D);
  } return dP(it, key, D);
};
var $defineProperties = function defineProperties(it, P) {
  anObject(it);
  var keys = enumKeys(P = toIObject(P));
  var i = 0;
  var l = keys.length;
  var key;
  while (l > i) $defineProperty(it, key = keys[i++], P[key]);
  return it;
};
var $create = function create(it, P) {
  return P === undefined ? _create(it) : $defineProperties(_create(it), P);
};
var $propertyIsEnumerable = function propertyIsEnumerable(key) {
  var E = isEnum.call(this, key = toPrimitive(key, true));
  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
};
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
  it = toIObject(it);
  key = toPrimitive(key, true);
  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
  var D = gOPD(it, key);
  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
  return D;
};
var $getOwnPropertyNames = function getOwnPropertyNames(it) {
  var names = gOPN(toIObject(it));
  var result = [];
  var i = 0;
  var key;
  while (names.length > i) {
    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
  } return result;
};
var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
  var IS_OP = it === ObjectProto;
  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
  var result = [];
  var i = 0;
  var key;
  while (names.length > i) {
    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
  } return result;
};

// 19.4.1.1 Symbol([description])
if (!USE_NATIVE) {
  $Symbol = function Symbol() {
    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
    var $set = function (value) {
      if (this === ObjectProto) $set.call(OPSymbols, value);
      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
      setSymbolDesc(this, tag, createDesc(1, value));
    };
    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
    return wrap(tag);
  };
  redefine($Symbol[PROTOTYPE], 'toString', function toString() {
    return this._k;
  });

  $GOPD.f = $getOwnPropertyDescriptor;
  $DP.f = $defineProperty;
  __webpack_require__(210).f = gOPNExt.f = $getOwnPropertyNames;
  __webpack_require__(77).f = $propertyIsEnumerable;
  __webpack_require__(129).f = $getOwnPropertySymbols;

  if (DESCRIPTORS && !__webpack_require__(70)) {
    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
  }

  wksExt.f = function (name) {
    return wrap(wks(name));
  };
}

$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });

for (var es6Symbols = (
  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);

for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);

$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
  // 19.4.2.1 Symbol.for(key)
  'for': function (key) {
    return has(SymbolRegistry, key += '')
      ? SymbolRegistry[key]
      : SymbolRegistry[key] = $Symbol(key);
  },
  // 19.4.2.5 Symbol.keyFor(sym)
  keyFor: function keyFor(sym) {
    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
  },
  useSetter: function () { setter = true; },
  useSimple: function () { setter = false; }
});

$export($export.S + $export.F * !USE_NATIVE, 'Object', {
  // 19.1.2.2 Object.create(O [, Properties])
  create: $create,
  // 19.1.2.4 Object.defineProperty(O, P, Attributes)
  defineProperty: $defineProperty,
  // 19.1.2.3 Object.defineProperties(O, Properties)
  defineProperties: $defineProperties,
  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
  // 19.1.2.7 Object.getOwnPropertyNames(O)
  getOwnPropertyNames: $getOwnPropertyNames,
  // 19.1.2.8 Object.getOwnPropertySymbols(O)
  getOwnPropertySymbols: $getOwnPropertySymbols
});

// 24.3.2 JSON.stringify(value [, replacer [, space]])
$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
  var S = $Symbol();
  // MS Edge converts symbol values to JSON as {}
  // WebKit converts symbol values to JSON as null
  // V8 throws on boxed symbols
  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
})), 'JSON', {
  stringify: function stringify(it) {
    if (it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
    var args = [it];
    var i = 1;
    var replacer, $replacer;
    while (arguments.length > i) args.push(arguments[i++]);
    replacer = args[1];
    if (typeof replacer == 'function') $replacer = replacer;
    if ($replacer || !isArray(replacer)) replacer = function (key, value) {
      if ($replacer) value = $replacer.call(this, key, value);
      if (!isSymbol(value)) return value;
    };
    args[1] = replacer;
    return _stringify.apply($JSON, args);
  }
});

// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(25)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
// 19.4.3.5 Symbol.prototype[@@toStringTag]
setToStringTag($Symbol, 'Symbol');
// 20.2.1.9 Math[@@toStringTag]
setToStringTag(Math, 'Math', true);
// 24.3.3 JSON[@@toStringTag]
setToStringTag(global.JSON, 'JSON', true);


/***/ }),
/* 1222 */
/***/ (function(module, exports, __webpack_require__) {

var META = __webpack_require__(74)('meta');
var isObject = __webpack_require__(26);
var has = __webpack_require__(27);
var setDesc = __webpack_require__(19).f;
var id = 0;
var isExtensible = Object.isExtensible || function () {
  return true;
};
var FREEZE = !__webpack_require__(34)(function () {
  return isExtensible(Object.preventExtensions({}));
});
var setMeta = function (it) {
  setDesc(it, META, { value: {
    i: 'O' + ++id, // object ID
    w: {}          // weak collections IDs
  } });
};
var fastKey = function (it, create) {
  // return primitive with prefix
  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
  if (!has(it, META)) {
    // can't set metadata to uncaught frozen object
    if (!isExtensible(it)) return 'F';
    // not necessary to add metadata
    if (!create) return 'E';
    // add missing metadata
    setMeta(it);
  // return object ID
  } return it[META].i;
};
var getWeak = function (it, create) {
  if (!has(it, META)) {
    // can't set metadata to uncaught frozen object
    if (!isExtensible(it)) return true;
    // not necessary to add metadata
    if (!create) return false;
    // add missing metadata
    setMeta(it);
  // return hash weak collections IDs
  } return it[META].w;
};
// add metadata on freeze-family methods calling
var onFreeze = function (it) {
  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
  return it;
};
var meta = module.exports = {
  KEY: META,
  NEED: false,
  fastKey: fastKey,
  getWeak: getWeak,
  onFreeze: onFreeze
};


/***/ }),
/* 1223 */
/***/ (function(module, exports, __webpack_require__) {

// all enumerable object keys, includes symbols
var getKeys = __webpack_require__(73);
var gOPS = __webpack_require__(129);
var pIE = __webpack_require__(77);
module.exports = function (it) {
  var result = getKeys(it);
  var getSymbols = gOPS.f;
  if (getSymbols) {
    var symbols = getSymbols(it);
    var isEnum = pIE.f;
    var i = 0;
    var key;
    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
  } return result;
};


/***/ }),
/* 1224 */
/***/ (function(module, exports, __webpack_require__) {

// 7.2.2 IsArray(argument)
var cof = __webpack_require__(51);
module.exports = Array.isArray || function isArray(arg) {
  return cof(arg) == 'Array';
};


/***/ }),
/* 1225 */
/***/ (function(module, exports, __webpack_require__) {

// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
var toIObject = __webpack_require__(28);
var gOPN = __webpack_require__(210).f;
var toString = {}.toString;

var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
  ? Object.getOwnPropertyNames(window) : [];

var getWindowNames = function (it) {
  try {
    return gOPN(it);
  } catch (e) {
    return windowNames.slice();
  }
};

module.exports.f = function getOwnPropertyNames(it) {
  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
};


/***/ }),
/* 1226 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(128)('asyncIterator');


/***/ }),
/* 1227 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(128)('observable');


/***/ }),
/* 1228 */
/***/ (function(module, exports, __webpack_require__) {

var _Object$getPrototypeOf = __webpack_require__(53);

var _Object$getOwnPropertyDescriptor = __webpack_require__(1229);

function _get(object, property, receiver) {
  if (object === null) object = Function.prototype;

  var desc = _Object$getOwnPropertyDescriptor(object, property);

  if (desc === undefined) {
    var parent = _Object$getPrototypeOf(object);

    if (parent === null) {
      return undefined;
    } else {
      return _get(parent, property, receiver);
    }
  } else if ("value" in desc) {
    return desc.value;
  } else {
    var getter = desc.get;

    if (getter === undefined) {
      return undefined;
    }

    return getter.call(receiver);
  }
}

module.exports = _get;

/***/ }),
/* 1229 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(1230);

/***/ }),
/* 1230 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(1231);
var $Object = __webpack_require__(3).Object;
module.exports = function getOwnPropertyDescriptor(it, key) {
  return $Object.getOwnPropertyDescriptor(it, key);
};


/***/ }),
/* 1231 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
var toIObject = __webpack_require__(28);
var $getOwnPropertyDescriptor = __webpack_require__(130).f;

__webpack_require__(209)('getOwnPropertyDescriptor', function () {
  return function getOwnPropertyDescriptor(it, key) {
    return $getOwnPropertyDescriptor(toIObject(it), key);
  };
});


/***/ }),
/* 1232 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(1233);

/***/ }),
/* 1233 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(1234);
module.exports = __webpack_require__(3).Object.setPrototypeOf;


/***/ }),
/* 1234 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.3.19 Object.setPrototypeOf(O, proto)
var $export = __webpack_require__(12);
$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(1235).set });


/***/ }),
/* 1235 */
/***/ (function(module, exports, __webpack_require__) {

// Works with __proto__ only. Old v8 can't work with null proto objects.
/* eslint-disable no-proto */
var isObject = __webpack_require__(26);
var anObject = __webpack_require__(15);
var check = function (O, proto) {
  anObject(O);
  if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
};
module.exports = {
  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
    function (test, buggy, set) {
      try {
        set = __webpack_require__(49)(Function.call, __webpack_require__(130).f(Object.prototype, '__proto__').set, 2);
        set(test, []);
        buggy = !(test instanceof Array);
      } catch (e) { buggy = true; }
      return function setPrototypeOf(O, proto) {
        check(O, proto);
        if (buggy) O.__proto__ = proto;
        else set(O, proto);
        return O;
      };
    }({}, false) : undefined),
  check: check
};


/***/ }),
/* 1236 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(1237);

/***/ }),
/* 1237 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(1238);
var $Object = __webpack_require__(3).Object;
module.exports = function create(P, D) {
  return $Object.create(P, D);
};


/***/ }),
/* 1238 */
/***/ (function(module, exports, __webpack_require__) {

var $export = __webpack_require__(12);
// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
$export($export.S, 'Object', { create: __webpack_require__(118) });


/***/ }),
/* 1239 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _interopRequireDefault = __webpack_require__(21);

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _promise = _interopRequireDefault(__webpack_require__(124));

var _assign = _interopRequireDefault(__webpack_require__(1240));

var _getPrototypeOf = _interopRequireDefault(__webpack_require__(53));

var _classCallCheck2 = _interopRequireDefault(__webpack_require__(52));

var _createClass2 = _interopRequireDefault(__webpack_require__(125));

var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(76));

var _inherits2 = _interopRequireDefault(__webpack_require__(78));

var _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(1244));

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/* global Ext,Tine */
var AbstractProvider =
/*#__PURE__*/
function (_Ext$util$Observable) {
  (0, _inherits2.default)(AbstractProvider, _Ext$util$Observable);

  /**
   * @cfg {String} area name of area
   */

  /**
   * @cfg {String} validity 'session', 'lifetime', 'presence' or 'someotherthingonlyproviderunderstands',
   */

  /**
   * @cfg {Number} lifetime lifetime in minutes
   */

  /**
   * @cfg {Boolean} individual each area must be unlocked individually
   * (when applied hierarchically / with same provider) -> NOT YET IMPLEMENTED
   */

  /**
   * @property {Number} expires
   */

  /**
   * @property {Boolean} isUnlocking
   */
  function AbstractProvider(config) {
    var _this;

    (0, _classCallCheck2.default)(this, AbstractProvider);
    _this = (0, _possibleConstructorReturn2.default)(this, (AbstractProvider.__proto__ || (0, _getPrototypeOf.default)(AbstractProvider)).call(this, config));
    _this.expires = 0;
    _this.isUnlocking = false;

    _this.addEvents(
    /**
     * @event lock
     * Fires when the provider locked the area.
     * @param {AbstractProvider} this The Provider
     */
    'lock',
    /**
     * @event unlocking
     * Fires when the provider started the async unlocking action.
     * @param {AbstractProvider} this The Provider
     */
    'unlocking',
    /**
     * @event unlock
     * Fires when the provider unlocked the area.
     * @param {AbstractProvider} this The Provider
     */
    'unlock',
    /**
     * @event stateChange
     * Fires when the state of this provider changes.
     * @param {AbstractProvider} this The Provider
     * @param {Object} state the output of the provider {@link #getState} function
     */
    'stateChange');

    (0, _assign.default)((0, _assertThisInitialized2.default)(_this), config);
    return _this;
  }

  (0, _createClass2.default)(AbstractProvider, [{
    key: "isLocked",
    value: function isLocked()
    /* askServer */
    {
      var me = this;
      return new _promise.default(function (resolve) {
        me.updateState();
        resolve(me.expires < new Date().getTime());
      });
    }
  }, {
    key: "unlock",
    value: function unlock() {
      var me = this;
      return new _promise.default(function (resolve) {
        me.expires = new Date().getTime() + me.lifetime * 60000;
        me.assertTimerRunning();
        me.fireEvent('stateChange', me, me.getState());
        me.fireEvent('unlock', me);
        resolve(me.expires);
      });
    }
  }, {
    key: "lock",
    value: function lock() {
      var me = this;
      return new _promise.default(function (resolve) {
        if (me.presenceObserver) {
          me.presenceObserver.stopChecking();
        }

        if (me.timer) {
          clearTimeout(me.timer);
          me.timer = null;
        }

        me.expires = 0;
        me.fireEvent('stateChange', me, me.getState());
        me.fireEvent('lock', me);
        resolve(me.expires);
      });
    }
  }, {
    key: "assertTimerRunning",
    value: function assertTimerRunning() {
      var me = this;

      if (String(me.validity).toLowerCase() === 'presence') {
        if (!me.presenceObserver) {
          me.presenceObserver = new Tine.Tinebase.PresenceObserver({
            maxAbsenceTime: me.lifetime,
            absenceCallback: me.lock.bind(me),
            presenceCallback: me.updateState.bind(me)
          });
        } else {
          me.presenceObserver.startChecking();
        }
      } else {
        if (!me.timer) {
          var lifetime = Math.min(me.expires - new Date().getTime(), me.lifetime * 60000);
          me.timer = setTimeout(me.lock.bind(me), lifetime);
        }
      }
    }
  }, {
    key: "setState",
    value: function setState(state) {
      var _ = window.lodash;

      var expires = _.get(state, 'expires', 0);

      if (!_.isNumber(expires)) {
        _.set(state, 'expires', new Date(expires).getTime());
      }

      (0, _assign.default)(this, state);
    }
  }, {
    key: "getState",
    value: function getState() {
      return {
        area: this.area,
        expires: this.expires
      };
    }
  }, {
    key: "updateState",
    value: function updateState() {
      var me = this;

      if (me.expires && String(me.validity).toLowerCase() === 'presence' && me.presenceObserver) {
        var expires = me.presenceObserver.getLastPresence() + me.lifetime * 60000;

        if (expires !== me.expires) {
          me.expires = expires;
          me.fireEvent('stateChange', me, me.getState());
        }
      } // timers are not running after page reload / new window


      if (me.expires > new Date().getTime()) {
        me.assertTimerRunning();
      }
    }
  }]);
  return AbstractProvider;
}(Ext.util.Observable);

var _default = AbstractProvider;
exports.default = _default;

/***/ }),
/* 1240 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(1241);

/***/ }),
/* 1241 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(1242);
module.exports = __webpack_require__(3).Object.assign;


/***/ }),
/* 1242 */
/***/ (function(module, exports, __webpack_require__) {

// 19.1.3.1 Object.assign(target, source)
var $export = __webpack_require__(12);

$export($export.S + $export.F, 'Object', { assign: __webpack_require__(1243) });


/***/ }),
/* 1243 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 19.1.2.1 Object.assign(target, source, ...)
var getKeys = __webpack_require__(73);
var gOPS = __webpack_require__(129);
var pIE = __webpack_require__(77);
var toObject = __webpack_require__(122);
var IObject = __webpack_require__(198);
var $assign = Object.assign;

// should work with symbols and should have deterministic property order (V8 bug)
module.exports = !$assign || __webpack_require__(34)(function () {
  var A = {};
  var B = {};
  // eslint-disable-next-line no-undef
  var S = Symbol();
  var K = 'abcdefghijklmnopqrst';
  A[S] = 7;
  K.split('').forEach(function (k) { B[k] = k; });
  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
  var T = toObject(target);
  var aLen = arguments.length;
  var index = 1;
  var getSymbols = gOPS.f;
  var isEnum = pIE.f;
  while (aLen > index) {
    var S = IObject(arguments[index++]);
    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
    var length = keys.length;
    var j = 0;
    var key;
    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
  } return T;
} : $assign;


/***/ }),
/* 1244 */
/***/ (function(module, exports) {

function _assertThisInitialized(self) {
  if (self === void 0) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }

  return self;
}

module.exports = _assertThisInitialized;

/***/ }),
/* 1245 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _interopRequireDefault = __webpack_require__(21);

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _getPrototypeOf = _interopRequireDefault(__webpack_require__(53));

var _classCallCheck2 = _interopRequireDefault(__webpack_require__(52));

var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(76));

var _inherits2 = _interopRequireDefault(__webpack_require__(78));

var _UserPasswordProvider2 = _interopRequireDefault(__webpack_require__(126));

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/* global i18n */
var PinProvider =
/*#__PURE__*/
function (_UserPasswordProvider) {
  (0, _inherits2.default)(PinProvider, _UserPasswordProvider);

  function PinProvider(config) {
    var _this;

    (0, _classCallCheck2.default)(this, PinProvider);
    _this = (0, _possibleConstructorReturn2.default)(this, (PinProvider.__proto__ || (0, _getPrototypeOf.default)(PinProvider)).call(this, config));
    _this.windowTitle = i18n._('PIN required');
    _this.questionText = i18n._('This area is locked. To unlock it you need to provide your PIN');
    _this.passwordFieldLabel = i18n._('PIN');
    return _this;
  }

  return PinProvider;
}(_UserPasswordProvider2.default);

var _default = PinProvider;
exports.default = _default;

/***/ }),
/* 1246 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _interopRequireDefault = __webpack_require__(21);

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _getPrototypeOf = _interopRequireDefault(__webpack_require__(53));

var _classCallCheck2 = _interopRequireDefault(__webpack_require__(52));

var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(76));

var _inherits2 = _interopRequireDefault(__webpack_require__(78));

var _UserPasswordProvider2 = _interopRequireDefault(__webpack_require__(126));

/*
 * Tine 2.0
 *
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2018 Metaways Infosystems GmbH (http://www.metaways.de)
 */

/* global i18n */
var TokenProvider =
/*#__PURE__*/
function (_UserPasswordProvider) {
  (0, _inherits2.default)(TokenProvider, _UserPasswordProvider);

  function TokenProvider(config) {
    var _this;

    (0, _classCallCheck2.default)(this, TokenProvider);
    _this = (0, _possibleConstructorReturn2.default)(this, (TokenProvider.__proto__ || (0, _getPrototypeOf.default)(TokenProvider)).call(this, config));
    _this.windowTitle = i18n._('Token required');
    _this.questionText = i18n._('This area is locked. To unlock it you need to enter your Token');
    _this.passwordFieldLabel = i18n._('Token');
    return _this;
  }

  return TokenProvider;
}(_UserPasswordProvider2.default);

var _default = TokenProvider;
exports.default = _default;

/***/ }),
/* 1247 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(1248);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../js/node_modules/css-loader/index.js!./ExtFixes.css", function() {
			var newContent = require("!!../js/node_modules/css-loader/index.js!./ExtFixes.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 1248 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "/**\n * fixes to the extjs css files \n *\n * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3\n * @author      Cornelius Weiss <c.weiss@metaways.de>\n * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)\n * @version     $Id$\n */\n\n/**\n * Ext sets the z-index for masks to 20000 and for windows to 9000. As such\n * Windows get hidden when a underlaying element gets masked. To fix this we set\n * the mask index to 5000\n */\n.ext-el-mask {z-index: 5000;}\n.ext-el-mask-msg {z-index: 5001;}\n\n/* only included in expamples :-(*/\n.x-menu-title {\n    background: #D6E3F2;\n    border-style: solid;\n    border-color:#DAE6F4 #99bbe8 #99bbe8 #DAE6F4;\n    border-width: 1px;\n    margin:-2px -2px 0;\n    color:#15428b;\n    font:bold 10px tahoma,arial,verdana,sans-serif;\n    display:block;\n    padding:3px;\n}", ""]);

// exports


/***/ }),
/* 1249 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(1250);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../js/node_modules/css-loader/index.js!./Tinebase.css", function() {
			var newContent = require("!!../js/node_modules/css-loader/index.js!./Tinebase.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 1250 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "html, body {\n    font:normal 12px verdana;\n    margin:0;\n    padding:0;\n    border:0 none;\n    overflow:hidden;\n    height:100%;\n}\n\n.ApplicationIconCls {\n    background-image:url(" + __webpack_require__(62) + ") !important;\n}\n\n/* ----- actions -------------------------------------------------------------*/\n.action_add {\n    background-image:url(" + __webpack_require__(56) + ") !important;\n}\n\n.action_enable {\n    background-image:url(" + __webpack_require__(131) + ") !important;\n}\n\n.action_disable {\n    background-image:url(" + __webpack_require__(211) + ") !important;\n}\n\n.action_cut {\n    background-image:url(" + __webpack_require__(1251) + ") !important;\n}\n\n.action_cut_break {\n    background-image:url(" + __webpack_require__(1252) + ") !important;\n}\n\n.action_copy {\n    background-image:url(" + __webpack_require__(1253) + ") !important;\n\n}\n\n.action_paste {\n    background-image:url(" + __webpack_require__(1254) + ") !important;\n}\n\n.action_remove {\n    background-image:url(" + __webpack_require__(212) + ") !important;\n}\n\n.action_edit {\n    background-image:url(" + __webpack_require__(132) + ") !important;\n}\n\n.action_move {\n    background-image:url(" + __webpack_require__(213) + ") !important;\n}\n\n.action_editcopy {\n    background-image:url(" + __webpack_require__(214) + ") !important;\n}\n\n\n.action_system_link {\n    background-image: url(" + __webpack_require__(215) + ") !important;\n}\n\n/* START svg fixes */\n.x-btn-icon {\n    background-size: 16px 16px !important;\n    background-position: top !important;\n    background-repeat: no-repeat;\n}\n\n.x-btn-icon-medium-top button {\n    background-size: 22px 22px;\n    background-position: top !important;\n    background-repeat: no-repeat;\n}\n\n.x-btn-icon-large-top button {\n    background-size: 32px 32px;\n    background-position: top !important;\n    background-repeat: no-repeat;\n}\n/* END svg fixes */\n\n.action_rename {\n    background-image:url(" + __webpack_require__(132) + ") !important;\n}\n\n.action_changecolor {\n    background-image:url(" + __webpack_require__(1255) + ") !important;\n}\n\n.action_delete, .actionDelete {\n    background-image:url(" + __webpack_require__(212) + ") !important;\n}\n\n.x-tbar-page-prev {\n    background-image:url(" + __webpack_require__(133) + ") !important;\n}\n\n.x-tbar-page-next {\n    background-image:url(" + __webpack_require__(134) + ") !important;\n}\n\n.action_applyChanges {\n    background-image:url(" + __webpack_require__(131) + ") !important;\n}\n\n.action_cancel {\n    background-image:url(" + __webpack_require__(211) + ") !important;\n}\n\n.action_saveAndClose {\n    background-image:url(" + __webpack_require__(131) + ") !important;\n}\n\n.action_next {\n    background-image:url(" + __webpack_require__(134) + ") !important;\n}\n\n.x-tbar-loading {\n    background-image: url(" + __webpack_require__(216) + ") !important;\n}\n\n.action_previous {\n    background-image:url(" + __webpack_require__(133) + ") !important;\n}\n\n.action_managePermissions {\n    background-image:url(" + __webpack_require__(55) + ") !important;\n}\n\n.action_manageProperties {\n    background-image:url(" + __webpack_require__(135) + ") !important;\n}\n\n.action_addContact {\n    background-image:url(" + __webpack_require__(36) + ") !important;\n}\n\n.action_deleteContact {\n    background-image:url(" + __webpack_require__(84) + ") !important;\n}\n\n.action_exportAsPdf {\n    background-image:url(" + __webpack_require__(1256) + ") !important;\n}\n\n.action_showArchived {\n    background-image:url(" + __webpack_require__(1257) + ") !important;\n}\n\n.action_logOut {\n    background-image:url(" + __webpack_require__(1258) + ") !important;\n}\n\n.action_login {\n    background-image:url(" + __webpack_require__(216) + ") !important;\n}\n\n.action_loadTutorial,\n.action_userManual {\n    background-image: url(" + __webpack_require__(100) + ") !important;\n}\n\n.action_uploadImage {\n    background-image:url(" + __webpack_require__(1259) + ") !important;\n}\n\n.action_cropImage {\n    background-image:url(" + __webpack_require__(1260) + ") !important;\n}\n\n.action_originalImage {\n    background-image:url(" + __webpack_require__(1261) + ") !important;\n}\n\n.action_export {\n    background-image:url(" + __webpack_require__(136) + ") !important;\n}\n\n.action_import {\n    background-image:url(" + __webpack_require__(1262) + ") !important;\n}\n\n.action_about {\n    background-image:url(" + __webpack_require__(135) + ") !important;\n}\n\n.action_adminMode {\n    background-image:url(" + __webpack_require__(13) + ") !important;\n}\n\n.action_composeEmail {\n    background-image:url(" + __webpack_require__(42) + ") !important;\n}\n\n.action_print {\n    background-image:url(" + __webpack_require__(1263) + ") !important;\n}\n\n.action_printPreview {\n    background-image:url(" + __webpack_require__(1264) + ") !important;\n}\n\n.action_resolveDuplicates {\n    background-image:url(" + __webpack_require__(1265) + ") !important;\n}\n\n.tinebase-action-export-xls {\n    background-image:url(" + __webpack_require__(1266) + ") !important;\n}\n\n.tinebase-action-export-doc {\n    background-image:url(" + __webpack_require__(1267) + ") !important;\n}\n\n\n.tinebase-action-export-ods {\n    background-image:url(" + __webpack_require__(1268) + ") !important;\n}\n\n.tinebase-action-export-csv {\n    background-image:url(" + __webpack_require__(217) + ") !important;\n}\n\n.action_options {\n    background-image:url(" + __webpack_require__(13) + ") !important;\n}\n\n.action_attach {\n    background-image:url(" + __webpack_require__(1269) + ") !important;\n}\n\n.action_image {\n    background-image:url(" + __webpack_require__(1270) + ") !important;\n}\n\n.tinebase-action-debug-console {\n    background-image:url(" + __webpack_require__(62) + ") !important;\n}\n\n.tinebase-dd-drop-ok-copy  .x-dd-drop-icon {\n    background-image:url(" + __webpack_require__(214) + ") !important;\n}\n\n.tinebase-dd-drop-ok-move  .x-dd-drop-icon {\n    background-image:url(" + __webpack_require__(213) + ") !important;\n}\n\n/* ----- tree classes --------------------------------------------------------*/\n.tinebase-tree-drop-move  .x-dd-drop-icon {\n    background-image:url(" + __webpack_require__(215) + ") !important;\n}\n\n.tinebase-tree-hide-collapsetool .x-tree-ec-icon {\n    background: 0;\n}\n\n.tinebase-westpanel-node-favorite img.x-tree-node-icon {\n    background-image:url(" + __webpack_require__(218) + ");\n}\n\n.tinebase-westpanel-node-favorite-shared img.x-tree-node-icon {\n    background-image:url(" + __webpack_require__(1271) + ");\n}\n\n.action-tinebase-favorite {\n    background-image:url(" + __webpack_require__(218) + ") !important;\n}\n\n/* ----- login dialog --------------------------------------------------------*/\n.tb-login-panel form {\n    padding: 20px 10px 20px 20px;\n}\n\n.tb-login-lobobox {\n    text-align:right;\n    height: 60px;\n}\n\n.tb-login-lobobox img {\n    max-width: 400px;\n    max-height: 80px;\n}\n\n.tb-login-big-label {\n    font-size: 16px;\n    font-weight: bold;\n    color: gray;\n    line-height: 35px;\n}\n\n.tb-login-logo {\n }\n\n.tb-login-button-spacer {\n    height: 30px;\n}\n\n.tb-login-infosection {\n    padding-left: 20px;\n}\n\n.tb-login-infosection {\n    color: gray;\n    line-height:17px;\n    /*margin-top:-12px;*/\n}\n\n.tb-login-infosection a {\n    text-decoration: none;\n    font-style: normal;\n    color: #1E78AD;\n}\n\n.tb-login-infosection .tb-login-surveypanel {\n    padding-top: 20px;\n}\n\n/* ----- about dialog --------------------------------------------------------*/\n.tb-about-dlg {\n    text-align: center;\n}\n.tb-about-img {\n    margin-top: 10px;\n}\n.tb-about-img img {\n    max-width: 380px;\n    max-height: 80px;\n}\n.tb-about-version {\n    margin-top: 50px;\n    font-weight: bold;\n}\n.tb-about-build {\n    font-size: smaller;\n}\n.tb-about-copyright {\n    margin-top: 50px;\n}\n\n.tb-about-credits-license {\n    margin-top: 10px;\n}\n\n.tb-about-whatsnew p {\n    background: transparent url(" + __webpack_require__(135) + ") left top no-repeat;\n    padding: 2px 0 2px 20px;\n}\n\n/* -------- tags renderer ------------------------------------------------------------*/\n.tb-grid-tags {\n    width: 8px; \n    height: 8px; \n    border: 1px solid black; \n    float: left;\n    margin-right: 2px;\n    margin-top: 1px;\n    border-radius: 5px;\n}\n\n.ext-gecko .tb-grid-tags {\n    -moz-border-radius: 5px;\n    margin-top: 2px;\n}\n\n.x-menu-item-text .tb-grid-tags {\n    margin-top: 4px;\n}\n\n.x-menu-item-text .x-widget-tag-tagitem-text {\n    line-height: 16px;\n}\n\n/* ----- account renderer ------------------------------------------------------------*/\n.renderer {\n    width: 12px;\n    float: left;\n    padding-left: 5px;\n}\n\n.renderer_accountUserIcon {\n    background-image:url(" + __webpack_require__(30) + ") !important;\n    background-repeat: no-repeat;\n    background-position: 2px 2px;\n}\n\n.renderer_accountUserChangedIcon {\n    background-image:url(" + __webpack_require__(30) + ") !important;\n    background-color: red !important;\n}\n\n.renderer_accountGroupIcon {\n    background-image:url(" + __webpack_require__(35) + ") !important;\n    background-repeat: no-repeat;\n    background-position: 2px 2px;\n}\n\n.renderer_accountGroupmemberIcon {\n    background-image:url(" + __webpack_require__(93) + ") !important;\n    background-repeat: no-repeat;\n    background-position: 2px 2px;\n}\n\n.renderer_accountRoleIcon {\n    background-image:url(" + __webpack_require__(219) + ") !important;\n    background-repeat: no-repeat;\n    background-position: 2px 2px;\n}\n\n.renderer_accountContactIcon {\n    background-image:url(" + __webpack_require__(30) + ") !important;\n    background-repeat: no-repeat;\n    background-position: 2px 2px;\n}\n\n/* TODO make this work */\n.x-tine-relation-degree-value {\n    color: black;\n    font-size: 11px;\n}\n\n.renderer_accountAnyoneIcon {\n    background-image:url(" + __webpack_require__(35) + ") !important;\n    background-repeat: no-repeat;\n    background-position: 2px 2px;\n}\n\n.tinebase-accounttype-user {\n    background-image:url(" + __webpack_require__(30) + ") !important;\n}\n\n.tinebase-accounttype-group {\n    background-image:url(" + __webpack_require__(35) + ") !important;\n}\n\n.tinebase-accounttype-role {\n    background-image:url(" + __webpack_require__(219) + ") !important;\n}\n\n.tinebase-accounttype-addanyone {\n    background-image:url(" + __webpack_require__(35) + ") !important;\n}\n\n.action_mute_noteification {\n    background-image:url(" + __webpack_require__(1272) + ") !important;\n}\n\n.action_noteification {\n    background-image:url(" + __webpack_require__(1273) + ") !important;\n}\n\n.action_preview {\n    background-image:url(" + __webpack_require__(1274) + ") !important;\n}\n\n/* ----- notes ------------------------------------------------------------*/\n.notes_noteIcon {\n   background-image:url(" + __webpack_require__(132) + ") !important;\n}\n\n.notes_telephoneIcon {\n   background-image:url(" + __webpack_require__(43) + ") !important;\n}\n\n.notes_emailIcon {\n   background-image:url(" + __webpack_require__(42) + ") !important;\n}\n\n.descriptionIcon {\n   background-image:url(" + __webpack_require__(1275) + ") !important;\n}\n\n/* ----- mainmenu ------------------------------------------------------------*/\n/*\n.tine-mainscreen-mainmenu .x-toolbar {\n    background-image: url(../../images/tbar-menu-bg.gif);\n    border: 0;\n    margin-top: -1px;\n    height: 18px;\n}\n*/\n\n.tine-mainscreen-mainmenu .x-toolbar {\n    background-color: #EBF3FD;\n    border: none;\n    background-image: url(" + __webpack_require__(220) + ");\n}\n\n.tine-mainscreen-mainmenu .x-toolbar .x-btn td {\n    background: none;\n    border: none;\n}\n\n.tine-mainscreen-mainmenu .x-toolbar-ct {\n    margin-top: -2px;\n}\n\n.tine-mainscreen-mainmenu .x-btn-over td.x-btn-mc,\n.tine-mainscreen-mainmenu .x-btn-over td.x-btn-mc button{\n    text-decoration: underline;\n}\n\n.x-btn-group-bwrap .x-toolbar-cell{\n    vertical-align: top;\n}\n\n.tine-favicon {\n    /* NOTE: favicon is configured at runtime! */\n    background-image:url(" + __webpack_require__(137) + ") !important;\n    background-size: 16px 16px;\n}\n\n.x-tab-strip-text.tine-favicon {\n    background-position-y: 3px;\n}\n\n.tine-mainscreen-apptabs .x-tab-strip-wrap ul.x-tab-strip-top {\n    background-color:#EBF3FD;\n    background-image: url(" + __webpack_require__(220) + ");\n    border-bottom-color:#8db2e3;\n    background-position: 0px -20px;\n}\n\n.tine-mainscreen-apptabs .x-tab-panel-header {\n    border: none;\n}\n\n/*\n.tine-mainscreen-apptabs .x-tab-strip-wrap {\n    padding-top: 2px;\n}\n*/\n\n.tine-mainscreen-apptabspanel-menu-tabel .x-tab-left {\n    background-image: url(" + __webpack_require__(1276) + ");\n    padding-right: 24px;\n}\n\n.tine-mainscreen-apptabspanel-menu-tabel {\n    margin-right: -10px;\n}\n\n.x-tab-strip .tine-mainscreen-apptabspanel-menu-tabel span.x-tab-strip-text {\n    padding-right: 10px;\n}\n\n.x-tab-strip li.tine-mainscreen-apptabspanel-menu-tabel a.x-tab-strip-close,\n.x-tab-strip li.tine-mainscreen-apptabspanel-menu-tabel a.x-tab-strip-close:hover {\n    background-image:url(" + __webpack_require__(63) + ");\n    top: 5px;\n    right: 19px;\n}\n\n/* ----- appchooser panel-----------------------------------------------------*/\n.app-panel-title {\n    font-size: 15px;\n    font-weight: normal;\n    padding-top: 7px;\n}\n.app-panel-header-active {\n    background:transparent url(" + __webpack_require__(1277) + ") repeat-x scroll 0pt -9px;\n    /*background:#EBF3FD url(../../library/ExtJS/resources/images/default/grid/grid3-hrow-over.gif) repeat-x scroll left bottom;*/\n}\n.app-panel-header-over {\n    /*background:transparent url(../../library/ExtJS/resources/images/default/panel/light-hd.gif) repeat-x scroll 0pt -9px;*/\n    background:#EBF3FD url(" + __webpack_require__(60) + ") repeat-x scroll left bottom;\n}\n\n.app-panel-appicon-text {\n    position: absolute;\n    top: 0px;\n    width: 20px;\n    overflow: hidden;\n}\n\n.app-panel-apptitle-text {\n    margin-left: 5px;\n}\n\n/******* grid row classes *********/\n.grid_row_enabled td{\n    font-weight: bold;\n    /* background-color: '#b5efc8'; */\n}\n\n.grid_row_disabled td{\n    /* background-color: '#efb5b5'; */\n}\n\n.x-grid3-cell-inner, .x-grid3-hd-inner {\n    white-space: nowrap;\n}\n\n.tw-activities-grid .x-grid3-cell-inner {\n    white-space: normal;\n}\n\n.tine-grid-row-nolongerinfilter td {\n    color: #aaaaaa;\n}\n\n.tine-grid-row-action-icon {\n    width: 16px;\n    height: 16px;\n    zoom: 65%;\n    background-repeat: no-repeat;\n}\n\n/******* grid cell classes *********/\n\n.tine-grid-cell-hint {\n    background-image:url(" + __webpack_require__(63) + ");\n    position: absolute;\n    top: 0px;\n    right: 0px;\n    width: 10px;\n}\n\n.tine-grid-cell-no-dirty {\n    background-image:url(" + __webpack_require__(137) + ");\n}\n\n.tine-editorgrid-row-invalid, .x-grid3-row-selected .tine-editorgrid-row-invalid {\n    border: 1px dotted red!important;\n}\n\n.tine-duplicateresolve-keepvalue {\n    color: #006600;\n}\n\n.tine-duplicateresolve-discardvalue {\n    color: #660000;\n}\n\n.tine-duplicateresolve-adoptedvalue {\n    color: #666666;\n}\n\n.tine-recordclass-gridicon {\n    background-repeat: no-repeat;\n    display: block;\n    height: 16px;\n    width: 16px;\n    margin: -2px 5px -2px 0;\n    float:left;\n}\n\n/******** downloads ***********/\n\n.tinebase-download-link{\n    cursor: pointer;\n    color: blue;\n}\n\nspan:hover.tinebase-download-link {\n    color: #4444ff;\n}\n\n.action_download {\n    background-image:url(" + __webpack_require__(31) + ") !important;\n}\n\n/******** email ***********/\n\na:hover.tinebase-email-link {\n    cursor: pointer;\n    color: #4444ff;\n}\n\n.tinebase-addtocontacts-link{\n    cursor: pointer;\n    color: blue;\n}\n\nspan:hover.tinebase-addtocontacts-link {\n    color: #4444ff;\n}\n\n.tinebase-showheaders-link{\n    cursor: pointer;\n    color: blue;\n}\n\nspan:hover.tinebase-showheaders-link {\n    color: #4444ff;\n}\n\n.tine-keyfield-icon {\n    width: 12px;\n    height: 12px;\n    vertical-align: text-bottom;\n    padding-right: 4px;\n}\n\n.x-grid .tine-keyfield-icon {\n    vertical-align: text-top;\n}\n\n/*.x-combo-list-item .tine-keyfield-icon {\n    padding-right: 4px;\n}*/\n\n.search-item {border: 1px solid white}\n\n.search-combo-col td {\n    max-width: 0;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n\n/* multiple edit dialog */\n\n.tinebase-editmultipledialog-noneedit,\ninput.tinebase-editmultipledialog-noneedit,\ntextarea.x-form-field.tinebase-editmultipledialog-noneedit {\n    background-color: #f4f1d3;\n    background-image:none!important;\n}\n\n.tinebase-editmultipledialog-clearer.over,\n.tinebase-editmultipledialog-clearer {\n    background-image:url(" + __webpack_require__(1278) + ") !important;\n    border-bottom:1px solid #7eadd9;\n    background-position: 0px;\n    height:16px;\n    width:16px;\n    top: 5px;\n    display:block;\n    position:absolute;\n    z-index:9;\n}\n\n.tinebase-editmultipledialog-clearer.hidden {\n    border-bottom:none;\n    height:18px;\n    background-image: url(" + __webpack_require__(137) + ");\n}\n\n.tinebase-editmultipledialog-clearer.undo.over,\n.tinebase-editmultipledialog-clearer.undo {\n    background-position: center;\n    background-image:url(" + __webpack_require__(1279) + ") !important;\n    border-bottom: none;\n}\n\n\n.tinebase-editmultipledialog-dirty {\n    position:absolute;\n    left:0;\n    /*background-image:url(../../images/icon-set/icon_data-dirty_red.svg) !important;*/\n    background-image: url(" + __webpack_require__(1280) + ");\n    background-repeat: no-repeat;\n}\n\n.tinebase-editmultipledialog-dirtycheck {\n    background-color: #F4F1D3; /* #F9F9A3 */\n    border: 1px solid #B5B8C8;\n    padding: 2px 2px 1px 2px;\n    border-radius: 3px;\n}\n\n.tine-wordbox {\n    border: 1px solid gray;\n    margin-left: 3px;\n    border-radius: 2px;\n    padding: 0px 5px;\n    background-color: white;\n}\n\n/* token mode edit dialog */\n.tinebase-tokenedit-textfield {\n    color: white;\n}\n\n.tinebase-tokenedit-tokenbox {\n    position: absolute;\n    background-color: white;\n    z-index: 100;\n    overflow: hidden;\n}\n\n.tinebase-tokenedit-token {\n    border: 1px solid gray;\n    margin-right: 3px;\n}\n\n.tinebase-tokenedit-tokenbox-area .tinebase-tokenedit-token {\n    display: inline-block;\n    line-height: 13px;\n}\n\n.tinebase-tokenedit-token-selected {\n    background-color: #FFFFAE;\n}\n\n.tinebase-tokenedit-position {\n    display: none;\n    width: 0px;\n    border: 1px solid gray;\n    margin-right: 3px;\n    line-height: 13px;\n    overflow: hidden;\n}\n\n.tb-version-tinepanel {\n    display: none;\n}\n\n.tb-widgets-path-pathsblock {\n    padding-top: 2px;\n    padding-left: 4px;\n}\n\n.tb-widgets-path-pathitem {\n    font-size: 9px;\n    color: grey;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    overflow: hidden;\n    display: block;\n}\n\n.tb-widgets-path-pathitem-match {\n    color: black;\n}\n\n.tb-widgets-path-pathitem-type {\n    color: black;\n    font-size: 7px;\n}\n\n.tb-widgets-path-pathitem-separator {\n    color: black;\n}\n\n.x-form-field-trigger-wrap input {\n    border-top-right-radius: 0px;\n    border-bottom-right-radius: 0px;\n}\n\n.x-form-radio-group .x-form-item {\n    padding-left: 2px;\n}\n\n.rangeslider-component-sliderwrap {\n    border: 1px solid black;\n}\n\n.rangeslider-component-sliderBorder {\n    border: 1px solid black;\n    border-radius: 3px;\n    background-color: #cdcdcd;\n}\n\n.rangeslider-component .rangeslider-component-slider .rangeslider-component-slider-label {\n    display: table-cell;\n    text-align: center;\n    vertical-align: middle;\n    white-space: nowrap;\n    padding-left: 10px;\n    padding-right: 10px;\n}\n\n.rangeslider-component .rangeslider-component-slider {\n    background-color: #b7f8bd;\n    overflow: hidden;\n}\n\n.x-item-disabled.rangeslider-component .rangeslider-component-slider,\n.x-item-disabled.rangeslider-component .rangeslider-component-slider-label {\n    visibility: hidden !important;\n}\n\n.ext-el-mask-msg.tb-arealocks-msg,\n.ext-el-mask-msg.tb-arealocks-msg div{\n    border: none;\n    background: none;\n    cursor: pointer;\n}\n\n.tine-tinebase-recorddisplaypanel-displayfield .x-form-display-field {\n    display: inline-block;\n}\n\n.x-tree-node-expanded .x-tree-node-icon {\n    background-image: url(" + __webpack_require__(1281) + ") !important;\n}\n\n.x-tree-node-collapsed .x-tree-node-icon {\n    background-image: url(" + __webpack_require__(17) + ") !important;\n}\n\n.x-tree-node-leaf .x-tree-node-icon {\n    background-image: url(" + __webpack_require__(17) + ");\n}\n\n/*.x-form-field-wrap .x-form-search-trigger {*/\n    /*background-image: url(../../images/icon-set/icon_search.svg);*/\n/*}*/\n\n/* @todo make better loading mask, use existing vue/bootstrap component*/\n\n/*div.ext-el-mask-msg.x-mask-loading {*/\n    /*margin: 0 0 0 0;*/\n    /*border: none;*/\n    /*padding: 0 0 0 0;*/\n    /*background-color: transparent;*/\n    /*background-position: center;*/\n    /*background-size: 60px 60px;*/\n    /*width: 60px;*/\n    /*height: 60px;*/\n/*}*/\n\n/*.ext-el-mask-msg.x-mask-loading div {*/\n    /*display: none;*/\n/*}*/\n\n.x-tab-strip .x-tab-with-icon span.x-tab-strip-text {\n    padding-left: 20px;\n    background-position: 0 1px;\n    background-repeat: no-repeat;\n}\n\n\n.x-btn.x-btn-icon .x-tbar-page-first {\n    background: url(" + __webpack_require__(1282) + ") !important;\n}\n\n.x-btn.x-btn-icon .x-tbar-page-prev {\n    background: url(" + __webpack_require__(133) + ") !important;\n}\n\n.x-btn.x-btn-icon .x-tbar-page-last {\n    background: url(" + __webpack_require__(1283) + ") !important;\n}\n\n.x-btn.x-btn-icon .x-tbar-page-next  {\n    background: url(" + __webpack_require__(134) + ") !important;\n}\n\n.x-cols-icon {\n    background: url(" + __webpack_require__(221) + ") !important;\n}\n\n\n/* only works for small btns as we don't have to align them*/\n.x-btn {\n    position: relative;\n}\n\n.x-btn-image {\n    top: 2px;\n    position: absolute;\n    width: 16px;\n    height: 16px;\n}\n\n/* loading animations */\n@keyframes loading-animation {\n    from {\n        transform: rotate(0deg);\n    }\n    to {\n        transform: rotate(360deg);\n    }\n}\n\n.tine-viewport-waitcycle,\n.x-mask-wait,\n.x-btn-wait + div,\n.x-item-disabled .x-tbar-loading + div,\n.x-item-disabled .x-tbar-loading {\n    animation-name: loading-animation;\n    animation-duration: 1000ms;\n    animation-iteration-count: infinite;\n    animation-timing-function: cubic-bezier(.17, .67, .52, .71);\n}\n\n.tine-viewport-waitcycle {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    width: 32px;\n    height: 32px;\n}\n\n.x-item-disabled .x-tbar-loading,\n.x-btn-wait {\n    background-image: none !important;\n}\n\n.x-item-disabled .x-tbar-loading + div,\n.x-btn-wait + div {\n    width: 12px;\n    height: 12px;\n    top: 5px;\n    left: 5px;\n}\n\n.tine-viewport-waitcycle,\n.x-mask-wait,\n.x-item-disabled .x-tbar-loading + div,\n.x-btn-wait + div {\n    box-sizing: border-box;\n    border: 2px solid #ccc !important;\n    border-top: 2px solid #2196f3 !important;\n    border-radius: 100%;\n}\n\n.x-mask-loading {\n    background: none;\n    border: none;\n}\n\n.x-mask-loading div {\n    background-image: none !important;\n}\n\n.x-mask-wait {\n    left: 8px;\n    padding: 0px !important;\n    position: absolute;\n    top: 7px;\n    height: 16px;\n    width: 16px;\n    margin: 0px;\n    background-image: none !important;\n}", ""]);

// exports


/***/ }),
/* 1251 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bclip-path:url(%23SVGID_2_);%7D %3C/style%3E %3Cg%3E %3Cg%3E %3Cdefs%3E %3Crect id='SVGID_1_' x='1' y='7' width='40.7' height='29.3'/%3E %3C/defs%3E %3CclipPath id='SVGID_2_'%3E %3Cuse xlink:href='%23SVGID_1_' style='overflow:visible;'/%3E %3C/clipPath%3E %3Cpath class='st0' d='M37.5,12.4c0,0-2.2-1.9-4.1-0.9c-1.5,0.8-10.7,5.5-14.9,7.6l-5.8-3.3c0.6-1.1,0.7-2.4,0.4-3.7 c-0.4-1.6-1.6-3.1-3.3-4.1c-3-1.7-6.7-1.1-8.1,1.5c-0.6,1.1-0.8,2.4-0.4,3.7c0.4,1.6,1.6,3.1,3.3,4.1c0.7,0.4,1.5,0.7,2.3,0.8 c0,0,0,0,0,0c0.1,0,0.1,0,0.2,0c4.8,0.7,7.3,2.1,8.5,3c-1.2,1-3.7,2.3-8.5,3c-0.1,0-0.1,0-0.2,0c0,0,0,0,0,0 C6,24.3,5.2,24.6,4.5,25c-1.7,1-2.8,2.5-3.3,4.1c-0.3,1.3-0.2,2.6,0.4,3.7c1.5,2.6,5.1,3.2,8.1,1.5c1.7-1,2.8-2.5,3.3-4.1 c0.3-1.3,0.2-2.6-0.4-3.7l5.8-3.3c4.1,2.1,13.4,6.7,14.9,7.6c1.9,1.1,4.1-0.9,4.1-0.9l-15.4-8.8L37.5,12.4z M10.1,14.3 c-0.7,1.2-2.6,1.3-4.2,0.4c-1-0.5-1.7-1.4-1.9-2.3c-0.1-0.4-0.2-1,0.1-1.5c0.7-1.2,2.6-1.3,4.2-0.4c1,0.6,1.7,1.4,1.9,2.3 C10.4,13.2,10.4,13.8,10.1,14.3L10.1,14.3z M10.3,29.5c-0.3,0.9-1,1.8-1.9,2.3c-1.6,0.9-3.6,0.7-4.2-0.4c-0.3-0.5-0.2-1.1-0.1-1.5 c0.2-0.9,1-1.8,1.9-2.3c1.6-0.9,3.6-0.7,4.2,0.4C10.4,28.5,10.4,29.1,10.3,29.5L10.3,29.5z M10.3,29.5'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\""

/***/ }),
/* 1252 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M39.5,7.9c-0.3-0.3-0.7-0.5-1.2-0.5h-9.9V5.6c0-0.5-0.2-0.8-0.5-1.2S27.3,4,26.9,4H11.5c-0.5,0-1,0.1-1.5,0.3 C9.5,4.6,9,4.8,8.7,5.2l-5.3,5.3c-0.3,0.3-0.6,0.8-0.8,1.3c-0.2,0.5-0.3,1-0.3,1.5V33c0,0.5,0.2,0.8,0.5,1.2s0.7,0.5,1.2,0.5h9.9 v1.7c0,0.5,0.2,0.8,0.5,1.2s0.7,0.5,1.2,0.5h23c0.5,0,0.8-0.2,1.2-0.5s0.5-0.7,0.5-1.2V9C40,8.6,39.8,8.2,39.5,7.9z M4.9,12.1 l5.4-5.4c0.1-0.1,0.4-0.3,0.7-0.4v6.4H4.5C4.7,12.4,4.8,12.2,4.9,12.1z M14.9,13.9c-0.3,0.3-0.6,0.8-0.8,1.3c-0.2,0.5-0.3,1-0.3,1.5 v15.8H4.4V15h7.1c0.5,0,0.8-0.2,1.2-0.5s0.5-0.7,0.5-1.2V6.2h13.1v1.2H23c-0.5,0-1,0.1-1.5,0.3c-0.5,0.2-1,0.5-1.3,0.8L14.9,13.9z M22.5,9.7v6.4h-6.4c0.1-0.3,0.2-0.6,0.4-0.7l5.4-5.4C22,9.9,22.2,9.8,22.5,9.7z M37.9,35.8H15.9V18.3h7.1c0.5,0,0.8-0.2,1.2-0.5 s0.5-0.7,0.5-1.2V9.5h13.1V35.8z'/%3E %3Cpath d='M22.4,23.1c0-0.2,0.1-0.3,0.2-0.4l0.9-0.9c0.1-0.1,0.3-0.2,0.4-0.2c0.2,0,0.3,0.1,0.4,0.2l3,3l3-3c0.1-0.1,0.3-0.2,0.4-0.2 c0.2,0,0.3,0.1,0.4,0.2l0.9,0.9c0.1,0.1,0.2,0.3,0.2,0.4c0,0.2-0.1,0.3-0.2,0.4l-3,3l3,3c0.1,0.1,0.2,0.3,0.2,0.4 c0,0.2-0.1,0.3-0.2,0.4l-0.9,0.9c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0-0.3-0.1-0.4-0.2l-3-3l-3,3c-0.1,0.1-0.3,0.2-0.4,0.2 c-0.2,0-0.3-0.1-0.4-0.2l-0.9-0.9c-0.1-0.1-0.2-0.3-0.2-0.4c0-0.2,0.1-0.3,0.2-0.4l3-3l-3-3C22.5,23.4,22.4,23.3,22.4,23.1z'/%3E %3C/svg%3E\""

/***/ }),
/* 1253 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath id='copy-to-clipboard' d='M28,8.5c-0.7-0.4-1.4-0.8-2.1-1c-0.3-0.8-0.8-1.6-1.5-2.1C23.5,4.5,22.3,4,21,4 c-1.2,0-2.5,0.5-3.4,1.3c-0.6,0.6-1.1,1.3-1.5,2.1c-0.7,0.2-1.4,0.5-2.1,1h-2.8C9.5,8.5,8,9.9,8,11.7v23c0,1.8,1.5,3.3,3.3,3.3h19.5 c1.8,0,3.3-1.5,3.3-3.3v-23c0-1.8-1.5-3.3-3.3-3.3H28z M18.3,8.9c0-0.1,0.1-0.3,0.1-0.4c0.4-1.2,1.4-2,2.7-2c1.2,0,2.3,0.9,2.7,2 c0,0.1,0.1,0.3,0.1,0.4c0.1,0.3,0.3,0.6,0.6,0.7c1.2,0.3,2.1,0.8,2.7,1.3c0.1,0.1,0.2,0.2,0.3,0.3c0.4,0.5,0.1,1.1-0.5,1.1H15.2 c-0.6,0-0.9-0.7-0.5-1.1c0.1-0.1,0.2-0.2,0.3-0.3c0.6-0.6,1.6-1,2.7-1.3C18,9.5,18.2,9.2,18.3,8.9L18.3,8.9z M31.7,11.7v23 c0,0.5-0.4,0.9-0.9,0.9H11.3c-0.5,0-0.9-0.4-0.9-0.9v-23c0-0.5,0.4-0.9,0.9-0.9h0.9c0,0.1-0.1,0.2-0.1,0.4c-0.1,0.6,0,1.1,0.3,1.7 c0.2,0.5,0.6,1,1.1,1.3c0.5,0.3,1.1,0.5,1.7,0.5h11.7c0.6,0,1.2-0.2,1.7-0.5c0.5-0.3,0.8-0.8,1.1-1.3c0.2-0.5,0.3-1.1,0.3-1.7 c0-0.1,0-0.2-0.1-0.4h0.9C31.3,10.9,31.7,11.2,31.7,11.7L31.7,11.7z M31.7,11.7 M21,10.1c0.7,0,1.2-0.5,1.2-1.2c0-0.2,0-0.3-0.1-0.4 C22,8,21.6,7.7,21,7.7c-0.5,0-1,0.3-1.1,0.8c-0.1,0.1-0.1,0.3-0.1,0.4C19.8,9.6,20.4,10.1,21,10.1L21,10.1z M21,10.1 M16.1,20.1 c0.2-0.2,0.4-0.3,0.6-0.3H23c0.2,0,0.5,0.1,0.6,0.3c0.2,0.2,0.2,0.4,0.3,0.6v0.7c0,0.2-0.1,0.5-0.3,0.6c-0.2,0.2-0.4,0.3-0.6,0.3 h-2.8l6.3,6.3c0.2,0.2,0.2,0.4,0.2,0.6c0,0.2-0.1,0.4-0.3,0.6l-0.6,0.6c-0.2,0.2-0.4,0.3-0.6,0.3c-0.2,0-0.4-0.1-0.6-0.2l-6.3-6.3 l0,2.8c0,0.2-0.1,0.4-0.3,0.6c-0.2,0.2-0.4,0.3-0.6,0.3h-0.7c-0.2,0-0.5-0.1-0.6-0.3c-0.2-0.2-0.3-0.4-0.3-0.6v-6.3 C15.8,20.5,15.9,20.3,16.1,20.1z'/%3E %3C/svg%3E\""

/***/ }),
/* 1254 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath id='paste-from-clipboard' d='M28,8.5c-0.7-0.4-1.4-0.8-2.1-1c-0.3-0.8-0.8-1.6-1.5-2.1C23.5,4.5,22.3,4,21,4 c-1.2,0-2.5,0.5-3.4,1.3c-0.6,0.6-1.1,1.3-1.5,2.1c-0.7,0.2-1.4,0.5-2.1,1h-2.8C9.5,8.5,8,9.9,8,11.7v23c0,1.8,1.5,3.3,3.3,3.3h19.5 c1.8,0,3.3-1.5,3.3-3.3v-23c0-1.8-1.5-3.3-3.3-3.3H28z M18.3,8.9c0-0.1,0.1-0.3,0.1-0.4c0.4-1.2,1.4-2,2.7-2c1.2,0,2.3,0.9,2.7,2 c0,0.1,0.1,0.3,0.1,0.4c0.1,0.3,0.3,0.6,0.6,0.7c1.2,0.3,2.1,0.8,2.7,1.3c0.1,0.1,0.2,0.2,0.3,0.3c0.4,0.5,0.1,1.1-0.5,1.1H15.2 c-0.6,0-0.9-0.7-0.5-1.1c0.1-0.1,0.2-0.2,0.3-0.3c0.6-0.6,1.6-1,2.7-1.3C18,9.5,18.2,9.2,18.3,8.9L18.3,8.9z M31.7,11.7v23 c0,0.5-0.4,0.9-0.9,0.9H11.3c-0.5,0-0.9-0.4-0.9-0.9v-23c0-0.5,0.4-0.9,0.9-0.9h0.9c0,0.1-0.1,0.2-0.1,0.4c-0.1,0.6,0,1.1,0.3,1.7 c0.2,0.5,0.6,1,1.1,1.3c0.5,0.3,1.1,0.5,1.7,0.5h11.7c0.6,0,1.2-0.2,1.7-0.5c0.5-0.3,0.8-0.8,1.1-1.3c0.2-0.5,0.3-1.1,0.3-1.7 c0-0.1,0-0.2-0.1-0.4h0.9C31.3,10.9,31.7,11.2,31.7,11.7L31.7,11.7z M31.7,11.7 M21,10.1c0.7,0,1.2-0.5,1.2-1.2c0-0.2,0-0.3-0.1-0.4 C22,8,21.6,7.7,21,7.7c-0.5,0-1,0.3-1.1,0.8c-0.1,0.1-0.1,0.3-0.1,0.4C19.8,9.6,20.4,10.1,21,10.1L21,10.1z M21,10.1 M15.4,26.4 c-0.1-0.1-0.2-0.3-0.2-0.4v-1.2c0-0.2,0.1-0.3,0.2-0.4s0.3-0.2,0.4-0.2h4.3v-4.3c0-0.2,0.1-0.3,0.2-0.4s0.3-0.2,0.4-0.2h1.2 c0.2,0,0.3,0.1,0.4,0.2s0.2,0.3,0.2,0.4v4.3h4.3c0.2,0,0.3,0.1,0.4,0.2s0.2,0.3,0.2,0.4V26c0,0.2-0.1,0.3-0.2,0.4s-0.3,0.2-0.4,0.2 h-4.3v4.3c0,0.2-0.1,0.3-0.2,0.4s-0.3,0.2-0.4,0.2h-1.2c-0.2,0-0.3-0.1-0.4-0.2s-0.2-0.3-0.2-0.4v-4.3h-4.3 C15.6,26.6,15.5,26.5,15.4,26.4z'/%3E %3C/svg%3E\""

/***/ }),
/* 1255 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M20.8,29.1c0-0.6-0.2-1.1-0.5-1.6c0,0-0.1-0.2-0.4-0.5c-0.2-0.3-0.4-0.6-0.6-0.9c-0.2-0.3-0.4-0.6-0.6-1s-0.4-0.8-0.5-1.2 c-0.1-0.2-0.2-0.4-0.5-0.4s-0.4,0.1-0.5,0.4c-0.1,0.4-0.3,0.7-0.5,1.2s-0.4,0.8-0.6,1c-0.2,0.3-0.4,0.5-0.6,0.9 c-0.2,0.3-0.3,0.5-0.4,0.5c-0.3,0.5-0.5,1-0.5,1.6c0,0.8,0.3,1.5,0.9,2.1c0.6,0.6,1.3,0.9,2.1,0.9c0.8,0,1.5-0.3,2.1-0.9 S20.8,30,20.8,29.1z M32.7,26.2c0,3.3-1.2,6.1-3.5,8.4S24.1,38,20.8,38s-6.1-1.2-8.4-3.5S9,29.5,9,26.2c0-2.2,0.6-4.4,1.9-6.4 c0.1-0.1,0.6-0.8,1.4-2.1c0.9-1.3,1.6-2.4,2.3-3.5s1.5-2.4,2.3-4.1s1.5-3.2,1.9-4.7C19,5,19.3,4.7,19.7,4.4C20,4.1,20.4,4,20.8,4 s0.8,0.1,1.2,0.4c0.4,0.3,0.7,0.6,0.8,1.1c0.4,1.4,1.1,3,1.9,4.7s1.6,3,2.3,4.1c0.7,1.1,1.5,2.2,2.3,3.5c0.9,1.3,1.4,2,1.4,2.1 C32,21.8,32.7,23.9,32.7,26.2z'/%3E %3C/svg%3E\""

/***/ }),
/* 1256 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M32.5,17.1h-0.7v-3.3c0,0,0,0,0-0.1c0-0.1,0-0.3-0.1-0.4l-5.5-6.2c0,0,0,0,0,0c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0 c0,0-0.1,0-0.1,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0H12.4c-0.6,0-1.1,0.5-1.1,1.1v9h-0.7c-0.9,0-1.6,0.7-1.6,1.6V27c0,0.9,0.7,1.6,1.6,1.6 h0.7v5.7c0,0.6,0.5,1.1,1.1,1.1h18.3c0.6,0,1.1-0.5,1.1-1.1v-5.7h0.7c0.9,0,1.6-0.7,1.6-1.6v-8.3C34.1,17.8,33.4,17.1,32.5,17.1 L32.5,17.1z M12.4,8.1h12.9v5.7c0,0.3,0.2,0.6,0.6,0.6h4.9v2.8H12.4V8.1z M30.7,33.9H12.4v-5.4h18.3V33.9z M28.8,26.3 M15.4,18.7 c0.5,0,0.9,0.1,1.2,0.2c0.3,0.1,0.6,0.3,0.8,0.6s0.4,0.5,0.5,0.8c0.1,0.3,0.1,0.6,0.1,0.9c0,0.3,0,0.6-0.1,0.9 c-0.1,0.3-0.3,0.6-0.5,0.8s-0.5,0.4-0.8,0.6c-0.3,0.1-0.7,0.2-1.2,0.2h-1.8v2.7h-1.7v-7.7H15.4z M14.9,22.3c0.2,0,0.4,0,0.6,0 c0.2,0,0.3-0.1,0.5-0.2c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.2,0.1-0.3,0.1-0.6s0-0.4-0.1-0.6c-0.1-0.2-0.2-0.3-0.3-0.3 c-0.1-0.1-0.3-0.1-0.5-0.2s-0.4,0-0.6,0h-1.3v2.3H14.9z M22.4,18.7c0.5,0,1,0.1,1.4,0.2c0.4,0.2,0.8,0.4,1.1,0.7 c0.3,0.3,0.6,0.7,0.7,1.2s0.3,1,0.3,1.7c0,0.6-0.1,1.1-0.2,1.5s-0.4,0.9-0.6,1.2c-0.3,0.3-0.7,0.6-1.1,0.8c-0.4,0.2-0.9,0.3-1.5,0.3 h-3.3v-7.7H22.4z M22.3,24.9c0.2,0,0.5,0,0.7-0.1s0.4-0.2,0.6-0.4c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.2-0.7,0.2-1.1 c0-0.4,0-0.7-0.1-1c-0.1-0.3-0.2-0.6-0.4-0.8c-0.2-0.2-0.4-0.4-0.7-0.5c-0.3-0.1-0.6-0.2-1-0.2h-1.2v4.8H22.3z M32.4,18.7v1.4h-3.7 v1.8h3.2v1.3h-3.2v3.2H27v-7.7H32.4z'/%3E %3C/svg%3E\""

/***/ }),
/* 1257 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M16.8,10h3.3v4.6H7.4V10h3.3v0.4c0,0.5,0.5,1,1.1,1h3.9c0.6,0,1.1-0.4,1.1-1V10z M18.6,25.7h-1.8v0.4c0,0.5-0.5,1-1.1,1 h-3.9c-0.6,0-1.1-0.4-1.1-1v-0.4H7.4v4.6h12.7v-3.1C19.5,26.6,19,26.1,18.6,25.7z M20.1,18.1h-3.3v0.4c0,0.5-0.5,1-1.1,1h-3.9 c-0.6,0-1.1-0.4-1.1-1v-0.4H7.4v4.5H19c0.3-0.3,0.7-0.7,1.1-1.1V18.1z M24,33.2c0,0.7-0.6,1.3-1.3,1.3H4.8c-0.7,0-1.3-0.6-1.3-1.3 V6.7c0-0.7,0.6-1.3,1.3-1.3h17.9C23.4,5.4,24,6,24,6.7v12.2c0.8-0.4,1.7-0.8,2.5-1.1V4.2c0-0.7-0.6-1.2-1.2-1.2h-23 C1.6,3,1,3.6,1,4.2v31.6c0,0.7,0.6,1.2,1.2,1.2h23c0.7,0,1.2-0.6,1.2-1.2v-4.9c-0.9-0.3-1.7-0.6-2.5-1.1V33.2z M42.1,24.3l-0.4,0.5 c0,0.1-1.1,1.4-3,2.8c-2.5,1.8-5.2,2.8-7.8,2.8c-2.6,0-5.3-1-7.8-2.8c-1.9-1.4-2.9-2.7-3-2.8l-0.4-0.5l0.4-0.5c0-0.1,1.1-1.4,3-2.8 c2.5-1.8,5.2-2.8,7.8-2.8c2.6,0,5.3,1,7.8,2.8c1.9,1.4,2.9,2.7,3,2.8L42.1,24.3z M30.9,28.3c2.2,0,4-1.8,4-4s-1.8-4-4-4 c-1,0-2,0.4-2.7,1.1l-0.6-0.7c-1.2,0.5-2.3,1.1-3.1,1.7c-1,0.7-1.7,1.4-2.1,1.9c0.4,0.5,1.2,1.2,2.1,1.9c0.8,0.6,1.9,1.2,3.1,1.7 c-1-0.9-1.6-2.2-1.6-3.6c0-0.4,0-0.8,0.1-1.1l0.9,0.2c-0.1,0.3-0.1,0.7-0.1,1C26.9,26.5,28.7,28.3,30.9,28.3L30.9,28.3z M37.3,26.2 c1-0.7,1.7-1.4,2.1-1.9c-0.4-0.5-1.2-1.2-2.1-1.9c-0.8-0.6-1.9-1.2-3.1-1.7c1,0.9,1.6,2.2,1.6,3.6c0,1.4-0.6,2.7-1.6,3.6 C35.5,27.4,36.5,26.8,37.3,26.2L37.3,26.2z M37.3,26.2 M30.1,23.6l-1.6-1.8c0.6-0.6,1.4-0.9,2.2-0.9c1.8,0,3.2,1.4,3.2,3.2 c0,1.8-1.4,3.2-3.2,3.2c-1.8,0-3.2-1.4-3.2-3.2c0-0.3,0-0.6,0.1-0.9L30.1,23.6z M27.7,23.2'/%3E %3C/svg%3E\""

/***/ }),
/* 1258 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M30.2,21.2c0,0.4-0.1,0.7-0.4,1l-12,12c-0.3,0.3-0.6,0.4-1,0.4s-0.7-0.1-1-0.4c-0.3-0.3-0.4-0.6-0.4-1v-6.4H5.4 c-0.4,0-0.7-0.1-1-0.4c-0.3-0.3-0.4-0.6-0.4-1v-8.5c0-0.4,0.1-0.7,0.4-1c0.3-0.3,0.6-0.4,1-0.4h9.9V9.1c0-0.4,0.1-0.7,0.4-1 c0.3-0.3,0.6-0.4,1-0.4s0.7,0.1,1,0.4l12,12C30.1,20.5,30.2,20.8,30.2,21.2z M38,13.4V29c0,1.8-0.6,3.3-1.9,4.5s-2.7,1.9-4.5,1.9 h-7.1c-0.2,0-0.4-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.1,0-0.2,0-0.4c0-0.2,0-0.4,0-0.6c0-0.2,0-0.3,0.1-0.5 c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.1,0.5-0.1h7.1c1,0,1.8-0.3,2.5-1c0.7-0.7,1-1.5,1-2.5V13.4c0-1-0.3-1.8-1-2.5 c-0.7-0.7-1.5-1-2.5-1h-6.9l-0.3,0l-0.3-0.1L24,9.6l-0.2-0.2l0-0.3c0-0.1,0-0.2,0-0.4c0-0.2,0-0.4,0-0.6s0-0.3,0.1-0.5 s0.1-0.3,0.2-0.4C24.2,7,24.4,7,24.6,7h7.1c1.8,0,3.3,0.6,4.5,1.9S38,11.6,38,13.4z'/%3E %3C/svg%3E\""

/***/ }),
/* 1259 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M28.7,31.9c0-0.3-0.1-0.6-0.3-0.8s-0.5-0.3-0.8-0.3c-0.3,0-0.6,0.1-0.8,0.3s-0.3,0.5-0.3,0.8s0.1,0.6,0.3,0.8 c0.2,0.2,0.5,0.3,0.8,0.3c0.3,0,0.6-0.1,0.8-0.3C28.6,32.5,28.7,32.3,28.7,31.9z M33.2,31.9c0-0.3-0.1-0.6-0.3-0.8s-0.5-0.3-0.8-0.3 s-0.6,0.1-0.8,0.3s-0.3,0.5-0.3,0.8s0.1,0.6,0.3,0.8c0.2,0.2,0.5,0.3,0.8,0.3s0.6-0.1,0.8-0.3C33.1,32.5,33.2,32.3,33.2,31.9z M35.5,28v5.7c0,0.5-0.2,0.9-0.5,1.2s-0.7,0.5-1.2,0.5H7.7c-0.5,0-0.9-0.2-1.2-0.5C6.2,34.5,6,34.1,6,33.6V28c0-0.5,0.2-0.9,0.5-1.2 c0.3-0.3,0.7-0.5,1.2-0.5h7.6c0.2,0.7,0.7,1.2,1.2,1.6c0.6,0.4,1.2,0.6,2,0.6H23c0.7,0,1.4-0.2,2-0.6s1-1,1.2-1.6h7.6 c0.5,0,0.9,0.2,1.2,0.5C35.3,27.1,35.5,27.5,35.5,28z M29.7,16.5c-0.2,0.5-0.5,0.7-1,0.7h-4.5v7.9c0,0.3-0.1,0.6-0.3,0.8 s-0.5,0.3-0.8,0.3h-4.5c-0.3,0-0.6-0.1-0.8-0.3c-0.2-0.2-0.3-0.5-0.3-0.8v-7.9h-4.5c-0.5,0-0.8-0.2-1-0.7c-0.2-0.5-0.1-0.9,0.2-1.2 l7.9-7.9C20.2,7.1,20.4,7,20.7,7c0.3,0,0.6,0.1,0.8,0.3l7.9,7.9C29.8,15.6,29.9,16,29.7,16.5z'/%3E %3C/svg%3E\""

/***/ }),
/* 1260 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:none;%7D %3C/style%3E %3Cg%3E %3Cpolygon class='st0' points='15.4,28.5 28.5,28.5 28.5,15.5 '/%3E %3Cpolygon class='st0' points='26.9,13.9 13.8,13.9 13.8,26.9 '/%3E %3Cpath d='M34.2,28.5h-3.5V13.2l4.1-4.1c0.4-0.4,0.4-1.2,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l-4.1,4.1H13.8V8.1c0-0.6-0.5-1.1-1.1-1.1 c-0.6,0-1.1,0.5-1.1,1.1v3.5H8.1c-0.6,0-1.1,0.5-1.1,1.1c0,0.6,0.5,1.1,1.1,1.1h3.4v15.8c0,0.1,0,0.3,0.1,0.4 c0.1,0.3,0.3,0.5,0.6,0.6c0.1,0.1,0.3,0.1,0.4,0.1h15.8v3.4c0,0.6,0.5,1.1,1.1,1.1c0.6,0,1.1-0.5,1.1-1.1v-3.4h3.5 c0.6,0,1.1-0.5,1.1-1.1C35.3,29,34.8,28.5,34.2,28.5z M26.9,13.9L13.8,26.9V13.9H26.9z M15.4,28.5l13.1-13.1v13.1H15.4z'/%3E %3C/g%3E %3C/svg%3E\""

/***/ }),
/* 1261 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M34.7,24.5c0.8-0.3,1.6-0.6,2.4-1V34c0,0.7-0.5,1.2-1.2,1.2H1.2C0.5,35.3,0,34.7,0,34V8.2C0,7.5,0.5,7,1.2,7h34.7 c0.7,0,1.2,0.5,1.2,1.2v3.6c-0.8-0.4-1.6-0.8-2.4-1V9.4H2.4v18.2l10.9-8.7l5.6,10.9l7.8-4.9l8.1,5.8V24.5z M40.7,17.3 c0-0.1-1.1-1.4-3-2.8c-2.5-1.8-5.2-2.8-7.8-2.8c-2.6,0-5.3,1-7.8,2.8c-1.9,1.4-2.9,2.7-3,2.8l-0.4,0.5l0.4,0.5c0,0.1,1.1,1.4,3,2.8 c2.5,1.8,5.2,2.8,7.8,2.8c2.6,0,5.3-1,7.8-2.8c1.9-1.4,2.9-2.7,3-2.8l0.4-0.5L40.7,17.3z M29.9,21.8c-2.2,0-4-1.8-4-4 c0-0.3,0-0.7,0.1-1l-0.9-0.2C25.1,17,25,17.4,25,17.8c0,1.4,0.6,2.7,1.6,3.6c-1.2-0.5-2.3-1.1-3.1-1.7c-1-0.7-1.7-1.4-2.1-1.9 c0.4-0.5,1.2-1.2,2.1-1.9c0.8-0.6,1.9-1.2,3.1-1.7l0.6,0.7c0.7-0.7,1.7-1.1,2.7-1.1c2.2,0,4,1.8,4,4S32.1,21.8,29.9,21.8L29.9,21.8z M36.3,19.7c-0.8,0.6-1.9,1.2-3.1,1.7c1-0.9,1.6-2.2,1.6-3.6c0-1.4-0.6-2.7-1.6-3.6c1.2,0.5,2.3,1.1,3.1,1.7c1,0.7,1.7,1.4,2.1,1.9 C38,18.3,37.3,19,36.3,19.7L36.3,19.7z M36.3,19.7 M26.7,16.7c-0.1,0.3-0.1,0.6-0.1,0.9c0,1.8,1.4,3.2,3.2,3.2 c1.8,0,3.2-1.4,3.2-3.2c0-1.8-1.4-3.2-3.2-3.2c-0.9,0-1.6,0.3-2.2,0.9l1.6,1.8L26.7,16.7z M26.7,16.7'/%3E %3C/svg%3E\""

/***/ }),
/* 1262 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M28.8,35.6H4.5V6.4h14.6v7.9c0,0.5,0.2,0.9,0.5,1.3c0.4,0.4,0.8,0.5,1.3,0.5h7.9v2h2.4v-3.8c0-0.5-0.1-1.1-0.4-1.7 c-0.3-0.6-0.6-1.1-0.9-1.4L24,5.3c-0.4-0.4-0.8-0.7-1.4-0.9C22,4.1,21.4,4,20.9,4h-17C3.4,4,2.9,4.2,2.6,4.5 C2.2,4.9,2.1,5.3,2.1,5.8v30.4c0,0.5,0.2,0.9,0.5,1.3S3.4,38,3.9,38h25.5c0.5,0,0.9-0.2,1.3-0.5s0.5-0.8,0.5-1.3v-3.1h-2.4V35.6z M21.5,6.6c0.4,0.1,0.6,0.3,0.8,0.4l5.9,5.9c0.2,0.2,0.3,0.4,0.4,0.8h-7.1V6.6z M40.9,25.3c0,0.3-0.1,0.5-0.3,0.7l-5.2,5.2 c-0.2,0.2-0.4,0.3-0.7,0.3c-0.3,0-0.5-0.1-0.7-0.3l-0.6-0.6c-0.2-0.2-0.3-0.4-0.3-0.7s0.1-0.5,0.3-0.7l2.3-2.3H20.6 c-0.3,0-0.5-0.1-0.7-0.3s-0.3-0.4-0.3-0.7v-1c0-0.3,0.1-0.5,0.3-0.7s0.4-0.3,0.7-0.3h15.2l-2.3-2.3c-0.2-0.2-0.3-0.4-0.3-0.7 s0.1-0.5,0.3-0.7l0.6-0.6c0.2-0.2,0.4-0.3,0.7-0.3c0.3,0,0.5,0.1,0.7,0.3l5.2,5.2C40.8,24.7,40.9,25,40.9,25.3z'/%3E %3C/svg%3E\""

/***/ }),
/* 1263 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M13.1,33h16.5v-4.7H13.1V33z M13.1,21.2h16.5v-7.1h-3c-0.5,0-0.9-0.2-1.3-0.5s-0.5-0.8-0.5-1.3v-3H13.1V21.2z M34.3,22.3 c0-0.3-0.1-0.6-0.4-0.8c-0.2-0.2-0.5-0.4-0.8-0.4c-0.3,0-0.6,0.1-0.8,0.4C32.1,21.7,32,22,32,22.3s0.1,0.6,0.4,0.8 c0.2,0.2,0.5,0.4,0.8,0.4c0.3,0,0.6-0.1,0.8-0.4C34.2,22.9,34.3,22.7,34.3,22.3z M36.7,22.3V30c0,0.2-0.1,0.3-0.2,0.4 c-0.1,0.1-0.3,0.2-0.4,0.2H32v3c0,0.5-0.2,0.9-0.5,1.3s-0.8,0.5-1.3,0.5H12.5c-0.5,0-0.9-0.2-1.3-0.5s-0.5-0.8-0.5-1.3v-3H6.6 c-0.2,0-0.3-0.1-0.4-0.2S6,30.2,6,30v-7.7c0-1,0.3-1.8,1-2.5s1.5-1,2.5-1h1.2v-10c0-0.5,0.2-0.9,0.5-1.3C11.6,7.2,12,7,12.5,7h12.4 c0.5,0,1,0.1,1.6,0.4c0.6,0.2,1.1,0.5,1.4,0.9l2.8,2.8c0.3,0.3,0.6,0.8,0.9,1.4c0.2,0.6,0.4,1.1,0.4,1.6v4.7h1.2c1,0,1.8,0.3,2.5,1 S36.7,21.4,36.7,22.3z'/%3E %3C/svg%3E\""

/***/ }),
/* 1264 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M24.4,31.1c0.8,0.4,1.6,0.7,2.4,0.9v1.6c0,0.5-0.2,0.9-0.5,1.3c-0.3,0.3-0.8,0.5-1.3,0.5H7.3c-0.5,0-0.9-0.2-1.3-0.5 c-0.3-0.3-0.5-0.8-0.5-1.3v-3H1.4c-0.2,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.3-0.2-0.4v-7.7c0-1,0.3-1.8,1-2.5s1.5-1,2.5-1h1.2v-10 c0-0.5,0.2-0.9,0.5-1.3C6.4,7.2,6.8,7,7.3,7h12.4c0.5,0,1,0.1,1.6,0.4s1.1,0.5,1.4,0.9l2.8,2.8c0.3,0.3,0.6,0.8,0.9,1.4 c0.2,0.6,0.4,1.1,0.4,1.6v3.5c-0.8,0.2-1.6,0.5-2.4,0.9v-4.4h-3c-0.5,0-0.9-0.2-1.3-0.5c-0.3-0.3-0.5-0.8-0.5-1.3v-3H7.9v11.8h12.2 c-1.9,1.5-3,2.9-3.1,3l-0.5,0.6l0.5,0.6c0.1,0.1,1.1,1.4,2.9,2.8H7.9V33h16.5V31.1z M41.9,24.8l-0.4,0.5c0,0.1-1.1,1.4-3,2.8 c-2.5,1.8-5.2,2.8-7.8,2.8c-2.6,0-5.3-1-7.8-2.8c-1.9-1.4-2.9-2.7-3-2.8l-0.4-0.5l0.4-0.5c0-0.1,1.1-1.4,3-2.8 c2.5-1.8,5.2-2.8,7.8-2.8c2.6,0,5.3,1,7.8,2.8c1.9,1.4,2.9,2.7,3,2.8L41.9,24.8z M30.7,28.7c2.2,0,4-1.8,4-4s-1.8-4-4-4 c-1,0-2,0.4-2.7,1.1l-0.6-0.7c-1.2,0.5-2.3,1.1-3.1,1.7c-1,0.7-1.7,1.4-2.1,1.9c0.4,0.5,1.2,1.2,2.1,1.9c0.8,0.6,1.9,1.2,3.1,1.7 c-1-0.9-1.6-2.2-1.6-3.6c0-0.4,0-0.8,0.1-1.1l0.9,0.2c-0.1,0.3-0.1,0.7-0.1,1C26.7,27,28.5,28.7,30.7,28.7L30.7,28.7z M37.1,26.7 c1-0.7,1.7-1.4,2.1-1.9c-0.4-0.5-1.2-1.2-2.1-1.9c-0.8-0.6-1.9-1.2-3.1-1.7c1,0.9,1.6,2.2,1.6,3.6c0,1.4-0.6,2.7-1.6,3.6 C35.2,27.9,36.3,27.2,37.1,26.7L37.1,26.7z M37.1,26.7 M29.9,24l-1.6-1.8c0.6-0.6,1.4-0.9,2.2-0.9c1.8,0,3.2,1.4,3.2,3.2 c0,1.8-1.4,3.2-3.2,3.2c-1.8,0-3.2-1.4-3.2-3.2c0-0.3,0-0.6,0.1-0.9L29.9,24z M27.5,23.6'/%3E %3C/svg%3E\""

/***/ }),
/* 1265 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cg%3E %3Cpath d='M1,33.3v-5.1c5.3,0,8-2.6,10.6-5.2c0.6-0.6,1.3-1.3,1.9-1.8c-0.7-0.6-1.3-1.2-1.9-1.8C9,16.7,6.3,14.1,1,14.1V9 c7.4,0,11.3,3.9,14.2,6.7c1.7,1.7,2.8,2.7,3.9,2.9c0.1,0,0.3,0,0.4,0v0.1h12.2l-2.1-5.3c-0.1-0.2,0-0.4,0.1-0.5 c0.2-0.1,0.4-0.1,0.5,0l10.4,8c0.1,0.1,0.2,0.2,0.2,0.3c0,0.1-0.1,0.3-0.2,0.3l-10.4,8c-0.1,0.1-0.2,0.1-0.3,0.1 c-0.1,0-0.2,0-0.3-0.1c-0.2-0.1-0.2-0.3-0.1-0.5l2.1-5.3H19.5c0,0,0,0,0,0c-0.1,0-0.3,0-0.4,0c-1.2,0.2-2.2,1.2-3.9,2.9 C12.3,29.4,8.4,33.3,1,33.3L1,33.3z M1,33.3'/%3E %3C/g%3E %3C/svg%3E\""

/***/ }),
/* 1266 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M32.5,17.2h-0.7v-3.3c0,0,0,0,0-0.1c0-0.1,0-0.3-0.1-0.4l-5.5-6.2c0,0,0,0,0,0c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0 c0,0-0.1,0-0.1,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0H12.4c-0.6,0-1.1,0.5-1.1,1.1v9h-0.7c-0.9,0-1.6,0.7-1.6,1.6v8.3 c0,0.9,0.7,1.6,1.6,1.6h0.7v5.7c0,0.6,0.5,1.1,1.1,1.1h18.3c0.6,0,1.1-0.5,1.1-1.1v-5.7h0.7c0.9,0,1.6-0.7,1.6-1.6v-8.3 C34.1,17.9,33.4,17.2,32.5,17.2L32.5,17.2z M12.4,8.2h12.9v5.7c0,0.3,0.2,0.6,0.6,0.6h4.9v2.8H12.4V8.2z M30.7,34H12.4v-5.4h18.3V34 z M28.8,26.4 M13.7,23h-2v2h2.4v1.3h-3.7v-7.6H14V20h-2.4v1.8h2V23z M16.8,21.4l0.9-2.6h1.5l-1.5,3.8l1.5,3.8h-1.5l-0.9-2.6 l-0.9,2.6h-1.5l1.5-3.8l-1.5-3.8h1.5L16.8,21.4z M24.1,23.8c0,0.9-0.2,1.5-0.6,2s-0.9,0.7-1.6,0.7c-0.7,0-1.3-0.3-1.7-0.8 c-0.4-0.6-0.6-1.4-0.6-2.4v-1.3c0-1,0.2-1.8,0.6-2.4s1-0.8,1.7-0.8c0.7,0,1.2,0.2,1.6,0.7c0.4,0.5,0.6,1.1,0.6,2h-1.3 c0-0.5-0.1-0.9-0.2-1.1c-0.1-0.2-0.4-0.3-0.7-0.3c-0.3,0-0.6,0.1-0.7,0.4s-0.2,0.8-0.2,1.4v1.4c0,0.8,0.1,1.3,0.2,1.5 c0.1,0.3,0.4,0.4,0.7,0.4c0.3,0,0.6-0.1,0.7-0.3c0.1-0.2,0.2-0.5,0.2-1.1H24.1z M28.2,23h-2v2h2.4v1.3h-3.7v-7.6h3.7V20h-2.4v1.8h2 V23z M30.6,25h2.3v1.3h-3.6v-7.6h1.3V25z'/%3E %3C/svg%3E\""

/***/ }),
/* 1267 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M32.5,17.1h-0.7v-3.3c0,0,0,0,0-0.1c0-0.1,0-0.3-0.1-0.4l-5.5-6.2c0,0,0,0,0,0c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0 c0,0-0.1,0-0.1,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0H12.4c-0.6,0-1.1,0.5-1.1,1.1v9h-0.7c-0.9,0-1.6,0.7-1.6,1.6V27c0,0.9,0.7,1.6,1.6,1.6 h0.7v5.7c0,0.6,0.5,1.1,1.1,1.1h18.3c0.6,0,1.1-0.5,1.1-1.1v-5.7h0.7c0.9,0,1.6-0.7,1.6-1.6v-8.3C34.1,17.8,33.4,17.1,32.5,17.1 L32.5,17.1z M12.4,8.1h12.9v5.7c0,0.3,0.2,0.6,0.6,0.6h4.9v2.8H12.4V8.1z M25.7,22.4c0,2.5-1.5,4.1-3.8,4.1c-2.3,0-3.6-1.7-3.6-3.9 c0-2.3,1.5-4,3.8-4C24.4,18.5,25.7,20.3,25.7,22.4L25.7,22.4z M10.7,26.3v-7.6c0.6-0.1,1.5-0.2,2.4-0.2c1.5,0,2.4,0.3,3.2,0.8 c0.8,0.6,1.3,1.5,1.3,2.9c0,1.5-0.5,2.5-1.3,3.1c-0.8,0.7-2,1-3.6,1C11.8,26.4,11.1,26.4,10.7,26.3L10.7,26.3z M30.7,33.9H12.4v-5.4 h18.3V33.9z M30.8,25c0.5,0,1.1-0.1,1.5-0.3l0.3,1.4c-0.3,0.2-1,0.3-2,0.3c-2.7,0-4-1.7-4-3.9c0-2.6,1.9-4.1,4.2-4.1 c0.9,0,1.6,0.2,1.9,0.3l-0.4,1.4c-0.4-0.1-0.8-0.3-1.5-0.3c-1.4,0-2.5,0.8-2.5,2.5C28.3,24,29.3,25,30.8,25L30.8,25z M30.8,25 M15.7,22.4c0-1.6-0.9-2.4-2.4-2.4c-0.4,0-0.6,0-0.8,0.1v5c0.1,0,0.4,0,0.6,0C14.6,25.1,15.7,24.2,15.7,22.4L15.7,22.4z M15.7,22.4 M20.2,22.5c0,1.5,0.7,2.6,1.9,2.6c1.2,0,1.9-1.1,1.9-2.6c0-1.4-0.7-2.6-1.9-2.6C20.8,19.9,20.2,21,20.2,22.5L20.2,22.5z M20.2,22.5 '/%3E %3C/svg%3E\""

/***/ }),
/* 1268 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M32.5,17.1h-0.7v-3.3c0,0,0,0,0-0.1c0-0.1,0-0.3-0.1-0.4l-5.5-6.2c0,0,0,0,0,0c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0 c0,0-0.1,0-0.1,0c0,0,0,0,0,0c0,0-0.1,0-0.1,0H12.4c-0.6,0-1.1,0.5-1.1,1.1v9h-0.7c-0.9,0-1.6,0.7-1.6,1.6V27c0,0.9,0.7,1.6,1.6,1.6 h0.7v5.7c0,0.6,0.5,1.1,1.1,1.1h18.3c0.6,0,1.1-0.5,1.1-1.1v-5.7h0.7c0.9,0,1.6-0.7,1.6-1.6v-8.3C34.1,17.8,33.4,17.1,32.5,17.1 L32.5,17.1z M12.4,8.1h12.9v5.7c0,0.3,0.2,0.6,0.6,0.6h4.9v2.8H12.4V8.1z M25.8,22.3c0,1.4-0.5,2.4-1.2,3c-0.8,0.7-2,1-3.4,1 c-0.9,0-1.5-0.1-1.9-0.1v-7.3c0.6-0.1,1.4-0.2,2.3-0.2c1.4,0,2.3,0.3,3.1,0.8C25.4,20.1,25.8,21,25.8,22.3L25.8,22.3z M10.9,22.5 c0-2.2,1.4-3.9,3.6-3.9c2.3,0,3.5,1.7,3.5,3.8c0,2.5-1.5,3.9-3.7,3.9C12.2,26.3,10.9,24.7,10.9,22.5L10.9,22.5z M30.7,33.9H12.4 v-5.4h18.3V33.9z M28.8,26.3c-0.9,0-1.7-0.2-2.1-0.5l0.3-1.4c0.5,0.2,1.2,0.5,1.9,0.5c0.8,0,1.2-0.3,1.2-0.8c0-0.5-0.4-0.7-1.3-1.1 c-1.2-0.4-2.1-1.1-2.1-2.2c0-1.3,1.1-2.3,2.8-2.3c0.8,0,1.5,0.2,1.9,0.4l-0.4,1.4c-0.3-0.1-0.8-0.4-1.6-0.4c-0.7,0-1.1,0.3-1.1,0.7 c0,0.5,0.4,0.7,1.4,1.1c1.3,0.5,1.9,1.2,1.9,2.2C31.8,25.3,30.8,26.3,28.8,26.3L28.8,26.3z M28.8,26.3 M21.7,20 c-0.4,0-0.6,0-0.8,0.1v4.9c0.1,0,0.4,0,0.6,0c1.5,0,2.5-0.8,2.5-2.6C24.1,20.8,23.1,20,21.7,20L21.7,20z M21.7,20 M16.3,22.5 c0-1.3-0.6-2.5-1.8-2.5c-1.1,0-1.8,1.1-1.8,2.5c0,1.5,0.7,2.5,1.8,2.5C15.7,25,16.3,23.9,16.3,22.5L16.3,22.5z M16.3,22.5'/%3E %3C/svg%3E\""

/***/ }),
/* 1269 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath d='M34,13.4c-0.2-1.7-1-3.3-2.4-4.4l-0.8-0.6C29.7,7.5,28.3,7,26.8,7c-2,0-3.8,0.9-5,2.4L9.9,24.1c-1.1,1.3-1.6,3-1.4,4.8 c0.2,1.7,1,3.3,2.4,4.4l0.8,0.6c1.1,0.9,2.6,1.4,4.1,1.4c0.2,0,0.5,0,0.7,0c1.7-0.2,3.3-1,4.3-2.3c0,0,0,0,8-9.9 c1.4-1.8,1.2-4.4-0.6-5.8l-0.4-0.3C27,16.3,26.1,16,25.1,16c-1.3,0-2.4,0.6-3.2,1.5l-8,9.9c-0.5,0.6-0.4,1.6,0.2,2.1 c0.3,0.2,0.6,0.3,0.9,0.3c0.5,0,0.9-0.2,1.2-0.6l8-9.9c0.2-0.3,0.5-0.4,0.9-0.4c0.3,0,0.5,0.1,0.7,0.2l0.4,0.3 c0.2,0.2,0.4,0.4,0.4,0.7c0,0.3-0.1,0.6-0.2,0.8l-8,9.9c-0.7,0.8-1.6,1.3-2.7,1.3c-0.8,0-1.6-0.3-2.2-0.8l-0.8-0.6 c-0.7-0.6-1.2-1.4-1.3-2.3c-0.1-0.9,0.2-1.8,0.8-2.5l11.9-14.7c0.7-0.8,1.6-1.3,2.7-1.3c0.8,0,1.6,0.3,2.2,0.8l0.8,0.6 c1.5,1.2,1.7,3.4,0.5,4.9C30,16.6,29.9,17,30,17.4c0,0.4,0.2,0.8,0.6,1c0.3,0.2,0.6,0.3,0.9,0.3c0.5,0,0.9-0.2,1.2-0.6 C33.7,16.8,34.2,15.1,34,13.4L34,13.4z M34,13.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\""

/***/ }),
/* 1270 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M38.4,7H3.7C3,7,2.5,7.5,2.5,8.2V34c0,0.7,0.5,1.2,1.2,1.2h34.7c0.7,0,1.2-0.5,1.2-1.2V8.2C39.6,7.5,39.1,7,38.4,7z M37.2,9.4v21.3L29.1,25l-7.8,4.9L15.7,19L4.9,27.7V9.4H37.2z M22.2,15.7c0-2.2,1.8-4.1,4.1-4.1s4.1,1.8,4.1,4.1s-1.8,4.1-4.1,4.1 C24,19.8,22.2,18,22.2,15.7z'/%3E %3C/svg%3E\""

/***/ }),
/* 1271 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M25,23.7l4.1-4l-5.7-0.8l-2.6-5.2l-2.6,5.2l-5.7,0.8l4.1,4l-1,5.7l5.1-2.7l5.1,2.7L25,23.7z M35.7,18c0,0.3-0.2,0.5-0.5,0.9 l-6.5,6.3l1.5,8.9c0,0.1,0,0.2,0,0.4c0,0.6-0.2,0.9-0.7,0.9c-0.2,0-0.5-0.1-0.7-0.2l-8-4.2l-8,4.2c-0.3,0.1-0.5,0.2-0.7,0.2 c-0.3,0-0.4-0.1-0.6-0.3c-0.1-0.2-0.2-0.4-0.2-0.6c0-0.1,0-0.2,0-0.4l1.5-8.9l-6.5-6.3C6.1,18.5,6,18.2,6,18c0-0.4,0.3-0.7,1-0.8 l9-1.3l4-8.1C20.2,7.2,20.5,7,20.9,7s0.6,0.2,0.9,0.7l4,8.1l9,1.3C35.4,17.3,35.7,17.5,35.7,18z'/%3E %3C/svg%3E\""

/***/ }),
/* 1272 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cg%3E %3Cpath d='M30.4,16.4H12.3c-0.9,0-1.5-0.6-1.5-1.3s0.7-1.3,1.5-1.3h18.1c0.9,0,1.5,0.6,1.5,1.3S31.3,16.4,30.4,16.4z M31.9,21.6 c0-0.7-0.7-1.3-1.5-1.3H12.3c-0.9,0-1.5,0.6-1.5,1.3s0.7,1.3,1.5,1.3h18.1C31.3,22.9,31.9,22.3,31.9,21.6z M35.1,31.7l-6.5-4 c-0.2-0.1-0.4-0.2-0.7-0.2H12.4l-3.8,2.6h19l8.2,5.1c0.2,0.1,0.5,0.2,0.7,0.2c0.2,0,0.4,0,0.6-0.2c0.4-0.2,0.6-0.6,0.6-1.1V10.4 l-2.6,1.7V31.7z M7.4,9.6h23.1L34.3,7H6.1C5.4,7,4.9,7.6,4.9,8.3v18.6l2.6-1.7V9.6z'/%3E %3Cpath d='M37.3,9.3L6.7,30c-0.6,0.4-1.3,0.2-1.7-0.4s-0.3-1.4,0.3-1.8L35.9,7.2c0.6-0.4,1.3-0.2,1.7,0.4C38,8.1,37.9,8.9,37.3,9.3z' /%3E %3C/g%3E %3C/svg%3E\""

/***/ }),
/* 1273 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M28.7,16.4h-15c-0.7,0-1.3-0.6-1.3-1.3s0.6-1.3,1.3-1.3h15c0.7,0,1.3,0.6,1.3,1.3S29.5,16.4,28.7,16.4z M30,21.6 c0-0.7-0.6-1.3-1.3-1.3h-15c-0.7,0-1.3,0.6-1.3,1.3s0.6,1.3,1.3,1.3h15C29.5,22.9,30,22.3,30,21.6z M37.2,35.1 c0.4-0.2,0.6-0.6,0.6-1.1V8.3c0-0.7-0.6-1.3-1.3-1.3H6.3C5.6,7,5,7.6,5,8.3v20.5c0,0.7,0.6,1.3,1.3,1.3h21.5l8.2,5.1 c0.2,0.1,0.5,0.2,0.7,0.2C36.8,35.3,37,35.3,37.2,35.1z M7.6,9.6h27.7v22.1l-6.5-4c-0.2-0.1-0.4-0.2-0.7-0.2H7.6V9.6z'/%3E %3C/svg%3E\""

/***/ }),
/* 1274 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bclip-path:url(%23SVGID_2_);%7D %3C/style%3E %3Cg%3E %3Cg%3E %3Cdefs%3E %3Crect id='SVGID_1_' y='9' width='42.5' height='23'/%3E %3C/defs%3E %3CclipPath id='SVGID_2_'%3E %3Cuse xlink:href='%23SVGID_1_' style='overflow:visible;'/%3E %3C/clipPath%3E %3Cpath class='st0' d='M41.7,19.6c-0.1-0.1-2.1-2.7-5.7-5.3C31.3,10.8,26.2,9,21.2,9c-5,0-10.1,1.8-14.8,5.3 c-3.5,2.6-5.6,5.2-5.7,5.3L0,20.5l0.7,0.9c0.1,0.1,2.1,2.7,5.7,5.3c4.7,3.5,9.8,5.3,14.8,5.3c5,0,10.1-1.8,14.8-5.3 c3.5-2.6,5.6-5.2,5.7-5.3l0.7-0.9L41.7,19.6z M21.2,28.5c-4.4,0-8.1-3.6-8.1-8.1c0-0.7,0.1-1.4,0.3-2l-1.8-0.3 c-0.2,0.7-0.3,1.5-0.3,2.3c0,2.9,1.2,5.5,3.2,7.3c-2.5-0.9-4.7-2.2-6.3-3.4c-2-1.5-3.5-2.9-4.4-3.9c0.9-0.9,2.4-2.4,4.4-3.9 c1.6-1.2,3.8-2.5,6.3-3.4l1.2,1.4c1.4-1.3,3.4-2.2,5.5-2.2c4.4,0,8.1,3.6,8.1,8.1S25.7,28.5,21.2,28.5L21.2,28.5z M34.2,24.3 c-1.6,1.2-3.8,2.5-6.3,3.4c2-1.8,3.2-4.4,3.2-7.3c0-2.9-1.2-5.5-3.2-7.3c2.5,0.9,4.7,2.2,6.3,3.4c2,1.5,3.5,2.9,4.4,3.9 C37.7,21.4,36.2,22.9,34.2,24.3L34.2,24.3z M34.2,24.3'/%3E %3C/g%3E %3Cpath d='M16.1,18.9c-0.2,0.5-0.2,1-0.2,1.6c0,3,2.4,5.4,5.4,5.4c3,0,5.4-2.4,5.4-5.4s-2.4-5.4-5.4-5.4c-1.4,0-2.7,0.6-3.7,1.5 l2.6,3L16.1,18.9z M16.1,18.9'/%3E %3C/g%3E %3C/svg%3E\""

/***/ }),
/* 1275 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M20.8,6.5c-3.1,0-6,0.5-8.7,1.6s-4.8,2.5-6.4,4.3S3.4,16,3.4,18.1c0,1.7,0.5,3.3,1.6,4.9s2.6,2.9,4.6,4l2,1.1l-0.6,2.2 c-0.4,1.4-0.9,2.7-1.6,3.9c2.3-1,4.4-2.3,6.3-3.9l1-0.9l1.3,0.1c1,0.1,2,0.2,3,0.2c3.1,0,6-0.5,8.7-1.6s4.8-2.5,6.4-4.3 s2.4-3.7,2.4-5.8s-0.8-4-2.4-5.8S32.2,9.1,29.5,8S23.9,6.5,20.8,6.5z M40.6,18.2c0,2.6-0.9,4.9-2.7,7.1s-4.2,3.9-7.2,5.2 c-3,1.3-6.4,1.9-10,1.9c-1,0-2.1-0.1-3.2-0.2c-2.9,2.6-6.3,4.4-10.2,5.4c-0.7,0.2-1.6,0.4-2.5,0.5H4.8c-0.2,0-0.4-0.1-0.6-0.2 c-0.2-0.2-0.3-0.4-0.4-0.6v0c0-0.1,0-0.1,0-0.3c0-0.1,0.1-0.2,0-0.2s0-0.1,0.1-0.2l0.1-0.2L4.3,36l0.2-0.2c0.1-0.1,0.3-0.4,0.7-0.8 c0.4-0.4,0.6-0.7,0.8-0.8c0.2-0.2,0.4-0.5,0.7-0.9c0.3-0.4,0.5-0.8,0.7-1.1c0.2-0.3,0.4-0.8,0.6-1.3c0.2-0.5,0.4-1.1,0.6-1.7 c-2.3-1.3-4.1-2.9-5.5-4.9s-2-4-2-6.2c0-2.6,0.9-4.9,2.7-7.1s4.2-3.9,7.2-5.2S17.2,4,20.8,4s6.9,0.6,10,1.9s5.4,3,7.2,5.2 S40.6,15.6,40.6,18.2z'/%3E %3C/svg%3E\""

/***/ }),
/* 1276 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64, "

/***/ }),
/* 1277 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhAQAuAIcAANnn+OTt9+bu9+nw+Ovx+O7z+PD0+fP2+fX3+fj5+vr6+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAABAC4AAAgYABUoSIDggIECBAYICACgocOHECNKlBgQADs="

/***/ }),
/* 1278 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M34.9,33.1l-1.8,1.8c-0.3,0.3-0.6,0.4-0.9,0.4c-0.3,0-0.6-0.1-0.9-0.4L21.2,24.8L11.1,34.9c-0.3,0.3-0.6,0.4-0.9,0.4 c-0.3,0-0.6-0.1-0.9-0.4l-1.8-1.8C7.1,32.8,7,32.5,7,32.2c0-0.3,0.1-0.6,0.4-0.9l10.1-10.1L7.4,11.1C7.1,10.8,7,10.5,7,10.2 c0-0.3,0.1-0.6,0.4-0.9l1.8-1.8C9.5,7.1,9.8,7,10.2,7c0.3,0,0.6,0.1,0.9,0.4l10.1,10.1L31.2,7.4C31.5,7.1,31.8,7,32.2,7 c0.3,0,0.6,0.1,0.9,0.4l1.8,1.8c0.3,0.3,0.4,0.6,0.4,0.9c0,0.3-0.1,0.6-0.4,0.9L24.8,21.2l10.1,10.1c0.3,0.3,0.4,0.6,0.4,0.9 C35.3,32.5,35.2,32.8,34.9,33.1z'/%3E %3C/svg%3E\""

/***/ }),
/* 1279 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%23050505;%7D %3C/style%3E %3Cg%3E %3Cg%3E %3Cpath class='st0' d='M40.6,23.4V23c0-6.6-5.3-11.9-11.9-11.9H11.7v-3c0-0.9-1-1.4-1.7-0.9l-8.5,5.9c-0.6,0.4-0.6,1.4,0,1.8 l8.5,5.9c0.7,0.5,1.7,0,1.7-0.9V17h16.9c3.3,0,6,2.7,6,6v0.4c0,3.3-2.7,6-6,6l-26.3,0c-0.7,0-1.2,0.6-1.2,1.3c0,1.1,0,2.6,0,3.6 c0,0.6,0.5,1.1,1.1,1.1h26.4C35.2,35.3,40.6,30,40.6,23.4L40.6,23.4z M40.6,23.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\""

/***/ }),
/* 1280 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhCgAKAIcAAMAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAEALAAAAAAKAAoAAAgdAAEIFBigYMGBAAwaHKhwYcKGByFKnEixosWJAQEAOw=="

/***/ }),
/* 1281 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath id='Icon_FileManager' d='M37.9,23.2c0-0.5-0.4-0.7-1.1-0.7H14.9c-0.5,0-1.1,0.1-1.7,0.4c-0.6,0.3-1.1,0.6-1.4,1.1l-5.9,7.3 c-0.2,0.3-0.4,0.6-0.4,0.8c0,0.5,0.4,0.7,1.1,0.7h21.9c0.5,0,1.1-0.1,1.7-0.4c0.6-0.3,1.1-0.7,1.4-1.1l5.9-7.3 C37.7,23.7,37.9,23.4,37.9,23.2z M14.9,19.9h15.5v-3.2c0-0.5-0.2-1-0.6-1.4s-0.8-0.6-1.4-0.6H16.8c-0.5,0-1-0.2-1.4-0.6 c-0.4-0.4-0.6-0.8-0.6-1.4v-1.3c0-0.5-0.2-1-0.6-1.4S13.5,9.6,13,9.6H6.5c-0.5,0-1,0.2-1.4,0.6S4.6,11,4.6,11.5v17.2l5.2-6.3 c0.6-0.7,1.4-1.3,2.3-1.8C13,20.1,14,19.9,14.9,19.9z M40.4,23.2c0,0.8-0.3,1.6-0.9,2.4l-5.9,7.3c-0.6,0.7-1.4,1.3-2.3,1.8 c-1,0.5-1.9,0.7-2.8,0.7H6.5c-1.2,0-2.3-0.4-3.2-1.3S2,32.1,2,30.8V11.5c0-1.2,0.4-2.3,1.3-3.2S5.3,7,6.5,7H13 c1.2,0,2.3,0.4,3.2,1.3c0.9,0.9,1.3,1.9,1.3,3.2v0.6h11c1.2,0,2.3,0.4,3.2,1.3c0.9,0.9,1.3,1.9,1.3,3.2v3.2h3.9c0.7,0,1.4,0.2,2,0.5 c0.6,0.3,1.1,0.8,1.3,1.4C40.3,22.2,40.4,22.7,40.4,23.2z'/%3E %3C/svg%3E\""

/***/ }),
/* 1282 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M19.5,20.5L32.7,7.3C32.9,7.1,33.1,7,33.4,7s0.5,0.1,0.7,0.3l1.4,1.4c0.2,0.2,0.3,0.4,0.3,0.7s-0.1,0.5-0.3,0.7L24.3,21.2 l11.2,11.2c0.2,0.2,0.3,0.4,0.3,0.7s-0.1,0.5-0.3,0.7L34,35c-0.2,0.2-0.4,0.3-0.7,0.3s-0.5-0.1-0.7-0.3L19.5,21.8 c-0.2-0.2-0.3-0.4-0.3-0.7C19.2,20.9,19.3,20.7,19.5,20.5z M13.4,7.3c-0.2,0.2-0.3,0.4-0.3,0.7V11v23.4c0,0.3,0.1,0.5,0.3,0.7 c0.2,0.2,0.4,0.3,0.7,0.3h2c0.3,0,0.5-0.1,0.7-0.3s0.3-0.4,0.3-0.7V10.9l0-2.9c0-0.3-0.1-0.5-0.3-0.7C16.6,7.1,16.3,7,16.1,7h-2 C13.8,7,13.6,7.1,13.4,7.3z M7.3,7.3C7.1,7.4,7,7.7,7,7.9V11v23.4c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h2 c0.3,0,0.5-0.1,0.7-0.3c0.2-0.2,0.3-0.4,0.3-0.7V10.9l0-2.9c0-0.3-0.1-0.5-0.3-0.7C10.4,7.1,10.2,7,9.9,7h-2C7.7,7,7.4,7.1,7.3,7.3z '/%3E %3C/svg%3E\""

/***/ }),
/* 1283 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath id='Pfeil_links_4_' d='M23.5,21.2c0-0.2-0.1-0.5-0.3-0.7L10,7.3C9.8,7.1,9.6,7,9.4,7S8.9,7.1,8.7,7.3L7.3,8.7 C7.1,8.9,7,9.1,7,9.4C7,9.6,7.1,9.8,7.3,10l11.2,11.2L7.3,32.3C7.1,32.5,7,32.7,7,33c0,0.2,0.1,0.5,0.3,0.7l1.4,1.4 c0.2,0.2,0.4,0.3,0.7,0.3s0.5-0.1,0.7-0.3l13.2-13.2C23.4,21.6,23.5,21.4,23.5,21.2z'/%3E %3Cpath id='Pfeil_links_5_' d='M29.3,35.1c0.2-0.2,0.3-0.4,0.3-0.7v-3.1V7.9c0-0.3-0.1-0.5-0.3-0.7C29.2,7.1,28.9,7,28.7,7h-2 c-0.3,0-0.5,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7v23.6l0,2.9c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h2 C28.9,35.3,29.2,35.2,29.3,35.1z'/%3E %3Cpath id='Pfeil_links_6_' d='M35.5,35.1c0.2-0.2,0.3-0.4,0.3-0.7v-3.1V7.9c0-0.3-0.1-0.5-0.3-0.7C35.3,7.1,35.1,7,34.8,7h-2 c-0.3,0-0.5,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7v23.6l0,2.9c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h2 C35.1,35.3,35.3,35.2,35.5,35.1z'/%3E %3C/svg%3E\""

/***/ }),
/* 1284 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(1285);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../js/node_modules/css-loader/index.js!./mimetypes.css", function() {
			var newContent = require("!!../js/node_modules/css-loader/index.js!./mimetypes.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 1285 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".standardFileClass_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(217) + ");\n    background-image: url(" + __webpack_require__(64) + ");\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pdf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1286) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-krita_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1287) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.shellscript_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1288) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ar_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1289) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-java-applet_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1290) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-marble_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1291) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-portable-bitmap_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1292) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.database_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1293) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.text_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1294) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-jpeg2000_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1295) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-generic_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1296) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-mms_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1297) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-wmf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1298) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-patch_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1299) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.make_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1300) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.tex_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1301) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.none_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1302) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-aac_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1303) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gzpostscript_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1304) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-sgml_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1305) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-kgetlist_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1306) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-rpm_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1307) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.message_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1308) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-java_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1309) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-portable-pixmap_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1310) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-mpegurl_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1311) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.cdbo-list_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1312) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-mp4_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1313) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.document_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1314) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.font-bitmap_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1315) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.info_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1316) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-ico_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1317) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-aiff_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1318) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-rtf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1319) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xml_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1320) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-pascal_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1321) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-matroska_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1322) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tzo_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1323) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cpio_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1324) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-texinfo_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1325) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-compress_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1326) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-xslfo_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1327) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.draw_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1328) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.spreadsheet-template_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1329) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-java-archive_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1330) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-ldif_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1331) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-bibtex_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1332) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xslt+xml_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1333) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.unknown_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1334) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-dtd_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1335) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.kwordquiz-do_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1336) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.vcard_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1337) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xsd_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1338) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-mp2_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1339) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-rtspu_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1340) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-objcsrc_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1341) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-midi_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1342) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-compressed-tar_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1343) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.stardivision.calc_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1344) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1345) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-fits_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1346) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-vcard_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1347) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.stardivision.draw_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1348) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-vnd.abc_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1349) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.txt_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1350) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-calendar_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1351) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.tgz_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1352) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-flic_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1353) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gzdvi_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1354) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-chdr_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1355) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ruby_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1356) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mswrite_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1357) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-perl_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1358) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-mpeg_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1359) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.presentation-template_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1360) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-designer_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1361) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-dcraw_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1362) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-relaxng_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1363) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bzdvi_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1364) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.ms-powerpoint_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1365) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mimearchive_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1366) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-csv_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1367) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-fax-g3_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1368) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-ttf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1369) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.chart_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1370) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.empty_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1371) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.sound_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1372) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-address-book_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1373) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-photo-cd_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1374) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-svg+xml_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1375) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-media-podcast_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1376) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp-keys_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1377) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-arc_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1378) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-directory_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1379) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.news_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1380) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-generic_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1381) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.formula_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1382) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-svg+xml-compressed_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1383) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-exr_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1384) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-octet-stream_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(64) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-sharedlib_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1385) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-mod_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1386) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-xmcd_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1387) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-psd_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1388) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.calc.template_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1389) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.ascii_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1390) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-cgm_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1391) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-msod_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1392) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tar_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1393) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-hdr_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1394) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-php_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1395) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-objchdr_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1396) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ms-dos-executable_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1397) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gnumeric_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1398) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-jng_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1399) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.graphics_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1400) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-mmsu_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1401) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bittorrent_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1402) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pkcs7-mime_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1403) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-generic_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1404) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-illustrator_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1405) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.ms-word_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1406) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-katefilelist_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1407) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-calendar_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1408) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-awk_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1409) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.ms-excel_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1410) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-trash_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1411) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.font-type1_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1412) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-executable-script_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1413) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-enriched_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1414) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-musepack_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1415) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bzip-compressed-tar_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1416) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-troff_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1417) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-ms-wmv_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1418) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mplayer2_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1419) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cda_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1420) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp-signature_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1421) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-tex_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1422) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-adpcm_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1423) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-archive_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1424) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-tga_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1425) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.vcalendar_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1426) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.font-truetype_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1427) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.rn-realmedia_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1428) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.package-x-generic_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1429) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-script_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1430) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cd-image_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1431) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.inode-directory_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1432) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-python-bytecode_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1433) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-csrc_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1434) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.calc_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1435) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xhtml+xml_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1436) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-makefile_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1437) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-rss+xml_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1438) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-mp4_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1439) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-prs.sid_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1440) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-kcsrc_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1441) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-mmst_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1442) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-png_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1443) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-rar_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1444) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-python_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1445) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-snf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1446) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-gif_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1447) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.tar_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1448) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-msvideo_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1449) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-monkey_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1450) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-executable_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1451) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-type1_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1452) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-vnd.rn-realaudio_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1453) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-generic_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1454) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-wav_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1455) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-egon_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1456) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-7z-compressed_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1457) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-zoo_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1458) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pkcs7-signature_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1459) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-ogm+ogg_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1460) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-contact_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1461) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.message-rfc822_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1462) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-rdf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1463) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-scpls_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1464) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-java_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1465) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-pcf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1466) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.presentation_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1467) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cue_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1468) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-quicktime_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1469) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-rtf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1470) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-html_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1471) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-flac+ogg_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1472) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-spreadsheet_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1473) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-nzb_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1474) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-dds_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1475) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xfig_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1476) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.binary_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1477) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-tiff_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1478) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-ms-wma_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1479) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-adasrc_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1480) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bzip_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1481) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-pak_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1482) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.pdf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1483) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-pcx_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1484) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-mng_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1485) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-mpeg_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1486) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gzip_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1487) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-vnd.wap.wml_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1488) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-plain_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1489) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mswinurl_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1490) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-flac_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1491) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-bmp_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1492) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-siag_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1493) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-vnd.rn-realvideo_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1494) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-tcl_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1495) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-document_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1496) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-mathml_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1497) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-csharp_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1498) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-zerosize_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1499) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.xml_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1500) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-deb_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1501) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-pnm_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1502) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1503) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.spreadsheet_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1504) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.vectorgfx_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1505) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-bdf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1506) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-afm_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1507) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.cdtrack_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1508) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xcf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1509) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-matroska_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1510) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-xml_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1511) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-lha_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1512) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.spreadsheet_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1513) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-css_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1514) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-rtspt_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1515) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-quattropro_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1516) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.zip_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1517) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-vnd.trolltech.qpicture_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1518) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-c++src_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1519) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-plasma_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1520) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-desktop_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1521) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-arj_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1522) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-kontour_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1523) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp-encrypted_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1524) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-vorbis+ogg_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1525) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.html_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1526) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-hex_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1527) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-ms-asf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1528) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-otf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1529) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-c++hdr_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1530) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.message-news_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1531) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.odf_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1532) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-portable-graymap_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1533) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tgif_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1534) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-object_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1535) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-applix-graphics_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1536) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-pn-realaudio-plugin_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1537) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-ac3_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1538) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-troff-man_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1539) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.man_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1540) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1541) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ace_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1542) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tarz_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1543) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-jpeg_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1544) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.cdimage_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1545) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.draw.template_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1546) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-vcalendar_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1547) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-theora+ogg_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1548) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.encrypted_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1549) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-speex+ogg_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1550) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-rgb_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1551) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.image_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1552) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-lzop_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1553) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-empty_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1554) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.recycled_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1555) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-zip_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1556) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xbitmap_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1557) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xpixmap_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1558) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-eps_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1559) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-applix-spreadsheet_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1560) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-shellscript_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1561) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-basic_16x16 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1562) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.standardFileClass_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(222) + ");\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pdf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1563) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-krita_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1564) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.shellscript_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1565) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ar_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1566) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-java-applet_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1567) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-marble_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1568) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-portable-bitmap_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1569) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.database_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1570) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.text_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1571) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-jpeg2000_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1572) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-generic_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1573) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-mms_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1574) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-wmf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1575) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-patch_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1576) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.make_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1577) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.tex_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1578) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.none_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1579) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-aac_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1580) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gzpostscript_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1581) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-sgml_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1582) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-kgetlist_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1583) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-rpm_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1584) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.message_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1585) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-java_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1586) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-portable-pixmap_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1587) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-mpegurl_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1588) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.cdbo-list_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1589) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-mp4_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1590) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.document_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1591) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.font-bitmap_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1592) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.info_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1593) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-ico_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1594) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-javascript_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1595) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-aiff_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1596) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-rtf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1597) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xml_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1598) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-pascal_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1599) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-matroska_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1600) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tzo_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1601) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cpio_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1602) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-texinfo_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1603) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-compress_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1604) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-xslfo_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1605) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.draw_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1606) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.spreadsheet-template_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1607) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-java-archive_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1608) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-ldif_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1609) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-bibtex_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1610) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xslt+xml_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1611) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.unknown_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1612) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-dtd_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1613) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.kwordquiz-do_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1614) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.vcard_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1615) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xsd_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1616) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-mp2_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1617) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-rtspu_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1618) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-objcsrc_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1619) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-midi_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1620) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-compressed-tar_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1621) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.stardivision.calc_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1622) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1623) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-fits_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1624) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-vcard_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1625) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.stardivision.draw_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1626) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-vnd.abc_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1627) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.txt_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1628) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-calendar_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1629) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.tgz_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1630) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-flic_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1631) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gzdvi_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1632) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-chdr_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1633) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ruby_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1634) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mswrite_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1635) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-perl_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1636) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-mpeg_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1637) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.presentation-template_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1638) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-designer_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1639) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-dcraw_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1640) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-relaxng_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1641) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bzdvi_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1642) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.ms-powerpoint_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1643) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mimearchive_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1644) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-csv_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1645) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-fax-g3_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1646) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-ttf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1647) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.chart_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1648) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.empty_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1649) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.sound_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1650) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-address-book_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1651) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-photo-cd_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1652) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-svg+xml_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1653) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-media-podcast_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1654) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp-keys_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1655) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-arc_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1656) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-directory_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1657) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.news_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1658) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-generic_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1659) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.formula_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1660) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-svg+xml-compressed_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1661) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-exr_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1662) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-octet-stream_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(222) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-sharedlib_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1663) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-mod_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1664) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-xmcd_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1665) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-psd_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1666) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.calc.template_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1667) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.ascii_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1668) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-cgm_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1669) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-msod_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1670) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tar_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1671) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-hdr_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1672) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-php_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1673) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-objchdr_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1674) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ms-dos-executable_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1675) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gnumeric_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1676) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-jng_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1677) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.graphics_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1678) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-mmsu_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1679) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bittorrent_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1680) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pkcs7-mime_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1681) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-generic_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1682) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-illustrator_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1683) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.ms-word_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1684) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-katefilelist_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1685) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-calendar_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1686) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-awk_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1687) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.ms-excel_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1688) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-trash_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1689) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.font-type1_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1690) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-executable-script_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1691) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-enriched_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1692) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-musepack_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1693) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bzip-compressed-tar_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1694) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-troff_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1695) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-ms-wmv_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1696) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mplayer2_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1697) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cda_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1698) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp-signature_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1699) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-tex_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1700) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-adpcm_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1701) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-archive_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1702) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-tga_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1703) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.vcalendar_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1704) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.font-truetype_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1705) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.rn-realmedia_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1706) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.package-x-generic_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1707) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-script_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1708) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cd-image_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1709) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.inode-directory_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1710) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-python-bytecode_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1711) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-csrc_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1712) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.calc_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1713) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xhtml+xml_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1714) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-makefile_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1715) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-rss+xml_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1716) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-mp4_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1717) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-prs.sid_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1718) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-postscript_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1719) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-kcsrc_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1720) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-mmst_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1721) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-png_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1722) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-rar_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1723) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-python_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1724) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-snf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1725) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-gif_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1726) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.tar_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1727) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-msvideo_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1728) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-monkey_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1729) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-executable_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1730) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-type1_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1731) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-vnd.rn-realaudio_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1732) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-generic_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1733) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-wav_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1734) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-egon_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1735) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-7z-compressed_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1736) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-zoo_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1737) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pkcs7-signature_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1738) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-ogm+ogg_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1739) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-contact_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1740) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.message-rfc822_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1741) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-rdf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1742) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-scpls_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1743) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-java_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1744) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-pcf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1745) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.presentation_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1746) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cue_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1747) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-quicktime_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1748) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-rtf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1749) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-html_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1750) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-flac+ogg_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1751) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-spreadsheet_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1752) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-nzb_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1753) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-dds_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1754) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xfig_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1755) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.binary_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1756) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-tiff_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1757) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-ms-wma_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1758) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-adasrc_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1759) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bzip_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1760) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-pak_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1761) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.pdf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1762) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-pcx_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1763) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-mng_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1764) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-mpeg_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1765) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gzip_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1766) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-vnd.wap.wml_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1767) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-plain_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1768) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mswinurl_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1769) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-flac_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1770) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-bmp_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1771) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-siag_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1772) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-vnd.rn-realvideo_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1773) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-tcl_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1774) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-document_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1775) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-mathml_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1776) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-csharp_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1777) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-zerosize_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1778) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.xml_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1779) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-deb_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1780) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-pnm_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1781) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1782) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.spreadsheet_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1783) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.vectorgfx_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1784) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-bdf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1785) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-afm_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1786) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.cdtrack_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1787) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xcf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1788) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-matroska_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1789) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-xml_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1790) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-lha_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1791) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.spreadsheet_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1792) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-css_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1793) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-rtspt_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1794) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-quattropro_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1795) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.zip_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1796) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-vnd.trolltech.qpicture_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1797) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-c++src_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1798) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-plasma_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1799) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-desktop_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1800) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-arj_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1801) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-kontour_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1802) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp-encrypted_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1803) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-vorbis+ogg_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1804) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.html_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1805) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-hex_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1806) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-ms-asf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1807) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-otf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1808) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-c++hdr_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1809) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.message-news_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1810) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.odf_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1811) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-portable-graymap_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1812) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tgif_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1813) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-object_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1814) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-applix-graphics_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1815) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-pn-realaudio-plugin_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1816) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-ac3_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1817) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-troff-man_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1818) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.man_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1819) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1820) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ace_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1821) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tarz_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1822) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-jpeg_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1823) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.cdimage_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1824) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.draw.template_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1825) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-vcalendar_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1826) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-theora+ogg_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1827) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.encrypted_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1828) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-speex+ogg_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1829) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-rgb_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1830) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.image_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1831) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-lzop_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1832) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.recycled_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1833) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-zip_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1834) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xbitmap_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1835) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xpixmap_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1836) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-eps_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1837) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-applix-spreadsheet_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1838) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-shellscript_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1839) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-basic_22x22 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1840) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.standardFileClass_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(223) + ");\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pdf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1841) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-krita_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1842) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.shellscript_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1843) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ar_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1844) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-java-applet_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1845) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-marble_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1846) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-portable-bitmap_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1847) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.database_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1848) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.text_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1849) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-jpeg2000_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1850) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-generic_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1851) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-mms_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1852) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-wmf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1853) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-patch_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1854) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.make_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1855) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.tex_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1856) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.none_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1857) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-aac_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1858) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gzpostscript_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1859) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-sgml_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1860) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-kgetlist_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1861) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-rpm_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1862) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.message_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1863) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-java_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1864) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-portable-pixmap_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1865) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-mpegurl_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1866) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.cdbo-list_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1867) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-mp4_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1868) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.document_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1869) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.font-bitmap_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1870) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.info_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1871) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-ico_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1872) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-javascript_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1873) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-aiff_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1874) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-rtf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1875) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xml_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1876) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-pascal_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1877) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-matroska_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1878) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tzo_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1879) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cpio_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1880) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-texinfo_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1881) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-compress_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1882) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-xslfo_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1883) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.draw_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1884) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.spreadsheet-template_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1885) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-java-archive_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1886) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-ldif_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1887) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-bibtex_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1888) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xslt+xml_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1889) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.unknown_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1890) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-dtd_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1891) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.kwordquiz-do_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1892) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.vcard_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1893) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xsd_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1894) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-mp2_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1895) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-rtspu_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1896) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-objcsrc_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1897) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-midi_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1898) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-compressed-tar_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1899) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.stardivision.calc_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1900) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1901) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-fits_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1902) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-vcard_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1903) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.stardivision.draw_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1904) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-vnd.abc_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1905) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.txt_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1906) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-calendar_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1907) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.tgz_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1908) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-flic_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1909) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gzdvi_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1910) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-chdr_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1911) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ruby_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1912) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mswrite_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1913) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-perl_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1914) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-mpeg_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1915) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.presentation-template_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1916) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-designer_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1917) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-dcraw_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1918) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-relaxng_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1919) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bzdvi_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1920) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.ms-powerpoint_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1921) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mimearchive_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1922) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-csv_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1923) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-fax-g3_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1924) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-ttf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1925) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.chart_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1926) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.empty_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1927) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.sound_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1928) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-address-book_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1929) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-photo-cd_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1930) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-svg+xml_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1931) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-media-podcast_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1932) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp-keys_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1933) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-arc_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1934) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-directory_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1935) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.news_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1936) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-generic_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1937) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.formula_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1938) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-svg+xml-compressed_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1939) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-exr_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1940) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-octet-stream_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(223) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-sharedlib_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1941) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-mod_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1942) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-xmcd_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1943) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-psd_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1944) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.calc.template_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1945) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.ascii_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1946) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-cgm_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1947) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-msod_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1948) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tar_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1949) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-hdr_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1950) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-php_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1951) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-objchdr_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1952) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ms-dos-executable_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1953) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gnumeric_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1954) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-jng_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1955) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.graphics_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1956) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-mmsu_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1957) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bittorrent_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1958) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pkcs7-mime_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1959) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-generic_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1960) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-illustrator_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1961) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.ms-word_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1962) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-katefilelist_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1963) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-calendar_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1964) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-awk_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1965) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.ms-excel_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1966) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-trash_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1967) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.font-type1_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1968) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-executable-script_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1969) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-enriched_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1970) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-musepack_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1971) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bzip-compressed-tar_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1972) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-troff_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1973) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-ms-wmv_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1974) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mplayer2_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1975) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cda_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1976) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp-signature_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1977) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-tex_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1978) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-adpcm_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1979) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-archive_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1980) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-tga_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1981) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.vcalendar_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1982) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.font-truetype_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1983) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.rn-realmedia_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1984) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.package-x-generic_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1985) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-script_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1986) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cd-image_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1987) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.inode-directory_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1988) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-python-bytecode_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1989) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-csrc_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1990) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.calc_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1991) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-xhtml+xml_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1992) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-makefile_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1993) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-rss+xml_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1994) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-mp4_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1995) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-prs.sid_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1996) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-postscript_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1997) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-kcsrc_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1998) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-mmst_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(1999) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-png_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2000) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-rar_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2001) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-python_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2002) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-snf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2003) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-gif_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2004) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.tar_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2005) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-msvideo_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2006) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-monkey_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2007) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-executable_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2008) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-type1_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2009) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-vnd.rn-realaudio_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2010) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-generic_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2011) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-wav_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2012) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-egon_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2013) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-7z-compressed_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2014) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-zoo_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2015) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pkcs7-signature_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2016) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-ogm+ogg_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2017) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-contact_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2018) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.message-rfc822_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2019) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-rdf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2020) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-scpls_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2021) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-java_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2022) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-pcf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2023) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.presentation_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2024) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-cue_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2025) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-quicktime_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2026) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-rtf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2027) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-html_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2028) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-flac+ogg_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2029) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-spreadsheet_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2030) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-nzb_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2031) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-dds_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2032) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xfig_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2033) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.binary_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2034) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-tiff_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2035) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-ms-wma_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2036) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-adasrc_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2037) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-bzip_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2038) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-pak_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2039) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.pdf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2040) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-pcx_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2041) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-mng_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2042) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-mpeg_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2043) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-gzip_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2044) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-vnd.wap.wml_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2045) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-plain_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2046) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-mswinurl_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2047) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-flac_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2048) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-bmp_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2049) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-siag_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2050) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-vnd.rn-realvideo_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2051) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-tcl_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2052) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.x-office-document_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2053) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-mathml_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2054) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-csharp_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2055) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-zerosize_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2056) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.xml_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2057) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-deb_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2058) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-pnm_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2059) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2060) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.spreadsheet_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2061) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.vectorgfx_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2062) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-bdf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2063) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-afm_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2064) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.cdtrack_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2065) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xcf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2066) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-matroska_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2067) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-xml_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2068) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-lha_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2069) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.spreadsheet_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2070) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-css_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2071) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.uri-rtspt_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2072) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-quattropro_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2073) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.zip_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2074) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-vnd.trolltech.qpicture_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2075) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-c++src_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2076) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-plasma_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2077) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-desktop_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2078) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-arj_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2079) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-kontour_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2080) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-pgp-encrypted_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2081) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-vorbis+ogg_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2082) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.html_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2083) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-hex_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2084) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-ms-asf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2085) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-font-otf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2086) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-x-c++hdr_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2087) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.message-news_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2088) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.odf_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2089) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-portable-graymap_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2090) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tgif_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2091) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-object_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2092) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-applix-graphics_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2093) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-pn-realaudio-plugin_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2094) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-ac3_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2095) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-troff-man_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2096) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.man_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2097) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2098) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-ace_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2099) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-tarz_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2100) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-jpeg_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2101) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.cdimage_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2102) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.sun.xml.draw.template_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2103) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.text-vcalendar_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2104) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.video-x-theora+ogg_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2105) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.encrypted_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2106) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-x-speex+ogg_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2107) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-rgb_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2108) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-vnd.oasis.opendocument.image_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2109) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-lzop_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2110) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.recycled_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2111) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-zip_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2112) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xbitmap_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2113) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-xpixmap_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2114) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.image-x-eps_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2115) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-applix-spreadsheet_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2116) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.application-x-shellscript_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2117) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n.audio-basic_32x32 .x-grid3-cell-inner {\n    background-image: url(" + __webpack_require__(2118) + ") !important;\n    background-repeat:  no-repeat;\n    padding-left: 19px;\n}\n\n", ""]);

// exports


/***/ }),
/* 1286 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAItSURBVHjalZPPSxtREMe/b7ObTdbEFCXNQbEWisd6UBHBs94sNBHx5J8hePEq3vwDRDx5SQ8JCB5y8CZYD7FBK9JKAkkaL6W12WZ/v06mrqbEFjowvPAy7zufGb4rpJQQQrwAMIX/iw/09pMKcExZlv3OcWwSU9BpfUE0kUCg64jF4xAAHMdBNBrlYlVVoWlaFsCDAGzbhvnTxLezMwxPT+NHowFhGLCHhhCLxeC6LsIgYoShPFwqApFIBImREdR3dhBPp+FfXnbvuHtEUfg35dMCCl0qVDQwPo7nCwtobW9DMU0YNIJGyEEQwPP9rgDXhaE+YrEAd0rRCDoVft3cRCKTQWRuDrqu85iWZcEwjH6CUCDMxMwMUvPzcA8OYK+tARcXSCaTodDfCcS9AAh/YGIC6sYG/PNz3G1tAYODSK2vIz421k+ArkCYJCBrNahU6NPccaJJEwmIoLm6is+zs0+M8EjBZ3BzA4yOQhDu3e4umtksxOQkMsfHeHly0jcCE4jfjzldErCur2EeHSG2soJn+/sQ90YiR8n+HfRQeLQw8/AQ2tIS0sUiNHJlu93Gbb3OLiyXy+8BfOSHUrLYW9qs7HQ68nuxKBvLy/J2b0+S+yTtQJqmKSuVCp+FQqEK4DUlf0e9S2SzOK0W9MVFJGlmMg038DyPyUqlUi2Xy70BUJEUfxB41KlLYVarst1scmcS5JPME+Tz+dPezmGGn/Mr/vOfwTNfceee+AVJQgS6r4554gAAAABJRU5ErkJggg=="

/***/ }),
/* 1287 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIISURBVHjahVPPaxNBGH27sxJpml5sDFgaCyJ4EsxRTylC6MHaSw7SQ2/SP0E8iaeCCgWhWH8UvQkFCx48pJXmEDzVg6JLYyso1NaNukmru5tusvv5McnA7krxwdvZndn35s18fBoRQdM0A0AaPWj4P4jpsLZroIeRRqPxJSSCruuSbBojQ41yPTM4OAbgq64sQ8KRUOIwCGDt7MQi6mpdCB1CCOmuKCLsHB7izes1nBodlWsMLWrQE2laTKwLIU0PWi08X3yAi8VxCMOQ88kEvbOyKJnA2tvF/du3MDUzg3QmAzaU8wpGNIEaVZqfloUnd+9g9sZNnBjORi/yXwMWqFHy09YWms0WytdnMZLPo9PpSOMk1IyMr45g2d/R7XbxeXsbuWwWAYtTqZTc3dt3lVHCoL/7s/ePMLU0gYPf+7h2dRLr09NYnZuT4vrjD1i4cA++54NBkE+S49gfx6HFzXk683SYXpovyLFtqheLVGV6/N58+IOquVdUX/5IDv8L4DRr41UY2Etj4fISJs5eAYTAr0IBl1ZWcGxoCFW8w8n5PHDewMbGWxPAbiyB67rUbrfJ933iCyO+AwqCgMIwJM/zyDRNuXOlUrEADLAO0QSERHlUD7CBrACboVarNcrl8jkWuskyxhonin63wrbtzVKpVOBvDxGodj4OIHdEO1Of34goQAJ/AW8O7Z5HvV8BAAAAAElFTkSuQmCC"

/***/ }),
/* 1288 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHBSURBVDiNlZK/jhoxEIc/29hLpMsbpEwZkSrNFrxDkoKShgfYhiJKcUiXjp4OeopAHiJKwQakQzqJSCnSXAokWmBZ8KRg1+LPXZGRVh6v9fvmN2MrEUEp9Rqo8X8xF5HflWJTWy6XX70IWmu01iilzj4grFprXt7cfAQCAC/wtvaECaVQRVrCF4tFONZlYswxHY/HxHF8FCqFVgpjDNZarLU459BaXwPKn91ul3a7zXg0ol6vB5FzjiiKsNaijbkGlL2maUqj0WAymTAcDoOohFSrVcyJg8qpgyiKiOOYJEkAaDabWGupVCqh/1P75wClcM6RJAm9Xo/pdIoxhiiKmM1mAPT7fQaDQbiNM4DSGmstrVYLrXUYljGGOI5DdefcMwAgTdMgOp3L5Tt4soVwbUWPTz0k7z3ee/J8L4A/d3AhuBRnWcZi8Yvqiyqj8bcfwD0AIgLwYb1ey3a7ld1uJ3mey36/l8PhIN57yfNc0vSn7HaZfO50HoA3gBKRE8Bm8yxgtVrJ/Xwunzq3D8A7QIsIp4D3683GZ1kmeZ6fAUREHh//+tu7L9+LykEsIkcbSqlXBfl6zMfwRc9/pKhYxj/tjeTnyMBU6AAAAABJRU5ErkJggg=="

/***/ }),
/* 1289 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIOSURBVHjahVPNaxNBFP/tR0xEbSQ0tioRCXopFhVUrP4D3r36DwiiN6EQb4I3vXkQVPBSodhjj4JnryHJUYpBWwzGdr9mZmfGN2/rNkkLvuXHW3bf72MejGethed5LQAXUJSH/5clDIn7LURR55Mk+ZJlwvsnQaLgx33h94NeqVRsu92+B6AUgFJ5sBdF8H2PEOx3n+HNCARhiDzPmRdOxObhIHCkgLsQArVaDUEhUgr4HAuTAhyZSAGsNdj89BY63sbZ+To+bHzGjWtLaCxcxP0HDxGGIc9qrcGmpYDvsevrV89xd3kRS5db2BpuY+v7DlauX8KdK2fw8kWHTSjpoSNwrPF4jOaxXax9XMePnyPspQKtheN4834dc3MncW5xvphpNp2AnT0Cx7t18yqajVPFYsklSSWyLIPKEuz8GrkEPFsa40AB9XodcZJBawMpFREVd5MTdA4hFM9Q8Q6mEwCc4PefGI36CWhjkKucokpoJaCpS6XLJc7ugBP4hChKkKYpLAkYkxNZEtmBEgldxj+8g/09DGl5AXJYmEJEuyMYjHYzSP80+v0+qtWqASCYaC0LrdCibBRFltytlNIqpaxzobOSjrG9Xo+7EJntPOusOXPilgK3MyFsFMdHCrjqdrv8b3X16QaAiuNNCbhhMU0s3R0Gg4F8/OTRuwkyY/Y6e4yjr7UmfKV5iYn6Czr8ZF2UcQBPAAAAAElFTkSuQmCC"

/***/ }),
/* 1290 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJKSURBVHjahVNNaxNRFD2Z7zgzjUmahrbYVCIFoYXSraiIxYUrN+7yy/QnuFBcuYnUdQWRtoRgbWOaGEhsZvI5M5mZPG9enCEpigfufLz3zj3nzmESjDEkEgkJgI45Evg/GNWIuIGEOTbb7XZtSs0EQeBFTZeKEN35vmkY2wB+RA0wZViCFyZQtxim0ymKORGaTE3/YlGK1kRRiFXef5Px5ssYZ2enePnkATqdFp7t6XixbxA5dsIvnBXZEmjjyprg46WO84tzPCym8XxXwKPdO3j72UZvHMzPiSJiHlWszAC8/tSCHPYROiNsrZl4fE/BwZaE+5sZvHp3zEcShZi27GAwGCAdXGNjRcN6zkDbHuHDVxudnoeufY3Al1CtVuF5HiJEMW73+/3L2Ua98R1DT0Cz7eCiNYCR1FBYN7CRNaCKLo2poFAoIJVK3SVuTYo7kYNZjKPhGEki7RVN7O+kocgaZFnm0TeaFnLZFe72ZgrwJxOcnpxA1RQoikpEla8HoU81mfGxtpqH7weQJE5jiw24uqqq8FwPq9ksV42UyCqRFBIJkMlk4bruooMYZD3JSWHIqJGPW3oSw+EQmpak9wkm5DIIAtTrV1UAP5dSSGoaHMeBruukkoFhmAj8KW6nMpBJvdfr8Y9XqVSsw8OnB+TKX0yhMHacGqOMG40GyuUyHyedToPSgWVZyOfzME3zV6lU2rFt2wIhno9QcFyXUYzM931GVvmzS2s0Aut2u+zo6KgyMzo7v1CxAw1A/h+/M/tTTTob4gZ+A5JJHkhKuNsbAAAAAElFTkSuQmCC"

/***/ }),
/* 1291 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABuvAAAbrwFeGpEcAAAAB3RJTUUH1wkLEzQ7Db9kvQAAAkxJREFUeNqNk8lu01AUhj/PaZM0HWkLlEGqukdCrFiAQDwGG8QjZNsH6L7P0L4EiA1LkBBUKpMIVWmGZvAQx46Haw6RWtREQhzpt++17vnO4HM1AKAC3AF0/s8U0ACGJgDw4LzbfZXnBbn6I8hkrWlCnrOwbRMNmHwAdHlXKpUnwOsLgCnOhHFKzx1zchZg6DqZwEzLYGutzPbtRQxDm0A0EWBePgAUGsMUmrGiFSnaTQ/Pj1lbKfO14dLshDy8fxPHMS4AXAGMMjgZJBy3I1puws9mSNAL8cIUqyhIkpxM9OzRtmTyt1WXKy9RnIU533sJbS9Fty0Wlss02iE9gbiiH798vnzrouuzAEm/AKm3E2a4Y0VfdHTqk6ERRCnBKGHgRnwWQCT76RIEoOhKHWFeTLrcDsZcv1bBSHMYJyBRlaajWya9QTQLsE2dxZLFetXBnDPJogQnz2m0fLZqDsk4Z+PuMvNlmyxTswAJRJzkeJKqlSsGksGSpbO8UKJWtdmQX1kVZ8fWMU19FrDkGKyXLW5JtEggO5tVZDhYu1GBJKVaUiSRRxonDIcagLoC2JQoBlCkNTpuJAdLtM6HrAp05I6ov3g8GS7P89jf338LfLwCmLekB1L7xoKNqRSaAFdlX3V0XGs4cfZ9n4ODg6Pd3d2XQPsqwDYwDR1bDm7WShSqkObnGOScFn2CIODw8PBTvV5/rpQ6ZsqexvG4iERBGBd9Pyp6XlR0+mHR6vrFu/cfi729vTcyQDtM2cVQrwD3/nGdc+AD0GXKfgM6AiTLcSdWXQAAAABJRU5ErkJggg=="

/***/ }),
/* 1292 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1293 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH8SURBVHjahZO7bhpREIb/vcECEohLYQMGpHTUTh2lQaLjRZzKVurIj5EHiPIO6Wg2SpUECcUFBRAHjEECltsucDIzWi8oW2TQr7OX+f/5zh6hKaWgadoVgBIgpeH/pUi/yTswQVUul1/9enj4stvutCCCQyE/fiLXp9W0LJWw7TcAJACGYWi+5xtL14WuayQjWHURl07mMMA01QupeY49fX7GxeUF9vsDfnz/iVgsxuEgVJHn+3h9fS10UqcAQSbzJRl0fHUc1Ot1ZLNZWJYl747HIyaTCdrtNprNZjhUDwMI+elpLBPX6zVc1yWSPeMiHo/L9WKxwGaziRCEeyyVSrLnZDIJruFwiEqlIqbRaMRBvC3uiRBI6p/HRw5iApmYy+XEkEqlUCgUsN1u4XkeqKIEIOMVTQsIBH06ncq62+0wm81g2zYH8jDFlgjBcDCApushQT6fRyKRQDqdPieQE4meAqlarfIW2CRN4/GYDRI2n89lekCACAFvod/vh0fGVSwWkclk+Dg5kD+kUPR6PW7wIgS1Wk0CGo0GHMfBcrkElQSuViu0Wi35Hvf3Hz4B+EYCJzP6W0pWnU5H0ZEpwla+7ytCFx0Oh/Dd3fvbzzyYfawwwKfGk1FMIpou6na73s27m48ALDEHevk7VwCwtDPhn/s9yaF+D2f1F+f7IuUn3JarAAAAAElFTkSuQmCC"

/***/ }),
/* 1294 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHlSURBVHjahVNNSxtRFD1vZuJHqSDURSTJ5ENciV1Wk5AEoUgX7a5/w0KhRbrWvbTb/oDib1CKmwQT0VUg6EIhsYrBFkoDM5mZ5PXeJ88MmZTe4XDfm3fPuec+ZoSUEkKIFIAEHkLg/yEJP4jbsXiXTCaXzi8uDvtuX2gJEoV6+I1aj7IVi8nZmZkKgAcB0zSF7/nmn14PhiHw+eAW71+lYJkGzk5PNfExKpWK1E6tsO2f9/eIL8bxbG4KUhgsjBdrazBYgKCFeK1DC/BLIi8SyUDnl4svB9f49DqLRqMRGaFcLmPcAQRZ73bv+D6w+3aZRjEgCIVCQWUx6j7ZAdtMJBKKeEJdxWTbnKMO9MHtzQ1s20Y+n4dhmizKggrhunBYoROkiMzF9XqdCzUiZHIgJ17idaeDTDaLYrGoO4dFHjN/fFEBQjqdVrZrtZoil0olvDw0MR7fN/8xQrvdRi6XU0TdbfVqD08XkhDBFOZnn8DpdXF5uT4E4EUcZDIZRaxWq3pWrPw+wvM4CUzbWH+zjb7rYGd35xuAEz0PW99wXVc2m03pOI70PE/6vi+DIJCDwUBy6LOP2x/2uTHzCCMBPwgiRMZwOFRotVre1rutrwBizNHQv7MNgCFCwNg+IBxTvYdQ/AWj9dFim8VwNAAAAABJRU5ErkJggg=="

/***/ }),
/* 1295 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH5SURBVHjapZNPaxNRFMV/780/k+lIY1PStAH/LXQhBVErYrr2Q7j36wi6yM4PoG7cZZGlCaELwboTbYu0kdY2zZg26WTy5joMwclKhJ7He7zL455zLu9eJSJcBppLQgE24Ofxf0OAcxtYO9zp7kn4Ga31jCVdKt05ZRbnsgpn6QHByvoNG0BOu1RK73ITBjACCSC53vw9PDIws6+QMfTbkCjYWYaaCz+OYXhBBgtwgH3gPqBArTwHUHZ2TgwMAGsRnq2BKkNxFz5+y1U1sAQczsjK8tcBMo75/sliEBv80xPuPtyAaR8mwBQQGIw0vaFGNAR+glc5ywm2vsa8eevjaJAPp1xbfE9iFElc4mhs8TsSlAJHCY4WLIQXtaw8yQj6kcfuwFApOdy55WCj2T+ZMBhCZKZEcUIcT9GWk/2GSYSRFHIHpdXbhHqZ5QBqNwVXTzlOE/d7NsPUgbZskiSh4BUol8tsPn4EwWoP6GkA5fks+D5aNLa2Ua4GFK6nKBaK+OlbEARUq1VarRZPnm6al69er4tIbANi2W5WY2HBwtJpzYNzwjOPRLlZc7mumzmo1+s0m03T6XQ2ut3uCYACrh/0entftreRZMRVL04VFb/6cGFcPK+IiBBFEWEY/mw0Gvfa7XZ/fhauAJV/zkLehwciYpjDpcf5D9mQyMHdlq2iAAAAAElFTkSuQmCC"

/***/ }),
/* 1296 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1297 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJASURBVHjalZPNS1RRHIafe2a85pAW1BApooKrSg3biAmJVhTtiqlF0Kpa+Adku3a1cVOEQi2CWkrhCEmQtKhoY1DjBxrOkI6IOA3ZjM3M/Zgzp3uGmUmRCXrh5Qfnnve5L+fcayilMAyjBTjF/2nWy0b9ADpsWfZLx7E9mPCMhhaNnuyW3++npqbmClABYNs2mWwGIXz4fEKHKxae5+bnSae26evrLa6VJSjJEIYX/Btei8fJ5XIM37nL0yfPSP1KEYt913t2ASoN9Fs2NjaIr8Zpamrkwf0Rzp0fpL//DM3NzXR0nGBgcAAdFULsbaCpgUCAsbHnzHz+QufJY5i1flrbWgmHJ9hMJBgbHa3eQC8Gg0HqG/axnbWIrSZwVB3RaBxFLVNv3rGwsKz3VQfoaj0Xb3CgpQPDXOdI2yGunT6K5UiSaYeZNbcc3gugdNpJ2ySXzvNz28GVCr8wyNmSjOflpNSAKrdQajG7GMVX28iFnnbWkxkevl7h7WySrd8uBwN1ANUbGEKw8HGC4/1XycvDTH6NIKX0rLjU3cjW0nuy2euYpqn2nkHJKvmNqRcj9IZucra7i82tFLIAsU+v2C83i1cdiURmgMUKYOdBDg3dJpH4QfrDI9KuQb1PUCdcGoIm9x5PMj09vRoKhW4BS2gppQAu246jvC9POd50XVfl83lVKBSKM5VKqbm5eRUOh1e8f6ALMHROuwLIS1kJSim1NaA4LcsqjI+P69qd5XDZ5d+5vfjw31rUtZUndugP2eQffK7ObOgAAAAASUVORK5CYII="

/***/ }),
/* 1298 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHgSURBVHjalZNNaxNRFIafczPTqbGKGBSLH5EgFRH78VOsxH8gblwJgmu37t25E0SISPbFH6AgQQMNaoofBAltwTR2MnPn43pnQoaEkEUPvJzV8/BeOFeMMYjIDWCdk81ny353ADI4CMK3WoeIKBtsJA/ZZnYcx8F13XtAISAMQ479Y5QqUSqpDJ4PAGP5ZAqBKLFgyQoUaQS/3hwSpYKyMgTcsmLt/gVELRAoEZwvA9iq0H11QPXuai4zsZDa+PsxrWd/uPXoIt5lj4JjutZmhaWOztuIlDCRsvB4e6c9rm5X6b38VjSYE2R1ze0yZ3zDUVeTWtBoIdXjJktlxc2nGywWKIVYyfXHV4het0kCIdECqeCeUlTWwPFyeF5AJpjESqrPt9h/0UWM4CxLAYvIggbTLcTWPetSfbLK0bvfMzCwuIGM4SIr11b4d06Q9gFJkhAEAb7vE0WRmb+DcQo41cLhVyEepbB5nuFwSL/fz6+w1Wp9BHZnBEzBf9/vsfdpGeXBnYeX0FrT6/Wo1Wrs7Oz8rNfrD4AOAMYYgO1QazMajYy2O6sYx7FJ0zTfg8HAtNtt02w2f9g/sAFIxmUpBHGSFKB9bx4ryLd9e9poND4A6xN4kpN8512gY+wwNf8BCfzuzqzj6KIAAAAASUVORK5CYII="

/***/ }),
/* 1299 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIjSURBVHjalZNNTxRBEIafnpmd2Q/BVYEEE+AC7M0LFw0m6g9QE9296Nl/hycPGsPNRAQuG0iACMZgXHUVA8Oy7Hx2W7YsBNaYWMmbyvTM83ZVV48yxqCUmgLm+L9YE3bHA0DgKIqfJ0ksZo4IkbJCpC6QnudRKBQeA6cGxHFM97iL47i4rmPhvozW/Fh7jecaShNzXBufoh+nBspRArpi4GD1G5YsMN/XXzE+WsUpBKThJoe+Tz+ck2wBAc8kZkKz//4N4yNV25qDwi9XOdhZHjRQJwbuH1n4YPstVyseOklQXoDOU0we00s1vuuq8y2cVWDhcOcdl0sK3QsxqUBRiFcc5vN+xMzN+yR5bv5qYAQ+/LjMUKAx3Z9knT3A0I1yQnrM3HlCUCoPHqKdnc5l5yWGA+zO2dGeGHwjdiqE7iizd58KXLGbDRiYPKPdfEk1yKRcIz0aMIbYHSJ0RqjdszBG1oBBg08rLxi7UkJpjTk+pNeLyBNpxxulJmV7fpEokrU8x/d9M2DQS1KUO4xyNEFlCNfz+JIGzN5uWLjT6dBut+0tbDabq8DmuTGO1OY5PuoiDuB4tDowPV/HL5ZJkoRWq8Xk5CQbGxu7jUbjGbB1roKx6xN8zTUftpfsDazdekCxfAmtNVmW2YNbXFzcrdfrD4F1IwHASX6UyVzTNDXysVUuzwLbLL3rhYWFFeAGoIShr/7vPG1f/js2gS1zYQy/ABbFD3vdobclAAAAAElFTkSuQmCC"

/***/ }),
/* 1300 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIUSURBVDiNlZPBSxtBGMV/M9klE9ZdFQM5eOglAQ8SEGkvvUnBe/tHeuq/EOotEfHQIvaQJsEg6DaHELKzm93sfL0kqRop9MHHMIf3vjfvMUpEUEq9A075P3wXkb63upzGcfzViaC1RmuNUurFAJtTa024s/MF6Ou1XOkE5xyj4ZDUWnrdLgDLotiQFWxmjbUDUpswHo8JgoD9/X3a7Ta/+n2MMSRJwvHxMaxFlNoWUErRarVI05TxeEylUqHRaCAiTCYTdKWy2ay03hZwIkynU0SEOI4xxhCGIcYYptMpNkmIouhFFgAbqWq1Sp7nDAYD3n/4QJqmlGVJlmUcHh7S6XReBLolsCwKRATP8+h1u8xmM0SExWLBaDSiXq9zfX3N7e3t2xksy5I8zwmCgGq1SqPRwPd94jimVquhtSaKIowxzGazbQe+5+F5HkEQEEURvu/jnCOKIh4fHzk4OMBai7UW3/ffyMAYFosFT09PiAj39/dorXl4eCAMQ+bzOcPhkDiOyfN8+wlhGHJyckKWZdzc3LC7u0uz2aTVatHpdJjP5+zt7VGv1xkMhhPgDgARAfhsrZUsyyTPcymKQpbLpZRlKc45ubq6kouLC0mSRL5dXiZAG1Ai8tcBr+pZV+ac4+joiFqtRq/XS87Pzz8CP2S12XtNeN3z6rdirf19dnb26TmZtQ2lVHNl61+4A34+JwP8AdnhCrkayNJzAAAAAElFTkSuQmCC"

/***/ }),
/* 1301 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIzSURBVDiNlZO9SlxRFIW/s++9mUGxtBOmMK0OaDUPIPamsdNCQVsfwNJnECwtDGKKeQBBroKYwUIRDDGIcHWKKcZcdTj3f6eYP8dAIBsO7M1hfWsdNseoKsaYCjDP/9W1qv5ye8N8FMXfkiTGGMEYMMZgug3mg9J1XTzP+wIMAFhreeu8IeLgug6O4wwgxnQRWhQAjI2NDWH9JkkTPM9DVcmyjE+ehxEZQoC0KEjTdAAcARhAHAcRIcsypJdA3qVwXHck0Qjg/Pycn3d3NJ+emJ6eBmB5eRlxHL4eHGCtZXNzk52dHba2tgYA6TdFUbC2tgbA6uoqzWaT07MzTn2fxcVF7u/v8X2fjY0NJicn/wbUajVEBIxBRIjjmNmZGarVKr7vs76+zuHhIZVKZWQjA4AR6b4XEBEmJia4urrC930WFhYIgoBarcbJyUnX6CPAEeHx8ZEgCLi8vEREmJqaYnx8nP39fcrlMisrK+zt7XF9fT2MoKoAS+HLi/4OQ7XWapIkur29rUEQaBiGuru7q1EUaavV0na7rXEcF8CSqg63UC6VyPMc6e2+UqnQaDSw1jI3N8fr6yutVotSqcTx8XEDuB1JEMfxwN1aq8/PzxpFkcZxrO12Wy8uLrTT6Wi9Xn8AZgGjqu8APWGSJJqmqWZZpkVRaJZlGoah3tzcaL1ef/A8r9oXjwCyPB8I8zzXPM+1KArN81yjKCqOjo6+v3fuH9P7zp97l/+qW+CH9hz79Qd+HVJzl6NxpQAAAABJRU5ErkJggg=="

/***/ }),
/* 1302 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHcSURBVDiNlZE9a1NhFMd/59xoa41tBBGtRQotdtHi4guWDA6Co7abgy5+AHFSHBrRvZ/AwVl8GfwAolKkdWkgktKCLikSCEbQm9yXPMchN7f3NlXwwOF54Xl+5/8/R8wMEZkF5vm/qJrZdiE5zDebzZfODFVFVRGRXALpqqocKRaXgBSAs3+XExFksM/cpwDP0/ShITx710BVeb/Z5tLMBPeuT0MCGSjJAVQVzBBVXqw1KR0e4dbCJNfOHaf8eI2FuWNcnp3oF1FNAelORJDEf8+ET9s/8VSZmyxysjTC1ncfz/P6mQHkFSTr7fIp7pSnUFV2fgT8Dh1LF0/kpA8DBh0W6Wei5kO9zd2rpxkfO7AvYNeCamohO8rVrTYPbszsO9acgkF3JakOEMaOK2eOcrCwO6G/WmDPZxHhVzdmMePdOYdzjiiKDXB5BXskigi1hk9prMD56XGCIKBe32T00CivXr9ZBTYAMDOARd/3rdvtWhiGFkWRxXFs959/sZW3Xy2KIltf/2xhGNijSqUGnAXEzDKATmcI0Ov1zDlnrVbLNqpVe1hZrgEXADUzsoCbfqfjgiCwKIpyADOzRmPHLT95+jGpnH42s74MEZlKyMNt7odLPH+zpOIg/gBlJusjcbC4NwAAAABJRU5ErkJggg=="

/***/ }),
/* 1303 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1304 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1305 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHySURBVHjalVPNbtNAGBzv+ifFbho4lINDJQQVHBA3bgjxCsBL8AhUHIoEr4IQB6Q8BOLeSIhLpVZtGqpQg4jt/DjJLpNPsZIQc2CkT/vt2jM74y9xrLVwHOcugIf4P7TJPXalJbnX630yFFNKSVF0rYhylefbUfSC7bHCAsYCeZ7jXxAhYFFLuGWjNbWspZCDztk5W26NQW2rhtl0Bu1qNK7fQBSGcJXaFFCLQ9/TaDZjaO79IMB4NILv+3A9D8V4LM+V1hsCYnGn0cDUAJ1OF57nIoq2kaUpwihEURSwzBk3m9jylg7UqoMRb+NKu65UmqZCTPupnN/a24PLc6IiAh3Mg9docf/ObRELmbcUn497zAhwNN1WReBLHKNEODs5EQI/IKN4jJEhCHwR2t29yd6pEJhvtEZAB/fv7YOo/B38DbUyaNTrdbllMBiskSeTiaw8l344HFkAZmMKWZbhWrSDH8kv9JKfMJx/UAswm83Q/93HVXKFOI7RarW+ADhac0BzkpsQoWI05vgi5Fku4t8vL/H0yWO8//jh2+uDVy8BnAJL0vPBcGi73a7l2Cxt2ul0anmzNcbYJEnsUbttD94cfgXwiKXIE24p8IwChmMS8qrAHBcXXXP49t1nAA9Kclnl37m5UHZQDbPIfGoJrOAPxUgDTP+TrTYAAAAASUVORK5CYII="

/***/ }),
/* 1306 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIQSURBVHjalZPPi9NQEMe/yUuTNURqutAeZCvI4km91BVEEBE8KD2t7EE8efAqeBFB8F/YgyLePcge9g8o1IM/wIvuYaHsomWFUqQmbmlTm7RNk3F4JNGwS8EvDPOSee8zM8kbhYigKMoZADX8n3aJqK0lDzXHcbZjhqmqKo2hOWOlXsZPWtYdABkAMWGhJChd468ygBBqtpEQ4/KL66iULaiKgOOO8PnhB6iiACXZkwOkZYEICvtZFOFs1cK1czXofOjd1y+IAOhqkoR9HpBS2eQ3IBUV28Iv/xCaqqFSMiH4vRACWFBB5gUDiieW4CSAYsHgVpTcwaOAJPg78BDGcxQiA67/A0IRsM0qBv4Qehhg2SodC0h6n2Fz5zHKtgF7ucC0CHOG2WUNb9rPsH/g4eXGa+iagSxxBmBb4sCtlQdwwz72Bt9xytJRtAy0+gc4RB/31x6hIHQQ0dEKkPR4dfUKOjsdaJUt9IYDeT9OF22cjzewVq1hMpkc20Lu1t27dBevPv0ESm9BBKwMb+D2hTo6nY7M3u12vwHYAystZ933fWI6zWYzCsOQ5vM5bb5/Qs8/PqUgCKjVatF4PKZGo+EAuMgm5ygdpnU/CLb5T2RzwAB4nofRaATTNOG6Lnq9nluv129ygl1i5SoIOPt0OiUOSouiiOI4lmuGULPZbP+bObGsglUZXCjZ836SOdMf7RT/uZ+ql2UAAAAASUVORK5CYII="

/***/ }),
/* 1307 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJdSURBVHjapVNNSBVRFP7uvHn/+AdPn+9F9nxhRIJFi6QI2hi2cVmrFrWMqL0rcemythHULmgjSEIoFIhlFqWQGpKF5CLDfnwzb97cv7mdN8nFhS2iDz7O3Jl7znzfOfcyYwz+By7+hvFxZ/UE3BUAl1ehMDYW4QBYBQ/Hr2eOnhzwOgsdLg85wjCEUj8hpITD2pDLZ5HNZLG5uVXbeLvYdevuNAfBwR66Kj3vSsWCq6SCVJKSFQT3oWVARQSE+POur6+3NVcqT4JgCzy5P3qju1w+LilZUbIUKv4zD74jJO7WfPj1OhqNEJwLDA4OXnowcW3E9qBcLFSTJvRC3zdCKaalhlYKqXx3LpNgjO/oeuB5EMEufmxrg0ijs6XjHICpuABzXD+TzbRgH7SO8G13BwmHoVRMtWglyA5xL3IHobWgmPGxD0prSFIQNCKQDJhIEyMYE9lI9K0FJaX3ZnkLfhACjOF0fxXPX75HLpcG+7xN3wUSzOBYpQsfN79SLziqPWXPFuAi8ucWV9HelscGbeirlPB4eh7DF05hbf0L2QA0qUqngGcLa0glXVSPHPKsBSmFV/MD9B4uIp1OYmnlUzyyobP9uHl1iCbQwPD5fjyaWsCZgQpZ4yAXvj1Ik/dGhwod+RlG8mkdk3zHjHSTKqZuPlMPNLEh3YtXbt+ZjRXMvHjN4pPX7HJM3uw2UVruT1Y6wvzSetpaeDq7LOt+I559pA1oL20mNUjAOC6QSFJMxhEUOdeYe/VBWQskvb29NT/SXCOGxkGwt4nc1erhFOX+speJEfAPMHuJvwHhn38vThElzwAAAABJRU5ErkJggg=="

/***/ }),
/* 1308 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIfSURBVHjadVPbahNRFF2ZTJpkkhRHG6KieAOrTVJDgqI+iuA3+AXisxAIecxH+AVS8E0shUqUailEMAk+eBnFtFJtCjbpXHOfHM9sOjIm6YLFhnNmr7X3nn18jDHkcrm5YrH4VJbls/DA5/O5keii3W7vlUqlx9VqdSACBCmTyTwEEHYT/H4/URAEh3TmcjgcdgE84SQBLyhpglMCTtUu/hMQRdEhJQEMpmWg2+1AkiJYOBWnOwej0QguhKNILq6Aph/ie0PhpQ4oWdM1vNvagGWZCAQCZDApQIc8mVwP1TYyyzlytW0b8YU4ktdT2Nx667ZzfAU/d7exeHUJ+/tNbGy+wa/fuyi/XsfpxBnohsGpwwvRK2CPbYy5oxSW8FX5jNu37tJds7lH4lIoTPcQMLsC2x7BL4gwDJ36DgVDUJQvmAsGYZom+oMBFwo4v3G2QCw6D1VXEYvNIxqJYnXtBSI8tg4OsP5qDalkGp1OB/1+f2YLNOHz5y7gQ/U97t974AyLhnjp4hVy7fV6aLVadD4l4C7JcuoG6h+rWHn+DIl4AuPxmEpfupaEpmlkpKrqHwBUBm1VNps9wfe7w10YdyTyUlmj8YPt7GwzRVFYvV5nXICVy2WNf3/ZyXMoYAokSk6yfJKGpus6Vccfj5XP52/y2JhqwdvKkborRqtrWZZeKBTu8ORv8ODfc06n048kZ2+PQa1We1mpVD5hAn8BtfILCn/ReMkAAAAASUVORK5CYII="

/***/ }),
/* 1309 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIaSURBVHjahZPbihNBEIb/OU/MYTbHjeiS9UKygojssnjhfYK3InmKPIre+TpBUIIPECJCxE3cHDA3ySRmJnNsazoZnd24+EMxDT31df1d1QJjDIIgyADS2EnA/8UoNpTry9jpwXw+H4YEE0WRB0FvBCn+8v1sJnMKYBQDEDLcJZ7AxdhBiTFAkCRxBwpDeJ7H17ZlQZIk5PN57EuAtK8u5sjJU8IgwOfuJwiuDc/fwlwuUK6e4Nn5JaY/BrBdhssXL6Fq2kEFnLpar2H+HOHd2/fwhRBGLoP71Qoef/yA69E3vHn9CoNBBfV6HbHiLpwuTfPKcRyMJ99hmSZmkymm42vcyxo4qT0kUBWQNYiCilqtBsMwHlHu8K+FyBfBfq03lJTDk+dlPL24gKroUBQFACP4BOViDknFAPLso9frQU9plKBCkVVuyw88Cpd3vlI6pgv2of3rDhjdvq7rcLYOSsUiVFX5077IpkxAz/VRKpURBEE8TBCRUCqV4hEEjEAeVSBis7FAbPhegHQ6zWG2bR9WoFNitJHNZlEoFOCTJdd1cWQUohP5bPT7fQ7Zbp0vAKY3umBZ1lW0Ho/H6HQ6kU8+QKvVCovFgsPa7Ta63e680WhEHbCSgJpl20PqRNI3DzqdTtxiQh2YzWbzVqt1tlwuF7ctHDwcGmG+JgAfb6ria7PZPCeojViJCnQAx3c8Z7aPCf0b4JZ+A72GCipkchaAAAAAAElFTkSuQmCC"

/***/ }),
/* 1310 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1311 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1312 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJCSURBVDiNdZO7a9NRFMc/9/5+SU0J6aCWktYoiGhEpCTiAxyCCjq4KS4+Bju6dXHovyCChSLo3MWtHVwSKFKEGmxRpA/aaG2FVjFNGvtr8svvdRzaxKapXzicy+Gez3lwrxIR0um0GhwcfB6Px8+wR0qppm+cAarV6tbQ0NDA9PT0lrkbM/v7+x9GIpHDjQTDMNBaN30Dsms+8BRoApoyDKPFtNZNawBEpHnf3J9smiamaVKq/2Stsgxakeg6RTx6HK01AEEQtAO01oRCIdAB2R+jfPz1Dld8nMDDCXyu9F3nwbknHDIj+L7fBOi9ANM0mVwba0t2xSO38pbRudfNUQ4EOFLlw3oOHxA0F3ozXOrLIMrACTzGCm8o26WWnbWMsF5dwREPVwJOd6e4mriJAL/tEgsbs0TDMeaLX0gfvXwwoCPUudO2+FTsEgIIwma9jBv4uBKgfI3jOO0ApRSJrpMoHUaLy3xxlpczz3DF5/vm1x2oa9EbTmDbdvsOlFJ0dkS5m3zMH8fCDhy+VQosbxZwxMcTn3vHHlGt1KhUKgd3oJTi2onbGEaYV59fsFEr4kpApxnlTvw+ZzlPuVymVqttAdsAiAipVCq0urpadBxHfN+XIAik7tRlYX1OPi3PyFJhSfL5vFiWJdlstp7JZC6KCCLyb4RGFw0oAj2RON0dPVS3q4gIU1NT7vDw8I2JiYl82w72q/HeRQTP87Asyx4ZGbk1Pj4+2VK08Z2TyeRALBY78j/g4uLiZC6Xe78//hebUCbaX0RofwAAAABJRU5ErkJggg=="

/***/ }),
/* 1313 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1314 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE/SURBVDiNlZO9TsMwFIXPcdK+BgszSx8ECfqYZejeJ4ClIkMZGGDsXJnGSW4OQ+Lmpy4Slq7kKD6fP18nlASSdwBW+N94l/SZ9w+rsgwvVRVAOpAASbCbgLNknudYLBbPAC4AhBDgfzycy5Bl7gKYVL+WHJAXAB2RZRmcc12RoHOTcAwmAY4cwn2R7ECz4zjnEgY9IIvhkUWExHXpI6QMEuHbPegBnEFSu05uBAOh68PI5JZ22mBskVCOc0m3DSbXNgubGeq6hplhuVzqCsCRxbzMDKfTCcfjEXmeY7/fvwE4jJWeQgg6n8+qqkp1XatpGpmZzEzeexVFIe+9ttvtF4AHAJSE4YtIdJkkJKFpGpDEbrf7Xq/XjwAKxWZEg8bsaue2bWVmKsuy3Ww2r+OdY7H/ne/7l3+NA4APza7hF+leqDFFdd+lAAAAAElFTkSuQmCC"

/***/ }),
/* 1315 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHxSURBVDiNlZMxbxpBEIXfzEGDCyLT2GlSkCZNGv+QSMRy484Ngsbu4QfwXyAFPZLrpHARCiI5EpfGNOYEMnvHHrv3UgTuAEeRstJKM9q97z292ROSEJF3AC7wf+s7yZ+lbXOxXtsvaWohohABRATyp4AcfVkqlVAulz8DyAGw1sLEBqoBVAWqmkNIIgiCHCRSIHVXiAqCIEAQKJbLJQLVbR9gPp8f9PuA3IFKoTp7esLd7S2cc/Deo9VqYZ0kqJyc4O35OVRzXYAkADSMMZxHEReLBZvNJl9WKxpjGCcJb25uaK2ltZZpmtI5RwANkoUD2TpQVbTbbQSqEFWoCGq1WhHqUQavAC+rFcIwxP39PZIkgapis9kgDEOcnZ2hUqkcTgQFASqCN9UqHh4e0Ol0cqVut4t6vY59sdcO9lw8Pz8fXIyiKK+3mf3dgajCGIPr62tcXV3Bew/nHJrNJhqNBnq9HqrVKk5PTwvKbgrWWsZxTGstZ7MZnXP03jPLMk6nU0ZRxMlkwsfHR/b7/a8APpA8BCRJwjRNGcdxDvDeM4oijsdjGmM4HA5DAB8BCMniJWIvmHK5nGeQP2MRjEajX5eXl58AjLkLY+fAec/NZnOgnGUZvfdcr9fZYDD4tq+827L9nd9vD/+1JgB+8GgMvwF6vjdiibyJqQAAAABJRU5ErkJggg=="

/***/ }),
/* 1316 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHESURBVDiNlZMxa1VBEIW/mdm994lYCabUwkYLm/gHbOw0hYk2Fiqks7ERxdomKCktTS92lqI/IFZPQoLaPCxEREQCzxvu3jsWu+/GR56CA8swsOfMmbOz4u6IyGlgmf+Lsbt/CqVYvrM1fbn/q0FFMBVUFBFBhJzJGWAUA89u1teAgYCf04avP/aJwYimBFNMNZOpooUMcj2LgcBUqaMRg/HwcoWZsfm2wwpYVVAEBEzlKEFQIYZANKWuKlSVKuRxTDWPQlZhixSoKtGUGIzNN4lgRhXssHvxgVIPuEMCIZpx5mRg7eKIjdXjBM1eDNmyPyYLRlARgilPrp/A3bMvlk00mTdOZJGCQnB7a4q70/d97qyKan5SLUf+pmDmeN/3uPtQy+yUuw5HCaSYYyqklMgbWs+Bu77HHUzEFxAwdEupLQSjAdwcHFC1Xzi3JHzcebcN7M55IIVk40pDSomUEo8ufUeA1PVY85nHN5ZI38aTp/fX1oG9OQV5T4UHr44Rzcp/yIuTuo7zp3qev3g9ube+ugK89/JUg4LKlDoGYrDBdURwIKj65MPO9t1bK1fbth3PwABSvvNZ4AL/jl1g708wwG8pd4i4NZxoXwAAAABJRU5ErkJggg=="

/***/ }),
/* 1317 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1318 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI3SURBVHjajVM9bxNBFJz1fdhnn2VhK7YU2wgphdO5TUWZDkWU9PyIFBRIlEQUEUlHGoqIKFDT8CGRtE7hSKQwMuCK3DmWff44n323vLfSARc3PGm0q307szO7d0JKCSHEGgCGwP+VJFwT19UBVRsjzztfLpeCCgnElHhOo5ZKyUajcR+Am4r7s9ksxQKLxUIsCVEUCVoTmq4zU/zs/xCaphEdvIf3git2wCRwGaYJjnX69Rjfg2+4kb8gTR9GSsOL9deYTqfwfR9x/XEQBAECEmHbLPDsy1NkxR08uPsIu43neN/6BDqZyapPDuS/DjAnAcMwQF2Og0opj21rG5trm3BdF3kjp9Y9zwNFwe0I4AhRGAL5vLJpGza4er0euyKBvCINBgMe2U3SAVsbjkZ8itpg6zay2Swcx0GlUoEfBIrc7XZRKpVW74BuG6ViEdVqFel0Gv3ZEDqt1et1mKYJxx8hl8vBtu04gkg4sDIZJihyoVCA63vKSa1WY7twSJCILMjjagTLsjirushyuUwCQ2RI9GS0hzeXx9A74APYPpNXX8GivGnTVIR3Vye4d11DkSK1+x+A8gBPdnbR6XSYyC4jAIuEQNayVNZL5yPm9g0ebj1Wz7e38Rn0VaIdtdFsNtX86OjVKYALcEmpnGzN53NJH5Nka2EYKtBzSiLIyWQiz87OJec+PDx4C0Awj/BXgJuEhACTGePxWLZaF+H+y/2DmBgj/p2rANZZWSGu5HxCe9u4Vb8BN6NlkDR81uoAAAAASUVORK5CYII="

/***/ }),
/* 1319 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGWSURBVHjalZPNTttAFEaPf0Jc6jghC0SjbloJq9tW6qoPkDfIE+cZChJQWtSixEhJSxzHyXjmNtiOFRhYcKSRZzPnfvd6xhERHMfxgZDXkYpI4VPxPkmS69Z1gfrYwnXdB+mjBZRf/2qDOQ3ohOEH4KdPTb7ecLPQqMRUAoB9CRXduaa18NjRCHShOO0dok78JoH7NMVDgtUa023bAiPCj4VC3TUJcFy3lJTUKaK/BQfZgS2IoojjyKDftXGrg8/Owl3liJWg5iot0Am7BI2gptx3Zor2wn9uBgXx1myqBM0CHv+J5QqJ7BYotObyXjBT2Y9uCcLZhiBtWYKy57gXIIMAz/NeFJBmSMcWEHW7XFzewxQA6xKJCFprwukG/6iwBXmeEx+9wRkcWpM3xrBcLplM7tCR8Ots8h34Yw3x4l+B3IpVXSnF9PaGb59jxuNxMhwOv4qIsoYY997CYJuiugNN9SzLcFKvPDwajT6JSGa10O/3cWZrqKo21K+V+Xx+vq38RURW7LF7zgFwwssI8FtENE/4DxXYtjwUkl1VAAAAAElFTkSuQmCC"

/***/ }),
/* 1320 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGiSURBVHjalVM9S8NQFD3JS1vEDoKg4KCgnTvYwW6uTgpaXBz9SU7OTkI7FNc6OAkWoVpBBxEVh3a1JM1L0ne9vbGhSanggcN9yeN8vHxYRATLsjYAVPA/PLL21UGMiu/rRhBoNrOZYFpCjCfScBwHuVzuCEBiAK01XM+FbSsoZYt4hhDIeoLEwLItFio2sGOOBTynxTznGohAhAlFLPczx5G92Qa/BmoiTlrInE4XJsFZA/S+EZ7fxEaBgT67lvv64hboD9IG2Qbmsg24AfJ7ZRGZtx7U2pLs5atb8Bpt2IsFFE93ZxtAXMfunKziY4RPX1CbK3Gio0AjAwqiOQ2YhZOq1NRXHeRKqwgfPrGwvy2CYfMexeMdqPVlpEBEYBz6WpPreeT7PgVBQGEYUhRFNBqNyBgj1x7vDwYD0lqbsYa1qQbJu86STcBC9Pt9+Qo7nU4bwHOqAbvScDjMpgtd16Vutyuz2Wy+AygzLdamH2IWnC4BbCbrVqv1UavVDgB0iZFqEHFSOlnOLpOfi6nX63fTyRNOfueSbP4JOfOLJE/hB1Px/R85SH6iAAAAAElFTkSuQmCC"

/***/ }),
/* 1321 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAItSURBVHjahVNNi9NQFD1J+pGmTVtSobSzcBgYcOvaD3DnWpkK/gxX4tKNv8mCi8JIFzIqyDgwIGilkRSaTj+StEma670Pg4NRPOFw3wvvnnfeu/dpRARN00oA6oCChv+DmAHnppIoOJjNZl8zIui6rpiDxWUuUVEgc7vROATwLRdARsBiscB+v0e5XEaWZdjtdiCO5UoF3W4XFf6vhPAbuYBmGDo6nQ7SNEWSJGqXjuOohDAMsVmv0bBt1Ewzd6h01Ci3NfM8uK6LzWYDs1pVOxuGgSqPr5ZLRCwkznTDKDhQcNiB7/tKIGUXAsuyMJlMlBMQKXe9Xq8oIAtePniBhFI4PQf94wM8ej5Aq9OWe1HCgnq9rtwWBZhxlmDw6imqrRomwy/4ce7CvtuUe5EkiUpMUBSQBfxNL6cggxD4K45AFEWI41hF27blTv7uQOcjkEb4NPqIim3i3sP76B53cfH2HFk5Q5hs4X74DutODQ5Xh0EFBxkLPH72BJVWFSaXa+7NYZRKePdmjKPbR4iDHYKrjXIkKJRR13TUrTra7Tb6/T58dw5/6cvZVUmtGw0EcYizs/efAbgQEJGEQ24W4nPSer0mz/NI5tyJFIURcRlpPB5TEAT0ejj0pLqSJ8wdyIsCvwdV52azKe2sLkzTNekFxdPT09ng5OQWJ4ZgXHdwM9pu1Y4soMjlIu464vPSarWi0Wh0AaAm668zf84mgO4/njP94pSI9vgDPwH52zMc04AbBwAAAABJRU5ErkJggg=="

/***/ }),
/* 1322 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1323 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1324 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIOSURBVHjahVPNaxNBFP/tR0xEbSQ0tioRCXopFhVUrP4D3r36DwiiN6EQb4I3vXkQVPBSodhjj4JnryHJUYpBWwzGdr9mZmfGN2/rNkkLvuXHW3bf72MejGethed5LQAXUJSH/5clDIn7LURR55Mk+ZJlwvsnQaLgx33h94NeqVRsu92+B6AUgFJ5sBdF8H2PEOx3n+HNCARhiDzPmRdOxObhIHCkgLsQArVaDUEhUgr4HAuTAhyZSAGsNdj89BY63sbZ+To+bHzGjWtLaCxcxP0HDxGGIc9qrcGmpYDvsevrV89xd3kRS5db2BpuY+v7DlauX8KdK2fw8kWHTSjpoSNwrPF4jOaxXax9XMePnyPspQKtheN4834dc3MncW5xvphpNp2AnT0Cx7t18yqajVPFYsklSSWyLIPKEuz8GrkEPFsa40AB9XodcZJBawMpFREVd5MTdA4hFM9Q8Q6mEwCc4PefGI36CWhjkKucokpoJaCpS6XLJc7ugBP4hChKkKYpLAkYkxNZEtmBEgldxj+8g/09DGl5AXJYmEJEuyMYjHYzSP80+v0+qtWqASCYaC0LrdCibBRFltytlNIqpaxzobOSjrG9Xo+7EJntPOusOXPilgK3MyFsFMdHCrjqdrv8b3X16QaAiuNNCbhhMU0s3R0Gg4F8/OTRuwkyY/Y6e4yjr7UmfKV5iYn6Czr8ZF2UcQBPAAAAAElFTkSuQmCC"

/***/ }),
/* 1325 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAG4SURBVHjalZO/LwRREMe/8+bd3omoJJQUGgoN/4BGh8KvRoFEp9EIUWuEKJX0olMKfwDViZyguShEREQkZ2X3du3Mvt3L5pCYZDJ5m/f9zLzve0txHIOI+gCM4H9RTbQP1i1Glo8aJx+fPgwR2FBSjYCTRFqRVolKyeJgoTwNIAfgveHj+e0DJcsosYFNko1JYcYoONWn6ywygG4ul1gBm+MemBn7F02wExsBgUQv0HaANZSIrXYve5528aweRyGkWtLKP0wgAhHrBPvnISxzAuBWd+cD3DrXtQCUABj93RazoxXszHTCGvWiVTn1h6n9CNJBN+3OdUGuVoI5NZGpaBxRYYIiYOmooYAoiqSzpIpJIC7ptwmc4yIWSL4ml5ksBtoB5MyRkcMwVABRuSBuKhhypPgHAFw3AQQOUMnF/tcXvOAJg72E+5urSwC1ggfkIDsTvkyguTX2qt/DZgT2H7E934vwpVrfW59dAXBbmACkCGycduh1sskME0ATQz0RDo/P6msrM1MAruMkChN4LE/Z6kNyris0BuQm4vrdzeXq4tRkEARVFbvIfucBAMP4O2oythPn8Q0pd4i4qwhC+gAAAABJRU5ErkJggg=="

/***/ }),
/* 1326 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI5SURBVHjahZPNaxNBGMaf2ZndfKJJ3LZpi62N4MkPEA2IWGyI4Em9ePVvkPauLdKC+m8UPHj04CmgqAHJrQHRS9FDUdsoKc1u9jPju9NszAbEGV5md/Z9fvO87+4yKSUYY6cBLOB4MPx/SIo90n4Vw41527bfOo7LYgRBoWa0o67/rrquy0qlchvACADfD/hRrwdNYxR8uGoq2ASAC4EgCJROjNlWyZxHIk6rEqrQjtcYoO5pJAAqgXMlHJ2shLGDOIa5YRhOADSmxARRQmU9CYnF6tlkCXi4ugVJszxjol6rYnFhDq1WCz3qy/kLF7G7u4dPn7/h534HrutFAAka8Wu8ttP+0oyuv/84QPP9O3ARYG1tFe32Dra3X+DM4jlcvlLFlFlUTqtXL9UJ3tBiB44XkngfQjDcvXcHoWRwHQf5fB7T0zOo1WvIZAx4fgiXcuMejAC64CiVSlQvx+9fXeSyOXS7XQguUCiUcHh4BIeA/b6lHFAJSUBARMMwYJ4ykUqn4Ps+1eoq0UAOYJomuRPqZMvqqR4kmti3LWi5LDLprEqenZ1Ho9EAJ2fl8hw6nQPIMIDdt6HrxgCAm3DANQ22ZSOgJN3QsXzjJp0MBD6wtHQW5BorK9dxq76MD803rwB8HAfIk8UCuM4J0lP2yS41LTv6sDzfUyVtbm2+frKxcV9KGSRKKJwgAItcWCp0oZNVgWJxCul0ivZ4+Gj98cvnT589ILEf6yZ/ZxbFP37rkKJF+d745h/oBeekPoesvQAAAABJRU5ErkJggg=="

/***/ }),
/* 1327 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAbsAAAG7ATrs4+IAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABJElEQVQYGQXBwW6MURgA0PPd+82k2oy0aaJVkUH3QsTC0iOIlUewsBAJEXZ2XkA8h1cgJEztGqlEG6JEw+gwrX+mnd852brSffRsaQ0IhAC/dp/cHkwS85duOUGoqqIIIUwP3TNJgKqqqqoIIbQggZQO/NA4tmrZIo5AQpF27Gv90zjlu5F1E5BQDX1VVDM9S9Z88VcBCcV7r6046byLFjV69qyAhOKdqZmuM9JPPY1jM5BQzBma6qs2nVXs6piChOKyjzr6OnrY91lfAxKKG17Z9tK60xgKC0YgIYSnntuw7aaZxqo/fu9pSAih646JD0LXnAvejh5fHxySALTCOWPfdAzG968OPkEChFaL1pHx6OG1wRaQOLj7YH4BADZevNkE+A8D7VtIv6P54QAAAABJRU5ErkJggg=="

/***/ }),
/* 1328 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1329 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIKSURBVHjahZO9ixNRFMXPm4/EqGilgigkE3aSSbB0G5EdRUEWbGxsLGz8FyRoIcsiCxaif8CChZ0WVmohuBbK2rkW+TDZsCmWBExhoVnm8/nuHR4jMegJj3uTue+c37yZCCklVpdPtUqlQ41ZmHTebu9v4f+SAMZq78iCkm2aV1t3b19+8/ojNl98SktHj0EIAf4IANzn1bZt6TjONQBswMN05cqlBg6CwNjcOY5UCmitnv4CEym06p6HOI65NzKgLODd+7ZqJEi+K7HiApYhUSmXOcSpVrkaamkZyMUEll1ApnxIGAbjm6ZJBrySJJkzmCPY+gZ8UGvn2U2M9vY4dbi7mxEoQ30L1l8Elo3rZ77CqVQ4cXD2Plx3Cf1+H7VaDb1ej0zIQC4kkGnC8MPhEIPBgIZ5M0lvFv86A9Mu8IDruqjX64zreR7TNBoN/k7SZ2DNEzgXUjLgdBL13W6X+06nQ0XfwkICekmopXRK1ARcm80mk5DoDBYSLF2MgSyVk3TyZDLBeDzm34rFYgogWPgU7EIRggiyVDJigul0Ct/3EUUh1h+uvwTwGdpACik1QW0lopY3arXbbUYPwwBraw9ebWw8uiWljHMDpYNZgOXzVZQOH1GJJzS+rvQok9a91vMnj5/eUeORNue/s3/u5I1ZGJd//Iq+9/d/jvR7zDXvEwDbaj7EH/oNvZHYnmKCTNAAAAAASUVORK5CYII="

/***/ }),
/* 1330 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJXSURBVHjapZPLaxNRFMa/O5m0k8TUVJq2CVi0WnygFdFScNG1m24E1+rShX+Aq9KlW/eC/gGiUrSUuvHVh4VE0RZtEVp8pjTGdGaSuW/vjOXSRV2IP/g4zHDOd885cIjWGv+Di78xOemsnIS7DODyCgQmJhT2wHZwb/Kad+TMsF/s6XZpRBFFEYRogHEOh+xHNpdBxstgY+PL9qfK694bt59QGBzs0HtooFrq63EFF+CCm2IBRgNI3jImDIz9+Tc0dLgrWyo/hMEaPL5z83p/uXycm2JhijkTycu0VUdk1NwOEIQh2u0IlDKMjo5evHvr6rjdQbmvZzCtIz8KAs2EIJJLSCHQkevPeilC6JYMW74P1mriZ01qKIlivvsCgKnEgDhu4GW8PHYhpcJmcwsph6DU15GXgkFyo51IHUR2BEF0gF0IKcGFQKutYNqAVtJIQWtlo1EAa8C5H8/PjGaeVcGYwPdaA+/er0OHFN9+1LFQ+YiF6ho2600opaEl8e0OKFMBZRwx96fncH74KB7NLqKQz2L2eQU5L43ltc9IuwRpR6GwrwQQ4tsOOGd+bBCr0QzxYHoexQN5dOU68XJpBV9rdXTnM/A6UlhdryX70QqB7SAIWm0ojvnKKq5cGsO504Px3IlGTg1ASZFISgmlFKQRFbJtO5idWyKx5djIMZw9cRCS03jbRtxqd7GQCq/erHZag5mnb3kYtE1i/JKGyTXJxhMpaMcFUmkT00mEiZRKvFj8IOwtEEIKha7cePyNBIm9sNckobfDaMrU/rLHRAz4B/RO4W91bYKpuQe2lQAAAABJRU5ErkJggg=="

/***/ }),
/* 1331 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGcSURBVHjadVO9SgNBGJz7iyY2noiF7xAIBItg5UsIFtZiLQRC0qW29hHs1XfwmqRREVIEsRBRDJcLubtcbnPuHKxmc8nAsHt738x+37e7RpZlqNfrpXa7feO67iGWYBiGGnMqjEajj263e9nr9RIbyFGp1WpnAMpKYFlWTtM0Sa79cT6fRwCuJGmgQ2Q2Hp5nCOMZzo9dbJfsggGzVtAMbNtGNDPxMxGYRHPEqYldx9GyINI0LRowgAb7WzYyfhvAgVuG4/yXocpLkqRowHppIGAh34epmvmalr4yUTCXM3j9FLh99GXqAlEicH33Bm/g6yXo0A2GXykSkcGUgWKRYbEAnt5DEEII1s5Rri/W9+C0sQdHbxqDV8U8xrUG7ANFykAJKSCVycZT0HZmIMmOk3EcK/J/waBwXXlZ1O5RFMH3fYzHY27A+TeAmdbElZumGYRhmM+r1SrnQafTOZHvIFIGBVDMZpEUBkGQG0vRtNlsHslxWChBYSkDrZTpdBq0Wq2GFA+0ePWcZXoXlUplBxvQ7/fvPc97wQp+ARX1ATqM0CTWAAAAAElFTkSuQmCC"

/***/ }),
/* 1332 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASlQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGx+Pj4+fn5VVVVV1dXYmJia2trcXFxcXJycnJyc3NzdXV1enp6fn5+gICAgoKCh4eHi4yMjY2NlJSUlpaWmJiYm5ubnZ2dn5+foqKipaWlra2trq6ur6+vr7CwsbGxs7OzuLi4u7u7vLy8xcXFycnJysrK0NDQ1NTU19fX29vb3d3d4ODg4+Pj4+Tk5OTk5ebm5ebn5+fn5+jo6Ojo6Onp6enp6erq6urq6+vr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7+/w7/Dw8PHx8fHx8fLy8vLy8vPz8/Pz8/P09PT09fX19vb29vf39/f3+Pj4+Pj5+fn5+fr6+vr6+/v7/Pz8/P39/f39/v7+l+mbngAAAA10Uk5TAAEfJCkuL1LJyuD+/jNlRNUAAADRSURBVBgZRcG9SsNQGIDh9/s5KYaWkkECToqgVhBxEgpegaNX6QV09AoEnTK5GFQKQtCKBBPPSUQcfB5BA/9icsJVa/ILyK6Tw6axLIgakQIc2snQbZmqxC8FBwnWBzWRuSo4rD/aKUdeDcvbQ1AYzjjvnh7Lz2p3HxRKEx1ms2bv+RhQMBPzTVN2xZ2Bgtd9JbnWelHfg0K+c3k6TBbh5GX5AA7Tb5P8rSle3zUmHFDtF3Nt1gerlHAQyLYtZbaKccTBVRT0ZohxBMGcPymNwA/6MUSYnbjWfgAAAABJRU5ErkJggg=="

/***/ }),
/* 1333 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJUSURBVHjalZPNSxRhHMc/M8+47uroqrW+rBq7GBmCEIJdKvBQbhBdEqIOde3QuWOnTkLUHxB0Cy8VdKoNoaKUansRSTSUNNc13dp129dxX+ZpGBxb2zr0gS8Pw/D78v3Obx5FSomiKBqg839krdmyBjY98Xh82ZQSVVVtWaZ7BDin/b5J14PAimOAKdnDj0SOFy+/0OKt58TxgzR4XChgo/CbXQMhVAA241nCT5fw+9uYW9hi+vUKDx7N4dUFN8fHEDvpHFRgN1ahUCIS2WRgoAfN7WJ1yyCnaQwOBekNdnHl6j3sikLUGNiud+6+42euyLNIlInJRTKKYGzsCIODfnx+L76e/dx/+NFO4aBVJ/i8+IP0fJJ1w0T36Vw6M0BfdxOVSoV63cO+jhbCz+e4cH641kABYrE0KVc9nq4WDvV3kjLhfTRNs0tFMRW2jApLX1N22toEQqAJrO51+DqaOTfSh3AJ1lIGudw28e8ZHr9Z5XB7k5229hsAvQe8qEDFcorlSmSlit7sptHSUsJACDg90o+UstYARWH8xllaXQqZbJGJDxs8+VYgowoS2yYbmSJdHrh88SiGYfx9C21tDdy6fpJ2SjQ2ukmpdcwUNabXsvSWMty+doxoNEokEpkHYgDOXQjk8/nl6t945tM6k2+jlqmHU8PdFHIJAoEAr6am4qHR0aA1lwdw+gTyhYK0oslisShLpZK0VidN05Tlclmm02k5Ozsrw+HwptfrbbVmcKRVV3BUzU5CksnkQigUGrKeCzhUVXADnfwbCaxJKSv8wS98GP6EnjebiAAAAABJRU5ErkJggg=="

/***/ }),
/* 1334 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAQJQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAqamprKyssLCwsbGx+Pj4+fn5Hmm7H2u+KXDCMXbEPH3HSIXGSYfJVo3JWpDOapvVcqDSd6TTeaTVfabSg6zahq3Vh6/ci7Hco8DeqMTlqcXkutHrx9fo0tLS0tzm09PT0+Dv19fX1+Hs2dnZ4+nu4+v15ufn6Onq6Oru6erq6e716+zs6+/y7e7u7u7u7/Dw8PDw8PHx8PT58fHx8fHy8fLy8vLy8vPz8/Pz8/P08/T09PT09fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+/v7+/z9/Pz8/P39/f39/v7+/u0dOgAAAA50Uk5TAAEfJCkuL1LJyuDg/v5oNf3zAAAAvElEQVQYGQXBzS5EQRSF0e/ss+uGBE0IMZA2MDY0l3hkiTdgZOABxAQh8de6tY5blbKWUQEAAGoz5WKeCkUAa1fNMPuO3x+tcm+CwJCp96P12dPHAQkGS+PX5PBt5UgwhHJ/u+S4NUhgkIZp5kPfTQQGDU6Xxc4xAIZIucR4JggwRDq531DQAYMkxeZJjMu/WzBEZOjx5fR5rrFhQIJlWXxOb1rDEADn7VXXtXYMRRLortXawdRLAKC1DvwDDa05BHc4v2UAAAAASUVORK5CYII="

/***/ }),
/* 1335 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAbsAAAG7ATrs4+IAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABJElEQVQYGQXBwW6MURgA0PPd+82k2oy0aaJVkUH3QsTC0iOIlUewsBAJEXZ2XkA8h1cgJEztGqlEG6JEw+gwrX+mnd852brSffRsaQ0IhAC/dp/cHkwS85duOUGoqqIIIUwP3TNJgKqqqqoIIbQggZQO/NA4tmrZIo5AQpF27Gv90zjlu5F1E5BQDX1VVDM9S9Z88VcBCcV7r6046byLFjV69qyAhOKdqZmuM9JPPY1jM5BQzBma6qs2nVXs6piChOKyjzr6OnrY91lfAxKKG17Z9tK60xgKC0YgIYSnntuw7aaZxqo/fu9pSAih646JD0LXnAvejh5fHxySALTCOWPfdAzG968OPkEChFaL1pHx6OG1wRaQOLj7YH4BADZevNkE+A8D7VtIv6P54QAAAABJRU5ErkJggg=="

/***/ }),
/* 1336 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH9SURBVDiNlZO/a5NBGMc/d/dGaYopKRhSqa0GQRxCAkHEgoOj4Oii4OQgxVEIlBQc6v/gprNFHHSpCDp0CYQrxR+IrbVR1CFKaF5Ij7f3vu+5mDNt4+AXjnu4u+dz93zvTjjnqNVqRxqNxoN8Pn+CIQkhfD+IAbrd7o+lpaV5rfVe8GcsW61WrwNjgwSlFEoppJRIKT1ECIG11gB3AQ/wGiQOt4MA55xfvw8QBAFBEKCU8v3Wzlu+9jYwyS4zE2c4d7yGUn/TpA+k9IBMJkMmk+Hjrzc81g+pFC8xd/IKK++e8WT9EUqpw4DBroPkIAiwcYqw4+TG8kxPnsJFR9n81sYxogQpJdvb2xSLRe/4TLbEnbk6uzuGF60VPnzZ4kbtJlLI0YBCocDs7OxBXwF4+fQ1967dZ0JMkKbpaA+G73pYm98/UcxNUzldwVqLtXY04F+ampxi/uotAKy1RFH0nyforvOqvQyAMYYwDP2c90AIQRRFtNtt/1iSJCGOY9TeMc7KC6yurmKtpdPp/ASiQ4BSqeRLSZIEYwzGGHq9HmmSo1Qp0Wq1wsXFxctaa7OvhGE550jTlDRNieOYMAwRQqC17tfr9fNa68+HShg+iXPOv3fnHHEc0+/3w4WFhYta64196wffuVwu385ms+MjXQTW1taeN5vN9wfHfwN8uM5mC1QR6wAAAABJRU5ErkJggg=="

/***/ }),
/* 1337 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI9SURBVDiNhZJPaxNRFMV/781M0rSTjgmVIG7irpuACG6bZT6B3fox3Lpy1U/ixoWCCEo33RQVRLT+K7ShLWlDSWsmmcy/966LJtOkXXjh8C7vvnc4996jRASllAuscBWK/4cAYxHJ3enF/fbzT4eeW2a1Uqa+6lNbXWEt8FHT1+d/R1wMxwyGI9I84c2zVhPozghIUiEzFscRvNjieBbHNSyVPOI0o+JBXtEMQs0kvZYyI1BWQKwhN4Yky5jECQrwXIcsN2R5QpwkGGMw1hStFgqstVgLSZbjxAkAaW5wtMJYIU5TojghSlKweaFATYfYHFxcHABora+gFFprlFILAFBK4XneAxE5LBRorZlE0cLj3Aqeo4uPswiCoMh1kShFo9Hg9dZT+t/fU6/X+XI45tvxhF+9hL2TmP2zlM8Ho0VCEQFohqORiIhMPm5J1v8hxhgJw1COe2eS57kYYwpYawVoisj1EBXw8t0ubrJO7/cJTzp3KbsujbU6eZ7jui5RKgyjjHu18sxM1y2gFG9/umx3q2zvO+z+ifF9H601pVIJgA9fz3nxap84jm9vYRxFByXPo9sbsrJcZi0oc3R0hOu6iAjGGPr9PrVajdPTs712e+OhiGR6voXLy0vuLAseMcPhkCAI8H2fSqVCGIa0Wi263W6/3d54LCLZvJEEpahWq8XuZ6e1liiK0Fqzs7PT39zcXBeR6KaVb5llfktKKQaDwc9Op/NIRCbz9dkMloDGXDcLHFOciIi5UeMfU4k2leDHXgkAAAAASUVORK5CYII="

/***/ }),
/* 1338 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJUSURBVHjalZPNSxRhHMc/M8+47uroqrW+rBq7GBmCEIJdKvBQbhBdEqIOde3QuWOnTkLUHxB0Cy8VdKoNoaKUansRSTSUNNc13dp129dxX+ZpGBxb2zr0gS8Pw/D78v3Obx5FSomiKBqg839krdmyBjY98Xh82ZQSVVVtWaZ7BDin/b5J14PAimOAKdnDj0SOFy+/0OKt58TxgzR4XChgo/CbXQMhVAA241nCT5fw+9uYW9hi+vUKDx7N4dUFN8fHEDvpHFRgN1ahUCIS2WRgoAfN7WJ1yyCnaQwOBekNdnHl6j3sikLUGNiud+6+42euyLNIlInJRTKKYGzsCIODfnx+L76e/dx/+NFO4aBVJ/i8+IP0fJJ1w0T36Vw6M0BfdxOVSoV63cO+jhbCz+e4cH641kABYrE0KVc9nq4WDvV3kjLhfTRNs0tFMRW2jApLX1N22toEQqAJrO51+DqaOTfSh3AJ1lIGudw28e8ZHr9Z5XB7k5229hsAvQe8qEDFcorlSmSlit7sptHSUsJACDg90o+UstYARWH8xllaXQqZbJGJDxs8+VYgowoS2yYbmSJdHrh88SiGYfx9C21tDdy6fpJ2SjQ2ukmpdcwUNabXsvSWMty+doxoNEokEpkHYgDOXQjk8/nl6t945tM6k2+jlqmHU8PdFHIJAoEAr6am4qHR0aA1lwdw+gTyhYK0oslisShLpZK0VidN05Tlclmm02k5Ozsrw+HwptfrbbVmcKRVV3BUzU5CksnkQigUGrKeCzhUVXADnfwbCaxJKSv8wS98GP6EnjebiAAAAABJRU5ErkJggg=="

/***/ }),
/* 1339 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1340 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJASURBVHjalZPNS1RRHIafe2a85pAW1BApooKrSg3biAmJVhTtiqlF0Kpa+Adku3a1cVOEQi2CWkrhCEmQtKhoY1DjBxrOkI6IOA3ZjM3M/Zgzp3uGmUmRCXrh5Qfnnve5L+fcayilMAyjBTjF/2nWy0b9ADpsWfZLx7E9mPCMhhaNnuyW3++npqbmClABYNs2mWwGIXz4fEKHKxae5+bnSae26evrLa6VJSjJEIYX/Btei8fJ5XIM37nL0yfPSP1KEYt913t2ASoN9Fs2NjaIr8Zpamrkwf0Rzp0fpL//DM3NzXR0nGBgcAAdFULsbaCpgUCAsbHnzHz+QufJY5i1flrbWgmHJ9hMJBgbHa3eQC8Gg0HqG/axnbWIrSZwVB3RaBxFLVNv3rGwsKz3VQfoaj0Xb3CgpQPDXOdI2yGunT6K5UiSaYeZNbcc3gugdNpJ2ySXzvNz28GVCr8wyNmSjOflpNSAKrdQajG7GMVX28iFnnbWkxkevl7h7WySrd8uBwN1ANUbGEKw8HGC4/1XycvDTH6NIKX0rLjU3cjW0nuy2euYpqn2nkHJKvmNqRcj9IZucra7i82tFLIAsU+v2C83i1cdiURmgMUKYOdBDg3dJpH4QfrDI9KuQb1PUCdcGoIm9x5PMj09vRoKhW4BS2gppQAu246jvC9POd50XVfl83lVKBSKM5VKqbm5eRUOh1e8f6ALMHROuwLIS1kJSim1NaA4LcsqjI+P69qd5XDZ5d+5vfjw31rUtZUndugP2eQffK7ObOgAAAAASUVORK5CYII="

/***/ }),
/* 1341 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHhSURBVHjalVM9aBRBGH3z7ewlkQsGCxObCJLCFBHBQrFJoyCkCJrrxMbCys7G3sbaQhvFwko4hbMQi01lE2PhJheihREPmygR5I79n93P4eN2vWM14IPHfDD7fmaYVcwMpdRJAOfwf9i22s9aRiuO4+RFmibWjCxhqYSwVBiH1hqu664BqAyQJAmCMACRA8chEdcIgcwlKgNFygodEBG+BQr3PxTwfzL6CWNhhnDnrIvL87pmQNWglIj7mcLVNzn8A8btJRcPlicxO6Vwcz3Bxg+uQuoNhgbP9xi/bOrLlSlcmHOgiLByagJPd1PMT2sxkAb/MtjrG2gCzs9pkEOg4flvLU2WwsMNHBp+JDOVe8K/gfDHQdJOzxBMAWzs55XQsMLdtwE2903NjCr9MOnG4gRmj9jKXojHOwlefclw/XUfT3ZihAY16JEGUntaE7y1o7j3LsLDrRgHUYHFYxrPrjRx8XiBMAzRaDS4fgcjLU40CY8uNau6eZ5jMBig1/sur9D3/fcAPoqQWcyu2ZfIURRxmqacZRkbY9gKhUEQcLfblbXT6XwFcMZSWe34JY5D2kiANZPZ87xeq9VaBdBli7EGJs9ryUVRyBrHcdFutzdHk0uWv/OCbB4KOfMnSR7Bb/Yd6mLTCyIGAAAAAElFTkSuQmCC"

/***/ }),
/* 1342 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASNQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEDQ0NCQkJEhISFhYWGhoaHh4ekpSSmZmYpKSizs7P8vPz9/f32dnZ7u/v7/Dw9PX1Fm4TFokPG3EZJJMcKpchMJogMLQLMYwuMjIyM5siOccLOjo6QaAxQqIxQ6E0Q8wUUFBQZ59eZ6JnZ6tnZ61naMdOcaNpespre9xSfd5Th8SHh8aHh8iHiOJckORlx8fHyMnJysrKy8vLy8zMzc3Nzs7O0NDQ0tLS09PT1NTU1tbW7O3t7e3t7e7u7/Dw8fLy8vLy9PT09fX19vb29vf39/f3+Pj4+fn5+fr6+vr6+vv7+/v7/Pz8/P39/f39/v7+////ChIH5QAAACB0Uk5TAAECFBUbKistMzU2Nzg5OTk6Ojo7O5Wvsf39/f7+/v7ev1oDAAAAzklEQVQYGQXBvUoDQRiG0eed+TYaw/qfLIKNCpZaaOM9eMmCjeANCOtfZWGRLBEZNZrsfOM5woIAACg5G8M66koC6a5fzgwucxje17EvZxfxFkPJteeDYO8kgcGWi/XTVTVn1woBUkqozIh8dAWDzTDiRwcsGMsxSDsvvfM0z3QCg+0N+9xnMBzRIAy0OD4pfiSKcCJrzWts46O11sbvt2WAcZ7kJjc5Vv7QE8BxCgU/n/R/iPo6oIC+usObacEgoIDw53YKiKqSQLD6BfgH3BZOxINxifwAAAAASUVORK5CYII="

/***/ }),
/* 1343 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJkSURBVHjapZPNS1RRGMafc2fGZkYdHRlnnCmtFDEzNFokFC3aRBuX7YtWLfoDWont2kbboP6BCKQPyY1EQRqWgRJSwUAFTo42c8/Mvefrnl5ucmxhi+gHDw9czvve533vPcxai/8hib8xN+dtnERyHcCVDWjMzkY4AJfg4dy19MjUpN9fyCdFKBCGIbTehVQKHutBtjODTDqDavVr8/PqcvHm3acChIc9iseG3pVLhaRWGkorKtaQgsOoNjWRkPL3s9HR47lsufIYhGvw5P6tGwOVyglFxZqKldTxm0W7jpDUaHLwVgtBEEIIienp6csP7lydcTuolArDKRv6IedWas2MMjBao6NzIJtOMCa2Tavt+5DtBna2jEVk0N+dPwdgPm7AvCRPZ9Ld+ANjItQa20h4DOVSR7fREkaR9lx4CN0ImlmOP9DGQFGCdhCBYsBGhhTB2sg5ibsRtFL+l2oDtZ0GtneayOe6UOjL4ftWHajWoKREX08GtR+7aHKOfFcGg5WS7xIIGfFioQdjw4cxv7iCibEhPF9aRcNvYXykjCOlXhT7umCtwfrmN5T7cwBjvkuglPSF9Mg16pRASYXRoyW8/fAJSoR4tLCMS+cn8GxpDTMXJ7FVb9Lis/sjcN4O0ilGTRnu3b4OrSVOjw9iaqyCyBicPTVErnHhzDAi2oEhBcoEboQXr1dY/OcpCRNLgLZNUvsyxhVrE+HV+81DrsHC4ppq8SD+9pGxoLN0mMEiAetRyESKPBU7yIUwePnmo3Z3gaL39uY6ZwAwxBgchLtNBrbZCuep9qe7TIzAP2AJEL8AZDp1QzBRM/MAAAAASUVORK5CYII="

/***/ }),
/* 1344 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAILSURBVHjahVO7jtNQEB3bCasURLsNK+3G2cVKIEaLlhIqJLRINNQ0/AOIFkSBlv0CPgBK/oAqEhJC1EmUB0WIidEmQUsRnMSveJiZ4AduONbRjO6dM3Puta0gIiiKUgEAokCB/wOJ56S1CrBBZblcfnJdT4lbUFOQh1ckT2OxWETDMB5QmjSAIAi1344DqqoQVaY0mUwmMJvN4NfFBVwul+GGacKV3V0Iw1B0haztn1S4t78H47ENtj2GMgksy4KbR0dw6/gYLm1tSaFGzQVpA7FM4n1xUK3qYBhX4dtwCPdPTmB7Z0f2hX9r1+t1roHKds9JXAVV2RzjeqMhuUJ5Rix7+SNIoa7rEt983oYI05fxsNKCggoJTNPkBii67BF+2LZ0Z9y9xuTGCA1yQuCYOIiRZrRxcHgodnNgUV6Y3EHqgPjdspKij183bL97BIPBABi9Xi9umNwBICKHOyvXxfl8jovFAlutFnqeh0EQcJ5EmortdhujKGLRPdYWsg5GoxHUajU5Tr/f50nxZPmgptOprJVKpYiWvX8cuOTAcRxcrVYyxfd95JvudDoyudlsymTPc/HFy+fv+Q1mHSBPHdKHU6/XgSAOYnS7XdA0DXzfg7Oz0w+nr14/JnGYdXCbp3m+L+elnKcyeaqQLjJ8+uzJW/6XWBMz/p112jggKhlCLl8Tv1C9Dxn8AVsQJOUGir9kAAAAAElFTkSuQmCC"

/***/ }),
/* 1345 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJLSURBVDiNlZJdS1RRFIaftffMGNMEOgppRJEFRZQg/oBCGCEsAxW987qLfkQJ9Ts0pIg0MOomQaELgzSQSdOsizHHr7JsBs+ZOWfOPrsLZyY/IuiFBWux2e/7rg+x1iIiZ4E2/g9pa+2XSLloKxa9Md/3EFGIgIggewly6GckEiEajfYAVQI8z8NxHZTSaK0QEcIwZG1tjY2NDR4Nj9Df30d7+/U94gpZJRElaK3J5XIMDw2RSnWQza7zdnqWVMc1urpu0dx8Dq313wmUCDs7O0xNTpOsb2R+fpHW1qukUu0kEokD7SilqgTVTERoaGjgydNnfP60THY1S21tHf19A2QyKwzef8jgvQdHHEh5C92u6455vk/njS6OJ04Qi8ZQWiMIJjQEJR+34DA5+RqlFFrrHmvt88h+B0opOrtuEtU1nGxqYnv7B9ZCsj5J5msWZ3f3gPqBFhBBifDyxStyuZ9829ri++YmpWKBzfV1auNRpt9M/VnvkRmUXSSTdSx+XMYteGQyqywsLGGMZWb2PblfuSPXVG0BEUQprrS0ENFRTFDi4uVLhBbcosepM+dpaDyN67rEYjF79A7K8XhkhJqaY8SiNehIBAFMaCiVfHzP4+6dAebm5maARQCstQDdnufZQqFgfd+3pVLJBkFg8/m8zefz1nEcm06nreM4dnx8PAO0VDZ4YIiHkUgkiMfjBEGAiDAxMbHS29t7G/hgy8pVB4ExVWVjjDXG2DAMrTHGFovFcHR09N1+5UpUDulC+fFfWASWqspl/AbEjyPHRj8c2gAAAABJRU5ErkJggg=="

/***/ }),
/* 1346 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1347 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIsSURBVHjahVNLaxNRFP7mcTOd5mVCJYibuOsmIIJbs8wvMFt/hltXrvpL3LhQEEHpJpuigojWWgPJkIY0Q5nESXIz7+uZm0yZtIgfHM7ce8933qMIIaAoig6giA0U/B+CZEXcSMcG99svPg+ZbqBiGqhXSqhVijiolqBsra/+LDFzV3DcJYLIx9vnrSYAK3MAPxAI4wSaJsA80oxEj7FXYPCCECYDIlOFs1CxDnCNzIGSCEAkMaI4hh+GWHu+jM50DWEUk/jwfB8xvcdJLDl5B0iShAREjqAROUVARE1ViCAoiwCc7rkfkHGEDFkTm85sNgBBVdWNKIrU9LYjBKkZYw+IO5QZZMQ15zvGEUVm2sZJHtVqFde8rZYRG40G3hw9g/3jA+r1Or4OV/h+scaviY/TsYf+NMCXwXLXYVoCoblYLkWK9acjEdo/BTVLLBYLcTGZiiiK5DkT6pdIOSlXR257Xr0/ge4fYnI+xtPOXRi6jsZBHeQAOn3zQMDlIe7VDBl7pwRQWu/OdBxbZRz3NZz89lAqlWRvCoUCUnz8doWXr/vwPO/2FFacDwqMwZq4KO4btIUGRqORjEw2cv62baNWq+Hycnrabj95SPehmi9hPp/jzr4AgwfXddNuyyxM0wT1A61WC5Zl2UR+nJLzi5SmgXK5nM0+03LBOOfy3Ov17G63e0hkfnOVd+afx7ZEOI5z1ul0HqWDAnCrB3sAGv/4ncVWxmQb4wb+AlOJNpXoLvSKAAAAAElFTkSuQmCC"

/***/ }),
/* 1348 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1349 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHFSURBVHjalZNPaxNBGMafmdmBUpoeepFS2kIp3vwDpVLw6ifQj6AfwO/gMRc/gngoCBGSi3orghhQD2GDttgVIiISGg8h2c3+zevsy04YNxJw4OHd9519fvMMywoighBiH8AR/m/5xht4VXMUx8nLNE0MTBqhhLJQ1prT8zxorR8AWACQJAnCKISUCkrJBeDd6C1uNG5ja33Lgnhul4QdSmGMbDYQCSUl959+v0ez27Q9658AKQQbF1KKq5Yary9fYRAGPFPVfDlBBVCV7LNWGmcPz/D84pT7egKvDnAlOIGHnc0d7DZ27cmrAaIGibKY97Y3tl3jMgAloFJlZkOYJ1yPrx2XdUUCJ0WBDM9+PsVnP8CXyx8QJwJ7m3v8HhHBXdJNIKpTH3+7h8b6Gt5cnWLw/SvPiqJAHMeIoghZltFyAifFwdp1vPjVxMnhHTy6+4TNk8kEw+GQE/Z6vY8Azt1I95MkodlsRmmacg2CgLrdLo1GI5pOp+T7PoVhSJ1OZwDgppEwXgdgjBZQRszznObzOdfxeEz9fp/a7fZAa33Lmv8C5EWxMJrILAPgau4+b7VaH9yTrezvfMibKxff+YJqn+EPI3z1tc0FQngAAAAASUVORK5CYII="

/***/ }),
/* 1350 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIFSURBVDiNlZPNahRBFIW/e6t7euJ0fnQRFzMGRIMuJDt3Ir6C+hI+gsFFBH0VERdCHkLcJyBuAgkxGUPMKKZ7evpnuq6LzE/GiQsPXIoqOOeec6tKzAwRuQts8H/YNbO9YLTZOD09/ejNUFVUFRGZKWCyqiqLcfwc2NOxnDfo9/v/bCciCExqjLEDnFMww5twdPgNMzDvaS40qYc1LnCsXL9B3GoRqM4L6OiwETo6nTZOlUYUUeQ5jUaDIAwpi4JG6FDn5gVEhOWVFYYejo66hGFAHC+SJgmtuEVZlpg32p0OC+HUgV52kOc5qooLAlwQkCQJZVmSnCeoKrfW1giCSc+/IoiAGc3QsX7nNnme02q1JuJmRlEUIA6RqyKo4s0Yejjc38fMaC40CcOQNEmJogaqyurqTaJIrhAAAueIQsf9e+vTq7viHVzGdBoiLC0toapkWTZDrqoKESHLMqqqYjDIDfBzt5CmKdfiZX70fnHa+4kf1kTNiLquOf99zlnvjHa7zfb29mdgZ8aBAGYGQJqmlHlBK47pp31EhO8nJzx5/Ih3H95/fbX58gVwAFPSs2wwsG63a2VZWlVVNhwOra5r895br9eznd1d23y99QV4CKiZXXBHAk+zwcAXRWFVVc0ImJkdH3f91pu3n4AHl8lmhoy+c2ekPD/mC/hR5gMb5xzhD8VIA0wa6pykAAAAAElFTkSuQmCC"

/***/ }),
/* 1351 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARdQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAvb29vLy8uLi4ubm5AHwAAIAAAIIAAIQAAIUAAIkAAIwAAY0AAo0BCpIFDpQHEJYIEZQQFpkOGZoRHJwOHJ0PH5wZIp0dJaITJaIUJqAZKaUVLKcXL6gdMKQpMKgeOa4eOq8fPawtQLMiSLYsT7wqWsIwYcU7d9NH09PT1tbW18/f2dnZ2tra29vb3b7+3r395ubm5+fn6Nj46Ojo6Onp6enp6tj66urq6+vr7Ozs7e3t7t7+7u7u7u/v7+/v8PDw8PHx8fHx8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+TjbjOwAAAAx0Uk5TAAEfJCkuL1La3Orq0wFb8QAAALFJREFUGBkFwclRw0AQQNHfPS3J9pg7N6pwFE6aMwWREAWL5UJoeuE9QScAAMDDmA4296VJxVj/1lCoyuGZ6a0XGFSlu2h6RoFBZQ0JTZdRYHCltWaqIsgLBs1v7D22c27PYKD3HpzIBy8Bg9Z0Qll0nhQMZGv7kLrp+H0EBVl6t/N8PKndwUCNQ+px/HzLa2Agq+47aZ9P7xEYyEVFJb/qzb0wUBGg9MO9QGgGAEQU8A8lp1dw/SsvKQAAAABJRU5ErkJggg=="

/***/ }),
/* 1352 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1353 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1354 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAACXBIWXMAADdcAAA3XAHLx6S5AAAACXZwQWcAAAAQAAAAEABcxq3DAAAABmJLR0T///////8JWPfcAAAHAUlEQVQYGQXBCXxMdwLA8d//vTeTmSF3TBxBEKkjbkktPhHl44yyjjg+rQZhtwkhq7SsKrpLKGppVT5Ns5+qVXccu4JsV234qHW1QqdyOBJJRJBjJpnM5L333+9XAAAAgHKpx9Eeu3p2D2gOWho4PXA/ka+KXp99lYi/WqkeVP0KzRxgjjOjgTDCCAf60Ze+wFWucRWsa6zvWtdD5y6dAzpnoEfucn4eqWNt2e3N9mZSWzyn+K/3zvjaAYA5Qdt6e+uLbUuhLLzMXva0V/yiTxf5UpccW6YGq1fV5QGT7YPsnewdzDeCzGB/8Dtia8DegGkBS/CZhcY/jD2g1CglymPQLNqP2n3wxrZ+6I0joH5K/cz6R3J9y+Xm6809ld+MQuNt84HvwuG6wxu/n5KSE5sRm9V7Tyla8OLglUGrwd7R7rA9tjfp541E47N+g333/fW+s9ZF7hR3YlMvVtRefrGlNpF/RldHX4wOgy4DuwyK6gMG+kk9Bx6NfjStfBjULat7UbcV+Lc4K56wwl5ky7els089oh1SF/hrHB86Uu3x9qYQQoyQRtDcw9yd3bngXetd4U2XnpgrMVdiPjFFYHpgduAc7vqH+Pr5bGZS4/rGkY0uMfnhNyXDH1bQ6u7mvuO+B961LR1bhoI73bPXUw1DggY3DE7FFhQbdDy4QKbZltmKbVHKXXeEe7tnoSny/tD4KO8H6akrqrtWVwgaOeKY+BeIVcIpBohk0VtcE/uVTpzmhChnXbtZgaUhA5TcCHeHRR1aKbDkajfVkVB57tnEymVgVpo3jb/D6J9HWkZ2haDrwTkh2WDEmG/LXSLDfGgWGYXMkvVyqlmqLFc2KQeVXPG1MlZJVN4EjZ/l9zIN5CbZLE9iKjnKL0o6UulPuFkPNefKN9/6Dl5cKD1c5IHG6Nqlj4KhLSNy85g4UD1yuP8g3Np3Mvd4HoTO6NpxqAOiDvUrS/wMwss7XY4ZCGp/NVyNQdKdINmASTCCP4FGLgukDjLZvGz0BfUbtVXLB0/K6+vPnkDtseKbp2PBW1B/6lkNmGv0uXIi1L6otdb4QJ/VcrG+EjrZjbCafHiZV1N4ahy0zG3YWJ0IQ9dNcmQASqiyyzYTzJ3GQuMayFC53JwOisjlS7ENxFRlhAgDJjCdbRD4QUhjRA04Y5zHIrtCRPuOQ7pPgbD4DqLTDfBucKfX3wE9rvWGuwKCzof2cjZA+y9D9ju/BrVS227ZAAFvOFzBg4ElhMqdIB4rSUo5iBzxQLwJCj3F+/wK4r4oUHsANbLK/CPY7wRVO5OgcTI5keVwo+RmxW0fPPjUFVG6HuQdI7DNA0aK7tc7wON3KzZVRUL1lucz6hZD5yV9F45dDcpYdbpmAN24zTRM8ZuIU86iM4oUsQU0hjBP5IAYLfaI8SB+J87hB+WW0iCOgD3OftlxBYKr22daL4DI1coCasBfbPmLdR0oOxS7ZQ2ETCHN9jfQ3zdKjRNgLbAdaDcHA8giEfSf2na3DTOPMp8KcUm+ZCB2DjFcw4GkCYBnXATxXCDeAhEBACJRLbNlAc0BI8KPAyuV76w50Hap7aUpwTpOLbUPBOItt8I3gXeXJ6mlCTxJzdtbz9HTu6p1j38KtE7ylfr+q8SZm8wKY5H4uO1q28k2G2g4ABXkfpkuB4MYpyxXl4F+SD+hj4ee2wfVjr0Kvb4aNHFsNrR9rse1TYWzHc/8cjoGQovDOkXkQpI2pmpMHP4Go6Gq4TJWt91zpvmsMfS5qya6KlPF1dnVzzXvmiXvRt7+vPce38VCAF+AwjM0VKAaHR+6WE4mq2miN+1wgzpUPazNoslSZi0PWIzf2sc61vacJrXEcs5qpclcaCaYrTTISl6KdVibdrqzm73GT45ujrccf1bHu167rrm+uB+RlpW2JG1m6ouoRVHzo6a7j8xomvF6RrWI15jKcIYDDjQ06kSreCnq5AYxVAwXI0Fmy+XSJdN4wHWWijRZJg/I/bTKHaZTRiPkf+Qp2Z1Qf7zf8JfKH6RNlpg71FLXblfWr6NcKVsGbhmxZd+cgtiOsV1j+1RY4mLjesVFiWznWudHzo3yI81oZ2iGBuYCmSJTeEcP1+/p98QtPVQP0YNARss+Ml4clzdksXzCQaPIcBn1oPWwTNEmgFKqJCvPZJGxwZhvrBIHShJKEkqGXDm6snbl05UV77U2Fzafbk56mjD7+OwfZ4eJo5OmTZo1aY6cmzw/eX7yAhSRvCQ5IzkDaj+p3VC7ITw4tX/qsNRhEzbaj9m/tX+rzJJfyX1yL8vECDFCjGKY+disMF1QlV1dWXUXV/t77Ta3/5h5thLb/2we+UH++fyC/COFd0U30VX0rOuQ0CshJqG3yM8UmWQif+/MdGY5s1ABAOP/PdEhNhz+xjgAAAAielRYdFNvZnR3YXJlAAB42isvL9fLzMsuTk4sSNXLL0oHADbYBlgQU8pcAAAAAElFTkSuQmCC"

/***/ }),
/* 1355 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGNSURBVHjalZM/S8NAGMafyyVVO4h/PkAXQRDp0g/hUqhov4HfxEHEwcVv4FyHDoJDF8FJl2qQKjiYRewgDiVtkiY537szuYRAxQce7uVyz+99Ey5MCAHGWANAC//TE2XfbGi1giC8iqKQYBYZEqoMuaIs27bhOM4hgByAMAzhT31YFgfnEsKqhpKqM+UAZjEKcgJY2jJgFUA6WAFYecGYCZMn68eITm/BqSZrODlrUp3gF8A1wOxxLuGl7tUJDCC3VPI8xnfzHF+NE0Q3r3L/bwArAh4/sHrWBtusY3pxVwxXAZAA7RywtLeN5fYOVjq7iN1PGV4wgZkiP8DX6rp2OJLxxAQLsosTTPYv1aGN6yPoEexSxyAIkCQJarWaqACKbB0wdZqmiJHC8zx1C4fD4QOAEaSEULADuoliNpuJKIrEfD4XcRwL6qbs+75wXVet/X7/HUBTsilb/ohGprs8RDBVDwYDr9vtdgC4glSaIE6SSmcaXa307mmv17svds6c/c5b6uFijcgvurPRD1/GvaGqd5YLAAAAAElFTkSuQmCC"

/***/ }),
/* 1356 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI4SURBVHjalZPNS1RRGMZ/59x7Z8ZBRyfUnKLCqKiICloFkYs+lkGGrWppLdoYraI/oCCohdUqqF2LbOFA2MaFVBvtQ2pAhTKRQc3JMSu9cz9Pdw7NONQU9Fwe3su55/fc9128QimFEGIbcIj/07uI/WAClOFSyXniug5CyMhEFtqU62+kaZpYlnUGqAbgOA6ra6tIaWAYUsN/GC39XpGkcihFBGoYKSVW5B9PH7N08yr+2HNen+tm6Nhhxu/dqh8ghSiD2v58nveXzjN1+zrzw89wZj+y8cRx/ZP8yxF9p6LqCOJXQPB5jtGLZ1F2CUOBUCbCasDNPmTrrp3MKEPfrRtgAK9uXMP1Ilii1Xmhj6nhEb56CbzpPMQTdUfQhwvDQ8y+zeGEgkBC25Eukk0ehmVgLy7iLxeJKYtaSdYTSCUtUo0JbJVgd+8VmvN5CncfRFCIbRr4ra2k2jN/GQEw4g2cvHMf0djMi77LCAVNJDHnFohnMjhL87RsaqVWZm0H4/39dB7sJPAkq9OfCIXPFykRto1wbZSpMJMmnuepuh2sLRWZeaNoSWcI9CMQSNocj0QizkJHO8HefWSz2TFgAkBSo82nuyk63/lWXCa2IU08nSK9pYPYnu14R7s49ShLwWoo9PT09AKTACilALod11W2bSs3quUWfd9XYRjqurKyonK5nBocHJyJduAAoJcw8nqAHwRVMAgC7ShA11KpFA4MDIwC+2tg7co679Af/60JYFJFokY/Ads9Cv6SdZ9yAAAAAElFTkSuQmCC"

/***/ }),
/* 1357 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIZSURBVHjalZNLixNBEMf/88q8TcbomkPMqisiIl7ESwTx5mkRYyCfwO+l96xXD4El513wYBBH8RLigi/WLOQxM+mesapxwuKAYEHRTXfX71+PGa0oCmiatgvgPv7P3lHsZ5N3HJwk6UGWpQTTycFQ5eD1r0jTNGFZ1nMAWwC+TyY4IUAqJILAR5qmYHtz8BGfDl/Ber8Db38JkXRxo9dDaVuAuNREuFohMgwYpMCqjSjCYfsLfmx28LjVQuq1YXavwvZtlKaXG8e2YVAw9yTPc5iWhSRJEO51cUsaOPZiXK8/wOvpXbiBW82A67UJkqzXMAkEAkWNBj1e4+2jfUT4hpetPdQBOnOqAF3XIaVEGIbIsgy1Wg06gRxSu3jnIUug7nI4qIRaFcDGqWsEcl0XQgj8Oj3Fs9sBnuy6yERO9yu4tgnfM6oAixQ59SxNVTmO46DZbGJ+doaTrz+xziQBCviOiWvtK1VALiVnwOrcCzXGzWZDpdgIL9ThU08sQ4fIc4ZXAWUW3AcO5GksFgsFvdzweCIKGnguf0hFBcAPpRA8Sm4gQximylkulyqr+XyuIOPx+BjAB9X8c1Ng54cczE3kLFhN7WezGTqdDuI4ng4GgxcA4vMA7n4JKgM5Ex7p9mw0Gk37/f5TAJOCDGx/1p6QsiDlgtQKSl05laVWqj8fDodHAO6xFseUXv7ON9Xlv41rjkvl0n4Dz1MLbRMR+D8AAAAASUVORK5CYII="

/***/ }),
/* 1358 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAS9QTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGx+Pj4+fn5bUwZcVModVUielsmgGEtgWItg2QwhGc4hmgzh2kzh2k0iGw6jXA6jnZTknZCk3dAlHdBlHdGl4FfoIVNoYtpoolWo45tqpd3rZZjr5+HsZ1zuKmVuayZvrGfw7CIxbmhx7ibz8a40Me309PT1M7D1NTU19fX29LB29vb4dzT5ufn6Onq6erq6uXa6uXe6ube6+fh6+zs7O3t7e7u7u7u7u/v7+/v7/Dw8PHx8e7q8fDr8fHx8fHy8fLy8u/r8vHv8vLy8vPz8/Pz8/P09PTy9PT09fX19vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+/r5+/v7/Pz7/Pz8/P39/f39/v7+vpHtaAAAAA10Uk5TAAEfJCkuL1LJyuD+/jNlRNUAAAC9SURBVBgZBcE9SgNRGIXh95z73YSAlWKlDlYKWutCXKU7sLJyDZYJRLCwyRiZAXHuj88jnAEAgFKD/DQlSxKwea4B3wetJFsJQ0B2dnIOJRIYInv8Om5bnntAgHz4jPB+2K0eIUDHvXpP49zODQbP7cxL8d/6BgjQdPqQd9vh9y4JAjRdJnxyKzoQ4Itmb6qWeXmFAN2v7ath+fhxqRiwgT6N1++1YhCA2uyXUjoBq2SD31opHUQKAKDWDvwDQTpCuu1EQ1gAAAAASUVORK5CYII="

/***/ }),
/* 1359 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1360 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH/SURBVHjahVMxT9tAFP58cUqYIFSKREKlJMgJQ8MEpaGqmCrBkqGCHbHBgITaAdY2SwdmEFunLlk7wJAhS9vwCxJSq1KAkApFRCSOsEmu7y6ye0Iu/awnn9+79933vpM1zjmWZiObt5Yz2bacn2ajW8X/wSkuqLeugzAeHt/49HF17vikjO18YQAN0DQN8qE15PrvWw8G+WgotARgSBAM6ggEGBZfGuhaXdZoXKFxeQGNMTBqUgmeTU3BMAwODFOSwP349uMMz98EcH5ex8ryMvxQLBaRSqXgQoeC7IJBSgJgjMFxHNzs72PQ66Hf6aBTLiNBzVQT43mHMiggBZKAZEuCUc4RurvDk3od4YkJkVMI/BXIDYxIbNvGU10HHxkBZmYg0KIc1WV4HjxU8CKn4XeziVKpBKTTUEFJqYLwuAKBXC4HPxQKBTECB8FXQfYtQzQa/aeJsVgMnPNHFIg7V0zsk4mOYiLBM9H3FqgoxpAmjpGJYTIxQib2pqdRq9XQarVgmuYAgO2nwGWXp12tr8PFNanIzs8jk8kgn//wBcCpSsBdBa/XgHg8jmq1Ksi86JAPPfLj3fudr4cHRxvkQ98j6A+4NOZVNg2dZCcSCSSTSajzVioVZ3dv9zM1b9Hee1fZ8HfORLbalh1rdx3zV9M6E3m3roRo+k77bSj4A5Vs5c6UXFjFAAAAAElFTkSuQmCC"

/***/ }),
/* 1361 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGsSURBVHjalVM9a8JQFD0vxsFBcXXRpYMI6qBgwdVVC62Cf6A/zbGD4OhuJYNi/ehQxIyCi5aGRJO8vvvIC7HpBz1wuEme59x7biLjnIMxVgBQw/+wENo3Pbip2bbzdD47wkwTBJlKgiquoes6ksnkA4DQAI7j4MP6gKYlkEhoUvw8mUiDZrMJFjGiawUN6qHGhFCKhYmGhOByuSTSc7qnSrwy0EMnxkh4xcvlAgKJI3HoLG5AP1CdqTLBVCoFznm0K9UfInyZ4P10QjqdRiaTwfF4VOd/G7DAYLFYoFqtSs5ms5g4FgFkEHA4HGI6naJer4NgGIacotvths3iO4hM0W63sd1u0e/3Qdjtduh0OnQud0KIRZAbDsZcrVYoFotht1KphPl8Dtu2YVkWvR3+/QSBgDK3Wq0wc7lcxmg0Qjabpa+QzAwAGzWBQigwTROFQgEEGjmXy2G/3yOfz2O9Xpu9Xu8RwGssgkKlUlFm0sDzPDQatxiPx6ZY5B2AF66WEdR71/M4ZXNdlx8OBy5E3Pd9WUV2fzAYzMibWpFGUf2db+Th79jQ2Kqzwictu7g8ywVsTwAAAABJRU5ErkJggg=="

/***/ }),
/* 1362 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1363 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAbsAAAG7ATrs4+IAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABJElEQVQYGQXBwW6MURgA0PPd+82k2oy0aaJVkUH3QsTC0iOIlUewsBAJEXZ2XkA8h1cgJEztGqlEG6JEw+gwrX+mnd852brSffRsaQ0IhAC/dp/cHkwS85duOUGoqqIIIUwP3TNJgKqqqqoIIbQggZQO/NA4tmrZIo5AQpF27Gv90zjlu5F1E5BQDX1VVDM9S9Z88VcBCcV7r6046byLFjV69qyAhOKdqZmuM9JPPY1jM5BQzBma6qs2nVXs6piChOKyjzr6OnrY91lfAxKKG17Z9tK60xgKC0YgIYSnntuw7aaZxqo/fu9pSAih646JD0LXnAvejh5fHxySALTCOWPfdAzG968OPkEChFaL1pHx6OG1wRaQOLj7YH4BADZevNkE+A8D7VtIv6P54QAAAABJRU5ErkJggg=="

/***/ }),
/* 1364 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAACXBIWXMAADdcAAA3XAHLx6S5AAAACXZwQWcAAAAQAAAAEABcxq3DAAAABmJLR0T///////8JWPfcAAAHAUlEQVQYGQXBCXxMdwLA8d//vTeTmSF3TBxBEKkjbkktPhHl44yyjjg+rQZhtwkhq7SsKrpLKGppVT5Ns5+qVXccu4JsV234qHW1QqdyOBJJRJBjJpnM5L333+9XAAAAgHKpx9Eeu3p2D2gOWho4PXA/ka+KXp99lYi/WqkeVP0KzRxgjjOjgTDCCAf60Ze+wFWucRWsa6zvWtdD5y6dAzpnoEfucn4eqWNt2e3N9mZSWzyn+K/3zvjaAYA5Qdt6e+uLbUuhLLzMXva0V/yiTxf5UpccW6YGq1fV5QGT7YPsnewdzDeCzGB/8Dtia8DegGkBS/CZhcY/jD2g1CglymPQLNqP2n3wxrZ+6I0joH5K/cz6R3J9y+Xm6809ld+MQuNt84HvwuG6wxu/n5KSE5sRm9V7Tyla8OLglUGrwd7R7rA9tjfp541E47N+g333/fW+s9ZF7hR3YlMvVtRefrGlNpF/RldHX4wOgy4DuwyK6gMG+kk9Bx6NfjStfBjULat7UbcV+Lc4K56wwl5ky7els089oh1SF/hrHB86Uu3x9qYQQoyQRtDcw9yd3bngXetd4U2XnpgrMVdiPjFFYHpgduAc7vqH+Pr5bGZS4/rGkY0uMfnhNyXDH1bQ6u7mvuO+B961LR1bhoI73bPXUw1DggY3DE7FFhQbdDy4QKbZltmKbVHKXXeEe7tnoSny/tD4KO8H6akrqrtWVwgaOeKY+BeIVcIpBohk0VtcE/uVTpzmhChnXbtZgaUhA5TcCHeHRR1aKbDkajfVkVB57tnEymVgVpo3jb/D6J9HWkZ2haDrwTkh2WDEmG/LXSLDfGgWGYXMkvVyqlmqLFc2KQeVXPG1MlZJVN4EjZ/l9zIN5CbZLE9iKjnKL0o6UulPuFkPNefKN9/6Dl5cKD1c5IHG6Nqlj4KhLSNy85g4UD1yuP8g3Np3Mvd4HoTO6NpxqAOiDvUrS/wMwss7XY4ZCGp/NVyNQdKdINmASTCCP4FGLgukDjLZvGz0BfUbtVXLB0/K6+vPnkDtseKbp2PBW1B/6lkNmGv0uXIi1L6otdb4QJ/VcrG+EjrZjbCafHiZV1N4ahy0zG3YWJ0IQ9dNcmQASqiyyzYTzJ3GQuMayFC53JwOisjlS7ENxFRlhAgDJjCdbRD4QUhjRA04Y5zHIrtCRPuOQ7pPgbD4DqLTDfBucKfX3wE9rvWGuwKCzof2cjZA+y9D9ju/BrVS227ZAAFvOFzBg4ElhMqdIB4rSUo5iBzxQLwJCj3F+/wK4r4oUHsANbLK/CPY7wRVO5OgcTI5keVwo+RmxW0fPPjUFVG6HuQdI7DNA0aK7tc7wON3KzZVRUL1lucz6hZD5yV9F45dDcpYdbpmAN24zTRM8ZuIU86iM4oUsQU0hjBP5IAYLfaI8SB+J87hB+WW0iCOgD3OftlxBYKr22daL4DI1coCasBfbPmLdR0oOxS7ZQ2ETCHN9jfQ3zdKjRNgLbAdaDcHA8giEfSf2na3DTOPMp8KcUm+ZCB2DjFcw4GkCYBnXATxXCDeAhEBACJRLbNlAc0BI8KPAyuV76w50Hap7aUpwTpOLbUPBOItt8I3gXeXJ6mlCTxJzdtbz9HTu6p1j38KtE7ylfr+q8SZm8wKY5H4uO1q28k2G2g4ABXkfpkuB4MYpyxXl4F+SD+hj4ee2wfVjr0Kvb4aNHFsNrR9rse1TYWzHc/8cjoGQovDOkXkQpI2pmpMHP4Go6Gq4TJWt91zpvmsMfS5qya6KlPF1dnVzzXvmiXvRt7+vPce38VCAF+AwjM0VKAaHR+6WE4mq2miN+1wgzpUPazNoslSZi0PWIzf2sc61vacJrXEcs5qpclcaCaYrTTISl6KdVibdrqzm73GT45ujrccf1bHu167rrm+uB+RlpW2JG1m6ouoRVHzo6a7j8xomvF6RrWI15jKcIYDDjQ06kSreCnq5AYxVAwXI0Fmy+XSJdN4wHWWijRZJg/I/bTKHaZTRiPkf+Qp2Z1Qf7zf8JfKH6RNlpg71FLXblfWr6NcKVsGbhmxZd+cgtiOsV1j+1RY4mLjesVFiWznWudHzo3yI81oZ2iGBuYCmSJTeEcP1+/p98QtPVQP0YNARss+Ml4clzdksXzCQaPIcBn1oPWwTNEmgFKqJCvPZJGxwZhvrBIHShJKEkqGXDm6snbl05UV77U2Fzafbk56mjD7+OwfZ4eJo5OmTZo1aY6cmzw/eX7yAhSRvCQ5IzkDaj+p3VC7ITw4tX/qsNRhEzbaj9m/tX+rzJJfyX1yL8vECDFCjGKY+disMF1QlV1dWXUXV/t77Ta3/5h5thLb/2we+UH++fyC/COFd0U30VX0rOuQ0CshJqG3yM8UmWQif+/MdGY5s1ABAOP/PdEhNhz+xjgAAAAielRYdFNvZnR3YXJlAAB42isvL9fLzMsuTk4sSNXLL0oHADbYBlgQU8pcAAAAAElFTkSuQmCC"

/***/ }),
/* 1365 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIoSURBVHjahVK/a1NRFP7O+9mYdHFRO5jfWSt0EHFQg9AKzv4B4uIQFwloJ4shCJ3E0a2bix2loiBRqGspIUOwqTSknTJIaF7er+N5N+blkQ5+vO/dc++533fOeQkxM949oPtegFsQMKDhPyAgNHXs1z7xFwMRrOXqkxs3XzIFII0TFDd9vodaQzkjvN3dbwCYGmgC0s+RetQE2SmQew5nty7niASxGYmZ3JR4KoNARSx5w/KhXcpg8uGpbADTDoCECCKS0pCkPCZm0OJABOT+gWH7sB82oC0RdNuEZqUAKwPYGZC1DFrKqH3IQLID1u0Q4efn0EwD/G0LZKZVVdINtUow70I3AYaC+hVyuVy13W5/HTsOdF2Pvgk0IrXSv5hiqnM2DOOuaFsGplCJ/skJ8vk8TgcDLKJYLMb3kjAwd0BOxFHVyWQCd30dp0GAgdDc3kapVIrFsvKigUr+Pj5GUS66rourq6voDYe4s7Oj8t1uFzNUKhVcNBAWCoVoXtXBFTG4LCOJmepmBmtvL+7kwgi9Xg/lclmJfmxs4PDgALfF7JqY9X0fvLKC4dkZ0ul0CMBVOmZGNputOo7Do9GIx+MxiwF7nse+73Or1eJJvc6HjQaHYajym5svorl00cZ/JIbg19ERFqC6+S4j9NfWIEWw9frVx2bzzWMRB8kO7nlSLVk5CAJFqarY6XTc2rPaewBmpJmR1IvoOoCIlCAW9r7wJzO7SOAvxV4NY0W9AGoAAAAASUVORK5CYII="

/***/ }),
/* 1366 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIfSURBVHjadVPbahNRFF2ZTJpkkhRHG6KieAOrTVJDgqI+iuA3+AXisxAIecxH+AVS8E0shUqUailEMAk+eBnFtFJtCjbpXHOfHM9sOjIm6YLFhnNmr7X3nn18jDHkcrm5YrH4VJbls/DA5/O5keii3W7vlUqlx9VqdSACBCmTyTwEEHYT/H4/URAEh3TmcjgcdgE84SQBLyhpglMCTtUu/hMQRdEhJQEMpmWg2+1AkiJYOBWnOwej0QguhKNILq6Aph/ie0PhpQ4oWdM1vNvagGWZCAQCZDApQIc8mVwP1TYyyzlytW0b8YU4ktdT2Nx667ZzfAU/d7exeHUJ+/tNbGy+wa/fuyi/XsfpxBnohsGpwwvRK2CPbYy5oxSW8FX5jNu37tJds7lH4lIoTPcQMLsC2x7BL4gwDJ36DgVDUJQvmAsGYZom+oMBFwo4v3G2QCw6D1VXEYvNIxqJYnXtBSI8tg4OsP5qDalkGp1OB/1+f2YLNOHz5y7gQ/U97t974AyLhnjp4hVy7fV6aLVadD4l4C7JcuoG6h+rWHn+DIl4AuPxmEpfupaEpmlkpKrqHwBUBm1VNps9wfe7w10YdyTyUlmj8YPt7GwzRVFYvV5nXICVy2WNf3/ZyXMoYAokSk6yfJKGpus6Vccfj5XP52/y2JhqwdvKkborRqtrWZZeKBTu8ORv8ODfc06n048kZ2+PQa1We1mpVD5hAn8BtfILCn/ReMkAAAAASUVORK5CYII="

/***/ }),
/* 1367 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH2SURBVHjahVNNixpBFKz5ysHjBtTsju7iyR8gmIAiGIT8myw5BPa85D94zM1LIEdBUC85mJuIIHoQDRt32YgHd3U+9aVfk56Mk0NqKLrp7ldd9WZGIyJommYDYDI0/B8keE9ESxOQsPf7/TfX9TQlIUQhH16R87+jZVlUKBTeAYgEEASh8fT8DF3XBPUTagkBwzQRhiEYZtz2r8dHnF+cY7vdotvtIpPJYL1e41U2i1qtFgnoYlTQISEti+ILGIYhWa1W8bZeR6PRwGAwgB8Eak+ePRwOJw6gCesPD/fI5/N4eXYmrROAF5Yl9nRp2fgTh/eSEaStXC4nx9lshuFwCNu2YZomrzHV7UwWoH8i/Ly7k+qdTgflchl1EaFUKkW3Mo7HI7RED5QCLq+upF2G67rKanRru91Gs9kEg3tw6kDwx3IpiyqVCnq9HlqtFiaTCdLpNKbTqXSUSqVUBEgQyShvHNcl8fpot9uR4zjk+z4FQUCclSlupH6/T6vVikQMLqoT0amDxWLB6lGMeH+Wwl02m8Vms8F8Pj8C8NRbiCA+T8iGsUiC3JNisYgg8HH76fYLgO/xCK9dz6PRaJS0z9al5fF4TK7r0M3Nx68ALK5jRgJ82EsUqmKmaGJ4/eH9Z1WsqH7nHIBLjhsjEvOD4ICIfMTwGx15JfXk0r2EAAAAAElFTkSuQmCC"

/***/ }),
/* 1368 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1369 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARRQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGxra2t+Pj4+fn5YmJiaGhofn5+gYGBhISEhYWFi4uLjIyMkJCQkZGRlJSUlpaWl5eXmJiYmpubm5ubpqamrK2tra2ttbW1uLi4urq6u7u7vLy8v7+/xMTExsbGx8fHyMnJzMzMzc7Oz8/P1NTU1tfX19fX29vb3d3d4eHh4+Pj5ubm5ufn6Ojo6Onq6erq6urq6+zs7O3t7e7u7u7u7u/v7+/v7/Dw8PHx8fHx8fHy8fLy8vLy8vPz8/Pz8/P08/T09PT09fX19fb29vb29/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+/v7/Pz8/P39/f39/v7+jmD+jgAAAA50Uk5TAAEfJCkuL1LJyuDh/v5p95fEAAAAwUlEQVR42kWNuQ4BURiF/20WGSGxFxoKlXgRL+sJdApvIDqMQiaxTMZIuNf479zC6c6XsyBQAH8ZKxAsCyakitTHKwWQ58SItz4iKFTAfPxSVd4rWjDUjMrBLIzmw6dwnUDqDUXixvQZYQ1I2gGHEkAXySckYdZZ7CB4wM1z+dHnFighB2QyK5So9Ruq+B2ieb03voJpcjaPXZLjx7oKXMzpGoeHdLy3tk6MIkS2WbY2pnJAyP3T1jqvRyzgZa16+AGTeTwCGChJ6wAAAABJRU5ErkJggg=="

/***/ }),
/* 1370 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJPSURBVHjahZPNTxNBGIef3S1SF2pLPySxQdBGYgE1IoGDR2M4eOYEMZjgwb8CDkQP/gEavXghnrwYNYiJAdMSJIVYog0JhrQEIdSEtsqy3W674/KxpFg/nuSXmcnkfWYyk1cSQiBJkgto4ACJ/yMAza4tuzggnM1m05YQyLK8H1t6LIAz7u97GhvbgIzMISWzzD84EIGTI1zOvqLsnazwJr7BdCLLl9Udgj43Po+L+/eihIJecCT26Hhc1SfcfrDJzJJBfZ0f1R0ij0KklCT+8CX+0wG6BwfxhsNIsozD0exz2mRyqRGdIHmziYLppavVRWZ6kvLTx+RGR5lpbyc5MoLyJ4G2W+JqREZVVa5FBP7yRxLzcYbOCC74fHQCPZZFaGICPZmseQNQVD4tznKuKcvC3AmQFdwUyHz9wLOwH5HLccuW68EgnYVCrUAvGgg1Qs4EfOc5dTZDXcccmzsGHc+3UEyTWbvYSKcJrK/XCoInfyK5VIq+ElLkFT9OLEB5nrf2jZaHJa4vykRja0SFINrXByCOCbq7wgz1xHmx9g6PNEeovkh9xYv13YOBwevmHNoVLzeHxwm0tOAgV3/jk7EbvB+/yyXFh2ZprLSusBpYxTAMou7L3Bl7RENvL4nEQgrYAEAIAdCWz+dFsVgUpVJJmKYpyuWyqFQqwrIsoeu6SKVSQtM0MTU1tQWoe3V2jm4gkCSqcXrAFmALsWXEYrHswMDARbtwt+YRpaqiag67le3t7eX+/v5ue61ThdPObqD5L+0sDvNNCFHhN34Bka3+W4hm/zsAAAAASUVORK5CYII="

/***/ }),
/* 1371 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE/SURBVDiNlZO9TsMwFIXPuU77GizMLH0QJOhjlqFz3wCWKgxlYICxc2UaJ765DImbn7pIWLqSo/h8/nyd0MxA8g7ACv8bpZl9Fv3DqqrCS10HkAISIAl2E3CWLIoCi8XiGcAFgBAC/I+HiINzcgFMql9LDsgLgEI45yAiXZGgyCScglmAkEO4L5IdaHYcEckY9ACXwiOLBEnr8kfIGWTCt3vQAziD5Had3AgGQteHkckt7bzB2CKjnOZmdttgcm2zsKqiaRqoKpbLpV0BOLKYl6ridDrheDxCRLDf798AHMZKTyEEO5/PVte1NU1jMUZTVVNV895bWZbmvbftdvsF4AEAzQzDF5HpMkmYGWKMIIndbve9Xq8fAbxbakYyiKpXO7dta6pqVVW1m83mdbxzKva/833/8q9xAPBhs2v4Bd6fqCXHlDWSAAAAAElFTkSuQmCC"

/***/ }),
/* 1372 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHaSURBVDiNlZPPalNBFMa/78wdKMV00Y2U0gpS3PkHSqXg1ieoj6AP4Du4zMZHEBcFIUKyUXdFEAPqIiRoi71CRESCcRHSm/t37nGRm5ubGAoOHDjD8P3OjxmGqgqS1wDs4/9WV1V9r9jsR1H8MklikAISIAlOG3Ap6XkerLUPAJQAxHGMYBJAxMAYKQHvhm9xs3YHm+ubJYicI2XWUAhjpmERgRGBMQaf/rxHvV0v98aY1QAhISLzMgYiAisWr89foR/4kAIgIisMCoApatZbY3Hy8ATPz45Li6qBtwyoFkVgxcP2xjZ2ajvl5EsBXIJM0ggksXVlayH4DwDk9B4qJiQRZDFI4uDqQQlYbVCxcEjx7OdTfO76+HL+Azwkdjd2AQCqumAwv04SLKY+/nYftfU1vPl9jP73ryAJ5xyiKMJkMkGapiVl0aCwuL52Ay9+1XG4dxeP7j2Bcw7j8RiDwQAigk6n8xHAaVXpKI5jDcNQkyTRMAzV931tt9s6HA714uJCu92uBkGgrVarD+AWAKpqBVAEkyTRNE01yzLN81yzLNPRaKS9Xk+bzWbfWnt7Fl4AZM6VQeecOuc0z3N1zmkURXmj0fhQnTwrFt95rzi8bJ0CONOlZ/gLI3z1teVW3isAAAAASUVORK5CYII="

/***/ }),
/* 1373 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGuSURBVHjajZC7jtNAFEDPeB62Q9hsxKZYaKEDIfEFIKhooKGCjm+ACtHS8AkU8B80+wc0gChYIS2sKEjYDUvs+DGXMZYjohiW08291vGZUSKCmlx5cd7NHmZZxvf0Ely+z6nk80ey9+S5aU/+4vWbt3j89Bn/w6u9z7x8vX8XaAV8e3f09v2Ie7dvUE+uMbj6gLL2FJXQ4UwUzp6Guiqx5WIXwNDyZntn987BdMlWPCYdTbgwtHyZLelQCkY2YlG0kh/Tw4NOsMJXFTqK8NL8Dc6djTnJazpsqIilFVhr2RT4Gq01LizzCrYSTekjRKBBgEGYVTUY6zYFIoIJBbFtx0UNO6Finq0qwl6FSgk1PQKQUBA1BX9MYJjoIBM6EgOm7woRYIwOmW5NGxuF84L33YMqrIt7BL/zHcM0WRMoJSRKIR58cwbcpqDN2h6POZO2yzV5EECoEAFUEPS8gdWGNEkYxDF9aNUIQgmCtX0FxhCJkMaOHlbXIUhsX4E2mjxfNA/5d8HqW7spQEXky5xlUXIaSuk1waeT+RHZz2Oms2M+fNznXxR1xSLLvgL8As6OlA5LBOeGAAAAAElFTkSuQmCC"

/***/ }),
/* 1374 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1375 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHlSURBVHjalZNNaxNRFIafczOTqbGKGBSLH5EgFRFti7/ESv0H4saVILh2696dO0GEiGQf+gMUJGigQU3xgyChLZjGTiZ3Pq53JmRICCl44OUsLs/De+FeMcYgIhXgDv83nyz7zQFI4SAYvdV6hIiywUaykG5mx3EcXNe9B+QCRqMRR/4RShUoFFQKzweAsXwyuUCUWLBgBYokhJ9vDggTQVkZAm5JsXr/HKIWCJQIzuc+bJTpvNqncnclk5lISGz8vYjms9/ceHQe76JHzjFda71Msa2zNiIFTKgsPN7eSY/LmxW6L7/mDeYEaV1zs8Qp33DY0SQWNFpI9LhJsaS4/nTtGIFSiJVcfXyJ8HWLOBBiLZAI7glFeRUcL4PnBaSCSayk8nyDvRcdxAjOkuSwiCxoMN3C7uJpl8qTFQ7f/ZqBgcUNZAznWb6yzN8zgrT2ieOYIAjwfZ8wDM38OxgnhxMtHHwRomEC62cZDAb0er3sFTabzQ/AzoyAKfjP9i67H5dQHtx6eAGtNd1ul2q1SqPR+LG1tfUAaANgjAHYHGlthsOh0XanFaMoMkmSZLvf75tWq2Xq9fp3+wfWAEm5NLkgiuMctPfNYgXZtndParXae+D2BJ5k8p2vZYfHzw7QNnaYmn8cy+7TvjE1nwAAAABJRU5ErkJggg=="

/***/ }),
/* 1376 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIXSURBVHjahZNLaBNRFIbnPiYzERULg1MfqUaDFItUrNI0uHLhquBGYhERESELKa5SGTcxi1hEYhYiXbpwI7aIS3GhVIlCcSO4VltsfNSirdaMmcftn3BnzDRIDnwc5r+cn5+55xIhhNKtbt66QdEI8K/mr0UGIgZdTBjaTuCAJRh5TZ2CsDLHR+63mxeLxVgul1MVlBz4DBJgCIZqhwHBQTozbMlPUSgUGslkMjF5e/IAzChMXOjvQQoc7TCgjAnXca+PZNKDgWZZ1gfmKgf1LfohmWQZzQZHkKIvYqByPqfp2mPHcaYCTaB8RhaF641WKpW4lL8AE+zfmKBeffnqDOPs+3D62Gh44ChLRBF7bGEnpLIMesC+iAFj1G8lUdVpQkhfoPu+X1co6WGuv1VKNtDBtqgBZS0DSugmpFkIk2l0txDkLyGxT1LaATywyCMGnHkySfXF7Ot3yr8Ig1SIN/mJ/Fep9IJV8LFlMH7lciqux0+Yprk9O3aaPH82Gw6XSqVdqqZs9lza3BGBP6+h94MF8JafO3/2lGEYM2t/1jjn6reHD2bC1SyXywaN0b2Kz+5Z1sQvKQ+BH+AJrrTOG43GeK1W4xDq4GQwnJ3OsoHfA6tYpmrbOqfQDPAUw/NNjVy8dOGwafaOraz8fHT3ztTcf96BKt+BDuYxbHc+pu4PycNgqHUY4N45WgywthUXwA/6RgRqHe2RyRs8KROMAAAAAElFTkSuQmCC"

/***/ }),
/* 1377 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ2SURBVHjalVNNbxJRFD3DQIcWQTSmaAsCFtNotVW7URfq2g0JTU1q3Nf6E5q46R+oTVwa/QXsRCXd2thITNpBpRgpLWH4KJ/DR1IG5HnfhI4LjIln5ua+zM0978y57wmMMQiC4AUwj/+DTL0/zSDw5kqlGq7V6jCZTJyQskBZX1OA8Cc7HHbY7acWABgEqNdVZDJZmM2iTlKrVdBsNfWmM86zGB8/r3/nEEXKAxgEvGixmNFsqshmMxAtItqtNtSGis7xMazWMdy5fRcu1wWDiMNYkWRqbiBfVCBJI1CyCjqdDrSOhp2dXci7Ml6/eYVCIccJhhUwBtr5EIw/VH+6vEJSRXQ0DTklh7W1NcRiMfDi+vqLYQXFYgHSqBX9fh/BYBCfPsdQJVP30weIRKO4d/8BnE4n0ul9JJPJYQWKkkVP69K/juoSrZKE+NdvJLkAgQnwT/nhIIJyqYTkj71hBX3WhyzLOCbDKEjuFygk3e44jcvT0zQ6JzStB5Nohkn4iweTE5PI5fPY3t7GrZvzsNLvTLjdGLPZkEh8RzweR+9Xj6bgwszM1WECr9evzzvyNoKVZyu4PnsDpWIR58ZdaKgqNjejqFPmzVNTATZEwA9HKLRABu2ReTV8eP8OlwIBSCMS8uSDx+PBNWp+svQYW1sfEwB4wAQDAnw+H1ZXn2Nubg5eWvNjDHovennzFbzc2ECr1SzQlJYA6E6eXKbQ0VEpXK3W9aPMkUqlkD48IMNEuMkLu92GcrmUe7S4+LDb7cqMAI5BDrXbbVYuV1i1WmN0qZiqqhQN1mg0GV20fjgc3gEwe7LpIAwFAb34byS47MHOBn4DJuskth+yP6MAAAAASUVORK5CYII="

/***/ }),
/* 1378 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1379 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGcSURBVHjadVO9SgNBGJz7iyY2noiF7xAIBItg5UsIFtZiLQRC0qW29hHs1XfwmqRREVIEsRBRDJcLubtcbnPuHKxmc8nAsHt738x+37e7RpZlqNfrpXa7feO67iGWYBiGGnMqjEajj263e9nr9RIbyFGp1WpnAMpKYFlWTtM0Sa79cT6fRwCuJGmgQ2Q2Hp5nCOMZzo9dbJfsggGzVtAMbNtGNDPxMxGYRHPEqYldx9GyINI0LRowgAb7WzYyfhvAgVuG4/yXocpLkqRowHppIGAh34epmvmalr4yUTCXM3j9FLh99GXqAlEicH33Bm/g6yXo0A2GXykSkcGUgWKRYbEAnt5DEEII1s5Rri/W9+C0sQdHbxqDV8U8xrUG7ANFykAJKSCVycZT0HZmIMmOk3EcK/J/waBwXXlZ1O5RFMH3fYzHY27A+TeAmdbElZumGYRhmM+r1SrnQafTOZHvIFIGBVDMZpEUBkGQG0vRtNlsHslxWChBYSkDrZTpdBq0Wq2GFA+0ePWcZXoXlUplBxvQ7/fvPc97wQp+ARX1ATqM0CTWAAAAAElFTkSuQmCC"

/***/ }),
/* 1380 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIlSURBVDiNhZM9a1RBFIafc+Z+7M1miQRDQEMUSSEkRBsrwYA2gp1FSmtL/QH+LiuLQMoIVgpRUMEobIwBN+69d+fjWCS5u4mFBw4DM8w7z/vOjJgZIpIBfU5L+H8Z8MfMQnY2cX04HH5JZqgqqoqIXGigG1WVwfz8TeDruQDJ4NOPCT9/Jxb6jlFtJINeofhgJBPqNjJXOh7eXehQzgXEOWWxGLG4JKgq1waCXiJABCygqp3VjkBVaXWR5QVDRcjzHFHFUiLPc0KMWEpkWYY61xHoNBfh3eeGuq7pVRUhBOrxmMlkQoyRejymLEu89zjVfwWcUx5tOKqq4vj4GFWlLMuOLoTA4eEhTdNcuI6pBRHapkF6PWIIOOeYTCYURYGZMTc3R57nOOemmcwSiCrzgwGqSr/fJ8ZIWZbdiapKSokQuhAvEgiQZxlaFBRFgYgQQqAsS7Isw3tPVVXEGDGz88c0FUCEF0+f034ccHVzno07Szx79ZJer4f3nrZtaZrTkLNsum1qQYShWyH6mlvfVvi1vo6ZUdc1eZ6TZRknJyd479nbe/se+H5RAIhrj7Er+zT3F3m9v4GZkec5bdtydHTE6uoqBwcHw62tB/fMzM9aMETwa5u09RZv1p6QGXjvSSkBkFJid3d3uL29fdvMxp2Hs0Bu1E1jbdua99689xZjtJSSee9tNBrZzs7OB6AyM2Zbzr5zD1iecTNbdtYHZhYvrfEXhKsQ74yO8jgAAAAASUVORK5CYII="

/***/ }),
/* 1381 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHySURBVHjalVPNbtNAGBzv+ifFbho4lINDJQQVHBA3bgjxCsBL8AhUHIoEr4IQB6Q8BOLeSIhLpVZtGqpQg4jt/DjJLpNPsZIQc2CkT/vt2jM74y9xrLVwHOcugIf4P7TJPXalJbnX630yFFNKSVF0rYhylefbUfSC7bHCAsYCeZ7jXxAhYFFLuGWjNbWspZCDztk5W26NQW2rhtl0Bu1qNK7fQBSGcJXaFFCLQ9/TaDZjaO79IMB4NILv+3A9D8V4LM+V1hsCYnGn0cDUAJ1OF57nIoq2kaUpwihEURSwzBk3m9jylg7UqoMRb+NKu65UmqZCTPupnN/a24PLc6IiAh3Mg9docf/ObRELmbcUn497zAhwNN1WReBLHKNEODs5EQI/IKN4jJEhCHwR2t29yd6pEJhvtEZAB/fv7YOo/B38DbUyaNTrdbllMBiskSeTiaw8l344HFkAZmMKWZbhWrSDH8kv9JKfMJx/UAswm83Q/93HVXKFOI7RarW+ADhac0BzkpsQoWI05vgi5Fku4t8vL/H0yWO8//jh2+uDVy8BnAJL0vPBcGi73a7l2Cxt2ul0anmzNcbYJEnsUbttD94cfgXwiKXIE24p8IwChmMS8qrAHBcXXXP49t1nAA9Kclnl37m5UHZQDbPIfGoJrOAPxUgDTP+TrTYAAAAASUVORK5CYII="

/***/ }),
/* 1382 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIiSURBVHjahVNPaxNxEH37J9mmtNZYlZRsk00U6UHQTxAR/BIKXrx4kHpSPHmQfggP3itKP4AHr4LoNSRYsEr+mmUtManN/suOsxM23TQHZ3n8dmfmvXk7yypEBEVRtgEUMQsF/w9idJnb1sFhmua1b4eHHz3XUxIJFoVccUbuz049k6HcysodADMBTdOUwA+08ckJVFXB66Mufpy6qF3dRCFnIATw/e8EAz/Ay50KdF2nxKmatv3bcWIxPLlh4dbmBo4mLm7mL+Be4TIeXy/BXM3FdXEnkRKQZGFrSxqyuoZHFROVtVXst39hPI0k/8AqpgWURQG2btsDadBUlUV03GdCZX0NBz0bxLmNbGbJgT63wsliscg7UAX8LGeJXezo6zBmRIbklxxIod/rxUSBwoRPx39whZd4+9JFIY2CcGH6ggC4sF0qSWPE4h8GDvJGFvmsAYe33/d87Ld6iQs6/wpS6LTbsCoVvO/08fPUw5fjEQKKEEbEJxCCpI+IsCzAKJfLYv9h2UyWlWA+5Hzo6VdotVqoVquYTqfJFBGKogidTgdhGErNMIwIgL/kwLIsmWLbtjSORiP5Mo1GQ3ZTq9XgeR729l69BfCVAZnE1u+6rkv1ep0mkwk5jkPdbpfG4zENh0NiZ/Pa8xfP3sWDYx7jTCAIQ/J9n4IgILZK7EDA9gXNZtPffbr7BkAm5iRIfucSgBhKCjj3HDI+c7+PVPwDrpQBxvFHQPMAAAAASUVORK5CYII="

/***/ }),
/* 1383 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJKSURBVHjalZNLa1NBGIafc+bk3pwW02iUlKAWKi20tV0oLkT6A4xoFooLUXf+An+A/0O6VBDBdXZuuqnSemnAGEwFa7FVczvXnDNODja2RATf4WNmFt/D+73DaFJKNE0rAcv8nzZVb92ASMuO4z7zPFfBdFUMoFEx2DkqwzCIxWI3gCEA13XpWT10XUCg0XzyHT8AIXSkBvGMYLqSQ/Ej8IGGAE3XiL1tw/kc9dV9StcKaEIg+xqhD9a3PpuPdpl5MEmy+AegDw8D6mKOWM0bXBTQQHqqWZX0dRKZBMXrJXYef1Qu9VGA5/noQoe5NKYladVdQtUo+0JBdAh04imNmYcLSMnoCE9XXyiAQMQM8vNZJp83Sd2/jAxh7X0Vy/YQRkh/zcf3vFHApXNzWI6FEAY/Oj95OfWaO1MLfGo2+FB/x5WlC5wpTkUB2o49OsK4OU4ilgAZkp/IUcgdRxgaXt/DTBlk00na3Q4A6VT67yFODCDxJGEYUMjm2f68TdAPuHhsNnpe13NoddpIKUcBtuNHGQwhviQeNzDNMUTJZDxrEgQh7U6LVrclRzKwLBsZJshkksSbDnvrquIb9Lpdlk4t4Hs+oVoyLdj4uvUK2Bo6GEJsB0c5ycwXWLm7TKPWYKfxBYFgr7XP7Moiu85e8+btW/eA2hHA2FgagJ5yYttelHbxZJH8ZB7f9/BEQLVabVYqlTLwRiodBijrKcxs5vczuZETXWqcPXEa0zTlTmd3vVwuX/V9f1MeSvHgO08D8/xbW0DtcDPALzcI+hCzvi1fAAAAAElFTkSuQmCC"

/***/ }),
/* 1384 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1385 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1386 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1387 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIqSURBVHjadZM/aBNRHMe/d5emXqq2AWNLUkJQVJRG8ocOHXTQ1UXQoaCLi4ijEAgZMzuIg6jgpNBZN80iCGYwSWtJGwVPMTRSzJ+7C0l6f1/fe3Ah9uL3+PKGu+/nvr937wRCCLLZbLBQKDwLh8NRTEgQBG/l9tTtdlvFYvFBpVIxAwBXKJVKrQOQvYAkSdyiKDJ7EG7LskYAHlFzwKRY6Kh9ANba0z+AQCDAzEM9cx97mgKIAuLz5xA7kRiPYdu2D8DewsMQXXxobuDL/kdYxIHp2tQO1pav487KQxwLyDBNE+PcRHUO+PTnrS9sERv1zle82XnpjeMD8BsmGeJz6z0PE4hIR69gNXYVRJCQWDiPX7qC3kEXnnwj7I1+U4jN33whkma1+Ya1D3rYbm/ilLyI3fY2Vk6mpwNmZ0Lj2pqhwgXhl2r0YLsuFE2B4IjsM04HxOfP0nUWlqOj0dnBq62nfJxkJIPk6ePYaLxGLBiHYRjTAXJwDrcu3sPzzce8iaL9gE3bzEgymv0mbi/fxUAdsk30A7xDci1xA5IUxIutJ+iM2rSBi5+qgptL67hELkPXdaiq+hcAr8E3KZPJLNDzPbQsWthxuA3TILutOqkpFdL41iC1Wo1omkZKpZJGnz/DcswipojfdAmW5CgiwUX09T5vR3+eQS6XW6Wr4hthchSP7sHY0R0MBno+n1+j4e+Y0Ph3TiaT90Oh0Bz+o2q1+q5cLtdxRIeRYyZgcovz1AAAAABJRU5ErkJggg=="

/***/ }),
/* 1388 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1389 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIwSURBVHjahZPNaxNBGMafmd1NshqKFKyH2iQkxCRNhV7MTRpFQQRBvAhFih78FyQIXuzHURS8ehA8VXvVHgTNwVKvKpvE0EMLqQkGFNqk7uc4vNvNltjgszvMMrzPM795d5cJIXC9dKai67HpvuXW1jdbH/F/CQA/pHdbhZSmKFcrD+5efvf2E1683vD0+BgYY6CLAbzXg4jHAVoDNE0T6XT6GgAKoGLI+8qlaRyYJmfYR9ww4I6Pw0kkEK9WYWez4Ht7MGdmoKgqHMchFO4DUTDefzDAIDCxtoZItws3mURsawuuDPFSKWitFsZWV8EZQyCOUESgahH8mp+HMzmJ2O4uIjs7cAoFMnuZDP4sLBCx67rkURGKCO6VhI84OwvGOaypKSjRKIQ8ggdAkWbO+eAI6j8EqobnG6fgiRDzxtkvUI+wFiSRDBB0hGEC4floc+f8wZlAPp+HFM3MJxjdA0X2YEhkGjJSD0YQePRc/e6Pry9vo9Fo0FqtVgsCR/dA0zTcTHxDLpejHWvJR/LMeTIXi0UYhhEEiGPfQvaiQ19cvV6nwmDndruNTqdDa7quewDM4wkiUTAA+UKBCGQQdb3b7aJcLsO2LSwuL74B8HkQIJgQAUFuzoYUGQ9F2IqiwLJMrKwsrS89Xr4jhHDCAKmDvonShQz0EyfljqcD/MHcbDbdysPKq6dPnt2X5XYQTr9z+fzErb7lpH737J/N1v42AHLRHD67ADZlvYUj+gsRdO6FmVFCqAAAAABJRU5ErkJggg=="

/***/ }),
/* 1390 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAInSURBVDiNldFPSxtBGMfx78zmz+4mGjWiiQSLJD0J7cGTb6PFl9B3Zw/efQXtKaLEQw8tVPwTIdnF/TO7M/v0oKa1kUIfGJiHmd9nHhglIiil3gAH/F+dici32lNzkOfmc1EYlNIoBUop1OMG9VeyVqtRr9c/AgsAYwxJmqC1h+fpBfBiPd1V6je5AJRWpGlKHEVUVQVAf2eHqqqIo4her0ez2QQgTdMFoBcbpWg2mwRhiPY8avU6ZVmigM3NTZIkIYpjrLWvT3BxcUEUx+RZhrWWoijY2tri5vaWt6MR/X6f25sbVlZWXgf29vaYzefYsqTRaCAiNH2f4XBIVVVkWbaYZGNjYxm4v7/n59UVntZ0u13iOGZ9fZ0kSQiCgLIsCYKA6XRKEATLQJplxFH0/EXM53Our6/p9/sYYxgMBqRpyv7+Pt1udxkYDYf0trcB8H0fay1aa7TWGGNoNBr4vk+n08EYswz4QcD47Izk4YF2u41zDoAwDNFaE4Yh0+mU8XjM7u6uLAHTuzvarRad1VXa7TZFUWCModVq4ZxDKYW1lsFgwGQy+QpMXgBaa9bW1uh0OmityfMcpRSe5xHHMbPZjMPDQ05PT38cHR19Ai4BEBGAD6YoJMsyKYpCyrIUa61UVSXWWomiSM7Pz+Xk5OR7vV5/DygRecw+A9a5RdA5J845qapKnHOS53l1fHz8BXj3Z1hEHhul1Ojp8F81AS7l6cXn+gWuqSMkXg4/LgAAAABJRU5ErkJggg=="

/***/ }),
/* 1391 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1392 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1393 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIOSURBVHjahVPNaxNBFP/tR0xEbSQ0tioRCXopFhVUrP4D3r36DwiiN6EQb4I3vXkQVPBSodhjj4JnryHJUYpBWwzGdr9mZmfGN2/rNkkLvuXHW3bf72MejGethed5LQAXUJSH/5clDIn7LURR55Mk+ZJlwvsnQaLgx33h94NeqVRsu92+B6AUgFJ5sBdF8H2PEOx3n+HNCARhiDzPmRdOxObhIHCkgLsQArVaDUEhUgr4HAuTAhyZSAGsNdj89BY63sbZ+To+bHzGjWtLaCxcxP0HDxGGIc9qrcGmpYDvsevrV89xd3kRS5db2BpuY+v7DlauX8KdK2fw8kWHTSjpoSNwrPF4jOaxXax9XMePnyPspQKtheN4834dc3MncW5xvphpNp2AnT0Cx7t18yqajVPFYsklSSWyLIPKEuz8GrkEPFsa40AB9XodcZJBawMpFREVd5MTdA4hFM9Q8Q6mEwCc4PefGI36CWhjkKucokpoJaCpS6XLJc7ugBP4hChKkKYpLAkYkxNZEtmBEgldxj+8g/09DGl5AXJYmEJEuyMYjHYzSP80+v0+qtWqASCYaC0LrdCibBRFltytlNIqpaxzobOSjrG9Xo+7EJntPOusOXPilgK3MyFsFMdHCrjqdrv8b3X16QaAiuNNCbhhMU0s3R0Gg4F8/OTRuwkyY/Y6e4yjr7UmfKV5iYn6Czr8ZF2UcQBPAAAAAElFTkSuQmCC"

/***/ }),
/* 1394 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1395 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHSSURBVHjalZOxjtpQEEWvbej4Bwoi0UUI/wJ9JGKipaanhzZbQc0/UJCCnoYCik0DQSiR1hGkAkQFyMY24MnMW731LpYiZaSreRjdc2ce2CAiGIaRB2Dj/+oHe90MXsoOgvBbFIUMM1kQqBKk3zkzmQyy2exnAK8AhGEIz/dgmhYsyxRzWpBS8AQG/dA02GgxwHyRGLgnZmVMAUx9YIMYEzFsvV7D4rNIwVk6JAUQ6na7xW/XRcTrHI9H1BwHtzhWpv1+D/f5GefzOb2CBtQfHlCpVDAej9FoNOSZghSLRcznc9i2jclkgk6nk54giiIcDgd8fXxEoVDAdDpVkHa7jc1mg9VqhW63i1KpBNd104Dlcql+iS+1GnK5HC6XC8rlMmazGfL5PDzPQ7Vahe/7qNfreC0iklbt9XrUarWIdyQGEU9E1+tVqd/vU7PZpDiO6Xa7qS4e9iaAgE2e71MQBMrME4hZG9RnTqfT6SQBsQYkl6hlGCkxBGzEbreTf6Gs9R3Az3crMFXGT6WLeH9aLBaqD4fDNYCPkiVeE7o46a4kXQUwTJ1Ho9Efx3E+AVgQ17sJrpx0l6wvTe4lHgwGT2+TtfTr/EF9+e+SnX/pZF1/AYBpU7AE+M0UAAAAAElFTkSuQmCC"

/***/ }),
/* 1396 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGNSURBVHjalZM/S8NAGMafyyVVO4h/PkAXQRDp0g/hUqhov4HfxEHEwcVv4FyHDoJDF8FJl2qQKjiYRewgDiVtkiY537szuYRAxQce7uVyz+99Ey5MCAHGWANAC//TE2XfbGi1giC8iqKQYBYZEqoMuaIs27bhOM4hgByAMAzhT31YFgfnEsKqhpKqM+UAZjEKcgJY2jJgFUA6WAFYecGYCZMn68eITm/BqSZrODlrUp3gF8A1wOxxLuGl7tUJDCC3VPI8xnfzHF+NE0Q3r3L/bwArAh4/sHrWBtusY3pxVwxXAZAA7RywtLeN5fYOVjq7iN1PGV4wgZkiP8DX6rp2OJLxxAQLsosTTPYv1aGN6yPoEexSxyAIkCQJarWaqACKbB0wdZqmiJHC8zx1C4fD4QOAEaSEULADuoliNpuJKIrEfD4XcRwL6qbs+75wXVet/X7/HUBTsilb/ohGprs8RDBVDwYDr9vtdgC4glSaIE6SSmcaXa307mmv17svds6c/c5b6uFijcgvurPRD1/GvaGqd5YLAAAAAElFTkSuQmCC"

/***/ }),
/* 1397 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKySURBVHjadVNNTxNhEJ7tbj9IKa3Fgj0QEoGDxBiKiRdNaP0D6gFNPZn0wtELgWh6UC6lB4MJHCCGg5wkxmjClYSIIcGEaiKQHgTKR1ug9COt0HbbXZznNVs94CSTebP7zjPzPDOvdH5+ThfZ1NRUsLu7O4zzzs5OZGho6C1dYCb6x4aHh68Y55aWlseBQOAavLm5OXjRHVijg5mZmRcDAwPPE4nEd1mWa52dnTe9Xq8Z/1KpVH17e/urzWazd3R0XF9aWoqGQqFnDYBwOHxpcHAw097eLptMJoLDNE0TUVEUwj3DDw8Ptfn5ec/Y2Fi+0cHc3Nw3v9/fZ7FYqFwuAwRRJHDlRgTo8vLyj2AweEOAG1wqlUqpWq3S2dkZSZKEqo3KtVpNeL1eJ13X6fT09JeRJzudzmA8Hn/V1dV1p6mpSWYgkXR8fKyura192tvbi1ut1qt2u11BAXTF97wrKyv+xcVFXTGbzU97e3tvoXWgIxlxY2PjA49OqD87O/uutbX1odFdW1ub4na7766urroUbktSVZVgrD4AwBMgVdblvsPheOJyufqPjo6QjOpULBYFJS7ulKLR6CO+FOLxBDwej8ImAEqlUnVhYUFlug4kQmqJJPwz9EAnaUzB2LwvPp/vNnMlcMUUJl5PUH+/jzKZDDQhi8VKyYMk8WLhG4DyxiYiwQYw8IRls1mmo1MqnaJ8IU+qWqNYLEYm2YQpEGhDKwEwMjJyuaenp481AC/BkykRJpI7yVKpWKIKq69rOscK8baKOygoAMbHx0/W19dfcuva1tZWbHNz83OhUKiDXRkguRwdJJPEYlI6nRbJ/P/vWzBsdHTUHYlEcjhPT09/3N/fv7e7m/gjn4TV1iEiBESEiD//+5wnJycfMJ03/KRdvCN1do05gxZEhmNX3v8GgT6U/aHkDv0AAAAASUVORK5CYII="

/***/ }),
/* 1398 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1399 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1400 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHVSURBVHjalZNBTxNBGIafmbJSy9aKtFpcEhrlogc9GA/osZfKySB/wLs/x7/A0ZuHXvwHmBhqqEYIDbaYrlraWqTsbnfsTLabxY0kvsmTSXa+95t35ssKpRRCiFXgEf+n3al3fw5Am13XfRMqhZRSo5teAIhXvZ+37RfAviSS5wdcJtMIZsSaJSCTkVMyutCc8HPnlJPdM5AwEQIFOE8LFO/ndE26gTG2f5G5usBg6DM6DqlsORAIwohv71x670+593KZmeSFiKvXp6sk2Dsjd2cBfEmo8YTh5noZZI5e/TDdIH685XmKjwv03v6YGeMmhILKxiKljbukEwBSCINVybLyxKa3/dEYla+/S66tQL4cTSXVQEqDjLj1rIQsFRnt9LXBmO3IrPf/kSAuMOvaK4ffhwPy1nls1lJKpadAwpzU0vMy/Q8nZAvzqNs2k8mESKkxphgdC/rNcxYrVxgvWXSPjszp7Xb7C9BMXSH5OAev9/i8/ZXsjYDSuk2n08FxHFqt1vdqtboFfEreZ7M/GKjxeKw8z1O+76tpVBWGoQqCQA2HQ9VoNFS9Xncty3oICO3TzP2VwJBU9LfS7XYParXaJtBQU8W+qGANeMDlaurYxpzQH5HnxisKY17dAAAAAElFTkSuQmCC"

/***/ }),
/* 1401 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJASURBVHjalZPNS1RRHIafe2a85pAW1BApooKrSg3biAmJVhTtiqlF0Kpa+Adku3a1cVOEQi2CWkrhCEmQtKhoY1DjBxrOkI6IOA3ZjM3M/Zgzp3uGmUmRCXrh5Qfnnve5L+fcayilMAyjBTjF/2nWy0b9ADpsWfZLx7E9mPCMhhaNnuyW3++npqbmClABYNs2mWwGIXz4fEKHKxae5+bnSae26evrLa6VJSjJEIYX/Btei8fJ5XIM37nL0yfPSP1KEYt913t2ASoN9Fs2NjaIr8Zpamrkwf0Rzp0fpL//DM3NzXR0nGBgcAAdFULsbaCpgUCAsbHnzHz+QufJY5i1flrbWgmHJ9hMJBgbHa3eQC8Gg0HqG/axnbWIrSZwVB3RaBxFLVNv3rGwsKz3VQfoaj0Xb3CgpQPDXOdI2yGunT6K5UiSaYeZNbcc3gugdNpJ2ySXzvNz28GVCr8wyNmSjOflpNSAKrdQajG7GMVX28iFnnbWkxkevl7h7WySrd8uBwN1ANUbGEKw8HGC4/1XycvDTH6NIKX0rLjU3cjW0nuy2euYpqn2nkHJKvmNqRcj9IZucra7i82tFLIAsU+v2C83i1cdiURmgMUKYOdBDg3dJpH4QfrDI9KuQb1PUCdcGoIm9x5PMj09vRoKhW4BS2gppQAu246jvC9POd50XVfl83lVKBSKM5VKqbm5eRUOh1e8f6ALMHROuwLIS1kJSim1NaA4LcsqjI+P69qd5XDZ5d+5vfjw31rUtZUndugP2eQffK7ObOgAAAAASUVORK5CYII="

/***/ }),
/* 1402 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1403 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ2SURBVHjalVNNbxJRFD3DQIcWQTSmaAsCFtNotVW7URfq2g0JTU1q3Nf6E5q46R+oTVwa/QXsRCXd2thITNpBpRgpLWH4KJ/DR1IG5HnfhI4LjIln5ua+zM0978y57wmMMQiC4AUwj/+DTL0/zSDw5kqlGq7V6jCZTJyQskBZX1OA8Cc7HHbY7acWABgEqNdVZDJZmM2iTlKrVdBsNfWmM86zGB8/r3/nEEXKAxgEvGixmNFsqshmMxAtItqtNtSGis7xMazWMdy5fRcu1wWDiMNYkWRqbiBfVCBJI1CyCjqdDrSOhp2dXci7Ml6/eYVCIccJhhUwBtr5EIw/VH+6vEJSRXQ0DTklh7W1NcRiMfDi+vqLYQXFYgHSqBX9fh/BYBCfPsdQJVP30weIRKO4d/8BnE4n0ul9JJPJYQWKkkVP69K/juoSrZKE+NdvJLkAgQnwT/nhIIJyqYTkj71hBX3WhyzLOCbDKEjuFygk3e44jcvT0zQ6JzStB5Nohkn4iweTE5PI5fPY3t7GrZvzsNLvTLjdGLPZkEh8RzweR+9Xj6bgwszM1WECr9evzzvyNoKVZyu4PnsDpWIR58ZdaKgqNjejqFPmzVNTATZEwA9HKLRABu2ReTV8eP8OlwIBSCMS8uSDx+PBNWp+svQYW1sfEwB4wAQDAnw+H1ZXn2Nubg5eWvNjDHovennzFbzc2ECr1SzQlJYA6E6eXKbQ0VEpXK3W9aPMkUqlkD48IMNEuMkLu92GcrmUe7S4+LDb7cqMAI5BDrXbbVYuV1i1WmN0qZiqqhQN1mg0GV20fjgc3gEwe7LpIAwFAb34byS47MHOBn4DJuskth+yP6MAAAAASUVORK5CYII="

/***/ }),
/* 1404 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1405 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1406 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIxSURBVHjahVFLaxNRFP7u3JvJzKStdinEPEEETSYLF4IK6kK6KOYHuFKzcVE3LoVgKShi910IglYQXHVjEUShrgSti5BE0EVDKlUUQUU087yeO+kMQyp4hm/OfZzvO4/LpJRg5fkWZDgHZYy+/5kEkdia3HryUIDMyvL5xslzTcswoetZBEyD55OSyIDzDBgXu14HFzo0IbC2cv07gLGAxhjTzRlcu3ACpqlDp4Abq5vjYCIqMCGiPSexDNcQm4gXurUPK+sf4IYabl48hqy1nzIRmUiCc3CNkScoLxhi0xIBIlw5b0fEb79CZHMzsEwLU0YGuSzHlEkwxpg2VF7JUhWEv/XcLO5tfKEWDDzY+IxpIlFiVW6UlY+zJ2eQ8EAWvUKpVDrb6/We/xmNwClC0zQ1l8iz3TVLgc6lEOI0cV8mM1AXn3Z2UCgUcP/Zu4jYmjsKEo7u0nG2be8dIujiIJFV1stEJK+ggmOBtJeJQFr54/Y2SuUy+v1+Uu5kdmX1eh17BQjFYjHqt1arqVlMiiSeev93C8PhEJVKBd1uNyHmD9tovmCQX7eQNzxYOkfbRgjAnaxAvUY8pETgp89wiL3FgVkXt5rH4TgOlpYWHwF4nRaQBAwGA1SrVXQ6naTcaiWP4ptlNI6cgjNqoL3Yfnzn9vIlaiNI+qHez3i+L13XlZ7nSZ/WQRBE8J0f8ulqS77fXA8Wri7cBZBRnBgs+jFWAKDAUsDE3ie8ongXKfsLncO3mua/bLgAAAAASUVORK5CYII="

/***/ }),
/* 1407 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAQJQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAqamprKyssLCwsbGx+Pj4+fn5Hmm7H2u+KXDCMXbEPH3HSIXGSYfJVo3JWpDOapvVcqDSd6TTeaTVfabSg6zahq3Vh6/ci7Hco8DeqMTlqcXkutHrx9fo0tLS0tzm09PT0+Dv19fX1+Hs2dnZ4+nu4+v15ufn6Onq6Oru6erq6e716+zs6+/y7e7u7u7u7/Dw8PDw8PHx8PT58fHx8fHy8fLy8vLy8vPz8/Pz8/P08/T09PT09fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+/v7+/z9/Pz8/P39/f39/v7+/u0dOgAAAA50Uk5TAAEfJCkuL1LJyuDg/v5oNf3zAAAAvElEQVQYGQXBzS5EQRSF0e/ss+uGBE0IMZA2MDY0l3hkiTdgZOABxAQh8de6tY5blbKWUQEAAGoz5WKeCkUAa1fNMPuO3x+tcm+CwJCp96P12dPHAQkGS+PX5PBt5UgwhHJ/u+S4NUhgkIZp5kPfTQQGDU6Xxc4xAIZIucR4JggwRDq531DQAYMkxeZJjMu/WzBEZOjx5fR5rrFhQIJlWXxOb1rDEADn7VXXtXYMRRLortXawdRLAKC1DvwDDa05BHc4v2UAAAAASUVORK5CYII="

/***/ }),
/* 1408 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARdQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAvb29vLy8uLi4ubm5AHwAAIAAAIIAAIQAAIUAAIkAAIwAAY0AAo0BCpIFDpQHEJYIEZQQFpkOGZoRHJwOHJ0PH5wZIp0dJaITJaIUJqAZKaUVLKcXL6gdMKQpMKgeOa4eOq8fPawtQLMiSLYsT7wqWsIwYcU7d9NH09PT1tbW18/f2dnZ2tra29vb3b7+3r395ubm5+fn6Nj46Ojo6Onp6enp6tj66urq6+vr7Ozs7e3t7t7+7u7u7u/v7+/v8PDw8PHx8fHx8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+TjbjOwAAAAx0Uk5TAAEfJCkuL1La3Orq0wFb8QAAALFJREFUGBkFwclRw0AQQNHfPS3J9pg7N6pwFE6aMwWREAWL5UJoeuE9QScAAMDDmA4296VJxVj/1lCoyuGZ6a0XGFSlu2h6RoFBZQ0JTZdRYHCltWaqIsgLBs1v7D22c27PYKD3HpzIBy8Bg9Z0Qll0nhQMZGv7kLrp+H0EBVl6t/N8PKndwUCNQ+px/HzLa2Agq+47aZ9P7xEYyEVFJb/qzb0wUBGg9MO9QGgGAEQU8A8lp1dw/SsvKQAAAABJRU5ErkJggg=="

/***/ }),
/* 1409 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHYSURBVHjalVNNS1tBFD0zLy8KCvZDcWdcSLvpB6UbF10XCgVBs3HtD3DrH/AP+AvEXRu6CIWuAt0UhKYUYhZasCUquIjfvLy877ned+HlJXm00AuHO8zMOffcuYwiIiilKgBe4//igLnHJVky2feDT2EYsJhmgKEESPMYs1QqwbbtNQADAQRBALfvQmsLlqWFXAAkZJ3FQEBpxUSLBTQEKYFzThbi3wWYIMQcQpb98Xb4rCAgF872Npig8eD5O8T+HSYfV2Q/vD6FPfUINwdfMLe8Du/8EFkMpBL3CjAJyMSYqryC+3sf/dOf6Hd+oHe8j4fP3sK/+IPut10svN8qOrj6/gHR7blUdI6+wvgOTP8WxKIm8jAxMw+lLSjLRsD3CgKXzRqebn6W/n7trGDmyRskqUgcYnrhpQhPzi5isbqNzsfcAYgoTau+71Ov1yPP84hHSmEYUhzHgiRJyBgjyNYph7m5A4yPLR+ZgImIokhyuVym4hQy5AIjZMdx0O12pcVWq9UEcDjSAttO7Yt1rpRZF7iuS+12W3K9Xu8AeMGQf6SHWxgNcSMFWEz8NRqNk2q1ugKgTRwjDuIkKVTOHo0f2NRqteZw5QzZd16Sw3+G9HwklYfiHjgxJ4/GiLy1AAAAAElFTkSuQmCC"

/***/ }),
/* 1410 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIeSURBVHjahVI9ixNRFD3vYzMfq/4CTUICFklnZ+GubrkKIoiVlYWVq2AlCy7biiKCKILdVov7AyzCFq6NdvkgCViFrGxIGxKSzNf13ZdknLXxwJn77nvv3HPvzAgigrh9+SHCeAOQAkQC/4OgBAo1+jo40pz72rl/bfPGXSHNviIovaQCJOeGUlum+4cfv0sARxJgXyFcL8LencdwTNzffoKcGyHnhYYm+gs6fgzXTeA6AiACQ2MJZz3G+58f4K0nuOj5HJeugJaAEoqNoIW0hJDiXAHXT/D8+jP4OQ/zZGJyKzIUhpLXLLRF1ngGSjIdEGL3QoJPzbeLy1LCUzkoGEf119msILkDqbCC/QrFYnGr3W4fT2czKBZI62SjWK5FSrtPWuubRnuSjsAHg7Mz5PN5vDu5hCzu5ZvI3qtUKmkuMye4YsTsyti8aslggRVWq9VVEUoLZCv/Pj21LTO+/VqwffAA3W4XjE6nYyOPzUiTQqGwNZ1OaTQa0WQyoXq9TkEQUBiG1Gw2KY5jG5MkoVarxXkMYIO1OjtCv99HqVTibtjVRoZ5wRgMBhgOh3bP5b8JCM51MJvNaDweE3fSaDSsexRFqXOtVuNoz3d3XxwAUNkO7FC9Xg/lchmM5dxpB47jYD6fY2//5ZfXr948MuI428GtMIp47tSZ52ayK9MUDHae7nwGsMaaFYV9CJEHwBQZ4p88MvxBRAEy+ANvtCkmEQK4zQAAAABJRU5ErkJggg=="

/***/ }),
/* 1411 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ4SURBVHjadZNLSFRRAIa/c+65d+4dU5JJzaKaiIykKIWg6QkZJEVIFAXloqRVKxdtympVtGhpi6BdywJbVEQtgiISZCxKysqQGB/l27F5lM7c02lMMS99h5+z+n8+DhyhtQag+dbla+l8tooFCCGQUmLuQuDPDWHhfr5x9koLgAIQhl1Xj55/2Rt3ACxL4Tg2trJRtollYZlIIRFSULu8etpULmmDYhEhJ4QTMjFFx3FQShWGpDIDcnbA9VzmUAt1XdfDNeUiL0zD+n1Ix+LA2p2kZ7K0frxLMpcCAY4XCg7Yto3nurgmJzcd4lzsFE8S7WTCefat2IFnxm9+usf4dLJgNYfkL0azUC4KF3FsSz1OyOHZSJzXQ+8Lpd7MIKvDFRRLD6WtoIGyFWXFEY5U1fEiEWdsIM3X5ADfpobpHe3nwubT1K3cRkv7TYRGEDRQCNfi4PrdNG5twPIFYRHC0w4TP6cY9MepLK0gtqoGLbQOGihjUBKhvKSMt2M9vBv5gqMVOXyipSu53d3GRD7Fu8kewtIhMGDZNt+zA7wYes2boQ+cWXcIZduFwomqekbHx0jl0vRMJaheEg0+oqUkWII73Q+o8CLE1tYSi9ZQWVLO0nAJ0cpVPB3uIJvKkP+VCxoIKVHSYsbP8byvky/JfoSSJDJDdI5+It7fRUjZ7F+znUjW6yM4IFDCwkKS03l6kgmmZY6Un6V/cpD90RjX9zZzv/PRj8bDxzdoA4D85+MgCkdjjphN3vfxZ3xqyzbSFn+YadxzPGK6+YDBHALm0RoE4PuazORk5vbF1mWmPMMC5r9zU1PTXmNRxn9o73j1+ENXd5pF/AY4n+LM0ioNPQAAAABJRU5ErkJggg=="

/***/ }),
/* 1412 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIKSURBVDiNlZHNShxBEIC/qt4ZF7xEXA+Dh4CExYMkBy8exIdI8OBZ8gzmFXwTMUbw4lUw4GHiYRMUPURw8Gc9iD/I7Oyu01M57OzGjSaQgoIuur+vq6vFzBCR18As/xc/zOxnpSxm2+3Ol263g4giAiKC9BZIeShNU0ZHR6lUKgRB8AEYCOh0OqStFFWHczoQ9PPi4oKgB/bEZWh/ISo414NVFada1o6iKPi0skKWZTjnhgSDDlQEVR1KEUFF+Ly5iaoyUq3inENVnwukFLg+rIqKcJokNJtNpqamGAnDZx3on4J+OlVy7/m6u8vy8jKTk5NUq9Xfw/2bQJ5IvjcaLCwsMDExQRRFhGE4BA89gfK9/Vk0m02SJCFJEuI45vr6msPDQ6anp6nVai/MALi5ueHu7o4oitjZ2WFmZgYzw3vP1dUV9XqdWq328i8gwquxMcbHx1ldXWVpaYl6vY6IkGUZa2trpGlKq9UiDEN7sYOgUmF9fZ2iKAYwwPn5OZeXl5ycnGBmNBqNb8DRkMDM2Nvb4/b2liiK2N/fR0R4eHggjmPm5uaYn59ne3v7bHFx8SNwPACB951u17Iss263a4+Pj5bnuRVFYXme2/39vR0cHNjW1tZpEATvADGzHtsX5N4PQO+9ee+tKArz3lu73S42NjZi4O1T2Mx6hYi8KTf/FUfAsZU39uMXx2L6gb3NLHMAAAAASUVORK5CYII="

/***/ }),
/* 1413 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAadQTFRF////fHx8d3d3dnZ2dHR0k5OTioqKjo6OlJSUjo6Ol5eXj4+PMjIymZmZOTk5nJycMjIylZWVmZmZl5eXnZ2dnJycnZ2dSEhImJiYoqKio6Ojl5eXnp6eo6OjqKiompqalJSUt7e3m5ubu7u7k5OTj4+PlpaWuLi4l5eXqKiorq6uoqKiv7+/pqamW1tbuLi4X19faWlpvb29wsLCwsLCv7+/2tratLS0vLy8xcXF2dnZu7u7wMDA0dHR0tLS2NjY3NzcKysrLCwsLi4uNDQzNTU0NjY2OTk5Ojo5PDw7PDw8QEBAQkJBRUZDSkpJT1BNUVFQV1hVXV5bX2BdY2RhdnZ0e3t7fn5+g4ODpqamp6elp6enq6uqrKyrsrKxs7Oztra2t7e3uLi4urq6vb29v7+/wsLCw8PDxMTExcXFxsbGx8fHyMjIycnJysrKy8vLzMzMzc3Nzs7Oz8/P0NDQ0dHR0tLS09PT1NTU1dXV1tbW19fX2NjY2tra29vb3Nzc3d3d3t7e4ODg4uLi4+Pj5ubm6Ojo6enp6urq6+vr7Ozs8/Pz+fn554SZLwAAAEF0Uk5TABESFBhRV1lZXF5+gYGEhoigpaepra6wsLO3urq9wcLExcbHycrMzM3Nzs/Q0tXW5+f4+Pn6+vv7+/v8/Pz8/PwjBYGEAAAA60lEQVQYGQXBwUoCURSA4f/eOY6jQ5apgySCm1ZtogcIWlmLoBdw1StGL9ADVMsWERFJgho1M9jomXv6vggAkpNhvgPAAwLd2ewABBDYO/vSnjFppv3HHwR3OvVe11xHZuHBBFvXfGxSWyQj+zYEit0yGZh182VagjQHmdbJ3bsbT/M82y1lfBmThLcVwZw/13txW9peA52jV7xZEhWfRbZf5tXNOD3st6LMweRqWGzD3KuF2lQgtkUvrqylv3+GCdEgkqrRqc3rWftlIdRPblWOLsKmrJ8xc4APDG/n0og3quoAoHHcnFcA+g/+O2sIQddCOAAAAABJRU5ErkJggg=="

/***/ }),
/* 1414 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGWSURBVHjalZPNTttAFEaPf0Jc6jghC0SjbloJq9tW6qoPkDfIE+cZChJQWtSixEhJSxzHyXjmNtiOFRhYcKSRZzPnfvd6xhERHMfxgZDXkYpI4VPxPkmS69Z1gfrYwnXdB+mjBZRf/2qDOQ3ohOEH4KdPTb7ecLPQqMRUAoB9CRXduaa18NjRCHShOO0dok78JoH7NMVDgtUa023bAiPCj4VC3TUJcFy3lJTUKaK/BQfZgS2IoojjyKDftXGrg8/Owl3liJWg5iot0Am7BI2gptx3Zor2wn9uBgXx1myqBM0CHv+J5QqJ7BYotObyXjBT2Y9uCcLZhiBtWYKy57gXIIMAz/NeFJBmSMcWEHW7XFzewxQA6xKJCFprwukG/6iwBXmeEx+9wRkcWpM3xrBcLplM7tCR8Ots8h34Yw3x4l+B3IpVXSnF9PaGb59jxuNxMhwOv4qIsoYY997CYJuiugNN9SzLcFKvPDwajT6JSGa10O/3cWZrqKo21K+V+Xx+vq38RURW7LF7zgFwwssI8FtENE/4DxXYtjwUkl1VAAAAAElFTkSuQmCC"

/***/ }),
/* 1415 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1416 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1417 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHiSURBVHjadZPPqtNAFMa/TDK5NNFg7sY/iy4uuCzUFhHxJQSh4MK1uFYKpcu+QsHH6MJtH6CbtisXdSG4kZaLpYlNa/6O50xJqDf2g49DyHy/OWcmMZRS6Ha79nA4/Oz7/hOcyTCMqrJLbbfbn6PR6MN8Pk8snOS02+23VBtlwDRNbSEEu4Kw0zQ9AvhILgGVOHTXNQB3XeofgGVZ2Gw2GI/HuHnxhvA+lFGAYjiEe3x69wrX9yWyLKsBeBcG8HyYTCZ45r+G8/gRxGlXXX/8yvHwWiJJkjqAW2VAo9GA53mQUsKmZx0WJ8g9xy7HudwBA1zXhbRt2NKqdjcJ4l5Vyy8DbAoyxLZsSMvUYWmCRO9NhTzPURTF/wE8BgMYJBkmqZqnDhSoqgzHY8rXeBFQVcgrFHlBMANxLnRN4hiHIrt8C2zuIKaFGYdFjCAyAGHCSIBwH+NPcawf4vnn2mw20ev14D2llj2BPM6QZgntesB++5ugArvd7hZADBZ/VZ1O5wHd/4FmU3RI2nTXKggCtV6v1Wq1UsvlUj9Pp9OA1t9wji1Qk4bySbP1vGEY6u7o54n6/f5zqt9rI5yPUtJLGEOiKAoHg8FLCn/DmarfudVqvXccx8UFLRaLL7PZ7Cvu6C8xDt84Uhl2TAAAAABJRU5ErkJggg=="

/***/ }),
/* 1418 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1419 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI8SURBVHjalVNda1NBED33K5EYIY0BWxHFKiiigdIfoARSkGqENjRvffbBH6EF/R2tBEVMhYi+GEjBhwi2QoitqdWH1OarWo0Jvcn9XidLckkaETyXYS87O2dmzs4KjDEIgnAOwDT+DwWK/SoDHNOapq8ahk5kIhnIBG7orhiGLMtQFGUegEsAXdehtlWIogRJEnmw4zioVCqo1Wp4vJJEIrGASOQG9/XhEgiiQIESms0mVpaXEY3OoFyu4l1uA9GZ64jFbmNy8jw/81cCkTYbjQbWsjkET45jc7OIqalrRBSB3+8fakcURfTR/+MHQqEQnj57ji+fd1DeKyMQGENiYRGl0i6WHjzC0v2HIxX0b2Gu3W6v6oaB2ZsxHPefgEfxQOweps92bFimgXZHRTb7hldARPMU+0IeqIA7ZmO3oEhenJqYwMHBTxA/tRRE6VsZ6uGhm32kBfJwHV69fE1C/sL3/X38qNdhah3Uq1UEfApyb9fc6x3VoFdFMDiG4qcdKlen3vewtbUN22ZY3/iA5u8mjkIerECgFq6Gw5AlBbZl4tKVy3AY0NZ0nD57AaHxMyCt4PF42Ogc9OxJMgmv9xiJ6IUky909LqJJIhq6jnt3F5HP59cBFHkgY5xsjiaRdTodZhgGM02TWZbFWq0WN1VVWaFQ4Gs6nS4BCPducFjEI+AD5PP5QGRcn0wmsxuPx+8A+MgIQxVYtu1mtm2bG70Fvmqa5qRSqfeDmXvmDtJF7vwneM/bPPMA/gDEjyPH6YZ3fAAAAABJRU5ErkJggg=="

/***/ }),
/* 1420 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIzSURBVHjalZPPSxRhHMY/886PnVl3W7dELQ+aePAQSgR1iQgRolNg+B9Up45dgqBb16BDt05dOujFa96qS0GBGCrYIQtXXM11Z9edd2bemWaGdVC2gh54eF+YeT7v836Z0eI4RtO0UeAK/6eVJLtpAKRhz5OLvi8TmEhMCs1MunJahmFgmuZdIAcgpaR91EYIHV0XabjXZMr2x8oBmtCSoI4QgsCL+LF+gGcoqk4ZyxS83HvG7PAtZsZnTgFEvtG0LNzY9fi52mBw2GNwSOEM2IyMnaVcsnn89glCF+l7PYBuRcHuN5fhakxfQaO/FCNsiVU0sQyTyxemef3lTd6gB7BXa3O+amNGOhw5+K6N6CgOmi00JXg+84LVna89M8gBfjuiWC2hW9BxOwxMnCMMQw73JdILaO63qKgqQC+ABGBYOoU+K7FJYOrZUAEi1aLtNghNl1JY/ksDoNxv4ZwxsYsmTsWktnWA9AOO5B6tqAWey7Q+yUmJkw2qQyVarpc1CWRIYB3yqvCIp6sP+fDuM9JwGb04RhAE8R8bCA0KRYN6rYlhwr33t+lc3aRRAdUZpXYYMD4iWFpa+gSs5YCTgyxXbHwZsrP1i3H/Elv1JlMXJ7l28wHXZ2+wvLz8fX5+/j6wDnD8M81J31+MlEoHd+rzrdfrbGxs4DgO29vbafhOcoWVOBEA3XUuVCpO7xaGYayUyhxFUbZ6nhctLCx8BKaOD+06bzCRPfy31oD17sm5fgN1N/jwKvmjmQAAAABJRU5ErkJggg=="

/***/ }),
/* 1421 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAACXBIWXMAADdcAAA3XAHLx6S5AAAACXZwQWcAAAAQAAAAEABcxq3DAAAABmJLR0T///////8JWPfcAAAEbklEQVQYGa3BfUzUdRwH8Pf37oC7U+QUPCyOh4TFwyyxBEFmxinDiZCBjyskkAyn8wmVKQqKSJsjJUGSQ0Fg0gEenlyEE4+H4EQ0LAGzBTgRGA+BPZBmMfetfX7wx8+trT98vdDX/6h6wF7qbdnRtPFGn+x3TDp77GxIcS5mcALJ4Ib+zv46vHyGNP0Rvb5xQeMcc0Bd9fHhC5158TotoO8vNpZsY3+GFQUf0z4Afil+/MXj3UDXg+7I7gV4ecotpa2lppZ686GrUVdrOB9Tj94Z27DYfkw6emfsJND75OHah72SNzjBFF8IQiEIhyAIAhn+rytuxq3GtbGRlyfK3y2P5vxecntvx/pcjxZt07nmAsDYZ+isLJB6XOmoTLtswosYxFQQBENMCsE8CFZDEAFTstnObG//iWGafrbeYSj4Zl7z/Oas0ZOczIzmBFjH11WsM0ryQazeAbHZDiK/CGIdCIEcgp0QeECMYUrl5i9dSv8ALj0sR9no6e1m35rzNT9w3rOo27E7JdYLxMrhtfluI24TDvEgtioQZReI9HsQWxOI43SI1YBYrwaxDgaRfQdOgFNfZd3Nagq5YfI15Bguct72/i2nW4+NjZwAw5ZHjo9uswYI/FkBO8/OY5LsKcjr00FmLgVRhoI47AeR/wziNBMkygjswL+8IyRVaqhN8l2VqrL2ssr2PZb7DUGNXsP5nCjucoIXqBNBFu4GmVMNongKYjMCEbd0kFAPkFm12HQ6eka03Drr2b5xw/gHgGFlxYWKpD1WDf614bX5nA8WDowM2ayaywmgdFUqlc5BW0D8LCCKXyGWDZG3tCCBXSASPaY05TRfb65nB76Js7xi8QbMmvqxBuaivjnL0mK5znnPmz/91lVhsAXR+Nkl2PnY2bvYKKIU/vInmLIegnSIvJ0B4hkDERYDQScmaWpyq55V9UrWNF2rk5nLAbO0NqU2rtJ0u/Tm163unA88788ZcnIOG0jpjxjcD6QvOjYtPVMSByIJg4jrIMjsTIhI7SB4FVN04XnjeeNAfrzOoquX5GZPZBuzjwNn0s/knNm2KvDik6IVRcmcf1vfOni7LL5wdPFQ1UgM8PnmUx9lxcrOqt5Tuaq0mOS8CcRnJYh7JMjCFSAaDcTaMEmyQ5coT1QilRMgeXnXhZ5D7MMCjW6Zzu/B0eqOK6NVPdfOlWSc+zs/BVicGbB10R3rDpCAAyBbAkG0G0Dm3QNRRUDwMQQMgmkYrh/xGfEB0odTT6RmAkeeH7x/sFqSc7Bzb8heAEfbDu88HBxjZWyvuHwpol2x5q/owbgAhTfI6j5WyEpYxTw9CPODYAJiNhBMx3+oxV4kIUmaAGItdd/jftK9TN4KwgpLmgueFnqlti1fssx12ZawfJBZn0LE6jMQWQaIzAtECgFLgCAbAicIbKpBXO6D+KaycLaUBftrQRYGee/yvO7ZtSTJJdF5m/OJwDwQz06WxvaxJJ8WkLllIJofQdQZIKqNIMoMECsFCFP/A16M01pW44cUAAAAInpUWHRTb2Z0d2FyZQAAeNorLy/Xy8zLLk5OLEjVyy9KBwA22AZYEFPKXAAAAABJRU5ErkJggg=="

/***/ }),
/* 1422 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASlQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGx+Pj4+fn5VVVVV1dXYmJia2trcXFxcXJycnJyc3NzdXV1enp6fn5+gICAgoKCh4eHi4yMjY2NlJSUlpaWmJiYm5ubnZ2dn5+foqKipaWlra2trq6ur6+vr7CwsbGxs7OzuLi4u7u7vLy8xcXFycnJysrK0NDQ1NTU19fX29vb3d3d4ODg4+Pj4+Tk5OTk5ebm5ebn5+fn5+jo6Ojo6Onp6enp6erq6urq6+vr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7+/w7/Dw8PHx8fHx8fLy8vLy8vPz8/Pz8/P09PT09fX19vb29vf39/f3+Pj4+Pj5+fn5+fr6+vr6+/v7/Pz8/P39/f39/v7+l+mbngAAAA10Uk5TAAEfJCkuL1LJyuD+/jNlRNUAAADRSURBVBgZRcG9SsNQGIDh9/s5KYaWkkECToqgVhBxEgpegaNX6QV09AoEnTK5GFQKQtCKBBPPSUQcfB5BA/9icsJVa/ILyK6Tw6axLIgakQIc2snQbZmqxC8FBwnWBzWRuSo4rD/aKUdeDcvbQ1AYzjjvnh7Lz2p3HxRKEx1ms2bv+RhQMBPzTVN2xZ2Bgtd9JbnWelHfg0K+c3k6TBbh5GX5AA7Tb5P8rSle3zUmHFDtF3Nt1gerlHAQyLYtZbaKccTBVRT0ZohxBMGcPymNwA/6MUSYnbjWfgAAAABJRU5ErkJggg=="

/***/ }),
/* 1423 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1424 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIOSURBVHjahVPNaxNBFP/tR0xEbSQ0tioRCXopFhVUrP4D3r36DwiiN6EQb4I3vXkQVPBSodhjj4JnryHJUYpBWwzGdr9mZmfGN2/rNkkLvuXHW3bf72MejGethed5LQAXUJSH/5clDIn7LURR55Mk+ZJlwvsnQaLgx33h94NeqVRsu92+B6AUgFJ5sBdF8H2PEOx3n+HNCARhiDzPmRdOxObhIHCkgLsQArVaDUEhUgr4HAuTAhyZSAGsNdj89BY63sbZ+To+bHzGjWtLaCxcxP0HDxGGIc9qrcGmpYDvsevrV89xd3kRS5db2BpuY+v7DlauX8KdK2fw8kWHTSjpoSNwrPF4jOaxXax9XMePnyPspQKtheN4834dc3MncW5xvphpNp2AnT0Cx7t18yqajVPFYsklSSWyLIPKEuz8GrkEPFsa40AB9XodcZJBawMpFREVd5MTdA4hFM9Q8Q6mEwCc4PefGI36CWhjkKucokpoJaCpS6XLJc7ugBP4hChKkKYpLAkYkxNZEtmBEgldxj+8g/09DGl5AXJYmEJEuyMYjHYzSP80+v0+qtWqASCYaC0LrdCibBRFltytlNIqpaxzobOSjrG9Xo+7EJntPOusOXPilgK3MyFsFMdHCrjqdrv8b3X16QaAiuNNCbhhMU0s3R0Gg4F8/OTRuwkyY/Y6e4yjr7UmfKV5iYn6Czr8ZF2UcQBPAAAAAElFTkSuQmCC"

/***/ }),
/* 1425 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1426 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIFSURBVDiNlZI9bxNBEIafOd/5TBL7EiGQAkJuqKFIT5MmdcI/SUnL36HPT6DGQon4EqJJHBNbvst97N7uDoUdE2OExEgj7UjzPnpndkRVEZEhcMD/xQdV/RIviwPe8k4ewKOdAftZxv4gYz/LeDzY4Tq/5XI+5yrPGecFV8UMPeUEWAEggCpYb6lsxbwR0m7A+JLSWubNLf04g61tLvPZSrYGwIN1ntq2FMYghTCPG6zzFMZgzU+cj8HzF4ADWmhiR94YEMG0nrgjOK/UbUtHt8ibYtH7J2B6urAVRdEiRYiiCBFZSwARIXmTrAOiKCJ4T1PXABRFwe7uLiEE8jxnb2+PEAK3o4c8exU2HUQi1MaQpikhBPr9PmmaAqCq9Ho9Qgjw1CMSbQIkihYpQpIkK6sASZIgInQ6HeJuTPRbz+opQD6f07YtVVUxnU6x1mKM4ebmBmMMZVky+75wtPkLIgwGA3q9Hs45VJU0TXHOkWUZ3W6XEALbTyxN4zcBstz6neXliZMkCd576rpmMpkgpuDj+2+fgfONEWazGdZayrJkOp3SNA1VVSEiTCYThsMhP64/TQ4PD18DF6sNA8dVXWvTNGqt1bZt1XuvIQR1zmme5zoajfTs7Ow6SZKXgKgqqro+wv1juYu7Ucbj8dejo6NjYKT3tijLhufAC/4d58DFfTHAL1JGJllda375AAAAAElFTkSuQmCC"

/***/ }),
/* 1427 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIESURBVDiNlZPPSxtBFMc/b2Y3KmtyEUTISkGKnmwFj0GIB4+9mEOT/1Et3vwbGgRpBSsUDUUii6AGNWY3O/t66Do1tRb6YGAeb76f94sRVUVE3gDr/J99UdXvQemsj0bpbpaliBhEQEQQERQwIhPKIAgIw7AFeABpmvIwfMAYi7XGA3q9HktLS7/88q08A3qAGMFay6e9PYqiwBiDqnJ5eUm8uEjhHNZaOp3OBMD4iwjGGJIkobm5ycd2m/n5eebm5ui022xtbZEkCdZajDF/qaAENBoN4nodMYZarUY9jgnDkDiOaTabWGtfaaEErKysYIzBGEO1ViOKIp9xeXnZz+ZVQDQ76wFTlQrOOS+KomhCPAFABCOCDUOurq7o9/vc398TBIEHTE9Pv9iCn4aUAWstCwsLrK2tcXp6ynA49IA/s7+oQMzv/QdBwO3tLYPBABHBOcd4PMY5R6VS0ZczKM/19TUzMzMcHh5ydnbGxcUFjUaDarVKkiQEQcDR0VEXOAGQ8i9sp2m6e3Nzw93dHefn53S7XaIoIs9zVJXV1VU2NjY4ODj40Wq1PgBfVVVRVYDtNMv08fFRsyzT8XiseZ5rURSa57kOBgM9Pj7W/f39XhiG758SqyoekDvnhc45dc5pURTqnNPRaFTs7Ox8Bt49F6uqb+FtGfyXnQDftMz4ZD8BH3T0gm7IAaUAAAAASUVORK5CYII="

/***/ }),
/* 1428 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI8SURBVHjalVNda1NBED33K5EYIY0BWxHFKiiigdIfoARSkGqENjRvffbBH6EF/R2tBEVMhYi+GEjBhwi2QoitqdWH1OarWo0Jvcn9XidLckkaETyXYS87O2dmzs4KjDEIgnAOwDT+DwWK/SoDHNOapq8ahk5kIhnIBG7orhiGLMtQFGUegEsAXdehtlWIogRJEnmw4zioVCqo1Wp4vJJEIrGASOQG9/XhEgiiQIESms0mVpaXEY3OoFyu4l1uA9GZ64jFbmNy8jw/81cCkTYbjQbWsjkET45jc7OIqalrRBSB3+8fakcURfTR/+MHQqEQnj57ji+fd1DeKyMQGENiYRGl0i6WHjzC0v2HIxX0b2Gu3W6v6oaB2ZsxHPefgEfxQOweps92bFimgXZHRTb7hldARPMU+0IeqIA7ZmO3oEhenJqYwMHBTxA/tRRE6VsZ6uGhm32kBfJwHV69fE1C/sL3/X38qNdhah3Uq1UEfApyb9fc6x3VoFdFMDiG4qcdKlen3vewtbUN22ZY3/iA5u8mjkIerECgFq6Gw5AlBbZl4tKVy3AY0NZ0nD57AaHxMyCt4PF42Ogc9OxJMgmv9xiJ6IUky909LqJJIhq6jnt3F5HP59cBFHkgY5xsjiaRdTodZhgGM02TWZbFWq0WN1VVWaFQ4Gs6nS4BCPducFjEI+AD5PP5QGRcn0wmsxuPx+8A+MgIQxVYtu1mtm2bG70Fvmqa5qRSqfeDmXvmDtJF7vwneM/bPPMA/gDEjyPH6YZ3fAAAAABJRU5ErkJggg=="

/***/ }),
/* 1429 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIOSURBVHjahVPNaxNBFP/tR0xEbSQ0tioRCXopFhVUrP4D3r36DwiiN6EQb4I3vXkQVPBSodhjj4JnryHJUYpBWwzGdr9mZmfGN2/rNkkLvuXHW3bf72MejGethed5LQAXUJSH/5clDIn7LURR55Mk+ZJlwvsnQaLgx33h94NeqVRsu92+B6AUgFJ5sBdF8H2PEOx3n+HNCARhiDzPmRdOxObhIHCkgLsQArVaDUEhUgr4HAuTAhyZSAGsNdj89BY63sbZ+To+bHzGjWtLaCxcxP0HDxGGIc9qrcGmpYDvsevrV89xd3kRS5db2BpuY+v7DlauX8KdK2fw8kWHTSjpoSNwrPF4jOaxXax9XMePnyPspQKtheN4834dc3MncW5xvphpNp2AnT0Cx7t18yqajVPFYsklSSWyLIPKEuz8GrkEPFsa40AB9XodcZJBawMpFREVd5MTdA4hFM9Q8Q6mEwCc4PefGI36CWhjkKucokpoJaCpS6XLJc7ugBP4hChKkKYpLAkYkxNZEtmBEgldxj+8g/09DGl5AXJYmEJEuyMYjHYzSP80+v0+qtWqASCYaC0LrdCibBRFltytlNIqpaxzobOSjrG9Xo+7EJntPOusOXPilgK3MyFsFMdHCrjqdrv8b3X16QaAiuNNCbhhMU0s3R0Gg4F8/OTRuwkyY/Y6e4yjr7UmfKV5iYn6Czr8ZF2UcQBPAAAAAElFTkSuQmCC"

/***/ }),
/* 1430 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGMSURBVHjalVM7bsJQEFw/m88t0qSFJh2WuEKkBImWggNQcAx6zmCJgKD2CRygiIukiOSkpEYOtrH9srtojWPFkTLS6C3Lzsw+YwytNRiGcQMAd/A/vKD23aKKxFEUPyVJjGYKCWTKBDorSsuyoNFoPGJZGEAcxxB+haCUCaapSFylGHEtKAwMZaDQRAN1IQlUyUiENQYs6HY6EsGCKsQ8CIJrDyprrVYrsHs9uPZ5M7ozs9VqUa/GADmbzWA6ncJyuYR+vy8iZrvdps/1BgrpeR4Mh0M+HccpRM1mszArwyrtykM9XH8ymXBrNBqRSB6usOZXQKIBi+fzOex2Oxrm3n6/B4Ft27UbcNp4PJaHRgZU01aSzP3z+ax/3WC73bJAhoVZlsHxeITD4cBv4WazecbxVxZqzWYP+Cbq0+mkkyTRlJCmqUYhMwxD7fs+n+v1+gPnu5RJWlW+QgWUzgFoxrXrup+DweAeAHyN+LFBiknV5DzP+YyiKF8sFl45WSh/51v+8k/wnd8kWfANlBjDDCETRsEAAAAASUVORK5CYII="

/***/ }),
/* 1431 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAICSURBVHjalZPLahRBGIW/qr7NpWcm5qIEg4HgWhfuxJ1voMwj+HSDi+Q1XAhGGBciBi+Jxlx6Znqq+lZldcM0wTiCBw5/0d3f6UMVJay1CCH2gSf8n9459qMPUMNaZ6/zPEMI6YyzaEw9/yB93ycIgpdAG0CWZaTLFCk9PE/W8G3TqFmv1AYIKRzoIaXk4pvi+ucc7Ut2+jEyEAy3IkabnfUBUogG/vT2gkEP7t7XpLLPoBuzOYwQnuT8NOHe3qD5ruWgrdX8OfY9NnqlAz3u9AtMmBP2AoJIEMc+179U2+BWwOxMMQzALyLMvEOhepg0YzZXLBeaPC85+3K5Zg+EwI8C5PYATxoWec727qh5/uNrQrfjo1yYVhrgdgBCEHV9ojgi6vuklylhGGKMwRQZ1WxGUViyVK1pAHihpOPgqBcwsh1OT67QWUlprvCDApEIolKsbzDc6SI8gcVgrSGMJGVhuNYBFQnWq9g6OKBwVf7aYMOd8/n3OT3XosgL1EKjUk2RWhdS4bmw/b2Ko6OjN8C0PYWbG7n7YERZOuBiyXymSGeaalkRhjFPnz9jOp2ejMfjV8AHAKy1AC+yPLdKKZu7WVcsXYoxpplJktjj4/f28PDws7sDjwFRc7XbgLKqWrBya+c6oJlaazOZTOraj1bwyqvr/LB5+W9N69rWiRv6DbnYGOuw88ceAAAAAElFTkSuQmCC"

/***/ }),
/* 1432 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAIRQTFRF////AAAAAAAAAAAAQYfbAAAAAAAAAAAASYzcQojbRInbhrPnQojbQYfbQYfbQofbRInbRorcSIzdSo3dTI7eT5DfUZHfU5PgVZTgaaDndanqgrHtjrrwmb7vmb/vmsDvm8LznMHwoMbzpsn1p8r2rs73r8vusMzuttX5wdjxw9nyxNry3mvlKAAAAA50Uk5TAAQJHyI8Pj/L+vv7/P70ZqA0AAAAXklEQVQYGV3BMRIBQRRF0Xt/PwEBC2D/+xJJ1YRqTEtGdXMO/PF4AF7ryi7tWvR7ndjF9wY3vh5e+BXPzJbYV4YYS4YylgxlVAaNhkFjyaCxMTM+mWkrkV3vm8qsfwDirhBpHkLSTAAAAABJRU5ErkJggg=="

/***/ }),
/* 1433 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1434 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHhSURBVHjalVM9aBRBGH3z7ewlkQsGCxObCJLCFBHBQrFJoyCkCJrrxMbCys7G3sbaQhvFwko4hbMQi01lE2PhJheihREPmygR5I79n93P4eN2vWM14IPHfDD7fmaYVcwMpdRJAOfwf9i22s9aRiuO4+RFmibWjCxhqYSwVBiH1hqu664BqAyQJAmCMACRA8chEdcIgcwlKgNFygodEBG+BQr3PxTwfzL6CWNhhnDnrIvL87pmQNWglIj7mcLVNzn8A8btJRcPlicxO6Vwcz3Bxg+uQuoNhgbP9xi/bOrLlSlcmHOgiLByagJPd1PMT2sxkAb/MtjrG2gCzs9pkEOg4flvLU2WwsMNHBp+JDOVe8K/gfDHQdJOzxBMAWzs55XQsMLdtwE2903NjCr9MOnG4gRmj9jKXojHOwlefclw/XUfT3ZihAY16JEGUntaE7y1o7j3LsLDrRgHUYHFYxrPrjRx8XiBMAzRaDS4fgcjLU40CY8uNau6eZ5jMBig1/sur9D3/fcAPoqQWcyu2ZfIURRxmqacZRkbY9gKhUEQcLfblbXT6XwFcMZSWe34JY5D2kiANZPZ87xeq9VaBdBli7EGJs9ryUVRyBrHcdFutzdHk0uWv/OCbB4KOfMnSR7Bb/Yd6mLTCyIGAAAAAElFTkSuQmCC"

/***/ }),
/* 1435 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIhSURBVHjahVPLalNRFF33kbaBINKBA5tHSRNJoIMOdSQ4cuJYKNJfUJwqDqT2C/wAHVro3FEgIOI4CXkIDUlo2qQWhDzve7v3Cbke6sB1WZzNuXuvtc65iUFEMAwjDUAoMPB/EPOKZ/s2VkgvFotvjuMaawkWhXq4NudzUColm0o9kUhQPp9/CiAWgO8H1nQ2g2kasIiQajYRbm8jyGaRqlbhF4swp1O4+/uwbBtBEEBg6rF/XV/DsizcOzvDxs0NwlwOW+fnCFkk2t1FYjjEndNTmJxEoAuoyPd3dpTA78NDBFxvXV5iYzBAUC6r4WhvD87RkeoNwxACOxbg6KPRFbLsJg7BwQHvmfAyGVibmyA+QgTA4ncm78sRdAE1lOFmWT9+v4uI/sZ8lq7BNhGjzIlYgP45wvDiQqkLHj8QijChVCqBIav0xT26gCggxxdlaC918duDqzvQEzAH/X7cVP25Yv3zc3Q6HQhardZaML4DEJEsj5aOQ5PJhObzOdVqNXJdl3zflzpe2ZXq9TpFUSRDT2TW1hP0ej0UCgWxQLvdFqfYeTQaYTweq71kMhkBcKEncDjBbDaj5XKpXDzPI7npRqOhnCuVijhzMofevnvzBYCtJyBx7Xa7KPL3FkiCNZrNpvqBeZ6Lk5Pjr8fvP7zg4UBP8FDcXHaV80otrkJxFfJFBq9ev/wEICEza67/zhkAOaahEbfqkPmD+z1o+AMK1DnGE1i4mgAAAABJRU5ErkJggg=="

/***/ }),
/* 1436 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHtSURBVHjalZLbaxNBFIe/nd1cNJuUKJZKVrG02lrUBy8gPqUiBMFHCb77L/kf+Cr0XRBB8yxtxaot0q5JbdxeQnQ3F7PZdYZuFreJgj84nDnMnO+cOTNaGIZommYAJv8nV+b6RhRYjuNsBxImhFCmoAkDYq/286Y5C+yMAAQh/9IxaLSGWDFA18XoYNyBONlFBJHrcYBKQs1D+mEQUvvo8qHe4VffZ6lk8OiehS6iItLHeYkWo/u/qB0wVTSZmimgFbK83HR5trKBruvHNhGghvBmi/df2oRGhoulPNfmi2RzaTAM3jV89ne+4683AMYBwcoq+tw0u/t9Vm2P+lGPtttTt0JogkLxFFutHsHBT/pvP48DUo9vEdhHlIppDts9Xq8d0u0GuB2fTtfn21eHy/k0Ip/ldHlpHCAMnXR5gdvXp7l6VmOz4XImo3PDMvnR97m/UOD84gUyd+dRn2+k0U+85Hretno2NaThMOT5KxthmrKDHuf0Pk8eXMH3fbk3RCmXy83K3PgjJd47lRI8fTgXx0EQ4HkezWYTVXBvr7kB7CZfIYJM0mAwoF6vY1kWtm07y8vlOxI0SABIJieqK4DytVrNqVarizK5Q6SJV/hT0YxotVqfKpXKTRl3gbEhZoEZ/q4QaMizQ07oN1lZ0Q/VGdDyAAAAAElFTkSuQmCC"

/***/ }),
/* 1437 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHjSURBVHjalVNNayJREKwZFRXjFwoePOxFwYMIsmwuuUnAe/ZHetq/IMktinhIkOzBnRFFUONBxBk/ZpyX7iZPkAkLKXjM16vq6uo3hlIKhmH8APAT38MLccdREJi8Wq3+BCRmmiYvFr1aBH2V7+mbm98AxqaWOwcKQRBgYtvYuy56z89g+J53ITNdLw3tgEgOZrMZUqkU8vk8Go0G/o3HSCQScBwH9XodEBERCwnIy2q1iv1+L0KRSASlUgmc0Xq9hknPmmaYZliA+99sNkKgPKRyOp3mq7x3yUUmk7kU07hIxeNxnE4nWJaFX7e34uR8PuNwOKBcLqPb7V4FGhKgsKR6NBqVALfbrTwfj0dMJhMUi0UMBgOMRqOvM/CpGjngENmN9B+LxaSdZDLJo+MWuCUWDzuIUWWqzgK8kck8VrlfLBYoFApwXZeXfAtnQMpsd7lcivXpdCpV5/O5hLnb7WDbNjtip6EWZFOz2ZTQhsMhstksKpUKj5YDFIFcLidZWJa9BvAGglQjPJA1RWRF6srzPOX7vqIpKGpD9ft91el0FB0o9fj05ABo8DQldGhcj0ePTHKo1WoSZK/Xc9rt9h2AV0UIncSv5vz5t3J4761W616TL7zPDRWx9V9Iz381WeMD2eEKuZxOlg8AAAAASUVORK5CYII="

/***/ }),
/* 1438 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHHSURBVHjapZO9axRBGMZ/s7P3BRdyiYEI4gcqiEIsrJIIgcNOUfFf8G+wsrOxSGshio2xFgTBIhIsQgQj2CRRMQEViRfDGZM79+72Y3Z84Za9KVIY8sKPeWeY53mfHVhlreUw5QuEC7OLfu/XFKancUoJ7HNgddHElWNvy/U7Mz6AaixP6dOXNfxvGqVtY206T6BaPzThHgcplXR1bmBNBFGbg5S1hoFBkkDY2meMqwC3UpMZ5G5xFyoj0NkBzwgIroIMBYUqmG5u0I9frsHVB2Ai+LMOn+fg9wpoDcqHJICe0P0LW1/kmuck6OzCh8ciegpHL8C5mzB5Dz49hJVZCLbAALEQkaUbchJ4CsbPw/VHsCfTV0X08zlcW4LtV9KLQeJ8khVSDfmRlsW0JMEzqIzCrWUopLK/D5eEMlASChk+WE8NDFKloP1dmhAWb0PjNUzcheYLGL4IFR+KmVj3sZ7nJBADaqfgyhM4eQM2X0L1DIQb4JWkP96/qTIA5TmPmJSGYPcbzJ2FSNYxEbTeQ5zAuzoEm5ACNgOIdXFg0AyKb9LqibputrHqCDboyIQOqBHU149ALXu4PsYW2NkO54eBQ//O/wDnxaqIYaXVkwAAAABJRU5ErkJggg=="

/***/ }),
/* 1439 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1440 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASNQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEDQ0NCQkJEhISFhYWGhoaHh4ekpSSmZmYpKSizs7P8vPz9/f32dnZ7u/v7/Dw9PX1Fm4TFokPG3EZJJMcKpchMJogMLQLMYwuMjIyM5siOccLOjo6QaAxQqIxQ6E0Q8wUUFBQZ59eZ6JnZ6tnZ61naMdOcaNpespre9xSfd5Th8SHh8aHh8iHiOJckORlx8fHyMnJysrKy8vLy8zMzc3Nzs7O0NDQ0tLS09PT1NTU1tbW7O3t7e3t7e7u7/Dw8fLy8vLy9PT09fX19vb29vf39/f3+Pj4+fn5+fr6+vr6+vv7+/v7/Pz8/P39/f39/v7+////ChIH5QAAACB0Uk5TAAECFBUbKistMzU2Nzg5OTk6Ojo7O5Wvsf39/f7+/v7ev1oDAAAAzklEQVQYGQXBvUoDQRiG0eed+TYaw/qfLIKNCpZaaOM9eMmCjeANCOtfZWGRLBEZNZrsfOM5woIAACg5G8M66koC6a5fzgwucxje17EvZxfxFkPJteeDYO8kgcGWi/XTVTVn1woBUkqozIh8dAWDzTDiRwcsGMsxSDsvvfM0z3QCg+0N+9xnMBzRIAy0OD4pfiSKcCJrzWts46O11sbvt2WAcZ7kJjc5Vv7QE8BxCgU/n/R/iPo6oIC+usObacEgoIDw53YKiKqSQLD6BfgH3BZOxINxifwAAAAASUVORK5CYII="

/***/ }),
/* 1441 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIJSURBVHjalZNPaxNBAMV/M7vZpmpjiweFUmtF1JMeIjaXKkF6VamfwYNfQDz1rEevfoYqBNSD4EUUkxolmkCrKG0NQqIkMbSb/ZPsjuPQhIYQwQePGZh5v3kwM0IphRBiHkjzf/qks19tMEr7fvA4DAMNk9poC2O0BcOybZtEInELGAAIggC34yKlhWVJEx4xRmbe1wAgpNBBSwOkcerRdaKTl2BOYDeKeNeem+BYgBTCBI+srkIqRXQ5S3z8LHJGEDspks37EO/SO/HA7BttsA8QOszUFPFsBpnsgC1h/goiKkJkWg41kAcB9ZVX1CZvEmRuEP+2UQtLiDntRICaziBmHWx7eTxgIn0M53SKZsfBWkxjJQ8hrCRMLeE5HnAOWAQYBaABRWALCKVNLE1V456UdCzJlp6vw5gGQPVDk9aOS+dwgvdvG4ShIowj8l6ZH0zQ5jM/KYxvcOfZMt/9mI+FXzhHHV5/afJmu4UMZnhZK/Ck6pN1n9LtdtXoLezb3e2aii/KIedPTaIWWnzb2aM93aC+V6cW1iiVSu+ADQCUMrAV/RKV53kq1L3/nnD19qa6+7Cq7uXzKpvLqXK5rFzXVblcbhu4AAiTHQDCcAjQ6/VUHMdmbLfbqlKpmLD+Axf74SFAL4oGwSiKjDXAjL7vx2tra+sHT+67/53PmMV/awPYVFoc0B+sJBq44qTf1gAAAABJRU5ErkJggg=="

/***/ }),
/* 1442 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJASURBVHjalZPNS1RRHIafe2a85pAW1BApooKrSg3biAmJVhTtiqlF0Kpa+Adku3a1cVOEQi2CWkrhCEmQtKhoY1DjBxrOkI6IOA3ZjM3M/Zgzp3uGmUmRCXrh5Qfnnve5L+fcayilMAyjBTjF/2nWy0b9ADpsWfZLx7E9mPCMhhaNnuyW3++npqbmClABYNs2mWwGIXz4fEKHKxae5+bnSae26evrLa6VJSjJEIYX/Btei8fJ5XIM37nL0yfPSP1KEYt913t2ASoN9Fs2NjaIr8Zpamrkwf0Rzp0fpL//DM3NzXR0nGBgcAAdFULsbaCpgUCAsbHnzHz+QufJY5i1flrbWgmHJ9hMJBgbHa3eQC8Gg0HqG/axnbWIrSZwVB3RaBxFLVNv3rGwsKz3VQfoaj0Xb3CgpQPDXOdI2yGunT6K5UiSaYeZNbcc3gugdNpJ2ySXzvNz28GVCr8wyNmSjOflpNSAKrdQajG7GMVX28iFnnbWkxkevl7h7WySrd8uBwN1ANUbGEKw8HGC4/1XycvDTH6NIKX0rLjU3cjW0nuy2euYpqn2nkHJKvmNqRcj9IZucra7i82tFLIAsU+v2C83i1cdiURmgMUKYOdBDg3dJpH4QfrDI9KuQb1PUCdcGoIm9x5PMj09vRoKhW4BS2gppQAu246jvC9POd50XVfl83lVKBSKM5VKqbm5eRUOh1e8f6ALMHROuwLIS1kJSim1NaA4LcsqjI+P69qd5XDZ5d+5vfjw31rUtZUndugP2eQffK7ObOgAAAAASUVORK5CYII="

/***/ }),
/* 1443 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIlSURBVHjapZPPS1RBAMc/b2be2tvt5Y/NVTRdjbDMggKtQAKzm4eggqBOIZ27eSmE6A+IqFu3LkGXImw9dChFLPqhl0z8UWiFkdlqrbz94dv3JjPfS6FD4Ac+MwxzmPl+mTG01mwFwRYxAAXEwvX/owFHAbX9zz/Nvrn7mGL2PZkdteglhU5YaHeSmohFeT5OpvUEOmqHJxzZZ9NxONGgAEaHJpkbvo+050kvHiI2meNAUzPOwVHsygUiK+0MPE0yLmoIEEqGHRgyM4NfXSBfVsZK1APAkxb3PEHj6VZiTQ7nqpZQpgyVUgIYCkDU72bsZT2+nyXiCsqB0oLm4sczDP/Q7IqPMJ1NIh1FgJACALU2VO7B9NqoGnlNSW4Fr3I7yjc55lkUrseZuVXH4Ls4KiIJkEqEERBSkm0+TkUxT5X5nQlL8sB+hZU2SVxKMPSsjKIoQZoqVPyJoEVQiG+X8+HUWdyjac7HpqBimamrghsLDuNudZA91BDG3whSGEhT8rOxnSfiCrnCIHtPXub2VwtfwHpctLcaL7/MzqiHzDoLXV1d31RQiDIVAC2Ld6jdX8eoYSMkvw1xC0vcvFBKTLm6L9XfmUqlcgrQhpRrN9C+x2fRwhe/DSnlqmyiNJpnRyTq9z162HGtt3cseLrJF9OZ2bdzRYQQGIYBsGn2PA/XdYk4M/PpiYHOnp6ecTawDUiu2/Bv1/bqu7u7S7TWbHTL3/kX7xPD7u5NF7AAAAAASUVORK5CYII="

/***/ }),
/* 1444 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1445 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAISSURBVHjajVPLahRRED192zzMkLiQgBkFFRcDM1HUWahRgqC4Enyg+AHmI1zqLwQTzBe4UVRw7UIzOydZKLrQhQlMhDDJ9Ly6c7v7dll1M3cxj4WHPl1NFedUVfdtj4jged4sAKGH/wMxd1lbP9JLnGu125U0TT0G+ugk7pmjrxQVCoVFAM4AMMaoLMusqBkZrH3ZRj0IUdtrYj4/jeePy87E2nAzCJTzV1y0VAqff+3j714XkdYIwwNUftRs3meqHh3cBIfjSoHjvUtzeFjOQykfd158gEliKN933a0BT0B9BiKu/gmw9uk3Gq0QCYvSWCOVmCZ2urH6M5jpJ8DRMgZXsO7vqzU02hGLEhHaaJgXz85yXQNpANX6CEGSJMMTbO22rOju5VN4equI3OSYXQ1ZBL/1DjAH8My25Ea/g7mZcQRBE0u3i5iJXsELfgKUsgGTksM4fgIC+eRDKzy6chqTbDk1wZ2j7yzQ0pUj02iwGnTsgTQbXkGSi8U8bs7f742tmQmyM69hJ6YMGQHGEJf00Fdwh8Sh1zmF2lqycT+7gR19HY1GgFxuKgOQDKzQD5q4IHe+PJB/HDvheZRKJSwsXEO1+vUNgE0IiEjCVa01xXFMspuMZ4yx5ONN3W6X1tcrtra6uvJW+olOCGfAxZFiYafToY2NTbP8cnnFCR3d73wSQF6cexy1WZeIvmEA/wCexkJqPa/DxgAAAABJRU5ErkJggg=="

/***/ }),
/* 1446 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAQtQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGx+Pj4+fn5RERER0dHSUlJS0tLTU1NUFBQYmJiZWVlZ2dna2trcHBwdXV1d3d3f39/h4eHiYmJkJCQra2tsLCwsbGxwsLCxsbG0dHR0tLS09PT1NTU19fX2NjY2tra2tvb29vb29zc3N3d39/f5ebm5ufn5+fn6Onq6erq6uvr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fHy8fLy8vLy8vPz8/Pz8/P08/T09PT09fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+/v7/Pz8/P39/f39/v7+Inq9ygAAAA10Uk5TAAEfJCkuL1LJyuD+/jNlRNUAAADBSURBVBgZBcG7SoNBFIXRb+9zJhgVLwjCH7GytwkIvoGvK3Y2QkCwsBPS2FjYeEVREczMP66VuAAAALUl5ewrLEvA2kVL+PywQx4nwpAQ4d/tiKdZEJCQ9s/j2HcfpocBCYryfeK4mWNBgrNsZWSxMCS4vLW7UX057AEJiuHlVFwfgyBBkRWxEh1IsJ83r/q4c7k/vYcE6WA1t5az97/aSMAeoG+8Hi1aI0GwjtpEi1o7CWkZfDvW2iGp5wBAax34B67xO26avax3AAAAAElFTkSuQmCC"

/***/ }),
/* 1447 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1448 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1449 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1450 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIGSURBVHjalZPPaxNREMe/+yuhubghN7MqgnoR7CEHBQ/+AeJFrz34B/RWvRWvYsGbJ/0DRIhIqHjyoBULtgVDE9keCjZUm8agmyXZl/2Z52ToC9EFwYFhHu/N9zMzb/dpUkpomnYOQA3/Z7uk3TcBtloYRi/jOCKYTo4plB3T+JfSNE1YlnUHwAyAKIoQiAC6bsAwdBbnHGy8VjYDaLpGQoMAOvux18Wno4/YF7vwrR7OJJexfP1eDqDPFrQ5Go1AczGg9ngRm/47uD+/ovnlEJEAJIDhcMjnOcB4PGbyj14PBiWcvejglwhx7fwNPLy5hjgWOO52WSyEyI3A5IAOyrbNSUvOEu7fWoV+Mv/7z29RLpcxGAwIFucBlKSSGWDpJneizkzNnJ8/DzhFlQuFAt9DpVJBlKUqmaNII+7SprxisZi/g9LCAsdqtcqCMEs4bnjrWPlwF4ffvsNxHL7kUqmU7wCUbNOMm/4brLuvMDgyePvp1iPElzysnn6OJEm4OkWZv4MTf7azxoIHzgvu4MnV1/A8j+A2Op0O/4XNZnMbgMtCKRl2m/5ESZ9S9vt96bquFELILMvYgyCQrVaLY6PROABwhVxj7QwQxwyIKU5bTNNUTiYTjr7vy3a7zWJ6A4tK/AcgpUpKqCoTgGMYhpN6vb41X1m5es4X+PCfxjPvSTLM2W8kYi5gOHN1EwAAAABJRU5ErkJggg=="

/***/ }),
/* 1451 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAbsAAAG7ATrs4+IAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABcUlEQVR42k1R20oCURT1Fwwf+q1eCkH6irCXKHop6EExq1HTCKWyKAsSNM0sccbreCvH8ZJdpDDrzRd1Dqz22GCyYZ2911lrn7PP0WEqdoxhKSxxi9OctizNqui9HmIIX0hj/gXOdZmF89FUY9RHH3UlxMdLLebe0AQr+jLroocfdFGl+KLsm+oKW9FrHbzFd9pMIYwM0oQCPtHBcWVyhCvRRA5FPKOFJhrIQ4SMfWEssBgPIvGRRM5HJIbuC08gMZCQIcOt4otZTDp7Jo0CJJRQBneiejynVWQhokI8J+qs2QS55XG5e6gKOJ96kzqKhNuibmuBiwSVHNrkig2cRx7/3SiOF+p3w9yxTdPfCyZ5tInKIQMeeTTRodyRmkyxl09CQAM1lAg/0EMLIpyiJjAboixFjgoJXvE2HrSOJ8SZ2aB1sK7eM7/of+AViUSCcpY8L/DMtjb1WcszKjquapDhCk4YTTAJ+1ygcFmwzU9zv0MLbPtkT3lqAAAAAElFTkSuQmCC"

/***/ }),
/* 1452 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHsSURBVHjalZNPi9pAGMafiTEb8NJFPYiHghTxIO2hFw/ih2jx4Fn6GbZfwW8i1i548SpswYP1kBZle6iwof47iH+QaBL/TOedZUIgZaEvPLwzZp5fnsmMjHMOxthrAO/xf/VTeH/rNCKz63pffd8TME0IBJUCdTyX4zhIJBLQdR3xePwjgAAAz/PgHBxoWgyxmKYAgWazGeLPRjlXpakB05gwSrOAaIgJ0Zx0vV7x+e4Ox+NRzsMAPSAxRsawaKH8/cv9vZzfmCYBaBwF0GL5ZmUWIvOTbWOxWCCXy+HGMCIJFEoBSAHofLng28MD6vU6stksTNOkdS8DWAjyw7JQqVSQTqeRyWRgGIYyR7cAAigJM8W2bVtqMBhgtVphPB6jUCgglUpFAcRdr9fYbrfybb1eD8ViEXTRLmIry+US+XyezCpFNMGr21skk0k0Gg3UajUy0GJ5fM1mU16kw+FAW+H/TEAXpdVq0bkHZqrpdIr5fI7JZCITWZb1HcBjGCAf9Pt9bDYbuYXhcCgB+/1efoNSqYRyuYxut/unWq1+AvBLGal98Hyfi6jcF/10OvHz+cxFEtl3ux0fjUa80+k8iav8jgKTjxQAxJkHRvHRSASQ3XXda7vdHgB4q8xK6u/8Rj58uR4pNidDqP4Cx2L6geZjAaEAAAAASUVORK5CYII="

/***/ }),
/* 1453 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1454 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1455 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI3SURBVHjajVM9bxNBFJz1fdhnn2VhK7YU2wgphdO5TUWZDkWU9PyIFBRIlEQUEUlHGoqIKFDT8CGRtE7hSKQwMuCK3DmWff44n323vLfSARc3PGm0q307szO7d0JKCSHEGgCGwP+VJFwT19UBVRsjzztfLpeCCgnElHhOo5ZKyUajcR+Am4r7s9ksxQKLxUIsCVEUCVoTmq4zU/zs/xCaphEdvIf3git2wCRwGaYJjnX69Rjfg2+4kb8gTR9GSsOL9deYTqfwfR9x/XEQBAECEmHbLPDsy1NkxR08uPsIu43neN/6BDqZyapPDuS/DjAnAcMwQF2Og0opj21rG5trm3BdF3kjp9Y9zwNFwe0I4AhRGAL5vLJpGza4er0euyKBvCINBgMe2U3SAVsbjkZ8itpg6zay2Swcx0GlUoEfBIrc7XZRKpVW74BuG6ViEdVqFel0Gv3ZEDqt1et1mKYJxx8hl8vBtu04gkg4sDIZJihyoVCA63vKSa1WY7twSJCILMjjagTLsjirushyuUwCQ2RI9GS0hzeXx9A74APYPpNXX8GivGnTVIR3Vye4d11DkSK1+x+A8gBPdnbR6XSYyC4jAIuEQNayVNZL5yPm9g0ebj1Wz7e38Rn0VaIdtdFsNtX86OjVKYALcEmpnGzN53NJH5Nka2EYKtBzSiLIyWQiz87OJec+PDx4C0Awj/BXgJuEhACTGePxWLZaF+H+y/2DmBgj/p2rANZZWSGu5HxCe9u4Vb8BN6NlkDR81uoAAAAASUVORK5CYII="

/***/ }),
/* 1456 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1457 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1458 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1459 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAACXBIWXMAADdcAAA3XAHLx6S5AAAACXZwQWcAAAAQAAAAEABcxq3DAAAABmJLR0T///////8JWPfcAAAEbklEQVQYGa3BfUzUdRwH8Pf37oC7U+QUPCyOh4TFwyyxBEFmxinDiZCBjyskkAyn8wmVKQqKSJsjJUGSQ0Fg0gEenlyEE4+H4EQ0LAGzBTgRGA+BPZBmMfetfX7wx8+trT98vdDX/6h6wF7qbdnRtPFGn+x3TDp77GxIcS5mcALJ4Ib+zv46vHyGNP0Rvb5xQeMcc0Bd9fHhC5158TotoO8vNpZsY3+GFQUf0z4Afil+/MXj3UDXg+7I7gV4ecotpa2lppZ686GrUVdrOB9Tj94Z27DYfkw6emfsJND75OHah72SNzjBFF8IQiEIhyAIAhn+rytuxq3GtbGRlyfK3y2P5vxecntvx/pcjxZt07nmAsDYZ+isLJB6XOmoTLtswosYxFQQBENMCsE8CFZDEAFTstnObG//iWGafrbeYSj4Zl7z/Oas0ZOczIzmBFjH11WsM0ryQazeAbHZDiK/CGIdCIEcgp0QeECMYUrl5i9dSv8ALj0sR9no6e1m35rzNT9w3rOo27E7JdYLxMrhtfluI24TDvEgtioQZReI9HsQWxOI43SI1YBYrwaxDgaRfQdOgFNfZd3Nagq5YfI15Bguct72/i2nW4+NjZwAw5ZHjo9uswYI/FkBO8/OY5LsKcjr00FmLgVRhoI47AeR/wziNBMkygjswL+8IyRVaqhN8l2VqrL2ssr2PZb7DUGNXsP5nCjucoIXqBNBFu4GmVMNongKYjMCEbd0kFAPkFm12HQ6eka03Drr2b5xw/gHgGFlxYWKpD1WDf614bX5nA8WDowM2ayaywmgdFUqlc5BW0D8LCCKXyGWDZG3tCCBXSASPaY05TRfb65nB76Js7xi8QbMmvqxBuaivjnL0mK5znnPmz/91lVhsAXR+Nkl2PnY2bvYKKIU/vInmLIegnSIvJ0B4hkDERYDQScmaWpyq55V9UrWNF2rk5nLAbO0NqU2rtJ0u/Tm163unA88788ZcnIOG0jpjxjcD6QvOjYtPVMSByIJg4jrIMjsTIhI7SB4FVN04XnjeeNAfrzOoquX5GZPZBuzjwNn0s/knNm2KvDik6IVRcmcf1vfOni7LL5wdPFQ1UgM8PnmUx9lxcrOqt5Tuaq0mOS8CcRnJYh7JMjCFSAaDcTaMEmyQ5coT1QilRMgeXnXhZ5D7MMCjW6Zzu/B0eqOK6NVPdfOlWSc+zs/BVicGbB10R3rDpCAAyBbAkG0G0Dm3QNRRUDwMQQMgmkYrh/xGfEB0odTT6RmAkeeH7x/sFqSc7Bzb8heAEfbDu88HBxjZWyvuHwpol2x5q/owbgAhTfI6j5WyEpYxTw9CPODYAJiNhBMx3+oxV4kIUmaAGItdd/jftK9TN4KwgpLmgueFnqlti1fssx12ZawfJBZn0LE6jMQWQaIzAtECgFLgCAbAicIbKpBXO6D+KaycLaUBftrQRYGee/yvO7ZtSTJJdF5m/OJwDwQz06WxvaxJJ8WkLllIJofQdQZIKqNIMoMECsFCFP/A16M01pW44cUAAAAInpUWHRTb2Z0d2FyZQAAeNorLy/Xy8zLLk5OLEjVyy9KBwA22AZYEFPKXAAAAABJRU5ErkJggg=="

/***/ }),
/* 1460 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1461 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAISSURBVDiNpZNNT1NREIafc+/ppRQIRAm0ddFQ1AUiQfyMmihb1/4p/of/wY1GN/hR4goICESIgBBjpBIK955zz4yL1gJuMHGSWcybzHPOTOaF/wwDxMA9oNCp/yUU8EDDAnfTNH0VW1syGDBgjOmQDKra1jAoSgiKKoj4tLdYnLVAYq0t7TU9uei5Z0pJxKX+At92dzEoo6MVFMPnvRbXyn1FILF0+MdZ4NfhEfH+J4gsSe0BBotITLVaBVVEFJcHrgxZRATAWABjwOfC+soKzyb7oDjM69VNpm9eJYiys7ONqnJyknJ41CKKYm5MTADQARh8UPLCIN43SY3SOzBEHgTnAuVyBVUlD0LmBNHTUW13raqUKyMsLb6jmSoDU89RBdXA0vIqBRtjopjM5dRqYxj0FKCqLLx8w52tBUZsjikW2dx6wfLUY4ZnJ6mNXcdGSu4dSZIgKkSG84Cxr4v0/PxO8+AAW+qlUq3gfmwTwgQbG+t47yhYSxwZTBQxPj7ePaQn3udvfZ6jqu0URVTxPscLREaIAB/A5QFRZbC/xOWh/qfdH6ytreG9P4Vo+2BQRWhDVSHzATDcnpnqjqCqSr1e7zaK/mk4U3e0zAs+dHegEeCccy0RxTufzdyanpufn2+IKiLSzY8f3jcePbw/F5uQ9VhwzrUA97eZAL4AZaB0xlwKHAP7QL2jeaBxse8uiN8k2T4QpeIxowAAAABJRU5ErkJggg=="

/***/ }),
/* 1462 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIfSURBVHjadVPbahNRFF2ZTJpkkhRHG6KieAOrTVJDgqI+iuA3+AXisxAIecxH+AVS8E0shUqUailEMAk+eBnFtFJtCjbpXHOfHM9sOjIm6YLFhnNmr7X3nn18jDHkcrm5YrH4VJbls/DA5/O5keii3W7vlUqlx9VqdSACBCmTyTwEEHYT/H4/URAEh3TmcjgcdgE84SQBLyhpglMCTtUu/hMQRdEhJQEMpmWg2+1AkiJYOBWnOwej0QguhKNILq6Aph/ie0PhpQ4oWdM1vNvagGWZCAQCZDApQIc8mVwP1TYyyzlytW0b8YU4ktdT2Nx667ZzfAU/d7exeHUJ+/tNbGy+wa/fuyi/XsfpxBnohsGpwwvRK2CPbYy5oxSW8FX5jNu37tJds7lH4lIoTPcQMLsC2x7BL4gwDJ36DgVDUJQvmAsGYZom+oMBFwo4v3G2QCw6D1VXEYvNIxqJYnXtBSI8tg4OsP5qDalkGp1OB/1+f2YLNOHz5y7gQ/U97t974AyLhnjp4hVy7fV6aLVadD4l4C7JcuoG6h+rWHn+DIl4AuPxmEpfupaEpmlkpKrqHwBUBm1VNps9wfe7w10YdyTyUlmj8YPt7GwzRVFYvV5nXICVy2WNf3/ZyXMoYAokSk6yfJKGpus6Vccfj5XP52/y2JhqwdvKkborRqtrWZZeKBTu8ORv8ODfc06n048kZ2+PQa1We1mpVD5hAn8BtfILCn/ReMkAAAAASUVORK5CYII="

/***/ }),
/* 1463 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAICSURBVHjahVPNi9NQEP+9vDRNm4ZK2WVBlyrSg7Bl9eJJsKCXhb156NGzR/0D/Ls8eSj0uIInhVXQBauQWgum25c0H8+ZwSztBnFgeNN57/cxU6KstVBKuQACQELh/2EpLwmbE1DiVhRFX0sicxyHk0l3kqI65T7sdO4AuKgIUFrg848Nfv4u0Q00YmOl53sOspxrBZMWaDc1njzoooqKQGntoOfF6O0rUbgZ0nnNAfi0Od/Lr20CaaZODwddK8BGowFFPVuWUudFIbXrunC0xhUOV6Hw/ksCYwz8Vgt5nsOs19hsNigIzHWz2USWZdCOUyfgEZ4ONVoEXi6X7IgBlTshnM/nSJKEW7UdiO2ULpXvo6DHWmtR9zwP/Fe3220ehfu8k5oDmbcThqIWBAHbZgeVovTLsmQnXNcdMGeDF+R5rMoq/JhJeHE8O4/HxOKIwu4QgAAvn71A+inE3nEHw/v7eP76FXzfF3CapuRGlsyEtRFEMdKHKDKDu98O8evoiJUYwLMLaLVaCdnZ2bsPAL7vElAWgxPYG+dIHvXw5nzIBAwW9cVigX6/j9lsFo1Gjx/SXbY9guURssExUjPC28EpXAtWk8VRyDmdTqPxeHyPwOtKuFrIbZMklpQsgSRpWZZAUsdxbCeTyUcALX6/ndXn7AM4+MfnbP/mjN4WuBZ/AISrEO+7YuhPAAAAAElFTkSuQmCC"

/***/ }),
/* 1464 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1465 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI0SURBVHjahVPNjtJQGD39oS2lTAPRQSMIMZnE1bDwAZyFOzduHB7HuPINTFy4cuXGd+AZMI4hEgZRGRj+Z4DSll5Pb+yEsTGe5OQ27T3nnu+7XxUhBBRF0QHkAAkF/4cgV9SGFEo8GI1G5xHNVFWVpOktEskqv+cdpwaglxggoidNYNs2LMvCarWC4zgIggC6rsM0TZiGkYqoJrE1TcXBwQEYCzEymQwC34euabFQPi+WS/hcuefGRydvYjm5HHZRhM1mg+lkgvlsBpXGx8d1mExl0FSjoUpKJAZJfSHFnz5+gM51MBxidb3A/YdVWBkNi2kf48spnj0/heu6UpNKsGTEo0dVvHr9BlfXS1iGjjvFz/h29gWqEuHl6Qv0+33Zp7QBE7jsQf7wHt6+fwcwxXAwhJW1Ua6UYefyGFz8QME9BJE2AA3WrN33Q2hqyJpNlGs12UQBBcurBbYbH+NgjGKxmDbwKP7e62G3i2C6JgzDlH2BEHwXQlFVCu/G72UjCXHLQONd6ySvieVkkLWycSzqI9mfrRcgpBEbKGcjlYB3G8+BPNWi+HI0RaHgymME++E4eazXazlsg8HFVwC/9geJJ1rYbrfxAMkklUqFRjZnI88Sdmi32yiVSuh2u5OTk6dPeKCMkfxMVTbwnDGkSafTQavVigdKxvU8D/V6HcSo0Wg8ns/nM+xHJ6obzxMUCwokwzCUK00EBaLZbJ7FQeP9+0wSWABK//idxR/+5N4d/sJvMTIZsGV7ifQAAAAASUVORK5CYII="

/***/ }),
/* 1466 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAQtQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGx+Pj4+fn5RERER0dHSUlJS0tLTU1NUFBQYmJiZWVlZ2dna2trcHBwdXV1d3d3f39/h4eHiYmJkJCQra2tsLCwsbGxwsLCxsbG0dHR0tLS09PT1NTU19fX2NjY2tra2tvb29vb29zc3N3d39/f5ebm5ufn5+fn6Onq6erq6uvr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fHy8fLy8vLy8vPz8/Pz8/P08/T09PT09fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+/v7/Pz8/P39/f39/v7+Inq9ygAAAA10Uk5TAAEfJCkuL1LJyuD+/jNlRNUAAADBSURBVBgZBcG7SoNBFIXRb+9zJhgVLwjCH7GytwkIvoGvK3Y2QkCwsBPS2FjYeEVREczMP66VuAAAALUl5ewrLEvA2kVL+PywQx4nwpAQ4d/tiKdZEJCQ9s/j2HcfpocBCYryfeK4mWNBgrNsZWSxMCS4vLW7UX057AEJiuHlVFwfgyBBkRWxEh1IsJ83r/q4c7k/vYcE6WA1t5az97/aSMAeoG+8Hi1aI0GwjtpEi1o7CWkZfDvW2iGp5wBAax34B67xO26avax3AAAAAElFTkSuQmCC"

/***/ }),
/* 1467 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH0SURBVHjahVPNahpRGD13HBuzKkmhJDrxB9Fk4zKLrEp36cZnCN2nUNonKNlm3dI+QDduuysuXJX0AaSDiKiJUawEIlhnnLk994NpL9HSMxzmzr33O9/5DozSWkMpdQAgBwgU/g9NXrN24ILwPK/8w/e/Ln8tVSJBUchjdmT99+2m03o7k3kGQASQSqVUGISp+/kcjqMwGt1idHMN5ThwWGQLHHgeKpWKTpy6tu2f0yn29vcwHA7w4vQUm9BsNlGtVmVtCYhlFu/TDbuycxiGuLu8RLxYIKKz+dUVSizmmdxNmjp/BGh9MhmbcYxtEdhmwJnlEo8GA+zs7pq9RGDNgRTlcjm54FAkCAI8cV3orS3g6AgGM+7xXEiohyMwuBvk83lMxmO0Wi3g8BA2uCkuiHUHkjCLRZ2o1+vYhEajYZrpjSEOOWuxVEI2m/1XiDKmZjbrAmShUJAslBVixBBDK0QDO0THHqHf78shx5AQHzPEHYb4lCEuymV0Oh3MZjN0u90YQLDmoFgsJurS7fbsDAmmdHFyfIxarYaLi3efAXy3BWSoXq+HMjsZId/3RSzhnDksmMebt6+/fHj/8SVziGDAhZn9ebhaadrW7KxXXEdRJIzjWNhut4PzV+efAKRNTcLkd84DMFQW8eB7RX7j/QAWfgMWpfAN1s9/FwAAAABJRU5ErkJggg=="

/***/ }),
/* 1468 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1469 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1470 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGWSURBVHjalZPNTttAFEaPf0Jc6jghC0SjbloJq9tW6qoPkDfIE+cZChJQWtSixEhJSxzHyXjmNtiOFRhYcKSRZzPnfvd6xhERHMfxgZDXkYpI4VPxPkmS69Z1gfrYwnXdB+mjBZRf/2qDOQ3ohOEH4KdPTb7ecLPQqMRUAoB9CRXduaa18NjRCHShOO0dok78JoH7NMVDgtUa023bAiPCj4VC3TUJcFy3lJTUKaK/BQfZgS2IoojjyKDftXGrg8/Owl3liJWg5iot0Am7BI2gptx3Zor2wn9uBgXx1myqBM0CHv+J5QqJ7BYotObyXjBT2Y9uCcLZhiBtWYKy57gXIIMAz/NeFJBmSMcWEHW7XFzewxQA6xKJCFprwukG/6iwBXmeEx+9wRkcWpM3xrBcLplM7tCR8Ots8h34Yw3x4l+B3IpVXSnF9PaGb59jxuNxMhwOv4qIsoYY997CYJuiugNN9SzLcFKvPDwajT6JSGa10O/3cWZrqKo21K+V+Xx+vq38RURW7LF7zgFwwssI8FtENE/4DxXYtjwUkl1VAAAAAElFTkSuQmCC"

/***/ }),
/* 1471 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI3SURBVHjalZNLTxNRAIW/mU5boNKWl0VKeUVRKoEgaAIbFq7dQNKFOxfG/+IvcKM7V8RETMQoLIjGheKGh4EQkIfYGOVVa5n3XOdOAi0RTDzJyUlm5nw5mZmrCCFQFKUdGOT/tOB31zQAWTYM85llmT5M9Y2EBkYmp6VpGuFweBw4AWCaJqWjEqoaIhRSZflvIxXAyzCOL6qKXwz5AJXVvRAvlgxml3aIRhO0JuHeSD3DXVXnA1RFCcrTG1VMrUZ5/vodw1eaGBtpx3YiPJn9TL6YInfjQvDcSY+KWboNr9ZrOCx8oz+TpLc1wfUWQUvS4lpXD9PLLiUreOlnA2a/eFSrFm/eL5CsCdMQjzHUFmGgNUJfWkXxdD6u/zofcFiyiUdcbnY3c2S6FH4bHBz5aXh8PYB4VGN736ZSGmUCnXUK+3aYu6MDCG+PtY2fPHq5xvaeztXOy3ihON1p9ZyvAAx21DC1sotwUzTWpnj8do6m2gieJ/iuqwgtwa3ODJVSKxckYhHuZBV2inmKjs5oXw+phoukGpuJVSd5ON6MsHVs2xZnLpC+3VtPS73O0w8/6M00EY+1kamDwUtFFH2TfF5lfn5+Dlg+BYDy79tRBw+GHLa2PuE4Dul4mtKuTjabZWZmZiuXy90HVpASQgCMmZYldF0Xlp9yol8UnucFWSgUxOLiopicnNz0z0A/oMie7zLAcd2Touu60hIQpGEY3sTEhJzdV1mWPj7Ol4Ob/9aynC18UaE/dsoM/H28ywMAAAAASUVORK5CYII="

/***/ }),
/* 1472 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1473 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAF3SURBVHjalVM9T8MwEH35sKumokVVmCrEwoA6sPSHMNCubPw8/kFWhgp1KQMd6IBERRbaSg0idZqYy8mkRKZIPOnpnLPf8518cbTWcBznDMAA/8OUtM+++Rik6fZOqS2ZuUQQHSbKiDp834cQ4hpAZYAk2WC1XtOGxP1rCOFpnDYWOBJbKKUgpeRYot/v781M5JvePruIV8e4CJcI2wKbdY6we4I0TRE0mxxNZbaBS8m2+w4plhCZgvqQKDLFeaZLrRHN2jJgV+lkEEKj1WohCAI0pITrefAMjbhWQWXFSbNBh5gsNgJnLz5sQKzWbMA5mwTbgIVArYIDQqsCG/ZBy8R+xloL9rooCp6DcnKzLNP2Kxy+mcVJkiCOYzRpHsbj8QOAJ6uF30o0N5ZinsD5fP4yGo1uAczqBpaYDdkgz3N4no8oihbD4fAKwKMm/GyB37vX62G321WV0DCxQafT0ZPJZErim0ps8P07nwO4xJ/gnmdGXOELfciNAg/49hMAAAAASUVORK5CYII="

/***/ }),
/* 1474 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1475 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1476 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHgSURBVHjalZNNaxNRFIafczPTqbGKGBSLH5EgFRH78VOsxH8gblwJgmu37t25E0SISPbFH6AgQQMNaoofBAltwTR2MnPn43pnQoaEkEUPvJzV8/BeOFeMMYjIDWCdk81ny353ADI4CMK3WoeIKBtsJA/ZZnYcx8F13XtAISAMQ479Y5QqUSqpDJ4PAGP5ZAqBKLFgyQoUaQS/3hwSpYKyMgTcsmLt/gVELRAoEZwvA9iq0H11QPXuai4zsZDa+PsxrWd/uPXoIt5lj4JjutZmhaWOztuIlDCRsvB4e6c9rm5X6b38VjSYE2R1ze0yZ3zDUVeTWtBoIdXjJktlxc2nGywWKIVYyfXHV4het0kCIdECqeCeUlTWwPFyeF5AJpjESqrPt9h/0UWM4CxLAYvIggbTLcTWPetSfbLK0bvfMzCwuIGM4SIr11b4d06Q9gFJkhAEAb7vE0WRmb+DcQo41cLhVyEepbB5nuFwSL/fz6+w1Wp9BHZnBEzBf9/vsfdpGeXBnYeX0FrT6/Wo1Wrs7Oz8rNfrD4AOAMYYgO1QazMajYy2O6sYx7FJ0zTfg8HAtNtt02w2f9g/sAFIxmUpBHGSFKB9bx4ryLd9e9poND4A6xN4kpN8512gY+wwNf8BCfzuzqzj6KIAAAAASUVORK5CYII="

/***/ }),
/* 1477 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1478 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1479 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1480 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARRQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGx+Pj4+fn5U8UUVMYVXcghXskiacwxa800dM9BddBCedJIfdJNiNZci9VhjthklNdultlwmdp1mdxzmt11ntx7nt96oN59od2Aod5/ot6BsOCVteWavOekwuetxOmvxuux0OjF09PT1NTU1OvI19fX2fDN2vHO29vb5ufn6Onq6erq6+zs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fHy8fLy8vLy8vPz8/Pz8/P08/T08/fz9PT09fX19fb29vb29vf39vn19/f39/r2+Pj4+Pj5+Pn5+fn5+fr6+vr6+v35+/v7/Pz8/P39/f39/v7+9tZubAAAAA10Uk5TAAEfJCkuL1LJyuD+/jNlRNUAAAC7SURBVBgZBcGxLgRRGIbh9/v+/2Ci0shGJyq9RKnnZt2CTuECVIqNSnYzWTNmTZwz43mECwAAUFtSHg8Rsgx0zy2hH2TJtjAkhOWIsJKAhCJncZHlhAS5lIzIwIIED9vr8RAX3cfNLRii3+x9ef+13+yAhPlnOZ5hDfVYIUjp7jCNn+fdw67vmzh9+j0pllXH+fVvTpDCsup2itowEAbW7+HqvTUMAtAy6aXWlYQSMvhtqXUFEQkAtLYC//eWQNaPAyIoAAAAAElFTkSuQmCC"

/***/ }),
/* 1481 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI5SURBVHjahZPNaxNBGMaf2ZndfKJJ3LZpi62N4MkPEA2IWGyI4Em9ePVvkPauLdKC+m8UPHj04CmgqAHJrQHRS9FDUdsoKc1u9jPju9NszAbEGV5md/Z9fvO87+4yKSUYY6cBLOB4MPx/SIo90n4Vw41527bfOo7LYgRBoWa0o67/rrquy0qlchvACADfD/hRrwdNYxR8uGoq2ASAC4EgCJROjNlWyZxHIk6rEqrQjtcYoO5pJAAqgXMlHJ2shLGDOIa5YRhOADSmxARRQmU9CYnF6tlkCXi4ugVJszxjol6rYnFhDq1WCz3qy/kLF7G7u4dPn7/h534HrutFAAka8Wu8ttP+0oyuv/84QPP9O3ARYG1tFe32Dra3X+DM4jlcvlLFlFlUTqtXL9UJ3tBiB44XkngfQjDcvXcHoWRwHQf5fB7T0zOo1WvIZAx4fgiXcuMejAC64CiVSlQvx+9fXeSyOXS7XQguUCiUcHh4BIeA/b6lHFAJSUBARMMwYJ4ykUqn4Ps+1eoq0UAOYJomuRPqZMvqqR4kmti3LWi5LDLprEqenZ1Ho9EAJ2fl8hw6nQPIMIDdt6HrxgCAm3DANQ22ZSOgJN3QsXzjJp0MBD6wtHQW5BorK9dxq76MD803rwB8HAfIk8UCuM4J0lP2yS41LTv6sDzfUyVtbm2+frKxcV9KGSRKKJwgAItcWCp0oZNVgWJxCul0ivZ4+Gj98cvnT589ILEf6yZ/ZxbFP37rkKJF+d745h/oBeekPoesvQAAAABJRU5ErkJggg=="

/***/ }),
/* 1482 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI5SURBVHjahZPNaxNBGMaf2ZndfKJJ3LZpi62N4MkPEA2IWGyI4Em9ePVvkPauLdKC+m8UPHj04CmgqAHJrQHRS9FDUdsoKc1u9jPju9NszAbEGV5md/Z9fvO87+4yKSUYY6cBLOB4MPx/SIo90n4Vw41527bfOo7LYgRBoWa0o67/rrquy0qlchvACADfD/hRrwdNYxR8uGoq2ASAC4EgCJROjNlWyZxHIk6rEqrQjtcYoO5pJAAqgXMlHJ2shLGDOIa5YRhOADSmxARRQmU9CYnF6tlkCXi4ugVJszxjol6rYnFhDq1WCz3qy/kLF7G7u4dPn7/h534HrutFAAka8Wu8ttP+0oyuv/84QPP9O3ARYG1tFe32Dra3X+DM4jlcvlLFlFlUTqtXL9UJ3tBiB44XkngfQjDcvXcHoWRwHQf5fB7T0zOo1WvIZAx4fgiXcuMejAC64CiVSlQvx+9fXeSyOXS7XQguUCiUcHh4BIeA/b6lHFAJSUBARMMwYJ4ykUqn4Ps+1eoq0UAOYJomuRPqZMvqqR4kmti3LWi5LDLprEqenZ1Ho9EAJ2fl8hw6nQPIMIDdt6HrxgCAm3DANQ22ZSOgJN3QsXzjJp0MBD6wtHQW5BorK9dxq76MD803rwB8HAfIk8UCuM4J0lP2yS41LTv6sDzfUyVtbm2+frKxcV9KGSRKKJwgAItcWCp0oZNVgWJxCul0ivZ4+Gj98cvnT589ILEf6yZ/ZxbFP37rkKJF+d745h/oBeekPoesvQAAAABJRU5ErkJggg=="

/***/ }),
/* 1483 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAADdcAAA3XAHLx6S5AAAACXZwQWcAAAAQAAAAEABcxq3DAAAHHklEQVRIxy3T+1NU9xnH8c/z3bN7dlnucolLkeJYCyJRwSyWSFMvVayCOPU2JJGoVQmgmBrr1qjjSAzW1lsUo4kmIY3QqoAiXmJriQKigqKIhugqKrriAiu67J4Du+d8+wN8/oH3a56Zh2bNmzV7VgZgT7aPs4/zmbxAXjBjwcoYSZwtPhQfUCEbpcvWLcI3ZCKQDRHCav8y/9Pwc2XbdLYwjNYd17+vn4RL6mNlk/Ip/NQ31Qz1jxipeaVp1NSjillYNsvGMnmhPF+ez/9aGlZqLDW2imG1YTVhNe5qIflO8otkANbfWGOt5uE30yvSA2an/fjS2O071VfSn1OFvlL5W/WVvKXjtx2j8HdMxFGUg8SMFFtKPUWITJgm/IHfo1LmYk7ovf/0JnkTaZh2mNZXa+Sp7BAbwoaws26La7hruHylZWhLRUtFcuCIX4+IHxHfAka32Q3WBKAW2chhs3RH9BNEXzFd3K+9J3ynLezuuzjlYrwYEZ42PnX8DDFUHWP32vvEEE2+2+Bmuj5qFkqEEjFKbNAl6BLFcMMu/Yf6HF2ffrZ+on6iGGnYpV+vX68tFDfqc/W5YhpGIQ5xbBaLZXEsDhDoDGpRBVAMm8omoZS2q3XqLn5BlxFQEXAUkP5sq7L18cInzccajjXQ7tC6hIKEAshS23P7czvI2Du0fmg9uFTQ+1avGRBX6kP0ITBomtgNdp0XshqWxtIIdJTCKZyvoRwqpmJMoSAaQkMAAdMonaYAqOQFfAMi2EZhu1BIFvWCXClXoi52SU5iTiJZGoPXfLzmYxR1NFbvqN4BxBR90PRBE+Dn9Hnq8xRQL8gxcgzgeeJ50xMP0Ai6Rc2U67PTsNqQjyLhkOa+xkoW3s438I2IwBzMRgYeMQpFEEIAeGDFA3B2jWmZDpzM3MZtgMYozBPmAcnGffZ9dgDRSrlSDjTGb7JssgA9rgd3HtwF/E4H3wxuAvx+9Ff8VUD187Z5HwKuPPcZ9w+Ap9HzxPMYnEXQKSoHp/0UQr6AABPCEAogBKEIBVgejaUIQBOoua+5D3C3kqlkApqjPuU+5UDC/nVV66qAW0t37dtVBNQULPcsl4AhnyYVJG0EEhxrK9aeBgKFoCNB3wNKkjpdnQ90ZzhOOl4DSiYXuB3wNql1qgNgCEEQggD4wgc+AGXSDJoB0LdsBVsBMFUTrYkGNDdxHucBZ3T7mPZxwMidCyoWfA9MN54qOnUVUC/Kv5CzgP/umR87fxhwe3fRhaL/Ad7fO245fgB05coYpR1QDrt+50oAKbecJ52HAAG+gwBxEJDEolk0wHbSCToB8BxKp3SA5QMA0H+w52bPDUB4541Hb7QBupc+Vp/jQMrMndgJoDP4etb1MuBCxnu+7wVAvZdU/HnxKYCfCXwV2IKHvb7yXnkrf97TxHN4NpiAQPjBD4BxEOAHCRJA7zORiQDe4sW8GOC1gwBdz4GevUB43wRhQgxgr2z2NHuBn+99YdmvAPKXr5ud64BxrdvObLsIY8SWlK6UXqDnUPvZ9lPq3Sr7VmlrJ00J2B4VGzUKEBAIHXQAtINhGz2lpwApWI/1AJwkkRugaQMA53dtd9tagCuHLemW8YBrra3dtgf4FV88cvEV8Kjbc0Ln7AFRjSiKMu4onVKJtAEQ7poUUx8S+kXdXN1CJc/9TDdXNxfVAjiMMAIwIRGJIFpFi2gRiA4M/Kl2sbhZ3AzcKftq9Ve5wIMbZavLPgdGLc815HqBSWOXW5YvA6dnWqdWBtl3dFg72uB4vejVjlf/VrKoiqbRMg1q2mvu1zR/U1kafKT2yOWf3PyXvIbXQYu/mbY5tzmBpTOXuJe4471drq76rnp5oZKsrlJXcd4Y+1noZ2HqltKAuJ/j7vMoa+e5t8+d4OF8YGF9hdIBaS+PdtR2j+6O59S6tHVt60HvumetzxSbhvOSrpLOEtuxAwP308/B4ISvhWJhP/YKaqR3k3cT4Kl0v+t+l5bo/f3/4r+WpM5n17quvQSMB8O/CN9NL8b9x2K2rMCjyBlv102sBdAAoA+gK2wqSwV4Gn1Ehfxfaofaq/ZqFl5yXLp88fzx1MyYzJRM05KYgaxcMfbDsdljs6FEy9GuaEAjyNP6+/v7AdXEClmh0uBIfZH3YmX3ZbHZlG/K1x8UNkhMMqhmWiS4hTZK7J8pDNN0wCOZeqb3pEL2bPXme/O4q9fTe6P3qnZrQ07Di4bXXx/JSs5KyYqzOAbCfXvM1eaz5jL0mNvMT82d0ETySDXSA4GGvRM1Omo0IEnSJ9InhslxP8VYY6yR131d4UnhZpT0y653XJPQ4v+nqH9E5SG468vb02/ngoQdhmLDYbTRR1iFlbRNHalOVlOU9CZNk9jkfrTZ8dhhdbz2jsm6lFWTVY0uc5251nwZIcarxqvGBmjtJ+0n7Sfh+T/FaCaAs8+exgAAACJ6VFh0U29mdHdhcmUAAHjaKy8v18vMyy5OTixI1csvSgcANtgGWBBTylwAAAAASUVORK5CYII="

/***/ }),
/* 1484 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1485 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1486 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1487 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI5SURBVHjahZPNaxNBGMaf2ZndfKJJ3LZpi62N4MkPEA2IWGyI4Em9ePVvkPauLdKC+m8UPHj04CmgqAHJrQHRS9FDUdsoKc1u9jPju9NszAbEGV5md/Z9fvO87+4yKSUYY6cBLOB4MPx/SIo90n4Vw41527bfOo7LYgRBoWa0o67/rrquy0qlchvACADfD/hRrwdNYxR8uGoq2ASAC4EgCJROjNlWyZxHIk6rEqrQjtcYoO5pJAAqgXMlHJ2shLGDOIa5YRhOADSmxARRQmU9CYnF6tlkCXi4ugVJszxjol6rYnFhDq1WCz3qy/kLF7G7u4dPn7/h534HrutFAAka8Wu8ttP+0oyuv/84QPP9O3ARYG1tFe32Dra3X+DM4jlcvlLFlFlUTqtXL9UJ3tBiB44XkngfQjDcvXcHoWRwHQf5fB7T0zOo1WvIZAx4fgiXcuMejAC64CiVSlQvx+9fXeSyOXS7XQguUCiUcHh4BIeA/b6lHFAJSUBARMMwYJ4ykUqn4Ps+1eoq0UAOYJomuRPqZMvqqR4kmti3LWi5LDLprEqenZ1Ho9EAJ2fl8hw6nQPIMIDdt6HrxgCAm3DANQ22ZSOgJN3QsXzjJp0MBD6wtHQW5BorK9dxq76MD803rwB8HAfIk8UCuM4J0lP2yS41LTv6sDzfUyVtbm2+frKxcV9KGSRKKJwgAItcWCp0oZNVgWJxCul0ivZ4+Gj98cvnT589ILEf6yZ/ZxbFP37rkKJF+d745h/oBeekPoesvQAAAABJRU5ErkJggg=="

/***/ }),
/* 1488 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAbsAAAG7ATrs4+IAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABJElEQVQYGQXBwW6MURgA0PPd+82k2oy0aaJVkUH3QsTC0iOIlUewsBAJEXZ2XkA8h1cgJEztGqlEG6JEw+gwrX+mnd852brSffRsaQ0IhAC/dp/cHkwS85duOUGoqqIIIUwP3TNJgKqqqqoIIbQggZQO/NA4tmrZIo5AQpF27Gv90zjlu5F1E5BQDX1VVDM9S9Z88VcBCcV7r6046byLFjV69qyAhOKdqZmuM9JPPY1jM5BQzBma6qs2nVXs6piChOKyjzr6OnrY91lfAxKKG17Z9tK60xgKC0YgIYSnntuw7aaZxqo/fu9pSAih646JD0LXnAvejh5fHxySALTCOWPfdAzG968OPkEChFaL1pHx6OG1wRaQOLj7YH4BADZevNkE+A8D7VtIv6P54QAAAABJRU5ErkJggg=="

/***/ }),
/* 1489 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAPZQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAqamprKyssLCwsbGx+Pj4+fn5wMDAzM3Nzs7O0dLT09PT1NTU1dbW19fX19jY2NjY2NnZ2dnZ2tra2tvb29vb3Nzc3N3d3d3d3d7e3t7e39/f4ODg4eHh4uLi4+Pj4+Tk5OTk5OXl5ubm5ufn5+jo6Ojo6enp6enq6erq6urq6+vr6+zs7Ozs7e7u7u7u7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/P08/T09PT09fX19fb29vb29vf39/f39/j4+Pj4+Pj5+fn5+vr6+/v7/Pz8/P39/f39/v7+XI+WFwAAAA50Uk5TAAEfJCkuL1LJyuDg/v5oNf3zAAAAw0lEQVR42kXMPUsDYRAE4NnZ9z5I5AQtEixjZYR0Ftb+afEPmDaNjZJUESJI4IIQ793NednG6eYZmAQW+I95QvF0UApFAJQvA2Brn6mvfkpeTBpggK6akUqKggGuH7VctiPmdBcwOc5ToiohEmC6HmfJ1kyvGJDrOUuNGQHH8ftvMQJOPRcB1PskBAU9Am7srdbC27KrvgL2zYJCsd3Gs8cpl9feWLt/WHpAh0cR9e/Dq1l/htuTEODKz30AewYi7kPHH7RtRWBZDf5nAAAAAElFTkSuQmCC"

/***/ }),
/* 1490 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJPSURBVHjalZJNTxNRFIafzkxhkNYiFKwFLPhBQFBAMa5MIMRgYlzJypU/x3/g2p1x4dIEE2MEQjSAiZUoSgwC0uI0tbYZ7rSdj+tMsBWlLnyTN3Mnd84z7zk5ISkloVBIAyL8n0y/1tE4UI9hGJuelCiKEjiA/mGg/gzuo5FIP/ClBsCT1JXPC1beZNgzBJ7rkUy2cGN6EL1JOwDxW3WAqioALL3aIV+w8Vp1FjYNYtEw61mTl6tZ7t25yOhIdz0JgALUY21v/eDdWo7kcA96KkHHxBlEW5SPwmHLlNx/MI9VtlFU9SggoM4v7dDe10n36XbaOo/Tn4qTC6lYuk7esik4Go+epFEVpXGCldVtjKpDcd+hUrEpWRVcCQ4KVekR7+nig98WjWYgPYlZrPLs9S76yXZKUiGbE8iKg+u4wb1vOwA2noEW1uhNtVH5bvL0xQa53SKxkIdTFIREBdtPtbb8ma5YGKVRCwHz6ngSTIHIFkm1aFw/H+f2xGnOJaIoVplIs8qt6WGklEcB+LFmZ8eYvJRAV+D5wie6WjWGe6I0uS7Nx1Tu3hxkZOQU5XKZmmqr3LcvxKbiQ4J4Dx+/ZSWzz7XxXrYzRbIZg+kLHYwNxQi+z2b33k9NTY75Z7sOED6gtsai6rLhA+aX1ykLkyujA8TDJkMDZ1lcXDRmZmb6/ToBUOunT1iW9KPJarUqbduWrutKz/Ok4ziyVCrJdDot5+bmvsVisRNBTc3aoUWq+7B+JaRQKKz7f77sv1vAkRnoQIJ/SwJfpZQuf+knTGApnaG38xgAAAAASUVORK5CYII="

/***/ }),
/* 1491 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIUSURBVHjajVM9b9NQFD3vxRVR4oglYUiChCBRhhBlQ7AgdUQCiYVfwMIfoAsrIwOqaMlCkZiLxC+gFUoHlnaoURAQIaEmFanTtPnAsZP4ce/DtkjCwLGOfO3rc9699z0LpRSEEBkATIH/gyJ2SGsbgMa1/mCwN51OBQFzRACOg3tMSlUqlW4DsCUCzGYz6fu+YCqmUn9IEh9KfDv+KqDttY+kxcAwQn9JKUUUUoLj11YNbfEdfXeIn6ddHP3o4MOjOhhSSoSIIhGKA9Y+voTpZnEn+wDPV2s4u3AU5ZhUgfq7Ai2euC6O220UCgWkLhp4fGsNMphFaiWJZrOJfD6PRCLBBgsVED83GsjlctrMXDF5WBCRQUrnLMsCYzKZqDkDFnW7XXbXq5qGGbXGGHsekskkbNsO3y3PIJ1Ow6U2JJs553PbeTLuw3EcZDIZMHjLl1qoVCpo0wwY9ngQraQNyLDVaqFarfLzcgv8Mh6Po1gsckwG52C86TzF3Z3rMJpCDzcWi3GVy7sALjUQvPuyjSsnl7WR9es9cKmHJ/fW0KAh93pnNIuEz3OcMwjH8snZgWue4v6Nh2A8u7rLpxQNusrlMuikYmvr1TaAAzCU0pXcpLKU53mKe+PySKRJAjUajVS9vqdzm5sbb3k91jEjA0r+U8wcDodqf/9gtv5ifSMQRgx/5xyALDtrBliIR/TtIRbwG6YpKE+4Me9XAAAAAElFTkSuQmCC"

/***/ }),
/* 1492 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1493 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1494 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1495 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMBQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urq6ursbGx+Pj4+fn5z0kT0VUj0lYk09PT09PU2NjY2tra5a+a5ufn6Onq6bOe6erq6r6s6+zs7MCu7O3t7e7u7u7u7u/v79XK7+/v7/Dw8PHx8fHx8fHy8fLy8vLy8vPz89nO8/Pz8/P09PT09efi9fX19fb29ujj9vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+/v7/Pz8/P39/f39/v7+LXJJWwAAAA10Uk5TAAEfJCkuL1LJy+D+/ovZI7AAAACjSURBVBgZBcE/K0YBGAfQ8/ye542yKQYpg7IYlO//ESx2E4NJ/r0R3es6p2QHgGUdu5v3qXQVDu/W4fWtJpWuEobu9KSTaIZJ7yaTrmqGfHLw6/jlOkXoExe/RxdnusKQsat0KRhqzOF+f+beLUPlqi8jpzYM6aSklq+fR4ZKV6WWp30tqyDB9vlx/r2uQkH9fdXDsmyGSYU8/y3LRukBrOuGf6VrLO1l74joAAAAAElFTkSuQmCC"

/***/ }),
/* 1496 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEsSURBVHjalVM7TsQwFBw7n2vQUNPsQZBgjxmK7fcE0KxIAQUFlKmjbD6b5PF2QoixlUiMNHpWrPlYsY2IwBhzA2CH/+FVtR8xJuyapn3qulbNrBJKQ+I6PWUcx0iS5BEADYi2bVGdK1gbIYosxQFBcD3j18BYo8JIDezEq0CnI+ZcM6BAhQ4p5nfvONwLG/wYRLN4acHppJOrBi5DMee2gfFMwlQiNADPSy4NwtobDaYNTxgaiMhqA/e3BeJhGHC5XDjTNJWwwdLCJ0VlWaIoCt7C0+n0AuDNrfSgN1Hqupau60STpO97USFZVZXkec55OBw+Adwp+Y6sewQfms4ANeP6eDx+7ff7ewC5KP406IchSB7HkbNpmjHLsmc3eeb8nG+5uQme+Z3JDr4B6V6oMfY9ST4AAAAASUVORK5CYII="

/***/ }),
/* 1497 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAbsAAAG7ATrs4+IAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABJElEQVQYGQXBwW6MURgA0PPd+82k2oy0aaJVkUH3QsTC0iOIlUewsBAJEXZ2XkA8h1cgJEztGqlEG6JEw+gwrX+mnd852brSffRsaQ0IhAC/dp/cHkwS85duOUGoqqIIIUwP3TNJgKqqqqoIIbQggZQO/NA4tmrZIo5AQpF27Gv90zjlu5F1E5BQDX1VVDM9S9Z88VcBCcV7r6046byLFjV69qyAhOKdqZmuM9JPPY1jM5BQzBma6qs2nVXs6piChOKyjzr6OnrY91lfAxKKG17Z9tK60xgKC0YgIYSnntuw7aaZxqo/fu9pSAih646JD0LXnAvejh5fHxySALTCOWPfdAzG968OPkEChFaL1pHx6OG1wRaQOLj7YH4BADZevNkE+A8D7VtIv6P54QAAAABJRU5ErkJggg=="

/***/ }),
/* 1498 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAPNQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGx+Pj4+fn5j2sylXQ/lnVAmHdDmXhEr5dxspp1s5t1tJ15tp97tp98uqWFvqqKxLKVxLOZxbOWxrSXx7WYyLedzL2nzb6o09PT1NTU1cm119fX29LD29vb5eLd5ufn6Onq6erq6+zs7O3t7evn7e7u7uvm7u7u7u/v7+zn7+/v7/Dw8PHx8fHx8fHy8fLy8u/q8vLy8vPz8/Dr8/Pz8/P09PT09fX19vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+/v7/Pz8/P39/f39/v7+Lg2IeAAAAA10Uk5TAAEfJCkuL1LJyuD+/jNlRNUAAAC7SURBVBgZBcExLwRhFIXh99x7ZqJSiWYLhUhItlm1hH+NUGq2MpJNiEIUbCFRTAya+xnPY6IDAACqme5isiQJ2LlphnFUKDIlAgwOZReZESQYrOydlqQEg2rbZy0/Xw9fzsCgjzyOt8cvnhnAEG03fMSD4PQKg2a50zAC92BQNyVPq7vl5mT/EkMstkP/G+e1qlswaG+RCtX7FNUwEAHM3+PBujUMAlD70bpqxuBQQGz+qmYwdQ0AtDYD/3A7PlD7A4d7AAAAAElFTkSuQmCC"

/***/ }),
/* 1499 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEqSURBVHjalVO7ToRAFL0zPH7DxtpmP8RE+UwsqPkDtyFYaGGhJTWZ5c3duweRcSaQeJKTO2FyHjeAYmZSSt0R0Yn+h1K0nyEtOLVt99L3nZhpIQkVSLfpKMMwpCiKnuUIA6DrOjIXQ1oHFAQaYo8E4Lzi10BpJcJADPTCm0CmJcbcM4BAhBYhxnNnHdz5DX4MglW8tcC00sFdA5u+GPPYQDkmfirgGxD2BbcGfu2DBsuFI/QNmHm3gf3aPPE0TTQMA2Ycx+w32Fq4hKiua6qqCg2LojgT0btd6Um+RG6ahvu+Z0nicRxZhKAxhsuyxMyy7IuIHoT4j7S9ggtJR4CY4Zzn+XeSJI9y9caCPw3GafKS53nGbNt2TtP01U5euf7O97g8BHb+QLKFK96fqCUWf/oCAAAAAElFTkSuQmCC"

/***/ }),
/* 1500 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAG5SURBVDiNlZMxi9RQFIW/e19mF3ELQVCwUNCtt3ALt7O1UlgHG0t/kpW1lTBbDLZjYSU4CKMjrIWIisVOa0gmL8l71yLJ7GRmFbxwICHvfOe8l0TMDBG5BRzyf/PJzL4m7c1hUfiTsvSIKCIgIkhzgWw4kyRhMBg8BlYAvPdkeYaqwzldAXpq14qcI1cAUcE5h6o2EkFUe+bOeCFARc7NrUSkAW1sR1UvaNACXGdea9FBunXrDXQTwNlvqhdvG1AZ8c/foKr4l+9gkW4Beg3iqylkJTsPDlBV4rcz3I0riAg7R3fIT6bo5V32nt3fboAIIIgo6pptVJ9/4W5faxITh4WIlfVfGgC7T49gkeJfzxjsX6f6+JNLD+8iIizHH9h7cg9382r/ozAzgOPCe8vy3IqisLIsraoqq+vaQggWY7SqqizPc0vT1Lz3ETg2s36D7l1vKoRAmqYsFguSJGE2m02B014D770tl8ut9BCCZVlm8/ncsiyz8Xj8HTgAxMw2D7E/IoKZUdfNwU0mkx/D4fARMLc2edWgDmErOcZoIQQriiKORqP368mdpP2d99uH/5pT4MsquZ0/U/H9Hz5P2jYAAAAASUVORK5CYII="

/***/ }),
/* 1501 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJRSURBVHjapVNNSFRRGD33zVPfzEtTGP8mkn40+qOWQuuCNi5rXcsWtXclLlvWNgJbt0iQAtGCCAOV0n4cQrIccGE2Ojrvzbx33/3r8yIXF7aIDhy+dx/3fPecj3uZMQb/Ax9/w/i4V74IfwXArTIkxsY0joBz8Gz8bnD26pWou9jl85QjTVNIWUMmBDx2HIUwj3yQR6WyUV/7uNBz//ErDoKHA/ScGljq7y36UkgIKUgskfEYSjSpSYYss/8wNHS6o9BfmgTBNXj5dPReX6l0XpBYklhk0p7Mm9tIiXv1GHGjgSRJwXmG4eHhmxMP74y4GZR6i2daTBqlcWwyKZkSCkpKtIZ9hSDHGK+qRjOKkDX3sPNLGWiF7vauawCmbAPm+XGQD9pxCEppbO1VkfMY+ntb25XMKA7xoHIPqYsgmYlxCFIpCHLQTDTIBoxWRA1jtKvE2EWQQkTVHYGllR84FgaUU+DC4El8XVlHWMijzWeo0xy0lpB0+uXBEozyIueAZzre/F3Dhy/fcencAJQ2mHj+Gi+m55EmCcLAx9uFMqq1OpbKFesAjLkGECKLUp5hrbKJN3Ofsbi8Sg5OYKcW2fuwvrGFetS0g/25UcX2bgPUI3YXafLJ6PViVzjDGAOtLSm3pVb7lJZq/1trKGIi/Bu3HzyatQ5m3i8yOsnmU5YcdtpSOB4WS6Uxt7za5iJMz34SjTixFrUyoL20mdwgB+P5QK6FaoutoMq5wrv5b9JFIOudnR3hCGgNC4Wj4F4Tpas30inS7rrHxAj4B5gD4R9vH5YqD2KNFgAAAABJRU5ErkJggg=="

/***/ }),
/* 1502 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJASURBVHjalZPNS1RRHIafe2a85pAW1BApooKrSg3biAmJVhTtiqlF0Kpa+Adku3a1cVOEQi2CWkrhCEmQtKhoY1DjBxrOkI6IOA3ZjM3M/Zgzp3uGmUmRCXrh5Qfnnve5L+fcayilMAyjBTjF/2nWy0b9ADpsWfZLx7E9mPCMhhaNnuyW3++npqbmClABYNs2mWwGIXz4fEKHKxae5+bnSae26evrLa6VJSjJEIYX/Btei8fJ5XIM37nL0yfPSP1KEYt913t2ASoN9Fs2NjaIr8Zpamrkwf0Rzp0fpL//DM3NzXR0nGBgcAAdFULsbaCpgUCAsbHnzHz+QufJY5i1flrbWgmHJ9hMJBgbHa3eQC8Gg0HqG/axnbWIrSZwVB3RaBxFLVNv3rGwsKz3VQfoaj0Xb3CgpQPDXOdI2yGunT6K5UiSaYeZNbcc3gugdNpJ2ySXzvNz28GVCr8wyNmSjOflpNSAKrdQajG7GMVX28iFnnbWkxkevl7h7WySrd8uBwN1ANUbGEKw8HGC4/1XycvDTH6NIKX0rLjU3cjW0nuy2euYpqn2nkHJKvmNqRcj9IZucra7i82tFLIAsU+v2C83i1cdiURmgMUKYOdBDg3dJpH4QfrDI9KuQb1PUCdcGoIm9x5PMj09vRoKhW4BS2gppQAu246jvC9POd50XVfl83lVKBSKM5VKqbm5eRUOh1e8f6ALMHROuwLIS1kJSim1NaA4LcsqjI+P69qd5XDZ5d+5vfjw31rUtZUndugP2eQffK7ObOgAAAAASUVORK5CYII="

/***/ }),
/* 1503 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKBSURBVDiNlZPfS5NRGMc/57yzTW1rSrjS2WYakjOtvKkuqutuBoqB0X3ZnyB04z9gQpdRf8HushJvk6QR6Ky2RTqVbb5zP969m4Ntrp0umhNZBH3hcJ7Dgc/z4eEcoZRCCOEBJvi/hJRSPy2Nw0Q2mwsYRh4pJUIIpBQI8acWAuBkdzjs2O1np4AmgHzeZG8vjsWiIaXEMLIUD4sIAV3Obnp6LiClBEDTZFOjCZBS0tZmoVg0icf30No0SoclzIJJpVzGZuvg9q07uFwXmyAAeQIQFIsF9lMJrNYzJOIJKpUK1UqV9fUNQhshXr95ha4nTwGaBkpBPL6LQqEkPH0yi6ZpVKpVkokk8/PzBINBUJKFhRetBqmUjrXdRr1ex+/38+lzkJyRZzu2w9LyMnfv3cfpdBKLbRONRlsNEok4teoRNls7UkpsViubX7+h6zpCCQYGB3A4nWTSaaI/Iq0GdVUnFApRLpcpl8sEg19IJJLYHee4MjyMw+GkWq0hNQtS/GUGfb19JPf3WVtb4+aNCWztNnrdbjo6OwmHv7O5uUntVw2Xy4XPN9IK8HgG6HJ2s/R2idlns1wbu046leJ8j4uCabKyskzeNPH5RhgcHFItAE2TTE5OEY1GyBkGH96/4/LQENYzVvZ1nf7+fkZ9IzyeecTq6scwED41AxB4vV7m5p4zPj6Ox+tFCAECLnn6GfVd5eXiIoeHRd3v988AEQDR+EyTBwfpQC6Xx2LRANja2iK2u4MUGm63G7u9k0wmnXw4Pf3g6OgopJRSjQekACZLpZLKZLIqlzOUYeSVaZrKNAuqUCiqbDZXDwQC68DYcdPjdWww1Lj8V8JApNm5kd8m6yS2pHaL8AAAAABJRU5ErkJggg=="

/***/ }),
/* 1504 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGISURBVDiNlZOxbtswEIa/I0UGktG4CNzJKLp0CDR0yYN0qLx2y+PlDbx2MAov6ZAM9VAgQbU0MRAVlSlbl8GyIsvO0AMOOPL4f/eTAEVVEZEPwAX/F9eq+jNqFhdluboKYYWIQQREBNkWSE8ZRRHOuS9AC6AonnhcLnHO8+1uhLPK+5N73rgVIQS894QQAEjT9AXWViL8/ndG/viW89EDo1PH03LD6OwdZVmSxDFlWb446wOMCKfmD9494KpA+Oupq4AR2aYxiDFtfQAQEbxUOKcMBgOSJOHEe4y12CZbUMeB6QJoGsaYbVqLbQTSEb8K2DV2h02z189umO5i19o5eE141MGx6Iv60/cekd4V+nVd14QQUFWqqtIDQJfdn1zXNUVRkOc5cRwzm82+AzeHb3DEYjORPM9J05TFYvFrMplcArf7gCNiEUFV2Ww2WBsxnU7vsyz7DPxQVd27gjWG8XjMer1unSRJgqoyHA51Pp9fZ1n2tSsGkOY7fwQ+HVjYjxvgtisGeAZ9yI0CH5xOuQAAAABJRU5ErkJggg=="

/***/ }),
/* 1505 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH0SURBVDiNlZNNaxRBEIafqpnZjTGKGBSDHytBIiLm46cYif9AvHgSBM9evXvzJoiwIntf/AERZNGFBDXBDxYJScDNmt3ZnukuD5uMmQRFC4rugn6feqG6xMwQkSvALP8X78zsU7xXzKbp8KVzQ0QUERARZHRBDinjOCZJkltAAWA4HLLb30U1Ioq0AJRy763Ib2QBEBWiKEJVCRl8fbFNFgSNFASScWXm9hlE/wBQEeL3XViYZO3ZFrWbU6gqlgshF/qbOa1H37l27yzV89UCoIUDEZifpLLqEBVEIixTQj46q8erXFys0Xn6seSgBNBIsevjnOgbO2uOkCnmhOBGTirjytWHc38BqCKRcvn+BbLnbXwqeCcQhOSYMjkDcbU8kwKACLqfkVJ7vMDmkzXEhHhMCnEx3iMODroQoXIyofZgip1X30riw1FyIFqe/8SlCX6eEqS9hfeeNE3p9/tkWWZH/8EBFyJCcML2ByEfBJg/Ta/XY2NjgziOabVab4CVEoAD4h+v11l/O4ZW4cbdczjn6HQ6TE9P02w2vywtLd0BVgEwM4DFoXM2GAzMOWdZllme5xZCsDzPrdvtWrvdtkaj8TlJkjlAzGyk3Qfk3hdC77157y2EYN57S9M01Ov1ZUYbW4jNbFT84zqvAKu213E/fgEJ/O7ODqizcQAAAABJRU5ErkJggg=="

/***/ }),
/* 1506 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAQtQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGx+Pj4+fn5RERER0dHSUlJS0tLTU1NUFBQYmJiZWVlZ2dna2trcHBwdXV1d3d3f39/h4eHiYmJkJCQra2tsLCwsbGxwsLCxsbG0dHR0tLS09PT1NTU19fX2NjY2tra2tvb29vb29zc3N3d39/f5ebm5ufn5+fn6Onq6erq6uvr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fHy8fLy8vLy8vPz8/Pz8/P08/T09PT09fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+/v7/Pz8/P39/f39/v7+Inq9ygAAAA10Uk5TAAEfJCkuL1LJyuD+/jNlRNUAAADBSURBVBgZBcG7SoNBFIXRb+9zJhgVLwjCH7GytwkIvoGvK3Y2QkCwsBPS2FjYeEVREczMP66VuAAAALUl5ewrLEvA2kVL+PywQx4nwpAQ4d/tiKdZEJCQ9s/j2HcfpocBCYryfeK4mWNBgrNsZWSxMCS4vLW7UX057AEJiuHlVFwfgyBBkRWxEh1IsJ83r/q4c7k/vYcE6WA1t5az97/aSMAeoG+8Hi1aI0GwjtpEi1o7CWkZfDvW2iGp5wBAax34B67xO26avax3AAAAAElFTkSuQmCC"

/***/ }),
/* 1507 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHsSURBVHjalZNPi9pAGMafiTEb8NJFPYiHghTxIO2hFw/ih2jx4Fn6GbZfwW8i1i548SpswYP1kBZle6iwof47iH+QaBL/TOedZUIgZaEvPLwzZp5fnsmMjHMOxthrAO/xf/VTeH/rNCKz63pffd8TME0IBJUCdTyX4zhIJBLQdR3xePwjgAAAz/PgHBxoWgyxmKYAgWazGeLPRjlXpakB05gwSrOAaIgJ0Zx0vV7x+e4Ox+NRzsMAPSAxRsawaKH8/cv9vZzfmCYBaBwF0GL5ZmUWIvOTbWOxWCCXy+HGMCIJFEoBSAHofLng28MD6vU6stksTNOkdS8DWAjyw7JQqVSQTqeRyWRgGIYyR7cAAigJM8W2bVtqMBhgtVphPB6jUCgglUpFAcRdr9fYbrfybb1eD8ViEXTRLmIry+US+XyezCpFNMGr21skk0k0Gg3UajUy0GJ5fM1mU16kw+FAW+H/TEAXpdVq0bkHZqrpdIr5fI7JZCITWZb1HcBjGCAf9Pt9bDYbuYXhcCgB+/1efoNSqYRyuYxut/unWq1+AvBLGal98Hyfi6jcF/10OvHz+cxFEtl3ux0fjUa80+k8iav8jgKTjxQAxJkHRvHRSASQ3XXda7vdHgB4q8xK6u/8Rj58uR4pNidDqP4Cx2L6geZjAaEAAAAASUVORK5CYII="

/***/ }),
/* 1508 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJCSURBVDiNlZO/axRBGIafmdndu73ceTkNSTRFfpAihSRIQBsRCQGxEiL3H6iVpY0g2NkKFnZWNhZJk9Z0aqOgECJJIBaJkgu5xFxu73K7Ozs7FrlcOI2CH3zMDDPzfO+8MyOstQghhoFp/i+WrbUbTnswHYbRQhxHCCERAoQQiOMO4redjuPguu5doAMgiiKaR02kVCglO4CubK8V4hTZAQgpUEohpUSHKd/XDggdQ8kv4LmSl3vPmB28xczYTBdAdjpCIKWkthvyY6VG/2BI/4DB78syNHKeQj7L47dPkEoipfwTcCxRsvstYLBk6ckIevMWmY3wci6e43Ll0hSvv7w5W4EQgr1Kk4ulLG6q4MgnDrLIluGg3kAYyfOZF6zsfP2LB0IQN1NypTzKg1bQom/8AkmScLgfEYWa+n6Doil13winBBxPkenxyPS4aFehlAIgNQ2aQY3EDcgnhb8oAAq9Hv45l2zOxS+6VLYOiGLNUbRHI21AGDClJroUnNopBKWBPI0gxPEUOkrQ3iGvMo94uvKQD+8+EzkBw6MjaK3tmQqkgEzOoVqp47hw7/1tWlc3qBXBtIapHGrGhiSLi4ufgNVuD9pGFopZ4ihhZ+snY/Fltqp1JkcnuHbzAddnb7C0tLRZLpfvA2sAov2Z5qI4XkiNQSnV9Xyr1Srr6+v4vs/29vZmuVy+o7VettYeH6PdziXGWK21TZLEGmOsMcamaWqNMTYMw3R+fv4jMHlS9CRPFIy3J/8Vq8Bap3I7fgF1N/jw/C3xfgAAAABJRU5ErkJggg=="

/***/ }),
/* 1509 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1510 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1511 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGiSURBVHjalVM9S8NQFD3JS1vEDoKg4KCgnTvYwW6uTgpaXBz9SU7OTkI7FNc6OAkWoVpBBxEVh3a1JM1L0ne9vbGhSanggcN9yeN8vHxYRATLsjYAVPA/PLL21UGMiu/rRhBoNrOZYFpCjCfScBwHuVzuCEBiAK01XM+FbSsoZYt4hhDIeoLEwLItFio2sGOOBTynxTznGohAhAlFLPczx5G92Qa/BmoiTlrInE4XJsFZA/S+EZ7fxEaBgT67lvv64hboD9IG2Qbmsg24AfJ7ZRGZtx7U2pLs5atb8Bpt2IsFFE93ZxtAXMfunKziY4RPX1CbK3Gio0AjAwqiOQ2YhZOq1NRXHeRKqwgfPrGwvy2CYfMexeMdqPVlpEBEYBz6WpPreeT7PgVBQGEYUhRFNBqNyBgj1x7vDwYD0lqbsYa1qQbJu86STcBC9Pt9+Qo7nU4bwHOqAbvScDjMpgtd16Vutyuz2Wy+AygzLdamH2IWnC4BbCbrVqv1UavVDgB0iZFqEHFSOlnOLpOfi6nX63fTyRNOfueSbP4JOfOLJE/hB1Px/R85SH6iAAAAAElFTkSuQmCC"

/***/ }),
/* 1512 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1513 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH4SURBVHjahVPNbtNAEB6vG+Ud0liN08SJkxeAExwREudeeAcQ1yJQT5V4CXrlxhNEIHHgWEiUH5JGCSqyVY5Yif/iYWai3VrkwFifZnZ3Zr5vx7aFiGBZVh0ACGIW/N+QEFDt+gj2Vt9sNl/iOLF0C2oK8vCOxPe+Uqlgs9l8QqFpAFmW23+iCJSy4P11DQq8F/K0dg02FGbd9X3I81xiVZb9++4ObNuWjccewiMP4EghuI2GKGqenopXBG1agRzUjo+pQamnjpTiBG7OeYLdbqcV6CQLwjAwCj79APhM+HZ1BuvVSliXNzd7BUrpKxgFkuA4jvhn9e/QdF1ptnDOwfPaMJ/PodPpwGw24ybcAA+u8Ov2Fhp8X1ovl0stV4rJdLHAEJuINk+4WClOIFYPut2uyPV9X9T0ej1Zk+kZlBQQfq7XZtKLxcIom06nEk8mE3b6CocKXNfVr4jZmVErEN/v982QD2dAWNG0W60WwJ6VmQxzGIYQBIHsVatV/qoSOUSURg/jOMYoinC73eJwOMQ0TZFZRqMR0n1xMBhgURSYJDG+fnP+gcmp1ihAZuXJt9ttXosCbePxWKSnaQIXF28/Xl6+e07FeVnBA2ZLiDXLMmZmVgazCugV5i9fvbjif4lrNPTv7NDBCcEqAf6Jd4SvlJ9Cyf4C92/84T4cZt4AAAAASUVORK5CYII="

/***/ }),
/* 1514 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHySURBVHjalVPNbtNAGBzv+ifFbho4lINDJQQVHBA3bgjxCsBL8AhUHIoEr4IQB6Q8BOLeSIhLpVZtGqpQg4jt/DjJLpNPsZIQc2CkT/vt2jM74y9xrLVwHOcugIf4P7TJPXalJbnX630yFFNKSVF0rYhylefbUfSC7bHCAsYCeZ7jXxAhYFFLuGWjNbWspZCDztk5W26NQW2rhtl0Bu1qNK7fQBSGcJXaFFCLQ9/TaDZjaO79IMB4NILv+3A9D8V4LM+V1hsCYnGn0cDUAJ1OF57nIoq2kaUpwihEURSwzBk3m9jylg7UqoMRb+NKu65UmqZCTPupnN/a24PLc6IiAh3Mg9docf/ObRELmbcUn497zAhwNN1WReBLHKNEODs5EQI/IKN4jJEhCHwR2t29yd6pEJhvtEZAB/fv7YOo/B38DbUyaNTrdbllMBiskSeTiaw8l344HFkAZmMKWZbhWrSDH8kv9JKfMJx/UAswm83Q/93HVXKFOI7RarW+ADhac0BzkpsQoWI05vgi5Fku4t8vL/H0yWO8//jh2+uDVy8BnAJL0vPBcGi73a7l2Cxt2ul0anmzNcbYJEnsUbttD94cfgXwiKXIE24p8IwChmMS8qrAHBcXXXP49t1nAA9Kclnl37m5UHZQDbPIfGoJrOAPxUgDTP+TrTYAAAAASUVORK5CYII="

/***/ }),
/* 1515 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJASURBVHjalZPNS1RRHIafe2a85pAW1BApooKrSg3biAmJVhTtiqlF0Kpa+Adku3a1cVOEQi2CWkrhCEmQtKhoY1DjBxrOkI6IOA3ZjM3M/Zgzp3uGmUmRCXrh5Qfnnve5L+fcayilMAyjBTjF/2nWy0b9ADpsWfZLx7E9mPCMhhaNnuyW3++npqbmClABYNs2mWwGIXz4fEKHKxae5+bnSae26evrLa6VJSjJEIYX/Btei8fJ5XIM37nL0yfPSP1KEYt913t2ASoN9Fs2NjaIr8Zpamrkwf0Rzp0fpL//DM3NzXR0nGBgcAAdFULsbaCpgUCAsbHnzHz+QufJY5i1flrbWgmHJ9hMJBgbHa3eQC8Gg0HqG/axnbWIrSZwVB3RaBxFLVNv3rGwsKz3VQfoaj0Xb3CgpQPDXOdI2yGunT6K5UiSaYeZNbcc3gugdNpJ2ySXzvNz28GVCr8wyNmSjOflpNSAKrdQajG7GMVX28iFnnbWkxkevl7h7WySrd8uBwN1ANUbGEKw8HGC4/1XycvDTH6NIKX0rLjU3cjW0nuy2euYpqn2nkHJKvmNqRcj9IZucra7i82tFLIAsU+v2C83i1cdiURmgMUKYOdBDg3dJpH4QfrDI9KuQb1PUCdcGoIm9x5PMj09vRoKhW4BS2gppQAu246jvC9POd50XVfl83lVKBSKM5VKqbm5eRUOh1e8f6ALMHROuwLIS1kJSim1NaA4LcsqjI+P69qd5XDZ5d+5vfjw31rUtZUndugP2eQffK7ObOgAAAAASUVORK5CYII="

/***/ }),
/* 1516 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1517 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHQSURBVDiN3ZO/b9NAFMffnc/nO/dIWidtQ9MkNoLyQ8wIOrIAEwNSVYkViZU5W/4B+BNYuiBY4D9gQCAEiEpILIiKEEjstHUSOz7bSXxMRAJ3QMrGm97y/eh93/c9pJSCRQovpP7PANvbO/xfRQi15jryu9l0Nh7v3H0gNUzSy5cqOlLpw2az+anVauGZgkcywuVObxgCAL+zm1IA2P0DsF4uv5LxmCDQ1NeDbmW5iJ+6rnvu5q0beG/v2WdMxAvHOfMFNC0LRr6Rs7BhN6JTRWtKOUV8qdAzufA1DWvpJEX9fv9bOlFeHIWcMYbX1itpDmAaS9Bo1GWxIGYGodg7Cl62v7dhNp1BtX7+tWkylampPh4NOKcU5QBJEhpCCGU7W9GytTLVEEKUEigUBDDGMtvZGnNuQJbFNBj6NLfEWIY8ihiyrJXEdhw59N3Jx/19GIchEA2DEELZjbM/Oz8O+lhl73IAahCIggEzDQOsUjm5cu16++2b5+7Rod+7cPGqRFiF9+/dfvJ3pHMLtZoTM9NAYTTg0XjETJPBqrV2XNusg04IPvQ63kk3MZ+gWj0dM6ojr9vlwXDAGdNRkqTHCLMPpdKq7En5/iQAWvSdfwH2UrBrE08L9AAAAABJRU5ErkJggg=="

/***/ }),
/* 1518 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAF5SURBVHjapZNNSxtRFIafO5mmsQmkUtq6aRULBaGbkv6SLvs/utB/0IV0oQu3he5D9iIuJdJFCChNQ7ROmyoN8SOZmJiZecvFKEN0UOsDh7t6Xs453GMkYYxxgSznGG5GgC8pQBLAtO7IyMHhnrjXtR0MImpfmgxDgeMgRDrrMvdhCuNA3LkYYUZ2oM0DWSpLP3XSDNXZl449qd2Qfm2caWN+R50/fVmsc2WEVOEZVH1kDOAQDmw3YF934gEv3s+wu7JFHIc41nuTJedHtGu9SznoQzQENwNzC28TAmIhrz5Oc/q1wllP2BCFkHoIT15DKk1CwFjI7OI7DpZ/QJQsjy3xKke1jrbndxUM/vMf5F7m6D42UP3LGGKESwJ2ea3vMDyNSBWeEgQBrVaLMAxVLpfXgWbiCIerdW1+8vTt8566+31ZPM+T7/sqlUp14JH1bN36FhqNRmTlfD4/aZ27BkTFYnENmJBEvC7OOQM8Tzhnjeq3pJAx/gFTTJLzzS8W6QAAAABJRU5ErkJggg=="

/***/ }),
/* 1519 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAQVQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGx+Pj4+fn5RbAJRrAKRrELS7IRS7ISTLMSXrkrX7otYLsuYbsvZL0yiMpjisplmc97ndCAodSFotWGpdiJpteKqNeOsdyastqctdufvuOpz+nA0OrB09PT1NTU1erK1unN19fX29vb3O7S4/Db5ufn6Onq6Ovo6erq6+zs7O3t7e7u7u7u7u/v7+/v7/Dw8PHx8fHx8fHy8fLy8vLy8vPz8/Pz8/P09PT09PX09Pbz9fX19vb29vf39/f39/j4+Pj4+Pj5+Pn5+Pr3+fn5+fr6+vr6+vz5+/v7/Pz8/P39/f39/v7+Y8ttXAAAAA10Uk5TAAEfJCkuL1LJyuD+/jNlRNUAAADFSURBVBgZBcExL4NRGIbh+3netw0NaawdhEZiFDH4A0j8YIvUYJDGZhFbpwrB4EujiHO+47qEBwAAQKnJ4GwVCknA6KomdCuFZEsYEiLkcFgmISHa62/N8VTz0wRDvH2PJ5vvyzn3ggT9bOxlPE8Pb84NCW6ROZxaFwAGZcmhH/983QsSNPp82uo6vTC7hCAPttdfXds53l+c3PY1wXGUsspy96NUDNhAW3WTRa0YBKB+rbtSGgmDkMEPfSkNRCQAUGsD/gFOlUGnCOSANAAAAABJRU5ErkJggg=="

/***/ }),
/* 1520 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1521 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAbsAAAG7ATrs4+IAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABcUlEQVR42k1R20oCURT1Fwwf+q1eCkH6irCXKHop6EExq1HTCKWyKAsSNM0sccbreCvH8ZJdpDDrzRd1Dqz22GCyYZ2911lrn7PP0WEqdoxhKSxxi9OctizNqui9HmIIX0hj/gXOdZmF89FUY9RHH3UlxMdLLebe0AQr+jLroocfdFGl+KLsm+oKW9FrHbzFd9pMIYwM0oQCPtHBcWVyhCvRRA5FPKOFJhrIQ4SMfWEssBgPIvGRRM5HJIbuC08gMZCQIcOt4otZTDp7Jo0CJJRQBneiejynVWQhokI8J+qs2QS55XG5e6gKOJ96kzqKhNuibmuBiwSVHNrkig2cRx7/3SiOF+p3w9yxTdPfCyZ5tInKIQMeeTTRodyRmkyxl09CQAM1lAg/0EMLIpyiJjAboixFjgoJXvE2HrSOJ8SZ2aB1sK7eM7/of+AViUSCcpY8L/DMtjb1WcszKjquapDhCk4YTTAJ+1ygcFmwzU9zv0MLbPtkT3lqAAAAAElFTkSuQmCC"

/***/ }),
/* 1522 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1523 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHgSURBVHjalZNNaxNRFIafczPTqbGKGBSLH5EgFRH78VOsxH8gblwJgmu37t25E0SISPbFH6AgQQMNaoofBAltwTR2MnPn43pnQoaEkEUPvJzV8/BeOFeMMYjIDWCdk81ny353ADI4CMK3WoeIKBtsJA/ZZnYcx8F13XtAISAMQ479Y5QqUSqpDJ4PAGP5ZAqBKLFgyQoUaQS/3hwSpYKyMgTcsmLt/gVELRAoEZwvA9iq0H11QPXuai4zsZDa+PsxrWd/uPXoIt5lj4JjutZmhaWOztuIlDCRsvB4e6c9rm5X6b38VjSYE2R1ze0yZ3zDUVeTWtBoIdXjJktlxc2nGywWKIVYyfXHV4het0kCIdECqeCeUlTWwPFyeF5AJpjESqrPt9h/0UWM4CxLAYvIggbTLcTWPetSfbLK0bvfMzCwuIGM4SIr11b4d06Q9gFJkhAEAb7vE0WRmb+DcQo41cLhVyEepbB5nuFwSL/fz6+w1Wp9BHZnBEzBf9/vsfdpGeXBnYeX0FrT6/Wo1Wrs7Oz8rNfrD4AOAMYYgO1QazMajYy2O6sYx7FJ0zTfg8HAtNtt02w2f9g/sAFIxmUpBHGSFKB9bx4ryLd9e9poND4A6xN4kpN8512gY+wwNf8BCfzuzqzj6KIAAAAASUVORK5CYII="

/***/ }),
/* 1524 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHcSURBVHjalVPBShtRFD1v3pupmARSNyEY6aZrsQSylC7sshHMxxT9Axd+in9gCuKm4MZaq8UmC1sXliEJlaZJnCSv917mDgMJQi8c3pu5c86779w7xnsPY8wrAHX8X1wSt+PSh/rp6dmxtQ7OOQRBQLAEIzAmIBjBaDRCFIXY2tpsAegEKjceT9Dv9zGdzjCbzTCfM+YED+8Zc3keDPqyajjdlMtlIk9hrc2wsvICgGHBtAKgVttAGIbQ0AqYIOVnCC32Dz7g6OiQruHzwpQPlgqoiKzn559w//MeFxefcfX1it5z3vHK/iwXUAOtDbC9/RbVahWVSgWNRiPNZ1UseCBEwGcdCF2IUqmEYrFI+0jM1SA/FgWs5ZdMFsBQFdc311h7ucadUBKvlF8UEDLlMoEx9fvx9yOcdRj+/YPCajF3slnwQJUVfLqUH0UROt0u57n/3GrGMg/4A5MKBXiaPGG9VkOhUKABG2AyGSOOY5mBh4df3wHcEKD/wt7tbfeYpk1dFkFKsfMySHd3P1Cvv0G7/TFuNt/vAPjiKXKjPOI5z91TKhGRJJlKa09O2nGrtfdOyXkP5JThcJibRpvCSTW9Xq+7u9vcSZLkUsn5K7wGsIlnQ+78Tcka/wCXdsmACKZdNgAAAABJRU5ErkJggg=="

/***/ }),
/* 1525 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1526 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJHSURBVDiNlZJLT5NBFIafma8XoNKWm0VKuQVRKoFg0QQ2LFy7gaQLdy6M/8Vf4EZ3roiJmIhRWBCNC8UNFwMhIBexMcqt1vK13+24oBRqxMQ3meSczLzPvJkzSkRQSrUDKf5PCyKy5is1qUKh+NSyiiilUQqUUqjjAvWH0+fz4ff7x4EygGKxSP4oj9YGhqHLgIpVOqvUKbIMUFphGAZaa1b3DJ4vFZhd2iEYjNAahbsj9Qx3VZ0P0EqhtWZ6o4qp1SDPXr1l+HITYyPt2E6Ax7OfyORipK9fQGtdBpQrpRSmDS/XazjMfmUgEaWvNcK1FqElanG1q5fpZZe8JRUJKgCznz2qtcXrdwtEa/w0hEMMtQUYbA3QH9coz+TD+s/zAYd5m3DA5UZPM0dFl+yvAgdHLtmCx5cDCAd9bO/blRPhlEBnnWLf9nNndBDx9ljb+MHDF2ts75lc6ezGM8L0xPU5UwBSHTVMrewibozG2hiP3szRVBvA84RvpkZ8EW52JioS6LMJIqEAt5OKnVyGnGMy2t9LrOEiscZmQtVRHow3I7aJbdvy1wQKuNVXT0u9yZP33+lLNBEOtZGog9SlHMrcJJPRzM/PzwHLlW/A6fftqIP7Qw5bWx9xHId4OE5+1ySZTDIzM7OVTqfvASsAiAjAWNGyxDRNsSxLbNsWx3HE8zxxHEey2awsLi7K5OTkpt/vHwCUiBx7TwCO65aNruuK67rieZ64riuFQsGbmJiYA/rPmkXkuFFKdZc2/6VlYEVKN57oN3bKDPy1zFoSAAAAAElFTkSuQmCC"

/***/ }),
/* 1527 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAH6SURBVHjalZM/b9pQFMWPjaEMgBAS6ViGrrQSGVIQDCRIRIztZ2BiZEIwpKoFczOw8QEQ6sAIHdjJRENpByS6IQMDDIBt/rxeX+IkraBSr3R1Lb93fvfcZz9JCAFJkl4BOMf/xTfSDhUc4lzXjS+maRBMpoQF5YRV/1IqigKn0/kBwCMAhmFAm2hQP6k4e3nGovT1Nb73+xiNRgyLRqNIp9P8bMcjQJIlOBwOojtQKBQgW51lGYPBgEEvXC50u13ecwzAApkE+/0eqqryplwux++/tttwEeDy6ooBtO+IgwOA5/t4c8PdbWgmk0EsFkM+n8e7iwtr/pMAdlCpVA4zk8iqrVYLnU4H4XAYbreb3x0F+Hw+fL69hcPqfkh7jfNYKHgisOVKuWxZZEEymeSutVoNq9WKR4lEIiccPHSaTCYoE8Tv97ODNh1gKBRCPB5HtVplwEkH0oPler3Op55IJDCfzxEMBuHxeDCdTtkJrYmjDmwXqVQKXq+XXQyHQ4ZomoZAIIDxeIxer3cH4AcLhWDYe/oTxXq9FtlsVsxmM7HdbsVutxPUVRSLRVEqlcRyuRTNZvMXgDeUfI+eAKbJAJPqZrNhAH1SrovFQtzf91lMB/zWFv8B2FI3EtqdOQnAVdf1faPRuHve2U77Or/mxX8Gz/xTUOBZ/AaUyAQayo7MnQAAAABJRU5ErkJggg=="

/***/ }),
/* 1528 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1529 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARRQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGxra2t+Pj4+fn5YmJiaGhofn5+gYGBhISEhYWFi4uLjIyMkJCQkZGRlJSUlpaWl5eXmJiYmpubm5ubpqamrK2tra2ttbW1uLi4urq6u7u7vLy8v7+/xMTExsbGx8fHyMnJzMzMzc7Oz8/P1NTU1tfX19fX29vb3d3d4eHh4+Pj5ubm5ufn6Ojo6Onq6erq6urq6+zs7O3t7e7u7u7u7u/v7+/v7/Dw8PHx8fHx8fHy8fLy8vLy8vPz8/Pz8/P08/T09PT09fX19fb29vb29/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+/v7/Pz8/P39/f39/v7+jmD+jgAAAA50Uk5TAAEfJCkuL1LJyuDh/v5p95fEAAAAwUlEQVR42kWNuQ4BURiF/20WGSGxFxoKlXgRL+sJdApvIDqMQiaxTMZIuNf479zC6c6XsyBQAH8ZKxAsCyakitTHKwWQ58SItz4iKFTAfPxSVd4rWjDUjMrBLIzmw6dwnUDqDUXixvQZYQ1I2gGHEkAXySckYdZZ7CB4wM1z+dHnFighB2QyK5So9Ruq+B2ieb03voJpcjaPXZLjx7oKXMzpGoeHdLy3tk6MIkS2WbY2pnJAyP3T1jqvRyzgZa16+AGTeTwCGChJ6wAAAABJRU5ErkJggg=="

/***/ }),
/* 1530 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGNSURBVHjalZM/S8NAGMafyyVVO4h/PkAXQRDp0g/hUqhov4HfxEHEwcVv4FyHDoJDF8FJl2qQKjiYRewgDiVtkiY537szuYRAxQce7uVyz+99Ey5MCAHGWANAC//TE2XfbGi1giC8iqKQYBYZEqoMuaIs27bhOM4hgByAMAzhT31YFgfnEsKqhpKqM+UAZjEKcgJY2jJgFUA6WAFYecGYCZMn68eITm/BqSZrODlrUp3gF8A1wOxxLuGl7tUJDCC3VPI8xnfzHF+NE0Q3r3L/bwArAh4/sHrWBtusY3pxVwxXAZAA7RywtLeN5fYOVjq7iN1PGV4wgZkiP8DX6rp2OJLxxAQLsosTTPYv1aGN6yPoEexSxyAIkCQJarWaqACKbB0wdZqmiJHC8zx1C4fD4QOAEaSEULADuoliNpuJKIrEfD4XcRwL6qbs+75wXVet/X7/HUBTsilb/ohGprs8RDBVDwYDr9vtdgC4glSaIE6SSmcaXa307mmv17svds6c/c5b6uFijcgvurPRD1/GvaGqd5YLAAAAAElFTkSuQmCC"

/***/ }),
/* 1531 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAICSURBVHjahVPNi9NQEP+9vDRNm4ZK2WVBlyrSg7Bl9eJJsKCXhb156NGzR/0D/Ls8eSj0uIInhVXQBauQWgum25c0H8+ZwSztBnFgeNN57/cxU6KstVBKuQACQELh/2EpLwmbE1DiVhRFX0sicxyHk0l3kqI65T7sdO4AuKgIUFrg848Nfv4u0Q00YmOl53sOspxrBZMWaDc1njzoooqKQGntoOfF6O0rUbgZ0nnNAfi0Od/Lr20CaaZODwddK8BGowFFPVuWUudFIbXrunC0xhUOV6Hw/ksCYwz8Vgt5nsOs19hsNigIzHWz2USWZdCOUyfgEZ4ONVoEXi6X7IgBlTshnM/nSJKEW7UdiO2ULpXvo6DHWmtR9zwP/Fe3220ehfu8k5oDmbcThqIWBAHbZgeVovTLsmQnXNcdMGeDF+R5rMoq/JhJeHE8O4/HxOKIwu4QgAAvn71A+inE3nEHw/v7eP76FXzfF3CapuRGlsyEtRFEMdKHKDKDu98O8evoiJUYwLMLaLVaCdnZ2bsPAL7vElAWgxPYG+dIHvXw5nzIBAwW9cVigX6/j9lsFo1Gjx/SXbY9guURssExUjPC28EpXAtWk8VRyDmdTqPxeHyPwOtKuFrIbZMklpQsgSRpWZZAUsdxbCeTyUcALX6/ndXn7AM4+MfnbP/mjN4WuBZ/AISrEO+7YuhPAAAAAElFTkSuQmCC"

/***/ }),
/* 1532 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1533 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1534 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIDSURBVHjalZNdaxNBFIafmd1Nmq+CbYmWklTRCy20FYIf+Ae88E7BUPDWf1chIOh/UJRgwS7Si1aCEii26eZjd7Ob8TgkS2is4IGXmd2z78tzZhlljEEptQk0+L/6It4jF2w1wjB6E8eRhGkRImWFSF1yuq6L53kvgCyAKIoYDAdo7fD10w92HtWykEzYsvtZZQFKKxzHIQ4T7t1fp/N5RNA1eHl5X1DcapRYqrhXB2ilOPc9Dt8qUmdIbWuFSsFFAc5E4b/rkQrl9Y0iG080mY85rLMjj+P3BdZrVfJillDcnGaprKlvr1B0llGDPlFvkcAG1J/2CZK+oN5AaxflKPIlhVeEXBm2X7k4uTXpqb8TDIKIBy+r9MMzBhcR+aIQiDlfUVy7Kfu8yuZfCEAaw4sEz9M83Ftj9W7C6c/e1MzMnGlxBOD2VlXwtP1gs1EWghFhPMBdKmcmY8zVBGpqFsFEUSqXOD0Z2ec0TQnDkOFwyHg8NosEU519UwTHCXrZodv5xe6zVWsOgoBut2sJ2+32R+AwI5g/yIvvkJ6fyyGGPN6rUpCgOI7pdDrU63V83z9pNpuvAX9+pudRHJvRaGRiWf8gJkliJpOJXXu9njk4ODCtVutY7sAuYC+hiCwgSdPMKMhWEmBXmX2yv7//AdjJzFPNrvMd2/x3HQK+ufQbfgM3Cfbf3k7lFQAAAABJRU5ErkJggg=="

/***/ }),
/* 1535 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1536 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1537 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1538 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAINSURBVHjalVM9a9tQFD3vya5iO8KyHZumFEqhcwLpVLp3LbQeOmbuHyj5B9m79S/ULXj34CFLP6Z4cAoeKmOIjfEHki1ZX329ukTCRaXQCwe9x9U593DvfUIpBSHEIwBP8X9xTdxRgY9E3u38T0Hgk5gkAGEYYrVaQQFo1OvQdT1jFgoFFIvF1wAyAfi+j627hZQakQPYto2d50FIiTAIYNZqKB0cgCJxjDQyASEFNE0jAUnqZQQk2Gq1+GfHcVApl5NzTkBmByGYnOKo2WTbH4bvMVNTsDjhrkhOgFUDsqpJyZB3X/2ejssvl0ykO//zNweccGw7aVxK5opG6RAXzy9wdXuF5XKJ9Xqd9CsnwMQdJaqmCbnnQCng7P4ZnNBBtVqFR41dLBY5Ae62ABKkAmzViwO4kYvT5mlmnXL5KdRpTHEUYbPZoEwdH/nX+PzjI0Y3U1ROKjB0A/P5nHONRiMvoNOMa/U6j+vWHuPN92c4fngMz3oAKSTiOIZhGKk7ld8DAi0K2zRLRzg336H5+BAv3p4nZN6F2WzGW9jv978BGDJRKRZ7RZ1V1CBF01C0xmo6nSZ3xng8VoPBQG23W9Xtdn8COCHwO8ocYG+2ROKxWpaV7QiJotfrWe12+yWAgaL4w0EUx1w5iiIV09l1XTWZTLg6zf5Xp9P5ul85Rfqcn3Dy3zEk3HDlvfgN/MUPbUv1GGAAAAAASUVORK5CYII="

/***/ }),
/* 1539 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHiSURBVHjadZPPqtNAFMa/TDK5NNFg7sY/iy4uuCzUFhHxJQSh4MK1uFYKpcu+QsHH6MJtH6CbtisXdSG4kZaLpYlNa/6O50xJqDf2g49DyHy/OWcmMZRS6Ha79nA4/Oz7/hOcyTCMqrJLbbfbn6PR6MN8Pk8snOS02+23VBtlwDRNbSEEu4Kw0zQ9AvhILgGVOHTXNQB3XeofgGVZ2Gw2GI/HuHnxhvA+lFGAYjiEe3x69wrX9yWyLKsBeBcG8HyYTCZ45r+G8/gRxGlXXX/8yvHwWiJJkjqAW2VAo9GA53mQUsKmZx0WJ8g9xy7HudwBA1zXhbRt2NKqdjcJ4l5Vyy8DbAoyxLZsSMvUYWmCRO9NhTzPURTF/wE8BgMYJBkmqZqnDhSoqgzHY8rXeBFQVcgrFHlBMANxLnRN4hiHIrt8C2zuIKaFGYdFjCAyAGHCSIBwH+NPcawf4vnn2mw20ev14D2llj2BPM6QZgntesB++5ugArvd7hZADBZ/VZ1O5wHd/4FmU3RI2nTXKggCtV6v1Wq1UsvlUj9Pp9OA1t9wji1Qk4bySbP1vGEY6u7o54n6/f5zqt9rI5yPUtJLGEOiKAoHg8FLCn/DmarfudVqvXccx8UFLRaLL7PZ7Cvu6C8xDt84Uhl2TAAAAABJRU5ErkJggg=="

/***/ }),
/* 1540 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVDiNdZPNahRBEIC/7q7pMLu6uLn4c8hB8BiIG0TElxCEgAfP4lkJhBzzCgEfIweveYBcJjl5iAfBiySIQ2bN7joz3V0eklmSbFLQVFNUffXXbVSV9fV1v729/WU4HD7hihhj5rq7A5Rl+WtnZ+djURSNXNp6a2tr74C8C3DO4ZzDWou1dg4xxtC27Qz4BMwBc+kCr56bAFWd+18DiAinp6fs7u7y9OVbGhmiJmEwTMfnfH7/muX7GSGERYC1FhGhLEv29vZ4PnxD7/Ej7GVWaww//0QeLmc0TbMIcM4hIuR5zmAwIMsyvMhFsL2A3Ov5eTt3VpDnOf1+n8x7fCbz7M4a+ksLI1sEeO/J8xwvnkwc1hgyB2ARp8QYSSndDnDO4b1HRMhE8JmQuYsKFIPVwGzW0rbt3YBOky2RYkLEUEeLiKGpa6Yp3L0Fay3ee+q6JsSE2JpqYsA6TAPj85p/aXb7ELtHsrKywsbGBoNnBjuwxDrQhoYQppyXfxFrOTs7+w3UAKgqo9HoQVmW07ZtNcaoMUZtmkarqtKTkxM9Pj7Wo6MjrapK9/f3q9Fo9FRVUVXswl4uoSklUkqEEBiPxxhjKIpisrm5+aIoih8LLVxtpaN3sBACk8lkvLW19aooiu/X/LvvvLq6+qHX6/Vvqwjg8PDw68HBwbeb9v8xDt84h4V4EgAAAABJRU5ErkJggg=="

/***/ }),
/* 1541 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJYSURBVDiNlZPLS9RRFMc/5ze/x8yYz3xkmaZjUWEDMZIgQkHRwsCF9qCoVW5atGrTtlV/QKtoGdTGiHaGRriowKKgIKehoBS0zMHSRn+v+7stZpzUJOjA5Z7DvedzvucermitEZE2IMP/2Vut9UezFGRc13vg+x4iBiIgIkjRQTZlmqaJZVlDQBmA53kcPXGHzMIjnNgncv5xGr96JDrbCLZn2VfzHvtnC9mKC9y8e74MM9YcMYR09BypWYKGGDXKI+67dAUxYrUaM91CauAATVFug6IywBBB1Wny9ZW4dZol0ymCscm6wmpHJ+auavq6PYxIbaFAhHxjF4uzKcYLzdh+iGVZVIQGV3P9mIUjTCz+YKalGyMe3xrwrfoUVcs19E3uJrkSsNyaIEJorjK5dKOe9r39PJzuRMTYGmAlK1jp3U9VWKCFz0z7DiOVz3DmhaXhHbivY8wsb0PWPcIflAh2wiLfeozVk23kDy9yOZ4jVrXKzLUk96tnubeQwkk4GxSUxyiAnXAIDE02c53vbzoYW3nJnt4r3FpNEagIO7nu8mZAUYFNGNOgAnqMUap7DvFl50EKXoSzbnRhGOgtFTgJG2WCP/eBubl5fjU3ERgWdgJ0FNJgLtLXbjI++uIVMLVRAeAkHUJfY3d0E7VOEJl2uXKtynP7YiuPx57ODJ49PQxk/2phKG0SaqMUxhERtNb4vk99GDE2/mT63JmhAeCd1rrYRmkfDJXSQRDoMAy1UkorpXQURVoppV3XjUZGRiaBNCBaa9aWlL5zZ+nwXzYFZMuVS/YbPzL0kgFfRTwAAAAASUVORK5CYII="

/***/ }),
/* 1542 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1543 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1544 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1545 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIOSURBVDiNlZHLTlRBEIa/6nObO8hFQySSENe6YGfc+QYaHsGnIy7gNViYiMmwMEaiiIrAXDhz+pw+3eWCYXCMY+KfdFKV7v/rP1WiqojIFrDD/+mdqn6Ip82OteWbqioRMYiAiCA3BfKHM45jkiR5BcwAlGVJPskxJiKKzAwwd6ZvRe6QM4AYIYoijDFcnBYMfoyxsWG93cEkQm81Y2mlsRhgRDDG8PHtBd0W3H9oyU2bbrPDSi9DIsP52ZAHm12MMTPArBIRLk4LOnHEcqum24y413aEtCJtJSSZ0OnEDH4WcwnmAKNvBb0EYpcRxg1c0SLkJaNxweTaUlU13z5fLpiBCHGWYNa6RCZwXVWsbSwhInz/MqTZiCnyElvY+Y1wRyBrxmSdjKwdk1/mpGlKCIHgSvxohHNKmRcLEgBRami0Y7JWwpI2ODu5wpY1dbgiThwyFLJaFiforTeRSFACqoE0M9QuMLAJniEaeVa3t3HO6V8TLK80OP86ptWOcZWjuLYUucXlysB6IhfY2vQcHBwcAv25LdwOcuPREnWtDC4mjEcF+cjiJ5407fDsxXP6/f7J7u7ua+AYAFUFeFlWlRZFoVVVqXNO67rWEILWda3D4VCPjt7r/v7+pyRJngKiqjfeW0Dt/czovVfvvYYQ1Huv1tqwt7d3CDz53ayqN42IPJ5e/kt94FinP97qF7nYGOsOSSeeAAAAAElFTkSuQmCC"

/***/ }),
/* 1546 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1547 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARdQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAvb29vLy8uLi4ubm5AHwAAIAAAIIAAIQAAIUAAIkAAIwAAY0AAo0BCpIFDpQHEJYIEZQQFpkOGZoRHJwOHJ0PH5wZIp0dJaITJaIUJqAZKaUVLKcXL6gdMKQpMKgeOa4eOq8fPawtQLMiSLYsT7wqWsIwYcU7d9NH09PT1tbW18/f2dnZ2tra29vb3b7+3r395ubm5+fn6Nj46Ojo6Onp6enp6tj66urq6+vr7Ozs7e3t7t7+7u7u7u/v7+/v8PDw8PHx8fHx8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+TjbjOwAAAAx0Uk5TAAEfJCkuL1La3Orq0wFb8QAAALFJREFUGBkFwclRw0AQQNHfPS3J9pg7N6pwFE6aMwWREAWL5UJoeuE9QScAAMDDmA4296VJxVj/1lCoyuGZ6a0XGFSlu2h6RoFBZQ0JTZdRYHCltWaqIsgLBs1v7D22c27PYKD3HpzIBy8Bg9Z0Qll0nhQMZGv7kLrp+H0EBVl6t/N8PKndwUCNQ+px/HzLa2Agq+47aZ9P7xEYyEVFJb/qzb0wUBGg9MO9QGgGAEQU8A8lp1dw/SsvKQAAAABJRU5ErkJggg=="

/***/ }),
/* 1548 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJOSURBVHjahVNNaxNRFD0zmWnahXRhtS0mfkFbWglYquDCVWqjcSEuXCgRu5NW3ChioYJRN4FK/Q8qiK0oukhWbloRxXUkpKZmUdRsTJs2NfOVud73kkeCRb3zDjOTd+9555wkGhFB07RDAMJolIb/FzHWeLZogKu/v3+wsLqati1bUxRMCnmJT+Rz626YJnV1dsYANAgCgYDmOm5gq1qFrmuMQPOuC0iyysYGdnV3w+B3wzBIKdXbZXOzIJPgJti2jfL6Ou7fe4DJyav4tvZd7ElCVQZkSclys173sLm5hUw6jadPnmNuLoWZmduwHAe9e/eIk/5CoAsCHVcuT+PipQtIJBKInY7jwP590Bo21LDEnxagaw3PNiv48PETUqmHIN9DNHoWxa9F3JlNYpbBKmWfKvk1hsPheD6fz1jseWz0ODo6uhhBBDgHcW7dr8N1bNiOhZWVz0IBcUYxnn1rQFVTwfyjeRh8Sm9fH8o/y1JoT89ulEolzqeuLJCyAKEgFArFf9VqVKlUaGgoQqNHT9DCwksaj56jiVPn6c3rNB0bO0kjI6PEJOR5Xh3AhJhVClrpEi8GGD75AC9qXrxUgDsz+FIoZDzXxdLSu2ZQKiwNRD5b+AHTNBGJHEEwGPQGBgbGeXZ5h4Lp6evc0IkOU4UIGeLw8CAWF5/JH1cyefcFgPftGZyxLIuq29tU4ywcxyHXdYVX6VlUNpuVezdv3XgFwBBzjBaB63k7BgV835fI5XLu1LWpxwBMMaOg/s6HARxkaP+Ax1jmfhtt9RuTujgZ2nxukQAAAABJRU5ErkJggg=="

/***/ }),
/* 1549 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ2SURBVHjalVNNbxJRFD3DQIcWQTSmaAsCFtNotVW7URfq2g0JTU1q3Nf6E5q46R+oTVwa/QXsRCXd2thITNpBpRgpLWH4KJ/DR1IG5HnfhI4LjIln5ua+zM0978y57wmMMQiC4AUwj/+DTL0/zSDw5kqlGq7V6jCZTJyQskBZX1OA8Cc7HHbY7acWABgEqNdVZDJZmM2iTlKrVdBsNfWmM86zGB8/r3/nEEXKAxgEvGixmNFsqshmMxAtItqtNtSGis7xMazWMdy5fRcu1wWDiMNYkWRqbiBfVCBJI1CyCjqdDrSOhp2dXci7Ml6/eYVCIccJhhUwBtr5EIw/VH+6vEJSRXQ0DTklh7W1NcRiMfDi+vqLYQXFYgHSqBX9fh/BYBCfPsdQJVP30weIRKO4d/8BnE4n0ul9JJPJYQWKkkVP69K/juoSrZKE+NdvJLkAgQnwT/nhIIJyqYTkj71hBX3WhyzLOCbDKEjuFygk3e44jcvT0zQ6JzStB5Nohkn4iweTE5PI5fPY3t7GrZvzsNLvTLjdGLPZkEh8RzweR+9Xj6bgwszM1WECr9evzzvyNoKVZyu4PnsDpWIR58ZdaKgqNjejqFPmzVNTATZEwA9HKLRABu2ReTV8eP8OlwIBSCMS8uSDx+PBNWp+svQYW1sfEwB4wAQDAnw+H1ZXn2Nubg5eWvNjDHovennzFbzc2ECr1SzQlJYA6E6eXKbQ0VEpXK3W9aPMkUqlkD48IMNEuMkLu92GcrmUe7S4+LDb7cqMAI5BDrXbbVYuV1i1WmN0qZiqqhQN1mg0GV20fjgc3gEwe7LpIAwFAb34byS47MHOBn4DJuskth+yP6MAAAAASUVORK5CYII="

/***/ }),
/* 1550 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAThQTFRF////AAAAAAAAAAAAAAAAAAAABQUFAAAAq6urrKyssbGx9/f3+Pj4KioqLywsMS8vOzs7QUFBQ0NDRkdGSUdHTk1NUlNSU1NSWlpaXFpaZGRkaGhobG1scHBwcXFxf39/g4ODhYWEhoWFh4eGiYiIiYmJjY2Nj5CPkJCQlJSUnZ2dpqWlpqampqenp6enqqqqrKyssrKys7Ozuru7u7u7vr6+v7++w8PDx8fHx8jIzc3Nzc7O0tLS09PT1NTU1tjY2NnZ2dnY29vb4ODg4eHh5OTk5OXl5ubm5ufn5+fn6Onq6erq6+vr6+zs7O3t7u7u7+/v8PHx8fHx8fHy8vLy8vPz8/P08/T09PT09fX19vb29vf39/f39/j4+Pj4+Pj5+fn5+fr6+vr6+/v7/Pz8/P39/f39/v7+f7ZEJQAAAA10Uk5TAAEfJCkuL1LJyuD+/jNlRNUAAADMSURBVBgZBcFBSsNQGIXR7973p1HoREGsEyu4BlFx4jJcoBvo1D10oGBFdOBIS2iCtg0tmtd4jnABAAB0OSjuWluSgPI+B6xbp1W1PR4JQ4CTX6oyZm9XQ0NA8ufmtkx6er5JYNAyXe9HKi7OXgUBalI4JROrHRj8t3mPwvJjWYOh+t7mkOS8rsHw0+6EZPUbgyFG/UBYXTGYQsCwOTyoZ4PLxfnePBNwcjT/apb6+B1PciZAnI6VcrOYdF1PQFgGP+Su60GkAABy7oF/sENHtVNRWAAAAAAASUVORK5CYII="

/***/ }),
/* 1551 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1552 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIjSURBVHjahZM/aBNxFMe/v7uL1SEWKVWxDW0iEkScVFDEycEuDi4OiuDgIDgoIkJGKeIgqJMdRBB18Q/qIJGC/0AH62YMKXEISa1tmlZr7OVy/3++e0lI7iL4jg/34N73+3vv3Z2QUkIIMQqA4BD4f0hikbQVDa0YNQzjo2laomNBpuCLcnDevcdiMZlKpSYAsAGH47jqmq5DUQShhBARA1XT4Lou65TetpdrNaiqSmjQqIhyNlAJyplgZEVweciAT9k2MtIuVEJCpQXnH95NY/l7AZ7nRQyo9Wp1sWXQFpModPqb6Zf49vkFanOzfSNwW4lEgu98YsTEMk3cvnEF9YVZLKw0AgPZN8KP+XkWsokSHuPO1E2s936iZg3i0JHj6ISGrgPGxschwm+Azd5mH2AwvgH7Dp/EmXOXEI/H/7EDYq5SCYkbf1aQfXQNw8ObMDS0ESdOn8XmLVu52+gOuINkMsknCmKtvoSZ9w+x58AEBsQqflW/Irl9Bz8Lon8HRLlc5gKjsYpXT65j5+6D+L30Ba+z97Fr7zEUi0UUCgWUSiUfgBXeAQV9ntCp7cd3M9C0dcg+m4LtKzh66hZsbwDpdBqOY2Py6uRTADMskpI72W9alszlcrLZbErLMqWu1yk3JC1L+r4v8/m8NM2mzGQuPwcQC3RE1yCYybJt6TiOpJyFbTFD7bsXLp6/1yNmOr9zAsAYIXpAJPeIT1Rvoyf+AtdjBmn64/zPAAAAAElFTkSuQmCC"

/***/ }),
/* 1553 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAI5SURBVHjahZPNaxNBGMaf2ZndfKJJ3LZpi62N4MkPEA2IWGyI4Em9ePVvkPauLdKC+m8UPHj04CmgqAHJrQHRS9FDUdsoKc1u9jPju9NszAbEGV5md/Z9fvO87+4yKSUYY6cBLOB4MPx/SIo90n4Vw41527bfOo7LYgRBoWa0o67/rrquy0qlchvACADfD/hRrwdNYxR8uGoq2ASAC4EgCJROjNlWyZxHIk6rEqrQjtcYoO5pJAAqgXMlHJ2shLGDOIa5YRhOADSmxARRQmU9CYnF6tlkCXi4ugVJszxjol6rYnFhDq1WCz3qy/kLF7G7u4dPn7/h534HrutFAAka8Wu8ttP+0oyuv/84QPP9O3ARYG1tFe32Dra3X+DM4jlcvlLFlFlUTqtXL9UJ3tBiB44XkngfQjDcvXcHoWRwHQf5fB7T0zOo1WvIZAx4fgiXcuMejAC64CiVSlQvx+9fXeSyOXS7XQguUCiUcHh4BIeA/b6lHFAJSUBARMMwYJ4ykUqn4Ps+1eoq0UAOYJomuRPqZMvqqR4kmti3LWi5LDLprEqenZ1Ho9EAJ2fl8hw6nQPIMIDdt6HrxgCAm3DANQ22ZSOgJN3QsXzjJp0MBD6wtHQW5BorK9dxq76MD803rwB8HAfIk8UCuM4J0lP2yS41LTv6sDzfUyVtbm2+frKxcV9KGSRKKJwgAItcWCp0oZNVgWJxCul0ivZ4+Gj98cvnT589ILEf6yZ/ZxbFP37rkKJF+d745h/oBeekPoesvQAAAABJRU5ErkJggg=="

/***/ }),
/* 1554 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1555 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKBSURBVDiNZZNLSFRxFMZ//9d9mWaZSa9NSOHCRRlkCfbe6MJlEbSIqIiCwl0tEloIrYKgRbQoemyqZemiFxUSZreyJxU0hEZaTY6p6czce/8tRsdsvt05fOfH+Q4cYa2loaHB2bh7x4WciZfxj4SQCCmQQoAQiEITkxVfH13u3h+GYU5Pe4PX+dTOh+96XQClNI5jMNqgjUErhVIKOQ1ct7w+CxwFioCiXMfFcV0cY3AcB601RhukVkhZAHi+V/TPAoTA83w818XVDivdJdTV1DKc/ckXm8Z6hWEEOJ5rSwDGGHzPo8ZZQPuaPVRXVJIaG6KtaguLKqs4/ewiA+oXEonRunQDYwy+ctm7soW36U/cG3oNvkJnFI1qNaeaj9D9/jEDmW/EKDEzJ4sArXHn+Vz7/oB79g0i0ATKo1wHTEZT5KOIYy37qK6oQiSzNysCtDZsXryWtrqtONqhTHoEwsW3DqNM8urbB6IoIiImkcUTzEbQRlNZXsmJ1sO0fGrmQu8NBkkTkfBLT3Bx8Db3b/YhEvAXzrOlGxiNkIXS5hN+To4QEROJmEjGJFFCOpPmRZIiT1waQSplU5lBDlw5znh+gh0r1uNMQC7J449Jdi3cRGP5ahjLE03lSyNIJUmpH1TIgHMvr9O6tIlTTYcY+Z0hF0f0pJ7zxH5kW+0GlmTn/3gH2TkAIQRaKBSSCZ3j6vc7XPrahZtTDCcjbF/VRNem83T33R/v7OjYHIbh5JwICJAIBAKLxQpL7MGQP0YiYG11HV1P7/7pbO9oCMPwc0mEfzhFWVuok8SSjObGz5w82xiG4cc5/pl3rq+vPxgEQdn/wBn19/ff6unpefN//y9OReJfW8LQrgAAAABJRU5ErkJggg=="

/***/ }),
/* 1556 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ9SURBVHjahZPfSxRRFMc/M7Mzs/7Atl1rlUxYQVdXlJAKe5DICuqhXoL6EyIMeop6DCukx6LHerGgiAoWo7eoiIqyCAoC0XJrddsyS911d2bnV5dZ3VwhOsPhDHPP+dzvnHOv5HkekiRtBVopm8T/zQNmRW0qQNm2FAqFp4ZhSqsIAcV/JMB//xtVVfXa2toOABUAlmUruXweWZaEK34ECAQCSOsAivhm23Z5fa1sWZZRFJnXT5LMZ6dpbNC58/Al/du30RLrYM/Bo36iLECrJpeDL1kUK4zdHaWrRScei5LO/ODzdJq+zijxZpl7t64jcvxcx3GqFCDJkr+7bs/z7PkXimaJxZzBwI5Obicfo2kqsdYWHyCUrv8FX5a/0NcTo0YrS7Rsh2LRxDAMSkZBxFJFgQB41QpWAJ6n4Lo2tuNSKlmULBvHtnAdW6j0G+o7UK3g5KnzIMGGWo/+7gZiUZXfSwamaeC4Mqk5jU+zy9wfH0aMu9KD1YO06/2HiRcAUxMfefP2HaaR48TQEOmZrySTD9gUbqQz3kF7V68YrUJvT3yfZVmPKlMwLZfs9zmWfqbYvbODpuYmIo0RgkGNAA497VHyv9LYjodh2pUeVACqoIbDYYLhNr7ndBZyRbLfMuDJ1IU2M5UtYakRMjMplvMLLmBW9UAQEUeURKKb3OIis5kUoVCIurp6Ad5IoivB3sEB0ViTCxdHksCrtQCvUCxQL9cS1GsIRyJIsszk5KQPdV0PPahjmibDw+fGRkYuHRO9s6sUqIqCUTTQ9SCapjE4uJ+bN67hIXHo8BE0VXXOnD09euXy1eOi2GLF1l9nCeH/uNYOMC7yS6yxPwIJBq3Ga9QFAAAAAElFTkSuQmCC"

/***/ }),
/* 1557 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1558 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJNSURBVHjalZO9a1NRGIefc3Nzb5LaJNV+WI2tbaKo1ICkWCgFBcWhQofWDxSd7OLg5OLq5B/gJI6CLhFxq7QiHVSooqBgY1DQBlqthmhrmvt9vGmblNIg+MCPlwPnfd73DEdIKRFCdAMZ/o93fu8nlTUyhmE+tCwTIRQ/VKWroVrZjKqqBIPBMaAuwDRNjp28S+bnY/TAZ/LWCdq/mYRT3dg7cuyPf0D7nSDXdJFb9y5QQ2EdoQjS3gtEfAnaAsRdk5Bl0GcHCLRI1HSC5MhBOrw8ArYKFCFwt0uKrc0Yfl1S9TUxGjlDUOlNoe6OMdRvonhugw2EoNjeR2k+yVS5E81yqu+kyVG4lh9GLR9luvSLQqIfJRRqLPgeO010Oc7QzB4iKzbLXWE8BJ1Rlcs3W+nZN8yjuRRCKI0FwUgTK4MHiDplEnxhztLJNj9HXxQsje/EeBOgsLwNIdgqQAi0cJBi13Eqp7opHilxJZQnEK1QuB7hQWye+z+T6GF90wZqvR98gY6tSHKZG/x428vkyiv2Dl7ldiWJ7XpokfrlDcHmDTScgATXZkCZIDZwmK+7DlE2PXQ2cBxbNtxA9wWuCtbCRxYWFvnT2YGtBH0xSM+hTS0x1KMyNfHyNTBbE9TRIzqOJdF6+/G6pvFUrT65xS1y51IXTyafFUbPnRkHclueMJZWcaSyfgz5EUgpsSyLVsdjcurp3PmzYyPAe+kDwHoddVxX2rYtHceRruuuxvO81WoYhpfNZmeANCCqPbXUvnMKSPNvZoFcbXKNvz8y9JLQWaLdAAAAAElFTkSuQmCC"

/***/ }),
/* 1559 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHlSURBVHjalZNNaxNRFIafczOTqbGKGBSLH5EgFRFti7/ESv0H4saVILh2696dO0GEiGQf+gMUJGigQU3xgyChLZjGTiZ3Pq53JmRICCl44OUsLs/De+FeMcYgIhXgDv83nyz7zQFI4SAYvdV6hIiywUaykG5mx3EcXNe9B+QCRqMRR/4RShUoFFQKzweAsXwyuUCUWLBgBYokhJ9vDggTQVkZAm5JsXr/HKIWCJQIzuc+bJTpvNqncnclk5lISGz8vYjms9/ceHQe76JHzjFda71Msa2zNiIFTKgsPN7eSY/LmxW6L7/mDeYEaV1zs8Qp33DY0SQWNFpI9LhJsaS4/nTtGIFSiJVcfXyJ8HWLOBBiLZAI7glFeRUcL4PnBaSCSayk8nyDvRcdxAjOkuSwiCxoMN3C7uJpl8qTFQ7f/ZqBgcUNZAznWb6yzN8zgrT2ieOYIAjwfZ8wDM38OxgnhxMtHHwRomEC62cZDAb0er3sFTabzQ/AzoyAKfjP9i67H5dQHtx6eAGtNd1ul2q1SqPR+LG1tfUAaANgjAHYHGlthsOh0XanFaMoMkmSZLvf75tWq2Xq9fp3+wfWAEm5NLkgiuMctPfNYgXZtndParXae+D2BJ5k8p2vZYfHzw7QNnaYmn8cy+7TvjE1nwAAAABJRU5ErkJggg=="

/***/ }),
/* 1560 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1561 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGMSURBVHjalVM7bsJQEFw/m88t0qSFJh2WuEKkBImWggNQcAx6zmCJgKD2CRygiIukiOSkpEYOtrH9srtojWPFkTLS6C3Lzsw+YwytNRiGcQMAd/A/vKD23aKKxFEUPyVJjGYKCWTKBDorSsuyoNFoPGJZGEAcxxB+haCUCaapSFylGHEtKAwMZaDQRAN1IQlUyUiENQYs6HY6EsGCKsQ8CIJrDyprrVYrsHs9uPZ5M7ozs9VqUa/GADmbzWA6ncJyuYR+vy8iZrvdps/1BgrpeR4Mh0M+HccpRM1mszArwyrtykM9XH8ymXBrNBqRSB6usOZXQKIBi+fzOex2Oxrm3n6/B4Ft27UbcNp4PJaHRgZU01aSzP3z+ax/3WC73bJAhoVZlsHxeITD4cBv4WazecbxVxZqzWYP+Cbq0+mkkyTRlJCmqUYhMwxD7fs+n+v1+gPnu5RJWlW+QgWUzgFoxrXrup+DweAeAHyN+LFBiknV5DzP+YyiKF8sFl45WSh/51v+8k/wnd8kWfANlBjDDCETRsEAAAAASUVORK5CYII="

/***/ }),
/* 1562 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVHjajVPPaxNBFP5ms9pkV6TWpEhCTm7IJSEXKz0V/CPqPyKCCv0LvEiwxUMbD4JeFLxLT7aol5bSSIsSI2h+tCTENglhN8lO5z02wybtwQcf7+28+d773syskFJCCJEAQBD4P5MKp4rbMoOFu+fd7u5oNBLKEIauSHHgI4Yhs9nsCgBdAOPx2PB9n0mGAgwDmqjJ7DlSzTgwJvWJxFDEMJIvbmO7us1xJLQ+MR1xlzA5KLY4fxNPPz2BNDBVWCmQ4QJMHg6H+F2tTm20zBhWc6sofd9CpVKB67rcbHYEnu346AipVAqu52nJtmlh7cEazrwzzpXLZSijZpcVtNttWJaFeq2m5zTFdfbJG0nYto1Wq0UKrj6DeDzOEtPptF7ruF32zryDwWCARCLBObrySyPk83nU63XEYjEiBQV67JfuLKGmlBUKBfrWI5hhBdFoFJlMBp+7H/Hq+Dl+fDtB+/Ccc3OROTiOQ++FVOpbMDHz0v74B3j28yE2C1/w1nsN8+9XyvL5NJtNdDr/YNuWT+c4rSDwtljA/cV7KP56jGviFt48esddG40Gcrkc6LWWSlvvAewzQUpWsqxkSc/zJM1G8hSJoQiy3+/LnZ1dzm1srH+gfsQj6AKUvILM6PV6cm9vf1x8WVxnYgiT3zlFV02VGdqm4r7ae4gZuwBWXBOy4jWJUgAAAABJRU5ErkJggg=="

/***/ }),
/* 1563 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAZVQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDw0tLSz4GBz8/P0tLT0zMz09PT1HNz1aur1tbW2Tk52pub29vb3Kqq3Le33ZmZ3d3d3iws3ry830xM4DIy4UND4U5O4ZmZ4js74nFx4pub41FR49LS5FdX5UpK5V1d5mNj5mVl5zAw51VV5+jo6Ojo6Y+P6erq6urq6uvr63V164iI66ur67S067y86+vr6+zs7Ozs7O3t7X5+7YCA7YmJ7aSk7e3t7ufn7u3t7u7u7u/v74aG75CQ76Gh78DA7+/v7/Dw8ImJ8PDw8PHx8be38fHx8qam8uTk8vLy8vPz897e8+zs8/Pz8/T09LOz9NjY9PT09PX19c3N9fPz9fX19fb29s/P9vLy9vb29vf399/f9/f39/j4+NbW+Ovr+Pf3+Pj4+Pj5+Pn5+eDg+eXl+fX1+fn5+fr6+vDw+vj4+vr6+vv7++/v+/T0+/v7/Pz8/f39/v7+////UIpv/gAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+PvR6IwAAAUJJREFUeNpt0VdXwjAAhmFwoOJW3HvvvcENdaDgAFvRVlGLFg0WNaIEDZo2/m4pJ/XCw3v5nO/us1hzZnCR/V/FFoPtWvwVoRSGGKdThBC9LD/LkQXnMjfR5fIKwYAoSQnGUaeba9nf61wUBFGORFKMgZvz99WJ3QGnVwaxWJqxyvmDofbmYSBt8gAhjXE8o5I81ngB+YBPxiZDQ6PqaO/WOQE8T0wWDIWrz9tzh99EMRmJV4qawAck/L4ycHT7ZXJYiUGcPIFAf5vub7thjGUQR/jpLHw/O7QhI2qyMSbXO+OD64qqAsw4ragIf8yPrL1gEPJ5akrzskwAxI9Tk3eUKK76VkdFgdXk5MzusU4h30A7Km1Wxiq6PF0iVFM8TT3VGf1j9eFTp0R2Oaoyylgnmq5T+kNxbbkt12klheaXOfsFJZFozWbpXP0AAAAASUVORK5CYII="

/***/ }),
/* 1564 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMVSURBVHjapZVdSFNhGMf/W5tOm4IaicyMVkiEBoF00UVC3iR2IXQTKeZuIoiKosAbtabFzG4HCVYX0xIC85MhtatAYVFzfuRIKz+aO9O5WNvc997Oe+KcXucGUn94eN/z7H1/z/885z1nMkIIqGS86ID/E6GiE4WYaWlpaWjW6fQyqj+VQEfhioZYVS6HMKSB9vb2tgHo2wEuLS09plbnHZHLZfxeOQUKo1REDKaoWDAcCkGVkwONRnNM5MmZNgggNgSQMM8cDrsd6ysrwnwH629zZCxwN4TmUgq9HRnGF7sN5RUVwrX4vBgwdUsjBc5EapGRgVdYnp9D/RWdlGelACPp9hl3dM4GCEF/z1NsrCzjVsdDKLOy2P3pwRKUccxCqYxdBvjcHO51dSNbpUImsWARxo7UtTTvedKNXxsc7hoe01Mg5DKJbUwqSOon1ejwMHybbtx51IV9CgXC4bC4R4zMjiWXTH9XV1exznE4UFKCS9dvYtPjQVFREfLz8xngXhwzrdje3sbWTy+KDxbD43ZDqVSirKyMQsXnwO7LDAYDnnFN47bpBlTZStinP6G6uhrxpSX0NTYiHg5L694bLBjveLMHxwBmtmxoGr+Idz4zuCiHuroLSNpsmGpogH9yEn6OE9Z+fmCHwzAH58QaYrEYzWU4FQDs3o+4Zr0M7E/AVDuAs4fPIWixwKXToUStRu3gIAq1WnjaXPAbvSivOo6TptOIRCKIRqNJwiutY/ePdSihwIvzrylUyH1YXIS6oABnRkdRWFmJRCKBl/MWaKoO4cSzUwjEA3C5XGGTyTTCfkAFptFovB8MBkkoFCJe3xbhqxP+9kg8Hic8iIQCAZJMJoUcXfft63cyOzNLeCCxWq2JmpqaWsqhPBppT4U6Jw+pys7NpRuoW6GfgaAf2qNaOJ1Ootfrmy0Wy4TYBio5C00tkiIJTINqYWEh2dnZeXVsbKyf/y2561QwldLBWbAUMV6tra31Q0NDzxno7lPhcDj4F4xbk1ExQOYDLrkNBAKR9vb2JrPZPJXJ1D//mYouM+k3nABwH7c+/JAAAAAASUVORK5CYII="

/***/ }),
/* 1565 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJVSURBVDiNtZW/ahtBEMa/2T8ybuJOaYUFrv0EegAH4yJq06aLOj+CCslVjIU7uQtChMQJQiKkFEJSa3dxjDBG4KS6xka+u91J4z2tpDuREDyw3N7s3m9mvt29JWbGc5jyX4ioCGD3P5mXAH6oJefudDr9eHNzA4BAlEQELU10g76/WCxif3//3XA4/LkMRqvVQr1eT88lJQARQQgBIsL74+PEvwKep7kK8M3B/KcQIhucVvJckTkoDSo9sFjmOCsUCglUCAGlFJRSkFImfaUUtNaJX6wFP5XcPDtD4+QEOzs7kFJmAl0/l8styLUCFkRQWuPV3h4GgwGazSbq9foCNA3ugmdqLISAkhJEhOvra9ze3mJ7extKqUTL5YXz+5lgKSW01jg9PUU+n0ej0UC/34fWeu3COX8mmIggpUS73cZgMIAQItGv2+0m88bjMWq12kKgtdvN7YDRaAStdVKFEAIHBwcLAOf/KynK5TJKpRLoaV8uf+AyJCJYa5MGAPl8Phv8YmsLm5ubK9r5DQCMMYiiCFEUwRjjAjze3d0FADj15GXBnBljEIYh7u/vMZ1OsbGxgTiOudPpfJpMJt+YmeE3AK+jKOKHhweezWYchiFHUcRxHLMxhq21bK3l2WzGQRDwxcUlW2v56uqKj46OvgB46VipRzotS2fWWhhjEMcxiIDJZIJer/f98PDwLTP/cvMy/xVZ5jKy1oKZ+fP5+ddKpfLGhy5MdFIYYxbK9yVgZrbWchiGHATBY7Va/eCX7zfy77x/vJpCAGNm/p02SM91mf4Btuk8sJCRF4sAAAAASUVORK5CYII="

/***/ }),
/* 1566 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALjSURBVHjatZVfSFNRHMe/917ddGoPFc5MLVCI/qAIGQ3yISowInorepYefAt7iBB6kaAXX6PXIug1SAgLQopmUbO5u8ImGaghFRnVdLv3nHtOv/02t+lcU6If+3IOZ+d8ft/zvdzN0Frjf1QVcmUYRguA1n/kzZPRhSIwV8vKSioshKAm3Ik+JFCtHwtuCg4tCz6fLwSgBGykHQepVAqmaZBMBudVptFqERVAoa+JojINBpbow/Q0hocuY2ZmZqPv8yZKMs5bJqeWxZu4ydjYI3yMh3H4QAsunO6GHYthW0MDagMB1NbUoK6+HjmbFcB83azrkZvDuNh3EJ1N3RzPr99JvH02BvVtEk3BnYDpw+TsMq5eu569bQUwQ6emojh/ah9t1ojG3uPhk5d4GrbRd7wH2jARbNyB+roAmoMCtm2jq6uromMe792+gc727Xj1Ooqln8tIuwptjX4szM9h9McSovEE2nYH0b5nFx7ffYBbd0YrgElSCBw7cgi9Pftxpu8EVksICdcVSDuC9jjwpAvpOtgbDDB0PdhEceWigMaakp4HKT0IT8FTHpSi0aOR5gasVWiFjC0LWmkoEr1FBFJZKCnjWnkeSdIeBpMRdls5CnLMwLTj0sgN2J2QDCQJWpM5uILfX13ut6I0CtMwGQwNKIYzNCspSDznptXVVZuIgmRlHIMcugQGxcGRZMAFuEdwj/NWMGFACAGLIuQDGzrORsGOpJsGFUGzYE3gnHOGGpYPdQ3b0OxvRSKRQDKZXATwtVwUrMi7T1j88h0UAohb1EDxDXz+GgyN3M+v23Ys3d/ff47mswCKD/DpkOM4ml5fnRld19V0RS2lJLMeSynFa5FIJDPntVhsyg2FQr3MKZKJzVX+AVEjUFM+HI/bYnDwytlwOPy89OFtscglPwdymh4YuHRyYuLNC6yp0iiOkpv89ddHkBNHND4+vtDR0dHNZ8vIYOjW//M+07k5/KX+AF/r/xkkcoECAAAAAElFTkSuQmCC"

/***/ }),
/* 1567 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOjSURBVHjapVVLa2tVGF3nmXPzNN6madMO7u2lWJFbwTtw4A+4dOBIceBAKQ6cdSgUVKRSoX+gs45aR84cNChaRMRCK7dEB31hrCakpQnNO+d9tl8+b+JpSSa64GOfx95rrW/tsxNJCIE+JEJ/wP+DIDChiudYXV199/3l5TWZFViJVfiuXwNVWQYPIxi3trY+BfDlLeKZmZn5eCw+J8sSrZWZkMeByKBACI1h5HK5eTyHHIqBicLFRDQ2LRlHZQ8/F200zYDfjaowl/pvK+yQShq6dXwZX/woY//XczQaTTx5/CoSBRfRexY+fppAVOeYwnHgluNBdEQaUpfw0fdRaKqBbrOO1x+m8fZrCbyxMAlFRPH5tzZ4rhRaE0L4bti+7/vYeeYhrsnYyf+AuUwMDyYTWJgCHkz4eDiVQu2mha/2y+ySyAcCI4mZNAgClMtlFC4l1G+uYZoWtazifsrAQlbDTErFowkJExELO98d4+rqamiKMJ7Yc10c/XaKpGxijlyqqoKW6aJS6+CPqkPXHv66AQJBz/0Yvtk7Qq1W4y7DUO8Sg2r+0TSe/fQLit4k3llMI/BNnJ2e4pM/f0e942F2Kot2z8GTF228PD8B27bhuu5YYs5JVVUoxP/B0xwURUHHCogsikZHh07vMmmDY8nefwGtVgPX11V4nsc1jnj4mVHMnLXvC8QNDcl7lGsuQcQ6IhEDuh6B57uwbBO9rgmJMicT44n9IOC8yqUKXnn8EmzLhqqokGQJgIDrO7DbFl8LAJoWIUINlmWBMJ7YNE10Ox3E43F02yYSqTgtVIeHRvDuK4AQfG+ZLqanp5FOp+E4Dj8bSWxEIhxBLBaDbbtIKzoUVYESOo1CCJ6jawbNB5tJJpPsmsgDQRh1QHjzCOxCp1Z914OmapwruWfHju2hXm+gQ92lUim6rqNSqdjb29tfj/yOSZEJyTGLaJoGz+vnfoNOu4tu16Sxh0xmkucR2P3FxYVYWVl56/DwsDAyimg0yi7IAS3O9AWYoNls8q7rus6tt1otPnGLi4soFApYX19f3tvbywvCXeJhhtlslglJHaVSaShgGAYLXl5estDs7CwIYmNj48Pd3d1t4gzu/vJzbW5uftbr9QRtgqBIBJ0m0W63RbVaFUQmjo+PxdnZmSgWi+L8/FwcHBw4S0tLbwKQmeNODR2fnJxUqL2S9A9ubSiBP0Hf97nIgL22tvZePp/f5/ZH4D//mXLrGI+/Af/K0fzFCJSeAAAAAElFTkSuQmCC"

/***/ }),
/* 1568 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABuvAAAbrwFeGpEcAAAAB3RJTUUH1wkLFAIEN4rOcAAAA8tJREFUeNqdlUuLHFUYhp9T166+TU+GyUQSExOJSEBcBNS94F4h/8GdZBMTJP9J3UUEF66GCCFBHUMcL4lJJ5Oenr5Xd13O8e1iMqjTEfFrXk5VcXi+97zngzbAUpvSVvX8/8tKXWlfIjiEvVuW5ZeD4RBjTKXlj2rV4r34ptLKCgee55EkyfvAN5ITuKrYWst8sQBnKK0jLxzOQVG6ykoS+bSbMb7vrWzgtFkVcVgvwLilBM1yy2iasz+YMxpnNJOI0SQjacUEorx+ps3mRgPzD7CR42UdB4ssJuOFZT8t+a03Z64GaTrF+Ibi2YROq8ZjrZfOr3Pp4ibeoXvVUaOVjgtrSAsY5FDWY/b25jx8PGQ+kfNWxHo9JQo8xnqfSO9dfnUJ/3dwKrsHi5KHBxm/91MeSfu9GfgBv/YGvBFpHYzpJIFyt0sXJLWQy2+fPgZd1lEwWekUgaWfWb7vTpkqknHueD7KeOvNLXYeDSgcdAeKSCYmMvHTbp8n3dELx6vBGJhbiOOQOIrYUJ5Wx6zVI7794RlNvT85SFnrJMyykuks50DvP95/TlHYleCjKPZ0WU+nGfcVwS+9lN29mZo5CHzGgpVWJ+hNCUOfP5T9bJ4zTXOe7U1eDs6UW4lBfI1YyKJyH/BoP+XcqZbyjLhw9gQzbZBBGjpBo50QhAHD0WI5x6vBgWfYqIecbNY4t5HQqgW8c3GD84JurtfpTxY8UM4NNR0NU7ZOtak3ImJdoJDLOFZOReWiO8qZzMsqgoNByplWyEMdfRgaOs2YbLagrdUTqtmMaCj/IDCSh7VuNdhXRq3Iw9OGTs2njH2SQIp8sqzQKeoMPFhrxZw+kRCHuljtD0XwPCvHxWpwrM4nBIwNnGqG+HlZNdhqR6zX6ryyFjOXyDNcMWOimQ4yj2xsmA1DfTuJyh0DN+XstfWaRslic81zJybWuHUUQ1+xRHom9MSd89nHH1QMc0gaDAZ8devWDvB0VRQCGaxUC6rnSnU1rCuGuqDNjRpdXWCoiKo6hH53+/bjq1evfgos4e5v4FCQtSQgCR2ZnLcF1IVUueeaYfWiUw8ws/gIOhwOuXv3bv/GjRvXe73e10B2zPFy3BqCaXowpsa6RqkoLc5CXthqEnxjOXhqWNZoNOLevXv9mzdvXtf6OZCuujzBjI4oCeF7chlZMgENpmqAwJ66dDSC4/GYnZ2d3rVr1z7Z3t7+ApiyojzpQ6cqy7JSIeVF6bL8ryqcxs49+HnX3blzZ//KlSsfATVeUuZQZ6UL//HP1EldaVfKeUn9Ceq55CJcALDXAAAAAElFTkSuQmCC"

/***/ }),
/* 1569 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1570 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYxQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDw0tLShoaGh4eHjY2Njo6OkJCQkZGRkpKSk5OTlJSUlZWVlpaWl5eXmJiYm5ubnZ2doKCgoaGhoqKio6OjpKSkpaWlpqamp6enqKioqampqqqqq6urrKysra2trq6ur6+vsLCwsbGxs7OztLS0tbW1urq6u7u7vLy8vr6+v7+/wMDAwcHBxMTExcXFxsbGx8fHyMjIycnJysrKy8vLzMzMzc3Nzs7Oz8/P0NDQ1NTU1dXV1tbW19fX2NjY2dnZ2tra29vb3Nzc3d3d3t7e39/f4ODg4eHh4uLi4+Pj5ebm5+jo6erq6urq6uvr6+zs7Ozs7O3t7e7u7u/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////3JZDfAAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+PvR6IwAAAS5JREFUeNpt0UFKw0AUBuD3v2fTWKuNVheCIoIrryBewjt4BS/hHdx4AsGll3DlQhR3IrQmaVozyWRmzAxpQek/zOabfx4DA9C6bLQ7kn9olWe5KZkp3EO7iG/FM+VTsMCHvW8TBWYIT+YQWN47AHHHEJ2Nhs456+rXs6hlDm1Oh8Y6gvSi5CNatXkhAIMBooJpyfhqBBxO9PslOiZusiMD5xrDbxYevIrYyXMteV6MVUnAqs1JnTpl7LQcdO2gblbuxr3+zv5gYW3g4NiOs8ro4rvYcnO9fAmZ0iZ94UGiPiW9c44DM+Io12QWs6x//NBUnn3OZ2oUaStJfH2ilSEBUe/CHJ5OSla2Bqqnn262z/gKSC1njy+tdsybAIHGTt/XlVcC/nyaaxrqeF1+AWzievDGlAsnAAAAAElFTkSuQmCC"

/***/ }),
/* 1571 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAbBQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDwz8/P0tLSUrnsU7/3U8H9U8L+VMD6WVQwWb79aMHsbcX8b5SHcZmIdamsfK2vf7rDhX5AiMfZotXspcvwppVcppdUqsnIq939tNDqudLrvtPowKhiwsLCxNzyxcXFxdbmx8fHysrKy7+YzNnmzbiGzc3Nzc7Oz7WA0NDQ0bZ90dHR0dLS0tLS0tPT09PT1LuF1dXV1tbW19fX2NjY2NnZ2dnZ2dra2rZ02tra2tvb29vb29zc3Nzc3N3d3cSS3d3d3d7e3t7e3t/f39/f3+Dg4MeX4ODg4eHh4uLi4uPj4+Pj5OTk5OXl5da85eXl5ebm5ubm5ufn5+fn5+jo6Ojo6enp6erq6urq6uvr6u7w6+vr6+zs7Ozs7O3t7O7v7e3t7e7u7u7u7+/v7/Dx8PDw8fHx8vLy8/Pz9PT09PX19fX19fb29vb29/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/f3+/v7+////zq1cZgAAABZ0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+/ipetZ4AAAFRSURBVHjabdFXV4JwAIZxbVjZ3nvvvbdtjTRTKkchQRGC/yijHJmZqZUikH3l0KCLjs/l7+o951Wp85blEu2/SlVZ1gqJj2QyxUml0zzPixWFOX6ll+cfjo8uYNoBgBV8yvy2NjXhRxEYs9kQcEunZI7dTw7P7mxCpBUxGs/caZnjuse7J9OBM3yNBnGCFWRO+B06E0TZSAR2uQhS4XcDtsXQUCAQDERCkbioMO7GLzEP19WRbVzhpP2G9NIs19nW0trcNJRRWNoQYgHX3dPfN9g7pjDnRU2o0yy0D4weTo8s/fGuGyZIRljZOz9Z37jiZE5HABONhKPRWJj1EFRdeUGO+W1iH1A+r+cZ0s+sNlQVqX85hqEMAMyLxTL3ZanWqGU2oHrYjJnt5sWF01pJZY5TmA+nWJ9d31gjqcwiL4hiJvOd4eorNflOKytWvszbD4QGaJI4cTCwAAAAAElFTkSuQmCC"

/***/ }),
/* 1572 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMvSURBVHja1ZLNTyRFGMZ/VV3d0zPD7AzysQsRl5Ny8CPGBG/8IdxNNnvgZrhx9A/wRIiJCUcD4UAiByPxuEbjQcOBr7iKiyKyDsww0z3dXa8108NMFrKXTfbgk37yVr1589TTT5USEV4HNPD/EjYASqkQUORQvBrkpjpExonqJ0++/+Hh/cI7YNEaXC8nAPkayOugz2A93Hocn7b23dwHBqBavVdl77Ffe1h9mZe7VbiD+kmD0fe+qN5EocTRN6eE4TkIYBWIdlSQZWAFhCHhblUQZBCBwtHkPQ3/nsBxC9yHKkHhHigP6g3HJiQWNCDkVfVteUAA+ECzOojNAGjN8I0EAUw/gAcVoAgXdfjxd0hakN59R/lhfabDxE0/dYiAK/LjJ0tQehOnDsFzCC/gMoLMOgIJAEPXfr/GoLUeCivg+kxxdmg4v0ypHP/FyH3L2/Nj+fSVY0fAkgsLnLc1p1cayNvVklBPFRO3HX/5XZFndY2ngJ9i4ITxzTNGKx5hami2a5xcwR9XCrCIVRgt+J4QKME4Tr0R8EgpecHx10eWn5+lvYG4k/R+yfM6WDyMb9zeI4eQprltY3xEBJt1ewnvTkU86g8Z+ggCn7fGDWM1w+yMi2FKExbg+Ax+/S3m7+cGa7PeAWniKBYriswq1yvgmREmxss0Go0OwEA4UmUSIySSMVERKqMWq2PGIuG8FPD0nw5REjoDASmpE8wwxiBamJmd5eP5eT768H1ZWVl5/IJjHZTxkxjj5/fkFxXRte8ctLiILUqZnqi1Fs/zCMMQEWF5eZnFxUX29/dZW1v7bGNj4xtxGFye9QoUw65gkUoYkbYzUolpdAztZgcR7ZhHUSqVAIjjmIWFBQ4PD9nZ2fl2dXV1RRxuopAufd8nardRpNhiQnVEKGthsgaXk1WiP2MyKVAqVwB6bqenp7uZsrW19dXBwcGi61n6UIA+Ojp6ure3N9NqXYPEhEFMrZhiPMNFQ3PZVAiml6n2vF4caZpSLpfT7e3tT9fX1z8fig6F1dLS0idzc3PTN0601rwc+Yw4bG5ubu3u7v4iDtyC6vaUA6+AW4J3hV8H/gN5unWLbBFjGAAAAABJRU5ErkJggg=="

/***/ }),
/* 1573 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1574 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANnSURBVHjatZVfaFtVHMc/yb1Nm9QMVge1QkptsdnDnH3woZ0vgrjom9gxECeIIoMqneuUjQ6EPXQPsgnzwQcRfJiOUvzTzbY6JjghIt3DYHV/almS1W1Zlq5p/t97k3tzPLnkH9EGUfaFL+cezv19zjm/e+7vOIQQPAypNMjhcAwAQ/w//Q6sIISoGRg1TVNoui503RCGUXGhIArNLhZtFxtsWZYYGRl5F3CqNEk3DDKZDE6ns7yDals3QONzpQ/gcrmoykmTqjDpOrzm+piqKHx5+itmZr5pfLcFGOrAakAZpKrItPDegQneGRvnwYN1fL5eVlfv/itwbcsyX7RJWDgUIvBCgLGxA6SSKXbtepYn+voJBoP0D/Rx5MhBFAkt29kAVmlWZaUfHDrMoN9PIPA8r+3bJ4MUYvE4r+x5GY/bXVtAk1qmwg54aufTLPx4kT9WQvT2+lj4YR5dy5NJZ9i791VOnfqEUqnExMT7RCK3KhO1WnEFjEPg9bZzMxRm+foynke6+HXxMmfPLeBq95DOanx47DjR6H1SqXQVuim4dgp6eroZffso/sF+7my7hX+rh75uL/t3PopesMhoJnnd4tPPPqejo92Oa/nx6nAnPY/7mL6U4O6GhmmV8LpddLQ5cKkOOjsUSqLE1aSn6US0PhW2wxkPO3xbbPBaukA0kUczSuQMi3sJnY1ckTWxFSGEne+KWq/Yki/evB0jXdzGm4EhOjtdRNdzfPHzbU7MhiiY9gRs73ZjmhbyN5et2QJc2ZIoCX45f460YZDWu3hm+5OcDq7y3aU7LIbX+elqnETWJLvyG7qukc/nyWazRiwWSwJC3ey4gSBz+QxXdjzHwOAAZszJFm8X97I5FEXhwvUCjzmWcSevyP4eotGomJub+zYSiZwXUiqbSI5h6imuTR9CfeMj2nr9vLV7iHTOQFUc/HltkaW5jwleXCAcDjM7O/v95OTkQRm3BmAX+obcjsry93U5VzduLDM9PcPGRgKzaKFZCkXakEwUIeGiwIsv7WZ4eJj5+fkL4+Pjr0vWfapqrscSLDRNK9dhu+6W+3Iiu9bKL2/3ZS5FPB4XS0tLpRMnT54Fum1G3X8HS0AjrAq0LVVu7QmTyaQxNTV1pgptsp2K/3o1FYBFGR/nH/TQLtO/AHgtItLG1AZfAAAAAElFTkSuQmCC"

/***/ }),
/* 1575 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAK/SURBVHjatZVPSBRRHMe/M66zu1lq659MUsQ/hURgdtqOHaNbHroEQadCvESXTkF4SQiyUxDdqluZeLFDHbpU9AdcQm0xS5M2XWt1/83szNtf7/dwmGXGxf7gd/jOezNv+Mz3vf3tG42IsBsKoUKapvUAGMD/KSH9CZzYtdRZx3GoaJpkmhZZ1pZLJSr5bdvKdoWFEBSPx4cB6CH4ZFoWstksdF3nGbitZ0hV9reuWYZhwFUA7MIqgTq3nquC+V51MBBIm5rJYe5BGpurJejyEA6hpTOC/gttaDta90dgL2ViHdpAK9aTJt7d/o74tV40NEdAQoNja1j7XMDbW8vYe6gWp250K7ZeAdbhl5u0vxmheRNL07/Qe64d9bEIyo6OsoTCBpra63Dyaj+IDLy/981NWx2suescqQF1R9Gi69iYK4IYWgKDVZ9kyz421ImG/Lo70wA4uBz8A0Zr0HXxIJznP+XUFZzByiT4GQ2xHg1HrgzumDhQBaH6Why/04eNmy9hZoWCghQUjV2EaMx7NpC4KnyrKpoP16FxeBCz1z8qKDRIKHzQnRMHzOo704r9p2NYuptU0D1N3hgRoVwug7VjYjDU96ITlzrwJZVD5GsWPMow27Yh/+LKjuNUrWOv2H0FTwRsLmuorTdQbNRgrG1A7DMUWAjBL+EytVKpVAYA+cGBlGy+uzorMD+5BuEIhDuisB0b+VwOKysrCIfDnJampqYeLy4uTpNUYHfjXapQKJBpmmoXs02LXl1+QY+GPtCb+0tUzNpqLJPJ0MxMgmRSSiaTNDY29hTAAZe1LbhYLPJ2qcB8zWmEEAxR/Xw+T+l0mhKJBC0sLND4+PgzF+pax1/JC8JrSlJPJiYmR0ZGzsvuD3gKJuZklSndpGwpbnkmvBTW6OjoQzep3xqf/vHTVJJ+TUSr2Ea79jH9DYz6+WPGYvgMAAAAAElFTkSuQmCC"

/***/ }),
/* 1576 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANWSURBVHjatZXbbxtFFIe/vXidDS258EAKIWlDgmggqiBIpEVIPIRWAqT+EXkq/xePPPYF8RCikiiK1ItEJHJpGhnTgBu7ju3uzbsznB6VWKGJK4EY7c/H6/X5zs8zc8aOtZb/Y/iADsdxxoF3/iPvNzFaPQEGxqMoXu12u1JEK8klAvhn7LnpOfQ8giC4CrwEdpI0pd1qkWYprutSKpWQQho9SSyKgsEwxPc9Wvt3CUffJhh+CwChAr26LvSG+9yRAMWpJPsKF+m9SN9bU3D0608MOx2C5hZHO3ckD30OcBpYoI44UxhBqaQOy+Wy3qspcdreWWE4NHjlkFJ4npHQob612hd8whkSPYmmKHT+fCkaPfyZ0UEp7JUxxmIdRwoMMhJkxI2DfmCF6nxaYwjErQXkhmd7dxibnCEYmcDgIBWxeS7BaN6TPyqvdHw81xLFravQN8dnSGoPSer74IdYULjJIh4dZlz64NPT97GCQWGFMccLleyvMjYxQ/bkESaPsFlClsZEacTwG2Ps13MuX/sa1/PPBtNzrE7buytcmHhPndr0iLxzqN/JTEmcxuzmQ0x/cgOLC3AmWKGIirxLu7LGhcnLJH9uQ/5MrkOKqEHXH6KwXRrBJO8vfEWS5VhrNbffVOjPz6sbjJZz4qePociw4g7Eqfe67obmwEVmr32DHwzglQpd7L6OwdLeXmE0NFjrktYrdAvDubBMZnyBZrRee5e5z28KsIwCfEX0Bx/c/0E3PE6INTnhufNIj1N7XKHkuzTDi0x/vEgnSsSltjpRFBGGIYG2NPZUcLOTSgOE4Hp4xsWKBgQuonLkcOWF03a7Ta1WI0kS8rzQbu10OgdA7dR9PH7lC1rtDuAoHMfVA2yvUXBp/kscrwRAtVplamqK2dlZ5uY+pCjyZGlp6aa1du9U8NDQMI1gnMbTui4i1rJ7aJiavw6uT5qmiEsVgIDY3Pyle+vWt9c3Nzc36A19qAKuSqJtNpt2Z3vLrt7+zm78+L30Q2zlMLLGGFUcx3ZtbU0/e/Dgfra4uHhDGSf1ElgTn8csy6ycxTbP8xNgmUu7vr5u7927Gy8szH+m+f3BLAjkb9gxsAdVacHl5eXq9PT0R2dAVY68/Jv/vN8lr0Kf8RdBgxz2bc2/rQAAAABJRU5ErkJggg=="

/***/ }),
/* 1577 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMrSURBVDiNtZW9TqNHFIafGfuzcWxkW1lkycLZXQEC0RBKkFuuIHeQOlL2JqjZXAJCpEyXwoVpUqAgKrYLsrxfsebDNvIPxvb3M3NSBHttDKtE0R7paOY0z7zn1ZkZJSJ8jYjPFkqpNeD7/8n8APyFiEwT+CGKIhmNxzIe++L7jxkEEjzNMJQgDCWcSWOM7O3t/QTo+NPjxr7P/f09WmuUUtN1mv+09nn/WAMkEonnrXi0A601Wmu63S7ux48UCgXu7u7Y3d1FKfUiWCn1BTDQ+PSJRqNBEAQcHByQSCSoVCpcXl6STCb59tUrviuVPoP+DdgYQ6lUolgs4jgO/X4fYwzlcpkoitBac3FxwZvXr6egyaq/qFhrfN8niiJ836fX6wEQRRFRFJFKpRgMBlPvX4oFMCIYa2m32ywvLzMcDqeeB0GAUgpjDK1Wi0KhMC9q5iC9oFgpTBQhIriuy5u3b9na2sJ1XfRjN+vr65yfn9Pv9+cmZjaeBU9af3h44JtUCieRwPd9wjCcwrXWWGsxxiAiC/AFK6y1DIdDHMchl8tRqVSIxWKsrq6itabX61Gr1chmswBUq1Ucx2F/f59UKvUyOB6Po5TCWks2myWRSJBMJkmn08TjcTzPQ2tNPp/HdV22t7dxHIfhcDgHXrDCWks8Hp9ccVZWVshms2itCcOQTCbD0tISnU4HpRStVot2uz2dmhcV61iM0WjEzc0N1lrW1taIxWK4rou1Fq01nuexs7ODMYZarUYqlSKXyzEYDHzP87qALIBjWrOxscHm5ibNZpNGo0EmkyGdTlMul1FKcXx8jOd5lEolRqMRxWKRbrfL6enpb/V6vSKzL9vkdQvDUIbDoYzHYwmCQJrNptze3koURWKtFWutdDodOTk5kWq1KtZaub6+lvfvf/kdKExYixcE5kYnn8/P1RM7AHzfp16vc3Z29se7dz//KCK3U8hzikejkfi+L0EQSBiGEkWRGGPEWithGMpgMJBmsylXV1f26OioMqt0ynoKNsbMwSZAa62IiFhrJQgC6Xa7/uHh4a/PQUUENfvn/cevKQD+FJHms3Z+rc/0b+JEMtJdB9WpAAAAAElFTkSuQmCC"

/***/ }),
/* 1578 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM7SURBVDiNtZW/S2xHFMc/M3fVdePKsoU/wCJvLSx8gRQaEBQ3TwQbqyD4B6iFpHtZaxtt7GzsRdMsMU8iSEhrk8IXJCAawWULwVjdcJe9P2dOCtebVZ8vhPAufLkzMPcz53zPuTNKRPgUT6Z9opQaBr78n8zfgT8QkVTAN0mSiB8EEgShhGFLUSTRU8WxRHEscZuMMTIxMfEtoDNPtwvCEM/z0FqjlErfqe5T+2fcmgN0dnamHP0UrJR6lIUxBgVope6ldSoAay3W2vTbF8GIYK3FcRyUUlhrSYx5BNRao5VK1wRBkGb0IlhrfQ9LEmwr2jAMoS1agCiKAOjq6qKzo4PA99Ft4GceoxQHBwcUi0UuLy4YHh4mCAKGhob4+s0bFPCX67K+vs78/Dxzc3Nsb28zPT3N1NTUy2AFfDU+zujoKD8kCV+8fk0+n2dvb4+Ojg7iOEZE2NzcZG1tjZGREZaWlujr63uc+bOIgc9fvUK1fMxkMvT393N9fU25XGZmZoZ6vU6hUGBlZYWdnR0GBgbS7nkR/NBGD4uUUiitKRaLOI5DvV5nYWEhrUepVOL09PTfi/cA00ohgIigW91xcnJCtVqlu7ubi4sLSqUSq6ur7O7u0mg0Pm7Fw86NRgPP8zg7OyNJErTWjI2Nsbi4yOXlJfv7+xQKBbTWzM7Ocnh4+IjzvCtaKX7W08PK8jJaa4Ig4O7uDsdxGBwcpFqtUqlUUEoRhiGTk5PkcjmSJHkZLK2oozAkm80C4Ps+y8vLnJ+fIyKUy2V6e3tpNpt4nocxBhHBcZzw9vbWBeQZWCtFLpdLfwalFPl8nvHxcfL5PEopjDFEUYTv+9zc3NDT04PrunJ0dHRQq9V+lvYz4eF0i+NYms2mBEEgURRJHMfi+754nifWWrHWShAE4rquvH//m1hr5erqSra2tg6B/gfWBz1ubx1rLcYYAOI4xlpLGIY0m01AqNVqHB8f/1KpVFZE5M+PFu9pIbPZbLqZMQZjDJlMhkwmIz++e/fTd2/fPoLeF+uJFcYYieNYkiQRY4wYY1ILRESstRJFkbiuG25sbHzfnn67VPud9x+vpgj4VUTuPmjnp7pM/wYmHfdW9h2BxQAAAABJRU5ErkJggg=="

/***/ }),
/* 1579 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ+SURBVDiNtZU/aBRBGMXfTG5viYQLasAUkYhiunimUdLYaCmIRO0sLCwECYggeKUSO0HSpRRErDRqFE4sFRRidVaGcAFJuMSQHLmsdzv/noW36+7d5UhQP/jYmZ2d37x5M7MjSOJ/RCZZEUIcA3DyL5klAN9AMk4AE8YY1hsNNhohw7CZSlG1ptZUWlMn0lrL8fHxmwBkpnW4RhiiVqtBSgkhRPyM8/fU/pSbdQDIZrOdrWjaASllCiiTYCF2BAshuoCBNrU/lcPDN2V4GYn58haGDvTiwZUR7O/z9gCOVEZwIXDn2QLuXTqOwX4fG4HB2N2PaGiHxzfyKaBMgGUrGC1QISU+LVTxcn4NQkoM5HxMnB7E+68bCA1TliWjoxVJqBQCt88fxdhwf+z1Rs3gxOEc9vnp7l2tiO1oQoWUuHZmKLYHAL4sbeH+5ZE2ld0Vt+yCpHIAKH3fxsG+LC6eGmxTuSvFETAqR++ffFjBzPVR+F5PGywZbYuXOgyJRYnK2R6J/HAu1UYSzrnuVsQqmgcgOUCtYXB2dCCuW2thrYVzDiSRyWS6gCOFHaaZ6/VwbnQAAGCMgdYaWusYLqUMK5VKFQB33G6d7Hj0dgnboUPhwhEopRAEAZaXl+H7PowxnJube14ul4sk2X5AdgghBFY2FSqbIay10FqjUllFPp+H53koFouvC4XCLZI/AKDtt6m1Zr1eZxiGVEpRa01jDK21dM7RGMMgCLi+vs5SqcTFxUVOT0+/A3Aoydq14iiijs0F44vZ2VeTk5NXSa52/DBSbK1NqYyUOudIks45KqVYrVbDqampp61KoxTJO2+PV5MC8JnkWqfGFPhfxi9KG5Ji5qr6CQAAAABJRU5ErkJggg=="

/***/ }),
/* 1580 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1581 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAQDSURBVHjapZRLaBtXFIb/eeg9egTbSI3fEDuOk9Q4sRsrdpptt6UbQzfJqgRCV6U2BXehmJbs3XZjUlpSuuiiG7kiC7nppjEYWkrAcmRbdqLYUVVbr+g1kmam514yOGIcKPTA5c6D853//PfMyIZhgIVAwTb8vzAoOFA2n8zPz3944+bNiMACvBKvwu/YMquKIvh2AnR5eflzAPfbwD09PWcUxTsoigLlihzId7OIuUBxvLeRu7u7z5jXsmnD0tISB5lgE5RKpaB4PG2AcrmMkZERC9hkGRTysTmCCeZAE+73+TA8PNyWvPf0KXtvkl43GG2KX1lnUbu9tYWXL6vo7e2Fy+WCGUeHh8i8eIGxsTEL3AJmYUJVVcVqPA5ntYqay4v9/Qw8HjdkWUar1UImk0Xj4Dm3ZHx8HIqimPkng02lW6Q0l8vhdK2G9MoKdn/+CRoA1qgNAmRDx2g4zMHJZBITExNvVlwoNQYWv/gGXq8HNpuIty+ew1v/pBF8+BCKqh77SIUPL5xHh/c97BlORGO/45cHa9DJX8UlDljAPsVZmpychEA+F3J5lCs1/HZYgjz3GbypLWSoA41alfv6IHR0QsjVMBQUMTMziVAwiFKphMeP/yhZwJphNNipqjUVRwRxOp2oN5mff+PK9euYm51FYnMD0WgM6ecZ6sxPB1sgz13o6uyCw+FEU222LGBJkuD3B1CplKHrGra3t1Ct1nDpcpimohM18rtYLMDldGD0/CWa7yR2dnYwNDTMcvmyOWy6BSyQWtkmw0fw0dELPGFt7RH6+05TgQKpK/KpCIVCCIYGUSoeYWpqCpIo8WMVCcwO3gIGeSvxcRFIuZ8p57ObzWahaxVsk7pGo0HPK6irNf6OMKw76qQIv88PEVYweaVJjYZKCW4+j4FAANPT0xz2JPEnuro6oBs6NjY2MTAwyD4aPpJNeq9rLeQLdK21NMvfjWmtk4+yJHM4dcU8JwtKlFTA7u4eWOF8Pg8WVANexUsHfcSaJcUu9f733/748e1baAfz/4TED0kiL92sVaKfCpwipQJWf11FvV5Hf/8QGqrKOxFFDefODuLgYF+f+/ST99fX1/860WNBBFdarZT5KbvdbrAIh68htbOJ9LM0rrwzTTNbhEGSJy5fRCKRMCKRyI14PP7AoLCAnXaH5vX6SHGVK61Vy2SLCCcphyFQ2wrsDgdYLs82NAbVFxcXP4pGoz8YVMnySbNK9+59J/gITOPzCg6USbnIZ1SE3W4nuIdNA/fabrM1FxYWPojFYiuvQy2Kk8knu1evzmRFURDYaraaYFEq5skSF1Q1IF5796wuSYKhtdT6nTuRWYI+Mtt/I/ju3S+/ovU1/mO0q7TGv3cgye5NZfpKAAAAAElFTkSuQmCC"

/***/ }),
/* 1582 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALHSURBVHjatVXLbtNAFD0eO3ZjhbIofQQWCUK0BQSqEEjkO/gNNmy7745u+hEskRDdhD9g26xolRS1AdJEVd3ExI/YHu4ddVorBKsC9UQ349HYx2fOvXNtSClxE7CQg2EYDwBs4P/QotgHK9ZBeJ0kiQzCUIZhJKPoIuJYxtMxmaiY5CJNU9loNN4AEBamEEYRRqMRhBC8Az1eBQj564s5w7ZtaAhMgR/odrtMeEWeDyFmhr5X4w/FvFSv1y/VDgYDyCxDRsGKaMuwSiWYQij7qtWqVlxMzIvHR0eo1e+DLIPrVphIEZcsC77vw3YcOPQSi+ZpBhJgwDJJSAExMxOpUqzktzsdCBrtko2llRWc9Pu4PT+PNElAyYIzN4darabVFlvBHtfpZssy8eL5BgwhWI3a+r3qsibhkXfClhVbobFCyiAE4kTi4GAfc46NKIphmgJhEJI1Fkpkz+LSIhYW7kBICdtS5MUee2dnuOu6KNsCG08fqxK0OWGmyetqZIRhCJnEcFz3eooVAf1CUtxpf8UkjiFMU23ZLbuUwBFMYSp/GaurD6+nuFKpqEy75PGzJ4+QPyAMfa3B3muvNQRmoE+ZBz8M/JVUJ47rmo64CmoHxeWmDoiu6eNjVa/lcvmScDgcwnEcTUYJXNCKo16v5wGQM8utQ7W7traOIM4oMbfACCfqgKhtw7Rx7o+RpRknmiuGiFO5u7v74fDwsCkJM6zgZKyycLiOif7PLga97xiPPMg0xumgB9AYjX0cfWuj8eolqbfRbDY/bW5uviXOARjTbZPbX6vVUm3TGwXybDhW4/BXKP0glud+IPunnuz+OJF7e3uy3W7LnZ2dzwCWc1yziYMg4D6s+i7PyUfVa8lHNad+ISnBTJy9297+qEkLiZkgT6YJORg88gs9z4u2trbea9LpMOjvXz9NMcUXer6PGbixj+lv72ADTDal/SkAAAAASUVORK5CYII="

/***/ }),
/* 1583 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALlSURBVHjatZVPaBNBGMXfzibbpKk0SQmtCSqiHiwWPCgaqyAFRc8injxWKHgtggW9WBRqD+LBehX0KHgxrRUvvWgRlPRgtW0ilKZpLE2apMn+SXb8JnTdbtIEUfqWl9ndTH7z9mPyrcQ5x17IhR2SJOkIgJP4P82Rf0Aktky6VqlUeFlVuapqXNO2retcr7dh1GzscLVa5dFo9DYA5kKdVE1DoVAAY0w8gTXaBmnn+fa1kKIosFQPtmAO4N3JEcQSH8AEQDA40B8+jefXnznANLcFGGhI++X7PC6d6sWx0CG4mIzl7BpmPi6K7/8abKW04WS/X6GZFRSMAmRJRpXpCAYVMccBZK3AqINKdB70ewCpgpyap3sMFa6jK+CzwA61KoUDKsZ2bxsAncCbNbDHJcMtuRyP3rIU9gQbKkbZVFClQySWCBzydQC61wlundhOm1c3sLQxD8MwwXQFssyQ0whMR7DdA2a0YTI+CZeboS9yAj2dEcdCrFnilXwa71deIOObQv8FH4rmFnxeN7weGWVexsBAAHn/NGZWXyKxsdyQnjXbFX37+3BQvoxv6RTe/fwMlavo8LrJCiqSgbdLs1jMriIkR3Hu8FmYptkKbMNBvnnmBviv4zga6hZpLdcW6A2HUUxFMHR+EPQXr5naQXMwAR27496VEWwme3CgK/AHGgl2orzcg/sDD6CqKsrlMkqlEorFopZOp3MAOGuy3Rx+dPUJzFQYgX0edHZ40JYN407/Q2xtbSGRSIBgSKVSfGJi4nUymZzipIbuJroUrc4pSa2LiWvR8XLFPB+fHeJPvw7x1fU1nsvleDw+x6m2fGFhgY+Njb0B0G2xmu9jsiWCQy+puOgZBLVUbK5nUZRlApighIjFYtPDw8O3CLgGS7slppqJPuxILHqtSCeuqZY8k8lQ4rj5eHzcTmq7EUwAB8wCCpPEKBYUpdBGR0df2VCnJfr411eTTv5Ev89gF+3Zy/Q3soHynAeLQgsAAAAASUVORK5CYII="

/***/ }),
/* 1584 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOjSURBVHjatZRNaBxlGMf/73zv7HbzpbUeJEXRLYVK6qGCFQQRvNmboIJ6Ek8eWi/Fo3gJtDdRsUULBREErRY81Cq4LRWDVJA0Wo00mrTJJm2yk5nZnXm/fObdD0wGe5E87LP/d5559/c8+995l2mtsRNhYYfC2V746N037p9wq887nudzIVyutC+F9BxHTmy0NxfiRK0EvsM9ZnPHcwWTQqys3moem/6sdVfwUwcPXtPMGeWcI88pSXmeg7F17J6w6XoEge/DD3yjAWneaS8A2PufVpw7ffzjNFOjUkoIykIHayVSQOcQghoJAdFPzgW8yujke2+/PF0CG+iZN/fvazReCXy3BxR9uBD96wRMp8hzYeCCi2EDpRSefOLwsdPvvNooWTFe2/29bVlmc25syJGRFVmWYTNOcW8tAgNwfT7DSD1ENQxQC0PUasW6gmo1tFy/ch7Aw9s81hlkhwoazFFwGYPv2hB+AK0Exu7bD1DtwSgmkA8LCtASKo8RdTfQXpOwtNxTmpgmTQpljMGxbYDSA6C1hpCKmvXu7apJhBUPqrBAckhJqgb7RFLymHyKsTWGUCFoGjuA7QTgtNZE0rpIvU0R3wXcA0oCEsRApdK4s95BDhdKDsFGtzRROi5Z0eUi+W1+EUknIyss3DNex2i9hhuLLURxWkyD6tJtjFR9zM3/jfF6pUgD/evmmmkI5patsDRLPvmyiV//WMRGlOCt6bNYbyc4/80MLs/MQSuJkx+eww9Xr+Ps502c+vQ78wwvLd/BmS+u4OvmLBhT5YkBFidpF1dn/0Tzx2t4fKoBOrqIqdZa2zDgQ48+hLGREGPmcfNw4fIv+P3GMg4dmKRvsUwDu2WP/cCJ006OA41JvPbis2jOzOLipZ/R7WZ4ZO8evPTcYRx55jFY0OhQ7cjTU7h4ZQ5T+x4wT1GWC+wKvM0Bb/i3+dWp4yc8zz3qujZ8zzGnrR2lZmqtFNVsKCXBCZB2uggD29SV0uhmHBnn0HA+eOHo+68PJ2aMWQs3W2PFZteCOcbQCvWaD9dm8BxmaoqaWUxtgSpNOMdCxfewvNquF6wB2OitlduhFBxScqgiRT+l6B0Ck7yvQyipWRtdWdsMBkxnYEkUZaz4EBhNAxIGEwoMjGqw7N52JimpSjAGBUDTS5qmUdY1rH+D9aWf5r5darXq5LltbNe6dAqNmm69N6VNxdyjtWytxhdMYfDj9X32STz8v8iJlw3BOxH/ADvnav+3a3QzAAAAAElFTkSuQmCC"

/***/ }),
/* 1585 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM1SURBVHjanZXLT1NBFMa/lr5boAUlFIvKS4hRArYxqBCtujAEEokL/w1WunTlSrcmbk3cYGKIi7qAGDSU+qIhJCpPRR7l0toXtw9b+vLMJBfpLa3Ek0zvnduZ33zznTP3KgqFAljY7Xaj0+kcUavVSvxHZDKZ/NTU1LjX602AQoW/0TM6OvqMBhSBlUrlflMoFNJVagfHMfAagBk5mKunJgfK4XLwwXv+I4FLoqqqikPoemSwPFSHQakVwSXg3l4aOp2eP5PDaadlwdKEIviuGMW2sAUxJoLNTadT0OsN6Ozogu1E8z44n8+XB0vKVCoVv25srSESCaO1pQP1dceg0WiQy2XhE3zwzn1GMPgLF3odkh2VwZJywe9DTBThsPdBo2bAHIKhIP2nxEnbKZhrLXC9fsVVNzZaK1pR5KXPt4nuc70cuvpjBQuLX5HNZvgCOq0Od0bucujq92VYrU0liuU1y9WGwkGeJIulDhubP/Ft4Quabc0YGrwNrUYHk6maK6ypqYU/4OeLyT0+9DDEE3EYDSZ+v7i8CDV5ftFxiZRqEaMkVhOYweLxODOXdpJl/X8rTiQTUGs0fOuJRAz19cfBYmV1hQOoKtgRpt2sw1xjJuv2WL+sx9KRJbVGiOIuVYGWQbjfnvdurK+v8YoRdgRugRiL4fqZLirBNJtXWTHBecb9foFPsPc4YKCFItEwBgac6D7fgx3/DvUjuHHtJo1XIplMsrGliuXwltOtlO0lfPg4g/4rVzF4a5j5yLdrMprQZLWx7XNYKBRiz2lxQ2UrJDsu9w3g7bs3eDn+Ah3tnVQJJqaMbNjmibWY6xAOhxGNRrk9RqORmZwtC5bCbLZgeGiE1+/W1iaWlheY36S4mkBqxMjftrY2nuz5+fnC2NjYIwBzlRQX9bs6z9KRbudbT6VSVCUJCIIA+iDQ4mZMT08XJicnH8/Ozj6kl3y6JHnllNNBkBo/BOQnq18+xu12Fwj8hNoDgqZkHh89CM6SyNUHAoGCx+N5SmrvE/R3pfdxQRTFBGVXK9WkpFI6WaSSfNajoaEh53K5nk9MTNwjaBKHRNHHFEA/jhQ8+58IGkOZ+APuL5M2EnyPaQAAAABJRU5ErkJggg=="

/***/ }),
/* 1586 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOASURBVHjapVVLTxNRFP46M52+WzoWkFZI0BBIiPEFUUxYGTesjEsXPlYmhD/AAkkIfwMXEPbEkBAXRBaiUVwoxMCChFBJ3xZLS9+des61A61tWehJbu+dmXO/853vnHtrqlarYDOR8YT/syobLxTUbHp6+smzFy/mpFoE0C/P4omHEVWSIKYWiAsLC68ALDcABwKBAafDeVWSTLRXEoBiNoIYA2R1c735/f4BYy3VycBADUMAiXXjMJvNPDeNeizlPBVTzeGcXblchq7rqFQqqNCav8uKAo/HY0gjAhtm1KsBmL8boMViEfF4HLFoFJmTEwLQYVVlyGYL/H39MBN4KBSC3W6Hz+eDxWpFjWgzsCEFs/zy+RNKJzFioFOAJI5/JZHOpOHRfOi45MNu6BDF0wRy2RRcl4dw4+Yd2Gw23t8amKOWSiWYKjl82NzE2rv30CmQReX03fC4nYiEI3Dabdj7/hWjtwZx3UrvIgEuHMjaA3OaWo8f9x88hEm1IxgMIpfLoVjIwmpRRaBCPou7Y2O4PXoPdm+3oe3FwFwcKiP6BwZwbXDwrO0URYUiy9QRKqVth93mQCgcRDSagKqqosgNsjYAA9wBxKhIgBIVsdYJklxrPZl1F8WNxcIok28mneXni4vHDsHDQxwfp+Dr1AgEgqHYROtKuYQyLQrFAtgcNie6u4UUTKA9MDtwX3IbxWNJBK70gBFlWTkD54n9ZMWM03QOfX197M/d1F4KM2klE7CV+tLpdJFzFQ6Hi7rCApvVJtgrBGixWFHIlUSwxcVF1phPIz+3BtZJM47OhWBnF4GHQxHhJkkyAVqQz+WRz5cosBNdXV2YmppCMplEKpViKXXjdpNaHBC+kHijYOH3B6h3oyTNT1Eoj0eD5tX4uyCwvb2Ng4MDpNPp/NLS0puWGjPLzs5ObGxsQNM0DA0NoaOjg+8GPjjENI9EIoFsNoujoyOR3fDwMMLhsD45Ofl4a2vrW9sj7Xa7MTExwQywv7+PnZ0dAWacSjav14ve3l6Mj49jd3e3Ojc393x9ff0ty9AEzBuNmbXkAvIFMzIywr3Ng1NnqcSIUzAC1efn51+urq4uE6be1BX1kf7OgOXhlDkTl8vFa/GuTPRnZmYeraysvK4HbWK8t7cXikQiP0x/rAHcyMRgnslkCrOzs0/X1tY+tiP1z3+mguUF9hvCP5KAb/Qq2gAAAABJRU5ErkJggg=="

/***/ }),
/* 1587 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1588 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1589 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM2SURBVDiNndXPTxxlHMfx9/PMLgtsAenSVKmNlSiJNrFVUoqlQasxHrz00JtNTGoM6Yn04D+g/4AHbwrxRowG4g882I2mETm4DB5I2tLKQsSt3S27LQu7dGeeeb4edDZbmN0mPsmT+ZGZ1/f7fJ5JRokIAENDQ7HR0dHzyWSyk/85MpnM1XQ6/TdArOH+0xMTE19orZOND2ut61MpVT8qpQDqR6014+PjHwCf74WVUkqFK1BK4ThOS7gR11ojIirEGuFHugzRRrwVHJ43hR3HiUR3gx2U0nS3PfEIvDeSSDhcfjiNePy8McuNkkvpYREjAQcSvRw/dIrzg+/RGUvuAyPhsEvHcSjW7vD1rU8p1e5hrMVIgBHLvd0C6fXvyNxd4MrwRxzreS4S1lEwWvhm9bN9qC9B/Tpfvcsn7scEBPW4msJhFIv5NPnqXwQiBGIxYkkmejjQ1lsvYiRgfSvL7K3px29eWDlbvk4gAkoTYBg++ian+19DgF820qTX5/7DLUv537gweLF1FGHHf25lsYBnDVrHOXF4BKU0KM0rT50h7rTT23GIkf4xVrduY4whCILWsNaatlg7XuDjW8NDU6Pq7+DoGI5yqHg7VM0uAgiQ0B14nofnec2jCOEj3QPkKjkEhWd9vr/9FWPPvI0V4cf1OTzrc2cnx8b2BiOHx6jVavs2LxI+1X+Ohdw1DBZjA/54sMLN+zcwYgkaphHLq6kxqtXqv19TqyiUUpx8coThI6/jW4Mvpr5Re9HTB88yoJ6nUCiwubn5+I4B3j95BSfWxg+rs5Ho2YPneKvjHdbW1gDo6uqScrlciYQbC7THOrj88oec6X+Dhdw1bhavE4jlaMcxXuh8iZ6dXgaeHUApRTabZX5+/stSqTTXEg5xEeF46gSD3S/ieR61Wo1qtUo+n2fb3yaVSuG6LplM5tuZmZnLrututcx47xARRARrLb7vU6lU0FqztLTE8vLy1enp6Uuu6z5omnEUGFXA8zxEhJWVlZ+mpqYuuq5b3PtuIyzFYrGcSCRiYechZIzBGANAPB6nr69PFhcXf52cnHzXdd1CZJSNP1NgDIi3WkXD+L0ZCvAPPjy7yceKJ8oAAAAASUVORK5CYII="

/***/ }),
/* 1590 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1591 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHFSURBVDiNtZUxjhMxFIZ/W1FyBA7ABWhzDmpaKpQuR0iVe2wJC4oUIU5Au9ttiqkiha1GihI8tt/7KYgHx+sZWKF90pNtjfX5f/8b2YYkXiIm+cIY8xrAm/9k3gN4AMk+AbyNMfKnc3SuY9dd0nv6MkOgD4EhSxHhfD7/AMBOyuNc1+F4PMJaC2NMP/b5u7Q/88saAKbTad2Kix2w1l4BbQ42ZhBsjBkBA1W1tgTnoH8CJ1CCGwOTzyvgNNoxMCrQXm2qIBMwFFUrnkBzeAYswaNW9HZUoNbaK8DzFBeNyuH9oRlwaD6ouGxaCf2balu1YcDPcp7WJKGq41b0Koru16AiAhGBqoIkJpPJCDgBKmXmB8QYEUJACKGHW2u7w+HQAuDg71azI4WIwHuP0+mE/X6P2WyGGCM3m83Hpmm+Mr/Z0u0WQuD5fKZzjt57hhAYY6SIUFWpqnTOsW1b3t3dU1W52+24Xq8/A3iVWE+aV5ZchqpCRBBjhDFA0zTYbrfflsvle5I/0r4qeCySokvD+On29stisXiXQ682JitE5Kr83AKSVFV679m2bbdarW7y8vM0+Zv3zKfJA/hO8rH20bzUY/oLPihZCFmffQUAAAAASUVORK5CYII="

/***/ }),
/* 1592 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALZSURBVDiNtZU9T+RGGMd/M/ayi7UvBUgnUV2UigpaCr4AXS51vsGBdA1CprgIiQJp0yCxHyFlBBHFXT4AUiQoULoTEhuJwrnDyOwuu34Z+0lxtm8XNhuiJCM9ssfz+D+/5z8zthIR/o9mj3eUUl8Dq/9S8zfgAyJSBvCtMUZGYShhGEkU5RHHEj+OJJE4SSQZizRNZW1t7TWg7cfThVFEv99HKYUxhlqthlLqS3wu7ct93geYm5ubbkVuB1prjDHc39+jtWY0HJKmaVEVlm3TqNcRESqVCpZtY1kWSqkZwoDWmjAM8TyPJEn4/u1bgiAoxS3L4uDgAICFhQUazSaNRuNvhPMyHcehWq3y1cuXLC0tUa/XJ/JWVlbwfZ9Wq1VaoGcJk1uhgB/abRYXF9nb26PZbKK0Lr3d3NwkDEM6nc4E6UwrikStNY7joLT+PNnYIjqOQ5ZlZZXj1+nEeYIAGxsbfPPqFbVqtVzUYtxxHMIwRESeSawUWilEhDAMma/V6HQ6DIfDiTzHcej1ehPCzyLWSqHzLZSmaVn2tNxnE6uc+P27d/ze7bK9vc38/PwE2e7uLlEUYVlWeXILq2YSK61JkoQgCLBtm0qlMjHxYDAgjmOMMcRxjIhg2/YM4WJH5Ed6MBiUJ2687EI4juPSKq115HleAMhfbrdqtYrruiwvL7Ozs/Nk8drtNjc3N7iuy/r6Oqurq3J6evrT9fX1exF5KpymKb7vc3d3h+/7nJ+fc3FxQa/XwxiDbdvYts3Z2Rn9/oCjoyO63S7Hxyenruu+EZFPAE8+m0mSyGg0kuFwKJ7nSZIkYoyRNE0lyzIxxsjDw4Pc3t7K5eWlXF1dyeHh4S/Ai3Et/Zi4aJZl0Wq1njwvXsyyDKWUHJ+c/Ly1tfWdiPwxNbEgTtN0grIgzbJMRESyLJM4jiUIgmh/f//Hx6RFqPF/3j/8NcXAryLycdrghPB/2f4ExoPgwYGkyDwAAAAASUVORK5CYII="

/***/ }),
/* 1593 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALISURBVDiNpZXPa1VHFMc/59y55kWEYjB1UUu1JrrsRrG7trssigtdFosuFFy6ExXBn/+CFBSxtLtuWlqCugkR9KVFJBSKSNqnxEgRQ/2tz7yZ4+LO/THJdWMPzJt58y6f853vOXeemBkAIiKA8P/CLAJdubNt5+Fv1u3Yc1JERAVEBBVBRREFQZCYVuJC4ocAYtjdaxePAz8k4FUjG8Yeh9WbXKY4UTJVXKYFXMskEhMWcBNBAIuMobUfjZU8LW1QIM80jow8q+HNkTvFuQwXn8njXu4U1crSWjEYLssKgCqZClrNhSW1+kJxYYU0CmPVqgYrlcosK4BZCZZyLsA1tPC+LVzzSwl1FVTp5IK3AiyVz2kx25qpAivLoJly6EsYG4XzXeHOQ00KJ43uqEPfpbiGrl6lbFmvDOXC+IfK3COSzmiCS742WCutiMMH5UJX2TyqTM8RPaZhR4tqbV1CFouTqbCmoyCK4di20RW/SZ04gbe4nCjWRtEOTwzx8YhiZsz0jJleqjRts5WRKFbVqp1+nh3we29A8erbiuNXc2O0g7Uujgr8uWDcXbQCbCshusyGxu2RWqFQ92gDEELAiq5N1AL4UCQO8Ya0wSCUt1tiRdX4EWJmeO8JIdTJADMY+EB/aYkXr17SCYtsGJp//U/30i+txauVxjaqwGlhfAg8e7rI1+OLfLZ5hLnefDh65Oiue3/9MdtavMovET4Yho4LeO9x4lk7HBAgBGPJe9bIYyZ2fML9hQU7e+bE3pvXr1wubVgGlooswL7tfb74tI/3nq3r+hz8/L/CRzMG3jM+6uneuh1Onzx1YPrqrz+aWXIuFx+2r/afS+r602zOcJ7XFsV9A0IIdPTN0pFjx3bPTE3+thyaePzkwe0Hg+f/zgdURIS/n8RXWKWCAwRvaHjR/+77E9/enJq80Tx+Yuv7/pm2qWzGW2R99t8AUvXYAAAAAElFTkSuQmCC"

/***/ }),
/* 1594 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1595 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAORSURBVHjatZVLTFxVGMd/82RgeA20tGDEQh8p8iitj4RIG0vRNoSIhvhYaNxZF4aFCYkL48IEVyVxqRs3JurCVGxBrG3VRGlSjIKDUEGGSTqMGRg6DMzzzsyd69eTcRwLmYWm/+Sfc3Nz7u9833fO+a7JMAzuh6wUyGQyHQQ6+X+aEy8hEectGsxkMkYimTSSSc3QtJxTKSN1r9Np5XSBdV03urq63gDMVu5RUtOIRCKYzWYkg/yYzWZJJpPYrFZKHA7U+39SVYPdbt+9FKK/YXnghj/C8sKfbG4EWVpYpMxl53R/F/sb9lNWWkqp2CRzc98WAYsLo52fDXCopYFTfW2EQ4/gvXWb326s8OnMZarqnPS/0EtjUyMVFRX/Apt3i7iwBL0DLTQdrSW0ucnkpas4qu08++rTvPnuefbWuxh55wLvvT1KLBrFXCxiCqAyUaWZiMf56otv8P9xh1AwwmTqOvUP7sM9N091TTVBX5S52XlOPvlE8VIUQtOpFD9Nz7C+nOBM72m0lEY0FiG8vU1HSyeGYeLWrx4Zi9Q4D89BM+k07tk5Zr5dpv+5pygpscu7DIlkJTWuWhKJBF7PqmyohWMn2lSmxU+FWM4kC/O/88t3Kww8fw5neSl6JostY8XusFOeKSe4dgfvygrn33oZl8tVNOK8Vn0+Zr73MPDiWZwVDgXNinVdnNEJbySY+nGal17vo6npQD7aohFvS/2mrsxy9pke9j5QraAKrKtR6p7hxg8/c2bwUTqOtWOxWNQFKlYKNeG218/jx7s50FovUeoosJ6LWOxdXKX9ZCOdJzpUIHLFVUuwWq3Fj1vW0NkIbuBbsFO5p5yKmjJsJVYFTcY01sI+es51K6hcc7UfuYi1QCAQBowdYIukc+hIM+9f/IDp6TraO1o4ePghWcApCzi5PjlF22NHsNlsROVS+P1+OS0l3G1e4+PjF71e7xVDZBIX1ndQutTnkhqxWIylRQ+fffQ1iXCW1tbDdB4/yrVrM2ixOE3Ne1Sp+gZ78Hg8jI2NXRoeHn5NeGuIdgXL6vmNkFTVeQ0E1vj4w8vEw+CsrKL71MM0NFdRW+diYmLi6tDQ0CsKmtOOfixgQ0CqD0vkqs/KQsrxeNwIhULG1taWsb6+brjd7uyF0dEvgX2FHPFOsGxEHibPyrIxyqK7o1owHA5rIyMjn+wGFatS/NdfU0p8U75fZxfdt5/pX+VSSVVTssg6AAAAAElFTkSuQmCC"

/***/ }),
/* 1596 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANXSURBVHjatZVNaxNRFIbfmUkmqU2lJmkIpArF0kpBULBoFi7EgIog4sZfIOhGQRBcuOzOhQiu/PgDghuXIrWCGoRWWzUiDUjrR1M1MbSTzCQzmVzPOTgWIyOieODkXs6597nvvHOHaEop/I+IBBNN04YBbP1H3nsS+iEABzFs284Tz/PoEDkJGid3escNNRsKDQOmaeYB/ALWrEYDnuvCiBhSMGgxKZADXKoPDAxAdbuIx+PS82nearXg+z5isZgweq2QaDkO2PGoGUWn0wGpF8iWwUHZsvhlEc8+zeLN2jzer7/FjcO3oes6GiQoEglQv4JJgS+w/v5NzJH5cC6Ho9eP4KtexdPVOZzccxzJ2CBqTQue78kaKIWu74eC5bGUUqxC/PNJta+1MVt7gksHp3D5yBXsyuyCZrYxcXUchmbAsW3Z0xs6NoL9ZQ/ZUx7F1w7aSKc24+zes5hMT2Lx5SL4FcYNExztdpvXsfJwxV2Csbc6gTmazaZA+owYOKrVqvQNqsX0OJcYyop5DAXzJoF7NLJqy7IEvMnok36lUpHboMOQwwLw2toa34pwsKKs1+t4XSrBdhx8rdWgKQ2mLptgk5+JRAJOp42G15ba0tKSCMpkMuEeswEmnTwyMoId4+N0O/rhdjtYd23pp9NpUdbquGh0pIZUKhXc61DFchcTBKPFYkM2m4XrewRuSn9oaEiscnwbDdfhEn9tyOVyvwdHo1HohsH+ynxsbIwUt2B9h6SGkrizegvT04/QqLa4xE/FinkMt0IWxWJy+sCWfty1b2Hq3kXUP1rSP18u0IEKM19uY5uTRcSIIJlMyr3v65MXrMKs4EWi9lz5AGadh6jXTCTW4xArohncrJ3H7u07cWLkAkqvSmSNovSxsrKyCuAzglBKSVLkVyoVtW5Zyvd9dW31tDq2kFUnH+TV9Ov7anl5WQVRLpcVec0pa+fnnzsTExOTAYvyZ7DjOIqT7qZsCILnpVKJQdKbm5v7AX3xYsHN5/P7mREKps9TwDQKgD5TRXdUAPQVMkz6xWJRagsL826hUDgkjJ6M4M8ieDkgoLwHUto6c+ZUoVicfYye6PV4H6kLVAZKJQM/AytmZmY+jI6O7uZ9YanRz9/8532kfe/wm/gGfaRdssw8Y/wAAAAASUVORK5CYII="

/***/ }),
/* 1597 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANDSURBVHjatZXLbttGFIZ/DileJFGX2EnoGGptdNFttn6HIFnkHbLKJgtvvPcueY2sukjRFEbQJ+jWCZKgsGyhiOVI1o2mxMsMyenhtFTbSPaiRQ7wczgLfjznP8NDTUqJrxHGPzeapn0H4P7/ZL4l/QbKeCmKx2mayiiOJX/ryyRJ/hTnkn8pIZQEKf0YqDXLMrm3t/cUADPwRcRJgiAI4IQ5+BUHY6yo5G+Borwvy+YCaQyYpokyVsFxjPFohA7bRCoExpOJWotwXRez2QyO46gK2+02ms0mNMbKBK4Hf5pJxKyNE8o2cytI0YRu6yo7P9chbAu5bsDQdVzGjBRD91Nkgxy6LqBXqpW14G9v6bi48NFpUcaeCVaU/Fc26p4EEl2XGeqcI9+2CKwjE6FYC7apzLueB62XgZPf3dNTBWw0Gmi2WhiPx3Bsu7BM2dHpdFCHXr7keitO+z786RiNeQNpUEF1cxesyATAJAa0mgdBe1aRCtz3c1SuUsihvNnjXc/F3GWonzPknqVsKC2gBpXn/d9rQtl79s1gOouIwhAu6kjIisFgANOykFDpQogiS3U6OOfY2dmBZVml7zeDu4MQi4DDDxLkMxN5hZrIDHCDw7AN1bSQMUhbojdOAZAmHHCymz3+fruBxUKH29ep005pw1IUy/tlRBHyLUtZdS04imJMp1PU5AbCRUhH7wJhGKqSScoKskvZMRqN1Meym3vIYoIZxvXg80BDxlo48RPIBvlXvwe7JpHnORJNUw8HV1eQsg7WdLBIU3wYziEYg1lh4tIP5gDkCviblkYNm2KnfQfYrq61IMuqqnmLhcD5+WdsuA3M0oV8/er1Dyfv3/0sKVbAlu1g6942slMOHifo9Xqo1arqg6jXXQyHA9i2Q5aF6Pc/49HDB+h2u3jz6s1PBwcHz4h5uWKF6TSNj79PEPhjtONNyAmA2hbiwrs6UNTo3HYhOEci5tjwTJydneHo6OiX/f39JwQdlKyVeVzM1SiKpHjnq7lb7GlGq1lLPqv9fD6Xw+FQHh8f589fvPgRwN2SUWoFXADU0H4fFLASqERRrOqFND6Tw8PDl2ugShpd/uuviZN+peeHWBNf7Wf6B58mJof0xI7pAAAAAElFTkSuQmCC"

/***/ }),
/* 1598 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJwSURBVHjatVVNaBNBGH07u91Yf7CUlihUqFj1oqDHCF6lPXkQj171IjkIuQoe4qV679mDJ9G0RKIURRAFT0p7EBttKhJJW0uDadKd/Ru/mXTdIZuEVumDt/O3++Z9385+awghsB+woMEwjFMALuD/sEhcgnQckXDN932x7TjCcbjgfIeuK9xOep6ipzEIApHJZG4DYBY64HCORqMBxpiMIGpjgqD3d8YStm0jQkI4EtMFmWxj9hSmuT7CQFe3rFM4EtqlcCzEWCwY95PCWsv6CSMpGruNItAM9ALrlgpdFN/WEbz63N4sCLF9/zmMLRfe+68IVzbkvTp7CsehhQLB3CfwmTcwDqXac6sNwKRNjw6CmSaaM6/hzH4EglCu93GsufUezkP82MTB3BTsy2eV42DlF8zjQ+oe+9IEDmevwF9ew+97hT04NqBosPZGEsHyOtjYcPySTQb4IYTr78qx4mBuEmx8FM0HL+C+K6s5f6mGgfER1edvv6B+9wnME8MYyl9HGIbJWtFVfMDEgasXYZ8fQ/h9A2KLw/+5CevkqFoXDY4jd6bAzqThhYFybVlW/+Omnw5rIg3j9DHVH3l062/I9uQ5UH2A4zigGqEcM8Z4rVarAxBWj+OWoAYlRIUIzWYT1WoVqVQKsngVi8WnlUrlpSAkqpusUq1WS5ATVcXkmB5SlYtcSaq1er0uFhYW1bhcLovp6elZAOlIiyGB/l8VCUnH0qHKGjlEqVSaz+VyN0lwNT4Ve0TkSG4gCM8KhblsNntDiWpIpEKGrIevp4CgWkqRTAXP5/OP9fB1GnT511+TS/xAz6+hC/btZ/oHxA2hkVTZ8goAAAAASUVORK5CYII="

/***/ }),
/* 1599 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAeNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRViZRWCVTWyhWXCdWXChXXSZXYCZaYyZcZixgbC1lcD1shFh/jFqHkF+MkGWLkWKNkWyMlGeQlmuSmmyVnGyXnXuZnnWaon+eo4OgpHifpo6kqIGkqI2lqJWlqZGnqoqmrouqr46ssKSusKSvsaOvs5Swtai1ta+1u6S5u7a6vLy8vbm8vr6+v7+/wKK9wLm/wsLCw8PDxcXFxrHExrXExr3FxsbGyMnJycDIycnJysrKy8vLy8zMzbnLzc3Nzc7OzsXNzs7Oz8/P08nT09PT09TU1MjT1NXV1cnU1cvU1czV1dXV1dbW1tbW1tfX183W2NXY2NjY2NnZ2c/Y2tvb29vb3d3d3d7f39/f4ODg4eHh4uLi4uPj4+Pj5OTk5OXl5eXl5ebm5ebn5+fn5+jo6Ojo6enp6erq6urq6uvr6+vr6+zs7Ozs7O3t7e3t7u7u7u/v7u/w7+/v7/Dw8PDw8PDx8PHx8ezw8fHx8fHy8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn5+fn5+vr6+/v7/Pz8/f39/v7+00PXMgAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABSElEQVQY023RzU7CQBQF4HNvp1MoIgURMayM0cSVW7cmvoaJaxf+PIkL1z6H0ZUsfALdqUQlBlFrQH7aMnTGRVtMDHc1+XJy70kGmDsEkPxnEwMC5NmIiYmICGBAHk4gAPL7bDEYzIIYKBEgAIiRmii3b4er9ZwAGAnbFQ61WgRFQ5ZMGbNmHdoyr6MeublZmuPWmLYdhPQuHFdQxvnGT6vdrfmD2IxyKxnTQ9Nwe2nHG7455RLNWOuaHQ3s8rcdxSAgaWPFRtoiDD96YwP8paVpmcLWlQqWO527A2RMet2pbbw+f1WCxt5sCdmmXIt7tx7LXfdCaZOkIbhQLWzePAn/xXWvL2OAAOd8SsGn53G/fb8PcxyodLffLTa0QHHtEeZUqfQkqnUCMYGn5kQFWRMgaWtp60iFSNlYTCAQsNCMpvP+Uun08QvTxHakXw6pnwAAAABJRU5ErkJggg=="

/***/ }),
/* 1600 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1601 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1602 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALjSURBVHjatZVfSFNRHMe/917ddGoPFc5MLVCI/qAIGQ3yISowInorepYefAt7iBB6kaAXX6PXIug1SAgLQopmUbO5u8ImGaghFRnVdLv3nHtOv/02t+lcU6If+3IOZ+d8ft/zvdzN0Frjf1QVcmUYRguA1n/kzZPRhSIwV8vKSioshKAm3Ik+JFCtHwtuCg4tCz6fLwSgBGykHQepVAqmaZBMBudVptFqERVAoa+JojINBpbow/Q0hocuY2ZmZqPv8yZKMs5bJqeWxZu4ydjYI3yMh3H4QAsunO6GHYthW0MDagMB1NbUoK6+HjmbFcB83azrkZvDuNh3EJ1N3RzPr99JvH02BvVtEk3BnYDpw+TsMq5eu569bQUwQ6emojh/ah9t1ojG3uPhk5d4GrbRd7wH2jARbNyB+roAmoMCtm2jq6uromMe792+gc727Xj1Ooqln8tIuwptjX4szM9h9McSovEE2nYH0b5nFx7ffYBbd0YrgElSCBw7cgi9Pftxpu8EVksICdcVSDuC9jjwpAvpOtgbDDB0PdhEceWigMaakp4HKT0IT8FTHpSi0aOR5gasVWiFjC0LWmkoEr1FBFJZKCnjWnkeSdIeBpMRdls5CnLMwLTj0sgN2J2QDCQJWpM5uILfX13ut6I0CtMwGQwNKIYzNCspSDznptXVVZuIgmRlHIMcugQGxcGRZMAFuEdwj/NWMGFACAGLIuQDGzrORsGOpJsGFUGzYE3gnHOGGpYPdQ3b0OxvRSKRQDKZXATwtVwUrMi7T1j88h0UAohb1EDxDXz+GgyN3M+v23Ys3d/ff47mswCKD/DpkOM4ml5fnRld19V0RS2lJLMeSynFa5FIJDPntVhsyg2FQr3MKZKJzVX+AVEjUFM+HI/bYnDwytlwOPy89OFtscglPwdymh4YuHRyYuLNC6yp0iiOkpv89ddHkBNHND4+vtDR0dHNZ8vIYOjW//M+07k5/KX+AF/r/xkkcoECAAAAAElFTkSuQmCC"

/***/ }),
/* 1603 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKoSURBVHjapZXPS1RRFMe/97w3zihCKFqLjH6otWxj2K7auYgWtYyiFgUt24lKoP34FyIooqhdm6KQaiMGNRYSEoSEpWFKRENaWU0z757uO3fuXC6vcVHfmfO+lztvPufMOfcxipmRShmlhv8Tcw0Yu52+Q4NHO/qPjSkjUpIIJEEwb6j0peCKsC4X64rBC0+unwNwKwA3tXf1rOiW7XFEiA0pIoJZWzi5JEqgLjErJVCGVb5tc4/jkWtDushFVItI3MLDyMXG48isI39/bIPIsnzFIpabBUApVIHEXcWuel+xEMQ9QxSACfUqI3Fl1wKy7sAeansfyIO9HDS2UIlCTiFhC1b1PofDBFRjMCGAyvrsfqCnE7haVHjziYLBKVgPRY0q9tCWJsLOTYS8qbh3I2HuM9zJyIAdn9ZrhYtEE64VCd2dhMk5IHJD+zs8Q6YAbIcjkNYCAYrAiNG3LUYkQJ84gEusMzzyQ8PgQB5b2gnMjKn5NMJKId5YFIKpfpzuzlTxfL4qYIADaOA+GoDJD8ew8WqJsVBiC+YshBzch71mjxtqVYUQrTUYKSSoVpRom1ibSMXVqmajTCsE6iHypSRJBG4TuX2gmmiUKxWs/fyBgi6hK7/4613xxr3s8IKeQRx1MAIlZuPb1xIO9pawu7sdc/OLenho+PD71y9msj32vRLohmagEGsBxypBW7OWz7RmVMxeq1rBQP9WfFha4ksXR09MP330kI1CsMMqbyf3lLFvR1nAuzrKOLP3C1BrT9Xs9XYmKL6c1RfGzp+efHz/NjPrzDlmowOnLgdzvTOTQ3MuByAcGAPS8wL9rgyNjByZmhh/4KEhWLS6PLtc/f5xUYOUEd6u1h5hUg4urhMG6bXylZujx6cnxp/5nx/qn/9Mwyqz+gNkffbfifCdYgAAAABJRU5ErkJggg=="

/***/ }),
/* 1604 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatZXNTxNRFMXPmxmm7XQ0/aQklEQWmogWP1bQ6EJEExYmLpQViTGQsGCJiZE/R/0LNGliWCKtiS6s0GhMwEBpQluqdKadUvox3nlUahkKCcaTvMxLM+93zz0zd8pM08T/kISWGGNhAAP4N6XJ6FYHmBQ2jEq8VqtREV4JzFogHb223bQdiiJkWR4FYAOzvWoVlUoFgsBoCRzcueyF/oio/BdbFJYExoFnArP23g5mBBRFDuRF2FH4AcAGZqeCOYC7bcPt69jMhRPAdmh7bwcfieB0x21oF7gNdDr46fQLqKqCYNCHwQthjI2NYKC/ryMiS81mE1+/rSHx4TPW1jZRKhmo1esdYD55rYqjK6nvccMwoOtlbKS38WN9C4GgikcPJ9DbG4ClN29jyGSyKFeASxcHEe4PQZYlCCLD9eGhKPESNsfFYhl6SedtX740iFvRm1h+v4SXr17j188CipqOEBW4cjWCoaEIxSSh0WjCNJvY3+90LOAvOV1OqG7VapUKkOuNDK4N30Aul8XCwnPMzDxBiaz6/H3I5grIZfOo1xswIZBrR3ewKIhQFAVej5dcC3zldwqwxrzeqLec7UOSxIP3XQDFVgQstMC6gwUB/IBLccHj9fDcHE4nwWpIpze5u95QHz3cEHdIPDQpiuLuLkzqklfgsmVchMdDwAPnvANN10DijpvNupU/FaqiuldB2SgBBKQIKZZSAUDuWDAYI5DOoxBFEW5VgdQj8n0sFkPFMKCqQRR28hi/exuWrLcqmUxWp6amJmi/3iVjwboTuqaBtTJ3uRSMj99HdnuH2hYwMhLFfq16CE2lVmtzc3P3UqnUx64D4pAd/JAJyk3bhc/r58UCgSAikQjkHhmKW6GBKHLo6upKbX7+2YN4PL6EtuyO/X4fXE4Xb53o0LSilQ5/4pIkwe1W+QS6KNPkl+Te7Oz0ncXFxXcgnQQ2ZVmGPxCA0+E8jIXDW9+Mc+d9CPgDMGHmJx9PRhOJT8toyzbSZ/nPy9C5TZyg3920LIowlgzhAAAAAElFTkSuQmCC"

/***/ }),
/* 1605 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAmEAAAJhAcEwVfoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABzElEQVQYGQXBv2+MYQAA4Od9v/dw7rimbRq/QiWaroRdWDAa/BtiYhKTRMJCIrFKGEwWDAyGIiEuSDDUIEKipcpV71zv++57PU/KONw6droRAQAAKOun97t9Ejh47nYZgSiKgigIAoj108+ek0DIMqIoiqIoCIKAIBAgAVCIClEURUEQBAQACaBQKERreiqVKS0TkoAMSEAhKJS+qJR+Svo6Vs1qoQYkIAoqn4wt2aNpoOeQgQ/mTAqABES80hA1FAaakrZpW3zWEQEJiH57bWCHaNWUI7ZjZLOOZbsACYgWfTOhb5tt9qpRopL8VQMSEL03VIPtOoJlbZuUarUxIAHRLi+NlILdej6adsDAX+vaSkACgoPuGvrnqJbCjMIfTStWzCsBCYjm7PNbS6mSBWMNa35oaNsAJIDoorN6Hpi13wyyFQPzftkKSEAQ7HTFdV/1LDkhGtuw07KkVaogAQHMueGRRWt+ahvpmFV4l+9d9QYSEATASceNDPV91zBhIT+59vpydwMSAAFkWVYrrZv0LC/cXLjUHQIJAADIKiM/8otbTy50/wEkkNf6WzdHZLXKWNA0M3545/H57gCABN6eOgMAgMqr7joA/AeWpZ+SZ25x/QAAAABJRU5ErkJggg=="

/***/ }),
/* 1606 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1607 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALjSURBVHjapZVLaxNRFMf/9955JOkjqdZYohgoimSne7euXXUhuLKbQsF+gbrN2q8grkSoqyz8DK3bCgE3ra1JwDavyWtm7njPCReHkA6Kfzick/v4zZ3/nEtEkiQQQngAHpso4f/UM/HNMEMHc916/erFm2dPtl5u3augVH3exD/KwES9Xv/SaDTeAWhZsLxfKW/dLYYrxbzGnXL5aagdtMc5SJpMgGJuAkAYgoYQcg5DwrUUwPaDMqrV6jEAnnSQkus6SITA2toaulMP3aAERcviEcqiB9JoPEKhUJjXo3k9CGYAykjLwYKkkPjauo1gPMWjzT7yvkSn04brr/CBnRhw86tUIjS1Z+oCRvSdbgZHkYZOYqioC1+HQPAL8VQg7LagNh/C8zzEM4mC7xDY1IprxA5kFthxJJ+44l4CLrCxscGwXC6HfD7Pp3Ich4LBymTXdaGUyjyx/bqQUtJC3uR6Hmff93lsMpnAc12qOXvz+WxwaExLoDGbzUCaTKfQWmNq8ng8ps00x3ASZQLTWCZYKbJCUUkL2Tchpf1tN6dzGngzWFJDioRaiDcUSyX4nkcPIL8tiGsLLpk1pKwT2wXUn5z7vR6/6nA4ZN9JVFvIYDCgxDYtSiKl8SREHOn0QxYjPZfO2eB8zrUny/KQx2wHxXHMobXOtkInKY+LRdtm1mM7TjDqFupxzmEYIjFaBjYLQhSg/3jc71OPsq8kO0YQil6vRz6zx1dXV+2jo6Njsn7RCnM6soKfdaOXWmuGXl9fcx+vr6/TicOdnZ16u91uLAXbjfba2luVrqWUFHzKWq2Gi4uLeH9//7DZbH4C8JPcWApWvJGDgAyzoZSy1529Pz09jQ4ODt6enJx8sFArZ7HdVhPNH4dEVzWKIgYFQUBvQ2B7xYPd3d1DA/+Yhi6C9Y/LTmt7qxKoYQKcnzeRoW63G+7t7b0/Ozv7bKGLsn+mLoCaiSL+TpGJ7yY6DF2i3yHXVVw1NfN+AAAAAElFTkSuQmCC"

/***/ }),
/* 1608 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAObSURBVHjatZNNaFxVFMf/933Pm0k6MW2q0cQQqSmhVSoV8QNcuLOuAy78wKWCm7pxI4i46aaLUgpKaUtREbtpq1hbdGGESlEQBAtitIOmyUzSJDPz3sy89+5Hz71vJrR52E3J4Z05576593fP/b9zmVIK22EWtskcbLFTx999aNQtzzme52ecu5lUvuDCcxwxutFs16JY1gPfyTxmZ47nciY4r68szR8+cq5xT/CLBw78oZhTzbIMaUpOMUtTMLaOsVGbxjsQ+D78wDcxoJh2mzUAU/8rxfmT75/uJLIqhAAn13GQS94BVArOM9BJwPueZRxeqfroiY9eP1IAG+iZ92b3zsy8EfhuDuR9OOf9cQymOnQKbuCcgIMNpJR44bnnD5/8+M2ZghQPVMZ+tC3LTE6NDCkSkiJJErSjDnZVWmAA/lxIsGM4RDkMUAlDVCo6L6FcDi3XL30NYM8WjVUC0YUDBeZIuIzBd21wP4CSHCO7ZwF6N92KCOTDggSUgEwjtHobaK4KWEo8WKiYKo11ZLTYsW2A3AOg+5wLSZvl/w1VBMKSB6klEBmEoCgH83hc0Jh0irDFBlDOqRo7gO0EyChXRFJKu9oSEd0DnAOFkBpioEIqrK13kcKFFJtgHe/eRKqoIEUv47FuHQWg2Ypxs7GGPVPjBJW4td5GL0kxmUpUh0q48e8yorgDEHCo7GFnNcyLkShKYSkW6wo1/Ppf/+GTzy6bipfqa/jy4jyNL2HhxiKkFLj4/S+o3VwFY8DRU5dRW1wFcWksi1IALCKohpk2a7Zj03Ynzl7CvscnsHd6HJ9+cQXdHrVf3MVCbRlffXsNT81O4JHdI6Zi5rpFsB84Ub9ic+xON8GF737G1MM7MT5WxcH90yRDiM/Pz5MMPTw2sQuvHnoaV3/7G9d+/weSwEOB1y5qHHcSzwbOfXMVa80Ic4eexRMzk3QZSmD9r/7Oay9hYyOGbQGuyxC4Nj54+xXEnd7gg/fuAjPGrGMfvjXy5PAk5l5+BgraNIxcCA0119axGEarJcpNZ1BUKAUufM82+fJKc1izFC2wBpIs1W+FguuGzyC1874Lnl8C41k/5lCpyM0GeayvtgPNulMK1molTC8Cs6HMKWBMglFuA5adT2eCXNKjwCABKHqE2bSV9AzrTrD66dfrPyw2GsN0DFtpslKFW2ii2S3/kWpTMp2Lxkp0ZTCFmQW5zj4FD/dnKfGSTfB22G1qXX1eRpiUaQAAAABJRU5ErkJggg=="

/***/ }),
/* 1609 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJWSURBVHjanZW9jxJBGMaf2Y87gdwdxogWdrQaL6G1oVJL/xMqLa2stDWxvcSGyopCKDCCJCrkoNHkojmbazjl+Fg+92Ocd5I32XPY1fiSZ2dnmPnNs/O+C0JKCYpSqZQrl8uPXNe18B/h+37UbDbf9Hq9OfWd2HeHlUrlSE24BLYsCywhBLes+DwCnwL48CdYuycxUEJgtARu7NtxuAGO3esLg42wbRvjlcDbLytceCFu39rF/Tv7qWCORDBBST+9CN4ywsoPcXruw3EcAiTB+UlNMENpIrUHWYFQSliqv+PQWPpxRFGUDOZF5O7mVYBMROpybc+lMQYbj8/9VDA7zzi2BoeRVI5tDaZIOlspZTpYSoHv5wE6JxcIokiBgY/fJggBPDws4PrBTnwDBhqOjZr9/GOF9189TBaEosWAVJ+TszmO3p3pcQaGYcj6+xkvfQGXkqVaS1BSCAs4tkDGtfBrusbeFQ02lAp+cPeASy5eXryYnMVdxqGJYAZtfW0ZGgQBicEMpzWJ4NQaJfm+z2BjA9d1TXAaPO6UtV6vsdlsdLtYLPSG2Ww2Ecwwoz7jFcDAyWSC0WiE8XisazyXy/kAgiRw/N6AklsCz2YzrWKxqJM8GAxktVp9DuB4Wx0nuuUzZjC7zOfz6Pf7sl6vv+h2u8/Uj/x6G5jDgLM4gZ7n6Tntdlu2Wq2XSk8VdJWSvPQgOLseDoey0+m8ajQaTxR0mVbHcjqdzlV2d7km2SWXFbnMZDIoFAphrVZ7rY7gsYIusCUu/ZkCuId/i0Dpk4LOkBC/ATxkt8B78rx0AAAAAElFTkSuQmCC"

/***/ }),
/* 1610 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAW5QTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDw0tLSVlZWWlpaYWFhZWVlampqa2trbGxscHBweHh4e3t7fHx8gICAgYGBhISEkJGRkpKSkpOTlpaWnp6enp+fn6CgoKCgoqKioqOjsLCwsbGxsrKyt7e3u7u7vr6+v7+/xMTExsbGx8fHycnJysrKy8vLzs7Ozs7Pz8/P0NDQ09PT1tbW2NjY2dnZ29vb3d3d4uLi4uPj4+Tk5OTk5OXl5eXl5ubm5ufn5+fn5+jo6Ojo6Onp6enp6erq6urq6uvr6+vr6+zs7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////U4Xt6QAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+PvR6IwAAAT5JREFUeNpt0d1KAkEYBuDvZ3Z1CcVUkkIrO6koqKMg8qCDrqDr6Ha6nVKCKISko6ggwaCSREvF/ZvdaXeZDQpfmO/ggXkZvkGEeRHRMfkfhk7MfGYTQXIPIZp0zjHD95sgQUSIFHsOgGKmMAw9ZBZCgJRAmlVgknRFFDbpi1IWgePjBIWAKeQXRpEl3fhijS3VP1C9TuXkurSRcnHnZjHTbSvVuLrb3AVdAktMXLUbh7P62vMeo2ZGAmQj87AFmG1hykCsFIeXveJt7fS1D5qJPuTQof31x26dSm29k2hWVo2RZ9abRzjdLvuaFU0KMKzeq2Jt8O6HF0olzGVh0Ep+GYPJcJRpSlcRpCETwZ19HrPvBLqbGKQHrj8eqHbHTrp1RAFReNknOfN/H2gZggiRcy03UUD882lKStA8Lz/Zvm+lGW5r1gAAAABJRU5ErkJggg=="

/***/ }),
/* 1611 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPNSURBVHjapZVdaBxVGIafmdmfmcymaZJm25rErKnRaquttFVBKlUjkYZ64w9eiGJBBYXihQQDkSjRG4XeSC40iAZEpHpXAmsVaymJQZKLJXXTtdJgTJO0m+xukv3LzuyMZ4fdZWWzQfGFj29nzp7ne893Zs5Itm0DIAkVEv9PdkEAriJU7uvre/GV06ffl2UZCeemk516hShVFeNOqiYyMjIyKP7/lfhtuSiqvb29s75+R0CWJQTcAf6jSCkAKnKl2traOimqDAYcUAW4HLeiKcYn5mhpqeeRhztwe5QyuErVYLkELrv9+psQOxt82MD8jTTDI1N0BhqIra7xweBJDt3fVhMuU3ZL2W0uZwnoDMeOdtJ1l58F4fjbYIQNyyYnKfQ8dZBPPh3n47M/IhdNiNgaDJRbcO67GZ54/G42jTwXxuc48eidqE061KmgefHvbeTwkTu4FUvz8+WIAy8V2KrHDvSnS9fQNI3gxT9Yz5rMzMU5P3kRV73GCz37aWnU8DWopDZNWm5r5rMvfqH7sQMUVRs8MfkXtuzh9xvrxAybjC1x8J7d+Jt19nftorW5jthaBq9w79Ey7Glt4kp4gfsOtNdshQMOh29y4fJ1YimTjARpWQHVy9PH9xFo20lofg3DtkEBl+pBcnv4/oewM7eWY6dP8XhWONFYM/K4xfJ9Po3uY+2cm1pkh+rC55XwKwrJvMI1sapodAMz6Zja3nFzUx0bKQNdV9F8Kq+dupdWv4/uB/bSKNqh6R4SWZNYOsdEOErkzzgPHglsD0YMdnQ0oKsKJjZ1Pi+NDV7WDRvZ4yKwx4e/ycfNjM31lQx5LHKbOU6dPAywveMzbxzHLYGVM8XO5wmGVwgJSNyEFBIZQK9TWIilKZi8fZdKU6OGaZrbgIFARzPP93YJtypS3uLqYpJLCykm4wYZWXGekvlYBsO08FgGX559jmw264RhGFYtx0689eYJntyno7skXIVeqx5WZDdLtpurG3muiCLSeoKPXj2Kriusrq6ytLSUHR0dPQ8Uj80aevedHn6bXebDz38lEYuTTu5mctPAFV3lkNvgzNsPkU6nyOfzRKNRq7+//5np6elQ6TymmOXh4eH30um0LZZk53I5J8TSbNE7W0wW1052xhOJhB0KhexUKmVPTU1Zvb29LwNKgVUKmRqqeuBdsjNBwMsbNTs7aw0NDb0+NjZWONzzVS/Iv4SX3QAFuDEwMPBsMBgcq4BWgyORyOLy8vJCcQMrT7xyEeHWiWQyuTk4OPiSgE4KqMUWqvyYyv/xY2rZQtTQ3w2LvOTP0xVUAAAAAElFTkSuQmCC"

/***/ }),
/* 1612 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAK/SURBVHjapZXLaxNRFMa/mcnDtJjEQosk1MQWDIUqVSrqruhCISBuAoKbYjeBgi0UEYModJGt/gulLnxAugrUpSK0OgUVJCmprSSFaBKVpNHopJMZT+70ltRrSNEPPs5w75zfOfcxjGSaJiRJcgAIkb34P1XIaWJu22CpJxwOX4vFYhepiIl/EMGkeDz+LJlMPgDwmYPlQCDQMzx8fORHrQZZlmgV8k6UYAJYK/yC22WD3+sEDVmiBy6n0wliqE0WSLY/qgItOT/rBmYXcmjQeLDXheerFWx+1TATPoKrZ3pZ0b9JANOL1KVMtuL0wzVEL/hwetDN5m5c6sf0/DpmE1k4FBmRs31WHiAUkfeACcihNer2ZWYLSx+qVjFKtFGcGPPRM/BoqcjGFTKbF8BixyzabQrs1NWL1TJka5zZabfmN0oadAN8XOhY2AoOdykSFm+dIJDCE5mX17ZYoZHAQbgcu+kdwACHsORgXxeLDLqz3FfrVVq+xA6QAzuCwTvmoNZIrmkG3nys4vqYH6ODHgHYDswBInzHT5aLODXgxs3LQQ7k8Pa3gosvexfe4sV3X3D7ygBsCptvdcd73NaabuKw9wCG/N3ttkAEd4I39X7zOybO+/cAG42G9bVah97h8MQviT2fDLrpblvJhmEwqK7ru3CHwwGT1O66id0ykInE6yKO9rno8/YwYL1e3+NKpVJIJBIqgCrEw2NkYWvUjSqm51KI3FebHTJQqVRCPp9n84VCYTsSicQpJjlY3GOIBxPydeHcMQ+G+7tYt+RmhwiFQkin043Jyck7mUzmKYBPfDcI3FmHuu1IzIyybjVNY2BFUZpQfWpq6u7Kyso8h7a9bvsQg1KBrfHx8XupVOpxC1QAG9ls9puqqm/382sql8vb0Wh0LpfLLYhQS/xnagcwRPZgf9LJ6+SiBRX1G5mpFC1kdY3gAAAAAElFTkSuQmCC"

/***/ }),
/* 1613 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAmEAAAJhAcEwVfoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABzElEQVQYGQXBv2+MYQAA4Od9v/dw7rimbRq/QiWaroRdWDAa/BtiYhKTRMJCIrFKGEwWDAyGIiEuSDDUIEKipcpV71zv++57PU/KONw6droRAQAAKOun97t9Ejh47nYZgSiKgigIAoj108+ek0DIMqIoiqIoCIKAIBAgAVCIClEURUEQBAQACaBQKERreiqVKS0TkoAMSEAhKJS+qJR+Svo6Vs1qoQYkIAoqn4wt2aNpoOeQgQ/mTAqABES80hA1FAaakrZpW3zWEQEJiH57bWCHaNWUI7ZjZLOOZbsACYgWfTOhb5tt9qpRopL8VQMSEL03VIPtOoJlbZuUarUxIAHRLi+NlILdej6adsDAX+vaSkACgoPuGvrnqJbCjMIfTStWzCsBCYjm7PNbS6mSBWMNa35oaNsAJIDoorN6Hpi13wyyFQPzftkKSEAQ7HTFdV/1LDkhGtuw07KkVaogAQHMueGRRWt+ahvpmFV4l+9d9QYSEATASceNDPV91zBhIT+59vpydwMSAAFkWVYrrZv0LC/cXLjUHQIJAADIKiM/8otbTy50/wEkkNf6WzdHZLXKWNA0M3545/H57gCABN6eOgMAgMqr7joA/AeWpZ+SZ25x/QAAAABJRU5ErkJggg=="

/***/ }),
/* 1614 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALYSURBVDiNpZXNTxNBGMaf2dmCdFEbBAymgrGgIUYxEkMwKnDQeCLxwIE/QM9EE028eFC86NWExIsmHoTEGA5ELSQ9FDiYTmz8ih/xg1gQW7AfFLrd2dnxtJvttgWiTzKZfbNvfvvO887MEiklAKC7u1sbGBi46PP5FPyDOOdWJBJ5xhhbBwDV9e74yMjII855CVhRFGcQQpzZHq48KxKJfAcw5wUTKSXsFbiBXrgX7Hp2vuQGO6KUQlEUZ94O2KsyMKXUGV44IcAfPYnF/DcQQrB/VzuatBYAxFlpRTClFISQMriiKPi9nsDTdw8gpMDBPZ3IbKzgeW4C/pp6DHVdRmugvQRc1ihKKVRVdcCqqkJVVUy+eYJfqylcODSMoa5LuHzqBvZpHVheXcFE7GGZHRXBXjilFC0727CWL+LL8mfH6xpSj7V8EarUysCqF7y0tARN08oadCZ4DieaeqHV1iORSGAxm8BMfAbCEug5eXZrsN/vRygU8va0RJa0MDp2G4WCwJXBq2j1t8GyrM2tqLR1vHrBXuLjj6+4NXwHfUf6IYSAEOL/wbFPcfR09OLYgaMAAM45OOclOSVWeI9pNXUGO9EUaHTiLcGKsr37p3HvDphWxol1XUexWKwOtqveTKbFMfdzEhISfYfPw0drkE6noWladTAhBLquY2FhwYnti0lKCcuyYFkW+oODEMLE+7cfwDlHOp2Gz+fjAMyq4FAo5BxjG8Y5h2EYMAwDhUIBu/UgstksGlobQClFKpWS4+PjdwG8tlmKF+y2wlupaZowDAOZTAaqqiIQCCAej8twOHwvFouNMsaKFcGVfPZawTlHPp8HIQSzs7MyGo3ej0ajNxljelWPt5KU0qk6mUzK+fn5senp6euMsYI31w2WuVxu3e/319rbzq7SNE0IIUAIQV1dHZqbm8XU1NTjcDh8jTG2UXHV7p8pgNPbLN4E8IoxtlYt4S/HRlSyFby3UAAAAABJRU5ErkJggg=="

/***/ }),
/* 1615 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOsSURBVDiNpZXPa1xVFMc/97558978eJnOpClMaTZttGBbF+JG1EXBX0gR6VqKO1fBhassYmgJ3fkHuGgXlm50UyUSusimosVGxIIhUaG0ptMG7JimmR/v3Z8uJpnOdBIXeuBweffc9znfezj3XuG9B0AIIQDB/zPvd4C53ZmP5z+f6dZemYujgGI+RzEOKcV5ilFIMY6I8zkk4IFUWdpZSifVPc80XWUINm6eBy4Ogccqh05+dy/Lx/mQQiQpF6BckJQLecbKMaU46stqpxmttiNVjr+3Fa2upZsp3j586OTuGjlQBrz3eN8brfNY5zDWopQh0xrnHJnWKGWoFOF4PUccQpyDnYr2WX3FeIH3YJ3DOoc2BmVy5LRGSoF1jkAKrPN9ePOJxliLpyfC4/u4PlhIcL6nsOeSTGmEAOc9yhikkDjv0MaCNxhjyLQl1b1/vNsDHGBVKZKEgSAfeuLQE+UskRTkBeSERQpwgBAO5SzOacASYEkiSSCsGgEfFBt3Fz45jRACKWVvFAKxj+/Uc6jXLl26dXcEvLuw024Pfe8F2Cs+Pj4+FBsB12o1pJQ8uv871cPHyOVC2l1Fo9nl+SOVkUT7JR0CSyGI4pilL+Zp/XwVP/4iZz/9ksb9LZ60M77+4S5hINnqKJS2PHfkAI+2UrY7mnNvHf93xQI4/c675F49ihk7BcCxehljYqbqBYyFpJhHSomUEq01QRCMKB8CsxP86Z7jZXGH2806L014tre3aTabVCoVtNY0ux5rLaVSiU6nQxAETE5ODqHks4q//X6Fz66n/JF/g4WVmMuLv1IoFKjX6xSLRarVKtVqlYmJCVIfceNenpVHMcaYIdXDYODHO55Gs4UtTXJjrcUvDyIKhQJJkpAkCeVymXK5TBzHJIWQr279xW+NDmmaopRyI7fbruLzH5zgzVMVamMlps8c473XjrK+/idKKbIsIwxDlFJUq1UajQYXz9QoxvDw4cP0ypUr30xPT+9RY2Bzc5MXJosI4Xj9xAEeP94kSZL+Np1zWGvZ2tqiVCpxsJawvr7uZmZmzi4vL9/etyuiKEJK+bRLBg6B9x5jDEoput0uU1NTrK6u+gsXLny4tLR0fbcMQ+BdQBiG/SM9CBdC4JzDOdefX11ddfPz8x8tLCxc9d67ka4YzPTsDgatd1/3XGutZ2dn37927drlZ6FDitfW1h5sbGysi549zTxQFmst1lparVY2Nzd3bnFx8ea+ov7rY7qXykH7B53o11C/F5ZZAAAAAElFTkSuQmCC"

/***/ }),
/* 1616 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPNSURBVHjapZVdaBxVGIafmdmfmcymaZJm25rErKnRaquttFVBKlUjkYZ64w9eiGJBBYXihQQDkSjRG4XeSC40iAZEpHpXAmsVaymJQZKLJXXTtdJgTJO0m+xukv3LzuyMZ4fdZWWzQfGFj29nzp7ne893Zs5Itm0DIAkVEv9PdkEAriJU7uvre/GV06ffl2UZCeemk516hShVFeNOqiYyMjIyKP7/lfhtuSiqvb29s75+R0CWJQTcAf6jSCkAKnKl2traOimqDAYcUAW4HLeiKcYn5mhpqeeRhztwe5QyuErVYLkELrv9+psQOxt82MD8jTTDI1N0BhqIra7xweBJDt3fVhMuU3ZL2W0uZwnoDMeOdtJ1l58F4fjbYIQNyyYnKfQ8dZBPPh3n47M/IhdNiNgaDJRbcO67GZ54/G42jTwXxuc48eidqE061KmgefHvbeTwkTu4FUvz8+WIAy8V2KrHDvSnS9fQNI3gxT9Yz5rMzMU5P3kRV73GCz37aWnU8DWopDZNWm5r5rMvfqH7sQMUVRs8MfkXtuzh9xvrxAybjC1x8J7d+Jt19nftorW5jthaBq9w79Ey7Glt4kp4gfsOtNdshQMOh29y4fJ1YimTjARpWQHVy9PH9xFo20lofg3DtkEBl+pBcnv4/oewM7eWY6dP8XhWONFYM/K4xfJ9Po3uY+2cm1pkh+rC55XwKwrJvMI1sapodAMz6Zja3nFzUx0bKQNdV9F8Kq+dupdWv4/uB/bSKNqh6R4SWZNYOsdEOErkzzgPHglsD0YMdnQ0oKsKJjZ1Pi+NDV7WDRvZ4yKwx4e/ycfNjM31lQx5LHKbOU6dPAywveMzbxzHLYGVM8XO5wmGVwgJSNyEFBIZQK9TWIilKZi8fZdKU6OGaZrbgIFARzPP93YJtypS3uLqYpJLCykm4wYZWXGekvlYBsO08FgGX559jmw264RhGFYtx0689eYJntyno7skXIVeqx5WZDdLtpurG3muiCLSeoKPXj2Kriusrq6ytLSUHR0dPQ8Uj80aevedHn6bXebDz38lEYuTTu5mctPAFV3lkNvgzNsPkU6nyOfzRKNRq7+//5np6elQ6TymmOXh4eH30um0LZZk53I5J8TSbNE7W0wW1052xhOJhB0KhexUKmVPTU1Zvb29LwNKgVUKmRqqeuBdsjNBwMsbNTs7aw0NDb0+NjZWONzzVS/Iv4SX3QAFuDEwMPBsMBgcq4BWgyORyOLy8vJCcQMrT7xyEeHWiWQyuTk4OPiSgE4KqMUWqvyYyv/xY2rZQtTQ3w2LvOTP0xVUAAAAAElFTkSuQmCC"

/***/ }),
/* 1617 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1618 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANnSURBVHjatZVfaFtVHMc/yb1Nm9QMVge1QkptsdnDnH3woZ0vgrjom9gxECeIIoMqneuUjQ6EPXQPsgnzwQcRfJiOUvzTzbY6JjghIt3DYHV/almS1W1Zlq5p/t97k3tzPLnkH9EGUfaFL+cezv19zjm/e+7vOIQQPAypNMjhcAwAQ/w//Q6sIISoGRg1TVNoui503RCGUXGhIArNLhZtFxtsWZYYGRl5F3CqNEk3DDKZDE6ns7yDals3QONzpQ/gcrmoykmTqjDpOrzm+piqKHx5+itmZr5pfLcFGOrAakAZpKrItPDegQneGRvnwYN1fL5eVlfv/itwbcsyX7RJWDgUIvBCgLGxA6SSKXbtepYn+voJBoP0D/Rx5MhBFAkt29kAVmlWZaUfHDrMoN9PIPA8r+3bJ4MUYvE4r+x5GY/bXVtAk1qmwg54aufTLPx4kT9WQvT2+lj4YR5dy5NJZ9i791VOnfqEUqnExMT7RCK3KhO1WnEFjEPg9bZzMxRm+foynke6+HXxMmfPLeBq95DOanx47DjR6H1SqXQVuim4dgp6eroZffso/sF+7my7hX+rh75uL/t3PopesMhoJnnd4tPPPqejo92Oa/nx6nAnPY/7mL6U4O6GhmmV8LpddLQ5cKkOOjsUSqLE1aSn6US0PhW2wxkPO3xbbPBaukA0kUczSuQMi3sJnY1ckTWxFSGEne+KWq/Yki/evB0jXdzGm4EhOjtdRNdzfPHzbU7MhiiY9gRs73ZjmhbyN5et2QJc2ZIoCX45f460YZDWu3hm+5OcDq7y3aU7LIbX+elqnETWJLvyG7qukc/nyWazRiwWSwJC3ey4gSBz+QxXdjzHwOAAZszJFm8X97I5FEXhwvUCjzmWcSevyP4eotGomJub+zYSiZwXUiqbSI5h6imuTR9CfeMj2nr9vLV7iHTOQFUc/HltkaW5jwleXCAcDjM7O/v95OTkQRm3BmAX+obcjsry93U5VzduLDM9PcPGRgKzaKFZCkXakEwUIeGiwIsv7WZ4eJj5+fkL4+Pjr0vWfapqrscSLDRNK9dhu+6W+3Iiu9bKL2/3ZS5FPB4XS0tLpRMnT54Fum1G3X8HS0AjrAq0LVVu7QmTyaQxNTV1pgptsp2K/3o1FYBFGR/nH/TQLtO/AHgtItLG1AZfAAAAAElFTkSuQmCC"

/***/ }),
/* 1619 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAY9QTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRD5LpEJLpF5bqGJbpGZfqH5nqIJnpJ53qKJ3qKZ7rMKHrMZ/oNaLrN6HnSavtVbDtVrHvWrLtX7bwY7Ppabjtbrvvbr3xc7ztc77vebrme8LxhsbwiMjyjcv0o87qr83iw+L4xMTEycnJyd/tyuT1yub5zNrjzNrkzeb30NDR09PT1NTU1dXV1dbW1tfX19fX19jY2tvc29zd3Nzc3d3d3d7e3erx3t7e3t/f3+Dg4ODg4OHh4O734eLi4uLi4uPj4urv4+Tk5OTk5OXl5Obn5eXl5ebm5ubm5ufn5+jo5/H36Ojo6Onp6enp6urq6+vr6+zs7e3t7e7u7u7u7u/v7u/w7+/v7/Dw8PDw8PDx8PHx8fHx8fHy8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j49/j5+Pj4+Pn5+fn5+vr6+/v7/Pz8/f39/v7+M600NQAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABO0lEQVR42m3Ry0rDQBQG4P+cTNM2JK0a7A0LlYJLRVfudKdP4Hv4Ei68vINv4FopvoMrXWgRRLuwbZDQ3KaZkZKkgvRffufM4YfB6hBA5j9LNARQOp8xMS0CMFC+SBZM01dhcjVVZcMmBmqEBUMQ0rTug4SZPch5rnRMQWdapo9t0zJy5pbNQlW4Ka0GE7hgZjEcRkHJck/BoILtr/F7Um8nnj84wZJJlCZJ+8iTb14w6vyxsRGi32hiN1tF1sYQiGhPhqkmrRUtt9mtzgY7ChxaaNSw5G9n5vcJd5+tM6Bgps7B49etnYy5opQ2dMbgoX34HIzMtfXag6KntDhibXX3QYT7Y+iruGDa9OcRSycKoG+kzAsCFQ9suf5E6+skRM7Z5MfpdekyDoom2mDqEVzAeYnnq/5SKmT5BemobEopr5tCAAAAAElFTkSuQmCC"

/***/ }),
/* 1620 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXFQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREx8fHpqenz8/O0NDP0dHQ0tLRAGoAAHsAAIEAD2cKE2cRFIMQHZESJ44gKKwAKZUcK5UhMjIyNzc3N5opOKoXOcsAOjo6OqUoRaJBR6hCSM4cSag6S6w3TaJHVsYwXbJIYmJicN5Ed+RCgOZMhrJ+iMV6isR+mLyUmOR0oOeJra2tseuctra2xcbGx8fHx8jIx/SryMjIycnJysrKysvLy8vLzMzMzM3Nzc3Nzc7Ozs7Ozs/Pz8/P0NDQ0dHR0tLS09PT1NTU1dXV2tra4uLi5ebn5ubm5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7f7i7u/v7u/w8PDw8PDx8PHx8fHx8fHy8fLy8vLy8vPz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j49//x+Pj4+Pn5+P72+fn5+vr6+/v7/Pz8/P38/f39/v7+////h0tCnwAAABF0Uk5TABweIjE1ODk7PUfm6/f3+vrjMWmZAAABNUlEQVQYGQXBvU6TURgA4Oc955QSTPwJg4kDBgew0H6MXoSTu24Oejsm/izeglegQV3QkZD6EwKRyYREE6CWtl/L8XkAAABBLAEAZlWh83ScIiIigsTyi5lCnI1SirUuGJ0RFKQcKbrvTuNW/ft8LKGgpEi5zp7hrRwZBUfTiHynYy89yI5lFGyMUuqUrJcVjbRLwdEkd6/dnjtZ6i0MJRRs/Ouu7p6c2/z8qzWQP1Bw2N78fjqd+zS9qIYCBb1JWb+4XKmbByurtRHvKYgQD+NqvnY3agUKfh7eK8N+HDRhf2d/BxK22q2+wUDTNLbd364UkAP4Hd9u/Pi4oCAgCH8e67+aLUhIMhLzsfqmbZHg0VfrvjzZm5zX17NLKAAwTS/bCSjUvJxSTrg+nMyBIJYAtFeA/9XMZGOUyzmiAAAAAElFTkSuQmCC"

/***/ }),
/* 1621 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOUSURBVHjatZNLiBxVFIb/2/W41dXVPd0ZM6OiZBIIMwR8RBdCRnBhXCsIrkTFreAm2bgWXWSRleLGoK7cZCMqWQgK0UUQoqDimGEijmPm0TNJT1dXV3dV3UfOvZUKphuzkTnU6f/W7dvfOf3XKaa1xkFEDQcULibikw/ffmjWa7zi+j4vhPAKpbkU0nddObvfH6wnQ7UTcLfwmVO4vieYFGJnd+v7M+cudu8Lfu7kyd81c9tFUSDPKUmLPAdjPczNOnQ/g4Bz8IBbDUjzUX8dwMJ/WvHFhXc+TTPVllJCUBqt1kqkgM4hBBUSgrTMohDw6+0jH7372rkpsIV+dvbE0uLi6wH3SqAgoFVx534IplPkubBwQcCqgFIKz55aPnPhvTcWp6w4FM1ddmo1ezi3NuTIyIosyzBIUhyOYjAAq9czzLRCNMIAURgiisy6jkYjrHm8/hWA4xMe6wxyRBsazFXwGAP3HAgeQCuBzvwJgPaOxQmBOGpQgJZQeYJ4vI/+nkRNywenOqZOh0YZY3AdB6D0AZg5F1JRsfK7ZiQR1n0oY4EsICWpqs4RY9Jj8inBRFRQIagbJ4DjBihorYmktUk9oUjuAy6BUioDsVCpNG71RsjhQcm7YKP3FlE6mbJiXIjh2l9biJPUkKF0WcB1HSw8MofN7R6uXfsHWgikqU8QScViSFJNxeqBC6WcaStqmg3DgGOm2cCVn1dx6burZm39fv+Di7jy0wqaoU8eBxiNMgJ5aNN09PYTfP71j4gHYzCmpq0AWGKe9mynCQozr7SOcJO6+mNtAy8sP4a5Q02Mxxm2d3toEHhl7QYuXf4Vb758CotH58E8b9oKHrgJeWr//jgrMBim9uU4vjCPx5eO4PzHX+KZJ47ht9UN/L25hz/Xtwn6C156/klc39jFfjzCow8fHkx7PEyz0Hfs+sXTT6Ow4yTsvL716mn7ht3qD7BEnbUiTqAEy08dNQ/Mvnme55oHPr7HCsZYbX2z2zFzqUSBOnfRanA7o/JOASKg06yj0wrAoNAmrx9oR2RXmVHIyaJ+y7AqsNWtnZuhJKgkeFXApoFTktr9UhWU6VTbbilL3dkbBBWzsoLFccZsZ8yBBgmDDQVGa4eOO+VxJikVXdp2Dmi6pC0aZ2PL+jdY/3B15dsb3W5La+1oQ9Z66i20aquVH0qXO7qce9ndTb6pjrDqB+QNJ/Hx/yInXnYXfBBxG26UYBJx5SI4AAAAAElFTkSuQmCC"

/***/ }),
/* 1622 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXdQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDw0dHR0tLSl5eXpKSkrMnzr8nzs7OzuNT9uru7usfYvdDtvs7ivtHuwMDAwczcw8PDxcXFx8rPx9XnyMjIyMjJyNr2ycnJycvQysvLy8vLy9nqzc3NzdHWzdXgzs7Oztbgz8/Pz9fi0Njj0dHR0tLS0tPT09PT1NTU1dXV1t3n19jY2NjY2dra2tra29vb3d3d3eDm3t7e39/f3+Dg4ODg4eHh4uLi4+Pj5OTk5eXl5ebm5ubm5ufn5+jo5+vw6Ojo6Onp6enp6erq6urq6uvr6+vr6+zs7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8fHx8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////2Bmy/gAAABZ0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+/ipetZ4AAAE3SURBVHjabdC7SgNBGIbhb/7dWXI+kCJFLAQREUNEsNGLEAvvw1sRa70erVQQPGuhSNwk4Caa2c3OSZLspFC/ZuDhLX7GZ/hvPoDA+4UmmbJ3GBOBMQAMDKBjb8oYdjn5RHh6l7mtOsrAjOmxQ9/XsWJrtXjYIMqYdagvZFCqfsXGu1hadfVDuyu1tnJclByjRd2mHtunm82w9dlAF47vNzi/ZWE/8iMFwzLGCpWrTcoRIwLI1d7bujYaVlmlFGhRl72AVyGKopCUkLqaDHFeoqQWN0zdhI4xZkkuQhQM84NEKekuWWazhyDTkdEn1s75bjf7OiE+6s9qMmdsg/MKpZWBHx6cpYnGnK92DBSpRIrC+WUsAVdrKSgWE/v6IuTiwDzbg4eWbZ6mE4mM9RHcrFJwnOLPfgDGbIQVnRrDBQAAAABJRU5ErkJggg=="

/***/ }),
/* 1623 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMuSURBVDiNtZXPa5xFHMY/M3l3N1lTNnjRnmxtGyOpGK0/kpNRKEF6kqYotOI/IAGvOakhl4K15JqIpHUNQaw1JmA9CKVBycEfJURIyyZiKmY3C27dbN59Z+adrwez626Shop04OF9533n/czzfWZ4R4kID6IFjR2l1BGg538yF4FbiEhdwGnnnITVqlSrkUTRtowRs1PWirFWbIPiOJa+vr63AR3snK4aRZTLZbTWKKXq17r+Ke3f++0+QDKZrHP0TnANVpNSCt2o7WcLCwt8ks0SRVHT2HuDocmt1hqlNdZaJiYmeP+9EYyx3Fn7g5s/32J+/vs9wbuiaCy7uFFkenqaGze+4+LFD3jq+NMUN8rMzMzyROcRTp0aIJPJ1IF6PzAN5V6+9BlPdh8jmUyztPQLzzzbw/MvPocCUqkUzjmMMbS2tu7C7BlFLdebS4t8fe1bstkp8vkCWmle7h9gcjJLobBBf/8A4+MfN1V5b8e1OLTm4Y4DBEFAb+8L3L6d48KHY/T29bKy8ivnz1/gxIke1tZ+awLum7Henn3w9Gu0ZzIgGkHhBWIP3sfYWPBxzN2/ynXwfTnWSjF56TIdmQ4ePXiQ4saf5PMFDh96jK7uLqayU3QeO8ry8jLnzrx6Hxk35OVdzIH2doKWAGstJ0++QmfnUapVS7otzeHHD6EUiAje+/3B9ZK2d0eQSFK6WybcqnLl8y+5fn0e72MSiQQ//vAT3gvGGIwxOOf2iaKWFzD4+hnSbQ8hugURhQg4L3gvDJ57C+tiwq0KYRjivUdrHa2vr5cA2b14DXF8ND5BLrdKMpEkSCRo0S2AwnuPiy3GRHR3d/FS73GcczI7O3tldXX1mojsBje2s2ff4M7a74TVkEpli83NTQDSbWlSrSmCIGBk5F1WVlaYm5v7anh4+B0R2QDY9du01koYhhJFkRhjxForzjmJ41i89+Kck0qlIsViURYXFyWXy8nY2Ng3wCONrD0Xb79W+9B7j4jIF1evzgwNDb0pIvk9B9Ycx3Hc5LLm1HsvIiLeezHGSKlUikZHRz/d6bQm1Xjm/cejyQALIlLY66V6UIfp3+To977Eyrn+AAAAAElFTkSuQmCC"

/***/ }),
/* 1624 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1625 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOASURBVHjapZXNaxxlHMe/87YzO7ubbTZNYUv30qQWbOtBvIh6KPiGFJGepfTWU/DQUw5paFh68w/ooT0YetFLlJXQQy4VLTYiFgyJCiUx3WbBrOl2X+b1eR5/8yMDQzfjQb/w5ffMM/t8fi8zw2pKKSTSSEnA/5MiMdBMdz5r3p73am8uOrYBt2DCdSyUnAJc26K1DYf2dACK7IcCw8DHyI/ADiJ4YQyj8/AmgFvIgieqJ85/txMUnIKFoq2jXAQ5iQVMlB2UCJ5q6AcYDCUlkPi7H2LgCXhBiA9OnjiPQ+mZMSR9kMFRyMQSsRAIqZogiiDpmiJfV13gbN0ENQbHBJ/LskykUhrfJBg7imOEsQmTQLqu8Z7BUSGFd19EnFiBi+DIyoI1HZCKKzy0jiCMqIJkXyGkRLqm0zpJKgAVI46TTgR8MieQR4ANiLBEs7UMDQVLwSHbpoCt0zXBTU2AlpDcrkQoBY0mAiBgkCt01tBEOAY+rnW2W9cvJjOi1nVwJGs5JnHM6s6dR9tj4PSHo+EQqXIAR96fmpoCKw9cq9W44v2nv2Py5AxM08LQC9HuenjlVDULHFvngbl123Gw9kUTg5/vQU29hss3vkT7aQ8vhgG+/mEblqGjNwoRRgJnTh3Dfs9HfxThyvtn/73iJP/FDz+C+dZpxBMXeH+mXkYcO5itFxELoOIWkq7YURTBMAw+mwvG4c2fdiTe0J7gcbeO16cV+v0+ut0uqtUqg7qeghACpVIJo9GIwY1GA1npL1f87fcb+Py+jz8K76K14eDu6q8oFouo1+twXReTk5Ps6elp+MrGg50CNvYdfqfpfA6Y/OMTRQ9qAFFq4MHWAL88sxlcqVTY5XKZ7TgOKkULXz36C7+1R/B9H2EYSkU6csY3Pz2H9y5UUZsoYe7SDD5++zR2d/9MDiEIAliWlay56na7jVuXanAdYG9vz19eXv5mbm5ubMasg4MDvNpw+et659wxPH9+wJWmbUopeb69Xo9nfLxWocS7cn5+/vL6+vrj3LfCtm1+2qSxr4y6TGbJFXueh9nZWWxubqqlpaWra2tr9xVpDJwCqFUGZ4GpqVp2uk9Q2Ww2r7VarXvElGNvhSLlfbIZccWpI9LCwsInKysrd7PQsYq3traedTqdXY2UBWbHQrNlDwaDYHFx8crq6urDvKL+859pWmWe/gGd6NdQKW3NrQAAAABJRU5ErkJggg=="

/***/ }),
/* 1626 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1627 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAU1QTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDw0tLSCI0GEW8ALowaMnkyNb8JPMoAPckLPq8dP9QBQntCRY0+RqYySK9HSZhASZhCUZ1HUqZPW7FZXKpXaK9ea7FfbNJPcrNmc7Rme8tdjMuMjNJ1msmapeCJsduxud+5uvGYvOG8v++twOLAwdHBxdHFyOXIyObIzOXEz8/P0tLT09PT1tbW29vb3d3d3ene3vfO4/fa5+jo6erq6urq6uvr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8fjx8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////UdGImwAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+PvR6IwAAAQxJREFUeNpt0c9Kw0AQBvD5vtkNzaEgiArtTV9APEhfxzfzbTx4KWLpxZ6kCArWVpImzZ91kiZipd/uXH47uwwsIMfirCL9h3XWsN5tSWnvwZbwXhuW9TuoIGFlPrSThglV2+qnn87CjqFUp9678PqXSXOvBquFi6LDbosfLz0pPbfqbE2GTyTauS00VXoJjDPDjtWx6RdWcPV+9H239ZoiIJvAtJ+ErUqNKwl1/4gJuFimIcdZXtRxxxDoy3y82Q3KJNlVDyHsmeRXeKsw+v5I9LnMA6XL7cXJ+eVpkl6jyKr+bRW5WeWx32A23RZi3GcwQrWuZmVa/A4Ye0cCOnzMWxXg4NNCWUrPR/IDfzRQF5W5ungAAAAASUVORK5CYII="

/***/ }),
/* 1628 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAL0SURBVDiNtZVPbxtFGMZ/M7N/7FUoB9PWgYONEG4BgSIEEvkcfA0uXHPPjV7yITgiIXIJ34Crc6KVHZQYcNeq7NpLvDuzOy8HJ1vbuKUIGOnR7uyufvPMs/POKBHh/2jBekcp9R5w8C+Z58BjRKQW8GVZlrLMc8nzQoriRtaK3ZZzYp0Tt6aqquTw8PArQAfbw+VFwWKxQGuNUqq+1lpN7cX9TR8giqKao7fBSilGoxFa6xfwdd083yWl6qH4i2MFdLvd2u1kMkG8x3tPFEU45wjCEKM1IsL+/n7t+NVgpbi6vKTTfZeqEpJkjyAM8d4TBgFZlhHFMXEUEQQBlQetFYFZzeilYJSic+MYBYPhEK0gCiPutds8TVPevHOHqiypqoq40aDT6Wy4fWkUo9GIbqdDEBg++/QApTVaKUSEd/bv1xClFN57tNZ/HwVAu90GrbGl8OTJYxpxRFFYjNHky5wgDAjDkLv37tJqvYUWIQo218HOjGfTKW8nCc1Ic/Dxh+RFQRSGGGNQSmGMASDPc6S0xEnyeo6NMSgUeSkMBz/jrEUbg9aapJmQZQuMNsSNBgC93vuv53hvbw+tFUlg+OSjDzYK5PabdXcispE17CgQgDRNV9W1BtmG3v445xzWWqy1lGX5iiiUWhXIDeTq6oogCGg2mzVwPp8Tx3ENa7Vat46L8Xg8A2TnchsOhzx48JCl9cTJGwDkblUgIgIm4nl2ja88s+mUorB4X8np6el3FxcXZyIiO6Po9XooBUlsSH8fMRn/yvVihlSWZ5MxVJbiOuPylwGHX3xOHEecnZ39cHR09LWITOrg17dN55ycn59LnhcyWyxlOr+W2WIp8z9yyZZWnmdLSZ/NZPTbU+n3+zIYDOTk5ORH4P4Gaxd4uVxKURRirRXnnJRlKVVVifdenHOSZZmkaSr9ft9/8+jR99vQneCqqjZgt0DvvYiIeO/FWiuz2aw4Pj7+dhdURFDrZ94/PJos8JOIpLteboD/y/Yn72ADTEOZnPYAAAAASUVORK5CYII="

/***/ }),
/* 1629 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMYSURBVHjapVXLShxBFD1dM93T3YMzIkwCEggu3Aj+gX/gJuQDQnYBF1lnI4oI+YFkaTbiXoIgWbjOwlVAUAwBQ5hofI89/ap+pU7FEibjuEiOXk7Xrepzz71dolVVFQhLgYT/Q0XwoW4y80vzb74+/rqMGuA7DibbHUz4Yxh3VTSbaDd8eLaDOM9wk0S4jvq4TkJcRQG6vTNEMsX08fQygLcDwva4PXt4eejABZoNB6f5d7RjD+Oei4nUx0TT0/kwlbgMYxURenGKVFYI0gyn/SvMtGdmjZ64GwPBJkr1W1YoVORFAakiyTIESYqLfkTmWucbwsMjbxKTzSf6PaM14BilxU2GEi31i2l+K6rO5ipXF0JzLDOdT6REvypxEpwbYY0BYV2n0KFF63mOuhQQaoMdpGotLIFSCUlVMM5y1Co1HnsMT1st7AV79wu7NVc6woEZSQ02bMtT7OhngboKi5tqXaiQqjPgIrrGr5szOOrHF74cEp6rzx29e/0eHJEQgqzdWiOCMGywtrZ2tIGNQWFz0BztBwFqtRqIkvOt15FlGRqNBtI0hed5CMMQLTGJ8LxEZwYGo4XplEIMijqOw5vPQrob13XJWlwUgOPX1LuDX0/A4FaQLqIo0kJ5nmuWUmouioKsnRN0jspCEmY0NVpYb966JWzbZs6wGQ33udadEK7rPCxMUR6gU4okSWLWZDpmXndg1pYAShQgHnZcVXTIlzhL8+HInKvOm5lr8axCmd0VHyEM0JFxxsMswlmSuWYR7ZhgRwUk0jLmM/NlpXCvYzMGfiDTNq8Y2Vw5OqcQOQ4yyDjF8fFxsr6+/nHIsYFpm2J0TqYAmWZ830ez2dTCvV4Poh3iSnwrFxYWnu/u7n4ZOWM6oxDbN87YBZkF+cwIggBTU1PodrvVysrKy52dnU8cw9AfiBl8p9PRgq1Wy+RNUJgFyTr29/fL1dXVV1tbWxtKsxy6FbrSMIbuJo+ZyBQWFxefbW5ufhgQ/dvxwcHBz5OTkx/WH8CA7glzbxn9fj9dWlp6sb29/XmUqX/+Z2pcjsJvP0zzq9yXTQIAAAAASUVORK5CYII="

/***/ }),
/* 1630 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1631 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1632 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1633 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMMSURBVHjapVVNaBNBFP52s9nsbralFgUxKSit9OBBxCL04sGLoEVE8KJQ2pM3L4KkhxoJPXrRc/VgFQ+KFCkWhYAXqdBTPZiePLRV0hwaEpufTfbHNy/ZZujSUvSDx7zJ7Hzvm/feTJQgCCCgEMSA/0MgAIKGLjKZzN2p6emcItCJxFF4JiyMqqrgAVHS+fn5RwBeQSZOp9Mjtt13ptGoQwQNfB+6YcBtt6ESmaZpPILWDNOEFotxQBmpVGok9FUpDbyRXCbW4nH2FfpNPaLJXFovOQovxkiJQJyI26Q2kUjw3O36fnct1CqrDuslExOpMCYXH7DaGPnem+/QinXEJs7COD+EuK73ch8ljxJLqQgLxblsvfsB79sWtHMnoF8akQvK/v79UeLOBjYOQKZKSrh4nfVe8KjSg4l9zwOBu8In42KKueOh9uQL/JVNaGNp2JkrUOLq0YmTti2U9QJRMV0A7cd5OFuVTj4/FuD9qsB6diNMHxddhhySCSuVCsrlMirVKqpkrutCIEj1wdp8CPPlbZ43366hVvmD3d1d3uN53uGKqaW4G6il+OM2+dxi10aRGLDh0gg9hqDqwHRI6UCSUyYpjhDzMW1KhUcqHcdhcrVLbJ08BtM0oVgWamYcfstDAho0wzhajpuNBh8/mUyy7YQ3asCMdAEVmk8lPWQHEAOcCq3mwXn+FcGdC3s5brSaCGo13hwS1Wju7gR7Qlqtlh++bup+xbquQ/v8E61sHur7AvcvQWzkNFmWJSsTPl/97e3t5sLCwoeI4hD1eh3+1dMwnk6gfX0UvgHo40OonzKhdytvPLiM8g51jl/Fcc9AqVTyZ2Zmbq2urq4dmGM2O4HE1Bgf0Zy8GL4dfHR+Qu+Po7GxgeHhYRQKhSCXy03l8/lPASFCHB7Pl25cf38/j6HR76Jb+OgEQerPzc3dW1paek2cfuSCSJGYbHBwEKYZ6QJWHlqbMDs7e3NxcfGFTBpRvL6+/rtYLG4qBIlQfsC5tcjEbXOy2ezk8vLyiixKxj//mbLKQ/AX/nJjH+Pl3EgAAAAASUVORK5CYII="

/***/ }),
/* 1634 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOwSURBVHjapZVPaBxVHMc/b/7tbrKbjd0kRrOxVlJC0UNPXgriqWIFBW9BKenJUy+ekkNNyF30IhKNpygUClo8JBFJDlrqIQH/QCCSKta0m7jpbrLZ7c7OZuY93z4yZGFjBP3ClzfLvPm873u/38wKpRQAQgsQ/D+plgAcjjQxMfHW+LVrM6IlzEoIwPxqOV7VsjDDCdC5ubn3gM9pB+fz+ZF0OnMOFI7jcITH1iCzSGyAtrFdQ0NDI8DxwnFIS0Pq9TqVSoUgCKhWq1QODszYaDRicGwzv93tLOf4cIS5mU6n8X3fXHueB0DUbOLv7RMVy9QfPsAv7mJbMPzKZdx0N3HyuF7tYA1qWeA4HolEwqSztMPHdarr91Df36ZZ3iJz6QrF2TnkYY3fPnmfFz/8jN7nL5j5R+qogUkppaRUKtEMAnbvb1H66kv2P7pB9c631O9tEv6xweDYGIHl4RCxefMm5d1d/Hq9Be9IHJ+PKVwmk6FZrRGuLFG+NYstFZYEgojA7SW6u8TAmR5+LdVI7h3Ql8the97pYEubMOTx2k+UFudRVtxoiuzl1/nzzirVB9uEAlxbkJJmp6cehbl5qKH+oz0KC7c4qDSQltAGd2iYJ668RlitojyFcBWOiuh+5hziGHxiYpPWtW3c/SpurUCpKVDA8Esv0zMwyKP5T3GsCBuF1DDXl6QGB/4dHN+s/77J6Dvv0r1wG3v4BaorK1iNX7CUJBuG7NkWKgLhWHTln8I6HWzIRFHE/tpdKo0mI2Ov8nDhO/YL99l2QIaQjgABdlphJzy6h/NwDD2lK2ybZiOEH1fZywQUVzbxkIRSEOqEDQE516MiAkhYeE/2mzDx8ycXD7Ach/ToBQIBj5bWUEEDKSR2JEkrQT6TIatb7Wz/IE4yQShove7GzWZTKq0Tu8LW4GfHryLPP0etJ4tKp7BSPXhncjgD/dT7+/DzZ4kuXuLpt68TKEm5XGZ7e7sxPz//ddtRdKqrN8vFD2axlDKFSSSTZrvqqA5Kw/4qFvF1SgkUi0U5OTn55urq6s//2Mex3VQSS7v1kREJz9jtSqFsixCo+T7nR0cpFApqZmZmfHl5+Rul1ZG4o10cx3zlWnOTyaS5llJi27bZehhFrK+vq+np6esLCwtf6Hmy482LV2qTKYbrumSzWQPu6+sjl8uRSqXMqLvncGpq6g0N/bgd2pF4Y2OjsLOzsyW02tKbj3y8I33OxrVaLdDQq4uLiz+YUCfoP/+ZmpSn6G/+uqaTgjNP+wAAAABJRU5ErkJggg=="

/***/ }),
/* 1635 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAJhAAACYQHBMFX6AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhxQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXHh4eJiYmKioqNDQ0Ozs7S0tLaWlpampqtra2xsbGxcXF0dHRysrKycnJzMzMzMzMJWPML3PXMUutNk5uNm7FOoPhOoTiPS5cPWmYQW/NQobRRZPsRZTsRZTtRkJIR2yZSDN9TRtZUSRTVGa1WEJ2WTFpWzFCXCs3awhYbDdIb0xVdJLTepvZgaXggh1uiK7miYNjj7jtj8P4kG1SkMT5k3utlcHzl6C9mZm2m5u/nJynnZuyqZ65qa3HrJu0ssbns7/MtLW1tba2tb/dt7i4t8PPt8zruLm5ubq6ucTPucTQvNPxvri5wCicwN77wcHBwdn1wsrTxs3UyMjIyM7Uy8vLy9DVzNHWzNPbz9Xc0tLS0tPT0tPU09TU1NXV1Nzt1dXV1dbW1tbW1tfX1tja19fX19jY19na19vf2LCx2NjY2dnZ2en52tra2t3g29vb29zc3Nzc3OHq3d3d3d7e3t7e3t/f39/f4ODg4eHh4eHi4eLi4uLi4uPj4+Pj4+Tk5OTk5OXl5eXl5ubm5ufn5ufo5+fn6Ojo6Onp6enp6erq6err6urq6+vr6+zs7Ozs7O3t7e3t7e7u7u7u7u/v8PHx8fHx8fHy8vLy8/Pz9PT09fX19vb29/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+GmtBXgAAAB50Uk5TAAAFBg0WGBkaLS45PWRqbnB2eYiZmsnOz+jx+vv8baJHjwAAAWhJREFUeNpV0c1OwkAUBeA7d2baFEsFC/gDbowujIbncOV7uNYncO/S+Aq+gq/gTjcmmvgvAhVMoc5M22lHKdXEs/xycpObwwhaFP4nV4YBrXDzT0mqUwaIJ2NKKSLeX5oMGe+cIzAAuH5RmadIIkfaQuehD1BwfbqirVGnda5iV1h1UnJNTJqizRPEitwePq6X/BE6z479sWVHzbz/SrBkkjBueu0qx6E7BvbLSyyvxskGcjtNbQO8ZJURFrgm7TzPirByNWejSOaHN61uox82hzv+xZydHrzK6nI7eh/BwDxVyiMycvhm8NaCYMzdeLpd8pqnPe5TTvc1S4xFS1Zq8LJg0EvrQR5Cp2Hm3JuIuvfmf1Vus64ffR7HuuBlvq5rsBDW7ODuffdUJJrMmFnoSitcFAIe946EiknR1lHeGHKmphLxUIiYlM97lKwSQjIlz4T80Rnn+cHfaEbFP1qwljH8cZIWCt8JEaKPubrjrwAAAABJRU5ErkJggg=="

/***/ }),
/* 1636 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOpSURBVHjapVVLTBtXFD2D7fEHGzvYjsG2AkaOI7VR1VQNitp8pEjZZNFGUbOq1CSbZJ9kAQtKhVhWanfdoHZBuy5CKKgLIlWq1CYoH8gHQkL4idghZrDjwWAMM733qXeBRt6kR7p6M+/5nXvePe+ONdu2wdAIPOD/wWaA4JaZnp6er69cvTqgMaAygUf1xiFZm5qgBjhJh4aGvgXw6z7idDqdDQZDmWLxLQKBALa3t+HVdezu7ipiFuL3+9EaiUCSSkJBKpXKgiGJRWQTqYnwRkCRtoTDCLW0oIUiHo8r4r29PVSrVRWWZaFer0P2Ctc+xbatqUWXy6XC7fXyqJRZpNYmkiaNfsNrFJSA14RM7RW/9hHTPIXGqlQpNDmu2y1q1EaNnr3BoFpneJ0lcXrABLyBgxWW321gbvo2zM1NFPLz+HPsR1TNd1wCJuNReWAp9Wq/UzFDSFlZxTSxOHuHah6CubGAamkVXYePoJh/Rapz8FKpjLXnMIpFHDiYQ6KtHYSGxJydFJZQ3zLQkcmCZqD7XPD72lEtG9ADday/XaG5AB7+NYqF+Tl8fu4rMvpsY2JWuklu55emEPRruP37KBLJOJKJMPweqjXVWyMf3J4QXr1eht/ewCfHutGaOApd1xsTs9pNs4TFF1PwuoD5p4+oxmWEyMxIsw+RaBsqxjKyH38Guj+waiVEO5OIxeJseEPz/jNjB4vP5zD5z0NcvvUD2jLHsVGxMf3SwN37j2HpIeSXF1DJz0FvDqM19RGosejyuJ2KpQx1cnhl+Qke3HuES9duobMrhxvf/YStrS28yS/h+5sXkOv+Eu2pw4i1d+BgWxrNzUFlJKEhscZXp/ByCtkPMzh2/DR3nNrk8XgwffcZMl1pdJ+5SF2Y4HkxnJtFnh3EPGlzR+mBGE6cOq+aRcDHjCU6EEt2kkkqkRByqBIydnZ2LJsgNRZi1XXJ1CF05o6iVlkBQ9r8UNcHsDXSYe8yEZPwh0p9MwzDQKFQ2B4eHh51KGbw8T49+YUQqivEAvg5fCCK672/QBpofX0dlUoF0WgUa2trVm9v78XJycmphi3N5Hw8HqXFZZ5PxOrZi3K5jEwmg9XVVXtgYODKxMTEH1IGRykYtVoNPp9P3gViMKSujJmZGWtwcPDa2NjYb7RmOe6xZJLNZJYkcxBL1Al9fX0XRkZGfmbShtdtdnb2NRmwohFKpdK+8kgSUWuaZq2/v/+b8fHxv5UoOPHef6aishH+BU0eqZjKEgkOAAAAAElFTkSuQmCC"

/***/ }),
/* 1637 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1638 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMXSURBVHjapZW9T9tAGMYfx3YSJ5AARYEktE2I+iEhZYKdjbVCpWO7daNTV0pVMfBP0AWxQ4XKyELVgaksqOJDCNEopAJEyIcd2+e+d8pFrtNEVftKr86+2L/3uefecxTP88BDoeAD/i88rw3U5Mzq+zdvM8PsQ3oiq+SKz0tUSVQR9XjKqqEQxPAH4tra2jsAG7+BR4aTU/dipWhcNTGYSOQJSIyQgIkiMkHhG/2RyWQeyeuQzwboukozKgeKFCB+/ZfpZ2mQ4SmdSh21AaV8hF95QLXcLwH2/+44DMxjODk5ga5p8kEx+tOyLExPT/MCQXgALG80WpISEtB8Pg/GGFzX9Y8i7+7uYLVaiBkG/CHsCIJlMHCbVXzf24NNAIcArm3DNM2O4oezszCbTYTatui6TqK03optm9GLrvBv5LaKQSMqCh0cHGByfh5aJALXcQACVatVnmIl19fXKBaLvcGqqkBVVKEqTYriX/YAgv0cH0d6akra4R/Fs7FYDI1GoyeYPFLA2jbphUkoD+4D0ShwdITTrS2AFLZub1ElqyyyiRFYoevHCy8QzaR7gmW7CTV1ACbZoRDATCaRurnBAKnH0BAaV1dQCBqm+ebxMZxGnXvdG9w0bQw4Lnlto1YoAJQ8rLMzxCmTVIT7G7+4QGxuDri8hJfNohI1+rebEdXJDhWtVku0FLUP91Dca5kM3EoFCIfRchwY9Tq8sTGA9gKRMByaI9X9221mZkbAZPDdb3ALUmMQLz95KqziGDY0DI8sciyLv8M8ii6wZdmIe65QahhG5zirqgqWSgGUwaNLnSF63KrVzPX19U+Li4vdiiMRXbRbMEZHR8nOS2lN5/QlEglkyeNyuewtLS0t7O/vf+tjhdK1w7lcjh9xAbXbp/D8/BwF2tzDw0NvdXX11e7u7ue2DYHvNcH8E0G4tICWLpKCQ9nKysrr7e3tDfqNBdsWvJJsN0YewwcPgmXaFLT8Z5ubmx/90C4rfpTKp/GJhGVYYaVUKlX8XyxZRKqt1WrW8vLyy52dna9SVDD++c9UqOwTvwAQy69NArSHqgAAAABJRU5ErkJggg=="

/***/ }),
/* 1639 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALPSURBVHjapZVPTxpBGMaf3UJ3oSC2aDyIxhrT1nKSU9tP0RjDpUmjlx78BF6sCfFjmF5s76YxMT1w7gE1bT0INangIiCxiGU1wP7rvKOTjgg1tk/yZt6Znfm9L88OoHieB5LCRAP+Tx6JEp9YWVhYeDU7N5dSSBeVQCOfUYiqqgo+dIGurKy8BfD+CjgWi02EQuGHqqqwsyoB+SiKGIaBza0MZqZn+FysyxoeHp4QuSrZwEFyKAS4zAv5PIyCQXnPkFm+P+YolxsUDhRgCrKtdvITkUgfyMA74pN0dC3elwxmIIqrQPVy/Lazg8ePnvB8h+WJqSmeowtcBgtdh17MWacRQLHh9+uw2jbfJ3zuON8dLKC0Qe5YD2gwjCO4rotoNCr7iV6SwQImj9Q18/cE+UIB0QdR3NU0Wr89mEBqR+f3ggH0hfqgawH+AkkS/GawAFK0bQtH5TJM8wxG8QCNhomGaeL8/AzmLxODg4OIjYyyYjq6Se3sWIRj2djc3ILJYK1mm/vr2A4stl4/PcX29hfYLJfO9e4YEjgcDiOZTGJvbw9BZsXk5FOQisUiHMdBPB6n6S08BuQvBvMcDOQyeJDWODQYCjJLzqHrOt8j/ZD1sKLDjv39fXzP5ZBIJMQh1vkk8j/yyOWyzBYLrVYLzWaTR7vddj2mv3pMOj6uolY7gc/nk58zj+uo1+sEo87ZnhrK5XJzdXX1o9Rxd1Fh13PRf79fLkYvkX8TbceC8Ltarbrz8/PTmUzm6423gm6D2TjD82cv5GIcNBAdYDY4GB8fx+HhoZdKpWbT6fQnskEGd73ofr8fBwcF6q4TzJ/ZzN/d3V13eXn5zfr6+gf2zL12j0UlWYEAXbE4NE2TwTyGhoYwMjJqLS4uvlxbW3tH0J7XLZvNliqViqFcCKSxsTGUSiVKxVWjIJtaS0tLrzc2Nj7LTcn65z9T0WUv/QZkMVB7q/u32AAAAABJRU5ErkJggg=="

/***/ }),
/* 1640 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1641 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAmEAAAJhAcEwVfoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABzElEQVQYGQXBv2+MYQAA4Od9v/dw7rimbRq/QiWaroRdWDAa/BtiYhKTRMJCIrFKGEwWDAyGIiEuSDDUIEKipcpV71zv++57PU/KONw6droRAQAAKOun97t9Ejh47nYZgSiKgigIAoj108+ek0DIMqIoiqIoCIKAIBAgAVCIClEURUEQBAQACaBQKERreiqVKS0TkoAMSEAhKJS+qJR+Svo6Vs1qoQYkIAoqn4wt2aNpoOeQgQ/mTAqABES80hA1FAaakrZpW3zWEQEJiH57bWCHaNWUI7ZjZLOOZbsACYgWfTOhb5tt9qpRopL8VQMSEL03VIPtOoJlbZuUarUxIAHRLi+NlILdej6adsDAX+vaSkACgoPuGvrnqJbCjMIfTStWzCsBCYjm7PNbS6mSBWMNa35oaNsAJIDoorN6Hpi13wyyFQPzftkKSEAQ7HTFdV/1LDkhGtuw07KkVaogAQHMueGRRWt+ahvpmFV4l+9d9QYSEATASceNDPV91zBhIT+59vpydwMSAAFkWVYrrZv0LC/cXLjUHQIJAADIKiM/8otbTy50/wEkkNf6WzdHZLXKWNA0M3545/H57gCABN6eOgMAgMqr7joA/AeWpZ+SZ25x/QAAAABJRU5ErkJggg=="

/***/ }),
/* 1642 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1643 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMiSURBVHjatZU9TFNRFMf/973SQkttS2irJNaIpmEkYRIXN+Ogi3EzIUQXYJHNEMfGxc3V0cQEY3RG2QomOrAQEwOU8iW0FARKKbSvfdf/vdBW2sKg4SSn5/S8d3/n456mQkqJixAH/hIhxA2a3v9kzlLnToEVdO/FnQ8QEoYhIWihrIGaLypxHPsqVombAnfHxbPJ+PeFejCMFgu2LKPtyRvYm/Mwwzdx9PZpAwjah7Ywdbv8XsMZ9eCdQAQ5/xXIrTmUJl9CbhPuKsN0lrQ1nEptOFxgzGDMyWLaIFo8gNNdRTZUHLIWIMHDrNR17znk6jTMljKrEVQTUCqUGo2+rvioOXjH1w3TzqPj04A6pFW4WNGJD6MGYutNEuw2B/tvD6BkFXEoBPL5IiQo9AGqYagENALutlY4nc7aM6rBBIXXo/YZFffCtm1sbW3BF/LB4XCAu65i2pbLHBMT/FhZQX//LQiCq8J4SQrZFNze3o5CsYgyQT6fT4MIVbYC1Qk6OztB0eB6aQouFAoapGR+YgJGPo/i7i52Uims7+9zG1xQT6/ff6ASVcEdHR3o6uo6E1xtWdAPEurd2IDNZD8ZexSLwRaivgvtp9Pp88Eej0e/rMTPKvxuN8BLSs3OIpNIYH99/Rjq9VarFVRfJHL+KHbZdkUM7yXg8BAgCOEw7IUEIqEgrO1t/J6ZQX51FSYvN728DP+rVyiVSmeDg6EQ183Sre1di2DncljHt9fW0M2qXdNTcLW2wsPxtPX1QSaTuGqayPJSc7lcIZVKqcpkAzizualb5Jz1CAxqxXcHg3CerNXR0hLKHNuv7m6Inh7keLHvx8c/JpPJCUlpAIfZssWK/X4/+FJ1jkWuoMU57p/stWCSFGHRwUEkFhcx/fnL5NjY2CifZZqOIpPJ6F0NBAKIRqMaTNVraPEyLVZI0XArl0OSlcfj8a8jI8OPGUufPWNWoi6hXtzcjmw2C9M0KyupO4tPTU0ODw2dglYyV5XykKsmeUASLulrJUipjrNyeXBwIPmTL8RisXdqejVGTQU//vWvqUj9xvObaCIX9mf6B5oeveWK2jAzAAAAAElFTkSuQmCC"

/***/ }),
/* 1644 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM1SURBVHjanZXLT1NBFMa/lr5boAUlFIvKS4hRArYxqBCtujAEEokL/w1WunTlSrcmbk3cYGKIi7qAGDSU+qIhJCpPRR7l0toXtw9b+vLMJBfpLa3Ek0zvnduZ33zznTP3KgqFAljY7Xaj0+kcUavVSvxHZDKZ/NTU1LjX602AQoW/0TM6OvqMBhSBlUrlflMoFNJVagfHMfAagBk5mKunJgfK4XLwwXv+I4FLoqqqikPoemSwPFSHQakVwSXg3l4aOp2eP5PDaadlwdKEIviuGMW2sAUxJoLNTadT0OsN6Ozogu1E8z44n8+XB0vKVCoVv25srSESCaO1pQP1dceg0WiQy2XhE3zwzn1GMPgLF3odkh2VwZJywe9DTBThsPdBo2bAHIKhIP2nxEnbKZhrLXC9fsVVNzZaK1pR5KXPt4nuc70cuvpjBQuLX5HNZvgCOq0Od0bucujq92VYrU0liuU1y9WGwkGeJIulDhubP/Ft4Quabc0YGrwNrUYHk6maK6ypqYU/4OeLyT0+9DDEE3EYDSZ+v7i8CDV5ftFxiZRqEaMkVhOYweLxODOXdpJl/X8rTiQTUGs0fOuJRAz19cfBYmV1hQOoKtgRpt2sw1xjJuv2WL+sx9KRJbVGiOIuVYGWQbjfnvdurK+v8YoRdgRugRiL4fqZLirBNJtXWTHBecb9foFPsPc4YKCFItEwBgac6D7fgx3/DvUjuHHtJo1XIplMsrGliuXwltOtlO0lfPg4g/4rVzF4a5j5yLdrMprQZLWx7XNYKBRiz2lxQ2UrJDsu9w3g7bs3eDn+Ah3tnVQJJqaMbNjmibWY6xAOhxGNRrk9RqORmZwtC5bCbLZgeGiE1+/W1iaWlheY36S4mkBqxMjftrY2nuz5+fnC2NjYIwBzlRQX9bs6z9KRbudbT6VSVCUJCIIA+iDQ4mZMT08XJicnH8/Ozj6kl3y6JHnllNNBkBo/BOQnq18+xu12Fwj8hNoDgqZkHh89CM6SyNUHAoGCx+N5SmrvE/R3pfdxQRTFBGVXK9WkpFI6WaSSfNajoaEh53K5nk9MTNwjaBKHRNHHFEA/jhQ8+58IGkOZ+APuL5M2EnyPaQAAAABJRU5ErkJggg=="

/***/ }),
/* 1645 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALZSURBVHjapZXLSxtRFMa/POwkoPEBKpKA1rhwYQJx4SIL166kFFcWim66EP8AN1YIblxbcBO6sV25SCjSUIhLaSCgBiy6qCBW64uAEvOOM73n4IwHO2mhPXC4uTN3fueb7547cRiGAQqHChrwf2GoYKDbvLKwsPBqZnY25qAAV+IqPKM0qzqd4MEGGo/H3wL4AAkOBAJDmuZ5rmnP1LNOAvJoFTGT5mKU4ff7h8zfTmEDg2QySMz/lpLlfjTHgVKxCK/XY6m1VEpbpPInqs39kmC2Tjd0SKjzAXJ7e4t8Po9yuQyX242A34/Ozk7ABm7x5KS7u1tA2QbOz6kULi8v4WtvR/HuDmtra/h+dPRoA69nQfbgilJkKRYPhEZGMD4+juDgIKLRKNpVgW/7+3Ye24NLpRKBpA1cYHR0FBLQ0tKCarXK92XKcMuJx+s1lVrKdV1HJpvF8fExfD4fXWMBHR0doBDA5mBfW5u1sN5owKNp2N7eRiaTwfz8PIMpTk5OpFJWr2lacysKhQIv3NjYwLvVVdypjbq4uECbKkhQodCC5nI5rKysYGdn5w8eP2ze8PAwGo0GFeJXvrm5ISv42unpKSk04XTa0NXVhevr6+ZW9PT0cOOHw2Hs7u6ir6+P+pX7OJFIcJFQKIRIJMKgvb09ng8MDCAYDJJF9mBD1/n10+k0Jicn4XK50NraiunpaWkBn7D7+3vOVCpFBVlErVbTDRV2HjNoamoKvb29so2eQgmCSqWCsbEx9Pf34/z8vLK+vv7JzmNqLQmSQEprTb1epyNOfnOhq6srfW5u7mU2m81JsPTYOtI2YaolMPs+qE7i2dmZEYvFZra2tr6YNkgww4rFolTZDMxJcXBwoC8vL7/Z3Nz8qO7pv7WbWUmAJVyCrayrWFxcfJFMJt8TtOnJOzw8/DkxMfFDbYJDAOUH3FRLnVNdWlp6rTriK4uyiX/+MxUqbeMXy+ZZgdXzefAAAAAASUVORK5CYII="

/***/ }),
/* 1646 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1647 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGjI2NioqLkpKS7u7u8PDw0tLSBwcHCAgIJCQkJSUlJycnMzMzNDQ0Nzc3ODg4Ozs7QkJCRUVFRkZGSkpKS0tLTExMTU1NTk5OUFBQU1NTWFhYW1tbXV1dXl5eY2NjZGRkZWVlZWZmZmZmfHx8l5eXmJiYmpqampubm5ubnp6eoKGhoaGhq6ustra2wMDAw8TExsbGycnJy8vLz8/P0NHR0tLS09PT1dXV1tbW1tfX2NjY2NnZ2dnZ29vb3N3d3d3d3t7e3t/f4eLi4uLi4uPj4+Pj5OTk5eXl5ebm5ubm5+jo6enp6erq6urq6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/f49/j4+Pj4+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////SWj/zwAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbK6+Pn+eVQA8wAAARxJREFUGNNtkU1Kw1AUhc859yU2pbUIDZ0UnLgQwSW5D5fhCnQDgsOqA8EFKAoWLVWSpn3Jew5i6g89w4/Ddw9cErviAKT2D4bKAbDTKkokACJCOjMHAMt5pQEVqoHjkqMhIACQViuaLT7lXFE4tW6wfn+SqcJDaMJ02mH1bHKU66o+zuYzG6iTmN/LzUQm054XOokymlmkpP0ofmMopZmFCLEHdm1ZX+asjiCG4E97RDN4E5H/ait3ghgdMY5B2zYpMYaEjfch65aAAhCi6qLcNBcxfg80ib6Mi/TtOZnV6xZvHj/WTfna8HKcndzUVdNK0sNEIu/7B8uXu+vSdyfbTEZFuPUrvx2YkSAmUeebtQcA8s/TYl2jwzvyBUY4ZPKVNNZlAAAAAElFTkSuQmCC"

/***/ }),
/* 1648 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOVSURBVHjapZVNaBxlGMd/Mzub3W2yMTbNh+4mG9OsKAh6KhTNxVIIGKmIt1SxHsTiwYtCckijJWDBk4ecDL1EKQVpYonGgzUuWJsmUZvUZTesNF1r3ezGkm32I9PZ2Rnf2TBkNptG0D88PLy8zO/5P887845kmiYAkpCV+H8yLQEosK3BwcGBN0+dOitZ2q6ElSsrK+yqskwl7QEdHx8/A3xeBQ4Ggz0ej/cJj6cOWZYt4Ha2i9gB4MhOBQKBHmCnsG1SgJyxDXKs/y2cLGVnOBLFQgGfz7vjttppJeN0vsu1fV5VYMHBMI0qqGxDHIGzSC28FgzQ0tJSBf322hqz82vMRzdwu2U62xtwu8qc/6jXLuCUPY5asLq1RYPfj6bDWx8nufpbgQafD3+9H8XrIqMqFJOXufLJHIam8dTx43QdPcpeknGoWCxuO10o8c2Sn/vldu7mW4inH+WXPxo51Aja6grNhkG7203i3DkiAwOo6+vO0dQ69gp31luQvrcJch0g4ZIh/Dh0+lPcTyd5T/mT8mff4Qba8nnMXI51USh08eLDwY1+f6Wyquo8350lTxBp8wY3FhLELZCS5G9h2xd8Dn12lkOiwzCQS6f3d5wT1Q82NyPVNXH15yjtdRHWtE7wdYAko5XW0a5MMi3LhHp7OazrxKJRbm9s8Ol+4KI4vGZJ4tZqEhqeRBcA6sJ4m7Koz15nKzTNSryVrq9yeCIRbrtcUF9PKZHY/3VrbW1FAprcGVCe4UG9C8LfU1JWQFlCzcS51LFF10kXR36FI3NlDmSKPBYIoOu6PY5asGkYlc0zp1/gy5+uk1bmadQSdBy8i1G8B4UQekbH1eAleljj9407vPtIFy9NXkJVVTRNM+zbTd49YwEW3R3g1uSLnD3ZhiF9TdT8kVgoRiwcI9GW4KZ6k6X1VZ5+bYBjkR8oeL2kUil1YmLi8p6ODcOo+t7f73+HD14+TTKT5ML8BeZSc/S09nDi2Am6W7rZ3NykXC6TyWSMoaGhVxcWFpZ2XxzS2NjYh/l83hQtmaKlSpRKJVPMzhQPm6KolSv72WzWXF5eNguFgrm4uGj09/e/DsgWyw4ZsK87BBjn2pbThIBXAiAWixmjo6NvT09PfyH2jJpP2h64cADwULjTUUloeHj4lampqfNOaM2M4/H4X319fXfEIUgOoPMCt91anT0YGRl5Y2Zm5pptarf+88+02mWt/gFJxbjsP6RLyQAAAABJRU5ErkJggg=="

/***/ }),
/* 1649 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHFSURBVDiNtZUxjhMxFIZ/W1FyBA7ABWhzDmpaKpQuR0iVe2wJC4oUIU5Au9ttiqkiha1GihI8tt/7KYgHx+sZWKF90pNtjfX5f/8b2YYkXiIm+cIY8xrAm/9k3gN4AMk+AbyNMfKnc3SuY9dd0nv6MkOgD4EhSxHhfD7/AMBOyuNc1+F4PMJaC2NMP/b5u7Q/88saAKbTad2Kix2w1l4BbQ42ZhBsjBkBA1W1tgTnoH8CJ1CCGwOTzyvgNNoxMCrQXm2qIBMwFFUrnkBzeAYswaNW9HZUoNbaK8DzFBeNyuH9oRlwaD6ouGxaCf2balu1YcDPcp7WJKGq41b0Koru16AiAhGBqoIkJpPJCDgBKmXmB8QYEUJACKGHW2u7w+HQAuDg71azI4WIwHuP0+mE/X6P2WyGGCM3m83Hpmm+Mr/Z0u0WQuD5fKZzjt57hhAYY6SIUFWpqnTOsW1b3t3dU1W52+24Xq8/A3iVWE+aV5ZchqpCRBBjhDFA0zTYbrfflsvle5I/0r4qeCySokvD+On29stisXiXQ682JitE5Kr83AKSVFV679m2bbdarW7y8vM0+Zv3zKfJA/hO8rH20bzUY/oLPihZCFmffQUAAAAASUVORK5CYII="

/***/ }),
/* 1650 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKmSURBVDiNtZXLS1RRHMe/53jHmcYEo1AzZtXCpYkuFNokuC9sY1AIQasQwtpYZBAu2kZ/Q22yBJ1FtGtVEi5KXJhiVMPMNEajzuOe56/F3Hu9c+cBEh74cs6559zP+T3OgxERTqI44Q5j7CKAS//J/ApgC0QUCMCU1pqqrkuuK0gIT1KSjEopkkqRCskYQ+Pj43cBcCe6nCsEDg8PwTkHYyyoA9VcO2p7fQDo7OwMODwK9mG+GGPgYXGO6VfXsFfdq5vnz20NBuqs5ZyDRQCAxeOPD48J9tysszYCT8TiWNpewubfdXDO0eGJtwMjAmXeD36bcY6Bc/14fvkFHq09rctBuDQkj/lxDkGD2lOiI46Z4Rkc8AOsF9Yx0jsSeNsSHISjCbQWX4CoNme0bxT5Sr7B2uYW+9b6sBDcH69ot2a5k4AmHYDbJq8OHop14AljKCkBxhj2xT4mUhNNY9xyV4QV/g4gsHjs/JgXGoK1tn0oApe8k8UYQ958x7NvD7C18ROUPY0/eyWwaYYupwtKKVhrQURwnCNc0+0GHO2OX2YDN74MYyp1C+6pAj7/+IAe3gOtNaSUcF0X1WoVlUoFpVJJ5HK5IgBqud18bcs1ECvjSeY6qj0JpFIDWJhcgJQS5XIZmUwG8XgcWmtaXV19s7u7+46IGsHRciV5G4XefWwWNnDmbD/GJ69i8MIglFLI5fIYGhrCzs4O0un0yvz8/D0iKgAAC1/0jLEppdRrrXXdiTLGwHVdaK0Ri8XAOYcQAtlsFslkEul0+v3s7OxNIsq3TV60OI6D7u7uYBEhhJ8weru8vHJ/bu5OGAoADRe9MYaUUqS1JmMMGWPIWkvWWiIistaSlJKKxaJYXFx8CaAvzPAVDcVxniYJ4BMR/W42yE7qMf0H2lN8FudDIyEAAAAASUVORK5CYII="

/***/ }),
/* 1651 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAADdcAAA3XAHLx6S5AAAABmJLR0QA/wD/AP+gvaeTAAADuElEQVR42nWSPY8cRRCG3+ru2a8D79oWOiEfHzIIGemcEJiE7AJISQkI+BHoJCeICBGQ8ic4EiQSJGf3AwzScs4sDLKs4/butDu7OzPdXVR172g00lGrmtqeUT/19tvl0MWkKIpPScI3dXP05TfxzsED3mzW3ATmxsfoQ2Cfa6ybgMYHlozb2pvRwC3Ofvr6d+ADPP7hW7jpdGqvr68DgKPj4+OfDw8PQ13X9rXb+yBjYYyBswZEkvIfIDARLOUKUCwsmR9/mZ+fzR4/QODF97++IrdcLrGL8cnJCU5PT2O5uqYPH32Gh598juWqRFmDrGFEDrDCHhWEVcUwCgdIG2O8f/ejL2ZveQHfmjhyMcYWzPP5HH+ePTMcgznfe4TRx/dBuMJ8EdlQ59n+LYvrDaNqBG5AzBSGe/fs2++Fd0B4ygxyQBeTyQSD4QjLywWKwRAvF1u8Pw04mIL+XUXIkREZ2IjauxODy3WETR05ZWDU4CyyB7bWwtn8Si4SPho8v4h4940BLjcBICRvPUO+kVhi0ejrFNBoWlYH1i7OidIi+WjdAANHKFeEV0tRuGexWHP6ZkCoBTh0pCo7m4huBKMQsMJFOFwxSJMwLIz4Sbg3I1FH2HhVDXAmSXMgRAKRrlDfAFZYIdDdiLlCah4prVcCn00IvuQE1AgMOEtZay7/b4WkwrVJHieT51e9rALh9RGhrNCSoMVmeN9j0s3M2YqsWLNTLEmS+ts2wN4wz3ETWwTBppFDpM5jdnrsEIIuVG0fTEYVa21Pn3wuHEBBrcgvTTZYW/me4raLAnWtzaw2MbohKwak0s5X5OMbBiK3llDoWSGQ3hwzFJzmuecx5d2pegYGNkMNciVCoJ1ibsGazCxggxABI7WdDuzAEj14ZN2c7XCkMPJE6BS3nrKEKo0xpDXtmnXDlaHZzvRQU5NdLHApAdDswHppAowJ6INUo17nS42yZu6UUgdHJAUKVgJMXuCtFaxgheqG3eV5WGcVkZpwFDj6NlBXEzzfv4IpZDDD7WxQdblxjDpeCdZ4D6GDTCYTOrW9dW4UYrMJ0zfvY/HiGRwrNXdfrdcl1usN11UVq7qBjZwaEd8MRK6sYMm6GN/2y6sFzHgGV5YlttsthsPhP4vF5baq6pHfrni1WpLZlohV2Y1bAvVs0YjJEl/5J98djberC54dPPROoRJ7VVVdSHwVI98J9QZ/Pf1tMH75woW6NOBIzBHgdFGSJpKxgazzxrjGDSexWp4/F+jADibh6u8/wn9mWdarM6CqBAAAACJ6VFh0U29mdHdhcmUAAHjaKy8v18vMyy5OTixI1csvSgcANtgGWBBTylwAAAAASUVORK5CYII="

/***/ }),
/* 1652 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1653 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAL7SURBVHjapZU/TBNRHMe/93oILQVaSwuWaoSiYESjkeCmLm4OxpXEwGBMBxfjwFJJGhKdHNxMiDFBZ4lpIA4MLDoQEozRohIwIa1QaUlNLb1e753v3nkv1z+0iX6Tb96fXD+/b3/vtSfpug5DEpMx4P/EcCZQtnampqbGJyYnY5IhsxKvwleGraqEgA91oLOzsw8BvKwAh0KhQbe7o58QCYQQxjJHUcQymGyjXX19fYPWnNjawEF2c5BYN7edJUM0hydk5skEmGrA94UsMp8P4DD2ZAL/OSeCVzxobScVqa3zqgATAhO6tQ8y2M2h+e0SPj7bxckbAVyM9ELXJKglYG/tF1Yfp+A6JuNCJAgi13bcvsNTOo52wrFbBmHgTy/SGH0wAP+ZTpaccBOdIDDixdmJAXjCPizf34LRcWJ+y/pg3h5fKyS3DMLgLW0O4yPQyxJgms/pX3ce70Dwcg82Hq1ZUCG5GkyY0eVgI0VbQUeeFWj3tjIQoFMG1gw4mM3ne8e8cI2e4PPDWiFuAYd7ZJy/F8LG002UFR3QiJlWhQHnz8pOwHcaaB8JNAYT866KAi3BIxge78b+k2VoKhhUAmgl1NHC100TWxZFeq8HgLFh/HidAnTzGUebju4hiUOZmoMhwJUphu4EoREFuXc/jaQCWgVskhioC78UHcDul334nIqAUkqhaRrK5TI326sLroFa4hBFwhG/C79VDepqEqqqciuKgmKxyF0qlajO1LDH9nX5ANj7CpRLFJJPhjTiNyAcVigUkM1msbOzU5ybm3tjS9xQHJpa07AZT4F0ULi8MlSqIZPJIJlM8lak02kaiURuraysfBA/kEaJ88vfkFg4AO3yYGi8B75+p2hBLpdDOBxGIpHQY7HYxNLS0ludqRosYPa1++opjF2zionD4mYyoHRmZuZuPB5/xZi05lbYKlXDq987wipTNBq9OT8//9wOrUm8vr6eYgewLXEJoP0PXKTN5/PK9PT07cXFxfeHhfrnlylP2UB/AIkQUAMvC2spAAAAAElFTkSuQmCC"

/***/ }),
/* 1654 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMUSURBVHjatZVPSBRRHMfnvfm3q+v6L10sjGA1KBKy0DS0DlEHD50iugdeioiwP2a2eEgNJRHpkJegMivw0jEoULOiQ0ZQHlIMNVeNVVyd3Z2ZnXl901l47K5mQg8+/GZ+v5nv+73fvPcbwhgT/mXc7WglMNS5ta9fvZlWICG8HXEPyAZRsIQJ7E2Fa4/X7I/H41PvRz6sbmGCLJgSYIBpiIcTMZr8sG3bzZSQCt7X29srt7S0eDs7OzMJRsIPoRWYKVAEDmGiHZtl3GfoermqquVDg291fnVt99pKqRmXYzF7MhAIRLjMy2H2gjB4gwn1lIwppTbm2hfT9RdJIWasGOOEiIUuj1zb09OjcrExp947QVXaUqAMtihS24rHT1ceqWjmY8jSNiU2Tizmj0ZXjnElicGMg3xQhhXkp8uYoQz1kiTPGoZxo6q6MpePN11pmrZhGb5Dd3erjwvNglwn86K0pQCjEC+TZWnGsuxbKXuUkjDK5YuYZA/n/gWygAcUpxXGi2xocHhRUdSH2CU1qbtfCBHCcihKwnkXAQWuDYVFUWRr1yLtx33KCWKMuYhAZEaZxb8KFMdaKcIQQ/noujChuRA2Up6xhSImMJ0R+oNzFwIGLPBzgxoT5iy5VlHk+3ycYDCydiCWZMGY5EI+EHWYTi+MjE+eOpGB69nhoZHnfLyj407Z+rrpq4aGwAIXKgFhsApmpIT34qUL1bIkHSgoKPRpmubq73sWgXuAF+3q6nJbTDiItMeyvXmvuZOXA1MKlsBH7Otl6ey5M2Jx8e6XLlWtM0xDwOEQMjMzHiSvBL1Ccbvlo1jOd0MzRusb6k0ufNgRXQDvgCCB23NzwTrLsgRsL5SCxBhjn/iatre3e6UsyWvp5HPjtcZQUofzwxSAeTCIbK01YUVR/B6PRxCpKKBdmlpEO//k0dMQt7UYzLJDctvcBeMHE+AbRLVETMKxvex2Z4RQglAwGBzoe9z/dQt9WHJaZR74AuaT/yTb+TWJMCow/wBBLpok/D+G5HwgmeunbkCA5WRlcOiOz/4bvwHOvkm7suH9XAAAAABJRU5ErkJggg=="

/***/ }),
/* 1655 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAO4SURBVHjatVVdb5NlGL7avv0E+oFtt5V9OWCwOD8OmHjEYtDoCBw4xKhROCHgiUdLlEWOiNH4B9QTAycmmAzjotaAjkTdskGImrSl3bq1WYCu6/fHuvV92/X1ypM0dm7tgYY7uds+T/Nc9/Vc1/3er0ZVVTyOkBoXGo1mP4Dn8P/Cx1zYAgyCyrI8USqtg0XA2OEbDPGxbW00GjA8PPz+7Ozs4r+BkUymEA5HoNNpodXqmFpUqzKSqRQKhRz3JdisdrS3t8NkMjeAg3tt26RoYKDlYZ0Apv7wB/6CQS+J05VKBelUksUT+OPPe3A5XTh27EVRvH62BbBGgJZKJYTmA+js9CASiRIwhc2aimKxgEQiAZW/u7t7sBCex1tvvgO73cEC/0ik3QFYMAgGfXC6nkAmkxH7Tz/zLE6dPIXR10YxNPQ8yJ6SLTAXcf3614IMz7ZmHAwF4HK7sRqPo1ZTyehteDweLC8vY0OW0dd3AAcP9OPy5Y8E+83qJrw/eXHu7LmWjHndoriW0WDEyKsjMBiN+O33aegNBihlGb9OTwM09uVXRtDZ1YV0OgO/z9daCkDlNRWsrZWEeQMDA7gfDFFDO+bnw9R0CYqsIJPN4ujRF4Rs2VwWK/EVkFNzKfL5PNurIrTd69gr9vz+AKxWKzJkJisKrDYbSuvrLPoUjGYzkksR9FeryOXyzYHtDjsePHiIYqGIwcFB9m6BjW9ioSz2ENzDtOzahdIa5aJhGyzA20ArSXA4HM2BtexFC1kE/H7Mzc3hyJEh9D3Zg/sLYeyjnnwo2H5LqNDEmZkZri3o7bWhi/8xWpvndLoh6fXUM4wLFy/g7t17KFJTr/dH3Lp1EzqNhvL4uPbi0UpM3ORQ/2HhSTPGIkZOnICPLnd3dZORCdeufYXevv04fGhATIVfbk8hFAryBvtQUapo7/DgpePHafhaOR6P5wCoOwJLOj3OnHkDuXxOmLm4uIQ7lCWdTkOFyt5Nwd3m5sywoaOtDa+fHkW5vEECV7+PRqM3VYaG2SjD6XQ6O5FIJMEnSfTnVbJ9+CgmTJQkSQDv3r0HZvrQ29ODzz79hJpHcOPGtz9cuvTheeKtgrENmO5PrK4KYKaYbggE/IhEo4jFYuwEnTDKw+s72A0eTwcmJ7/7eWxs7N06aFNgMiagmHACmPtbUlEU8XTKSlm9PTU1OT4+/l4dtKl5FosZLpezPoy2DPr6UK/VapTCJH/+5RfffHzlygeNoI2M/+urSWHe4fkEdojH9jL9G217rjx+P66/AAAAAElFTkSuQmCC"

/***/ }),
/* 1656 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1657 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJWSURBVHjanZW9jxJBGMaf2Y87gdwdxogWdrQaL6G1oVJL/xMqLa2stDWxvcSGyopCKDCCJCrkoNHkojmbazjl+Fg+92Ocd5I32XPY1fiSZ2dnmPnNs/O+C0JKCYpSqZQrl8uPXNe18B/h+37UbDbf9Hq9OfWd2HeHlUrlSE24BLYsCywhBLes+DwCnwL48CdYuycxUEJgtARu7NtxuAGO3esLg42wbRvjlcDbLytceCFu39rF/Tv7qWCORDBBST+9CN4ywsoPcXruw3EcAiTB+UlNMENpIrUHWYFQSliqv+PQWPpxRFGUDOZF5O7mVYBMROpybc+lMQYbj8/9VDA7zzi2BoeRVI5tDaZIOlspZTpYSoHv5wE6JxcIokiBgY/fJggBPDws4PrBTnwDBhqOjZr9/GOF9189TBaEosWAVJ+TszmO3p3pcQaGYcj6+xkvfQGXkqVaS1BSCAs4tkDGtfBrusbeFQ02lAp+cPeASy5eXryYnMVdxqGJYAZtfW0ZGgQBicEMpzWJ4NQaJfm+z2BjA9d1TXAaPO6UtV6vsdlsdLtYLPSG2Ww2Ecwwoz7jFcDAyWSC0WiE8XisazyXy/kAgiRw/N6AklsCz2YzrWKxqJM8GAxktVp9DuB4Wx0nuuUzZjC7zOfz6Pf7sl6vv+h2u8/Uj/x6G5jDgLM4gZ7n6Tntdlu2Wq2XSk8VdJWSvPQgOLseDoey0+m8ajQaTxR0mVbHcjqdzlV2d7km2SWXFbnMZDIoFAphrVZ7rY7gsYIusCUu/ZkCuId/i0Dpk4LOkBC/ATxkt8B78rx0AAAAAElFTkSuQmCC"

/***/ }),
/* 1658 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAN6SURBVDiNpZXNa1xlFMZ/57z3fTOZNJ82tR/BGJsuBBE3FXXnQleuFKogSIsi5D/IJhZC/gEh0k1cVXeupBJcdKkuCmIX2oCCSpswbWObmDTN3Pt+dHE/nGliF/rCMHMvM7/znOc594yklAAQEQGE/3dSqoBZfWd+fv798xcuLEpVARGkLAjlnbKqKgB6CHRlZeUT4Is+8NTU1OyRI8MzqkIqkagqRoWqJ1SFFCEBmSm/l1L5WQROnTo1W/Oy2obl5WVUlY17nnu7if0i0i3g5IRl8+9Au2W4s+UZdMqAU3xI7BeJTCHLlNdfHG4sTSmlRnFKpcKjo5anRoQQISTBWeXoGMSQOHOyRUKICVL18iEx4BRVpc6rzwpVUBXub27gvUdEUBH2an9FyCu/G+/rYy06Md1neNZ7oar8VUxyfFw5NmKIKdFqtcjznCzL8N4z4ByqyoMHD7DW4r0nyzJUyo4bVi9YpAzq1t0uD/f3GXAOo0qR5+TdLilG9vb2EBGyLENEcM6VYO2fk+xx8Ikxw2hbMZIoigKTZU03xhhCCKSUEBFCCBhj6Ha7tNvtPvABxUN2nxQKiqIgz/PGT2NMFXJCVYkx/vOboaF+zw94XAFslqHGELwHwDmH9x7nHNZaVLUMVxVrbVPgiVYYY8p3VYxzjVLnHDHGxpIa6L1vCv0rmEpFHURdJM/zJjCAEAJAmUFPkScq/unHTe7fuUnuB0mtXcaDcvqVs0yfGGh8NcaQUsJVo5fneSPicDDw1aefke/8iv1+iLE3p3nhtVv8sTXCRx++1KiNMVIUBb7KoJ6SPM9jvd0OTMXtiTa/yRjOWobvPcvtwdMMHysfhBACIYQGWl9vb2/T6XT2L1++/HXNOrD94jPnmP0Ffn4u8XwcZPLou/zOFNbapt26/a2tLYwx7OzsxLm5ubevXbt2/VCwiJA9fZyt985yfLLDd+cm+fzPcexA1vjrvSfPc7a3t5mZmWF9fT0tLi6ev3r16repZwtpLxTAtRx3dyLhzMtcl1exQy0yZ4kxNturLnLjxo24tLT08ZUrV75MKcUDU5FSSpcuXQJg4a1R9t6Yq4bfATDRVtptaYKrfC4WFhbeWV1d/eZxaN9UrK2tbXQ6nZsjIjJqq7GJ5Y5gDzoPpQlrd3e3e/HixQ9WV1d/6G2/z9b/+md6mMre8wjLipcSe9ZjhQAAAABJRU5ErkJggg=="

/***/ }),
/* 1659 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALHSURBVHjatVXLbtNAFD0eO3ZjhbIofQQWCUK0BQSqEEjkO/gNNmy7745u+hEskRDdhD9g26xolRS1AdJEVd3ExI/YHu4ddVorBKsC9UQ349HYx2fOvXNtSClxE7CQg2EYDwBs4P/QotgHK9ZBeJ0kiQzCUIZhJKPoIuJYxtMxmaiY5CJNU9loNN4AEBamEEYRRqMRhBC8Az1eBQj564s5w7ZtaAhMgR/odrtMeEWeDyFmhr5X4w/FvFSv1y/VDgYDyCxDRsGKaMuwSiWYQij7qtWqVlxMzIvHR0eo1e+DLIPrVphIEZcsC77vw3YcOPQSi+ZpBhJgwDJJSAExMxOpUqzktzsdCBrtko2llRWc9Pu4PT+PNElAyYIzN4darabVFlvBHtfpZssy8eL5BgwhWI3a+r3qsibhkXfClhVbobFCyiAE4kTi4GAfc46NKIphmgJhEJI1Fkpkz+LSIhYW7kBICdtS5MUee2dnuOu6KNsCG08fqxK0OWGmyetqZIRhCJnEcFz3eooVAf1CUtxpf8UkjiFMU23ZLbuUwBFMYSp/GaurD6+nuFKpqEy75PGzJ4+QPyAMfa3B3muvNQRmoE+ZBz8M/JVUJ47rmo64CmoHxeWmDoiu6eNjVa/lcvmScDgcwnEcTUYJXNCKo16v5wGQM8utQ7W7traOIM4oMbfACCfqgKhtw7Rx7o+RpRknmiuGiFO5u7v74fDwsCkJM6zgZKyycLiOif7PLga97xiPPMg0xumgB9AYjX0cfWuj8eolqbfRbDY/bW5uviXOARjTbZPbX6vVUm3TGwXybDhW4/BXKP0glud+IPunnuz+OJF7e3uy3W7LnZ2dzwCWc1yziYMg4D6s+i7PyUfVa8lHNad+ISnBTJy9297+qEkLiZkgT6YJORg88gs9z4u2trbea9LpMOjvXz9NMcUXer6PGbixj+lv72ADTDal/SkAAAAASUVORK5CYII="

/***/ }),
/* 1660 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPdSURBVHjapVVLb1tVEP7uuS/Hjp9tSF0nTaomqRAIiX/AquqKR4UKEkJqNiChknU2ARryMygSEqgbFgEiRRWKyI4AhVQqoEQ8VAKhNEZ+27Hv6/CdY8u42HQBI43nnHvOfDPzzdxrQ0oJJQZFGfw/kUpAsdCT5eXll64sLq6G0hA6An9NQEYMyR0sEzIMuRACShzuA7UH9A1ej65ff+cNAO8/AFwoTM/DtM/algtTKH9BMIEo6lZk2yaCUPaRHEvAD/vVap98vjCPnoi/aYikSeMyNaentmnAVmvb0nuXVuvIvSCOlBprMOOIxTTqDWTdOFg+Pjy4h71aU2cyl0rAEXSkdphl0evAYtAJx8WLM1O6Cgly0e/RADDvISCjDKlPn546herdQ/zUJDifvTBbQBh1aTgmuV9WKjg4bqt2QQrR7YREXwQGZHJyUtGiNWaaeGVhFo+l0/iWmX90eF91FIJn446NpyZPIkkKhOg+E9pPDAPzuQzaLcTYpBgdXdoEW794bhpPZAlOmj49+hNOj9PMmItL0wW11j5jrgoCOQQsSVKl3lSdpkYIItBCZ3n5zGk8nk7hTr2Gm38U4fG8wwsWDH3Xo48XSERszkgq4omEbpAuq6t6bfLZ8zMFPJpK4m6zhRYRes1Xtq+DYg1ukuPjgL4EHUA79JyPPA+eBC6z/KRlDQA+HFhz3G7Wkc5NqCz1y2FZgpNg4OdGC7u1Kp6byiNBUAr7YPJeBIoeSdM0/p3javMYfgTyK5XVvN0uVbDL0Xrm9CnYPU6pmuOPOSndNZUOgxxb/xw3Bu2PzU6pjFvlKp7MpPAFA4RsEuNRJYp+gINGExcmct3ERI+OYWDmHAaw3Zieze1SCV+Vqno6PiuWERpSfytCUFVVtI9wLGXIFV3Bc9/vRENfN8lwtVodsUQKqqJ56vmTObjxBNrtNhLxGCo8Dxgpk0kDkc/yQ9Q5JV77GIHvtd+7ceOTpaWlBzkWEMxI8RTpDEzfR+m3A5h0+uW7O9re+2EfY6GHH29/jVvb22jd/x2OkCiXitHrV1+79M3Ozu5IjvP5fH/MwiDQlCQ423MLCzhxgq9wMoVMNgtVrMPpOD8/h/39ffn26uqVra2tm5IyYtykbLfqSKZzGvDs7BmO0AyrAOIMGAUdpFNJjpmDXDaD0Gsp0Ghtbe3VjY2ND4gZYUA0Fd1IwihXG3rU9Gsa0FK51iosF4Xpmd5ZiI7n+ysrK8+ur6+/Owg6lPHe3veHFy9e+LVUPBLdN0mFYkz1S7EtQ3a80AijEK1Go3PtrTdf3tzc/FwnNUL+85+pzvIh8hftZNqiwSbk7AAAAABJRU5ErkJggg=="

/***/ }),
/* 1661 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPuSURBVHjapZVLaFxVHMa/+5j7mGc7yTQkmUmZdpJUatHENhJa2m5K3akLBc2mhdJdV1KIi7hIBnThMt0FoaILwUUWgVAhVUSpkIUWxJiMebSh6Zh53Mlk3vfeczz3TG8cuYML/S6H/zl3Dr/z8Z3/ZQRKKRwJTE7B/xNl4kDZfTM9PT114+bNWcFR+yQ4la+c4Z4qiuClC3RhYeEjAF/8AxyPx1PBYCgpigJEUeRAXt1D3AGmjtqpwcHBlDuX3Rjm5+c5qAPMx5MHJez/XIOI9jtQxzlFKKnipak+CB3WXRZlkv8Opw2UfvkTGO/n88xiEVSUMH4nCVgAtQUQVgkRUPi9gh/vPsHw+z3ovxB2AwZXZ1SMw90K5wfg2za5O+O3Ok5fjTEoA7rDFvk6mgzj7K0U1u8X0SwTbqRTnaujCMiwBnmjCUkSOcw2BVAGpC+g1Gq/p2yMTCWR//QRxPaddAVzqHtp9Iwf/REZO98ZbZjJQUdA2O19vSkfkh9f9Tg+yjj3vDSQnruHSCiInt4oTqUSGHkngezcU1RPBqD3+EGJAwX2Cn8goMaQ2f8VW99ncFipgtgEPqk54AFH9UD5+vgYd2yzTfn9KpbXv4H/kh+Re/so3H4ZpXIeu7lNGNXnkK0wxs6MYmzyCosB7LcD/PD4p7InCp9PIZqiQXDmsoTB6HG88cplGNkCNt+t47VrJzFwVkex9gwJNYFr58cxEk9AV1WoiorosePcVJeuEGgkFIaq6i82UFRqVbx58Tp6T/SgfFhGvpCDJAkYHR6CTWwYBwav4GZ8zJzP7n55oggOVzQOp5Sg2qjBalho1GvQNR1DsTgUWYEjy7ZQOihxuKvuYMBpGw/8sFzG5tYWatU6mqaJSJ5wh5RStMwWikYRpmV2j8Js2lKzaR6127FwhMMdGUYZvaxT+vpjOKiUII/E2OERCOyxLAv1Rh25fI4d2iKUyeO4WmvAhTsKiRoqOwIKewVsb+8gs5GBwdzZts2BQX8QtsXmIoF0Qmve//rzrzzt5qpSrXOwpimwWMtpORsSoXj47UOWcx2jfcNoNBqos7kdFjA0kcKz7B754MO7b6+urj72gBnMrdw5h5+KIn5awOXsRayz/t3d2cXr5yaQNwqw2fPqlQmsra3R2dnZGysrKw8okydjWZFsv1/rdM6ctcBFgVAwCEWV+RdGiA1TJg6UpNPp20tLS18yJvF0hXuSX1ehs9GZuQv3KQqDh6DIPt4/ejRgzszMvLW4uPhZJ9QTxfr2xtNLFyazkCFYsiWwC+LZtOomlIBOdaMmTp6bJLIk0UbLas59kn5veXn5ETfVRf/5z5S7/Bf9BXdPzOrvwVB0AAAAAElFTkSuQmCC"

/***/ }),
/* 1662 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1663 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1664 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1665 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMdSURBVHjanZVdSFNhGMf/c2fO7ZhOKr81sxRCYgNTYxWysJuu6j7qopsuChSioJug6KouulDwwoIgCKMQKqNUGKWNyA3RQkPTqWXq/JpzZ1/nq/c94Is7bTb6w5937znvfuc5z/M+7zGoqgqq+vp63uVynTeZTFn4D4miqLjd7h6fzyeAiAOYHK2trU/IgiRwVlYWs8Fg2B6Zd6yjYD+AT3qwFj2xHqiH68E7f7MncUgho9FIIXTMGKwXlwpKrYdH5TAgG5CXY0sFZ2/KwDooXcjAMkS4559jYt2H9dgaJFVGrrkAdfsbcK72Eqwcz8CKoqQFs1flOA6rsQW8mGzHenwFkqJQKLGClWgAA7OvMbzkQVvjHVTlH06ZDv0O0CJVDQpezXT9BRVVmc3NnAUPfXchQ6b/ywzsXR7AkvAzCcqb85GbXcDm9uIm5JG09Ew+o9DMwDOh8SRoQ7kLF45exUX7NTgrWrTrE2vf0Fh6CiPLw5BlmeU4LZh6fnNmG0rmJlKsY2TkYCS2FzWCM5qxldiCe+49fgsLkCSJwv8dcTaXw3IalWLEAgzaUgMEUUBEikIm94PxIERFQiKRoC2dFsxatiyvmhUqoYh4N90D/+YU/MEpvJl+iWpbLQr5EsyFZlHJVyMej+8KZtVtKHUl5fhHcBKPxzrQNdaOiryDaD/zhMBrtIc79zUjEolQeFowgzuKj6OpjMBVBtcsE3uXPuPWx1Y8+tqJxoITqFIPIRAIYGNjI22DJLXpZUcbjFw23k73MCj1anQVS7/ccNqa0WI+C7/frzUUz/MiACkteFsWkxVXHNfhLD0Nz8IHfF8b18DlOQdQa65DkVSCyspKrdijo6Nqd3f3fQAju0ZMxA6Wur121Ow5olU+FotBEAQsLi6CM3Gw2WwYHBxU+/v7H3i93nvkkI+nyDGTHs5Mm4BWPxwOa2uGhoZUAu4gvk2gMV2OMxeFS5K2b2nBVI/H00mivUmg0d3OYzUUCglWq9VMdwbRdpSss2iUFosFhYWFcm9v79O+vr4bBBpBCiV9TAGcRGaSiL8Q6BbS6A9gZc6VCWjsoAAAAABJRU5ErkJggg=="

/***/ }),
/* 1666 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1667 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMZSURBVHjapZXPaxNBFMe/s7vJJtnEpK3VGKKhqaUE9dB6bEEQvHjx1IPgyVwKFuld9Niz/0LxpEI95eA/oELbgyAVIloSatoESn7tNj/2l/MGB2KbxIpfeJm3szOf9+bt2w3zfR+MsSCAeW4J/J+a3L5ypq0BQpOPHz14uryQfHglnUL86r0i/lEcxjY2Nt4XCoWXAI4kWEmnLiUvX3CMuO4hOzu7wJgC5dgCdktQ7t+iUwGFL2B35vhcGbiZApuOQUrXdWQymW1iQf5IBQIqoKggsa4NvNkFW7oOkv/xB5BOgMVCYLevwdn8ANaxKaCw01KGTSgKz9bQoeSXwD4fQGn34FdbUBcz4p73aR/6k7tQoiFxrXI7DdcwIMfx4PkeLNNEyw7i23EELDkH5aeP9GIa2K/yNX1o8xeBWh1uxYaqBeC6LhZvZEeDNY0iK2j40xwMGLEggqoCq9WE59og2b0uz5KBCb8D7sK1nfEZkzwfqFgGz9rCctZEzAiiXDrCzMyM2NxsNpFIJP7wG43GeLBte/DhItzlNVSA6mEb9YCGWq2GWCwmnrxlWaKupHa7LYCdTmc8WFUZNKYiovIMNIapySkEgrwc3AgqNw+Mg8DRYKqdJ/tEbpTjgJ0ngDas3SKRiFgYj8cpU3H0iYkJCZE+iXwJHQ3udG1EHRcnJydicavVEmUwTXOwrjKArDGtpwCjX5BwKMABKrljayjnfN+nHhbmed5f2g2gLGkzlUT4juPAMAyaE344HBYwTdOgqurvjrLhcw0F93o2DF9EJwhtJhAZbaQ5MXa7XRqpBHSPSkU9Xd3a2tqmap0pha4HoDIVEtbv9wkgwXRNJnq5Wq0KYCgUogDOysrKBp8rDAWTvPHfXDoNnURAc7kcKpWKu7a29qxYLL4FcEhrzt1usq0I2Ov1RN2j0Sj29vac9fX1Fzs7O68kdHS7+Z54fWkRHZleVwLW63XKloyypXtmPp9/zuGvB6BnwN5BpXaUTaYszQRQKhUxWvTRsVdXVzfL5fK7YVCS/DMNAMhxi+N8crh951YbBiX9Al8DlhJhTkxcAAAAAElFTkSuQmCC"

/***/ }),
/* 1668 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAN2SURBVDiNtZU9b9tWFIYfildURH3VVC0Jtgw4bop4adQhS/5Fg85dOxXZ8hM8+X8U8NKmXYKicxBkTeAArlPINqw4JhRRokXx+54ulSF/KEDR9gAvQIIXD9/z8vBeQ0T4P0ot3hiG8QXw9b9kvgH+QEQuBXybZZmEUSRRFEsc/60kkeS60lSSNJV0QXmey6NHj34ACur666I4ZjQaMRgMmM1mDIdDWq0WSim63S5pkpDnOaPRCMdxWF9fR4ugtebi4uKSU7gONgyDYrFIt9ulUqmwsbFBtVIhmE6pVioUCgWMQoGvHjygVqvheR5JkjA4PaXT6dyeMYA3GtE/OkIpxSwIKJgmY8+jVqtxcHBAlmWYSvFZo4FSiiAImIUh1VqNs/fvlzs2TRPbtplMJrTabRBhxXEQYH19HcuysG0bwzCYTqcUCgWKSpFn2RXHN8BFy8L3fYrFIv5kQtm2icIQZZrMwhCAkmVxfn6O53lkWcb+/j7T6ZThcLgcfOH7DAYD/MmEJE1Jk4QwDKlWq4w+fiSO40tFUcRkMsFxHFzXRWu9PGOlFFt375JrTcmyKJgmjUaDOI6xbZtSqQSAiFCv1+l0OriuS6PRoNlsLnccxzGmaTI4PcXzPPIsYxoETKdTjo6O8H2fUqlEGIbEcczZ2RkAzWYTwzCWO15bW6NcLtNsNllxHPIsu2y51+vh+z7lcplGo0EURSilsCyL4XBItVr9dBRhGPLy5Us+X12lXqtxfHxMr9fjxYsXlMtlVldXsSyLwWDAnTt3cF2XVqtFt9tdDhYRWq0W3zx+jM5zoiji4cOHGIZBp9OhXq9fjprjOIgI29vb2LaNUmo5eP/tW/589444jtna2iIIAgzDYDabEYYhzWYT0zQxTZNKpYJlWbiuy+bmJisrK/GHDx/GgNwAf3nvHtv375MkyeWPMP8o8+v5nHuex8nJCe12myAIZG9v76d+v/+bLO5s890tTVOZzWYSRZEkSSJpmkqWZZLnuWitRWstURTJeDyW16/fiNZaDg8PZXd39xegPWfdGLdFZ7eV1po8z8myDMOAfr/P8+fPf3/69On3InI+X3cr+FM1d6S1RkTk52fPfn3y5Ml3i9ArC+dR5Hl+pf3FCEREtNaSJImMx+N4Z2fnx8X2F2Usnnn/8GhKgFci4t728Ar4v6y/AGs3Q8YQBn2SAAAAAElFTkSuQmCC"

/***/ }),
/* 1669 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1670 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1671 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALjSURBVHjatZVfSFNRHMe/917ddGoPFc5MLVCI/qAIGQ3yISowInorepYefAt7iBB6kaAXX6PXIug1SAgLQopmUbO5u8ImGaghFRnVdLv3nHtOv/02t+lcU6If+3IOZ+d8ft/zvdzN0Frjf1QVcmUYRguA1n/kzZPRhSIwV8vKSioshKAm3Ik+JFCtHwtuCg4tCz6fLwSgBGykHQepVAqmaZBMBudVptFqERVAoa+JojINBpbow/Q0hocuY2ZmZqPv8yZKMs5bJqeWxZu4ydjYI3yMh3H4QAsunO6GHYthW0MDagMB1NbUoK6+HjmbFcB83azrkZvDuNh3EJ1N3RzPr99JvH02BvVtEk3BnYDpw+TsMq5eu569bQUwQ6emojh/ah9t1ojG3uPhk5d4GrbRd7wH2jARbNyB+roAmoMCtm2jq6uromMe792+gc727Xj1Ooqln8tIuwptjX4szM9h9McSovEE2nYH0b5nFx7ffYBbd0YrgElSCBw7cgi9Pftxpu8EVksICdcVSDuC9jjwpAvpOtgbDDB0PdhEceWigMaakp4HKT0IT8FTHpSi0aOR5gasVWiFjC0LWmkoEr1FBFJZKCnjWnkeSdIeBpMRdls5CnLMwLTj0sgN2J2QDCQJWpM5uILfX13ut6I0CtMwGQwNKIYzNCspSDznptXVVZuIgmRlHIMcugQGxcGRZMAFuEdwj/NWMGFACAGLIuQDGzrORsGOpJsGFUGzYE3gnHOGGpYPdQ3b0OxvRSKRQDKZXATwtVwUrMi7T1j88h0UAohb1EDxDXz+GgyN3M+v23Ys3d/ff47mswCKD/DpkOM4ml5fnRld19V0RS2lJLMeSynFa5FIJDPntVhsyg2FQr3MKZKJzVX+AVEjUFM+HI/bYnDwytlwOPy89OFtscglPwdymh4YuHRyYuLNC6yp0iiOkpv89ddHkBNHND4+vtDR0dHNZ8vIYOjW//M+07k5/KX+AF/r/xkkcoECAAAAAElFTkSuQmCC"

/***/ }),
/* 1672 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1673 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPhSURBVHjapVVtbFNVGH7a2+/erR8rytaWyTaHywSnQ5gsRhwxIIhOiZBoYpjG+Gv+A7cfc7HpXxOjf/wxRR3oEjUZsNjNpBBlUcJAlMRsgmyzrB9rS5d67+0nvddzTnLxxq6J0Sd5c+45J+d53/Oc932vTlEUUOgI6ID/B4UCBAZ1ZWho6OWjAwMBHQWYJ+aFzaipXvV6sGEd0rGxsbcBnISW2OfztfF83WZJEpFKpWCz2eDz+3HXiWog0IxaeL3eNvVbr5EBehKNw+HA/e3tjJQRkTX9vzQtl+FvcXRsc3U1AaPRCFmWYbVakc/nYeA4lMtlts/X1aFQKECuVGCxWGCz22EnRqG+l5aYHKKmo9ehBxmRnchhI+T022AwoELITCYTLGYzI2Fzo5E5VFFFrEpBb8JxHIuI6ABJLEESykglk2xvwz0uWKwcHG4bDGTOZCCjen5dYvWBRKGAny8vQlexoWGDi6wpcDncqMgK4hEBuVyZRHsHZruMx3dvWzdi/T+Jk4ksZsNLuJM3YWOTg+iog9msx7vvBQEFcDXwaPI50eR3I7YsInBsAiuRND1bW4pCroiTH/4A76YGXLl6Dqtno2ht6UBbawemvz0Lo4HHrp49WP7jOhaXfkNTYzO2dO7AyJsTeP+zV2tHPPPNRaws3yb6cpj4agy7dhzE+e+mEZo5jZ2P7sF9mzpxYvwDfPHlR+jd+Swu/3SR2Cyc7gacOhGqTXzzxiJkRYdrV38HFD0yt0XEV6NIpVN46MHdRBIXPG4/BCELSZIRjUZQkCyMJhqL1Sbee/AxlIp53IpdB6c34/vZaRx4chCbvdvhcXTgz7UyPK5WkmI2hM+dRu/2l3Cvu52kp4TnDz9Rm7jr4a3wd4oQhTV0PfAMurYcQL3Ni+bGbuSEMnhzIzjw6O0+gu7O5+Dmm0n5x1C3cQWPdG+jD1gj3Yi9E3wLn37yOaa+vkSuugSed5FKNNHcZgeNigMuO49I5AZi6WvoP9KD114/zoqqVCrJCkHNPH7xcD/27uvDhQuzmP/1JtYyOQjZImRZgZ03spR7qmcr+voGWOlnMhkUi8XC+Pj4mcHBQTXiKrBeUV9fj/37n8ahQ1baM9Rr0jKmkSGdTiMej8Pj8SCZTMrDw8MvzM3N/VKrQFRTS1TbWNT+wHpHNptFS0sLkSuqBAKBo+FweEYhqNJYIzy9FpxOp3ZdS8yMYn5+Xg4Gg29MTU2dIntyVVZoPQmCwHqyllRLrFqZYGRkpH9ycvJjLWlVxAsLC7FEInGL8kmSBBWaBn43WlEUi6Ojo6+EQqEftUFp8Z9/pmqUtfAXKBKuBl9pzBkAAAAASUVORK5CYII="

/***/ }),
/* 1674 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYZQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRx8fHycnJyg1ry8vMzc3N0dHR09PT1NDT1tfX19fX2NnZ2dra2iuD2tvb283U29vb29zc29zd3Nzc3N3d3dDX3t7e3+Dg4DaL4eLi4gBx4gRz4gd04h6A4uPj4wV04w144+Tk5CWF5C2J5OTk5OXl5SGD5S2J5dfe5ebm5ebn5imH5i6K5jyR5ubm5ufn5y+L5z2S5+jo6DyS6GGk6Ojo6Onp6WKl6enp6erq6mOm6urq6uvr62Sn697l6+vr6+zs7N7l7N/m7O3t7e3t7e7u7u7u7u/v7u/w74i77+/v7/Dw8I/A8PDw8PDx8PHx8ePq8eru8ezv8fHx8fHy8fLy8uTr8vLy8vPz87LS87PT8/Pz8/T09Obt9PT09PX19cDb9efu9fX19fb29t/r9vb29vb39vf39/f39/j4+Pj4+Pn5+fn5+vr6+/v7/Pz8/f39/v7+2Jr/LgAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABPElEQVR42m3RS0oDQRAG4L+6e6aTSWJeKkGCooILRQhCEDyAx9FzuPBxAk/i2oU3MERioqIrg3l3ph/OZDIuJFW1KL766U1jdVE0/j+bOwjAu/zmJBhxYkA0/tU8Zur1MpILzlh0iLhGiBn+l8rCFFSwvckiYkhYVoUnTMBdTkbMU+afxtNezu5zySJPWRzDzw/bG4ecYqQ0/TqVuy8eXLe0DuCPj1yQqT2phzlO9hJm8Xk07tsB1Nk5dYgI6dsdjVYF9mMifx55UyyZdpiU4cDff/ZmDbVIswWvaVVHqdDMIl/lSNNvxjEBa0ONqZHcJYxKuW3GgOt3J/eWj80yrd7rw9EpeVvhBdyNSrkmg2IGM+sM3F0YImG0+gdlaGG0drfhFCk3JMWFAV2HMyzZ8SwhbhSV0qv+MrTL5Rf2221KQMWMvAAAAABJRU5ErkJggg=="

/***/ }),
/* 1675 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAQBSURBVHjahVRNTGNVFL7v9ZXyIz8FCpSEIg4bJhGMMUziesAQF0QTtyQaYwKz0IwEFhBURBKMHRFZgCxkgxsTw8YFEGGFgSEZEwRGi5AIDAMd/lpaoLTv1e+7yX0plMhJTu599937nXO+79yrJZNJcZtNTEx8n5+f/7oGOzw8fNzS0vLJrYcA/L/e0dGhLSwsxKLRaJK+uLgY49pt5/TrgQYHBz8aHh7uUN+GYdwpKCgwHA6HoOfl5RmwavV/fHy8Z3R09MF1nCtUANDf2Nj4cUZGhr60tPRrUVGRz+12362urjZSD21tbZm7u7t/xmKxYF1dXUM8Hk9OTU1919ra+jANuL+//4Pm5uYfSkpKHKBSZqf+4ftGCtVoWZYIBoPm5OTkh11dXeNctzPJysoqwgYd0Vk+D0hAZGUHUWaapnC5XDafiUSCrmdnZ3tupGJkZGSmqanpPoFAhwiFQjxAkCuZXlxcCF3XBbhntvJ7enr6N1BxX+27wh0ASwnEzeFwWAJmZmbagMqcTqfcc3JyIv+fn59zzZMmXmdnp4byKiDcRmVlJYNxM4Hp5M9C/waxzCxLPB6PTmDSRmPG+B+fn59/5fLy8tnAwEBSQ3t9BdU/dcK8Xq9OGniIPHJ+fHxszc3NvdnT07NIkN7e3nsNDQ2/I4BOQAApjcTBwYGFiuPr6+vf6hDnbmFhoQttpWORgLbSHLe3t3cVKI3z5zBme3Z2xv3UQwpNDLgLF6nGSClJtRa7gsAKPMH1sbGxN6D6PVbBBPf393mOF4ZUMIByYhgGsnxydHT0NkpxYJOugJk95xUVFb6+vr7Xampqfvb5fC+T8+tOOlA5A0hHApotHsB89fX1/+CCGFBaRafaPGT5H32DvZaWSGCdfWthjFsiYSbwLffaPV5WVjYpO4AqYvgXffy0uLj4VWaQk5MjIpGIzBwmRX33nfdEYD0gXrwICgZwF7hFCG25vLwsamtrKZ4IBALk3pn6CBHoGRpfzZktS2NPSyGf/v2XWF1dBVVO+Y1uEeFQWGa5s7NDUNXzmg3s9/sfIupbiivVIVBZlJeXYy0mzqJRth85tcWlRU4jcg4NRG5urgxqpFzVY4hlgXgHxWPmLJ8j1gEWE6enpwRANVF2BOeyMhozZoWlpaVSSDvj9vb2H1dWVr5GD5q4dUmUPLW2tvYYGcpetJCFCcFw68Tm5gZ8U3i95WJvb0/Q8MSy9Rgg/RGiDQ0NvY+M3W1tbY80WHd3dyUepo3Pv/hMV2JSODnG5buS9pxWVVX9ooDTDJjZGNygwz0zM/ME5TnJYWr/0pQmagT/FPVLxfGN2EyAAs7Ozv6Et6EZHL8Ezk34BfhM0pC5cqEcb8Uf/wEZPek4+SnebQAAAABJRU5ErkJggg=="

/***/ }),
/* 1676 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1677 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1678 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMnSURBVHjapZVNSFRRGIbfc52885M548+Mpo0O2i9FLWpnRESgm6i2QShBgS3aulHB3LVq0SakRRa4KSQEKRJaFAWuEsShVEinxnF0mmmcO3/3ntM9Z2Zuh2ZGod7h43CGy/O+5zsf9xLGGLiIKb7g/8RYEWhDUUNDQzf6BwbGCFfBSbiIHa+Sq6JALBWgExMTIwCeQQa3t7d3q6o9oKq1UBSFA8VqmRRL7KVVVltbWzeKUqQ2CJBcAmTt9y6LJSdmjEBLpeBw2EtprZSZhIHVqSjScQpGGOxOG3zn69FyxgXFpsgNhpAM5oaUURCDgUSSIH4PFBMafLEFbV1H4IoP+xtVUIMb6Yh8iOPr1BoCfR50XvZAUvkdNDc3Q6m1oYY4UJNi0BIUyZUcTt3yw9VgB9UVQCdQ7bVov+DF6dvdiC3qWHi8AaVwysrgTDpdOH6HE8ovCjUHE7KPw6yiebP0QsFQ4L/YivRyBvG336on1jSNOws4Dqmw6ww7a2kwEyDDmLmKMgrPnrwbQN0xd3Ww3eEQUyDgIrkDJy414MvTkAU08hCpQQm4XF7A022D2tlYHXygru7PvBanouVaE9zxCOJvlkGLScWPEAGt91szXh2cTCZLD/HU1tgdfnAW0QUdqVXNAjibC1CuPcFa4fLkKo4iwblHRxF+uQYazwuou6MsaXWw1+sFASrCbbUKjo/4EX33HW6PIf6nlMIwDOi6Lko2sUESo7QMKB/V6XFhO7MBGkohH8sBrQc4WBhw5XI5ykzt0uPy3mlRILFOwCgDPeKC0eREJpMRIxqLxRAOhzOTk5OvKrVCOHPDv5XeIlj7lMbi5AoCfW7k83ls/4whFAqJxJubm3RwcPD6/Pz854qt8Pl81sunpI2H7xGMHISnU0XPfT9qVCaSJhIJdHV1YWlpiY2NjfXPzc29ZqbKwBy2s7MDt9tt7bla7vWglRDrsrLZrEhpikPp+Pj4nZmZmecmk5ZNRckplUpBlpy8+JxVeVPDw8NXp6enn8jQssTBYPBHb2/vunkJRALKL3CelBc/WXZ0dPTm7OzsRxGqgv75YypS7qLfJsV4XrFsmyoAAAAASUVORK5CYII="

/***/ }),
/* 1679 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANnSURBVHjatZVfaFtVHMc/yb1Nm9QMVge1QkptsdnDnH3woZ0vgrjom9gxECeIIoMqneuUjQ6EPXQPsgnzwQcRfJiOUvzTzbY6JjghIt3DYHV/almS1W1Zlq5p/t97k3tzPLnkH9EGUfaFL+cezv19zjm/e+7vOIQQPAypNMjhcAwAQ/w//Q6sIISoGRg1TVNoui503RCGUXGhIArNLhZtFxtsWZYYGRl5F3CqNEk3DDKZDE6ns7yDals3QONzpQ/gcrmoykmTqjDpOrzm+piqKHx5+itmZr5pfLcFGOrAakAZpKrItPDegQneGRvnwYN1fL5eVlfv/itwbcsyX7RJWDgUIvBCgLGxA6SSKXbtepYn+voJBoP0D/Rx5MhBFAkt29kAVmlWZaUfHDrMoN9PIPA8r+3bJ4MUYvE4r+x5GY/bXVtAk1qmwg54aufTLPx4kT9WQvT2+lj4YR5dy5NJZ9i791VOnfqEUqnExMT7RCK3KhO1WnEFjEPg9bZzMxRm+foynke6+HXxMmfPLeBq95DOanx47DjR6H1SqXQVuim4dgp6eroZffso/sF+7my7hX+rh75uL/t3PopesMhoJnnd4tPPPqejo92Oa/nx6nAnPY/7mL6U4O6GhmmV8LpddLQ5cKkOOjsUSqLE1aSn6US0PhW2wxkPO3xbbPBaukA0kUczSuQMi3sJnY1ckTWxFSGEne+KWq/Yki/evB0jXdzGm4EhOjtdRNdzfPHzbU7MhiiY9gRs73ZjmhbyN5et2QJc2ZIoCX45f460YZDWu3hm+5OcDq7y3aU7LIbX+elqnETWJLvyG7qukc/nyWazRiwWSwJC3ey4gSBz+QxXdjzHwOAAZszJFm8X97I5FEXhwvUCjzmWcSevyP4eotGomJub+zYSiZwXUiqbSI5h6imuTR9CfeMj2nr9vLV7iHTOQFUc/HltkaW5jwleXCAcDjM7O/v95OTkQRm3BmAX+obcjsry93U5VzduLDM9PcPGRgKzaKFZCkXakEwUIeGiwIsv7WZ4eJj5+fkL4+Pjr0vWfapqrscSLDRNK9dhu+6W+3Iiu9bKL2/3ZS5FPB4XS0tLpRMnT54Fum1G3X8HS0AjrAq0LVVu7QmTyaQxNTV1pgptsp2K/3o1FYBFGR/nH/TQLtO/AHgtItLG1AZfAAAAAElFTkSuQmCC"

/***/ }),
/* 1680 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMJSURBVHjapZVPTxNBGMafmdlt+VsQYyKxKGL04MWjVxP9ACZ69CIXvwEJFxVRvwQnEj4BpgcPXL2RaGICePGCRGhiabF/dtuZ12dnO0kTSoD4pm/e6bwzv3n67G5XiQiyUIys4P9CpA+M+lC9tLT04uXi4orW2tNbVsc9VRwXMTqOIMVISdeJFlGw3MGBk7Tdnh5TnT4Ra2trb8jaEPYi9GNubm5hcrI0r7VCBv/xM0UNJQgUlLMYjVnjgu/FkYFmp107nHpcLiFEuVxeACMoDuE3BTBFwSgWyu0lDiKAOAe2EWnNKmyycjwYQ8A6gMnMs8huoajQ6gKGIMWMlENBCwyzqcz5YPaD2hzMWjTAWCzoIFOqCLVgxysusEen/TwHp8CDxwVonqDaGBg3hArTq2XCIYbloRL2eDjTj4d6HKB+sdEYYdcoB+cyiIDHQoQ1s8Nk66KLeIwcGuDeY4FBgHLMOQdwTDBtQ772fHDwNsBHYgItseIZVMcqrBBvhboo2AND6ly1dUKy6t9qrOSEp5WLzgTrU4pD+guTbxKEBf4Tvgd/w56zFWMAbLwlmSimr9ordU44H865jMf9yvAAw1RKPIRuwImEe9fPWWshIueAmYMeM3wNConoWwQ4yTNJEh7ofL/b7bozFYds9hR+tQxUz6ErmlSNBjQMMppCg3PHiUWr1Uaz2USapp319fVPACSAh0anB9SOnbeiYxXhgnY332CZ7aM6bhXqtOIKqtWqW15efra9vf1NGEMUhwdAod1xOKGilFAt+R9PneDRSNBJNLqNYzx8Mo+dnR1ZWVlZ3Nra+kymCyw9CK2e9NBstbBfPcbuATCh2yhF1v/8G1OCZqOFO9MJDo9quFpI8PX7rqyurr6qVCobhNqhF48NRFph/w89UMDtGaCRlHB9yuL+rMXhX40HNw0KRvDonsZY78S9e/v6eaWyuRmgQ8F7e3sHyUl1fybWKpVo7O41G/+uazU7IRCnoGjJRORYU1EuSd5//PCU0C/+5w+JwZepvuTL1AnjrOY/mW5c0dNyxG8AAAAASUVORK5CYII="

/***/ }),
/* 1681 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAO4SURBVHjatVVdb5NlGL7avv0E+oFtt5V9OWCwOD8OmHjEYtDoCBw4xKhROCHgiUdLlEWOiNH4B9QTAycmmAzjotaAjkTdskGImrSl3bq1WYCu6/fHuvV92/X1ypM0dm7tgYY7uds+T/Nc9/Vc1/3er0ZVVTyOkBoXGo1mP4Dn8P/Cx1zYAgyCyrI8USqtg0XA2OEbDPGxbW00GjA8PPz+7Ozs4r+BkUymEA5HoNNpodXqmFpUqzKSqRQKhRz3JdisdrS3t8NkMjeAg3tt26RoYKDlYZ0Apv7wB/6CQS+J05VKBelUksUT+OPPe3A5XTh27EVRvH62BbBGgJZKJYTmA+js9CASiRIwhc2aimKxgEQiAZW/u7t7sBCex1tvvgO73cEC/0ik3QFYMAgGfXC6nkAmkxH7Tz/zLE6dPIXR10YxNPQ8yJ6SLTAXcf3614IMz7ZmHAwF4HK7sRqPo1ZTyehteDweLC8vY0OW0dd3AAcP9OPy5Y8E+83qJrw/eXHu7LmWjHndoriW0WDEyKsjMBiN+O33aegNBihlGb9OTwM09uVXRtDZ1YV0OgO/z9daCkDlNRWsrZWEeQMDA7gfDFFDO+bnw9R0CYqsIJPN4ujRF4Rs2VwWK/EVkFNzKfL5PNurIrTd69gr9vz+AKxWKzJkJisKrDYbSuvrLPoUjGYzkksR9FeryOXyzYHtDjsePHiIYqGIwcFB9m6BjW9ioSz2ENzDtOzahdIa5aJhGyzA20ArSXA4HM2BtexFC1kE/H7Mzc3hyJEh9D3Zg/sLYeyjnnwo2H5LqNDEmZkZri3o7bWhi/8xWpvndLoh6fXUM4wLFy/g7t17KFJTr/dH3Lp1EzqNhvL4uPbi0UpM3ORQ/2HhSTPGIkZOnICPLnd3dZORCdeufYXevv04fGhATIVfbk8hFAryBvtQUapo7/DgpePHafhaOR6P5wCoOwJLOj3OnHkDuXxOmLm4uIQ7lCWdTkOFyt5Nwd3m5sywoaOtDa+fHkW5vEECV7+PRqM3VYaG2SjD6XQ6O5FIJMEnSfTnVbJ9+CgmTJQkSQDv3r0HZvrQ29ODzz79hJpHcOPGtz9cuvTheeKtgrENmO5PrK4KYKaYbggE/IhEo4jFYuwEnTDKw+s72A0eTwcmJ7/7eWxs7N06aFNgMiagmHACmPtbUlEU8XTKSlm9PTU1OT4+/l4dtKl5FosZLpezPoy2DPr6UK/VapTCJH/+5RfffHzlygeNoI2M/+urSWHe4fkEdojH9jL9G217rjx+P66/AAAAAElFTkSuQmCC"

/***/ }),
/* 1682 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1683 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1684 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM9SURBVHjatZVNS1RhFMf/93nuvN1xrm/kyxglSgYRURTRwkUfoE1Mq4g27cLKoiDctPIDFCQuWgeBBGEb3ZiRootCcSf5UojOOCqjdtW5d2Zu5xxxGMaZFkUHj8/77/yf85zhGr7v43+YWTowDKMTwMV/ZM6Rz5eCwdDuey+HfKWhtQmlTBjkSnOrYRTntMyp8jkzgNXh571TE2Pfy8EwwzY4OQNPb2BxLYOOeD16B75QIC0AHLbiRajJrUJAK9Cf2DFwZzwGN6+wnHLw+uM8Hty8gJBlF0GikpRpQ5FqA6YBmjNoTH0eoAo4ma0FoDD7w0Fv4jLam6MIRmwBagYRRLEzSDEU0AxWPFbVwR1NYXgFja8/XcysrIkSKxKELgFxvzTI4RigLv3TlcGJ613Iex5gKD4gBw05rKSVMSBjWhYHtwzTCuMD2UJFcFdDHgVa2thYRyRioS0eR2Z7G/B9BAIBeBTUtm3s7u6irq4OBwcHyGazsCwLsVgNbcv5FcE1NTXIui7XNCnQpFJhz3G4KgRgmiYF3aDghSIwl8thb2+PwLEiR5VxZXMhn4fSWtSk19cRCAYZJIobGxs5OKvlOYHW1tayEPLqVSGb+Wd+sq1N6jlACre2thAkONeqPgwoQVpaWqTvOI6sk1UHR6NR5ElxJpOR3EYtS5REIhG57ubmJqvkPdyyiKL/CSxAMrm+TTlrbW3lW4jq9vZ2BrBydoazF29JgaqDTzQ1Ied5/OqSu52dHTkcDodF+f0phRUHZKzSINcANK41uHh45lc2mUxmeLEczI/FAM6Z5C8UCoGs+DBhPw07Qg9nmCjkPDQ4K7hUV0CX6WFw8MP7paWlEVJ/HNzc3Cy1mkqlsL+/z2O+KudXKsGcfYNWRcDT3fA2k3hx5zYWFxYwPPJ5tK+v7zEx0xVTkU6nOX+smGuWgaxcUsG2OvYO58/ZOJX/hqtXbmF5aRET4yOTT3p67hI0dcQp+YLIdROkdogeQR7ryCgAB5Kcz316hYK7C8uqhxM8i8npmdGeR89KoWLl5ZKgh/IJ7hPcp744pUKcTFrXdX2qnmx/f/9bzh6fLXNR/LefJpd8ms6vo4L9t4/pbxSgqrXiYbTLAAAAAElFTkSuQmCC"

/***/ }),
/* 1685 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAS9QTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDw0tLSE2O3FGO2Im28I225NXnCQYDFQ4LCVY3KV4/JW5LJX5TLZ5rOaZvUcaHUcp/Oc6LXd6PQd6TWgazbjbPdjrLYlrnbpcLiutHqx9jqzd3uzt7vz8/P0tLT09PT1tbW29vb3d3d3ebu4+rx5eru5erx5+jo6erq6urq6uvr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw7/T48PDw8PHx8fHx8fLy8fT38vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj69/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////Djfh3AAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+PvR6IwAAAQRJREFUGBkFwbtyjQEUBtC1v71PMjImhVtBFGqTKpXKY3hHD6I2FCoFgxk05HqO/1ysVQUAAAZHDQDYrwf95i5RhVLkbQ/8+VnpSlKJcspAqlPd6UopYaA6navfuZ2nz5QQ6HTmx8Pzs7tvq9XxcQhUZ+bfVb84WV+uEgxUZvpBT29Xj1EM6Ok+z8ryqICBnmSmvc9LRTEg3Wm5fnJfgUCSbqm5qHLYY0Cqkvp+VLVblt0JAyWNs+e21zeb3cfDYaCSpLw7vLr8dd1ftptDAKjtv83NzUUt650B3fB6/3ddHz7fLQwAHPa7r9vbBYHcW01S1aefNrcLVHHUAA7bLagCAAD/Ack/SgGLyDEBAAAAAElFTkSuQmCC"

/***/ }),
/* 1686 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMYSURBVHjapVXLShxBFD1dM93T3YMzIkwCEggu3Aj+gX/gJuQDQnYBF1lnI4oI+YFkaTbiXoIgWbjOwlVAUAwBQ5hofI89/ap+pU7FEibjuEiOXk7Xrepzz71dolVVFQhLgYT/Q0XwoW4y80vzb74+/rqMGuA7DibbHUz4Yxh3VTSbaDd8eLaDOM9wk0S4jvq4TkJcRQG6vTNEMsX08fQygLcDwva4PXt4eejABZoNB6f5d7RjD+Oei4nUx0TT0/kwlbgMYxURenGKVFYI0gyn/SvMtGdmjZ64GwPBJkr1W1YoVORFAakiyTIESYqLfkTmWucbwsMjbxKTzSf6PaM14BilxU2GEi31i2l+K6rO5ipXF0JzLDOdT6REvypxEpwbYY0BYV2n0KFF63mOuhQQaoMdpGotLIFSCUlVMM5y1Co1HnsMT1st7AV79wu7NVc6woEZSQ02bMtT7OhngboKi5tqXaiQqjPgIrrGr5szOOrHF74cEp6rzx29e/0eHJEQgqzdWiOCMGywtrZ2tIGNQWFz0BztBwFqtRqIkvOt15FlGRqNBtI0hed5CMMQLTGJ8LxEZwYGo4XplEIMijqOw5vPQrob13XJWlwUgOPX1LuDX0/A4FaQLqIo0kJ5nmuWUmouioKsnRN0jspCEmY0NVpYb966JWzbZs6wGQ33udadEK7rPCxMUR6gU4okSWLWZDpmXndg1pYAShQgHnZcVXTIlzhL8+HInKvOm5lr8axCmd0VHyEM0JFxxsMswlmSuWYR7ZhgRwUk0jLmM/NlpXCvYzMGfiDTNq8Y2Vw5OqcQOQ4yyDjF8fFxsr6+/nHIsYFpm2J0TqYAmWZ830ez2dTCvV4Poh3iSnwrFxYWnu/u7n4ZOWM6oxDbN87YBZkF+cwIggBTU1PodrvVysrKy52dnU8cw9AfiBl8p9PRgq1Wy+RNUJgFyTr29/fL1dXVV1tbWxtKsxy6FbrSMIbuJo+ZyBQWFxefbW5ufhgQ/dvxwcHBz5OTkx/WH8CA7glzbxn9fj9dWlp6sb29/XmUqX/+Z2pcjsJvP0zzq9yXTQIAAAAASUVORK5CYII="

/***/ }),
/* 1687 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAJhAAACYQHBMFX6AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAi5QTFRF////AAAAAAAANTU1TExMQ0NDSUlJeHh4e3t7TExMUFBQbm5ukpKSk5OVlJSUlZWVlpaWl5eXmJiY0dHR2NnZ39/f2dra2tra2tvb29vb3Nzc3N3d3d3d3d/f39/f3t7e29vb3d3d4ODg4uLi4+Pj2dnZzc3NysrKzMzMzMzMwGEFwmYOwmcPxW0Yx3QkyHQjyXksycnJynotynsuyn0yzH4yzIA2zIM7zYI6zc7Oz4dB0NHR0Y9P0dLS0o9O0pVZ0pZb0tLS0tPT05BP05FR05FS09TU1Zlf1dXV1p5p1qBs1tfX15xk19fX2J5m2J9o2KBq2aNv2dnZ2dra2tvb29vb3Kp63N3d3ax93d3d3rKI39/f3+Dg4LWL4LuW4ODg4eHh4eLi4sWo4uLi47mR472Z48mv4+Pj5L2Y5MKh5OTk5OXl5OXm5sOh5sWl5ubm5ufo58eo59C55+fn5+jo6Muu6Ojo6Onp6Onq6enp6erq6tG46tO86tnJ6urq6uvr69K56+vr6+zs7NfD7Ozs7O3t7drI7d/R7eDU7e3t7e7u7tW97ta/7t3M7u7u7u/v7+Xb7+3s7+/v7/Dw8O7r8PDw8PHx8eHS8fHx8fLy8uHR8uvk8vLy8vPz8+bZ8/Pz9OXW9One9PHu9PT09PX19e3m9fHt9fX19uvg9u7m9vb19vb29vf39/Tx9/b19/f3+O/n+PPt+Pj4+ff1+fn5+vr6+/v7/Pz8/f39/v7+GZGTBwAAACp0Uk5TAAECMDpJTVxcXWRmfoCAgICAgNze3t/f39/f39/f3+Lj4+Pj4/f6/f3+1/zRYgAAAZBJREFUGNNjYGBgZEIDjAwgwC4iJi4hKSUtLSMrKwcEohxgYb4c6xCnII8Qy5LoyVOnAYEASJSRr6C8vqm1q3/ytBkz58wFAgGQKYy8FW7eieFOIZWRicH5i5csWcIPFuav947Jrksvq6xrnVTZOGfNGqhwa0xMWVV9U39TXUvr+sWbNglChLsSfcujE/rKkpPnFDdu3boVKtw/0au2PW59VPPS2NR5myNWQoUnp5l4ztZbpxtY6mPX4JqxHSo8w6HIYJVRtbtFWK6dscuOHVDhKdrmOjUBNnlmVgvtUky7d0KFk+wXZfoXai3009/h3LNAfwNUuGPC+rVty2q2r+jdNmvjtukLhSDCi1fnZyVUZqUn1zXmVy6eM4cHHCb8yxu3bN22ffuOnTu2Lp5UF6/KDBVO7lvcuXj51vlzGn0di9VZGSHCqyunzpmzevnWOY1lhss1OZnAwc0osHpTfnHy1C0JlaFBthpcEFEGBoHVLRCjty1uUWODiTJwyysoKSkpK6soKQqzMMJEUaIYJgYAj3uNlR6le28AAAAASUVORK5CYII="

/***/ }),
/* 1688 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMHSURBVHjatZW/T1NRFMe/fff19RUKFcsPXWqwhIFEwoIu6t9A4mzC4Gosg0sHF8Pg5Ir+AU7GQRKTJsbAYNTEzc2YQCNioSKFFvrjvb7r+d72KT9aBo2nOb3n3PZ+zvec2x8RrTX+h9lHk0gkkgEw84/MT+Kfj4EJvflo/nlEaVgWoGRtx7KaHLJKzj2zohOjnQut8LiQfbv6/stJMJy4D6193Ji8itn0NMZTadx/9QDK6gBY7FhRKWZLHgFsVgIdsE6CM4OjuHQuhWvjV/Dk41N8rRTgxgPE+o54IoDbp+G6FuKOQp+yEVcOXCvafca0kvMNQIDLw2ncvX5HiqQF1mqPRhQpWLwLUWgxgiUxV5NbVm/weP9FeKjj4btc56AFNxqFLQAiVAcWghTB5gHZPwM8NzOHVtOHjuAPgFDLKBXvQJgDdPPEsuxoxbsXdAVnopMIVICNjQ309/djq5ZAOTiPYbcOv/odY0mFWq0mlxwHrdlswnEc0KampqDFuoITiQQa8uYfzRSqykHxQCFzoQVHlHotxdepnEW5miJxKdJqtRBaV3Cj0UAQBCj5Q4jVbdRrP+G0PLixqIA8JJNJAxwcHGwDbNsUOTw85H5vMKHsZjpZwMDAAPyUj4mJCdA2N30C+R5TAO1Zh3tnK2Z1tuV5Hur1uokrlcpvNfv7+zg4ODBKadVqlULMSIaGhnqDy+VyqDxUz5XgMD7mvDwWoRDf90Hr+s0bGR1lZbZIN0ClVJgTYnIxdhN2xwJU3ygWi1SmT3/ztrcNLBqNwnVdHuQMwy4YG1AsFjMKd3Z2uMdL10tLSy/W1tbyWuyU4rGxMSoOZ0znXDlnc/NhvLu7i/X1AmZnZ42IlZXV17lcbkGYpe6/FaUSW+aHnqrYIpWGrVMl3XRl20rg68jn828WFrK3BbrV8/JGRkZ4kLdsWtzb2zs1a8ZijPXL5eX8QjY7b6BHTTZCZ3pLVGkZgxa4ZkwXxcZpXKULLZ+exuLi4jNOj2dPeoRPf/nX1BT/IOe30cX+25/pL8uMrvPj7I/yAAAAAElFTkSuQmCC"

/***/ }),
/* 1689 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPESURBVHjanZVdbBRVGIafM7+77Oxuu9hCrYRKE5pWRMCoqYkx0TTGhCvjz43GGyPXpBeaaCSNV4gxVUlruJHEC2PRiqCCNoSkpqlgCBUQujVqLQbSrdgfym7pzJzjzNm4haZbEr/Zd863k3Oeeffds7NCKQWAiGpgYKAlDEOL/1GmaQYdHR15VQZyKyT12nD3L+cv5w3gv5thWZaWaZjxYgzDuFV6DsDmdU0SyALzy8HCDwLhhz5AGWaZFUVQfS2CxX0FGks7tiwBxGI5uOLStu2yLDuGVRQBKxJm2TGivMZJuACsCNYTHEcDo1HDM0mPhnQd7fdso86tJVQh46WrDP49gojBoOG2a1cFa1eO7cRQrWwyw4dPvk7z+ia6hnp5+dFnI3gNi4uL7B7cx3xQ5PJCAQDDvg2FwVLFDjXQdV09vti2k82NzbrfUNfIR+f6Khm/uf0VLNMiZSZJGQkczFUdVyJoyNbz/ANP62uz4Q2OXRlinZtjujhLxvUYuHKKequWOTWPQGAtAxvLwQk3QWvdJrykxztnPmZiYZJP8t9gKgPXcOgcfJeuH3poNht4q30XrdkmbGFiKLGqY721MukM+x7v1M7fGN7P6MwfuNjMFue0s3TGY8e9W/T38ULLU3SdPoBEre7Ycm2251oqP4BXW58hY6disIaGSE4VzpOfG9fzd2y8n8waD2ncAWw6Ftsa2wC47hfZO3KQnJ1BAAEhCdtlbaqGnguHGJub4Pj4EFM3Z5BCVY/CsMob/8y1S9y3tpnPxo6TUBZZK0Umk2JOFmlfv5UkDlPFaU5cHKIuWcMNuUAo5CrgCIopOPznSR6q38Jv03+x97HdeClPx/Ld70M8eFcrOa+GIAi0Dox+ge/7uq8ahQbrl0HvhT7qE1m9V6OFsbSrBfwK6NLMOJ9f/B65EBDc9Ks7RojyUwyD2dJ1zpby7P/5U2qTWR3RWAQ6O5UnDH1+vTbByOQooQy526unNb3RPwKyyrOCGKoPUxhIJRm+eo5ASAIjpCQXI2iIJ10cy6Z35x6avAYKhYI6+mX/c0BpxShEvMVEGSoUKEAiUULFZwIVIoOQf+ZneKRxK09seJjCZIEjXx1+qfvt7m+VUnJFsIZXxqVOoZBKoaQkapiXJdpyzfw0NsLRr/t3vd/1Xl8EDapmrACxdGggQmekYwFQUhFBWBM6qv/Yoc4P9nQfjN77ANXAapPTUMrVpl1TRYGoMlgZZdNSKAIZEPohrrLljydOdkXQngi6yAp1258pkAIM7lwKKOmPX6X+BVQodpzSJM2LAAAAAElFTkSuQmCC"

/***/ }),
/* 1690 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALVSURBVDiNtZVNSyNZFIafUybGEKYhcTGS6EL8A/0D/AHus3Vw1csRFKcXbkVdKpmda51VM36MCDNrQWbjQqGnox0j6CKJkgqoqUp9nVm0VVY+FIahLxyoqnvrOc99i6oSVeV7jET8RESmgPf/k3kOXCR6Lr73PO+T63kIgkjUEelZGE0+71hEMAyD6enpn09OTr72grE7HR4eHjAMI1osIi8VNhIBVUzT5Id370gmkwwPD0cco1/kGywsEcGIV2yuXq+zv79PKpWK1r4Ohi5bwzCQGCwqERYXF7Ftu0siHH1RhFuO20r8WARE+LVU4vb2lkQiwZDxzc94C8wAaAgMG/zz+TPHx8eMjY31mb4ZRR80tn0NAtbX11lZWSGXy/U93FfBURxxaCyera0t5ubmyOfzZLNZVLUPOtg4lmWXuWFweXlJEATMzMwAkMvlyGQyA437M36Ge65L0zRpmSamadJoNNjZ2WF8fJzl5WVGRkaoVCokk0lubm4YHR0lk8m8Dg47p1Ip8vk844UCIsL29jaTk5MMDQ1h2zbtdpt0Ok2hUGBiYoLeb86rxuFrLCKcnZ2RTqfZ3NyMGl9cXLC0tITv+ziOg6qSSLzg+h/ec04htNlscnR0RLFY7MrRsiwajQaWZWFZFu12m8fHx06tVmsB2h9FLA7HcVhYWGBtbQ3DeHHwfZ9qtUq9XqfZbFKr1fA8Tw8PD3+vVqt/qqpKPBsRKdq2/enu7o7T01M2NjYol8vMzs4yNTWFaZpks1murq44ODjAcVzK5S9cX1+zu7v3x8ePv3xQ1ToAqhoVUHRdVy3L0k6no47jqOu66nme+r6vQRCo53n69PSk9/f3en5+rpVKRUul0l/Aj3HWwBfkrRHeGAQBqqq7e3sH8/PzP0WmvQtDY9/3uyxD0yAIVFU1CAJ1HEdbrVZndXX1t17TsHoz/i+/Jgf4W1Ubgyble/1M/wXlUpCnlwn66wAAAABJRU5ErkJggg=="

/***/ }),
/* 1691 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAP4SURBVHjahVVNSFxXFD7vzZsZf4o66lin4oy0bgz402IMdNeQsUhpZ5NuXZRS0C6qBkaI4sJaGyETjXGhdePGhtKNmxZU1E0smoEU6aILE7CKExz81/l9b970Oxfuw9EkHjjc99695zvnfOfc85RsNkvXyezs7JPi4uJPFMjBwcHz9vb2rmuNAPxODQaDytraWioWi2VZ19fXU/ztOjuVLsnY2Nh3ExMTQfmuadpHJSUlms1mI9aioiINUiv3Z2ZmBqampr6/jJNDBQBDra2tPzgcDjUcDv9RVlbmdblcN2pra7WLRtvb25lIJPJPKpWKNjY2+nVdz87Pzz/u6OjouQI8PDz8TSAQ+KWiosIGKkV0cg/vb6RQrqZpUjQazczNzX3b19c3QxArkvz8/DIcUOGd02cDAYioLCdSMpkMOZ1Oi0/DMFjVgoIC9xupmJycXGxra7vDQKCDTk5O2IBBciJNJpOkqiqBe45WvC8sLCyBijvyXA53AHwfQOLw6empAMzLy7MApdjtdnHm+PhY7CcSCf7mvlK83t5eBelVo3CvfD4fO+PDDMzK/Jno3yhBEGWF2+1WGZhpg4iIsa+vrq5+mE6nd0dGRrIK2usnVP2eHeLxeFSmAUaCR34+OjoyV1ZWPh0YGFgnyODg4C2/3/8XHKgMCCBZI9rf3zeRsb65uTmqojg3SktLnWgrFR8ZUFZarDs7OxEJysLPryEcbTwe5/NcD1FoxoA6cZHqtIspydZCVzCwBDcIMj093Yyq30IWIsC9vT224wvDVLADqYyhaYjyxeHh4RdIxYZDqgTGd+GkurraOzQ01FRXV/e71+utYc4vK9OBzNmBUASgWMUDmLelpeUlLoiGSlveQT0bmaFHDxWHw67E4wkyEKlhYl83yciAPkOctXq8srJyTnQAVxHLf+jjf8vLy+s5gsLCQjo/PxeRQ0RRa3w15G/107Nnq7SxsUHJRJL0mE6pdIr0tC6pY+7tOUMIQLtofPnM0XJq3NPCYPd1hJ4+/Y3u3v2a6usbCBRSDOckxxeuuWJdkFAo1NPQ0PA5cyVnBZxwpVlhnCLPBx766ssAF5LC4eeywEC6Oke0Cy9HADRBvA18M6gEF47SSHdra4sePPhZdMPtz25Tc/NNWlpaIvQ5vXNsjo6ODjc1NQV5bAJkAQ5cVVVVH6PP7V09XXCiMJcAZjWs58uCm/lnzqzo7u6+Pz4+vsmAnZ2djxRIf3+/D4PpFVJST0/OuJjQDIlVF3PlCg2wT771nwfMAiwu0OFaXFx8Ae7t6OOc/oXI/pUr9zRT86NGbxeFA+BqLy8v/4rZEDg7O3sPnGegSXRMlgWRSyWpmBV//w8+jL96hDlGhQAAAABJRU5ErkJggg=="

/***/ }),
/* 1692 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANDSURBVHjatZXLbttGFIZ/DileJFGX2EnoGGptdNFttn6HIFnkHbLKJgtvvPcueY2sukjRFEbQJ+jWCZKgsGyhiOVI1o2mxMsMyenhtFTbSPaiRQ7wczgLfjznP8NDTUqJrxHGPzeapn0H4P7/ZL4l/QbKeCmKx2mayiiOJX/ryyRJ/hTnkn8pIZQEKf0YqDXLMrm3t/cUADPwRcRJgiAI4IQ5+BUHY6yo5G+Borwvy+YCaQyYpokyVsFxjPFohA7bRCoExpOJWotwXRez2QyO46gK2+02ms0mNMbKBK4Hf5pJxKyNE8o2cytI0YRu6yo7P9chbAu5bsDQdVzGjBRD91Nkgxy6LqBXqpW14G9v6bi48NFpUcaeCVaU/Fc26p4EEl2XGeqcI9+2CKwjE6FYC7apzLueB62XgZPf3dNTBWw0Gmi2WhiPx3Bsu7BM2dHpdFCHXr7keitO+z786RiNeQNpUEF1cxesyATAJAa0mgdBe1aRCtz3c1SuUsihvNnjXc/F3GWonzPknqVsKC2gBpXn/d9rQtl79s1gOouIwhAu6kjIisFgANOykFDpQogiS3U6OOfY2dmBZVml7zeDu4MQi4DDDxLkMxN5hZrIDHCDw7AN1bSQMUhbojdOAZAmHHCymz3+fruBxUKH29ep005pw1IUy/tlRBHyLUtZdS04imJMp1PU5AbCRUhH7wJhGKqSScoKskvZMRqN1Meym3vIYoIZxvXg80BDxlo48RPIBvlXvwe7JpHnORJNUw8HV1eQsg7WdLBIU3wYziEYg1lh4tIP5gDkCviblkYNm2KnfQfYrq61IMuqqnmLhcD5+WdsuA3M0oV8/er1Dyfv3/0sKVbAlu1g6942slMOHifo9Xqo1arqg6jXXQyHA9i2Q5aF6Pc/49HDB+h2u3jz6s1PBwcHz4h5uWKF6TSNj79PEPhjtONNyAmA2hbiwrs6UNTo3HYhOEci5tjwTJydneHo6OiX/f39JwQdlKyVeVzM1SiKpHjnq7lb7GlGq1lLPqv9fD6Xw+FQHh8f589fvPgRwN2SUWoFXADU0H4fFLASqERRrOqFND6Tw8PDl2ugShpd/uuviZN+peeHWBNf7Wf6B58mJof0xI7pAAAAAElFTkSuQmCC"

/***/ }),
/* 1693 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1694 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1695 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAK8SURBVHjanZW/TxRBFMe/OzP74+5ALohoDkNiYmJroLDR4iprY+v/IJWWVlbamthKbKgMCYQECgqQwkCE1oaEkuQMd9ztcbuzO763G4ZjcwsXv5dvZpKd/cx7b97OOcYYsBYXF2vNZvOV67oC/6E4jtPt7e0fBwcHPZAUrvR0aWnpGy24BhZCWDuOczlaD61j8DGAn0VwFj25CCzCi+Dhud1JYYSklAzhcWxwUWoUlH1ycoK1tTVMzTRgqg0IqXKwJAuJKIrx+uUzPJyZAIkzLQczkHfncWNjA8vLy7j35AXmm2+hE345haHnJjXZ/P6fEG8e1MFK07QUbFNVSoG6A2EYIhwkiN27cDwHIks/T51/F4kqlKMcbCOv1WqZfT+AUpIwFmrBFZWdgS3FrREzOAgCVCoVeJ4PJYtgXuMg8MeP2Nr3fYYT2GNwDkUOVTLfxJVAkiRj1ZhtI2a45zL4qs04dk8BOnXgK5GBbf+Xg23v8gFmc9clS2nBgWugE3ouAVdoRFFkoWVg+8myuSsYLL0ADpBDFZDFzM+lAyViDAYDBvM7tx4em8H5Jt4dDHQC6aQIJHAeEZB72QhEsUa/r7m+vL4cXIT3ej34cYQLSrcxJdAKgYRqO+k7OKd52I/QanX4ZkO1Wr2xFNYLCwuYm5vDZE1jeiKChxTTHJRJIRyKEBoybOO49ZfPg3s+BqBLwZdqNBpYXV3lNDkiPiQ2pd5Hu90mdzE//whSPsbR0ZFZWVn5BOC3zbwAHobbNmI4W+u8C87OzrIo6/U6Dg8Pzebm5uf9/f2PdMkPhsFFjYKzbfTdbjdbs7u7a3Z2dr6QPxD0olDjscVwG/Xp6anZ29v7urW19Z6g/Zv62HQ6nR6drj90sdgS8BfGUfL9MTs7m6yvr3+nErwjaIgRuvZnCuA5xpMm/yLoOUr0DzUxQhN51MoDAAAAAElFTkSuQmCC"

/***/ }),
/* 1696 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1697 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1698 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAO+SURBVHjapZVPaBxVHMe/82Z2ZpLdnU2auNn8MVoN2+qh2p7Eix5ECLQKHrwo0oBQGjwoogQFI5HgQZF6iZecjEX04h+iUSEHQfEQcqjVZGltNf+azWa3sdmZ2dl5+97z7Qu7HZY1Bf3ClzfvMe/z+/MeM5oQAnVpUvUB/09CSgGNxsrExMRzZ8fGprS6DiKpKGpWdyMqIVBDG+js7OxbAD5BFDw0NDSSSCSPEqLJvUQB1dgI0jCkImNUg4ODI41nEmmDAkWtQM35nR1lGbebozKU1prZQq5t5G6i7IXg0JGIGYh1GOiM63jn+is498DLODHwULTBiGasJDkK2oi+Xwxw+YctmGYFXX0h4n0meoe6MSh9V/8RlLybeO2b10G023uiis4a5Sto/oqH4ayOZEJCLQbbpuCGgCkztqSTCRs/b/6Eb699ruCNAG3BEqrKX/t1D+mUBlvjsHQdnbYOxw7BDApi6YiZBJZh4cLpC3j3ygfggkeh7cEbuRIGem1Y9ZdpDDq1oXMC6tdQdW8hZBScc5iIYezEi3h1+E28/+OHam9URiu46nN0dXVCQ031nfkMLu9E/3096nB2dzxoKSaxBipuBY/EH8Wnq58dDibqfhKQuK1K1nWB/ZKLjISWy2VVbjqTwMbVXfjVAL4boBqEcETXnTM2TNlD24BpHYyEcbXuOI5qgQJ4+3ADH2zfA6UMSThoBRNEVQfbREHl6Sv3DSRR2qk0b8369QJsx4dHfWiej41SDk85pyF1eMZxx4QVj8GU2RoxAsaAeMLA+h8lhAEFNQLwGIfLfLCYjzSOwOruQ61WU/vbg6X7h1PY2SzjnpEeMM4QVmsQXGDLvoSL9nu4dnkT+d9CeIUaaLYCLwSyDw8iCAKEYciFVNvrphENqV4LpaILWmXSFF9e/RjjuTN4fuglmAMUe2Id1KMo7lWQeXAYe3/vYXt7O5ibm/s62uNWydItddXWfi8iqIT4LvcF4HO88dez2O/eQkea4Mn+p+Fk7kaqx0GhUODj4+PPLC0tXfq3HjedTNlwTnZgTV6t8/dP4aM1DvrnLQxn0xjofgKPn3oMx45nsbq6Kqamps4uLi5+L6Rawc3Gt87vPZbG0eN9OHXyK+zu7tZLBssw1FgNKysrfHp6+tz8/PxFyeSt/xLlmZmZt33fF/IQhDwEQSkV8qSVGWOCc67WXNcVxWJRLC8vh6Ojo2cAEMVocTPjXC53I5/Pb2gHQkORDzhkAGUJr05OTr6wsLDwiyq/jf7zz1SVfoj+ATknt9PinZPYAAAAAElFTkSuQmCC"

/***/ }),
/* 1699 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1700 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAW5QTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDw0tLSVlZWWlpaYWFhZWVlampqa2trbGxscHBweHh4e3t7fHx8gICAgYGBhISEkJGRkpKSkpOTlpaWnp6enp+fn6CgoKCgoqKioqOjsLCwsbGxsrKyt7e3u7u7vr6+v7+/xMTExsbGx8fHycnJysrKy8vLzs7Ozs7Pz8/P0NDQ09PT1tbW2NjY2dnZ29vb3d3d4uLi4uPj4+Tk5OTk5OXl5eXl5ubm5ufn5+fn5+jo6Ojo6Onp6enp6erq6urq6uvr6+vr6+zs7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////U4Xt6QAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+PvR6IwAAAT5JREFUeNpt0d1KAkEYBuDvZ3Z1CcVUkkIrO6koqKMg8qCDrqDr6Ha6nVKCKISko6ggwaCSREvF/ZvdaXeZDQpfmO/ggXkZvkGEeRHRMfkfhk7MfGYTQXIPIZp0zjHD95sgQUSIFHsOgGKmMAw9ZBZCgJRAmlVgknRFFDbpi1IWgePjBIWAKeQXRpEl3fhijS3VP1C9TuXkurSRcnHnZjHTbSvVuLrb3AVdAktMXLUbh7P62vMeo2ZGAmQj87AFmG1hykCsFIeXveJt7fS1D5qJPuTQof31x26dSm29k2hWVo2RZ9abRzjdLvuaFU0KMKzeq2Jt8O6HF0olzGVh0Ep+GYPJcJRpSlcRpCETwZ19HrPvBLqbGKQHrj8eqHbHTrp1RAFReNknOfN/H2gZggiRcy03UUD882lKStA8Lz/Zvm+lGW5r1gAAAABJRU5ErkJggg=="

/***/ }),
/* 1701 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANXSURBVHjatZVNaxNRFIbfmUkmqU2lJmkIpArF0kpBULBoFi7EgIog4sZfIOhGQRBcuOzOhQiu/PgDghuXIrWCGoRWWzUiDUjrR1M1MbSTzCQzmVzPOTgWIyOieODkXs6597nvvHOHaEop/I+IBBNN04YBbP1H3nsS+iEABzFs284Tz/PoEDkJGid3escNNRsKDQOmaeYB/ALWrEYDnuvCiBhSMGgxKZADXKoPDAxAdbuIx+PS82nearXg+z5isZgweq2QaDkO2PGoGUWn0wGpF8iWwUHZsvhlEc8+zeLN2jzer7/FjcO3oes6GiQoEglQv4JJgS+w/v5NzJH5cC6Ho9eP4KtexdPVOZzccxzJ2CBqTQue78kaKIWu74eC5bGUUqxC/PNJta+1MVt7gksHp3D5yBXsyuyCZrYxcXUchmbAsW3Z0xs6NoL9ZQ/ZUx7F1w7aSKc24+zes5hMT2Lx5SL4FcYNExztdpvXsfJwxV2Csbc6gTmazaZA+owYOKrVqvQNqsX0OJcYyop5DAXzJoF7NLJqy7IEvMnok36lUpHboMOQwwLw2toa34pwsKKs1+t4XSrBdhx8rdWgKQ2mLptgk5+JRAJOp42G15ba0tKSCMpkMuEeswEmnTwyMoId4+N0O/rhdjtYd23pp9NpUdbquGh0pIZUKhXc61DFchcTBKPFYkM2m4XrewRuSn9oaEiscnwbDdfhEn9tyOVyvwdHo1HohsH+ynxsbIwUt2B9h6SGkrizegvT04/QqLa4xE/FinkMt0IWxWJy+sCWfty1b2Hq3kXUP1rSP18u0IEKM19uY5uTRcSIIJlMyr3v65MXrMKs4EWi9lz5AGadh6jXTCTW4xArohncrJ3H7u07cWLkAkqvSmSNovSxsrKyCuAzglBKSVLkVyoVtW5Zyvd9dW31tDq2kFUnH+TV9Ov7anl5WQVRLpcVec0pa+fnnzsTExOTAYvyZ7DjOIqT7qZsCILnpVKJQdKbm5v7AX3xYsHN5/P7mREKps9TwDQKgD5TRXdUAPQVMkz6xWJRagsL826hUDgkjJ6M4M8ieDkgoLwHUto6c+ZUoVicfYye6PV4H6kLVAZKJQM/AytmZmY+jI6O7uZ9YanRz9/8532kfe/wm/gGfaRdssw8Y/wAAAAASUVORK5CYII="

/***/ }),
/* 1702 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALjSURBVHjatZVfSFNRHMe/917ddGoPFc5MLVCI/qAIGQ3yISowInorepYefAt7iBB6kaAXX6PXIug1SAgLQopmUbO5u8ImGaghFRnVdLv3nHtOv/02t+lcU6If+3IOZ+d8ft/zvdzN0Frjf1QVcmUYRguA1n/kzZPRhSIwV8vKSioshKAm3Ik+JFCtHwtuCg4tCz6fLwSgBGykHQepVAqmaZBMBudVptFqERVAoa+JojINBpbow/Q0hocuY2ZmZqPv8yZKMs5bJqeWxZu4ydjYI3yMh3H4QAsunO6GHYthW0MDagMB1NbUoK6+HjmbFcB83azrkZvDuNh3EJ1N3RzPr99JvH02BvVtEk3BnYDpw+TsMq5eu569bQUwQ6emojh/ah9t1ojG3uPhk5d4GrbRd7wH2jARbNyB+roAmoMCtm2jq6uromMe792+gc727Xj1Ooqln8tIuwptjX4szM9h9McSovEE2nYH0b5nFx7ffYBbd0YrgElSCBw7cgi9Pftxpu8EVksICdcVSDuC9jjwpAvpOtgbDDB0PdhEceWigMaakp4HKT0IT8FTHpSi0aOR5gasVWiFjC0LWmkoEr1FBFJZKCnjWnkeSdIeBpMRdls5CnLMwLTj0sgN2J2QDCQJWpM5uILfX13ut6I0CtMwGQwNKIYzNCspSDznptXVVZuIgmRlHIMcugQGxcGRZMAFuEdwj/NWMGFACAGLIuQDGzrORsGOpJsGFUGzYE3gnHOGGpYPdQ3b0OxvRSKRQDKZXATwtVwUrMi7T1j88h0UAohb1EDxDXz+GgyN3M+v23Ys3d/ff47mswCKD/DpkOM4ml5fnRld19V0RS2lJLMeSynFa5FIJDPntVhsyg2FQr3MKZKJzVX+AVEjUFM+HI/bYnDwytlwOPy89OFtscglPwdymh4YuHRyYuLNC6yp0iiOkpv89ddHkBNHND4+vtDR0dHNZ8vIYOjW//M+07k5/KX+AF/r/xkkcoECAAAAAElFTkSuQmCC"

/***/ }),
/* 1703 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1704 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANpSURBVDiNpZU9a1xHFIafOfd7F0tCoAREILhwY/A/8D9wE/IDQrqAi9RpjIwx5A8kpdMY9yYYTArXKVwFDDY2AYegSPGXJO/e3fk8k2K111pLSpEcOAwzd3jnnefMnTE5ZwCMMQYw/L/I+ViwXI5c27n23YtPX9ykgFFds72+xeboAhvtBTbGY9abEV1VM4+B93bG4WzKoe05mE3YPXrNzDsu7V26CXy/IlxtVFeev3te08K4qXkV/2B93rHRtWy6EZvjjnFT0zvPu37Ou37G0dzhfGbiAq+mB1xev3xlqScnMEAGFFQzSTMxJXxK2BCYWMfb6YyJddgQ8CnRSMcn3Tbb489AOYn0g2PULD4qJFV8Srh4LGoMUZVShKjK3AdsCFjvmWZlf/JmEF7GIGwMkBbpU6KMkdILYgyqGRcjYgTNio+JeYgUuWNcXeDztTWeTJ6cLdwWra+lZomkoKIyHQU1BRVCiWCATEGiwJMU3s4O+fv9a2pqRjLyp4Svlldf/vDtjxhjEJFFawzmnDzmueLyzp07L+9xb1V4OXE5dTqZUBTFAr8qZVkSQqBpGpxzdF1H3/esyTb9G2Xr8jmMTwqLMZRlSVmWqCp1XZNzpigKRIS2bRERuq5DEtSjAmNWqycrHWPo+57ZbEbOmRgjOWe89+ScSSmRcyaEAIBzDrLB9uEUlhVhYwwcuwWoqgpjzNAu0ZRliTGGul4Uu23rfxfmuDAxRoqiwFo79I0xpJQoigLv/dA3Akri4zjtOGeqqiKlRNu2Q+FUFREhpTQwN8aQQkbDh8XPFgaKohicxRipqgrnHFVVEWOkLEu8XxxXay0Jj9M51lq897q83U45XmIIIQzbbpoG7/1w5EQEay0iwnwS8HPH3t6evXv37s9nMz4ujKrSNA0pJZqmQURomoacM6PRiPF4jLWWo6MjZL3nQH7X69evf/n48ePfzmXsvUdEcM4NzmKMWGtRVWKMxBiZTCZcvHiR3d3dfOvWra8fPXr0yxIDrFxCC/BbW1uICGtra8P4MlUV5xyqiqry9OlTvX379jcPHjy4l3Ne+UMEFu/JqfPC6bsg5zxkCCHcuHHji/v37//0seiK42fPnv21v7//p1nEh5VFhkVSSqSUmE6nbmdn56uHDx/+eq6p//qYnuXyZPwDP0zzq+VcHo4AAAAASUVORK5CYII="

/***/ }),
/* 1705 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALMSURBVDiNtZUxT+RGFMd/zxiv2GV3uSofgIbukKBAiIaSMndNrkhNdei2paDjC9CE+wJXRckp2hQJLQKlpjsOECshcQSkBa/x2jPjl2K9jnc5uIuis/QsvfH4N//35m+PqCrf4vLLiYjMAvP/k3kEfPDHBuettT8ba0FBBGRwQ8Zfl3wkr1hE8DyPlZWV14eHhx/HwfSThDAMSdMUEaFarSIiiAiqStLvM1Wt4nkeAsRxDCJMTU0RBEHB8R4KGawcRRH39/eDPI/bbpcwDIs5w3lRFA0Wkn/reqBYAGst+/v7vN3dxfd9arUavu9zfn4OwOzsLMYYwjDEWsv6+jo/vHr1BbAIlUqFIAhYWFhga2uLRrOJiNB684Y4jvlpd5dJ3yeKIlqtFkEQEExO4j0FJi+zH8csLS3RaDbx8h5LXr4AnufRaDRYXl4mSZIRtY+2QkSYm5tjwvcHUM8bqFEtNnIYi4uLZFlW5I8rzsEzz56NQEWELMvQkr1EhHq9XuRPK84dMD09XbhhCI+iCGPMCKgM/irFjXodyS003JRer4fv+yOQRqPx9YolVywlb0qpHWXP1mo1VLUY/6Li4Wdc3qgyQERwzuGcK3rv+/4T4KHCz5SXZRnWWkQEay3GGIwxBdzzvOTy8rIL6KN2Gw/nHMfHx6gq/X6fiYkJoiji4uKCSqWCtVbb7fYvZ2dnf6jqQ7BzjpubG+7u7ri9vaXb7XJwcMDe3h6dTgcRYW1tjdXVVZ4/n+fFi+85PT2l3f69vbm52VLVvwFQ1SKAl8YYjeNYkyTRNE3VGKPWWnXOaafT0aurK+31enp9fa1HR0d6cnKiOzs7fwLflVkP/m5PXTMzMzSbzaLfqqq/vn//28bGxo+q+mlk8rhi59yISuecZlmmWZapqmqWZZqmqXa73WR7e/vduNJhSPnM+49HUwr8papXn3so3+ow/QdR4pc+FQpiiwAAAABJRU5ErkJggg=="

/***/ }),
/* 1706 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1707 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALjSURBVHjatZVfSFNRHMe/917ddGoPFc5MLVCI/qAIGQ3yISowInorepYefAt7iBB6kaAXX6PXIug1SAgLQopmUbO5u8ImGaghFRnVdLv3nHtOv/02t+lcU6If+3IOZ+d8ft/zvdzN0Frjf1QVcmUYRguA1n/kzZPRhSIwV8vKSioshKAm3Ik+JFCtHwtuCg4tCz6fLwSgBGykHQepVAqmaZBMBudVptFqERVAoa+JojINBpbow/Q0hocuY2ZmZqPv8yZKMs5bJqeWxZu4ydjYI3yMh3H4QAsunO6GHYthW0MDagMB1NbUoK6+HjmbFcB83azrkZvDuNh3EJ1N3RzPr99JvH02BvVtEk3BnYDpw+TsMq5eu569bQUwQ6emojh/ah9t1ojG3uPhk5d4GrbRd7wH2jARbNyB+roAmoMCtm2jq6uromMe792+gc727Xj1Ooqln8tIuwptjX4szM9h9McSovEE2nYH0b5nFx7ffYBbd0YrgElSCBw7cgi9Pftxpu8EVksICdcVSDuC9jjwpAvpOtgbDDB0PdhEceWigMaakp4HKT0IT8FTHpSi0aOR5gasVWiFjC0LWmkoEr1FBFJZKCnjWnkeSdIeBpMRdls5CnLMwLTj0sgN2J2QDCQJWpM5uILfX13ut6I0CtMwGQwNKIYzNCspSDznptXVVZuIgmRlHIMcugQGxcGRZMAFuEdwj/NWMGFACAGLIuQDGzrORsGOpJsGFUGzYE3gnHOGGpYPdQ3b0OxvRSKRQDKZXATwtVwUrMi7T1j88h0UAohb1EDxDXz+GgyN3M+v23Ys3d/ff47mswCKD/DpkOM4ml5fnRld19V0RS2lJLMeSynFa5FIJDPntVhsyg2FQr3MKZKJzVX+AVEjUFM+HI/bYnDwytlwOPy89OFtscglPwdymh4YuHRyYuLNC6yp0iiOkpv89ddHkBNHND4+vtDR0dHNZ8vIYOjW//M+07k5/KX+AF/r/xkkcoECAAAAAElFTkSuQmCC"

/***/ }),
/* 1708 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKmSURBVHjatZXfShtBFMa/XWs0XoQKogj2wpoXsCIklIK5tCD2KlexL9DWC/sEpX2G+gz2PjfVglDYYtNEm4qXvWitqa0J+bfZ/zs9c2DYdCMLUvrB4cwOM785881Mogkh8D90SzU0TVugdAf/pu9U6LkCKy0MBpbheR4twitBkwFSPEfVRBWOjSGVSuUBjIA123FgWRb6vS6CMMQYDZYLjY+PY2Zm5tqFlIjKPXErWDoN1HUdt6enOTMoikSwFrVHwZqu4erqN+r1OhzbRmpiAul0GoPBAJPUtqkvk8mg1+thamqKwenJSayurkobEsA08INhYHFxUW6fB6us2mEYsj2O43A2TRO1Wg1ra2vJ4P39t3A9hz0O/IAiJFgAP/DB3wH1U1vdUgkvFosoFArJYFDMzs1ic+MRDt4d4KJxwUDX9WBbFizbJpjgyoMgUDHisf4XGOBD8wlULpfx9Mkz8tpBp9NBq9lEm7LZN5UNDJcSQiSD+ZRpkOe6WH+4jpevXqDb7Uo4WyMoGBaTgiZaYRNkYJvY3X1NVfm4t7yC+fk59nZv7w1XF5OqOAHMcCAMpIfsIyqfPvICvtp6gpKtgKa2zJVw5m/B34lKrlhD4+InQhHyIYaBvGqc2Y64fN9XBbArETimUqmEpaWl4UfBmSbzbXBdF+12G61WS/bx74lUpVJpUPoVgWNW3CXo2dnZ8IGOHNDl5SW2t7eh+k9Ojp2trceb1P46fKLKuzxVJCzLEjJTZYLuqqCtCnoAHLRd7qtWq7LNffX6Zzefzz9QHBU6rlGz2eRHEb+KylNalCefnn7xdnaebxiG8R5KN6uYq+Xo9/vi6OhIHB/XrFxu5b6aH49hcI4gCha3QAUveHh4eJ7NZpcj0GhoDL35f94PmvcNCfoDzspBhv60f+gAAAAASUVORK5CYII="

/***/ }),
/* 1709 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANYSURBVHjapZVNa9xWFIZfXX1mJEtO4kwmseM0wXFCobRd9W+EbAslWRX8C7xxDcY/w3TjZG+KwXThdRamixaKhyRNcIzriTPjSayPkXR1r3rmDjOVOx4C6YGXqyvmPufoPUcjrSxL9EOj6C/4f0G4AdAY3lleXv7+8ZMna1o/BplUFrXra5iVMajlAujGxsZPAJ6eA8/NzS143tQdxjQ6yxRQrcMkQ4GislZjdnZ2YXjNKjYoUFUKNNp/WlWW8a85qkKSNqoWdO+weYowziGhwzMNmJcM1FwdjdsBUc5XPexXFaysq9pw1k5x8Nsp6veAaU8gQ4CZWgCPwIZjoPXyI6ZvXaIk5pglYz2oQlsvYswv6pjycri2gONwSKOERWCbdOfra5ACSCIORmeUGLsYTFD1+Ad/dFEPNDiahK3rqDk6fCeHMAhi6zAtRlAJz7PQaYUEHXk8EUyednBzxoFdSjBuQucOdMnAkwJZ9BG54JBSgucFSeDKNReHf7XV2WoY/wVnicT0dA0aCuW7SAQiWcONu1dVc96/i6EFAnRJv83IihTdToLbi/XJYKbmk4G5jnpkXS9x1onQIGgYhupx6w0Phy/fkw02sowjS3P0wuzTFRsWeUhdt+zByoRU933fVxYoQHwGmVkQsgTnAgXnY+DzjvfBDlNQ6r7S9ZtT6Lzrjabm7esTOH5CPSZL4gR6mMCuMCdW7PoWbNeERdUaJoMQgOsZePuqgzzl4EYKaUpYZgxhahCxBs+/jKIo1PmLp4J0Yz6gBoUDqBTIswKlLMlTE65rQJMGPiQMEc8pSQ+nKTXum1mkaYo8z2VJceG4aUxDMGOj047AM0EaNCjr5Wot0wJJz0CYlGh3e2h8OY/uhy6Oj4/Tzc3NXyoVj4fr2WrUDv5sI+0Dk3wE5ykpknjT7MFv3EJw1cfJyYlcWlp6tLe39/ukF2SkqcDBwrfXEZ3liOMcSURj1eOQkiFwa/jqu3ncf7CIo6Ojcm1t7fHu7u6vJcVY86rGV/df3K8Pk6lxy7JM+UlA7O/vy/X19R+3t7efEVOOjVsl0zj8/HdnJE6xsrLycGtr6+cqdKziZrP5d6vVOtQoKsDqHziEEEpRFGWrq6s/7OzsPJ9U1Gd/TAdVTo5/ALrlmmYV3U8KAAAAAElFTkSuQmCC"

/***/ }),
/* 1710 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHSSURBVHjatZQ9axVBFIbPx5yZ3XvFJTFiBOEiAU1jZ2VlYaWt5S0sBUtBf4O1bSobURB/hCCptFLhxkQDVxMkej9i4mY/Zjx7YQWxCc7Ny549c3bh4eUdZjCEACchghOSaRf31gYffhyUq+2cOh6dXUpvPrrdW/8f8J8o+o/fH926es46odm8uXsIbzbHzd9jZ3XKmfHa3ctn/nLMRECE0GpludNU8wGPC37xemfxnyhEGMs6QMxmWmuhFV65v+4VhjBHIUIw+sL+9YuT0x2bMcUBaw+wt1+Mnr/6vGCE2b/dLuusa4AwxIEDws9ftW+YxoqUiMSJs4AQBw5KOMgLtmIqkzjJEYFSxxB/ChEQAzdMkzrZR/SLThC8jwMTKVhbx8nUdJwdE+JS6hCqGqPAhmeOSZkj003lm2ZwKRGCkuIcC5OC1bEyTdfx8DAv0UmI3jyrDIJAiTND0034U35UkFAJwD7OMSkYAylzywgVH5kCWa6AIh0bNUYE5CRsmMnw3RZnq/B9WkBdxzlmJtAHqunXAa5cu7Fw5+HTvd5yRjAHbe9O/MsnDzLUNWv1jUhPO0ZyQ1WWA+3PZhc9Il7Q4TzEK2h9UeZOC25iSOYEzoPqN491qmA+//VsAAAAAElFTkSuQmCC"

/***/ }),
/* 1711 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1712 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANaSURBVHjapZVLaBNRFIb/eeTVyWSCjdUmpaAUNAsfUFcirty4UnShoIiCKC6KC120i1oodO+iIGgRtApuxCqFotCVQheVVlGbuigutNJGk9g06WQmmTveOZMH6RgL+sHhZm5m/vPfk3Mmgm3bcBA4zoL/w3YAR0aV/v7+cxcvXRoWHNxMlIWunKhlFUXQAq/o2NjYLQCPmoS7urp6wmF1Vzq9Cp/P56SmiLW3Y71QoAQkyBgimoaA319N2CCRSPSgilwrw+joKETuJh6P08q36hFqa2tcN07jEa5p2Ry5URyBBLPZDAk4nyuVCmRZpvDxcE5Q5nuRSATMslAsFrGtvZ3ul6vfNzl2S+eEgGg0ikAg4IrzMBnwKQcs/QRyho24IuCwJmNHRKQEaOFcRgNyyamLzmWAm29MLK2RkzoBycS1AwEMHArA+7xXmASDwSB0XecOizj7OgLDAvbHRJzf68dO7vbtKsPdjyZuz5WwPSTiyr4m8ZbC5JQxhntLbSSajNp4cMSApoiwLAu9iondfhu3UwGsrum8zhWEw+GthQVRhMpvnP9VBsD4kdvQud0HSZJQ41wHcL5XqE0EhC1rXG2pNd3AcgHELk2qi5KAu3rqupVjClVRIKAIh2wuhxWRwc8HolAoOG1F3ZDJZKAoCgmHQiGoqtpaGFVhWCa6VRFf8gw5SUNnZ5D2Y7FY3W1eVLEzIqEVoscxXI51uznvfjBQsuymEjxfMnHgYRYnJn7xgbFokHjUv/eWwn2YanotWcGTz8BCxsLxp2s40yOgO+rH/E8Bd97pcDgal1A2DeoiB9M0mc1pVWO6sVML4tlx4MYMw/sfFj5kwNGrAyLg+kE/Lu9h2NgweGzAMIzS+Pj4i76+vppjL1yYfqSDCRWvTgtIZS0s5iysFhkSioDemA1pI4Nv3/JU93Q6zQYGBk7Nzs6+/1tXUMOXSiWawHK5jA6+190RxPr6OvWt/kMnl8lkEgsLC/bw8PDF6enplzbHI7ypyemdzF2Te15zaitN05DP56ndlpeXkUql2MjIyNXJycnHXJN5uoIyNUNim05Dbnk/01rmDA4OnpyYmLhPoq0GZHFx8fvKyspXweWPbzzLsij4oBhDQ0MXpqamZlxTXv75z5Rc/oXfRz5t0FRNJeUAAAAASUVORK5CYII="

/***/ }),
/* 1713 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYlQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDw0dHR0tLSrMnzr8nzuNT9usfYvdDtvs7ivtHuwczcx8rPx9XnyMjIyMjJyNr2ycnJycvQysvLy8vLy9nqzc3NzdHWzdXgzs7Oztbgz8/Pz9fi0Njj0dHR0tLS0tPT09PT1NTU1dXV1t3n2NjY2dra2tra29vb3d3d3eDm3+Dg4ODg4eHh4uLi4+Pj5OTk5eXl5ubm5+jo5+vw6Ojo6Onp6enp6erq6urq6uvr6+vr6+zs7Jy+7Ozs7O3t7dLd7e3t7e7u7qrG7qzI7q3I7rzR7r3S7t3l7u7u7u/v79Dd7+js7+3t7+/v7/Dw8PDw8eTq8fHx8vLy8vPz8/Pz8/T09Ovu9PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+erw+evx+e3z+fP2+fn5+fr6+vf4+vr6+vv7+/v7/Pz8/f39/v7+////jHZhDQAAABZ0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+/ipetZ4AAAE/SURBVHjabdHNSkJREAfw/8w55/pVKohcchNBmyAI2tSit+gJeoh6itb1Lj1Bm9qVIIURZWgXS0vvx/kK9RoUzmaYH39mMUOEVSUBBOIfumTG4nTMAYi0Z1IE8LmYMaKOYkW2YguJWCNUAZ4xP0kl1kvCKaorpYLFbtCOiNIXFjUjnUB4sEx3K4PIGaO/dZJlU16m99QHHfPN4cNuv4U2lny/L+QtDbrjzmcKSzljk8u1BgeCigQI5LsLPbbOOp/5iZ1M8JuuyEC1kIRxMw6RImfhWMkqD5vRhg1dd8mIKSm+Y/Q27j0PtdnKmbZp3hix/nL2wnuez3ecn26YPH62TbpgHEHJRrNSl3JwUsoSiwVfFxyMMYmJy1ftWAMyT1szUulI+/7rVAMgAkpnjjwEyOvLLNWY85+neWOQ86r6AfMrhNzRcJE7AAAAAElFTkSuQmCC"

/***/ }),
/* 1714 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMnSURBVHjapZXdaxxVGIefOTOT3Xxs2qQRiu62+bCxQlCJSG+q9E68UCh6UxDB3AjxxqtcBULIn5ELDeiNt7IakVA/aW5WbK1sY/1K26zbbJpkN/s1uzPnOHOY9ATWuRB/8OM9M5x53nfedzhjKaUAsEJFgf8nFQnAiaFiYWHh7Xfn5paFEFjomzrqfJGPswqBDr1EVldXl8L9H4dr6RArl8tNZjLD40JYaLilo0lybAATOalsNjtJLAcjDToJNk4GJ8mAETFYA3rhpi0mgYEng4Wgp1oRRz9Q/LXbJu3aZJ9IYcd7IBnuYNQD9bqKr28dstsU3NqugQVDostLU/1cfWXcVG2eN2uMDDRKEPrTbx9ipdM8/+wo09OnOZcboiVsrv/W5sN8Ue87aYBkcCBR5Rqbtyt0rT5mnxlhZCTN7PQoff0Odsqh0ZF8VWxQ2W/qvXFByWB+rxB8dAPbl9x54NGUYAlLf6NdP0DYFsKx6Qvhp0Yz/PDTPfy7D2l+cgNVbSWD5Re/4Lx8AXH+DJXDDlt/N7l574jSoya7VY+2F6CkAixsC2qeJH15GgJJ5/tfk8Hu+1dQO4cEhW1yYy5ex+eb2wfcLbVotRW1o0DDD2se9+8f8PTZDPW17+h74TwDb8wmfxWW6+C+OoNQcKVc5/rWNnv7LS6cHWBybJCUbVG408Hzujw5JLn0XJbUi+MgTH+ThxdFWzCeO821S6MoS7H5R41BVzA26NCSAcMpyQdXL+K6NoGS+L6vnVxxDD/2a5fPMfXUAZ//+Iif/9ynWveYyfhce32GkVP9dLtdgiBASgkQXct/Bxvo4+uLU2e0j+8rpTSs0+lE1pU2Go1o3V5bW/sMUD2tSFKg4Kjlhw5BgdSV7u3tUSqVdJJKpSLn5+ffLBQKN1UoDU6u2MgRFsMDLkNpFyUDDa5Wq0xMTLCzs6OWl5fnNjY2vgyZ0gwvQQZuFLfh8aCKxaJcWVl5L5/PR4d7kDS8ZLgBawMRvLu4uPjW+vp63kDpBW9tbZXK5fID0wpzYsVJomq16/W6t7S09E4I3Yxfv0cnf6biP/5MpR5Ugv4BI317oHslKCMAAAAASUVORK5CYII="

/***/ }),
/* 1715 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXpQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGkJCRj4+PmZmZ7u7u8PDw0tLSlJSUnp6en5+foqKio6OjpKSkp6enqKioq6urrKysra2tr6+vsLCwsbGxs7OztLS0tbW1tra2t7e3u7u7vLy8vb29wMDAwcHBwsLCw8PDxMTExcXFxsbGyMjIycnJysrKy8vLzMzMzc3Nzs7Oz8/P0NDQ0dHR0tLS09PT1NTU1dXV1tbW19fX19jY2NjY2tra29vb29zc3Nzc3d3d39/f4ODg4eHh4uLi4uPj4+Pj5OTk5eXl5ubm5+fn5+jo6enp6erq6urq6uvr6+vr6+zs7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////Y79j1gAAABV0Uk5TAAABAhUWFyMmTVNcbKamtbnC+Pn+O577hwAAATtJREFUeNpt0b1KA0EUBeB7z8wuuklkJQn+Nv5UFjZpVEhnZeML+BC+inVewcbGzlYEg/YRbBLcQGI0YHY3O5MddzeDqOQMw8DHvacZZloUmV1X/MM0zllcRgAVe5wdwpXImcZ9QAJgRu4VooIzfO/WRseYMyxzb6jOKtf3TvUAvzjZ2fKCXjOWj4cg8cMiVPGYlPZCB1SkeMxsGIdx+BWbDrKwZWjT220EiDefusyZWiY9rZYThQRaGWbbrUPHu0Ud475HNzj1LS9xuuK6ZdlH6XXfHfq2REtDNZ+TkpzwYJAoO+1Go3RbBCmijVng+i1jCnYasvNWds+59VFXq596agRneqSwDu8EtPbiXIyfYz0vIQjaY6ZUkm63I5UB/Ypxm6OHiSLLWHYkwCwqd9MwV2L+82lGa7K8KN8mgHE0WVMlTgAAAABJRU5ErkJggg=="

/***/ }),
/* 1716 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALgSURBVHjapZVdiBVlGICfd76Z2dzO6q5GihFKIEnbhUJ/XtVVBNqKXkiQGkm3ghdiV4IEXYk/NwpBsEhdBZG4VIiIiFAXFaSYtS4lemrXxK39d8+Zme/t9XzsmdFluznP4ZnvHZh5zne+myOqygJi0AFaibXD05/vPhhN/TUgWqQgigBqCqaGGcoXTa3caxQ3fc8z53re/ewERtyKfrL1QG370aM6MoTQARu3v/HvpwPS98G54xEiUoxd26ZXzxC5GOlAHR7Cjf08gDVjjHz6bkJzFrI5OkHSXvLJ0aR9FB5biwZkD+iIpEahuBAOOPL5jneMz0Nz4VKoOs3+JyzBNhpcRN7Eo9Udayy+GcLVWBTWRWhFX/kSX+BVyx0rOC0ySJbB8wOQzcLk7zBlNiaWipfh7jVQWPT+DeCxM9apOvSutfDbUKV+Ca6fhnyGFvET4GqQZ1Dk4Odg+AuYHkfdclQrYV8QMWHhiZsw8iWsWA3PboHn3oINu+CpfvjhQ/jnGsyMm39CXkCBrS1DSRwKEYRLwDlIuyz2OqxcB/UhuPgOfPsmoPDSxzD/B2S3IS4gIRiXauIgEMKKfZyNa/phx1nYeR723YVXP4Lxy/D9HuheC6+dhJTSuKIDsYbXSljEjG2cuQNf74Ir+2HyJmw+bB6x+AW4PQjr34Oe1Y9GXcXYoWgZ9gqIjbOjFvgGhi3yVT9M/AIvHIInLXbvLC2efmVxNFqwPNn2pDaR1uD9W7DbTLph5BRIDKtehtmfaLHSwtWYlGokLBBjaPs8HEQJoOEXzNUJT9UgnwxzuoolWRR2SVPTZTA9BoPrIcWYgfs/wsUt8OAGRE347uE8Cp5SLVVJKNQexBML8FvmzjR7Nh3zAi4pwGH2QgMYH4OozwT+tlkF/DpaODMNq48j5rM+5v2dQcHCaojIyV/lfFekjb0ReRcKCNWlfbMUnqiRaX3wxVP58VbTBEMMpTOk8of6H6xzNJNd1ZQuAAAAAElFTkSuQmCC"

/***/ }),
/* 1717 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1718 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXFQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREx8fHpqenz8/O0NDP0dHQ0tLRAGoAAHsAAIEAD2cKE2cRFIMQHZESJ44gKKwAKZUcK5UhMjIyNzc3N5opOKoXOcsAOjo6OqUoRaJBR6hCSM4cSag6S6w3TaJHVsYwXbJIYmJicN5Ed+RCgOZMhrJ+iMV6isR+mLyUmOR0oOeJra2tseuctra2xcbGx8fHx8jIx/SryMjIycnJysrKysvLy8vLzMzMzM3Nzc3Nzc7Ozs7Ozs/Pz8/P0NDQ0dHR0tLS09PT1NTU1dXV2tra4uLi5ebn5ubm5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7f7i7u/v7u/w8PDw8PDx8PHx8fHx8fHy8fLy8vLy8vPz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j49//x+Pj4+Pn5+P72+fn5+vr6+/v7/Pz8/P38/f39/v7+////h0tCnwAAABF0Uk5TABweIjE1ODk7PUfm6/f3+vrjMWmZAAABNUlEQVQYGQXBvU6TURgA4Oc955QSTPwJg4kDBgew0H6MXoSTu24Oejsm/izeglegQV3QkZD6EwKRyYREE6CWtl/L8XkAAABBLAEAZlWh83ScIiIigsTyi5lCnI1SirUuGJ0RFKQcKbrvTuNW/ft8LKGgpEi5zp7hrRwZBUfTiHynYy89yI5lFGyMUuqUrJcVjbRLwdEkd6/dnjtZ6i0MJRRs/Ouu7p6c2/z8qzWQP1Bw2N78fjqd+zS9qIYCBb1JWb+4XKmbByurtRHvKYgQD+NqvnY3agUKfh7eK8N+HDRhf2d/BxK22q2+wUDTNLbd364UkAP4Hd9u/Pi4oCAgCH8e67+aLUhIMhLzsfqmbZHg0VfrvjzZm5zX17NLKAAwTS/bCSjUvJxSTrg+nMyBIJYAtFeA/9XMZGOUyzmiAAAAAElFTkSuQmCC"

/***/ }),
/* 1719 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKvSURBVHjapZXBSxtBGMXfLqkak5KAQinGw0I8NBcplVyUHDxWhOqpUFP00pt3PVgh6D8RpBfbu22F2IOXHFpIhFoMxKIpakizRggJSJImm93OfNntbEPWQPvgYxhm5/c93szuSoZhgEti4gP+T4ZhAl0wtba29mJ5ZSUmcXU6URea8bK6yjJo6AHd2dl5DeDtX+BAIBD0eu8rsiyxvTIBabSaWEVzMdo1NjYWhCnZFgOB7EUgMe9bdpZLhCOZD5AzCyxKxCKcd7m2zkuAzehEDCac1dnZGdxut+WGxnq9jlAoBPSAC7BQN5Ri8Pn8mJgIwq7Ly0taEzixX2QsJKB8E6vc+TkKhQIajQbsKpfLyJycdGfs7NhyqrVaSCaTkCoV1AaHGVyF1+uBy+WCpmkoFq+hlVRqODk5aUV1J5icnp6eIp/PI8A2fk8fIfvxPfTO/YKLjbLWxuOpJ6iMjiKTySAcDvfJ2IxiaGgI0WgU1YMDPNreRi+5557CNz3dyfvOwxMZ07UplUq4HhzEj/l5mudzOdxjaw8UhfJU3G48vLmBruv9weiA6ToNDAzgK4vjc6tFYGN8vPOIptEzUxcXCA0Pw+/3g9TXMYBms4lUKgVVLWFx8Tl66fj4iB1ikQywA7X2O4DNxZmZGUQiEcTjcSwszKGXymUVS0tLaLfb5nUkQ7rB5Jix1dnj8eDq6go9xK8YAVssqlqtxqGN3d3dD6urq8Kxg8hRVzPukKKanZ2ll2dkZIQftL6+vr6YTqe/Ob15Vjl9xTmYXFarVSiKwuFGLBZbPjw8/GQwdYMFTMydwFRc2WxW39raerW/v/+Orekg2cC2Tg5wAbaqxbSxsfFsb2/vDUEdrht/jX+qqpqXSAJo+4D/cXt7e/trc3PzZSKR+OJk6p9/puTyDv0Gvf461ZtD3bYAAAAASUVORK5CYII="

/***/ }),
/* 1720 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANxSURBVHjatZVvaBt1GMc/d/nTJKtdV1faTliphXUKysCxUfCN7/TNFPXlsC9GHcjcu0JBX2xqX9X5pnvRjsGGzL4ZDCpiEYW8ULG1W8faZcymXZzdsiU7b2mSS+6SXB5zRw9DUvJC2Re+/O4hx+e+v+fy/E4REZ6F/NRJUZRB4BD/T6vAGiKCZ+C9SqUiRdMU07TEsrZdKkmp0eWy63KdbduW4eHhU4Dqp0GmZZHL5VBV1dmBt/5rgPrr7RogGAziSaVBHsyzUweexGm/MkLg/iL+7B12/foBAf2G83vTvZ78TWDAu8mvaeCAY98RWP0WInvgpV78m3MQ6aOydwjsHBLcD9Aa7G3ZZ5p0HD7sgo3YMlakk+qrx1DCYQj3UO1/l7aNYZRKkvLBOOLvQ20FZrsVhEJUh4bcWunsgchBfPoqSiEN+w+hRHqQ8CtgtYFvt5e2dSsqCYOtqbvY03OEDnRAOovvRhT7xDiKbeJLnqfaXks9cBVI4lPHERmpwY+2SAxkL2+wdWkDNRKgbbSf0oVf8H/1Be5O6KB64HNUYwJ8b0DwN1R1BpFszUdb97jroyF87UH2jAzycEnn+Y/fdKH176DUPkpW+Z69jCBi1vw+9e1Q2UGZgk00WUDP24S6QwSfC9RDt6/DBJU+DMXkZ+UBT5QcQOv/8eLX91i4vM7CpTjl3ghT49cboArn1bP8RRf3uMpdLnKbKerVNNLOuCbXNbn2yYI8/EOTYsGUbKYop08vy6OnBVlP5eTkrSuyaaWkVCmJZt2X38tn5HHxljvq3kg3gZ35NwxDsluGHHtxVt4enBWzaEkslpGf7qRldnFT1nKP3bPhSOyIdN/sloSWEE3TRNd1c2Bg4DigNLfCmyABq2i7fqTZfBPN80J4F6+/3MnF2wnWdJ2slWXf3/vQUzrJZFKmp6evJRKJH6SmpsROkkKhIKbptKAgua2inL3wQHjtupz47E/5dGlJmJmRk9GoLK/clGq1KvF4XCYnJ+eAHo/lx9XOYx2K+N31+FtdpPQKo+90s7u3E80wGOnvJ5DPU0vI/Pz8j2NjYx+KSApPOyUuFovOOey+DKd2zmjbtp10bp3P5yWdTsvKykr1y3Pn6pN6bgY7gDqYB3TtyFmdB2YyGWtiYmLWgzZaEZH/+mkqAYsikmYHPbOP6T+MIG0QfR7GMgAAAABJRU5ErkJggg=="

/***/ }),
/* 1721 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANnSURBVHjatZVfaFtVHMc/yb1Nm9QMVge1QkptsdnDnH3woZ0vgrjom9gxECeIIoMqneuUjQ6EPXQPsgnzwQcRfJiOUvzTzbY6JjghIt3DYHV/almS1W1Zlq5p/t97k3tzPLnkH9EGUfaFL+cezv19zjm/e+7vOIQQPAypNMjhcAwAQ/w//Q6sIISoGRg1TVNoui503RCGUXGhIArNLhZtFxtsWZYYGRl5F3CqNEk3DDKZDE6ns7yDals3QONzpQ/gcrmoykmTqjDpOrzm+piqKHx5+itmZr5pfLcFGOrAakAZpKrItPDegQneGRvnwYN1fL5eVlfv/itwbcsyX7RJWDgUIvBCgLGxA6SSKXbtepYn+voJBoP0D/Rx5MhBFAkt29kAVmlWZaUfHDrMoN9PIPA8r+3bJ4MUYvE4r+x5GY/bXVtAk1qmwg54aufTLPx4kT9WQvT2+lj4YR5dy5NJZ9i791VOnfqEUqnExMT7RCK3KhO1WnEFjEPg9bZzMxRm+foynke6+HXxMmfPLeBq95DOanx47DjR6H1SqXQVuim4dgp6eroZffso/sF+7my7hX+rh75uL/t3PopesMhoJnnd4tPPPqejo92Oa/nx6nAnPY/7mL6U4O6GhmmV8LpddLQ5cKkOOjsUSqLE1aSn6US0PhW2wxkPO3xbbPBaukA0kUczSuQMi3sJnY1ckTWxFSGEne+KWq/Yki/evB0jXdzGm4EhOjtdRNdzfPHzbU7MhiiY9gRs73ZjmhbyN5et2QJc2ZIoCX45f460YZDWu3hm+5OcDq7y3aU7LIbX+elqnETWJLvyG7qukc/nyWazRiwWSwJC3ey4gSBz+QxXdjzHwOAAZszJFm8X97I5FEXhwvUCjzmWcSevyP4eotGomJub+zYSiZwXUiqbSI5h6imuTR9CfeMj2nr9vLV7iHTOQFUc/HltkaW5jwleXCAcDjM7O/v95OTkQRm3BmAX+obcjsry93U5VzduLDM9PcPGRgKzaKFZCkXakEwUIeGiwIsv7WZ4eJj5+fkL4+Pjr0vWfapqrscSLDRNK9dhu+6W+3Iiu9bKL2/3ZS5FPB4XS0tLpRMnT54Fum1G3X8HS0AjrAq0LVVu7QmTyaQxNTV1pgptsp2K/3o1FYBFGR/nH/TQLtO/AHgtItLG1AZfAAAAAElFTkSuQmCC"

/***/ }),
/* 1722 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAN3SURBVHja1dRNaBxlHMfx7/PMs++72c12E5O0eekaS4KmFhsvvtSilAgF60lovRWkF4knD9KTZy9BUBQUxYsleKiYYkTamEYxNU0b0hJC82LSmhiMyZo0yU52duZxH5qBTWIuhR78wJ+ZZxj+8/Dj/4zQWvMoSOD/1VgBCCHCgOABwcPR/rXEVqWmcnDw2lBBVbdszC2VVgU8XSQfCeKuOFgqQDHsoPL3iUdTKFcQFEEC9Qc0QmzbhZQg83+Ml3o+rQCSyYrkmfdvqxdufE5oY4DFmmZW5ttIzy+SiMepamxmvvES2fAyySWLTOo078ReZadE1KLnfHXSj0JoEEdme3HD93CqEiT0HI7TjBGLxIh6Fg1P3UXTSvq5OuxZhyP3c9zy9lHOsqQfpdi6k6jonxQeC2FHKpCpNVzlYUSjUW4lC3w51cbRlzTZo4dw7Ju8nvoLqaxdJYTAkH42K+kmrqsQRAr8UGxnzVIYkVCYY4tJmpw6LuQ66B8eJflMnNV4FEvJXeVTGEKwXPUs0fl/mModRKTHSC2tYwS0RXwTOudOMjacZ6SulYa6Wi7PHERaFuXMWkpZNm7Aauww4dACByZ+Zr+uwQ5LnFqLTakJeBYJL88bn1YQvtDOzVyG6Y0IlmIbE4VP+ju2LMF664tYlYqAtonLaYbCSb7QoyymNbFZgf1aFU+Q5NuRff8Vg+lhMtb4jcXW19xonOkT7TTGIJQp8PbydVIb48w2TLH+Zpr5UyN80J8y7+5ZW7QqG5VSaVbrT/Hj2QQL1z5hI7uEtZ4h//JhrmRyXBrpwA0IypPVXhHtOiAEUoRYW1vLA6jyfKSrMfLxE7i1Bb7//SrZjvMM51OsT3oQAAn4vKKNLubx3E2CwqN9f0z39Fz+cPeOlcbQuTscF19T+fzj3KhIYzseJsNttEY7Dhkxx3tnDpGtjXPl6uDA2XPvfqxL/HF7sGNPY8i5Xlb/XsANVWPXCDBjxHbacxEWHG+t5MmmND8N/Hr7q88+ekWX+FFoU3IrY8NrO8fMnVqC2Q7/mO4mBagA7c0p+vp/GRofGz3W19dXxPAHYnJycqZ3JlXvuMI/kntePc+jWCxiKoDtZFZ/u/jdxW9Od3d3u5QRpjo7O99qaWmp2/qZ+qdnT9rkWzIxMdHX1dU1oEvYQZhnooSHsKPh7saPwr96JVV312Zp5QAAAABJRU5ErkJggg=="

/***/ }),
/* 1723 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1724 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALbSURBVHjatZXLa1NBGMXPN3mYpEVIbEXaptCKDyhCq9KabZVCwdaVBV0JFpV0Z/0P3Is70a1/gLgTdSPVdOELH23SlrbaNtFosI+8c+fOOHdSbknMAxQPHL479/Gb7x7uzCUpJf6HnNgVEXUBCOLftK4a3agAK3VlMtlIsVgEkZ4JZBlKVdUW7Y3cLhc8Hk8IwB9gyuXzyGazYIyUGciG15+oSlQdhRYjDdwDA4hvl/BhbQvpfAkuByHo92LoyEHrngow2cc1wMQIDgezO/uYyOLOk0UM9gYwMx+HyQ1ljuG+Dtwc77fBVAPMKiOjPTOG5WRGg17OJyBMDnPXLz6tWW+k7dBVubrjemCmfHGwCxNDQbDdc6O3H0NwEyUIC1YRATUDr28Wcff5Mn5u5WAahurQAOdcxyBMU4E5iKQCSxBPQDI/wFqbgJUfvU0gZUEtmFAuw3SnpmWTo83fApJ5OHfuA5AwWy+D3AP1MwYRtvMl/bDOVHeq4fY4sN+HqfOnQWITEAXA2AHLPINSwyg0pGyOnvYWXB85gf6e9so8YYBtPwR4DhAlkLncPAophd3p1bN9GOgWqqNH+tXL4qBiDDB+aSjMIoBS445BhNDhNnxeTeqOj3X64cg8AJnfAYgyRCibJV3tsbu3SRTK46e6EQz4sJLcwj6XA5RXUGnUg+rKD4zAKQSUZBXYll55g0cP4czxDihVQETnPRBzI51OI5VKoWAUwLkJZ9KBwtd33wD8qBNFjfXPc3aWbPWSrqmNEnqGn9r3xWLRwuTk5AUp5UrtJV1j3UvWXoabuXJtDUGwgH19cXHBCIenRubm5l5XfsdNJAI3IL0nAWqxgoLIf0HWMwpLCwsxY3r61lgkEplBlexfExGF1F4cMQzD3ourbSmXyyEajcLn8xbC4WvnZmffvALQ8KuQLpfLhtbbYLxeL9Tk8YmJK2NLS0vvUVu647/558XVc2tooN9EH3o0bEhF5gAAAABJRU5ErkJggg=="

/***/ }),
/* 1725 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXpQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGjI2NioqLkpKS7u7u8PDw0tLSJCQkKCgoLCwsNjY2PDw8PT09Pz8/QEBAR0dHS0tLUFBQUVFRU1NTVlZWXFxcXV1dXl5eX19fY2NjZGRkZWVlZ2dnaGhoaWlpampqa2trb29vdHR0eHh4eXl5gYGBg4ODioqKjY2NlZWVl5iYnZ2doaGioqKirq6utra2vb6+wcHBxMXFyMjIzMzM0NHR0dHR1dbW2dnZ2tra29vb3Nzc3N3d3d3d3d7e4+Pj5OTk5OXl5ebm5ufn5+fn5+jo6Ojo6Onp6enp6erq6urq6+vr6+zs7Ozs7O3t7e3t7e7u7u7u7u/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////Erwi/QAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbK6+Pn+eVQA8wAAAR9JREFUGNNtkb1KA1EQhc8592bDalbUKgYbBRUbxRfxVfRVfJoUKewkZVpB1EZNRBSFZP/nWiSbiORUw8fHzDBDYl08gMj9g5Z5AO46lUACIAjoxnkA+B6rSCSSIohk3gTy+UxFFeA7FkeRFpiuyu2htqBjtJNug6W2Dt5nAM4fewmWtufz5LTnxH7ZU7MgSDByXk6RQeACQ6F7sqUW5JxxaTtntn1nAOSNf2xHhTAvV7Zkb7dnO4IbFFEIWtmhaG+ALOvMW9xsAhcyA4ksTMuqH8Icq3O4NywAXHyOdu+rfI7zp7R++bBAju1yVGU1SCC+Su31iKT9fE1aw2nZjER7HwCC1aMyLQEIABS3NiXSJYM8LRfn+Pu0UFVo8Jr8Ap+9am9E27m0AAAAAElFTkSuQmCC"

/***/ }),
/* 1726 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1727 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1728 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1729 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAblQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRAIIABXUFCHMHEYkNFGUOFYUNGY4UHY8WHZASI2wdJZMYJpQdJ50GKJ4GKZMgKZgbLJUgMpsiNJooNZgnN5ozOdAAPJ4rQqAySZhHStgJS6hCTtEYV7ZQV785WMAzXrNPZ7Jcab1gbLFebdk/btk/e8Fxg95VkciRlOhooOSLo9ChqeaYqr6oruuXsbGxtLS0t7e3uLi4vta8wuPCx8fHycnJy8zMzMzMzc3Nz8/P0NDQ0NDR09PT1efV19fX2NjY29vb3/Td4eLi4+Pj5ebn5+jo5+jp6Pfj6Pfm6erq6urq6uvr6+zs7O3t7e3t7e7u7u/v7u/w7vnq8PDw8PDx8PHx8Pvp8fHy8fLy8vLy8vPz8vny8/Pz8/T08//r9PT09PX19Pj09Pzv9P/s9fX19fb29vb29vb39vf39/f39/j49/n39//t9//w+Pj4+Pn5+P/x+fn5+fv5+f/w+f/y+vr6+v7z+/v7+/z8+/38+//3+//5/Pz8/f39/f79/f/8/v7+////pf7TEwAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABOklEQVR42m3Rv0oDQRDH8d/M7O79SUxAwUICAVGwttDWd7ARfQqfwOhT2IuN+g4B0TKVjyAY0IvGhMv92bucnNlrxKmWT/Flh8H/QwCZP5ZXUIA+nzIJkyICGFgb5DXT+5wUE3HQDoP0rS7UDGER6vboaWLzYw3GipUm5p3rIupp+2WUdswkFOST7f6e3IVLGMciJGYenk7VJ8P/jXDN+VhrYZQcGIxi7Vh9tJRSGh48QfuFHFO+pQwToF8t9hM0EYKRyILxnYFIHJM3FjXNoFVeYBTA/YT6Y99fWMh9vER82LDq9sKHrMBtEPkbB0VRrRjcvZmlDI7WO4+WhqWLcKmNv1udYXiEcpA5ZkpPCFUpSYryylq4CIqYNQlmRXlpEzTczIIubAq3TtXqtDxDAmw+J+l/t7RL9/gBKCFkZcGDIM8AAAAASUVORK5CYII="

/***/ }),
/* 1730 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAmEAAAJhAcEwVfoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAACZElEQVR42nWSy08TURjFbyVxoTtXRo24wMQFC10o/46wcOMOQxObYkJ4ScRaw0ODCzUpRjEGIjW0vAtl6AMoHfpCeSggICoLE5IynTvHM9NUCo05uTPzne83Z+58uQIl8nQMzniV1+7STolht4UOD3CA8KHd9l/4yZ0Ou3l3VGRkFlmkpeOqWb988PzuCbjj8bK+bvQNjsUXcn+QV0Ifjg36N4xV2e0qgptrEvoefmIfv6n9gqzqF/b4WtPtf7CrTjW+4wfMF7awg21Lm9ijt0tn0XDVFW3j2chXbLL1GSmsWlpBgs/bRFfQPXpszz3qCtaQBK9UHl5GGilWS3gRL8Ac1r3L/lwGGcSs3Fnp3fHuBKUJq1QEQ5rzkjlI4W72Zv1SRZIJi1xTsqHKTGmoUmQKCwhRcYxJf7azVbT1K4jQZIZ17d0sTPXDVhxBzNBlh0zbgGjtD8DEY0ydY7ZnvQC/+aZg2PS5ImQeDojG+n7NJxVEaYYwj4BsvG6iTTdG5CiT00SjGJEftcZ66wcd5QM5BQs0TVyRfWvv1gNGGLME43Q/5RzldtvRnNUgwSW2w1CYF7C+lOD45un3qMfm/GhIQYjoHDEf4RhUZLDBKS8ignZfEdxe6zcmMIlp5qqWEkRX8YXKMHvSyJ/IfG71sB6mGbOwJFJII0Ol+ZSkN6a7a4q24WoZ14OGx/c2PK0lTZxrWnsf7fWHjSnd3XLi8D+t7qplaXNemZEpwop0VghOoLPWTC2GC8UZcbGsclxb5hQmtFO3xDVxXpzO90rhs+KCqHS+6op0Ru97xE1RIc6JsqP+XyQjowWuxpsJAAAAAElFTkSuQmCC"

/***/ }),
/* 1731 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAW5QTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGjI2NioqLkpKS7u7u8PDw0tLSGRkZHx8fIiIjKCgoMDAwNjY2QEBASEhIS0tLTExMTU1NVVVVWVlZWlpaY2NjZ2dna2trbGxsbm5ub29vdXV1dnZ2fX19fn5+f39/goKCh4eHiYmJjY2Njo6Oj4+PkJCQkZGRmJiYmpqam5ubnZ2dnp6epqamp6enrq6usbGxtLS0vLy8zMzMzc3Nzs7Oz8/P0NDQ09PT1dXV1tbW2NjY2tra29vb3d3d3d7e39/f4ODg4+Pj5+jo6Ojo6erq6urq6uvr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////NQYQYgAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbK6+Pn+eVQA8wAAAR9JREFUGNNtkc1KQmEYhOfn84iGRlHrdtGmdVcQtOw+6na6k3YtWkkQYQQmQUjQQkJIsZLj6fy10CMVzvJhmHdehsQ6BQCR/8FiHgD4PJZAAiBKSBcOADAdSaZEqpw0my1AACDZtB1CGA3bQYts0LJkiextB1RYsmxZ7KSM8Ntty+pPrEUsAFC2HZwP9iNJXGLItlW73dt0SVZuW3Ko9YojRIHkMhuKp7Mifa1fKvbT7s6qSXsr6KahPOPGQYmVm1RXp+TDYzErGlVB0C/vxyTSrBjnV2W5wNLn/aGBPMnm47ssWeBkOB58P78l9a8xT/rZPAcJNM7imkSy+JhMos4srU4uVRZ5N43T6h01akEi3bpO4hQAyD+jlVmGCq/RD3HRX/P6+8HOAAAAAElFTkSuQmCC"

/***/ }),
/* 1732 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1733 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1734 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANXSURBVHjatZVNaxNRFIbfmUkmqU2lJmkIpArF0kpBULBoFi7EgIog4sZfIOhGQRBcuOzOhQiu/PgDghuXIrWCGoRWWzUiDUjrR1M1MbSTzCQzmVzPOTgWIyOieODkXs6597nvvHOHaEop/I+IBBNN04YBbP1H3nsS+iEABzFs284Tz/PoEDkJGid3escNNRsKDQOmaeYB/ALWrEYDnuvCiBhSMGgxKZADXKoPDAxAdbuIx+PS82nearXg+z5isZgweq2QaDkO2PGoGUWn0wGpF8iWwUHZsvhlEc8+zeLN2jzer7/FjcO3oes6GiQoEglQv4JJgS+w/v5NzJH5cC6Ho9eP4KtexdPVOZzccxzJ2CBqTQue78kaKIWu74eC5bGUUqxC/PNJta+1MVt7gksHp3D5yBXsyuyCZrYxcXUchmbAsW3Z0xs6NoL9ZQ/ZUx7F1w7aSKc24+zes5hMT2Lx5SL4FcYNExztdpvXsfJwxV2Csbc6gTmazaZA+owYOKrVqvQNqsX0OJcYyop5DAXzJoF7NLJqy7IEvMnok36lUpHboMOQwwLw2toa34pwsKKs1+t4XSrBdhx8rdWgKQ2mLptgk5+JRAJOp42G15ba0tKSCMpkMuEeswEmnTwyMoId4+N0O/rhdjtYd23pp9NpUdbquGh0pIZUKhXc61DFchcTBKPFYkM2m4XrewRuSn9oaEiscnwbDdfhEn9tyOVyvwdHo1HohsH+ynxsbIwUt2B9h6SGkrizegvT04/QqLa4xE/FinkMt0IWxWJy+sCWfty1b2Hq3kXUP1rSP18u0IEKM19uY5uTRcSIIJlMyr3v65MXrMKs4EWi9lz5AGadh6jXTCTW4xArohncrJ3H7u07cWLkAkqvSmSNovSxsrKyCuAzglBKSVLkVyoVtW5Zyvd9dW31tDq2kFUnH+TV9Ov7anl5WQVRLpcVec0pa+fnnzsTExOTAYvyZ7DjOIqT7qZsCILnpVKJQdKbm5v7AX3xYsHN5/P7mREKps9TwDQKgD5TRXdUAPQVMkz6xWJRagsL826hUDgkjJ6M4M8ieDkgoLwHUto6c+ZUoVicfYye6PV4H6kLVAZKJQM/AytmZmY+jI6O7uZ9YanRz9/8532kfe/wm/gGfaRdssw8Y/wAAAAASUVORK5CYII="

/***/ }),
/* 1735 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1736 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1737 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1738 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1739 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1740 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAN6SURBVHjatVVLaxtXGD3zHs3LsizZVt3Y3TUL0wRCtg41hS5K6+66yCIQ6LLQdeim2fq3dNtSKIXSXVqaxCarhFQxqWWcEj0iyaN53Nszd4ZhoJBFqT/p6D6++c79zv2u7mhSSlyGmQQ0Gv5Hk7SCUCc+IEKUpv1Xvqp9QxyZBen5q1c/BEG4CSauE5UKAuBv3UfRVr5cyCIzGDr7bEUuFXOaxNMwCG4VxGEQRpug8+cnr9G0ag18fG0dZ2dnaLVamE4nsB0XrusjinwIxs0WGYbjJUwust1zo4LTRKWdCSDNBMqxSrXsV+M0TaDpOuZxilToMEwHssp6OIoxvcgxOF+g37bK4tW106SSmCQJnj57AcsysbO9Ba/lqMyvXNmhfIGwvUZC0ChfCkXs2QYePB2jF1pqTNPKjKu9bdkazl/+hf3eS+hWC989GuOjvRtK7vD0lIpS5HnORV2Mp1NEgYdutwvfFti7GkJUCurjpleFiVwbXj7B7tX3kNtt/P3r73ApX+QC6+sbUCFSqMI5/gpAkpw+QSWmTsUGudAgVqeB7IahYZS3IOmeXEiEK6sskqECBy8GmM/myPKMe20w0kW31+cYcDh0TShltGbGOvhlMlzACnF89AAno4xV38VyKRicY2vrXSU1ji+QSBNJKvg8fSRbxKLc87zI2mn+86CCHv74E26eHqFnCfRNGx3xB44fari2cxPP/3yOxXwBwzQwGU/geiFsFi1eLOCFq5jMLjh2sdkNamK14aPpHNd/+x7e8AQLFsnyfbz/Tp8KTC56A9s8FXxOyU2WSy5gYhkvy200DLjzFFpJVh/TvSzLfkmznHOirqwUJUlzTtTzQo2reYU4zUkmsdaO0FldUf88FXA2HCJjpuxC8sO2DgIhS2W1H6I5R/CjsVCdlbDeCkljhXuq+oUZlKZiIZXcnPNNFYXHdVzQlG82W5QqKgU0qUM1qM6j5F3wZtTf3PgsCLz9D2/tfUVfKgR99OdFSzAs+/zg4Ovu2ur+waef3KbShLHKVxFDJ2aj0euBY1uwiYhX0r1733wBoHt4eHjHcW3L91rwfQ9hUMCH57nm/fvf3gGwdvful7ejKNQ7xd522sXtNig4tYr8OuE37uNz4oTYJVxCVvNo9GPimNgmNhr38Yx4rDH1f71BJO3tb5a3Pydpl/bO03FJ9g9vi/x1x/UCYwAAAABJRU5ErkJggg=="

/***/ }),
/* 1741 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM1SURBVHjanZXLT1NBFMa/lr5boAUlFIvKS4hRArYxqBCtujAEEokL/w1WunTlSrcmbk3cYGKIi7qAGDSU+qIhJCpPRR7l0toXtw9b+vLMJBfpLa3Ek0zvnduZ33zznTP3KgqFAljY7Xaj0+kcUavVSvxHZDKZ/NTU1LjX602AQoW/0TM6OvqMBhSBlUrlflMoFNJVagfHMfAagBk5mKunJgfK4XLwwXv+I4FLoqqqikPoemSwPFSHQakVwSXg3l4aOp2eP5PDaadlwdKEIviuGMW2sAUxJoLNTadT0OsN6Ozogu1E8z44n8+XB0vKVCoVv25srSESCaO1pQP1dceg0WiQy2XhE3zwzn1GMPgLF3odkh2VwZJywe9DTBThsPdBo2bAHIKhIP2nxEnbKZhrLXC9fsVVNzZaK1pR5KXPt4nuc70cuvpjBQuLX5HNZvgCOq0Od0bucujq92VYrU0liuU1y9WGwkGeJIulDhubP/Ft4Quabc0YGrwNrUYHk6maK6ypqYU/4OeLyT0+9DDEE3EYDSZ+v7i8CDV5ftFxiZRqEaMkVhOYweLxODOXdpJl/X8rTiQTUGs0fOuJRAz19cfBYmV1hQOoKtgRpt2sw1xjJuv2WL+sx9KRJbVGiOIuVYGWQbjfnvdurK+v8YoRdgRugRiL4fqZLirBNJtXWTHBecb9foFPsPc4YKCFItEwBgac6D7fgx3/DvUjuHHtJo1XIplMsrGliuXwltOtlO0lfPg4g/4rVzF4a5j5yLdrMprQZLWx7XNYKBRiz2lxQ2UrJDsu9w3g7bs3eDn+Ah3tnVQJJqaMbNjmibWY6xAOhxGNRrk9RqORmZwtC5bCbLZgeGiE1+/W1iaWlheY36S4mkBqxMjftrY2nuz5+fnC2NjYIwBzlRQX9bs6z9KRbudbT6VSVCUJCIIA+iDQ4mZMT08XJicnH8/Ozj6kl3y6JHnllNNBkBo/BOQnq18+xu12Fwj8hNoDgqZkHh89CM6SyNUHAoGCx+N5SmrvE/R3pfdxQRTFBGVXK9WkpFI6WaSSfNajoaEh53K5nk9MTNwjaBKHRNHHFEA/jhQ8+58IGkOZ+APuL5M2EnyPaQAAAABJRU5ErkJggg=="

/***/ }),
/* 1742 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM8SURBVHjapVXPS1RRGD3vp+Ob/FmapWSWLYKINkW1a1GrVgUVBKEUgf+BGxPEfyAw3NjK2rUKQ1q4rBZC5KIUCir8wVRmYzNOM/Pm3dv3feOHiDqLOnC9737vvnPOd+4ddKy1YDgEnvB/sAwQfK0MDg7e7uvvH3EYVSVRkRUPVXVdyLQL6cTExAMAT7YRd3V19e7b19Djug5slRIukXiyhqzlnYGsfY/rNKw8i3ZnZ2ev8vkaw9jYmBCtrFWwlrcoxgalGDjcGmD1d4Io5eF7toL60EUdjUrCeyx8l0joz6XTDVAuS/C3wqk6PNAUYH+jg8QACdXCgGrNgCGiE4dT4tJY3i+DBVhIvtXz2hYF1aXVX6srqFQqkq1Lo6D50lymsS17RRDAbe2GQokVovozbkNHi4v2Rg+GHKRSKZTLZWrXZ0FyF8q+jY0N4gu4xu/YhNQV+qSu5GCWfpTwp1gUEo82x0RcLpVgjUGhUOB9TCZzGIb8rKQ7HSvxoWYPTZELz7GI4xgefaTdeJ6HJEk4S97Lz1IrkWgURSDs7TgdFGGTmEk5As2TCfQXICLGmK1v0mmea2S8SRBwa+yO8iNwu5wlz5wrEzMRz7Im1CZWZzJz62HIayVnlxqJErIg12oTo+pCD0JFJBI9MIJkS+C4tonUdPzu7Sp+fV9EuVIPm8qjJXFx/PxZdB+qY8cqKFmH1avHwmpiD2Iazx4+Qjn3EcHrNJqvdOPUxSV8yTbi3t0z6pYF2C3HoAeqnRlL2PVWfGuN8MlpRkjtNawdxbf642hoD5iESWUoqa7X19eRyWSKk5OTz3dcN4U5cgO9H4D3xyxOmnq0HbiJz+iSHLVdbT+bzUotl8uZgYGBa7Ozs3N73mP/YAeyt86ioy2DVzfa8PhrC4I6X/Nlp0wqLnt6erC8vGxHRkb6ZmZmXlrCDmINPkyF+JEzSE6cw5xzAUE6BT8MhFi/U5H5+XkzOjp6f2pq6im9MztuBSuNj4+DMXS1CYXLA5uXPwSjNXIRRY4enOYcDw0NXZ+enn7BpHtet4WFhRU6gMVGst4UOBAYiAAKQOaPEMvI5/Ol4eHhO0T6RtrfBf/8z1Rc1sBfy4qXErjIUkIAAAAASUVORK5CYII="

/***/ }),
/* 1743 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1744 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOPSURBVHjapVVdaxNbFF2ZzCSZSZo20tQ2McIVxPpxQWwVof0T4psPii/+h9JyC1LoT+hTn4p/QCrFh77Yh3u1eFEotfjY0DQZYxrTJJPJTGbu3hsP1zC1D7rhcE6Sc9Zae519dmJhGIIjRsETfi9CDl7o6puFhYVHT54+fa4JgzAJi3zioVg1DTKdgbi+vv4XgBdDwMVi8Womnbli2zUMBgNkMhlYlgWn2xXwuK4jZZoCbtL3ivzHKBQKV2WhiJVIjdRks1mMjY0hnU4jmUzCojlNJKOjo8oy+L7PeyNjCOv/VGL8oxyiYNXDqQaBqGQD49+BlFVqqPsaskLTeMSQSqXQarVk9j1PANrtNjhMsqLrOCgWCmg2m/A8T/bphoFEIgGKKLCygryVTSeNBmq2jVMi8TwXpqEhbiRx6fIfoq757Rss0+R7YMvU+QjwkH8f/n2PTv0ICVJif6mjcdLAabuFbO4CJiYmcbD3Hl7nBK1mHbniDdy+M6vAfw48IOA+HXr39h9sbb+RdJMJnS40i9GREVSPazAJ5POnj7h35xquJ01UKgWuqvOBtXgc+dJl3L4/B8ePoVwuo9930HOo7DSg22kDg76ovHnvLsYmSgiCgMc5HhOwruty9ddu3cT0n7cQJyL2ziB/ZdYNmKaFtJVBpVqGbdfpNyNSRVrECtrg9nxaa2RLIEQarWNSZjpowfaQ91W5j86pQxn1+ezPFfdcF4eHh/j6tYHx/AUQBBOIag7P7wN+CBc9ycoy08jn81y/5wMH8gggr67+5QRThQlWyHUqQOoVBwSk6waVYgelUolrmdUr8KgVyUSCfeSHIODBIAbqH+yr9IlUMsWAMnuuDz2uU0VUuO45K7YkCCkiwKSY2XmWzSNUXsfHtnira4b47fY8qpA+7TMxPj6O6elp1Go1JnA3NjZeRqxQwcxTU1N80wI0eXESR0fHQmilLSLLCmmXup5t23LZ1Wo1XFxcfLC7u/vxLGA5nMvlsLOzw95xp+Ouxt2OPeRUuY8wmIDOzs5ib28vXFlZebK9vf2abYgAqw7V6XQwNzfHKkCbpUp6vR57zuC8lkxmZmawv78frq6uPtvc3HxBmEGkKphpbW2Nl2wDdy7xb35+Xvx2XZezkS6nRDiO4y0tLT3c2tp69SNoRPHBwUGFVJZjEvJQ2G9VJQwm4BRM4C4vLz8m0L8l/TPil/9MReU58R8qRZxgQ4XQTAAAAABJRU5ErkJggg=="

/***/ }),
/* 1745 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXpQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGjI2NioqLkpKS7u7u8PDw0tLSJCQkKCgoLCwsNjY2PDw8PT09Pz8/QEBAR0dHS0tLUFBQUVFRU1NTVlZWXFxcXV1dXl5eX19fY2NjZGRkZWVlZ2dnaGhoaWlpampqa2trb29vdHR0eHh4eXl5gYGBg4ODioqKjY2NlZWVl5iYnZ2doaGioqKirq6utra2vb6+wcHBxMXFyMjIzMzM0NHR0dHR1dbW2dnZ2tra29vb3Nzc3N3d3d3d3d7e4+Pj5OTk5OXl5ebm5ufn5+fn5+jo6Ojo6Onp6enp6erq6urq6+vr6+zs7Ozs7O3t7e3t7e7u7u7u7u/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////Erwi/QAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbK6+Pn+eVQA8wAAAR9JREFUGNNtkb1KA1EQhc8592bDalbUKgYbBRUbxRfxVfRVfJoUKewkZVpB1EZNRBSFZP/nWiSbiORUw8fHzDBDYl08gMj9g5Z5AO46lUACIAjoxnkA+B6rSCSSIohk3gTy+UxFFeA7FkeRFpiuyu2htqBjtJNug6W2Dt5nAM4fewmWtufz5LTnxH7ZU7MgSDByXk6RQeACQ6F7sqUW5JxxaTtntn1nAOSNf2xHhTAvV7Zkb7dnO4IbFFEIWtmhaG+ALOvMW9xsAhcyA4ksTMuqH8Icq3O4NywAXHyOdu+rfI7zp7R++bBAju1yVGU1SCC+Su31iKT9fE1aw2nZjER7HwCC1aMyLQEIABS3NiXSJYM8LRfn+Pu0UFVo8Jr8Ap+9am9E27m0AAAAAElFTkSuQmCC"

/***/ }),
/* 1746 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALRSURBVHjatVXNShtRGD0z+TdpjBYMpqCGWDCuBKmQvkZXLvoGRejWvbh35RN02Urrpl24UyiimwRshBjUWFKTYDTGzIwmt+d+GDtNQwotHji5M5OZ853v3Dt3DKUUHgNeuGAYRorDHP4PWfIQdPxA4tXd3Z1qWZayLFvZ9j0dRzm9vL0V3rrYbrdVJpN5A8D0ogeWbaPRaMA0Td1Bd/xFEO7j+3MNv9+PLkz0QD9wenoqgg/ibvJaf8q9/TMWYTKZTELj+PhYRsYkom7nqVRKxNyOBwvzzxIdN29ukJ6ZkYeZnbDT6QiZJ/b397GwsPCboDlAWKpPTk3h28EB6ufnaDFvmVyIc2FgaAiEFO3B4ChKpZIINHZ3EQ0G0eGEFnd20JieRjQeRycYgjEcFde8T7qJxWJIp9MDHBOJRAL5qyvEGUdsbw8GW6/Q/YvVVXA5uqPRo4ifnZ2BGJxxtVKR1iOMJDA5CXg88Gxuori1BYcTynWOC3bhYRFdyDf6FCMvMwMnTxCJRFCr1dBgli0WYTnG8BzjvJbQ0Xi9aFxeIsxj0+fD95MTtCj8N8fSooYzMSHUsIIBPKlWEc3nYbBgkK0PLy7CKBQQCoWQg2Cw4xtmO86cj46O4GEMGlWKtjlBNidPmSaCc3NQ5TI6FPVFo2KGsQxebmNjY+LiGcXZgTAQCACjo6glk92X5mE0WLzDmK6vr+1yuVwHWLvfcuMrLWJuhsNh2HoNU9w/MiKjh04vHAc2O/Ax6/X19ffFYvGzIkz0wTTXay9mZ2elC8uy9CYl0eTzh5ifn5fNZ3t759Py8vJbalZA/LFt6u0vl8vp7VK2R33O7GRLZI5y3Gw2FYVVNptVhUJBra2tfQEQd2v1cywbTD+4jbAIFPFhY+Pj0tLSax7+gBu9junM7bLrVEjoUTqp1+v2ysrKO7dTNw3+/OunySG/8vlz9MGjfUx/AnDM/EUtAulWAAAAAElFTkSuQmCC"

/***/ }),
/* 1747 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1748 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1749 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANDSURBVHjatZXLbttGFIZ/DileJFGX2EnoGGptdNFttn6HIFnkHbLKJgtvvPcueY2sukjRFEbQJ+jWCZKgsGyhiOVI1o2mxMsMyenhtFTbSPaiRQ7wczgLfjznP8NDTUqJrxHGPzeapn0H4P7/ZL4l/QbKeCmKx2mayiiOJX/ryyRJ/hTnkn8pIZQEKf0YqDXLMrm3t/cUADPwRcRJgiAI4IQ5+BUHY6yo5G+Borwvy+YCaQyYpokyVsFxjPFohA7bRCoExpOJWotwXRez2QyO46gK2+02ms0mNMbKBK4Hf5pJxKyNE8o2cytI0YRu6yo7P9chbAu5bsDQdVzGjBRD91Nkgxy6LqBXqpW14G9v6bi48NFpUcaeCVaU/Fc26p4EEl2XGeqcI9+2CKwjE6FYC7apzLueB62XgZPf3dNTBWw0Gmi2WhiPx3Bsu7BM2dHpdFCHXr7keitO+z786RiNeQNpUEF1cxesyATAJAa0mgdBe1aRCtz3c1SuUsihvNnjXc/F3GWonzPknqVsKC2gBpXn/d9rQtl79s1gOouIwhAu6kjIisFgANOykFDpQogiS3U6OOfY2dmBZVml7zeDu4MQi4DDDxLkMxN5hZrIDHCDw7AN1bSQMUhbojdOAZAmHHCymz3+fruBxUKH29ep005pw1IUy/tlRBHyLUtZdS04imJMp1PU5AbCRUhH7wJhGKqSScoKskvZMRqN1Meym3vIYoIZxvXg80BDxlo48RPIBvlXvwe7JpHnORJNUw8HV1eQsg7WdLBIU3wYziEYg1lh4tIP5gDkCviblkYNm2KnfQfYrq61IMuqqnmLhcD5+WdsuA3M0oV8/er1Dyfv3/0sKVbAlu1g6942slMOHifo9Xqo1arqg6jXXQyHA9i2Q5aF6Pc/49HDB+h2u3jz6s1PBwcHz4h5uWKF6TSNj79PEPhjtONNyAmA2hbiwrs6UNTo3HYhOEci5tjwTJydneHo6OiX/f39JwQdlKyVeVzM1SiKpHjnq7lb7GlGq1lLPqv9fD6Xw+FQHh8f589fvPgRwN2SUWoFXADU0H4fFLASqERRrOqFND6Tw8PDl2ugShpd/uuviZN+peeHWBNf7Wf6B58mJof0xI7pAAAAAElFTkSuQmCC"

/***/ }),
/* 1750 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMzSURBVHjatZVPaBxVHMc/bzKzO7vJ7jZ/dtP8adKSNgoptFgFg1QQ8eJFbK+13jxJbhG8iJecxEsOevOoCKJB4qGlRRE81PaQsiLtwmYxtM3sdGO33b8zOzPPeWE3DlkSrdIvfHnvzeHDd2Z+fJ+QUvIspBOREGIOOMv/Ux4ooBL3DFz0PE+22m3ZbjvScbp2Xenud6ez607Evu/LxcXF9wFNZ5/ajkOtVkPTNPUGvfVvA0T33bNSLBajpz5wDxYFamqN+ACwenYIGIimlQi+vh2Qv1/nl9//IJPOkRvyef35IS4vjj4FWIg96E5D44NrOqXNAo8qZeanRnlhfoKheJLftu6xXK7y8Ztp0gkDJS0C1tivLjSQgo9+TvLa8SSB12JhMsOJEZNX5uI8Nw5TE9O0Hu3w6Y/uXhjgYLDopv4qb3IsNcAX129iBh2yqTjT2RSzo4T7gCMJl+GxWbYf+1zN7/TB+xN3wXd2YpQebLNRuEcyNkDSNBhLJziV1Tk+onNu1uTk0RRG4PDDht2DHv6NgwDSeof05BHGUglcL8Dp+CEcEobA8+FBFZ60IGNq3Lhb60usH5RYei4xQ+fC+VNcv1lkPB3n1t0KmYTOgJoazcT+s4EYGGRmMvfvEhu6hvCbaEaWs7NzvP3SDLZts2nVuFWwKVoNBpMJhJSYI3OcmR4iCAL10/858USywZYTh1qaetsgJhJ8du02arSklFSbLpfeOM/Gls3lC6O4rouu64ePm9K7r+aoWDblZpmm5/Pr5hOywyFAxvCEyVR2nDsh9NKLGU6OuDSbTer1umNZVhWQ+kHjFjc0PnwrxydXHrLltXh5foZzJ7LU2i5SQqOjc2bKYN4sYFkGqrzW19e/LZVKV2SoaB8r4MWwpb4JvdcXfgCf/2Rx/6FPzTXJDMY5NixYOOqTFducPr1AsVhkbW3t++Xl5fdCXhmgrzZV/bVaLVWXu/WoziqNqsQgCHb3jUZDVioVmc/nZQiVq6urV4HxKEvjKRQNoqZAhvouTLq0tPRON2lP/YlVsmjKXlJlJbWqN6lWq87KysqX0aRRq2/8X68mF7ghpbShX8/sMv0LWuvrl/cko58AAAAASUVORK5CYII="

/***/ }),
/* 1751 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1752 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAVZQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDwz8/PqMf0qcf0tNL+ucbdvMrewtDlwtTrw9TrxcXFyMjIycnJysvLytXnzMzMzM3Pzc3Nzc/Rz8/P0Nnh0dHR0djh0d/00tLS0tPT0tPV0tni0trj09PT09XW09rj1NTU19fX19jY197l2NjY2dnZ2t7k2t/l29vb3Nzc3d3d3t7e3t/f39/f4ODg4eHh4uLi4+Pj5OTk5eXl5evy5ubm5+fn5+jo5+zz6Ojo6Oru6enp6erq6urq6uvr6+vr6+zs7Ozs7O3t7e3t7u7u7u/v7+/v7/Dw8PDw8fHx8vPz8/T09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////dslj5QAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+PvR6IwAAASRJREFUGBkFwTtuE1EUANBz73v+BAIiRBikNDQIUQYaKhbBGmBZ1LAZChSUiioSn4Qk4GCwx/M8wzkRAACgYloAAMOmorxZZ4pACPJdqbD8Ofm9/hqTO918u+foiIQ8rdtV67vSso3jVVIhXuSXOK5nT64PlwexShLypJRydbHctK5120wqxPOc7T/K2yVqVImE+JxkRomMiAwqeBaze4ucPiiL6X3nqFDOnnZ/f5XLuLLcGYMK7iZFkJEGJOSQiBDJMKKCVRCkGLvWeirE45jtLyIf5sFm3t+8H8cK8elVt7pwnT/+nH+/ddm6McFLSIb1t9eH/WYnwUkBbbebfDxd91RwbDKnKsPN9b8eEey9HSKEGPsP266HCKYFwNgaiAAAAP8BcItpuM66E+EAAAAASUVORK5CYII="

/***/ }),
/* 1753 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1754 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1755 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAK/SURBVHjatZVPSBRRHMe/M66zu1lq659MUsQ/hURgdtqOHaNbHroEQadCvESXTkF4SQiyUxDdqluZeLFDHbpU9AdcQm0xS5M2XWt1/83szNtf7/dwmGXGxf7gd/jOezNv+Mz3vf3tG42IsBsKoUKapvUAGMD/KSH9CZzYtdRZx3GoaJpkmhZZ1pZLJSr5bdvKdoWFEBSPx4cB6CH4ZFoWstksdF3nGbitZ0hV9reuWYZhwFUA7MIqgTq3nquC+V51MBBIm5rJYe5BGpurJejyEA6hpTOC/gttaDta90dgL2ViHdpAK9aTJt7d/o74tV40NEdAQoNja1j7XMDbW8vYe6gWp250K7ZeAdbhl5u0vxmheRNL07/Qe64d9bEIyo6OsoTCBpra63Dyaj+IDLy/981NWx2suescqQF1R9Gi69iYK4IYWgKDVZ9kyz421ImG/Lo70wA4uBz8A0Zr0HXxIJznP+XUFZzByiT4GQ2xHg1HrgzumDhQBaH6Why/04eNmy9hZoWCghQUjV2EaMx7NpC4KnyrKpoP16FxeBCz1z8qKDRIKHzQnRMHzOo704r9p2NYuptU0D1N3hgRoVwug7VjYjDU96ITlzrwJZVD5GsWPMow27Yh/+LKjuNUrWOv2H0FTwRsLmuorTdQbNRgrG1A7DMUWAjBL+EytVKpVAYA+cGBlGy+uzorMD+5BuEIhDuisB0b+VwOKysrCIfDnJampqYeLy4uTpNUYHfjXapQKJBpmmoXs02LXl1+QY+GPtCb+0tUzNpqLJPJ0MxMgmRSSiaTNDY29hTAAZe1LbhYLPJ2qcB8zWmEEAxR/Xw+T+l0mhKJBC0sLND4+PgzF+pax1/JC8JrSlJPJiYmR0ZGzsvuD3gKJuZklSndpGwpbnkmvBTW6OjoQzep3xqf/vHTVJJ+TUSr2Ea79jH9DYz6+WPGYvgMAAAAAElFTkSuQmCC"

/***/ }),
/* 1756 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1757 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1758 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1759 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAa1QTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRW8gdXMgfXsYjXsgiXsgjXskiX8ckYckmYcknZsovac0ybc03cM46cM48c8tCdMxCdNBBeNFGec9IfdFNfdNMgc1Yitdfjdhjl9txoN5+pd6Fqd+Kr+CWr+GVvOekveWmveelw+Czxd63x8fHyOS4ycnJy+25zc3NzeHC0NDR0OrB09PT0+7E1NTU1dXV1fDG2NnZ2dnZ2dra2evP29zc3Nzc3OjW3d3d3t/f3+Dg3+Dh4ODg4eLi4unf4+Pj4+7d5OTk5PTb5eXl5ebn5ubm5ufn5vHh5+fn5+jo6O/k6PXh6enp6erq6e3n6urq6uvr6+vr6+zs6/Po6/Xm7Ozs7O3t7O/q7e3t7e7u7u/v7u/w7+/v7/Dw8PDw8PDx8PHx8fHx8fHy8fLy8vLy8vPz8vnu8/Pz8/T09PT09PX19Pvw9fX19fb09fb29vb29vb39vf39/f39/j49/r1+Pj4+Pn5+Pv2+fn5+fz3+vr6+/v7/Pz8/f39/v7+7XAyZwAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABRklEQVQY023RuU5CYRAF4HNmfpCLBAUXQqNGEtFo7LG31Uew9w1MLFxex87O3kQbQzQkmggUmriAGAjb5W4W90JhmOrPl/OfKQaYOgQY/2ejAAaInXSESooQEMA6HcEAbHzFjIpRCilhgwFgBq3EINVPetkcww8hL0lcVEE1JEQjlu/AVaPevLseE4ZJALqKYcJL+In2jIGC4zSrzd1e3VvJONZ1cYMI++Wj/t7fqtqP5fTdyy0nbPVzFRM/KjX5nO/YiFifvHbr1anUtNPo2lfjNNvbh8lX//5z7SZ7vNNDtJL7i7U9a2FzmSPhwc+YJT9007b++l4j20rN+UHI0EwJLBJEZehK2YtK3tr55kxhlng4RHBuRyye9aWom9SijeDScaJuFOJCkui6wYUzGK+czEDOnCEiDowSBIFMxXan3dLxo8cfQNVxJ6PHRLMAAAAASUVORK5CYII="

/***/ }),
/* 1760 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatZXNTxNRFMXPmxmm7XQ0/aQklEQWmogWP1bQ6EJEExYmLpQViTGQsGCJiZE/R/0LNGliWCKtiS6s0GhMwEBpQluqdKadUvox3nlUahkKCcaTvMxLM+93zz0zd8pM08T/kISWGGNhAAP4N6XJ6FYHmBQ2jEq8VqtREV4JzFogHb223bQdiiJkWR4FYAOzvWoVlUoFgsBoCRzcueyF/oio/BdbFJYExoFnArP23g5mBBRFDuRF2FH4AcAGZqeCOYC7bcPt69jMhRPAdmh7bwcfieB0x21oF7gNdDr46fQLqKqCYNCHwQthjI2NYKC/ryMiS81mE1+/rSHx4TPW1jZRKhmo1esdYD55rYqjK6nvccMwoOtlbKS38WN9C4GgikcPJ9DbG4ClN29jyGSyKFeASxcHEe4PQZYlCCLD9eGhKPESNsfFYhl6SedtX740iFvRm1h+v4SXr17j188CipqOEBW4cjWCoaEIxSSh0WjCNJvY3+90LOAvOV1OqG7VapUKkOuNDK4N30Aul8XCwnPMzDxBiaz6/H3I5grIZfOo1xswIZBrR3ewKIhQFAVej5dcC3zldwqwxrzeqLec7UOSxIP3XQDFVgQstMC6gwUB/IBLccHj9fDcHE4nwWpIpze5u95QHz3cEHdIPDQpiuLuLkzqklfgsmVchMdDwAPnvANN10DijpvNupU/FaqiuldB2SgBBKQIKZZSAUDuWDAYI5DOoxBFEW5VgdQj8n0sFkPFMKCqQRR28hi/exuWrLcqmUxWp6amJmi/3iVjwboTuqaBtTJ3uRSMj99HdnuH2hYwMhLFfq16CE2lVmtzc3P3UqnUx64D4pAd/JAJyk3bhc/r58UCgSAikQjkHhmKW6GBKHLo6upKbX7+2YN4PL6EtuyO/X4fXE4Xb53o0LSilQ5/4pIkwe1W+QS6KNPkl+Te7Oz0ncXFxXcgnQQ2ZVmGPxCA0+E8jIXDW9+Mc+d9CPgDMGHmJx9PRhOJT8toyzbSZ/nPy9C5TZyg3920LIowlgzhAAAAAElFTkSuQmCC"

/***/ }),
/* 1761 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatZXNTxNRFMXPmxmm7XQ0/aQklEQWmogWP1bQ6EJEExYmLpQViTGQsGCJiZE/R/0LNGliWCKtiS6s0GhMwEBpQluqdKadUvox3nlUahkKCcaTvMxLM+93zz0zd8pM08T/kISWGGNhAAP4N6XJ6FYHmBQ2jEq8VqtREV4JzFogHb223bQdiiJkWR4FYAOzvWoVlUoFgsBoCRzcueyF/oio/BdbFJYExoFnArP23g5mBBRFDuRF2FH4AcAGZqeCOYC7bcPt69jMhRPAdmh7bwcfieB0x21oF7gNdDr46fQLqKqCYNCHwQthjI2NYKC/ryMiS81mE1+/rSHx4TPW1jZRKhmo1esdYD55rYqjK6nvccMwoOtlbKS38WN9C4GgikcPJ9DbG4ClN29jyGSyKFeASxcHEe4PQZYlCCLD9eGhKPESNsfFYhl6SedtX740iFvRm1h+v4SXr17j188CipqOEBW4cjWCoaEIxSSh0WjCNJvY3+90LOAvOV1OqG7VapUKkOuNDK4N30Aul8XCwnPMzDxBiaz6/H3I5grIZfOo1xswIZBrR3ewKIhQFAVej5dcC3zldwqwxrzeqLec7UOSxIP3XQDFVgQstMC6gwUB/IBLccHj9fDcHE4nwWpIpze5u95QHz3cEHdIPDQpiuLuLkzqklfgsmVchMdDwAPnvANN10DijpvNupU/FaqiuldB2SgBBKQIKZZSAUDuWDAYI5DOoxBFEW5VgdQj8n0sFkPFMKCqQRR28hi/exuWrLcqmUxWp6amJmi/3iVjwboTuqaBtTJ3uRSMj99HdnuH2hYwMhLFfq16CE2lVmtzc3P3UqnUx64D4pAd/JAJyk3bhc/r58UCgSAikQjkHhmKW6GBKHLo6upKbX7+2YN4PL6EtuyO/X4fXE4Xb53o0LSilQ5/4pIkwe1W+QS6KNPkl+Te7Oz0ncXFxXcgnQQ2ZVmGPxCA0+E8jIXDW9+Mc+d9CPgDMGHmJx9PRhOJT8toyzbSZ/nPy9C5TZyg3920LIowlgzhAAAAAElFTkSuQmCC"

/***/ }),
/* 1762 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1763 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1764 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1765 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1766 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatZXNTxNRFMXPmxmm7XQ0/aQklEQWmogWP1bQ6EJEExYmLpQViTGQsGCJiZE/R/0LNGliWCKtiS6s0GhMwEBpQluqdKadUvox3nlUahkKCcaTvMxLM+93zz0zd8pM08T/kISWGGNhAAP4N6XJ6FYHmBQ2jEq8VqtREV4JzFogHb223bQdiiJkWR4FYAOzvWoVlUoFgsBoCRzcueyF/oio/BdbFJYExoFnArP23g5mBBRFDuRF2FH4AcAGZqeCOYC7bcPt69jMhRPAdmh7bwcfieB0x21oF7gNdDr46fQLqKqCYNCHwQthjI2NYKC/ryMiS81mE1+/rSHx4TPW1jZRKhmo1esdYD55rYqjK6nvccMwoOtlbKS38WN9C4GgikcPJ9DbG4ClN29jyGSyKFeASxcHEe4PQZYlCCLD9eGhKPESNsfFYhl6SedtX740iFvRm1h+v4SXr17j188CipqOEBW4cjWCoaEIxSSh0WjCNJvY3+90LOAvOV1OqG7VapUKkOuNDK4N30Aul8XCwnPMzDxBiaz6/H3I5grIZfOo1xswIZBrR3ewKIhQFAVej5dcC3zldwqwxrzeqLec7UOSxIP3XQDFVgQstMC6gwUB/IBLccHj9fDcHE4nwWpIpze5u95QHz3cEHdIPDQpiuLuLkzqklfgsmVchMdDwAPnvANN10DijpvNupU/FaqiuldB2SgBBKQIKZZSAUDuWDAYI5DOoxBFEW5VgdQj8n0sFkPFMKCqQRR28hi/exuWrLcqmUxWp6amJmi/3iVjwboTuqaBtTJ3uRSMj99HdnuH2hYwMhLFfq16CE2lVmtzc3P3UqnUx64D4pAd/JAJyk3bhc/r58UCgSAikQjkHhmKW6GBKHLo6upKbX7+2YN4PL6EtuyO/X4fXE4Xb53o0LSilQ5/4pIkwe1W+QS6KNPkl+Te7Oz0ncXFxXcgnQQ2ZVmGPxCA0+E8jIXDW9+Mc+d9CPgDMGHmJx9PRhOJT8toyzbSZ/nPy9C5TZyg3920LIowlgzhAAAAAElFTkSuQmCC"

/***/ }),
/* 1767 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAmEAAAJhAcEwVfoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABzElEQVQYGQXBv2+MYQAA4Od9v/dw7rimbRq/QiWaroRdWDAa/BtiYhKTRMJCIrFKGEwWDAyGIiEuSDDUIEKipcpV71zv++57PU/KONw6droRAQAAKOun97t9Ejh47nYZgSiKgigIAoj108+ek0DIMqIoiqIoCIKAIBAgAVCIClEURUEQBAQACaBQKERreiqVKS0TkoAMSEAhKJS+qJR+Svo6Vs1qoQYkIAoqn4wt2aNpoOeQgQ/mTAqABES80hA1FAaakrZpW3zWEQEJiH57bWCHaNWUI7ZjZLOOZbsACYgWfTOhb5tt9qpRopL8VQMSEL03VIPtOoJlbZuUarUxIAHRLi+NlILdej6adsDAX+vaSkACgoPuGvrnqJbCjMIfTStWzCsBCYjm7PNbS6mSBWMNa35oaNsAJIDoorN6Hpi13wyyFQPzftkKSEAQ7HTFdV/1LDkhGtuw07KkVaogAQHMueGRRWt+ahvpmFV4l+9d9QYSEATASceNDPV91zBhIT+59vpydwMSAAFkWVYrrZv0LC/cXLjUHQIJAADIKiM/8otbTy50/wEkkNf6WzdHZLXKWNA0M3545/H57gCABN6eOgMAgMqr7joA/AeWpZ+SZ25x/QAAAABJRU5ErkJggg=="

/***/ }),
/* 1768 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALKSURBVHjatVXLbtNQED2+duzGCmVR+ggskgjRFhCoQiCR7+A32LDtvju66UewREJ0E/6AbbOiVVLUBkgTVXUTEz9i+zJzVddWXaIK1BNNJle2j889M3eiSSlxGzCQg6ZpDylt4P/QptgHK06D8CaKIun5vvT9QAbBRYShDK/GdKpimos4jmWz2XwLQBi4Aj8IMB6PIYTgHaQ5CxDyvy/WDNM0kULgCviB4+NjJszI8yFEIfL3pigo5kuNRuNS7XA4hEwSJBSsiLYMo1SCLoSyr1qtpooLxEXFR0eo1Rsgy2DbFSZSxCXDgOu6MC0LFr3EoHWcgARoMHQSMoOYmYm0zi9Q8jvdLgRls2RiaWUFJ4MB7s7PI44iULFgzc2hVqulamdb0ev1UKebDUPHyxcb0IRgNWrrD6rLKQln3glbNsuKDCukDEIgjCQODvYxZ5kIghC6LuB7PlljoET2LC4tYmHhHoSUMA1FPttj5+wM920bZVNg49kT1YImF0zX+brKDN/3IaMQlm3fTLEioI9Pirudb5iGIYSuqy3bZZsKOIYudOUvY3X10c0UVyoVVWmbPH7+9HF2ODJv8+rY+8zr7IAUMaDKgx8G/kqaFo77mo64ChoHs9utzu2WnULVr+Vy+ZJwNBrBsqyUjAq4kCoO+v2+A0Be225d6t21tXV4YUKFuQOGP1UHRG0buolzd4IkTrjQ3DFEHMvd3d2Ph4eHLUkoWqGKscrCYVs6Br96GPZ/YDJ2IOMQp8M+QDmYuDj63kHz9StSb6LVan3e3Nx8R5xDEApjk8dfu91WY9MZe/JsNFF59NuXrhfKc9eTg1NH9n6eyL29PdnpdOTOzs4XAMs5ruuJPc/jOazmLq/JRzVryUe1pnkhqcBMnLzf3v6Uks4kZoI8WUrIweDML3QcJ9ja2vqQJ82HRl//+tcUUnyl5we4Brf2Z/oH7lUDTKyMriIAAAAASUVORK5CYII="

/***/ }),
/* 1769 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPJSURBVHjapZVbaBxVGMd/M7PZ7CbZZJLNrblpYja6UqkUqlaJoCDtQ1vECr54wXgFwQeRQCAQljz5JvqYFwO+CSJIIKVEH3xIWptKLTFNajSJuWxz31vmPuPsIYsrQwLiH/6cmTPn/L5zvnPmHMnzPAAkX4DE/5NXFEDoCCoPDg6+/vbAQEqWZSREpShFvKJLUWUZUQSJjI2Njfjtv/af3RBH6uzs7InFah+WZQkfLoD/ClIyQFlZro6Ojh6OFOIfCVA52LJcpm+ukckZLP2xL95bmyI8mmii/7luAQ4oCJZLYAFdXNjhl7s7NLTWcXdll7m1Q9TaStaW9vh92+THmWU+fuc8DfFqAipPlc+kNNq5uS1+mt4gdkqlM9lBXbILNdlOY6KNw+oov21kWM97fJKaRNNM0cd3EFyeCk2zuH0nTShewyOnO7CrwqyHwzR3N5OXXHYdhX1HYjNns5G1+OzzKWRJQljAg2CRguvX72Oh0NXXiqpGkUIhzvfEqYlFWM676EoFVkihYNq4FZXcWNxnff2gBD0evLS8z9KOhqPIODZ4jkeN4rGb1zBdD9uTRLCMZtLUXofaFGfm1n3RN7B45eDllQPm81DXt4cdDqP7ddtZk7aowmYkRBpXTBvfkaoaDMNfzD+zJ4JFBwkXXLjx6zoN8SrkihCzqxmyOYPt3QKuYeNYNp7tYRwWsE2QZVeAT0xFT7eKUdDJbOX47odFfp57gIpH1HXx8jqSYSIVwZbF3dsrrN5bIZloPQksyDzW5zfSDSp9gFIw2UsfcOlMG1fPdXHhTDtRT8LVLOQiXNepCdv0P5sAOHnEly+dpv/JU9iHBgcb++QeZHBNm1hIItEW48rzvTTGotgFHUWG166cpb6+Ctu2TwADiiLz0XvP8FBjhFo1inZoMj2zRGtDhK6masKuQy6fJxqv5anH47z71tPoui5sWZZ73K4QTiRa+CJ1kS+/usnMmklVcx1Z3WIlnWVLM1HrIryUVPngjXNomkahUMA0TX18fPx7wCsDB9XSHCP16Yt8e+0etxZ3+GZ1V+yMlpjM+y8/wdlElHR6k3g8zvb2tjs0NHR1dnb2jufruBELi4+KzCsXklx8wUEzXSQgrHjInsXaX6v09vYyPz/vpVKpgampqWs+M5CKgErwipCMWqFQXyPhui6GYaBpDkAR6o6Ojn44MTFRPNyd4A9yMrz8lhAGirvAGh4efnVycnKiDBoELywsbKTT6bVSKspPvFIQx3GE8/m8MTIy8qYPnRHTJ6jyy1T+j5epKxbqGP0NxOS364lts5YAAAAASUVORK5CYII="

/***/ }),
/* 1770 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAblQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRAIIABXUFCHMHEYkNFGUOFYUNGY4UHY8WHZASI2wdJZMYJpQdJ50GKJ4GKZMgKZgbLJUgMpsiNJooNZgnN5ozOdAAPJ4rQqAySZhHStgJS6hCTtEYV7ZQV785WMAzXrNPZ7Jcab1gbLFebdk/btk/e8Fxg95VkciRlOhooOSLo9ChqeaYqr6oruuXsbGxtLS0t7e3uLi4vta8wuPCx8fHycnJy8zMzMzMzc3Nz8/P0NDQ0NDR09PT1efV19fX2NjY29vb3/Td4eLi4+Pj5ebn5+jo5+jp6Pfj6Pfm6erq6urq6uvr6+zs7O3t7e3t7e7u7u/v7u/w7vnq8PDw8PDx8PHx8Pvp8fHy8fLy8vLy8vPz8vny8/Pz8/T08//r9PT09PX19Pj09Pzv9P/s9fX19fb29vb29vb39vf39/f39/j49/n39//t9//w+Pj4+Pn5+P/x+fn5+fv5+f/w+f/y+vr6+v7z+/v7+/z8+/38+//3+//5/Pz8/f39/f79/f/8/v7+////pf7TEwAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABOklEQVR42m3Rv0oDQRDH8d/M7O79SUxAwUICAVGwttDWd7ARfQqfwOhT2IuN+g4B0TKVjyAY0IvGhMv92bucnNlrxKmWT/Flh8H/QwCZP5ZXUIA+nzIJkyICGFgb5DXT+5wUE3HQDoP0rS7UDGER6vboaWLzYw3GipUm5p3rIupp+2WUdswkFOST7f6e3IVLGMciJGYenk7VJ8P/jXDN+VhrYZQcGIxi7Vh9tJRSGh48QfuFHFO+pQwToF8t9hM0EYKRyILxnYFIHJM3FjXNoFVeYBTA/YT6Y99fWMh9vER82LDq9sKHrMBtEPkbB0VRrRjcvZmlDI7WO4+WhqWLcKmNv1udYXiEcpA5ZkpPCFUpSYryylq4CIqYNQlmRXlpEzTczIIubAq3TtXqtDxDAmw+J+l/t7RL9/gBKCFkZcGDIM8AAAAASUVORK5CYII="

/***/ }),
/* 1771 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1772 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1773 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1774 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRtbW1xMTEycnJycnKzc3Nz0kTz0oU0E0Y0E4Z0VIf0VMg0lQh0lUj0tPT09PT09TU1dXV1dbW1dbX1mc71tbW1tfX12k9121C125E19fX2G5D2NjY2XJJ2dra2tvb29vb29zc3Nzc3N3d3YRg3t7e3t/f34dj4ODg4OHh4eHh4eLi4uLi4uPj4+Pj5OTk5eXl5ebm5ubm5+fn5+jp6K6W6Ojo6Onp6erq6rik6urq6uvr6+vr6+zs7OXh7Ozs7O3t7dHG7e3t7e7u7u7u7u/v7u/w78/C79HF7+jk7+/v7/Dw8O/v8PDw8PDx8PHx8fHx8fHy8fLy8tfN8uvo8vLy8vPz8/Pz8/T09PT09PX19enk9fX19fb29uTd9vb29vb39vf39/f39/j4+PX0+Pj4+Pn5+fb1+fn5+vr6+/j2+/v7/Pj3/Pv6/Pz8/f39/v7+P7afIQAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABSElEQVR42m3OP0tCYRQG8Oec9483NL2Zg1BiQkuDFBItLUFbU42N0eTQB2mIKBrb+gqtDU5JELjllhGUNJUa93pfvW9eudcges5y+PFwOBL/ZsKk/1hgI1b1L6tBJMlCMOCcBdP222Px1f1c6C/53soikCdEDKciq0qwhmIxlmBgyrL3oQq+We7mQmUzRZEwNLyAB26PMk5xPmEulR0lxSTEEOCETRPi4P1p5O7cHAGzdna3safaG5WWZxmgmEmmKS0HZdRgmYCYpWYI5XZWH9YwVr9tFqRpq9lys7hGHTM2h0GquC9AxylLCTN3BspznG+5fa+1WLeYMsQw9EK3O1e6fbGcvhvHR/o1yQJVQuME9nwYM4cCAAFmAHthDOIj7edUTwfZQjAyV8ZDwpuZ6EeyXb40PmK2OidA0eT94QgJm1MkMWG8/AAJ0GVesMXxTAAAAABJRU5ErkJggg=="

/***/ }),
/* 1775 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMlQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDw0tLSz8/P0tLT09PT1tbW29vb3d3d5+jo6erq6urq6uvr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////UnYNIgAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+PvR6IwAAAMpJREFUeNpt0UFuwyAUBNA/851KWeQm3fb+F+gFeoZ2k1ZxTAymA5+FHWU+RtbT4AUG7FUmPW/+hNvS2D/upPVz0Bg/vbFdv0EHCbD5xawz4W2RwRwsEnqv75iUa3X2QzvYRcpgabg1xmBj15MQu7aIPrlRiGObXTUBfVNCAaubZLQBhpZ13c6DBW4mtXybH+W31mAq0Ev5+1k851RpkSinOb1jXYoF0+OeHwlfy31t396lbqWkWRptnk8TCfhlDjXg8NNqzjb4Vf4BnHw3gMNR7JoAAAAASUVORK5CYII="

/***/ }),
/* 1776 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAmEAAAJhAcEwVfoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABzElEQVQYGQXBv2+MYQAA4Od9v/dw7rimbRq/QiWaroRdWDAa/BtiYhKTRMJCIrFKGEwWDAyGIiEuSDDUIEKipcpV71zv++57PU/KONw6droRAQAAKOun97t9Ejh47nYZgSiKgigIAoj108+ek0DIMqIoiqIoCIKAIBAgAVCIClEURUEQBAQACaBQKERreiqVKS0TkoAMSEAhKJS+qJR+Svo6Vs1qoQYkIAoqn4wt2aNpoOeQgQ/mTAqABES80hA1FAaakrZpW3zWEQEJiH57bWCHaNWUI7ZjZLOOZbsACYgWfTOhb5tt9qpRopL8VQMSEL03VIPtOoJlbZuUarUxIAHRLi+NlILdej6adsDAX+vaSkACgoPuGvrnqJbCjMIfTStWzCsBCYjm7PNbS6mSBWMNa35oaNsAJIDoorN6Hpi13wyyFQPzftkKSEAQ7HTFdV/1LDkhGtuw07KkVaogAQHMueGRRWt+ahvpmFV4l+9d9QYSEATASceNDPV91zBhIT+59vpydwMSAAFkWVYrrZv0LC/cXLjUHQIJAADIKiM/8otbTy50/wEkkNf6WzdHZLXKWNA0M3545/H57gCABN6eOgMAgMqr7joA/AeWpZ+SZ25x/QAAAABJRU5ErkJggg=="

/***/ }),
/* 1777 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAdFQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRj2syj2wzlXM8lnQ/l3VAmHdDn4FRoYNToYNUo4VXo4dapIlepopfp4pdp45kqI1hqpFqrJJorJRrrJRtrZNqr5Zvr5l3sJl0spp0tJ14tZ14tZ55tqKBt6B8t6KAuKF9vaiGvqqKvquNv6qKwbCVx7WYx7abx8fHycnJy7+tzMS4zc3NzsCpzsS00NDR0cKr0ce408Ww09PT1NTU1cy81dXV1dbW19DE2NnZ2dra2tTK2tvb29rY3Nzc3dfO3d3b3t/f4NjL4N3Y4OHh4djK4dzT4eLj4uDe4uPj4+Pj5N3R5OTk5d/X5eDX5eXl5ebm5uHY5ubm5ufo5+DV5+Pe5+fn5+jo6OHW6Ojo6enp6erq6ufi6urq6uvr6+vr6+zs7O3t7e3t7e7u7u7u7u/v7u/w7+/v7/Dw8O3o8O7q8PDw8PDx8PHx8fHx8fHy8fLy8u7o8vDu8vLv8vLy8vPz8/Pz8/T09PT09PX19fTx9fX19fb29vb29vb39vf39/b09/f39/j4+Pj4+Pn5+fn5+vr6+/v7/Pz8/f39/v7+sYNa3wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABW0lEQVQY023Ru0oDURDG8e+bc3bX1TWrUQOmUrxgE8FUgiCCtYVg5QNYW3gBn8DC2sLCypewslTBa2wCChIwKBKMxssmOVnXIrsW4lTDj+HfDPDvEKD9x5oRCNjbbxaFFBIQwFltQgN8Kr1KR8PPilAJkCagAdhej0sRZVE0AYU2a61FKUtpIQmRmC2UOtKPQ529ihRBwuLVLnXq9n0xG+5uHdjLCRduMtPp8PhTzvpULc+Ei5jI+N1eZr/W3KtczwIQAAzI8l2xXhjTQ+OygPhaSZj3NcHzj6lKV3U4iXS/HE66H+V0Ibx/ds7ySWRGStVn5+lh0Jv3citJhDnn/KLT2HNHAyPVaaMigICz0yy7LV96wYerL6NPg7B9LeGLW6m3fOtkCdF6I4zb4rvuYL9TMl+INo2J20A4SqboB61owwT45Wz7LQHXTB0xR0oIgkCq0Gj990vzHS8/ZB5rGXc9Dd4AAAAASUVORK5CYII="

/***/ }),
/* 1778 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMlQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDw0tLSz8/P0tLT09PT1tbW29vb3d3d5+jo6erq6urq6uvr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////UnYNIgAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+PvR6IwAAAMpJREFUeNpt0UFuwyAUBNA/851KWeQm3fb+F+gFeoZ2k1ZxTAymA5+FHWU+RtbT4AUG7FUmPW/+hNvS2D/upPVz0Bg/vbFdv0EHCbD5xawz4W2RwRwsEnqv75iUa3X2QzvYRcpgabg1xmBj15MQu7aIPrlRiGObXTUBfVNCAaubZLQBhpZ13c6DBW4mtXybH+W31mAq0Ev5+1k851RpkSinOb1jXYoF0+OeHwlfy31t396lbqWkWRptnk8TCfhlDjXg8NNqzjb4Vf4BnHw3gMNR7JoAAAAASUVORK5CYII="

/***/ }),
/* 1779 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKSSURBVDiNtZU9aBRBFMf/b+5yZ/zAEBKiECFi1EZBywi2klQWYmmrjVwhXCtYnE20T21hJeaDSJSgCKJgpSSFmNNcRCKXxJDFyyW78/Gexd2ue3d7R4Jk4DEzu8Pv/d+bNzMkIjiIlo5PiOgMgEv/yVwEsAQRiQzADWut7Pq++H4gQVA3rUU3mzGijRETM+ecjIyM3AWg0s3u/CBApVKBUgpEFPWR1UL7N67PASCTySSnop4OKKUagCoOJmoLJqIOYCBRrWoGx0F7AoegEE4Eio8TwGGvOoGRAI3UhhHEBLRrKikVcSi+b8C9/lJz5hi7D1+AtjXMh2/glc3GjY05agFHobHAzXxGMPEWdCRb+7ZWAVIEdbwbKpVCdeIN/OlPgOMW9a2K62rN43nIzy0czo8hc/U8lFJwK7+ROtkDIkLmyjCO5q7BLq/jz4OpfSimWl5IUbQpbnkDarA3WkMpBViGaLs3xUSE7vwo1FA/qo9eQr8vgohgl8roGuoDESF49xXe/WdInepFT+EmmLmB01oVIbwrhUPXLyNzcRD8YxOyHcD+2kL6dD+ICFIJcOzeGNS5ARh2EG2RTqc7gMParDtIDw+Azp4AEaHvyZ0o5MzoBRhj4Ps+nHNgZiilgnK57AGQxJPXXELN+XPOQWuNarWK1dVVZLNZWGtldnb2ealUeiXxmy283YwxsrOzI77vi9ZajDFirRXnnDCzMLP4vi+e58nCwqIwsxSLRRkfH58GMBCy2lZFu1PFzHDOwVoLIqBUKmFubm4+n8/fFpG1cF0iuFMLFTEzREQmp6ZmcrncrTi0YWGYCudcQ/jxFIiIMLNorcXzvKBQKDyNhx83ir95+3yaNICPIrKe9JMO6jH9C8QNoZEEd8jkAAAAAElFTkSuQmCC"

/***/ }),
/* 1780 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAObSURBVHjatZTNixxFGMaf6u/u6fna2WwSBRUlrITkEPQUBcE/QvCiHj15SLzkrF4CHnKQGDB+gaDgRVe8CH5FhaCCRozJJtm4Ie5kZ5PsTE/PzHZ3ffhW9c6g25iLbME7T9VbVb+qeaqqmVIKu1Es7FJxdibeeeOl/R239ozjeX7BuVtI5QsuPMcRnf5guJqO5HrgO4XH7MLxXM4E5+sb3XPHT37cuyf4qSNHLirmtIqiQJ5TkBZ5DsY2sdCxqd1E4PvwA99oQJpPBqsAHvpPKz45e+LdcSZbQghwCq3TuuRjQOXgnBbinLSMouDwwtaDp1957mQFbKDvvXzw0cXF5wPfLYGcgEb5dnsEpsbIc27gvOCzBaSUePLoE8fPvvbCYsWKuXjhW9uyzODc2JAjIyuyLMMwHWNPnIABWL6WodmIUIsCxFGEONb1ELVaZLl++BmAAzs8VhnEhBIKzJFwGYPv2uB+ACU52nsPApR7OEkJ5MOCBJSAzFMkW30MbgtYSuyr7Jh2OtLKaLJj2wCFB0Dfcy4kLVb21WOBKPQgtQWigBCkcjqOjyoek08pdpQplHMByw5gOwEKqisiKaVD7VCk9wCXQCGkhhiokAp3NyfI4UKKGVjrvxeRKq1YsVXw0TCd4OqfXY02uTAMsH9v20y6dOkmpLwBReAsC9HvD80hg6B72nSAgQshUbXCUmx0a2MTp95egue5Js6d/x2vnvoIV66v4fT7n2OuEaLdDBG4Dj749HsMkhFWbvRw5sNvtA1gTFatoHSqL/tgOEIjDnHfwhyePnoYyytr6K7fQZKO8eOvV/DThWsIfRv6311e6eLy9S4OHbgfUiow161a4QdOmiQZ7WKMr374DR7t6vwvy3j88COYb8dICBR4jvHz4tWbSMdbsG2GffMNLH19AY8degD1wB9OebPP5tJbJ15vNKJjdzfT0mMGtOoRHJqcZwXu9BMDVULCdS3zcIQQZmizHpirmE7EmWePvfnizApKWqtrvbYFiflWhE6rhk4zgsWUedK2pShfK4MOqh65up/aMeYop6Hailsbg4ZmTcFGycdIcH3hC0gdfDsELx+BiWJbpQFJpUhN3ej67WEwZU49ZuQv05PAbCiQMJgiwcAoB8suhzNBQVmCMcjSNiXMokm2ZVj/BKvvfv7jy796vQZ5bhvblaq8QqNmtfJHKpMxfVQXvY30C5OYHV7ps0/i4f+VnHjZDLwb5W9TwlimdjoYIQAAAABJRU5ErkJggg=="

/***/ }),
/* 1781 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANnSURBVHjatZVfaFtVHMc/yb1Nm9QMVge1QkptsdnDnH3woZ0vgrjom9gxECeIIoMqneuUjQ6EPXQPsgnzwQcRfJiOUvzTzbY6JjghIt3DYHV/almS1W1Zlq5p/t97k3tzPLnkH9EGUfaFL+cezv19zjm/e+7vOIQQPAypNMjhcAwAQ/w//Q6sIISoGRg1TVNoui503RCGUXGhIArNLhZtFxtsWZYYGRl5F3CqNEk3DDKZDE6ns7yDals3QONzpQ/gcrmoykmTqjDpOrzm+piqKHx5+itmZr5pfLcFGOrAakAZpKrItPDegQneGRvnwYN1fL5eVlfv/itwbcsyX7RJWDgUIvBCgLGxA6SSKXbtepYn+voJBoP0D/Rx5MhBFAkt29kAVmlWZaUfHDrMoN9PIPA8r+3bJ4MUYvE4r+x5GY/bXVtAk1qmwg54aufTLPx4kT9WQvT2+lj4YR5dy5NJZ9i791VOnfqEUqnExMT7RCK3KhO1WnEFjEPg9bZzMxRm+foynke6+HXxMmfPLeBq95DOanx47DjR6H1SqXQVuim4dgp6eroZffso/sF+7my7hX+rh75uL/t3PopesMhoJnnd4tPPPqejo92Oa/nx6nAnPY/7mL6U4O6GhmmV8LpddLQ5cKkOOjsUSqLE1aSn6US0PhW2wxkPO3xbbPBaukA0kUczSuQMi3sJnY1ckTWxFSGEne+KWq/Yki/evB0jXdzGm4EhOjtdRNdzfPHzbU7MhiiY9gRs73ZjmhbyN5et2QJc2ZIoCX45f460YZDWu3hm+5OcDq7y3aU7LIbX+elqnETWJLvyG7qukc/nyWazRiwWSwJC3ey4gSBz+QxXdjzHwOAAZszJFm8X97I5FEXhwvUCjzmWcSevyP4eotGomJub+zYSiZwXUiqbSI5h6imuTR9CfeMj2nr9vLV7iHTOQFUc/HltkaW5jwleXCAcDjM7O/v95OTkQRm3BmAX+obcjsry93U5VzduLDM9PcPGRgKzaKFZCkXakEwUIeGiwIsv7WZ4eJj5+fkL4+Pjr0vWfapqrscSLDRNK9dhu+6W+3Iiu9bKL2/3ZS5FPB4XS0tLpRMnT54Fum1G3X8HS0AjrAq0LVVu7QmTyaQxNTV1pgptsp2K/3o1FYBFGR/nH/TQLtO/AHgtItLG1AZfAAAAAElFTkSuQmCC"

/***/ }),
/* 1782 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPaSURBVDiNtZXdb5NVHMc/zznd2g7onuK6l8KzzYHA4lQumHgFMWh0BC4EMWBUbgx649UShcgVMRr/AfWGsBsTTIZxUWtAIVEhDELUpC176daFAKN72j593/a0XY8XuFG3bokxnOTk5HdOzud88/0l36MppXgcw1FdaJq2Bdj5P5lBYNyxbHOnbduDhcIsmqYtPrZsBdCqxDyqnc569u7d+8H169cnloOJxxNEIlGkFAghEUJQLtvEEwmy2TRSOmj06LS2tuJyuavg0NrassRZAdY0gZQSKQVKKULhv6ivc4CmUSqVSCbixOMmf/x5C1+Tjz17XkQIsXR3DbCGlIJCocDoWJjNm/1Eo1MkEwkWKopcLotpmqiKor29g/HIGMeOvoWuexHikUWiFlgIwchIkCbfE1iWBcAzzz7HwQMHOfTaIXp7n6dUKhGJjBOJTHD+/NdIKZb6sKrikdEwvuZmZmIxKhXFsaNv4vf7uXPnDnO2TVfXVp7auo3Tpz/GNE0WygsEfgpw/J3jayvO5XIIoeGsd9L3ah/1Tie//X6Vuvp6ivM2v169CkLy8it9bDYMkkmLUDC4thWgKJWK5PMFlFJ0d3dze2QUXdcZG4swHpmkaBexUil2734BIQSpdIoHsQdUObHSikwmQ7lcwrIsNno3AhAKhfF4PFhJC7tYxNPYSGF2lu7up3G63cQno2wrl0mnM6uDda/O3bv3yGVz9PT0kM1mcTpdWFaKDR4Pfo+HhnXrKORzCCmYm51F13WEw4HX610dLDRBg9tNOBRieHiYXbt66Xqyg9vjETYZBi6Xm2h0kpJtc+3aNVyuBjo7GzEM49+cWs1ramrGUVfHeCTCifdOcPPmLXKpFIHAj1y6dBGpaYRCQQKBAPcfTLPB42H7th1UB9oKxQB9+/cTDAZpN9pxuVwMDJyls2sLO7Z3owG/XLnM6OgIm4xNlIplWtv8vLRvH/l8fj4Wi6UBVRPskHUcOfIG6UyaTCbDxMQkN4aHSSaTKBSmmaC5pZlGTyNtLS28fvgQ8/NzDAyc+35qauqiUkpp1fI1TTucTKYGTTOOlIJk0uLcwFnu3Z8mm83icDhQKNav34Db7aazo4PPP/uUaDTKhQvf/nDy5EfvKqVmAFaALSs1ODPzECzlw3QLh0NEp6aYnp5GSIlhGPjb/Hh1Hb+/jaGh737u7+9/exG6Ktg04wgh/4nOhxlQPYvFIrlcDrs4r65cvjx06tSp96uhNZvX0ODG52taCqPqoF8M9Uqlgtvtsr/46stvPjlz5sPl0FqK/8vXVARuKKXMWofa4/pM/wZte648O12v8AAAAABJRU5ErkJggg=="

/***/ }),
/* 1783 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALTSURBVDiNtZU/TyNHGIefd3axWRtj0CXkRE46EEi0qZCQ7ltcnTZVhJSChp6PQsrklBQoCl8gTZp0aVwY6SCG4Hh37d2dP28KYmexDacoupFe7ezO7DO/+c07M6KqfIwS119EZA/44n8yfwN+R1VnAbx1zumkKLQoSi3Lf6KqtJoPa7WyVm0tvPd6dHT0NWDi+eGKsiRNU4wx5HlOqQ0G4wYCNMWxGlsCihGDhoAxBoBPN9psdNszjpkHiwj9fh9jDE5XqKTLKLzgr/CCwgbEZbjsT8SmuMkQbAo2ZZRPEJHlHgMIsLu7i4jw680GArzZzzAiDN4P2X75kvF4TLvdpigKkiQBEaqy/ABYhKt+n9c7O2zqDVEsjG5LEGGcpzj3Cc45nHN473HOISKICOY5MCK83tlBRNiIbklWEzY3txARVptNxJgHSO05FVQvix4DV1dXj0afKpqqkmfiacXA9vY2YgyNRoMkSVhfX0dEiKKITqeDMYZOp0Mcx7TbD5kwGo0eMZZ6fDsY8PmrV1RVRVEUZHmOESHLMkSEPM8BKIqCEAIAqvphxWtra4+smNblCXvm2+CJPA4hLHSch9Tbazv3ecXj8Rjm1M3XRQRVxTlHCIEQAs65Z8AibG1tITBbvE6nM1PZ7XYREVqtFtZaVlZW8N6TpilZlpXX19dDQJfuvH6/z8HBAVVVMZlMSNN0NhMRYTQaUZYl9/f3DIdDkiQhhKDn5+ff9Xq9n1RVFzwG2N/fXzKRf+0IIWCt5e7ujsPDQ1qtFpeXlz+enp5+o6oDWLJ4AL1eb2Hx6tAQAt57ms0mvV6Pi4uLn09OTr5S1Ztpv6Xgvb09AOI4ptFozL5HUfTwkzGEEIiiSL9/9+6H4+PjL+tQgIWD3nuv1lp1zqn3Xr33GkLQEIKqqoYQtKoqHQ6H5dnZ2bfAZ3XGNKSef//xaqqAX1T1j2WN8rEu078BUiKobV6+YewAAAAASUVORK5CYII="

/***/ }),
/* 1784 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALoSURBVDiNtZU7bBxFHMZ/M7HPZwyOcZwQIhJZeYAshBRCZUpKREcKGiQkKlDkBtFQISE3WEKKUyEhOqCDELkJBRQ0gHhIPqEknByDg8XhB5xzPt/uzuOjuNvz3flsgoCRPu2OZvc3337z3xkjif+jDXR2jDFngPP/klkCfkJSW8Dz3ns1kkRJkipNW8oyZb1yTplzch0KIWh6evoSYAd6p0vSlFqthrUWY0z72lbz03bvW32AQqHQP4pWHFhru4C2E2zMvmBjzAFg2OO2srjNzQ82uLuWYbEEL46eKjL10nGOPz5yj+DcZWkTc/4Ym+WE7y7/xvQbZzk8UUTB4J1h/fYO375zh/sfGeSZt05jDNgOsN2zprnTqQkGbiWsXP+Tsy+cYHS8SPSW6Aw4OHJihKdfn0Iq8P17v3a57Qs2ec7FQ+j0MEetZetmA3lLzCA6g7xFziBneOLiKQ7XN3fz39dxHoe12OFDTL78MP7zP1i/3YI704QHg7GG8TOGx167cA+Oe6pgYHSQJ6+cY+vtL0lqoRmFmtCxSTE83lMxf+fYtlwbY5h4dISxSxe48eaPIAMGxibZF7qv414BnHvuGA8+O87Ku2XGJuG+I7tjkogxHgzO4bR+gM4JnnrlJD9Xtin+UsNgiDHinCPLMrIsw3vfZuyp43ax013wEty9YxgcLdAYMxTWtwgPFHDOEUIgxoi1Nq1UKlVAff+8vVEY1m4Ebl1bJ/jA0MlhnHfUt7dZXV1laGgI770WFhY+Xl5evq7OnS3f3Zxz2tnZUZIkyrJMLkn11atf6KOLP+ib91fUqDklSaJqtarFxZJijCqXy5qbm/sUeKjN6gduNBpK07QJdk7ee4UQFGOU9171el0bGxsqlUpaWlrS/Pz8Z51QSf0X76CWvxhjRJI+uXr12szMzIuSfu/7YO44hNDlMncaY5QkxRiVZZmq1Wo6Ozv7Ya/TXKbzzPuHR1MGfC1prd9gF/i/bH8BjPr5YxIqTpMAAAAASUVORK5CYII="

/***/ }),
/* 1785 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXpQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGjI2NioqLkpKS7u7u8PDw0tLSJCQkKCgoLCwsNjY2PDw8PT09Pz8/QEBAR0dHS0tLUFBQUVFRU1NTVlZWXFxcXV1dXl5eX19fY2NjZGRkZWVlZ2dnaGhoaWlpampqa2trb29vdHR0eHh4eXl5gYGBg4ODioqKjY2NlZWVl5iYnZ2doaGioqKirq6utra2vb6+wcHBxMXFyMjIzMzM0NHR0dHR1dbW2dnZ2tra29vb3Nzc3N3d3d3d3d7e4+Pj5OTk5OXl5ebm5ufn5+fn5+jo6Ojo6Onp6enp6erq6urq6+vr6+zs7Ozs7O3t7e3t7e7u7u7u7u/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////Erwi/QAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbK6+Pn+eVQA8wAAAR9JREFUGNNtkb1KA1EQhc8592bDalbUKgYbBRUbxRfxVfRVfJoUKewkZVpB1EZNRBSFZP/nWiSbiORUw8fHzDBDYl08gMj9g5Z5AO46lUACIAjoxnkA+B6rSCSSIohk3gTy+UxFFeA7FkeRFpiuyu2htqBjtJNug6W2Dt5nAM4fewmWtufz5LTnxH7ZU7MgSDByXk6RQeACQ6F7sqUW5JxxaTtntn1nAOSNf2xHhTAvV7Zkb7dnO4IbFFEIWtmhaG+ALOvMW9xsAhcyA4ksTMuqH8Icq3O4NywAXHyOdu+rfI7zp7R++bBAju1yVGU1SCC+Su31iKT9fE1aw2nZjER7HwCC1aMyLQEIABS3NiXSJYM8LRfn+Pu0UFVo8Jr8Ap+9am9E27m0AAAAAElFTkSuQmCC"

/***/ }),
/* 1786 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAW5QTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGjI2NioqLkpKS7u7u8PDw0tLSGRkZHx8fIiIjKCgoMDAwNjY2QEBASEhIS0tLTExMTU1NVVVVWVlZWlpaY2NjZ2dna2trbGxsbm5ub29vdXV1dnZ2fX19fn5+f39/goKCh4eHiYmJjY2Njo6Oj4+PkJCQkZGRmJiYmpqam5ubnZ2dnp6epqamp6enrq6usbGxtLS0vLy8zMzMzc3Nzs7Oz8/P0NDQ09PT1dXV1tbW2NjY2tra29vb3d3d3d7e39/f4ODg4+Pj5+jo6Ojo6erq6urq6uvr6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////NQYQYgAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbK6+Pn+eVQA8wAAAR9JREFUGNNtkc1KQmEYhOfn84iGRlHrdtGmdVcQtOw+6na6k3YtWkkQYQQmQUjQQkJIsZLj6fy10CMVzvJhmHdehsQ6BQCR/8FiHgD4PJZAAiBKSBcOADAdSaZEqpw0my1AACDZtB1CGA3bQYts0LJkiextB1RYsmxZ7KSM8Ntty+pPrEUsAFC2HZwP9iNJXGLItlW73dt0SVZuW3Ko9YojRIHkMhuKp7Mifa1fKvbT7s6qSXsr6KahPOPGQYmVm1RXp+TDYzErGlVB0C/vxyTSrBjnV2W5wNLn/aGBPMnm47ssWeBkOB58P78l9a8xT/rZPAcJNM7imkSy+JhMos4srU4uVRZ5N43T6h01akEi3bpO4hQAyD+jlVmGCq/RD3HRX/P6+8HOAAAAAElFTkSuQmCC"

/***/ }),
/* 1787 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPcSURBVDiNpZVPaFxFHMc/M+/te2+zm03S1Pw32lrS6qHansSLHkQotAoevCjSgFAMHhRRioKVSPGgSL3US0/WInrxD9Wq0IOgeCg91Gqz9J+maU2a7DY2efv27Zs3Mx42L+4mtYL+4McM8x6f3/f3nWFGWGsBEEIIQPD/wtoVoJut7N+//+m94+OTYqUCQiCaBaG50qwqJQDyFtAjR468AXzUBh4ZGdlSLHZuklIgpUSIlTErkmVL0axgFsPDw1uyuWx+FytiZFsKIRBr1m6XraxVxdaKlR/EqlqsYKZ8g+VagsGhmHPJ5V06Cg5vXX6Jffe+yPah+1sNpk1xZl1mg5SSpUrM2e+u4Xl1uvsTCv0eG0d6GB7p4Y7BDVRrN3jlq1eRQrQpXgfOrBBCsFSJmTtfY3TMobOYUPA1QaAwrsXLu/h5l85iwI9Xf+DrS5824VmXtwILIcAKpn9epK9LEAiD7zh0BA6lIEG7Cuk75DyJ7/oc2n2It8+/h7Hm9oqFEMyUqwxtDPCtQaocjgpwjERFKY3wJolWGGPwyDG+/TleHn2dd79/H7HmhLhrwY3I0N3dgSBFStCRJjQdDG7uxVrLwvUaokuTw6Ue1nmw8BAfT31ye7AUAoFEFgKk7+A4lqVqyMDmXpaXl5FS0jdQZObCAlEjJgpjGnFCyXb/u2LXc8gFLp7fHKU2CCEolUoY05xTWyKMI/RSDaU0nZTWgdsdFwI3kHi+g5d38fIu/UOdVK/XV0/NlcvzBKWImooQtYiZapnHS7tZG+sUF0oefiGHF7i4OYnWUCi6XLlYJYkVyo0xOUOoI3Quoo8N+D39pGnaprodDAyOdnH96jJ3belFG03SSLHGci04w7HgHS6dvcrcLwm1+RQ1VqeWwNgDw8RxTJIkJrvd1h03IQVdG32qlRDV0KiG4vMLHzJR3sMzIy/gDSkW7RVUTVFZrDNw3yiLfy4yOzsbHz169Mtbe7wShaKPlDD9a4W4nvBN+TOIDK/9/hRLPdfI90keG3yC0sCddPWWmJ+fNxMTE0+eOnXqzD96nGVnV0BpR57pCws8f88kH0wb1G83GR3rY6jnUR7Z+TBbt40xNTVlJycn9548efJb23ILua3QtUUA7t7ax6Zt/ezc8QULCwvMzs6iBzSpTjl37pw5ePDgvuPHjx+z1po2gLUWay2HDx9+M4oiG8exTZLEKqVsmqY2TVOrtbbGGKuUsmEY2kqlYk+fPp3s2rVrDyAzRmuuKi6Xy3/Mzc3NCLH6ODU34e8LHK01WmvCMGwcOHDg2RMnTvzU2n5bx//1MV3X+pr4Czknt9OAJu1NAAAAAElFTkSuQmCC"

/***/ }),
/* 1788 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1789 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1790 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXRQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRvr6+xMTEycnJ0NDQ0NDR09PT09TU1NTU19fX19jY2dnZ2dra2tvb3Nzc3N3d3t7e3t/f39/f4OHh4OHi4eHh4uLi5OTk5OXl5eXl5ebm5ubm5+fn5+jo5+jp6Onp6VqW6enp6erq6mSc6nio6urq65O46+vr6+zs7HCk7HKk7Ozs7O3t7Xuq7cbW7e3t7e7u7n+t7omz7uTo7u/v7u/w74Cu7+/v7/Dw8Jq+8LrQ8PDw8PDx8PHx8ZO68Z3A8cPW8cvb8fHx8fHy8fLy8qXF8qjH8qrI8r3T8szc8vLy8vPz8/Pz8/T09LfQ9MLX9PT09PX19fX19fb29r/W9s/f9uzw9u3x9vb29vb39vf399Lh9+Pr9/Dz9/f39/j4+M3f+OPs+Pj4+Pn5+fn5+vr6+/L1+/v7/PL2/Pz8/f39/v7+fDHfrAAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABOklEQVR42m3RyUoDURAF0Fv1prabhDgkGiExIhFU3OpO/BY3fo84rP0fFyK4koAiTiQGjUPsfj08Dd29kVwoKA53UVCYHgJI/zPrIAF10DfEgogUwEBwZCdMvdtPwZRJdn6oTX2dMGEYv6rlX5RiTYBCzp4dZs2GMppJEEgWbAxUNEyqq0yKJbhgFrCJ9EJPkwCjZDnXjIQ2HqydB8DFkBi5N5XJl2d99+GYSpY8WggalXFL+zcjRsFm5rvbXqz0a0GwvHlBZVua9sM7JfcdpsHlPso28ezGCFddQejvBYTiEiHAW7wLAm1n1imXMwY9ZGnrVfuD0KY0TnOmlbUvaGjjzg/hTqKSX64d+2HWeUzhzuIYOaOxI7nGIm4+udP4ByXrJQgmkqDjOETBTgkGgYB6GCXTfhlnxfILftphBWsK+N4AAAAASUVORK5CYII="

/***/ }),
/* 1791 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1792 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAVZQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGi4uLjI2NkpKS7u7u8PDwz8/PqMf0qcf0tNL+ucbdvMrewtDlwtTrw9TrxcXFyMjIycnJysvLytXnzMzMzM3Pzc3Nzc/Rz8/P0Nnh0dHR0djh0d/00tLS0tPT0tPV0tni0trj09PT09XW09rj1NTU19fX19jY197l2NjY2dnZ2t7k2t/l29vb3Nzc3d3d3t7e3t/f39/f4ODg4eHh4uLi4+Pj5OTk5eXl5evy5ubm5+fn5+jo5+zz6Ojo6Oru6enp6erq6urq6uvr6+vr6+zs7Ozs7O3t7e3t7u7u7u/v7+/v7/Dw8PDw8fHx8vPz8/T09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////dslj5QAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbG6+Pn+PvR6IwAAASRJREFUGBkFwTtuE1EUANBz73v+BAIiRBikNDQIUQYaKhbBGmBZ1LAZChSUiioSn4Qk4GCwx/M8wzkRAACgYloAAMOmorxZZ4pACPJdqbD8Ofm9/hqTO918u+foiIQ8rdtV67vSso3jVVIhXuSXOK5nT64PlwexShLypJRydbHctK5120wqxPOc7T/K2yVqVImE+JxkRomMiAwqeBaze4ucPiiL6X3nqFDOnnZ/f5XLuLLcGYMK7iZFkJEGJOSQiBDJMKKCVRCkGLvWeirE45jtLyIf5sFm3t+8H8cK8elVt7pwnT/+nH+/ddm6McFLSIb1t9eH/WYnwUkBbbebfDxd91RwbDKnKsPN9b8eEey9HSKEGPsP266HCKYFwNgaiAAAAP8BcItpuM66E+EAAAAASUVORK5CYII="

/***/ }),
/* 1793 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALHSURBVHjatVXLbtNAFD0eO3ZjhbIofQQWCUK0BQSqEEjkO/gNNmy7745u+hEskRDdhD9g26xolRS1AdJEVd3ExI/YHu4ddVorBKsC9UQ349HYx2fOvXNtSClxE7CQg2EYDwBs4P/QotgHK9ZBeJ0kiQzCUIZhJKPoIuJYxtMxmaiY5CJNU9loNN4AEBamEEYRRqMRhBC8Az1eBQj564s5w7ZtaAhMgR/odrtMeEWeDyFmhr5X4w/FvFSv1y/VDgYDyCxDRsGKaMuwSiWYQij7qtWqVlxMzIvHR0eo1e+DLIPrVphIEZcsC77vw3YcOPQSi+ZpBhJgwDJJSAExMxOpUqzktzsdCBrtko2llRWc9Pu4PT+PNElAyYIzN4darabVFlvBHtfpZssy8eL5BgwhWI3a+r3qsibhkXfClhVbobFCyiAE4kTi4GAfc46NKIphmgJhEJI1Fkpkz+LSIhYW7kBICdtS5MUee2dnuOu6KNsCG08fqxK0OWGmyetqZIRhCJnEcFz3eooVAf1CUtxpf8UkjiFMU23ZLbuUwBFMYSp/GaurD6+nuFKpqEy75PGzJ4+QPyAMfa3B3muvNQRmoE+ZBz8M/JVUJ47rmo64CmoHxeWmDoiu6eNjVa/lcvmScDgcwnEcTUYJXNCKo16v5wGQM8utQ7W7traOIM4oMbfACCfqgKhtw7Rx7o+RpRknmiuGiFO5u7v74fDwsCkJM6zgZKyycLiOif7PLga97xiPPMg0xumgB9AYjX0cfWuj8eolqbfRbDY/bW5uviXOARjTbZPbX6vVUm3TGwXybDhW4/BXKP0glud+IPunnuz+OJF7e3uy3W7LnZ2dzwCWc1yziYMg4D6s+i7PyUfVa8lHNad+ISnBTJy9297+qEkLiZkgT6YJORg88gs9z4u2trbea9LpMOjvXz9NMcUXer6PGbixj+lv72ADTDal/SkAAAAASUVORK5CYII="

/***/ }),
/* 1794 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANnSURBVHjatZVfaFtVHMc/yb1Nm9QMVge1QkptsdnDnH3woZ0vgrjom9gxECeIIoMqneuUjQ6EPXQPsgnzwQcRfJiOUvzTzbY6JjghIt3DYHV/almS1W1Zlq5p/t97k3tzPLnkH9EGUfaFL+cezv19zjm/e+7vOIQQPAypNMjhcAwAQ/w//Q6sIISoGRg1TVNoui503RCGUXGhIArNLhZtFxtsWZYYGRl5F3CqNEk3DDKZDE6ns7yDals3QONzpQ/gcrmoykmTqjDpOrzm+piqKHx5+itmZr5pfLcFGOrAakAZpKrItPDegQneGRvnwYN1fL5eVlfv/itwbcsyX7RJWDgUIvBCgLGxA6SSKXbtepYn+voJBoP0D/Rx5MhBFAkt29kAVmlWZaUfHDrMoN9PIPA8r+3bJ4MUYvE4r+x5GY/bXVtAk1qmwg54aufTLPx4kT9WQvT2+lj4YR5dy5NJZ9i791VOnfqEUqnExMT7RCK3KhO1WnEFjEPg9bZzMxRm+foynke6+HXxMmfPLeBq95DOanx47DjR6H1SqXQVuim4dgp6eroZffso/sF+7my7hX+rh75uL/t3PopesMhoJnnd4tPPPqejo92Oa/nx6nAnPY/7mL6U4O6GhmmV8LpddLQ5cKkOOjsUSqLE1aSn6US0PhW2wxkPO3xbbPBaukA0kUczSuQMi3sJnY1ckTWxFSGEne+KWq/Yki/evB0jXdzGm4EhOjtdRNdzfPHzbU7MhiiY9gRs73ZjmhbyN5et2QJc2ZIoCX45f460YZDWu3hm+5OcDq7y3aU7LIbX+elqnETWJLvyG7qukc/nyWazRiwWSwJC3ey4gSBz+QxXdjzHwOAAZszJFm8X97I5FEXhwvUCjzmWcSevyP4eotGomJub+zYSiZwXUiqbSI5h6imuTR9CfeMj2nr9vLV7iHTOQFUc/HltkaW5jwleXCAcDjM7O/v95OTkQRm3BmAX+obcjsry93U5VzduLDM9PcPGRgKzaKFZCkXakEwUIeGiwIsv7WZ4eJj5+fkL4+Pjr0vWfapqrscSLDRNK9dhu+6W+3Iiu9bKL2/3ZS5FPB4XS0tLpRMnT54Fum1G3X8HS0AjrAq0LVVu7QmTyaQxNTV1pgptsp2K/3o1FYBFGR/nH/TQLtO/AHgtItLG1AZfAAAAAElFTkSuQmCC"

/***/ }),
/* 1795 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1796 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM4SURBVDiN7dU7bxxVFAfw/7137mMeO7vrtb3JLl4nC1ISxRUKMYWpaIgEhYXkAiyKFBH0NLiz+AY0fACaNBYSyAgkhJAAiSBHECHHmwQ7sbCw9jEz+5id3dl50eAoYQmiIF3+1S2ufvfo6BxdkmUZnkboU1Gfwc/gf4x2clhdfe9ylCUfAaRDKY6SNL2xslxv7OzsPNja2jo+ube5uUkLhdyb29/s/qCIeAM0fTVJ0gIoYRTsg88//finx+BKpXQ8GEfXgRQMTAldvRwl5MPl5ZX20tLSK+vr65cdx1lknL/GA3Gl/typnzXN2BGG8W0cJ5HbaZrCkMdTFReqtZh12nEwCjiAMEmiRs83f9lvNd7a2Nhw1tbWxF7jNra3vwgbd/74RBr2brFUHBBCsyQFJOfDoOdP97hQKGanK7VR0c5HUmqQUsN47Kty9cL1+fIc7w/66DhtaIxxYRT2QAhxnY4FUKqkgm3nk/kz1WgK5pOQ6LrMypXayLJmIq5JcI1jMvKF7w+98SiArnSUSrOupcxEcAnKKPV7nslYRrni4FwjUzAMA0IKopRCtbowztl2zDRGmMaI53Wj/YMDBMEoG4dhUDtbGyqlMsEYISRlnudYWgpmPDIVD+Ge1+GjYV8qxWEYMltYODMqFmciKST6/S5mZ2dQPjVHHNeFrltZ/fm6r1t6yjkFkFC32zRjZSZTsAIwHPT08dCXggmiOEelUhvnbDt2HBf37z/Avbv30Gl3iBCCKG6ivvjCUDetVHLZHEeTz95/d7U1NRW6riPJgH6/p3OpUMjnJxLIztbqo6++vLHrD7+eD8Mw6/aCW/Ek1CzTimOw70/PLR5eu/Z68MQFgVJg8ZgAQNdtGRrXUJwpTQBk5y+++KOpZxfuNu4E589d/M7zWqaU/Oidt6/s/R2casW5xXpULldCKQSkLjDotoyR35OCM0LBaD6XI1IpUEopYYy02s3mk9DHKqaUkoVKLRSME89zJFgC12sbXEoIrkFKSeyclRSLxShOoowBv/4bTE7+vJs3j40g6L2UEJCj3w+V7w+0vx7MNM7T/d9u5y9dWnHsvBUf7h+4V6+u3vpP8P+dPwG8U0m1V4ytvQAAAABJRU5ErkJggg=="

/***/ }),
/* 1797 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAK/SURBVHjatZVPSBRRHMe/M66zu1lq659MUsQ/hURgdtqOHaNbHroEQadCvESXTkF4SQiyUxDdqluZeLFDHbpU9AdcQm0xS5M2XWt1/83szNtf7/dwmGXGxf7gd/jOezNv+Mz3vf3tG42IsBsKoUKapvUAGMD/KSH9CZzYtdRZx3GoaJpkmhZZ1pZLJSr5bdvKdoWFEBSPx4cB6CH4ZFoWstksdF3nGbitZ0hV9reuWYZhwFUA7MIqgTq3nquC+V51MBBIm5rJYe5BGpurJejyEA6hpTOC/gttaDta90dgL2ViHdpAK9aTJt7d/o74tV40NEdAQoNja1j7XMDbW8vYe6gWp250K7ZeAdbhl5u0vxmheRNL07/Qe64d9bEIyo6OsoTCBpra63Dyaj+IDLy/981NWx2suescqQF1R9Gi69iYK4IYWgKDVZ9kyz421ImG/Lo70wA4uBz8A0Zr0HXxIJznP+XUFZzByiT4GQ2xHg1HrgzumDhQBaH6Why/04eNmy9hZoWCghQUjV2EaMx7NpC4KnyrKpoP16FxeBCz1z8qKDRIKHzQnRMHzOo704r9p2NYuptU0D1N3hgRoVwug7VjYjDU96ITlzrwJZVD5GsWPMow27Yh/+LKjuNUrWOv2H0FTwRsLmuorTdQbNRgrG1A7DMUWAjBL+EytVKpVAYA+cGBlGy+uzorMD+5BuEIhDuisB0b+VwOKysrCIfDnJampqYeLy4uTpNUYHfjXapQKJBpmmoXs02LXl1+QY+GPtCb+0tUzNpqLJPJ0MxMgmRSSiaTNDY29hTAAZe1LbhYLPJ2qcB8zWmEEAxR/Xw+T+l0mhKJBC0sLND4+PgzF+pax1/JC8JrSlJPJiYmR0ZGzsvuD3gKJuZklSndpGwpbnkmvBTW6OjoQzep3xqf/vHTVJJ+TUSr2Ea79jH9DYz6+WPGYvgMAAAAAElFTkSuQmCC"

/***/ }),
/* 1798 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOoSURBVHjapZVtaFNXGMf/9y25N71Jm9jomlSMJiCsOGWwDUTYC2wTBUUZIgrDWqF+31bajUlXCvaTlVGosG4f1vplXxzSDUWqohg/1C/OSls2dW60qWnpS5qXmzS58T4nHMLlXv2wPXA49zyX+3v+z/+ckwjVahUUghU04f+FhasBZZ7p7u4+eaq9vU+gqFUCzWxFg1cVRbDJBToyMnIOwJgN3NramtB1//Z0+gUURaHSbDRv2oT1bJZBRUmCYT1rPh+CVp4X5BGNRhP8WeY2DA0NQbTURCIRminHB4Hq63o3DjBnkR1y3RyBARcX02z2WTDDMCBZKjc2Nkg5A6uaVi9gh7MObYpr1tEQ0NjYiFKpBK/XC7+uky029TbvnXA7uA4XGXSh8gQPFn9FqvwEplBGRE3g0/AZbPO11aFctf17dzB98Fi4gZ9edMFEBS2eOKSqgpvZMdxauozToUG8qbxPXTGLAoEAHOEGzlZWMJb6FpIo4esdv6DNvw+CpeJ54RF6Zw/hhnEJH8U/g1f0QUDNmpJpQBYUiILEMc7jOJW7jYKZxd6mowRlrYmCgB0Nu3Hxrfu4sOsefnj2JQqVdXCPr6Qu4h9jmq/dFadLf7M55tsFoX7kWIFmTysG/jyBp7mHGPyrA/vfOIPJld/xOJPE1NpdfLj5+KvBvB2jWEBqfh6yLMPj8bANDYVCaA8M4udSN85uv4D8SgnxpvdwTR7GO00HkPDvwVOMuINb1ASb581Zuom2Y/ZH5ja2BGM4pJ+FrgYQjHpBsVc7jLB3KyTpNR6/3fgxAlIzkstXMLV+h0NZ++dnT+CrRx8gru+BInpZ3jRNbFPboMGPcrlMOXfFqtiAztggvn/Wie9mjmCzHEODEsBzYwoUX+z8EarUQDeMgSqVCg1WAABZZtJ1diimiu8GD6I39hs+CXWgWYlCNGXs8x/DNy1XEcnvxurqKgqFAkHYlc/n81heXkYqlTJGR0evuirmEQu04aTWS4XYlc7lcrSJNBh0bW0NS0tL7H04HEY6nTZ7enqOTk5OPnT1mHtKp4E/czjlKKh16rZYLCIej2Nubq7a19d3amJi4jrZ4FDMjSc1wWAQuq6D51VVpZl7SRaw3PT0tNnf3985Pj5+2WKajnNMlYaHh/kGUGukkH4uCcYgmqaRvwRl+Uwms9HV1dWRTCZtUIfimZmZ+YWFhX+FWvBdJ6XUNhWkNd1CelccGBj43ILeZ+27xH/+M7WrdMZLT8SJSDhJXpIAAAAASUVORK5CYII="

/***/ }),
/* 1799 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1800 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAmEAAAJhAcEwVfoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAACZElEQVR42nWSy08TURjFbyVxoTtXRo24wMQFC10o/46wcOMOQxObYkJ4ScRaw0ODCzUpRjEGIjW0vAtl6AMoHfpCeSggICoLE5IynTvHM9NUCo05uTPzne83Z+58uQIl8nQMzniV1+7STolht4UOD3CA8KHd9l/4yZ0Ou3l3VGRkFlmkpeOqWb988PzuCbjj8bK+bvQNjsUXcn+QV0Ifjg36N4xV2e0qgptrEvoefmIfv6n9gqzqF/b4WtPtf7CrTjW+4wfMF7awg21Lm9ijt0tn0XDVFW3j2chXbLL1GSmsWlpBgs/bRFfQPXpszz3qCtaQBK9UHl5GGilWS3gRL8Ac1r3L/lwGGcSs3Fnp3fHuBKUJq1QEQ5rzkjlI4W72Zv1SRZIJi1xTsqHKTGmoUmQKCwhRcYxJf7azVbT1K4jQZIZ17d0sTPXDVhxBzNBlh0zbgGjtD8DEY0ydY7ZnvQC/+aZg2PS5ImQeDojG+n7NJxVEaYYwj4BsvG6iTTdG5CiT00SjGJEftcZ66wcd5QM5BQs0TVyRfWvv1gNGGLME43Q/5RzldtvRnNUgwSW2w1CYF7C+lOD45un3qMfm/GhIQYjoHDEf4RhUZLDBKS8ignZfEdxe6zcmMIlp5qqWEkRX8YXKMHvSyJ/IfG71sB6mGbOwJFJII0Ol+ZSkN6a7a4q24WoZ14OGx/c2PK0lTZxrWnsf7fWHjSnd3XLi8D+t7qplaXNemZEpwop0VghOoLPWTC2GC8UZcbGsclxb5hQmtFO3xDVxXpzO90rhs+KCqHS+6op0Ru97xE1RIc6JsqP+XyQjowWuxpsJAAAAAElFTkSuQmCC"

/***/ }),
/* 1801 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1802 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAK/SURBVHjatZVPSBRRHMe/M66zu1lq659MUsQ/hURgdtqOHaNbHroEQadCvESXTkF4SQiyUxDdqluZeLFDHbpU9AdcQm0xS5M2XWt1/83szNtf7/dwmGXGxf7gd/jOezNv+Mz3vf3tG42IsBsKoUKapvUAGMD/KSH9CZzYtdRZx3GoaJpkmhZZ1pZLJSr5bdvKdoWFEBSPx4cB6CH4ZFoWstksdF3nGbitZ0hV9reuWYZhwFUA7MIqgTq3nquC+V51MBBIm5rJYe5BGpurJejyEA6hpTOC/gttaDta90dgL2ViHdpAK9aTJt7d/o74tV40NEdAQoNja1j7XMDbW8vYe6gWp250K7ZeAdbhl5u0vxmheRNL07/Qe64d9bEIyo6OsoTCBpra63Dyaj+IDLy/981NWx2suescqQF1R9Gi69iYK4IYWgKDVZ9kyz421ImG/Lo70wA4uBz8A0Zr0HXxIJznP+XUFZzByiT4GQ2xHg1HrgzumDhQBaH6Why/04eNmy9hZoWCghQUjV2EaMx7NpC4KnyrKpoP16FxeBCz1z8qKDRIKHzQnRMHzOo704r9p2NYuptU0D1N3hgRoVwug7VjYjDU96ITlzrwJZVD5GsWPMow27Yh/+LKjuNUrWOv2H0FTwRsLmuorTdQbNRgrG1A7DMUWAjBL+EytVKpVAYA+cGBlGy+uzorMD+5BuEIhDuisB0b+VwOKysrCIfDnJampqYeLy4uTpNUYHfjXapQKJBpmmoXs02LXl1+QY+GPtCb+0tUzNpqLJPJ0MxMgmRSSiaTNDY29hTAAZe1LbhYLPJ2qcB8zWmEEAxR/Xw+T+l0mhKJBC0sLND4+PgzF+pax1/JC8JrSlJPJiYmR0ZGzsvuD3gKJuZklSndpGwpbnkmvBTW6OjoQzep3xqf/vHTVJJ+TUSr2Ea79jH9DYz6+WPGYvgMAAAAAElFTkSuQmCC"

/***/ }),
/* 1803 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALASURBVHjapVVNT1NRED19tKWvfQRJCbZsiAlr2RlNFP4AiUbZmQgrE2NcixpcaBP9FW60JLLCxpRI6NpFF0psNUGaVgwEKSDpB21p+553LlymvRFKdJLTaW+m58w9M311OY4DCpcISvi/cCggwq1Opqenb4+PX38GOELCgGG4hBgBUJqUOFMY9J7YqN6Zm3v7FMCbNuJQKDScz/+6QHrBYL8oNBSIWAoBLAiwaC6XQV9fEIODg8MsyTbANC0QcVdXVxvc7tasYFCWwl6vD72958Bc3LG8jt9vwrIs+hJ3zF1rYFuGhoaOObhjDkEgOznKjJ4eC9XqPiqVIgIBPwm11iooOp3YUNdrzfIWs7OvMTFxC5OTU1hYeC8s61akMisIvRM7FmDvaDvo2vPz72i4otsAlpYScGStImNwMLFU44HI6R8NxoORkYtoNBoSwf4gnbU2oaARc2hDOuyiVjvAoyePBZkXPp9P7PtDNBs27znjVGINh8WW1YP19XUUi0X4TFOt1dmI9WIiVT5/+5o69nB1NcN1ZyVmQi6mH8Wnz8s0OGlHJvOdRDoSu3VihiHh8XiQ+pKCaZpCxI1c9occVLPZhIqWB1knYrbDcWxsCH9JgLC5uYlGswFRIclt21YitDW2I+IUj/kBU6/XUSyVjom3t3fE2YE8r1QqKBQK2Nv7LQZbqEaj0dgJHdMrk8sCtwf37j+Ar9sDv+mHZQVgCIu2tvLyRuFwGGtra7ZYw5vJZHL5r8T8rGW/6KpjV68pMfpMncpbXLl8Cel02olEnk8lEokP0gbeCiaq1arY3d1RpHooIfIS3V4x1FTKjkQid+PxeNShYejrppTy+S1ks7lO/z00LBKvz8zM3IjFYq/aSHUrVlZWNkZHx34ODJx37e+Xld9ttigryuVSLfLyxZ3FxcWPqik9/vnPVO9Sjz/sMBXOnhOw4AAAAABJRU5ErkJggg=="

/***/ }),
/* 1804 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1805 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANUSURBVDiNtZVPaBxVHMc/72Vmd3aT7DZ/Nmn+tGlJG4UUWqyCQSqIePEittdab54ktwhexEtO4iUHvXlUBNFQ4qGlRRE81PaQsiJtYBMMbbPZbuzazf6ZNzPv58HdZLO7LRb1B19mHjPvM5/5Me+NEhH+j3JaB0qpaeDMv2RmgTVEZC/AhTAMpVavS73ui+83YoyY9gSBmCCQoCVRFMnc3Nz7gHbaH1f3fcrlMlprlFJ7x738/Wr7540xQCwW696KRjvQWh8A6lawUk8EK6WeAoYDtoLi69uW7P1dfv7td9KpEUb6Il5/vo9Lc0PPAG5aas1ORfPBNYeN9TUeFbeZmRjihZkx+uJJft28x8J2iY/fTJFKuADoFrBuB9OAWlF89FOS144lsWGN2fE0xwc9XpmO89woTIxNUnu0w6c/mP0WtVQHWDWsv8p6HOnv4YvrN/FsQKY/zmSmn6khyPRbDiUMA8NTbP0ZcTW70wHvNG6A7+zE2HiwxeraPZKxHpKey3AqwcmMw7FBh7NTHicO9+Nan+9XCx3GXXtsLaScgNT4IYb7E5jQ4gcRSQ8SriKM4EEJHtcg7Wlu3C13GHeAm3AJDTHX4fy5k1y/mWM0FefW3SLphEOP1ijtUfijgurp5ej4yD8zdh2NiqpoN8OZqWnefukohUKB9XyZW2sFcvkKvckESgRvcJrTk31Ya9FaPxnchI8lK2z6cSin2K27xFSCz67dJpVwERFKVcPFN86xulng0vkhjDE4zj6u6+cG8O6rIxTzBbar21TDiF/WH5MZGMJIjFB5TGRGubNZ4OKLaU4MGqrVKru7u34+ny8B0nXlKaWIu5oP3xrhkysP2QxrvDxzlLPHM5TrBhGoBA6nJ1xmvDXyeZcwDGVlZeXbjY2NKyIiqnU/VkpdCILgmyAI9vaLyMLnP+a5/zCibDzSvXGODChmD0dk1BanTs2Sy+VYXl6+vLCw8J6IbAN0bJtBEEitVhPf98UYI0EQSBiGEkWRWGslDEOpVCpSLBYlm81KLpeTpaWlq8BoK6vrAnlaNSdaaxER+W55+fL8/Pw7e6btNzaNoyg6YNk0tdaKiIi1VowxUiqV/MXFxS/bTZtp7/Gz/JoMcENECt0uHgD/l/UXWuvrl8c6kwIAAAAASUVORK5CYII="

/***/ }),
/* 1806 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXpQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRfn9/g4ODhIWFiYmJi4uLjIyMjo6OkJCQkJGRmJiYm5ubnJycnZ6eoKCgoaGhoqKio6SkpaWlpqamp6enqampqqurrKysra2trq6ur6+vsLCwsbGxtbW1t7e3ubm5u7u7vb29wMDAwsLCwsPDxMTExcXFxsbGxsfHx8fHycnJycrKysrKy8vLzMzMzc3Nzs/Pz8/P0NDQ09PT1dXV1tbW2NjY29vb3Nzc3N3d3t7e39/f4OHh4uPj5OTk5eXl5ebn5ubm5+fn5+jo5+jp6Ojo6erq6urq6uvr6+zs7Ozs7O3t7e3t7e7u7u7u7u/v7u/w7+/v7/Dw8PDw8PDx8PHx8fHx8fHy8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn5+fn5+vr6+/v7/Pz8/f39/v7+ZUzEuQAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABQElEQVR42m3RS0tCQRQH8POYq/nITS20J1oEriOIFrbt8TFaRas+R7To8TECoYXiplYFtrFA2oQEJiZIUabWeK/3Nt650yL8M2fzgzlzDgPjg+qE/tnAAwFgHfQICUcBIIDQ8WDE+P7BTEgqiIoTCIpVCWJlzEj6guFSZKUa2W2Wo1t3qYxhwtRaa6nDOJt7TC5YI/ZLtK6p3hHcKMj+i0DDNLODmflnntu2kmE0jOK12K81Fomj2drQZ1Xh/b7FLBhBAx5J/0kWxOwr+myaUKEo8xeI+Uv36kmB4clcbDkKzelQJQ34x9gt1bMOvk3EuvGB7Xp6HaD1dru6iomvT6o6nfJQM9Ktu3Evp9Ll3h54p3KoBzx0CAQioHOz6Z3LbwiaAOmJbds7s5UGbCLxxP6BgD2mYJX4g3TG/aXtgs4v0QZg3q/PrqMAAAAASUVORK5CYII="

/***/ }),
/* 1807 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1808 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRFAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhOTk5hYWFhoaGjI2NioqLkpKS7u7u8PDw0tLSBwcHCAgIJCQkJSUlJycnMzMzNDQ0Nzc3ODg4Ozs7QkJCRUVFRkZGSkpKS0tLTExMTU1NTk5OUFBQU1NTWFhYW1tbXV1dXl5eY2NjZGRkZWVlZWZmZmZmfHx8l5eXmJiYmpqampubm5ubnp6eoKGhoaGhq6ustra2wMDAw8TExsbGycnJy8vLz8/P0NHR0tLS09PT1dXV1tbW1tfX2NjY2NnZ2dnZ29vb3N3d3d3d3t7e3t/f4eLi4uLi4uPj4+Pj5OTk5eXl5ebm5ubm5+jo6enp6erq6urq6+zs7Ozs7O3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/f49/j4+Pj4+Pn5+fn5+fr6+vr6+vv7+/v7/Pz8/f39/v7+////SWj/zwAAABV0Uk5TAAABAhUWFyMmTVNcbKamsbK6+Pn+eVQA8wAAARxJREFUGNNtkU1Kw1AUhc859yU2pbUIDZ0UnLgQwSW5D5fhCnQDgsOqA8EFKAoWLVWSpn3Jew5i6g89w4/Ddw9cErviAKT2D4bKAbDTKkokACJCOjMHAMt5pQEVqoHjkqMhIACQViuaLT7lXFE4tW6wfn+SqcJDaMJ02mH1bHKU66o+zuYzG6iTmN/LzUQm054XOokymlmkpP0ofmMopZmFCLEHdm1ZX+asjiCG4E97RDN4E5H/ait3ghgdMY5B2zYpMYaEjfch65aAAhCi6qLcNBcxfg80ib6Mi/TtOZnV6xZvHj/WTfna8HKcndzUVdNK0sNEIu/7B8uXu+vSdyfbTEZFuPUrvx2YkSAmUeebtQcA8s/TYl2jwzvyBUY4ZPKVNNZlAAAAAElFTkSuQmCC"

/***/ }),
/* 1809 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAX1QTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRTMMJX7Uvx8fHycnJy8vMzc3N09PT1dXV18rR2NjY2NnZ2dra283U29vb29zc29zd3Nzc3N3d3cfT3c/W3d3d3zWK3+Dg4Xuu4eLi4gBx4gRz4gd04h6A4iOD4uPj4wV04w144+Tk5CyI5C2J5DiO5DqP5OTk5OXl5SGD5S2J5eXl5ebm5ebn5imH5i6K5jyR5ubm5ufn5z2S59ng5+jo6D6T6Nrh6Nvi6Ojo6Onp6enp6erq6qrK6urq6uvr697l6+vr6+zs7LfS7Ozs7O3t7azM7ejr7e3t7e7u7uDn7u/v7u/w746/7+/v7/Dw8Ont8PDw8PDx8PHx8ezv8fHx8fHy8fLy8uTr8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn5+fn5+vr6+/v7/Pz8/fb6/f39/v7+tIK95AAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABSElEQVR42nXRV1uCUADGcWxou057DxvWae+dLTPDMCvLFmVWBop4AukciPPZQ4Uueup/+bt7n5f5N5fnV64iuz/eBDEjZeUcQkhRFOIusud+OxCOnMdu7vjHRDKZVDwlfh7s8XoHZn0L0ZQARDFvc2ptay+wH45wfEYCWfnTZrG3C471jw5xCVCI2JwJH8PdGC8gNa8BjHWbsxN9cGV4/ErDmABCDJvl+Blcn4fwgRDdyrQ5xwbh3OnF5I5lhmE4rPhG4PQmNzMVirOAJdRm9SQIly5fFyEnISDpDudTt3AZ6X5ogkIOa+whPFLxBlQxAQgbbpv5d3iQVv1QYLub2zrqykv8GYs+XfPCyxftpNRsqGRKjNMyljVNNvR2ajZVMw6HVvm0LMlYbTEba5gfRpjohkmp1FpfxTi5Dd2aZikltRV/flnm2Dc3HWFaTfv1DgAAAABJRU5ErkJggg=="

/***/ }),
/* 1810 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAM8SURBVHjapVXPS1RRGD3vp+Ob/FmapWSWLYKINkW1a1GrVgUVBKEUgf+BGxPEfyAw3NjK2rUKQ1q4rBZC5KIUCir8wVRmYzNOM/Pm3dv3feOHiDqLOnC9737vvnPOd+4ddKy1YDgEnvB/sAwQfK0MDg7e7uvvH3EYVSVRkRUPVXVdyLQL6cTExAMAT7YRd3V19e7b19Djug5slRIukXiyhqzlnYGsfY/rNKw8i3ZnZ2ev8vkaw9jYmBCtrFWwlrcoxgalGDjcGmD1d4Io5eF7toL60EUdjUrCeyx8l0joz6XTDVAuS/C3wqk6PNAUYH+jg8QACdXCgGrNgCGiE4dT4tJY3i+DBVhIvtXz2hYF1aXVX6srqFQqkq1Lo6D50lymsS17RRDAbe2GQokVovozbkNHi4v2Rg+GHKRSKZTLZWrXZ0FyF8q+jY0N4gu4xu/YhNQV+qSu5GCWfpTwp1gUEo82x0RcLpVgjUGhUOB9TCZzGIb8rKQ7HSvxoWYPTZELz7GI4xgefaTdeJ6HJEk4S97Lz1IrkWgURSDs7TgdFGGTmEk5As2TCfQXICLGmK1v0mmea2S8SRBwa+yO8iNwu5wlz5wrEzMRz7Im1CZWZzJz62HIayVnlxqJErIg12oTo+pCD0JFJBI9MIJkS+C4tonUdPzu7Sp+fV9EuVIPm8qjJXFx/PxZdB+qY8cqKFmH1avHwmpiD2Iazx4+Qjn3EcHrNJqvdOPUxSV8yTbi3t0z6pYF2C3HoAeqnRlL2PVWfGuN8MlpRkjtNawdxbf642hoD5iESWUoqa7X19eRyWSKk5OTz3dcN4U5cgO9H4D3xyxOmnq0HbiJz+iSHLVdbT+bzUotl8uZgYGBa7Ozs3N73mP/YAeyt86ioy2DVzfa8PhrC4I6X/Nlp0wqLnt6erC8vGxHRkb6ZmZmXlrCDmINPkyF+JEzSE6cw5xzAUE6BT8MhFi/U5H5+XkzOjp6f2pq6im9MztuBSuNj4+DMXS1CYXLA5uXPwSjNXIRRY4enOYcDw0NXZ+enn7BpHtet4WFhRU6gMVGst4UOBAYiAAKQOaPEMvI5/Ol4eHhO0T6RtrfBf/8z1Rc1sBfy4qXErjIUkIAAAAASUVORK5CYII="

/***/ }),
/* 1811 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1812 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1813 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAK/SURBVHjatZVPSBRRHMe/M66zu1lq659MUsQ/hURgdtqOHaNbHroEQadCvESXTkF4SQiyUxDdqluZeLFDHbpU9AdcQm0xS5M2XWt1/83szNtf7/dwmGXGxf7gd/jOezNv+Mz3vf3tG42IsBsKoUKapvUAGMD/KSH9CZzYtdRZx3GoaJpkmhZZ1pZLJSr5bdvKdoWFEBSPx4cB6CH4ZFoWstksdF3nGbitZ0hV9reuWYZhwFUA7MIqgTq3nquC+V51MBBIm5rJYe5BGpurJejyEA6hpTOC/gttaDta90dgL2ViHdpAK9aTJt7d/o74tV40NEdAQoNja1j7XMDbW8vYe6gWp250K7ZeAdbhl5u0vxmheRNL07/Qe64d9bEIyo6OsoTCBpra63Dyaj+IDLy/981NWx2suescqQF1R9Gi69iYK4IYWgKDVZ9kyz421ImG/Lo70wA4uBz8A0Zr0HXxIJznP+XUFZzByiT4GQ2xHg1HrgzumDhQBaH6Why/04eNmy9hZoWCghQUjV2EaMx7NpC4KnyrKpoP16FxeBCz1z8qKDRIKHzQnRMHzOo704r9p2NYuptU0D1N3hgRoVwug7VjYjDU96ITlzrwJZVD5GsWPMow27Yh/+LKjuNUrWOv2H0FTwRsLmuorTdQbNRgrG1A7DMUWAjBL+EytVKpVAYA+cGBlGy+uzorMD+5BuEIhDuisB0b+VwOKysrCIfDnJampqYeLy4uTpNUYHfjXapQKJBpmmoXs02LXl1+QY+GPtCb+0tUzNpqLJPJ0MxMgmRSSiaTNDY29hTAAZe1LbhYLPJ2qcB8zWmEEAxR/Xw+T+l0mhKJBC0sLND4+PgzF+pax1/JC8JrSlJPJiYmR0ZGzsvuD3gKJuZklSndpGwpbnkmvBTW6OjoQzep3xqf/vHTVJJ+TUSr2Ea79jH9DYz6+WPGYvgMAAAAAElFTkSuQmCC"

/***/ }),
/* 1814 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1815 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1816 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1817 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALeSURBVHjapVXPaxNBFH672cQ2xkMaY0nTBKS1eCz0oEfBmwcRTwVBWhH00kNvCVgDodCTf4BQBEk89GQpweIhFBT1UA8WD83NQm0a8kvT/M5udp1vkom7bJODfvB4M29mv/fNm7e7kmEYBEgMcPR/MAAMFBGJRCIPlpaX4xLQy0TwfAYTWWWZuDuHdHNz8znzSQvx9PT0rMdz6aosS+xZGYTciyTtdpsA9/g45oO4GcFgcFaMZVMZQGQxhFuMMHd6SqVikcrlMp2cnCAJ1m1m5lL+FqenEIqFWni32021Wo1I3AWLIyYLtSbV4r4sxEhoLgMn7/upQEDErLUH7CWx3YGdFHOTvT3eos8/PvX2mcvQ24/xucSCVDyIzRY7037TxscNtiaIbDUeTmzoOnU6HVEGizKnrND81DwlM0khgl+krusYjyYusZsvl0rU7XZ7hKZTXJBdtHpzlYqtIo9pmkZF1i2FQsFGrFiy9BV02QNOl8tSGqDd1fh80j3JvdPppGazCT+amC8aBrxFqVirqy3u57xz8CKONhtNjLa56PFAMUrBlQAqtSlXydJZs8YJFiYXRCnQ02LfaMWXfT5cxuB4ez9TtCO9pG+Z73T0TqVHzx6Ty+EanGZiYoIURUESxIYQM3MoyqCfgZ2DLfp6ZY+0YIcWbz2loD/Ij671T4V9qqrC0E26wXCuYmFi/uLOa/pwtEiF/C+av36DX67D4QDJgLDRaGDeSiQSOysrK0LxaCgOhW7P3iXpGk8GlZy0xFqyWq2Sj5Uun8/r0Wj0/v7+/gEBwxVbPyzZbJYA1B7m9XqpUqnQzMwMHR4eGvF4fCmdTr9HGWzEJjLLHH0KlTAAR6/X6xiCVF9fX3+SSqXeME7d9ubxTHYMPpvhcJgCgQD5/X4KhUI0NjZGKsPa2tq97e3tV2ZSm+JMJpPN5XLHUg8ibH5BhHJ8n9uxWOzh7u7ul2Gi/vlnylWOwB9oyk0GUwlgtwAAAABJRU5ErkJggg=="

/***/ }),
/* 1818 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAK8SURBVHjanZW/TxRBFMe/OzP74+5ALohoDkNiYmJroLDR4iprY+v/IJWWVlbamthKbKgMCYQECgqQwkCE1oaEkuQMd9ztcbuzO763G4ZjcwsXv5dvZpKd/cx7b97OOcYYsBYXF2vNZvOV67oC/6E4jtPt7e0fBwcHPZAUrvR0aWnpGy24BhZCWDuOczlaD61j8DGAn0VwFj25CCzCi+Dhud1JYYSklAzhcWxwUWoUlH1ycoK1tTVMzTRgqg0IqXKwJAuJKIrx+uUzPJyZAIkzLQczkHfncWNjA8vLy7j35AXmm2+hE345haHnJjXZ/P6fEG8e1MFK07QUbFNVSoG6A2EYIhwkiN27cDwHIks/T51/F4kqlKMcbCOv1WqZfT+AUpIwFmrBFZWdgS3FrREzOAgCVCoVeJ4PJYtgXuMg8MeP2Nr3fYYT2GNwDkUOVTLfxJVAkiRj1ZhtI2a45zL4qs04dk8BOnXgK5GBbf+Xg23v8gFmc9clS2nBgWugE3ouAVdoRFFkoWVg+8myuSsYLL0ADpBDFZDFzM+lAyViDAYDBvM7tx4em8H5Jt4dDHQC6aQIJHAeEZB72QhEsUa/r7m+vL4cXIT3ej34cYQLSrcxJdAKgYRqO+k7OKd52I/QanX4ZkO1Wr2xFNYLCwuYm5vDZE1jeiKChxTTHJRJIRyKEBoybOO49ZfPg3s+BqBLwZdqNBpYXV3lNDkiPiQ2pd5Hu90mdzE//whSPsbR0ZFZWVn5BOC3zbwAHobbNmI4W+u8C87OzrIo6/U6Dg8Pzebm5uf9/f2PdMkPhsFFjYKzbfTdbjdbs7u7a3Z2dr6QPxD0olDjscVwG/Xp6anZ29v7urW19Z6g/Zv62HQ6nR6drj90sdgS8BfGUfL9MTs7m6yvr3+nErwjaIgRuvZnCuA5xpMm/yLoOUr0DzUxQhN51MoDAAAAAElFTkSuQmCC"

/***/ }),
/* 1819 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALpSURBVDiNnZW/byNFFMc/b97M7tp7x0XHEZCDIiEh0Z6SggaKVNSIlv+BVFBSUUGLREtEkwpFShTJKVw4pEBZkbQ0J6WMFBQnsR3vjxkKe42x4yjwpKddaWY/7/vefHdXQggAbG5upltbW5875wz/I4qi8J1O59csy/oAdmbt9fb29s9FUfwLbIyZpohMr3XO7POdTucN8Ns8WEII1B3MAufh8+CZ+2mlWfA0VBVjzPT6FPB8LIBVFVXl4uKC/f19XrxqEZotjNoxWA1ilDwv+OKzj3n/1TOAaacPglUVEUFVOTw8ZGdnh3c++pT1ra8oKwjBE0QIPhCC590/B3z53goA3vvl4LpVay3OOQaDAYNRReHeRiLBiCAymSnCfWWXjmMBXCtP05Q0TYnjBGsVYQY6ATesTp95dBS1YlUlSRIajQZRFGN1EawqJPF/UFxnHMckSUIURWOwMIELVsdFnEJVVU+bcW2zJEmI45jIRVj9x2aKEFkovRBbQ1VVzPp/Kbj2rrUWVcU5xU3cIiIkLlBWBqvgTEme5wvQBXD9yhpjcM6NPR0lyGQtsSAoYgxOBWsKRqMRIYTpIT56eCKCc25cJHqLUVmh4kkUbnPBihCCIS9KhsMS7z3OueXgeXi/3ycucu7znNYLw9UAKi88j4XbAQyGOVdXNxRFQbPZfHwUdW5sbLC2tsbztOTls5wIz0sHBI8Rj6NEBz3eXP2FtZY0TQugXAquo9Vqsbe3h/eeoijI85w8zxkOh/R6PXq9O9bXP0D1Q87Pz8Pu7u73wB/Tzh9SXEdtI+893nvKcuyC6+trrLWsrKxwdnYW2u32D6enp99lWTZ6EPyQ8hpeFyiKgru7O0SE4+Pj0O12f+x2u99mWXb/6OE9FiGEqerLy8twcnLy09HR0TdZlg3n986Cw83NTb/ZbMazH5Z6BFVVISI0Gg1WV1erg4ODX9rt9tdZlg0e7Hr2Zwp88kTxJfB7lmW3yzb8DTUxQhMBhLdIAAAAAElFTkSuQmCC"

/***/ }),
/* 1820 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANkSURBVDiNtZVNaFxVFMd/b9698yZvkjRJnaYzbRLSGMS2khZba2jFFFFBwY26KO5VRFpcBCHgSgIKdlVcutFa8avUdhFFF26kakMLabUfmJk2MTXJNDrJpPO+33GRGCeTSUCkDw68ex73d//nz33nGCLCvXhU9cIwjB5gz/9kXgZuICIrATwfhqE4riuu64nnLYfvi18bQSB+EEhQFVEUSX9//+tAQtUe53oevc+c5YXJLzC988ynW5kIHqH9toNtN6C62wlbzrEtBelpn2zjcxxteBKAa6ceq2/Fsh3sWxwlMAu4Ha20xFPcveGT8hw2N6bpKKdwHy9iuDly+7phxqZnxuFW1IyRMFY4iTVgYLP+lSinUDogbDPRlgNA2ra53ASfTD1M3xMWOw/2MDc/yivZItpSJIyNwIbBQkuOKw02ZovHBR6iZNoA2A02vU4jyon59M4AE5UUHfsFaVaopCaxkWIMg1JbL9FCjitTh/mjPEfa8QHQYtJZjnnt9hE6k/dz+mqEkz3Aj2YX2lLL9a7nMTDV/BTZqMy26+Ns0b00ljwsy0LHJlpMugzNwTc38dm7mvlUjh/m2lDJpWrXVwzopKay+2mSRNjlCLepxMkHbN5v/o0wrYl+d5GuJvp27uDE91mUpVCWoopb32Nlafy2LSwMbKVbVcjYZY6NX6JlZpSLHVeh7z68Y5Oc/jxEJRV6OaoVr7FiSfFSemLPUVKZd8gXxjkSNRLPW6hHc+QP5Tl5foA7qabaX3cDjw0DZf2bzu94i+liJ2/f+pnO/pcYbT3EdxdiUKAVUNVqqpxYT7FeeRdvgb3WJZJ7M9zdfRgnEFSyfuMKo3ADcI3i+JePaXWv0Zp5kItxAkzQZs2e5XMqlYo/PT1dAqTudatW7Pc8y/W/JtHNL67KgyBRQMYosr/Loi/j8eEH574sFArfiMhaMLBKsdq+C7afqFt6g/cnH726i3x+nDNnvj47NDT0hogU61sBaEuvWq83DA5sNSncLDAyMvLt4ODgyyIys2pTdT8OgkAcxxHP88T3fQmCQMIwlCiKJI5jCYJAFhcXZXZ2VsbGxuL3jh//Cmiv5ojIWnAURatg/wDjOBYRkTiOxfd9KZVK3vDw8Kl6UBHBqC7zP44mH/hJRGbrfTTu1TD9G1EN1JYvAbepAAAAAElFTkSuQmCC"

/***/ }),
/* 1821 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1822 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1823 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1824 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANwSURBVDiNpZVNbxtFGMd/z+zYu7Y3diBpmjZtSquQIiQEnPgaiCsSak9I/QS9hEhRP0bFpeUeoUoVh5w5RBxAQokoL0qjkFcnbbxe7+54Zjj4BTtxQYKRHu1odvf3/+s/o2fEew+AiAgg/L/hfR+oBysPHz78/N79+2vSV0AE6QlCb6WnqhQAagL08ePHXwFPx8A3btxYiuOp20oJSilE+s+ByKBGRAeCg7GwsLA0mKvee+mbUWMlIsiFtX+qUdbQsffS/0CGbvHC7vYprXaBIyAuaUoVTbUWMH+rQT+r0YCH8yFYKRiN4fwkY+eHU+behenYktNgttogrmh0pDl48ZrpmxWqtdKlSC7twSj04Jc2i8sBU3FBLbREkcFpT7miCSua2x9ewVlIE4MS6ZVSk8EiAl7Y+emMuYYQiSMMAqpRQD0qsNqgwoBSWeGsI47LNA9aKFFj0Ing3e0m12cjQu9QpkRgIgKnMGmXPHlNYQ3OOUzRxRSWt6/U2P3tBLkQh74IzlPH9HQVoYtSYFNL4qpcuzOD957jwzbSsHgPeZqTJhlnzZRby3NvBisRBIWqRagwIAg8582E+TsztFotlFLMzcfsvjgmjkPy3JBnBZ1W/u+OdTmgFGnKYe+prENEqNfrONeb0z7H5WWs8xhj6RpzCTyeuAg6UpTDgHJFU65orl6fonnYGZ6al78fEdVTvLSRdkrQSgkndJhLjmv1MmGtRDnS6JLCWqjFmpe/Nikyg9EZruQol9rYkmDbQlx/i263O+Z6/FQA1xYbHB+2elBnKfIu3nniuEStphGneZUqElNgdIfTLOXWRwtkWUZRFG7Q3S4dN1FCYzakeZJgcovpb1DeKcizAp91STuaVuo5Oesw//4iZ6/O2N/fz548efLt5Iz7oxaHKAU7P5+QdQrytBjCTVZgEscf2x3q8zdpzNQ5OjpyDx48+Gxzc/PHyVGMtMepRsTSx1dJzgva7YI0Keh0DM4pGrUqH3yyyN33ltnb2/Nra2v3NjY2vvMjXUiPQi+KALxzd24o5pwjz3OyLGNvb4+trS336NGjL589e/aN996N/q+gd59MiuSimPd+WMYYs7Ky8un6+vrXF6Fjjre3t/88ODjYFRleTj3lvxs41lqstSRJkq+urn7x/Pnz799o6r9eppNcjo6/ALrlmmbWGDMDAAAAAElFTkSuQmCC"

/***/ }),
/* 1825 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1826 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAU1QTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0tLRAH0AAH4AAIAAAIIAAIMAAIQAAIYAAIcAAIgAAIkAAIoAAIsAAYsBAoYCAosCAo0BA44BB5ADCZEECZEGCpEGC5IFDpQHEJQOE5cKF5oMG5wOHJ0PHpobH54QIJ4VIJ8RIZ4WIqASIqESJqMUKKAiKKQVKaQVLqgYL6MnL6cgMKYkMakZMakaM6kiNKsbNq0dN60dPbEgQLIiQbMiRbQuSbgmTbopUr0rWb86WcA6WsIwY8g1bMtFfNROwMDAx8fHycnJzc3NzsDc0NDR09PT2dfd3d3d37//7u/v8PDw8fHx8fLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pn5+fn5+vr6+/v7/Pz8/f39/v7+Hzs4WwAAABB0Uk5TABweIjE1ODk7PUfk5vf3+tWicOkAAAEKSURBVHjabZHdSsNAEIXPzG7aiyJF2iYqPpTv54147QOIL6RJI1IaTbJ/44Q1LUhnlr349mM5cHB5SM/iH3MCCxSlLFfrpbUk0Y/Hzn04GMAyW5puSAjfQ3B9nGxIEpEYSe2wKLoemHEaLQun6Kz36YQ9cy9sQxq8G8842IhYcPIpxjDjh4GYjS6DAPBjxjRRhQYTzk8Zmx9zMC21aElptlnFtdlihxI7Otvc84Fa2lNDe2C2ia9YXSqpoirj/PeR1UVDNergk2QbfE1bqAv7Hmt6jbP9pQka1Ohu7+/exhPeaIoKN9FAnr1HxsBnbsQlpf2cBNj81UJPfpgDimHCtFi9jOFSlz4hzy8fSXzCm/055QAAAABJRU5ErkJggg=="

/***/ }),
/* 1827 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatVXfS1NRHP/sevcjUya9lE9p6jI0suzH9pQFIuFTqBRo9A+E0KtPlfgiZLJXF6G2RCIzm5A9BKIUe+iHDAOVucginYNmc+5ud/eevjt46DLHhQo/8Nk9O3f3cz7fz/nuXAtjDPsBGQZYLJYqAA34P4SIy8g5FiS0ZbNZllIUpihplk7vMpNhmXyqKqdqoKZpzOPx3AIgyciDkk4jkUhAkqRcBeL6hyAYx7vfc7DZbBCQkAchxinEDRRzwWAQj/1+UEXG35oIE41u+ZhIpcLn8+He3V5kMiq+rf3AwqdlzM+/KygsF3IsGNuMYXx8HHNzbzE4eB8n60/RXAJTUwEcd1WhtbUFTqcTQlAyE4ah3NGRpzhRV0PZFWNx8TNOn2nAuQtneVV2ux200aCNhMPhgIBpFCLXhcUQXs28gd8/ho2NKM1JuNTUguFhP6LRTTTReGjokaFKM8ciDnJ9qKwUsizD7T6PlZUwBh544fa4sbr6Bf39A2hsbMDa2lejoHnG0u7q7W1XUUIZgklgsEBngKYDuq5B1Rh0TcPWr4QQNndsFB8eGUWZswxHystp037yOCorjqK2rhZjFI+rphpLS0vo6rhinnF+V+hZDaUlJZCLZN5uzc2X4XJVQ1FUFB8oRuWxCuRMMsaoCt1cWIiL7pCtNsS3EkjtKJh49gKzs/M8CqvVig/vP9KY8c4g8i4xbTfRHe3XOsjZQYq4iFxZiEBWZ1ysvesm1KxGCyaRSqW4YzKSXl9fjwNgezfPEMfDIR/C4Qhs5Fomh0W0AN3lIllNJZdp1FHeF931ObcsEAhMRCKRGUaQYYLOzuv01/2OlJJCMrmD7e1tEHi+doedt2Jv7x1qv1VMT0+/7OnpuU2amyDsOTZzxx+Vxo9Lyo0fh+SGH4nklI+TySSLxWIsFAqxcDjMvF7vawCHjVoS/g7iQR4HIzyfnJzq7u6+QcMNCBRyTM6MLoVTTkLuyiuJx+Ppvr6+J8JpPi308a+vpgwxSM9HUQD79jL9DeTo9766bxEGAAAAAElFTkSuQmCC"

/***/ }),
/* 1828 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAO4SURBVHjatVVdb5NlGL7avv0E+oFtt5V9OWCwOD8OmHjEYtDoCBw4xKhROCHgiUdLlEWOiNH4B9QTAycmmAzjotaAjkTdskGImrSl3bq1WYCu6/fHuvV92/X1ypM0dm7tgYY7uds+T/Nc9/Vc1/3er0ZVVTyOkBoXGo1mP4Dn8P/Cx1zYAgyCyrI8USqtg0XA2OEbDPGxbW00GjA8PPz+7Ozs4r+BkUymEA5HoNNpodXqmFpUqzKSqRQKhRz3JdisdrS3t8NkMjeAg3tt26RoYKDlYZ0Apv7wB/6CQS+J05VKBelUksUT+OPPe3A5XTh27EVRvH62BbBGgJZKJYTmA+js9CASiRIwhc2aimKxgEQiAZW/u7t7sBCex1tvvgO73cEC/0ik3QFYMAgGfXC6nkAmkxH7Tz/zLE6dPIXR10YxNPQ8yJ6SLTAXcf3614IMz7ZmHAwF4HK7sRqPo1ZTyehteDweLC8vY0OW0dd3AAcP9OPy5Y8E+83qJrw/eXHu7LmWjHndoriW0WDEyKsjMBiN+O33aegNBihlGb9OTwM09uVXRtDZ1YV0OgO/z9daCkDlNRWsrZWEeQMDA7gfDFFDO+bnw9R0CYqsIJPN4ujRF4Rs2VwWK/EVkFNzKfL5PNurIrTd69gr9vz+AKxWKzJkJisKrDYbSuvrLPoUjGYzkksR9FeryOXyzYHtDjsePHiIYqGIwcFB9m6BjW9ioSz2ENzDtOzahdIa5aJhGyzA20ArSXA4HM2BtexFC1kE/H7Mzc3hyJEh9D3Zg/sLYeyjnnwo2H5LqNDEmZkZri3o7bWhi/8xWpvndLoh6fXUM4wLFy/g7t17KFJTr/dH3Lp1EzqNhvL4uPbi0UpM3ORQ/2HhSTPGIkZOnICPLnd3dZORCdeufYXevv04fGhATIVfbk8hFAryBvtQUapo7/DgpePHafhaOR6P5wCoOwJLOj3OnHkDuXxOmLm4uIQ7lCWdTkOFyt5Nwd3m5sywoaOtDa+fHkW5vEECV7+PRqM3VYaG2SjD6XQ6O5FIJMEnSfTnVbJ9+CgmTJQkSQDv3r0HZvrQ29ODzz79hJpHcOPGtz9cuvTheeKtgrENmO5PrK4KYKaYbggE/IhEo4jFYuwEnTDKw+s72A0eTwcmJ7/7eWxs7N06aFNgMiagmHACmPtbUlEU8XTKSlm9PTU1OT4+/l4dtKl5FosZLpezPoy2DPr6UK/VapTCJH/+5RfffHzlygeNoI2M/+urSWHe4fkEdojH9jL9G217rjx+P66/AAAAAElFTkSuQmCC"

/***/ }),
/* 1829 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANNSURBVHjapVXPL1xRFP7eMxZ+R4iFGZqWVdlYtBKSqmmm0pJoRlea6lgpqVjYsFCNin8AO2y0q2b8ygi1E02aIEORIDpjyhQZMwwzGDNjXu+98t6bN7wu2i85Oe/ed+93vnvOPe9xgiCAgiOgDv8HgQIEGnGmra3tlam+voujuI4E6tmImhiV58HcLaQDAwPvAXxSEOt0uvzk5JS7PM+RvTwlZF4Msr+/j22bDffy8qDV6aT5aGi12nzxmY9KAyVSWDAYBFEBY3U1HpWW4qXRiJLiYjyvqMC3ubkb66O5NHJymEJiHFMbiUTwrqkJ23Y7yvV6vDGZkJmZidW1NSxbrTDV1eGL2YwHJJAIsV4KYhowOg1Dg4NITkrC9MwMEhMT6RyzJwYDS8PX6Wl0f+zChGUSHFOrhAYyJNLz83OUlpbgbWMjG8smF/RZZSUeErW/95zIzbkj7RehCCVuHiFH1ObkgOe4WBPzyZ6zsrJgmZiEdckqkqoTLy8t4X5BAdwu13UgSqI0ScDu7i4el5fB9tNGx38ndns8cB8eore3F4uLi+AZiZR7xclqa2sRDofFOdUcM5K11VW2KBQK4ezsTCKVN8ve4/GQdWFsbGzg8vJSXfHOzg4cvxw4OfHi9PQU8fHxaqTMx8XFkXTssOax2+3qxEGicnNjEz6fH+cXF/QuiyS32tXVFRwOB8xmMy2kOnFaWhr0ej3bxI4mK4xVKz273W60tLQgPT1dsVajIE5NRRJpipqaGoyOjqCsrCyWiHraYaxoPT094HgOFU8rEAgE6CcgIhDcIE5ISGC+r68Pubm5sFgs7Iizs7NYJUVNSUlBQ0MDioqKKAkMBgMr8tHRER0HhoeHJ5qbmxWKJTWtra2sYMfHx9ja2mKFmZ+fp569Hx8fR2FhIbsRPp8PGRkZcLlckfb2duPCwsKP2A8H19/f/4G0skCOJJDozIgagRxZIEUSnE6n4PV66XvmV1ZWBHIdBXLXI1VVVa8B8JRLNE1sYdTG2dnZ9JawopJAoFhfX490d3c3kJR9JmSRG7eCJVyCOnm0ohBBR0fHi7GxsaEYUkWOaffsHRwc7HIUMqGiQYhSZn6//7Kzs7Nuamrqu5qof/6ZiirV8Acnn5r5o2k3XwAAAABJRU5ErkJggg=="

/***/ }),
/* 1830 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1831 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAL0SURBVHjapZVfSFNRHMe/W9GdgeGK6YNXIhEkIomyRIjKl5gPPhgVghUaYbAHoSRYFFpDsnoRIiRFgpiFGvggiiktKAkfRPojMaG0lVuCOG2pc013T+ccOZwzvSbUF36ce+7u+fx+v++598xCCAGThYoN+D8RJlBtFXfcbnd5RWWlx8K0moln4TMWIqvVCj6YQFtbW2sBtCWBdV3P0TTbHk3bRtdaOZCPIokIUCmjqszMzBxxbVVs4CA1OEjON40kljTHgujiolptcrB7axL9ivzEowf3sLCwwOdiv1QruHUGMaQFArQmhA3Ly8vo7upA4OsXpKWlQUiCFTkcjmSosEOEsqHPnjSj09uCxx0v+LPCSumxotjSkqxYtq8G/62rsw3tzbdRXXMDetZu1WNzcDQaFe2z0XTzfAO9aH94DaWlZ1By+rzazcZgW0oKA0n4muuht6/RWFuFokNZKK++CyoVvLHHO1JT5YPcXwkNTn7HzasXce6ggX1nG7BzlwMCLLRhxfPz8xKmQJka79fiqB6GkXsJhcecapWbWxFd3bx17b3s78Xo4HNs31uGqpoGs2f+/rqlp6fDkuwb72L04zvkF5Xh+p2WpN8SiQT/KJSDzBxMDGNdJYFAAPsPHMaJK27xjnPQysoKA/Mw6DqmeDxuECpzj1Wo/w2GBgdwpKAQmqYJKIMxCGKxGH9FZ2dnMTU1FfN6vd1mHvPMqwkJPr/vxRZrAoUFebDb7QwqnuGfczgcRjAY5Emmp6cNl8t1anh4+IMpOCMjA2x94NMrzM3RhaFvyMs/CSFRLQNHIhFkZ2cjFAoRj8dT4fP5+gmV6rEwnp1S/EDRc4/Dri9yayYmJhiQW2Gz2bjPojO/32/U19df7unpeUrnBlSJXW1qaro1Pj5OqG+E+kdoVYRuEA9aJaEwfo8mJzMzM2RkZCReXFxcwroWDCVkxWNjYz+cTuck3QRxVqsnlni9eFD477q6ugt9fX1Dsv1k/fOfqWzdXH8ATrR73zC5xY0AAAAASUVORK5CYII="

/***/ }),
/* 1832 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMBSURBVHjatZXNTxNRFMXPmxmm7XQ0/aQklEQWmogWP1bQ6EJEExYmLpQViTGQsGCJiZE/R/0LNGliWCKtiS6s0GhMwEBpQluqdKadUvox3nlUahkKCcaTvMxLM+93zz0zd8pM08T/kISWGGNhAAP4N6XJ6FYHmBQ2jEq8VqtREV4JzFogHb223bQdiiJkWR4FYAOzvWoVlUoFgsBoCRzcueyF/oio/BdbFJYExoFnArP23g5mBBRFDuRF2FH4AcAGZqeCOYC7bcPt69jMhRPAdmh7bwcfieB0x21oF7gNdDr46fQLqKqCYNCHwQthjI2NYKC/ryMiS81mE1+/rSHx4TPW1jZRKhmo1esdYD55rYqjK6nvccMwoOtlbKS38WN9C4GgikcPJ9DbG4ClN29jyGSyKFeASxcHEe4PQZYlCCLD9eGhKPESNsfFYhl6SedtX740iFvRm1h+v4SXr17j188CipqOEBW4cjWCoaEIxSSh0WjCNJvY3+90LOAvOV1OqG7VapUKkOuNDK4N30Aul8XCwnPMzDxBiaz6/H3I5grIZfOo1xswIZBrR3ewKIhQFAVej5dcC3zldwqwxrzeqLec7UOSxIP3XQDFVgQstMC6gwUB/IBLccHj9fDcHE4nwWpIpze5u95QHz3cEHdIPDQpiuLuLkzqklfgsmVchMdDwAPnvANN10DijpvNupU/FaqiuldB2SgBBKQIKZZSAUDuWDAYI5DOoxBFEW5VgdQj8n0sFkPFMKCqQRR28hi/exuWrLcqmUxWp6amJmi/3iVjwboTuqaBtTJ3uRSMj99HdnuH2hYwMhLFfq16CE2lVmtzc3P3UqnUx64D4pAd/JAJyk3bhc/r58UCgSAikQjkHhmKW6GBKHLo6upKbX7+2YN4PL6EtuyO/X4fXE4Xb53o0LSilQ5/4pIkwe1W+QS6KNPkl+Te7Oz0ncXFxXcgnQQ2ZVmGPxCA0+E8jIXDW9+Mc+d9CPgDMGHmJx9PRhOJT8toyzbSZ/nPy9C5TZyg3920LIowlgzhAAAAAElFTkSuQmCC"

/***/ }),
/* 1833 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPjSURBVDiNnZVNbBVVGIaf7/zM9FICpUBRSaGAAUT+FGOQYCJo/CNRqxviwg2JCyWGRMJKDIGFUaORBSSy0CCmYkgoEOLCRamBFkQGoQ3BghHkx9KCbaW0ve3MnONi6KX32rLwTN7MJHPO8z355mSOeO8BWLZsWfmqVatqrbWK/zHiOHZHjhypj6KoD8CMeLe0ceKF3S1XzxfAIoIxBmMMWmm01iiliiIiAMybPtsBl4CmUrDEaUycxgAZzOh70RpjDEqpQgERKYC10QAyDBsJLlhaa7MYWzA2xqC1LkR0Zoxka4JcWMQxpdAgCLDGZvfhAsowWU+gNxxE2QwqShB1t2sCNrRjg40xBDYgCLIsLpvFihlLeKJ6MXOqa7jccY3WW7/T3NnCRdoLtgDK6rHBw6ZhGPJUbj4bVr/F9a5OovZzHP7zKA9XVLNi5hJef/xFtjbs5Ly7ikLhnSMo6ep/jYOARVTzzsq1NLadZN/tJnyoQMPPXRc50NnE+4++ybbn32NH4x6Wz3iM7ae/xUwqNlajgS+HXew4vjeD5hTaaHIqJCchKlB8daaefD7Ph7UbeG7p0xjRKC9SxCoFWzFMGT+JtuAWYhVWaUKxWAwWTdinWLeglqrJUwvrEp/icP7+xmL45o2PeWXaSnJYyiSgTAWEWAyaoXGeHRf2sauhjt6+OwCk4nBFvqXG1qCtoapyKh+sWc9LbWfYHR3giruVmZGSesdQ6DnY08yxgy2snfMCsaQ4VSRcbKxMtkeHx8KZ81k+bRFmAFIcqThS5UnEkSjHX7qHTy/XMTAuJRV3H7DOvj5A9z89/N3TTXNHC4O5u1DxJJISk1LWr3h5aCETuw1xkpAkyX3ASuGNsOXwdt6u38z1rhtsemYds9NpuHxKQkoyGFPVW876mlrmPzCbfDKEyyck+XjsHqMEVW5p7j9HWRjwRbSHd5euZcua9dzo7KD1WhvTJ0ylckIFl9qv8Mn5OjrUbR6yVTxSMSu5yolkVLAIaBQKhRbFHTPIR6e/ZnrrZOZV1lA9ropjN87SevYivXaQba9tpGb8g3TevOn3frnnM+DX0cFKoSSDigcHJIHjD9VJ2+12+rrz+KGUJB7i1bnPsrr6SU78dtrv3/3959HJU1ujKBoctcdw74cqI548Huc93jlwnjtugAWVc/jlwhl/6Lv9O48fa94cRVF+zB57PDLi8viskgjOZ9vJO4/3nvI08If21+862vDTpiiKBkoFR4L93PIZ/VOCilB7QXnBA17djXjiNMElKWU+dKd+aKpr/LFhYxRF/aVQABl5mAIrR5s0ykiAk1EU9Y414V8tw36/FIowcwAAAABJRU5ErkJggg=="

/***/ }),
/* 1834 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOtSURBVHjatZXNayRFGIef7vnqzORjJjPZdTeTRBJN3F0EMaxrFISQ1UXZ8+7JgwQUcggKQbx4EUXx4Enxov+CB9kIgiAIThaRaEg25mOTdZIsyU4yk4+e6Znu6g/LIkOCmeSg+NJFVRfVz/urX71Fa0EQ8H9EuD7QNC0LdPHfYl0K3eA4GMhaVjUnhJBJVCb5yAbwz/5IzZHCUIhoNDoEnABrNdumWq2i65psugIftcaJ6iGpauaEFQC6poANwbZMahiGWtMIrNXHjcCaBIZCCqgAd779hoPtPzF0m/OZFn68u0hnNktr6hyZ81288upNUDLPBtfVKbU/fD/Jc70hvJ4erGoNq2JRLZfozvTQ35sgHDHlmu+4cQjXzwLXoaZpYm/PUWvvZn5xhXt/rDK/nCfWlGBt/RHZCx20RSI42zPyTEZIJBInFKs6PoQOlSuVnOM4fPX5x6TDRao1G+EF1GxXNcuyIPCxhSCsh0i2JjAyT/L2ex8pQeFw+AXJmzqp+HBLhhHjpWtXOR62I7Dtv5uDK2xcp4bnOsxvRZTaMz1+/Y135bbiaIEjPQ0YejrNY+kYwvUQwlW978teeDzYrLG4Idjcc3lr7H1czz/dioWF1ZxVq7K8uIC5WyS/sSPVa1x9Qqe1SZcKBb+tyiThFHvFXfp6ztGR7aO753FVopee6mtsRWnvgP39PXYltDMV4Ur/M8wt5bm7tMPD9RVph8/FixdkVXQw0NWNbR3InZXlvIc8m9OtiBkGrSSJRuMUtvI82toglcowV9jkk08/Y/n+El9/+QWVpMZKwYNAp3fwCpo6F4PjoXMsQrpOU8wgmUoT+D74AUUJ3dst4LouAOWDEiE0tXWPQFWK57n1Sxg0VIz0Ww/p3JufJ+7XZI3W5JTPznaJ9bU1XEfgo1MybcqWTdSIIx6s0CbLTuYpAoWGYLNcpqWlhZGREWZmZogIIT2sQHQVx3UQnkM43gHxTj784J1DLQHT09NidHT0NTlebayYgIo8jLa2JMPDw8o7x7HJ5+8zOXlHbbt/YIBnBwepQ2dnZ93x8fHrUsgvp3osb49aXC6bIHvludHE9ZdvUCrtE43Eef7ai9JvW62bm5sVExMTN3O53E/AqVWhTta2beXrgbkvK6JdwkOkku1cvnSZSDSG0RTDFZa06nd7bOzNkampX3+mHqcoDjLpNIl4HHnnlQ1l00T28l1H/h1obm4mFovh+X7x1q3bQ42hRzfv3/zzHsrv1jgj/gKL6LYPrGSOLQAAAABJRU5ErkJggg=="

/***/ }),
/* 1835 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1836 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANMSURBVHjatZVNaBxlGMd/szOzs5ndrLup23S3TUIaQ+mHpMXWGloxRVRQ8KIeincVKS09BCHgSQIK9lQ8etFa8avU9hBFD16kakMLqdoPzK5NTN1kG91k052P3ZnXd0djO5vtHpT+4T/D+8w7v/nzDDyvIoTgXkjjDimKMgDs5P/pEnANmfhfA8/V63Vh2bawbUc4zj92XeE2u1YLXLvDnueJ4eHhQ0BEo0m24zD49Bmen/0U1TnHUjzNTO1hum9YmGYHWn839dRZNsYgXnTJJp7lcMcTAFw5+Wi4FU3tYPfKJDW1gN2TJuXPceuaS8yxWJeI01OJYT9WQrFz5Hb3w7zJwLzFdS+JElFYVWQNGFin/4yX09D0GvUuFd2wAIibJpc64cO5hxh63GDbvgEWlyZ5OVuSezQiSjuwfLicyvFjh4macjjPg5RVEwBT1gatBJrl89HNEWaqMXr2CERShojqRNolRoLLXYN4yxI+d4DfK4vELRcAXaj0VnxevXGQ3ugDnLrsYWX38p3aFyQGpU2Pgbnkk2S9ChuvTrNeHyRRdjAMA91XA3iforPvtfv4+C2dpViObxe7ZGJQ2rUCQI/qVHc8RRQPs+Jhd5Y5scXkneQv1OM63m82oq+ToW2bOf5NFs3QAktu+x5rho7btZ7lkQ30a1UyZoUj0xdJzU9yoecyDN2Pc2SWU5/UZVIN/W+HEmutEwdlZnYeJpZ5k3xhmoNeAn/JQHskR35/nhPnRrgZ6wwDQuCWiW+X85tfp1jq5Y3rP9A7/CKT6f18fd4HDXRpRPj/0D6xzqqEs8wu4yLRXRlu7TiAVRNoUUEr1b16G3BTYv+nD0jbV0hntnLBj4AKukpYgkDVatUtFotlQKxtRVNid+AZrv45i558IVQHgfBqZJQSe/oMhjIO77179rNCofClkGrVilBibdN22HScVupw/uD9V7aTz09z+vQXZ8bGxo5KZunuPTb00Ppuh8HeDSqFXwtMTEx8NTo6+pLcN8+qmudxY65altWYw8HcbazljA5mre/7wXplZUUsLCyIqakp/+1jxz4HugPGba8FS0AItgpsWKpxDz5YLped8fHxky2ggRV5+a9Hkwt8L99foIXu2WH6F1EN1JZfc1dJAAAAAElFTkSuQmCC"

/***/ }),
/* 1837 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAL7SURBVHjapZU/TBNRHMe/93oILQVaSwuWaoSiYESjkeCmLm4OxpXEwGBMBxfjwFJJGhKdHNxMiDFBZ4lpIA4MLDoQEozRohIwIa1QaUlNLb1e753v3nkv1z+0iX6Tb96fXD+/b3/vtSfpug5DEpMx4P/EcCZQtnampqbGJyYnY5IhsxKvwleGraqEgA91oLOzsw8BvKwAh0KhQbe7o58QCYQQxjJHUcQymGyjXX19fYPWnNjawEF2c5BYN7edJUM0hydk5skEmGrA94UsMp8P4DD2ZAL/OSeCVzxobScVqa3zqgATAhO6tQ8y2M2h+e0SPj7bxckbAVyM9ELXJKglYG/tF1Yfp+A6JuNCJAgi13bcvsNTOo52wrFbBmHgTy/SGH0wAP+ZTpaccBOdIDDixdmJAXjCPizf34LRcWJ+y/pg3h5fKyS3DMLgLW0O4yPQyxJgms/pX3ce70Dwcg82Hq1ZUCG5GkyY0eVgI0VbQUeeFWj3tjIQoFMG1gw4mM3ne8e8cI2e4PPDWiFuAYd7ZJy/F8LG002UFR3QiJlWhQHnz8pOwHcaaB8JNAYT866KAi3BIxge78b+k2VoKhhUAmgl1NHC100TWxZFeq8HgLFh/HidAnTzGUebju4hiUOZmoMhwJUphu4EoREFuXc/jaQCWgVskhioC78UHcDul334nIqAUkqhaRrK5TI326sLroFa4hBFwhG/C79VDepqEqqqciuKgmKxyF0qlajO1LDH9nX5ANj7CpRLFJJPhjTiNyAcVigUkM1msbOzU5ybm3tjS9xQHJpa07AZT4F0ULi8MlSqIZPJIJlM8lak02kaiURuraysfBA/kEaJ88vfkFg4AO3yYGi8B75+p2hBLpdDOBxGIpHQY7HYxNLS0ludqRosYPa1++opjF2zionD4mYyoHRmZuZuPB5/xZi05lbYKlXDq987wipTNBq9OT8//9wOrUm8vr6eYgewLXEJoP0PXKTN5/PK9PT07cXFxfeHhfrnlylP2UB/AIkQUAMvC2spAAAAAElFTkSuQmCC"

/***/ }),
/* 1838 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1839 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALISURBVHjapZXPTxNBFMdfl93qAYOY9GALEqV4kpDwd/RgvBqNJOihCXcOtjWGf4EbMSTonZgm/AdyaBHl0HKUGmk5gCT9sbvd3Rnfd5rRsdsSot/m5c3O7Hzm25c3bUJKSVCChUT/JwlhYOuZ9fX1py9WVt4moMFJhKyeEPpUyyKVRkC3traKnN//BZ6ZmclOTt66b1kJ3msBOMj6EB14NrKpTCaT1WPLKANAZgxAGF8zTJb9pzgDh2dnLeq02woImU4hzGOsjUzYNmWzWV1gUjLB4KAMXw4PaW5ujhzHUZFMJsnmzXocRRH1+30Kw1Dli/Nz+jYxQQ/m54GJg7WD7e1tBjgkpCApJGfJWSg3EWcRCQXX7gTPFYtFuMb+OFh/7Rs3k5TO3KUwiCiMQs4cYcQRUMTZ9/vaMaAYIzR0PBhafLTIde5SrV5TYNdzqddzyXM9hvjsWJCW7/twr/aasobBeKlWq6N1aHX1JdmOTe12hwEeA+FS0ghdDbZ4sdPpcLTJSSbV1w3YsZQCQAQOHgVFXF2KPtdwYeEh7e9/ouPjYwWfnr5D92Znfzs+OPiM+euDCaXgT7VaoSCE04FLh9ttauq22Q2mRs7Z8RrrFgNUqDL8OD2lk5OG6dIUDsQa9o8Bc3S7PXIuflLIL0doMw69EQcNy3VdteZ5HtpOSNZIx4XXBUqlUrhluG361il4EATYrAPPCpxOp6nZbHo7Ozsf19bW4o4hnNxoNHRZkPUYAddwyH3do6WlJVpeXgZU5PP5J5VK5etw4RObm5tv+GXJYMluVLAjyRDJbiUDkdX65eWlPDo6kt1uV1arVZHL5Z6hW8HSYcUbPP5smmC4Cqher4uNjY1X5XL5A6+J2AWRrOvcJtNRwCoUCo93d3ffATqu3XAZTlut1vcEZACNH3DtFrfTL5VKz/f29vbHmfrnP1Ptcpx+ATOpAog1xs1fAAAAAElFTkSuQmCC"

/***/ }),
/* 1840 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYNQTFRF////AAAAAAAAAAAAJCQkKioqAAAAAAAAODgzOTk5REREwMDAx8fHz8/O0NDP0dHQ0tLRDn0LD3kOF3oJG4gXHokUIooiJIwaJnEnJoweK5AgMZEnMpImNJI0Onc2OrAYPaUgVaNCWrVaW88lYNIxd9pVd+BSfeROmuh6otSiptqaqdapra2trq+vsMatsbGxsrKys9Gzud+5u+qsvfKhwOHAw+XCx8fHx+bFycnJyeXEyuPIy8vLy+fGzOfIzc3Nzc7Ozs7OzujJz8/P0NDR0enM0tLS0urM09PT0+rT1NTU1dXV1dbW2dnZ3Nzc3e7d39/f3+7e5O/k5ebn5+jo5+jp6erq6uvr6+zs7O3t7e3t7e7u7fbt7u7u7u/v7u/w7+/v7/Dw7/jr8PDw8PDx8PHx8fHx8fHy8fLy8fft8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vb39vf39/f39/j4+Pj4+Pn4+Pn5+fn5+vr6+/v7+/z7/Pz8/f39/v7+V9c66wAAABF0Uk5TABweIjE1ODk7PUfk5vf3+vpWaQwjAAABKklEQVR42m3Rv0tDMRAH8O9dLrZYqy11chJd1EVadOvs4Ojf4X8i+OPfcVRHQXCo4NBF/AUdKj5sk7yXmLTvOUgvCVw+3F2GYHFQ3Ev/zAYIoE8zRUwpAAZqZzYxjbKZsmLiyGuExNDxGlFJ1FnDnCWiKBkMNvtEIFWyIqW0kiAjIaZUPT9RtRbF5lrHjCr2w6lIbOhPyN0XVTW9tNrmSzTv1p6W6w9U8XhVPTe0D7RieesTicsnWZPxKA7A9FfdGat9C+t4j2m4gYp3fkyjTd7TNuW2l1gS13v6/dZmSwSorvdhzmCmG1nnAm8fuZW7InFSIITv0MLrIcKFKcrZpHDUlO5JniFcOVfOTtE5JoKZhks3QcVVGD53U5QchBkUF5qPJl/0l86XyS9dmVrX70csPwAAAABJRU5ErkJggg=="

/***/ }),
/* 1841 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAV+SURBVHjatZdbaBRnFMfrpVVa8lRv0UofrCYSQauoNZX2QSiI+OINRfBNfPDyIIJE0BfBy6PgLQpeQBHRN41IFUxjm/hgvTR1t7ubZN2dyV5md7Ozt1x2Y/495zCnTNkss0gb+DOzO9/O73/+5/u+mXwC4B/R3xTSNNL0/0nTmOFmuuFTSV+SviE1OWr+D9XE92YGsyYzMIP0nZ3LIZVKIZVOI53JIDM0hCFWNousbYOuiwYHB5Gh67l8XpQvFEQW/TZH1wvFYpWGR0bADGbVMvBDKpXGYCyOWDyBeCKJRNJC3DDhf/gQf966hT/a2zHw5AkM04RJYoNZxxwrHo9Djapyjopkghm1DMwk/ZhKZwicIHASScuSil6cOgUrFoMm8ur4cSQITiZ4rBsknyWRSVQqlcAMZtU0QAA3XFrxdNcuWBS5tiLa2YnQ1as8jlvBR4ZzC+S8QEdRdQu8DRCE4QLWefCirQ0vDh3SqOX415kzUqlFY2MUe5LA+pmjLpZKopJLI/UYoAoVLJJEQiE8am5G7+nTXKmAQmfPQqtM03iqnOEygUvDwxieRKOjo94GuJcCZrlmf/TZM/w8dy56Dx9Gjr4PHj3KlWp1korltI1T1IpFBGaNjY15G6AKBT7kmt22U/X727fR1diINxs3wrdzJ4p0XapzQPQbTkAlE2/UAbPK5XJ9BrRyNzzvxJ2kJH5fvBivZs9G4uZNBjOExQYYykcugqVpCLxSqXgbIFhNuE4q2+eDf+VK+ObMgbFtG0p+vybAIJa2RY3weX1zgGC14Dq5BBbZvRux/fsRnj8f5sKFyJw4gVw8rpWy+JznCcO1pd4GCOYFl0qMzZtRpr4Ov36N9KZNiM2bh/jy5cjfvYsKXWcD4+PjLD4XI7ZtexvggbKpkAFeZjrTFa6TKrZ1KzTuMfrOunIFg0uXIkorxVy7Fvb166iUSmpCjdRlwBNepnNrzx5o1PqbChnPXryI6IoV6Kf5EV62DJlz51Chyj98+IDRSKQOAwSU6GvAueIRw0C2rU0NcGI8hiGicRqbu3MH79evR4BWS2DRIoRWrUJg9WpvAwSV6qXv1XDR8PPnyF++zLHKNdupUFWORpGmB1gfJRCkthgHDiCwbh16Z83yNkDQSaNXuFR8/jxKjx6xAY5exoyTwUJHBwbpwRWkedBHbUhcugQ7mWSDMq4YDnsbIGjN6tVAeu9ejL57J59tWl42xR2leEPc99ZWJG7cwJCzJWt76t6IaFt1V18FZ8XWrEGFN6z79xGhaGXC0dG6dw9ZgipYk6Qji+/n/UIy4hioVX2ZKovSxmNu2IABAg8sWYLEhQuwMxmOWuaPziMyoZuQmpogRquXgVq9lw0mfeQIwtTj8IIFiNET0TYMrk7NMlyMyHtCLCavbdGogUgkigcPHvxKjK9JUz0MVMc/xs/87dsFbu7YgcybNzxONxkZo/D+/n50d3ejp6cHb9++hc/nY3iA7t9C+ox5Xgb+ve6DQZjU40hLC943NcFOJGTMxMQEi9MRw3nnjairq4u/l2SCwSDDDbr3tzr5PA24+1+kCiLUZ5N2vtS1a0iePMkghfO6dz90JPLOzl8kjVAohMePH6caGhrW072/YI63AQKrAZZJsVvt7WLG3LIF9sAAV6wGdDNiU/LYDdNaf/nyJfr6+gTe2Nj4E923oRrubUBmceLYMQEWKFbz4EH+nquuip/GyrthIBCA3+9HR0eHQZW3Mpw0xdOA/mPiNiAPmadPRca+fShYlsDVAAC3AX4NYwMM5wm3nPR5FdTDQCv1U+LWI0n3BQar3C3gMWyW1/oEwX9z/g/UtV63genOGv2eW/GRWkf6ivRpFczLgJpwkpj5kZqhm0y9+hvL/jh+926QfAAAAABJRU5ErkJggg=="

/***/ }),
/* 1842 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAArJQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxFYALF3kOG4sPHJQNIHwXIZ8RIqgQJpESJ7ISKZMeMqYkO7ooUjk2Uzo3VDs3Vz48W0RBZE1La5FobFdUdmNhgA11gg8PhRUVhRl8hS0tjgyDkAwMkEKIlYeElYiHlxSjl4uKmY2MnZ2enxCVn5OSoRoaopeWopeXoteaoxUVoxcXo5eWo5mYpB+apJuapM6cqNSjqp6dqqGhrK6urNCpra+vrg+krqalr7CxsBAQsKinsLCwssmstae9ta6ttbe3uLGwuru7u7KxvLW0vLy8vNC3vhK0vq3Jv7DAwMHBwcHBwhsbwsLDwxkZwyW5xNfDxtDFx8fHy8vLy8vMzMzMzc3KzhPEzs7MzuPM0BMT0NDO0dHR0s3N06LY09PT0+jQ1NDQ1dXV1qjT1tbW1tfX19fX1+3V2dnZ2tra29vb3CnT3LW13MnJ3Nzc3OzZ3svL3xXV36La38nJ39/f4L6+4Mbe4cTh4c3f4eHh4eHi4hoa4iEh4r294tLS4uLj5Mji5OTk5eXl5ebn5uXk5ufo57q65+fn5+jo5+jp6Jzk6Ojn6Onp6Onq6b296enp6erq6err6urq6uvr6+Dq6+vr6+vs6+zs6+zt7NLS7Ozs7O3t7e3t7e7u7u7u7u/v77a27+fn7+/v7/Dw8Ojo8O/v8PDw8PHx8fHx8fLy8vLy8vPz88XF8/Pz8/T09PT09PX19fX19fb29vb29vf39/L29/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////ev+PyAAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAlNJREFUeNptk01oE0EUx9+bmXy1tdEEtNT6eZEeCulRiqCCIkSxSPVSEPFSogcpRUQkRxFFq6DBCr2V3gVRakUkHqQXFS29BD8PXqo0X012N5vM+GZIOxvoW5b9+P/e/79vlhEAgAxhq1JSARDAujgCbqGrVl1qIBRbWGOCIQoBmmTUY/jwiO+B0DdFAoQIg0AqsuNoDDAMJgKRhYTg1M8YCDpQ+xTeTZCpBqiMbkI4UumU5/kbggO0ARQREIxxNBm6Mffl9AAwC0S0vRAkMuMwvTJ0DgJAtEmSyeDI6P3twuB1PZB1IBkFo9IBbHL1QJZEC2hC65wSgLNMceAOQgdABlpnSAxOlHZOgy0DtHWGxGSK+x4oYJ0O3OrX/h6860jZi50RZnjSS/f7uq8Warv6sDMCdD+ds2uZZyNLyaEE3wSsA+nLanQ2Xk7t72l/gbKAyZ/p5gurg0e/JXp1+uKRWHBMRMh+3HGiciz9YY7d6weYfzE/Ew1G8FtfVcU7Obz8Svif+9XLfKj581AQmPqOsbOX2J+luDqelp9Wks6p3b5SbYC1sr8wcn4c87JHjqVac8nt0eG9xctNO+Y2FRofAyi9vpBKSLn6Pt2Dv33X8TcAuPloME2XUb6HdPfizI9YVyy37spNgE2hWdozCKrp/YtPlhcfr9cbmxF8Y+VJV55blNU3Obfu2imUwQyjpN+odr194pXrdqm1ZveblLX4w1rV6AZQpj8A+upppe4EflaTK7NXTALyyJVG2fHAAi3nMIdgNRzXhwDQrHvYAShf2of/iKfBtWdxU0QAAAAASUVORK5CYII="

/***/ }),
/* 1843 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1844 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARuSURBVHjatVfLbhxFFD39nIcNxrZiRwmKWBAkNkgsrZgVS8sswRg2XvEDfANfwEew5BOyQIQdSUAB2zNjEjMzHsfDZN7T3fXgdpXKLlOBdAu49tGt7i71OXVu3Wo7lFLChEdByc+H+H9CEoS0SEOLPCdehUZgbv/H5JwwIK4BaRBGgImIcPfFcPggS9NcETwDwL6+rsxc63z1zHO1B0GAeq22BeBHQmIE2BFnaYY0Y5rMgu9fEamRm/+W3LueY1gR2vMUNBklFxTO2MqOEDvMPMPjCtDhkrulKObCy5zwfUdU6KgEtOV6siNAJEPMR12Mn5+g3znG+rs7uLF5G1GlTnN8d284pXiFAGhyx/JnT77DRnSOyWiA6WyG6XRKmOHbr7/Ch/fex+rq66hW61hZ28CLtIp33vvgZSV4pQBFLoS4ZvcfZy3U06dIGEOapkiTVOVFkmA4mqA/GGJ5uYYgSDAdnuO1ahXn7QY237zrdEqxElgrz7IF4lkDXuzRylMkRPys8xxPjk/xa7MNRCsYDMe4tbmu2iwkBEGGt+p9zLI7iCu1cg4YxQYP73+DOj/Hz780cNw6RetpF4PxnIRwLAhxtYbeWQf3197A2uoqbpKQO7c3cda7wMX4AT76/MtyAoztBstRghsbt7C+sYntbQ7OBRjnVAJGJUjBGAekRP4TSAEQpGQQkza80QJOvEKAewAFEcIwULAjYwws41QipsZcISVkEFxQ5vDDir1qNS4tIAgj2CGlBFcEQmchIBQ4PRMaQucwrqG8gL9ACN0V0J8xCEWqBTCuSyIoE6mBEUHi47IlcF2QXoiUOgFSr14YBy7JGZFxBaEztAiJIFIlKCnAdIAR4UfI0smlA/LKBU3KmYZg+lpDzQvjqm29ulfqHABBwiMHmHmBhq63JuI5oRZh3DDzwiA25OXb0AiJKhWweabaTP2qVpNEaupuBHANIS4R12rOqgs5IM3qld08b68rCwn2bichphSGWM0z3ZJlmTreyzkgpRLCuOpzbS0RahOkvdMp5+TadkOuhUjME4bFYoEwDM1fRGodCv/ogKWWMYlaFIMLfeIBxgXjhCGGuVanY8oEFglHkiT5cyNAUmKF2tBkufI2zic3cyvVF5AxpsaUCdp2slitjqDGfsWHV/WwtLSE2WxG90Ml7PHjR98DaBMyuALciOMYW1tbjigzNtnUnoQp9Pt99Ho99Xw0GiGi9zQbjaPd3d0vAHRJjHAFuC4UuGcfzzyHcqnd7tCH655afafTweHh4e9EvgegSXPTIiUoIsaQOwLyBc7nc3S7XbRarYv9/f1PARzRvEWxk1BKFHXGbEK7DFR7Rd5sNi8ODg4+G4/Hj2jetMA5UMhyR4AFJaBeryvb9/b2PiHynwBMihxEUsGNMm4onJycHO3s7HwM4JiuZ2VOQhb4vnqJs9tdQjPPbkPZaDR+IPIDAL/R86TM55gT2tR6246w4pESTgk9Is9QIEJrNYxW0wZw9i/+K5aETPV5wfgTgvhTReCa99kAAAAASUVORK5CYII="

/***/ }),
/* 1845 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1846 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1847 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1848 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAklQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxeHh4fX19gICAgoKCg4ODhYWFhoaGh4eHiYmJioqKi4uLjIyMjo6Oj4+PkJCQkZGRkpKSk5OTlJSUlZWVlpaWl5eXmJiYmZmZmpqanJycnZ2dnp6en5+foKCgoaGhoqKio6OjpKSkpaWlpqamqKioqampqqqqq6urrKysra2trq6ur6+vsLCwsbGxsrKys7OztLS0tbW1tra2t7e3uLi4ubm5urq6u7u7vLy8vb29vr6+v7+/wMDAwcHBwcLCwsLCwsLDw8PDxMTExcXFxsbGx8fHx8jIyMjIycnJysrKy8vLzMzMzc3Nzs7Oz8/Pz9DQ0NDQ0NHR0dHR0dLS0tLS0tPT09PT09TU1NTU1dXV1tbW1tfX2NjY2dnZ2tra2tvb29vb3Nzc3d3d3t7e39/f4ODg4eHh4eHi4eLi4uLi4uLj5OTk5ebn5ubm5ufo5+fn5+jp6Ojo6Onp6Onq6enp6erq6err6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////AtbWswAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAmdJREFUeNpt09tOU0EUBuB/rdnddFeoKCAHDQaIQoNEAgriISH6FkafxSt9BS8M6BuYmGiiGC81hqicNCoSCoSQitCj+9TZM3ZX2u4mrLmazJd/rXUxBgBiwnGllQYqgBOCcAzROrBVCGLW4yILJmJGKBmgqjfvl70QwCyVmIUwIKha1ffQmkAIiHhnSFQEmBEeOurIRCEIVfU9vFePwH8hgCNAmykIxs46JTvFn4IeGQgNqAFSApzJWbcT8Ri0b28udQ0A4DowVkYpfXDeUtJXrCR6i+vOJYomjDLvddplryVuANL1vPbty4gAfBsjO8etpiFCEPgFWWieYaySoDgnDINRDsqA2gCAOuC1cehsXwvCMmHB+51FdAYeZ8hNTBZaq8RuX94iigJangAnd4qpooD+iwtbezLR1AITDN3qZZ3ZV1KTcXbJ6alERAB9uULBbn889yIbVMBbt2/bBEE3wCTD7MgmzvSX1vTFWPf3r0I3r/l5iqXq3c5efxlTaaM9nYxloKMtrhLLPI90v/OLus3aH/yViwdNCYvXYHU5u6enV/vYjg1/yrdlXQVT6xqYYvYPThnpc/uBgsKu5aiSwgNZX3NxBrPPnY6hDdNlPtET5J07GR24TrkGpkEz3fOH/q03BHj9Pw4ngj1rvuSqGvh4Axh8+PP1wr7SEAuptruFlbmS7aMGZgAQhoeJtFa2ndkqrT11bbexxftKQtWAtJLSS67OeXkbiCRQ478p5Z988rdoowa0xocwoRYCqZ8VbAd1ACluHn0JQJMwH/l5x0MDBM49gWj5jltGBEjboyagy6px+QdhwAWwvWbtIwAAAABJRU5ErkJggg=="

/***/ }),
/* 1849 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1850 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1851 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1852 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1853 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOmSURBVHjaxZfvaxt1HMdfuSTt1mTtMlzaZHVbLaVQW1Z1MHTM7YEI6pOCiPRRTUVkIIo+1eGD/QEyBEHwRzcQtoJI6VMVBMfYsD/oollrZjfaJE23dU1zS9Mkdx9zIcnRA3eQW/AFH+6b5MH7dZ/LfT93LhGhhqsMoBhLmoMAupihGAK1cAUIVMtd+/0Jh2vAQ6NERAfwYOIF+kTkGs3A7PKLwBywA6CwmxaajplhFXBVqslYcxT+Zzw0gPqgQOzKGvn1AoUdHb0kdPTs5dCZAKF+P4rb1RyBh4k8v33+N8W80PNaJ52DATweF8bdux7LMv9lkl9WVEJD7Zw+9wwtbW5sEZFKAXuA01Il+83vIrrUKeY1ufzWrNyZUSW3IfLonkg2LbKVFMmsiGzeFdn4R+RBXOSP7+7JD2/MyvyVNbFiZBhZ1dz/7oB//CTMZOGFfeCCa18s0zsSJnjUh14C0UE00DVzLTqVz4dPPEV4+ADXLyxWQobf7sKK/Z/QRSW8IiGgaC784T1UwjWM4+519SjVtbGvHT/bz58X19hM5e0E7CX8B1vYSu5Yg6wSlZLqd26PwrH3+tj54Gs7AXuJw2WB5akUWsEMskpIrSs6dXpO+uj88SM7AXuJwEiQwT4/N75drrffKmEUQp32p8EXxMCJgCnx7PlevPObrM5umqFmywGbcHsBe4kTl4bovHyRR/cLZvv1BsIb3Yrb9nsonnuHW59GKeV0kMbCHc2C7uEOuj8Jc+v8TURvLNzxMBoc6aLllQ7ufrUE0lC482l46uOjxO+r+FIZfAdpCMXZ0w30vd7FX6lMfcfEHqmWc4HMCgQHgiSvZuB5P+r3V3kcpVJJMw5g4nESnluH7a0Ce/d7QXEZA6w+YTVNw5y0oKqqPjU1NQ0kgKIp4CBcK+lEL93m+Ifdu8Z7JpMhnU5X1l6v1zhz5ubmZsbHxz8DUiKiNyxQnvvcua6y+nOCjWSO4UiY3lMBaui6TiKRYGBggFwuRzKZJBqNLo2Ojr4P3BaRQsOXIP3mBX51neHAkVaGzoY58lw7VozWG7W9vU0qlWJxcTERiUTeBZZEJG//ROSQcrDEYjGJx+MyPT29GgqFXgX21XKs5eEJY1xvRVFYWFhYGhsbi2Sz2ZuACvbPhK3Ay+KQctu1ycnJG8AxoE1EeFxZBV4SBxSLxdLExMRPQD/QahNu1K6XUw9wCOh2sD8UgBUgbfhgjymAKeF28IomQNG8z+35F/XbMMHXtozzAAAAAElFTkSuQmCC"

/***/ }),
/* 1854 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1855 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1856 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1857 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1858 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 1859 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1860 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1861 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAT5SURBVHjatVdJbBtVGP5msceerLaTZqFFEEoJJb21EgirAg4siqKCAsWk9JBKiOUGh4oLFwRiFVw4IKFSVEQvHFpV4sChCAmJ5AI06QElzUZSb9ljx9uMZ4b/vWk8Ew12HAN/8unNvPfG3/e+/71/bNmyLOyEQAFAZJf4f4KRmZaLVHaRM+LQHUg73f8xuUHYIK4N0mDaApzwEe7f3Noa0zWNKYKwA8B9v1vZzr3dOmOCV7skSVCDwUcA/EEoOQKc8OuaDk0v22QuiKJDxK+8bVVyYXfrhytk9zwOTsYaLyg8167WK8QJ9zzBGfY64CX3pqI+F/7JCVGEE1UECATbcnuyW0DZ1PDc5eeRKK7Q/e7PZ/u6N9CJay9fhV9SvGLs670FwCb3WM6wXcwjsbSGew934O7IAYiCSBBgEvvi+jIWZtaQozlKS7BaCvYUwMlN03SsdcEwLQSbBHR1NKOvqxuyKFcE6GIRqdQ6DAu8j4f3pNSZAmflHhFtbX6Isom8XiABEu9jdUWQDbS3+SB6Nml9DngVe8k52lsVyJJIAvKQmACQAFgkho0F3XMbSwEnrQZG0hKARG1OL7gF8L6moB8Q3ETe2DsF1QXwTSeYIl9tpkgOCE4KWgI+oEzj8Kze40DjAgimJnEBtAeYoIoDIbUd5aJzfBveA0IN+GSZSMQ7Kci7BVBfCHpeZHMaSEENF5a3UjBNAyx0U4dV8iHg86FklEDOV8InETkUJNaXsLyZZs9Snw993X31CvCegM3iOr74/V2ofqBQMGGYJgaOhKHJ21D8Ms89LNseSRZwrD+Mb258Asuke4kKVwF4f+gzhNVOULD5+6sDIbUDxWwbIocyGHgwgkwpT25Y+Hk+SS5IsNifZeud30zh8fvC6BEUtAVUzP61ge2Fdkbe4DEEOD4+9QFe+Oosgq3AVHYRm/kcDCIOKBJIS8UBQ9BxfX4SoaCKo+F7MDaRw5XXLnhWXZcDllOEeLn97tzXGL44jFNP34WJ1AJ0w+BOWHBSwCT7ZAkDvYfww0+38f3oFT5mmEYDDrDS6nqoOdCES2e+xes/nkb0eA9uraRgcQGopID+ceRAD8ZupHFh+BIUyQ9d17kDhMo3IsB+rLYDgKecdrV24r3ol7g48w56u1uxms3tciDS1Izsih/nj3+KiBri5KZpMrgFsItyPcfQc83ah3r78dT6G/jTvAxNTaBULnMHFJ+MMLrQ3xTDAwcOQ9M0jjKN2yJsFyYnJ34FECfotQTUzNmTx55A4pcE5IPXkdTS3IFepRuBxZN47OEoX/na2hrSabsWqKoKH9WN2dnZ6aGhoVcBJEmMuZeAmm+z0ZNn8eHVJA6eoD4LyPx2FK88E2PkfOXxeBzRaBT5fB6JRAJTU1O3iTwGYJbItXpSsKeYt589j8+vfcTfC28NvsnJDcNgArjlhUIByWQSc3NzqyMjIy8BmCbyYn2VsMrZLZVKyOVyyGazHCfCjyKTyWB8fBzBYBCBQAAsVDXIycn21dHR0TM0d4LIc3BFQ3tAURROEolEKmO0ar7ZaOWV/FPOue2xWOxFIr8JYLueQmRxeKJegU6tJ9unBwcHTwO4RX35/VTCsiSK7IM8P0CqEFa+wtMZZ7BmZmbGiPwcgAUaL+3ndWwQ4n6/P8r7GwuNsERIE7mOOkJ2raZMq4kDSBGEf/ELWOfnvM74G7xqILxoQscXAAAAAElFTkSuQmCC"

/***/ }),
/* 1862 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1863 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAT8SURBVHjatVdbT2NVFP4oLS20tOVWLlI6KkwpZMIkiIyMozHGOE703b8BJBCNmfBkwh/gxcuLidGY+Gii0ShhDAxMZRiQzFCwdBhp6f0OLRRca2UO8Vg76SG6kp19abu/b3/r2+uc6s/OzqDE8PBwLYA2akb8P1GgFvF6vSVlQQ91tE1NTX01MjIyjApRU1PzzF49Vsfi4qJ3dnb2fQChSgSMDoejE4Dl34B1Op2qL2uVSUl0dXV1qtRVE6h84nJw6SuBVySgzKsloAA9E1zG5QQqgVZNoAyYWjUpqOgJMnv1CpwDlgNr9YHmFCibVyTBkUonkc1lkM6kkU6nwGFpsMBstsDpdMHaaK0EeGEFpBWKBfi2HzI4ba6DxWKBo60dhaMjIpNC8CAI344P7sv98LgHyvxAe2hToLa29nwcjoQQ2PPL54OeKwTcoUoFR4YUubuyhPWNNSTiMbx2443/RoFkKgF/YIektWGAwE1GkwKuktpms+OtN9/Gz/M/YjfgR3d3D158oVcDgXJwdi+Bb/NYTm4kcB7ncjnsPQkgkUzQOAur1Y7mpia4XM/j2stj+Hb/Gywu3WECKmNqVmCXTn5EOXb3eWAy1UPWdv/AxuYDFI+PcXp6Ki1Gku/slNDu6EBzcwu6n3OyH4Rgk70JFHwYTR6QcSgcpHEtbdgja3/uP8Ha+ipKBOp8KnE0GsE97zIDkBJWJsSKSB8OH8BmtV3MA8fHRWrHtIFd5icnJ2Sw+wLe2tqGV0avgyMUCgqY2Wzm2yFEGhoacFo6RTab5c+qJqAqKLl8Tn5ssTSCgmSOIn94KGuunkvnssbjMVlrbLTynMdcH6Svr68X4hQ816ZA/imBOoNRCKVSyfOcOyklBCb+CDwO8Bqd2sJgPCZVQhDyZotmAooCzF5kzOUyPBcTKgQSyTi5vhne35Y5VZKWGoDBRJHHewG0tTrICzZe02RCxYiSewFLJXmNjNgNCiJVwvc/fAeDoY6voNx3P90M3/YWSkT44aNNcAwNXUWxWFSAudekgNR2HVXDZDLBdV/cPHTlKtbX18gLefnO6OgYXM5LdBOiSCTiWHuwikbyzKvXX5cDFAoFKFEi4tUQUJVXd18/7tOmyyuLVOVuwtM/iL5eN4OxvLyptFs330UkEobeYIBBbxDZ8/m84gktBNQquC975O4Hg/u48+s8XhoehV6vh93epGzOja8r3xbpDw8PuVKyQXnO3+O9OB1Ve0A1H7t2A7/M/4Qt3yNy/C763YNccAQwT0Chg5AUHKPRiB5KRyaToWuYVkhI7m02G6UymWULVeUBtRfMuPXOe9j4fR0r3rtYvrdERpSTK01AOto7Ke8pkd5AqWhpaaGy3Mw+4LX4zMzMHIBw1Sb8Zwx4BuVZH41FEY1E5MVEV8OPbT0XIal6sVgMvb293EQBn8/HKclMTEx8COBr+k9Q0PBWrH6nU8Z2m10pMJxXPiHLzkBUrFL8ovJ38Pz4+PgHAL4k8CwotBJgcIWAqlfKLrmbSTAYNy5gDM7kjqanpz8C8AWBZ6CE1v8FaiLSyuaKGnV1dfD7/ez+Av3Luk0m/JzA0xqehppDISRqmEwmJlOYnJxk8E8JPKXpjUiDImWlm53f2dmZI9k/JvDPCDyh9Z2wMDc3N+9yubYupATFwsLCMhnyk9XV1RgotBKIbG5u3qZmxMUjRuBZVBl/AfYK8MOiZq32AAAAAElFTkSuQmCC"

/***/ }),
/* 1864 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1865 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1866 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 1867 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAUdSURBVFiFtZddaBxVFIC/eyfJpsluUklK0qS7Jmm1rVqkVJRiVYQilGJFsPiiL/Yh4HNfFYLgQ2tFqbQgxUYKCvpi1Qeh+qKIbfO3/TGJNk2TJmmS3bQpuzO7yfzc40PduNnubjdCD1x2Znfmft+cc2burBIR8mPXrl3NQD0PJwIgMTAw4Oa+qCqA1+7du/e97u7ud8rNopRCKbWynf9ZuJ0f8/Pzie7u7jeB/qICgA6Hw01AuBRUa110O1+klExra6sSkUj+vIUCRUNrvQIrhOb28+HFslJs/4EC+YByEoUjH5YPtSyrcoF86FolCsGlMlJSoBBeTKSURO78YrCKBSzLKgmey0xy/e5VZpxxptPjGBHaIp20R7rY3ryTzvVbS16x1roygWJXbvD5+eY39M3+gi8BBkMgQiCGhaUkQ4nzfD/2FS917OfgtkOErNB9EhVnoBB+103w7V/HWcjOEYhZBf9vCAGGcze+Y2j+PIef+5D2SKzY9KtZDxJACd+PnaoIbv7dv2XP8Gn/BxhM0R5Zk8D52Z+YsW9UDM/9fm1xlG9HvywLLymQa7hsYPPr1FkCMQiCEVbANVYt0cYtxNZvIWTVroLnxtcjp1nM3kFEKFxzclG2B+ZSk3jio7WFoNFK4Xo2TXWtvPDoPlrC7YgIt+wpzo3/wIw9tQI3CH7gMXr7Ks9ufB6gqETJEiilmHFuEEjAcuCy5GdZ8rOIwDNtL7K9+WkiNY1EQo082byT3ZteRmAFbkQwYhi9M4wxBmNMUYGyGZh1JghE0LoKjcI3AeHaRlrCm0Apog1diAizzjQbw1HCNY20httJu2naI1Gm0lNcW/wL3/cBMMZUJpBrmrqqBgIxuP4SgRiUsvC9FBnPBuDG3WuICLXV63A8m4zvsDEcxV4cQasqjBgiVZH/J6C1ZlPjZoLpeylVysKyqsl6Gf5ciNNU18L62iYQuJ1d4HJyAMfL8NP4WQKE0TujGDHsbdu/IhAEQeUlUEoRa3xs5cqNAtfP4knAhZnfsF2HzY9sQxBG7/zJ4NzFe7diXv0NQkf9ZpaXl9cmkCvBpoZO2iKdTKTG0EojIgQi+Manf+4PLsz+vqrhCuGx+i5aq9pwXbekQNnngFaaQzsPo5W+dycELr7xV91qpeAai0Md75LNZEmlUqRSKTzPq1wgN2INXbz2+Nv3PWTKwY0I+za8Rl0mTDKZJJFIMD8/j23blZcgP17f+hbhmka+uHwc27PLwmt0La82vcEOtZO5uTmy2SxBEFBfX49lWctKqVV1qOidUCnFK10H2LFhFyfjHzE0349vllbBtariichTHFh/kKpMNUorGhoaiMViVFdXk06n/Z6enhPGmJGKM1C4iLTUb+T93UdZ9pa5vvg3o7eH8QOfWG0HLdVt2CmbhYUF6urq2LNnD47jMD09TSKRCI4dO/ZxMpk8OTQ0lKwoA4VlyF9QNJrOyBai6zpwXRfXdclkMmQyGdLpNM3NzSvwZDJpTpw4cXxiYuKzeDx+q5BTsglLRU4iJyQiGGNwXZelpSUcxyEUCuXgcvr06c9HRkY+icfjU8Xmq6gHSmUiX8D3fTzPw3VdfN9ncXFRent7T125cuVoPB6fLDXfmgUeJBcKhXAcR86cOfPFpUuXjvT19Y2XO2fNAqXe93MPr2g0GvT29p4ZHBw80t/fP/ag+QoFzMWLF8d6enp+XKtYLoaHh29OTk4eB/6u5Hj1EP6eO8DCwMBARQf/A7QIXbUdgB4OAAAAAElFTkSuQmCC"

/***/ }),
/* 1868 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1869 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALBSURBVFiFtZfLbtNAFIa/YzeVmnTDGrY8BFLfIMoWQlmVDW9Kl6hlldJESDSNIrUqVSClY8eni9jpeDzjC4IjjWKPx/N/5zKTsagqhYmIABEg/B9TIFNLVIprEYmAF3mLi+f/WHwD3AF3qpoB7FkDesDrn/f3p4kxIIIUbUu4uy+RFffyzCpWv21xHNM/OHgDfAEeXQCA/cQkmCR9Fs9bFD0L7YCc35C4lH/37Wd7zjghF3MBxPJUHK/FI+7LXT5O7MduBILilVQ0RcEXiSiqQFUAJCeN8sFdASq14czdCEAu7oa8NYR7XZq62utJQUSWZZXKDwG4deAV96yUIEBRIbti8wDs+p1rV8QVbAWwI/aJW6J1qyIk1g4gtAJ8AKE0dLBqCjoAhIRDIO1qoIN415B3K0JfayHeNQ3eImxMQ4uiawviLcLgCmgQb8q9ffYIAtjh9kGEBNukodsyxNnHW4j7BHxe1wIIoB7vQ+YTV9VSc8fWAiCCqJa21pD3PvEsy0rNhojjGLZHsx2VPwKOcJ3H9pjNZkOWZWw2m911AZEDKJDWR4D2+fV5nqYpSZJgjCFN07x/G4Xz87PPwBxIagF8AnX9rvjt7S3L5RIRod/v0+v1mE6nF6PR6BOwKE7EtQBt/81gW3RF2I0xzOdzjo6OWK/XXF9fM5lMrkaj0RiYqqqx360e0jxCdTBFkdkAWaY8PDywWCyYzWY3x8fH74ELVf3jzlMFaNhCXRhVLVV9kiQcHg5YLBZMp9Obk5OTD6vV6kxVf/vm+6sacAHsZoxhMBgwmUyuxuPxu9Vq9RX4FXrfBiitzzbmiwbAbDa7GA6Hb4Fvqrqum8ONQBpHEarauPcXgiLbU3Qcx8RxrJeXl6fD4fAj8F1VHxudsD5O94CXwCsPWFszwA9gqapJ0+ASgAUR4/+GaGMKJPY6b7Inl3tN9u2qDjYAAAAASUVORK5CYII="

/***/ }),
/* 1870 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAASFSURBVFiFtZfPjhNHEMZ//Wf8Z42ILHJBzjXiGUC8wWovSCQbciJCCmeCeAP2hLhyhBfgwok7UjhGsKdl2VWkEFtBXsjKa489M92Vw07Pjj1jr4mSklrjGVd3ffX1V9UzSkQIppRSgAYU/48J4KUUVIXfSikNdPNhwv//cXAHfAY+i4gHsCWHCPj27+Pj12mSgFKoME4RFvdzyMK9OsOqSs/LZoxho92+CvwGzBYBADTSJCVJs7Pg+dD6LFABaOG6LLiavzbK/9kFP0UebBGAcw5r7TwLC1eXZZjgU8m/8FMlTBUGaoMrpUjTlEYUnW1FDQuzHIAODCwyoXUFVOWJypFqreeyTZKkFlh5ZM4V81U+X5dGHSsVBsiDBxMRRIRpHOO++grxvshE5VlppXDeM5tOabdaaGOKzObEWSPMmi3QeO9Jk4TMOdI0JU1T+oMBmXP8cu8eIoL3vvDXWvPo0SNOTk7wIlzodLDW0mg0iPJtWxtAUEiz2aRJ3jm85/j4mF6vR7fbrYgP4PLlywyHQ76+dIlWq1UbcC0AuWchNp1vyc7Dh3S7XZ48eUK73Z4DoZTizp07xHHM06dP57Tz5QBqxAVgraXdbs8FDepXStFqtXDOLQ20zKpbUANARLh79y5Xr11jMh5XwCmlaDQazGYzRGQpgPU0sEBfqIJ4OsVlGWmakmXZ3IIBgNYa5xzOuaKUF/3OB5APEcE5h4iQpiknoxGTyYTHjx8TRRHe+yJbrTXhUJtOp1hrMcagtcYYs3JLakUYJoRSA3DOYYypBF0muFCqoX2vDyAXl9aaljEFkBcvXrC7u8uDBw+4ePFipcHcv38fEaHT6VTEGnzL7x5LAYQtKE7B0GazjMlkQhRFWGvnmIJT6pMkwRiDMWZx2Yr/SgbCYVN2T5KE8XhcLL7IQBzHzGazuTa+LOuVABQgpUYU9jsAWNbdAgClFEmSYK0tKujLGRApsvfe471nZ2eHK1eucPPmzUKAZRE+e/aMo6Mjbty4gYjw/PnzoocEEDl7ko/lDGTOMZvNioNoOp0yHA6x1jIcDguFlytif3+f8XjMp0+fEBH6/T7WWqIootlsBm0IkK1mAIqJcHY6RlFEr9fj1atXlXcFONXI0dERL1++ZDKZYK0ly7LTJhZPERHevn3zK/AnkK4EECwE0lrTarWK+0Uheu8xxhQNKo5jPn78iFKKjY0Noiji4ODg3dbW1s/AILwRrwSwqPJms7my6YgIWuvTd4d+n+vXrzOZTOj3++zt7X3Y2traBg5EJJlL8rzgZQB1PiF46P9pmuK9EMcxg8GAw8PD4a1bt34A3onItMJyTfRaRgKARXBBkGEbsizjwoUOg8GAg4OD4e3bt38cjUZvRGRct+5KDaxzrgcGwkiShE6nw97e3oft7e3vR6PRLnCybH4ZwFx9rmN1bAAcHh6+29zc/A7YF5HJqjUWGchMzSm37Dwv94FQ5+/fv3+9ubn5E/C7iMzOTaL0cWqBHvBNDbB1LQH+AP4SkfQ85zkAJRCGf/9VLEBarvPz7B/bvUYLfttQogAAAABJRU5ErkJggg=="

/***/ }),
/* 1871 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAQJSURBVFiFtZfPixxFFMc/7/VsXI0ISVhEY4w/yEWDMeLFu5dgPGjI4nqSRVQEDyJrQMg1hyCexLPiHxC9CQZzMy4oIasH2TWJkGRH0TXC7M+Z7noeuqq7qqdnZwR9bDO9Nd31/b7v+76qGjEzQoiIAAoI/08Y4CwClXAvIgrs81cWvv+PwQvgDnDHzBxAJ3pgCjjy0sdrl9e3d1BRVEFFUBEk+hQpxwND8eNhQJBW5ndNdfh0fu9zwBVgp0kAYM/6Tp+N7T6ZCqpKJoJqCR4+azIeLNyLB/bjIcKdqgDsiQFjAgJIJkKmSqZSkQgqqKbglSKVCoFQPaVEUmSqFU4bAf+Q0MkEFfUEZASBSAWRClii7CXIEc3djCECWimQZl6BaosCLSr4v6G5xxNQqcEbtR+vApUZ4+QrRSZTIAXPVHxHNFUg7QyvuVTSx9BlZC290VoCVfHu15EqjDJgLX1qwIkVCLVVTVU4MiO8fMyhInz5U4cbazLk/FT+4bWgzQM6SoHQfqETTj1tPD6T8dhMxqnj7YrU//v1I05EhxUZoUDbxMpUR8iyMutMoy5oLUE72GRdINJYfEofXFhSTj9TCvbFEpEJG6thQ36JQNsW6Ik8oCJc/xPOf23D7q+USH0waYwoAUkZ9t2jPHJAeHQm4/B+5fAB4YMLeUogybSRUdv4KALDux98NDtdfR9t38kilAC0dMC/UkCSPpcEONw3V8DwbpLtBOXY3QOexBuf76AqfDLXqQgk4DGJCHgSFYYJEK/rwe3leOP41ur4NtDw2sTrgJj5p8sr7HgxgbLhpd7cG+DODDMjfsWXyPzVTiDORKLsRfATehOiraYzM5wZzhmFcxURgKlMDMgnUqAGrs3oXFGrEOrcAC+cUeQ5O4M+hStwRYEIPPXAgNVfrnwL3AYGowlUGUW7ncdzzkUKpCYzg8IZeZ6z0fsL2/qN++8znjg0zdEHlUvfX1v+8N2TbwLdcCLeVYFkdq9GTKApfSm7o58PcBu3+Oy9Z9nc3GR1dZWLi8u33n/95CvANTPr71qCphr1JiPDBKLszYy8KBgM+szszdna2qLb7bK4dGPtzNtzc8CymW033x1hwlgA4dwLm2WWziojnn3+b8yMc9/sxyiNV5gxyAc8eehuut0ul69eXzvzzmuv9nq9q2a20Ya1qwLBaM45n2lNIFHDK+Ccw+V9jj08zcXFldsLb83O9nq9H4H1URAxgaQ/4zj71b3DRzDqDjHqVjt+sODSD7+uLMyfOA2smNnmbjk2T0R5R5WOP5aH03HdEcM/uswMATIRpjKxP24uf7cwf+JF4Odx4EDy47QDHAQeYlxpRkcfuAn8bmaDcQ8nBCISGZPtI21hwCDu83HxDzicgh1FOivcAAAAAElFTkSuQmCC"

/***/ }),
/* 1872 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1873 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1874 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1875 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1876 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPzSURBVHjatVZNbNxEGH0ee939SZsWRJHa9BSKiFqBBJUqQg6lgECKIpULhCAhhQO9w41ze+DKsaL3ihstUUFwaFqJqhxIthESWbIRf0lY0RDSZL2J7Z3h+7a2xpuJNdkI3uppZsejfc/vm89rRymFFA4BgOAp/h+wmFQZUTaQirPwkYRuev0/Fm8T15ikK0HwoFEgnvxnff1uFIbsCE5KIPu921n6ncYU6f6dcF0X5VLpRQAzxG1tQMOPwghhFCdimkJooc7MHHPFne7RRwZe1z5mR4wHkwRjnhlNIxrZfY6+bCaQI26Uwp7CbkkIAY0cA07iVCSbezRgng2jFBYDSMQz8dpNmOJ5JbAbYHEpZbdQvoGs0XxxvWePJdB3rsV2ippzLWLOLQZMx8y8BGxdYcx7M5AVsxkwywALrAZyhdGWNAo4nuheZ/zdhNzchjh2GI5I1l2xpwSEzQB/5A+/Irw8BfWwZRpbCxBcmUZ0pwbhe0AzxOan3yCq/gYH5o3YE8hQ1f9CeH0WaGzAO/8M3P6ykUrr2j1AShx483kwxMEiCs+eQOvz77H17Y8oX3gB3lNP2kpgphBfryKerqEwPAj/4jmIQyXjTra/mkNcb6DywctwD5bQgeug+OopHDg7iNaNGTz8ZArF80OoTAxjN4jcDtAttmuM7dqf2Pp6Dv5LJ1EYOgaCGXXchgpjQCojfmsJfIpUPncC0RezCC59Cf+VIRRfOw14DhQduOZntyGeOITShTNgaFEqy80qgqlZeEf70f/xGPyh4/toQ744eBSFD19HPEOH8OZcJ1bxeB82r05DrjXR/9EbSVfoxNrrAbZu/YS+90ZQHH4aij9KwYT5RlQEcDYIgltSPYpMGG3Io+rUXdCB9AYeM54BihJQUgKeYGFm19kqFArnANyj9a38BNjAjraE5yYj4J8aAHIeQEoAEsQ4hpRSm0jeiAgqYf4ZUFlhs0NyxdvtNovymM6ZWQM8iffShjmC+ftSsTiOEUURwjDkebL+KIX796vfAVgiRjkGTAH7uim+urqKRqPR2Vcul7nuqNfrtbGxsYsAVsiM1Aas4nZDfHdp7HznS0tLGBkZAR1oLC8vY35+/g8SHwdQp70hMhAWcZsZFjcMcOStVgsrKytYXFx8MDEx8Q6AWnLy7U/CXsrC4hx/Si5BX1+FxTn2B5OTk+9ubGxUaV8TBvZ3BgwDWXIClUqlE/v4+PjbJD4HYNP2Z6T70wJbGgSOvTY6OvoWgJ9pLejlhSR2heAfMl61cgTTV3jucaZaWFi4S+LvA/iFrm9Dw/ooZjPHiQPaWM8Iib8TG0qpCBpWA1kTLk+xPyhipPvcjn8ByQPXuoRpoAgAAAAASUVORK5CYII="

/***/ }),
/* 1877 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1878 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1879 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1880 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARuSURBVHjatVfLbhxFFD39nIcNxrZiRwmKWBAkNkgsrZgVS8sswRg2XvEDfANfwEew5BOyQIQdSUAB2zNjEjMzHsfDZN7T3fXgdpXKLlOBdAu49tGt7i71OXVu3Wo7lFLChEdByc+H+H9CEoS0SEOLPCdehUZgbv/H5JwwIK4BaRBGgImIcPfFcPggS9NcETwDwL6+rsxc63z1zHO1B0GAeq22BeBHQmIE2BFnaYY0Y5rMgu9fEamRm/+W3LueY1gR2vMUNBklFxTO2MqOEDvMPMPjCtDhkrulKObCy5zwfUdU6KgEtOV6siNAJEPMR12Mn5+g3znG+rs7uLF5G1GlTnN8d284pXiFAGhyx/JnT77DRnSOyWiA6WyG6XRKmOHbr7/Ch/fex+rq66hW61hZ28CLtIp33vvgZSV4pQBFLoS4ZvcfZy3U06dIGEOapkiTVOVFkmA4mqA/GGJ5uYYgSDAdnuO1ahXn7QY237zrdEqxElgrz7IF4lkDXuzRylMkRPys8xxPjk/xa7MNRCsYDMe4tbmu2iwkBEGGt+p9zLI7iCu1cg4YxQYP73+DOj/Hz780cNw6RetpF4PxnIRwLAhxtYbeWQf3197A2uoqbpKQO7c3cda7wMX4AT76/MtyAoztBstRghsbt7C+sYntbQ7OBRjnVAJGJUjBGAekRP4TSAEQpGQQkza80QJOvEKAewAFEcIwULAjYwws41QipsZcISVkEFxQ5vDDir1qNS4tIAgj2CGlBFcEQmchIBQ4PRMaQucwrqG8gL9ACN0V0J8xCEWqBTCuSyIoE6mBEUHi47IlcF2QXoiUOgFSr14YBy7JGZFxBaEztAiJIFIlKCnAdIAR4UfI0smlA/LKBU3KmYZg+lpDzQvjqm29ulfqHABBwiMHmHmBhq63JuI5oRZh3DDzwiA25OXb0AiJKhWweabaTP2qVpNEaupuBHANIS4R12rOqgs5IM3qld08b68rCwn2bichphSGWM0z3ZJlmTreyzkgpRLCuOpzbS0RahOkvdMp5+TadkOuhUjME4bFYoEwDM1fRGodCv/ogKWWMYlaFIMLfeIBxgXjhCGGuVanY8oEFglHkiT5cyNAUmKF2tBkufI2zic3cyvVF5AxpsaUCdp2slitjqDGfsWHV/WwtLSE2WxG90Ml7PHjR98DaBMyuALciOMYW1tbjigzNtnUnoQp9Pt99Ho99Xw0GiGi9zQbjaPd3d0vAHRJjHAFuC4UuGcfzzyHcqnd7tCH655afafTweHh4e9EvgegSXPTIiUoIsaQOwLyBc7nc3S7XbRarYv9/f1PARzRvEWxk1BKFHXGbEK7DFR7Rd5sNi8ODg4+G4/Hj2jetMA5UMhyR4AFJaBeryvb9/b2PiHynwBMihxEUsGNMm4onJycHO3s7HwM4JiuZ2VOQhb4vnqJs9tdQjPPbkPZaDR+IPIDAL/R86TM55gT2tR6246w4pESTgk9Is9QIEJrNYxW0wZw9i/+K5aETPV5wfgTgvhTReCa99kAAAAASUVORK5CYII="

/***/ }),
/* 1881 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPESURBVHjatVdNaxRBEH3ds9H4gaASxO8vvKioES/evYh6UDEYTxJERfAgEgXBqwcRT+JZ8QdEb4JibkZBEaMHSfwCTaJoVEiyye7O9ljVTVMU4+iwam0eVds70+/N6+rOrsmyDDEMBSXLJf5PMJnLhBQsIJIz8UIEJPHzf0zeJHxnEK8DRQUSbYQN+6+ND0zO1GBJj7WgbDyMZEIYjwp5jBEHjH/lY3ZbBTd65u0E8IxQEwESsyZrdUzN1JFYIiQFieFMkCxiIlmsOUNEQNvI93sOSCgBhsGEibUEE0VEF6jW5JwjqVGCEELV8PNGHhGgw5NWEiZhEYE0L0CyPHms5ekDuVFzSxQIsNEB9eRCKjVCLnDB/+XmLiPAegGKuLwLPsu6h1IcKeeAJk98tnkXAqnqA4SsewASCcotQXDBZ1vogv2T9boByztgTBShXdjQYXBgq/Pv77ys4N24yXW+tt+U6gFb4ADByhIQDm7LsL4jwTrCwc5fOSII50esBcxfwoFfTWzRViExiYEJooJThUsQyVrZBUYfPrEP+gYtDm0Pht0ehDShOg3z9vO4tGSLPcB4+xW4fC/Ldb84IX1QHKWXAGoZFs61WLPYYC2t/+pFFqupvtCXKgH6SSGhx8ssQf6QudrVjhjy71sdQpqAx//GAaP2uVHEsRbygvUOA60IQO6wOX6r5t9f765EAZrc5zyxackByMRBTMhGuVBAXmB9vK30OWCyjIsoh0oPJQAwgbzg5HN0beah52Y9jEIB0A4wYs0TShPCQjed9IdjuAxN56iWe9oSw0VaygEhlmZ0rhknk3VW5ExKSFPUGnWqm3DNpr90y9IGRl8/ewhghNAoFCB2RmJxwDknDjD0OnvylMinJr4hm/6EJQsybFzZjs3LLPqfvBm6cmbvCQBjNIcr0QNalYESkLM+2O5QTxtwUx9x8+wOVKtVjI6O4v7joY/nju09DOAN3V/XS1Ac0geh4bQA/fR+PCW7G2R9x7wU09PTGBsbw+PBd+PnT3V3Axiia2YgUSQgkoqMS3uqXPjGio14cdcPny89WIQMofGahAY5sGnlHE8+8Pzt+PnTR49MTEw8p2unypwDeSXB+thkEdoNSnHMpXVsXdVOtg+P9J7s6iLyFwAmyxxEWUA+Lt6dr7+CSfbIIFutc3kT/U/fD/f27D4EYJjGq/hNWOhIK9aCIV/NZUfEFySY2I8kxvh9/uXD0CMi3wfg1e/J8z9O2Y3lhBXemdaiTvhA+Ezz+r1eWgBERMLlX/wCbvh9XjJ+Ajicgh2Fnh8lAAAAAElFTkSuQmCC"

/***/ }),
/* 1882 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1883 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAA3YAAAN2AX3VgswAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAC/ElEQVR42o2VTWtUZxiGr8lk5mScSaNJNYkxE5BiQXQhKnRTN6679y+4bIUEgwQ3Ct24FIrajWAV/4MfuBCEQ8TSFD+KiTGtMbVJ5vucOWdOb55FzgTfGTwP78zD8973NTfvOTMzmABwMst+PL78CtjwY4BBsGv/7N3TJ7sVmd3LXtPrqf/zOT50A7wDk5RS8wC20tqFgoOTeNANIDXL+hmCFJKmcQDMlNoNlgK6rU7AjjmFpNV9FokzgdmsTF5hmzYRMXsYsZVNbS5ApgtQ5T0dvTcNUdHeOgWm2Zsa+yVYlSWWAVpsS5BjhePUeMMBZrRv2l4JsrJX1f9NR8aybAkReb5mjC3lqHOMTL8ENSrkhRlRf1jS1waNNStQVPcPa0y7ARaflzznK8YUeh/vGJTlW5nH1MVASdNVxvF63YWQdVmHqQA1k40yJWCOjlVGsyH+5SCJ8wy09TuJhE3JAE6xrFmRATN0iKXKs8kEuBO8YIW9EiYWMeGjEB4QmKxDhFJYFhwJVBu0ie2TEtUU47wXcJQlygwjgO1UDORMcIQHtA0SkSVHnSar7FFkz+YhG4zg9QJkOEosUWSCE5QFgYIAOVpaoYBrWmUi5yGqJigRqtqKPUlsqSY0h4Yh1mSsaRa4ANh9+IHfJM2rt3PY+TLnaKiqQAmPkNgBMPE5fN5q+AfjlCXNGiAxYY2AIhOGcQIw8TznaWj8iAIlvpMBEKLOn/ZMbhJJFbrPAJDkF67xxvoOi5xlwAANZmTdoqV+hK0aHccZGEaIKzzkPk1i1mUckmVbxiI5SowS0Pjv8nU+OgCWAWQ4w/cK+xfLbHGIPAhW5hvqvKZZ/Wmee37wGSAFJQYpcpQjhARU7aelhNkbP17kjl+DnoAEA2CdPdgBTVVB9rA1d4nbfhV6AjI7EENYRYTkeUs7mF1o/epXoA/AlQg6DBEFFxZaN/1t+CJAZtc/VY7J+tzV1i1/E9yA4PrjmVd9UiRPnlVvLH6CXoCNpYUlj37Xp8Waa/w/YhwbdUCeou4AAAAASUVORK5CYII="

/***/ }),
/* 1884 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1885 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAelQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztLS0s7OztbW1uLi4uLi47u7u8fHxmb3yn7/vosLyosf+p6enp8r/qMr+q8btrM3+rpRfr8DXsND/tcbgtc3utra3t55kt8fduNT/uaBluqFmurq6usngu6FmvKNnvMHJvaNovqRovsPMwM7kwcHBwqhrw8PDxcXFxtPmx8fHycnJycrKysrKy8vLzMzMzc3Nz8/P0L+K0MCK0NDQ0dHR0dLS0sCL0sKM0sOM0tLS09PT0+Dz0+H01NTU1OL11cKL1dXV1tbW1tfX19fX2MaO2NjY2Nna2dnZ2dra2tra2tvb29vb3Nzc3d3d3t7e39/f3+Dg4ODg4OHh4eHh4eHi4eLi4uLi4uPj4+Pj5OTk5eXl5ubm5+fn5+jp6Ojo6Onq6enp6err6+zs7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+o4S8OQAAACh0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ4OPj6+z+/sGN8s0AAAIYSURBVHjabZBLbhNBEIb/v+ZhexzHgKyEOEGyPV6x4xYchiNwCi7AAdgjQIINW4TEBlgGE9uJglESxvN+0N2jjAeUklpqqb766kEAFOKuqMoKICCeRfCOfFWEJWzA6Z14jydCikCTAtDw7vMs0QBc4PeRCCE0UecJqgRsg/edL2N5T6A/AULPvOCpkBowkT4cS7engHvqX7/UsoAGcD/ahedTzvbAcEhED1hY3AF56tjV6Am5mZHOBLSmgEjLQMvxog/g6cLCkuRa8GveMtjO8SOHU8piIpSpgD5EWgDSdGWLRWtJ4bkA58Sl3wY62dixZxSZkaoa0A87IEmUoWNDdPUa4JrYtGfI6Y6d7lREVKUxzEG2gL4TKIOQunoF1jOgPaQyqEMR89ogMwjbgLtd2QPdn+DazKEM1Q7ItGHPBzk31TRbcAeE99UW+3VvWcMYLmbYAUM30waC6qnqqpxUefH/Jfeb/mW5SrE+cquqAW4NMiMwKbPoMA+Dl3ljiGsDcQFgmefx6VW+6UZR1hj0JQc+KT7K/DhcbLL+4asgLm+BrhNog9mg+LmNPz+7+fomCNPWkMag96+K+OBqGHx/F4fxP5fUBtEbFD+SM+fb2+Q6xA4IBtpgblBk4aiIX2//1HkQ6IwOvJM5CAogWRGll59uwghoDDn6PQMAVC2iF8l1lACNwfb6FtqRRnGGFgDbItpRZSWa+AuJ6M4ppGK4+AAAAABJRU5ErkJggg=="

/***/ }),
/* 1886 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAWnSURBVHja5VdbbBRVGP7PnJnpbltYaEtppSC2RAgo3g0mKJiIBiOGGEkMD0L0BYNGnhFCatAHHuBBo1EJGsPloRJvQILhEi8Qg4hKBC9gWcrG7kLpbbuzcztn/M+Zw4y7dBowITx42m//M2f2/N83/2XPLgmCAG7m0BD/bwH69W7o6uqic+A09TPtxqV8LlXyqas1lxmlDWxkpMVftmwZux5/iTXw5bZ1W1pablkzcUI9+L4PjDG0TM59Ftq0OQA8YDAwVAemYYAhYOpAKQVD1wNKdbCscnDk6Pedr27c/vo1C+h6f820u+fcm6VUI5KUoQAklHNlPd+DunQfEBJA/mIdpGpMJFciDF3YSJRrl9mhg/s7Vm/cff6aamD2jFknyrZDOOcgwTgwHoJLoADPw80ekEAIcmSEYnAFJkF0k7a0tR+8piLc8+Hat2wXGuvr0hGZEiEtU/A8G689BRfXFHmMSIRONWhrm97xwRsrO8cUsHdnZ/tjC+evrq2tCTcL4gS4bgl815Lg3FZkySImNWXgqcVPvLZ14/O3JXaBxrQffvq1mzQ3ZWSu49BLJxV14LkjwDH0YhSHbRgiGtSYJqRSBiKFNVEDPFUDosY0TUNwyBWGabo+cwAAOkYVEHC3bBKr0JcvBqLIPCRzXQ9cjxEPSW2HERdzX3Zckq416hum3JeWlZz/y76cHyoahhaYlGAHaIGOVqcQ6ASAUrzGuQaEeI5T39nZqW/YsMGvFoCEPJXJZBoheYgnkhHJ9fZiBFy5Nrkxk5p56/SUqIMAwZmylXNp8wNlW5CPWgPouwRjD3QUSPgIjZoSPsN10c6IsK2VvTKH6J4wVmINMJ4sADcrci7hswAINdS+iKBKRLyGf+oBeCmxCzj3y0lPzeIWDCPARAQMhA6NrS3IwRWCClQLYwBWogCd0hJXBGhlC/lxO1WAo6dsz2XoL7qQy56LydECIrYxuYwLC5JToBFiofMw5OpFbFPhr0hD2+SGMBLYgm1NzciF+xCBRCChBCmE/qihJwvQTa3kM15RlZu3fg7ZCxdh09qVop0k6Sf7jsDRH3+H5sYMvLJiMa4TSbKt6zCcyfbCrPZWsMoO9A0UYca0SbDk0TuBqDoyDTqSmAKqUUuGW0GIsR0PSujMU2k4daZHkj+96AHI5gqw59Bx9dQM3+uC6/mwfMk8eOHZ+XhYmXDsZDeK8WQE8F+ckuUxvg+Q6ggIAejABh8dOzjfuusrWPr4gzDvntvhj7M52Hf4BMzuaIX2qZOkgJGSDe/sOAiFvkEghMCLKKQ2bUQpSZtGchcwj18VAccVAlz5Efzx7kPS6fGTZ+Htj/ZCsVSWB817Ow9IchQrSVY9twDumjUVLvT2w5/nChVdoWmklBgBn/lSAIQZk2vDxZIU8cvpbvju2GnYsn4FZMbVRsX186nz8Oa7n8HOL46AbbtCiEzJkoVh3nfsOQbduT5YufQhWUM+D5JTYHuOG/Ba6O4pwPZPvxH5lOfBquWL4P657bBt00uSlHMWtdjcmVNg1xZc56raubwvc/7kI3fA4ofnAA/iDsK2dkYVgKHVN69fYbQ2jIPpU5pg3cvPqDsqfIyJWUSMiEjhCrGyYesrUmljXOwfqRFcOPera8C4kO/nIoQ8Okj8fx0mPorwo3uBgiRWGJs8/MgeGLSo4BotBXrP35dcy7LBpGlVA+q16oCJnXJ1zSuIKslBAgWKlGIEhryIt1pA9vwlp2zbML4uEhh9GsYiJKqI5Z14Xi1GnSFl7JJ8vt9JEqD91t1jeR4TdHF2iABRAtSSJATZkiQSJInik1NFhzMUSTi6Cb/g9BQGS5Hz+Gu5dDYezYKmiePmEwjqIKK/evD/sMjRKXJY/QOlb/Hya+QdrhZA0UxACCEUbsxgCEE8iLxs1B8mBAfcwBFUEd70n+f/AM5pSAUAtATIAAAAAElFTkSuQmCC"

/***/ }),
/* 1887 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANzSURBVHjatVdNaxNRFD2ZNF8lUprYYkqxm4LYhS5CFi5F/AOu/BttoUUR6UroH8jGD5CC6K+QUqSohCIuqrYQUVpLtTafk0ySmfHeqZdG3sz4RumlhzdvJn3n3DPnTSYx13UhVSwW4wAmCCmcTVmE75VKxZYTI/izJpaWlp6XSqUiAioWi4WOcuxXm5ubldXV1dsADoIEpCYnJwsAsn7EhmEMjwqCRElNTU0VxF1FQEjHQqqMAeSBAmSuLUCIGK8/D/DxoI+e7WDuQhLX57JyPVCAzMPKQEDxwvF43Bv3ag62ibzbd9EwbbzaNbFfd+W6gOcM5VhGbQdkQUHXBhzHRX/gwHWJ2AAaHZsWTv8tB1FugWq7IDnieAJcFseL0F86edq9ZgilojswnUsyOXfvkTs0TOdTbK2/A2rXsm40B+TenUsYyBC61okTiXgM49mUfFYj9fohFKUKRlOG17lNLiQTItDXgbBtqnLpkO8dD9CybI/cdYBOz8WH/U4UckG0DPxoOXj3pY3tfRMdsh8uPBdMa4CnL/dweTqLm1fzuDgxqloumVHmmhl4/7WLt9UObGJ0CPy/vL5BkGWqhybW1i3cuHIe1y6NCwlDIY2cgYOGg3TC4D1/aiHYAU+QJyZBF3k77n5rw/XOO4ygY71tKGQ9G0Qeo44ZYMLfW5FFiFBagC4ObBdCxiXHAio5r5+BW6XxsKSLvYLhTv9bgJLmMHIhs207SEDkEPo9YIah3Fshl9FHiLYAX8Kh8iUX8HwwGChCpOi8dgaEOOy+KwKI3A8iQkuAlF/3w1Yqlvf7fSbzRsuy0G630e125fzJzur1VAEaxIHdiwghYQImbjabaDQaIsL7/NjYGGq1WguAo5OBMBeUoIn9nU4H9XodpmkikUggn88jl8uxI3zu58rKShnAoSJA134GlULO4O65cxYwOzvL8BzY2dlhYc2FhYW7AF7QbwIr9FEc4ogI8Q0idykOZLPZYXJzfn7+DoBnRN4CVVQBfns5UAAjk8kwObvSXV5evgdgjcibGl9G2t0rcwlhMplEtVrlYFr0K+s+hfAJkTcivBNGr+FspNNpFmMtLi4y+SMir0d6KdV3RH10c/ILhUKbbH9A5I+J/DjqW7FVLpfXZ2ZmPv2jE+7GxsYb2g0Pt7a2jqBRZ/Hz/EjSrlO/AFSPDC+IyCRfAAAAAElFTkSuQmCC"

/***/ }),
/* 1888 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAoJQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZDw8Ps7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxICAgISEhJycnKCgoKioqMjIyNTU1ODg4PDw8QEBAQUFBRERET09PUlJSVVVVVlZWWFhYXV1dYGBgYGFhYWFhZGVlZWVlZ2dna2trbW1tbm5ucnJyc3NzdHR0dXV1d3d3enp6ent7fX19goKCg4ODiIiIiYmJi4uLjIyMjY2Nj4+Pj5CQkZGRkpKSk5OTk5SUlZWVlpaWmJiYm5ubnZ2dnp6eoaGhpKSkpKWlpaWlpqamp6enqKioqaqqq6urrKysra2trq6usrKys7OztbW1tra2t7e3uLi4ubm5uru7u7u7vb29vr6/v7+/wMDAwMDBwcHBxMTExcXFx8fHyMjIycnJy8vLzMzMzc3Nzs7Oz8/P0dHR0tLS09PT1NTU1dXV1tbW19fX2NjY2dnZ2tra29vb29zc3Nzc3d3d3d7e3t7e3t/f39/f3+Dg4ODg4OHh4eHh4eHi4eLi4uLi4uLj4uPj4+Pj5OTk5OXl5eXl5ebm5ebn5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////yYoiDAAAACh0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GVsTF2dnj4+v+/lnQXNsAAAJtSURBVHjabdJNSBRhGAfw//O8787uGu76SaFGESRCeAqLbkIHs0N2CZQuYSQhdYnqEiQRJXTvY7tVh0Qo6JIQeKhDQnWywgoRFNxVAnM/mo+dmffNGdmZOfS//n/zPM8LIwEQE/4XrTQgAW4SBPpPr31TBSCVna2yYCJmBJIBCr1x2nUCAKNWFjtJQVCYsA+sAUAGnLflXiGK7iEBBiMg6/VsW4YoAKHKCSG6SuDGCPSsU1bsduE0QwiWeZ8pEvtKTjoGvNMz5x3m6IimVjsXAQnNO5FWgBH0DHRuIZ6ghSD2SrW1XFoAlu8fzgOtKgKv5tu7fmS7N7YmeiUzplbkrRZcMfsjYA6d3HOv5xI/qLAgwt25l2Wgd7x5PlqxX3AqxdxXYwYBw4szx970Ncc3DBXBLJmKi0s9qrJ8dPLm5WdqHPEN3ZtEgonHVgdGQO8/kxh7MQ07GwFIyYbkcIou59sA58Cj2zLxzBQFgKTB+LB65By55alrr0d1DJjJ9YnY/bm5PNCWx+yoGJw7m0lMcNJ1j8DewcEZtNDbDmz0f71/Jwadv74Uq08n2OeOiXeY/n5qCzlj6QZHIH/8hCAQu4rSZ9D8XFUkT8IY0Q0ADjDY1yBgxXd/t3sKV73omRwgQqHyqaTXSu1OZd1yfd+23AYIekBdPN8hofzqxrfKZiZVqNoqAhz0rpHxPHi2+Wf7QuXj46pZT64AUQZE0FJ5ELWFgmXaiR8m3qOV5/3NLDyxyyZ2QdwBIVDKanpYq5poAB1+n4AeCmXTQgTgCU0E2t1Awrhe37YcxMC3hgWSqVu2iwTwTIeQjHYVovwDJ7vk7Equ02IAAAAASUVORK5CYII="

/***/ }),
/* 1889 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1890 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPASURBVHjatVdLaBNRFD0z01SbWKMixk/FVqtVXKgVRDBbESxFEZFWBCku1IXgwpWCuHUpLt24VnCj4ELc+MUPfuqP9DP+W+3XNjUJM8mM9yaOr8+XcZ4WLxzuyyN559xz5703MXzfRxCGYZiUCP81POL0gg8sICC3KM0nLPiPIph4jDBOvCVQ1EBEjLDm28TEXddxWBGMAID0mcMQtgUFCCfFvBSWZSFeV7cNwBOCIsAg1LqOC8ct8oISTFMQlUdqDiU35FwrhkKAiAoZJRUU8ljOqhARikthAlRytRV6LlRzwjSjBRgMdqHyZR0BalbFKOOIFpiK5QHgA1ceD+NOZgL2UAGThRLWLo7j6PYGtDbWB2tot0DxJCA3qpHT7KnLNj6POTi5qwnXTmzAhUPr8GYgh87zr3Dx1peyzab8O55j6AkwRBuUhR6/zeLGyzEc27Eci+fNKs+tW5bAuYMt8Hzg7NX36PuSn7ZzzArEWhEChFcBZAH2JMamirj8YEgSt7lpLhKzLfgeuDUBueKglgBBqmJRslJ194fvwlrKJQ8MHv/KuqHugj8I2LMlhWQ8hq3NSamiFx+zKBZ9mOzGyvowATw/MwG1FrBz40LF0kf9k2Xy9Q0JtFI7Qgg1BYQjtJ9P302VD7Az+1ahxhJd1W6BvgvqsTz+3cXDvkkcoXNgU6NSvb4AdQdEk3Ncuj+EVur78Z0rInvPV79+C2QRYZcQVT+BM3tXwTIF+UweQkEqn91VyfnwaVxUh5WpeAiBUrWeA36V6quF/TWP9Nr5glyQSvh7B3yfhUTe/zWWga2rk9LCnudNhyTCsixNB34jRkgrmsj+6d8plUpMypkhRAgBPCgyRdQ2DOm9iNGsi9OXbGxrSaIzvQTwK2TFYhGO48B1XR7/FMEueOju7r4P4BPB/ZMAraf5+rNR3Ho9jttvvqFlaRwbVySYsEw8MjKC4eFhcCQSCcRiMfT39/e0t7cfBjDIb8RCgBa5OreleS5SdCWn6IJqTs3+ZXuhUMDg4CDS6TRyuRwGBgaQyWQ+EXknAJvg6JyEUWKo6gRunm7l/jIx286ZXaDsIZ/Pl4XYtj2ynwJAhpD3KSKv479oCwuQnnpuQX39HCZn20e7uroOZLPZ5wByEvkMngFFwHSwE9x3tr2jo6PzJ/mUIFcERIW+QG4BBdve09bWtg9AX7XKw1pQ3qNW8B4X/UrFFQevX7zH+Wn3e3t77xH5bgA9EeTKn1N2o4ExA2ccwgfCEMEV5HoCuDzr38mFi2KfR8cP5OmzqpCTqQ0AAAAASUVORK5CYII="

/***/ }),
/* 1891 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAA3YAAAN2AX3VgswAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAC/ElEQVR42o2VTWtUZxiGr8lk5mScSaNJNYkxE5BiQXQhKnRTN6679y+4bIUEgwQ3Ct24FIrajWAV/4MfuBCEQ8TSFD+KiTGtMbVJ5vucOWdOb55FzgTfGTwP78zD8973NTfvOTMzmABwMst+PL78CtjwY4BBsGv/7N3TJ7sVmd3LXtPrqf/zOT50A7wDk5RS8wC20tqFgoOTeNANIDXL+hmCFJKmcQDMlNoNlgK6rU7AjjmFpNV9FokzgdmsTF5hmzYRMXsYsZVNbS5ApgtQ5T0dvTcNUdHeOgWm2Zsa+yVYlSWWAVpsS5BjhePUeMMBZrRv2l4JsrJX1f9NR8aybAkReb5mjC3lqHOMTL8ENSrkhRlRf1jS1waNNStQVPcPa0y7ARaflzznK8YUeh/vGJTlW5nH1MVASdNVxvF63YWQdVmHqQA1k40yJWCOjlVGsyH+5SCJ8wy09TuJhE3JAE6xrFmRATN0iKXKs8kEuBO8YIW9EiYWMeGjEB4QmKxDhFJYFhwJVBu0ie2TEtUU47wXcJQlygwjgO1UDORMcIQHtA0SkSVHnSar7FFkz+YhG4zg9QJkOEosUWSCE5QFgYIAOVpaoYBrWmUi5yGqJigRqtqKPUlsqSY0h4Yh1mSsaRa4ANh9+IHfJM2rt3PY+TLnaKiqQAmPkNgBMPE5fN5q+AfjlCXNGiAxYY2AIhOGcQIw8TznaWj8iAIlvpMBEKLOn/ZMbhJJFbrPAJDkF67xxvoOi5xlwAANZmTdoqV+hK0aHccZGEaIKzzkPk1i1mUckmVbxiI5SowS0Pjv8nU+OgCWAWQ4w/cK+xfLbHGIPAhW5hvqvKZZ/Wmee37wGSAFJQYpcpQjhARU7aelhNkbP17kjl+DnoAEA2CdPdgBTVVB9rA1d4nbfhV6AjI7EENYRYTkeUs7mF1o/epXoA/AlQg6DBEFFxZaN/1t+CJAZtc/VY7J+tzV1i1/E9yA4PrjmVd9UiRPnlVvLH6CXoCNpYUlj37Xp8Waa/w/YhwbdUCeou4AAAAASUVORK5CYII="

/***/ }),
/* 1892 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARSSURBVFiFtZddaBxVFMd/u5Nsk3R381Gz7cbWbHRbW+oHEgMqFGwRgyIIPvlQxIigfbMtJChSAkIl4INICYjaF6HUN0Xti/ggaQlVhhgtq3XbNB9tNd0kzWY/7nxfH8KEzWRmsxvaA5e5c5l7zu/+z7l3ZkJSSlzr7e1VgE5gG/fHdCCnqqrtDjR4HugcHBw839fX1xvkIRQKVb16+5U2Pj6ujoyMvA78FwSwLZFIJIGoX+BwOLzu6teCoAC6urqSeNT1Aviu2C+4H0Tl834AfspUBXADVQte2fcCBAWtCcAb2A+kljS4fSll7QpUBvQD8UJY0uRmIcuKvoSwykQjcdqbE+yJpwmHlKpqbADwrrgahERyce4CE7cvYdjaBufRSJznUv307X4+SOjaFfADOf/751y98wfhkMKzqSPs3/kElmNxbSHDpamfEGKR7ybPUdLKHNn3CuFwuD4FFEUJrIWF4jyTsyoA8abt9B94jQalEYBHdz7OdG6K67m/Afg58yOH973sq8BGpAAFKmHC4TDNkRYM3UEIk/m7OSZmf1tXiLtbH0YIEyFMllbyCFPUBlBN+kqItu0dHH3mXfa0PcKBXU9x8MEn14JLJJevjSM0E6GZJKK7iTXF69sFc3NztLe3r0uN1x5q6eHNp48BsLyQZ5k8AD/8+S1Tt6dXA4QbGDh0DCklle+dQAA317FYjFQq5StbNfvrZoYLkxeQUtIR7eDtQ++Q6uzBcRzf5wNrYLMTzM+klHz2/RnKZZOeB/bx6VtnSO1YDV4zgPcorccuZi4xef0K8W1tfPzGaXbEdgBgWRaWZflC3FMFMjNXEcJk4IUBYs0xYFWVagC+RbhVBab/vYkQJqlE97pxy7LWYDYF8L5U6rGB/qO81Pcij/UcXBuTUqLreiCAbwq2qoASsViyZlks3lk3bhgGhmFg2/aGOYHnQL0Qwixx9vInWLbJdP4K7x3+CADHcSgWiwC1A2zFJJL2thZsaRHf3rQ27jgO8/PzhEIhDMPYHMDNf7lcZmZmZoMSbh4rr247lHiVRWeWXaH9ZDIZHMfh1q1b5HI5WltbWV5eLgLrtkLgLti7d++Gzy33QLFte21rWZa1luOothPzboSF8gqKUkJRFJLJJB0dHZTL5aXh4eFR4E5NAH4rd1ftgrgwtm1jGAaFQoF8Pk86nSadTlMqlchmswghCidOnPgA+EZVVb3Sr+8u8APygrjNhdB1HSEE+XyeaDRaGbx8/Pjx94FzqqoWvb5rAqhcvTf3XgAhBM3NzWSzWQzD0IaGhj4EvlZVteDne1OAoNV7791aiEQi3LhxA9M09cHBwVOapp1VVXUlyP892YaVtdHU1IRlWfrJkydPaZr2paqq+Wpz6wbw+9txvyEaGxtJJpOloaGh05qmfaWq6t3N/HkB9NHR0V+6u7v/qRcMQEopx8bGfi0UCl9MTEws1jIndB9+zxf9qj3I/gdFz0O8SHk5wgAAAABJRU5ErkJggg=="

/***/ }),
/* 1893 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1894 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAZ4SURBVHjatZdbbJtnGcd/73fwOWmcg9tsWdYDddoAaxktpWtHD5rEtlQt2krXjZMKAi64QQJ2ASoXwAUniTGNC8TExOCiAoHWaZuYJq1SR2naTNOSbKM5OmNJ3DaOnTh2nO/48mLFcjIriltpj/Tqez/L0v/3/P/P+/mzIaWkUkIIDdD4aMtXmj7LZawQ14E40PwRQvhAVmnlFIS3CgAwgeTc/Pwlx7ZBCERlwap7AFElrzRApSrf/3Dpuk4kHD4AvAXUAAgg4NgOtuMui1WXpgmAKlDtdU1xsfoaWMlv1GAuiwlRu4Ca/YprLUi1alxaE6BWfHUUC0WbNy6leO+9m0xOzROLmHRujvPA4Y+RTG5cKV7rhKatDyBg2XJtVceZTJFzfxtk76c3k2iL4+8wab+jhWf+8G8+nrXo7ZskNXad7333CI+c2PVhJ2r260SgrbL35VeuceedrZw+tQfPl1y68j7n/3mN/nfT2K5P/7UZTjzUxc7uds79fZDzL77N73/3JSKRwO1EoOH7PpU8n/3jVY4c7qapKcyrr4/QvTOBLwQWEGmKEsbHdSUlF7ZsjRONBshlizz21ec4/9dvoesaCFE/gFgRw9BIhvv2J4krcdUpAdXRxb4PePThbhqbIpx9+g08z0fTJZaUNDSEUOy4nuQT93Ty5I/+wW9+eaoOB2pjKK+rfdNs2ZagZHvYSqh3IE1XMsGvnnuTyUyRUGOE7m3NDAzdYP+euwlFTCwPgpZF2A6Rny9y8dI4hw5uqxeg+sD505/7SCRaePm1IYquT0trjLH0AldGZ3GlwBPw4P7NHL9/M3OFJE1KPF+w0HWpsg/jOIJYU4mnnnmdCgDrD2F16lPvz5PLSwqWy1S2RGp2iWzJwQwFaU9E2Xl3CxtbQ1wZznBkVzuLSzbC0DGCAYQNQi8RCgfRAvrKga4fYHRshsGRYe7avhEjFiI9v0SkIUwRCHvQ2dHIZ3ckEBo4roeLhtQEwjRBlNAMAz0YJtYQ5NrwdXZ2tdc/hEjJ9HSB2IYoH9wsEpMawWiIsAJBKR7a00Frc1S5ssiGsMHwdJ53JnJ8flcC1/cViKE6l0CJd0ezvPjSAAqgvgiW9XFcHyOsEdANhKljIXAMDWmYdG5q4O3JBeaWHBDQYGrs3t4Gmk7esplfdOnrn6IlJLEdwZJtV7qvbwh1QyceD5JecAi0hDBNk6CyMqoieOzIVra3b2DLHY3cyDsKJE9rWGfO9omjUVRi2YLF0GQOrWgDDid67i0DSCnrfw5saotS8C0sIZgv2TQ2hrk32UqH+txG4klBy4Ygn4u14LoehZJL78gsOxRwanYWIXQcx8ItOnxqV8etH8O9ezvpP/cOEZW9HjYxDA1HwoLtYwoNXxNogCNFGcbXBVtVNKNTORWBhZQuKIjGsACodF+fA1IIvvn1/bygfgPmLA9bswk2S95KzRFqitCRaCAWDRBVUK70cRA4Hhh62WYycw5IgULjB985jOd5t+iAlISCJmefPMoPn7pMKGriLbmUlhwujOSI5Fy0WJCTO5oxNQ0PiQPkbZ/Lwxl8x8YI6mzbFOWLX9iNbduVN6I6HVimPXooyb6XBunLgAgaNOgC3/eVqCifhsGizyebTFzbxXZ8buZK3NUSZkJF4Exf59nnnyiLK1cqABJwAbkWQI1VT//6JGd/+goXpy2C7XGWAiYgQNfICYNZX0e6MJF1SM0UcfIujdkMv/35Q0jfoVi0FLQsQwwM9F8GJgGHtQFqn4o/+3EP/YNTfP8XFwgkOwkq+91iCTsjuHrDwyuofbaANZbmwQ6Tr/3kMDMzM0xMZIhGo5iBAKMjI8PHjx//NpBWMN46ALUDs/ueDl77y1fofXOCC/8aY+A/BW7Ykogh6WoLsa+rjaMnD2IYPsPDIxw8eIDFxUWmp6cZGhqaVOKPA+OADVBHBLX3mia47zNbOLBvK0JUj5ea8nLWjvN/y4v4vkepVCKdTjM+Pp55QhUwBJSkqnVPAVJSjzMVADWYlVWGiMViZfGxsbHZM2fOfHlhYaEfWFwpXvcMrFdSypWrDBCJRMq2nz59+vFl8UKNeD0AALcCqKIou5BKpYZ7enpOAaMrO18PQAKurmlIKWv+gKxlf+UVXp1xTNOUo6OjvceOHfsGMAEsVcXXB3CByUAgcD+374wN/Be4CTgV8XoBPGASuM5tVdXF6jlfv/4HwvruJAANa7EAAAAASUVORK5CYII="

/***/ }),
/* 1895 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 1896 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1897 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAApRQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxD5LpEJLpEZPpFJTpFZXqF5XqF5bqGJbqGZboGpboGpfqH5nqIprqIpvrI5rqJZvqLqDrL6DrMaHrMp7mMqLsN6TtPqHiP6TnQajtQqnuQ6ntRaPiRqvtSqztS6ztTq3tT67tUK/vU6/tU7DuVbDsXrXvY7PoaLXoa7rvbbrueL7tfL7pgMLuhsjzkMrwkcrvndH0qNHssNn1sdnytNfutdnwt7e3uNzzutHhu930vt3xvuH4wMHBwsLDwsPDw+H2xMzRxcXGxcbGxsbGxsfIx8fHx8jJyMnJyODwycrKycrLysrKy8zMzMzMzM3Nzc3Nzc7Ozeb3zs7Ozs/Pz8/Pz9DQ0NDQ0NHR0dHR0eb00tLS09PT1NTU1dbW1tbW1tfX1uz619fX19jY2NjY2NnZ2dnZ2tra29vb2+Di2+353Nzc3O353d3d3t7e39/f4ODg4O744PD74eHh4eHi4eLi4ebp4uLi4uLj4uPj4+Pj4+Tk5OTk5eXl5ebn5ubm5+fn5+jo6Onp6Ozv6O/06enp6erq6fL46urq6uvr6vX86+vr6+vs6+zs6+zt6/L26/L37Ozs7O3t7PDy7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8fT28vLy8vPz8vT28vf78/Pz8/T09PT09PX19Pb49fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////a7KaGAAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAn5JREFUeNptkEtIVHEYxc/3/e/MNA8dpxkY1MwCzQwt0KBVD0msTRQI2TJoE61aWKuKFgWthYqkZYuIIVrYpiJoLCuwhWGGGUE+Sic0x5m57zu3O5fmegc8qwvnd8/5zl8CQEzYSnbZBhyAI4JAW/i2JZcrQCCcWeeAIGJGhRSAcPlQv6FVAATzhfdW2IyvHJsWqt7zpauVgAobhFtBxOKwJKQARD8YvJsIDEdOqAO4WUXHd0vIEVdaqAIA/wGS3mr1bR8SETMqEf3u7noabdlXaKBNIHQSgtuYtKgTsxoRZwnYDvYAKTB9gB1l5tU1ORpLnG9xj/QlcJMgVke/WgD0vwvX9w8T4ANAaRoLTX0HYqltypJZmhy5XAOQE3/mgeN3DseJsplFYxYVeYBwgLEfQHO3ma0r/GzbCCcndjX7EiSDRe8zYMeQ2QcQ5Ahg1xxJLJ4DOEdBtzkKgPwVEBJrQLTV/Ys825dAggHrzZ9UYqIxgaKRWj661skewIJpzyeo6T4j2FMNSQv4Z1KcbGRuuDfQnfZB2GzXVHBvyzyW4fozn9+9OD1Q+1CEZO9i+deVawnQ68cFqIdUCyHbrgJgftI/M4u5i3UNxpKO0F5DKeOS6c1kYAi3bn+TFSUHIN5+asEyTVUxqgBAkwcDN19m1fV8fTw2mHvFydBoUS17AKMDoIETIFhGYWXqaj57tyjr/oo6etQYyDWlJqN6bqdWHL+vyurmCnfyUJBgSR2rK7G59Pg9LS8D8N0AzIpS98c+u84qqYmRUkFGFXDWumpKEo4QAN1+uCEr8ACYwiYCOT6cLxG+oOcVDZuApRwX8EtXVAM+wJQ1gl+2UYanf8YQ2qRiaN7XAAAAAElFTkSuQmCC"

/***/ }),
/* 1898 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAR7SURBVHjatVdNbxtVFD0zjh3HNvlolEQKDUkkEF1k0xaEiijNBx9CIJoKIfELkkUUZZtFpGbDAtgDYtUFEgsQ/IVuUAISRFGLsEoiB4wTU+zYHn8knhnP9J0Rz/UMM3bcwJGu7ps3771z3r33vbEV27YhoQgAUNnE/wOSWXYLKQVIchIP/WMh+f4/Jm8IK9AEr8XOHjxGWNhzxVJpy9B1KoIiDXA9u5TJZ+El5HgvQqEQYn191wDsCKt7BRARQzegGyYXdJmqNokkgdcHkituH4GER4DimENG928jWts1vYafD37Cbm4bqfIDfPT6Z4iEewNzx3mSx08A4UvuTcWdnU+R1HfQE1MwFLuAesJCLa/DVloi5BcJVYVEoACF5kTBGewrIF3L4PdcAXm9gFz1R/xdymFEHXHmqJLUXSuy3VmAVi6j0Wi4Qu4Vka08hN6wMfvMPK6MXMWV4cv48N5tVLQyjLBTwL5k6lkiMDg4CNM05W59BTw1EMcX79xpRovoi/Shv78f0d4+L7mMBqPTWUBZ0yigSQgfATzN5XL5sQCmzAIqlQpM3UQQlLMI4C7MRqNtIaqhEAYHBlwpsoQNiL5oJBpExr5uaiBYQLVeYwRcuS6dVJw+PayfKwLcRUcBDcXmOOf568PP8e3Rl9jZfojEQgKxaIz9Ty6g3CYCKf0XfJf+Cvd3f4V2TYNlW/hkax0X3lBw/dKbTv41XXMRdh+B/n5fAXXzBEvfv4Vnr15ETIk7p8UwDHw88Q1yu1m88PIrSCQS6OnpOV8KisUiLMvyvYaXhm7DrJZw/eZ7KBQKTv/l51+UizN6HrJg+H2OWb4vVarVu1KAqrT9JnjJOuZecPGLOAvgB9E+Db6K5aQg8mARxPmKsEnKps/kbiMgIyzRUcD21hYalsWZgbvwfqwIPrPt88w2jeHvLGBubg4rKyuYnp5GKpXC1NQUDg4OHL+8vIxYLIa1tTVMTk4inU5jYmICq6urzonY2NjA+Pg4Dg8PXX59fR35fB7Dw8NOUGiBAhgyqpWekD4ajcrduOoiEonI3XnnNNeKx+M83uwy20VAVionek2+l8Rt88yTRCNpvV6HpmnY39+/DyAjzAgUQPAyoYhwOOzyEtwxx/T29vKdax6FMh2np6cYHR3FzMyMk6pMJvPn/Pz8BwCO+Is4SABVk8zX5A3pjRD7OY9iKIICNzc3UavVnDr4I53Ovbaw8C6AfUGuowUq3PC9hmXOZUi9qZHhluPGxsZwcnKCo6Mj7O3tabcWF28BeCAvH6JtBI6Pj50fF7qu0zOkvGYlCd8zpxRD3xRQKBadd6/euOGQJ5NJbWlp6X0xd1eQV890FYvBd0nMMNIzrCSSKZCeQnxSR0EUzdDnbgqI9e4BqNgCnS4im2aaJgmkNXNMtHqu5xVAsOKz2WxGFNzbAH4T42rd3ISmAMPNHxz0PL9clBXv8iw2z0S+Y7UnZ2dnFwEcCPJ6N19Drvi0sItS2BOAFZ4W9pdY1+jmc9wqIsTmOf4BG/KcnwWPACSDT7C/6UHbAAAAAElFTkSuQmCC"

/***/ }),
/* 1899 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1900 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAh9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxcHBwdXV1gYKCjo6OkJGRlZWVl5eXmJmZm5ycnJ2dnr3qn5+fob/tpKSkpMj+psLtp8f3p8r/qKmpqMTvrK2trc7/sLCwsLzOsMLesND/sbKytLW1tra2t7e3t9P9uLi4uLi5uMzqvM3ovM7pvr6+wMPHwcHBwcTIwdDmwsLCwsLDwsPDw8PDxMTExtHix9TnyMzSysrKy8vLy932zMzMzN72zc3Nzs7Ozs/Pz9DQ0NDQ0NHR0dHR0dLS0dbd0dbe0tLS0tLT0tPT0tff09PT09TU1NTU1dXV1tbW19fX2NjY2dnZ2tra29vb29zc3Nzc3N3d3d3d3t7e39/f4eHh4eHi4eLi4uLi4+Pj4+Tk5OTk5OXl5eXl5ebm5ebn5ubm5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////iK1gPQAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAmpJREFUeNptkk1P1FAUht9z7rTACIgfwRiJqKgMMMOC8KEowR9gjBsTF/4C2bt36dp/YNwa1Ji4c6ExRImASWfGxEQNMggzCAzM3E6n09Z7C7VdcJKb5uY853lz2qYAEBOOqsAPAAVwWhDoiH7gSV8DRseTGgsmIoYmGaCQN+dcRwMw6/ssBBsQVF346QXdtbaRgT7FmggjiPh7VhECzCdv19Orn0YnDG1QUg1oSvd33+6093DJ78jcT+kkQACHABXGIFbOTFUXm2fvdRIRQoJiYEz8oIGvRfQdO7GCwEBYsxwBanqcrtC7NsDoBsrH1elFWSQM42yt+9wB7P4G6k54bI4BLI/vykb/HeLXd5mtHJDPwqKkgeyWt/EGVC4S/80DFQvbwH+AlyYGz5mpEeJnoyArCyoMo5Aw8AS75VR7gfiimt4qApuMrWTEl0mj1zRyTPlwmsBDQCICk9rQWWBUDqaxIVAZRmxYvKYM7TlCcRjEqiMGAQpiYEobuvIQh9MoqUeGYuDztDKks2E2iQyATIAgEXGdtMES2ITQ01hzve3LCcPCTW3IhfmEjO/LAd+SZhBEwDRrQ4EP8l3PLTl+pf9xKzJgYUYZutT+Ot+76shap2usNmw3Am5AGSRYlFR/Xbprv7p7Tj2vNfwI+DirDSM6H559aefbo72l+ZpsIgJmQgNDGxobTl3Wll81ZCPe4n1oGCKoDVr2+dXTyy+dqgSShu20ZP0OXOdPs9T7or4vEQFq2w+zD0AgQoZa7oV9f35P2omv2RK3oj8dAQnzabNqO4gBz34okKym3XCRAFrSISQrcP348g/zK/YH8IQXbwAAAABJRU5ErkJggg=="

/***/ }),
/* 1901 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1902 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1903 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVKSURBVHjatVdLbxtVGD0z4xk/4thOmgdqnFAMDQoSJUWqKBILVKpsQrcQUrHIih+A2LOCPfwJVixYsUBCiAqyAtqgQEJetI3jPByniV/z5vs+e6K7sJwplM86ujNz73zn3HNf40QYhohCowCg8yX+n2CyIFRIEwo5Ew91YUSPnzG5T6gRV400BIoACZNwdf6zX352fA2mmUDaNJG0DKQti5BAKmkinbQEmZQFTYR3MnOfmraDVptAZdvxqHTRchzYjo+26yJphPj6k2tvAviVYEcC1LAaToiGHcIyA7QJlqsj7YVIeaBSQ4qQIYFtX4eua4giCEISoKHZpjoqW5SnTWhRLscNYBOyViAcUEIVoAlCgOwhSMng5AKfXPODAJ7nwzE8JM0ED520cTyPn0v95SGdyBMoH3vQQW7qfA+EKo8qQI1QfugQdyBJBX6XnH0n0D27IOJc3z8XURo16VrDn7t1mIbkiDqlRm8B6DYMwoASd+BTco8sdz2yXcghSV1D7vmaxYgIl0TcW3PIchepBAsLO3lkzsUQEDCk1wS2W3pJ8HyxG1G9EcAga6GJbZ22IsBHYARS+qG8L3WSL44DYhWPuUYvBxr0bmJNqQ/4mSH2R/ydOcICCPWWONF1RIam44KvXSzA0CRldzaydT7oXfC7uo/Oc8jzznAwlLnieTJkdM3v+dxO8micU4sh4JuPp7nH3Lg3gPNr9LiOQr1Wn5mfXiAAEVEcAcq9Sto/+glQkh9Xq3iWMTU1xXnjCxgZHe3be5fG2ibkMlZfy5WIKaCL3ODg+dZ0sv8I+bHJ813PdV38sFKBoQOTo4NwSMhIPoXft6t45cowdipnGMomUavbmLg0gK3KKd65XuwzBH2U//jVFzja30Np5lW8Nnc3qpflZSZNfP/bLqaLBTTankhfXt2Xel3X5QD74+EJHh6c4fbrkzEFaJqAw2k18MLUGF6evSFbbKN2gIGhMXC8e/OKlLeuT2Bl+xjXSpeEuE+H2L34QyCVponBQh7JoRHoVgbGQPY84erqKoaHh2HbNp7LZrC9vY1cLodGo4FWq4VisYhqtcobkLSZmZmJNwegrGs9YaHW8DBecPD47zJKs28jCtn1XJchPbMsi4nkPpPJ4PT0VMpms4lUKhX1Pp4DoaLUzBexfO87TL00CzUKhQKy2SwMw2DBTMLk7IqU6TS5UgMOn+iYGkmK4PgOdE5EstJBdvwqbty+jDCRlXkQEarrWk0cnaAHTxx8+e0WyjUH0+NpfL7wvLxLETL6O0Co7FeRz2WRTCaJINW1ncfTpd6avcill9HxnU+FmB5Ly4fIGy9m4DgOC+DUXoxlqPNJKITQDEAZv5btQTc07Gxv4ezsTOwulUqo1+tMQC55sgRPTk5wazLAhzcn+KSktnU8eHD/JwC7BLefAPFgdDiDtu3DaftAQNANJAwdhVyahHk8B3imC1E+n5dJFk3Aw8NDWQGmaXZKy8Lmxsb6nTt3PgKwR22DCwQA5XIZvUI5IWS5cVQqFUTBrhwdHWFubo5XgORZW1t7TOQLADaJ3Im1E05MTEgZgUIt1c2Fx5zHmB3gfYCHQsTt7e1ha2vraHFx8QMA69S2HWcVKGPed5tWv5AiiIiBgQEh39zcPFpaWrpLrtyndo3YZ4FK1j9EQAR1HojtCwsL7xP5CoB6nO+BUNAr4rvB4G15fX5+/j0Af9F982k+SDxD1zlJj7HvSRidfDzujHBjY2OZyJcA7FC9/TRfRD5hl/b0t+T5vwuH8IiwT+QuYkRC6Y1HvdkFUCFo/+EfsCvrPGb8Azr5X1GP0KJOAAAAAElFTkSuQmCC"

/***/ }),
/* 1904 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1905 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 1906 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1907 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAppQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxAHwAAH4AAH8AAIAAAIEAAIIAAIMAAIQAAIUAAIYAAIcAAIgAAIkAAIoAAIsAAIwAAYwAAY0AAoACAoECAo0BA44BBI0CBo8DBpADCJEECJEFCZEFCZEGCpIFCpIGDJILDZQHDpQHD5UJEJYIEpUOEpcJEpcKFZgMFZkLF5QXF5oMGJgTGJoRGZoRGpsOGpwOHJsTHJwOHJ0PHZkaHZ0PHZ0QIZwaIZ8SIZ8TIaARI5wiI58aI6AWJKITJaITJaIUJ6MUKJ0oKKMbKKMcKKQVKaAkKaUVKqUWK6EpK6YWLKInLKcXL6IrL6gYL6gZMKMtMqckMqghMqoaM6UsM6obM6sbNKsbNacqNaojNaokOa4eOq8fPao0PbAgPbEgPrEgP7IhQLErQLMiQbErRbUkRbYlSrgnS7koTbopTrk0T7k0T7wqVsAuV8AuWsIwW8E8YcY0Ycc0Z8o3aMlFaclFddBMftVRxMTExsbGx8fHyMjIy8vLzMzMzc3Nz8/P0NDQ0dHR0tLS07L007P107T209PT1NTU1dXV1tbW1tfX19fX2Ln62dnZ2rv52tra29vb3Nzc3d3d37//39/f4eHi5OTk5ubm6urq6+vr7Ozs7e3t7e7u7u7u7u/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////3KkYIgAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAktJREFUeNplk9FOE0EUhv//7HZLC6JgQaKJER/ANzAx8cJ7730DjYYX8WVM1GtjQCUgGo2JLRREbSmCQLu7s7M74+zadqucOTmZ3fPP989sZgmAktfzYY0FCEjdI4jzfZuFBj5QqV2ToDa/uFibCnyhtVqr8ODgeKD3tIIH+Bdq9AJhIiy4iYpOejo1YRaHWU4gHc0YbdxLmxk313ouSNUrSwL+XzdrMq0TrSh0CJ14lbOuBTAUGBqTpbHv01TErQ/Dg9T0jR0LnIHyPPFcPxAHGET1uqd6piRYkVQRRgc5IVGh1HvHWSmYO8qoJEtsmuZ7UEp32pHOLv4eCZ4mQhHJC1wSeQK8OxJQKEMB+d9XlaLQpPJrXzot+faFu+/R/sTdj2QpkHxSJWpEHbhETBOzJMYWrAqXRK6TN8Bl8CawPGkBOfounS3Z20T7K3Y2sL3OnU2WAhJVwQIxT1SIOTcpjIoeMNV4lnriCYl8DDOPO4fxkCDdD8j5b7i9wdZrNtfQ+mztxCaxIDl20ZGBJaCRoZpxbPE8E/GI0YAxJjUGwb1DNbTAjy2017Hzlq1VNFez9ruw2xzcT8tj4jLRcOTCZUHZxkDX4zjSQ4sXZujg0vHj8PQnq7Unp/1kRMD+Ktpr3N5Cc832zuLO7VuzK/0wmbC4ClwBZpyRBQz6ncdxGI9P8dIKOXJI+5HqNh6po0F5aV2w/N+M1TMPB2chRgJrUQYLzcppGAFjQurZgl406QUPkpNITazw69MeJiOJYv0P0veIybDalA9/AMUIKWjlmhF0AAAAAElFTkSuQmCC"

/***/ }),
/* 1908 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1909 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1910 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1911 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAeZQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxwcHBwsLDxsbGx8fHzMzM0NHS0dHR09TU09TV1ABq1NXV1dXV1dbW1tbW1tfX1tfY19fX19jY2NjY2NnZ2dnZ2dra2tra2tvb29vb29zc3Nzc3N3d3t7e3t/f39/f3+Dg4ODg4OHh4QBx4eHh4eHi4eLi4gBx4uLi4uLj4uPj4wV04wh14wx44w544xh9422o44654+Pj4+Tk5BR85Bl+5Fed5H+y5OTk5OXl5Rh+5Rp/5SeG5XSt5YCz5eXl5ebm5ebn5lae5rPN5ubm5+fn5+jo6NPe6Ojo6Onp6USW6enp6erq6kqa6urq6uvr6+vr6+vs6+zs6+zt7HWw7ODm7Ozs7O3t7e3t7e7u7u7u7u/v74q97+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf399Pl9/f39/j4+Nbn+N7r+Pj4+ePu+fn5+vr6+/T4+/v7/Pz8/f39/v7+////t2EozQAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAkdJREFUGBkFwUtrnGUYANDzPO87M51cakI1bdMQC4bWBq0iigpFVxVxoQt/iTv3/gP/R1EqdFOFgtSF4lKsQUisxmiG2Fznlpn5PCcQGQAAoJk1BDlXQgAA0DTT/kyl1f3sMFsZUVIISQS0vzgfqWgfHT2eq2ebT+p0tddtrS6tBEK0UYnIVme42B1kUTNLp1UEZAQV2uX9Ulr5epSIiAghUKBClO87eeGfF7r9ta3r0bodQpBQIdolM8v5ZHm/s3otQgRUqNCafBBZMh9PW3dTikRIqBDxcC7kK/jubkmVREAFEZGy4M1WlQQkVIj8KDMzn3C5pACAClm+HV88XHobfx/0FpdutkFAhcwPMzMDw10HB/t3OoGAChEP6+YPcxvYem79yfnJo+cXhhfXOpAgs1jagJW3ui0WFl7+dTwCCRFRy/Koi3ZvusIxt5aBChE3NupGxjab817cMd30BqBC5EuH//18aQ1tgQkNoELENyvtd2/6kxICs2ZGQoWIT571/rr6B34plyZ42np0df1K01Ahp1uv5uHZa9vcDn5kfvLe1JcTVJC3/Ha8fQ3BjMm//dOjyXBwTgUeXO+OJ/cKP91YnJrs7US50DsdzqjAxxkyhDAd3eltf37w9e5pf4wKyoO1WP+9W8qg6/LOlf3m2f29YX8IFaIZnHZO3okQZuP1s716f3d01AcV+LRIoJnMZsPu07OTPlBpGgAExrOD4/4AUDFpN5FCoIl2+6vx0WAEENS5+QIAxoPhOYBALQEAmvMZAP8DRiS7bwpaTREAAAAASUVORK5CYII="

/***/ }),
/* 1912 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1913 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1914 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1915 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 1916 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAASISURBVHjatVdLbxtVGD3zsJ3YThpH7otERGrjgJKo6gKpYsO2i0hISBQiIaXKorDsCn5Cl7BhzWPVXX5EFumKIFSV1sZ5v1RqN4ny8GNenO+aqwwzTT0OcKRPd0ZzPefc833fvWMjCAJoGAQHUy7x/0DI/CBEKgI0uRAX/g5LP/+PyT3GvgR5fRA2zpBilBa+v/8kP5DBu6X3UXzvvgjrqJCxE/9Upu85auj5UViWhWx//4cAfmW0ogIEaX3RbLtwHBea1DQ1kRYUG88lN/QY4YgKMPScvkyKhCZDyM+CCF9Hx4iQOGSe5okIiMP3/DB5eOXJXHiTE1yURlcBpmVeREC8NiIWJxLgup44wNHF6uoq2u12yOY4kdFZHVOXwfj4OFLp9HkpSCZAMwn56MgICoUCfN9XQahRB9tJQl0fHx9jZWUFk5OTUebeBNi2pYrQdRwhFyc0WYw8LCyfz+Pg4CBcnBd3QFIQmIDneRSkpmlCNYZDo9VuRzvl4gJMm0UYGGg0W3jx80/IDg7CSqVwuL2NxuEhKuUymq0WfHGHIj2K/ODrb7Bfr8VIM6yNUqmEdDqdTEDbcflitqHdUTw2MIC+oSGYXO3IjRt4uryMTx49QvHmzcS1Ua1WMTU1lUyA7weUrtsmwPDz50hxFd76Op2xkXv9Wsh7qg2KSJ4CvRPqIyR/6xYsOoA7dwC+KLOw0Gtt6PveitBIdWwwi0WAoWHcvq1qY+PHH5C7dEm12dHmJk4A1Dc2YJPMozsuiT3WzUfffgeNnndCiHIWXrCzc1bJfLlg9OpV5CgsYLv6rJPTWg37TE+2rw8pKdr+fmwtLcHQv0sqwHE6OyFsQ1lbvXsXYWw+e4Z3JDePHwN0w2R1W3SiwLmZV69QfPgQHomDrS1kuYCmbWvxybtAYHZ+oNoojBRtFf6h4WHY4gZXCq4+YBqkXgxab1+5Aly7hgHTZBpsXRfJBOSyGUmB9K1Ur6piDb5EfViIr/bYGMyJCQTcF3D5MgIGGo1OiriDBkdHMJmKINQhPRUhNw+1tx+SIIwaVwuxlrYbfCaEBsXKgZSjCIPW+3QpOD0Frl9nx/hMq6PalggkugrQDvBgiX2MsEXVav68dw8RxGyW26zriAA5VeWh29WBVssRBzRp/JsvXhuaXI/hTUlWzsVksLi4uARgh+EkOI7Pbx1x5uTkBLlc7o3kR8x9vV6XjUrqRwQwldX1ubm5rwDscY7/VgEZvROec5pNsPAqlYoiImRXlBAisRnb3DdIhlPWwO7uLn5ZXn7J+88ArJC8nbQIw8SxNpyentYrFnIhljyLM+p5g92wt7cnHzW1Lx88+BTA75zbjNXa24owhriY2EFEEZIaIZcOqs3Pz39Bp37jvJPEO2Gj2cag7yuyLogdQCIgm82iXC5vz87Ofk7ypwCOk5wFuj87rYYIeUI3JNbW1iozMzOS8z94f4oQuqXA1cexZSqCSMQJ9b7A3VEi4IfHE5J/DOBFF/LYn1NxY4Qxqpy5GNqMLcZLvtcBkVRAWIQll//iH7Cj+jwh/gIrkcI82pD7mAAAAABJRU5ErkJggg=="

/***/ }),
/* 1917 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAnNQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxbm5ucHBwent6gIF/hYaFkJCPk5SQlZWVlZaVmJiXmJiYmJqWmZqXmpqam5uYm5ubnJ2bnJ2dnp6cnp+dn5+coKGgoaGfoaOgoqKgoqKhpKSjp6emqquoq6urq6yqrK2sra2sra2tra6rrq6urq+rr6+ssLCwsrOxs7OztLS0tLWytba0tra1tri0uLm3ubm5urq4urq6uru6u7u7u7y5vL28vb29vb67vb69vr6+v7+/wMC+wMK+wsa/w8TDw8XCxcXFxsbGxsfExsrEx8fHycnJysvHy8vJy8vLy8zKzMzKzMzMzM7Kzc3Nzs/Nz9DP0NDQ0NHP0NHQ0dHQ0dHR09PT09TR1NTS1NTU1NXT1dXV1dbT1tfV1tfX2NnX2NnY2dnZ2drZ2dvZ2tra2tvY29vb297Y297Z3Nzc3N3a3N3c3N7b3d3c3t7e4OHf4OHg4eHi4ePf4uLi4uLj4+Tj5OTk5OXj5ebn5ubm5ufo5+fm5+jn5+jo5+jp6Ojo6Onp6Onq6erq6err6urq6uvr6+vq6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////5//5OAAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2uPj6/7+PpBC/gAAAipJREFUeNpt0L1rU2EUBvDnnDe5TQLWoPVb2kELUhAklopSUNDBSf8BEaqIk4Obiy5WcBbBUkonxbW4OahDB6m1aJSKqBS0QlOhSJKbm5vk3vfIuc1NbmrP8C7Pj/PxpgAQE7YrsQKkAM4ZwjZEJPSsgnT2WZUNEzFDJQMUeedyq6EAjlvmlGEHhmhpeYKiXK0DKCDitGGTMmC28xtiqD2RiRSo0jwaIuSz0VyFAdqAuA+GFSz9oeIYtQV1QZ+2V/EinZ073V4C3AGpgCgCkp7k+8Txkh2gMSnA3o+7hpgZGiYAqN3BZl/zARjNeoCmEfALb52RtSHEFQOOwVdaGcgtDBKht0Oco+Se3NF0QVt3oKjEBIefnAtnrlXzQokRcQs8351ZLBR59M3qztJ16oL4iOBV7kS+CHw49r1UmTAgSAIwcWbWFucePcXVB+Pnjdl6pu7teP17MjeAwqGfw4D8N4LkU21dd/1xcPkIRLZcASK79usMEfhUqRYgsBaOSAzADPjZlVsEwvjD46X+ILC4HXTPVPRto8FR26Y/P1YLbejXWzHQXD6vHmUAVvKNL67JZ2dc33YAA+L/vkcAJLw427pZWZhyvWZyBBD6+7SRNN3Rd+7itO/53StE33WrTmzgvRx+P9UoewCSO+DvlU1gB/ePPK5VPcRAZJMMXIi/9+x0xaujAxAYIQLfjRqQce40y/UGuiCsXzJIVrPut5AAgdegHiAti079A5wcxSPyidauAAAAAElFTkSuQmCC"

/***/ }),
/* 1918 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1919 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAA3YAAAN2AX3VgswAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAC/ElEQVR42o2VTWtUZxiGr8lk5mScSaNJNYkxE5BiQXQhKnRTN6679y+4bIUEgwQ3Ct24FIrajWAV/4MfuBCEQ8TSFD+KiTGtMbVJ5vucOWdOb55FzgTfGTwP78zD8973NTfvOTMzmABwMst+PL78CtjwY4BBsGv/7N3TJ7sVmd3LXtPrqf/zOT50A7wDk5RS8wC20tqFgoOTeNANIDXL+hmCFJKmcQDMlNoNlgK6rU7AjjmFpNV9FokzgdmsTF5hmzYRMXsYsZVNbS5ApgtQ5T0dvTcNUdHeOgWm2Zsa+yVYlSWWAVpsS5BjhePUeMMBZrRv2l4JsrJX1f9NR8aybAkReb5mjC3lqHOMTL8ENSrkhRlRf1jS1waNNStQVPcPa0y7ARaflzznK8YUeh/vGJTlW5nH1MVASdNVxvF63YWQdVmHqQA1k40yJWCOjlVGsyH+5SCJ8wy09TuJhE3JAE6xrFmRATN0iKXKs8kEuBO8YIW9EiYWMeGjEB4QmKxDhFJYFhwJVBu0ie2TEtUU47wXcJQlygwjgO1UDORMcIQHtA0SkSVHnSar7FFkz+YhG4zg9QJkOEosUWSCE5QFgYIAOVpaoYBrWmUi5yGqJigRqtqKPUlsqSY0h4Yh1mSsaRa4ANh9+IHfJM2rt3PY+TLnaKiqQAmPkNgBMPE5fN5q+AfjlCXNGiAxYY2AIhOGcQIw8TznaWj8iAIlvpMBEKLOn/ZMbhJJFbrPAJDkF67xxvoOi5xlwAANZmTdoqV+hK0aHccZGEaIKzzkPk1i1mUckmVbxiI5SowS0Pjv8nU+OgCWAWQ4w/cK+xfLbHGIPAhW5hvqvKZZ/Wmee37wGSAFJQYpcpQjhARU7aelhNkbP17kjl+DnoAEA2CdPdgBTVVB9rA1d4nbfhV6AjI7EENYRYTkeUs7mF1o/epXoA/AlQg6DBEFFxZaN/1t+CJAZtc/VY7J+tzV1i1/E9yA4PrjmVd9UiRPnlVvLH6CXoCNpYUlj37Xp8Waa/w/YhwbdUCeou4AAAAASUVORK5CYII="

/***/ }),
/* 1920 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1921 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAU6SURBVHjatVfNT1xVFP+9jxlAoEBL02r4/oyQli5MExNTXUgXLjRA21Vt4solC1MTtXFh0nX9CzQ1TeuqiRs3xhpJCm6sNpVWHIZhoDCUAFM+h/l6z9+5zJ3HDA48qp5wct979+b8fud3z7l3sF3XhTaDxsGUR/w/JmCOuwvU3gUuwHU5t/Tn/xg8S48TK04OjiagLUDvjH9ybszlWoMu8IYl5OSdZua+0SFr+K6eZV7rRjcNvU5Gb42MgeFfXwfwGz3pEfAsaFhC0lGxyi5+AavnrQIZnImfkP7umgTzQCV4CUBvXkgaCgOeeQT0UsN2EKnpQtvaBGyCp3+4AXfu4Q5Aw2nYb38E83tRRAjsB6hV0JJZVNPK43gEiswMuOjYegJTz8R+B1ZCO8E4p0KRJODuUQCmAqTLBN2k81kvlFFbSQISPFTRjc7EE9BIxAUC3BIBtByIUaVcTWhgZocckKkKJw/ouU8CJoN3p8cBAiuwxtPMPAe8FgFuv8s1OyCGDiyZQgPlK3ePCoZfAn/aPejO/AFE7sE6d9Wb/HYIuHgbuNkPwwPysiyhAknotf4IvIpxZm0BP14D7n2uM5NJGLfeAeyyYkD9zqGIlHZN+CACm5d/RjQaRUNjo2S514H8Mwqf9Vj8XPTt1v4EhKkGz2QyCIfDSKdSWr5iAgUkysvL0dnZiUAgAL9m/xPLp0+foqmpSYG/fPIk6urq4DiOcpoatfNIFVfPGxsbCIVC6O3thbai2P4IEFyN6XRawEUJDVYMXkCsqqoK6+vrhYCHJkCfnZlBc3MzQIBsNgvbVss0oIwFri2ZSmmgF98CmgLX+5rYTmLim5t4qboaJvd2bW4OidVVTExMIJlMwqE6WXGSfO3qx3i+soyiKx5lZWXo6urStXFwEUapQEtLSz6TZoKX19bCkIxbW/HowQMMXL+O+vZ2X7WxubmpaqOnp8ffFrTkFIA4XNQ9fowgK9yJRtWFUrW8LOC+a6OyslIKVGL6VIBArcw0d+2juq8PZk0NcPYswEBld+8etjb0vE8FCA7d6/wz6+uBY8eQtzNnVG1Ev/4KlSQmazdmZ7FBgGWSDwDq7MjQs9z3N298qRXxp8D01BTa2tqgTFjzXACLL2+UXqzhxAlUkpzLdnVYJ1tLS4ivrKCCRRc4cgQmt212dFRykJaWLVMRxfdVQMlPIrqwQufPY7fNjI/jFYlx545SwwwGYVGJOq4NLi6ifngYmfv34bCYy7lVGdtWBFKplCv0D2zD6elpUUCTUG2026SdBL/26FHYklVFBcDsXQJWnjoFd3sbrmwZ1QmSVAYuY5RjZGRkFNRSBNmXABXQwFK96oQT0wVnWZaSyma3mOxvl+cCjh+HQ0CHLfec74uylpkH+vvhrq1hYSE2OTg4+CGAGGM4+xKIRCJoZ5vJxTI5OYlVBvRaSJJdEiZI8mzgpKoBg6qIvkEe3ZHQJPo++xRbW1uYn58XRZcIfglAmOCpA7eA8mup5fDQ4AWj1MazCxdQbNxnLC0sIJFIIBaLsaVnVoeGhgYA/EXwbV9dMBUOiwKlbrSStaH7nxdYDjy6euXK+5d4QT3k901o86HAvpdKMBiU41VOuAJwrQC/K9kHBgbeI/gjABs+LiOvP6empkoqQJOLRc52KVA5EaW/pc3E1ekYj8cnCS77EyKxrcPchhnLNNHR0VEgdfHI2tA/OqQWFAnd52NjY78Q/APpZoInD3MdZ+lzlPcN9f3FLEWfpT8jeBo+zN61hxlmOAdggW78i/+A06rPfdrf2RTDu2WKOKIAAAAASUVORK5CYII="

/***/ }),
/* 1922 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAT8SURBVHjatVdbT2NVFP4oLS20tOVWLlI6KkwpZMIkiIyMozHGOE703b8BJBCNmfBkwh/gxcuLidGY+Gii0ShhDAxMZRiQzFCwdBhp6f0OLRRca2UO8Vg76SG6kp19abu/b3/r2+uc6s/OzqDE8PBwLYA2akb8P1GgFvF6vSVlQQ91tE1NTX01MjIyjApRU1PzzF49Vsfi4qJ3dnb2fQChSgSMDoejE4Dl34B1Op2qL2uVSUl0dXV1qtRVE6h84nJw6SuBVySgzKsloAA9E1zG5QQqgVZNoAyYWjUpqOgJMnv1CpwDlgNr9YHmFCibVyTBkUonkc1lkM6kkU6nwGFpsMBstsDpdMHaaK0EeGEFpBWKBfi2HzI4ba6DxWKBo60dhaMjIpNC8CAI344P7sv98LgHyvxAe2hToLa29nwcjoQQ2PPL54OeKwTcoUoFR4YUubuyhPWNNSTiMbx2443/RoFkKgF/YIektWGAwE1GkwKuktpms+OtN9/Gz/M/YjfgR3d3D158oVcDgXJwdi+Bb/NYTm4kcB7ncjnsPQkgkUzQOAur1Y7mpia4XM/j2stj+Hb/Gywu3WECKmNqVmCXTn5EOXb3eWAy1UPWdv/AxuYDFI+PcXp6Ki1Gku/slNDu6EBzcwu6n3OyH4Rgk70JFHwYTR6QcSgcpHEtbdgja3/uP8Ha+ipKBOp8KnE0GsE97zIDkBJWJsSKSB8OH8BmtV3MA8fHRWrHtIFd5icnJ2Sw+wLe2tqGV0avgyMUCgqY2Wzm2yFEGhoacFo6RTab5c+qJqAqKLl8Tn5ssTSCgmSOIn94KGuunkvnssbjMVlrbLTynMdcH6Svr68X4hQ816ZA/imBOoNRCKVSyfOcOyklBCb+CDwO8Bqd2sJgPCZVQhDyZotmAooCzF5kzOUyPBcTKgQSyTi5vhne35Y5VZKWGoDBRJHHewG0tTrICzZe02RCxYiSewFLJXmNjNgNCiJVwvc/fAeDoY6voNx3P90M3/YWSkT44aNNcAwNXUWxWFSAudekgNR2HVXDZDLBdV/cPHTlKtbX18gLefnO6OgYXM5LdBOiSCTiWHuwikbyzKvXX5cDFAoFKFEi4tUQUJVXd18/7tOmyyuLVOVuwtM/iL5eN4OxvLyptFs330UkEobeYIBBbxDZ8/m84gktBNQquC975O4Hg/u48+s8XhoehV6vh93epGzOja8r3xbpDw8PuVKyQXnO3+O9OB1Ve0A1H7t2A7/M/4Qt3yNy/C763YNccAQwT0Chg5AUHKPRiB5KRyaToWuYVkhI7m02G6UymWULVeUBtRfMuPXOe9j4fR0r3rtYvrdERpSTK01AOto7Ke8pkd5AqWhpaaGy3Mw+4LX4zMzMHIBw1Sb8Zwx4BuVZH41FEY1E5MVEV8OPbT0XIal6sVgMvb293EQBn8/HKclMTEx8COBr+k9Q0PBWrH6nU8Z2m10pMJxXPiHLzkBUrFL8ovJ38Pz4+PgHAL4k8CwotBJgcIWAqlfKLrmbSTAYNy5gDM7kjqanpz8C8AWBZ6CE1v8FaiLSyuaKGnV1dfD7/ez+Av3Luk0m/JzA0xqehppDISRqmEwmJlOYnJxk8E8JPKXpjUiDImWlm53f2dmZI9k/JvDPCDyh9Z2wMDc3N+9yubYupATFwsLCMhnyk9XV1RgotBKIbG5u3qZmxMUjRuBZVBl/AfYK8MOiZq32AAAAAElFTkSuQmCC"

/***/ }),
/* 1923 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAgFQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxfHx8fX19fn5+f39/gYGBgoKCg4ODhISEhoaGh4eHi4uLjIyMjY2Njo6Oj4+PkJCQkZGRkpKSk5OTlZWVl5eXmJiYmpqam5ubnJycoKCgoaGhp6enqampqqqqrKysra2trq6ur6+vsbGxs7OztLS0t7e3ubm5vLy8vb29vr6+v7+/wMDAwcHBwsLDw8PDw8TExMTExcXFxsbGx8fHyMjIycnJysrKzMzMz8/Pz9DQ0NDQ0NHR0dHR0dLS0tLS0tPT09PT09TU1NTU1NXV1dXV1tbW1tfX2dnZ2tra29vb3Nzc3d3d39/f4ODg4eHh4eHi4uLi4uLj5OTk5eXl5ebn5ubm5ufo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////R8HKogAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAixJREFUeNpt079v00AUB/D33iVpkkoRKggBoYCQSggRJUCIysBSqVL7B3RhLAMTG8xM7IydWJkhRDB0RdDwQ5QkFNQBFFEiBUoUx9iOz7kjZzu+ROrzZH8//j7f4BgAICEcNlJIgBGgNEPAQ3I5tIQC8dTDPjFCJAIlCQB9n3jABwpAwjQJGYsDQ3/8XNkEgAKItH+OjQaIQF0YbiREBZRSub8krAgEAwgBtnLAKARaoAY5Va9F+JEUgVgjjz6of3P4MHXk1gn11mRDnggV+NEtzMdrewcbSRVqAF8LQQMuLBOdedxt3oApgAXyB1fTDHEmyf+APxGgL4sByFBwAInTDRTmZLz+y4W0MAg1wHoRR0P1LX7h/LHk0z7i9AooEhk0R9tObn3Eg4L2SQ1w59rOVmztShfmVaYEbHaydzS4Sh3Jd4ux4U9UQpEe7HsafCqtyc8JmGu3Xl38vWerZ7efGTENriNdbl6ClUq39i6T563d9sap2RmhwYdy4+1CHs/e+9U5fRxACNF/ebDKpRyDEr3JLavt2SwCDAV3q/bK0UdedMyP5bsE6Fv1/sAyFoey7dh8DEoq8OMg/97GVLpiOmIM3i8FsRrpuUZr3WhUTMuNVpTHMYKUrmtKs1l1LEefYnsp2iCF57mzjReDngWgG8J6HwjhZZ7/61swBlJCTTVEJZ6sGpYNEQCP3Yz+BYks8cTt2QPQYGjfZzA5ru1wmACeNcApILnQN/8BwPLNMEWLIH4AAAAASUVORK5CYII="

/***/ }),
/* 1924 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAWKSURBVHjatZdLbBtVFIa/edjj8SOxkzYPt2nSJihNS0JEqwAtDyGoQKQ8hEpoQUJdAGKBKlZddg0IsUWoYgELJIRgBUIsoKqEikoIbaChYOMkbdK4eTaOEz9mxjP4WsS1cRRbKfzSr9FYd+757jnnXs9IjuOwLikvQOb/le2UBBUApcFDQEMJhMR/JwewgSXg1jqEym25gO7lROKCaRiCCGndUHpfTrZ+L66l1FIlu6IoeHX9EDACGEWAUgjTMLn3VIT7xj6jKxklY11BNRIsBNsYVwdonTZxZwx8dUGMzhamtR/oly7j9zexMuEQ9vkJW/fzXmg/s033UKqrZwv3LooqB5CEBXl9YpywkcSyfsP2uFhpa6fRGoeRbuRcDqGgY7NzweZgoJPrB+ZpXZmi+YEwrbMm4cZG/Ak/84pMqUSWinGENmo4WZYYuHkRU7uK5XWjbUsSzE2y5O/GdimsS3NrqI5MLLxMe3gas3c3vftBebyPTGeA/pXLYq4yS3JFuEoASdi9iLthhVRLC1m1nmRjPQF9HEU1bgNoGlnFzZfGH3wZf4q9exIovX30H+5i9LfveKZT55A7jqzIRUtQHUCUwPGuYtdnWPJ4yYUsNCXJaK6HNTWAkMvlQnO5WcvbJ/uYWBzj42uP0t/TyOyaQk/fNL7mBAGXJlZddGmjblICmaxeT0zdwdW0ilte45yxj2hyjpxLKqZfcWR2rJqcjr5EQ3A7RtjPpeU+vrpwnqXmvWQbA8zIoZIM1AggAde2P8GiU0frYiej14+ykJ4nZLfgXUkh5NEKAKh5b0s5vDr7Ch0dHXz6bpzJ0D34mnaQ2t5HxPYgK1LRGwGobKAlXx+uXJT2m1O4sibJnj3c/bOO5Fj/ZMAtghcgXJqbQ0t+Qm852FIHF49N0drWypnPdyLLFbugth6QFBkr+CyZhm1oq6v0DovgcKtBZ6rFYabZIqPYBQCtzsPc3BwHIzre3XUMtHfz/rkwsaRfzFNmoDqAoBTksuKBfV3Yfh2hjK7hNiNccbx8FGzgA/cIaxpks2kaF3S0Nj/e5zXCUZNL14JijgrX1gPS7Zpd33OYxMNJXFKOXmmYkGTzdGKENy/HUDIxvm39Hs+Sgtzsw3rVooNZPhzxi2c3cu1NWCRWVW7sPcVaVwNtjdtZu2uO7mCYe9U4aUscxwqpNp3U2Uy+cUd5f9jL72aLeHZDAzU1YVm9LGU3Y8+dZn7+DGOXE4Qei2CnbFriHQT37GfsdQczssoXfx3D0vPQVFFVgEIJ/kWreFjc8Q7m1bf55KcJXJqXXQND/NT0IMYvDlbOAXVrLxLqxiWoXIdjZQjvf4S5K2l29R3B3f4QblUiY+aK46tI9MAWMwCov37AAXWYrkMhvl6eJydJJLNOYWytchyn1gxUTtpqjODYK4Q8AfRAHcu2VFx5rbJtu6YMVBwajm1xY0VlcfUW0SUv1pHDJWNql2VZAI7w5hlQJMqkuLCf/IjU+HeonUeQVH1LDWcYhgPkqmzDjUsgawHUnufYikSlnuo2OX/+/I/AFGBtDqDI3ImsTBKvNU97g8LAbp2DuxSmpyYjRwefeQ2I55vR3vwgEsh3IN28yTdnDpNKpZiZmSESjU4fHRw8DsTywc2qJfj6jTqxZ8sMlF6Fi1srl8uJ+mKaZuE6NmaSTqeJx+NMTEwsnDh+/ATwR35stqa/49oPkwKA2F5FCxif318IPj4+vnDy5MmXk8nkpfy4NBtIrRqs+uFSZpGBQB4gmk/70NDQi/ngo/nf12o5ip2Cq6hKNkTqRdojg4ODLwDRipVXKUFOKX+BKHdlwOILjKIowk4sFruQD/408GeV4BUfpwqw8x+rbE0mMAnM5ee1AGoFKIUQlu7gC9gq7PMa9Te67zu9kU1bKQAAAABJRU5ErkJggg=="

/***/ }),
/* 1925 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhxQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxQUFBRUVFTExMUFBQWVlZWlpaYGBgYWFhYmJiY2NjZGRkZWVlampqbW1tbm5ucXFxdXV1d3d3eHh4eXl5enp6e3t7fn5+gICAgoKCh4eHjIyMlpaWl5eXn5+foKCgoaGhpKSkp6enqKmpqampqqqqq6ysrq6vr6+vs7OzuLi4vb6+wMDBwsLCwsPDw8PDw8TExMTExsbGx8fHycnJycrKysrKysvLzMzMzM3Nzc3Nzs7Oz8/P0NDQ0dHR0dLS0tLS0tPT09PT09TU1NTU1dXV1tbW19fX2NjY2dnZ2dra2tra29vb3Nzc3d3d3d7e3t7e3t/f39/f3+Dg4OHh4eHh4eHi4uLj4uPj5OTk5OXl5eXl5ebm5ebn5ubm5ufn5ufo5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////4VOwhgAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMXZ2ePj6/7+Nos3swAAAg9JREFUGBkFwbuO1VUYB9D1+/6bAzIoKiJy6VArShM7sbay8BWs9DEsrOxMfAwvWNhqZ4KxodFAjLcwMjMKZ+bcz96u1ZAKAAAYfdCoi1MEAIAx9ouuce65T+c1VVIlokhg9vF2rWF2Op9qmpopSRKJXpEZGkm1aTp+bVJ1eN3Rq4k8ul0qoUGbjp89fiJx9Md0dC3kZHfz8gQNMt08+PE32MxsHsJ095JAg5wdn+z7yxdns5NDty5tz9bz/HztdkGDduWVx7++9EEl3525+l4lX6zuXBVokNR+9nZVapqZmvLW90qggaS/cLEqNZWqcOeXHoEGqerv/H29UimVsHr/X0CDquoHL/5+63xlkpAr+6MINKgqF94wVeUcQRGBBklunE9VxQbCdAPQQNXVqqrEniAOAA2SVFUlDENADGiQVKoSGd0IAYEGqYQIGxEYgAZJqsJ4NN/ZhzHGINAgiUS8/sPOkt77rnezMWgQVRDrrZV9n9du1322QwNF9N2F03l3cnr+cDPOtn2sllsaIEwPvp33+OeT5+/2P3Nw4d7pqtOA0h8ee9f6nE32R08+fHb/q9PFBg0U9aZIjP1i8dd/pz99s1qsoEEGEIy+260v3f96/XQBGiAAo/e+vPzl2XwBNMYAQLBz79liCWjYTSMRwcg0+3zzdLkGaOyXH00AYLNcbQE0dot1AMDYdgD+B+Cqy8B5ED1FAAAAAElFTkSuQmCC"

/***/ }),
/* 1926 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1927 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKzSURBVFiFtZdNb9MwGMd/TpZJo+wAZ858CfYNqkqc0FZx2YlPCtyQ2C0bzQFNi8TKyzTUTnESc6iTOo6dOEN7pEdN3cT/3/NixxVKKRoTQkRAxNNarZSqW80GQAgRAy+Al08IUQO/gN9KqQrgwPgxAV7/ubv7KIsChEA0viNsvwO7MT2uA2gnEsa4aXEc8+zo6A3wBegBCOBQFpJClntx7VG0F2qBrE+fuOh+Hpr8B9imxWwAYUQqrKiFQ7wffzdLXgCfeK8UY1lwZSLqt1YPQGjSSN88FaDXG9bcowBocTvlwRD2dWfqoBJE1HXd63wfgN0HTnHHSvECCPZlEEL0IZqJHNe2iC0YBNASu8QN0aFV4RMLA/CtABeArwwTrF+CCQA+YR9IWA9MEJ+a8mlN6PIA8allcDbhaBkCmi4UxNmE3hUwIj5We/Ps4QUw0+2C8AmGlGHaMsTaxwPEXQKuqAcBBKAc0fvMJa6U6rh97yAAQiCU6mytvuhd4nVdd9yEiOM4MAOW8FDE5j1VVVHXNVVVtdcNhAZQQKklPBkgvL6uyMuypCgKpJSUZanHFUrVXFxcfAauATkI4BIYGjfFpZSs12tub28BmM1mJEnCarW6XCwWH4C8OREPAoS+zWDXdE3aHx4eyPOck5MTNpsNNzc3pGl6vVgszoAMKMxnnef/kF3N3FxMgLIsqaqa7XZLnudkWbZeLpdLIAW2ylqXfYCRLdSGUUp1ul5KyfHxc/I8Z7Va/Tw/P39/f3//FdjY4vDIHrABTC+KgtlsRpqm16enp2da/K9LfBRgzGzAqtr1VpZll/P5/B3wDU/kjZklUEAZRxGRdt+LqH1AKYTYnaLjOCZJEnV1dfVpPp+/BS7HxIHOn9MD4JX2x2amAL4DPwA5Jm4DCCD+D3HQWTTX+Zj9A4jtTPPHd97DAAAAAElFTkSuQmCC"

/***/ }),
/* 1928 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVUSURBVFiFtZfNi1tVGMZ/594kM/m4GZLMNEPtTLvpjA5T7M6KXQmCMgxVBK2Dm26KUEEQRFBcCYIu2y4UFNE/wIULd/WDYpUilk4V5zMt6bQZkjSZTJKbzP04x8Ukd/I5CUpfOOS859x7nuc87/ueeyKUUjRNCKEBGo/XpFJKephNAkIIHYgB8cdIQgIFoKiUcgF8LZN+YGanVPrVtiwQAtFs+ww9H9gfa4w3NuAtJFrGW03XdULB4HPAn0AXAQEEbMvGsp0D8EbTtAMgj1DHbz9w0f4baOXvo9MaYJ0ERMtORceuRQ/w7v23q9S0rlj3AxdCoPXoz309xbX1a/u+prU/p2ldbSAB0WCqNRYb1CLBIB/+8AFSyW7wht9svVTppnQYuKa1AWhCEND9rBRW+OafL7vmtB5rDBGCfXDpuuzs7AxUIKD5QcF3xS+4V77XTlIICoUCrpSeIsOFACgUCvh0HdM0kVL2zYWAFuDyK5e5s5nj/dtve3NSSkzTxOfz8Sif98YHhwAwazUqlQoRw2BjY4O9vb2+CTmiB7h45iI3X/+Dmxt/cyt3CyEElmWxsrJCNBqlUqlgmuaQBISgVCoRHRvjwYMHRCIRIpFI35wY0UYQQjAVneLK81e4unwVIQThcBjDMEin04yNjVEoFHrttUcIhKBSqTA6Oko+l2N8fPzQshzVRzz/zOQZUrspzz9y5AjZbJZgMEi5XB4yB4Rgt1QiFAqRzWYxDKPtSO4kUXds772jkaM40vHWMgyD7e1tQqGQl9Cd1nUSth6bmqZ5SdkLHMC0620LR/yRNl/rcfgcqgBALBajXq8zMTFBtVo99FiuOnWvn61lORk76fmVSoVkMkmtViMejw9JQAgihsGeZZFMJsnn833B9xXY8/o3Mje49PQlz8/lckxOTmJZFtFodDgCAojHYuyWShybmqJarXol1Osj1KrAqfFTzCfm98erVcrlMsePH6dYLJJIJIbLAVpKqLy7y+zsLKOjo/uHi5KYqkLBzJMr5jiZeAqzfqDATGzGWyYYDDI3N8fOzg6GYRAKhWi9ffUlIAAlBOMTE5R3dzEMA4AHtbt8VfmYqlPll+XrpP/KY6dHqOSdNlUAlFIIIQiFQpimSSKRwHXd4Q8iAfh9Pk+2n7e+563fz/FS5E1eSJ5jOjnJaBikfw+/ruOog9KTUuK6Lo7jYNs20WgUKSWWZeE4ThdcbwVov3h8dO0dcsEM3259RnZ8g/RImpE4BMJw6thp/JofANd1PQLNvpTSk17XdQU4DYjeBDrldJWL4UbZrme4uf0jU0aS0088SapQYL4+x6cvfu7tXEqJ4zhYloVt2ziO0xhXKCVZXl7+DdgCbA+r5VYcBJ6p1Wo/NWPY/DSvZO7wyfX3uO9fZXwiQSgaYWb3WS7OvkssFiMQCCClxLZtbNsml8uRy+UACIfD+P1+Njc31xYXF18F1pVSewMJtF5KisUimUyG+1v3uZu669X3iRMnmJ6eZnp6mkAggG3bmKbJ2toaZ8+exTRNHj58yOrq6tbi4uI5YAWoqZZyGBgCgHg8TjweZ35+3ptvPqOUwnVdLMvyks91JbVajUwmQyqVyi8tLS0Bq53g0KcKDrNOckopL/7NMBhGhEwmw+bm5qMLFy68WS6XbwNmJ3hfBfqB9TKlVFuzLItwOMzq6urW+fPn32iAV3qBDyQwyDoJuq4LQCqVWltYWHgN2KDPzpvWGgIFOLqmoTVav6+g90JLtei6jt/vV+vr6zcWFhZeBtYGgUN7FfiAY432X5WxgDSQBexB4J0EBKD/D3BoqNj85zuM/QvlF36A7j05bQAAAABJRU5ErkJggg=="

/***/ }),
/* 1929 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1930 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1931 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAASSSURBVHjatZfdaxxVHIafmU3SZDdJU9MkTZqQBEmRllabKsUYURC8MEREsKbVitWLIgoqXohe6JX4DxT1xiJYEEHworcKoqVF/OgXVhKTYJuPbZqkbXbtbjKzM8f5HTvDLCdDRqpveDkzu5l93vOe2dkZSylFKCsQYMsm/48E5qsYVAKEcAFvue1M+P5/DPeAG+KA6wPUQKRaYODmysoZ13EkEVZoiO9XJwv3ZYyntszsmUyGbEPDg8BZYC0MEFed67g4biWERbbtCBQCjDEJblWPdUSqDmBpa5gMpoH4tjFWBzEl/xdxzABaJtxcinQtrNeEbRMqMYAl1i3YAOsGKN2oMPX1MmuLFdw1H78Czf31bHu4mW0DWayMZYQJtzcMwD9wo3JxIe/w44ezeGvQ83gr7bsaqKmzQcH18RKXPlnkh5lbdO5pYujtHuqyGWMJNgwgcN/3UV+cxT44GME9R/H9u5e5/60+2vqyKN8KDMjowdbuRvxH21HK4vKpZU4eHmfn8x3sfHqrkNMHsNDW8JrzZby9OX3g2Y/m6B9to603gHuWBuEhQaJtfHSYngda6bz3Ln4+NolSsPuZ9sQANpjSiW1L4DqErL4dgHJdDRqOL0Ar2lYV8D3Q+4ElVMbOMHh0gEsnFlm5uibwlAHiJ51t4UuIcyUaW2sp5h358CqQXwmXIbCMUTioqbHZ8/Ld+G8ex1BSgAgeDzHYSE/7JmZPXsN3b4M9whDVTQRGRcfTN5Sl9ctXw/20AcwQm5/cyq6BHL9+NiMQgYazjeoXy1+o5h5o7Ag/J22AJFuw4/1e6i4WmD9XjOqPmvCqJyDwXDuGEgIYLSQ2se/Te9j+1QluLTuoaO2pmmFTtzJmLgbSnYTaCSFyW2pZfecwE+9dwi35oDTcqD2u9AHilSeEEG2/r5nu17uY+OA3UHG4rj1p5v/yawhi4+Bw3PVUB/WPNXPl40lQ0cwNiFIq7nQNYM6e9TT0Ri+TSwWarq7Q2G7Fofpy7nle3PJaygZAvOHvv/x073iii9/zK/BLERQRuFKp4LqutuM4Yv0aoLSTGzDBJCzFygy07Wxj9nQRBhspHj+VAI8s4IrxY5QAMYBxCby8aLFacMi11OCjqH9hfwgPZyyNBNbrz4UL508Dc4BrBEgOYqowa1G6Br7nc/Hzafa91iWgCL68vMzCwoI+PpvNUltby9TU1MTo6OhRIC93xBsFSKz/5mXFlZ9uMfvNHNfzZfa+2En/Q5sFLvXrmc/NzTE8PEypVGJ+fp7x8fHZAD4GTAVwJ+USmPtLB47xLY/Q2ruJ3a900bu3WaoVsDgKIJWXy2Xy+TzT09NLhw4dOghMKKVWiWQ+mNQD+8urq9+hVNo74qh6AUv9hUJBL0FLSwuTk5NLR44ceS4IcibgFInpjs4Bki80Okgul9O1j42NPVssFi8Cf2HIDKC002vdqx4gtU+MjIwcAP5QSpUwlNxAJWPb8kFG3QnA8BZeHrvEKqj9TAB/CfhTKbWGoeRzQMJsB7qNYOnlADPAglLKBUgbIB4icwdPxQpw9fc8pf4Gn39txtlTT40AAAAASUVORK5CYII="

/***/ }),
/* 1932 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAATWSURBVHjavddLUBt1HAdwAqS8C2UGkY6ifTGtlUIe5MkjQEJCwqsihfIohQBp5V1AXqWmsI/sLhAbtW2k7YxT6wGvenI8eu44oxeP1kMPjjc91MPf79rVrjT/lRkYmPmQhWTz++aX//+//00ihOxZRGRlKaBXHnW7PVf+tW+UAEegEPIhA3QHFUAdJAtOKooh60ADKCGywagogyLYfQCH075ls1ujiZ4Lh8OpkB6Px/V4TNYIkQcuqAEnlIBuVwGcVY4HNrvlK/mYFoJl2SI+yh+PRsN5GiEKoAUC0ACndhWgqtp5v8JiIjaHdVar1RzHlQgCYxOEtTNyVyghnNANHdAGR/83QHVN5T2LrYKYzIZnCOHVCKHj1/mKiMQGBIGtTxQCBXMhBEHog1ZI0QxQU1stjwFirjARo6n8Nxy/SXttPD6iR4AudKJHFLkaShd8MA2jMARvawZw1dXEHU4bsVjNxGAsJwZT+Y8ms1FPez2KW/Cmk7zAXOHWudOUAbkC8zAFfZoBautdd2tcVVsYjA9R+M+y8nOkwmJm6F2I63mBnRckdlmQmDF8FYcShJiDVViCa1BADVDvqb2DLojycWW1swldeIYQT+0Oawq9C3yPILLrEZG5ubHBvJ4gwAhIsKaEsFIDeBrqb6MLwot1wTZ1rqxU7sIodUaIa/6IwHyKN97kRM6ZIEA7fAQi3AQ/NUCD1/1Jnbs28s/fHZ3tOqPZ8IvRZPiOdg77fNV7hC7cwaDsThCgEuIQBQ4uUgN4fZ6P3Q11nPp/VrvlM4Ox7GfqohOJFKPwl+jCPUHiphIEOAtbEIMIBKkBfH5vzOOtZ/+7PNvWMBueUr8CibMKIrctB6B0wKUEuAURzQ74m3y3GnweZkeAh1gdH9PO4SXmPC9yn+ONb1PGQBfchSiwEKAGCDQ3fujzN6yp/2d32B7bnbYb1K9A4kJyAXkmMEzCWTABMRAgDBZqgOaWQLQx4F1VrQs5jkr7D67a6lTKxSlTkOTRzQhYD+bki1WCAB+ACKuwCPnUAC1tzRv+psawKsAClucT9PbzbhTGp+IW5AtUguKvAg9hpfiA5krYdr5lPdD8PIDH686SaVya0+XVD8vxGC+tuSnXgi64DnMwAWfVAeR5Xjg5PXF9aXnx++FQ8H5w6PI312anv6YVVe8L5AVIELi+iMS0xmLjaQmKFyqFJ+EqdEDyvwGmZ6beWlpe+HVpeZ70D/QRFCYjoSEyMTn+rVbx7e3tFHm0y5diLELl8vWA8un9EIIB6FXvB+RP/kbvpZ4nV0dDpLe/m1zoepcEhwdJ76VuMhwafERf94WcSGS1FHsB0+bmZr7Gjui4UrQL2kEZHy8CxICoXezpJJ3dF37HcaKtlk6SpKxYLHYY0pKSknQaxV+DVmiGRjjz0qa0r7/nweTU+N9tn31/hszMTZP3xq780d3b9c4ed8WvQB24oBKK1M+rO1AyGLz8043wClleWXyCgfgFipv2UFgHhWAGE5yCTNrr1bMgdx/uBXLgmFK0CJSpS7ef94ZpkAFpe7g3PDD0APhJhTTIhGzIgcOQq3JYkQPZiizlnAxIhzQ4BHpIhRRIhpfvjJQnM+EY2MAFtcpjNTjAAgYohdNwAorhKBTAEciDXFWwrB2B9DuD/AUK/p3tsg+TbgAAAABJRU5ErkJggg=="

/***/ }),
/* 1933 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1934 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1935 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANzSURBVHjatVdNaxNRFD2ZNF8lUprYYkqxm4LYhS5CFi5F/AOu/BttoUUR6UroH8jGD5CC6K+QUqSohCIuqrYQUVpLtTafk0ySmfHeqZdG3sz4RumlhzdvJn3n3DPnTSYx13UhVSwW4wAmCCmcTVmE75VKxZYTI/izJpaWlp6XSqUiAioWi4WOcuxXm5ubldXV1dsADoIEpCYnJwsAsn7EhmEMjwqCRElNTU0VxF1FQEjHQqqMAeSBAmSuLUCIGK8/D/DxoI+e7WDuQhLX57JyPVCAzMPKQEDxwvF43Bv3ag62ibzbd9EwbbzaNbFfd+W6gOcM5VhGbQdkQUHXBhzHRX/gwHWJ2AAaHZsWTv8tB1FugWq7IDnieAJcFseL0F86edq9ZgilojswnUsyOXfvkTs0TOdTbK2/A2rXsm40B+TenUsYyBC61okTiXgM49mUfFYj9fohFKUKRlOG17lNLiQTItDXgbBtqnLpkO8dD9CybI/cdYBOz8WH/U4UckG0DPxoOXj3pY3tfRMdsh8uPBdMa4CnL/dweTqLm1fzuDgxqloumVHmmhl4/7WLt9UObGJ0CPy/vL5BkGWqhybW1i3cuHIe1y6NCwlDIY2cgYOGg3TC4D1/aiHYAU+QJyZBF3k77n5rw/XOO4ygY71tKGQ9G0Qeo44ZYMLfW5FFiFBagC4ObBdCxiXHAio5r5+BW6XxsKSLvYLhTv9bgJLmMHIhs207SEDkEPo9YIah3Fshl9FHiLYAX8Kh8iUX8HwwGChCpOi8dgaEOOy+KwKI3A8iQkuAlF/3w1Yqlvf7fSbzRsuy0G630e125fzJzur1VAEaxIHdiwghYQImbjabaDQaIsL7/NjYGGq1WguAo5OBMBeUoIn9nU4H9XodpmkikUggn88jl8uxI3zu58rKShnAoSJA134GlULO4O65cxYwOzvL8BzY2dlhYc2FhYW7AF7QbwIr9FEc4ogI8Q0idykOZLPZYXJzfn7+DoBnRN4CVVQBfns5UAAjk8kwObvSXV5evgdgjcibGl9G2t0rcwlhMplEtVrlYFr0K+s+hfAJkTcivBNGr+FspNNpFmMtLi4y+SMir0d6KdV3RH10c/ILhUKbbH9A5I+J/DjqW7FVLpfXZ2ZmPv2jE+7GxsYb2g0Pt7a2jqBRZ/Hz/EjSrlO/AFSPDC+IyCRfAAAAAElFTkSuQmCC"

/***/ }),
/* 1936 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1937 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1938 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1939 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1940 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1941 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1942 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 1943 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAATmSURBVHjatVdtTFtVGH5ooR+0pQMGrHVQPjoEplmyypxZMv01EzEzwZjsh0uMHz/8YwIoqDELickS1D+iwR9sM8ZkUxcTMSb+0MVsRGEKKTAEtm4UnZVCaenXbXv7cet7T7xJk8PHLcne5s0595yb+zz3eZ9zem5JPp+HEi6XSwughlKPBxMiZWB6ejqnDJSiMAi8v7//q87OThe2iZKSkp3agj4fExMT00NDQ2cA+LcjoK+trbUBMG8FrNFoClsudyDFwm632xR1OQI7vbECyrc8OE+EV08tAQVoR3DW5wlsB6qaAAdMqaYE23qCzK5agQJADrhYH6gsAS/7tiT8ib9wLzwPn7CMf2LLkOjN7JYmPGRpRkfNUTRaW3cisXcFJGTxy9/f4o/Va8jmc5Dol8vnKSVspAJwr0/i+7uX8WRjF15oewV6rZ4jQc8pTgGtVsvacHod3ywNYyPpZ4CF4Eqyaxr/yfsd3GuTePPx86RKA3YLzW4KoCSPMc+oKnDp/+u0lMXHU+/LI5w3OKzd5J/490f44l614Oz6ZMMpeDaXcHXpC86gRSmQzMVx4/7YluA6rQH1Vica9jmhp74CTi0jcKTuGK4sfo7NZIgtQSWL8sBqdIXkzHDg1eUHcKLhaewvr2MPXUv4cc37Ayl1n81P+K7jxUdew9TPk1gKzuOY7cTePOATvBx4HoDLfhItlW0wlVlg0lngrGzH8YNPyXPsnin/BEZnhnGc7lsKLUCSJJaqCBTWa1VY4WperrOixlQH0LyzqoPAO6gP1JbbYKY5maJETOYDM7DoreSF28hmsyyJRHH7QHlpBWe4RFZAMpNk0t8jo1FLXDQ0nmRzEqu1hMryGtwKzOJQxcMMnIIR2EEBXoX6fU7O7YmMgMXgHCJiWL6RgYfFTfy54YaQScirgakQFaO0Y95Bk+WQooB6EypGrK9wbrnUbvrGEU8LaK5sRZ5+t0OLmFt340z7S7BZ6vEbmTCWjjIijaYWiKIIit0I8CQOVjSxfX4lerdwnVNmmNFurv4qgzDZ33jsbXS1dLP7xjxX2XiDqRkHSu1Ip9OQI5fLqV8FTAWS99Wjb7GWwDlDKuAyaCgVwmrch+HpD3BrYxYaaPGy43UkhASi0ShLngCvAO8DUuC51rO4snBhW/Ac9S/OjWB09lMo48/UnIZRMCGQCbD607OYEqo9UBjdbWfZErs09wnimTgHrvTlcZ3GgK7KbhyWjsDv9yOVSrHaW61WhMPhOABJjQc4MqeaT+PRGhc+m/kI7rUpZKVUITiVqRTt5sN4tuJ56EUDtKVaVFdXo6qqipkwkUiEBgcHRwCsqzahEoqDa2kLPvfEh0iKSSyHPbTNLiCby8JhbMJ+TR0imxEEg0E4nA44nU4IggCPx4NkMhnr7e19F8DX9E0gqj2Ucmc6hYi2REvr24l6Y6NcV/aGsVhMBkIkEoHZbC4ET/T09LwD4DKBx/lVoCIItJBA4Rjb3cjdjASBsTQajQycyKUGBgbeA/AlgcfU/Rnxb88RoeSuyelMDZ1OB6/Xi0wmI9JX1jky4SUCj6o/ExYfCiGmhsFgkMmIfX19MvgFAo8UdShVrwi/dZeVlcFmswkk+3kCv0jgm8WeisWRkZHrDofjzh6VyI+Pj/9Ohhx1u91BqIgH8XkeZG5XGf8BTpVwgPFjSpUAAAAASUVORK5CYII="

/***/ }),
/* 1944 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1945 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAkNQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxn73posDupcn+p8Tup8r/qMTvqMj4rc7/rpRfsMHdsND/sbGxsb7Qt55kt7e3t9P9uLi5uM3quaBluqFmu6FmvKNnvM7pvaNovdDpvqRovr6+v8LHwcHBwcTIwdDmwqhrwsLDw8PDx8vRx9Ljx9XoydTjysrKy8vLy932zMzMzN31zc3Nzs7O0L+K0MCK0NDQ0Nbd0dHR0dbe0dff0sCL0sKM0sOM0tLS0tLT0tff09PT09ff1NTU1cKL1dXV1tbW1uHw19fX2MaO2NjY2dnZ2dve2tra29vb3Nzc3N3d3d3d3t7e39/f4eHh4eHi4eLi4uLi4+Pj4+Tk5OTk5eXl5ubm5+fn5+jp6Ojo6Onq6erq6err6oy06urq6uvr65e565i769Pd6+vr6+zs7Hqq7Iqy7JC27JG37JK37JK47JO47O3t7YKu7Za67abD7dri7dzj7e3t7e7u7py/7qLB7rfP7tfh7u7u7u/v79He79Tf7/Dw8Nnj8N/m8Ons8Ort8PDw8PHx8d/n8fHx8fLy8tfi8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////AwTWzgAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAkZJREFUeNptkEluE0EUhv9X7erBA2aQJYI3lhBIiAUIiQULwD4DB2CFOACXYAEnAHEBthAGxcGdZMEekSxYEAk5wcbOYLd7cLerqCoRdxPldb9FSd/76tVfAkCMcFZJIQEFsLJFOAORchEKDXDvSuXWDYeTZYOBYAFkePtxmmgANjAaMeaKtEFcSCf2OKBZG0DJ4FXHKvHMO+eAzS4xdoQVaIRIA6Zi4u6MkWXtNTijBGZtC1gCbv+mUxPTC3vlGtGvFjdbUw7M4yOXvnKgVic7qmxD1yNWMFDrtvWJK1MDmFaBfhN9q2CwnW99UXKBP+qchKZTVgAQjyfz1hNir54y5rcB1T0qAl4qxO83wP4W0chXph4OgRwIo+stXnpA7EUH1GurPmUQlPZLlU1iV/W06qGPwyJQdeIm521GvpkmaANQXFIZaptkpvUO4w0cUBFwkyZ31aQxdAD/IXySORBrw3kfNNTTZg8cFKMOwZvc+2dQrXaQvkQOXHQDZegRRj2mM8CgKw8X/yWpDToDk4MQX+4JP7SlXAInBnN/V2b762J//DxbGmbaUG4TNtrA+v0kCDzh7MRRujRQagxM3S8G3XR3t15vvA1icQJUdJLljnnBYu3uzveXk7X3QTgvLGkM0IZssDU5Crof4jA+lWTZ5CCyz9d+rKytJschcmBaTweVwGSwyPrp7uV3s2mIE0BKkP0MBNJ/lt75uVidhBGWADJUPYL+FE2W83p+HCXIgUU0HG9/RF7zKE5RALIwIRRLpiI//AXehQvJFH8a0gAAAABJRU5ErkJggg=="

/***/ }),
/* 1946 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1947 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1948 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAWKSURBVHjatZdLbBtVFIa/edjj8SOxkzYPt2nSJihNS0JEqwAtDyGoQKQ8hEpoQUJdAGKBKlZddg0IsUWoYgELJIRgBUIsoKqEikoIbaChYOMkbdK4eTaOEz9mxjP4WsS1cRRbKfzSr9FYd+757jnnXs9IjuOwLikvQOb/le2UBBUApcFDQEMJhMR/JwewgSXg1jqEym25gO7lROKCaRiCCGndUHpfTrZ+L66l1FIlu6IoeHX9EDACGEWAUgjTMLn3VIT7xj6jKxklY11BNRIsBNsYVwdonTZxZwx8dUGMzhamtR/oly7j9zexMuEQ9vkJW/fzXmg/s033UKqrZwv3LooqB5CEBXl9YpywkcSyfsP2uFhpa6fRGoeRbuRcDqGgY7NzweZgoJPrB+ZpXZmi+YEwrbMm4cZG/Ak/84pMqUSWinGENmo4WZYYuHkRU7uK5XWjbUsSzE2y5O/GdimsS3NrqI5MLLxMe3gas3c3vftBebyPTGeA/pXLYq4yS3JFuEoASdi9iLthhVRLC1m1nmRjPQF9HEU1bgNoGlnFzZfGH3wZf4q9exIovX30H+5i9LfveKZT55A7jqzIRUtQHUCUwPGuYtdnWPJ4yYUsNCXJaK6HNTWAkMvlQnO5WcvbJ/uYWBzj42uP0t/TyOyaQk/fNL7mBAGXJlZddGmjblICmaxeT0zdwdW0ilte45yxj2hyjpxLKqZfcWR2rJqcjr5EQ3A7RtjPpeU+vrpwnqXmvWQbA8zIoZIM1AggAde2P8GiU0frYiej14+ykJ4nZLfgXUkh5NEKAKh5b0s5vDr7Ch0dHXz6bpzJ0D34mnaQ2t5HxPYgK1LRGwGobKAlXx+uXJT2m1O4sibJnj3c/bOO5Fj/ZMAtghcgXJqbQ0t+Qm852FIHF49N0drWypnPdyLLFbugth6QFBkr+CyZhm1oq6v0DovgcKtBZ6rFYabZIqPYBQCtzsPc3BwHIzre3XUMtHfz/rkwsaRfzFNmoDqAoBTksuKBfV3Yfh2hjK7hNiNccbx8FGzgA/cIaxpks2kaF3S0Nj/e5zXCUZNL14JijgrX1gPS7Zpd33OYxMNJXFKOXmmYkGTzdGKENy/HUDIxvm39Hs+Sgtzsw3rVooNZPhzxi2c3cu1NWCRWVW7sPcVaVwNtjdtZu2uO7mCYe9U4aUscxwqpNp3U2Uy+cUd5f9jL72aLeHZDAzU1YVm9LGU3Y8+dZn7+DGOXE4Qei2CnbFriHQT37GfsdQczssoXfx3D0vPQVFFVgEIJ/kWreFjc8Q7m1bf55KcJXJqXXQND/NT0IMYvDlbOAXVrLxLqxiWoXIdjZQjvf4S5K2l29R3B3f4QblUiY+aK46tI9MAWMwCov37AAXWYrkMhvl6eJydJJLNOYWytchyn1gxUTtpqjODYK4Q8AfRAHcu2VFx5rbJtu6YMVBwajm1xY0VlcfUW0SUv1pHDJWNql2VZAI7w5hlQJMqkuLCf/IjU+HeonUeQVH1LDWcYhgPkqmzDjUsgawHUnufYikSlnuo2OX/+/I/AFGBtDqDI3ImsTBKvNU97g8LAbp2DuxSmpyYjRwefeQ2I55vR3vwgEsh3IN28yTdnDpNKpZiZmSESjU4fHRw8DsTywc2qJfj6jTqxZ8sMlF6Fi1srl8uJ+mKaZuE6NmaSTqeJx+NMTEwsnDh+/ATwR35stqa/49oPkwKA2F5FCxif318IPj4+vnDy5MmXk8nkpfy4NBtIrRqs+uFSZpGBQB4gmk/70NDQi/ngo/nf12o5ip2Cq6hKNkTqRdojg4ODLwDRipVXKUFOKX+BKHdlwOILjKIowk4sFruQD/408GeV4BUfpwqw8x+rbE0mMAnM5ee1AGoFKIUQlu7gC9gq7PMa9Te67zu9kU1bKQAAAABJRU5ErkJggg=="

/***/ }),
/* 1949 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARuSURBVHjatVfLbhxFFD39nIcNxrZiRwmKWBAkNkgsrZgVS8sswRg2XvEDfANfwEew5BOyQIQdSUAB2zNjEjMzHsfDZN7T3fXgdpXKLlOBdAu49tGt7i71OXVu3Wo7lFLChEdByc+H+H9CEoS0SEOLPCdehUZgbv/H5JwwIK4BaRBGgImIcPfFcPggS9NcETwDwL6+rsxc63z1zHO1B0GAeq22BeBHQmIE2BFnaYY0Y5rMgu9fEamRm/+W3LueY1gR2vMUNBklFxTO2MqOEDvMPMPjCtDhkrulKObCy5zwfUdU6KgEtOV6siNAJEPMR12Mn5+g3znG+rs7uLF5G1GlTnN8d284pXiFAGhyx/JnT77DRnSOyWiA6WyG6XRKmOHbr7/Ch/fex+rq66hW61hZ28CLtIp33vvgZSV4pQBFLoS4ZvcfZy3U06dIGEOapkiTVOVFkmA4mqA/GGJ5uYYgSDAdnuO1ahXn7QY237zrdEqxElgrz7IF4lkDXuzRylMkRPys8xxPjk/xa7MNRCsYDMe4tbmu2iwkBEGGt+p9zLI7iCu1cg4YxQYP73+DOj/Hz780cNw6RetpF4PxnIRwLAhxtYbeWQf3197A2uoqbpKQO7c3cda7wMX4AT76/MtyAoztBstRghsbt7C+sYntbQ7OBRjnVAJGJUjBGAekRP4TSAEQpGQQkza80QJOvEKAewAFEcIwULAjYwws41QipsZcISVkEFxQ5vDDir1qNS4tIAgj2CGlBFcEQmchIBQ4PRMaQucwrqG8gL9ACN0V0J8xCEWqBTCuSyIoE6mBEUHi47IlcF2QXoiUOgFSr14YBy7JGZFxBaEztAiJIFIlKCnAdIAR4UfI0smlA/LKBU3KmYZg+lpDzQvjqm29ulfqHABBwiMHmHmBhq63JuI5oRZh3DDzwiA25OXb0AiJKhWweabaTP2qVpNEaupuBHANIS4R12rOqgs5IM3qld08b68rCwn2bichphSGWM0z3ZJlmTreyzkgpRLCuOpzbS0RahOkvdMp5+TadkOuhUjME4bFYoEwDM1fRGodCv/ogKWWMYlaFIMLfeIBxgXjhCGGuVanY8oEFglHkiT5cyNAUmKF2tBkufI2zic3cyvVF5AxpsaUCdp2slitjqDGfsWHV/WwtLSE2WxG90Ml7PHjR98DaBMyuALciOMYW1tbjigzNtnUnoQp9Pt99Ho99Xw0GiGi9zQbjaPd3d0vAHRJjHAFuC4UuGcfzzyHcqnd7tCH655afafTweHh4e9EvgegSXPTIiUoIsaQOwLyBc7nc3S7XbRarYv9/f1PARzRvEWxk1BKFHXGbEK7DFR7Rd5sNi8ODg4+G4/Hj2jetMA5UMhyR4AFJaBeryvb9/b2PiHynwBMihxEUsGNMm4onJycHO3s7HwM4JiuZ2VOQhb4vnqJs9tdQjPPbkPZaDR+IPIDAL/R86TM55gT2tR6246w4pESTgk9Is9QIEJrNYxW0wZw9i/+K5aETPV5wfgTgvhTReCa99kAAAAASUVORK5CYII="

/***/ }),
/* 1950 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1951 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1952 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAeZQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxwcHBwsLDxsbGx8fHzMzM0NHS0dHR09TU09TV1ABq1NXV1dXV1dbW1tbW1tfX1tfY19fX19jY2NjY2NnZ2dnZ2dra2tra2tvb29vb29zc3Nzc3N3d3t7e3t/f39/f3+Dg4ODg4OHh4QBx4eHh4eHi4eLi4gBx4uLi4uLj4uPj4wV04wh14wx44w544xh9422o44654+Pj4+Tk5BR85Bl+5Fed5H+y5OTk5OXl5Rh+5Rp/5SeG5XSt5YCz5eXl5ebm5ebn5lae5rPN5ubm5+fn5+jo6NPe6Ojo6Onp6USW6enp6erq6kqa6urq6uvr6+vr6+vs6+zs6+zt7HWw7ODm7Ozs7O3t7e3t7e7u7u7u7u/v74q97+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf399Pl9/f39/j4+Nbn+N7r+Pj4+ePu+fn5+vr6+/T4+/v7/Pz8/f39/v7+////t2EozQAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAkdJREFUGBkFwUtrnGUYANDzPO87M51cakI1bdMQC4bWBq0iigpFVxVxoQt/iTv3/gP/R1EqdFOFgtSF4lKsQUisxmiG2Fznlpn5PCcQGQAAoJk1BDlXQgAA0DTT/kyl1f3sMFsZUVIISQS0vzgfqWgfHT2eq2ebT+p0tddtrS6tBEK0UYnIVme42B1kUTNLp1UEZAQV2uX9Ulr5epSIiAghUKBClO87eeGfF7r9ta3r0bodQpBQIdolM8v5ZHm/s3otQgRUqNCafBBZMh9PW3dTikRIqBDxcC7kK/jubkmVREAFEZGy4M1WlQQkVIj8KDMzn3C5pACAClm+HV88XHobfx/0FpdutkFAhcwPMzMDw10HB/t3OoGAChEP6+YPcxvYem79yfnJo+cXhhfXOpAgs1jagJW3ui0WFl7+dTwCCRFRy/Koi3ZvusIxt5aBChE3NupGxjab817cMd30BqBC5EuH//18aQ1tgQkNoELENyvtd2/6kxICs2ZGQoWIT571/rr6B34plyZ42np0df1K01Ahp1uv5uHZa9vcDn5kfvLe1JcTVJC3/Ha8fQ3BjMm//dOjyXBwTgUeXO+OJ/cKP91YnJrs7US50DsdzqjAxxkyhDAd3eltf37w9e5pf4wKyoO1WP+9W8qg6/LOlf3m2f29YX8IFaIZnHZO3okQZuP1s716f3d01AcV+LRIoJnMZsPu07OTPlBpGgAExrOD4/4AUDFpN5FCoIl2+6vx0WAEENS5+QIAxoPhOYBALQEAmvMZAP8DRiS7bwpaTREAAAAASUVORK5CYII="

/***/ }),
/* 1953 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1954 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1955 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1956 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAT2SURBVHjatZfbTxxVHMe/M7Mg7HJZhS3ZLuwFaGNrCUptTC3GGBMTg/hmRTBNiA816RPxxWhMfDH+A4364iUaY4yJD8bXJkZTUaNC0dqCu8B2L7DAWna3XdiZ2RnPb3aHMzh7mUT9Jd+cc2aX+XzP95wzywi6rsMsgRUAkbr4f4pgmm6BkgETTuB7q5LMz/9jeJnpNolxNbBygVcL07HdXG5ekWVyBMEUYB0fdmaOqbW6FuzeJUmCu739LIAFphI3wKtVkRXIilqFcYkiBxk9e1sXLhxuW2Ep8R/fIxq2tjIEtOqwIVGs2YrWvkUCF+dQ1UjAgPn9flsClpk7S8GehGGOFzdgi2tzcxOBQICGdQ0U/1Lw55dZKFkVpX0dUHV4wm0IPNaFvuNuiC7Raob3mxggAMHNuGwp5NIl/Ph2AmpJQPCpHnhH3GhpEaBDwO2bd3H9vW18myzCP9KBR18dQKtbsh7z5gZEFlMikUA/M6F9tgBx+vQBvCzr+O71OE6/EoEv7DYOla4JTABY2xvwYOiJPuP6+tUsvnpxGSdm+nDqOZ9zAwJTfzUBF4NL1/agPeQxxgvvpBCa8MEXckMvCwYIumCYgMa6NGbSWH/gTA/8o/fh58tR454j54/UNCCiRqVSKbILiIIBdzETtAPEMtAZaAcMeAVsGtFUMlA1Q9d0EZIoYeziMdz4dBu5TdmZAQL3Dwzwda+akBaL6PC1Ir8hVyBVuFYmcHVMMo0ZhgCXS8TIS0PQ5t4HVVMDBE0mk9QeMqGPdWDAdw+SX29BUwSasWmCg1VwQ3r13DNFxt3o+fwSjZ0ZCAaD1NpMdE/24OSwB79+lODxm7PVrPHzNL0hwOPj92lugClx6xa1NpGJ+98Mw7W0i9RiAZq59jxyDmLqDupw98JazjZhKBSyJWBN4swHJxH44hN6GBGcTPDIqQvYZm5+5mgTxlkCsMG53F4XSq9dwM03fodS1FB9Rlrh1pk7NcCXIFxJoKYJ84ZHRzsRmuvHylvXWQpwMnPnxzAej5vrbv1jW3vi2SNoe7IL8Xej0HWCCwbcWrquW+UwgUjENvt6dW4ujNhOHl2ZHDy9HKppGsrlslV0zVkC62trEOzrV7Ol7vGnj+KPVA74hU5GBayqKhRFMSTLMomuGf5IDROIRCJ1Zm43kU8I8D3gQ2q+gPJoO+58eNUO5yKw2vDHiGp9fR2Dg4M1gdYqJAUUt4H9vAx3twQNOlpmHrbOmGJnqqz/0tK17wGkmJRGBiiBOlCeQj4BA15WNSx9HMPYJf/BzLPZLDKZTOXIut1oaW1FLBpdmZycvAhgg/4jbmhgje2BoaGhuvHvxnXEf7qL1JU0sukiRi/0IXS28yDyVCqN8fFzKBaLSKfTWF5eTjL4FIAYg8vNlsCMv+b53Tl/GVfwOHrDbTj1sh/BBztp0xH4oKUJ7u3tYWNjA6urqzvT09MvAFhh8H3wsr2YtAF4ZG9//5vVWIwSsB7DuieC1piiJzAlkM/njSXwer2IRqM7s7OzM8zIPOMUOLZ5Ao32QMMHDZmgdafYp6amni8UCr8BuOPkx0ivimJrxuUG7WZoD61MTEw8w+CLNHP+Ltg8AVUSRQwPD9virgOsvjWJ9NpF0lnsPzD4LJ1m9nnJRmywB8hMgKnfZsx5yUwJpgy7rwIqhwasJiTq/os3YIWf8+b1N7mYiLEYfbtDAAAAAElFTkSuQmCC"

/***/ }),
/* 1957 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1958 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAUCSURBVHjatVdNbxxFEH3dPTPeD6PEAYxAQZFAcMgBpCDEgSNCHCLlgIREEBxy4k/w3zghJA5IiSKBk3iJIseO1s5iez/no7t51TOT8domE6+UHj1V92x3v1dVXb27ynuPuimlNA3xWpsjp6sHIqAmNzQbxJXXKMIRI+Jf8lqwRWhaTHx8eHT0W55logiqwsG4CHhzo4ciyxFph/WOgdFepqEoAM9OZjWs8+IOdvbn+PyjS0vsxhj0ut0vAfxJnBGgiCQnQZYXgbjGYJjh7yHwoV7HcDTBdJFis6cRJTGStRijcYq3LvVA6iC8gwyD3SPc+MDWG5+0SdNdFgBUG2gtxA0gVnMyYeIIkQOstzDewzlbrXmxHBoEX2gOlrduxv8roCFvwM0Ij5joxBrO6xB3I2SO7w0AWyBmRzhEmChWoqppMm4XoIiatFatQv4UiTzWEtBrSbynhwIXBChYCtKcJ6LQnKHlvdsFoCKvwxUsIRsn2qNL62jTsCGZvMKa0SR1iESMCPcibOUUaDhupnDSC48oMogkAkRGogweQRv4juOwFhShFfnls8YJdl5dgKpRkaOCbJyQKIGF9rY6bB409FqhcB5GSRQkKL525uIRqBXXUBWiiERGCL1EGCWFkCqQHwhec0x4LUsN0Z4CfZb8nCpAiECoAhVKj9YBqkpDVO1iJFWqxEtaSwrOEQCC5R8EQBG+zj/CQTNlCDh2oe9D+FsicGEBVQTgmhQIlXBHRlURQKgEH5aoFQWcj7K+X6z3zfXKJzFSevV7PhKFi6SgLQqQ3GpTUvuKvs5zFYEwq4KMdLW2rem2CqhvRTq5Yjs/He0paERUNX1CH17UYbCF9TTN2tDXeqUz0Hi+fHdLvTcCRILyFZlHbl0VNBWsr65iIPQvWIaEP5WC8NS1rsF+EyVXRiAQa0JVj/Baa0XAChGQOj+Vv0jTAsGa6gyW+3m44HEQJ5bj0vM8z8UK6l9ErxiBUwcnFy+dxnEBZCH8Gk4VfCcRULBShbQLjrVVyJ2WNUGAc+6kAOkUhG8rw6X+wpIkV3g+B2a0GRCIU1cKMtAEMM41UnB+7jnPYjqdigCijMK9e3d/B7BD5GcEvExISs/mKcfBKxJbA+ss0gJYSKQcEEsKOEfz3Wh0iNHwAI/7c/T7fcRJgkcPHz64devWzwD2KMYuCWiLQkqPptahyABPb4rCQ5PUkWzOMVT5Y8V6wuY4ePYMv9z+DLPZDLu7u9ja2toh+W0AAyJD+02IcLBMdcqzzCEVeAmnCqXXUz5EYZqXt2M/odBU5mWIKWI+n2Nvbw+DweDgBzYAW8Tcs7XehM7JRgs83h/j/q7Fk32HbDbGJ5s5jsdzDA811kyBzU6ByYSi0gneX19gOplgZ3iMdy+vBfLt7e3nd+7c+XE8Ht8FMBPy1ir4Zz/D8+MU164AXaMoZIp5nuByT2M4ATbWDT7qO37ewSRT0G6CT9+L0Ek0rPW4/naO61d7uL812P/p++++rcgnZ8nP/jXr0nwxXyx+zQqH7WdzmFBqGn88jgFIBQA3rha43PWhIvaOkrKqvMN6V2HNp7gUz3A4fPL05jdf3QTwqPG8/cso1KjRGp3Y0Is+rm124WBwbSPHOAXeeaO8dEZTwxQoWMcFFrjSY4pSi9QlONp/+hfJvwbw4DR5WwQimqsVIqzWMuIJMSTyZfJ2AYrGrE7eRLGp8/b2H7QVgG59FrMpAAAAAElFTkSuQmCC"

/***/ }),
/* 1959 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1960 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1961 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1962 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1963 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPASURBVHjatVdLaBNRFD0z01SbWKMixk/FVqtVXKgVRDBbESxFEZFWBCku1IXgwpWCuHUpLt24VnCj4ELc+MUPfuqP9DP+W+3XNjUJM8mM9yaOr8+XcZ4WLxzuyyN559xz5703MXzfRxCGYZiUCP81POL0gg8sICC3KM0nLPiPIph4jDBOvCVQ1EBEjLDm28TEXddxWBGMAID0mcMQtgUFCCfFvBSWZSFeV7cNwBOCIsAg1LqOC8ct8oISTFMQlUdqDiU35FwrhkKAiAoZJRUU8ljOqhARikthAlRytRV6LlRzwjSjBRgMdqHyZR0BalbFKOOIFpiK5QHgA1ceD+NOZgL2UAGThRLWLo7j6PYGtDbWB2tot0DxJCA3qpHT7KnLNj6POTi5qwnXTmzAhUPr8GYgh87zr3Dx1peyzab8O55j6AkwRBuUhR6/zeLGyzEc27Eci+fNKs+tW5bAuYMt8Hzg7NX36PuSn7ZzzArEWhEChFcBZAH2JMamirj8YEgSt7lpLhKzLfgeuDUBueKglgBBqmJRslJ194fvwlrKJQ8MHv/KuqHugj8I2LMlhWQ8hq3NSamiFx+zKBZ9mOzGyvowATw/MwG1FrBz40LF0kf9k2Xy9Q0JtFI7Qgg1BYQjtJ9P302VD7Az+1ahxhJd1W6BvgvqsTz+3cXDvkkcoXNgU6NSvb4AdQdEk3Ncuj+EVur78Z0rInvPV79+C2QRYZcQVT+BM3tXwTIF+UweQkEqn91VyfnwaVxUh5WpeAiBUrWeA36V6quF/TWP9Nr5glyQSvh7B3yfhUTe/zWWga2rk9LCnudNhyTCsixNB34jRkgrmsj+6d8plUpMypkhRAgBPCgyRdQ2DOm9iNGsi9OXbGxrSaIzvQTwK2TFYhGO48B1XR7/FMEueOju7r4P4BPB/ZMAraf5+rNR3Ho9jttvvqFlaRwbVySYsEw8MjKC4eFhcCQSCcRiMfT39/e0t7cfBjDIb8RCgBa5OreleS5SdCWn6IJqTs3+ZXuhUMDg4CDS6TRyuRwGBgaQyWQ+EXknAJvg6JyEUWKo6gRunm7l/jIx286ZXaDsIZ/Pl4XYtj2ynwJAhpD3KSKv479oCwuQnnpuQX39HCZn20e7uroOZLPZ5wByEvkMngFFwHSwE9x3tr2jo6PzJ/mUIFcERIW+QG4BBdve09bWtg9AX7XKw1pQ3qNW8B4X/UrFFQevX7zH+Wn3e3t77xH5bgA9EeTKn1N2o4ExA2ccwgfCEMEV5HoCuDzr38mFi2KfR8cP5OmzqpCTqQ0AAAAASUVORK5CYII="

/***/ }),
/* 1964 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAppQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxAHwAAH4AAH8AAIAAAIEAAIIAAIMAAIQAAIUAAIYAAIcAAIgAAIkAAIoAAIsAAIwAAYwAAY0AAoACAoECAo0BA44BBI0CBo8DBpADCJEECJEFCZEFCZEGCpIFCpIGDJILDZQHDpQHD5UJEJYIEpUOEpcJEpcKFZgMFZkLF5QXF5oMGJgTGJoRGZoRGpsOGpwOHJsTHJwOHJ0PHZkaHZ0PHZ0QIZwaIZ8SIZ8TIaARI5wiI58aI6AWJKITJaITJaIUJ6MUKJ0oKKMbKKMcKKQVKaAkKaUVKqUWK6EpK6YWLKInLKcXL6IrL6gYL6gZMKMtMqckMqghMqoaM6UsM6obM6sbNKsbNacqNaojNaokOa4eOq8fPao0PbAgPbEgPrEgP7IhQLErQLMiQbErRbUkRbYlSrgnS7koTbopTrk0T7k0T7wqVsAuV8AuWsIwW8E8YcY0Ycc0Z8o3aMlFaclFddBMftVRxMTExsbGx8fHyMjIy8vLzMzMzc3Nz8/P0NDQ0dHR0tLS07L007P107T209PT1NTU1dXV1tbW1tfX19fX2Ln62dnZ2rv52tra29vb3Nzc3d3d37//39/f4eHi5OTk5ubm6urq6+vr7Ozs7e3t7e7u7u7u7u/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////3KkYIgAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAktJREFUeNplk9FOE0EUhv//7HZLC6JgQaKJER/ANzAx8cJ7730DjYYX8WVM1GtjQCUgGo2JLRREbSmCQLu7s7M74+zadqucOTmZ3fPP989sZgmAktfzYY0FCEjdI4jzfZuFBj5QqV2ToDa/uFibCnyhtVqr8ODgeKD3tIIH+Bdq9AJhIiy4iYpOejo1YRaHWU4gHc0YbdxLmxk313ouSNUrSwL+XzdrMq0TrSh0CJ14lbOuBTAUGBqTpbHv01TErQ/Dg9T0jR0LnIHyPPFcPxAHGET1uqd6piRYkVQRRgc5IVGh1HvHWSmYO8qoJEtsmuZ7UEp32pHOLv4eCZ4mQhHJC1wSeQK8OxJQKEMB+d9XlaLQpPJrXzot+faFu+/R/sTdj2QpkHxSJWpEHbhETBOzJMYWrAqXRK6TN8Bl8CawPGkBOfounS3Z20T7K3Y2sL3OnU2WAhJVwQIxT1SIOTcpjIoeMNV4lnriCYl8DDOPO4fxkCDdD8j5b7i9wdZrNtfQ+mztxCaxIDl20ZGBJaCRoZpxbPE8E/GI0YAxJjUGwb1DNbTAjy2017Hzlq1VNFez9ruw2xzcT8tj4jLRcOTCZUHZxkDX4zjSQ4sXZujg0vHj8PQnq7Unp/1kRMD+Ktpr3N5Cc832zuLO7VuzK/0wmbC4ClwBZpyRBQz6ncdxGI9P8dIKOXJI+5HqNh6po0F5aV2w/N+M1TMPB2chRgJrUQYLzcppGAFjQurZgl406QUPkpNITazw69MeJiOJYv0P0veIybDalA9/AMUIKWjlmhF0AAAAAElFTkSuQmCC"

/***/ }),
/* 1965 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1966 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAUASURBVHjatVdLT2RVEP76vroRecgAMwPDm2Y0xlmZGI3xDxDYGGVEo7IZMysTV8ZZuTExMS4wxsXESVyOiQsT3btRkcQY0EyEoaGb7uEhj6abpunnbasqVLhze6BvfBSpqVPnnnu/r7465wxYtVoNaiEyCgYP8f8Yg7k1D6jlAWfgJ07c1On/GLxKniasNHFwlYCaTR594aM3f+a1hsGkagiZIRpTLtpI5Fx0kjXedRwNfVciIOtP37n78tfPA/iNvKgEvOZYtguEXAH67uZt3Lj7Ab564xOo/bg2j49/+EwATQEEg/oAdY6iKaRPiIUEA2o+AiF223HxzMVL+GNvEze/eR+5SgbvfntLPvLUpau48dxbsOdmuVquyg8o0ZsLOP8QU5NcceoIqNkR4M/MBhwHuHP9U7z3/S3EM3Fhb2fkTXpWexhQorRB5swTQEOiEKA1kkHtTAIOKRBt7cFKLgVZYNdghwHTcGFZLthYJQE0AKmSweoA+V+eUwV4LgABK+xirZhkULGnL4/BiUiPcfXCGISAzRWbAmh4APXHEECN7JCxaRiNCdgk75BzBYlqAvNbv+DtazPw2q/b87BNC+Z5gGBVtGKOokQwBWxSIFVbpypN3F6YxZeLs1AJVeZwiLqsEnsAZcaQNRDpdU5jEAKfv3QHiUQCV/r6+AP1DkDH8I01+sfeuQ/xxfkEuGEKvruzw7kwL1RtVN1ToGanQmRq0LxarcI0Tajxbesl0dPTw6GhAvJSKpVCf38/0uk02tvbEbIs3MteJHkdqEW272Hs8ml+eHiIlpaWulzHvb29SqghAQaXmC9U4WYL0tdiLo2WJhtq+UIFR0dlqB0fH/O6R+alUom/F5AAeXJ9HQMDA9gynkTEasdxCYh2/4VrQ4/ph0ilx9FHrVLSO9Surq4uBdFcxxwatkCNweVD+8eAU8pS74HYwR4O9raggEYxjaamJqgdHBzIvD/XFnR3dwckQC8lSIHBwUE823Zf9oBlWXCc1ocqnJub0wpVFQXROX2uOW/MYC0YPFGgWCwye9ndtm0ruMTOzk7s7u6epYBsYLVsNsvk+HlABRIJDA0NIRwO805mBXjsVYDjWQqoca5VawyoAIGjXgEF04o191cstr+/D9d1GVi+0dHREVyB+OoqhoeH/QpohVqxN9eKGVS8Uqnw/mECPOajqBdVjf08BVj+s/YA+1k914r5VpS8XC7LXC6X40L4OwxcaXgM4/F4nQKRSMS/B1QB7THLzNUyMF9E/L4QODrKUyE5LC4u/ATgAXn5PAKiAJtXgUKh4JVfe67g3HMGZgLyLJlMorW1lZ3vCwZfnpiYeAfAJq13zyWwtraGkZERvwL+nmvOkgtwW1ubEE2lHmBychL5fB4bGxtYWlpKEfh1ADECLzVqAcv/KAUU2K+A9pw3GkvPwBI3Nzexurq6Oz09/RqAZQIvBDoFq7EYK8BEtO/+u96763WXi9yGYdAldUHAY7HY7szMzOtUxAKBH0EtgAL+s6673n/umYAokMlkmIisa25uxvLy8sbU1NQrBP47gFyQ/4z0fLJsokA0GvXeel4CerUyKDtXzyoIoZWVleXx8fFXAdynyvNQC6BAxSQJR0dHvWD+6P+th2XnfcJeI/A5Ap8BEKfnRZAFJVDlM+o4zosy/8+sRJ4k3ybwMgKY5ammQtXwJbHFxf6Lv4DLcs4D2t9raWXuWYcVVgAAAABJRU5ErkJggg=="

/***/ }),
/* 1967 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1968 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAUCSURBVFiFtZfPbxNHFMc/s2t7d23jKEQgRMOBQ29E4gJVxaFIHDhECVIVNYSKA/1P4E7vXBAXrgSkWuKC1AsFgaCKcyhOnSgo5EdRgNjreLM73p0e7N2s1xvbrdonPe2sPZrv933fdzSzQilFGEIIAWiA4P8JBQQqBirCsRBCA8a7qYf//8fgPvAF+KKUCgAysQlZ4Ou9ev2F9DwQAhFmh2H03sMsfBeHXEXs93jouk7esr4FfgfcJAGAnPQknmwfgndT0w6BIkKJJ4DnuhimiVIK9+AAAMuy4qRzccA4AQEIumBJAiJWqUhUHVdFttuYQtC0bYIgwLKs5DwRF1BLynQUuBACLWXc89Q0PM/DbjS4c+cOCjAtC6FpUSYj2YIOPSHQupN7SISSD2iD57r8fPcunz9/ZmJiosfFaY7up9QFT1VB0w5VCMeJ59OnT1leXmZsbKxHsXjrBiqgaRpBEPQ5/ygV4v3d2tril3KZY8eOUSwWDwFTdsrgFsSk7yMRLpQYoxT37t1D1zROnjyJaZpRGw/F7SfQ34KQcRr4AEM+evQIKSWXLl2iVCpF7h/WglQPHAWa5gkhBLVajdevX3Pz5k0Mw6BUKmGaZmptQwmMDN6tXErJ48ePuXjxIlNTU5imSalUwjCMkRTo98Ag0JT/FxcXyefzzM3NIYQgn8+jlML3/T7Af2bCtEyAVyoVdnZ2mJubiwxXKBTQNI1mszlKB/oJDFWhm81mk1evXnHhwgXOnDkTVWcYBu12G6VUasXDCcR2gOd5uK6L4zi0Wi0cx4nGz58/5+PHj+zt7fH27VtyuRzZbJZGo8HExASe5/UUBBC/exxJIC63YZpYlsX4+HiPiV6+fInrukxOThIEAfV6HSklnudRr9cZGxsjk8mwvr6OZVnk83ksyyKbzY6mQGQ4YH9/n729PSYnJxFC8OnTJ549e8bCwgJTU1M9FQohePDgAZubmxiGwdmzZ3uqTlOgfxvG2iCEoFgscurUKd68eYNSiocPH3Lu3LlUcKBzGto2ruvi+35PBkEwogJKRSeXEIJcLofrupTLZXzfZ3Z2NhUcwHEcbNsmk8kgpUQpFVWu6zp0rmaRFKkeUPRePAAqlQpLS0vcvn0bXddTwX3f5/3799jdy4iUkiAI4gQU0B6sAJ1e7e7ucuLECYQQlMtlnjx5wrVr1zh9+nRMLIHv++i6ThAE7OzssLGxQbvd5uDggGaziVKKIOioUKks/QZsAjJaI3YrNoFvHMf5VSlFo9GgVqtx//59qtUqAMePH+fq1atcuXIFKWXUW9u2WVxc5N27d7RaLXzfp1AocP78eebn5ykUCqyurq7MzMx8D/yplPKGEggvJbZt43kehUKBbDaLpmnRdgrl932fVquFlBLXdalWV7h8+TtarRZbW1tUq9UPMzMzs8AfSqmDoS0IFw6CgGw2i2ma0eGSnBOaLGxDSN5xHLa3t1lbW9u9cePGArCSBE8n0L1chGEYRujeHuAwOj0OopRSUiwW2N7eZnV1dffWrVs/2ra9pJTaTys2VYEw4sBHRahAmGG7qtXqh+vXr8/btr0MHHkyxQn07M9RIk0NgLW1tZXp6ekf6BiuNWiNpAJtXdOikyy519MAhejconVdR9d1VavVXkxPT/8ErCul3KFFxHZBBvgKmEwhNmp4wAbwl1JKDpvcQyBGQufffxUrQIZfvqPE32QyWEPpKWZQAAAAAElFTkSuQmCC"

/***/ }),
/* 1969 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1970 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1971 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 1972 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1973 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAQLSURBVHjatVdNa+tGFD3SSLKV58ZtXl5Sp4tQmm1WIXTX7gr9By39D4UkkNBSSlaF/IEQ6MemUNqfkE2gZBFoCIEuG0q2D/e95/jJX4plqecOHuphKpAN78L1HQ2WzrlnznhkrygKmNjZ2VEsz5g1vJlImf/c3NxMzEQAO54dHh7+uru7u4OS8DyvtNrfcePq6urm5OTkMwDPywjU1tbWWqyN/wP2fd+qbpaTktjY2GhZ6toEyjs2oG51wV0irnpVCRigcnAzdgmUgVYm4AAzqyxBqSdo9uoKEMDKJElwdnaGer2O5dX3MKk95cN8AAT0FQqNwhSg3MMoy/HlF5/grTiYewmcjiUvLi7ArYP19XUsp3UErQ9AKOSF7kwTKAwLr0AvGeLP+w4+2n4XTiyiwOPjI66vr5HnOTY/jPH+p5+T6IxJ9U2spssmcPfCx8e2H+RZ8ymglNK1Vqtp+cfjMYIohCIYpsC2+VihPxBHgQO4sAJRFGkCElEQypwDyGqpUg99qfMScMElwzDUBLIsQ8CxUr4DaNQwZGpR4BBYeBfIEsRxjMFggCBQUJyzAW01At/jEvjaoLPB67k8YMYEDTQBCcUxCZTIz84DIJuAqukdIrm4BwwJekAI6F0QqP8IaOgZApEiqJBkjQNfvu90XkkBkyRg7YjJZEICyiXAj8ArEBB4nPM+uVaFeMYCJ6GqCrhLwCoPZFVTE8LaivWwIDjvE0I+SGhhAu4JaBTgDxLHnihguX8pIliugKn8iuDKIlDZhC64hFFAp4oJlkN3Ci03Qr/AYAz40N3r+/JsTMK5ZUTWygqUesGLYkxoc6qtCawseXjRx9SMQJ3zaebjMctIILNkp4cqEbC6NwQYehkKFcnD9fw7BCcXjMdClKr4HFOalJNpmmKgUi6DIVGdgPNi0Wg00G639QOSThvROENc87DMdv9u54CQZDbrHhKqUXDcS3pQg64+P7IpYXqougdmY3t7G6urq5B4u5ZhCV0sc7GT1z4aKLT8CvQCG3wiCk6GyJJXeD7qYzQa6bVvNpt4eHjoAcireMDxwvn5uUgpKUpIVyalM539fh+dTkf/ZCsVQj15ipWVFVkOmXt1fHx8CqBd2YQzYbmZJCwyTCGg35y63S62trYkNaG7uzsMh8Nkf3//awC/8cUmtfyGCkEyDhGThgS7FCAhIJ6ZBR/s7e19BeAXgvfAmJuAu5dRSoAp54aAiyqjo6OjbwD8TPAEcMNfsHvn2nhBDq77+3txf8p/Wd/ShD8R/HWFw2jhmPWGeXFJDw4OBPwHgncrH8fV/eAa1rw5tVqtPmX/juA/Erwz7ytZenp6+vvm5uZfCypRXF5e/sHd8P3t7e1LVIg38ff8pXZ7xfgXEsAjeKC0Ea8AAAAASUVORK5CYII="

/***/ }),
/* 1974 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1975 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAV6SURBVHjatVddbBRlFD0zO7ttdwvsdoVWSyjUsrUJ4UHjDxAjppI0tlUjkQCSQBMSgySo8UnAF0OivtTEnwQkBjRVSUqiweiDPklsUYHCrvx0W1pL2ba0stv/drvz552b+dKRke6kCTc5mdlvb+ac79z73dlVTNOECEmSZACE+xoGcRqwQ3GQ+wBECCX3UYRByBDXKInQhQARfkJsbHy8Tc3lLEWQBAA4P/PHeeViAxAh8u8On8+HYFHRJgAdBJcAiRBQcypyqmaTzUOW54n4zn29J7n032vAqV9xyWQyJnWBwnXvuLqEOMLl0r0EuMndpbinC5IsY2RkBMc//wLXribx8afNiEZLIIK+zy9AAmzLOXlBAdm5ObS3taHj4iWURKPYv38fVixfjoqKNUjEu9He/gdefOF557PzC4BN7rRXQFVVXOrowMTEBOrq6hAJh3HhwmX89OPPCIaWYDQzhcefWA/TzKG+YTMee3T9vO3eSyDDMAxIDjEFgQBydDIOHTyIs2fbiUDC9Wvd2L1nF7ZseRZ+xY+CwgBqamKIVVejtrZWkLlOircS2MknTpwgwja0tHyJgoICHDlyBM3NnyCbneOktrbfiLQGb719AAG/30XiuPcsQGQyYrEYzv7agaY9r6P2uY0oCgbR2FjH68XFxc4S5SX3LsBR86c2bMAHH37Gy53JPnzU/D6OHTtOzXYAiqKQM1+hujrGa0ePHvvftfPnf4cjPJTAISBg1V6dQ/nKMrzx5j7EE1fww5lfULqiAq9sewmlZaV519yueBfA0HLTGBkaRNPuvfDJPsgEa721tRWnW0/DCuuFZhBOfXsK33zdwk2s6RpmZmYWIeAuFBYWIhQMWXOcoEC2riyE+2RegG5AN3S66kyuEHS65/BcArcLXM9AoAiKT2YBK8jiTDpDSTIow949EIlG8M/wMJNqmgZVUzE5MenatacmFJAIV69cR1VVJbZufRmdnUkMD4/gZt8tdqSmpho7X92Gw4feY9KeGzdQHavC5mc24vvvztA0vOS0nsV6L4EtwjANpFIDCAaL0NN7E4VFQX5QeXk5Nm56EplMBiqRz85mMT4+gYnJKVSsWoXUwCAkiSfqoo6hEMI7O/zuOzQJVaTvpFH2UAFUVSeycXrhdGL16gom1zUdMIHY2ipkRkcxPTUFyb1rbw6YjhKspQeePNkCmeofjizDsmVL8WB5GWRJQVfPTfSnbvPLJ1xSgjVqDh3xK/jz4mWspDXqA6snFuEAqRap8XgCfiUAhUatovipD7qgkBhqSH5gzbp1GBzopx2P8veKZJL9tzA6NgZNVaEShAvUNx4dcJwEw+DjBUkXpWFfrXX+rNMu5+ayyGb9tDxLMGBYMHQGvcScAqwbjSnyHUMRj1CnyzLtmCDxDLAaywfZLtMDpaUYo90aRKLbpJFoKZZGomS/iunpaVozWVgikTgHIEVQFxTgFJKgErDlCoEFKODfCxYAXL/6lz0LDHsYaVCpF5YUh1D5cCXS6TT8VL6enp6uxsbG1wAMUb6eTwCTUyJZrAEm+N40iEQ2WIA4phxCgGFwfigUxOX4RR7Fg4ODSCaTKSLfAaCXkPM0CcW19+8ubiRN49FKR26W6p0VYGH00mJ3aKecQ3OD84aGhtDb23tnJwWAJGHWpMg/CR05tFt+HwhB4XCYSYVDvGudm41FTk5O8g9RIrdsTzc1Ne2itTiAGSe51x5Y8D0hQpwIChYSCoXY9u3bt++wyacEuXcBIrwLFEPHsr2rvr5+G4Abzp3nE8Bn1DpmlL/gHxARIo/KJHrA7O7uPtfQ0LAXQB8hK8i9CNAIKWqopxfvDHd4P2GEoApyrwJ0e0jcxuKDXeRz7jH+BRt+shb+/gU5AAAAAElFTkSuQmCC"

/***/ }),
/* 1976 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1977 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1978 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAoJQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZDw8Ps7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxICAgISEhJycnKCgoKioqMjIyNTU1ODg4PDw8QEBAQUFBRERET09PUlJSVVVVVlZWWFhYXV1dYGBgYGFhYWFhZGVlZWVlZ2dna2trbW1tbm5ucnJyc3NzdHR0dXV1d3d3enp6ent7fX19goKCg4ODiIiIiYmJi4uLjIyMjY2Nj4+Pj5CQkZGRkpKSk5OTk5SUlZWVlpaWmJiYm5ubnZ2dnp6eoaGhpKSkpKWlpaWlpqamp6enqKioqaqqq6urrKysra2trq6usrKys7OztbW1tra2t7e3uLi4ubm5uru7u7u7vb29vr6/v7+/wMDAwMDBwcHBxMTExcXFx8fHyMjIycnJy8vLzMzMzc3Nzs7Oz8/P0dHR0tLS09PT1NTU1dXV1tbW19fX2NjY2dnZ2tra29vb29zc3Nzc3d3d3d7e3t7e3t/f39/f3+Dg4ODg4OHh4eHh4eHi4eLi4uLi4uLj4uPj4+Pj5OTk5OXl5eXl5ebm5ebn5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////yYoiDAAAACh0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GVsTF2dnj4+v+/lnQXNsAAAJtSURBVHjabdJNSBRhGAfw//O8787uGu76SaFGESRCeAqLbkIHs0N2CZQuYSQhdYnqEiQRJXTvY7tVh0Qo6JIQeKhDQnWywgoRFNxVAnM/mo+dmffNGdmZOfS//n/zPM8LIwEQE/4XrTQgAW4SBPpPr31TBSCVna2yYCJmBJIBCr1x2nUCAKNWFjtJQVCYsA+sAUAGnLflXiGK7iEBBiMg6/VsW4YoAKHKCSG6SuDGCPSsU1bsduE0QwiWeZ8pEvtKTjoGvNMz5x3m6IimVjsXAQnNO5FWgBH0DHRuIZ6ghSD2SrW1XFoAlu8fzgOtKgKv5tu7fmS7N7YmeiUzplbkrRZcMfsjYA6d3HOv5xI/qLAgwt25l2Wgd7x5PlqxX3AqxdxXYwYBw4szx970Ncc3DBXBLJmKi0s9qrJ8dPLm5WdqHPEN3ZtEgonHVgdGQO8/kxh7MQ07GwFIyYbkcIou59sA58Cj2zLxzBQFgKTB+LB65By55alrr0d1DJjJ9YnY/bm5PNCWx+yoGJw7m0lMcNJ1j8DewcEZtNDbDmz0f71/Jwadv74Uq08n2OeOiXeY/n5qCzlj6QZHIH/8hCAQu4rSZ9D8XFUkT8IY0Q0ADjDY1yBgxXd/t3sKV73omRwgQqHyqaTXSu1OZd1yfd+23AYIekBdPN8hofzqxrfKZiZVqNoqAhz0rpHxPHi2+Wf7QuXj46pZT64AUQZE0FJ5ELWFgmXaiR8m3qOV5/3NLDyxyyZ2QdwBIVDKanpYq5poAB1+n4AeCmXTQgTgCU0E2t1Awrhe37YcxMC3hgWSqVu2iwTwTIeQjHYVovwDJ7vk7Equ02IAAAAASUVORK5CYII="

/***/ }),
/* 1979 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1980 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARuSURBVHjatVfLbhxFFD39nIcNxrZiRwmKWBAkNkgsrZgVS8sswRg2XvEDfANfwEew5BOyQIQdSUAB2zNjEjMzHsfDZN7T3fXgdpXKLlOBdAu49tGt7i71OXVu3Wo7lFLChEdByc+H+H9CEoS0SEOLPCdehUZgbv/H5JwwIK4BaRBGgImIcPfFcPggS9NcETwDwL6+rsxc63z1zHO1B0GAeq22BeBHQmIE2BFnaYY0Y5rMgu9fEamRm/+W3LueY1gR2vMUNBklFxTO2MqOEDvMPMPjCtDhkrulKObCy5zwfUdU6KgEtOV6siNAJEPMR12Mn5+g3znG+rs7uLF5G1GlTnN8d284pXiFAGhyx/JnT77DRnSOyWiA6WyG6XRKmOHbr7/Ch/fex+rq66hW61hZ28CLtIp33vvgZSV4pQBFLoS4ZvcfZy3U06dIGEOapkiTVOVFkmA4mqA/GGJ5uYYgSDAdnuO1ahXn7QY237zrdEqxElgrz7IF4lkDXuzRylMkRPys8xxPjk/xa7MNRCsYDMe4tbmu2iwkBEGGt+p9zLI7iCu1cg4YxQYP73+DOj/Hz780cNw6RetpF4PxnIRwLAhxtYbeWQf3197A2uoqbpKQO7c3cda7wMX4AT76/MtyAoztBstRghsbt7C+sYntbQ7OBRjnVAJGJUjBGAekRP4TSAEQpGQQkza80QJOvEKAewAFEcIwULAjYwws41QipsZcISVkEFxQ5vDDir1qNS4tIAgj2CGlBFcEQmchIBQ4PRMaQucwrqG8gL9ACN0V0J8xCEWqBTCuSyIoE6mBEUHi47IlcF2QXoiUOgFSr14YBy7JGZFxBaEztAiJIFIlKCnAdIAR4UfI0smlA/LKBU3KmYZg+lpDzQvjqm29ulfqHABBwiMHmHmBhq63JuI5oRZh3DDzwiA25OXb0AiJKhWweabaTP2qVpNEaupuBHANIS4R12rOqgs5IM3qld08b68rCwn2bichphSGWM0z3ZJlmTreyzkgpRLCuOpzbS0RahOkvdMp5+TadkOuhUjME4bFYoEwDM1fRGodCv/ogKWWMYlaFIMLfeIBxgXjhCGGuVanY8oEFglHkiT5cyNAUmKF2tBkufI2zic3cyvVF5AxpsaUCdp2slitjqDGfsWHV/WwtLSE2WxG90Ml7PHjR98DaBMyuALciOMYW1tbjigzNtnUnoQp9Pt99Ho99Xw0GiGi9zQbjaPd3d0vAHRJjHAFuC4UuGcfzzyHcqnd7tCH655afafTweHh4e9EvgegSXPTIiUoIsaQOwLyBc7nc3S7XbRarYv9/f1PARzRvEWxk1BKFHXGbEK7DFR7Rd5sNi8ODg4+G4/Hj2jetMA5UMhyR4AFJaBeryvb9/b2PiHynwBMihxEUsGNMm4onJycHO3s7HwM4JiuZ2VOQhb4vnqJs9tdQjPPbkPZaDR+IPIDAL/R86TM55gT2tR6246w4pESTgk9Is9QIEJrNYxW0wZw9i/+K5aETPV5wfgTgvhTReCa99kAAAAASUVORK5CYII="

/***/ }),
/* 1981 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAWKSURBVHjatZdLbBtVFIa/edjj8SOxkzYPt2nSJihNS0JEqwAtDyGoQKQ8hEpoQUJdAGKBKlZddg0IsUWoYgELJIRgBUIsoKqEikoIbaChYOMkbdK4eTaOEz9mxjP4WsS1cRRbKfzSr9FYd+757jnnXs9IjuOwLikvQOb/le2UBBUApcFDQEMJhMR/JwewgSXg1jqEym25gO7lROKCaRiCCGndUHpfTrZ+L66l1FIlu6IoeHX9EDACGEWAUgjTMLn3VIT7xj6jKxklY11BNRIsBNsYVwdonTZxZwx8dUGMzhamtR/oly7j9zexMuEQ9vkJW/fzXmg/s033UKqrZwv3LooqB5CEBXl9YpywkcSyfsP2uFhpa6fRGoeRbuRcDqGgY7NzweZgoJPrB+ZpXZmi+YEwrbMm4cZG/Ak/84pMqUSWinGENmo4WZYYuHkRU7uK5XWjbUsSzE2y5O/GdimsS3NrqI5MLLxMe3gas3c3vftBebyPTGeA/pXLYq4yS3JFuEoASdi9iLthhVRLC1m1nmRjPQF9HEU1bgNoGlnFzZfGH3wZf4q9exIovX30H+5i9LfveKZT55A7jqzIRUtQHUCUwPGuYtdnWPJ4yYUsNCXJaK6HNTWAkMvlQnO5WcvbJ/uYWBzj42uP0t/TyOyaQk/fNL7mBAGXJlZddGmjblICmaxeT0zdwdW0ilte45yxj2hyjpxLKqZfcWR2rJqcjr5EQ3A7RtjPpeU+vrpwnqXmvWQbA8zIoZIM1AggAde2P8GiU0frYiej14+ykJ4nZLfgXUkh5NEKAKh5b0s5vDr7Ch0dHXz6bpzJ0D34mnaQ2t5HxPYgK1LRGwGobKAlXx+uXJT2m1O4sibJnj3c/bOO5Fj/ZMAtghcgXJqbQ0t+Qm852FIHF49N0drWypnPdyLLFbugth6QFBkr+CyZhm1oq6v0DovgcKtBZ6rFYabZIqPYBQCtzsPc3BwHIzre3XUMtHfz/rkwsaRfzFNmoDqAoBTksuKBfV3Yfh2hjK7hNiNccbx8FGzgA/cIaxpks2kaF3S0Nj/e5zXCUZNL14JijgrX1gPS7Zpd33OYxMNJXFKOXmmYkGTzdGKENy/HUDIxvm39Hs+Sgtzsw3rVooNZPhzxi2c3cu1NWCRWVW7sPcVaVwNtjdtZu2uO7mCYe9U4aUscxwqpNp3U2Uy+cUd5f9jL72aLeHZDAzU1YVm9LGU3Y8+dZn7+DGOXE4Qei2CnbFriHQT37GfsdQczssoXfx3D0vPQVFFVgEIJ/kWreFjc8Q7m1bf55KcJXJqXXQND/NT0IMYvDlbOAXVrLxLqxiWoXIdjZQjvf4S5K2l29R3B3f4QblUiY+aK46tI9MAWMwCov37AAXWYrkMhvl6eJydJJLNOYWytchyn1gxUTtpqjODYK4Q8AfRAHcu2VFx5rbJtu6YMVBwajm1xY0VlcfUW0SUv1pHDJWNql2VZAI7w5hlQJMqkuLCf/IjU+HeonUeQVH1LDWcYhgPkqmzDjUsgawHUnufYikSlnuo2OX/+/I/AFGBtDqDI3ImsTBKvNU97g8LAbp2DuxSmpyYjRwefeQ2I55vR3vwgEsh3IN28yTdnDpNKpZiZmSESjU4fHRw8DsTywc2qJfj6jTqxZ8sMlF6Fi1srl8uJ+mKaZuE6NmaSTqeJx+NMTEwsnDh+/ATwR35stqa/49oPkwKA2F5FCxif318IPj4+vnDy5MmXk8nkpfy4NBtIrRqs+uFSZpGBQB4gmk/70NDQi/ngo/nf12o5ip2Cq6hKNkTqRdojg4ODLwDRipVXKUFOKX+BKHdlwOILjKIowk4sFruQD/408GeV4BUfpwqw8x+rbE0mMAnM5ee1AGoFKIUQlu7gC9gq7PMa9Te67zu9kU1bKQAAAABJRU5ErkJggg=="

/***/ }),
/* 1982 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVRSURBVFiFtZdLcxvHFYW/7sFrAEIFskqqUtlbL7WOvIr3LG68cGR5pZ+QVZbZ5Sd5ES9MVyqxLZVIvUxSDCiQIiiQlBhaBGBgph/Xi3loAAwpViq5VV1zp9Hoc/qc7jszSkTIQimlAA0o/j8hgJcCqMpypZQGltMWZL//j8EdcA6ci4gHqBQGVIHP+Bs/okFVoV6p0gmX6IRN2vUGrXqDG42QdqNBuxHSrtcJq1UmxjCKIi6mE0bTaXKNIobRlPeTMb9OxkxtjFjgL3wObALRPAGAGj5dtySX2E0Zxx4hwjHBMcZKHSN1IlejVgmInWMcxYymEaMoYhTFjKMY6zSB0oSVBlMTJxpArQhYJKDIJJdkrCB4EZykV++xzmOcI7IWBURW47wnshbjHMZ5nPe0qm2CSoivamxd+M/kl4zAB5wSBTJkEPBecD4F9h7jPLFzTI0FpbDOo5XCiyT91hKnJAId0AianJsh7yfDDHwhFglkFnhwkqzGOI+xjkBrtFUowIkQBxqlFCKSkLOWKCVxMTnF+TPEa0bxNJm3hES5Aj4l4ASrU8m1QpkEPAOsaI1SIALWe6x3xNYRGUs9WKJWaaJVlU5V2BnvJPNeSwEhqQaaVGaXmyYkYBXtCbTKCTgvWJ/IH1lLJYB6PWQYjRlNx8kBvA4BrTXe+rwceSVYPFpplPUgDu8Fq4WKzmqWYP0Hu2LnOYnecfj+GOs8GMCBRuPnWCwQOP/zOdY5lFLlDfKckjyLYl7sq/61+hELLgMuI1C4vwz0Y6HLWCqlEO/xqRJvT0/pHx6ilOL4+Jj9/X2UUrw5OmJvbw+lFP1+n52dHQAODw/Z3d1FKcXRP6u8/LudUepaBIr3ALVaLd+I9Xo97280GvnYVquV94dhmOdLrfBSAsWHUQP4w2g0WndX7YFCmyc5n5ctLgiCL4CfRWRaqkA28O3bt/T7/Vz2ra2tRNKjI7a3t4FE6l6vB8Dr16/Z2toC4ODggBcvXqCU4vAfAdvfTi8ltkgg3VyQyp7my8vLed5ut/O8Uql8kHppaWZMFkvt1qUEFiwYj8fr3nuUTsqsLpH9Y8fuKhu01l9wpQUp0MnxMduppPOyP3nyBKUUBwcHuTX7+/s8fPgQpRS9Xo/NzU0ADn5Q7H5nERGKb185oQX8lAQsyp7FyspKnrdarTy/detWnnc6HZxzANRrVZxzeL9Yixcs+G0yWRfvc8l1akU65sorgPd+phVXHgQBYRj+kcSC6HIFgMFgMFNYnj9/DiS7/enTp7nsGxsbAPR6PTY2NnDO5TYZYzh92KT3vSKOY+I4FsAW8RZLcWFFN27cyPNOpzMjbxZFO5aXl7E28XtlZYXxeIyxDeqNCsPhGc+ePf0XcETyeCq3YDKZrIvIlfLP92VyG2MwxnB2dsbJyQlKKZrNJtVajb1ud3dtbe1L4N8iEmcESgsRwJs3b3j06FFuwePHj2d2fib75uYmIsJoNCKKIuI45vT0lLt373Lnzh3CMGSv2+2vra3dA/aK4JcSyFZ2+/btvO/mzZt53mw2Z6wpHq84TuafTCYMBgNevXr17v79+18Du9nZn8FasGA6XSe1oKwAlclvrSWOY4wxXFxccHZ2RqfTodvtvnvw4ME3g8HgRxEZli22dBPOK3FVZMcsa8YYms0mL1++7N+7d+9Pw+HwOTC67P9FAtkL+bVjnmBGotfr7a6urn5FsuF+u2qOeQVsoDVSsKAIVAaYnZYgCAiCQLrd7k+rq6sPgP2s2Fy5iMIeqACfAJ+WELtuxMAhcCIi5mODZwgUSAT891/FApjsy/c68TvRz0aJUFqm0AAAAABJRU5ErkJggg=="

/***/ }),
/* 1983 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAASWSURBVFiFtZe/b9tGFMc/j6QlS5QhO3KGoEWGAPbiLM1SNLCHZDIguA06tGk6pVv+jcyZ0zH/SrM0g4ci8VAo/pEAtqPYSCDJ+k1SvA7iUUeKkp2ifcBB/HF33897997xJEoptImIABYg/D+mgFAZoqKvRcQCVqJm6/f/sfgIaAANpVQI4BgdFoC1Zqv1yvc8EEF0GxPG9wkyfS8TVjGem2bbNsVC4TvgL2CYBgDI+Z6P5wcT8ahZ1kQoBkr9psWVUpP+E+icKWgZ1wIIkZhug0Efy0rCiGUxGAwQy0JEGAyHY8jonb6+aLXGkyajJ2YA0xGIxXq9Ht1ul/Pzc1ZXV6e8azYalJeXsURoNJtUrl1LLoMIF+02ozBkaWmJfD6PWFZabhpAE+tBvz9/jud5UwO73S6u605dm1YoFHj69Cm5XG7iwGUAiBAEAZ12m9bFBcPhkDAMWV9f59atW5TLZdxSiYP9fV6+fAlAtVrl5s2bfP78mY8fP3JyckK9XmcwGHB6esrKygrlcjkRoZkAlmWRz+dZzOcpFIusrq7yzZ07bG9vJxIwt7BArVYDYH19nY2NjbFA1OfFixccHx9z48YNilF0sgCmFkVniIigwpBCocDm5mayIqJkKxaLFItFLNvGMpJPRNje3iYMw7GI8fzyJYg8RIRQKTZu38ZxnMSeICLYEYAWkJTA9evXuXfvXlyKV46AueEopdja2qLVak3tCyKC67q4rht7b7YgCLh7924chVk2vQQpAMdxcF2XdrtNGIaJ93oJ0t7rdwsLC5PN6KpLkO7sOA7Ly8tToRYRCoVCYlzCM6Pm5y1B9j4QtaVSCce2p3YzPVGv15ua0BSxbZtSqTTVZy6AnkSHMWvtswDS3un7xcXFLwSIKoAZwqaQBjA+6Zki+rl59pgJYO4DWRB6QqVUAiCdhPNALo1AXO8Zg7MiMC/JsryeCyCAyvDenLDRaNDpdGKA0Wg01cdsaSfmAiCCKDU5RKRCD1CpVGg2mzFAv9+Ph4dhmGgmhG3bMD6axVTZEUgJJ/nGz8wINBqNOBJhGDKMDigmRASggGB+BCAzofRkuVyOwWDA3t5eDLC7u8v9+/dxHIdOpxOLBkEQjRtH4c2b138Cp4Afz2+U0CLwbb/f/0Nntd7jNcj5+TnPnj1jf3+fbreL44z5gyCgXC6ztrbGkydPUEpxdnaW2JIPDw/f7uzs/AjsK6W8SwG0uFIqsd7afN+PAXzfR0QYjUYMh0PevXvPgwc/0Ov1+PDhA7Va7WRnZ+d74G+l1OCLlsCyLCqVCpVKJRENc3MZjUZ4nofv+3S7XVqtC/r9PvV6naOjo0+PHj36BXibFocZn+N5lk5MpVQi633fp1RyqdfrHB4efnr8+PGv7Xb7tVKqmzVf9oFkhliWpWve8zxc16VWq508fPjw53a7vQd0Zo03ARL1eRXLigbA0dHR22q1+hPjhJv+ZM4AAAhsy0ocIkyhLEFdLbZtY9u2Ojg4eFWtVn8D3iulhpc6YVSBA3wFfJ0BdlXzgGPgTCnlX9Y5AWBA2Pz7f8UK8PU/36vYPzBoNRUsTb2VAAAAAElFTkSuQmCC"

/***/ }),
/* 1984 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1985 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARuSURBVHjatVfLbhxFFD39nIcNxrZiRwmKWBAkNkgsrZgVS8sswRg2XvEDfANfwEew5BOyQIQdSUAB2zNjEjMzHsfDZN7T3fXgdpXKLlOBdAu49tGt7i71OXVu3Wo7lFLChEdByc+H+H9CEoS0SEOLPCdehUZgbv/H5JwwIK4BaRBGgImIcPfFcPggS9NcETwDwL6+rsxc63z1zHO1B0GAeq22BeBHQmIE2BFnaYY0Y5rMgu9fEamRm/+W3LueY1gR2vMUNBklFxTO2MqOEDvMPMPjCtDhkrulKObCy5zwfUdU6KgEtOV6siNAJEPMR12Mn5+g3znG+rs7uLF5G1GlTnN8d284pXiFAGhyx/JnT77DRnSOyWiA6WyG6XRKmOHbr7/Ch/fex+rq66hW61hZ28CLtIp33vvgZSV4pQBFLoS4ZvcfZy3U06dIGEOapkiTVOVFkmA4mqA/GGJ5uYYgSDAdnuO1ahXn7QY237zrdEqxElgrz7IF4lkDXuzRylMkRPys8xxPjk/xa7MNRCsYDMe4tbmu2iwkBEGGt+p9zLI7iCu1cg4YxQYP73+DOj/Hz780cNw6RetpF4PxnIRwLAhxtYbeWQf3197A2uoqbpKQO7c3cda7wMX4AT76/MtyAoztBstRghsbt7C+sYntbQ7OBRjnVAJGJUjBGAekRP4TSAEQpGQQkza80QJOvEKAewAFEcIwULAjYwws41QipsZcISVkEFxQ5vDDir1qNS4tIAgj2CGlBFcEQmchIBQ4PRMaQucwrqG8gL9ACN0V0J8xCEWqBTCuSyIoE6mBEUHi47IlcF2QXoiUOgFSr14YBy7JGZFxBaEztAiJIFIlKCnAdIAR4UfI0smlA/LKBU3KmYZg+lpDzQvjqm29ulfqHABBwiMHmHmBhq63JuI5oRZh3DDzwiA25OXb0AiJKhWweabaTP2qVpNEaupuBHANIS4R12rOqgs5IM3qld08b68rCwn2bichphSGWM0z3ZJlmTreyzkgpRLCuOpzbS0RahOkvdMp5+TadkOuhUjME4bFYoEwDM1fRGodCv/ogKWWMYlaFIMLfeIBxgXjhCGGuVanY8oEFglHkiT5cyNAUmKF2tBkufI2zic3cyvVF5AxpsaUCdp2slitjqDGfsWHV/WwtLSE2WxG90Ml7PHjR98DaBMyuALciOMYW1tbjigzNtnUnoQp9Pt99Ho99Xw0GiGi9zQbjaPd3d0vAHRJjHAFuC4UuGcfzzyHcqnd7tCH655afafTweHh4e9EvgegSXPTIiUoIsaQOwLyBc7nc3S7XbRarYv9/f1PARzRvEWxk1BKFHXGbEK7DFR7Rd5sNi8ODg4+G4/Hj2jetMA5UMhyR4AFJaBeryvb9/b2PiHynwBMihxEUsGNMm4onJycHO3s7HwM4JiuZ2VOQhb4vnqJs9tdQjPPbkPZaDR+IPIDAL/R86TM55gT2tR6246w4pESTgk9Is9QIEJrNYxW0wZw9i/+K5aETPV5wfgTgvhTReCa99kAAAAASUVORK5CYII="

/***/ }),
/* 1986 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAQiSURBVHjatVdLbxtVGD1+NnFMTRSpCcRJFzQkwD4S6+yworIKqbPKih0pRX3wF0D8CSqVH2Ae/wBYUEVtNnnYCWCSKHUejmMn2DO2+c7Un3RnRh6NAxzp6H5jX99zvu++xpFutwtFRAAgyhD/DyjW6RqiNKDiFB7tMabf/8fibeEZKbodCOJCRUI4Uz0//8VqtegIESVgPrud6bO0Cu3vRSwWQ2p4+EMA68KmGjCRtFoWWpaN/f19JOJxXF5eIhKNIpUaxtXVFWzbxtCNG3h7chLDQ0OAYbCfeMTdJmEg7unHFBGNRjA9PcWsXCSM2Nv6jJjQfqrjNaCgODuyAhJHcXJygmQyibGxMbw1MYHtnR0tJd4cHcVxpeKIjt+6hWPpyyplbt7EkFTHbrdBZDIZjuFU0oTfgNqLsALTIKamjEoAmJ2dda2LN9Jp6DSMSOxbG+6xgw3oD5n5d8+eYUIyZqxk5masLQ1xN3U6HdKJ9fno6AhLS0vmFAQb4KD8IcWZfTwe9zGRSLieKWZZFhcoyVhbfsfShzegK2Tt/hpu356GZiLN68yYpbYdZuptuzBRrVZRLpdDG9BpkLl+F3dm3kG73RbK4ELGJA05sW3EQluInr5+TkMUDm/A2GY6lxBqrJVQtlotNJtNlltiC2pQK1Gr1RAE377QFa8Ca599jpk7M/osWdvOVqud17hFnRLX63UeWDSjWXvHVIY3oBX48acfcPfux3j08JEsyizOqmcUZNbuFe8Rvb6BHnVlP3/+G558+QQbGxv4+qtvzPK7xbu4FuL9HJ+enspJl8H7732A/L0VR+jBFw96O8FtAGQAjMzDLUKS+5iD5/MrePr0W6yvr+v8+tgJZ4B9w58D+oPHjx9yGzJ2ZV8ofA8vFhYWEICBtqEhBsY+5nIfwe7tf/YLgJl5uAp0jZIFET2TCAZNDliBfqKdweZewfNB34iYFxlcAeGff5R5/KqQ7+zvSKuGAsDdZBpgZzvUNiwUChgfH9ebz0v2MW49f8uDiqWvVCqo1xuO0ZcvX/wMYF9oBRog+EPzXYCCZkxQTN8B9A7gZxcXF85pmU6nnbeheqOOUrG4vbi4+CmAQ30jDjSQzWZ51ptV6XurqQGS5X71qoL7cp3zfjg4OMDW1tZfIr4MoCTirVBTMD8/z9Yv7L8vVNgpfaPRQKlUci6sw8ND7O7uHufz+XsAtqXv30F3gaoPdJjoC4uSJkZGRihOI8erq6srMiUvpF8j9F1AbG5ucr45j3w1CzxkTNJAKpVyyr68vPyJiG8AqIc4iNz7c25ujgYGrga5t7e3ncvllgDsyPPlILehHRNRDtJv7g1oP307JrvFYvFXEV8F8Lt830QAvH9OaWZSmFVj10BLWBYeybgWiJAGTBMxhv/iH7Cl+zwM/gHH4loBwA8w3wAAAABJRU5ErkJggg=="

/***/ }),
/* 1987 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1988 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIJSURBVHja7ZchbxRBGIbf95tvZvdaKKoICALTOgyQ4AkG3xAUAYPhB+Bw/IQicFhShwGNvARRQUIgNYWEAr1Sjrveze5+zDQNFa1s50yfZLNmkufJvGpoZpglghmjOODhi813neHOkQMOgxjt/qsnV97iFPg/wYPVTbt7vXfkwPawRf/zdE/AlZePL7851YDb12ocx+6ow4eNiKY1nATztXxafXRp+WCCQyaxw3FUHri15HFSvP84XULiSMDGjzHK4A4nuPm0/30Sm4uYAZXXLe0Mi8/uLQ9FKGY2hyKwTa7x87UvixrUtWv94Sj9nQiKBJihncQ2O2sNQZvkZvAepKEE2dJ24L47qEaXAnwOQFcogIiNMbs1eJ04cVJ5tQRKQAATaSW7U4DbC4r5XmCxgJywNwWzWyuvY3U816sk71IEktAxmd0pQEbqwF5FNC0LBQDZue+ugv51Aqk92QiKwER2ZrfW3v1xQqYJGBsrNkF2ZreGILuSAwLopNgEzM7s1jq43wCkrgSUYjeQAyS7VZ0bxNjRDIShFLSO9F4GKUC2p9EIgMX8ZjCQ2a0q/GVGMbNiN2AEszO71an8BI2dwZW7ARAUZreq2NZCT/h1Z6JdqijFQs9JdmvbjNavLlajC3P1eRRkMBzHbzvTdQLI3wqAGzkMZdgF0AfwmmYGJjADLHH2NjwL+AdYv9PXZiab3gAAAABJRU5ErkJggg=="

/***/ }),
/* 1989 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 1990 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAApRQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxD5LpEJLpEZPpFJTpFZXqF5XqF5bqGJbqGZboGpboGpfqH5nqIprqIpvrI5rqJZvqLqDrL6DrMaHrMp7mMqLsN6TtPqHiP6TnQajtQqnuQ6ntRaPiRqvtSqztS6ztTq3tT67tUK/vU6/tU7DuVbDsXrXvY7PoaLXoa7rvbbrueL7tfL7pgMLuhsjzkMrwkcrvndH0qNHssNn1sdnytNfutdnwt7e3uNzzutHhu930vt3xvuH4wMHBwsLDwsPDw+H2xMzRxcXGxcbGxsbGxsfIx8fHx8jJyMnJyODwycrKycrLysrKy8zMzMzMzM3Nzc3Nzc7Ozeb3zs7Ozs/Pz8/Pz9DQ0NDQ0NHR0dHR0eb00tLS09PT1NTU1dbW1tbW1tfX1uz619fX19jY2NjY2NnZ2dnZ2tra29vb2+Di2+353Nzc3O353d3d3t7e39/f4ODg4O744PD74eHh4eHi4eLi4ebp4uLi4uLj4uPj4+Pj4+Tk5OTk5eXl5ebn5ubm5+fn5+jo6Onp6Ozv6O/06enp6erq6fL46urq6uvr6vX86+vr6+vs6+zs6+zt6/L26/L37Ozs7O3t7PDy7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8fT28vLy8vPz8vT28vf78/Pz8/T09PT09PX19Pb49fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////a7KaGAAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAn5JREFUeNptkEtIVHEYxc/3/e/MNA8dpxkY1MwCzQwt0KBVD0msTRQI2TJoE61aWKuKFgWthYqkZYuIIVrYpiJoLCuwhWGGGUE+Sic0x5m57zu3O5fmegc8qwvnd8/5zl8CQEzYSnbZBhyAI4JAW/i2JZcrQCCcWeeAIGJGhRSAcPlQv6FVAATzhfdW2IyvHJsWqt7zpauVgAobhFtBxOKwJKQARD8YvJsIDEdOqAO4WUXHd0vIEVdaqAIA/wGS3mr1bR8SETMqEf3u7noabdlXaKBNIHQSgtuYtKgTsxoRZwnYDvYAKTB9gB1l5tU1ORpLnG9xj/QlcJMgVke/WgD0vwvX9w8T4ANAaRoLTX0HYqltypJZmhy5XAOQE3/mgeN3DseJsplFYxYVeYBwgLEfQHO3ma0r/GzbCCcndjX7EiSDRe8zYMeQ2QcQ5Ahg1xxJLJ4DOEdBtzkKgPwVEBJrQLTV/Ys825dAggHrzZ9UYqIxgaKRWj661skewIJpzyeo6T4j2FMNSQv4Z1KcbGRuuDfQnfZB2GzXVHBvyzyW4fozn9+9OD1Q+1CEZO9i+deVawnQ68cFqIdUCyHbrgJgftI/M4u5i3UNxpKO0F5DKeOS6c1kYAi3bn+TFSUHIN5+asEyTVUxqgBAkwcDN19m1fV8fTw2mHvFydBoUS17AKMDoIETIFhGYWXqaj57tyjr/oo6etQYyDWlJqN6bqdWHL+vyurmCnfyUJBgSR2rK7G59Pg9LS8D8N0AzIpS98c+u84qqYmRUkFGFXDWumpKEo4QAN1+uCEr8ACYwiYCOT6cLxG+oOcVDZuApRwX8EtXVAM+wJQ1gl+2UYanf8YQ2qRiaN7XAAAAAElFTkSuQmCC"

/***/ }),
/* 1991 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAitQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxn73posDupcn+p8Tup8r/qMTvqMj4rc7/sMHdsND/sbGxsb7Qt7e3t9P9uLi5uM3qvM7pvdDpvr6+v8LHwcHBwcTIwdDmwsLDw8PDx8vRx9Ljx9XoysrKy8vLy932zMzMzN31zc3Nzs7Oz9DQ0NDQ0NHR0Nbd0dHR0dLS0dbe0dff0tLS0tLT0tPT0tff09PT09TU09ff1NTU1dXV1tbW19fX2NjY2dnZ2tra29vb29zc3Nzc3N3d3d3d3t7e39/f4eHh4eHi4eLi4uLi4+Pj4+Tk5OTk5eXl5ebn5ubm5ufo5+fn5+jp6Ojo6Onp6Onq6erq6err6oy06urq6uvr65e565i769Pd6+vr6+vs6+zs6+zt7Hqq7Iqy7JC27JG37JK37JK47JO47O3t7YKu7Za67abD7dri7dzj7e3t7e7u7py/7qLB7rfP7tfh7u7u7u/v79He79Tf7/Dw8Nnj8N/m8Ons8Ort8PDw8PHx8d/n8fHx8fLy8tfi8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////9XrNEgAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAmpJREFUeNptkD1v01AUht9zbuzUiUpbAYqQOnSGuQsSEm2aTpVKC1X5BUXs/AYWGFiRmBlAqBIS/SCOIygwMvDRCiFEpULV0PQrTW0ndq6511FiD732GSw/53nPuRkAxITzTiQjQAGcE4RzkCjquFIDhvXoN1tZg4QJBkEAFPPmvaClAZjbx9wQbHWCAhkyyvqWAWjWRBxBxD+vccYM8sNZ8NlF5mNcgUaIYgAY0v+tkEmI3csGUwvx2EJVFzC2xmFlB+XpyG5ukGhnzIinpj5A49YW0VcCckOU8fPfoM8C9wHr8wSNi08GYA4DzQGgVkBNJAaeMDf/yowJNLaBthdXyAmA96WmHxSWiJ/eZ7ZLgKoyJQCVRCDl8TPgqEp0aAMHZRwBfUBUZkZHzUyR+PE0qFwC2VOwUwaeEWFN5B3iMd1dAfYdHKYjVmYzBdMoMdlxN6FSRCUVgVlWhgsOxd11RxmqqBMSw+s5ZRgoqc4pkCo4k3AoSoBb2jBsg1U2dNUc7INShnllsJTBKYJUqRkiJ0pFzJE2lBn1CqNWAfbW5VEnZVi+ow3TOl9VUcq3N6TtmlHUA+a7M3A3f12GyvDv4EnYX3N5QRnyav+qyi/fbDWruY7xxfeCHnAbXQOrfFlbC3ZqA4OX1pq+7AGvFrWhFG/QWb3+/cfDxspG0233IxZiQwXa0N6vnnnN1Y++6ydbvIgNRX0PMnxzdXNk9UPrxAXShnreje8gDPbafwrvzk5d9AC17cvFByCQfsPg9JfcaLge+gBCcZcI+lE0iezz9onXQgJ0vCWB9Gl7foAUELotQvpEgUw+/gNYXQhjd9blQgAAAABJRU5ErkJggg=="

/***/ }),
/* 1992 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAUySURBVHjatZfbbxRlGIefOexsd5fSbSPQUooHCKVQBCVG0Uo0GiKBXiiBFONNA+qFXnnnHRdceuc/YDR6oZHEeGdUggaJkTbYUrFHalva0tPu9rAzO6fPr5NOGJg0nTThTd79vpls83ve3zvfO11dCEEYiqKogMrjDV9q+uGFHhHXgFqg7jFC+MCC1CpICC8ECCMF7CuWStcd214lQgkTHroOLh+QhwUQRvj9R0PTNLKZzCtANxADUADDsR1sxyUUC1NVQ6EQKLauK648vBpRfj2GuSamKPEEYvvIGgOJRMyl9QDi4vFWJHMB4k6o6sYACqxZrgIkAYivcZjYfoMWqDHLE0OE+823QMX3/YhQHGBwYpl7RZ/xGQtNhYY6g9bdWRqeyMbEYyclUQsilUchiiWbX3qKGLksozMV7s5apHWN3kmTa/0lDmxX6Xj9SXRdDwUTOxAnfkR8es7kx5sl6nds4cAzefwqAy9tkM1oFOaWmClWuDUluPNFL5cvHFk985towTq2CwG/ysq35nMc3JMnVaWjSeGmhixLKxVMX6Hs+niKxui84NufBjh/soUEEQeICvu3J9Gf3cXVvyaxFYNmKbitxsD0FHbLfs8sVpguWuhVGoah4bouQjf4vmuBcyd8lKkSal0OJZdO6EAIsGjhXelGlCyUw00MTlsUhMKRtI4vwJEf0gAqjodQQAFSui7dMNm5I8vikkpX7zhH0wYrX/1B+s0DGC/uSQQgq76H891NUm+0oLXtRQHG71vcFzB4v0wmowcDZdFyqDEUcrpCYZUKX0JopFIp0imXvtEiL73zHOr2aspf38C6eoeaT9s3BIiMVB68BxQwLZ++8RXqthpk0ypjRZtl02V+0cF2BY6v4MrV99wAJq2rBH8vQDieTDfZM6Ad2gWNedwfbuF1jZH55AQNeZ2hZZ/Zosnv/wiatmXRdQXT9ClLCLvi4aym4zD4n4W9XKb52NPY3aMsf3md7NtHybzWghAi2RxQ81nSnW34fZNBFc2NOX4eLuFWUphScGK2TPsL9azYPkNTZW7fXcByfGzbwypX2G44HG6pRx0rUHv5DGp1ZhPHENBbGwF46/hT/NZzkztmCssVVGc9XEdgqAqNtWm51nGtZx6z4uP5PmdfrqeqKg376oOqI5Unc0CEQyiSH51p5tI3/SzoeRZMn+6hAm8c3kZaU5gtlJk3K7iGyrFawbmTB1fHeUw8uQNCoDwyF5oaa/js/VY+vzJAr5PFzxkUbI+JQoVpWXnaNzm73+DCmeOBuMwYhJyOCR2ICEejrjbHpYvP0/fvNLeG5uj6cwYhfA7V6Xz8wSFqazJ4nhdmCBEFEIALiHUA4lbJfezewf31tLY0RO8FQlI0mIa2bQcnQu7XIEQA2tPTcwOYAJw4QML3t+P6LFsehWWThcIiQgrU5qvZmkuTM1R57TI3N8fs7CwAuVwuGE7Dw8MD7e3tHwJT0hEvBpBAPLiX0hXqqjWZBnt35gHCyoOqTctiamqKtrY2yuUyk5OT9Pf3T0jx88AIYANs1IJEMED4kK1ChCBy9TFNMwAZGRmZe1cG0A+YQsaGpwAhkrQlBIg+9YEL1dVbAnFp+3xnZ+d7S0tLfwPlqPimnwEgBhBN27ZX+x7Y3tHRcX5NfDkUTw4QRnLAoAXAqu0Dp06dOgcMxStfH0AArqaqQSWxHyDr2B/+C69pwatYDA4O3jh9+vRFYBSwQvEkAC4wYRjGq2zeGRsYA2YAJxRPCuABE8A0m4zQxeCcJ4z/AUehn8NKjg6QAAAAAElFTkSuQmCC"

/***/ }),
/* 1993 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAf5QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1tbW1s7S0uLi47e3t7u7unJycnZ2dnp6eoKCgoqKio6OjpKSlpqenp6enqKioqqqqq6urrKysra2tra6urq6ur6+vsLCwsbGxsrKytLS0tbW1t7e3uLi4ubm5urq6u7u7u7y8vLy8vb29vr6+v7+/wMDAwcHBwsLCw8PDxMTExMXFxcXFxcbGxsbGx8fHyMjIycnJysrKy8vLzMzMzM3Nzc3Nzs7Oz8/P0NDQ0dHR0tLS09PT1NTU1dXV1tbW19fX19jY2NjY2dnZ2dra2tra2tvb29vb3Nzc3d3d3d3e3d7e3t7e39/f3+Dg4ODg4eHh4uLi4+Pj4+Tk5OTk5OXl5ebm5ebn5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////n2r8WwAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePk7P7+IJwebAAAAmxJREFUeNpt0j1PFEEYB/Dnmed2926Byx0eJyCoiC8YKwtjBRa+FMbemFjrJ8DSD2CjrZVa+BI7CwuMQkxMLBArExKFQqMcHHrA3ro7M7sz4x032eMM/0yxyfx2/k8ykwMAZAj7xWgD0ALMJ4R9iDEq0m3gFO42GTFExqAtGQDuevdOItoA3DAgImWAXA9b6ewjoAu7FYjMIYLFkieCCwQM0DYyxDZoK8krcvMmwAOV+zFUROgIArBANbyF36c5wJGn1cnVY6eswAxsn6TiMAsZTE9vHph6MVbETkUGCoINypWDimrHvW1Visp2yAxgwxdf8w0FfPEo1GGUOsd3Ac9FtTIoMHn6OeRvpDlE6AEejzHU6zuliotN5j8buQo2FvhbWsHKDV88PwEqHVeryuk9wSiTtJhDWimWCi7+n0EnkJhUkDRKepyLlGFvBU8FiOqTQnJYgow3ymfpwxeYOdMFlMYDdWfcY6jydUEz8w/VbXwVTWWgYHLxaKASckeabrM6dw3yy+4l18uA7E/wbzEmGtg2/ckW/sq5NaCSkwFGzJB0EENM0F8TMc9/xwoUM1BeTsS6N4awlgxGAZ/k6tt1/bEvMsYC51xUSR+1PuUtqpfuhY6juBTyfgoWQN5n3kTdExPEhuHiG13te5mf4CJOLGgF8YoGRgigzy+xRlCs0uuQ6wyw1rKP36TB6J/Z4NO7MJJZBQMAe8PGyMsLKvw8H0e8+2AMAFhjdHpoprb0VuxEYIHdszFaa943FzWj7LKM/T+DqX4fRDFkAFIyiGBHRHIfi51YQBeoeJZgb2TME9gD0khgDzCJhiz/AI7wDjFGOmhfAAAAAElFTkSuQmCC"

/***/ }),
/* 1994 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPtSURBVHja7ZdPaFxVGMV/9773Jpn8n6SUJI1FNJXG4IBprAVrQF22LkTThaBYKBQ3Slu3ggvdCK3oQkvBRXVjE7Dgn7qpFUQq2DbB2LSpRMQ6iXHSNjqZSTIz773PKd8icXyTDDjQhR44M/Pde989h3Pve3OfERHuJCzw3zbgUgZTwsgwtqmz1+0b6DHUAFfHUpKdm/b3jRJK2Zqbsppbp/bvamy/+32bvrrN5DMeUTCAlDfph6ytUYReUzHcvH0q/+cvB1qGT35X0cDoPuPsfe7QWP3DB5Ly89dYr55aQPwVuOdxVr49Pv7Zh289NDwiQaUlcMz0uT5JdGOthWCJGkADS09if/qqH3CAaANNWYykpzwbFiCkpjD+EpJJxW5rVN6EvYCEiJ/HINQSEvogohqVDMQXMdIA+HkwQk0R+KhGxQQUAuCv1N5AWEQ2eg7M5zAg1RkwUTmvl0ABUY3KCfQAIjoYgmhRW8GEoAQII8wERUDoWS+BmwmMaFwlFqKFQ8CWC0SIy5rfxkJdExL4JY11EujSmVS8uAJPfwBuHDLXYWEa/igxfREKC2wIWwctW3We7A3kmzcJ81m61k1gGUMbyPw1tVnXqh2JXiVAMQuXj0PqLJg1YrFWsC74RQgElm7B9+9Cfhl8wG1DNTa6CwTIpCB/E97ZArIMWwagexdsfQx6noAHX4HOnTD+OgQ5WJqB9HXIZyBAo/dROBoqjoMglMONjs/qhUuzOiL1JcyVOPEG3PsU7H4PuobAfwnOPQmC0gUsEERsTs8iVZwH1KXraM/BH+HlLDx7AYaOQUMCUqfh0ySs/A537YX7nocY4KF0AWfNt1LnrMqAJqA9iW3gNcLmQUgegmcmoXs3+Gm49CIADL4NzZ2r4m6EuNU5Rao9EXlqgFOPwIkW+Hgn/HoGGrpgaESTmDtd4ifgtUHPnn8K2zK6FkGqSEDULQb47TwUF+HGBTi7B2bOQLwL+l9VsfkvAKB9sLK4QelYqHoPGDXAjsPwwgwkD2v9w2sAsOlRFcpe1LptcFXYVGKVm9AAWKPFwBFo7IbkEe1YnNL2lj6tc5NaN/dXElbonFUmsHbw2FHIzcLEUe1ofUDbl2e1dhJa+1kQIrixAZc16IgjvtcUBrbeWgEuHYOJEj2U6fPwkQHd8Wruc6NCARAqo4wEEiMwsbAjXpDKB5IF/MX2xmuNzf19OODYPDhE05ZFrPe+mgv+ziDwWMm3kfFjk/GFgl/5WG6MuXzQ2xHv2HQyVsxsN4WclYij92pdHcSNhXnqLucyi/uTJxhHRKINoCauDOMtJ3D1j+PfQpf2drr3j1KkTPD/l9M7buAvjduVXvC1GkkAAAAASUVORK5CYII="

/***/ }),
/* 1995 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 1996 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAR7SURBVHjatVdNbxtVFD0zjh3HNvlolEQKDUkkEF1k0xaEiijNBx9CIJoKIfELkkUUZZtFpGbDAtgDYtUFEgsQ/IVuUAISRFGLsEoiB4wTU+zYHn8knhnP9J0Rz/UMM3bcwJGu7ps3771z3r33vbEV27YhoQgAUNnE/wOSWXYLKQVIchIP/WMh+f4/Jm8IK9AEr8XOHjxGWNhzxVJpy9B1KoIiDXA9u5TJZ+El5HgvQqEQYn191wDsCKt7BRARQzegGyYXdJmqNokkgdcHkituH4GER4DimENG928jWts1vYafD37Cbm4bqfIDfPT6Z4iEewNzx3mSx08A4UvuTcWdnU+R1HfQE1MwFLuAesJCLa/DVloi5BcJVYVEoACF5kTBGewrIF3L4PdcAXm9gFz1R/xdymFEHXHmqJLUXSuy3VmAVi6j0Wi4Qu4Vka08hN6wMfvMPK6MXMWV4cv48N5tVLQyjLBTwL5k6lkiMDg4CNM05W59BTw1EMcX79xpRovoi/Shv78f0d4+L7mMBqPTWUBZ0yigSQgfATzN5XL5sQCmzAIqlQpM3UQQlLMI4C7MRqNtIaqhEAYHBlwpsoQNiL5oJBpExr5uaiBYQLVeYwRcuS6dVJw+PayfKwLcRUcBDcXmOOf568PP8e3Rl9jZfojEQgKxaIz9Ty6g3CYCKf0XfJf+Cvd3f4V2TYNlW/hkax0X3lBw/dKbTv41XXMRdh+B/n5fAXXzBEvfv4Vnr15ETIk7p8UwDHw88Q1yu1m88PIrSCQS6OnpOV8KisUiLMvyvYaXhm7DrJZw/eZ7KBQKTv/l51+UizN6HrJg+H2OWb4vVarVu1KAqrT9JnjJOuZecPGLOAvgB9E+Db6K5aQg8mARxPmKsEnKps/kbiMgIyzRUcD21hYalsWZgbvwfqwIPrPt88w2jeHvLGBubg4rKyuYnp5GKpXC1NQUDg4OHL+8vIxYLIa1tTVMTk4inU5jYmICq6urzonY2NjA+Pg4Dg8PXX59fR35fB7Dw8NOUGiBAhgyqpWekD4ajcrduOoiEonI3XnnNNeKx+M83uwy20VAVionek2+l8Rt88yTRCNpvV6HpmnY39+/DyAjzAgUQPAyoYhwOOzyEtwxx/T29vKdax6FMh2np6cYHR3FzMyMk6pMJvPn/Pz8BwCO+Is4SABVk8zX5A3pjRD7OY9iKIICNzc3UavVnDr4I53Ovbaw8C6AfUGuowUq3PC9hmXOZUi9qZHhluPGxsZwcnKCo6Mj7O3tabcWF28BeCAvH6JtBI6Pj50fF7qu0zOkvGYlCd8zpxRD3xRQKBadd6/euOGQJ5NJbWlp6X0xd1eQV890FYvBd0nMMNIzrCSSKZCeQnxSR0EUzdDnbgqI9e4BqNgCnS4im2aaJgmkNXNMtHqu5xVAsOKz2WxGFNzbAH4T42rd3ISmAMPNHxz0PL9clBXv8iw2z0S+Y7UnZ2dnFwEcCPJ6N19Drvi0sItS2BOAFZ4W9pdY1+jmc9wqIsTmOf4BG/KcnwWPACSDT7C/6UHbAAAAAElFTkSuQmCC"

/***/ }),
/* 1997 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAkBQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxERERExMTFhYWYl9gYmFjZGRlZWJkZWRlZWVmZmZnchgYdhgYfX2Dfl9fgSEhgV9fgYGHgyIihn5+hoaGjIqKjYuLkJCQkpKSkysrk5OTlCwslS0tlZWVmJiYmktLmpqam09PnJykoaGhoqKio6Ojq6urq6ysrKysra2trq6utLS0t7e3ubm5urq6vLy8vb29vr6+v7+/wMDBwcHBwsLCw8PDxMTIxTk5xcXFxggIxsbGx0BAx8fHyMjIycnJysrKysrLy8vLzMzMzs7Oz8/P0NDQ0dHR0dHS0tLS0tLW09TU1NXV1dXV1dbW1tbW1tfX19fX2NjY2NnZ2dnZ2tra29vb29ve3Nzc3d3g39/f4aio4eHi4uLj4uLl46io5OTk5OTm5ebn5ubm5ufo5+jo5+jp6J2d6Ojq6Onp6Onq6erq6err6urq6uvr6+vr6+vs6+vt6+zs6+zt7Ozs7Ozt7O3t7aGh7e3t7e7u7u7u7u/v7+/v7/Dw8KKi8PDw8PHx8aOj8fHx8fHz8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+Pj5+fn5+vr6+/v7/Pz8/f39/v7+////lpPzEAAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMXZ2ePj6/7+Nos3swAAAg9JREFUeNpt081qFEEUBeBzbtXMmEkMERSVuNGouBBX2UpAdKWCbyDiA/gWrvUhRKMrty7dKJJRIUYEhUQ0QUhIMpmke/qvrqmankkl5Hav6n51T1c3bQFQiONKnQL7QNqGOIaoVonzoDH2fMtYQ4qBhAsMvvmoyDxAc7snYqUJK/SFEClgEyGCNMaKsRbGbzcQGSQK6YEf4fshRPxNMAgD1IDSgjVCGt/mUPAAtPx42firQs+vnh5EjECj8KPNn/sY1LuzflcEZL9oLLLWAFAgiCNA0lj5duViENmnudBjPGG/L8laOj1hqt3VlAgVAWM//GpXK71uw1RF1833L9yOJ/j9X8a16pCGqtoqy8U7MaCQp8Ybd2eQbWOqXf1esTwU4V/C9CzeL9eL7haWGAOSsrkkq31JM5qTan/oJgiNgDAbc5edOlURGPu9yaPPoOurP109ljONUo9G5Bt77TP14tbOubwCGAPc2F6fna3B4sLEZOrQVB0CiMxx+fqlGrS/3iu6Dk/L0TEloGuswXmsJVWl/bQIYEievKWCUFcWNz9L+8Sb3b4bAfFBD0AQVZ78+/i4u/ByN8njCNRfWDVPe67Xme8n/YNTaGDBaFWW+VTnVdZNUIO6V5e6qswnX+z1EgyBhv0RLPB6J0mjN1laHf0LStt6lnfTDAegSh8axJWn/QIRKJOMh4AWDqP6D5vKw/hnGgCaAAAAAElFTkSuQmCC"

/***/ }),
/* 1998 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 1999 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2000 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2001 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2002 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2003 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAgRQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxMDAwMTExMzMzNDQ0NjY2Nzc3QUFBQ0NDRERERUVFRkZGSEhISUlJSkpKTExMUFBQUVFRUlJSU1NTVFRUVVVVVlZWV1dXWFhYWVlZXFxcXV1dXl5eX19fYWFhYmJiZGRkZWVlampqbW1tb29vcHBwc3NzdHR0dnZ2d3d3eHh4eXl5enp6pKSkp6ens7S0uLi4urq6u7y8vLy8wMDBwsLCxcXFxsbGx8fHysvLzMzM0NDQ0dHR0dLS1dXV1tbW19fX2dnZ2dra2tra29vb3Nzc3N3d3d7e3t7e3t/f39/f4eHh4eHi4uLi4uLj4+Pj4+Tk5OTk5eXl5ebm5ebn5ubm5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////tMWYmgAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMXZ2ePj6/7+Nos3swAAAhFJREFUeNplkb9u1EAQxr+ZsfeOy4UEQgVFGgpEgwRFJJCQaOgo4DkoeQBegQZRQMdDIAJ1mkCBlEAHTRAIisv9sb32eofM5g4t5LO1I+/8xvNphgAQ23lWGhUggEdCFs/kta8iCqA893TGwkTMMJIBSrx70nkD4OZTFpESQkkpb6wDDCDiQk5Uj5lhjx+cmmIiA4wS02KDmEyLgcAIAZYAiYOg5iVQbXFyTSsgNev7uutKkEi3aEvrZO+qRZh47+eH+6ogvtnGS+PxiPI/0Ba0O7j+JV1e/Xpt02IGwGZQfD56eJHB/NLfMvs5QHwiFAXYXDrN55oANsXt+z+Zyeh4ClAGADEGP2vAYOG2J8a/JqOPU/3x6TAqseLX0BUFZS3ACIAOLUspEUOZA0TlJsbv9na2GaDXemUDtjPNAGbh0K6XIKt28p9JSnvrg0sb8N4uFXmLNKjQcCrzPbeFKkA5gBBu3H7BqkSPvj3TxxwjnOoKaCezqqr2GjXgsPO67wYXhs8DlgCGlyH9/s49MS/1wZ3vawv9HZu6S0CSkKwzCQjRjcLsiArZnTcRYJgs0BalD41uOnlwd/B+XrVYAcn+eTug2spC5x93m6rBCiCY1lLUGIad+/DWH1fZLlZMAmKs3ZvFrMIK0DS0DAzYnVZ1NskgSrTcv5K4V+1x7bOKYrQmyNXWTYcMQCGEXNpF/NUfHOLOAD4Sda4AAAAASUVORK5CYII="

/***/ }),
/* 2004 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2005 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2006 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2007 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2008 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAA3YAAAN2AX3VgswAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAELElEQVR42p1VXWgcVRQ+c/dvZv+SbBo2iZs0bYNYGl1bWmystv4g9akGn/qkPomIEotopAYNipUgYltBffRV8KmUFhFpCYi1lKWEblMJNl03ZFeSTbI7u7Mz+zPXb24uy07WIHg/Djv33vN999xzzswqnHYaUwF7Dx9mnP3FH8xaO3l5acdxKDPWF2FEJXtxjeL/QyAc2ssIo49lgzt7sfbJTOzs6dYFWMjnoS2EfFMtvw9On4m1c9pyMPX4iblDkat37yWpqU2efG/fYFjulOnPlZ+/qFwgz5GFp0ez1UtPfZLqEDibfOHGQZWoTotrkUA8opE7vTqt6/XG7h4PnpfrPxz9NOUSOBN7bmk8iqmA3HIJ8JbZsLRxaeir9bYchE6ORuvUJFuCAzbma1SgBjUBzCRqZFE8GHxx2xW+v3PigA96PudkWI56KE8hCJWpnzZg8nwh8Fv6tbFtZVxIqn+P99pEkDAhEIRjTJD8eFLJwHMAVscstb6Q7Cwj514n0AZOLFK9LQMiItA2IWwLAWjyDgH/mw93bd1xAzG4BxdQqUSWQCLsf7ujjN9mnhlmxLBto3V8wCovZOfSRMfHook+xRbhN+BZw1VuZu/vnuVC4P3A8azpV/27tDAxUKsIlwFF/vs377xFYnz53dHXeyFhQoLDx4/f1apVV2vXEqw5ovQOdfVrgVYRucC9HOhyvPvGHzkCyXTuDwEGiQFtKEqx5gjjA14GmgRJOjrgCrWNwlWneDWIqE7hpLfXYSvchrtMiGwgBaga7QI1owp6g4I42261FTw58+bKdoMarS7ziw2igZfaBfomLJG8sKQC4FRsb47xjJ7Ty4ZVl8te6bJ/+MLnJMf5cyMJG3QfzJYHlS29UszzjCzjlDK6vH/Qefcj6AMGGdSDL2fsG0RsfHBYVbby000VEW06t/jQLHf1wWeTT5xXBVGjklNQQSC4K7iWDztV7JjifJN+nfzw4rZOLF3M60ieyLAKmkE6YGAlAHiw2kUemeq8Xvq685vo0S0ecfTrWDQh4QFRhaE2wtFHHuxZmJVNPDa2CSRuje6yhD7DaWGcZ5AGgiLiiYgicvKLDDzS10zRY64rTE8cTmqocgiuUVgIbirWQwCJ+zdlqREH7OCj0xMuAe/1laKTQMeYfIExxMsrW1w2EIcPo5WS97pLYGYzfWytqpCD/PrqZpPzthfZoVo8v7lcaAiRgnXz2Mzmtip8lE4dyRUZzc9fiz/f89OrD7K2iAMAaWn5yivP9vzSf3ueaLE0d/jcHffHQuLj7ulTHCznLnsDl827fAuXzWFVtAJuN31qsrud0/HnCn6YgoD2460DQfm9NF5+EpU1HPDqf/83RigMixoVQwsjl2WuGzRIOuBFdG6Bf40gIDpIi3Xv2xOKk6Kv3l/aKIJowmq86fb+BwRQ+xV0fV5YAAAAAElFTkSuQmCC"

/***/ }),
/* 2009 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAkBQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxOTk5Ozs7PDw8Pz8/QUFBREREREVFRkZGR0dHTExMTU1NT09PU1NTVFRUXFxcYWFhYmJiY2NjZGRkZmZmZ2dnaWlpbGxsbm5ub29vcHBwc3NzdHR0dXV1dnZ2d3d3eXl5enp6fX19fn5+f39/gICAgoKCg4ODhISEhoaGiIiIiYmJioqKjIyMjY2Njo6Oj4+PkJCQkZGRk5OTlJSUlZWVlpaWl5eXmJiYmpqam5ubnJycnZ2dnp6eoqKipKSkpaWlpqamqKioqampq6urra2trq6ur6+vuLi4vr6+vr6/v7+/wMDBwsLCxMTExcXFy8vLzMzMzc3Nz8/P0tLS1NTU1tbW19fX2NjY2dnZ2tra29vb3Nzc3d3d3t7e3t/f39/f4eHi4eLi4uLi4uLj4+Pj5OTk5OXl5eXl5ebn5ubm5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////f89bEwAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMXZ2ePj6/7+Nos3swAAAhNJREFUeNpt0LtrFFEYBfBzvjsza1aMmwQhCKIQQYTY+CTYqXUs8gfo32Jnb2MjqLHUJiIKpggBOyXiM2nUqCALrtnd2XnPvWZu3HlIvimmOL97Lt91AFCI/cZoA+wCaSuC++QmD3QB3Ik7Q1FCiqCQAtB672YaFwCevwuUcqBoB/0p3cMR0AMKQIqj1C6BCIqPo5nv+YxASAsAm9tLaCf69mRxBlDAP0DlQkkF4ufJaQKsgFvUV2Lz92RxWkrgZOQYCOTNR68lYK2hiFkAS8yatDwF1ABYEIsg8jg/5ntsAJvuAXJ9a2FzwkUxJZAaGL07deWrqGZDveBZa4kHWroJaMfmq72zghbjxhVVBbs/j18iHG3YACT93iBM83RrOLzrun4nBQhTA3J4Wki8yKbNKE+jP86rQ7NTbgWK8u2L/PzpwlUQfNR1Lxs0GiizndVraydsjjREbv7bAmwnK/q6zRFFKtYanjFjABHg15clZfO8G5sg07iVlWvqD2e48n7+HMBc6Y2hiX9onUdhOgZO++V6H1v35nKjk9c7qXafnveW/UiPAeZOzu8cbTsuiHwh6G0vDjYe+EFSvSTyducg7esYL9Piv12OgqjawgCTam8vo7MscTcexv0AJSj/Fmgde/dHw6AMjEE5tiTD8iAIayczZUjQhobKu530wxgVyMMbCvVJwihFDWRBzAYwqUY5fwH3Hc82isBgfwAAAABJRU5ErkJggg=="

/***/ }),
/* 2010 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 2011 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 2012 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2013 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2014 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2015 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2016 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2017 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2018 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2019 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAT8SURBVHjatVdbT2NVFP4oLS20tOVWLlI6KkwpZMIkiIyMozHGOE703b8BJBCNmfBkwh/gxcuLidGY+Gii0ShhDAxMZRiQzFCwdBhp6f0OLRRca2UO8Vg76SG6kp19abu/b3/r2+uc6s/OzqDE8PBwLYA2akb8P1GgFvF6vSVlQQ91tE1NTX01MjIyjApRU1PzzF49Vsfi4qJ3dnb2fQChSgSMDoejE4Dl34B1Op2qL2uVSUl0dXV1qtRVE6h84nJw6SuBVySgzKsloAA9E1zG5QQqgVZNoAyYWjUpqOgJMnv1CpwDlgNr9YHmFCibVyTBkUonkc1lkM6kkU6nwGFpsMBstsDpdMHaaK0EeGEFpBWKBfi2HzI4ba6DxWKBo60dhaMjIpNC8CAI344P7sv98LgHyvxAe2hToLa29nwcjoQQ2PPL54OeKwTcoUoFR4YUubuyhPWNNSTiMbx2443/RoFkKgF/YIektWGAwE1GkwKuktpms+OtN9/Gz/M/YjfgR3d3D158oVcDgXJwdi+Bb/NYTm4kcB7ncjnsPQkgkUzQOAur1Y7mpia4XM/j2stj+Hb/Gywu3WECKmNqVmCXTn5EOXb3eWAy1UPWdv/AxuYDFI+PcXp6Ki1Gku/slNDu6EBzcwu6n3OyH4Rgk70JFHwYTR6QcSgcpHEtbdgja3/uP8Ha+ipKBOp8KnE0GsE97zIDkBJWJsSKSB8OH8BmtV3MA8fHRWrHtIFd5icnJ2Sw+wLe2tqGV0avgyMUCgqY2Wzm2yFEGhoacFo6RTab5c+qJqAqKLl8Tn5ssTSCgmSOIn94KGuunkvnssbjMVlrbLTynMdcH6Svr68X4hQ816ZA/imBOoNRCKVSyfOcOyklBCb+CDwO8Bqd2sJgPCZVQhDyZotmAooCzF5kzOUyPBcTKgQSyTi5vhne35Y5VZKWGoDBRJHHewG0tTrICzZe02RCxYiSewFLJXmNjNgNCiJVwvc/fAeDoY6voNx3P90M3/YWSkT44aNNcAwNXUWxWFSAudekgNR2HVXDZDLBdV/cPHTlKtbX18gLefnO6OgYXM5LdBOiSCTiWHuwikbyzKvXX5cDFAoFKFEi4tUQUJVXd18/7tOmyyuLVOVuwtM/iL5eN4OxvLyptFs330UkEobeYIBBbxDZ8/m84gktBNQquC975O4Hg/u48+s8XhoehV6vh93epGzOja8r3xbpDw8PuVKyQXnO3+O9OB1Ve0A1H7t2A7/M/4Qt3yNy/C763YNccAQwT0Chg5AUHKPRiB5KRyaToWuYVkhI7m02G6UymWULVeUBtRfMuPXOe9j4fR0r3rtYvrdERpSTK01AOto7Ke8pkd5AqWhpaaGy3Mw+4LX4zMzMHIBw1Sb8Zwx4BuVZH41FEY1E5MVEV8OPbT0XIal6sVgMvb293EQBn8/HKclMTEx8COBr+k9Q0PBWrH6nU8Z2m10pMJxXPiHLzkBUrFL8ovJ38Pz4+PgHAL4k8CwotBJgcIWAqlfKLrmbSTAYNy5gDM7kjqanpz8C8AWBZ6CE1v8FaiLSyuaKGnV1dfD7/ez+Av3Luk0m/JzA0xqehppDISRqmEwmJlOYnJxk8E8JPKXpjUiDImWlm53f2dmZI9k/JvDPCDyh9Z2wMDc3N+9yubYupATFwsLCMhnyk9XV1RgotBKIbG5u3qZmxMUjRuBZVBl/AfYK8MOiZq32AAAAAElFTkSuQmCC"

/***/ }),
/* 2020 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2021 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 2022 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2023 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAgRQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxMDAwMTExMzMzNDQ0NjY2Nzc3QUFBQ0NDRERERUVFRkZGSEhISUlJSkpKTExMUFBQUVFRUlJSU1NTVFRUVVVVVlZWV1dXWFhYWVlZXFxcXV1dXl5eX19fYWFhYmJiZGRkZWVlampqbW1tb29vcHBwc3NzdHR0dnZ2d3d3eHh4eXl5enp6pKSkp6ens7S0uLi4urq6u7y8vLy8wMDBwsLCxcXFxsbGx8fHysvLzMzM0NDQ0dHR0dLS1dXV1tbW19fX2dnZ2dra2tra29vb3Nzc3N3d3d7e3t7e3t/f39/f4eHh4eHi4uLi4uLj4+Pj4+Tk5OTk5eXl5ebm5ebn5ubm5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////tMWYmgAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMXZ2ePj6/7+Nos3swAAAhFJREFUeNplkb9u1EAQxr+ZsfeOy4UEQgVFGgpEgwRFJJCQaOgo4DkoeQBegQZRQMdDIAJ1mkCBlEAHTRAIisv9sb32eofM5g4t5LO1I+/8xvNphgAQ23lWGhUggEdCFs/kta8iCqA893TGwkTMMJIBSrx70nkD4OZTFpESQkkpb6wDDCDiQk5Uj5lhjx+cmmIiA4wS02KDmEyLgcAIAZYAiYOg5iVQbXFyTSsgNev7uutKkEi3aEvrZO+qRZh47+eH+6ogvtnGS+PxiPI/0Ba0O7j+JV1e/Xpt02IGwGZQfD56eJHB/NLfMvs5QHwiFAXYXDrN55oANsXt+z+Zyeh4ClAGADEGP2vAYOG2J8a/JqOPU/3x6TAqseLX0BUFZS3ACIAOLUspEUOZA0TlJsbv9na2GaDXemUDtjPNAGbh0K6XIKt28p9JSnvrg0sb8N4uFXmLNKjQcCrzPbeFKkA5gBBu3H7BqkSPvj3TxxwjnOoKaCezqqr2GjXgsPO67wYXhs8DlgCGlyH9/s49MS/1wZ3vawv9HZu6S0CSkKwzCQjRjcLsiArZnTcRYJgs0BalD41uOnlwd/B+XrVYAcn+eTug2spC5x93m6rBCiCY1lLUGIad+/DWH1fZLlZMAmKs3ZvFrMIK0DS0DAzYnVZ1NskgSrTcv5K4V+1x7bOKYrQmyNXWTYcMQCGEXNpF/NUfHOLOAD4Sda4AAAAASUVORK5CYII="

/***/ }),
/* 2024 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAASzSURBVHjatVdLTxtXGD0zfoENCSDyoBDesAAUZVEp6qbbLOimUtMiVUJikXaZVfsTsmz/QR+r7PIjWNBuSltFaWrEw2DMKyZg8fSM7en5Lp65Yw/GY7U98qc7o7kz59xzv+/ea8NxHLgwCDamXOL/gZBVHB+pJ4DcQtxdjYj7/D8mLzOOJMhbARGFRowxcVwo/GJbliiC4Qbgv69V5t6zdeH2r0ckEkGyvf0jAL8zilqARty2bFh2qUqmwzQ1kboKtg3Jjdo2Dh/Mun7ChoODfSH0R60g07y2NWuudRg6NI9C0AFF1tfXp18KTkU4F4JOKHEBPkbArr29PZju6MKHdqGRE9Bo6ICo7u/vVy/bto319XVYluXaVztifa0I2xIJjI+PIxaPX0vGbzQXICPPZrMYoAiSq7a7uxuVSkUFIa0XLCcJdX16eoq1tTVMTU3VM4cXIF0Gqg6UbFuRl0ollyxA7hfW0dGB4+NjGJqwdQcEuVwOAw8eXK0c5TKiUdXNI2RbEy6KluURMVqcAt1LyL2PXFwW8ffPPyF56xYisRgK29u4KBSwkk7jslhERdyhyDJFfvjNtzg6zAdIE8yNiYkJxOPx5gLkhW2SDA4OeoqHOjvR1tUFk6PtHx3F6+VlfPriBXrHxkLnxurqKqanp0MJ8Miv6B30vH2LGEdRzmRgcqSp9++FvKXcoIjwSZjd2sLQ0JC3hXQ8fIgIHcDjxwA/lHj1qtXc0PdhkpDkOpH4M3t7AYYn8tEjlRubP/6A1O3bKm9OKPoMwOHmJqIkK9OdEonLzJuPv/seGiGScJMfGx4evhIgypkTTi6nM5kfFwzcu4cUhTks1wrz5DyfxxGnJ9nWhpgkbXs7sktLMHQFhJuC4aoDYIi1q0+ewI+tN2/wASjs5UuAbpjM7gid6GbfxLt36H3+HGUSO1zQkhzAZTTaWhlu0saRkRG1fhOqjPyI0Vbh7+rpQVTc4EjB0Tt0TvLFoPXRu3eB+/fRaZqchqjOi1AOkJxCpG4le1UWu+BH5GChOkbplDk5CYfrAu7cgcPAxQUgoriCOicnMDkVjq6QcA5kuAeMst65eKi1vUACP/IcLcRa2m7wmRAaFCsbUooiDFpfoUvO+Tm4t7NiKrKxqbIlHIkbHRD7jaoD3Fi8udOnI1ON5uDpU9QhYLPcJku2CJBdVR6WmpZhJpMRB1zS4JmvQW6Q3Gv9ixJHzsEksLi4uAQgx7BvFEAHNFEQypmzszOkUqlryU8494eHh7JQSf6IAE7lamZ+fv5rALtyIr5RwMbGBsbGxhruZpNMvJWVFUWE6o7JECKxWe0lJMM5c2BnZwe/LS/v8/5zAGskt5pOAe2vJw6U4czMjDdikguxzLM4o55fsBp2d3flUJP/6tmzzwD8xb6XTc+EZJOX4MNNYgIbEUXI1Ai5VFB+YWHhSzr1J/udhd4L/AnYBIENSAQkk0mk0+ntubm5L0j+GsApNBo5oOsz6EB4NxiSQyuzs7OfkPwP3p84RNjNqBQxTTnZ+o9Vug0SeusCV0cJhwePX0m+INXM50U0RPDPqYjpZwxoYS3DYmQZ+/yuDSKsAL+IiFz+i3/AtqrzkPgHhk7ECDfBDlsAAAAASUVORK5CYII="

/***/ }),
/* 2025 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2026 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2027 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2028 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2029 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 2030 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAd1QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztLS0s7OztbW1uLi4uLi47u7u8fHxmb3yn7/voMHyosf+pqamp8r/qMTvqMv+rM3+rr/XsND/tcbgtra3ts3ut8bduMjfuNT/urq6u8DHv8TMv87kwcHBw8PDxcXFxdPmx8fHyMnJycnJycnKysrKy8vLzMzMzc3Nz8/Pz9DQ0NDQ0NHR0dHR0dLS0tLS0tPT09PT09TU0+Dz0+H01NTU1OL11dXV1tbW1tfX19fX2NjY2dnZ2dra2drb2tra2tvb29vb3Nzc3d3d3t7e39/f3+Dg4ODg4OHh4eHh4eHi4eLi4uLi4uPj4+Pj5OTk5eXl5ebn5ubm5ufo5+fn5+jp6Ojo6Onp6Onq6enp6erq6err6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+vcVAGwAAACh0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ4OPj6+z+/sGN8s0AAAI7SURBVHjabY/dahNRFIXX2mcS27RWhGLFohShZJLQm1IKpYZS730Rr73Xp/AFfAfBO0tbraiYgj+VXAglSRtqlTSTmUzmz3MmJDNIN+yLw/n2t1gWAApx3SRxAmhASorgNf9J5MYGKMw+64sSUgSGFIApX3wR+AZA0RmIKKWgmM74n2ARaQQpP9cad9QRgdJdwC2l6zwR0gCGWlNLK6oxA1i3gGC8gVYCY4Df1j8dh6VlSnsO7C8Qg9uMFDNgXVkqntskLytkoQwqGxCZAtaHDWUVRm+IblOhQ7IruMwbNmTxXoE2pVkWii1gFT8kA/B50+8qUVQdCs8EOCcuqjnDptxYKlgVilRIfQ1U8R2YAvJxSxssC2KuzwA5F/wmM2DLGGZsEdHXUkkNkgN4tK0NRSHNdQeCjuDcziKwbQylKokaILbeMoQZwHd1bSgJoLOlJUAL6NpJBjwyhvkqKNX0mjB+ZsB7Y5g32caAsaGMnIGpgTqfgI0kXk1GUc5wsGMM0/w4bA9xsVJMkglQF2OoUOcTWI0D70HoOq/Cac1DY7gpgg6A01E4PO1Ff2c8L5gAdWjDQoUUG/HoodvsB/OLr51hPAH2d7XBGTcI2wPv5OnVl33HHU0jdlKDbfonkXe/O+scHw7dYdbi7dggpkHQ8s+sxoHfc4H/DQTsKHCXI39v0HcxAXTbvd0aBCcCNP0Qv/58vXI9TAGE6jFrIAgQceS99HuejwyIvOcK+Rl5wwA5IHR9Ij9JEGePf9mW2sIussKAAAAAAElFTkSuQmCC"

/***/ }),
/* 2031 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2032 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2033 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOmSURBVHjaxZfvaxt1HMdfuSTt1mTtMlzaZHVbLaVQW1Z1MHTM7YEI6pOCiPRRTUVkIIo+1eGD/QEyBEHwRzcQtoJI6VMVBMfYsD/oollrZjfaJE23dU1zS9Mkdx9zIcnRA3eQW/AFH+6b5MH7dZ/LfT93LhGhhqsMoBhLmoMAupihGAK1cAUIVMtd+/0Jh2vAQ6NERAfwYOIF+kTkGs3A7PKLwBywA6CwmxaajplhFXBVqslYcxT+Zzw0gPqgQOzKGvn1AoUdHb0kdPTs5dCZAKF+P4rb1RyBh4k8v33+N8W80PNaJ52DATweF8bdux7LMv9lkl9WVEJD7Zw+9wwtbW5sEZFKAXuA01Il+83vIrrUKeY1ufzWrNyZUSW3IfLonkg2LbKVFMmsiGzeFdn4R+RBXOSP7+7JD2/MyvyVNbFiZBhZ1dz/7oB//CTMZOGFfeCCa18s0zsSJnjUh14C0UE00DVzLTqVz4dPPEV4+ADXLyxWQobf7sKK/Z/QRSW8IiGgaC784T1UwjWM4+519SjVtbGvHT/bz58X19hM5e0E7CX8B1vYSu5Yg6wSlZLqd26PwrH3+tj54Gs7AXuJw2WB5akUWsEMskpIrSs6dXpO+uj88SM7AXuJwEiQwT4/N75drrffKmEUQp32p8EXxMCJgCnx7PlevPObrM5umqFmywGbcHsBe4kTl4bovHyRR/cLZvv1BsIb3Yrb9nsonnuHW59GKeV0kMbCHc2C7uEOuj8Jc+v8TURvLNzxMBoc6aLllQ7ufrUE0lC482l46uOjxO+r+FIZfAdpCMXZ0w30vd7FX6lMfcfEHqmWc4HMCgQHgiSvZuB5P+r3V3kcpVJJMw5g4nESnluH7a0Ce/d7QXEZA6w+YTVNw5y0oKqqPjU1NQ0kgKIp4CBcK+lEL93m+Ifdu8Z7JpMhnU5X1l6v1zhz5ubmZsbHxz8DUiKiNyxQnvvcua6y+nOCjWSO4UiY3lMBaui6TiKRYGBggFwuRzKZJBqNLo2Ojr4P3BaRQsOXIP3mBX51neHAkVaGzoY58lw7VozWG7W9vU0qlWJxcTERiUTeBZZEJG//ROSQcrDEYjGJx+MyPT29GgqFXgX21XKs5eEJY1xvRVFYWFhYGhsbi2Sz2ZuACvbPhK3Ay+KQctu1ycnJG8AxoE1EeFxZBV4SBxSLxdLExMRPQD/QahNu1K6XUw9wCOh2sD8UgBUgbfhgjymAKeF28IomQNG8z+35F/XbMMHXtozzAAAAAElFTkSuQmCC"

/***/ }),
/* 2034 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2035 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2036 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 2037 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAoJQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxTMMJTcMKUcUQVcUWVsQYVsYWVsYXV8cXV8cYXcQjX8YlYMUnYMYnY8opZMgsZcosZcssZsouZsstZ8svZ8wvaMwwacsxac0xaswybc02cc88c8dDd9FEd9FFeMxIedJIes5KfdFNhdNah9Vciddeithfjthlj9lmkthqk9lrls92l9l0mNl0m9l4nN14ndt6ntp8oN59oseNot6Ao9+BpNWJpOCCqOGIsNWbseKWsuOXs+SYueWguuegvr6+vr+/v8DBv+eowMHBwOipwcHBwsLCwsLDwumsw8PDw+axxcXFxcbGxsbGxuuxx8fHyMjIycnJycrKysvMyuy3y8vLy8zMzMzMzM3Nzc3Nzc7Ozs7Ozs/Pz8/Pz9DQ0NHR0dHR0dLS0enF09PT1NTU1OrJ1OzI1dXV1dbW1tbW1tfX19fX2NjY2dnZ2fDM2tra2u/O2vHN29vb2/DP3Nzc3d3d3d7f3fLR39/f4ODg4eHh4eHi4uLi4uLj5OTk5ebm5ebn5ubm5ufn5+jo6Ojo6Onp6erq6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8vXy8/Pz8/T09PT09PX19fX19fb29ff09vb29vf39/f39/j4+Pj4+fn5+vr6+/v7+/36/Pz8/f39/v7+////vzBOPQAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAApBJREFUeNptk09IFVEUxr9z5s08n2k8n1gmZguLXIRR0aLULFLkGbWoiNokLcKgTauC1iFESREV0SKojSuxRSC4kIwnhlmkGIqBWhpSIr2/M/Pm321m4L2ZRR/cC5fvx/nOOXAjAIgJ/5NwBOACXCkR6D++sFXHA+TYUI4lJmKGRzLAPh89YxY9AEpem0CiefVP53RdjH4fiRMBHqvAjyBiqcs99eAkLKPVKCUykQd4FLu+H0KRGMUIXpbnlS6i9zvkjNGyZZuKevrD/kb4NSgA5M4Yu2omZqIuArEfgXIZq9K1PFMihoRSk6EI5kn95Met3k9KonamvcGzgwifoBPM3cRJIH/JIt8LV2B+8e3ALaZr4J3NNxVgYK71LlAGmEeWq5aZGS27fqWi10Er8RUKNSnxnvHk6FQHI9GPOwuEVO7C8FRbuMmZmoufpzv9/dTPglN1lycn2oII8M/EM3nt6yaMsUjOUteX6gaV5a3aoMJMJr9Ohpl8HenBaH1FrmBuCGPpeAhQnlba/aljSL9aXTsrj1e8keyrqbYAWNstv2xq+D6GhcXajj73KYEbf4hgzAccuUHtcepxIgTCc+E44h7s8KrdEycwez4c27FsB1EhSgAYI9XdXzarqtOnhg5uVOfzqIo7A1Z5TAl8HrnDDEvBFWevXsgaOpGumSUAIGA7QLJXXy+sLnJN5eO87pSBd/Gjw40J81CFC1jF7Fx/enYwrxrBJs8R9YEtmSBE0dCc7PwjXdWDKcTbJvwVTbl0DWRjn2Uk5h8WMyrKANCzDQQmGFHLzDpa4n4hp6IEeNPGAF9RAmA5T7KqhjIASxJU+guCpehtI6MVEQC21ishLEPTTYQASy0SwhKmEzz+AfwH8Y2SUemgAAAAAElFTkSuQmCC"

/***/ }),
/* 2038 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2039 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2040 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2041 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2042 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2043 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2044 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2045 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAA3YAAAN2AX3VgswAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAC/ElEQVR42o2VTWtUZxiGr8lk5mScSaNJNYkxE5BiQXQhKnRTN6679y+4bIUEgwQ3Ct24FIrajWAV/4MfuBCEQ8TSFD+KiTGtMbVJ5vucOWdOb55FzgTfGTwP78zD8973NTfvOTMzmABwMst+PL78CtjwY4BBsGv/7N3TJ7sVmd3LXtPrqf/zOT50A7wDk5RS8wC20tqFgoOTeNANIDXL+hmCFJKmcQDMlNoNlgK6rU7AjjmFpNV9FokzgdmsTF5hmzYRMXsYsZVNbS5ApgtQ5T0dvTcNUdHeOgWm2Zsa+yVYlSWWAVpsS5BjhePUeMMBZrRv2l4JsrJX1f9NR8aybAkReb5mjC3lqHOMTL8ENSrkhRlRf1jS1waNNStQVPcPa0y7ARaflzznK8YUeh/vGJTlW5nH1MVASdNVxvF63YWQdVmHqQA1k40yJWCOjlVGsyH+5SCJ8wy09TuJhE3JAE6xrFmRATN0iKXKs8kEuBO8YIW9EiYWMeGjEB4QmKxDhFJYFhwJVBu0ie2TEtUU47wXcJQlygwjgO1UDORMcIQHtA0SkSVHnSar7FFkz+YhG4zg9QJkOEosUWSCE5QFgYIAOVpaoYBrWmUi5yGqJigRqtqKPUlsqSY0h4Yh1mSsaRa4ANh9+IHfJM2rt3PY+TLnaKiqQAmPkNgBMPE5fN5q+AfjlCXNGiAxYY2AIhOGcQIw8TznaWj8iAIlvpMBEKLOn/ZMbhJJFbrPAJDkF67xxvoOi5xlwAANZmTdoqV+hK0aHccZGEaIKzzkPk1i1mUckmVbxiI5SowS0Pjv8nU+OgCWAWQ4w/cK+xfLbHGIPAhW5hvqvKZZ/Wmee37wGSAFJQYpcpQjhARU7aelhNkbP17kjl+DnoAEA2CdPdgBTVVB9rA1d4nbfhV6AjI7EENYRYTkeUs7mF1o/epXoA/AlQg6DBEFFxZaN/1t+CJAZtc/VY7J+tzV1i1/E9yA4PrjmVd9UiRPnlVvLH6CXoCNpYUlj37Xp8Waa/w/YhwbdUCeou4AAAAASUVORK5CYII="

/***/ }),
/* 2046 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAYZQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxqKiov7/AwsLCw8PDxMTExsbGyMjIysrKy8vLy8zMzMzMzc3Nz8/Pz9DQ0NDQ0dHR0dLS0tLS09PT09TU1NTU1NXV1dXV1tbW19fX2NjY2NnZ2dnZ2dra2tra2tvb29vb3Nzc3d3d3t7e3t/f39/f4eHh4uLj4uPj5OTk5ebm5ebn5ubm5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////UwgaDgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACLElEQVR42m2Tz2sTQRTH33uzG7O7uibVVig9VFCkWBBtDypYEIuI1YMHL/5rHvwzrGLx1IsexB9gsWippSFimpTszySzM76ZmGxS+oadZff7ed/v24F1AIAITi+lABgQvsBTdV2khQEc73lEghDZCXmxH9qOyqu+BdCJuySEcEGgraGOLKCJ4KKdG4LLDGOWQexrszl2M3pnDpFz/l4yuiXEGMA/iyBav4Nu/ehys6GkE143BJaAx/bLRMbCv+Bx/8mIeZYi6M+5hAEJ1o9DwkmH7TXCT7V+c7D8I7/1er7hBivBZATcY4d1jiC66dNTEy+nZ2guEJEFJBzXcPR+DFDC6od0tpd7MQVR4Kx4tq8Elhi4S9j3ceSMUwBuPUSug3N+4eTcjK0wDycjgAekN/XYrRK46ZmBrkZXzk8CmIVEG4SdGekC7iz+n0CXwPc7SIQ4gy7nLtn06Rlu2+HsshuXnorY3CAadg11zTXlsI6AR35g1U7oKNU+qxRUSoCIYA+k26pfPHRl4Xaqq1LB+0KPPnP7AeAqGQO8Bqrlx/FhoXSWyxFwn7UknzWpaQX89kED/Op+lhUjYPMJwLuFbyoI2/LqbgbdF93PP7N0ACNgja9nNgF0UUsbUfx1r5fkejykD+OT0UpK6X351Yuy8iTh7WO0dwsolYW7WZRqKIFHfJUmGewnqe23AKcKPf4XNIrKx16S9iaOushfCpgsmWeS9RJI8pN/dVE+/AMhqsJsIiBQAQAAAABJRU5ErkJggg=="

/***/ }),
/* 2047 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAaPSURBVHjatZZbbBxXHcZ/M7OXGa93vb7Ftziu65CmSVMgUCraCiqeaKNIVEiQoAqRB4IQAh55gBeeeIIXVAGPVaGqVAGCh6oSlELErZC0Tpy0sTe2E9/Wd3tvszNz5sLfK8eTdGu8qtS/9OmcWY/O953v+5/j0aIo4m5pmqYDgo+0QuEM2a09AUJuAJ1A10coIgQ2gS3hDQASxJUEjm2XSv9QnocoQrsLuO8ZQItt2x32ftl7//1lGAZtlvUk8DbQJEADUspTeMrfJYuh6zFRY9Y87kuu3T+m4mksIK4GWUwcIxbg+yGztzcpFDboyKc5cbyf7m4LXdPuFxJXk0v7Cfi/5G/8ZZq5pRphqLFZdihXXepOwCt/vElSh6H+DN84/ykGBnLwQU7oOk18TSph13J9j3xzs85vXp6g7GgMHu1n2Q2Z3HaZ2HBwMiZBOoVv6JQ0k5/88t+8+rtxuBtdDDQ4WADvI39nfIlfvzyOqyfoG+1l8IFeBo4NQk8n+ZFDDMpcl7nW0c7adh2lJfjrxAY//PFraNDk5EECYnLAthXjV1fI9nVh9OYYGJaxLUVK5vRkyQ3kWXV8NvyIxWrAu/ObXJ1eQ8+0MVms8dIrl5G1GtYLWhOgEcfw2utTaOk0qt3k+MkBNDOFI07MuBHDQ3kSbSZWJoETRYgwgYUu2K6LqKrixVevMDO7HkdwsIA4hsuX5yV7D9swGB7pZqwvh5YwSCYNHh3INp5HpdkKWx5K3nHRqUU6XuBLc9ao2KHEZvKzX/x9vwj2P4aa4PqNZcJUGt9IkMuZRBoQhtT9kB7LwHN9Joplggh8gS3PqbROoBLSC4rR4wPgutxeLeE4CtNMQgtNuKd0fnGbS1fm8WXuqhBxGSVMpgYpoFiqkdJCKkLsheCjgeQcGTq+62G1JTHSJoZlipu3YwdaERAEIfPzZe6s1vjbxDKFxTK+Cri2UGar5vLuchklxA/m03ys24JQBAq0iAbS1g65RULiMpIJxicWaF0AUCk7LBRL5GQXK2tV3pCjeEvEzK1XKCyVqVYdShUXbSeSmkdSj9DFokgQhhFKiRgiEROSMtOsb9TZrxI0l1yr7YxIl79drGNKV9fLNi/+6RbPf2GM6xLNOwtVVkoOgefj2B66p1COTyRZiH0oz8OtVeVvirbAZfTI4Xj3rTQhgv7+LNaKSyB5rhYlglDj53+4zrHhTuyKjeEFIDCEPPJ9jNAnDBShr/DckIkrdwgdl/5cgtPffqIhQBw6WIC2iyPDHaj/LJL2LfR0JEQeK0suZYnne8+dIiXZLm3Y/Pm/d6RhbRA3fDdADxDRfuP9UMRlzRSPnBwCaKUH4mP4+c8dZajTxJZudwXBTtZKMZpLMZAzSWjQk03z7OMP8NhD/RzuaqPN0EBIkwQEKsIykzw81k0ioTd2L2itCREBD58Y5BnJ3Eon0ZVPeV2ab73K7Zl13LqQaJAkJEXEydEuPnt6hIHeLMrxUDVxwAg53NfOj37wLEEQNBCGYYsOQAMXv/kUnxnL0pbLkNIhEwXYW1Ve+v0VOkyD4Z6M3IZZRg6149UdCjfm0Xc6P5vEare4+NVTtLen8DyvAd/3W3JgLy+5dvnOxSc41W2Q6MiSOpQnTCZZXq5SrTgkDXlH13CrDlYYYvXmyRzupavb5PzTwzzzxUdokMeIAB+I9mvCpmY5cWKIF376HC/86hJv3iyj9+c5dbKvscOKo5hfqWDL4tu6TjqTZDCo8d2vn+aTnxiiVqshtgt28g+5du3av4AFQH3QV7EFPF6v19+U3+79KNkT9dZbs/z29Rss2hHZnhxmR4a5pRKa5G5FiqOdCb7/rScplbZYW1sDIJPJkBTXpqenp86ePftloCDru00OHPT9tl3z0LvzfPzpRzHnVrk5Nct7l6bQ07r8qz7G2NgRHhrpYXa1ir1elFP0FLZts7S0xOTk5IKQnwdmAA+gxQji53wmxWNHd9BFpI0QBJ/GDyLEJIjE5sBHeUpIaxTWQsRJisUiMzMz61+TAiaBeiR18E0YRfu5sicukZTMkzQy9v2QQEbJGaUU2Wx7g1xs37hw4cLzlUrlKmDH5M0C9iU8qGTN+yCdjuTesP3cuXPnd8mrMXmLAuJqXaBcNgCI7VNnzpz5CnCreef73wMR4BsSqr4LIWjCvXXvaTEMA+n2qFAo/FPIvwRMHUDedAwTwOEGPrwzHjAHrAIqJm9NgAYYH548dlHWDGix/gfOjjq8OJgEtAAAAABJRU5ErkJggg=="

/***/ }),
/* 2048 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2049 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2050 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2051 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2052 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAkxQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u7+/vvr6+wcHBwsLCwsLDxMXFxcbGxsbGxsfHx8fHyMjIysrKysvLysvMy8vLy8zMzMzMzc7Ozs7Ozs/Pz0kTz0oUz9DQ0EsW0NDQ0U8a0U8b0VAc0dHR0tLS0tPT09PT1NTU1NXV1WIz1WQ21Wc71dXV1dbW1mc61tbW1tfX1tfY12o9125E19fX19jY2Gs/2HNK2NjY2NjZ2XRL2dnZ2tra29vb3Nzc3N3e3YZj3d3d3oNf3oZi3t7e39/f4JBv4ODg4OHh4Zh64eHi4eLi4uLi45l845t94+Pj5KCF5OTk5aOI5aOJ5ebn5qGG5sKy5ubm58Oz5+fn5+jo6Onp6bCZ6cW16enp6erq6rKc6sa26trT6urq6uvr672r6+vr6+vs6+zs6+zt7L6s7MCv7O3t7b+t7cKw7e3t7e7u7si57sq77sy/7uvp7u7u7u/v78a2787C7+/v7/Dw8Mu78NDD8N/Y8PDw8PHx8dHE8fHx8fLy8tnP8vLy8vPz89jN89rQ8+Xg8/Pz8/T09NvR9PDu9PDv9PT09PX19ebf9fX19fb29urm9vb29vf39/f39/j4+Ozn+Pj4+fn5+vj3+vn5+vr6+/v7/Pv6/Pz8/fr4/f39/v7+////XGd0rAAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAn5JREFUGBkFwUuIlWUYAODn/b73P+N9Llg6XeyqGVaQpiEuigiCooKgpEWFrmqR29rUMmjTpk3LaG8RQWpBKEFaIARpdDGcEhvNnMZxPOfMnDPn73kSUQIAALSjlqSsqSEAAGjble5I0qx+f7ZkNpGNIlQyYO2BwZJE59Lc8R0LF5rbfutMXF735NGcGu6nyA6SiNJ5KptH076O1LxRQoEaQcJYZJOZTWRGiRJSICGh8Y1Vl/bNzmzpbp2f/+vVMz8/++9w053rICHWPy872ZSoGRnl/ihQIWH1wpH1V/9bt+l8M93bc/H3tTnYMtF5aCogoYy9kNHUmk2UGqESqJAgIppam6xVqYIKAQmxcAwcnDg605/cu/PUl6/fApBQp/aVn9pdOf7FzK7Nv3w+SQYKJDRrH6jnh7vL4rlHnvbw8Y2XKSiQkKUkpVxp76Y8oZEAEtSmqcNSG21QoAAkRESlxq31jwfF4b0VQgsJJZsg6prtP45Nnzm3i7PzbCuQEE0pVPHikV9Pb3z5nqu+xjtrIKFElNcC9TlF2LN7NGoZQkKU4sPJQefShok7TmwKBz/uXpkeX7WzbUkIpR6qoru68VgYDF+60e8Pl98bIkHlkwu3z8ZdY/PN382bH8zeNHfz1GS/NyABcUAohVhZWdz/7eky7J1a7I9I4NgzKAijpesXf/joyqcnF7vLSFB2EhDatn9jbjT32ff9bh8Sot0MCkbDbndxw+FTS9e6IIF37xubPrHtn8Vhd/LQV5f/vPe7G9e7QNK2vDUuHi9FxHJ/6/azJxe6PUBi2FkZD0VBW3LH28vXeksAyUrvlQoAlnv9AYBk2F0KANAORgD8D4ZAzDGKsBXaAAAAAElFTkSuQmCC"

/***/ }),
/* 2053 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJ+SURBVHjatVfBbtpAEB3bJVIgl57baz+iEn+AuDaEnuilf9ocqyQnCKBKDSCkoDaihcZrvJ0xWLN0up2O2jzpaQc8+L19610g8d5DjQSBQ0olPA1IrPSBKBmoxUn4+YFZff0/i++QX4ioWwLiGTAayFdfHx4uXZ6TI0hqAoSvj53Vr2kMXSfSe5Zl0Dw9fY3lR+QjG2CcuNxB7oqDGDNNWaiq5BgVT47HE2AcGUgqVmI0SCJEHYzSCCPsS/iyTCAiLpZCT+F3SaQpMKQBjoFS2DdbDPAozXCtGYC9OMdqTSGs5RLoBki8LEu+qWIgMBoX556/XAKeOYv9KiprFuHamAB3EmMJaLtC1DYDoZhmILIMCpQlMBhAKlHbE7CIGyK3GIhQF+favgTSuUbjE68bkDvALK6vvffedg6AIm5ZBvs2pFJ+2JJAbNZ6Al7OHiSkeCga0p6A9/XsRfRaGvQ9EjI0kWVZ5Y/45wRCYYYqvtvtSJRGIptgA1QU+jbU1zc686IowDkHeZ5TfXh/n8L19dUHbJ0hXdSA/UiV4qvVCpbLZdXXbDah0WjAZDIZdbvd99i+QDOlYkCbsXzS69hp5rPZDNrtNmw2G5jP5zAcDu9QvIetE+zNIUCqiGtmSFwYoMi32y0sFguYTqf3/X7/AltH2PcDGBEDQkwIi9mHTz0twdlZi8Qp9vvBYPB2vV5fYd93EDA+AxJyz1MCrVarir3X652j+A22fdMOIt6fArY0EBT7qNPpvMHyFt/bWE7CIktTupFy9rNg/RMe9zjRj8fjSxR/BwCf8PojRCH/nJKZF8iXbMyMHPkZucT7OmCoBkITGZX/8A/Y8T7X8ROXe032YXV5wQAAAABJRU5ErkJggg=="

/***/ }),
/* 2054 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAA3YAAAN2AX3VgswAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAC/ElEQVR42o2VTWtUZxiGr8lk5mScSaNJNYkxE5BiQXQhKnRTN6679y+4bIUEgwQ3Ct24FIrajWAV/4MfuBCEQ8TSFD+KiTGtMbVJ5vucOWdOb55FzgTfGTwP78zD8973NTfvOTMzmABwMst+PL78CtjwY4BBsGv/7N3TJ7sVmd3LXtPrqf/zOT50A7wDk5RS8wC20tqFgoOTeNANIDXL+hmCFJKmcQDMlNoNlgK6rU7AjjmFpNV9FokzgdmsTF5hmzYRMXsYsZVNbS5ApgtQ5T0dvTcNUdHeOgWm2Zsa+yVYlSWWAVpsS5BjhePUeMMBZrRv2l4JsrJX1f9NR8aybAkReb5mjC3lqHOMTL8ENSrkhRlRf1jS1waNNStQVPcPa0y7ARaflzznK8YUeh/vGJTlW5nH1MVASdNVxvF63YWQdVmHqQA1k40yJWCOjlVGsyH+5SCJ8wy09TuJhE3JAE6xrFmRATN0iKXKs8kEuBO8YIW9EiYWMeGjEB4QmKxDhFJYFhwJVBu0ie2TEtUU47wXcJQlygwjgO1UDORMcIQHtA0SkSVHnSar7FFkz+YhG4zg9QJkOEosUWSCE5QFgYIAOVpaoYBrWmUi5yGqJigRqtqKPUlsqSY0h4Yh1mSsaRa4ANh9+IHfJM2rt3PY+TLnaKiqQAmPkNgBMPE5fN5q+AfjlCXNGiAxYY2AIhOGcQIw8TznaWj8iAIlvpMBEKLOn/ZMbhJJFbrPAJDkF67xxvoOi5xlwAANZmTdoqV+hK0aHccZGEaIKzzkPk1i1mUckmVbxiI5SowS0Pjv8nU+OgCWAWQ4w/cK+xfLbHGIPAhW5hvqvKZZ/Wmee37wGSAFJQYpcpQjhARU7aelhNkbP17kjl+DnoAEA2CdPdgBTVVB9rA1d4nbfhV6AjI7EENYRYTkeUs7mF1o/epXoA/AlQg6DBEFFxZaN/1t+CJAZtc/VY7J+tzV1i1/E9yA4PrjmVd9UiRPnlVvLH6CXoCNpYUlj37Xp8Waa/w/YhwbdUCeou4AAAAASUVORK5CYII="

/***/ }),
/* 2055 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2056 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJxSURBVHjatZdBbxoxEIXfekOllOTQnnvunyj/ACH1FJGqF079pW1vlcoNKByqCKRC2kZUgHYXuzMCy1Yma5tFGenJAyL6nt/YZMmMMbCVZZkCQHrW0sTU9gUbsPAcwCvS62c0weDfpD/E3YPqAq5apLd/Hx4+l0XBjpBZAf7rg2EXm90AbNnPP648z/Hy8vIdgG8kYSAjvSiLEkVZHWFOSjkQd5BrLTzzVma41hlwdYDRIkUlem+VRlyJlOoMSLgcRVoKTyWhVNxAxuIUDh9OMSBXaUb0kREoEXmyCds3H4GC1toDBQ34RiVc3pTEEbidO9hjqOwdRPZRA9KxD5cGxIjC8HQDAho0IMeAWMVHkG6AFYq6UQKnwFMib2AgpDic+wYjkM6jSj/x6QbkDUiHJ83eGHPa9wDC8NgYzryG3Mo/Pi0Bueu0BIzcPURJuA/11SABY+zuRfSxNLTWvqwJ+0SUmIAPdhWF7/d7hvJqe5ZvgJuKEXUGUudbu/OqqlAUBcqy5P74PqegMRwOvwK4I5VBA+mnWcIZvFqtsFwuwdVut9FqtTCdTse9Xu8TgAU/EQcNxHcsT7qNfbfbYbFYoNPpYLPZYD6fYzQa3RH8FsCMVMArFYTHzTDcN8Ap0Kqx3W7BRmaz2eoDFYARaWuowgYETIDF7v1TzyO4vr5iOMd+PxgMPq7X6+8ANj78nDMgDPjiA8hz59j7/f7tEf5PwIWBaMUN8gioOPZxt9u9AfDjqZ3XjcCQqlwpqIPkPyIZv32E5zvOp91MJpMvBH8PYByGyx+nnMYb1hnJFKSfpF+kUsAjBnh7eXO4S9Hd83j9B4jtTPNr32b+AAAAAElFTkSuQmCC"

/***/ }),
/* 2057 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAQwSURBVFiFtZdNbBtFGIaf2V07iZ02/IgitekpFBEVgVSQIkIOpYBAsiy1FwhBQgoHeocbZzhw5YjgjrhRiAqCQwMSVTmQpBESNrFFoYmxaEhbJ3ayP/NxsNdZ787aLoKRRjve/XbeZ76f2bESEcKmlFKABSj+nyaAloioCsdKKQu4v9Pt8Pl/LB4AO8COiGgAJ2KQAU7dvnPnque6oBQq7G3C7u8esvC3OmRVkfvRZts2ubGxZ4AV4CAOAJD1XA/X8w/FO92yDoW6QLFrmrjqvWajz5yYnaIjFgdQkZWq2KqVQdwUu46dij6OeyBVPBGKQV4wecKyElAJANUhtTrG9wqQyI3Y3AMB6IjHXT40RHzcM3XyriEEFlrrROanAcTzwChuqJRUgDBDuslmAOjej43jInHBoQC6xCbxiGi/qkgTGw4grQJMAGlhuIeWDEGKMIFGKQvlWIm9gb/30LsHWMfvQ3XKGDtZcibAhFVyxQr90w3c95eQu60k2E6T5kfLeN+XsbIO7LnsfvgN3trvKMybWX8PRLpU/sK9tAr1Bs65x7AncgmvtD69BlozcuFMe0VHRsk8cZLWZz+y/+3P5M4/hfPIw8OHIPSCf2kNf7lMZnaK7MWzWEfHEis5+Godv1In/9Zz2EfG2i/bitEXTjMyM0XrixXufrDE6Llp8guzRgBToHrr1pQPQFD+k/2v18k+e4rM9PFE+ADwA8T1QUtqgqaGIHvhDPrJk3ifr9J870uyz08z+uLj4Chk94C9j7/DeugoY+efPoQF8DWty2s0l1Zxjk0w8W6R7PSJXpt+ANFdzpk6Rubtl/BXbuBeXmdkZgrrwXF2P1lG7+wx8c7L3aoIBYI7Tfav/ML4G3OMzj6KIERPXQm5yIloFJhpNptXtLRdZiXKUEEg+JU61kQOZ/KBxB4gvka0BsdCpFdcKUUmkzkLXBOR/XQPiPRsrUopcOzOFbKnJ3tEo64VCzSgfR+tdQ+EbdvQPpp1qYw5IFHhBJ/5MAIQBAFaa4Ig6I5DiA6AAH50vtQyTBNMswvFfN/H8zxc18XveEHrtheuX1/7AdgEvL4AJoF+9+Pi29vb1Ot1lFLkcjkymQyVSqVcLBYvArXwRNwXYNivGYCIdN3uui6bm5vMzc3RbDbZ2tqiVCrdLBaL80BFRNzou8mNyCDUDyZMsiiA1kKr1aJWq1GtVm8tLCy8BpTDzO8PMOCTGocRkW4ItNZ4nsf4eJ5arUalUrm1uLj4eqPRWBORPdN8/yoH4gDR7rou+XyeUql0c35+/tVGo7EO7Ka9HwXoqc9hmskbANVqtVwoFF4BfhWRZr854h7wbau9g5mOWiZBpdqnaNu2sW1bNjY2rhYKhTeB30TkYOAiIluxA5wAJg1gwzYX+AOoi4g3yLgHIAJhY/4PMUwTwIvW+aD2D8kD17p7lWumAAAAAElFTkSuQmCC"

/***/ }),
/* 2058 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2059 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2060 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2061 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAATeSURBVFiFtZfLb9tGEIe/ISVRli3Ljh6xIL/koOgp56L9B5pDjB7rpqec+hfmXPSSHIuklzqFHNuyIyetrAf1sLgktweZNCmJtlq0CyzI4a52fvPN7IoUrTVBExEBDED4f5oGfB1xKsG9iBjA5m03g/H/2LkHdICO1toHSEUmpIEvur3eG+U4IIIEfaowtGPKAlvutErkebSZpkluZeVr4FdgMisAIKMchaPcO+e33TDuHIWCZq5JziV+zUTHUjPzBBE+f/5EtVrlotkkv76OiPDz+WMyhhdOrlg9arluaI/HY1ZWVhbaw+GQp0+fBpQkommOAIYhVKtVRIT8eoFHjzYREYr9Ndasu8gsZ4hlWaGtlEq0lVKIYSCGMetuXoAAV1dX1Go13rQek+2t4bhQynSpraXDWvjz/IrsZvH2R4LjOKzkcmFoSilyq6sI4Ps+RpCqhwQgQq1WQ0TImh7ZtKA1FDI37GyaYY6HLY9SqRTWgGEYlIp3gkRkOh4uK7FCTRRgGAbNZpPtWo2MusIaXZM1DEbtK34fGWEUjUaDra2tcNF+rxcryn6/H44NhkPKlcpyAgTYviWwvWqzsbFBKiWIbFEslaYVJMJWtUqpWJwuGok43KYilMvlMChjWQIAl5eXbO/sMJlMsG0b0zSnCA0jFBBEHKDt9XoYkSLr9XqhQ9u2KZfLSwoQYXtnBxHBsizy+TypVArDNKcRRpyWyuWYHUQctFl7UZtPgQgXFxfs7u7GCAQYgzmzEXe73dgaUQKDwYDK0jUgwu7u7hyBVCoV5nh6MhqxCBcRqFQq4djSu0CA5vk5e3t7MQJhHdz22YgDO3DS7Xbvdki/n5iOhUW4t7c3RyCdToeFFCwcRLiIQNROin6xABHOzs/Z39+PEUilUolVLiJ0Op2Yk06nE973+30qlQrRd49EAQLsLyBgWdZcREkEFhGKPn+YwNkZ9Xo9RiCdTscWieY4IBBtswSWrgEB9ut1SCAwe9JFowoi1lqjtaZYLKK1xvM8PM9bnsDpyQkHBwdzBJbJudYa3/fpdDoopYDpSVgoFDBNE6avZmExLCRQr9cTa+A+AsViEd/38TwPpRSFQgHf93EcB8dxME1TA+79BIDT09M5AplMJradoucAwPX1dYjadV3a7Taj0Qjf9xkOR6TTGd69e/sauATUvQLq9TpAjEA2m42dA9FdEES9sbGBUop2u02n08F1XXK5HPn8Gu/evX1/eHj4E9AK3ogTBXz48IEnT57ECNzc3CRWfZDzAHWjccKzZ98yGo34+PEjx8fHF4eHh0dAQ2vtPJiCg4ODRAKBACA8XIKcr6+vMxwOWV3NMR6PabVanJyc/PXixYsfgPda65tZXwt3wUmjkUggcB6tes/z6Ha7KKWwbZtMJkOr1aLRaLRfvnz5o23bb7XWw0XB/mMCs/s+KDqlFPl8Ht/3sSyL4+Pji6Ojo+9t2/4NGCzyA/FPMwv4anxz80tAoN1ux5DP/qmISKzylVKMx2OazebZ8+fPvwP+0FqPkpyHCG9FWMA3juPoyWSiHcfRSimtlNKu62rXdbXneWH3fV/7vq9d19WTyUQPBgN9fX3tv3r16jXwJWAFa9/XowRSQA3YTkrNEs0BmsAnrbV6aDJEUhARYfLvv4o1oKL7/KH2N0TMnneQGI84AAAAAElFTkSuQmCC"

/***/ }),
/* 2062 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPcSURBVFiFvZfta1tVHMc/J03ars3addinrG6rpRRqy6oOho7ZvRBBfVMQkb6qrYgMRNG3OnyxP0CGIAg+dANhK4iUvlVBcIwN+0BX7Vo7u9Emt+m2tmmypE3uuT9f5KE3iVmbm9UvXHKS87vn+7nf3HvOuUpESEsppQAXoNgfCWCJzVSl20opF1CXOsrS/U/YXAPrwLqIWABuW4EHaBeR60/QNE9KqReBSWAbknHbVb6f5v/lYQdQ7N9/b1eWT24C/7vcu5fkK/IwzuzVFbZW48S3LSxTqG09wJGzdTR3eHGV7T3IogDW/Vv89vnfJLaE1tcaaeyqw+1WKKVYnQ0z9WWAX5YiNHfX0Hv+GcqrynYfVERIPYqVQK+kFP7mdxFLMkpsabny1oTcHY9IdE3k0X2RcFBkMyASWhLZuCey9o/IwwWRP767Lz+8MSFTV1ckV0AvUJn2LZiAd+g0jIfhhYOg4PoXi7T1+Wg4Xo1lglggGiy90xYr+f3oqafw9RzmxsU5RISet5sKBlD4JlQkzcfDIODSCq+vMmmuwTLJbqc+JdVWysXJcx38eWmFDWPLAUAOhLe+nM3Adp5RHoRO9omGMreLE++1s/3B1w4BbBBH68tZHDXQ8WwjO4SkU7F2Tm89XU3jjx+VAJCCqOtroKvdy81vFzPx50JYJskZP6Wap6G64fFD730iUvDshTY8UxssT2zsmNoit2sv5sUBpCBOXe6m8colHj2I78RvZZft1bx4AKDqkJvE+Xe4/ekMZtTKirxYc0cAAC09tbR84uP2hVtZV1+suWMAgK6+JspfqeXeV/MgzsxLAgA48/FxFh5EqDZCVNc7G6MkAKWg/fUm/jJCmRlzDxJslSUBhJagobOBwLUQPO8l8v21x9abpqkB0/6bo/1A2jy6CrHNOAcOecClkgsYyRVWa21faYlEItbo6OgY4AcSJQGkzbVpMXP5Dic/bMn0iQihUIhgMIiI4PF4ME2TycnJ8aGhoc8AI70jdgSwcU+4eyPC8s9+1gJRegZ9tJ2py/RbloXf76ezs5NoNEogEGBmZma+v7//feCOiMTt4xUFEHzzIr+qsxw+VkH3OR/HnqvJq9Fao7UmFothGAZzc3P+wcHBd4F5EclflwvtiJwqFovJ7OysLCwsyNjY2HJzc/OrwMG0T+7h+CYsJNM0cblcTE9Pzw8MDAyGw+FbQKTgCbYEKoCXS03AMAw9MjJyEzgBVBW68oxvDsBLpZgnEglzeHj4J6ADqNjNXESyXk7dwBGgBefzQxxYAoIiktitGGxvxzaIMpy/ogmQEMndIRTWv/XbMMH4qq7GAAAAAElFTkSuQmCC"

/***/ }),
/* 2063 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAgRQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxMDAwMTExMzMzNDQ0NjY2Nzc3QUFBQ0NDRERERUVFRkZGSEhISUlJSkpKTExMUFBQUVFRUlJSU1NTVFRUVVVVVlZWV1dXWFhYWVlZXFxcXV1dXl5eX19fYWFhYmJiZGRkZWVlampqbW1tb29vcHBwc3NzdHR0dnZ2d3d3eHh4eXl5enp6pKSkp6ens7S0uLi4urq6u7y8vLy8wMDBwsLCxcXFxsbGx8fHysvLzMzM0NDQ0dHR0dLS1dXV1tbW19fX2dnZ2dra2tra29vb3Nzc3N3d3d7e3t7e3t/f39/f4eHh4eHi4uLi4uLj4+Pj4+Tk5OTk5eXl5ebm5ebn5ubm5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////tMWYmgAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMXZ2ePj6/7+Nos3swAAAhFJREFUeNplkb9u1EAQxr+ZsfeOy4UEQgVFGgpEgwRFJJCQaOgo4DkoeQBegQZRQMdDIAJ1mkCBlEAHTRAIisv9sb32eofM5g4t5LO1I+/8xvNphgAQ23lWGhUggEdCFs/kta8iCqA893TGwkTMMJIBSrx70nkD4OZTFpESQkkpb6wDDCDiQk5Uj5lhjx+cmmIiA4wS02KDmEyLgcAIAZYAiYOg5iVQbXFyTSsgNev7uutKkEi3aEvrZO+qRZh47+eH+6ogvtnGS+PxiPI/0Ba0O7j+JV1e/Xpt02IGwGZQfD56eJHB/NLfMvs5QHwiFAXYXDrN55oANsXt+z+Zyeh4ClAGADEGP2vAYOG2J8a/JqOPU/3x6TAqseLX0BUFZS3ACIAOLUspEUOZA0TlJsbv9na2GaDXemUDtjPNAGbh0K6XIKt28p9JSnvrg0sb8N4uFXmLNKjQcCrzPbeFKkA5gBBu3H7BqkSPvj3TxxwjnOoKaCezqqr2GjXgsPO67wYXhs8DlgCGlyH9/s49MS/1wZ3vawv9HZu6S0CSkKwzCQjRjcLsiArZnTcRYJgs0BalD41uOnlwd/B+XrVYAcn+eTug2spC5x93m6rBCiCY1lLUGIad+/DWH1fZLlZMAmKs3ZvFrMIK0DS0DAzYnVZ1NskgSrTcv5K4V+1x7bOKYrQmyNXWTYcMQCGEXNpF/NUfHOLOAD4Sda4AAAAASUVORK5CYII="

/***/ }),
/* 2064 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAkBQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxOTk5Ozs7PDw8Pz8/QUFBREREREVFRkZGR0dHTExMTU1NT09PU1NTVFRUXFxcYWFhYmJiY2NjZGRkZmZmZ2dnaWlpbGxsbm5ub29vcHBwc3NzdHR0dXV1dnZ2d3d3eXl5enp6fX19fn5+f39/gICAgoKCg4ODhISEhoaGiIiIiYmJioqKjIyMjY2Njo6Oj4+PkJCQkZGRk5OTlJSUlZWVlpaWl5eXmJiYmpqam5ubnJycnZ2dnp6eoqKipKSkpaWlpqamqKioqampq6urra2trq6ur6+vuLi4vr6+vr6/v7+/wMDBwsLCxMTExcXFy8vLzMzMzc3Nz8/P0tLS1NTU1tbW19fX2NjY2dnZ2tra29vb3Nzc3d3d3t7e3t/f39/f4eHi4eLi4uLi4uLj4+Pj5OTk5OXl5eXl5ebn5ubm5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////f89bEwAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMXZ2ePj6/7+Nos3swAAAhNJREFUeNpt0LtrFFEYBfBzvjsza1aMmwQhCKIQQYTY+CTYqXUs8gfo32Jnb2MjqLHUJiIKpggBOyXiM2nUqCALrtnd2XnPvWZu3HlIvimmOL97Lt91AFCI/cZoA+wCaSuC++QmD3QB3Ik7Q1FCiqCQAtB672YaFwCevwuUcqBoB/0p3cMR0AMKQIqj1C6BCIqPo5nv+YxASAsAm9tLaCf69mRxBlDAP0DlQkkF4ufJaQKsgFvUV2Lz92RxWkrgZOQYCOTNR68lYK2hiFkAS8yatDwF1ABYEIsg8jg/5ntsAJvuAXJ9a2FzwkUxJZAaGL07deWrqGZDveBZa4kHWroJaMfmq72zghbjxhVVBbs/j18iHG3YACT93iBM83RrOLzrun4nBQhTA3J4Wki8yKbNKE+jP86rQ7NTbgWK8u2L/PzpwlUQfNR1Lxs0GiizndVraydsjjREbv7bAmwnK/q6zRFFKtYanjFjABHg15clZfO8G5sg07iVlWvqD2e48n7+HMBc6Y2hiX9onUdhOgZO++V6H1v35nKjk9c7qXafnveW/UiPAeZOzu8cbTsuiHwh6G0vDjYe+EFSvSTyducg7esYL9Piv12OgqjawgCTam8vo7MscTcexv0AJSj/Fmgde/dHw6AMjEE5tiTD8iAIayczZUjQhobKu530wxgVyMMbCvVJwihFDWRBzAYwqUY5fwH3Hc82isBgfwAAAABJRU5ErkJggg=="

/***/ }),
/* 2065 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2066 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAWKSURBVHjatZdLbBtVFIa/edjj8SOxkzYPt2nSJihNS0JEqwAtDyGoQKQ8hEpoQUJdAGKBKlZddg0IsUWoYgELJIRgBUIsoKqEikoIbaChYOMkbdK4eTaOEz9mxjP4WsS1cRRbKfzSr9FYd+757jnnXs9IjuOwLikvQOb/le2UBBUApcFDQEMJhMR/JwewgSXg1jqEym25gO7lROKCaRiCCGndUHpfTrZ+L66l1FIlu6IoeHX9EDACGEWAUgjTMLn3VIT7xj6jKxklY11BNRIsBNsYVwdonTZxZwx8dUGMzhamtR/oly7j9zexMuEQ9vkJW/fzXmg/s033UKqrZwv3LooqB5CEBXl9YpywkcSyfsP2uFhpa6fRGoeRbuRcDqGgY7NzweZgoJPrB+ZpXZmi+YEwrbMm4cZG/Ak/84pMqUSWinGENmo4WZYYuHkRU7uK5XWjbUsSzE2y5O/GdimsS3NrqI5MLLxMe3gas3c3vftBebyPTGeA/pXLYq4yS3JFuEoASdi9iLthhVRLC1m1nmRjPQF9HEU1bgNoGlnFzZfGH3wZf4q9exIovX30H+5i9LfveKZT55A7jqzIRUtQHUCUwPGuYtdnWPJ4yYUsNCXJaK6HNTWAkMvlQnO5WcvbJ/uYWBzj42uP0t/TyOyaQk/fNL7mBAGXJlZddGmjblICmaxeT0zdwdW0ilte45yxj2hyjpxLKqZfcWR2rJqcjr5EQ3A7RtjPpeU+vrpwnqXmvWQbA8zIoZIM1AggAde2P8GiU0frYiej14+ykJ4nZLfgXUkh5NEKAKh5b0s5vDr7Ch0dHXz6bpzJ0D34mnaQ2t5HxPYgK1LRGwGobKAlXx+uXJT2m1O4sibJnj3c/bOO5Fj/ZMAtghcgXJqbQ0t+Qm852FIHF49N0drWypnPdyLLFbugth6QFBkr+CyZhm1oq6v0DovgcKtBZ6rFYabZIqPYBQCtzsPc3BwHIzre3XUMtHfz/rkwsaRfzFNmoDqAoBTksuKBfV3Yfh2hjK7hNiNccbx8FGzgA/cIaxpks2kaF3S0Nj/e5zXCUZNL14JijgrX1gPS7Zpd33OYxMNJXFKOXmmYkGTzdGKENy/HUDIxvm39Hs+Sgtzsw3rVooNZPhzxi2c3cu1NWCRWVW7sPcVaVwNtjdtZu2uO7mCYe9U4aUscxwqpNp3U2Uy+cUd5f9jL72aLeHZDAzU1YVm9LGU3Y8+dZn7+DGOXE4Qei2CnbFriHQT37GfsdQczssoXfx3D0vPQVFFVgEIJ/kWreFjc8Q7m1bf55KcJXJqXXQND/NT0IMYvDlbOAXVrLxLqxiWoXIdjZQjvf4S5K2l29R3B3f4QblUiY+aK46tI9MAWMwCov37AAXWYrkMhvl6eJydJJLNOYWytchyn1gxUTtpqjODYK4Q8AfRAHcu2VFx5rbJtu6YMVBwajm1xY0VlcfUW0SUv1pHDJWNql2VZAI7w5hlQJMqkuLCf/IjU+HeonUeQVH1LDWcYhgPkqmzDjUsgawHUnufYikSlnuo2OX/+/I/AFGBtDqDI3ImsTBKvNU97g8LAbp2DuxSmpyYjRwefeQ2I55vR3vwgEsh3IN28yTdnDpNKpZiZmSESjU4fHRw8DsTywc2qJfj6jTqxZ8sMlF6Fi1srl8uJ+mKaZuE6NmaSTqeJx+NMTEwsnDh+/ATwR35stqa/49oPkwKA2F5FCxif318IPj4+vnDy5MmXk8nkpfy4NBtIrRqs+uFSZpGBQB4gmk/70NDQi/ngo/nf12o5ip2Cq6hKNkTqRdojg4ODLwDRipVXKUFOKX+BKHdlwOILjKIowk4sFruQD/408GeV4BUfpwqw8x+rbE0mMAnM5ee1AGoFKIUQlu7gC9gq7PMa9Te67zu9kU1bKQAAAABJRU5ErkJggg=="

/***/ }),
/* 2067 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 2068 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2069 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2070 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAd1QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztLS0s7OztbW1uLi4uLi47u7u8fHxmb3yn7/voMHyosf+pqamp8r/qMTvqMv+rM3+rr/XsND/tcbgtra3ts3ut8bduMjfuNT/urq6u8DHv8TMv87kwcHBw8PDxcXFxdPmx8fHyMnJycnJycnKysrKy8vLzMzMzc3Nz8/Pz9DQ0NDQ0NHR0dHR0dLS0tLS0tPT09PT09TU0+Dz0+H01NTU1OL11dXV1tbW1tfX19fX2NjY2dnZ2dra2drb2tra2tvb29vb3Nzc3d3d3t7e39/f3+Dg4ODg4OHh4eHh4eHi4eLi4uLi4uPj4+Pj5OTk5eXl5ebn5ubm5ufo5+fn5+jp6Ojo6Onp6Onq6enp6erq6err6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+vcVAGwAAACh0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ4OPj6+z+/sGN8s0AAAI7SURBVHjabY/dahNRFIXX2mcS27RWhGLFohShZJLQm1IKpYZS730Rr73Xp/AFfAfBO0tbraiYgj+VXAglSRtqlTSTmUzmz3MmJDNIN+yLw/n2t1gWAApx3SRxAmhASorgNf9J5MYGKMw+64sSUgSGFIApX3wR+AZA0RmIKKWgmM74n2ARaQQpP9cad9QRgdJdwC2l6zwR0gCGWlNLK6oxA1i3gGC8gVYCY4Df1j8dh6VlSnsO7C8Qg9uMFDNgXVkqntskLytkoQwqGxCZAtaHDWUVRm+IblOhQ7IruMwbNmTxXoE2pVkWii1gFT8kA/B50+8qUVQdCs8EOCcuqjnDptxYKlgVilRIfQ1U8R2YAvJxSxssC2KuzwA5F/wmM2DLGGZsEdHXUkkNkgN4tK0NRSHNdQeCjuDcziKwbQylKokaILbeMoQZwHd1bSgJoLOlJUAL6NpJBjwyhvkqKNX0mjB+ZsB7Y5g32caAsaGMnIGpgTqfgI0kXk1GUc5wsGMM0/w4bA9xsVJMkglQF2OoUOcTWI0D70HoOq/Cac1DY7gpgg6A01E4PO1Ff2c8L5gAdWjDQoUUG/HoodvsB/OLr51hPAH2d7XBGTcI2wPv5OnVl33HHU0jdlKDbfonkXe/O+scHw7dYdbi7dggpkHQ8s+sxoHfc4H/DQTsKHCXI39v0HcxAXTbvd0aBCcCNP0Qv/58vXI9TAGE6jFrIAgQceS99HuejwyIvOcK+Rl5wwA5IHR9Ij9JEGePf9mW2sIussKAAAAAAElFTkSuQmCC"

/***/ }),
/* 2071 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2072 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2073 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2074 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAU6SURBVFiF7ZfdaxzXGcaf95zznvnY1a5W3thaaXdlJzgOdf0FpiUEh9qGuiS2GucigWACvrETCqW9DPkHCi0ECiH2XQmU3PS2hNRpkobUAVty2lqJYluO61iSV7Z2NdqPmd2dnXN6sXLqSMEygZJCPMMDwztzzvPjeeecYchai+/yEN+p+wOABwAPAB4A/F8CHDz43OgTh17c+L8w27//uLu6plYX/EzucorAR46+FBHhS4CmLcz5RMV/GD+w9/jLL//id9Za800Gr/3+teMuu9Nv//WThk0wTiSOAChYazMAUumctgC8ewLkhjKv9q+shCVNQm4BiacVJa/0Ekuvv/7G8N69e387MTFx886YkydP+jt37jh7/doNd+fOPWPZdHaWtfOp67gfSMVBt9tJWo0AACXrJuA4DpKkSwAZAG3ATHuO968war7/4YeThw4c+PEvDx9+Nnfq1Cm9b9++Zzqdjty+/Qedzy99GY+NFfXlS5cvDo8UTzPrr6XkuI4OgkVvtd+ad6BQKDddJ2VZMYToqxN3eWBgsFp+eMeb75z5+59Y49ixY8de2LZtmz9SHHaOjI9nwtZy++Jn87+5tdR7KwhuD1hrpFKKlCJSimhwMBvn8w+11wXwU64pjBSbjnYtOwrsKLBSiOMum16sdux6/L3C8LCY/Md5LAVVBMESPvrob3A9zruuF7FSEES0HCymASuYXTAzpGRksxu66wJo1nBTKTM8MtZkqa0SDMV9xUmbo7Clz358/sLuHbuhtQPtaDz11NOYm7810X9OQLEACUNBbSENJII1g92+1gWQJEmTpJTn2fLo5pZmbRVJUiSJRT+JbmynjLV498y7+MvbZxB3Y+Tzw1Pp9EDMinFHQhLVqpW0SSBYaLDQ9wHA/JXclGdGi+WW9tgIARARSSLq9bqqHUWYmblqZ+fmk2arCUuWRkaKUSqV6UlaOa0kYYRYWqykySRSKUmr/dasgiha1pnM0EqvJJjZFItbWgsLN1K9uCdgElgAjWYDP3/mMJnEyEajAUCANWO0VA4XKjf9ZrPOkP1ZDKy4XbuZ2rSp2Fo3gWCp5odh3VFK0h35jmdHC5tD1q4lqYkA1Ot19Ho9JCZBo1GHIEAzQzOjVCqHucxg7CgJXhEBorZYWbMK1u4DrBAENY+FQj8JAwhAsGdKpbFWZe5GCiRQry/j3LlLaLfb2Pro1n5eUhFWVn+hWIoqlXkKWw0mgQ6Ac5c/PTsJ/OreAEJICABBUPUES+RW2sEAXGbDmx9uzVyd6kxPf45MNgPHc3DhkwuIe13BfFegiYrGSltmr81cWZidFVOnT5+IgV+vtvsGALVSMkBQrXksGLlcHyIB4DOb/QePTL7z5zfHtcNZKWUnCrsz23/4+JXqrYo/XCiFAKLnn//JH/sTHVxj+jW/1QWpJElFJHVftdotv95YdoRm8Iqyg7n46NGjrZ/99FAbVl5l7U8y6ySKIl5crPhaq+o9Xe8FUC6XQhYKX4kVgqXbXmt52dFSklrRZ9NX/nn1i+vBk08+8chQLvtIH1xSGLb0tetfLNwvwJoWPDS0MWbmcH5uzsddn5OlpYrHLJAb6m+nxnQfKxRLGUd7ixs3baqwvtM62/Gd9tS3BiCSlMvkexIymp+f8/97R6JaXfBJSsoNbeju3rXL8T1XvPf+Bw1DbjWfL5s4jkVC9tyJEyfibw3gMDcMzMCGDfmYWYQ3Zu+GEKhVb3uKGWc/vvhWGLb0nj0/urn10W2NbqcrZmf/HWXSZuJ+zQGAvvd/x/8Bw+kFNFV/0JQAAAAASUVORK5CYII="

/***/ }),
/* 2075 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOmSURBVHjaxZfvaxt1HMdfuSTt1mTtMlzaZHVbLaVQW1Z1MHTM7YEI6pOCiPRRTUVkIIo+1eGD/QEyBEHwRzcQtoJI6VMVBMfYsD/oollrZjfaJE23dU1zS9Mkdx9zIcnRA3eQW/AFH+6b5MH7dZ/LfT93LhGhhqsMoBhLmoMAupihGAK1cAUIVMtd+/0Jh2vAQ6NERAfwYOIF+kTkGs3A7PKLwBywA6CwmxaajplhFXBVqslYcxT+Zzw0gPqgQOzKGvn1AoUdHb0kdPTs5dCZAKF+P4rb1RyBh4k8v33+N8W80PNaJ52DATweF8bdux7LMv9lkl9WVEJD7Zw+9wwtbW5sEZFKAXuA01Il+83vIrrUKeY1ufzWrNyZUSW3IfLonkg2LbKVFMmsiGzeFdn4R+RBXOSP7+7JD2/MyvyVNbFiZBhZ1dz/7oB//CTMZOGFfeCCa18s0zsSJnjUh14C0UE00DVzLTqVz4dPPEV4+ADXLyxWQobf7sKK/Z/QRSW8IiGgaC784T1UwjWM4+519SjVtbGvHT/bz58X19hM5e0E7CX8B1vYSu5Yg6wSlZLqd26PwrH3+tj54Gs7AXuJw2WB5akUWsEMskpIrSs6dXpO+uj88SM7AXuJwEiQwT4/N75drrffKmEUQp32p8EXxMCJgCnx7PlevPObrM5umqFmywGbcHsBe4kTl4bovHyRR/cLZvv1BsIb3Yrb9nsonnuHW59GKeV0kMbCHc2C7uEOuj8Jc+v8TURvLNzxMBoc6aLllQ7ufrUE0lC482l46uOjxO+r+FIZfAdpCMXZ0w30vd7FX6lMfcfEHqmWc4HMCgQHgiSvZuB5P+r3V3kcpVJJMw5g4nESnluH7a0Ce/d7QXEZA6w+YTVNw5y0oKqqPjU1NQ0kgKIp4CBcK+lEL93m+Ifdu8Z7JpMhnU5X1l6v1zhz5ubmZsbHxz8DUiKiNyxQnvvcua6y+nOCjWSO4UiY3lMBaui6TiKRYGBggFwuRzKZJBqNLo2Ojr4P3BaRQsOXIP3mBX51neHAkVaGzoY58lw7VozWG7W9vU0qlWJxcTERiUTeBZZEJG//ROSQcrDEYjGJx+MyPT29GgqFXgX21XKs5eEJY1xvRVFYWFhYGhsbi2Sz2ZuACvbPhK3Ay+KQctu1ycnJG8AxoE1EeFxZBV4SBxSLxdLExMRPQD/QahNu1K6XUw9wCOh2sD8UgBUgbfhgjymAKeF28IomQNG8z+35F/XbMMHXtozzAAAAAElFTkSuQmCC"

/***/ }),
/* 2076 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAmRQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OzsLCws7OztbW1uLi47u7u8fHxTMMJTcMKUMQOUcUQUsUTU8QUVsYWWcQcWccbW8UfXMQhXMYhXsgiX8kjYcomYconY8kpZMoraMwxasc2a802bM03bsw4cc09cstBcs4+ectKec9Je9BMfdFNhdNZh89eh9VciNRdi9ZijNhhkNhnk85ynM9/od9+oqKjpd6EpeCDpt2Hp96JqMyTst6ZtNait+Cft+OeveilvuenwMDAwcHBweOwweirwsLCwsPDwuavwuetw8TEw9W5xMTExcXGxeezxsbGxsfIx8fHx8jIx8jJyMnJycnJycrLysvLy8vLy8zMzMzMzc3Nzs/PztLMz8/Pz9DQ0NDQ0dHR0dLS0evF0tLS09PT1NTU1NXV1dXV1tbW1tfX19fX2dnZ2tra29vb3Nzc3d3d3d7e3t7e3uvZ39/f4ODg4eHh4eHi4uLj4+Pj4/XZ5OTk5ebn5ubm5+jo6Onp6enp6erq6fHm6urq6uvr6vXk6+vr6+vs6+zs6+zt6/Xm7Ozs7O3t7PPo7e3t7e7u7u7u7u/v7+/v7/Dw7/Tr8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/Tz8/T08/rv9PT09PX19Pfy9fX19fb29vb29vf19vf39vj19vvz9/f39/j4+Pj4+fn5+fv4+vr6+/v7/Pz8/f39/v7+4Iy+1QAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2+Pj6/7+9cyRWwAAAodJREFUeNplk01IFGEYx//P885+u7tafrQbmIQQFNJBsroY0b2L4aFg7RCCB6POdekWBOGhU6VkCl2EAsFbEHQJJIU+ENy+y490q1l3nZ3Z2ZlpHmp3FJ/DO+/w/z3///PyzhAAYln3lud6AAEcVwTCXt1zDBcaEIrd11lTRKwgJIunELFB2xIA4aLxzok5Tet9+YgVrxUSfQlAyDAggN/Kx1lpWo86DYYC/U/0TQUQC0N0JSRJQXJEqy/En9b3pVTRtVuOrnX72D9CBUCkp0cxq42mFLWHiCHeADeAkP0iHLezRzKkuB0Mll4JCiJOpmeK83o0uX+gw1dZ5MBBCP3JDwDl8lq+L1M7yNkOALsc5lbQkk1XCt+tN4MJ004CUg2AZ1fQNtSpKHR3aWt6JA6CVDCpWgeOic7Xem+MXJYz0BBREMEm1Hn2dYqMQlRgdwR0JMPs6+x3AkN4nANymNoxJKrO08iBmK66L2mTj+bnrvTn7rR5QUTaNMMXiY0EqOvPpDolGRmgMSQl4E6D4T9ujcWmSPQpz/MCoJewtCy72x8Xxkg+NscvN4g4M//l971slAqrSA4DrutYroO4eAgAVRue+LCdl20q1wrHMSs128XVmmg+Ex/wkv1fo1ot0po9EVkuMG1t6uVS6WXZ9CAOUnQdVErJFTsbKOU/c3NsvGy6qAOM53baPvzWSp+dscNr5Zu/Fh6WjSrqQAg4J92HCPqFYunnK31xwjTM4JhYaFxfyqnWrI7X41bRANCI6OTG/yRnTD/YLhmoA3LaRTeW+RYtJrv4vbZaSc9uGRWg7hppfuayTGBZaYK7qY1WixULAaDFEwo7q1oxbQSATyjaBXi2G7z8BdgS5ZV7xpsLAAAAAElFTkSuQmCC"

/***/ }),
/* 2077 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2078 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAA3YAAAN2AX3VgswAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAELElEQVR42p1VXWgcVRQ+c/dvZv+SbBo2iZs0bYNYGl1bWmystv4g9akGn/qkPomIEotopAYNipUgYltBffRV8KmUFhFpCYi1lKWEblMJNl03ZFeSTbI7u7Mz+zPXb24uy07WIHg/Djv33vN999xzzswqnHYaUwF7Dx9mnP3FH8xaO3l5acdxKDPWF2FEJXtxjeL/QyAc2ssIo49lgzt7sfbJTOzs6dYFWMjnoS2EfFMtvw9On4m1c9pyMPX4iblDkat37yWpqU2efG/fYFjulOnPlZ+/qFwgz5GFp0ez1UtPfZLqEDibfOHGQZWoTotrkUA8opE7vTqt6/XG7h4PnpfrPxz9NOUSOBN7bmk8iqmA3HIJ8JbZsLRxaeir9bYchE6ORuvUJFuCAzbma1SgBjUBzCRqZFE8GHxx2xW+v3PigA96PudkWI56KE8hCJWpnzZg8nwh8Fv6tbFtZVxIqn+P99pEkDAhEIRjTJD8eFLJwHMAVscstb6Q7Cwj514n0AZOLFK9LQMiItA2IWwLAWjyDgH/mw93bd1xAzG4BxdQqUSWQCLsf7ujjN9mnhlmxLBto3V8wCovZOfSRMfHook+xRbhN+BZw1VuZu/vnuVC4P3A8azpV/27tDAxUKsIlwFF/vs377xFYnz53dHXeyFhQoLDx4/f1apVV2vXEqw5ovQOdfVrgVYRucC9HOhyvPvGHzkCyXTuDwEGiQFtKEqx5gjjA14GmgRJOjrgCrWNwlWneDWIqE7hpLfXYSvchrtMiGwgBaga7QI1owp6g4I42261FTw58+bKdoMarS7ziw2igZfaBfomLJG8sKQC4FRsb47xjJ7Ty4ZVl8te6bJ/+MLnJMf5cyMJG3QfzJYHlS29UszzjCzjlDK6vH/Qefcj6AMGGdSDL2fsG0RsfHBYVbby000VEW06t/jQLHf1wWeTT5xXBVGjklNQQSC4K7iWDztV7JjifJN+nfzw4rZOLF3M60ieyLAKmkE6YGAlAHiw2kUemeq8Xvq685vo0S0ecfTrWDQh4QFRhaE2wtFHHuxZmJVNPDa2CSRuje6yhD7DaWGcZ5AGgiLiiYgicvKLDDzS10zRY64rTE8cTmqocgiuUVgIbirWQwCJ+zdlqREH7OCj0xMuAe/1laKTQMeYfIExxMsrW1w2EIcPo5WS97pLYGYzfWytqpCD/PrqZpPzthfZoVo8v7lcaAiRgnXz2Mzmtip8lE4dyRUZzc9fiz/f89OrD7K2iAMAaWn5yivP9vzSf3ueaLE0d/jcHffHQuLj7ulTHCznLnsDl827fAuXzWFVtAJuN31qsrud0/HnCn6YgoD2460DQfm9NF5+EpU1HPDqf/83RigMixoVQwsjl2WuGzRIOuBFdG6Bf40gIDpIi3Xv2xOKk6Kv3l/aKIJowmq86fb+BwRQ+xV0fV5YAAAAAElFTkSuQmCC"

/***/ }),
/* 2079 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2080 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOmSURBVHjaxZfvaxt1HMdfuSTt1mTtMlzaZHVbLaVQW1Z1MHTM7YEI6pOCiPRRTUVkIIo+1eGD/QEyBEHwRzcQtoJI6VMVBMfYsD/oollrZjfaJE23dU1zS9Mkdx9zIcnRA3eQW/AFH+6b5MH7dZ/LfT93LhGhhqsMoBhLmoMAupihGAK1cAUIVMtd+/0Jh2vAQ6NERAfwYOIF+kTkGs3A7PKLwBywA6CwmxaajplhFXBVqslYcxT+Zzw0gPqgQOzKGvn1AoUdHb0kdPTs5dCZAKF+P4rb1RyBh4k8v33+N8W80PNaJ52DATweF8bdux7LMv9lkl9WVEJD7Zw+9wwtbW5sEZFKAXuA01Il+83vIrrUKeY1ufzWrNyZUSW3IfLonkg2LbKVFMmsiGzeFdn4R+RBXOSP7+7JD2/MyvyVNbFiZBhZ1dz/7oB//CTMZOGFfeCCa18s0zsSJnjUh14C0UE00DVzLTqVz4dPPEV4+ADXLyxWQobf7sKK/Z/QRSW8IiGgaC784T1UwjWM4+519SjVtbGvHT/bz58X19hM5e0E7CX8B1vYSu5Yg6wSlZLqd26PwrH3+tj54Gs7AXuJw2WB5akUWsEMskpIrSs6dXpO+uj88SM7AXuJwEiQwT4/N75drrffKmEUQp32p8EXxMCJgCnx7PlevPObrM5umqFmywGbcHsBe4kTl4bovHyRR/cLZvv1BsIb3Yrb9nsonnuHW59GKeV0kMbCHc2C7uEOuj8Jc+v8TURvLNzxMBoc6aLllQ7ufrUE0lC482l46uOjxO+r+FIZfAdpCMXZ0w30vd7FX6lMfcfEHqmWc4HMCgQHgiSvZuB5P+r3V3kcpVJJMw5g4nESnluH7a0Ce/d7QXEZA6w+YTVNw5y0oKqqPjU1NQ0kgKIp4CBcK+lEL93m+Ifdu8Z7JpMhnU5X1l6v1zhz5ubmZsbHxz8DUiKiNyxQnvvcua6y+nOCjWSO4UiY3lMBaui6TiKRYGBggFwuRzKZJBqNLo2Ojr4P3BaRQsOXIP3mBX51neHAkVaGzoY58lw7VozWG7W9vU0qlWJxcTERiUTeBZZEJG//ROSQcrDEYjGJx+MyPT29GgqFXgX21XKs5eEJY1xvRVFYWFhYGhsbi2Sz2ZuACvbPhK3Ay+KQctu1ycnJG8AxoE1EeFxZBV4SBxSLxdLExMRPQD/QahNu1K6XUw9wCOh2sD8UgBUgbfhgjymAKeF28IomQNG8z+35F/XbMMHXtozzAAAAAElFTkSuQmCC"

/***/ }),
/* 2081 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAASDSURBVHjatVddbxtVED1e7wbFTuIYFWQgoFCEGgQSKg+QvoJ4oCDFTSSaKkojHiL+CuWnAE/lB0TwAHkrTlwaO27cpIktFCuErJ14v2xmRru52l1rt+XjSKO7u3fvnjNzZ8bXmeFwiAAZAgCNL/H/gMkGQ0UKFhCQM3HRt2ww/x+Te2R/shHvAAQdCgbZ2/V649fT07/AwgzDgKZpINCYgQQIPCpj8KDm4rpt28bY2Bjy+RxmZl69AeABmaUEKIyZZhfNZgNzc3PodE5ZhHw8EMCBUvdKVFwE5L7b7bLjsi6bLQkHoKBBIeOvQb9voVqt0oIsEfFCjUa2rFyrezG5V+9mgufyMcex0Wjsotc7l/uAB4J4BGTh7Oxbvoc+ifJeXUeMoUa1DVeuvMSm5iPQEUPggSL0vQnGiIEwUkQ0j+V7CgkRUKRRAWosTE/C8waS3Lquo2v2KHHD3kcdpmWpAgKCUQLYZK8nJnOUqI9x//6P8FwPC+UFXH3zKizLwWAwVMRKyHNEIO59SMDU1CS2qw9wZ3kFhUIBxWIRGxsbuPftN3j3vfdxQcmmKiEqJJ4DUUmqzOLkYu7Axfff/UD1PINSqcT1Lba5uUnRsCP5E1gmsGfZAqiFI5IuS7bXbCKXy8HzPG5Y8nx//4De1+naUZ6GI8Gi0iMwmlx5oOsGyuUFJg/Z9Q+uwzD0UKLGSxbpAlSrBY+xLnh+3sfKyipufn4zIKfrz3D7y2U4tnu5xkc0gqkCFHHMxDMpuwGV39y1d6hj9kXARx/OYzgAVcAgjTBVwKh9j0eC3vnp5w3efyGtbFXoWZLnwVxaEqrFiYahh52d2uWv5cHBPkXAi3qccJ+eA/442lzXRbvV5g4odnTYgu3YMfEJSMsBRBMx1Am73R7Ozs4uBXQ6HXpm0pyWEsV0AQney5wQ1uo70nwCAYzHe81Q/viQPFGWLkCg1AZjOBErlQrGx8eFPLAne3tyXvDByRmUKW8ZGz3zRJOYDz2FPOQ9w/VcScB8Ps/E7LWQtdpt2K7Nnw41KJ7zz528RXzhplYBECINhdWxbbRaLY5ASMDRUVtOUkZWlzOgZVlwHIeNBcj7jx79/guAIzInQUDoYBmrX8N4AR9/8ill/lNMTEgUxNPX35iFrmlCfHJyguPjY5rLYro4jcLUFOqEpaXFrwG0+UT8nBEI1/Ha2hqRujCIQN7VMtwaxFvL6qNN23Hr1gK17XOJVvXhw8PFxcVlzlUit9PKMLF5SLsdgkJtAEON6DUm5yRj73kbRNDFxQULYc87a3fv3gFQJ/L+M1UBR8h1vZCIpGv6cJD1IuLFYlHIa7VaZ319fcU0zQq904NCchKa5qnUbKFQlHpPhBIgZtk2Xim9zMf6w9XV1dtEvg2gm94JVX3K4WJra1vqOgGxKDAm8jnUd3fr5XL5CyL/jZ6b6r9gegRcLpf5+Rv+zy/8o1WsIkKtlbKdW7TUeaNR31xaWvoKwBPitZCA6J9TFvMa2YwI+2ewyZ6S/UHfdaCQLgBKhNTWv/gH7Kg6T8ffl1EPkAtAEBEAAAAASUVORK5CYII="

/***/ }),
/* 2082 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 2083 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2084 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAkZQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OAAAAAAAAAAAAAAAAcHBwa2tro6OjoKCgpKSko6OjqKiop6enqqqqra2t8/Pz6+vr8PDw9fX19vb29/f3+Pj4+fn58PDw2dnZdnd3d3d3hoaGiIiIiImJiYmJj4+PkJCQkZGRkpKSkpOTlZWVlZaWlpaWl5eXmJiYmZmZmpqam5ubm5ycnJycnZ2dnp+fn5+foKCgoaGhoaKioqKio6Ojo6SkpKSkpaWlpqampqenp6enp6ioqKioqampqqqqqqurq6urrKysrK2tra2tra6urq6ur6+vsLCwsbGxs7OztLS0tbW1t7e3uLi4urq6u7u7vL29vb29vb6+vr6+vr+/v7+/wsLCw8PDxMTExcXFxsbGx8fHyMjIycnJzMzMzc3Nzs7Oz8/Pz9DQ0NDQ0dHR0dLS1NTU1dXV1tbW19fX2NjY2NjZ2dnZ2tvb3Nzc3d3d3d7e3t7e3t/f39/f4ODg4eHh4uLi4uPj4+Pj5eXl5ebn5ubm5ufo5+fn5+jo5+jp6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs7Ozs7O3t7e3t7e7u7u7u7u/v7u/w7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+fr6+vr6+/v7/Pz8/f39/v7+////6nqlMgAAAC50Uk5TAAECAwQFBgcIChUZGiAkJyouLzEzODk6Pj9JTauvwcLO0Nzc9ff5+fn5+fn9/sTNcq0AAAKkSURBVHjadZBLSFRhGIbf9ztHnXEyLcuojISie4SFFZXaopBqk0EWSkI3iOi26EpMqzatWlYQFeaFMouQoIKUKCu6kWnWQqicClNKz+g4c+Zc/tJk5gT1/vCtnv97eD8dgGjEv6IcF9ABzZf5H8CIOcOAHjgTFu33IyFCCPjng2+HPQJALEuUBkDEBTSXUCAARzCiIDVdalK5oSUyoURjtYmSsR8y5wk0cgQARDRzl8iXg41tBew9QjYWWxAIMApQT4lfSyuz6j8VaTTvcXXfe32JBiYASZG0CtFSK943l1PPo99XGBrI9mzQLYnXcblVZRSK6IsgM5rSC3SvQnhcKPMpQgZJFoKARwFqdwdZ1vnEvymDr95ml/a8mZgvHoCUTwcoXVtePV2H5mO1rR0be/qygQQgGs3rX3evj77eRkmVyd3OGL17greFSOWUu+0LqkunCRwOZX5XsTR6FSI3c0K7Lvtf/Cji9Mu9R+TOmFXwKEDuj6fLCQqIrY6OYlfgBUhpCeWt7njuLwebQullodacpfwL4OPguVX39zY/WIsnwfOfmyo7+8d5ASE/G+1Iz20Hpp/9mefoU3uy/laUvszIdBAOgF3Buqe20+Na0JI1XTzMCsxceKFvD5FR/XFN+JZvWQQ+pRItZF/cj/VKCB6y6awYgmkiqJI1AfvK9ttdmL0O9SE3P+dNIJe2EYljFADY0IXOneMBtJ2KDl6cg365asQ8inuzeoGatMUFQIOV27+5t73KMO2kwn0093sLKsYTSuU6KYEf76rDMTNZU8lp6V75rDZ10kal5kS+LXlXNTAUQwIAIDiKwwShTg5a5thL4Wg0cSilkAyHxw3DGN6f2ODu00gAI8N1lYoaMQtJwI7YAm8cM27DAzjROOGNsj3SX+RSAPdMsxVXAAAAAElFTkSuQmCC"

/***/ }),
/* 2085 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2086 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhxQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxQUFBRUVFTExMUFBQWVlZWlpaYGBgYWFhYmJiY2NjZGRkZWVlampqbW1tbm5ucXFxdXV1d3d3eHh4eXl5enp6e3t7fn5+gICAgoKCh4eHjIyMlpaWl5eXn5+foKCgoaGhpKSkp6enqKmpqampqqqqq6ysrq6vr6+vs7OzuLi4vb6+wMDBwsLCwsPDw8PDw8TExMTExsbGx8fHycnJycrKysrKysvLzMzMzM3Nzc3Nzs7Oz8/P0NDQ0dHR0dLS0tLS0tPT09PT09TU1NTU1dXV1tbW19fX2NjY2dnZ2dra2tra29vb3Nzc3d3d3d7e3t7e3t/f39/f3+Dg4OHh4eHh4eHi4uLj4uPj5OTk5OXl5eXl5ebm5ebn5ubm5ufn5ufo5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////4VOwhgAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMXZ2ePj6/7+Nos3swAAAg9JREFUGBkFwbuO1VUYB9D1+/6bAzIoKiJy6VArShM7sbay8BWs9DEsrOxMfAwvWNhqZ4KxodFAjLcwMjMKZ+bcz96u1ZAKAAAYfdCoi1MEAIAx9ouuce65T+c1VVIlokhg9vF2rWF2Op9qmpopSRKJXpEZGkm1aTp+bVJ1eN3Rq4k8ul0qoUGbjp89fiJx9Md0dC3kZHfz8gQNMt08+PE32MxsHsJ095JAg5wdn+z7yxdns5NDty5tz9bz/HztdkGDduWVx7++9EEl3525+l4lX6zuXBVokNR+9nZVapqZmvLW90qggaS/cLEqNZWqcOeXHoEGqerv/H29UimVsHr/X0CDquoHL/5+63xlkpAr+6MINKgqF94wVeUcQRGBBklunE9VxQbCdAPQQNXVqqrEniAOAA2SVFUlDENADGiQVKoSGd0IAYEGqYQIGxEYgAZJqsJ4NN/ZhzHGINAgiUS8/sPOkt77rnezMWgQVRDrrZV9n9du1322QwNF9N2F03l3cnr+cDPOtn2sllsaIEwPvp33+OeT5+/2P3Nw4d7pqtOA0h8ee9f6nE32R08+fHb/q9PFBg0U9aZIjP1i8dd/pz99s1qsoEEGEIy+260v3f96/XQBGiAAo/e+vPzl2XwBNMYAQLBz79liCWjYTSMRwcg0+3zzdLkGaOyXH00AYLNcbQE0dot1AMDYdgD+B+Cqy8B5ED1FAAAAAElFTkSuQmCC"

/***/ }),
/* 2087 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAeZQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxTMMJwcHBwsLDxsbGx8fHzMzM0NHS0dHR09TU09TV1ABq1NXV1dXV1dbW1tbW1tfX1tfY19fX19jY2NjY2NnZ2dnZ2dra2tra2tvb29vb29zc3Nzc3N3d3t7e3t/f39/f3+Dg4ODg4OHh4QBx4eHh4eHi4eLi4gBx4uLi4uLj4uPj4wV04wh14wx44w544xh9422o44654+Pj4+Tk5BR85Bl+5Fed5H+y5OTk5OXl5Rh+5Rp/5SeG5XSt5YCz5eXl5ebn5lae5rPN5ubm5+fn5+jo6NPe6Ojo6Onp6USW6enp6erq6kqa6urq6uvr6+vr6+vs6+zs6+zt7HWw7ODm7Ozs7O3t7e3t7e7u7u7u7u/v74q97+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf399Pl9/f39/j4+Nbn+N7r+Pj4+ePu+fn5+vr6+/T4+/v7/Pz8/f39/v7+////3uMF9AAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAmFJREFUGBkFwctqnGUYAODnfb9vJpkkbRpC00N6WBhtG9GCigpFVxUR0YUXIVLoQlx4Ad6BCxcVF96AIhW6qUJB2kXBndBG1ERiq03T5tDMTCYz8/s8gcgAAADNuCHIqRICAICmGXXHKq3Op1vZyoiSQkgioP3Fwb6K9vb27am6t3yvjk5udFonZxcCIdpIIrI10Y9OL0upmeVOq2Qp32ZmBBXa5e1SWnkxSkTEnwtCKApUiPLLRE7+e7TTPbXyhG98fI2vXYUK0S6ZWQ6Gc48m3l+89om44qsrKlRoDd+JLJm3R63LSUaiSqgQcXMq5Iv4+XK5qpKfEVBBRKQseLVVJQEJFSLfy8zM+xwrKQCgQpafBoe3jryOB5uPD82ea4OACpnvZmYG+g9sbm5cmggEVIi4WS/cmVrC77On7x/s3pqf6R8+NQEJMosjS7DwWqfFzMz5e4N9kBARtcztT6K1MTrKDufngAoRzy/VpYxVlqedXTNa9gqgQuRzW09+nV9EW2BIA6gQ8eNC+81z1ikhMG7GJFSI+PDpxj8n1vBbmR/i79atE6ePNw0VcrTyUm7vXVzl5eAu08O3Rr4cooK8YGVndRHBmOF/3b3tYb93QAVunO0Mht8V7r5waGT4cDXK5KNn/TEV+CBDhhBG+5c2/vp884f1Z90BKig3FuPMH5Ol9DqOrR7faJ5ef9Dv9qFCNL29id03IoTx4Mzew3p9fX+7CyrwUZFAMxyP+521vd0uUGkaAAQG48c73R6gYthuIoVAE+3294Pt3j5AUKemCwAY9PoHAAK1BABoDsYA/A+YlMR32QbGDQAAAABJRU5ErkJggg=="

/***/ }),
/* 2088 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2089 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2090 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2091 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAATMSURBVHjatZfPbxtFFMe/+8OOYzs4dhInzm8KRg1FChISFUmqUiGBUBSpBwQpBZVcyr8AN9QDAm4cuHDj1itBiFAJ1AIpoKpAA5VIQtw0TW2InTh16rWza+/ydjbZWWsa1kTqk756M5P1ft68Nz82kmVZ2DdJkmRypIdqJjFNl0mdfbhCLk5KPMQgbPAWqUjcOshUcAuQnti+d2/e0HU7Ikj7Ahr6rMvTtufckf3nBbqiKAi3to4D+IUkBCCRgoZuQDdqDswjWeYg1hL9gXCp0Qd5kwfAzYEJAWwXNNiWSEZ5Fhq9EIj4amFUrLUDF/Xztyu4eT3LM/IgL8u87fQFceMZENLFXuI87AKffq4ffcOdgHddHOTFTAhtnxLIDek16xZUVWEzMDQTaws7uPt7BaWcDrVFQSAkITUSxvAzbYh1B3kgYgl8A2Bw0zQbVv7m39sIyhHMvncH1S2gqz+GroEkBo8HKTigbpjYvqXh8g+b0MpVJNNBjJ9LIRxTxZ3iXwJehrvzAayTNlZrKOZLGHtrCC0h/lKJbS0JgaCCVDqG/mMxyoiEcmkXX3+UBbQokp3dsG3opMXkswh5GUgMnvlKxe25VnTHB124Z6G5C1cJSgSXoQQkxFMhnDh7BNiMY/DYEkZfWsPad3JTGRAOoF2tBjWgUp/P2nkR7xOcwICskgKOFGo/kmxBjILxcv1L4Alg4EQdG2sVFJcldD3V5gblfU72gBUHTN7OCPDYi8Af3wy5JRAy4BdA71gNwUfLuHShiM4nj4LhvXAbxuBuFsg7/UgX0JG2kJ78nweR5FEhW0SyN46X3+3DlYt/Qq96jmjZO3OpoR0leKgdPiYEIGahblpUfwU96Qhe+XAY858v4Z9Mif7mnTXJ0w4nLYTi7B2CfAPw7oDLXy7i16t33B8n+kM4/9kIStoWrl9adVLP08/60W4gnBBgQgBNnQOjxwfEWcgSJt8Zxq1rJcx9fBPPn00j0ReCvAdvTXAgDncZ8W3YkYwykQk335FnY5j59Ch++mIFm7kyoj0E73jwTC3L8so3AH6l+tQvFFVx7pMRXJtdRdiBe6HsOK/X6w2isSYzYDuxfoLf3ZaRejyGjUwFe+aCa7UaDMNg0nWdicaaWwMWBx9YR60gQS9JaIkqqO3WQebO0jtjkpt6RVHsRs1GCAEIEN4Wxsp5ENzZfqs3ijh5PuXCaJZstjRz1nbG7fqbWFhY+BHAOsn4rwAE+O0rErtMbOsZBR3LEu5vVfH9xVWMvdkLSJYLt8GFQgH5fB62RSIRBAIBrKysLE1NTb0NIMe+iL0B+GWB4OxGK28ZmP2gA53jedrvCl57P41gWGlYaNVqFblcDhMTE9A0DdlsFouLi+sEPwMgQ9JJ8C2BOAaCyRg51Y5TF9qdZ/g2cwOgLJA3UalUWCCZTKbwOhmARVLFIvO9jsGfcW+y3+YGnTPgBYYVttyeWAna2qIMTmnfnJmZeWNnZ+cGAM0Lb34N8K+ZZg4atgCp7izt09PTZ/bg9zlcCODQJgRDJWCe0r40OTn5KoC/+Mz9b0O2RxVZhuxIvAvE2buf8LTH7dVuLS8vXyX4aQBLPnDhn1OVXD/T4TOjk9ZIGyRDgPsEwD7vDg/nWeT73N/+BSV4H7mI8JtlAAAAAElFTkSuQmCC"

/***/ }),
/* 2092 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2093 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2094 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 2095 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAkBQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxDXIFE3gAIqAGJ6obKbcALa0AOqEjQIc8RHVFRIo/Rt0RTs4gUZJNYZxgYe4xZ9BCabtpaqNoa9ZMbcZpbrJYcaZsdqdueKlxe6pzfqt2hcCFh5KGh8aEiaaDksKIodShpKSkpb+gqO+Uqdipqr2qrtCttNesvOC8wMDBwOLAwsLCxOTExcbGxsbGx8fHx8jIyMjIyMnJysrKy8vLzMzMzc3Nzc7OzfDCz8/Pz9DQ0NDQ0dHR0dLS0evP0tLS0uvJ0+vR1NTU1OrR1evQ1tbW1uzR19fX1+3U2NjY2O3T2dnZ2dra2tra2tvb2u7V29vb2+7b2+/W3Nzc3d3d3d7e39/f3+Dg4ODg4OHh4eHh4eHi4eLi4uLi4uLj4vDi4+Pj4+Tk5OTk5eXl5ebn5ubm5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6fLn6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7u7u7u/v7+/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8vTy8/Pz8/T09PT09PX19fX19fb29vb29vf39vr19/f39/j4+Pj4+Pv4+fn5+vr6+/v7/Pz8/f39/v7+////+lC5aAAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMXZ2ePj6/7+Nos3swAAAjhJREFUeNplkUFr1EAYht/3m+ymu7Zqa8GLKLIttth68ya9FgTxP3gUvAiCePXqxZs/wFOFilAP0rOoFC8Wd7W2VkEoSu1213R3s0lmnNmkTsA3E0J4nrxfMiEACuHjY7QBCEhdEcT/3GQ9jQCo1B7/ESWkCJwpQF5ZvZXETkA16ohSqgrFUUDHCVYBJ5ASKGUXsPM90fULc8VEcaLAJueidjid6Onwk30gsFFAIVCFlovM/9BL1/TulUCUm5k/PBJCBbHhsj3PH78EvBCk5EigokBAhwjxIyjKCSoQefUwdhf7BsrXgKTjbjF5Yrmii28QF1V07O2QKFIIlrRybo2Js09BslluULJdXxehdTgmD7INYK22XR7B3e4kRxwZceo9Ofm7WRoBGXxtyIgz1qyn4HwzohdIoppzxBrD24QCy4LUZr7knFnKxQrZWpgA/VbLLHfh+lfaJsUygIO5SQMv8NLnmwI82zz9TY8RMOb6h4WMJUEWheCb2r6Yc4DWWdI4QmhMIUiW/9qTnUp45i4yHQ+TVON+CkBZp34DQgFxdWssDFqNSj9q73cO2xvRwCAob/n4PdD2944+bnGi9jIaaDfCc8LFJHG3defw9fOoN8SxoAq8NnU52fy51NHdty8GvYH/CoNRWnPtVdO42FTj71bjTs93H9fPY68a/BrOHE2tRAeWFw3GoAhnZpkOu12sdXt9/BOQBoaEO6zNIHw07PRj+OqgfkKhnGF/kMAL1lBEOSbR/uYvyqa73Se1gW4AAAAASUVORK5CYII="

/***/ }),
/* 2096 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAQLSURBVHjatVdNa+tGFD3SSLKV58ZtXl5Sp4tQmm1WIXTX7gr9By39D4UkkNBSSlaF/IEQ6MemUNqfkE2gZBFoCIEuG0q2D/e95/jJX4plqecOHuphKpAN78L1HQ2WzrlnznhkrygKmNjZ2VEsz5g1vJlImf/c3NxMzEQAO54dHh7+uru7u4OS8DyvtNrfcePq6urm5OTkMwDPywjU1tbWWqyN/wP2fd+qbpaTktjY2GhZ6toEyjs2oG51wV0irnpVCRigcnAzdgmUgVYm4AAzqyxBqSdo9uoKEMDKJElwdnaGer2O5dX3MKk95cN8AAT0FQqNwhSg3MMoy/HlF5/grTiYewmcjiUvLi7ArYP19XUsp3UErQ9AKOSF7kwTKAwLr0AvGeLP+w4+2n4XTiyiwOPjI66vr5HnOTY/jPH+p5+T6IxJ9U2spssmcPfCx8e2H+RZ8ymglNK1Vqtp+cfjMYIohCIYpsC2+VihPxBHgQO4sAJRFGkCElEQypwDyGqpUg99qfMScMElwzDUBLIsQ8CxUr4DaNQwZGpR4BBYeBfIEsRxjMFggCBQUJyzAW01At/jEvjaoLPB67k8YMYEDTQBCcUxCZTIz84DIJuAqukdIrm4BwwJekAI6F0QqP8IaOgZApEiqJBkjQNfvu90XkkBkyRg7YjJZEICyiXAj8ArEBB4nPM+uVaFeMYCJ6GqCrhLwCoPZFVTE8LaivWwIDjvE0I+SGhhAu4JaBTgDxLHnihguX8pIliugKn8iuDKIlDZhC64hFFAp4oJlkN3Ci03Qr/AYAz40N3r+/JsTMK5ZUTWygqUesGLYkxoc6qtCawseXjRx9SMQJ3zaebjMctIILNkp4cqEbC6NwQYehkKFcnD9fw7BCcXjMdClKr4HFOalJNpmmKgUi6DIVGdgPNi0Wg00G639QOSThvROENc87DMdv9u54CQZDbrHhKqUXDcS3pQg64+P7IpYXqougdmY3t7G6urq5B4u5ZhCV0sc7GT1z4aKLT8CvQCG3wiCk6GyJJXeD7qYzQa6bVvNpt4eHjoAcireMDxwvn5uUgpKUpIVyalM539fh+dTkf/ZCsVQj15ipWVFVkOmXt1fHx8CqBd2YQzYbmZJCwyTCGg35y63S62trYkNaG7uzsMh8Nkf3//awC/8cUmtfyGCkEyDhGThgS7FCAhIJ6ZBR/s7e19BeAXgvfAmJuAu5dRSoAp54aAiyqjo6OjbwD8TPAEcMNfsHvn2nhBDq77+3txf8p/Wd/ShD8R/HWFw2jhmPWGeXFJDw4OBPwHgncrH8fV/eAa1rw5tVqtPmX/juA/Erwz7ytZenp6+vvm5uZfCypRXF5e/sHd8P3t7e1LVIg38ff8pXZ7xfgXEsAjeKC0Ea8AAAAASUVORK5CYII="

/***/ }),
/* 2097 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARZSURBVFiFtZdNa9xWFIafc66kkZyp3TpOUqcLU+qtVyZ01+4K/Qct/Q+FJGDTUkJWhfwBE+jHplDan5BNoGQRaBCBLmuKt8FN4kzkmdHHlW4XM0o0ssYep+SC0AfSeZ/z3nOuJHHOUY/t7W0DXAJ6vJ2RAf/GcVzWF7zWDZd2dnZ+u3bt2va8CCJy6r593BwPHz6M79y58wXwZB5A7/Lly+tAv0tYVWf2Xds8KICrV6+u03K3DdCZcZd4F0Tz/i6ALmdOBaiFThNvHrcB5okuBNAW7gJZZBrqY+fc4g40BVWVJEm4e/cuYRiyvPYBZe8iIgoIogYHIIAIrhJSW/H1V5/xTjQbfiGAdsaqyv3794njmCtXrrCchXjrHyE4KjfJzAGuphDHcTLmr4MjPtl6f57B53Mgz3MePXpEVVVsfBzx4edfUicjIgiAytQEgRXYf6p82qoHVT2fA8YYVJVer0cYhhRFgRf4GBWQhmANIiAICESB1yn4Rg4EQUAYhgAEnt8owteCgsy4Evp6Zgd0ArTFVRXf9wnDEGstnu9jjJ4QfOXGFKYXeG++DrQBer0eURQxGo3wPINRPSHYdMNTIQqU5nsGOHHeCdC1+HieRxRFABjPmwB02i/0PLAl+P60QzpEz+WAiBAEAVEUUVUVnnkNQCNzEQiM4ABjhMhTqqqam/mpDjSX2WZHlGWJZ8xJABE8cXhGKCpBRfCMw1o7I14DLexAcwpUFWstqmZahMy0Yug7ikpRAVHw5H8AdL0BjTHkeY6qYKb9XVf/UuCwlQEm9htxmA6AhYuwKQ68ckBVURNhq2qSKRO7fXWMClAm2YsIlS3I82qmEBcCaEJ01YIEEaUtqXQCsLokPB0yLUYIFTKr5NaS53bG9rIsT2jNrYHmElsvqcYYnAnIrUVEeG9JsCUUhSBSoQqFCpktybKMkcmw9jXEwgBNFwD6/T6Hh4eUZUlydEhQWKKesBwq/xxWIJOpWAmFZAhOhOPkGDMaUBQFdgqc5/nZAO0vGoCtrS3W1tYAeLdnWWLAsijJS6WPQwQMgl/CBUDLMTZ5zpN0SJqmOOdYWVnhxYsXx8BMK8ytgSaMiHDv3j2qqqKqKsqyxFr7asvznDzPGQ6HHB0dMRqNMMbHXLjI6urqZDpGo+e3b9/eAw4XAmi70KzmGqSGKcuSPM9JkoTBYMDm5iabm5sMh0P29/cZj8fJjRs3vgV+j+M4a8Y9+4XdcKQJUm81RJZljMdjBoMB/X6/KT66fv36N8CvcRwft2MvBNDVy/MAxuMxURSxv79Pnufp7u7ud8AvcRwnXbHPBJiXffu8roUgCDg4OKAoimxnZ+dWmqY/x3H8cl78M39MFhnN2ph+uGQ3b968labpj3EcD0579twAXV859WLl+z7r6+vD3d3d79M0/SmO46Oz4rUBsr29vT82Njb+Pi8YgHPOPXjw4M8kSX54/Pjxs0Wekbfwe/6sq9rnjf8AEsAjeEbyq9QAAAAASUVORK5CYII="

/***/ }),
/* 2098 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2099 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2100 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2101 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2102 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2103 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2104 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAppQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxAHwAAH4AAH8AAIAAAIEAAIIAAIMAAIQAAIUAAIYAAIcAAIgAAIkAAIoAAIsAAIwAAYwAAY0AAoACAoECAo0BA44BBI0CBo8DBpADCJEECJEFCZEFCZEGCpIFCpIGDJILDZQHDpQHD5UJEJYIEpUOEpcJEpcKFZgMFZkLF5QXF5oMGJgTGJoRGZoRGpsOGpwOHJsTHJwOHJ0PHZkaHZ0PHZ0QIZwaIZ8SIZ8TIaARI5wiI58aI6AWJKITJaITJaIUJ6MUKJ0oKKMbKKMcKKQVKaAkKaUVKqUWK6EpK6YWLKInLKcXL6IrL6gYL6gZMKMtMqckMqghMqoaM6UsM6obM6sbNKsbNacqNaojNaokOa4eOq8fPao0PbAgPbEgPrEgP7IhQLErQLMiQbErRbUkRbYlSrgnS7koTbopTrk0T7k0T7wqVsAuV8AuWsIwW8E8YcY0Ycc0Z8o3aMlFaclFddBMftVRxMTExsbGx8fHyMjIy8vLzMzMzc3Nz8/P0NDQ0dHR0tLS07L007P107T209PT1NTU1dXV1tbW1tfX19fX2Ln62dnZ2rv52tra29vb3Nzc3d3d37//39/f4eHi5OTk5ubm6urq6+vr7Ozs7e3t7e7u7u7u7u/v7/Dw8PDw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fn5+vr6+/v7/Pz8/f39/v7+////3KkYIgAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAktJREFUeNplk9FOE0EUhv//7HZLC6JgQaKJER/ANzAx8cJ7730DjYYX8WVM1GtjQCUgGo2JLRREbSmCQLu7s7M74+zadqucOTmZ3fPP989sZgmAktfzYY0FCEjdI4jzfZuFBj5QqV2ToDa/uFibCnyhtVqr8ODgeKD3tIIH+Bdq9AJhIiy4iYpOejo1YRaHWU4gHc0YbdxLmxk313ouSNUrSwL+XzdrMq0TrSh0CJ14lbOuBTAUGBqTpbHv01TErQ/Dg9T0jR0LnIHyPPFcPxAHGET1uqd6piRYkVQRRgc5IVGh1HvHWSmYO8qoJEtsmuZ7UEp32pHOLv4eCZ4mQhHJC1wSeQK8OxJQKEMB+d9XlaLQpPJrXzot+faFu+/R/sTdj2QpkHxSJWpEHbhETBOzJMYWrAqXRK6TN8Bl8CawPGkBOfounS3Z20T7K3Y2sL3OnU2WAhJVwQIxT1SIOTcpjIoeMNV4lnriCYl8DDOPO4fxkCDdD8j5b7i9wdZrNtfQ+mztxCaxIDl20ZGBJaCRoZpxbPE8E/GI0YAxJjUGwb1DNbTAjy2017Hzlq1VNFez9ruw2xzcT8tj4jLRcOTCZUHZxkDX4zjSQ4sXZujg0vHj8PQnq7Unp/1kRMD+Ktpr3N5Cc832zuLO7VuzK/0wmbC4ClwBZpyRBQz6ncdxGI9P8dIKOXJI+5HqNh6po0F5aV2w/N+M1TMPB2chRgJrUQYLzcppGAFjQurZgl406QUPkpNITazw69MeJiOJYv0P0veIybDalA9/AMUIKWjlmhF0AAAAAElFTkSuQmCC"

/***/ }),
/* 2105 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2106 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAcaSURBVHjatVfrb9NlFH7atVu7dpfuvrXdmDh3I4zKEP3k1PjFD0RhTkASgiYkGvWzid+VD/JBIfovmBA0+sURNI7LmCAMGIOxstHSrbtvsP3adb2tPu/Jr7ZxIW28nOTk/d36nnOe85xz3hpSqRTSYqBwMapL/D+ijG2msoyKA7pxZdiha0H6/X9sPEl9rJR2N0ExISNmaovXOzG0tqYph0SNRiMoXOUegFozqoRL1run+22zFcPlangJwE1qNONARgo1LYTp6Sm0tbUhGJyF2WzWHUkbNWbfZwxvcQJyH4tFYbfbMD+/ALfbLTaQJRJeFtyyRygcwq1bw0gmk4JAQYGRq9ICXmfu/Y98SvVnBfq3gppS2SwSieD69WviiEGHR1RkKwLyw4Z6F+LxGIqLi3mvp2F9HQUlJSgsNMNkMhEZE0p5rzYtKbEhkUhic3NTnM6mT0VFJX9TRPht8u3fxYQtYhDYi4oKBe60A46pR4h7dsE3HcDCwjyi0RhWHi8LtSYmvTCbClFbV4vOjh3KGWrir/1KS0tBkf22BLwVgYxRqopWIlxubcGZM99hdW0VNTU1jKoQJXYiUlSEkKYhnojDO+7FN9+ewsrKEqxWi54WQ5YiNwI68/V8mui9DVevDkELa9i15wUEAgHcHxtDZD0iSEU2Ipibm8cGV6vVim3bmvH9D9+jkYTbt+9NPo9JBeoI5HYgHT0/Zt4sYnyTJVtVWYXFxSUFPTfdEMNaSMNGZIP0CKtV3o3fv0/UzFgPh8mjMzhwoJfPJR35cSBdZhZLIVZXn2BxeREupwuzc3MkXSli0Sg8nufR0d6OxsYmcW58fBwDv/2GwcErKGJKRkfvCh8eP3mCPUTN5WrUK8qQmwO0rcpKcth/rh/PND+DudlZhENhIrCAvr4+HHznIHbu7EKSrNfWNMLdhDff2o93jxzB2Nh9knQBN67fkDSdOHFCSpN75psCo5TagwfjqKurJQqrSCQ3pSz73j6C7du34+at2xj6/XchY5SIBKamUF5WTqSceOfQYZz++iuoFj9y5w52dHZiYGAAPT09Elw+ZSg5nA5Ow+FwSCMpKytDM8lF4yy5STz0+/B27wGJfk3ThHADFy6SsCVS9x7PbvIihOWVFVisVgbzAK+++hodyC8FdKCAka8pYgmBoyRda2srKGT4j+hs74Df/wg+qr7ScAUuXB5EU1MTPLt3s5uGBc1Zpm9paSmd//z6AB3gxj7J2dz8PGZmZuF0OiUdRPbvxmlkTp7brMWwszu2E/bgzAwmJiYVd4jaQz3/Oasgk4ZEPI7hmzdYftXSZCiSjuXlZRr1g0NLGg1brERvZdteYKRWixX2Yhs2yA0j3xvU3JBBhbxbsfT0uvoG6WwhRsBKYDQT8kxbXychE3Aoo8wvDbNkLdLvIzSaggGTPh/cLjfC/NbhqEDLc88JKWk/Pw4kyfoSQulyuzA8PIyzZ8/i/PnzdEbDvjfewBzLrKa2FlXV1WKgjBVwZ/QOmhrq0d//M64MXkZpWSkc5awMlwv19XV0QPbOrxUTAWG21+uVPj/JHN6+fRs2ux1l5Q6ssDldvHRJlaGkYXFpARvhCMrLy+Bnei5dvIByh0Oa0jpRaGlpkT3pRG4EKPJx9549NLSMzs4dSOnuf/75F7h29RqMJJSb0cbICfYYdLMzOhucCDzy48rQFZiLLFjnO1U5BhLgxb17mbY495VRnRJ9agp0nJIJ4OOPP5EW2tXVpc4GdKaDqTin0BA1mU3UQsI/ikHCPsK15+WXpYra2lplr48++FAGUoQlrR9GE/lUAQ0nONm2obu7WzUmGcvBYFBId+/eXYx7x1H7xzXVYtnzV+V9Y2OjVEg750QFedG1ayf5USqVU1lZkTp3rv8nAEFq/KkIZB8sY7EEjh07Bs/zHhLSLbkMaSEVmWh9XR0aCD2PaoTaKNPQTdLxAELmP4vdHo8qV97bcYPDgXt9BmBWPxFvOZZbuOz1+QIDHLfpsZyeDdKYvjx5UlorEWF3W2ROU/K+iGVYzYpguoQrr7/Sg0OHDgkBZ9iQRkZGvL29vQcBjNHeRo4qwBZh3bPFNuP0qVO4dPkyHj700YFK6YJ0nMg8KyXZzJTt6OiQecGmJW2YozrIyN8H4M02/lQE/P7AAFuuVILdbk+jsOWwkj79AtI3hOWMmPlekunpcjZwNI8Fjx8//h4dGaIdDcivDKXhTE8HJIpsoa8CO6GmwaTiiK5xyT9XtuA4aqqrBPbDhw/3KeNqS2rOYZTSVU0vOedZ2NdzSbps00hWV1WlRkdHr+/fv79P07RbKvLMf8HcnTCh+ruH7CXMVKSP5lnGMtdyCxnf+mAqTv366y8/Hj169FMAftqNIodkc0A546S6xLF/JjHqFHWe+0qt5+tAthMF6vJf/AOOS53nKX8C0XdvvJT6DgQAAAAASUVORK5CYII="

/***/ }),
/* 2107 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2108 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2109 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAjpQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NAAAADQ0NAAAAAAAAGRkZs7OztbW1s7OztbW1s7OztbW1uLi47u7u8fHxOS0ZOygKRS8NSS8ESTsjTjIHTkc5UEYyUjMFXjwGYD4IYkAKYk4va0QIa2VbbWZcb00Yb2ZYcksPdE4UdUwNd2JAeEwJeG9geHNreXFmenJmfHhvgHpwg3tug393hoF4h4F5jVoMjYqElYp5ll8NlpKMlpOPlpSLm2MNm5SKn4xSo6KgpqOdraunsa6psq2btLKuua2Uua6Muri2u6uEu7i1u7u7vLy8va2Ivr6+wMDAwcHBwsLCwsLDw8C7xsbGx8fHysrKysvLzMCizMrIzsOmz9DQ0M/L0NHR0dHR0dLS0tLS0tPT08ae09PT09TU1NTU1dXV1tbW1tfX18mf19fX2dnZ2tra29G629vb3Nzc3dzb3d3d397d4eHi4uLj5OTk5ebn5uXl5ubm5ufo5+jp6Ojo6Onp6Onq6eTW6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7e3t7e7u7urf7u7u7u/v7+/v7/Dw8PDw8PHx8fDw8fHx8fLy8vLy8vPz8/Dq8/Lv8/Pz8/T09PT09PX19fX19fb29vb29vf39/f39/j4+Pj4+fj3+fn5+vr6+/v7/Pz8/f39/v7+////m6EZAwAAACd0Uk5TAAECAwQFBgcICgsNExwfJCcoKy8xODk6Ojs8Pj9GxMbZ2ePj6/7+uAQwUAAAAi9JREFUeNptjz1rFFEUht9z7+xHYiGBdYsQFK1CdEUDmmhc0gt2FlqGoI1YS/6BlaTILwhrCGJnY6WNokuExSREiR+46kIUJc7OZmZ2vq733OzHDOTcO0zxPOe891gASBCOKpUoQAtiVBLoCK5iN2EhN/KoLaQQJAQESH+Qxs8vhl0WkHccSVLmIEmnEUFfsJuHiSASrdNSF4S+fHqJWmaBLeYmpDdCGkMaZtTmJKTgAMaSQx7v3wcNBJrk8UJjtpjXPhU4DP2I3SmSgqFFZpMn7bHrMiWIKcnN+pg34Pnnf5XzSEXgQ4W5bhfQt7HTKS8iLVBFMBfmkeLnS7twF1zDiO0LzFkQSJ66xbMnkJlgDTlh2T0uboKyEZvTvJ7hK39O/l0iZCMwbWlo+OqXM3szOVBWoMblHo+3Sr8mbhhCUEPhUi+fVoRTuscQ2Te8myVA8/pXWX5wCFQmYsYsCLVhHVtirnRlJtSvggNe5M4t6D+SJI6SBHml+sIs92P7d2leah4nQRCECR5GgzXrcyDYG+61sun3HduLlfK9sC9cgUCrMfH9Ig558weNjK51/KQvvKni4+7Yzh3z/NC3m7fs97WOGwwi5vD2W7R/2wJBqaDbSZytNd/1h1u8qp6iPf8ZCZkrFi06KGzWurYLpCaMjxNIX8RBu9MqrB44hhtBKbyuolcEIFLrbdfDQEBkzXOzgYqs4nJge10MhdhbkEhX4PkhUkLkdikjqDDBoP4DMgC+l4D7NrMAAAAASUVORK5CYII="

/***/ }),
/* 2110 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2111 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2112 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2113 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),
/* 2114 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAWKSURBVHjatZdLbBtVFIa/edjj8SOxkzYPt2nSJihNS0JEqwAtDyGoQKQ8hEpoQUJdAGKBKlZddg0IsUWoYgELJIRgBUIsoKqEikoIbaChYOMkbdK4eTaOEz9mxjP4WsS1cRRbKfzSr9FYd+757jnnXs9IjuOwLikvQOb/le2UBBUApcFDQEMJhMR/JwewgSXg1jqEym25gO7lROKCaRiCCGndUHpfTrZ+L66l1FIlu6IoeHX9EDACGEWAUgjTMLn3VIT7xj6jKxklY11BNRIsBNsYVwdonTZxZwx8dUGMzhamtR/oly7j9zexMuEQ9vkJW/fzXmg/s033UKqrZwv3LooqB5CEBXl9YpywkcSyfsP2uFhpa6fRGoeRbuRcDqGgY7NzweZgoJPrB+ZpXZmi+YEwrbMm4cZG/Ak/84pMqUSWinGENmo4WZYYuHkRU7uK5XWjbUsSzE2y5O/GdimsS3NrqI5MLLxMe3gas3c3vftBebyPTGeA/pXLYq4yS3JFuEoASdi9iLthhVRLC1m1nmRjPQF9HEU1bgNoGlnFzZfGH3wZf4q9exIovX30H+5i9LfveKZT55A7jqzIRUtQHUCUwPGuYtdnWPJ4yYUsNCXJaK6HNTWAkMvlQnO5WcvbJ/uYWBzj42uP0t/TyOyaQk/fNL7mBAGXJlZddGmjblICmaxeT0zdwdW0ilte45yxj2hyjpxLKqZfcWR2rJqcjr5EQ3A7RtjPpeU+vrpwnqXmvWQbA8zIoZIM1AggAde2P8GiU0frYiej14+ykJ4nZLfgXUkh5NEKAKh5b0s5vDr7Ch0dHXz6bpzJ0D34mnaQ2t5HxPYgK1LRGwGobKAlXx+uXJT2m1O4sibJnj3c/bOO5Fj/ZMAtghcgXJqbQ0t+Qm852FIHF49N0drWypnPdyLLFbugth6QFBkr+CyZhm1oq6v0DovgcKtBZ6rFYabZIqPYBQCtzsPc3BwHIzre3XUMtHfz/rkwsaRfzFNmoDqAoBTksuKBfV3Yfh2hjK7hNiNccbx8FGzgA/cIaxpks2kaF3S0Nj/e5zXCUZNL14JijgrX1gPS7Zpd33OYxMNJXFKOXmmYkGTzdGKENy/HUDIxvm39Hs+Sgtzsw3rVooNZPhzxi2c3cu1NWCRWVW7sPcVaVwNtjdtZu2uO7mCYe9U4aUscxwqpNp3U2Uy+cUd5f9jL72aLeHZDAzU1YVm9LGU3Y8+dZn7+DGOXE4Qei2CnbFriHQT37GfsdQczssoXfx3D0vPQVFFVgEIJ/kWreFjc8Q7m1bf55KcJXJqXXQND/NT0IMYvDlbOAXVrLxLqxiWoXIdjZQjvf4S5K2l29R3B3f4QblUiY+aK46tI9MAWMwCov37AAXWYrkMhvl6eJydJJLNOYWytchyn1gxUTtpqjODYK4Q8AfRAHcu2VFx5rbJtu6YMVBwajm1xY0VlcfUW0SUv1pHDJWNql2VZAI7w5hlQJMqkuLCf/IjU+HeonUeQVH1LDWcYhgPkqmzDjUsgawHUnufYikSlnuo2OX/+/I/AFGBtDqDI3ImsTBKvNU97g8LAbp2DuxSmpyYjRwefeQ2I55vR3vwgEsh3IN28yTdnDpNKpZiZmSESjU4fHRw8DsTywc2qJfj6jTqxZ8sMlF6Fi1srl8uJ+mKaZuE6NmaSTqeJx+NMTEwsnDh+/ATwR35stqa/49oPkwKA2F5FCxif318IPj4+vnDy5MmXk8nkpfy4NBtIrRqs+uFSZpGBQB4gmk/70NDQi/ngo/nf12o5ip2Cq6hKNkTqRdojg4ODLwDRipVXKUFOKX+BKHdlwOILjKIowk4sFruQD/408GeV4BUfpwqw8x+rbE0mMAnM5ee1AGoFKIUQlu7gC9gq7PMa9Te67zu9kU1bKQAAAABJRU5ErkJggg=="

/***/ }),
/* 2115 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAASSSURBVHjatZfdaxxVHIafmU3SZDdJU9MkTZqQBEmRllabKsUYURC8MEREsKbVitWLIgoqXohe6JX4DxT1xiJYEEHworcKoqVF/OgXVhKTYJuPbZqkbXbtbjKzM8f5HTvDLCdDRqpveDkzu5l93vOe2dkZSylFKCsQYMsm/48E5qsYVAKEcAFvue1M+P5/DPeAG+KA6wPUQKRaYODmysoZ13EkEVZoiO9XJwv3ZYyntszsmUyGbEPDg8BZYC0MEFed67g4biWERbbtCBQCjDEJblWPdUSqDmBpa5gMpoH4tjFWBzEl/xdxzABaJtxcinQtrNeEbRMqMYAl1i3YAOsGKN2oMPX1MmuLFdw1H78Czf31bHu4mW0DWayMZYQJtzcMwD9wo3JxIe/w44ezeGvQ83gr7bsaqKmzQcH18RKXPlnkh5lbdO5pYujtHuqyGWMJNgwgcN/3UV+cxT44GME9R/H9u5e5/60+2vqyKN8KDMjowdbuRvxH21HK4vKpZU4eHmfn8x3sfHqrkNMHsNDW8JrzZby9OX3g2Y/m6B9to603gHuWBuEhQaJtfHSYngda6bz3Ln4+NolSsPuZ9sQANpjSiW1L4DqErL4dgHJdDRqOL0Ar2lYV8D3Q+4ElVMbOMHh0gEsnFlm5uibwlAHiJ51t4UuIcyUaW2sp5h358CqQXwmXIbCMUTioqbHZ8/Ld+G8ex1BSgAgeDzHYSE/7JmZPXsN3b4M9whDVTQRGRcfTN5Sl9ctXw/20AcwQm5/cyq6BHL9+NiMQgYazjeoXy1+o5h5o7Ag/J22AJFuw4/1e6i4WmD9XjOqPmvCqJyDwXDuGEgIYLSQ2se/Te9j+1QluLTuoaO2pmmFTtzJmLgbSnYTaCSFyW2pZfecwE+9dwi35oDTcqD2u9AHilSeEEG2/r5nu17uY+OA3UHG4rj1p5v/yawhi4+Bw3PVUB/WPNXPl40lQ0cwNiFIq7nQNYM6e9TT0Ri+TSwWarq7Q2G7Fofpy7nle3PJaygZAvOHvv/x073iii9/zK/BLERQRuFKp4LqutuM4Yv0aoLSTGzDBJCzFygy07Wxj9nQRBhspHj+VAI8s4IrxY5QAMYBxCby8aLFacMi11OCjqH9hfwgPZyyNBNbrz4UL508Dc4BrBEgOYqowa1G6Br7nc/Hzafa91iWgCL68vMzCwoI+PpvNUltby9TU1MTo6OhRIC93xBsFSKz/5mXFlZ9uMfvNHNfzZfa+2En/Q5sFLvXrmc/NzTE8PEypVGJ+fp7x8fHZAD4GTAVwJ+USmPtLB47xLY/Q2ruJ3a900bu3WaoVsDgKIJWXy2Xy+TzT09NLhw4dOghMKKVWiWQ+mNQD+8urq9+hVNo74qh6AUv9hUJBL0FLSwuTk5NLR44ceS4IcibgFInpjs4Bki80Okgul9O1j42NPVssFi8Cf2HIDKC002vdqx4gtU+MjIwcAP5QSpUwlNxAJWPb8kFG3QnA8BZeHrvEKqj9TAB/CfhTKbWGoeRzQMJsB7qNYOnlADPAglLKBUgbIB4icwdPxQpw9fc8pf4Gn39txtlTT40AAAAASUVORK5CYII="

/***/ }),
/* 2116 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64, "

/***/ }),
/* 2117 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAO6SURBVHjatVdNTxtXFD3YJhIGiWQFUk2zSGiUdo/UNbtYiK6oY1assgv5UD76F1r1TzRS+gPcJv8gyaKRlbCC2pDECYgQwBgb6plh3HtGvmamt8YzSnuko3vHfn7nvPu+xkOdTgeKIYGEFFP8P6CY3wmJ0oCKU/hCl2n9/j8WPxHuk6LrQ5DBKYaF0/WDg+eu49ARhpRA+DnqTJ8lKrT9P5FOp5EdGfkWQFnYVgNhnHMdF47rqViPqZQKqSET+4oPReM5hJCJtCMDMQZLIpSbGDViwXaqYwwojLidinhV+LdKpFIIwxpQe6xCt3EiAxqtGc0HG0BX/NfHjzE5OclcyUVkckYa4m7yfZ9k3nve3t7GwsKCDmawAXbKH1J8amoKmUzGcHh4OPJMMdd14XkeyVwjv2Pp4xvQFbJ8axkXL37ZG4mEIO9wlBp9jjQa2SaMer2OWq02yICdhitXvsLl6Us4OTkRSudC5iQNBbl3mpOeEB0Q+jkNUTiBgdA207kEY49g7NFxHLTbbZZbclcN9irRaDRwFsy+0BWvAss3b2P68rQ+y6g9HB8fo3HQwO7ublDiZrOJo6MjmtFRmz6VsQ1oBZ48/R3z89/h/r37sihz2K/vU5Cjjq74qOhnGOhSV/bLl3/g4Q8PsbKygp9+/Dlc/qi46idEpp/jvb09nL8wjq+vfoPi9cVA6M7dO92dEDUAsj/MyAcuQpL7mJ0Xi4t49OgXlMtlnV9DP54Bto1/DugPHjy4x23IPDL6Uuk309ns7Cz6IPE2DImBuWE+fw1ed/+zXV/YkQ+uQOe0ZGcSXZMDQJMJK9BP1E829wqeD/pGxHGRZ1dA+O5tjcevCpmz35eohs4Ad1PYABt7sbZhqVTCxMSE3nyGbHN669nIg4ql39nZQbPZCoy+fv3qGYAPQjdqwII/DL8LUDCSExTTdwC9A/jZ4eFhcFqOjY1hfHwczVYT1UplbW5u7gaALb4RDzSQy+V41tsj2i6myI3Icn/8uINbcp3zftjc3MTq6up7ES8AqIq4E2sKZmZmGK2wvS9UOCh9q9VCtVoNLqytrS2sr69/KhaL1wGsSdu/7F1g1RMdJvrCoqSJ0dFRitPIp6WlpUWZklfSrgVYZJKIWdizggay2WxQ9kKh8L2IrwBoDjqIzP5UJK0GubGxsZbP5xcA/CnPR0luQy+dSrETO/dWUNvp2zHZqVQqL0R8CcAb+b6NvrB/TmnmC2HOGIsPR1gTbku/LoiYBsIm0kw/4x+wq/s8Dv4G5NszxwruEYcAAAAASUVORK5CYII="

/***/ }),
/* 2118 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAN2AAADdgF91YLMAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAq9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ0NDQ0NAAAAGRkZs7OztLS0s7OztbW1s7OztbW1uLi4uLi47u7u8fHxAG8AAHAAA1UDCFgGDW4AD2kHEYkPEpQQE3kAFIcAFpUWGY8NG5EWHJIAHZoAIKIAI6QAJZgWJpUeKIIoK5sbMJolMZ0gMb0AMrMUMtEANZkZNaU1N58mOac5OnQ2O54tO6kbPqIsP7clQL8WQapBQpYnRaM1RaQzR7koTLlBTac6TuIXT5xAT74uUMosUekeWKRCWcw6W7VbYuwoZrtmZ9VCceFRfOVcfX19f75zkciMkpKSksCSlZWVp6enqampqdepqqqqq9mrrKysrcyus7SztbW1tviguNyqurq6vb29vr6+v7/AwMDAwMHBwsLCw8PDxMTExcXFxfG4xsbGx8fHx93Dx+PHyMnJy8vLzMzMzM3Nz8/P0NDQ0dHR0dLS0erR0tLS0uHN09PT1NTU1NXV1dXV1ejV1tbW19fX19jY2NjY2OTY2O3Y2dnZ2tra2tvb29vb3Nzc3N3d3Ovc3O7Y3d3d3t/f39/f3/HZ4ODg4OHh4eHh4e/h4uLj4uPj4+Pj4+Tk5OTk5OXl5eXl5ebn5fLl5ubm5ufn5ufo5+fn5+jo5+jp6Ojo6Onp6Onq6enp6erq6err6urq6uvr6+vr6+vs6+zs6+zt7Ozs7O3t7PDs7e3t7e7u7u7u7u/v7vjs7+/v7/Dw8PDw8PHw8PHx8fHx8fLy8vLy8vPz8/Pz8/T09PT09PX19fX19fb29vb29vf39vj29/f39/j4+Pj4+Pn4+fn5+fz5+vr6+/v7/Pz8/f39/v7+////IlA2bgAAACZ0Uk5TAAECAwQGBwgJCgsNDhQcICYoKSwvMjo8PD1AR8XF2dnj4+vs/v4s+s0OAAACXklEQVR42m2TTWsTURSGz8ediWmtraH0w3bRanHRZtFuXBlUVBDc6N6FLgV1708QFOvGreAfcKUgiojYlWJLsaBWxMa0pkmpSSczk8nMvdfba9oZpO+BGea+z3s498AgABDBwVIKwADcw3igr2UgQQCI/PMGMSMyA5oiE7MJ90zHAiiaDcHMDjAhIhmIjI3GQDCAEbm8KwMAm0Lj2eP9h8NWgljwzSfMZMomoNsB2QVmImREdzHJIZjKdkDX4CYudoPbj22eiFLA5egrMZOVrr5kwbwci0wH+pKrxMY0jHt6/Z2geLN3kVMA1v9MfKiTJZy7t9eekvfiRK2GaYfK0ELfpAWES+dPrdJI/6vxFUjv6vXXJ6xvJynVEYuV0d+YAs2x1nEiZMMkgCUFMLkz3MB0D0CIaH2IECDfXUI65ED1cJmsjwHgxwHAct/WYArgUW/s+z8fJMLrIsLnye3RDHBy45y/aX3sAM5cw63mpR+zmRnGN1YvFEjWVtYudhCuABSufhsp6BTAudUJePtGl5vPJJigxsHKrMQMkJ+jRz9nWm0/xsQBpZJ4KvFy+wBJJlj2+zp1FkMOSBl1kljCDakNsDdq3NsqDx5r5M+CkqG304oTFbYTC1iRKH1qkBq6XFQq9Jd+QU/PfBhKADZM/roWiCxzRM5GdVi0q0u3pmoPA7/TncFiMD2NgAhaepEvmwsPIr+t9xcFVvatkyQOjry/H3lhugcLdqWVkkH/vdALNGQByDQJYd4PTH4P0NJRhIDW1CjcO5EfRDpNiN5DDFkl7TDRmZbI/P9fLdOPv7y93VvVQfc5AAAAAElFTkSuQmCC"

/***/ }),
/* 2119 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2120);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../js/node_modules/css-loader/index.js!./SmallForms.css", function() {
			var newContent = require("!!../js/node_modules/css-loader/index.js!./SmallForms.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2120 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "/**\n * make form elements small in text and height \n *\n * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3\n * @author      Cornelius Weiss <c.weiss@metaways.de>\n * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)\n * @version     $Id$\n */\n \n.x-tool-toggle-expander {\n    position: relative;\n    top: -23px;\n    left: 1px;\n    margin-bottom: -15px;\n}\n\n.x-ux-form-icontextfield-labelicon {\n    width: 13px;\n    height: 13px;\n}\n\n.ext-strict .x-form-text {\n    height: 15px;\n}\n\n.ext-webkit .x-form-text {\n    height: 17px;\n    padding-top: 0px;\n    padding-bottom: 0px;\n}\n\n.x-form-field {\n    font-size: 11px;\n}\n\n.x-form-check-wrap input\n{\n    margin-bottom: 4px;\n}\n\n.x-form-label-top .x-form-check-wrap input\n{\n    margin-bottom: 9px;\n}\n\n.x-form-cb-label {\n    top: 1px;\n}\n\n.x-form-item {\n    font-size: 11px;\n    /*font-weight: bold;*/\n    margin-bottom: 2px;\n}\n.ext-gecko .x-window-body .x-form-item {\n    overflow: hidden;\n}\n\n.x-fieldset {\n    padding: 5px 5px 0px 5px;\n    margin: 0px;\n    margin-bottom: 5px;\n}\n\n.x-form-field-wrap .x-form-trigger {\n    height: 18px;\n}\n\n.ext-webkit .x-form-field-wrap .x-form-trigger {\n    height: 18px;\n}\n\n.ext-webkit .x-small-editor .x-form-trigger {\n    height: 17px;\n}\n\n.ext-webkit .x-small-editor .x-form-text {\n    padding-top: 0px;\n    padding-bottom: 0px;\n}\n\n.x-tab-strip-top .x-tab-strip-active .x-tab-right span.x-tab-strip-text {\n    padding-bottom: 3px;\n}\n\n.x-tab-strip span.x-tab-strip-text {\n    padding:3px 0pt;\n}\n\n.ext-ie .x-form-twin-triggers {\n    padding-top: 6px;\n    padding-left: 0;\n}\n\n.x-progress-text {\n    font-size: 10px;\n    font-weight: bold;\n}\n", ""]);

// exports


/***/ }),
/* 2121 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2122);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./ArrowCollapse.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./ArrowCollapse.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2122 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".ux-arrowcollapse {\n    /*position:relative;*/\n    padding-bottom:5px;\n    overflow:hidden;\n}\n\n.ux-arrowcollapse .x-tool-toggle {\n    background:#fff url(" + __webpack_require__(61) + ") no-repeat -18px 0;\n    position: relative;\n    top: 8px;\n    float: left;\n}\n\n.ux-arrowcollapse-plain .x-tool-toggle {\n    background-color: #DFE8F6;\n}\n\n.x-panel-collapsed .ux-arrowcollapse-header .x-tool-toggle {\n    background-position: -2px 0;\n}\n\n.x-panel-collapsed .ux-arrowcollapse-header .x-tool-toggle-over {\n    background-position: -34px 0;\n}\n\n.ux-arrowcollapse-header .x-tool-toggle-over {\n    background-position: -50px 0;\n}\n\n.ux-arrowcollapse .ux-arrowcollapse-header {\n    line-height: 24px;\n    padding:0;\n    /*border-bottom:1px solid #c3daf9;*/\n}\n\n.ux-arrowcollapse .ux-arrowcollapse-header-text {\n    font-size:11px;\n    font-family:tahoma,arial,sans-serif;\n    line-height:13px;\n    text-transform:uppercase;\n    position:relative;\n    left:5px;\n    top:5px;\n    /*padding:1px 5px 1px 20px;*/\n    color:#4e79b2;\n    }\n \n.ux-arrowcollapse-body {\n    overflow:hidden;\n}\n\n.ux-arrowcollapse-bwrap {\n    overflow:hidden;\n    zoom:1;\n}\n", ""]);

// exports


/***/ }),
/* 2123 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2124);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./SubFormPanel.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./SubFormPanel.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2124 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".ux-subformpanel {\n    /*position:relative;*/\n    padding-bottom:5px;\n    overflow:hidden;\n}\n\n.ux-subformpanel .x-tool-toggle {\n    background:#fff url(" + __webpack_require__(61) + ") no-repeat -18px 0;\n    position: relative;\n    top: 8px;\n    float: left;\n}\n\n.ux-subformpanel-plain .x-tool-toggle {\n    background-color: #DFE8F6;\n}\n\n.x-panel-collapsed .ux-subformpanel-header .x-tool-toggle {\n    background-position: -2px 0;\n}\n\n.x-panel-collapsed .ux-subformpanel-header .x-tool-toggle-over {\n    background-position: -34px 0;\n}\n\n.ux-subformpanel-header .x-tool-toggle-over {\n    background-position: -50px 0;\n}\n\n.ux-subformpanel .ux-subformpanel-header {\n    line-height: 24px;\n    padding:0;\n    /*border-bottom:1px solid #c3daf9;*/\n}\n\n.ux-subformpanel .ux-subformpanel-header-text {\n    color: #a0a0a0;\n    font-size: 18px;\n    position: absolute;\n    font-weight: bold;\n    /*font-family:tahoma,arial,sans-serif*/;\n    /*line-height:13px*/;\n    /*text-transform:uppercase*/;\n    position:relative;\n    /*left:5px*/;\n    /*top:5px*/;\n    /*padding:1px 5px 1px 20px;*/\n    /*color:#4e79b2*/;\n    }\n\n.ux-subformpanel-body {\n    overflow:hidden;\n}\n\n.ux-subformpanel-bwrap {\n    overflow:hidden;\n    zoom:1;\n}\n", ""]);

// exports


/***/ }),
/* 2125 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2126);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./ConnectionStatus.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./ConnectionStatus.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2126 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-ux-connectionstatus-online {\n    background-image: url(" + __webpack_require__(2127) + ") !important;;\n}\n\n.x-ux-connectionstatus-offline {\n    background-image: url(" + __webpack_require__(2128) + ") !important;;\n}\n\n.x-ux-connectionstatus-unknown {\n    background-image: url(" + __webpack_require__(2129) + ") !important;;\n}", ""]);

// exports


/***/ }),
/* 2127 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJySURBVHjadZNNSFRRFMd/5/nG5yiOn4TMuFIpUkhyMmhRu4GiTdGuhdWiVdtclliroG2rFlGLVkEhFIGr9n5gC/vAjEKnURl11Jl578179+TjiY2Ef7jcxTnnx73nnL+oKvWy7linG+GWWowIDAMoLIhhzoeX5oX5Qp0OAXJGrMQ5uX8y3f947NLNxsHMIOn2XgDy2yss5hd59em1/z3/40FtRp/qZzWHgKjYHpGP967czV0fvYZtC2IBQiwFVQhqytuZdzz78Hw6mNPLEcQGaMjK+I0LV3MXh86zVcuDoQ5QBzEQ5RRK+dwbeT8OPLGjPzc1MjnU10extooAYiJqDIkVFxOCMTA00MfUDJP7tVPRa8dS7Ti7ukaD74ICNlQ3oyMg0NytJNtigAawKyVSXThBgTFbhGxTq/K1NEt/8hQIlIuw+VPAIlYBugaUlo4YsLz3jWRKkXXJ2sCw48BqZYlgp0p3+wlWlwVvD7BAAAW2liCTVTbL6xTcVZwWQBi2AZD4bOwHtstrFDabCcoJbLsBBEITYgc13GqFwA8Q+ddgG1jwXHItBgDCMCDRu8PGvBx5QWZICUNA40Z6VUBZsFSZdfeE0Ac9aFJbD6SzSrIdkh2QGVXa0qB+HA9dqJYENcyK3JZojPOZAXVSPWC1gDSBOCAJwAIMaA3UA1OGnT+wsiie63HWinbb95ko5oXqNoQVMC5oJU42ewd3BcJyPN7iL8H3mIhqj6xyaye5rrTS3AkNTWDZgMR/Nh5UtqD4W9gtMl07WOX/zGQneJTqxInm7DTHAK8C7q5QKuIFPg/rzXSsncViRK3YzmJY0GPs/BcW+ERc35DuCgAAAABJRU5ErkJggg=="

/***/ }),
/* 2128 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAbsAAAG7ATrs4+IAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABaElEQVR42lWRWy9DURCFT/pv+uyXuPPsElLnHFLhTTyg9SBIXIu4RogErQi2iFtdIoQHqdSdCo5fUE+f5aSETGZn9l5rZs2eschZKGhHHeN6rucYOxoK/rz7R17AaWr/3CHNuyzNLh2fTlNeAGE+bJtlnnjlTbBM0TNxbCPKN8FunuaaB45IkOFF5zGP3DCD3Ywl7XA2SYoxSgnxpNw6ReMSOiScDQUtJ9JGkg2KKWOYB+XGKKeELdXpwIlYrullnSlqGOBOFTLyYWqZZZt+XGO53ghxdjmXzD0vvMnvuOIEwyQNXo6wKcULbpX/Ib9WfMBmjiCJRRWroJsUEpH3Uc0oawxKwm9ynhnyKaKHS1KCiylkgThRNel/M6ZLpyiVnHJGFQV0scEEjfqmP6gWpkgwyxB77BNjQfAcrRrU76hbGNXzinTXWWWJcQRr1H+WFc620ydgggEiKv6zrH/rrjf1nsy4f9b9BUxgbF709Cd/AAAAAElFTkSuQmCC"

/***/ }),
/* 2129 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAL+SURBVHjaXZP/SxNhHMffd7d18+Y2Z+pyjqbp+iKB2syIFSkaaeAfkEEQFBP6oUB/iH7JLxEU/RqkIJkEFvZLBIVfUJbKII3MQg3xC86mrvbt1LndubueXTrUF7w5Hu4+78/7eZ7PUbIs4yBNTU201Wp1GI3GKpZlc0Kh0AjP85+cTucaDkIM9qmnp6fR7/dviqIob2xsyKRQUSQSkcfGxr62tbVZ9n6fTNDe3q4uLi4esdvtZeFwGJNLQUx6IuCjcRw1MLBbORw2aBGPxyMul8tZV1f3GgQaO+Tm5r4sKSkpm/OsoeXDEkZXOdCGLOj0aQjQ6Xja78PH7z6QZJzD4WgjDS1Jg66urqry8vJr/kAQj/r+gM3IgbQZxA27AXev5KLadghGfSoG5+MYnOET0bnCwsL3SQPSvVEQBLrD7Yegy8a8X8RUUIWWd1N40vMNJ62ZMHMivCERHS4vYtsU8vPzz5DzMKlAMJlMp7a2tuD2iFijtxGLChBigDuqxj07FIZn1zGzIiEu0hib5+GwpYLjuBolgcViySZ7wwLPILQlYT0mYVOQQCOOW5eP41XfTwwtyQhuivBvCOSAeSTQarUXFANyTZHEbaQyIvZSaYkjlWPxYsSPvWQaNKAoCrFY7Ldi4PV6FxiGQX46g13Ie7g8QMVjN2bXVcpaQZZQVpAGSZISjQcUg5WVlWGNRoPbZ7VgxAhIU+RlMWi4mIKhB+dxtZDFsWwWrJpGzQkWNlMKIgTSeHQ3QYPP51sryFDDWSQrJhQlwz0XxpuBH/CubyNBgU7As+unQW4M4+PjD5ubm6XkJHZ2dlbU1tb2k1jMUhh4/vkvfq3+n8QcnYxLtjTcqTRDJMXT09Nfqqurz4Gwa5A0KS0t7TYYDCYyslCpVKBpWpn5xDoajUoTExPdgUDgZn19vbjPgJxqCoAjOp0uu7W19X5eXl6R2WzO1Ov1hxYXF3mPx7Pc29v7lvxs/QCWiVZJrbQvAUUAoCZid6QhoogEopjyJCI129jhH7fEiEQc+ApkAAAAAElFTkSuQmCC"

/***/ }),
/* 2130 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2131);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./Wizard.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./Wizard.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2131 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-panel-footer-wizard {\n    border-color:#a9bfd3;\n    border-style:solid;\n    border-width:0 1px 1px 1px;\n    background:#d0def0 url(" + __webpack_require__(41) + ") repeat-x top left;\n}\n\n.x-panel-footer-wizard-status {\n    padding-left: 5px;\n    padding-top: 11px;\n    color:#15428b;\n    font:bold 11px tahoma,arial,verdana,sans-serif;\n    float:left;\n    width:auto;\n}\n", ""]);

// exports


/***/ }),
/* 2132 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2133);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./Percentage.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./Percentage.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2133 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "/*\n * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3\n * @author      Cornelius Weiss <c.weiss@metaways.de>\n * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)\n * @version     $Id$\n */\n\n.PercentRenderer {\n    height: 12px;\n    position: relative;\n}\n\n.x-toolbar .PercentRendererText div,\n.PercentRendererText {\n    color:#000000;\n    font-size:9px;\n    font-weight:bold;\n    left:0pt;\n    padding:0px 5px;\n    position:absolute;\n    text-align:center;\n    white-space: nowrap;\n}\n\n.PercentBar-unlimited {\n    border-top-color:#d1e4fd;\n    border-bottom-color:#7fa9e4;\n    border-right-color:#7fa9e4;\n}\n\n.PercentBar-below {\n    background-color:#9cbfee;\n    background-image:url(" + __webpack_require__(2134) + ") !important;\n    border-top-color:#c6e8ae !important;\n    border-bottom-color:#7fa9e4;\n    border-right-color:#7fa9e4;\n}\n\n.PercentBar-over {\n    background-color:#9cbfee;\n    background-image:url(" + __webpack_require__(2135) + ") !important;\n    border-top-color:#fff5b8 !important;\n    border-bottom-color:#7fa9e4;\n    border-right-color:#7fa9e4;\n}\n\n.PercentBar-limit {\n    background-color:#9cbfee;\n    background-image:url(" + __webpack_require__(2136) + ") !important;\n    border-top-color:#f7bfbf !important;\n    border-bottom-color:#7fa9e4;\n    border-right-color:#7fa9e4;\n}\n\n/* some progress bar colors */\n/* @see 0008254: Allow colors in Tasks progressbar */\n.PercentRenderer-progress-bar10 { background-color: #f36 !important; background-image: none !important; }\n.PercentRenderer-progress-bar20 { background-color: #e69 !important; background-image: none !important; }\n.PercentRenderer-progress-bar30 { background-color: #d8a !important; background-image: none !important; }\n.PercentRenderer-progress-bar40 { background-color: #c9a !important; background-image: none !important; }\n.PercentRenderer-progress-bar50 { background-color: #baa !important; background-image: none !important; }\n.PercentRenderer-progress-bar60 { background-color: #aa9 !important; background-image: none !important; }\n.PercentRenderer-progress-bar70 { background-color: #aa8 !important; background-image: none !important; }\n.PercentRenderer-progress-bar80 { background-color: #ab8 !important; background-image: none !important; }\n.PercentRenderer-progress-bar90 { background-color: #9b8 !important; background-image: none !important; }\n.PercentRenderer-progress-bar100 { background-color: #8c7 !important; background-image: none !important; }\n\n.PercentRenderer-progress-barBelow { background-color: #8c7 !important; background-image: none !important; }\n.PercentRenderer-progress-barOver { background-color: #fed35d !important; background-image: none !important; }\n.PercentRenderer-progress-barLimit { background-color: #f77a4d !important; background-image: none !important; }\n\n.QuotaRenderer-unlimited {background-color: transparent !important; background-image: none !important; border: none; padding-top:1px; position: relative}\n", ""]);

// exports


/***/ }),
/* 2134 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhAQBgAPcAAIrDZI7FaZHGb5PNbJbIdJnPdZrKeJ7MfaHNg6XPiJ/SfaXUharVi67XkrPZmbjbnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAQBgAAAIJwAfCBxIsKDBgwgLOmjAYIGCAgMABBBAwMABBAkyatzIsaPHjxwDAgA7"

/***/ }),
/* 2135 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhAQBgAPcAAODQc+LTeeTWf+zcfObYhe7fhujaiurdkOzglu7inPHjkPPmmfXpoPfsqPnusPvxtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAQBgAAAIJwAfCBxIsKDBgwgLOmjAYIGCAgMABBBAwMABBAkyatzIsaPHjxwDAgA7"

/***/ }),
/* 2136 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhAQBgAPcAAP9YVf9hXf9qZf9uav9wbf94dv92dP9/fP+HhP+PjP+Gg/+Rjv+Zl/+jof+tq/+1tAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiwAAAAAAQBgAAAIJwAfCBxIsKDBgwgLOmjAYIGCAgMABBBAwMABBAkyatzIsaPHjxwDAgA7"

/***/ }),
/* 2137 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2138);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./DatePickerWeekPlugin.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./DatePickerWeekPlugin.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2138 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-date-picker-wk {\n    /*background:#A9BFD3 url(../../../library/ExtJS/resources/images/default/toolbar/bg.gif) repeat-x scroll left top;*/\n    background-color: #F0F0F0;\n    border-color:#D0D0D0;\n    border-right:1px solid #D0D0D0;\n    text-align: center;\n    vertical-align:middle;\n}\n\n.x-date-picker-wk-wkrowover {\n    background-color: #F0F0F0;\n}\n", ""]);

// exports


/***/ }),
/* 2139 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2140);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./QuickaddGridPanel.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./QuickaddGridPanel.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2140 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-grid3-quickadd .x-grid3-header {\n    background: #f9f9f9 url(" + __webpack_require__(2141) + ") repeat-x left -2px;\n}\n\n.x-grid3-quickadd .new-row {\n    height:20px;\n}\n.x-grid3-quickadd .new-row .x-small-editor {\n    overflow:hidden;\n    width:100%;\n}\n.x-grid3-quickadd .new-row .x-small-editor input {\n    font-size:11px;\n}", ""]);

// exports


/***/ }),
/* 2141 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhAgAwAIcAANDQ0Mra8Ovs7uzt7+3u8O7v8e/w8vDx8/Hy9PL3/Pn5+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAACADAAAAgvABUIHEiwYEEECBEcWMjQgEMDBQoQmEhgwAABGAUAAJAgQcaPIEOKHEkSY4AAAQEAOw=="

/***/ }),
/* 2142 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2143);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./IconTextField.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./IconTextField.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2143 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-ux-form-icontextfield-labelicon {\n    width: 16px;\n    height: 16px;\n    position: relative;\n    top: 3px;\n    margin-right: 3px;\n    margin-top: -3px;  \n}\n", ""]);

// exports


/***/ }),
/* 2144 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2145);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./PagingToolbar.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./PagingToolbar.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2145 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-ux-pagingtb-main {\n    background-image: url(" + __webpack_require__(221) + ") !important;\n}\n\n.x-ux-pagingtb-deselect {\n    background-image: url(" + __webpack_require__(2146) + ") !important;\n}\n\n.x-ux-pagingtb-selectvisible {\n    background-image: url(" + __webpack_require__(224) + ") !important;\n}\n\n.x-ux-pagingtb-selectall {\n    background-image: url(" + __webpack_require__(224) + ") !important;\n}\n\n.x-ux-pagingtb-toggle {\n    background-image: url(" + __webpack_require__(2147) + ") !important;\n}\n\n.x-ux-pagingtb-refresh-disabled .x-btn-text.x-tbar-loading {\n    background-image: url(" + __webpack_require__(2148) + ") !important;\n}", ""]);

// exports


/***/ }),
/* 2146 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath d='M7.2,28.7v3.9c0,0.2-0.1,0.3-0.2,0.5s-0.3,0.2-0.5,0.2H2.6c-0.2,0-0.3-0.1-0.5-0.2C2.1,32.9,2,32.8,2,32.6v-3.9 c0-0.2,0.1-0.3,0.2-0.5c0.1-0.1,0.3-0.2,0.5-0.2h3.9c0.2,0,0.3,0.1,0.5,0.2S7.2,28.5,7.2,28.7z M7.2,19.2v3.9c0,0.2-0.1,0.3-0.2,0.5 c-0.1,0.1-0.3,0.2-0.5,0.2H2.6c-0.2,0-0.3-0.1-0.5-0.2C2.1,23.4,2,23.3,2,23.1v-3.9c0-0.2,0.1-0.3,0.2-0.5c0.1-0.1,0.3-0.2,0.5-0.2 h3.9c0.2,0,0.3,0.1,0.5,0.2C7.1,18.9,7.2,19,7.2,19.2z M7.2,9.6v3.9c0,0.2-0.1,0.3-0.2,0.5c-0.1,0.1-0.3,0.2-0.5,0.2H2.6 c-0.2,0-0.3-0.1-0.5-0.2C2.1,13.8,2,13.7,2,13.5V9.6c0-0.2,0.1-0.3,0.2-0.5C2.3,9.1,2.5,9,2.6,9h3.9C6.7,9,6.8,9.1,7,9.2 S7.2,9.5,7.2,9.6z M40,28.7v3.9c0,0.2-0.1,0.3-0.2,0.5s-0.3,0.2-0.5,0.2H12.3c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5v-3.9 c0-0.2,0.1-0.3,0.2-0.5c0.1-0.1,0.3-0.2,0.5-0.2h27.1c0.2,0,0.3,0.1,0.5,0.2S40,28.5,40,28.7z M40,19.2v3.9c0,0.2-0.1,0.3-0.2,0.5 c-0.1,0.1-0.3,0.2-0.5,0.2H12.3c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5v-3.9c0-0.2,0.1-0.3,0.2-0.5 c0.1-0.1,0.3-0.2,0.5-0.2h27.1c0.2,0,0.3,0.1,0.5,0.2C40,18.9,40,19,40,19.2z M40,9.6v3.9c0,0.2-0.1,0.3-0.2,0.5 c-0.1,0.1-0.3,0.2-0.5,0.2H12.3c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5V9.6c0-0.2,0.1-0.3,0.2-0.5C12,9.1,12.1,9,12.3,9 h27.1c0.2,0,0.3,0.1,0.5,0.2S40,9.5,40,9.6z'/%3E %3Cpath class='st0' d='M6.2,10.3v2.5c0,0.1,0,0.2-0.1,0.3c-0.1,0.1-0.2,0.1-0.3,0.1H3.3c-0.1,0-0.2,0-0.3-0.1C3,13,2.9,12.9,2.9,12.8 v-2.5c0-0.1,0-0.2,0.1-0.3C3.1,10,3.2,9.9,3.3,9.9h2.5c0.1,0,0.2,0,0.3,0.1C6.2,10.1,6.2,10.2,6.2,10.3z'/%3E %3Cpath class='st0' d='M6.2,20v2.5c0,0.1,0,0.2-0.1,0.3c-0.1,0.1-0.2,0.1-0.3,0.1H3.3c-0.1,0-0.2,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.3 V20c0-0.1,0-0.2,0.1-0.3c0.1-0.1,0.2-0.1,0.3-0.1h2.5c0.1,0,0.2,0,0.3,0.1C6.2,19.8,6.2,19.9,6.2,20z'/%3E %3Cpath class='st0' d='M6.2,29.5V32c0,0.1,0,0.2-0.1,0.3c-0.1,0.1-0.2,0.1-0.3,0.1H3.3c-0.1,0-0.2,0-0.3-0.1C3,32.2,2.9,32.1,2.9,32 v-2.5c0-0.1,0-0.2,0.1-0.3s0.2-0.1,0.3-0.1h2.5c0.1,0,0.2,0,0.3,0.1C6.2,29.3,6.2,29.4,6.2,29.5z'/%3E %3C/svg%3E\""

/***/ }),
/* 2147 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M32.3,27c0,0.3-0.1,0.5-0.3,0.7L26.8,33c-0.2,0.2-0.4,0.3-0.7,0.3c-0.3,0-0.5-0.1-0.7-0.3l-0.6-0.6 c-0.2-0.2-0.3-0.4-0.3-0.7s0.1-0.5,0.3-0.7l2.3-2.3H11.9c-0.3,0-0.5-0.1-0.7-0.3c-0.2-0.2-0.3-0.4-0.3-0.7v-1c0-0.3,0.1-0.5,0.3-0.7 c0.2-0.2,0.4-0.3,0.7-0.3h15.2l-2.3-2.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7l0.6-0.6c0.2-0.2,0.4-0.3,0.7-0.3 c0.3,0,0.5,0.1,0.7,0.3l5.2,5.2C32.2,26.5,32.3,26.8,32.3,27z'/%3E %3Cpath d='M11,15.2c0-0.3,0.1-0.5,0.3-0.7l5.2-5.2C16.7,9.1,16.9,9,17.2,9c0.3,0,0.5,0.1,0.7,0.3l0.6,0.6c0.2,0.2,0.3,0.4,0.3,0.7 c0,0.3-0.1,0.5-0.3,0.7l-2.3,2.3h15.2c0.3,0,0.5,0.1,0.7,0.3c0.2,0.2,0.3,0.4,0.3,0.7v1c0,0.3-0.1,0.5-0.3,0.7 c-0.2,0.2-0.4,0.3-0.7,0.3H16.2l2.3,2.3c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.6,0.6c-0.2,0.2-0.4,0.3-0.7,0.3 c-0.3,0-0.5-0.1-0.7-0.3l-5.2-5.2C11.1,15.7,11,15.5,11,15.2z'/%3E %3C/svg%3E\""

/***/ }),
/* 2148 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhDgAOAOZYANzc3G1tbcHBwcnJyWtra6+vr46OjqSkpK2trXBwcHFxcZWVlZKSkuTk5ICAgLa2tp6eno+Pj7y8vIyMjH19fXNzc3h4eNXV1YiIiMbGxtra2vHx8cjIyLKysrW1tW9vb4SEhJGRkdjY2H9/f5OTk6ampr29vePj44uLi7CwsHJyctLS0t/f32BgYKCgoNnZ2YGBgYWFhWxsbMLCws3NzczMzNfX13x8fJmZmXp6evDw8ExMTOrq6pycnLi4uIKCgvn5+cPDw6ysrKKioqGhoZqamsXFxV9fX6WlpZSUlGlpacTExJubm7+/v3l5eXt7e9vb25iYmODg4Kurq5+fn2NjY9TU1FJSUv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFgALAAAAAAOAA4AAAeXgFiCWB4YAR8jHIOLB04OEyQpMj6LWDMJDzRIFhAdBFIYFIJUG4MiOQUSO0EBlYNCUwJLVgquWBtEFQMcFxZGBgwRBhEsSTUAABoaKD06ABcDHhBQDA4UNxVNEw0DGSoIrkBYIC8ZAjgdtlhPDy0mBQo2gzwHgjALJ0olLgRMAkNXJFRaQaBIlBA/Aiyw1SBGlSMJwA0KBAA7"

/***/ }),
/* 2149 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2150);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./GridDropZone.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./GridDropZone.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2150 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-grid3-drag-insert-above {\n    border-top: 2px solid black;\n}\n.x-grid3-drag-insert-below {\n    border-bottom: 2px solid black;\n}\n\n.x-grid3-drag-append {\n    \n}\n", ""]);

// exports


/***/ }),
/* 2151 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2152);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./ActionColumnPlugin.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./ActionColumnPlugin.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2152 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "\n.ux-action-column-cell .x-grid3-cell-inner {\n    padding: 1px;\n}\n.ux-action-column-item {\n    float: left;\n    min-width: 16px;\n    height: 16px;\n    background-repeat: no-repeat;\n    margin: 0 5px 0 0;\n    cursor: pointer;\n}\n\n.ux-action-column-item span {\n    padding: 0 0 0 20px;\n    line-height: 18px;\n}\n", ""]);

// exports


/***/ }),
/* 2153 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2154);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./GridViewMenuPlugin.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./GridViewMenuPlugin.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2154 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".ext-ux-grid-gridviewmenuplugin-menuBtn.x-grid3-hd-btn {\n    display:block;\n}\n\n.ext-ux-grid-gridviewmenuplugin-menuBtn.x-grid3-hd-btn {\n    background-image:url(" + __webpack_require__(2155) + ");\n    width:16px;\n    background-color: #eeeeee;\n}\n\na.ext-ux-grid-gridviewmenuplugin-menuBtn.x-grid3-hd-btn:hover {\n    background-position: center;\n}\n", ""]);

// exports


/***/ }),
/* 2155 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cg%3E %3Cpath d='M35.8,7.9C35.2,7.3,34.5,7,33.7,7H9C8.1,7,7.4,7.3,6.9,7.9C6.3,8.4,6,9.1,6,10v22.4c0,0.8,0.3,1.5,0.9,2.1 C7.4,35,8.1,35.3,9,35.3h24.8c0.8,0,1.5-0.3,2.1-0.9c0.6-0.6,0.9-1.3,0.9-2.1V10C36.7,9.1,36.4,8.4,35.8,7.9L35.8,7.9z M20.2,33H9 c-0.2,0-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.3-0.2-0.4V11.7h11.8V33z M34.3,32.4c0,0.2-0.1,0.3-0.2,0.4C34,32.9,33.9,33,33.7,33H22.5 V11.7h11.8V32.4z M34.3,32.4'/%3E %3C/g%3E %3C/svg%3E\""

/***/ }),
/* 2156 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2157);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./ExpandFieldSet.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./ExpandFieldSet.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2157 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-tool-expand .x-tool-toggle {\n    background-position:0pt -195px;\n}\n\n.x-tool-collapse .x-tool-toggle {\n    background-position:0pt -210px;\n}", ""]);

// exports


/***/ }),
/* 2158 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2159);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./ImageField.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./ImageField.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2159 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".ux-imagefield-ct {\n     border:1px solid #B5B8C8;\n}\n.ux-imagefield-button{\n     position:absolute;\n     top:0px;\n     width: 100%;\n     height: 100%;\n}\n.ux-imagefield-text{\n    position: absolute;\n    text-align:center;\n}\n", ""]);

// exports


/***/ }),
/* 2160 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2161);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./Spinner.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./Spinner.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2161 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-form-spinner-proxy{\n    /*background-color:#ff00cc;*/\n}\n.x-form-field-wrap img.x-form-spinner-trigger {\n    background:transparent url(" + __webpack_require__(2162) + ") no-repeat 0 0;\n}\n\n.x-form-field-wrap .x-form-spinner-overup{\n    background-position:-17px 0;\n}\n.x-form-field-wrap .x-form-spinner-clickup{\n    background-position:-34px 0;\n}\n.x-form-field-wrap .x-form-spinner-overdown{\n    background-position:-51px 0;\n}\n.x-form-field-wrap .x-form-spinner-clickdown{\n    background-position:-68px 0;\n}\n\n.x-trigger-wrap-focus .x-form-spinner-trigger{\n    background-position:-85px 0;\n}\n.x-trigger-wrap-focus .x-form-spinner-overup{\n    background-position:-102px 0;\n}\n.x-trigger-wrap-focus .x-form-spinner-clickup{\n    background-position:-119px 0;\n}\n.x-trigger-wrap-focus .x-form-spinner-overdown{\n    background-position:-136px 0;\n}\n.x-trigger-wrap-focus .x-form-spinner-clickdown{\n    background-position:-153px 0;\n}\n.x-trigger-wrap-focus .x-form-trigger{\n    border-bottom: 1px solid #7eadd9;\n}\n\n.x-form-field-wrap .x-form-spinner-splitter {\n    line-height:1px;\n    font-size:1px;\n    background:transparent url(" + __webpack_require__(2163) + ") no-repeat 0 0;\n    position:absolute;\n    cursor: n-resize;\n}\n.x-trigger-wrap-focus .x-form-spinner-splitter{\n    background-position:-14px 0;\n}\n", ""]);

// exports


/***/ }),
/* 2162 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,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"

/***/ }),
/* 2163 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhHAACAJEAAJrG/6yomf///wAAACwAAAAAHAACAAACCpSPqRvt/4CclBYAOw=="

/***/ }),
/* 2164 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2165);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./HtmlEditor.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./HtmlEditor.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2165 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "/*\n    html editor plugin button icons\n*/\n.x-edit-indent {background: url(" + __webpack_require__(2166) + ") 0 0 no-repeat !important;}\n.x-edit-outdent {background: url(" + __webpack_require__(2167) + ") 0 0 no-repeat !important;}\n.x-edit-removeFormat {background: url(" + __webpack_require__(2168) + ") 0 0 no-repeat !important;}\n.x-edit-toggleFormat {background: url(" + __webpack_require__(2169) + ") 0 0 no-repeat !important;}\n\n/*\n    These are examples of styles for the button icons\n\n.x-edit-wordpaste {background: url(../images/document-word-text.png) 0 0 no-repeat !important;}\n.x-edit-table {background: url(../images/table.png) 0 0 no-repeat !important;}\n.x-edit-hr {background: url(../images/edit-rule.png) 0 0 no-repeat !important;}\n.x-edit-char {background: url(../images/edit-char.png) 0 0 no-repeat !important;}\n.x-edit-subscript {background: url(../images/text_sub.png) 0 0 no-repeat !important;}\n.x-edit-superscript {background: url(../images/text_super.png) 0 0 no-repeat !important;}\n*/\n\n/*\n    These styles are used for the character map\n*/\n.char-item {\n    float: left; \n    border: 1px solid #99BBE8; \n    margin: 3px; \n    text-align: center; \n    vertical-align: middle; \n    width: 20px; \n    height: 20px; \n    font-size: 14px;\n    color: #15428B;\n    cursor: pointer;\n}\n\n.char-item.x-view-selected {\n    background-color: #777;\n}\n\n.char-over {\n    border: 1px solid #15428B;\n    background-color:#d0def0;\n}\n", ""]);

// exports


/***/ }),
/* 2166 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAPlQTFRFNDQ0bGxsrK6quLm2Nzc3UFBQl5mUXl5enp+bY2NjpKWir7CtLjQ2Ozs6PD08QkNCR0hHSElITE1MTk9NUlNSVFRUVFVTV1hXWltZXV5cYGFfYmNhZGRkZmhlaGhoaGlnbG5qbW5scnRwc3RydXV1eHp2fX19fn98foB8gIGAg4WBhYWFiIqFiIqGlJSUm5yYnJybpKSkpKairq6urq+st7i1vLy7wcK/ycrIz8/N1NTU19fX29vb3t7e39/f4ODg4eHh4uLi5OTk5OXk5eXl5ubm5+fm6Ojo6urq6+vr7e3t7u7u7+/v8PDw8fHx8/Pz9fX19vb2+Pj4/CXxWQAAAAx0Uk5TQlNVXubp6uvr7OzuCJvAbgAAAKtJREFUGBkFwbtKA0EUANCzOxfjC9HCRjFKMH9gEbAR/W7tBBvbNFZWVik0EDbJzh3PiTKZl77ru661bLncRVmcA+DiI2YnewAcz6Kmb4BbatRmDrClRjZf4AZk1OYeDCCjNstp8Q48ZmT6GaZHL8AmI5vyt7p+hQVj1Org6nJ8hjUZ2dyd77wBDxmZTgfdE7Cu0Zo97ReQsak9ANo6xs+zyeGklD5r3Q6r8R9cmk0jmcd+aQAAAABJRU5ErkJggg=="

/***/ }),
/* 2167 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAG7AAABuwE67OPiAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAPlQTFRFNDQ0bGxsrK6quLm2Nzc3UFBQl5mUXl5enp+bY2NjpKWir7CtLjQ2Ozs6PD08QkNCR0hHSElITE1MTk9NUlNSVFRUVFVTV1hXWltZXV5cYGFfYmNhZGRkZmhlaGhoaGlnbG5qbW5scnRwc3RydXV1eHp2fX19fn98foB8gIGAg4WBhYWFiIqFiIqGlJSUm5yYnJybpKSkpKairq6urq+st7i1vLy7wcK/ycrIz8/N1NTU19fX29vb3t7e39/f4ODg4eHh4uLi5OTk5OXk5eXl5ubm5+fm6Ojo6urq6+vr7e3t7u7u7+/v8PDw8fHx8/Pz9fX19vb2+Pj4/CXxWQAAAAx0Uk5TQlNVXubp6uvr7OzuCJvAbgAAAKlJREFUGBkFwTEvQ2EUANDz3rtRQYTFRBqN/gNDE4vwu9kkFqvFpIOtEZrQ6vvudU4Mk/nQd33XVWXl618MixMAnD7H7HAHgINZtPQOMKVFK3OALS2yvIELkNHKFdiAjFZ+n4CbtrzMyOQeWC0/pxlZPMDC6nuoMVrjDtbOJx8tI4tH4PpsrzIydbfAenM0tqhSXwA7GT+tB0CtY3w5nuxPhqHP1rab1fgPDelRqjgNY9oAAAAASUVORK5CYII="

/***/ }),
/* 2168 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJXSURBVDiNjZJfSFNRHMe/93K1OSfCWVKyyIjcS4LQg8hVlKBQ8N9TDGxiDXOa1NjWwwp9yGBS0YOLQIbgc7gQoh6KYOgg0ouEGT2ojB4mIdz9mHOFZ9OdXjZZZrYfnJfD+Xx+v/M9RyIiFFM9PT3tkUjkAxHtFe4rxcAjIyPewcHBR1arNcQYcxRK/ivwNjT4znZ13TGbzWXd3d19QogsY2wgLzlWMKqq3ts1NQ9/LC5KyybT1uW2tlMej6dfUZR9xpiTiPb+KRhVVe9Ni8VfKURpGYAtXa9aWV7eae/srHC5XI7q6mojY6xPOirEQji9u4vvjY24OjGBjbU1LMzPp2y9vSZJkhAMBkNyMXCrz4f1mRlcqK0FNM34eWlpW1EUNDU1tf4xwZiqem5YLBOF8BW/H98CAZy32RD2+3FydhbrkpQxBQI7HzXtBYgIRASHw+EebmkJf2pu5l9VVbzxeMR2LCZWJidFMhYTc06niDAmFsrLxZyi8GuyfJ+IcABHo9GUrusZp6qGX7nd+5xz8SUQEInNzb/g67LszTc+gEWudF1Pjw0PR5OJhOCcHwsTERSDwXCaMXYin4PZbC65Oz5+5qnPF72YzZ6zhEKy4BxxztOhbPbBc11/djh4yeVyPU4kEnuioOLxePpWff3710YjP6rzwRVyryC53e4nhyVElB6oq3tnl+V7AKTjBFUA6oeGhoKFktXV1bjdbu8HUArAAKACQGVumQCU5L/yNoCKqampl8lk0tLR0XEplUplpqen32qalgLQnDuTBPATwC8AnIgyvwEaFZC0LDNEwQAAAABJRU5ErkJggg=="

/***/ }),
/* 2169 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEPSURBVHjaxZO/asJQFMbvFaGQv0OKQ+IigjoVpI+QoQ9QXDPkQURfIWQ3iqO4ZA74Ag4dOrm2WdokU4ZO6XfDNQmJEEHQD3585ybnfpw7HJJlGdkevjLmV9Do7xIu0zR/YM+kXb/2fFMcOudCUZQnWZZtTdN6QRBQnP8AYc7OgiD0VVV9ByEpVU6AHyfP81aVQMrL3H3f/4btLct6g79cmsBmXg0Aude+O8wbAY7jfNQaC6pyXfez9oTLkiSpfEJT7QFxHD84IEmS2wKiKCrq+09gGMaU0vKeruuvYRgerwoQRXEJm7FFOQv1Gt93aZou6v2UbRa5QcV68mkkvpF9MARjMAEjMAAG0Hh/h939B5Zpfirr+TH2AAAAAElFTkSuQmCC"

/***/ }),
/* 2170 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2171);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./LayerCombo.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./LayerCombo.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2171 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".ux-layercombo-layer form {\n    background-color: #E5EDF8\n}", ""]);

// exports


/***/ }),
/* 2172 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2173);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./PeriodPicker.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./PeriodPicker.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2173 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".ux-pp-field {\n    width: 100%;\n}\n\n.ux-pp-field {\n    float: left;\n}\n\n.ux-pp-range {\n    float: left;\n    width: 40%;\n}\n\n.ux-pp-controls {\n    float: left;\n    width: 60%;\n    position: relative;\n}\n\n.ux-pp-period {\n    width: 100%;\n    padding-top: 2px;\n    box-sizing: border-box;\n    border-left: 15px solid transparent;\n    border-right: 15px solid transparent;\n    text-align: center;\n    cursor: pointer;\n}\n\n.ux-pp-prev {\n    background-image: url(" + __webpack_require__(2174) + ");\n    left: 0px;\n}\n\n.ux-pp-prev:hover {\n    background-image: url(" + __webpack_require__(2175) + ");\n}\n\n.ux-pp-next {\n    background-image: url(" + __webpack_require__(2176) + ");\n    right: 0px;\n    top: 0px;\n}\n\n.ux-pp-next:hover {\n    background-image: url(" + __webpack_require__(2177) + ");\n}\n\n.ux-pp-prev, .ux-pp-next, .ux-pp-mode {\n    overflow: hidden;\n    width: 15px;\n    height: 15px;\n    cursor: pointer;\n    position: absolute;\n    margin: 2px;\n    opacity: 0.6;\n}\n\n.ux-pp-mode {\n    background-image: url(" + __webpack_require__(2178) + ");\n    left: 17px;\n}\n.ux-pp-mode-absolute {\n    background-position: 15px -135px;\n}\n\n.ux-pp-mode-relative {\n    background-position: 0px -135px;\n}\n\n.x-pp-combo {\n    position: absolute;\n    top: 0;\n}\n\n.x-pp-combo .ux-pp-prev, .x-pp-combo .ux-pp-next {\n    margin-top: 1px;\n}\n\n.x-pp-combo .ux-pp-period {\n    margin-top: 1px;\n}\n\n.ux-pp-this .ux-pp-period {\n    font-weight: bold;\n}", ""]);

// exports


/***/ }),
/* 2174 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhEAAQAIcAAGdnZ2xsbHJycnh4eH9/f0D/QIODg4WFhYaGhouLi42NjY6OjpKSkpOTk5mZmZ6enp+fn6GhoaOjo6SkpKioqKmpqbi4uLm5ucvLy9vb293d3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAUALAAAAAAQABAAAAhMAAsIHEiwoMGDCAtOSFiQwgOGAytocACxwAQNFhpAlKABQwUFDCNkwHABAgKIDS5QYECg4oEGCwZULGAggYCZBRAEwFkAAM+fQA0GBAA7"

/***/ }),
/* 2175 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhEAAQAIcAACRIkChNli1TnjNZpjhgrz9otx1m9S9kzy9l0yxm2DBiyDFq2zhu3D5z2z913SRq8ixx7jRy6D5++URvwEJt1Ep1yE970Eh630574UD/QFOA1lOE3VWF3liH30+K9k+J/VGD4VeH4FaE6VmK4l+L4F+M4WCM5GWP62mR42iU5WuT62+W7G2Z5mec+2ma/2ic+XGa536f7oKg54Wu/42r8Iiu/5a076G+8KK9/6W//6rE7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAABkALAAAAAAQABAAAAhMADMIHEiwoMGDCAuGSFiQhAaGA0vksAAxQ4ccLipA5JBjxocJDDfgqPFCQgGIDVp4gECg4oEIDwZUzKDAgICZGRAEwJkBAM+fQA0GBAA7"

/***/ }),
/* 2176 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhEAAQAIcAAGdnZ3h4eED/QIeHh4uLi46Ojo+Pj5KSkpSUlJmZmaGhoaenp6ioqKqqqrGxsbW1tbe3t7m5ucnJycvLy9HR0dvb2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAQABAAAAhIAAUIHEiwoMGDCAVASGjwAQOGBB1UeAhRQIMKEwpUXEAhQgSNDBVIiHBgQACGCSCUBAARgYIBLCEaKBATIoGaEAdU3MmzJ8GAADs="

/***/ }),
/* 2177 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhEAAQAIcAACRIkChNli1TnjNZpjhgrz9otx1m9S9kzy9l0yxm2DBiyDFq2zhu3D5z2z913SRq8ixx7jRy6D5++URvwEJt1Ep1yE970Eh630574UD/QFOA1lOE3VWF3liH30+K9k+J/VGD4VeH4FaE6VmK4l+L4F+M4WCM5GWP62mR42iU5WuT62+W7G2Z5mec+2ma/2ic+XGa536f7oKg54Wu/42r8Iiu/5a076G+8KK9/6W//6rE7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAABkALAAAAAAQABAAAAhIADMIHEiwoMGDCDPASGiQBQmGBFPgeAgxgwkcNShUHGHjRQuNDEHQaAEhwQCGF2CUBADRAYgELCEyoBAT4oKaEBNU3MmzJ8GAADs="

/***/ }),
/* 2178 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64, "

/***/ }),
/* 2179 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2180);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./DisplayPanel.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./DisplayPanel.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2180 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-ux-display .x-form-item {\n    overflow: hidden;\n    line-height: 12px;\n}\n\n.x-ux-display label.x-form-item-label {\n    color:#A0A0A0;\n    text-align:right;\n    font-size:11px;\n    padding-left: 5px;\n    padding-bottom: 1px;\n}\n\n.x-ux-display .x-form-element {\n    color:#404040;\n    font-family:verdana;\n    font-size:11px;\n}\n\n.x-ux-display textarea.x-ux-display-textarea {\n    background: none;\n    border: none;\n}\n\n.x-ux-display .x-ux-display-background-border textarea.x-ux-display-textarea {\n    background: none;\n    border: 1px solid #99BBE8;\n    -moz-border-radius: 8px;\n    -webkit-border-radius: 8px;\n    -khtml-border-radius: 8px;\n}\n\n.x-ux-display .x-ux-display-background-solid {\n    border: 1px solid #e5e6fe;\n    background-color: #e5e6fe;\n    -moz-border-radius: 8px;\n    -webkit-border-radius: 8px;\n    -khtml-border-radius: 8px;\n}\n\n.x-ux-display .x-ux-display-background-inner {\n    border: 0;\n    background-color: #e5e6fe;\n    -moz-border-radius: 0px;\n    -webkit-border-radius: 0px;\n    -khtml-border-radius: 0px;\n}\n\n.x-ux-display .x-ux-display-background-border {\n    border: 1px solid #99BBE8;\n    -moz-border-radius: 8px;\n    -webkit-border-radius: 8px;\n    -khtml-border-radius: 8px;\n}\n\n.x-ux-display .x-ux-display-declaration {\n    color:#A0A0A0;\n    font-size:12px;\n    font-weight:bold;\n}\n\n.x-ux-display .x-ux-display-header {\n    color:#505050;\n    font-size:10px;\n    font-weight:bold;\n}\n\n.x-ux-display .x-ux-display-header .x-tree-node-leaf img {\n    height: 16px;\n}\n\n.x-ux-display .x-ux-display-background-declaration {\n    position: absolute;\n    left:5px;\n    bottom:6px;\n}\n\n.x-ux-display .x-form-item {\n    padding-left: 2px;\n}\n\n.x-ux-display .x-form-element {\n    padding-left: 5px !important;\n}\n\n/* NOTE: this makes ugly details panel in edit dialogs\n.tw-editdialog .x-form-item .x-form-display-field {*/\n    /*border: 1px solid #b5b8c8;*/\n    /*padding: 3px;*/\n    /*height: 11px;*/\n    /*background-color:#fff;*/\n    /*background-image:url(../../../../themes/tine20/resources/images/tine20/form/text-bg.gif);*/\n/*}*/\n\n.x-ux-displayfield-text {\n    background-image: none;\n}\n\n.x-ux-display p {\n    padding: 2px;\n    color: #505050;\n}", ""]);

// exports


/***/ }),
/* 2181 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2182);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./CenterLayout.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./CenterLayout.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2182 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "/*!\n * \n */\n.ux-layout-center-item {\n    margin:0 auto;\n    text-align:left;\n}\n.ux-layout-center .x-panel-body,   \nbody.ux-layout-center {            \n    text-align:center;\n}\n", ""]);

// exports


/***/ }),
/* 2183 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2184);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../js/node_modules/css-loader/index.js!./treegrid.css", function() {
			var newContent = require("!!../../../js/node_modules/css-loader/index.js!./treegrid.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2184 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "/*!\n * Ext JS Library 3.1+\n * Copyright(c) 2006-2009 Ext JS, LLC\n * licensing@extjs.com\n * http://www.extjs.com/license\n */\n.x-treegrid-root-table {\n    border-right: 1px solid;\n}\n\n.x-treegrid-root-node {\n    overflow: auto;\n}\n\n.x-treegrid-hd-hidden {\n    visibility: hidden;\n    border: 0;\n    width: 0;\n}\n\n.x-treegrid-col {\n    border-bottom: 1px solid;\n    height: 20px;\n    overflow: hidden;\n    vertical-align: top;\n    -o-text-overflow: ellipsis;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.x-treegrid-text {\n    padding-left: 4px;\n    -moz-user-select: none;\n    -khtml-user-select: none;\n}\n\n.x-treegrid-resizer {\n    border-left:1px solid;\n    border-right:1px solid;\n    position:absolute;\n    left:0;\n    top:0;\n}\n\n.x-treegrid-header-inner {\n    overflow: hidden;\n}\n\n.x-treegrid-root-table,\n.x-treegrid-col {\n    border-color: #ededed;\n}\n\n.x-treegrid-resizer {\n    border-left-color:#555;\n    border-right-color:#555;\n}", ""]);

// exports


/***/ }),
/* 2185 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2186);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./LockCombo.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./LockCombo.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2186 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "span.x-form-twin-triggers img.x-form-locked-trigger{\n    background-image: url(" + __webpack_require__(225) + ");\n    cursor:pointer;\n}\n\nspan.x-form-twin-triggers img.x-form-unlocked-trigger{\n    background-image: url(" + __webpack_require__(226) + ");\n    cursor:pointer;\n}", ""]);

// exports


/***/ }),
/* 2187 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2188);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./LockTextField.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./LockTextField.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2188 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "img.x-form-trigger.x-form-locked-trigger{\n    background-image: url(" + __webpack_require__(225) + ");\n    cursor:pointer;\n}\n\nimg.x-form-trigger.x-form-unlocked-trigger{\n    background-image: url(" + __webpack_require__(226) + ");\n    cursor:pointer;\n}", ""]);

// exports


/***/ }),
/* 2189 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2190);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./Menu.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./Menu.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2190 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-ux-menu-title {\n    background: #ebeadb url(" + __webpack_require__(23) + ") repeat-x;\n    border-bottom:1px solid #99bbe8;\n    color:#15428b;\n    font:bold 10px tahoma,arial,verdana,sans-serif;\n    display:block;\n    padding:3px;\n}", ""]);

// exports


/***/ }),
/* 2191 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2192);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./MessageBox.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./MessageBox.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2192 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-ux-messagebox-msg .x-box-mc {\n    font-size:14px;\n}\n#x-ux-messagebox-msg-div {\n    position:absolute;\n    left:100px;\n    top:10px;\n    width:250px;\n    z-index:20000;\n}\n", ""]);

// exports


/***/ }),
/* 2193 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2194);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./EditRecord.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./EditRecord.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2194 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-panel-footer .x-form-item label {\n    float: left;\n}\n.x-panel-footer .x-form-item div {\n    padding-top: 0px;\n}\n.tw-editdialog .x-panel-footer {\n    background-color: rgb(240, 240, 240);\n}\n", ""]);

// exports


/***/ }),
/* 2195 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2196);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./TagsPanel.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./TagsPanel.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2196 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".x-widget-tag-action-detach {\n    background-image:url(" + __webpack_require__(2197) + ") !important;\n}\n\n.action_tag {\n    background-image:url(" + __webpack_require__(2198) + ") !important;\n}\n\n.action_tag_delete {\n    background-image:url(" + __webpack_require__(2199) + ") !important;\n}\n\n.x-widget-tag-tagitem {\n    margin: 1px 2px 1px 1px;\n    background-color: #FFF8E0;\n    height: 13px;\n    border: 1px solid gray;\n    float: left;\n    color: gray;\n}\n\n.x-widget-tag-tagitem-color {\n    padding: 0 0 0 0;\n    margin: 0 0 0 0;\n    float: left;\n    background-color: #FFFFFF;\n    border-right: 1px solid gray;\n    width: 4px;\n    height: 13px;\n}\n\n.x-widget-tag-tagitem-text {\n    padding: 0 5px 0 5px;\n    margin: 0 0 0 0;\n    line-height: 13px;\n    font-size: 11px;\n    font-weight: normal;\n    font-style: italic;\n}\n\n.x-widget-tag-tagitem-over {\n    /*background-color: #EFEFEF;*/\n    border: 1px solid black;\n    color: black;\n}\n\n.x-widget-tag-tagitem-selected {\n    background-color: #FFFFCE;\n    border: 1px solid black;\n    color: black;\n}\n\n.x-widget-tag-qtip-occurrence {\n    font-size: 8px;\n    font-style: bold;\n}", ""]);

// exports


/***/ }),
/* 2197 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath id='tag_detache' d='M18.3,29.4l-6.1-6.1c-0.4-0.4-0.4-1,0-1.3l10.4-10.4L17.1,6c-0.6-0.6-1.3-1-2.3-1.4C13.9,4.2,13,4,12.2,4 H2.9c-0.8,0-1.4,0.3-2,0.9S0,6.1,0,6.9v9.3c0,0.8,0.2,1.7,0.6,2.6c0.4,1,0.9,1.7,1.4,2.3l16,16c0.6,0.6,1.2,0.8,2,0.8 c0.8,0,1.5-0.3,2-0.8l6.9-6.9h-9.6C19.2,30.2,18.5,29.6,18.3,29.4z M9.2,13.2C8.6,13.8,8,14,7.2,14c-0.8,0-1.5-0.3-2-0.8 c-0.6-0.6-0.8-1.2-0.8-2c0-0.8,0.3-1.5,0.8-2c0.6-0.6,1.2-0.8,2-0.8c0.8,0,1.5,0.3,2,0.8c0.6,0.6,0.8,1.2,0.8,2 C10,12,9.8,12.6,9.2,13.2z M41.7,27H30.1l12.2-12.2c0.3-0.3,0.3-0.8,0-1.1l-9.2-9.2c-0.2-0.2-0.4-0.2-0.6-0.2 c-0.2,0-0.4,0.1-0.6,0.2L14.4,21.9c-0.3,0.3-0.3,0.8,0,1.1l5.3,5.3c0.2,0.2,0.4,0.2,0.6,0.2h21.4c0.4,0,0.8-0.4,0.8-0.8 C42.5,27.3,42.2,27,41.7,27L41.7,27z M32.5,6.2l8.1,8.1l-4.1,4.1L31,23.8l-8.1-8.1L32.5,6.2z M27.8,27'/%3E %3C/svg%3E\""

/***/ }),
/* 2198 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M14,11.2c0-0.8-0.3-1.5-0.8-2c-0.6-0.6-1.2-0.8-2-0.8s-1.5,0.3-2,0.8c-0.6,0.6-0.8,1.2-0.8,2s0.3,1.5,0.8,2 c0.6,0.6,1.2,0.8,2,0.8s1.5-0.3,2-0.8C13.8,12.6,14,12,14,11.2z M38,24.1c0,0.8-0.3,1.5-0.8,2l-11,11c-0.6,0.6-1.3,0.8-2,0.8 c-0.8,0-1.5-0.3-2-0.8l-16-16c-0.6-0.6-1-1.3-1.4-2.3S4,17,4,16.2V6.9c0-0.8,0.3-1.4,0.9-2S6.1,4,6.9,4h9.3c0.8,0,1.7,0.2,2.6,0.6 s1.7,0.9,2.3,1.4l16,16C37.7,22.6,38,23.3,38,24.1z'/%3E %3C/svg%3E\""

/***/ }),
/* 2199 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M37.1,22l-16-16c-0.6-0.6-1.3-1-2.3-1.4C17.9,4.2,17,4,16.2,4H6.9c-0.8,0-1.4,0.3-2,0.9S4,6.1,4,6.9v9.3 c0,0.8,0.2,1.7,0.6,2.6c0.4,1,0.9,1.7,1.4,2.3l16,16c0.6,0.6,1.2,0.8,2,0.8c0.8,0,1.5-0.3,2-0.8l11-11c0.6-0.6,0.8-1.2,0.8-2 C38,23.3,37.7,22.6,37.1,22z M13.2,13.2c-0.6,0.6-1.2,0.8-2,0.8s-1.5-0.3-2-0.8c-0.6-0.6-0.8-1.2-0.8-2s0.3-1.5,0.8-2 c0.6-0.6,1.2-0.8,2-0.8s1.5,0.3,2,0.8c0.6,0.6,0.8,1.2,0.8,2S13.8,12.6,13.2,13.2z M31.6,23.7c0,0.2-0.1,0.4-0.2,0.5 c-0.1,0.1-0.3,0.2-0.5,0.2h-6.3v6.3c0,0.2-0.1,0.4-0.2,0.5c-0.1,0.1-0.3,0.2-0.5,0.2h-1.5c-0.2,0-0.4-0.1-0.5-0.2 c-0.1-0.1-0.2-0.3-0.2-0.5l0-6.3l-6.3,0c-0.2,0-0.4-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5v-1.5c0-0.2,0.1-0.4,0.2-0.5 c0.1-0.1,0.3-0.2,0.5-0.2l6.3,0l0-6.3c0-0.2,0.1-0.4,0.2-0.5c0.1-0.1,0.3-0.2,0.5-0.2h1.5c0.2,0,0.4,0.1,0.5,0.2 c0.1,0.1,0.2,0.3,0.2,0.5v6.3h6.3c0.2,0,0.4,0.1,0.5,0.2c0.1,0.1,0.2,0.3,0.2,0.5V23.7z'/%3E %3C/svg%3E\""

/***/ }),
/* 2200 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2201);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./FilterToolbar.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./FilterToolbar.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2201 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".action_delThisFilter {\n    background-image:url(" + __webpack_require__(227) + ") !important;\n}\n\n.action_delAllFilter {\n    background-image:url(" + __webpack_require__(227) + ") !important;\n}\n\n.action_addFilter {\n    background-image:url(" + __webpack_require__(98) + ") !important;\n}\n\n.action_saveFilter {\n    background-image:url(" + __webpack_require__(2202) + ") !important;\n}\n\n.action_startFilter {\n    background-image:url(" + __webpack_require__(2203) + ") !important;\n}\n\n.x-panel-bwrap .tw-filtertoolbar  {\n    background-image: none;\n    background-color: #E5EDF8;\n}\n\n\n.tw-filtertoolbar  td { \n    padding: 0px 5px 0px;\n}\n\n.tw-filtertoolbar .tw-ftb-frow-pbutton { \n    padding: 0px 0px 0px;\n}\n\n.tw-filtertoolbar .tw-ftb-frow-mbutton { \n    padding: 0px 0px 0px;\n}\n\n.tw-filtertoolbar .tw-ftb-frow-prefix {\n    text-align: right;\n}\n\n/* fix Ext.Button Layout */\n.tw-filtertoolbar .x-btn td {\n    padding: 0px;\n}\n.tw-filtertoolbar .x-btn-icon .x-btn-center {\n    padding:1px;\n}\n\n/* criteria tabls \n.tw-ftb-criteria-tabs .x-tab-strip-wrap {\n    background-color: #E5EDF8;\n}\n\n.tw-ftb-criteria-tabs .x-tab-strip-wrap ul {\n    border-bottom-color: #CEDFF5;\n}\n*/\n\n/* structure treepanel\n.tw-ftb-filterstructure-treepanel .x-panel-tbar-noborder .x-toolbar {\n    background-image: none;\n    background-color: #E5EDF8;\n    border-color: #E5EDF8;\n}\n.tw-ftb-filterstructure-treepanel .x-panel-body {\n    background-color: #E5EDF8;\n    border-color: #E5EDF8;\n}\n*/\n\n.tw-ftb-filterstructure-treepanel .x-panel-tbar-noborder .x-toolbar,\n.tw-ftb-filterstructure-treepanel .x-panel-body,\n.tw-ftb-filterpanel .x-panel-body,\n.tw-ftb-filterpanel .x-toolbar {\n    background-image: none;\n    background-color: #E5EDF8;\n    border-bottom: none;\n}\n\n.tw-ftb-filterpanel .ux-arrowcollapse .x-tool-toggle {\n    background-color: #E5EDF8;\n}\n/*\n.tw-filtertoolbar .fw-ftb-actionrow td { \n    padding: 0px 5px 1px;\n}\n*/\n", ""]);

// exports


/***/ }),
/* 2202 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M38,14.3v20.6c0,0.6-0.2,1.1-0.6,1.5S36.5,37,35.9,37h-4c0.3-0.4,0.5-0.8,0.5-1.4V24.9c0-1.2-1-2.1-2.1-2.1H11.8 c-1.2,0-2.1,1-2.1,2.1v10.7c0,0.5,0.2,1,0.5,1.4h-4c-0.6,0-1.1-0.2-1.5-0.6S4,35.5,4,34.9V5.1C4,4.5,4.2,4,4.6,3.6S5.5,3,6.1,3H10 C9.8,3.3,9.7,3.6,9.7,4v11.3c0,1,0.8,1.9,1.9,1.9h13.4c1,0,1.9-0.8,1.9-1.9V4c0-0.4-0.1-0.7-0.3-1h0.2c0.6,0,1.2,0.1,1.9,0.4 c0.7,0.3,1.3,0.6,1.7,1.1l6.2,6.2c0.4,0.4,0.8,1,1.1,1.7C37.9,13.1,38,13.7,38,14.3z M12.5,34.2h17v-8.5h-17V34.2z M18.9,14.3h4.3 c0.2,0,0.4-0.1,0.5-0.2s0.2-0.3,0.2-0.5V6.5c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2h-4.3c-0.2,0-0.4,0.1-0.5,0.2 c-0.1,0.1-0.2,0.3-0.2,0.5v7.1c0,0.2,0.1,0.4,0.2,0.5S18.7,14.3,18.9,14.3z'/%3E %3C/svg%3E\""

/***/ }),
/* 2203 */
/***/ (function(module, exports) {

module.exports = "\"data:image/svg+xml,%3C?xml version='1.0' encoding='utf-8'?%3E %3C!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3E %3Csvg version='1.1' id='Ebene_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 42.5 42.5' style='enable-background:new 0 0 42.5 42.5;' xml:space='preserve'%3E %3Cpath d='M31.2,29.1c4.5-6.1,3.9-14.7-1.7-20C23.4,3.4,13.9,3.7,8.1,9.7c-5.7,6.1-5.5,15.6,0.6,21.4c5.6,5.3,14.3,5.5,20.1,0.7 M10.6,29.1c-4.9-4.7-5.2-12.5-0.5-17.5c4.7-4.9,12.5-5.2,17.5-0.5c4.9,4.7,5.2,12.5,0.5,17.5C23.4,33.6,15.6,33.8,10.6,29.1z M31.2,29.1l7.2,6.8c0.4,0.3,0.5,0.8,0.6,1.2c0,0.5-0.2,0.9-0.5,1.3S37.7,39,37.2,39c-0.5,0-0.9-0.2-1.3-0.5l-7.2-6.8'/%3E %3C/svg%3E\""

/***/ }),
/* 2204 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2205);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./AccountPicker.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./AccountPicker.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2205 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "\n.x-form-field-wrap .x-form-account-trigger {\n    background-image:url(" + __webpack_require__(2206) + ");\n    cursor:pointer;\n}", ""]);

// exports


/***/ }),
/* 2206 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhZgAYAOfnAAACAAEEAAUIBAcJBQgLBwoMCA8RDRASDxIUERQVExcYFhwdGx0fHB8gHh0hIyAhHx4iJCEjICQiJiAkJiIkISQlIyUpKyooKygpJyYqLCcrLSosKSktLystKiwtKy0uLCsvMS4vLSkwNywwMioxOC8xLisyOC4yNDAyLzIzMS41PDQ2MzA3PjM3OTc5Njg5Nzo7OTQ8QjU8QzY9RDs9Oj0/PDtAQj5APT9APjpBSEBBPz1CRDtDST1ESz5FTD9GTTlITUVHREFIT0RJS0dJRkhJR0NKUUVKTElKSENLUkhMTkpMSkVNU0tNSkxOS01SVE9UVlVWVFNXWlZaXFhcXlldX1pfYVNiZ19hXl1iZGJkYV1lbGBlZ15mbWpsaV5we2pucWdvdmx3g3J5gWt+iXV8hHZ9hXJ+in1/fG+CjXOCiHqBiXOClHaCjnGEj4GDgIKEgXmFkn+GjoWHhHiLl3uKnIeJhn6Kl4aLjoSMk3+OoIuNioCPoYyOi4OSmJCSj5GTkIiXqpKXmX2crIqZrIybopSfraGjoJemuZmou36t2qWnpKepppirxJKxwaSttZ+vtpOzwpS0w6KxxZ6yyp+zy5e3x6m0wqu7wbS4x7e5tqi71Li6t7q8ua++0rC/072/vL7Bva/D3LDE3bLF3rfHzbXI4bbJ4zn/QrfK5KvP5a/P38jKx7jM5bnN2azQ5snLyLnN5q3R57HR4bvP6LzQ6cDR18bS4NDSz9HT0NLU0dPV0tTW09XX1Mba5tbY1cfb59vY3Nja1sXc/Nnb18nd98fe/sve+Mzf+c/f89ze283g+tDg9NTg7tHh9d7g3dbi8NDk/tbn7ers6evu6u3v697y/+jw+e7w7d/z/+/x7uD1//Dy7+X1/Ob3/fP18uj5//T38+n6//n7+Pf9//j+//7//P///////////////////////////////////////////////////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAZgAYAAAI/gAzCRxIsGAmVIoSKlzIUBHChhATPozYcCLFhRYvSizHsaPHj8EykRtJsqRJWoqAqVzJsiVKkzBLvowZE2XLmyxRctvJs2dPjpmgCR1KlGg5cylxKlVUtOnQo4rASZ1Klao5pEqX+tza81tQp06xZr3JFGxTpFXTWk06lqUibXDhVgOFJQqgZ3G1jfs6tNklKlDy3CIqtu3Ksn3/Bh48FC1Vb6WySBEkba1ht9gyZ2akxUmQInY0Y9vrrHRpQ1aaBDmyxrSzwip9QZryRI6rlopcO0OtmrVrpN6CB3/ExTMSPMK9wQYmm7Zt3NWiV4OlgwiNDitwsJK+l5l3Zp9s/ljHbsPT9+WFqigJMsQM7u/gxV9fUf68om74u9naMX6FDlv5oacee+65JV01fcBQQgUMfgAHd5kkI2EycSjIYAUflDEhbJjIh10NmLg1IYUWNqihhEhlo2I2fpSIoRwrcujhCiC6Rc2N1HjhAgUP9EiBFzjudcyQx3SxY48PUNAFkbCt4eIHY7hFZJFH+rjkkCmuCEaVSYIRI1vAOLlgg1EeNs2Z03ixQQMLtLkAGmgKSWQXa7q5gBhMgskFlxRsIeWcdbqJJ5aKWGOoNWEE2qYah8K2J48++nmYMpQqs8gGDCigAAVNdFJpOJmYIqopgViQqQIO/NDIqNcoMsur/rNcoegCX8D6iiKjkmqqpqmuKmqrwwQ7DCIanDoBE5sI2yqssc5a66u3EiMtMcLsgQICCCARyrTEgJqrKWyAgO0PlOTa6ivovjJIBqdCIIQj6d76bbjjlsuqIsbka8wwfJiArRGk6GvMuemu2+678SoizMILH5KCAQaE8AfDwoAay8UXE0ICxBzU0QrGBKO7ihsjYAuEJfHeinHGGxvQ8ccXt7rMzDMnogLEIgSCDM0hvzJyyQicnLIivfTCyRxBYIDCAQNE8IIOb2jSC6i11FJJGz4ozbTTOZwxSS09q3sCx3SoknDVV2e9dNMvdP11q9FEQ4oeRlywttM93EFK/jRhDzK2y2UnzAsvN5TgwQMFDKB4AhVQ4AIvVNcywwiHJ7544yyArQi6kqTRg9Zs20BGJOgqUvXklSs+AOMUZA53NDyckPrlEsTA9+avdP753S+ITvqtu+yCQAMDAGD88QAovkvkwxePvPGKa46uDJQjrjrrLZRedfPPQz+A5nFz373it09fveWrN579rbq07/778Ede9fz000+w+M8rrn39/M//etwADGAA70e87iVvAKXLhQIXyMAGyq9/9WuVLCZIwQpa8FYQ7N//BMjB21nwgxW8FS5GSMISmvCBGayaBEEIQgym0H6K6KAMV8jCCyrChDgsIQpTSMMaUtCFXi9UYQxlyMEe+lAWIsxhDneYQSP6EIhB3CAR4+bEGiZRiSfMRBD9p4gjhtB0WwTfFAfYRS9O8IpYJCETIVhFFkLxhVKcYhtbeMM06lCLYZzjB9/IwyGOkYplNOOtAgIAOw=="

/***/ }),
/* 2207 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2208);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./PreviewPanel.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./PreviewPanel.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2208 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".preview-panel {\n    padding: 5px;\n    white-space: normal;\n    height: 100%;\n    background-color: #e5edf8;\n    position: relative;\n    display: inline;\n}\n\n.preview-panel img {\n    vertical-align: middle;\n    -moz-border-radius: 8px;\n    -webkit-border-radius: 8px;\n    -khtml-border-radius: 8px;\n}\n\n.preview-panel-left {\n    float: left;\n    font-size: 10px;\n    color: #404040;\n    font-family: verdana;\n    line-height: 16px;\n    overflow-y: auto;\n}\n\n.preview-panel-right {\n    float: right;\n    font-size: 10px;\n    color: #404040;\n    font-family: verdana;\n    line-height: 16px;\n}\n\n.preview-panel-bold {\n    font-weight: bold;\n}\n\n.preview-panel-image {\n    padding:0px;\n    display: table-cell;\n    vertical-align: middle;\n    position: relative;\n    left: -7px;\n}\n\n.preview-panel-office {\n    width: 360px;\n    margin: 5px 2px 5px 5px;\n}\n\n.preview-panel-privat {\n    width: 360px;\n    margin: 5px 2px 5px 5px;\n}\n\n.preview-panel-description {\n    width: 200px;\n    position: relative;\n    height: 97px;\n    margin: 5px 2px 5px 5px;\n    padding: 5px;\n    border: solid 3px #e5e6fe;\n    overflow: hidden;\n}\n\n.preview-panel-description,\n.preview-panel-description a,\n.preview-panel-description a:link,\n.preview-panel-description a:visited,\n.preview-panel-description a:hover,\n.preview-panel-description a:active {\n    color: #a0a0a0;\n    text-decoration: none;\n}\n\n.preview-panel-address {\n    width: 150px;\n    padding: 5px;\n}\n\n.preview-panel-contact {\n    width: 180px;\n    padding: 5px;\n}\n\n.bordercorner_1 {\n    background-image: url(" + __webpack_require__(2209) + ");\n    background-repeat: no-repeat;\n    background-position: left top;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 4px;\n    height: 4px;\n}\n\n.bordercorner_2 {\n    background-image: url(" + __webpack_require__(2210) + ");\n    background-repeat: no-repeat;\n    background-position: left top;\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 4px;\n    height: 4px;\n}\n\n.bordercorner_3 {\n    background-image: url(" + __webpack_require__(2211) + ");\n    background-repeat: no-repeat;\n    background-position: left top;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    width: 4px;\n    height: 4px;\n}\n\n.bordercorner_4 {\n    background-image: url(" + __webpack_require__(2212) + ");\n    background-repeat: no-repeat;\n    background-position: left top;\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    width: 4px;\n    height: 4px;\n}\n\n.preview-panel-adressbook-nobreak {\n    min-width: 1075px;\n}\n\n.bordercorner_gray_1 {\n    background-image: url(" + __webpack_require__(2213) + ");\n    background-repeat: no-repeat;\n    background-position: left top;\n    position: absolute;\n    top: -3px;\n    left: -3px;\n    width: 5px;\n    height: 5px;\n}\n\n.bordercorner_gray_2 {\n    background-image: url(" + __webpack_require__(2214) + ");\n    background-repeat: no-repeat;\n    background-position: left top;\n    position: absolute;\n    top: -3px;\n    right: -3px;\n    width: 5px;\n    height: 5px;\n}\n\n.bordercorner_gray_3 {\n    background-image: url(" + __webpack_require__(2215) + ");\n    background-repeat: no-repeat;\n    background-position: left top;\n    position: absolute;\n    left: -3px;\n    bottom: -3px;\n    width: 5px;\n    height: 5px;\n}\n\n.bordercorner_gray_4 {\n    background-image: url(" + __webpack_require__(2216) + ");\n    background-repeat: no-repeat;\n    background-position: left top;\n    position: absolute;\n    right: -3px;\n    bottom: -3px;\n    width: 5px;\n    height: 5px;\n}\n\n.preview-panel-declaration {\n    color: #a0a0a0;\n    font-size: 18px;\n    position: absolute;\n    font-weight: bold;\n    left: 5px;\n    bottom: 6px;\n}\n\n.preview-panel-symbolcompare {\n    color: #a0a0a0;\n    width: 45px;\n    text-align: right;\n    display: block;\n    float: left;\n    overflow: hidden;\n    padding-right: 5px;\n}\n\n/* Multi */\n.preview-multi-panel-description {\n    width: 98%;\n    position: relative;\n    height: 97px;\n    padding: 3px;\n}\n\n.preview-multi-panel-left {\n    float: left;\n    position: relative;\n    width: 50%;\n    height: 100%;\n    padding: 5px;\n    border-right: 5px solid white;\n    font-family: verdana, sans-serif;\n    box-sizing: border-box;\n}\n\n.preview-multi-panel-right {\n    float: left;\n    position: relative;\n    width: 50%;\n    height: 100%;\n    padding: 5px;\n    border: solid 3px #e5e6fe;\n    font-family: verdana, sans-serif;\n    box-sizing: border-box;\n}\n\n.preview-multi-panel-leftside {\n    width: 200px;\n    padding: 5px;\n}\n\n/* TODO make this right-aligned */\n.preview-multi-panel-rightside {\n    width: auto;\n    padding: 5px;\n    padding-left: 150px;\n}\n\n.preview-multi-panel-nobreak {\n    min-width: 900px;\n    padding: 5px;\n    height: 100%;\n    box-sizing: border-box;\n}", ""]);

// exports


/***/ }),
/* 2209 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhBAAEAKIEAPz//////f3//////wAAAAAAAAAAAAAAACH5BAEAAAQALAAAAAAEAAQAQAMJOBMS9EM88EgCADs="

/***/ }),
/* 2210 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhBAAEAKIGAP3///7+//7///z//////f///wAAAAAAACH5BAEAAAYALAAAAAAEAAQAQAMICBRlTm40JxIAOw=="

/***/ }),
/* 2211 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhBAAEAKIGAP3///7//f///vz///7//////wAAAAAAACH5BAEAAAYALAAAAAAEAAQAQAMJWLY0G8uQIkACADs="

/***/ }),
/* 2212 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhBAAEAKIFAP/9/v7///z//////////gAAAAAAAAAAACH5BAEAAAUALAAAAAAEAAQAQAMJWBoqpIWQQUACADs="

/***/ }),
/* 2213 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhBQAFAMQAAOfm/ubm/ebk/OXn//7//+Tl/OXm+//+//7//uXm/f3//+Xl/Ofm//7//ebn/v7+/+Xm/OXl/ufn/+bl/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAQAUVIPVQyjQNyUQgTOFAByUAUWNIwRICADs="

/***/ }),
/* 2214 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhBQAFALMAAOXl/ebm/uXn/+bm/+bn/+Xm/ebl+/3///7//eXm/ubl/f///wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAQAQQ0By0qiLJkCIUSgNgBcVwRAA7"

/***/ }),
/* 2215 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhBQAFAMQAAObl/+Tl/+Tn+/3//f7//ufl/+Xl/+bn/Obo/+Xn/eXm//7+/+fl/v///uXl/eXm/efm//7//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAQAUVYPEITtRIywAQUKAckYEkjiQx0BMCADs="

/***/ }),
/* 2216 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODlhBQAFAMQAAObn/ubm/eXk/v/+/ebl/Obm/+Xm+////f3//eXn/ubl/ubn/+fl/+Xm/f3//+Tm/uXm//7//+Xm/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAFAAUAQAUV4CQYUFA40zQsCcRESiNJyAMQ0RECADs="

/***/ }),
/* 2217 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2218);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./PreferencesPanel.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./PreferencesPanel.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2218 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "\n.prefpanel_adminMode {\n    color: red;\n}\n", ""]);

// exports


/***/ }),
/* 2219 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2220);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./UidTriggerField.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./UidTriggerField.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2220 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".tw-uidTriggerField .x-form-field-wrap .x-form-trigger {\n    background-image: url(" + __webpack_require__(2221) + ");\n}\n", ""]);

// exports


/***/ }),
/* 2221 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,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"

/***/ }),
/* 2222 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2223);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./FileSelectionArea.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./FileSelectionArea.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2223 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "/*\n * Tine 2.0\n *\n * @license      http://www.gnu.org/licenses/agpl.html AGPL Version 3\n * @author       Michael Spahn <m.spahn@metaways.de>\n * @copyright    Copyright (c) 2017 Metaways Infosystems GmbH (http://www.metaways.de)\n *\n */\n\n.tw-FileSelectionArea td,\n.tw-FileSelectionArea tr,\n.tw-FileSelectionArea table {\n    background-image: none;\n}\n\n.tw-FileSelectionArea {\n    background-color: #F0F0F0 !important;\n    border: 2px grey dashed !important;\n    border-radius: 5px !important;\n}", ""]);

// exports


/***/ }),
/* 2224 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2225);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./PasswordTriggerField.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./PasswordTriggerField.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2225 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, ".tw-passwordTriggerField .x-form-field-wrap .x-form-trigger:nth-child(1) {\n    background-image: url(" + __webpack_require__(2226) + ");\n}\n\n.tw-passwordTriggerField .x-form-field-wrap .x-form-trigger.locked:nth-child(1) {\n    background-image: url(" + __webpack_require__(2227) + ");\n}\n\n.tw-passwordTriggerField .x-form-field-wrap .x-form-trigger:nth-child(2) {\n    background-image:url(" + __webpack_require__(2228) + ") !important;\n}", ""]);

// exports


/***/ }),
/* 2226 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,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"

/***/ }),
/* 2227 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODdhZgAYAOYAAAAAAE5OTV9fYF9gYGNjY2doaWtra25vcGpyd21yeXR0dHJ2enZ6f3p6enp+g4OEhIOGiouLi4uOkJKSk5SWmJWanZqcnpudoJygo5ajq5SltJylraWlpaCmq5+nsZypsKOpr6SstKysrH6t2Z2uuaSuuaewu6uxtaOyxLOzs621uq+3wbW4yKK5x6y5yr29vrTAxLXBybrDyLrF0sXFx8HGyrfH2sLKz7PM48TM0szMzbnN5snO1MDP2a7Q47HQ5LvQ6cfR1svS19LS0szT2srW48bX4dfX2c3Z39Ta3dra28rb5tTd5Mbe+sve9dHe7N7e4c/g9Nbh593i5uLi49Tj8c3k/93k6+Lm7N/n8eTr7+Xr8uvr693s8Ozt8OXx+fLy8t70/+f4/un6/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAAGUALAAAAABmABgAAAf/gCyCg4SFgiOIiYqLjI2Oj5CRko1klZaXmGQsmZyWI0ugoaKjSyOdnaanmZ+kraAjYLGys7SaVbe4ubpkrK6kI7rBubxjxcbHyLy+rbC0slxUs7bCVU9Fw73LocDU1tjIx19dx8raos3OYC8NXLLTwiYL2Obn1FXx3+DFMA1ixuX0SnHRIaKgQQ4GDERY+MLWjBAgIoIIsSHhwggrAJIy0mMUsIcSJ1ZUuDDjiC9ETqhcCeIAyQgyNI7i6JFLCipccubUYeCFDh00JmiKEgLKlaNHa/T8GVSmqBALPBI1ivSKUp9AhZ5UcUWLVy1bbizN6jQU1JopdOakMuHBkSFw/yOAYeEkRNWjbd/GVRajg9+/GCwuVFGq7t0reeEOicDri4qvXym4Vcz4U9+/fgO/JDzCppIIE4ZwGEKgAZQjqOXSDUEENI8LPAaYRn2k8pIQTKbo1n2V6YTCrF3Dln06Na8wKpKAFoJBSOnitZXh3s17bFCBKYaI8MLFggUCCqAoiPB5bl0i27dYuABePHnbIKjrThwXOHov6tmHH//5ePLtXliAQXv8wSffFPQtVooSIiyWlgUGTNDACwEEoMMEc+GwgRARpKAFhBJSaOEEX4zgwwdBgHaDBTcIMFtqPoygIYcegjhhhReW2EQJraWwxQUR3jhiiSemOMGKLb5YW/+MDIqWUwQEDDEBFQqxlaEHOXDAxRUSRDlllSSa+EEO211hQQUD7PdejDhgqSWXXlIZAVs68qjlFl1KKSedYpLphZloqvkZkyJQYSgXD0zQziwYsrDDBrlRgUWii8oS5ok0fhikiBfG+GikkypKS5hWlHAUFltAICqjRH6QqY2cThCjdkoYytMQtHDRKBAeMMHEFTkUgOssuraa5ZZ5fjmnrCPw6iuwwuZKqqlXZEGEAcM+c+mYbya7J7NDvMABByI0QMADF12UwlxAuLDBuwycm+5CJRAJqRRUXEHpqDG2++4G8aI7b70jWGFDCCGU4IC887pgLxP46ruqpbMqNoTlAqNZrBi7QHQMRAIaeCwyEPYiAXGw2caia78igzyyxyVaIbPMC6Aw881WlHxytMSCq/HPG7Pw8tAdE9lCBhkAzHC6JLBM9Mgx4yz1zEYjrbTATFcM9M8cPy1yiT+E/QMOCGgg9tk/OO110QVPPTXYYpNtNtpha721xV2vTfIIdPddd7N6s+3223z7Tbfdd8OV99pwG3622oy3PfjNjTv+d+IaL+515ZZDvrnkk8vMueOIJ67506Mb7jnqoIeeut+l33060a/3vTrtrU9e++EjYI630IHvbfnjgAcedeiiFz582iMEAgA7"

/***/ }),
/* 2228 */
/***/ (function(module, exports) {

module.exports = "data:image/gif;base64,R0lGODdhZgAYAOYAAAAAAJqDTq6IAMydAcqgAMyqAKysrH6t2Z2vuqSvvbywa7WyjsGybZWzw6K0waS0vai0xKm0v7S0tLi0kZi2x7W4yLi4uL65k666ya28xbLA0cXCm6bD1rDD2//DALfEzbvEzs3FesbGxs7HnOTHOr7J0MfJytLJgdrJS8rKysvKo7PL4//LAMPM1K3O4bnO58zO0NXOmPTOAa7Q47HQ5LvQ6c/Qpd/Qgc/R0cTS2snS29LS0uDSS+HSgNTTreLUfv/UAN3ViMDW78bW4fPWOOLamOXarP/aAcrb5tvb2+zbS8be+sve9c/g9Orgrf3iONTj8ePjt83k/+Tk5OTo6ePu9u7u7vDw7+Xy+t70//P09Or6/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAAF0ALAAAAABmABgAAAf/gBWCg4SFggeIiYqLjI2Oj5CRko1clZaXmFwVmZyWB0igoaKjSAednaanmZ+kraAHWrGxOykiKbKymlC7uzC1Jry8XKyupAfBUL4iwMjDW8/POLUp0NDDxa2wTj09IxYSBgYXNz1Gsbo+Jycb3+ET6j6719ijx+nr7QbvJ/FQzlFBgqjIdyFglGfzQqX4lU3LEyU8ikyZOCUGCiVErmjR9TAixYoXicgjBmrhsmxQOkqkaBHjyC0qP7YkgvCTjRAh2IEzsACnilAHrBzpwUVLkqNJpnDpIcOKFV1DiyJNulTGSCQ3c+brGeLnKyhRjSJVynQklrBTycrAguVaTJYh/4FaAfJD1o67dxUUWKilQhO6dvHu0KtBg1uIKyfOBPq37izBhA0fwAL4MV69OXJcQzu2qlzAXHac2lGBCWjRnZJ84nxULVDTdUOfUk05NmpOqpFU1iJ4cIEMGYYEpVtJ9DlMpGEXL7oRU+7dvfUCF65c9vFLqrMQt94c+6fTpzIEZfFjefdLycmbx/3ddvgDTNRbZ59FvnH2ustzzyQ+if3RFazwXyctHDDDdsadV0kDBwio322ZFLjEgJwUOMN/Ci54gH8PAujgcgQaiCEnDH4oW4gTdhjihSqSuKEHLWZC2gswglihiDFiwiCNOV5SoBQ1nngjizZmwuAOQSbBif8WVCRRQQ1JLkmFDjgWqeMBUOqnZCZMUgmkllJSOUOQEF6JJJiXiCVBX1lWsqUlYiVQhYFknsJgm1y8WUmcc37pJiZiYTDnmGgCSgUFByBJAjcMOJeEBDuw6cGiPTSKXRIRvIAFnYWmeSiWkzLqaKabAkmppZYcVYEUmxL6Z5pHIeBCogMQQMAAAqS5QwB3sVnrrbnCuesLNbQaJaxJyIrlr7jqGgCxpTIb7J67SsEqnac6+oALMyQqmC0L1QJpr0/WYG4NHbSgbgsgQEBssQfQEGql2nKL5bnorsuuu+aWaq21QuSgw8AtaPDvpjRI66wLNHTb28OCsYnvxBMjrLCIsAEw3C3FHPd7wL8gh3xwvDSUTAMHJaRcwgcOrFCywxBDLHHHFZNsMsoqs+xyw/fSjK+/IgeNsMlEF/2ytzH3NrPPHhvt9NFM//xx0ELb/DTRMCcdcblRw3u10Rt3DS/VVX9ddNZakyu212abHHbXQJM9cttuI512pFxHPTTdb+s9tdxz081zIAA7"

/***/ }),
/* 2229 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2230);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../js/node_modules/css-loader/index.js!./print.css", function() {
			var newContent = require("!!../../js/node_modules/css-loader/index.js!./print.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2230 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "#csscheck {\n    display: none;\n}\n\ndiv.page\n{\n    page-break-after: always;\n    page-break-inside: avoid;\n}\n\n.rp-print-title {\n    text-align: center;\n    font-size: 20px;\n}\n/* ------------ single record ------------ */\n\n.rp-print-single-details-row:nth-of-type(odd) {\n    background: #e0e0e0;\n}\n\n.customfield-rendered-label,\n.rp-print-single-label{\n    font-style: italic;\n    display: inline-block;\n    width: 6cm;\n}\n\n.rp-print-single-block-heading {\n    font-weight: bold;\n}\n\n.rp-print-single-block {\n    margin-left: 0.5cm;\n}\n\n.rp-print-single-value {\n\n}\n\n.rp-print-single-summary {\n    font-weight: bold;\n    font-size: 25px;\n}\n\n.rp-print-single {\n    margin-left: 1cm;\n    margin-right: 1cm;\n}\n\n.rp-print-single-logo {\n    text-align: right;\n    margin-bottom: 1cm;\n}\n\n.rp-print-single-image {\n    text-align: left;\n}\n\n.rp-print-single .gridpanelrenderer_header_title,\n.rp-print-single .gridpanelrenderer_header_logo {\n    display: none;\n}\n\n.rp-print-single-tags {\n    margin-top: 2px;\n}\n\n.x-widget-tag-tagitem {\n    margin: 1px 2px 1px 1px;\n    background-color: #FFF8E0;\n    height: 16px;\n    border: 1px solid gray;\n    float: left;\n    color: gray;\n}\n\n.x-widget-tag-tagitem-color {\n    padding: 0 0 0 0;\n    margin: 0 0 0 0;\n    float: left;\n    background-color: #FFFFFF;\n    border-right: 1px solid gray;\n    width: 4px;\n    height: 16px;\n}\n\n.x-widget-tag-tagitem-text {\n    padding: 0 5px 0 5px;\n    margin: 0 0 0 0;\n    line-height: 16px;\n    font-weight: normal;\n    font-style: italic;\n}\n\n.x-clear {\n    clear: both;\n    height: 0;\n    overflow: hidden;\n    line-height: 0;\n    font-size: 0;\n}\n", ""]);

// exports


/***/ }),
/* 2231 */
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(2232);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../../../Tinebase/js/node_modules/css-loader/index.js!./geoext-all.css", function() {
			var newContent = require("!!../../../../Tinebase/js/node_modules/css-loader/index.js!./geoext-all.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),
/* 2232 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "\n.gx-popup-anc{background:transparent url(" + __webpack_require__(2233) + ") no-repeat 0 0;position:relative;top:-1px;left:5px;z-index:2;height:16px;width:31px;}", ""]);

// exports


/***/ }),
/* 2233 */
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAQCAYAAADu+KTsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfRJREFUeNq0VUtOAkEQra4eBhaigBCEhGg0fpbCxr34g40JCcFP0CO48ApuXegJjJuJ93Dj1sTEE3gGd1jVP6b5CGLoUFRPdU29V11d0+Lu6fUcAG5vOnvA4/PrG+Y1dsoppR9e3ljdI/1FPDEG5zBvYMZFszZEQAgAXmRtBZ0IpekXs/V9tL9Qwr6jgHliwYG23SOwXSICqIEkBZOxgEL0NAFkAhpAWB/Q/gjs04OtUtIDNjjggY8isLmSimVFQbGnAG3mEtmm16Wz9TQReuD3xwEPgfM43d/1CGwUkwRosmECZAsYEHWm6M2FIhGQXi/6GZu48Cs4v9yq+wTWCkmVYcDg0pZCZxqYsihgEqSH1YIP3KpXI/aZAlxvWfuw6hGo5JMmQ73V0sxt1pLqy7qyHHrA7QMCRn1GJoKjCwxwduQTKOdCd/gcAexnzetx4A69j9KsyykyD8wBsrW8PPEJFLOh114IusZsjwNfHNciW6rAEJ4ILkwtUdgWEtBt+AQKmdBsuS5BfinhAXcbtajfFbZD/lBzt72GyFWz5hHILSbUGus48HWTtlrY9gPXmnKammfSCcgsJLSOSZZk8DvA9sE+zqRD569jhS7eRPBJY5DAuA/INEPQrTbrXaFuQ5JHkudZAgT/uKg403eSj1kD/AgwAM3+h5KqbC2/AAAAAElFTkSuQmCC"

/***/ }),
/* 2234 */
/***/ (function(module, exports, __webpack_require__) {

Ext.ns('Ext.ux.screenshot');

/**
 *
 * @param {Window} win
 * @param {Object} options
 *      type: 'png',                // png|jpeg|webp(chrome only)
 *      dpi: 300,
 *      download: false,
 *      filename: 'screenshot',     // without extension
 *      grabMouse: false,
 * @return {Promise}
 */
Ext.ux.screenshot.get = function(win, options) {
    var _ = window.lodash;

    // defaults
    options = _.assign({}, {
        type: 'png',
        dpi: 300,
        download: false,
        filename: 'screenshot',
        grabMouse: false,
    }, options);

    return new Promise(function (fulfill, reject) {
            __webpack_require__.e/* require.ensure */(0).then((function() {
                var html2canvas = __webpack_require__ (80);
                var canvas = win.document.createElement("canvas");
                canvas.width = win.innerWidth;
                canvas.height = win.innerHeight;

                Ext.ux.screenshot.setDPI(canvas, options.dpi);

                html2canvas(win.document.body, {
                    canvas: canvas,
                    grabMouse: options.grabMouse,
                    onrendered: function (canvas) {
                        var mimeType = 'image/' + options.type,
                            dataUrl = canvas.toDataURL(mimeType);

                        if (options.download) {
                            var downloadLink = document.createElement("a");

                            downloadLink.href = dataUrl.replace("image/png", "image/octet-stream");
                            downloadLink.download = options.filename + '.' + options.type;
                            win.document.body.appendChild(downloadLink);
                            downloadLink.click();
                            win.document.body.removeChild(downloadLink);
                        }

                        fulfill(dataUrl);
                    }
                });
            }).bind(null, __webpack_require__)).catch(__webpack_require__.oe);
    });
};

Ext.ux.screenshot.ux = function(win, options) {
    // display countdown
    var secondsLeft = Ext.isNumber(options.countdown) ? options.countdown : 3;
    if (secondsLeft) {
        Ext.getBody().mask(String.format('Taking Screenshot in {0} seconds', secondsLeft));
        options.countdown = --secondsLeft;
        return Ext.ux.screenshot.ux.defer(1000, win, [win, options]);
    }

    Ext.getBody().unmask();
    Ext.ux.screenshot.get(win, options);
};

Ext.ux.screenshot.setDPI = function (canvas, dpi) {
    // Set up CSS size if it's not set up already
    if (!canvas.style.width)
        canvas.style.width = canvas.width + 'px';
    if (!canvas.style.height)
        canvas.style.height = canvas.height + 'px';

    var scaleFactor = dpi / 96;
    canvas.width = Math.ceil(canvas.width * scaleFactor);
    canvas.height = Math.ceil(canvas.height * scaleFactor);
    var ctx = canvas.getContext('2d');
    ctx.scale(scaleFactor, scaleFactor);
};

/***/ })
/******/ ]);
});