/*! * * @supermap/react-iclient.(https://iclient.supermap.io) * Copyright© 2000 - 2020 SuperMap Software Co.Ltd * license: Apache-2.0 * version: v10.1.0 * */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("../public/libs/mapboxgl/mapbox-gl-enhance.js"), require("react"), require("three"), require("../public/libs/iclient-mapboxgl/iclient-mapboxgl.min.js"), require("antd"), require("echarts"), require("../public/libs/echarts-layer/EchartsLayer.js"), require("../public/libs/deckgl/deck.gl.min.js")); else if(typeof define === 'function' && define.amd) define(["../public/libs/mapboxgl/mapbox-gl-enhance.js", "react", "three", "../public/libs/iclient-mapboxgl/iclient-mapboxgl.min.js", "antd", "echarts", "../public/libs/echarts-layer/EchartsLayer.js", "../public/libs/deckgl/deck.gl.min.js"], factory); else if(typeof exports === 'object') exports["Components"] = factory(require("../public/libs/mapboxgl/mapbox-gl-enhance.js"), require("react"), require("three"), require("../public/libs/iclient-mapboxgl/iclient-mapboxgl.min.js"), require("antd"), require("echarts"), require("../public/libs/echarts-layer/EchartsLayer.js"), require("../public/libs/deckgl/deck.gl.min.js")); else root["SuperMap"] = root["SuperMap"] || {}, root["SuperMap"]["Components"] = factory(root["mapboxgl"], root["React"], root["THREE"], root["SuperMap"], root["antd"], root["echarts"], root["EchartsLayer"], root["DeckGL"]); })(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__1__, __WEBPACK_EXTERNAL_MODULE__3__, __WEBPACK_EXTERNAL_MODULE__6__, __WEBPACK_EXTERNAL_MODULE__9__, __WEBPACK_EXTERNAL_MODULE__20__, __WEBPACK_EXTERNAL_MODULE__21__, __WEBPACK_EXTERNAL_MODULE__81__) { 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] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 47); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__0__; /***/ }), /* 1 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__1__; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.default = void 0; var compose = function compose() { for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) { funcs[_key] = arguments[_key]; } return funcs.reduce(function (a, b) { return function () { return a(b.apply(void 0, arguments)); }; }, function (arg) { return arg; }); }; var _default = compose; exports.default = _default; /***/ }), /* 3 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__3__; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global, module) {/** * Lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` * Copyright JS Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', asyncTag = '[object AsyncFunction]', boolTag = '[object Boolean]', dateTag = '[object Date]', 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]'; 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 `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** 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; /** 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 = true && 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 { return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }(); /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * 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; } /** * 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 `_.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; } /** * 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 `_.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); }; } /** * 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); } /** * 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]; } /** * 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)); }; } /** * 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; } /** 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 = root['__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 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 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 ? root.Buffer : undefined, Symbol = root.Symbol, Uint8Array = root.Uint8Array, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice, symToStringTag = Symbol ? Symbol.toStringTag : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols, nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, nativeKeys = overArg(Object.keys, Object); /* Built-in method references that are verified to be native. */ var DataView = getNative(root, 'DataView'), Map = getNative(root, 'Map'), Promise = getNative(root, 'Promise'), Set = getNative(root, 'Set'), WeakMap = getNative(root, 'WeakMap'), nativeCreate = getNative(Object, 'create'); /** 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; /** * 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; } /** * 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; } /** * 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 `_.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 `_.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 `_.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 `_.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 `_.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; } /** * 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; } /** * 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); } /** * 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 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); }); }; /** * 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 getTag(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; }; } /** * 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) { length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; } /** * 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 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 `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; } /** * 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); } /** * 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 ''; } /** * 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 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 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); } /** * 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; /** * 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); } /** * 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 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 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; /** * 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); } /** * 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; } module.exports = isEqual; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5), __webpack_require__(32)(module))) /***/ }), /* 5 */ /***/ (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 || new Function("return 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; /***/ }), /* 6 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__6__; /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 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. // a duplex stream is just a stream that is both readable and writable. // Since JS doesn't have multiple prototypal inheritance, this class // prototypally inherits from Readable, and then parasitically from // Writable. /**/ var pna = __webpack_require__(17); /**/ /**/ var objectKeys = Object.keys || function (obj) { var keys = []; for (var key in obj) { keys.push(key); } return keys; }; /**/ module.exports = Duplex; /**/ var util = __webpack_require__(15); util.inherits = __webpack_require__(11); /**/ var Readable = __webpack_require__(35); var Writable = __webpack_require__(28); util.inherits(Duplex, Readable); { // avoid scope creep, the keys array can then be collected var keys = objectKeys(Writable.prototype); for (var v = 0; v < keys.length; v++) { var method = keys[v]; if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; } } function Duplex(options) { if (!(this instanceof Duplex)) return new Duplex(options); Readable.call(this, options); Writable.call(this, options); if (options && options.readable === false) this.readable = false; if (options && options.writable === false) this.writable = false; this.allowHalfOpen = true; if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; this.once('end', onend); } Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get() { return this._writableState.highWaterMark; } }); // the no-half-open enforcer function onend() { // if we allow half-open state, or if the writable side ended, // then we're ok. if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written. // But allow more writes to happen in this tick. pna.nextTick(onEndNT, this); } function onEndNT(self) { self.end(); } Object.defineProperty(Duplex.prototype, 'destroyed', { get: function get() { if (this._readableState === undefined || this._writableState === undefined) { return false; } return this._readableState.destroyed && this._writableState.destroyed; }, set: function set(value) { // we ignore the value if the stream // has not been initialized yet if (this._readableState === undefined || this._writableState === undefined) { return; } // backward compatibility, the user is explicitly // managing destroyed this._readableState.destroyed = value; this._writableState.destroyed = value; } }); Duplex.prototype._destroy = function (err, cb) { this.push(null); this.end(); pna.nextTick(cb, err); }; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 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. var R = typeof Reflect === 'object' ? Reflect : null; var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) { return Function.prototype.apply.call(target, receiver, args); }; var ReflectOwnKeys; if (R && typeof R.ownKeys === 'function') { ReflectOwnKeys = R.ownKeys; } else if (Object.getOwnPropertySymbols) { ReflectOwnKeys = function ReflectOwnKeys(target) { return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); }; } else { ReflectOwnKeys = function ReflectOwnKeys(target) { return Object.getOwnPropertyNames(target); }; } function ProcessEmitWarning(warning) { if (console && console.warn) console.warn(warning); } var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { return value !== value; }; function EventEmitter() { EventEmitter.init.call(this); } module.exports = EventEmitter; // Backwards-compat with node 0.10.x EventEmitter.EventEmitter = EventEmitter; EventEmitter.prototype._events = undefined; EventEmitter.prototype._eventsCount = 0; EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are // added to it. This is a useful default which helps finding memory leaks. var defaultMaxListeners = 10; Object.defineProperty(EventEmitter, 'defaultMaxListeners', { enumerable: true, get: function get() { return defaultMaxListeners; }, set: function set(arg) { if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); } defaultMaxListeners = arg; } }); EventEmitter.init = function () { if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) { this._events = Object.create(null); this._eventsCount = 0; } this._maxListeners = this._maxListeners || undefined; }; // Obviously not all Emitters should be limited to 10. This function allows // that to be increased. Set to zero for unlimited. EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); } this._maxListeners = n; return this; }; function $getMaxListeners(that) { if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners; return that._maxListeners; } EventEmitter.prototype.getMaxListeners = function getMaxListeners() { return $getMaxListeners(this); }; EventEmitter.prototype.emit = function emit(type) { var args = []; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } var doError = type === 'error'; var events = this._events; if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw. if (doError) { var er; if (args.length > 0) er = args[0]; if (er instanceof Error) { // Note: The comments on the `throw` lines are intentional, they show // up in Node's output if this results in an unhandled exception. throw er; // Unhandled 'error' event } // At least give some kind of context to the user var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); err.context = er; throw err; // Unhandled 'error' event } var handler = events[type]; if (handler === undefined) return false; if (typeof handler === 'function') { ReflectApply(handler, this, args); } else { var len = handler.length; var listeners = arrayClone(handler, len); for (var i = 0; i < len; ++i) { ReflectApply(listeners[i], this, args); } } return true; }; function _addListener(target, type, listener, prepend) { var m; var events; var existing; if (typeof listener !== 'function') { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } events = target._events; if (events === undefined) { events = target._events = Object.create(null); target._eventsCount = 0; } else { // To avoid recursion in the case that type === "newListener"! Before // adding it to the listeners, first emit "newListener". if (events.newListener !== undefined) { target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the // this._events to be assigned to a new object events = target._events; } existing = events[type]; } if (existing === undefined) { // Optimize the case of one listener. Don't need the extra array object. existing = events[type] = listener; ++target._eventsCount; } else { if (typeof existing === 'function') { // Adding the second element, need to change to array. existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append. } else if (prepend) { existing.unshift(listener); } else { existing.push(listener); } // Check for listener leak m = $getMaxListeners(target); if (m > 0 && existing.length > m && !existing.warned) { existing.warned = true; // No error code for this since it is a Warning // eslint-disable-next-line no-restricted-syntax var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit'); w.name = 'MaxListenersExceededWarning'; w.emitter = target; w.type = type; w.count = existing.length; ProcessEmitWarning(w); } } return target; } EventEmitter.prototype.addListener = function addListener(type, listener) { return _addListener(this, type, listener, false); }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.prependListener = function prependListener(type, listener) { return _addListener(this, type, listener, true); }; function onceWrapper() { var args = []; for (var i = 0; i < arguments.length; i++) { args.push(arguments[i]); } if (!this.fired) { this.target.removeListener(this.type, this.wrapFn); this.fired = true; ReflectApply(this.listener, this.target, args); } } function _onceWrap(target, type, listener) { var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; var wrapped = onceWrapper.bind(state); wrapped.listener = listener; state.wrapFn = wrapped; return wrapped; } EventEmitter.prototype.once = function once(type, listener) { if (typeof listener !== 'function') { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } this.on(type, _onceWrap(this, type, listener)); return this; }; EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) { if (typeof listener !== 'function') { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } this.prependListener(type, _onceWrap(this, type, listener)); return this; }; // Emits a 'removeListener' event if and only if the listener was removed. EventEmitter.prototype.removeListener = function removeListener(type, listener) { var list, events, position, i, originalListener; if (typeof listener !== 'function') { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } events = this._events; if (events === undefined) return this; list = events[type]; if (list === undefined) return this; if (list === listener || list.listener === listener) { if (--this._eventsCount === 0) this._events = Object.create(null);else { delete events[type]; if (events.removeListener) this.emit('removeListener', type, list.listener || listener); } } else if (typeof list !== 'function') { position = -1; for (i = list.length - 1; i >= 0; i--) { if (list[i] === listener || list[i].listener === listener) { originalListener = list[i].listener; position = i; break; } } if (position < 0) return this; if (position === 0) list.shift();else { spliceOne(list, position); } if (list.length === 1) events[type] = list[0]; if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener); } return this; }; EventEmitter.prototype.off = EventEmitter.prototype.removeListener; EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { var listeners, events, i; events = this._events; if (events === undefined) return this; // not listening for removeListener, no need to emit if (events.removeListener === undefined) { if (arguments.length === 0) { this._events = Object.create(null); this._eventsCount = 0; } else if (events[type] !== undefined) { if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type]; } return this; } // emit removeListener for all listeners on all events if (arguments.length === 0) { var keys = Object.keys(events); var key; for (i = 0; i < keys.length; ++i) { key = keys[i]; if (key === 'removeListener') continue; this.removeAllListeners(key); } this.removeAllListeners('removeListener'); this._events = Object.create(null); this._eventsCount = 0; return this; } listeners = events[type]; if (typeof listeners === 'function') { this.removeListener(type, listeners); } else if (listeners !== undefined) { // LIFO order for (i = listeners.length - 1; i >= 0; i--) { this.removeListener(type, listeners[i]); } } return this; }; function _listeners(target, type, unwrap) { var events = target._events; if (events === undefined) return []; var evlistener = events[type]; if (evlistener === undefined) return []; if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener]; return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); } EventEmitter.prototype.listeners = function listeners(type) { return _listeners(this, type, true); }; EventEmitter.prototype.rawListeners = function rawListeners(type) { return _listeners(this, type, false); }; EventEmitter.listenerCount = function (emitter, type) { if (typeof emitter.listenerCount === 'function') { return emitter.listenerCount(type); } else { return listenerCount.call(emitter, type); } }; EventEmitter.prototype.listenerCount = listenerCount; function listenerCount(type) { var events = this._events; if (events !== undefined) { var evlistener = events[type]; if (typeof evlistener === 'function') { return 1; } else if (evlistener !== undefined) { return evlistener.length; } } return 0; } EventEmitter.prototype.eventNames = function eventNames() { return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; }; function arrayClone(arr, n) { var copy = new Array(n); for (var i = 0; i < n; ++i) { copy[i] = arr[i]; } return copy; } function spliceOne(list, index) { for (; index + 1 < list.length; index++) { list[index] = list[index + 1]; } list.pop(); } function unwrapListeners(arr) { var ret = new Array(arr.length); for (var i = 0; i < ret.length; ++i) { ret[i] = arr[i].listener || arr[i]; } return ret; } /***/ }), /* 9 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__9__; /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {var _slicedToArray = __webpack_require__(50); /*jshint esversion: 6 */ function colorcolor(color) { var newColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "rgba"; var calculateOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; color = color.toLowerCase(); newColor = newColor.toLowerCase(); var returnedColor = color; var namedColor = __webpack_require__(54); var r, g, b, a; var roundTo = 4; var colorDefinitions = { rgb: { re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, example: ["rgb(123, 234, 45)", "rgb(255,234,245)"], toRGBA: function toRGBA(bits) { return [parseInt(bits[1], 10), parseInt(bits[2], 10), parseInt(bits[3], 10), 1]; } }, rgba: { re: /^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d+(?:\.\d+)?|\.\d+)\s*\)/, example: ["rgba(123, 234, 45, 1)", "rgba(255,234,245, 0.5)"], toRGBA: function toRGBA(bits) { return [parseInt(bits[1], 10), parseInt(bits[2], 10), parseInt(bits[3], 10), parseFloat(bits[4])]; } }, hex: { re: /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, example: ["00ff00", "336699"], toRGBA: function toRGBA(bits) { return [parseInt(bits[1], 16), parseInt(bits[2], 16), parseInt(bits[3], 16), 1]; } }, hex3: { re: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, example: ["fb0", "f0f"], toRGBA: function toRGBA(bits) { return [parseInt(bits[1] + bits[1], 16), parseInt(bits[2] + bits[2], 16), parseInt(bits[3] + bits[3], 16), 1]; } }, hexa: { re: /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, example: ["00ff00ff", "336699a0"], toRGBA: function toRGBA(bits) { return [parseInt(bits[1], 16), parseInt(bits[2], 16), parseInt(bits[3], 16), parseInt(bits[4], 16) / 255]; } }, hex4a: { re: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, example: ["fb0f", "f0f8"], toRGBA: function toRGBA(bits) { return [parseInt(bits[1] + bits[1], 16), parseInt(bits[2] + bits[2], 16), parseInt(bits[3] + bits[3], 16), parseInt(bits[4] + bits[4], 16) / 255]; } }, hsl: { re: /^hsl\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%\)$/, example: ["hsl(120, 100%, 25%)", "hsl(0, 100%, 50%)"], toRGBA: function toRGBA(bits) { bits[4] = 1; var rgba = hslToRgb(bits); return [rgba.r, rgba.g, rgba.b, rgba.a]; } }, hsla: { re: /^hsla\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%,\s*(\d+(?:\.\d+)?|\.\d+)\s*\)/, example: ["hsla(120, 100%, 25%, 1)", "hsla(0, 100%, 50%, 0.5)"], toRGBA: function toRGBA(bits) { var rgba = hslToRgb(bits); return [rgba.r, rgba.g, rgba.b, rgba.a]; } }, hsv: { re: /^hsv\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%\)$/, example: ["hsv(120, 100%, 25%)", "hsv(0, 100%, 50%)"], toRGBA: function toRGBA(bits) { var rgb = hsvToRgb(bits); return [rgb.r, rgb.g, rgb.b, 1]; } }, hsb: { re: /^hsb\((\d{1,3}),\s*(\d{1,3})%,\s*(\d{1,3})%\)$/, example: ["hsb(120, 100%, 25%)", "hsb(0, 100%, 50%)"], toRGBA: function toRGBA(bits) { var rgb = hsvToRgb(bits); return [rgb.r, rgb.g, rgb.b, 1]; } } }; // If this is a named color, convert it to hex if (namedColor.hasOwnProperty(color)) { color = namedColor[color]; color.forEach(function (piece, index) { "use strict"; color[index] = ("0" + piece.toString(16)).slice(-2); }); color = "#" + color.join(''); } // Search the color definitions for a match for (var colorDefinition in colorDefinitions) { var re = colorDefinitions[colorDefinition].re; var processor = colorDefinitions[colorDefinition].toRGBA; var bits = re.exec(color); if (bits) { var channels = processor(bits); r = channels[0]; g = channels[1]; b = channels[2]; a = +(Math.round(channels[3] + ("e+" + roundTo)) + ("e-" + roundTo)); } } r = Math.round(r < 0 || isNaN(r) ? 0 : r > 255 ? 255 : r); g = Math.round(g < 0 || isNaN(g) ? 0 : g > 255 ? 255 : g); b = Math.round(b < 0 || isNaN(b) ? 0 : b > 255 ? 255 : b); a = a < 0 || isNaN(a) ? 0 : a > 1 ? 1 : a; switch (newColor) { case "hex": returnedColor = "#" + ("0" + r.toString(16)).slice(-2) + ("0" + g.toString(16)).slice(-2) + ("0" + b.toString(16)).slice(-2); break; case "hexa": if (calculateOpacity) { var _calculateOpacityFrom = calculateOpacityFromWhite(r, g, b, a); var _calculateOpacityFrom2 = _slicedToArray(_calculateOpacityFrom, 4); r = _calculateOpacityFrom2[0]; g = _calculateOpacityFrom2[1]; b = _calculateOpacityFrom2[2]; a = _calculateOpacityFrom2[3]; } returnedColor = "#" + ("0" + r.toString(16)).slice(-2) + ("0" + g.toString(16)).slice(-2) + ("0" + b.toString(16)).slice(-2) + ("0" + Math.round(255 * a).toString(16)).slice(-2); break; case "hsl": var hsl = rgbToHsl({ "r": r, "g": g, "b": b }); returnedColor = "hsl(".concat(hsl.h, ",").concat(hsl.s, "%,").concat(hsl.l, "%)"); break; case "hsla": if (calculateOpacity) { var _calculateOpacityFrom3 = calculateOpacityFromWhite(r, g, b, a); var _calculateOpacityFrom4 = _slicedToArray(_calculateOpacityFrom3, 4); r = _calculateOpacityFrom4[0]; g = _calculateOpacityFrom4[1]; b = _calculateOpacityFrom4[2]; a = _calculateOpacityFrom4[3]; } var hsla = rgbToHsl({ "r": r, "g": g, "b": b, "a": a }); returnedColor = "hsla(".concat(hsla.h, ",").concat(hsla.s, "%,").concat(hsla.l, "%,").concat(hsla.a, ")"); break; case "hsb": /* Same as `hsv` */ var hsb = rgbToHsv({ "r": r, "g": g, "b": b }); returnedColor = "hsb(".concat(hsb.h, ",").concat(hsb.s, "%,").concat(hsb.v, "%)"); break; case "hsv": var hsv = rgbToHsv({ "r": r, "g": g, "b": b }); returnedColor = "hsv(".concat(hsv.h, ",").concat(hsv.s, "%,").concat(hsv.v, "%)"); break; case "rgb": returnedColor = "rgb(".concat(r, ",").concat(g, ",").concat(b, ")"); break; case "rgba": /* falls through */ default: if (calculateOpacity) { var _calculateOpacityFrom5 = calculateOpacityFromWhite(r, g, b, a); var _calculateOpacityFrom6 = _slicedToArray(_calculateOpacityFrom5, 4); r = _calculateOpacityFrom6[0]; g = _calculateOpacityFrom6[1]; b = _calculateOpacityFrom6[2]; a = _calculateOpacityFrom6[3]; } returnedColor = "rgba(".concat(r, ",").concat(g, ",").concat(b, ",").concat(a, ")"); break; } return returnedColor; } function calculateOpacityFromWhite(r, g, b, a) { "use strict"; var min = 0; a = (255 - (min = Math.min(r, g, b))) / 255; r = ( false || (r - min) / a).toFixed(0); g = ( false || (g - min) / a).toFixed(0); b = ( false || (b - min) / a).toFixed(0); a = parseFloat(a.toFixed(4)); return [r, g, b, a]; } function hslToRgb(bits) { var rgba = {}, hsl = { h: bits[1] / 360, s: bits[2] / 100, l: bits[3] / 100, a: parseFloat(bits[4]) }; if (hsl.s === 0) { var v = 255 * hsl.l; rgba = { r: v, g: v, b: v, a: hsl.a }; } else { var q = hsl.l < 0.5 ? hsl.l * (1 + hsl.s) : hsl.l + hsl.s - hsl.l * hsl.s; var p = 2 * hsl.l - q; rgba.r = hueToRgb(p, q, hsl.h + 1 / 3) * 255; rgba.g = hueToRgb(p, q, hsl.h) * 255; rgba.b = hueToRgb(p, q, hsl.h - 1 / 3) * 255; rgba.a = hsl.a; } return rgba; } function rgbToHsl(rgba) { rgba.r = rgba.r / 255; rgba.g = rgba.g / 255; rgba.b = rgba.b / 255; var max = Math.max(rgba.r, rgba.g, rgba.b), min = Math.min(rgba.r, rgba.g, rgba.b), hsl = [], d; hsl.a = rgba.a; hsl.l = (max + min) / 2; if (max === min) { hsl.h = 0; hsl.s = 0; } else { d = max - min; hsl.s = hsl.l >= 0.5 ? d / (2 - max - min) : d / (max + min); switch (max) { case rgba.r: hsl.h = (rgba.g - rgba.b) / d + (rgba.g < rgba.b ? 6 : 0); break; case rgba.g: hsl.h = (rgba.b - rgba.r) / d + 2; break; case rgba.b: hsl.h = (rgba.r - rgba.g) / d + 4; break; } hsl.h /= 6; } hsl.h = parseInt((hsl.h * 360).toFixed(0), 10); hsl.s = parseInt((hsl.s * 100).toFixed(0), 10); hsl.l = parseInt((hsl.l * 100).toFixed(0), 10); return hsl; } function hsvToRgb(bits) { var rgb = {}, hsv = { h: bits[1] / 360, s: bits[2] / 100, v: bits[3] / 100 }, i = Math.floor(hsv.h * 6), f = hsv.h * 6 - i, p = hsv.v * (1 - hsv.s), q = hsv.v * (1 - f * hsv.s), t = hsv.v * (1 - (1 - f) * hsv.s); switch (i % 6) { case 0: rgb.r = hsv.v; rgb.g = t; rgb.b = p; break; case 1: rgb.r = q; rgb.g = hsv.v; rgb.b = p; break; case 2: rgb.r = p; rgb.g = hsv.v; rgb.b = t; break; case 3: rgb.r = p; rgb.g = q; rgb.b = hsv.v; break; case 4: rgb.r = t; rgb.g = p; rgb.b = hsv.v; break; case 5: rgb.r = hsv.v; rgb.g = p; rgb.b = q; break; } rgb.r = rgb.r * 255; rgb.g = rgb.g * 255; rgb.b = rgb.b * 255; return rgb; } function rgbToHsv(rgba) { rgba.r = toPercent(parseInt(rgba.r, 10) % 256, 256); rgba.g = toPercent(parseInt(rgba.g, 10) % 256, 256); rgba.b = toPercent(parseInt(rgba.b, 10) % 256, 256); var max = Math.max(rgba.r, rgba.g, rgba.b), min = Math.min(rgba.r, rgba.g, rgba.b), d = max - min, hsv = { "h": 0, "s": max === 0 ? 0 : d / max, "v": max }; if (max !== min) { switch (max) { case rgba.r: hsv.h = (rgba.g - rgba.b) / d + (rgba.g < rgba.b ? 6 : 0); break; case rgba.g: hsv.h = (rgba.b - rgba.r) / d + 2; break; case rgba.b: hsv.h = (rgba.r - rgba.g) / d + 4; break; } hsv.h /= 6; } hsv.h = parseInt((hsv.h * 360).toFixed(0), 10); hsv.s = parseInt((hsv.s * 100).toFixed(0), 10); hsv.v = parseInt((hsv.v * 100).toFixed(0), 10); return hsv; } function hueToRgb(p, q, t) { if (t < 0) { t += 1; } if (t > 1) { t -= 1; } if (t < 1 / 6) { return p + (q - p) * 6 * t; } if (t < 1 / 2) { return q; } if (t < 2 / 3) { return p + (q - p) * ((2 / 3 - t) * 6); } return p; } function toPercent(amount, limit) { return amount / limit; } module.exports = colorcolor; global.colorcolor = module.exports; /* ew */ /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5))) /***/ }), /* 11 */ /***/ (function(module, exports) { if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); } }; } else { // old school shim for old browsers module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; var TempCtor = function TempCtor() {}; TempCtor.prototype = superCtor.prototype; ctor.prototype = new TempCtor(); ctor.prototype.constructor = ctor; } }; } /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** * lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` * Copyright jQuery Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** Used to compose unicode character classes. */ var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f\\ufe20-\\ufe23", rsComboSymbolsRange = "\\u20d0-\\u20f0", rsVarRange = "\\ufe0e\\ufe0f"; /** Used to compose unicode capture groups. */ var rsAstral = '[' + rsAstralRange + ']', rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', rsNonAstral = '[^' + rsAstralRange + ']', rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsZWJ = "\\u200d"; /** Used to compose unicode regexes. */ var reOptMod = rsModifier + '?', rsOptVar = '[' + rsVarRange + ']?', rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, '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 + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); /** 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')(); /** * 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(''); } /** * 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); } /** * 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); } /** * 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) || []; } /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var objectToString = objectProto.toString; /** Built-in value references. */ var Symbol = root.Symbol; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * 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 `_.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 (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = value + ''; return result == '0' && 1 / value == -INFINITY ? '-0' : result; } /** * 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); } /** * 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; }; } /** * 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 && typeof value == 'object'; } /** * 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) && objectToString.call(value) == symbolTag; } /** * 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 process. * @returns {string} Returns the string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } /** * 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()); } /** * 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'); module.exports = capitalize; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5))) /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** * lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` * Copyright jQuery Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /** Used as the `TypeError` message for "Functions" methods. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** `Object#toString` result references. */ var funcTag = '[object Function]', genTag = '[object GeneratorFunction]', symbolTag = '[object Symbol]'; /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, reLeadingDot = /^\./, 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; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** 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')(); /** * 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 `value` is a host object in IE < 9. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a host object, else `false`. */ function isHostObject(value) { // Many host objects are `Object` objects that can coerce to strings // despite having improperly defined `toString` methods. var result = false; if (value != null && typeof value.toString != 'function') { try { result = !!(value + ''); } catch (e) {} } return result; } /** 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 = root['__core-js_shared__']; /** 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 decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var objectToString = objectProto.toString; /** 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 Symbol = root.Symbol, splice = arrayProto.splice; /* Built-in method references that are verified to be native. */ var Map = getNative(root, 'Map'), nativeCreate = getNative(Object, 'create'); /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries ? entries.length : 0; 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) : {}; } /** * 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) { return this.has(key) && delete this.__data__[key]; } /** * 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__; 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 ? entries.length : 0; 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__ = []; } /** * 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); } 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) { 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 ? entries.length : 0; 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.__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) { return getMapData(this, key)['delete'](key); } /** * 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) { getMapData(this, key).set(key, value); 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; /** * 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; } /** * 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 = isKey(path, object) ? [path] : castPath(path); 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 `_.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) || isHostObject(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(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 (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = value + ''; return result == '0' && 1 / value == -INFINITY ? '-0' : result; } /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @returns {Array} Returns the cast property path array. */ function castPath(value) { return isArray(value) ? value : stringToPath(value); } /** * 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 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; } /** * 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 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; } /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath = memoize(function (string) { string = toString(string); var result = []; if (reLeadingDot.test(string)) { result.push(''); } string.replace(rePropName, function (match, number, quote, string) { result.push(quote ? string.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 process. * @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 ''; } /** * 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 `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 && typeof resolver != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function memoized() { 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); return result; }; memoized.cache = new (memoize.Cache || MapCache)(); return memoized; } // Assign cache to `_.memoize`. memoize.Cache = MapCache; /** * 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 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 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) { // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 8-9 which returns 'object' for typed array and other constructors. var tag = isObject(value) ? objectToString.call(value) : ''; return tag == funcTag || tag == genTag; } /** * 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 && (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 && typeof value == 'object'; } /** * 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) && objectToString.call(value) == symbolTag; } /** * 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 process. * @returns {string} Returns the string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } /** * 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; } module.exports = get; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5))) /***/ }), /* 14 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global) {/*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */ /* eslint-disable no-proto */ var base64 = __webpack_require__(58); var ieee754 = __webpack_require__(59); var isArray = __webpack_require__(34); exports.Buffer = Buffer; exports.SlowBuffer = SlowBuffer; exports.INSPECT_MAX_BYTES = 50; /** * If `Buffer.TYPED_ARRAY_SUPPORT`: * === true Use Uint8Array implementation (fastest) * === false Use Object implementation (most compatible, even IE6) * * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, * Opera 11.6+, iOS 4.2+. * * Due to various browser bugs, sometimes the Object implementation will be used even * when the browser supports typed arrays. * * Note: * * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. * * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. * * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of * incorrect length in some situations. * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they * get the Object implementation, which is slower but behaves correctly. */ Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport(); /* * Export kMaxLength after typed array support is determined. */ exports.kMaxLength = kMaxLength(); function typedArraySupport() { try { var arr = new Uint8Array(1); arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function foo() { return 42; } }; return arr.foo() === 42 && // typed array instances can be augmented typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray` } catch (e) { return false; } } function kMaxLength() { return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff; } function createBuffer(that, length) { if (kMaxLength() < length) { throw new RangeError('Invalid typed array length'); } if (Buffer.TYPED_ARRAY_SUPPORT) { // Return an augmented `Uint8Array` instance, for best performance that = new Uint8Array(length); that.__proto__ = Buffer.prototype; } else { // Fallback: Return an object instance of the Buffer class if (that === null) { that = new Buffer(length); } that.length = length; } return that; } /** * The Buffer constructor returns instances of `Uint8Array` that have their * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of * `Uint8Array`, so the returned instances will have all the node `Buffer` methods * and the `Uint8Array` methods. Square bracket notation works as expected -- it * returns a single octet. * * The `Uint8Array` prototype remains unmodified. */ function Buffer(arg, encodingOrOffset, length) { if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { return new Buffer(arg, encodingOrOffset, length); } // Common case. if (typeof arg === 'number') { if (typeof encodingOrOffset === 'string') { throw new Error('If encoding is specified then the first argument must be a string'); } return allocUnsafe(this, arg); } return from(this, arg, encodingOrOffset, length); } Buffer.poolSize = 8192; // not used by this implementation // TODO: Legacy, not needed anymore. Remove in next major version. Buffer._augment = function (arr) { arr.__proto__ = Buffer.prototype; return arr; }; function from(that, value, encodingOrOffset, length) { if (typeof value === 'number') { throw new TypeError('"value" argument must not be a number'); } if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { return fromArrayBuffer(that, value, encodingOrOffset, length); } if (typeof value === 'string') { return fromString(that, value, encodingOrOffset); } return fromObject(that, value); } /** * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError * if value is a number. * Buffer.from(str[, encoding]) * Buffer.from(array) * Buffer.from(buffer) * Buffer.from(arrayBuffer[, byteOffset[, length]]) **/ Buffer.from = function (value, encodingOrOffset, length) { return from(null, value, encodingOrOffset, length); }; if (Buffer.TYPED_ARRAY_SUPPORT) { Buffer.prototype.__proto__ = Uint8Array.prototype; Buffer.__proto__ = Uint8Array; if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) { // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 Object.defineProperty(Buffer, Symbol.species, { value: null, configurable: true }); } } function assertSize(size) { if (typeof size !== 'number') { throw new TypeError('"size" argument must be a number'); } else if (size < 0) { throw new RangeError('"size" argument must not be negative'); } } function alloc(that, size, fill, encoding) { assertSize(size); if (size <= 0) { return createBuffer(that, size); } if (fill !== undefined) { // Only pay attention to encoding if it's a string. This // prevents accidentally sending in a number that would // be interpretted as a start offset. return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill); } return createBuffer(that, size); } /** * Creates a new filled Buffer instance. * alloc(size[, fill[, encoding]]) **/ Buffer.alloc = function (size, fill, encoding) { return alloc(null, size, fill, encoding); }; function allocUnsafe(that, size) { assertSize(size); that = createBuffer(that, size < 0 ? 0 : checked(size) | 0); if (!Buffer.TYPED_ARRAY_SUPPORT) { for (var i = 0; i < size; ++i) { that[i] = 0; } } return that; } /** * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. * */ Buffer.allocUnsafe = function (size) { return allocUnsafe(null, size); }; /** * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. */ Buffer.allocUnsafeSlow = function (size) { return allocUnsafe(null, size); }; function fromString(that, string, encoding) { if (typeof encoding !== 'string' || encoding === '') { encoding = 'utf8'; } if (!Buffer.isEncoding(encoding)) { throw new TypeError('"encoding" must be a valid string encoding'); } var length = byteLength(string, encoding) | 0; that = createBuffer(that, length); var actual = that.write(string, encoding); if (actual !== length) { // Writing a hex string, for example, that contains invalid characters will // cause everything after the first invalid character to be ignored. (e.g. // 'abxxcd' will be treated as 'ab') that = that.slice(0, actual); } return that; } function fromArrayLike(that, array) { var length = array.length < 0 ? 0 : checked(array.length) | 0; that = createBuffer(that, length); for (var i = 0; i < length; i += 1) { that[i] = array[i] & 255; } return that; } function fromArrayBuffer(that, array, byteOffset, length) { array.byteLength; // this throws if `array` is not a valid ArrayBuffer if (byteOffset < 0 || array.byteLength < byteOffset) { throw new RangeError('\'offset\' is out of bounds'); } if (array.byteLength < byteOffset + (length || 0)) { throw new RangeError('\'length\' is out of bounds'); } if (byteOffset === undefined && length === undefined) { array = new Uint8Array(array); } else if (length === undefined) { array = new Uint8Array(array, byteOffset); } else { array = new Uint8Array(array, byteOffset, length); } if (Buffer.TYPED_ARRAY_SUPPORT) { // Return an augmented `Uint8Array` instance, for best performance that = array; that.__proto__ = Buffer.prototype; } else { // Fallback: Return an object instance of the Buffer class that = fromArrayLike(that, array); } return that; } function fromObject(that, obj) { if (Buffer.isBuffer(obj)) { var len = checked(obj.length) | 0; that = createBuffer(that, len); if (that.length === 0) { return that; } obj.copy(that, 0, 0, len); return that; } if (obj) { if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) { if (typeof obj.length !== 'number' || isnan(obj.length)) { return createBuffer(that, 0); } return fromArrayLike(that, obj); } if (obj.type === 'Buffer' && isArray(obj.data)) { return fromArrayLike(that, obj.data); } } throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.'); } function checked(length) { // Note: cannot use `length < kMaxLength()` here because that fails when // length is NaN (which is otherwise coerced to zero.) if (length >= kMaxLength()) { throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes'); } return length | 0; } function SlowBuffer(length) { if (+length != length) { // eslint-disable-line eqeqeq length = 0; } return Buffer.alloc(+length); } Buffer.isBuffer = function isBuffer(b) { return !!(b != null && b._isBuffer); }; Buffer.compare = function compare(a, b) { if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { throw new TypeError('Arguments must be Buffers'); } if (a === b) return 0; var x = a.length; var y = b.length; for (var i = 0, len = Math.min(x, y); i < len; ++i) { if (a[i] !== b[i]) { x = a[i]; y = b[i]; break; } } if (x < y) return -1; if (y < x) return 1; return 0; }; Buffer.isEncoding = function isEncoding(encoding) { switch (String(encoding).toLowerCase()) { case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'latin1': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return true; default: return false; } }; Buffer.concat = function concat(list, length) { if (!isArray(list)) { throw new TypeError('"list" argument must be an Array of Buffers'); } if (list.length === 0) { return Buffer.alloc(0); } var i; if (length === undefined) { length = 0; for (i = 0; i < list.length; ++i) { length += list[i].length; } } var buffer = Buffer.allocUnsafe(length); var pos = 0; for (i = 0; i < list.length; ++i) { var buf = list[i]; if (!Buffer.isBuffer(buf)) { throw new TypeError('"list" argument must be an Array of Buffers'); } buf.copy(buffer, pos); pos += buf.length; } return buffer; }; function byteLength(string, encoding) { if (Buffer.isBuffer(string)) { return string.length; } if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { return string.byteLength; } if (typeof string !== 'string') { string = '' + string; } var len = string.length; if (len === 0) return 0; // Use a for loop to avoid recursion var loweredCase = false; for (;;) { switch (encoding) { case 'ascii': case 'latin1': case 'binary': return len; case 'utf8': case 'utf-8': case undefined: return utf8ToBytes(string).length; case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return len * 2; case 'hex': return len >>> 1; case 'base64': return base64ToBytes(string).length; default: if (loweredCase) return utf8ToBytes(string).length; // assume utf8 encoding = ('' + encoding).toLowerCase(); loweredCase = true; } } } Buffer.byteLength = byteLength; function slowToString(encoding, start, end) { var loweredCase = false; // No need to verify that "this.length <= MAX_UINT32" since it's a read-only // property of a typed array. // This behaves neither like String nor Uint8Array in that we set start/end // to their upper/lower bounds if the value passed is out of range. // undefined is handled specially as per ECMA-262 6th Edition, // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. if (start === undefined || start < 0) { start = 0; } // Return early if start > this.length. Done here to prevent potential uint32 // coercion fail below. if (start > this.length) { return ''; } if (end === undefined || end > this.length) { end = this.length; } if (end <= 0) { return ''; } // Force coersion to uint32. This will also coerce falsey/NaN values to 0. end >>>= 0; start >>>= 0; if (end <= start) { return ''; } if (!encoding) encoding = 'utf8'; while (true) { switch (encoding) { case 'hex': return hexSlice(this, start, end); case 'utf8': case 'utf-8': return utf8Slice(this, start, end); case 'ascii': return asciiSlice(this, start, end); case 'latin1': case 'binary': return latin1Slice(this, start, end); case 'base64': return base64Slice(this, start, end); case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return utf16leSlice(this, start, end); default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); encoding = (encoding + '').toLowerCase(); loweredCase = true; } } } // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect // Buffer instances. Buffer.prototype._isBuffer = true; function swap(b, n, m) { var i = b[n]; b[n] = b[m]; b[m] = i; } Buffer.prototype.swap16 = function swap16() { var len = this.length; if (len % 2 !== 0) { throw new RangeError('Buffer size must be a multiple of 16-bits'); } for (var i = 0; i < len; i += 2) { swap(this, i, i + 1); } return this; }; Buffer.prototype.swap32 = function swap32() { var len = this.length; if (len % 4 !== 0) { throw new RangeError('Buffer size must be a multiple of 32-bits'); } for (var i = 0; i < len; i += 4) { swap(this, i, i + 3); swap(this, i + 1, i + 2); } return this; }; Buffer.prototype.swap64 = function swap64() { var len = this.length; if (len % 8 !== 0) { throw new RangeError('Buffer size must be a multiple of 64-bits'); } for (var i = 0; i < len; i += 8) { swap(this, i, i + 7); swap(this, i + 1, i + 6); swap(this, i + 2, i + 5); swap(this, i + 3, i + 4); } return this; }; Buffer.prototype.toString = function toString() { var length = this.length | 0; if (length === 0) return ''; if (arguments.length === 0) return utf8Slice(this, 0, length); return slowToString.apply(this, arguments); }; Buffer.prototype.equals = function equals(b) { if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer'); if (this === b) return true; return Buffer.compare(this, b) === 0; }; Buffer.prototype.inspect = function inspect() { var str = ''; var max = exports.INSPECT_MAX_BYTES; if (this.length > 0) { str = this.toString('hex', 0, max).match(/.{2}/g).join(' '); if (this.length > max) str += ' ... '; } return ''; }; Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { if (!Buffer.isBuffer(target)) { throw new TypeError('Argument must be a Buffer'); } if (start === undefined) { start = 0; } if (end === undefined) { end = target ? target.length : 0; } if (thisStart === undefined) { thisStart = 0; } if (thisEnd === undefined) { thisEnd = this.length; } if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { throw new RangeError('out of range index'); } if (thisStart >= thisEnd && start >= end) { return 0; } if (thisStart >= thisEnd) { return -1; } if (start >= end) { return 1; } start >>>= 0; end >>>= 0; thisStart >>>= 0; thisEnd >>>= 0; if (this === target) return 0; var x = thisEnd - thisStart; var y = end - start; var len = Math.min(x, y); var thisCopy = this.slice(thisStart, thisEnd); var targetCopy = target.slice(start, end); for (var i = 0; i < len; ++i) { if (thisCopy[i] !== targetCopy[i]) { x = thisCopy[i]; y = targetCopy[i]; break; } } if (x < y) return -1; if (y < x) return 1; return 0; }; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, // OR the last index of `val` in `buffer` at offset <= `byteOffset`. // // Arguments: // - buffer - a Buffer to search // - val - a string, Buffer, or number // - byteOffset - an index into `buffer`; will be clamped to an int32 // - encoding - an optional encoding, relevant is val is a string // - dir - true for indexOf, false for lastIndexOf function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) { // Empty buffer means no match if (buffer.length === 0) return -1; // Normalize byteOffset if (typeof byteOffset === 'string') { encoding = byteOffset; byteOffset = 0; } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff; } else if (byteOffset < -0x80000000) { byteOffset = -0x80000000; } byteOffset = +byteOffset; // Coerce to Number. if (isNaN(byteOffset)) { // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer byteOffset = dir ? 0 : buffer.length - 1; } // Normalize byteOffset: negative offsets start from the end of the buffer if (byteOffset < 0) byteOffset = buffer.length + byteOffset; if (byteOffset >= buffer.length) { if (dir) return -1;else byteOffset = buffer.length - 1; } else if (byteOffset < 0) { if (dir) byteOffset = 0;else return -1; } // Normalize val if (typeof val === 'string') { val = Buffer.from(val, encoding); } // Finally, search either indexOf (if dir is true) or lastIndexOf if (Buffer.isBuffer(val)) { // Special case: looking for empty string/buffer always fails if (val.length === 0) { return -1; } return arrayIndexOf(buffer, val, byteOffset, encoding, dir); } else if (typeof val === 'number') { val = val & 0xFF; // Search for a byte value [0-255] if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') { if (dir) { return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset); } else { return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset); } } return arrayIndexOf(buffer, [val], byteOffset, encoding, dir); } throw new TypeError('val must be string, number or Buffer'); } function arrayIndexOf(arr, val, byteOffset, encoding, dir) { var indexSize = 1; var arrLength = arr.length; var valLength = val.length; if (encoding !== undefined) { encoding = String(encoding).toLowerCase(); if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { if (arr.length < 2 || val.length < 2) { return -1; } indexSize = 2; arrLength /= 2; valLength /= 2; byteOffset /= 2; } } function read(buf, i) { if (indexSize === 1) { return buf[i]; } else { return buf.readUInt16BE(i * indexSize); } } var i; if (dir) { var foundIndex = -1; for (i = byteOffset; i < arrLength; i++) { if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { if (foundIndex === -1) foundIndex = i; if (i - foundIndex + 1 === valLength) return foundIndex * indexSize; } else { if (foundIndex !== -1) i -= i - foundIndex; foundIndex = -1; } } } else { if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; for (i = byteOffset; i >= 0; i--) { var found = true; for (var j = 0; j < valLength; j++) { if (read(arr, i + j) !== read(val, j)) { found = false; break; } } if (found) return i; } } return -1; } Buffer.prototype.includes = function includes(val, byteOffset, encoding) { return this.indexOf(val, byteOffset, encoding) !== -1; }; Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, true); }; Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, false); }; function hexWrite(buf, string, offset, length) { offset = Number(offset) || 0; var remaining = buf.length - offset; if (!length) { length = remaining; } else { length = Number(length); if (length > remaining) { length = remaining; } } // must be an even number of digits var strLen = string.length; if (strLen % 2 !== 0) throw new TypeError('Invalid hex string'); if (length > strLen / 2) { length = strLen / 2; } for (var i = 0; i < length; ++i) { var parsed = parseInt(string.substr(i * 2, 2), 16); if (isNaN(parsed)) return i; buf[offset + i] = parsed; } return i; } function utf8Write(buf, string, offset, length) { return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length); } function asciiWrite(buf, string, offset, length) { return blitBuffer(asciiToBytes(string), buf, offset, length); } function latin1Write(buf, string, offset, length) { return asciiWrite(buf, string, offset, length); } function base64Write(buf, string, offset, length) { return blitBuffer(base64ToBytes(string), buf, offset, length); } function ucs2Write(buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length); } Buffer.prototype.write = function write(string, offset, length, encoding) { // Buffer#write(string) if (offset === undefined) { encoding = 'utf8'; length = this.length; offset = 0; // Buffer#write(string, encoding) } else if (length === undefined && typeof offset === 'string') { encoding = offset; length = this.length; offset = 0; // Buffer#write(string, offset[, length][, encoding]) } else if (isFinite(offset)) { offset = offset | 0; if (isFinite(length)) { length = length | 0; if (encoding === undefined) encoding = 'utf8'; } else { encoding = length; length = undefined; } // legacy write(string, encoding, offset, length) - remove in v0.13 } else { throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported'); } var remaining = this.length - offset; if (length === undefined || length > remaining) length = remaining; if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { throw new RangeError('Attempt to write outside buffer bounds'); } if (!encoding) encoding = 'utf8'; var loweredCase = false; for (;;) { switch (encoding) { case 'hex': return hexWrite(this, string, offset, length); case 'utf8': case 'utf-8': return utf8Write(this, string, offset, length); case 'ascii': return asciiWrite(this, string, offset, length); case 'latin1': case 'binary': return latin1Write(this, string, offset, length); case 'base64': // Warning: maxLength not taken into account in base64Write return base64Write(this, string, offset, length); case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return ucs2Write(this, string, offset, length); default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); encoding = ('' + encoding).toLowerCase(); loweredCase = true; } } }; Buffer.prototype.toJSON = function toJSON() { return { type: 'Buffer', data: Array.prototype.slice.call(this._arr || this, 0) }; }; function base64Slice(buf, start, end) { if (start === 0 && end === buf.length) { return base64.fromByteArray(buf); } else { return base64.fromByteArray(buf.slice(start, end)); } } function utf8Slice(buf, start, end) { end = Math.min(buf.length, end); var res = []; var i = start; while (i < end) { var firstByte = buf[i]; var codePoint = null; var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1; if (i + bytesPerSequence <= end) { var secondByte, thirdByte, fourthByte, tempCodePoint; switch (bytesPerSequence) { case 1: if (firstByte < 0x80) { codePoint = firstByte; } break; case 2: secondByte = buf[i + 1]; if ((secondByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F; if (tempCodePoint > 0x7F) { codePoint = tempCodePoint; } } break; case 3: secondByte = buf[i + 1]; thirdByte = buf[i + 2]; if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F; if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { codePoint = tempCodePoint; } } break; case 4: secondByte = buf[i + 1]; thirdByte = buf[i + 2]; fourthByte = buf[i + 3]; if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F; if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { codePoint = tempCodePoint; } } } } if (codePoint === null) { // we did not generate a valid codePoint so insert a // replacement char (U+FFFD) and advance only 1 byte codePoint = 0xFFFD; bytesPerSequence = 1; } else if (codePoint > 0xFFFF) { // encode to utf16 (surrogate pair dance) codePoint -= 0x10000; res.push(codePoint >>> 10 & 0x3FF | 0xD800); codePoint = 0xDC00 | codePoint & 0x3FF; } res.push(codePoint); i += bytesPerSequence; } return decodeCodePointsArray(res); } // Based on http://stackoverflow.com/a/22747272/680742, the browser with // the lowest limit is Chrome, with 0x10000 args. // We go 1 magnitude less, for safety var MAX_ARGUMENTS_LENGTH = 0x1000; function decodeCodePointsArray(codePoints) { var len = codePoints.length; if (len <= MAX_ARGUMENTS_LENGTH) { return String.fromCharCode.apply(String, codePoints); // avoid extra slice() } // Decode in chunks to avoid "call stack size exceeded". var res = ''; var i = 0; while (i < len) { res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)); } return res; } function asciiSlice(buf, start, end) { var ret = ''; end = Math.min(buf.length, end); for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i] & 0x7F); } return ret; } function latin1Slice(buf, start, end) { var ret = ''; end = Math.min(buf.length, end); for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i]); } return ret; } function hexSlice(buf, start, end) { var len = buf.length; if (!start || start < 0) start = 0; if (!end || end < 0 || end > len) end = len; var out = ''; for (var i = start; i < end; ++i) { out += toHex(buf[i]); } return out; } function utf16leSlice(buf, start, end) { var bytes = buf.slice(start, end); var res = ''; for (var i = 0; i < bytes.length; i += 2) { res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); } return res; } Buffer.prototype.slice = function slice(start, end) { var len = this.length; start = ~~start; end = end === undefined ? len : ~~end; if (start < 0) { start += len; if (start < 0) start = 0; } else if (start > len) { start = len; } if (end < 0) { end += len; if (end < 0) end = 0; } else if (end > len) { end = len; } if (end < start) end = start; var newBuf; if (Buffer.TYPED_ARRAY_SUPPORT) { newBuf = this.subarray(start, end); newBuf.__proto__ = Buffer.prototype; } else { var sliceLen = end - start; newBuf = new Buffer(sliceLen, undefined); for (var i = 0; i < sliceLen; ++i) { newBuf[i] = this[i + start]; } } return newBuf; }; /* * Need to make sure that buffer isn't trying to write out of bounds. */ function checkOffset(offset, ext, length) { if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint'); if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length'); } Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) { offset = offset | 0; byteLength = byteLength | 0; if (!noAssert) checkOffset(offset, byteLength, this.length); var val = this[offset]; var mul = 1; var i = 0; while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul; } return val; }; Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) { offset = offset | 0; byteLength = byteLength | 0; if (!noAssert) { checkOffset(offset, byteLength, this.length); } var val = this[offset + --byteLength]; var mul = 1; while (byteLength > 0 && (mul *= 0x100)) { val += this[offset + --byteLength] * mul; } return val; }; Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length); return this[offset]; }; Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length); return this[offset] | this[offset + 1] << 8; }; Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length); return this[offset] << 8 | this[offset + 1]; }; Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000; }; Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); }; Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) { offset = offset | 0; byteLength = byteLength | 0; if (!noAssert) checkOffset(offset, byteLength, this.length); var val = this[offset]; var mul = 1; var i = 0; while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul; } mul *= 0x80; if (val >= mul) val -= Math.pow(2, 8 * byteLength); return val; }; Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) { offset = offset | 0; byteLength = byteLength | 0; if (!noAssert) checkOffset(offset, byteLength, this.length); var i = byteLength; var mul = 1; var val = this[offset + --i]; while (i > 0 && (mul *= 0x100)) { val += this[offset + --i] * mul; } mul *= 0x80; if (val >= mul) val -= Math.pow(2, 8 * byteLength); return val; }; Buffer.prototype.readInt8 = function readInt8(offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length); if (!(this[offset] & 0x80)) return this[offset]; return (0xff - this[offset] + 1) * -1; }; Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length); var val = this[offset] | this[offset + 1] << 8; return val & 0x8000 ? val | 0xFFFF0000 : val; }; Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) { if (!noAssert) checkOffset(offset, 2, this.length); var val = this[offset + 1] | this[offset] << 8; return val & 0x8000 ? val | 0xFFFF0000 : val; }; Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; }; Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; }; Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return ieee754.read(this, offset, true, 23, 4); }; Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) { if (!noAssert) checkOffset(offset, 4, this.length); return ieee754.read(this, offset, false, 23, 4); }; Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length); return ieee754.read(this, offset, true, 52, 8); }; Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { if (!noAssert) checkOffset(offset, 8, this.length); return ieee754.read(this, offset, false, 52, 8); }; function checkInt(buf, value, offset, ext, max, min) { if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance'); if (value > max || value < min) throw new RangeError('"value" argument is out of bounds'); if (offset + ext > buf.length) throw new RangeError('Index out of range'); } Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) { value = +value; offset = offset | 0; byteLength = byteLength | 0; if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1; checkInt(this, value, offset, byteLength, maxBytes, 0); } var mul = 1; var i = 0; this[offset] = value & 0xFF; while (++i < byteLength && (mul *= 0x100)) { this[offset + i] = value / mul & 0xFF; } return offset + byteLength; }; Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) { value = +value; offset = offset | 0; byteLength = byteLength | 0; if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1; checkInt(this, value, offset, byteLength, maxBytes, 0); } var i = byteLength - 1; var mul = 1; this[offset + i] = value & 0xFF; while (--i >= 0 && (mul *= 0x100)) { this[offset + i] = value / mul & 0xFF; } return offset + byteLength; }; Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { value = +value; offset = offset | 0; if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); this[offset] = value & 0xff; return offset + 1; }; function objectWriteUInt16(buf, value, offset, littleEndian) { if (value < 0) value = 0xffff + value + 1; for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8; } } Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { value = +value; offset = offset | 0; if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = value & 0xff; this[offset + 1] = value >>> 8; } else { objectWriteUInt16(this, value, offset, true); } return offset + 2; }; Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { value = +value; offset = offset | 0; if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = value >>> 8; this[offset + 1] = value & 0xff; } else { objectWriteUInt16(this, value, offset, false); } return offset + 2; }; function objectWriteUInt32(buf, value, offset, littleEndian) { if (value < 0) value = 0xffffffff + value + 1; for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff; } } Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { value = +value; offset = offset | 0; if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset + 3] = value >>> 24; this[offset + 2] = value >>> 16; this[offset + 1] = value >>> 8; this[offset] = value & 0xff; } else { objectWriteUInt32(this, value, offset, true); } return offset + 4; }; Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { value = +value; offset = offset | 0; if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = value >>> 24; this[offset + 1] = value >>> 16; this[offset + 2] = value >>> 8; this[offset + 3] = value & 0xff; } else { objectWriteUInt32(this, value, offset, false); } return offset + 4; }; Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) { value = +value; offset = offset | 0; if (!noAssert) { var limit = Math.pow(2, 8 * byteLength - 1); checkInt(this, value, offset, byteLength, limit - 1, -limit); } var i = 0; var mul = 1; var sub = 0; this[offset] = value & 0xFF; while (++i < byteLength && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { sub = 1; } this[offset + i] = (value / mul >> 0) - sub & 0xFF; } return offset + byteLength; }; Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) { value = +value; offset = offset | 0; if (!noAssert) { var limit = Math.pow(2, 8 * byteLength - 1); checkInt(this, value, offset, byteLength, limit - 1, -limit); } var i = byteLength - 1; var mul = 1; var sub = 0; this[offset + i] = value & 0xFF; while (--i >= 0 && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { sub = 1; } this[offset + i] = (value / mul >> 0) - sub & 0xFF; } return offset + byteLength; }; Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { value = +value; offset = offset | 0; if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value); if (value < 0) value = 0xff + value + 1; this[offset] = value & 0xff; return offset + 1; }; Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { value = +value; offset = offset | 0; if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = value & 0xff; this[offset + 1] = value >>> 8; } else { objectWriteUInt16(this, value, offset, true); } return offset + 2; }; Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { value = +value; offset = offset | 0; if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = value >>> 8; this[offset + 1] = value & 0xff; } else { objectWriteUInt16(this, value, offset, false); } return offset + 2; }; Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { value = +value; offset = offset | 0; if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = value & 0xff; this[offset + 1] = value >>> 8; this[offset + 2] = value >>> 16; this[offset + 3] = value >>> 24; } else { objectWriteUInt32(this, value, offset, true); } return offset + 4; }; Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { value = +value; offset = offset | 0; if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); if (value < 0) value = 0xffffffff + value + 1; if (Buffer.TYPED_ARRAY_SUPPORT) { this[offset] = value >>> 24; this[offset + 1] = value >>> 16; this[offset + 2] = value >>> 8; this[offset + 3] = value & 0xff; } else { objectWriteUInt32(this, value, offset, false); } return offset + 4; }; function checkIEEE754(buf, value, offset, ext, max, min) { if (offset + ext > buf.length) throw new RangeError('Index out of range'); if (offset < 0) throw new RangeError('Index out of range'); } function writeFloat(buf, value, offset, littleEndian, noAssert) { if (!noAssert) { checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38); } ieee754.write(buf, value, offset, littleEndian, 23, 4); return offset + 4; } Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { return writeFloat(this, value, offset, true, noAssert); }; Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { return writeFloat(this, value, offset, false, noAssert); }; function writeDouble(buf, value, offset, littleEndian, noAssert) { if (!noAssert) { checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308); } ieee754.write(buf, value, offset, littleEndian, 52, 8); return offset + 8; } Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { return writeDouble(this, value, offset, true, noAssert); }; Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { return writeDouble(this, value, offset, false, noAssert); }; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) Buffer.prototype.copy = function copy(target, targetStart, start, end) { if (!start) start = 0; if (!end && end !== 0) end = this.length; if (targetStart >= target.length) targetStart = target.length; if (!targetStart) targetStart = 0; if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done if (end === start) return 0; if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions if (targetStart < 0) { throw new RangeError('targetStart out of bounds'); } if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds'); if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob? if (end > this.length) end = this.length; if (target.length - targetStart < end - start) { end = target.length - targetStart + start; } var len = end - start; var i; if (this === target && start < targetStart && targetStart < end) { // descending copy from end for (i = len - 1; i >= 0; --i) { target[i + targetStart] = this[i + start]; } } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { // ascending copy from start for (i = 0; i < len; ++i) { target[i + targetStart] = this[i + start]; } } else { Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart); } return len; }; // Usage: // buffer.fill(number[, offset[, end]]) // buffer.fill(buffer[, offset[, end]]) // buffer.fill(string[, offset[, end]][, encoding]) Buffer.prototype.fill = function fill(val, start, end, encoding) { // Handle string cases: if (typeof val === 'string') { if (typeof start === 'string') { encoding = start; start = 0; end = this.length; } else if (typeof end === 'string') { encoding = end; end = this.length; } if (val.length === 1) { var code = val.charCodeAt(0); if (code < 256) { val = code; } } if (encoding !== undefined && typeof encoding !== 'string') { throw new TypeError('encoding must be a string'); } if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { throw new TypeError('Unknown encoding: ' + encoding); } } else if (typeof val === 'number') { val = val & 255; } // Invalid ranges are not set to a default, so can range check early. if (start < 0 || this.length < start || this.length < end) { throw new RangeError('Out of range index'); } if (end <= start) { return this; } start = start >>> 0; end = end === undefined ? this.length : end >>> 0; if (!val) val = 0; var i; if (typeof val === 'number') { for (i = start; i < end; ++i) { this[i] = val; } } else { var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString()); var len = bytes.length; for (i = 0; i < end - start; ++i) { this[i + start] = bytes[i % len]; } } return this; }; // HELPER FUNCTIONS // ================ var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g; function base64clean(str) { // Node strips out invalid characters like \n and \t from the string, base64-js does not str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to '' if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not while (str.length % 4 !== 0) { str = str + '='; } return str; } function stringtrim(str) { if (str.trim) return str.trim(); return str.replace(/^\s+|\s+$/g, ''); } function toHex(n) { if (n < 16) return '0' + n.toString(16); return n.toString(16); } function utf8ToBytes(string, units) { units = units || Infinity; var codePoint; var length = string.length; var leadSurrogate = null; var bytes = []; for (var i = 0; i < length; ++i) { codePoint = string.charCodeAt(i); // is surrogate component if (codePoint > 0xD7FF && codePoint < 0xE000) { // last char was a lead if (!leadSurrogate) { // no lead yet if (codePoint > 0xDBFF) { // unexpected trail if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); continue; } else if (i + 1 === length) { // unpaired lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); continue; } // valid lead leadSurrogate = codePoint; continue; } // 2 leads in a row if (codePoint < 0xDC00) { if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); leadSurrogate = codePoint; continue; } // valid surrogate pair codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000; } else if (leadSurrogate) { // valid bmp char, but last char was a lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); } leadSurrogate = null; // encode utf8 if (codePoint < 0x80) { if ((units -= 1) < 0) break; bytes.push(codePoint); } else if (codePoint < 0x800) { if ((units -= 2) < 0) break; bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80); } else if (codePoint < 0x10000) { if ((units -= 3) < 0) break; bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); } else if (codePoint < 0x110000) { if ((units -= 4) < 0) break; bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); } else { throw new Error('Invalid code point'); } } return bytes; } function asciiToBytes(str) { var byteArray = []; for (var i = 0; i < str.length; ++i) { // Node's code seems to be doing this and not & 0x7F.. byteArray.push(str.charCodeAt(i) & 0xFF); } return byteArray; } function utf16leToBytes(str, units) { var c, hi, lo; var byteArray = []; for (var i = 0; i < str.length; ++i) { if ((units -= 2) < 0) break; c = str.charCodeAt(i); hi = c >> 8; lo = c % 256; byteArray.push(lo); byteArray.push(hi); } return byteArray; } function base64ToBytes(str) { return base64.toByteArray(base64clean(str)); } function blitBuffer(src, dst, offset, length) { for (var i = 0; i < length; ++i) { if (i + offset >= dst.length || i >= src.length) break; dst[i + offset] = src[i]; } return i; } function isnan(val) { return val !== val; // eslint-disable-line no-self-compare } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5))) /***/ }), /* 15 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(Buffer) {// 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. // NOTE: These type checking functions intentionally don't use `instanceof` // because it is fragile and can be easily faked with `Object.create()`. function isArray(arg) { if (Array.isArray) { return Array.isArray(arg); } return objectToString(arg) === '[object Array]'; } exports.isArray = isArray; function isBoolean(arg) { return typeof arg === 'boolean'; } exports.isBoolean = isBoolean; function isNull(arg) { return arg === null; } exports.isNull = isNull; function isNullOrUndefined(arg) { return arg == null; } exports.isNullOrUndefined = isNullOrUndefined; function isNumber(arg) { return typeof arg === 'number'; } exports.isNumber = isNumber; function isString(arg) { return typeof arg === 'string'; } exports.isString = isString; function isSymbol(arg) { return typeof arg === 'symbol'; } exports.isSymbol = isSymbol; function isUndefined(arg) { return arg === void 0; } exports.isUndefined = isUndefined; function isRegExp(re) { return objectToString(re) === '[object RegExp]'; } exports.isRegExp = isRegExp; function isObject(arg) { return typeof arg === 'object' && arg !== null; } exports.isObject = isObject; function isDate(d) { return objectToString(d) === '[object Date]'; } exports.isDate = isDate; function isError(e) { return objectToString(e) === '[object Error]' || e instanceof Error; } exports.isError = isError; function isFunction(arg) { return typeof arg === 'function'; } exports.isFunction = isFunction; function isPrimitive(arg) { return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || // ES6 symbol typeof arg === 'undefined'; } exports.isPrimitive = isPrimitive; exports.isBuffer = Buffer.isBuffer; function objectToString(o) { return Object.prototype.toString.call(o); } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(14).Buffer)) /***/ }), /* 16 */ /***/ (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; }; /***/ }), /* 17 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process) { if (typeof process === 'undefined' || !process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { module.exports = { nextTick: nextTick }; } else { module.exports = process; } function nextTick(fn, arg1, arg2, arg3) { if (typeof fn !== 'function') { throw new TypeError('"callback" argument must be a function'); } var len = arguments.length; var args, i; switch (len) { case 0: case 1: return process.nextTick(fn); case 2: return process.nextTick(function afterTickOne() { fn.call(null, arg1); }); case 3: return process.nextTick(function afterTickTwo() { fn.call(null, arg1, arg2); }); case 4: return process.nextTick(function afterTickThree() { fn.call(null, arg1, arg2, arg3); }); default: args = new Array(len - 1); i = 0; while (i < args.length) { args[i++] = arguments[i]; } return process.nextTick(function afterTick() { fn.apply(null, args); }); } } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(16))) /***/ }), /* 18 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** * lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` * Copyright jQuery Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /** Used as the `TypeError` message for "Functions" methods. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** Used as references for various `Number` constants. */ var NAN = 0 / 0; /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** Used to match leading and trailing whitespace. */ var reTrim = /^\s+|\s+$/g; /** 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 octal string values. */ var reIsOctal = /^0o[0-7]+$/i; /** Built-in method references without a dependency on `root`. */ var 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')(); /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var objectToString = objectProto.toString; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max, nativeMin = Math.min; /** * 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 = function now() { return root.Date.now(); }; /** * 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, result = wait - timeSinceLastCall; return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; } 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; } /** * 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 && (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 && typeof value == 'object'; } /** * 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) && objectToString.call(value) == symbolTag; } /** * 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; } module.exports = debounce; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5))) /***/ }), /* 19 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** * lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` * Copyright jQuery Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** Used to compose unicode character classes. */ var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f\\ufe20-\\ufe23", rsComboSymbolsRange = "\\u20d0-\\u20f0", rsVarRange = "\\ufe0e\\ufe0f"; /** Used to compose unicode capture groups. */ var rsAstral = '[' + rsAstralRange + ']', rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', rsNonAstral = '[^' + rsAstralRange + ']', rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsZWJ = "\\u200d"; /** Used to compose unicode regexes. */ var reOptMod = rsModifier + '?', rsOptVar = '[' + rsVarRange + ']?', rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, '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 + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); /** 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')(); /** * 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(''); } /** * 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); } /** * 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); } /** * 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) || []; } /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var objectToString = objectProto.toString; /** Built-in value references. */ var Symbol = root.Symbol; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * 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 `_.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 (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = value + ''; return result == '0' && 1 / value == -INFINITY ? '-0' : result; } /** * 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); } /** * 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; }; } /** * 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 && typeof value == 'object'; } /** * 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) && objectToString.call(value) == symbolTag; } /** * 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 process. * @returns {string} Returns the string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } /** * 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'); module.exports = upperFirst; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5))) /***/ }), /* 20 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__20__; /***/ }), /* 21 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__21__; /***/ }), /* 22 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** * lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` * Copyright jQuery Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** 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')(); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to generate unique IDs. */ var idCounter = 0; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) * of values. */ var objectToString = objectProto.toString; /** Built-in value references. */ var Symbol = root.Symbol; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * 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 (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = value + ''; return result == '0' && 1 / value == -INFINITY ? '-0' : result; } /** * 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 && typeof value == 'object'; } /** * 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) && objectToString.call(value) == symbolTag; } /** * 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 process. * @returns {string} Returns the string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(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; } module.exports = uniqueId; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5))) /***/ }), /* 23 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global, module) {/** * lodash (Custom Build) * Build: `lodash modularize exports="npm" -o ./` * Copyright jQuery Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', promiseTag = '[object Promise]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', symbolTag = '[object Symbol]', weakMapTag = '[object WeakMap]'; 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 `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to match `RegExp` flags from their coerced string values. */ var reFlags = /\w*$/; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** 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; /** 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 = true && 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; /** * Adds the key-value `pair` to `map`. * * @private * @param {Object} map The map to modify. * @param {Array} pair The key-value pair to add. * @returns {Object} Returns `map`. */ function addMapEntry(map, pair) { // Don't return `map.set` because it's not chainable in IE 11. map.set(pair[0], pair[1]); return map; } /** * Adds `value` to `set`. * * @private * @param {Object} set The set to modify. * @param {*} value The value to add. * @returns {Object} Returns `set`. */ function addSetEntry(set, value) { // Don't return `set.add` because it's not chainable in IE 11. set.add(value); return set; } /** * 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 ? array.length : 0; while (++index < length) { if (iteratee(array[index], index, array) === false) { break; } } return array; } /** * 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 ? array.length : 0; if (initAccum && length) { accumulator = array[++index]; } while (++index < length) { accumulator = iteratee(accumulator, array[index], index, array); } return accumulator; } /** * 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; } /** * 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 `value` is a host object in IE < 9. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a host object, else `false`. */ function isHostObject(value) { // Many host objects are `Object` objects that can coerce to strings // despite having improperly defined `toString` methods. var result = false; if (value != null && typeof value.toString != 'function') { try { result = !!(value + ''); } catch (e) {} } 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)); }; } /** * 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; } /** 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 = root['__core-js_shared__']; /** 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 decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var objectToString = objectProto.toString; /** 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 ? root.Buffer : undefined, Symbol = root.Symbol, Uint8Array = root.Uint8Array, getPrototype = overArg(Object.getPrototypeOf, Object), objectCreate = Object.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols, nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, nativeKeys = overArg(Object.keys, Object); /* Built-in method references that are verified to be native. */ var DataView = getNative(root, 'DataView'), Map = getNative(root, 'Map'), Promise = getNative(root, 'Promise'), Set = getNative(root, 'Set'), WeakMap = getNative(root, 'WeakMap'), nativeCreate = getNative(Object, 'create'); /** 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; /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash(entries) { var index = -1, length = entries ? entries.length : 0; 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) : {}; } /** * 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) { return this.has(key) && delete this.__data__[key]; } /** * 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__; 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 ? entries.length : 0; 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__ = []; } /** * 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); } 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) { 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 ? entries.length : 0; 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.__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) { return getMapData(this, key)['delete'](key); } /** * 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) { getMapData(this, key).set(key, value); 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 a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Stack(entries) { this.__data__ = new ListCache(entries); } /** * Removes all key-value entries from the stack. * * @private * @name clear * @memberOf Stack */ function stackClear() { this.__data__ = new ListCache(); } /** * 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) { return this.__data__['delete'](key); } /** * 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 cache = this.__data__; if (cache instanceof ListCache) { var pairs = cache.__data__; if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) { pairs.push([key, value]); return this; } cache = this.__data__ = new MapCache(pairs); } cache.set(key, value); 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) { // Safari 8.1 makes `arguments.callee` enumerable in strict mode. // Safari 9 makes `arguments.length` enumerable in strict mode. var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : []; var length = result.length, skipIndexes = !!length; for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == 'length' || isIndex(key, length)))) { result.push(key); } } return result; } /** * 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)) { 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; } /** * 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 `_.clone` and `_.cloneDeep` which tracks * traversed objects. * * @private * @param {*} value The value to clone. * @param {boolean} [isDeep] Specify a deep clone. * @param {boolean} [isFull] Specify a clone including 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, isDeep, isFull, customizer, key, object, stack) { var result; 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) { if (isHostObject(value)) { return object ? value : {}; } result = initCloneObject(isFunc ? {} : value); if (!isDeep) { return copySymbols(value, baseAssign(result, value)); } } else { if (!cloneableTags[tag]) { return object ? value : {}; } result = initCloneByTag(value, tag, baseClone, 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 (!isArr) { var props = isFull ? getAllKeys(value) : keys(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, isDeep, isFull, customizer, key, value, stack)); }); return result; } /** * The base implementation of `_.create` without support for assigning * properties to the created object. * * @private * @param {Object} prototype The object to inherit from. * @returns {Object} Returns the new object. */ function baseCreate(proto) { return isObject(proto) ? objectCreate(proto) : {}; } /** * 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`. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { return objectToString.call(value); } /** * 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) || isHostObject(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(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; } /** * 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 result = new buffer.constructor(buffer.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 `map`. * * @private * @param {Object} map The map to clone. * @param {Function} cloneFunc The function to clone values. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned map. */ function cloneMap(map, isDeep, cloneFunc) { var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map); return arrayReduce(array, addMapEntry, new map.constructor()); } /** * 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 `set`. * * @private * @param {Object} set The set to clone. * @param {Function} cloneFunc The function to clone values. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned set. */ function cloneSet(set, isDeep, cloneFunc) { var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set); return arrayReduce(array, addSetEntry, new set.constructor()); } /** * 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); } /** * 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) { 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; assignValue(object, key, newValue === undefined ? source[key] : newValue); } return object; } /** * Copies own symbol properties 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); } /** * 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); } /** * 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 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; } /** * Creates an array of the own enumerable symbol properties of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray; /** * 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, // for data views in Edge < 14, and promises in Node.js. 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 getTag(value) { var result = objectToString.call(value), Ctor = result == objectTag ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : undefined; 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; }; } /** * 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 = 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`, `Number`, `RegExp`, or `String`. * * @private * @param {Object} object The object to clone. * @param {string} tag The `toStringTag` of the object to clone. * @param {Function} cloneFunc The function to clone values. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the initialized clone. */ function initCloneByTag(object, tag, cloneFunc, 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 cloneMap(object, isDeep, cloneFunc); case numberTag: case stringTag: return new Ctor(object); case regexpTag: return cloneRegExp(object); case setTag: return cloneSet(object, isDeep, cloneFunc); case symbolTag: return cloneSymbol(object); } } /** * 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) { length = length == null ? MAX_SAFE_INTEGER : length; return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; } /** * 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 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 `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; } /** * Converts `func` to its source code. * * @private * @param {Function} func The function to process. * @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 ''; } /** * 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, true, true); } /** * 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 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 */ function isArguments(value) { // Safari 8.1 makes `arguments.callee` enumerable in strict mode. return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); } /** * 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 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 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 `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) { // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 8-9 which returns 'object' for typed array and other constructors. var tag = isObject(value) ? objectToString.call(value) : ''; return tag == funcTag || tag == genTag; } /** * 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 && (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 && typeof value == 'object'; } /** * 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); } /** * 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; } module.exports = cloneDeep; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5), __webpack_require__(32)(module))) /***/ }), /* 24 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _interopRequireDefault = __webpack_require__(77); exports.__esModule = true; exports.default = void 0; var _getDisplayName = _interopRequireDefault(__webpack_require__(78)); var wrapDisplayName = function wrapDisplayName(BaseComponent, hocName) { return hocName + "(" + (0, _getDisplayName.default)(BaseComponent) + ")"; }; var _default = wrapDisplayName; exports.default = _default; /***/ }), /* 25 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var reactIs = __webpack_require__(79); /** * Copyright 2015, Yahoo! Inc. * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. */ var REACT_STATICS = { childContextTypes: true, contextType: true, contextTypes: true, defaultProps: true, displayName: true, getDefaultProps: true, getDerivedStateFromError: true, getDerivedStateFromProps: true, mixins: true, propTypes: true, type: true }; var KNOWN_STATICS = { name: true, length: true, prototype: true, caller: true, callee: true, arguments: true, arity: true }; var FORWARD_REF_STATICS = { '$$typeof': true, render: true, defaultProps: true, displayName: true, propTypes: true }; var MEMO_STATICS = { '$$typeof': true, compare: true, defaultProps: true, displayName: true, propTypes: true, type: true }; var TYPE_STATICS = {}; TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS; function getStatics(component) { if (reactIs.isMemo(component)) { return MEMO_STATICS; } return TYPE_STATICS[component['$$typeof']] || REACT_STATICS; } var defineProperty = Object.defineProperty; var getOwnPropertyNames = Object.getOwnPropertyNames; var getOwnPropertySymbols = Object.getOwnPropertySymbols; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; var getPrototypeOf = Object.getPrototypeOf; var objectPrototype = Object.prototype; function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) { if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components if (objectPrototype) { var inheritedComponent = getPrototypeOf(sourceComponent); if (inheritedComponent && inheritedComponent !== objectPrototype) { hoistNonReactStatics(targetComponent, inheritedComponent, blacklist); } } var keys = getOwnPropertyNames(sourceComponent); if (getOwnPropertySymbols) { keys = keys.concat(getOwnPropertySymbols(sourceComponent)); } var targetStatics = getStatics(targetComponent); var sourceStatics = getStatics(sourceComponent); for (var i = 0; i < keys.length; ++i) { var key = keys[i]; if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) { var descriptor = getOwnPropertyDescriptor(sourceComponent, key); try { // Avoid failures from read-only properties defineProperty(targetComponent, key, descriptor); } catch (e) {} } } } return targetComponent; } module.exports = hoistNonReactStatics; /***/ }), /* 26 */ /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(35); exports.Stream = exports; exports.Readable = exports; exports.Writable = __webpack_require__(28); exports.Duplex = __webpack_require__(7); exports.Transform = __webpack_require__(38); exports.PassThrough = __webpack_require__(68); /***/ }), /* 27 */ /***/ (function(module, exports, __webpack_require__) { /* eslint-disable node/no-deprecated-api */ var buffer = __webpack_require__(14); var Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers function copyProps(src, dst) { for (var key in src) { dst[key] = src[key]; } } if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { module.exports = buffer; } else { // Copy properties from require('buffer') copyProps(buffer, exports); exports.Buffer = SafeBuffer; } function SafeBuffer(arg, encodingOrOffset, length) { return Buffer(arg, encodingOrOffset, length); } // Copy static methods from Buffer copyProps(Buffer, SafeBuffer); SafeBuffer.from = function (arg, encodingOrOffset, length) { if (typeof arg === 'number') { throw new TypeError('Argument must not be a number'); } return Buffer(arg, encodingOrOffset, length); }; SafeBuffer.alloc = function (size, fill, encoding) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number'); } var buf = Buffer(size); if (fill !== undefined) { if (typeof encoding === 'string') { buf.fill(fill, encoding); } else { buf.fill(fill); } } else { buf.fill(0); } return buf; }; SafeBuffer.allocUnsafe = function (size) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number'); } return Buffer(size); }; SafeBuffer.allocUnsafeSlow = function (size) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number'); } return buffer.SlowBuffer(size); }; /***/ }), /* 28 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(process, setImmediate, global) {// 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. // A bit simpler than readable streams. // Implement an async ._write(chunk, encoding, cb), and it'll handle all // the drain event emission and buffering. /**/ var pna = __webpack_require__(17); /**/ module.exports = Writable; /* */ function WriteReq(chunk, encoding, cb) { this.chunk = chunk; this.encoding = encoding; this.callback = cb; this.next = null; } // It seems a linked list but it is not // there will be only 2 of these for each stream function CorkedRequest(state) { var _this = this; this.next = null; this.entry = null; this.finish = function () { onCorkedFinish(_this, state); }; } /* */ /**/ var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; /**/ /**/ var Duplex; /**/ Writable.WritableState = WritableState; /**/ var util = __webpack_require__(15); util.inherits = __webpack_require__(11); /**/ /**/ var internalUtil = { deprecate: __webpack_require__(66) }; /**/ /**/ var Stream = __webpack_require__(36); /**/ /**/ var Buffer = __webpack_require__(27).Buffer; var OurUint8Array = global.Uint8Array || function () {}; function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } function _isUint8Array(obj) { return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } /**/ var destroyImpl = __webpack_require__(37); util.inherits(Writable, Stream); function nop() {} function WritableState(options, stream) { Duplex = Duplex || __webpack_require__(7); options = options || {}; // Duplex streams are both readable and writable, but share // the same options object. // However, some cases require setting options to different // values for the readable and the writable sides of the duplex stream. // These options can be provided separately as readableXXX and writableXXX. var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream // contains buffers or objects. this.objectMode = !!options.objectMode; if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false // Note: 0 is a valid value, means that we always return false if // the entire buffer is not flushed immediately on write() var hwm = options.highWaterMark; var writableHwm = options.writableHighWaterMark; var defaultHwm = this.objectMode ? 16 : 16 * 1024; if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints. this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called this.finalCalled = false; // drain event flag. this.needDrain = false; // at the start of calling end() this.ending = false; // when end() has been called, and returned this.ended = false; // when 'finish' is emitted this.finished = false; // has it been destroyed this.destroyed = false; // should we decode strings into buffers before passing to _write? // this is here so that some node-core streams can optimize string // handling at a lower level. var noDecode = options.decodeStrings === false; this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement // of how much we're waiting to get pushed to some underlying // socket or file. this.length = 0; // a flag to see when we're in the middle of a write. this.writing = false; // when true all writes will be buffered until .uncork() call this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, // or on a later tick. We set this to true at first, because any // actions that shouldn't happen until "later" should generally also // not happen before the first write call. this.sync = true; // a flag to know if we're processing previously buffered items, which // may call the _write() callback in the same tick, so that we don't // end up in an overlapped onwrite situation. this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) this.onwrite = function (er) { onwrite(stream, er); }; // the callback that the user supplies to write(chunk,encoding,cb) this.writecb = null; // the amount that is being written when _write is called. this.writelen = 0; this.bufferedRequest = null; this.lastBufferedRequest = null; // number of pending user-supplied write callbacks // this must be 0 before 'finish' can be emitted this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs // This is relevant for synchronous Transform streams this.prefinished = false; // True if the error was already emitted and should not be thrown again this.errorEmitted = false; // count buffered requests this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always // one allocated and free to use, and we maintain at most two this.corkedRequestsFree = new CorkedRequest(this); } WritableState.prototype.getBuffer = function getBuffer() { var current = this.bufferedRequest; var out = []; while (current) { out.push(current); current = current.next; } return out; }; (function () { try { Object.defineProperty(WritableState.prototype, 'buffer', { get: internalUtil.deprecate(function () { return this.getBuffer(); }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') }); } catch (_) {} })(); // Test _writableState for inheritance to account for Duplex streams, // whose prototype chain only points to Readable. var realHasInstance; if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { realHasInstance = Function.prototype[Symbol.hasInstance]; Object.defineProperty(Writable, Symbol.hasInstance, { value: function value(object) { if (realHasInstance.call(this, object)) return true; if (this !== Writable) return false; return object && object._writableState instanceof WritableState; } }); } else { realHasInstance = function realHasInstance(object) { return object instanceof this; }; } function Writable(options) { Duplex = Duplex || __webpack_require__(7); // Writable ctor is applied to Duplexes, too. // `realHasInstance` is necessary because using plain `instanceof` // would return false, as no `_writableState` property is attached. // Trying to use the custom `instanceof` for Writable here will also break the // Node.js LazyTransform implementation, which has a non-trivial getter for // `_writableState` that would lead to infinite recursion. if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { return new Writable(options); } this._writableState = new WritableState(options, this); // legacy. this.writable = true; if (options) { if (typeof options.write === 'function') this._write = options.write; if (typeof options.writev === 'function') this._writev = options.writev; if (typeof options.destroy === 'function') this._destroy = options.destroy; if (typeof options.final === 'function') this._final = options.final; } Stream.call(this); } // Otherwise people can pipe Writable streams, which is just wrong. Writable.prototype.pipe = function () { this.emit('error', new Error('Cannot pipe, not readable')); }; function writeAfterEnd(stream, cb) { var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb stream.emit('error', er); pna.nextTick(cb, er); } // Checks that a user-supplied chunk is valid, especially for the particular // mode the stream is in. Currently this means that `null` is never accepted // and undefined/non-string values are only allowed in object mode. function validChunk(stream, state, chunk, cb) { var valid = true; var er = false; if (chunk === null) { er = new TypeError('May not write null values to stream'); } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { er = new TypeError('Invalid non-string/buffer chunk'); } if (er) { stream.emit('error', er); pna.nextTick(cb, er); valid = false; } return valid; } Writable.prototype.write = function (chunk, encoding, cb) { var state = this._writableState; var ret = false; var isBuf = !state.objectMode && _isUint8Array(chunk); if (isBuf && !Buffer.isBuffer(chunk)) { chunk = _uint8ArrayToBuffer(chunk); } if (typeof encoding === 'function') { cb = encoding; encoding = null; } if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; if (typeof cb !== 'function') cb = nop; if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { state.pendingcb++; ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); } return ret; }; Writable.prototype.cork = function () { var state = this._writableState; state.corked++; }; Writable.prototype.uncork = function () { var state = this._writableState; if (state.corked) { state.corked--; if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); } }; Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { // node::ParseEncoding() requires lower case. if (typeof encoding === 'string') encoding = encoding.toLowerCase(); if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); this._writableState.defaultEncoding = encoding; return this; }; function decodeChunk(state, chunk, encoding) { if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { chunk = Buffer.from(chunk, encoding); } return chunk; } Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get() { return this._writableState.highWaterMark; } }); // if we're already writing something, then just put this // in the queue, and wait our turn. Otherwise, call _write // If we return false, then we need a drain event, so set that flag. function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { if (!isBuf) { var newChunk = decodeChunk(state, chunk, encoding); if (chunk !== newChunk) { isBuf = true; encoding = 'buffer'; chunk = newChunk; } } var len = state.objectMode ? 1 : chunk.length; state.length += len; var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. if (!ret) state.needDrain = true; if (state.writing || state.corked) { var last = state.lastBufferedRequest; state.lastBufferedRequest = { chunk: chunk, encoding: encoding, isBuf: isBuf, callback: cb, next: null }; if (last) { last.next = state.lastBufferedRequest; } else { state.bufferedRequest = state.lastBufferedRequest; } state.bufferedRequestCount += 1; } else { doWrite(stream, state, false, len, chunk, encoding, cb); } return ret; } function doWrite(stream, state, writev, len, chunk, encoding, cb) { state.writelen = len; state.writecb = cb; state.writing = true; state.sync = true; if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); state.sync = false; } function onwriteError(stream, state, sync, er, cb) { --state.pendingcb; if (sync) { // defer the callback if we are being called synchronously // to avoid piling up things on the stack pna.nextTick(cb, er); // this can emit finish, and it will always happen // after error pna.nextTick(finishMaybe, stream, state); stream._writableState.errorEmitted = true; stream.emit('error', er); } else { // the caller expect this to happen before if // it is async cb(er); stream._writableState.errorEmitted = true; stream.emit('error', er); // this can emit finish, but finish must // always follow error finishMaybe(stream, state); } } function onwriteStateUpdate(state) { state.writing = false; state.writecb = null; state.length -= state.writelen; state.writelen = 0; } function onwrite(stream, er) { var state = stream._writableState; var sync = state.sync; var cb = state.writecb; onwriteStateUpdate(state); if (er) onwriteError(stream, state, sync, er, cb);else { // Check if we're actually ready to finish, but don't emit yet var finished = needFinish(state); if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { clearBuffer(stream, state); } if (sync) { /**/ asyncWrite(afterWrite, stream, state, finished, cb); /**/ } else { afterWrite(stream, state, finished, cb); } } } function afterWrite(stream, state, finished, cb) { if (!finished) onwriteDrain(stream, state); state.pendingcb--; cb(); finishMaybe(stream, state); } // Must force callback to be called on nextTick, so that we don't // emit 'drain' before the write() consumer gets the 'false' return // value, and has a chance to attach a 'drain' listener. function onwriteDrain(stream, state) { if (state.length === 0 && state.needDrain) { state.needDrain = false; stream.emit('drain'); } } // if there's something in the buffer waiting, then process it function clearBuffer(stream, state) { state.bufferProcessing = true; var entry = state.bufferedRequest; if (stream._writev && entry && entry.next) { // Fast case, write everything using _writev() var l = state.bufferedRequestCount; var buffer = new Array(l); var holder = state.corkedRequestsFree; holder.entry = entry; var count = 0; var allBuffers = true; while (entry) { buffer[count] = entry; if (!entry.isBuf) allBuffers = false; entry = entry.next; count += 1; } buffer.allBuffers = allBuffers; doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time // as the hot path ends with doWrite state.pendingcb++; state.lastBufferedRequest = null; if (holder.next) { state.corkedRequestsFree = holder.next; holder.next = null; } else { state.corkedRequestsFree = new CorkedRequest(state); } state.bufferedRequestCount = 0; } else { // Slow case, write chunks one-by-one while (entry) { var chunk = entry.chunk; var encoding = entry.encoding; var cb = entry.callback; var len = state.objectMode ? 1 : chunk.length; doWrite(stream, state, false, len, chunk, encoding, cb); entry = entry.next; state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then // it means that we need to wait until it does. // also, that means that the chunk and cb are currently // being processed, so move the buffer counter past them. if (state.writing) { break; } } if (entry === null) state.lastBufferedRequest = null; } state.bufferedRequest = entry; state.bufferProcessing = false; } Writable.prototype._write = function (chunk, encoding, cb) { cb(new Error('_write() is not implemented')); }; Writable.prototype._writev = null; Writable.prototype.end = function (chunk, encoding, cb) { var state = this._writableState; if (typeof chunk === 'function') { cb = chunk; chunk = null; encoding = null; } else if (typeof encoding === 'function') { cb = encoding; encoding = null; } if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks if (state.corked) { state.corked = 1; this.uncork(); } // ignore unnecessary end() calls. if (!state.ending && !state.finished) endWritable(this, state, cb); }; function needFinish(state) { return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; } function callFinal(stream, state) { stream._final(function (err) { state.pendingcb--; if (err) { stream.emit('error', err); } state.prefinished = true; stream.emit('prefinish'); finishMaybe(stream, state); }); } function prefinish(stream, state) { if (!state.prefinished && !state.finalCalled) { if (typeof stream._final === 'function') { state.pendingcb++; state.finalCalled = true; pna.nextTick(callFinal, stream, state); } else { state.prefinished = true; stream.emit('prefinish'); } } } function finishMaybe(stream, state) { var need = needFinish(state); if (need) { prefinish(stream, state); if (state.pendingcb === 0) { state.finished = true; stream.emit('finish'); } } return need; } function endWritable(stream, state, cb) { state.ending = true; finishMaybe(stream, state); if (cb) { if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); } state.ended = true; stream.writable = false; } function onCorkedFinish(corkReq, state, err) { var entry = corkReq.entry; corkReq.entry = null; while (entry) { var cb = entry.callback; state.pendingcb--; cb(err); entry = entry.next; } if (state.corkedRequestsFree) { state.corkedRequestsFree.next = corkReq; } else { state.corkedRequestsFree = corkReq; } } Object.defineProperty(Writable.prototype, 'destroyed', { get: function get() { if (this._writableState === undefined) { return false; } return this._writableState.destroyed; }, set: function set(value) { // we ignore the value if the stream // has not been initialized yet if (!this._writableState) { return; } // backward compatibility, the user is explicitly // managing destroyed this._writableState.destroyed = value; } }); Writable.prototype.destroy = destroyImpl.destroy; Writable.prototype._undestroy = destroyImpl.undestroy; Writable.prototype._destroy = function (err, cb) { this.end(); cb(err); }; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(16), __webpack_require__(64).setImmediate, __webpack_require__(5))) /***/ }), /* 29 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 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. /**/ var Buffer = __webpack_require__(67).Buffer; /**/ var isEncoding = Buffer.isEncoding || function (encoding) { encoding = '' + encoding; switch (encoding && encoding.toLowerCase()) { case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true; default: return false; } }; function _normalizeEncoding(enc) { if (!enc) return 'utf8'; var retried; while (true) { switch (enc) { case 'utf8': case 'utf-8': return 'utf8'; case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return 'utf16le'; case 'latin1': case 'binary': return 'latin1'; case 'base64': case 'ascii': case 'hex': return enc; default: if (retried) return; // undefined enc = ('' + enc).toLowerCase(); retried = true; } } } ; // Do not cache `Buffer.isEncoding` when checking encoding names as some // modules monkey-patch it to support additional encodings function normalizeEncoding(enc) { var nenc = _normalizeEncoding(enc); if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); return nenc || enc; } // StringDecoder provides an interface for efficiently splitting a series of // buffers into a series of JS strings without breaking apart multi-byte // characters. exports.StringDecoder = StringDecoder; function StringDecoder(encoding) { this.encoding = normalizeEncoding(encoding); var nb; switch (this.encoding) { case 'utf16le': this.text = utf16Text; this.end = utf16End; nb = 4; break; case 'utf8': this.fillLast = utf8FillLast; nb = 4; break; case 'base64': this.text = base64Text; this.end = base64End; nb = 3; break; default: this.write = simpleWrite; this.end = simpleEnd; return; } this.lastNeed = 0; this.lastTotal = 0; this.lastChar = Buffer.allocUnsafe(nb); } StringDecoder.prototype.write = function (buf) { if (buf.length === 0) return ''; var r; var i; if (this.lastNeed) { r = this.fillLast(buf); if (r === undefined) return ''; i = this.lastNeed; this.lastNeed = 0; } else { i = 0; } if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); return r || ''; }; StringDecoder.prototype.end = utf8End; // Returns only complete characters in a Buffer StringDecoder.prototype.text = utf8Text; // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer StringDecoder.prototype.fillLast = function (buf) { if (this.lastNeed <= buf.length) { buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); return this.lastChar.toString(this.encoding, 0, this.lastTotal); } buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); this.lastNeed -= buf.length; }; // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a // continuation byte. If an invalid byte is detected, -2 is returned. function utf8CheckByte(byte) { if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; return byte >> 6 === 0x02 ? -1 : -2; } // Checks at most 3 bytes at the end of a Buffer in order to detect an // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) // needed to complete the UTF-8 character (if applicable) are returned. function utf8CheckIncomplete(self, buf, i) { var j = buf.length - 1; if (j < i) return 0; var nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) self.lastNeed = nb - 1; return nb; } if (--j < i || nb === -2) return 0; nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) self.lastNeed = nb - 2; return nb; } if (--j < i || nb === -2) return 0; nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) { if (nb === 2) nb = 0;else self.lastNeed = nb - 3; } return nb; } return 0; } // Validates as many continuation bytes for a multi-byte UTF-8 character as // needed or are available. If we see a non-continuation byte where we expect // one, we "replace" the validated continuation bytes we've seen so far with // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding // behavior. The continuation byte check is included three times in the case // where all of the continuation bytes for a character exist in the same buffer. // It is also done this way as a slight performance increase instead of using a // loop. function utf8CheckExtraBytes(self, buf, p) { if ((buf[0] & 0xC0) !== 0x80) { self.lastNeed = 0; return "\uFFFD"; } if (self.lastNeed > 1 && buf.length > 1) { if ((buf[1] & 0xC0) !== 0x80) { self.lastNeed = 1; return "\uFFFD"; } if (self.lastNeed > 2 && buf.length > 2) { if ((buf[2] & 0xC0) !== 0x80) { self.lastNeed = 2; return "\uFFFD"; } } } } // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. function utf8FillLast(buf) { var p = this.lastTotal - this.lastNeed; var r = utf8CheckExtraBytes(this, buf, p); if (r !== undefined) return r; if (this.lastNeed <= buf.length) { buf.copy(this.lastChar, p, 0, this.lastNeed); return this.lastChar.toString(this.encoding, 0, this.lastTotal); } buf.copy(this.lastChar, p, 0, buf.length); this.lastNeed -= buf.length; } // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a // partial character, the character's bytes are buffered until the required // number of bytes are available. function utf8Text(buf, i) { var total = utf8CheckIncomplete(this, buf, i); if (!this.lastNeed) return buf.toString('utf8', i); this.lastTotal = total; var end = buf.length - (total - this.lastNeed); buf.copy(this.lastChar, 0, end); return buf.toString('utf8', i, end); } // For UTF-8, a replacement character is added when ending on a partial // character. function utf8End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) return r + "\uFFFD"; return r; } // UTF-16LE typically needs two bytes per character, but even if we have an even // number of bytes available, we need to check if we end on a leading/high // surrogate. In that case, we need to wait for the next two bytes in order to // decode the last character properly. function utf16Text(buf, i) { if ((buf.length - i) % 2 === 0) { var r = buf.toString('utf16le', i); if (r) { var c = r.charCodeAt(r.length - 1); if (c >= 0xD800 && c <= 0xDBFF) { this.lastNeed = 2; this.lastTotal = 4; this.lastChar[0] = buf[buf.length - 2]; this.lastChar[1] = buf[buf.length - 1]; return r.slice(0, -1); } } return r; } this.lastNeed = 1; this.lastTotal = 2; this.lastChar[0] = buf[buf.length - 1]; return buf.toString('utf16le', i, buf.length - 1); } // For UTF-16LE we do not explicitly append special replacement characters if we // end on a partial character, we simply let v8 handle that. function utf16End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) { var end = this.lastTotal - this.lastNeed; return r + this.lastChar.toString('utf16le', 0, end); } return r; } function base64Text(buf, i) { var n = (buf.length - i) % 3; if (n === 0) return buf.toString('base64', i); this.lastNeed = 3 - n; this.lastTotal = 3; if (n === 1) { this.lastChar[0] = buf[buf.length - 1]; } else { this.lastChar[0] = buf[buf.length - 2]; this.lastChar[1] = buf[buf.length - 1]; } return buf.toString('base64', i, buf.length - n); } function base64End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); return r; } // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) function simpleWrite(buf) { return buf.toString(this.encoding); } function simpleEnd(buf) { return buf && buf.length ? this.write(buf) : ''; } /***/ }), /* 30 */ /***/ (function(module, exports, __webpack_require__) { var isArray = __webpack_require__(31).isArray; module.exports = { copyOptions: function copyOptions(options) { var key, copy = {}; for (key in options) { if (options.hasOwnProperty(key)) { copy[key] = options[key]; } } return copy; }, ensureFlagExists: function ensureFlagExists(item, options) { if (!(item in options) || typeof options[item] !== 'boolean') { options[item] = false; } }, ensureSpacesExists: function ensureSpacesExists(options) { if (!('spaces' in options) || typeof options.spaces !== 'number' && typeof options.spaces !== 'string') { options.spaces = 0; } }, ensureAlwaysArrayExists: function ensureAlwaysArrayExists(options) { if (!('alwaysArray' in options) || typeof options.alwaysArray !== 'boolean' && !isArray(options.alwaysArray)) { options.alwaysArray = false; } }, ensureKeyExists: function ensureKeyExists(key, options) { if (!(key + 'Key' in options) || typeof options[key + 'Key'] !== 'string') { options[key + 'Key'] = options.compact ? '_' + key : key; } }, checkFnExists: function checkFnExists(key, options) { return key + 'Fn' in options; } }; /***/ }), /* 31 */ /***/ (function(module, exports) { module.exports = { isArray: function isArray(value) { if (Array.isArray) { return Array.isArray(value); } // fallback for older browsers like IE 8 return Object.prototype.toString.call(value) === '[object Array]'; } }; /***/ }), /* 32 */ /***/ (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 get() { return module.l; } }); Object.defineProperty(module, "id", { enumerable: true, get: function get() { return module.i; } }); module.webpackPolyfill = 1; } return module; }; /***/ }), /* 33 */ /***/ (function(module, exports, __webpack_require__) { var sax = __webpack_require__(57); var expat /*= require('node-expat');*/ = { on: function on() {}, parse: function parse() {} }; var helper = __webpack_require__(30); var isArray = __webpack_require__(31).isArray; var options; var pureJsParser = true; var currentElement; function validateOptions(userOptions) { options = helper.copyOptions(userOptions); helper.ensureFlagExists('ignoreDeclaration', options); helper.ensureFlagExists('ignoreInstruction', options); helper.ensureFlagExists('ignoreAttributes', options); helper.ensureFlagExists('ignoreText', options); helper.ensureFlagExists('ignoreComment', options); helper.ensureFlagExists('ignoreCdata', options); helper.ensureFlagExists('ignoreDoctype', options); helper.ensureFlagExists('compact', options); helper.ensureFlagExists('alwaysChildren', options); helper.ensureFlagExists('addParent', options); helper.ensureFlagExists('trim', options); helper.ensureFlagExists('nativeType', options); helper.ensureFlagExists('nativeTypeAttributes', options); helper.ensureFlagExists('sanitize', options); helper.ensureFlagExists('instructionHasAttributes', options); helper.ensureFlagExists('captureSpacesBetweenElements', options); helper.ensureAlwaysArrayExists(options); helper.ensureKeyExists('declaration', options); helper.ensureKeyExists('instruction', options); helper.ensureKeyExists('attributes', options); helper.ensureKeyExists('text', options); helper.ensureKeyExists('comment', options); helper.ensureKeyExists('cdata', options); helper.ensureKeyExists('doctype', options); helper.ensureKeyExists('type', options); helper.ensureKeyExists('name', options); helper.ensureKeyExists('elements', options); helper.ensureKeyExists('parent', options); helper.checkFnExists('doctype', options); helper.checkFnExists('instruction', options); helper.checkFnExists('cdata', options); helper.checkFnExists('comment', options); helper.checkFnExists('text', options); helper.checkFnExists('instructionName', options); helper.checkFnExists('elementName', options); helper.checkFnExists('attributeName', options); helper.checkFnExists('attributeValue', options); helper.checkFnExists('attributes', options); return options; } function nativeType(value) { var nValue = Number(value); if (!isNaN(nValue)) { return nValue; } var bValue = value.toLowerCase(); if (bValue === 'true') { return true; } else if (bValue === 'false') { return false; } return value; } function addField(type, value) { var key; if (options.compact) { if (!currentElement[options[type + 'Key']] && (isArray(options.alwaysArray) ? options.alwaysArray.indexOf(options[type + 'Key']) !== -1 : options.alwaysArray)) { currentElement[options[type + 'Key']] = []; } if (currentElement[options[type + 'Key']] && !isArray(currentElement[options[type + 'Key']])) { currentElement[options[type + 'Key']] = [currentElement[options[type + 'Key']]]; } if (type + 'Fn' in options && typeof value === 'string') { value = options[type + 'Fn'](value, currentElement); } if (type === 'instruction' && ('instructionFn' in options || 'instructionNameFn' in options)) { for (key in value) { if (value.hasOwnProperty(key)) { if ('instructionFn' in options) { value[key] = options.instructionFn(value[key], key, currentElement); } else { var temp = value[key]; delete value[key]; value[options.instructionNameFn(key, temp, currentElement)] = temp; } } } } if (isArray(currentElement[options[type + 'Key']])) { currentElement[options[type + 'Key']].push(value); } else { currentElement[options[type + 'Key']] = value; } } else { if (!currentElement[options.elementsKey]) { currentElement[options.elementsKey] = []; } var element = {}; element[options.typeKey] = type; if (type === 'instruction') { for (key in value) { if (value.hasOwnProperty(key)) { break; } } element[options.nameKey] = 'instructionNameFn' in options ? options.instructionNameFn(key, value, currentElement) : key; if (options.instructionHasAttributes) { element[options.attributesKey] = value[key][options.attributesKey]; if ('instructionFn' in options) { element[options.attributesKey] = options.instructionFn(element[options.attributesKey], key, currentElement); } } else { if ('instructionFn' in options) { value[key] = options.instructionFn(value[key], key, currentElement); } element[options.instructionKey] = value[key]; } } else { if (type + 'Fn' in options) { value = options[type + 'Fn'](value, currentElement); } element[options[type + 'Key']] = value; } if (options.addParent) { element[options.parentKey] = currentElement; } currentElement[options.elementsKey].push(element); } } function manipulateAttributes(attributes) { if ('attributesFn' in options && attributes) { attributes = options.attributesFn(attributes, currentElement); } if ((options.trim || 'attributeValueFn' in options || 'attributeNameFn' in options || options.nativeTypeAttributes) && attributes) { var key; for (key in attributes) { if (attributes.hasOwnProperty(key)) { if (options.trim) attributes[key] = attributes[key].trim(); if (options.nativeTypeAttributes) { attributes[key] = nativeType(attributes[key]); } if ('attributeValueFn' in options) attributes[key] = options.attributeValueFn(attributes[key], key, currentElement); if ('attributeNameFn' in options) { var temp = attributes[key]; delete attributes[key]; attributes[options.attributeNameFn(key, attributes[key], currentElement)] = temp; } } } } return attributes; } function onInstruction(instruction) { var attributes = {}; if (instruction.body && (instruction.name.toLowerCase() === 'xml' || options.instructionHasAttributes)) { var attrsRegExp = /([\w:-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|(\w+))\s*/g; var match; while ((match = attrsRegExp.exec(instruction.body)) !== null) { attributes[match[1]] = match[2] || match[3] || match[4]; } attributes = manipulateAttributes(attributes); } if (instruction.name.toLowerCase() === 'xml') { if (options.ignoreDeclaration) { return; } currentElement[options.declarationKey] = {}; if (Object.keys(attributes).length) { currentElement[options.declarationKey][options.attributesKey] = attributes; } if (options.addParent) { currentElement[options.declarationKey][options.parentKey] = currentElement; } } else { if (options.ignoreInstruction) { return; } if (options.trim) { instruction.body = instruction.body.trim(); } var value = {}; if (options.instructionHasAttributes && Object.keys(attributes).length) { value[instruction.name] = {}; value[instruction.name][options.attributesKey] = attributes; } else { value[instruction.name] = instruction.body; } addField('instruction', value); } } function onStartElement(name, attributes) { var element; if (typeof name === 'object') { attributes = name.attributes; name = name.name; } attributes = manipulateAttributes(attributes); if ('elementNameFn' in options) { name = options.elementNameFn(name, currentElement); } if (options.compact) { element = {}; if (!options.ignoreAttributes && attributes && Object.keys(attributes).length) { element[options.attributesKey] = {}; var key; for (key in attributes) { if (attributes.hasOwnProperty(key)) { element[options.attributesKey][key] = attributes[key]; } } } if (!(name in currentElement) && (isArray(options.alwaysArray) ? options.alwaysArray.indexOf(name) !== -1 : options.alwaysArray)) { currentElement[name] = []; } if (currentElement[name] && !isArray(currentElement[name])) { currentElement[name] = [currentElement[name]]; } if (isArray(currentElement[name])) { currentElement[name].push(element); } else { currentElement[name] = element; } } else { if (!currentElement[options.elementsKey]) { currentElement[options.elementsKey] = []; } element = {}; element[options.typeKey] = 'element'; element[options.nameKey] = name; if (!options.ignoreAttributes && attributes && Object.keys(attributes).length) { element[options.attributesKey] = attributes; } if (options.alwaysChildren) { element[options.elementsKey] = []; } currentElement[options.elementsKey].push(element); } element[options.parentKey] = currentElement; // will be deleted in onEndElement() if !options.addParent currentElement = element; } function onText(text) { if (options.ignoreText) { return; } if (!text.trim() && !options.captureSpacesBetweenElements) { return; } if (options.trim) { text = text.trim(); } if (options.nativeType) { text = nativeType(text); } if (options.sanitize) { text = text.replace(/&/g, '&').replace(//g, '>'); } addField('text', text); } function onComment(comment) { if (options.ignoreComment) { return; } if (options.trim) { comment = comment.trim(); } addField('comment', comment); } function onEndElement(name) { var parentElement = currentElement[options.parentKey]; if (!options.addParent) { delete currentElement[options.parentKey]; } currentElement = parentElement; } function onCdata(cdata) { if (options.ignoreCdata) { return; } if (options.trim) { cdata = cdata.trim(); } addField('cdata', cdata); } function onDoctype(doctype) { if (options.ignoreDoctype) { return; } doctype = doctype.replace(/^ /, ''); if (options.trim) { doctype = doctype.trim(); } addField('doctype', doctype); } function onError(error) { error.note = error; //console.error(error); } module.exports = function (xml, userOptions) { var parser = pureJsParser ? sax.parser(true, {}) : parser = new expat.Parser('UTF-8'); var result = {}; currentElement = result; options = validateOptions(userOptions); if (pureJsParser) { parser.opt = { strictEntities: true }; parser.onopentag = onStartElement; parser.ontext = onText; parser.oncomment = onComment; parser.onclosetag = onEndElement; parser.onerror = onError; parser.oncdata = onCdata; parser.ondoctype = onDoctype; parser.onprocessinginstruction = onInstruction; } else { parser.on('startElement', onStartElement); parser.on('text', onText); parser.on('comment', onComment); parser.on('endElement', onEndElement); parser.on('error', onError); //parser.on('startCdata', onStartCdata); //parser.on('endCdata', onEndCdata); //parser.on('entityDecl', onEntityDecl); } if (pureJsParser) { parser.write(xml).close(); } else { if (!parser.parse(xml)) { throw new Error('XML parsing error: ' + parser.getError()); } } if (result[options.elementsKey]) { var temp = result[options.elementsKey]; delete result[options.elementsKey]; result[options.elementsKey] = temp; delete result.text; } return result; }; /***/ }), /* 34 */ /***/ (function(module, exports) { var toString = {}.toString; module.exports = Array.isArray || function (arr) { return toString.call(arr) == '[object Array]'; }; /***/ }), /* 35 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(global, 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. /**/ var pna = __webpack_require__(17); /**/ module.exports = Readable; /**/ var isArray = __webpack_require__(34); /**/ /**/ var Duplex; /**/ Readable.ReadableState = ReadableState; /**/ var EE = __webpack_require__(8).EventEmitter; var EElistenerCount = function EElistenerCount(emitter, type) { return emitter.listeners(type).length; }; /**/ /**/ var Stream = __webpack_require__(36); /**/ /**/ var Buffer = __webpack_require__(27).Buffer; var OurUint8Array = global.Uint8Array || function () {}; function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } function _isUint8Array(obj) { return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } /**/ /**/ var util = __webpack_require__(15); util.inherits = __webpack_require__(11); /**/ /**/ var debugUtil = __webpack_require__(61); var debug = void 0; if (debugUtil && debugUtil.debuglog) { debug = debugUtil.debuglog('stream'); } else { debug = function debug() {}; } /**/ var BufferList = __webpack_require__(62); var destroyImpl = __webpack_require__(37); var StringDecoder; util.inherits(Readable, Stream); var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; function prependListener(emitter, event, fn) { // Sadly this is not cacheable as some libraries bundle their own // event emitter implementation with them. if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any // userland ones. NEVER DO THIS. This is here only because this code needs // to continue to work with older versions of Node.js that do not include // the prependListener() method. The goal is to eventually remove this hack. if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; } function ReadableState(options, stream) { Duplex = Duplex || __webpack_require__(7); options = options || {}; // Duplex streams are both readable and writable, but share // the same options object. // However, some cases require setting options to different // values for the readable and the writable sides of the duplex stream. // These options can be provided separately as readableXXX and writableXXX. var isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to // make all the buffer merging and length checks go away this.objectMode = !!options.objectMode; if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer // Note: 0 is a valid value, means "don't call _read preemptively ever" var hwm = options.highWaterMark; var readableHwm = options.readableHighWaterMark; var defaultHwm = this.objectMode ? 16 : 16 * 1024; if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; // cast to ints. this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the // linked list can remove elements from the beginning faster than // array.shift() this.buffer = new BufferList(); this.length = 0; this.pipes = null; this.pipesCount = 0; this.flowing = null; this.ended = false; this.endEmitted = false; this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted // immediately, or on a later tick. We set this to true at first, because // any actions that shouldn't happen until "later" should generally also // not happen before the first read call. this.sync = true; // whenever we return null, then we set a flag to say // that we're awaiting a 'readable' event emission. this.needReadable = false; this.emittedReadable = false; this.readableListening = false; this.resumeScheduled = false; // has it been destroyed this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled this.readingMore = false; this.decoder = null; this.encoding = null; if (options.encoding) { if (!StringDecoder) StringDecoder = __webpack_require__(29).StringDecoder; this.decoder = new StringDecoder(options.encoding); this.encoding = options.encoding; } } function Readable(options) { Duplex = Duplex || __webpack_require__(7); if (!(this instanceof Readable)) return new Readable(options); this._readableState = new ReadableState(options, this); // legacy this.readable = true; if (options) { if (typeof options.read === 'function') this._read = options.read; if (typeof options.destroy === 'function') this._destroy = options.destroy; } Stream.call(this); } Object.defineProperty(Readable.prototype, 'destroyed', { get: function get() { if (this._readableState === undefined) { return false; } return this._readableState.destroyed; }, set: function set(value) { // we ignore the value if the stream // has not been initialized yet if (!this._readableState) { return; } // backward compatibility, the user is explicitly // managing destroyed this._readableState.destroyed = value; } }); Readable.prototype.destroy = destroyImpl.destroy; Readable.prototype._undestroy = destroyImpl.undestroy; Readable.prototype._destroy = function (err, cb) { this.push(null); cb(err); }; // Manually shove something into the read() buffer. // This returns true if the highWaterMark has not been hit yet, // similar to how Writable.write() returns true if you should // write() some more. Readable.prototype.push = function (chunk, encoding) { var state = this._readableState; var skipChunkCheck; if (!state.objectMode) { if (typeof chunk === 'string') { encoding = encoding || state.defaultEncoding; if (encoding !== state.encoding) { chunk = Buffer.from(chunk, encoding); encoding = ''; } skipChunkCheck = true; } } else { skipChunkCheck = true; } return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); }; // Unshift should *always* be something directly out of read() Readable.prototype.unshift = function (chunk) { return readableAddChunk(this, chunk, null, true, false); }; function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { var state = stream._readableState; if (chunk === null) { state.reading = false; onEofChunk(stream, state); } else { var er; if (!skipChunkCheck) er = chunkInvalid(state, chunk); if (er) { stream.emit('error', er); } else if (state.objectMode || chunk && chunk.length > 0) { if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { chunk = _uint8ArrayToBuffer(chunk); } if (addToFront) { if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); } else if (state.ended) { stream.emit('error', new Error('stream.push() after EOF')); } else { state.reading = false; if (state.decoder && !encoding) { chunk = state.decoder.write(chunk); if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); } else { addChunk(stream, state, chunk, false); } } } else if (!addToFront) { state.reading = false; } } return needMoreData(state); } function addChunk(stream, state, chunk, addToFront) { if (state.flowing && state.length === 0 && !state.sync) { stream.emit('data', chunk); stream.read(0); } else { // update the buffer info. state.length += state.objectMode ? 1 : chunk.length; if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); if (state.needReadable) emitReadable(stream); } maybeReadMore(stream, state); } function chunkInvalid(state, chunk) { var er; if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { er = new TypeError('Invalid non-string/buffer chunk'); } return er; } // if it's past the high water mark, we can push in some more. // Also, if we have no data yet, we can stand some // more bytes. This is to work around cases where hwm=0, // such as the repl. Also, if the push() triggered a // readable event, and the user called read(largeNumber) such that // needReadable was set, then we ought to push more, so that another // 'readable' event will be triggered. function needMoreData(state) { return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); } Readable.prototype.isPaused = function () { return this._readableState.flowing === false; }; // backwards compatibility. Readable.prototype.setEncoding = function (enc) { if (!StringDecoder) StringDecoder = __webpack_require__(29).StringDecoder; this._readableState.decoder = new StringDecoder(enc); this._readableState.encoding = enc; return this; }; // Don't raise the hwm > 8MB var MAX_HWM = 0x800000; function computeNewHighWaterMark(n) { if (n >= MAX_HWM) { n = MAX_HWM; } else { // Get the next highest power of 2 to prevent increasing hwm excessively in // tiny amounts n--; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; n++; } return n; } // This function is designed to be inlinable, so please take care when making // changes to the function body. function howMuchToRead(n, state) { if (n <= 0 || state.length === 0 && state.ended) return 0; if (state.objectMode) return 1; if (n !== n) { // Only flow one buffer at a time if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; } // If we're asking for more than the current hwm, then raise the hwm. if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); if (n <= state.length) return n; // Don't have enough if (!state.ended) { state.needReadable = true; return 0; } return state.length; } // you can override either this method, or the async _read(n) below. Readable.prototype.read = function (n) { debug('read', n); n = parseInt(n, 10); var state = this._readableState; var nOrig = n; if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we // already have a bunch of data in the buffer, then just trigger // the 'readable' event and move on. if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { debug('read: emitReadable', state.length, state.ended); if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); return null; } n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. if (n === 0 && state.ended) { if (state.length === 0) endReadable(this); return null; } // All the actual chunk generation logic needs to be // *below* the call to _read. The reason is that in certain // synthetic stream cases, such as passthrough streams, _read // may be a completely synchronous operation which may change // the state of the read buffer, providing enough data when // before there was *not* enough. // // So, the steps are: // 1. Figure out what the state of things will be after we do // a read from the buffer. // // 2. If that resulting state will trigger a _read, then call _read. // Note that this may be asynchronous, or synchronous. Yes, it is // deeply ugly to write APIs this way, but that still doesn't mean // that the Readable class should behave improperly, as streams are // designed to be sync/async agnostic. // Take note if the _read call is sync or async (ie, if the read call // has returned yet), so that we know whether or not it's safe to emit // 'readable' etc. // // 3. Actually pull the requested chunks out of the buffer and return. // if we need a readable event, then we need to do some reading. var doRead = state.needReadable; debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some if (state.length === 0 || state.length - n < state.highWaterMark) { doRead = true; debug('length less than watermark', doRead); } // however, if we've ended, then there's no point, and if we're already // reading, then it's unnecessary. if (state.ended || state.reading) { doRead = false; debug('reading or ended', doRead); } else if (doRead) { debug('do read'); state.reading = true; state.sync = true; // if the length is currently zero, then we *need* a readable event. if (state.length === 0) state.needReadable = true; // call internal read method this._read(state.highWaterMark); state.sync = false; // If _read pushed data synchronously, then `reading` will be false, // and we need to re-evaluate how much data we can return to the user. if (!state.reading) n = howMuchToRead(nOrig, state); } var ret; if (n > 0) ret = fromList(n, state);else ret = null; if (ret === null) { state.needReadable = true; n = 0; } else { state.length -= n; } if (state.length === 0) { // If we have nothing in the buffer, then we want to know // as soon as we *do* get something into the buffer. if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. if (nOrig !== n && state.ended) endReadable(this); } if (ret !== null) this.emit('data', ret); return ret; }; function onEofChunk(stream, state) { if (state.ended) return; if (state.decoder) { var chunk = state.decoder.end(); if (chunk && chunk.length) { state.buffer.push(chunk); state.length += state.objectMode ? 1 : chunk.length; } } state.ended = true; // emit 'readable' now to make sure it gets picked up. emitReadable(stream); } // Don't emit readable right away in sync mode, because this can trigger // another read() call => stack overflow. This way, it might trigger // a nextTick recursion warning, but that's not so bad. function emitReadable(stream) { var state = stream._readableState; state.needReadable = false; if (!state.emittedReadable) { debug('emitReadable', state.flowing); state.emittedReadable = true; if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); } } function emitReadable_(stream) { debug('emit readable'); stream.emit('readable'); flow(stream); } // at this point, the user has presumably seen the 'readable' event, // and called read() to consume some data. that may have triggered // in turn another _read(n) call, in which case reading = true if // it's in progress. // However, if we're not ended, or reading, and the length < hwm, // then go ahead and try to read some more preemptively. function maybeReadMore(stream, state) { if (!state.readingMore) { state.readingMore = true; pna.nextTick(maybeReadMore_, stream, state); } } function maybeReadMore_(stream, state) { var len = state.length; while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { debug('maybeReadMore read 0'); stream.read(0); if (len === state.length) // didn't get any data, stop spinning. break;else len = state.length; } state.readingMore = false; } // abstract method. to be overridden in specific implementation classes. // call cb(er, data) where data is <= n in length. // for virtual (non-string, non-buffer) streams, "length" is somewhat // arbitrary, and perhaps not very meaningful. Readable.prototype._read = function (n) { this.emit('error', new Error('_read() is not implemented')); }; Readable.prototype.pipe = function (dest, pipeOpts) { var src = this; var state = this._readableState; switch (state.pipesCount) { case 0: state.pipes = dest; break; case 1: state.pipes = [state.pipes, dest]; break; default: state.pipes.push(dest); break; } state.pipesCount += 1; debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; var endFn = doEnd ? onend : unpipe; if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); dest.on('unpipe', onunpipe); function onunpipe(readable, unpipeInfo) { debug('onunpipe'); if (readable === src) { if (unpipeInfo && unpipeInfo.hasUnpiped === false) { unpipeInfo.hasUnpiped = true; cleanup(); } } } function onend() { debug('onend'); dest.end(); } // when the dest drains, it reduces the awaitDrain counter // on the source. This would be more elegant with a .once() // handler in flow(), but adding and removing repeatedly is // too slow. var ondrain = pipeOnDrain(src); dest.on('drain', ondrain); var cleanedUp = false; function cleanup() { debug('cleanup'); // cleanup event handlers once the pipe is broken dest.removeListener('close', onclose); dest.removeListener('finish', onfinish); dest.removeListener('drain', ondrain); dest.removeListener('error', onerror); dest.removeListener('unpipe', onunpipe); src.removeListener('end', onend); src.removeListener('end', unpipe); src.removeListener('data', ondata); cleanedUp = true; // if the reader is waiting for a drain event from this // specific writer, then it would cause it to never start // flowing again. // So, if this is awaiting a drain, then we just call it now. // If we don't know, then assume that we are waiting for one. if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); } // If the user pushes more data while we're writing to dest then we'll end up // in ondata again. However, we only want to increase awaitDrain once because // dest will only emit one 'drain' event for the multiple writes. // => Introduce a guard on increasing awaitDrain. var increasedAwaitDrain = false; src.on('data', ondata); function ondata(chunk) { debug('ondata'); increasedAwaitDrain = false; var ret = dest.write(chunk); if (false === ret && !increasedAwaitDrain) { // If the user unpiped during `dest.write()`, it is possible // to get stuck in a permanently paused state if that write // also returned false. // => Check whether `dest` is still a piping destination. if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { debug('false write response, pause', src._readableState.awaitDrain); src._readableState.awaitDrain++; increasedAwaitDrain = true; } src.pause(); } } // if the dest has an error, then stop piping into it. // however, don't suppress the throwing behavior for this. function onerror(er) { debug('onerror', er); unpipe(); dest.removeListener('error', onerror); if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); } // Make sure our error handler is attached before userland ones. prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. function onclose() { dest.removeListener('finish', onfinish); unpipe(); } dest.once('close', onclose); function onfinish() { debug('onfinish'); dest.removeListener('close', onclose); unpipe(); } dest.once('finish', onfinish); function unpipe() { debug('unpipe'); src.unpipe(dest); } // tell the dest that it's being piped to dest.emit('pipe', src); // start the flow if it hasn't been started already. if (!state.flowing) { debug('pipe resume'); src.resume(); } return dest; }; function pipeOnDrain(src) { return function () { var state = src._readableState; debug('pipeOnDrain', state.awaitDrain); if (state.awaitDrain) state.awaitDrain--; if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { state.flowing = true; flow(src); } }; } Readable.prototype.unpipe = function (dest) { var state = this._readableState; var unpipeInfo = { hasUnpiped: false }; // if we're not piping anywhere, then do nothing. if (state.pipesCount === 0) return this; // just one destination. most common case. if (state.pipesCount === 1) { // passed in one, but it's not the right one. if (dest && dest !== state.pipes) return this; if (!dest) dest = state.pipes; // got a match. state.pipes = null; state.pipesCount = 0; state.flowing = false; if (dest) dest.emit('unpipe', this, unpipeInfo); return this; } // slow case. multiple pipe destinations. if (!dest) { // remove all. var dests = state.pipes; var len = state.pipesCount; state.pipes = null; state.pipesCount = 0; state.flowing = false; for (var i = 0; i < len; i++) { dests[i].emit('unpipe', this, unpipeInfo); } return this; } // try to find the right one. var index = indexOf(state.pipes, dest); if (index === -1) return this; state.pipes.splice(index, 1); state.pipesCount -= 1; if (state.pipesCount === 1) state.pipes = state.pipes[0]; dest.emit('unpipe', this, unpipeInfo); return this; }; // set up data events if they are asked for // Ensure readable listeners eventually get something Readable.prototype.on = function (ev, fn) { var res = Stream.prototype.on.call(this, ev, fn); if (ev === 'data') { // Start flowing on next tick if stream isn't explicitly paused if (this._readableState.flowing !== false) this.resume(); } else if (ev === 'readable') { var state = this._readableState; if (!state.endEmitted && !state.readableListening) { state.readableListening = state.needReadable = true; state.emittedReadable = false; if (!state.reading) { pna.nextTick(nReadingNextTick, this); } else if (state.length) { emitReadable(this); } } } return res; }; Readable.prototype.addListener = Readable.prototype.on; function nReadingNextTick(self) { debug('readable nexttick read 0'); self.read(0); } // pause() and resume() are remnants of the legacy readable stream API // If the user uses them, then switch into old mode. Readable.prototype.resume = function () { var state = this._readableState; if (!state.flowing) { debug('resume'); state.flowing = true; resume(this, state); } return this; }; function resume(stream, state) { if (!state.resumeScheduled) { state.resumeScheduled = true; pna.nextTick(resume_, stream, state); } } function resume_(stream, state) { if (!state.reading) { debug('resume read 0'); stream.read(0); } state.resumeScheduled = false; state.awaitDrain = 0; stream.emit('resume'); flow(stream); if (state.flowing && !state.reading) stream.read(0); } Readable.prototype.pause = function () { debug('call pause flowing=%j', this._readableState.flowing); if (false !== this._readableState.flowing) { debug('pause'); this._readableState.flowing = false; this.emit('pause'); } return this; }; function flow(stream) { var state = stream._readableState; debug('flow', state.flowing); while (state.flowing && stream.read() !== null) {} } // wrap an old-style stream as the async data source. // This is *not* part of the readable stream interface. // It is an ugly unfortunate mess of history. Readable.prototype.wrap = function (stream) { var _this = this; var state = this._readableState; var paused = false; stream.on('end', function () { debug('wrapped end'); if (state.decoder && !state.ended) { var chunk = state.decoder.end(); if (chunk && chunk.length) _this.push(chunk); } _this.push(null); }); stream.on('data', function (chunk) { debug('wrapped data'); if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; var ret = _this.push(chunk); if (!ret) { paused = true; stream.pause(); } }); // proxy all the other methods. // important when wrapping filters and duplexes. for (var i in stream) { if (this[i] === undefined && typeof stream[i] === 'function') { this[i] = function (method) { return function () { return stream[method].apply(stream, arguments); }; }(i); } } // proxy certain important events. for (var n = 0; n < kProxyEvents.length; n++) { stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); } // when we try to consume some more bytes, simply unpause the // underlying stream. this._read = function (n) { debug('wrapped _read', n); if (paused) { paused = false; stream.resume(); } }; return this; }; Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function get() { return this._readableState.highWaterMark; } }); // exposed for testing purposes only. Readable._fromList = fromList; // Pluck off n bytes from an array of buffers. // Length is the combined lengths of all the buffers in the list. // This function is designed to be inlinable, so please take care when making // changes to the function body. function fromList(n, state) { // nothing buffered if (state.length === 0) return null; var ret; if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { // read it all, truncate the list if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); state.buffer.clear(); } else { // read part of list ret = fromListPartial(n, state.buffer, state.decoder); } return ret; } // Extracts only enough buffered data to satisfy the amount requested. // This function is designed to be inlinable, so please take care when making // changes to the function body. function fromListPartial(n, list, hasStrings) { var ret; if (n < list.head.data.length) { // slice is the same for buffers and strings ret = list.head.data.slice(0, n); list.head.data = list.head.data.slice(n); } else if (n === list.head.data.length) { // first chunk is a perfect match ret = list.shift(); } else { // result spans more than one buffer ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); } return ret; } // Copies a specified amount of characters from the list of buffered data // chunks. // This function is designed to be inlinable, so please take care when making // changes to the function body. function copyFromBufferString(n, list) { var p = list.head; var c = 1; var ret = p.data; n -= ret.length; while (p = p.next) { var str = p.data; var nb = n > str.length ? str.length : n; if (nb === str.length) ret += str;else ret += str.slice(0, n); n -= nb; if (n === 0) { if (nb === str.length) { ++c; if (p.next) list.head = p.next;else list.head = list.tail = null; } else { list.head = p; p.data = str.slice(nb); } break; } ++c; } list.length -= c; return ret; } // Copies a specified amount of bytes from the list of buffered data chunks. // This function is designed to be inlinable, so please take care when making // changes to the function body. function copyFromBuffer(n, list) { var ret = Buffer.allocUnsafe(n); var p = list.head; var c = 1; p.data.copy(ret); n -= p.data.length; while (p = p.next) { var buf = p.data; var nb = n > buf.length ? buf.length : n; buf.copy(ret, ret.length - n, 0, nb); n -= nb; if (n === 0) { if (nb === buf.length) { ++c; if (p.next) list.head = p.next;else list.head = list.tail = null; } else { list.head = p; p.data = buf.slice(nb); } break; } ++c; } list.length -= c; return ret; } function endReadable(stream) { var state = stream._readableState; // If we get here before consuming all the bytes, then that is a // bug in node. Should never happen. if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); if (!state.endEmitted) { state.ended = true; pna.nextTick(endReadableNT, state, stream); } } function endReadableNT(state, stream) { // Check that we didn't get one last unshift. if (!state.endEmitted && state.length === 0) { state.endEmitted = true; stream.readable = false; stream.emit('end'); } } function indexOf(xs, x) { for (var i = 0, l = xs.length; i < l; i++) { if (xs[i] === x) return i; } return -1; } /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5), __webpack_require__(16))) /***/ }), /* 36 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(8).EventEmitter; /***/ }), /* 37 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /**/ var pna = __webpack_require__(17); /**/ // undocumented cb() API, needed for core, not for public API function destroy(err, cb) { var _this = this; var readableDestroyed = this._readableState && this._readableState.destroyed; var writableDestroyed = this._writableState && this._writableState.destroyed; if (readableDestroyed || writableDestroyed) { if (cb) { cb(err); } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { pna.nextTick(emitErrorNT, this, err); } return this; } // we set destroyed to true before firing error callbacks in order // to make it re-entrance safe in case destroy() is called within callbacks if (this._readableState) { this._readableState.destroyed = true; } // if this is a duplex stream mark the writable part as destroyed as well if (this._writableState) { this._writableState.destroyed = true; } this._destroy(err || null, function (err) { if (!cb && err) { pna.nextTick(emitErrorNT, _this, err); if (_this._writableState) { _this._writableState.errorEmitted = true; } } else if (cb) { cb(err); } }); return this; } function undestroy() { if (this._readableState) { this._readableState.destroyed = false; this._readableState.reading = false; this._readableState.ended = false; this._readableState.endEmitted = false; } if (this._writableState) { this._writableState.destroyed = false; this._writableState.ended = false; this._writableState.ending = false; this._writableState.finished = false; this._writableState.errorEmitted = false; } } function emitErrorNT(self, err) { self.emit('error', err); } module.exports = { destroy: destroy, undestroy: undestroy }; /***/ }), /* 38 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; // 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. // a transform stream is a readable/writable stream where you do // something with the data. Sometimes it's called a "filter", // but that's not a great name for it, since that implies a thing where // some bits pass through, and others are simply ignored. (That would // be a valid example of a transform, of course.) // // While the output is causally related to the input, it's not a // necessarily symmetric or synchronous transformation. For example, // a zlib stream might take multiple plain-text writes(), and then // emit a single compressed chunk some time in the future. // // Here's how this works: // // The Transform stream has all the aspects of the readable and writable // stream classes. When you write(chunk), that calls _write(chunk,cb) // internally, and returns false if there's a lot of pending writes // buffered up. When you call read(), that calls _read(n) until // there's enough pending readable data buffered up. // // In a transform stream, the written data is placed in a buffer. When // _read(n) is called, it transforms the queued up data, calling the // buffered _write cb's as it consumes chunks. If consuming a single // written chunk would result in multiple output chunks, then the first // outputted bit calls the readcb, and subsequent chunks just go into // the read buffer, and will cause it to emit 'readable' if necessary. // // This way, back-pressure is actually determined by the reading side, // since _read has to be called to start processing a new chunk. However, // a pathological inflate type of transform can cause excessive buffering // here. For example, imagine a stream where every byte of input is // interpreted as an integer from 0-255, and then results in that many // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in // 1kb of data being output. In this case, you could write a very small // amount of input, and end up with a very large amount of output. In // such a pathological inflating mechanism, there'd be no way to tell // the system to stop doing the transform. A single 4MB write could // cause the system to run out of memory. // // However, even in such a pathological case, only a single written chunk // would be consumed, and then the rest would wait (un-transformed) until // the results of the previous transformed chunk were consumed. module.exports = Transform; var Duplex = __webpack_require__(7); /**/ var util = __webpack_require__(15); util.inherits = __webpack_require__(11); /**/ util.inherits(Transform, Duplex); function afterTransform(er, data) { var ts = this._transformState; ts.transforming = false; var cb = ts.writecb; if (!cb) { return this.emit('error', new Error('write callback called multiple times')); } ts.writechunk = null; ts.writecb = null; if (data != null) // single equals check for both `null` and `undefined` this.push(data); cb(er); var rs = this._readableState; rs.reading = false; if (rs.needReadable || rs.length < rs.highWaterMark) { this._read(rs.highWaterMark); } } function Transform(options) { if (!(this instanceof Transform)) return new Transform(options); Duplex.call(this, options); this._transformState = { afterTransform: afterTransform.bind(this), needTransform: false, transforming: false, writecb: null, writechunk: null, writeencoding: null }; // start out asking for a readable event once data is transformed. this._readableState.needReadable = true; // we have implemented the _read method, and done the other things // that Readable wants before the first _read call, so unset the // sync guard flag. this._readableState.sync = false; if (options) { if (typeof options.transform === 'function') this._transform = options.transform; if (typeof options.flush === 'function') this._flush = options.flush; } // When the writable side finishes, then flush out anything remaining. this.on('prefinish', prefinish); } function prefinish() { var _this = this; if (typeof this._flush === 'function') { this._flush(function (er, data) { done(_this, er, data); }); } else { done(this, null, null); } } Transform.prototype.push = function (chunk, encoding) { this._transformState.needTransform = false; return Duplex.prototype.push.call(this, chunk, encoding); }; // This is the part where you do stuff! // override this function in implementation classes. // 'chunk' is an input chunk. // // Call `push(newChunk)` to pass along transformed output // to the readable side. You may call 'push' zero or more times. // // Call `cb(err)` when you are done with this chunk. If you pass // an error, then that'll put the hurt on the whole operation. If you // never call cb(), then you'll never get another chunk. Transform.prototype._transform = function (chunk, encoding, cb) { throw new Error('_transform() is not implemented'); }; Transform.prototype._write = function (chunk, encoding, cb) { var ts = this._transformState; ts.writecb = cb; ts.writechunk = chunk; ts.writeencoding = encoding; if (!ts.transforming) { var rs = this._readableState; if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); } }; // Doesn't matter what the args are here. // _transform does all the work. // That we got here means that the readable side wants more data. Transform.prototype._read = function (n) { var ts = this._transformState; if (ts.writechunk !== null && ts.writecb && !ts.transforming) { ts.transforming = true; this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); } else { // mark that we need a transform, so that any data that comes in // will get processed, now that we've asked for it. ts.needTransform = true; } }; Transform.prototype._destroy = function (err, cb) { var _this2 = this; Duplex.prototype._destroy.call(this, err, function (err2) { cb(err2); _this2.emit('close'); }); }; function done(stream, er, data) { if (er) return stream.emit('error', er); if (data != null) // single equals check for both `null` and `undefined` stream.push(data); // if there's nothing in the write buffer, then that means // that nothing more will ever be provided if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); return stream.push(null); } /***/ }), /* 39 */ /***/ (function(module, exports, __webpack_require__) { var helper = __webpack_require__(30); var isArray = __webpack_require__(31).isArray; var currentElement, currentElementName; function validateOptions(userOptions) { var options = helper.copyOptions(userOptions); helper.ensureFlagExists('ignoreDeclaration', options); helper.ensureFlagExists('ignoreInstruction', options); helper.ensureFlagExists('ignoreAttributes', options); helper.ensureFlagExists('ignoreText', options); helper.ensureFlagExists('ignoreComment', options); helper.ensureFlagExists('ignoreCdata', options); helper.ensureFlagExists('ignoreDoctype', options); helper.ensureFlagExists('compact', options); helper.ensureFlagExists('indentText', options); helper.ensureFlagExists('indentCdata', options); helper.ensureFlagExists('indentAttributes', options); helper.ensureFlagExists('indentInstruction', options); helper.ensureFlagExists('fullTagEmptyElement', options); helper.ensureFlagExists('noQuotesForNativeAttributes', options); helper.ensureSpacesExists(options); if (typeof options.spaces === 'number') { options.spaces = Array(options.spaces + 1).join(' '); } helper.ensureKeyExists('declaration', options); helper.ensureKeyExists('instruction', options); helper.ensureKeyExists('attributes', options); helper.ensureKeyExists('text', options); helper.ensureKeyExists('comment', options); helper.ensureKeyExists('cdata', options); helper.ensureKeyExists('doctype', options); helper.ensureKeyExists('type', options); helper.ensureKeyExists('name', options); helper.ensureKeyExists('elements', options); helper.checkFnExists('doctype', options); helper.checkFnExists('instruction', options); helper.checkFnExists('cdata', options); helper.checkFnExists('comment', options); helper.checkFnExists('text', options); helper.checkFnExists('instructionName', options); helper.checkFnExists('elementName', options); helper.checkFnExists('attributeName', options); helper.checkFnExists('attributeValue', options); helper.checkFnExists('attributes', options); helper.checkFnExists('fullTagEmptyElement', options); return options; } function writeIndentation(options, depth, firstLine) { return (!firstLine && options.spaces ? '\n' : '') + Array(depth + 1).join(options.spaces); } function writeAttributes(attributes, options, depth) { if (options.ignoreAttributes) { return ''; } if ('attributesFn' in options) { attributes = options.attributesFn(attributes, currentElementName, currentElement); } var key, attr, attrName, quote, result = []; for (key in attributes) { if (attributes.hasOwnProperty(key) && attributes[key] !== null && attributes[key] !== undefined) { quote = options.noQuotesForNativeAttributes && typeof attributes[key] !== 'string' ? '' : '"'; attr = '' + attributes[key]; // ensure number and boolean are converted to String attr = attr.replace(/"/g, '"'); attrName = 'attributeNameFn' in options ? options.attributeNameFn(key, attr, currentElementName, currentElement) : key; result.push(options.spaces && options.indentAttributes ? writeIndentation(options, depth + 1, false) : ' '); result.push(attrName + '=' + quote + ('attributeValueFn' in options ? options.attributeValueFn(attr, key, currentElementName, currentElement) : attr) + quote); } } if (attributes && Object.keys(attributes).length && options.spaces && options.indentAttributes) { result.push(writeIndentation(options, depth, false)); } return result.join(''); } function writeDeclaration(declaration, options, depth) { currentElement = declaration; currentElementName = 'xml'; return options.ignoreDeclaration ? '' : ''; } function writeInstruction(instruction, options, depth) { if (options.ignoreInstruction) { return ''; } var key; for (key in instruction) { if (instruction.hasOwnProperty(key)) { break; } } var instructionName = 'instructionNameFn' in options ? options.instructionNameFn(key, instruction[key], currentElementName, currentElement) : key; if (typeof instruction[key] === 'object') { currentElement = instruction; currentElementName = instructionName; return ''; } else { var instructionValue = instruction[key] ? instruction[key] : ''; if ('instructionFn' in options) instructionValue = options.instructionFn(instructionValue, key, currentElementName, currentElement); return ''; } } function writeComment(comment, options) { return options.ignoreComment ? '' : ''; } function writeCdata(cdata, options) { return options.ignoreCdata ? '' : '', ']]]]>')) + ']]>'; } function writeDoctype(doctype, options) { return options.ignoreDoctype ? '' : ''; } function writeText(text, options) { if (options.ignoreText) return ''; text = '' + text; // ensure Number and Boolean are converted to String text = text.replace(/&/g, '&'); // desanitize to avoid double sanitization text = text.replace(/&/g, '&').replace(//g, '>'); return 'textFn' in options ? options.textFn(text, currentElementName, currentElement) : text; } function hasContent(element, options) { var i; if (element.elements && element.elements.length) { for (i = 0; i < element.elements.length; ++i) { switch (element.elements[i][options.typeKey]) { case 'text': if (options.indentText) { return true; } break; // skip to next key case 'cdata': if (options.indentCdata) { return true; } break; // skip to next key case 'instruction': if (options.indentInstruction) { return true; } break; // skip to next key case 'doctype': case 'comment': case 'element': return true; default: return true; } } } return false; } function writeElement(element, options, depth) { currentElement = element; currentElementName = element.name; var xml = [], elementName = 'elementNameFn' in options ? options.elementNameFn(element.name, element) : element.name; xml.push('<' + elementName); if (element[options.attributesKey]) { xml.push(writeAttributes(element[options.attributesKey], options, depth)); } var withClosingTag = element[options.elementsKey] && element[options.elementsKey].length || element[options.attributesKey] && element[options.attributesKey]['xml:space'] === 'preserve'; if (!withClosingTag) { if ('fullTagEmptyElementFn' in options) { withClosingTag = options.fullTagEmptyElementFn(element.name, element); } else { withClosingTag = options.fullTagEmptyElement; } } if (withClosingTag) { xml.push('>'); if (element[options.elementsKey] && element[options.elementsKey].length) { xml.push(writeElements(element[options.elementsKey], options, depth + 1)); currentElement = element; currentElementName = element.name; } xml.push(options.spaces && hasContent(element, options) ? '\n' + Array(depth + 1).join(options.spaces) : ''); xml.push(''); } else { xml.push('/>'); } return xml.join(''); } function writeElements(elements, options, depth, firstLine) { return elements.reduce(function (xml, element) { var indent = writeIndentation(options, depth, firstLine && !xml); switch (element.type) { case 'element': return xml + indent + writeElement(element, options, depth); case 'comment': return xml + indent + writeComment(element[options.commentKey], options); case 'doctype': return xml + indent + writeDoctype(element[options.doctypeKey], options); case 'cdata': return xml + (options.indentCdata ? indent : '') + writeCdata(element[options.cdataKey], options); case 'text': return xml + (options.indentText ? indent : '') + writeText(element[options.textKey], options); case 'instruction': var instruction = {}; instruction[element[options.nameKey]] = element[options.attributesKey] ? element : element[options.instructionKey]; return xml + (options.indentInstruction ? indent : '') + writeInstruction(instruction, options, depth); } }, ''); } function hasContentCompact(element, options, anyContent) { var key; for (key in element) { if (element.hasOwnProperty(key)) { switch (key) { case options.parentKey: case options.attributesKey: break; // skip to next key case options.textKey: if (options.indentText || anyContent) { return true; } break; // skip to next key case options.cdataKey: if (options.indentCdata || anyContent) { return true; } break; // skip to next key case options.instructionKey: if (options.indentInstruction || anyContent) { return true; } break; // skip to next key case options.doctypeKey: case options.commentKey: return true; default: return true; } } } return false; } function writeElementCompact(element, name, options, depth, indent) { currentElement = element; currentElementName = name; var elementName = 'elementNameFn' in options ? options.elementNameFn(name, element) : name; if (typeof element === 'undefined' || element === null || element === '') { return 'fullTagEmptyElementFn' in options && options.fullTagEmptyElementFn(name, element) || options.fullTagEmptyElement ? '<' + elementName + '>' : '<' + elementName + '/>'; } var xml = []; if (name) { xml.push('<' + elementName); if (typeof element !== 'object') { xml.push('>' + writeText(element, options) + ''); return xml.join(''); } if (element[options.attributesKey]) { xml.push(writeAttributes(element[options.attributesKey], options, depth)); } var withClosingTag = hasContentCompact(element, options, true) || element[options.attributesKey] && element[options.attributesKey]['xml:space'] === 'preserve'; if (!withClosingTag) { if ('fullTagEmptyElementFn' in options) { withClosingTag = options.fullTagEmptyElementFn(name, element); } else { withClosingTag = options.fullTagEmptyElement; } } if (withClosingTag) { xml.push('>'); } else { xml.push('/>'); return xml.join(''); } } xml.push(writeElementsCompact(element, options, depth + 1, false)); currentElement = element; currentElementName = name; if (name) { xml.push((indent ? writeIndentation(options, depth, false) : '') + ''); } return xml.join(''); } function writeElementsCompact(element, options, depth, firstLine) { var i, key, nodes, xml = []; for (key in element) { if (element.hasOwnProperty(key)) { nodes = isArray(element[key]) ? element[key] : [element[key]]; for (i = 0; i < nodes.length; ++i) { switch (key) { case options.declarationKey: xml.push(writeDeclaration(nodes[i], options, depth)); break; case options.instructionKey: xml.push((options.indentInstruction ? writeIndentation(options, depth, firstLine) : '') + writeInstruction(nodes[i], options, depth)); break; case options.attributesKey: case options.parentKey: break; // skip case options.textKey: xml.push((options.indentText ? writeIndentation(options, depth, firstLine) : '') + writeText(nodes[i], options)); break; case options.cdataKey: xml.push((options.indentCdata ? writeIndentation(options, depth, firstLine) : '') + writeCdata(nodes[i], options)); break; case options.doctypeKey: xml.push(writeIndentation(options, depth, firstLine) + writeDoctype(nodes[i], options)); break; case options.commentKey: xml.push(writeIndentation(options, depth, firstLine) + writeComment(nodes[i], options)); break; default: xml.push(writeIndentation(options, depth, firstLine) + writeElementCompact(nodes[i], key, options, depth, hasContentCompact(nodes[i], options))); } firstLine = firstLine && !xml.length; } } } return xml.join(''); } module.exports = function (js, options) { options = validateOptions(options); var xml = []; currentElement = js; currentElementName = '_root_'; if (options.compact) { xml.push(writeElementsCompact(js, options, 0, true)); } else { if (js[options.declarationKey]) { xml.push(writeDeclaration(js[options.declarationKey], options, 0)); } if (js[options.elementsKey] && js[options.elementsKey].length) { xml.push(writeElements(js[options.elementsKey], options, 0, !xml.length)); } } return xml.join(''); }; /***/ }), /* 40 */ /***/ (function(module) { module.exports = JSON.parse("[{\"title\":\"经典深色\",\"label\":\"dark\",\"textColor\":\"#fff\",\"background\":\"rgba(0,0,0,0.6)\",\"colorGroup\":[\"#dd6b66\",\"#759aa0\",\"#e69d87\",\"#8dc1a9\",\"#ea7e53\"]},{\"title\":\"经典浅色\",\"label\":\"light\",\"textColor\":\"#333\",\"background\":\"rgba(255, 255, 255,0.6)\",\"colorGroup\":[\"#3fb1e3\",\"#6be6c1\",\"#626c91\",\"#a0a7e6\",\"#c4ebad\"]},{\"title\":\"绿色渐变\",\"label\":\"green-g\",\"textColor\":\"#fff\",\"background\":\"rgba(0,0,0,0.6)\",\"colorGroup\":[\"#064049\",\"#165A65\",\"#1F717F\",\"#3097AB\",\"#9AEAF4\"]},{\"title\":\"蓝色渐变\",\"label\":\"blue-g\",\"textColor\":\"#fff\",\"background\":\"rgba(0,0,0,0.6)\",\"colorGroup\":[\"#243BCC\",\"#1C55FF\",\"#0C75FF\",\"#338FFF\",\"#00CDF1\"]},{\"title\":\"橙红渐变\",\"label\":\"red-g\",\"textColor\":\"#fff\",\"background\":\"rgba(0,0,0,0.6)\",\"colorGroup\":[\"#770000\",\"#882241\",\"#BE3144\",\"#F05940\",\"#FF8417\"]},{\"title\":\"紫色渐变\",\"label\":\"purple-g\",\"textColor\":\"#fff\",\"background\":\"rgba(0,0,0,0.6)\",\"colorGroup\":[\"#2F2AA4\",\"#5432D3\",\"#8B3B86\",\"#9740B1\",\"#7B6CF5\"]},{\"title\":\"深蓝黑色\",\"label\":\"bluedark-dark\",\"textColor\":\"#fff\",\"background\":\"rgba(0,0,0,0.6)\",\"colorGroup\":[\"#15D1F2\",\"#499BFF\",\"#2C61FF\",\"#243BCC\",\"#67A9FF\"]},{\"title\":\"墨绿黑色\",\"label\":\"green-dark\",\"textColor\":\"#fff\",\"background\":\"rgba(0,0,0,0.6)\",\"colorGroup\":[\"#2D808D\",\"#53A8B6\",\"#7AC2D0\",\"#BCE4E9\",\"#F1FDFF\"]},{\"title\":\"浅蓝黑色\",\"label\":\"blue-dark\",\"textColor\":\"#fff\",\"background\":\"rgba(0,0,0,0.6)\",\"colorGroup\":[\"#00E9FF\",\"#BBE7FF\",\"#6AE5C1\",\"#46ABFF\",\"#363EFF\"]},{\"title\":\"浅灰黑色\",\"label\":\"grey-dark\",\"textColor\":\"#fff\",\"background\":\"rgba(0,0,0,0.6)\",\"colorGroup\":[\"#52606D\",\"#8894A0\",\"#BACBDB\",\"#D3DDE8\",\"#F2F5F8\"]},{\"title\":\"深紫黑色\",\"label\":\"purple-dark\",\"textColor\":\"#fff\",\"background\":\"rgba(0,0,0,0.6)\",\"colorGroup\":[\"#7B6CF6\",\"#5432D3\",\"#241F92\",\"#8B3B86\",\"#E6A5FF\"]},{\"title\":\"深蓝白色\",\"label\":\"blue-light\",\"textColor\":\"#000\",\"background\":\"rgba(255,255,255,0.6)\",\"colorGroup\":[\"#243BCC\",\"#2C61FF\",\"#499BFF\",\"#15D1F2\",\"#67A9FF\"]},{\"title\":\"深红白色\",\"label\":\"red-light\",\"textColor\":\"#000\",\"background\":\"rgba(255,255,255,0.6)\",\"colorGroup\":[\"#F05940\",\"#BE3144\",\"#882241\",\"#770000\",\"#FF8418\"]}]"); /***/ }), /* 41 */ /***/ (function(module, exports, __webpack_require__) { /*jslint node:true */ var xml2js = __webpack_require__(33); var xml2json = __webpack_require__(73); var js2xml = __webpack_require__(39); var json2xml = __webpack_require__(74); module.exports = { xml2js: xml2js, xml2json: xml2json, js2xml: js2xml, json2xml: json2xml }; /***/ }), /* 42 */ /***/ (function(module, exports, __webpack_require__) { !function (t, e) { true ? module.exports = e(__webpack_require__(75), __webpack_require__(76)) : undefined; }(this, function (m, d) { "use strict"; var t; return m = m && m.hasOwnProperty("default") ? m.default : m, d = d && d.hasOwnProperty("default") ? d.default : d, function (t) { var u; t.exports; (u = window).DOMParser = window.DOMParser; function p() { return document.createElement("canvas"); } var f, c = function c(t, e, i) { if (null != t || null != e || null != i) { var n = function (s) { var A = { opts: s, FRAMERATE: 30, MAX_VIRTUAL_PIXELS: 3e4, rootEmSize: 12, emSize: 12, log: function log(t) {} }; 1 == A.opts.log && "undefined" != typeof console && (A.log = function (t) { console.log(t); }); A.init = function (t) { var e = 0; A.UniqueId = function () { return "canvg" + ++e; }, A.Definitions = {}, A.Styles = {}, A.StylesSpecificity = {}, A.Animations = [], A.Images = [], A.ctx = t, A.ViewPort = new function () { this.viewPorts = [], this.Clear = function () { this.viewPorts = []; }, this.SetCurrent = function (t, e) { this.viewPorts.push({ width: t, height: e }); }, this.RemoveCurrent = function () { this.viewPorts.pop(); }, this.Current = function () { return this.viewPorts[this.viewPorts.length - 1]; }, this.width = function () { return this.Current().width; }, this.height = function () { return this.Current().height; }, this.ComputeSize = function (t) { return null != t && "number" == typeof t ? t : "x" == t ? this.width() : "y" == t ? this.height() : Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2); }; }(); }, A.init(), A.ImagesLoaded = function () { for (var t = 0; t < A.Images.length; t++) { if (!A.Images[t].loaded) return !1; } return !0; }, A.trim = function (t) { return t.replace(/^\s+|\s+$/g, ""); }, A.compressSpaces = function (t) { return t.replace(/(?!\u3000)\s+/gm, " "); }, A.ajax = function (t) { var e; return (e = u.XMLHttpRequest ? new u.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP")) ? (e.open("GET", t, !1), e.send(null), e.responseText) : null; }, A.parseXml = function (e) { if ("undefined" != typeof Windows && void 0 !== Windows.Data && void 0 !== Windows.Data.Xml) { var t = new Windows.Data.Xml.Dom.XmlDocument(), i = new Windows.Data.Xml.Dom.XmlLoadSettings(); return i.prohibitDtd = !1, t.loadXml(e, i), t; } if (!u.DOMParser) { e = e.replace(/]*>/, ""); var t = new ActiveXObject("Microsoft.XMLDOM"); return t.async = "false", t.loadXML(e), t; } try { var n = s.xmldom ? new u.DOMParser(s.xmldom) : new u.DOMParser(); return n.parseFromString(e, "image/svg+xml"); } catch (t) { return (n = s.xmldom ? new u.DOMParser(s.xmldom) : new u.DOMParser()).parseFromString(e, "text/xml"); } }, A.Property = function (t, e) { this.name = t, this.value = e; }, A.Property.prototype.getValue = function () { return this.value; }, A.Property.prototype.hasValue = function () { return null != this.value && "" !== this.value; }, A.Property.prototype.numValue = function () { if (!this.hasValue()) return 0; var t = parseFloat(this.value); return (this.value + "").match(/%$/) && (t /= 100), t; }, A.Property.prototype.valueOrDefault = function (t) { return this.hasValue() ? this.value : t; }, A.Property.prototype.numValueOrDefault = function (t) { return this.hasValue() ? this.numValue() : t; }, A.Property.prototype.addOpacity = function (t) { var e = this.value; if (null != t.value && "" != t.value && "string" == typeof this.value) { var i = new m(this.value); i.ok && (e = "rgba(" + i.r + ", " + i.g + ", " + i.b + ", " + t.numValue() + ")"); } return new A.Property(this.name, e); }, A.Property.prototype.getDefinition = function () { var t = this.value.match(/#([^\)'"]+)/); return t && (t = t[1]), t || (t = this.value), A.Definitions[t]; }, A.Property.prototype.isUrlDefinition = function () { return 0 == this.value.indexOf("url("); }, A.Property.prototype.getFillStyleDefinition = function (t, e) { var i = this.getDefinition(); if (null != i && i.createGradient) return i.createGradient(A.ctx, t, e); if (null != i && i.createPattern) { if (i.getHrefAttribute().hasValue()) { var n = i.attribute("patternTransform"); i = i.getHrefAttribute().getDefinition(), n.hasValue() && (i.attribute("patternTransform", !0).value = n.value); } return i.createPattern(A.ctx, t); } return null; }, A.Property.prototype.getDPI = function (t) { return 96; }, A.Property.prototype.getREM = function (t) { return A.rootEmSize; }, A.Property.prototype.getEM = function (t) { return A.emSize; }, A.Property.prototype.getUnits = function () { var t = this.value + ""; return t.replace(/[0-9\.\-]/g, ""); }, A.Property.prototype.isPixels = function () { if (!this.hasValue()) return !1; var t = this.value + ""; return !!t.match(/px$/) || !!t.match(/^[0-9]+$/); }, A.Property.prototype.toPixels = function (t, e) { if (!this.hasValue()) return 0; var i = this.value + ""; if (i.match(/rem$/)) return this.numValue() * this.getREM(t); if (i.match(/em$/)) return this.numValue() * this.getEM(t); if (i.match(/ex$/)) return this.numValue() * this.getEM(t) / 2; if (i.match(/px$/)) return this.numValue(); if (i.match(/pt$/)) return this.numValue() * this.getDPI(t) * (1 / 72); if (i.match(/pc$/)) return 15 * this.numValue(); if (i.match(/cm$/)) return this.numValue() * this.getDPI(t) / 2.54; if (i.match(/mm$/)) return this.numValue() * this.getDPI(t) / 25.4; if (i.match(/in$/)) return this.numValue() * this.getDPI(t); if (i.match(/%$/)) return this.numValue() * A.ViewPort.ComputeSize(t); var n = this.numValue(); return e && n < 1 ? n * A.ViewPort.ComputeSize(t) : n; }, A.Property.prototype.toMilliseconds = function () { if (!this.hasValue()) return 0; var t = this.value + ""; return t.match(/s$/) ? 1e3 * this.numValue() : (t.match(/ms$/), this.numValue()); }, A.Property.prototype.toRadians = function () { if (!this.hasValue()) return 0; var t = this.value + ""; return t.match(/deg$/) ? this.numValue() * (Math.PI / 180) : t.match(/grad$/) ? this.numValue() * (Math.PI / 200) : t.match(/rad$/) ? this.numValue() : this.numValue() * (Math.PI / 180); }; var t = { baseline: "alphabetic", "before-edge": "top", "text-before-edge": "top", middle: "middle", central: "middle", "after-edge": "bottom", "text-after-edge": "bottom", ideographic: "ideographic", alphabetic: "alphabetic", hanging: "hanging", mathematical: "alphabetic" }; return A.Property.prototype.toTextBaseline = function () { return this.hasValue() ? t[this.value] : null; }, A.Font = new function () { this.Styles = "normal|italic|oblique|inherit", this.Variants = "normal|small-caps|inherit", this.Weights = "normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit", this.CreateFont = function (t, e, i, n, s, a) { var r = null != a ? this.Parse(a) : this.CreateFont("", "", "", "", "", A.ctx.font); return { fontFamily: s = s || r.fontFamily, fontSize: n || r.fontSize, fontStyle: t || r.fontStyle, fontWeight: i || r.fontWeight, fontVariant: e || r.fontVariant, toString: function toString() { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(" "); } }; }; var r = this; this.Parse = function (t) { for (var e = {}, i = A.trim(A.compressSpaces(t || "")).split(" "), n = { fontSize: !1, fontStyle: !1, fontWeight: !1, fontVariant: !1 }, s = "", a = 0; a < i.length; a++) { n.fontStyle || -1 == r.Styles.indexOf(i[a]) ? n.fontVariant || -1 == r.Variants.indexOf(i[a]) ? n.fontWeight || -1 == r.Weights.indexOf(i[a]) ? n.fontSize ? "inherit" != i[a] && (s += i[a]) : ("inherit" != i[a] && (e.fontSize = i[a].split("/")[0]), n.fontStyle = n.fontVariant = n.fontWeight = n.fontSize = !0) : ("inherit" != i[a] && (e.fontWeight = i[a]), n.fontStyle = n.fontVariant = n.fontWeight = !0) : ("inherit" != i[a] && (e.fontVariant = i[a]), n.fontStyle = n.fontVariant = !0) : ("inherit" != i[a] && (e.fontStyle = i[a]), n.fontStyle = !0); } return "" != s && (e.fontFamily = s), e; }; }(), A.ToNumberArray = function (t) { for (var e = A.trim(A.compressSpaces((t || "").replace(/,/g, " "))).split(" "), i = 0; i < e.length; i++) { e[i] = parseFloat(e[i]); } return e; }, A.Point = function (t, e) { this.x = t, this.y = e; }, A.Point.prototype.angleTo = function (t) { return Math.atan2(t.y - this.y, t.x - this.x); }, A.Point.prototype.applyTransform = function (t) { var e = this.x * t[0] + this.y * t[2] + t[4], i = this.x * t[1] + this.y * t[3] + t[5]; this.x = e, this.y = i; }, A.CreatePoint = function (t) { var e = A.ToNumberArray(t); return new A.Point(e[0], e[1]); }, A.CreatePath = function (t) { for (var e = A.ToNumberArray(t), i = [], n = 0; n < e.length; n += 2) { i.push(new A.Point(e[n], e[n + 1])); } return i; }, A.BoundingBox = function (t, e, i, n) { this.x1 = Number.NaN, this.y1 = Number.NaN, this.x2 = Number.NaN, this.y2 = Number.NaN, this.x = function () { return this.x1; }, this.y = function () { return this.y1; }, this.width = function () { return this.x2 - this.x1; }, this.height = function () { return this.y2 - this.y1; }, this.addPoint = function (t, e) { null != t && ((isNaN(this.x1) || isNaN(this.x2)) && (this.x1 = t, this.x2 = t), t < this.x1 && (this.x1 = t), t > this.x2 && (this.x2 = t)), null != e && ((isNaN(this.y1) || isNaN(this.y2)) && (this.y1 = e, this.y2 = e), e < this.y1 && (this.y1 = e), e > this.y2 && (this.y2 = e)); }, this.addX = function (t) { this.addPoint(t, null); }, this.addY = function (t) { this.addPoint(null, t); }, this.addBoundingBox = function (t) { this.addPoint(t.x1, t.y1), this.addPoint(t.x2, t.y2); }, this.addQuadraticCurve = function (t, e, i, n, s, a) { var r = t + 2 / 3 * (i - t), o = e + 2 / 3 * (n - e), l = r + 1 / 3 * (s - t), h = o + 1 / 3 * (a - e); this.addBezierCurve(t, e, r, l, o, h, s, a); }, this.addBezierCurve = function (t, e, i, n, s, a, r, o) { var l = [t, e], h = [i, n], u = [s, a], c = [r, o]; this.addPoint(l[0], l[1]), this.addPoint(c[0], c[1]); for (var f = 0; f <= 1; f++) { var m = function m(t) { return Math.pow(1 - t, 3) * l[f] + 3 * Math.pow(1 - t, 2) * t * h[f] + 3 * (1 - t) * Math.pow(t, 2) * u[f] + Math.pow(t, 3) * c[f]; }, p = 6 * l[f] - 12 * h[f] + 6 * u[f], d = -3 * l[f] + 9 * h[f] - 9 * u[f] + 3 * c[f], y = 3 * h[f] - 3 * l[f]; if (0 != d) { var v = Math.pow(p, 2) - 4 * y * d; if (!(v < 0)) { var g = (-p + Math.sqrt(v)) / (2 * d); 0 < g && g < 1 && (0 == f && this.addX(m(g)), 1 == f && this.addY(m(g))); var x = (-p - Math.sqrt(v)) / (2 * d); 0 < x && x < 1 && (0 == f && this.addX(m(x)), 1 == f && this.addY(m(x))); } } else { if (0 == p) continue; var b = -y / p; 0 < b && b < 1 && (0 == f && this.addX(m(b)), 1 == f && this.addY(m(b))); } } }, this.isPointInBox = function (t, e) { return this.x1 <= t && t <= this.x2 && this.y1 <= e && e <= this.y2; }, this.addPoint(t, e), this.addPoint(i, n); }, A.Transform = function (t) { var e = this; this.Type = {}, this.Type.translate = function (t) { this.p = A.CreatePoint(t), this.apply = function (t) { t.translate(this.p.x || 0, this.p.y || 0); }, this.unapply = function (t) { t.translate(-1 * this.p.x || 0, -1 * this.p.y || 0); }, this.applyToPoint = function (t) { t.applyTransform([1, 0, 0, 1, this.p.x || 0, this.p.y || 0]); }; }, this.Type.rotate = function (t) { var e = A.ToNumberArray(t); this.angle = new A.Property("angle", e[0]), this.cx = e[1] || 0, this.cy = e[2] || 0, this.apply = function (t) { t.translate(this.cx, this.cy), t.rotate(this.angle.toRadians()), t.translate(-this.cx, -this.cy); }, this.unapply = function (t) { t.translate(this.cx, this.cy), t.rotate(-1 * this.angle.toRadians()), t.translate(-this.cx, -this.cy); }, this.applyToPoint = function (t) { var e = this.angle.toRadians(); t.applyTransform([1, 0, 0, 1, this.p.x || 0, this.p.y || 0]), t.applyTransform([Math.cos(e), Math.sin(e), -Math.sin(e), Math.cos(e), 0, 0]), t.applyTransform([1, 0, 0, 1, -this.p.x || 0, -this.p.y || 0]); }; }, this.Type.scale = function (t) { this.p = A.CreatePoint(t), this.apply = function (t) { t.scale(this.p.x || 1, this.p.y || this.p.x || 1); }, this.unapply = function (t) { t.scale(1 / this.p.x || 1, 1 / this.p.y || this.p.x || 1); }, this.applyToPoint = function (t) { t.applyTransform([this.p.x || 0, 0, 0, this.p.y || 0, 0, 0]); }; }, this.Type.matrix = function (t) { this.m = A.ToNumberArray(t), this.apply = function (t) { t.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]); }, this.unapply = function (t) { var e = this.m[0], i = this.m[2], n = this.m[4], s = this.m[1], a = this.m[3], r = this.m[5], o = 1 / (e * (1 * a - 0 * r) - i * (1 * s - 0 * r) + n * (0 * s - 0 * a)); t.transform(o * (1 * a - 0 * r), o * (0 * r - 1 * s), o * (0 * n - 1 * i), o * (1 * e - 0 * n), o * (i * r - n * a), o * (n * s - e * r)); }, this.applyToPoint = function (t) { t.applyTransform(this.m); }; }, this.Type.SkewBase = function (t) { this.base = e.Type.matrix, this.base(t), this.angle = new A.Property("angle", t); }, this.Type.SkewBase.prototype = new this.Type.matrix(), this.Type.skewX = function (t) { this.base = e.Type.SkewBase, this.base(t), this.m = [1, 0, Math.tan(this.angle.toRadians()), 1, 0, 0]; }, this.Type.skewX.prototype = new this.Type.SkewBase(), this.Type.skewY = function (t) { this.base = e.Type.SkewBase, this.base(t), this.m = [1, Math.tan(this.angle.toRadians()), 0, 1, 0, 0]; }, this.Type.skewY.prototype = new this.Type.SkewBase(), this.transforms = [], this.apply = function (t) { for (var e = 0; e < this.transforms.length; e++) { this.transforms[e].apply(t); } }, this.unapply = function (t) { for (var e = this.transforms.length - 1; 0 <= e; e--) { this.transforms[e].unapply(t); } }, this.applyToPoint = function (t) { for (var e = 0; e < this.transforms.length; e++) { this.transforms[e].applyToPoint(t); } }; for (var i = A.trim(A.compressSpaces(t)).replace(/\)([a-zA-Z])/g, ") $1").replace(/\)(\s?,\s?)/g, ") ").split(/\s(?=[a-z])/), n = 0; n < i.length; n++) { if ("none" !== i[n]) { var s = A.trim(i[n].split("(")[0]), a = i[n].split("(")[1].replace(")", ""), r = this.Type[s]; if (void 0 !== r) { var o = new r(a); o.type = s, this.transforms.push(o); } } } }, A.AspectRatio = function (t, e, i, n, s, a, r, o, l, h) { var u = (e = (e = A.compressSpaces(e)).replace(/^defer\s/, "")).split(" ")[0] || "xMidYMid", c = e.split(" ")[1] || "meet", f = i / n, m = s / a, p = Math.min(f, m), d = Math.max(f, m); "meet" == c && (n *= p, a *= p), "slice" == c && (n *= d, a *= d), l = new A.Property("refX", l), h = new A.Property("refY", h), l.hasValue() && h.hasValue() ? t.translate(-p * l.toPixels("x"), -p * h.toPixels("y")) : (u.match(/^xMid/) && ("meet" == c && p == m || "slice" == c && d == m) && t.translate(i / 2 - n / 2, 0), u.match(/YMid$/) && ("meet" == c && p == f || "slice" == c && d == f) && t.translate(0, s / 2 - a / 2), u.match(/^xMax/) && ("meet" == c && p == m || "slice" == c && d == m) && t.translate(i - n, 0), u.match(/YMax$/) && ("meet" == c && p == f || "slice" == c && d == f) && t.translate(0, s - a)), "none" == u ? t.scale(f, m) : "meet" == c ? t.scale(p, p) : "slice" == c && t.scale(d, d), t.translate(null == r ? 0 : -r, null == o ? 0 : -o); }, A.Element = {}, A.EmptyProperty = new A.Property("EMPTY", ""), A.Element.ElementBase = function (a) { this.attributes = {}, this.styles = {}, this.stylesSpecificity = {}, this.children = [], this.attribute = function (t, e) { var i = this.attributes[t]; return null != i ? i : (1 == e && (i = new A.Property(t, ""), this.attributes[t] = i), i || A.EmptyProperty); }, this.getHrefAttribute = function () { for (var t in this.attributes) { if ("href" == t || t.match(/:href$/)) return this.attributes[t]; } return A.EmptyProperty; }, this.style = function (t, e, i) { var n = this.styles[t]; if (null != n) return n; var s = this.attribute(t); if (null != s && s.hasValue()) return this.styles[t] = s; if (1 != i) { var a = this.parent; if (null != a) { var r = a.style(t); if (null != r && r.hasValue()) return r; } } return 1 == e && (n = new A.Property(t, ""), this.styles[t] = n), n || A.EmptyProperty; }, this.render = function (t) { if ("none" != this.style("display").value && "hidden" != this.style("visibility").value) { if (t.save(), this.style("mask").hasValue()) { var e = this.style("mask").getDefinition(); null != e && e.apply(t, this); } else if (this.style("filter").hasValue()) { var i = this.style("filter").getDefinition(); null != i && i.apply(t, this); } else this.setContext(t), this.renderChildren(t), this.clearContext(t); t.restore(); } }, this.setContext = function (t) {}, this.clearContext = function (t) {}, this.renderChildren = function (t) { for (var e = 0; e < this.children.length; e++) { this.children[e].render(t); } }, this.addChild = function (t, e) { var i = t; e && (i = A.CreateElement(t)), i.parent = this, "title" != i.type && this.children.push(i); }, this.addStylesFromStyleDefinition = function () { for (var t in A.Styles) { if ("@" != t[0] && f(a, t)) { var e = A.Styles[t], i = A.StylesSpecificity[t]; if (null != e) for (var n in e) { var s = this.stylesSpecificity[n]; void 0 === s && (s = "000"), s < i && (this.styles[n] = e[n], this.stylesSpecificity[n] = i); } } } }; var t, e = new RegExp("^[A-Z-]+$"); if (null != a && 1 == a.nodeType) { for (var i = 0; i < a.attributes.length; i++) { var n = a.attributes[i], s = (t = n.nodeName, e.test(t) ? t.toLowerCase() : t); this.attributes[s] = new A.Property(s, n.value); } if (this.addStylesFromStyleDefinition(), this.attribute("style").hasValue()) { var r = this.attribute("style").value.split(";"); for (i = 0; i < r.length; i++) { if ("" != A.trim(r[i])) { var o = r[i].split(":"), l = A.trim(o[0]), h = A.trim(o[1]); this.styles[l] = new A.Property(l, h); } } } for (this.attribute("id").hasValue() && null == A.Definitions[this.attribute("id").value] && (A.Definitions[this.attribute("id").value] = this), i = 0; i < a.childNodes.length; i++) { var u = a.childNodes[i]; if (1 == u.nodeType && this.addChild(u, !0), this.captureTextNodes && (3 == u.nodeType || 4 == u.nodeType)) { var c = u.value || u.text || u.textContent || ""; "" != A.compressSpaces(c) && this.addChild(new A.Element.tspan(u), !1); } } } }, A.Element.RenderedElementBase = function (t) { this.base = A.Element.ElementBase, this.base(t), this.calculateOpacity = function () { for (var t = 1, e = this; null != e;) { var i = e.style("opacity", !1, !0); i.hasValue() && (t *= i.numValue()), e = e.parent; } return t; }, this.setContext = function (t, e) { if (!e) { var i; if (this.style("fill").isUrlDefinition()) null != (i = this.style("fill").getFillStyleDefinition(this, this.style("fill-opacity"))) && (t.fillStyle = i);else if (this.style("fill").hasValue()) { var n; "currentColor" == (n = this.style("fill")).value && (n.value = this.style("color").value), "inherit" != n.value && (t.fillStyle = "none" == n.value ? "rgba(0,0,0,0)" : n.value); } if (this.style("fill-opacity").hasValue() && (n = (n = new A.Property("fill", t.fillStyle)).addOpacity(this.style("fill-opacity")), t.fillStyle = n.value), this.style("stroke").isUrlDefinition()) null != (i = this.style("stroke").getFillStyleDefinition(this, this.style("stroke-opacity"))) && (t.strokeStyle = i);else if (this.style("stroke").hasValue()) { var s; "currentColor" == (s = this.style("stroke")).value && (s.value = this.style("color").value), "inherit" != s.value && (t.strokeStyle = "none" == s.value ? "rgba(0,0,0,0)" : s.value); } if (this.style("stroke-opacity").hasValue() && (s = (s = new A.Property("stroke", t.strokeStyle)).addOpacity(this.style("stroke-opacity")), t.strokeStyle = s.value), this.style("stroke-width").hasValue()) { var a = this.style("stroke-width").toPixels(); t.lineWidth = 0 == a ? .001 : a; } if (this.style("stroke-linecap").hasValue() && (t.lineCap = this.style("stroke-linecap").value), this.style("stroke-linejoin").hasValue() && (t.lineJoin = this.style("stroke-linejoin").value), this.style("stroke-miterlimit").hasValue() && (t.miterLimit = this.style("stroke-miterlimit").value), this.style("paint-order").hasValue() && (t.paintOrder = this.style("paint-order").value), this.style("stroke-dasharray").hasValue() && "none" != this.style("stroke-dasharray").value) { var r = A.ToNumberArray(this.style("stroke-dasharray").value); void 0 !== t.setLineDash ? t.setLineDash(r) : void 0 !== t.webkitLineDash ? t.webkitLineDash = r : void 0 === t.mozDash || 1 == r.length && 0 == r[0] || (t.mozDash = r); var o = this.style("stroke-dashoffset").toPixels(); void 0 !== t.lineDashOffset ? t.lineDashOffset = o : void 0 !== t.webkitLineDashOffset ? t.webkitLineDashOffset = o : void 0 !== t.mozDashOffset && (t.mozDashOffset = o); } } if (void 0 !== t.font) { t.font = A.Font.CreateFont(this.style("font-style").value, this.style("font-variant").value, this.style("font-weight").value, this.style("font-size").hasValue() ? this.style("font-size").toPixels() + "px" : "", this.style("font-family").value).toString(); var l = this.style("font-size", !1, !1); l.isPixels() && (A.emSize = l.toPixels()); } if (this.style("transform", !1, !0).hasValue() && new A.Transform(this.style("transform", !1, !0).value).apply(t), this.style("clip-path", !1, !0).hasValue()) { var h = this.style("clip-path", !1, !0).getDefinition(); null != h && h.apply(t); } t.globalAlpha = this.calculateOpacity(); }; }, A.Element.RenderedElementBase.prototype = new A.Element.ElementBase(), A.Element.PathElementBase = function (t) { this.base = A.Element.RenderedElementBase, this.base(t), this.path = function (t) { return null != t && t.beginPath(), new A.BoundingBox(); }, this.renderChildren = function (t) { this.path(t), A.Mouse.checkPath(this, t), "" != t.fillStyle && ("inherit" != this.style("fill-rule").valueOrDefault("inherit") ? t.fill(this.style("fill-rule").value) : t.fill()), "" != t.strokeStyle && t.stroke(); var e = this.getMarkers(); if (null != e) { if (this.style("marker-start").isUrlDefinition() && (i = this.style("marker-start").getDefinition()).render(t, e[0][0], e[0][1]), this.style("marker-mid").isUrlDefinition()) for (var i = this.style("marker-mid").getDefinition(), n = 1; n < e.length - 1; n++) { i.render(t, e[n][0], e[n][1]); } this.style("marker-end").isUrlDefinition() && (i = this.style("marker-end").getDefinition()).render(t, e[e.length - 1][0], e[e.length - 1][1]); } }, this.getBoundingBox = function () { return this.path(); }, this.getMarkers = function () { return null; }; }, A.Element.PathElementBase.prototype = new A.Element.RenderedElementBase(), A.Element.svg = function (t) { this.base = A.Element.RenderedElementBase, this.base(t), this.baseClearContext = this.clearContext, this.clearContext = function (t) { this.baseClearContext(t), A.ViewPort.RemoveCurrent(); }, this.baseSetContext = this.setContext, this.setContext = function (t) { if (t.strokeStyle = "rgba(0,0,0,0)", t.lineCap = "butt", t.lineJoin = "miter", t.miterLimit = 4, t.canvas.style && void 0 !== t.font && void 0 !== u.getComputedStyle) { t.font = u.getComputedStyle(t.canvas).getPropertyValue("font"); var e = new A.Property("fontSize", A.Font.Parse(t.font).fontSize); e.hasValue() && (A.rootEmSize = A.emSize = e.toPixels("y")); } this.baseSetContext(t), this.attribute("x").hasValue() || (this.attribute("x", !0).value = 0), this.attribute("y").hasValue() || (this.attribute("y", !0).value = 0), t.translate(this.attribute("x").toPixels("x"), this.attribute("y").toPixels("y")); var i = A.ViewPort.width(), n = A.ViewPort.height(); if (this.attribute("width").hasValue() || (this.attribute("width", !0).value = "100%"), this.attribute("height").hasValue() || (this.attribute("height", !0).value = "100%"), void 0 === this.root) { i = this.attribute("width").toPixels("x"), n = this.attribute("height").toPixels("y"); var s = 0, a = 0; this.attribute("refX").hasValue() && this.attribute("refY").hasValue() && (s = -this.attribute("refX").toPixels("x"), a = -this.attribute("refY").toPixels("y")), "visible" != this.attribute("overflow").valueOrDefault("hidden") && (t.beginPath(), t.moveTo(s, a), t.lineTo(i, a), t.lineTo(i, n), t.lineTo(s, n), t.closePath(), t.clip()); } if (A.ViewPort.SetCurrent(i, n), this.attribute("viewBox").hasValue()) { var r = A.ToNumberArray(this.attribute("viewBox").value), o = r[0], l = r[1]; i = r[2], n = r[3], A.AspectRatio(t, this.attribute("preserveAspectRatio").value, A.ViewPort.width(), i, A.ViewPort.height(), n, o, l, this.attribute("refX").value, this.attribute("refY").value), A.ViewPort.RemoveCurrent(), A.ViewPort.SetCurrent(r[2], r[3]); } }; }, A.Element.svg.prototype = new A.Element.RenderedElementBase(), A.Element.rect = function (t) { this.base = A.Element.PathElementBase, this.base(t), this.path = function (t) { var e = this.attribute("x").toPixels("x"), i = this.attribute("y").toPixels("y"), n = this.attribute("width").toPixels("x"), s = this.attribute("height").toPixels("y"), a = this.attribute("rx").toPixels("x"), r = this.attribute("ry").toPixels("y"); if (this.attribute("rx").hasValue() && !this.attribute("ry").hasValue() && (r = a), this.attribute("ry").hasValue() && !this.attribute("rx").hasValue() && (a = r), a = Math.min(a, n / 2), r = Math.min(r, s / 2), null != t) { var o = (Math.sqrt(2) - 1) / 3 * 4; t.beginPath(), t.moveTo(e + a, i), t.lineTo(e + n - a, i), t.bezierCurveTo(e + n - a + o * a, i, e + n, i + r - o * r, e + n, i + r), t.lineTo(e + n, i + s - r), t.bezierCurveTo(e + n, i + s - r + o * r, e + n - a + o * a, i + s, e + n - a, i + s), t.lineTo(e + a, i + s), t.bezierCurveTo(e + a - o * a, i + s, e, i + s - r + o * r, e, i + s - r), t.lineTo(e, i + r), t.bezierCurveTo(e, i + r - o * r, e + a - o * a, i, e + a, i), t.closePath(); } return new A.BoundingBox(e, i, e + n, i + s); }; }, A.Element.rect.prototype = new A.Element.PathElementBase(), A.Element.circle = function (t) { this.base = A.Element.PathElementBase, this.base(t), this.path = function (t) { var e = this.attribute("cx").toPixels("x"), i = this.attribute("cy").toPixels("y"), n = this.attribute("r").toPixels(); return null != t && (t.beginPath(), t.arc(e, i, n, 0, 2 * Math.PI, !1), t.closePath()), new A.BoundingBox(e - n, i - n, e + n, i + n); }; }, A.Element.circle.prototype = new A.Element.PathElementBase(), A.Element.ellipse = function (t) { this.base = A.Element.PathElementBase, this.base(t), this.path = function (t) { var e = (Math.sqrt(2) - 1) / 3 * 4, i = this.attribute("rx").toPixels("x"), n = this.attribute("ry").toPixels("y"), s = this.attribute("cx").toPixels("x"), a = this.attribute("cy").toPixels("y"); return null != t && (t.beginPath(), t.moveTo(s + i, a), t.bezierCurveTo(s + i, a + e * n, s + e * i, a + n, s, a + n), t.bezierCurveTo(s - e * i, a + n, s - i, a + e * n, s - i, a), t.bezierCurveTo(s - i, a - e * n, s - e * i, a - n, s, a - n), t.bezierCurveTo(s + e * i, a - n, s + i, a - e * n, s + i, a), t.closePath()), new A.BoundingBox(s - i, a - n, s + i, a + n); }; }, A.Element.ellipse.prototype = new A.Element.PathElementBase(), A.Element.line = function (t) { this.base = A.Element.PathElementBase, this.base(t), this.getPoints = function () { return [new A.Point(this.attribute("x1").toPixels("x"), this.attribute("y1").toPixels("y")), new A.Point(this.attribute("x2").toPixels("x"), this.attribute("y2").toPixels("y"))]; }, this.path = function (t) { var e = this.getPoints(); return null != t && (t.beginPath(), t.moveTo(e[0].x, e[0].y), t.lineTo(e[1].x, e[1].y)), new A.BoundingBox(e[0].x, e[0].y, e[1].x, e[1].y); }, this.getMarkers = function () { var t = this.getPoints(), e = t[0].angleTo(t[1]); return [[t[0], e], [t[1], e]]; }; }, A.Element.line.prototype = new A.Element.PathElementBase(), A.Element.polyline = function (t) { this.base = A.Element.PathElementBase, this.base(t), this.points = A.CreatePath(this.attribute("points").value), this.path = function (t) { var e = new A.BoundingBox(this.points[0].x, this.points[0].y); null != t && (t.beginPath(), t.moveTo(this.points[0].x, this.points[0].y)); for (var i = 1; i < this.points.length; i++) { e.addPoint(this.points[i].x, this.points[i].y), null != t && t.lineTo(this.points[i].x, this.points[i].y); } return e; }, this.getMarkers = function () { for (var t = [], e = 0; e < this.points.length - 1; e++) { t.push([this.points[e], this.points[e].angleTo(this.points[e + 1])]); } return 0 < t.length && t.push([this.points[this.points.length - 1], t[t.length - 1][1]]), t; }; }, A.Element.polyline.prototype = new A.Element.PathElementBase(), A.Element.polygon = function (t) { this.base = A.Element.polyline, this.base(t), this.basePath = this.path, this.path = function (t) { var e = this.basePath(t); return null != t && (t.lineTo(this.points[0].x, this.points[0].y), t.closePath()), e; }; }, A.Element.polygon.prototype = new A.Element.polyline(), A.Element.path = function (t) { this.base = A.Element.PathElementBase, this.base(t); var e = this.attribute("d").value; e = e.replace(/,/gm, " "); for (var i = 0; i < 2; i++) { e = e.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm, "$1 $2"); } for (e = (e = e.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm, "$1 $2")).replace(/([0-9])([+\-])/gm, "$1 $2"), i = 0; i < 2; i++) { e = e.replace(/(\.[0-9]*)(\.)/gm, "$1 $2"); } e = e.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm, "$1 $3 $4 "), e = A.compressSpaces(e), e = A.trim(e), this.PathParser = new function (t) { this.tokens = t.split(" "), this.reset = function () { this.i = -1, this.command = "", this.previousCommand = "", this.start = new A.Point(0, 0), this.control = new A.Point(0, 0), this.current = new A.Point(0, 0), this.points = [], this.angles = []; }, this.isEnd = function () { return this.i >= this.tokens.length - 1; }, this.isCommandOrEnd = function () { return !!this.isEnd() || null != this.tokens[this.i + 1].match(/^[A-Za-z]$/); }, this.isRelativeCommand = function () { switch (this.command) { case "m": case "l": case "h": case "v": case "c": case "s": case "q": case "t": case "a": case "z": return !0; } return !1; }, this.getToken = function () { return this.i++, this.tokens[this.i]; }, this.getScalar = function () { return parseFloat(this.getToken()); }, this.nextCommand = function () { this.previousCommand = this.command, this.command = this.getToken(); }, this.getPoint = function () { var t = new A.Point(this.getScalar(), this.getScalar()); return this.makeAbsolute(t); }, this.getAsControlPoint = function () { var t = this.getPoint(); return this.control = t; }, this.getAsCurrentPoint = function () { var t = this.getPoint(); return this.current = t; }, this.getReflectedControlPoint = function () { return "c" != this.previousCommand.toLowerCase() && "s" != this.previousCommand.toLowerCase() && "q" != this.previousCommand.toLowerCase() && "t" != this.previousCommand.toLowerCase() ? this.current : new A.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y); }, this.makeAbsolute = function (t) { return this.isRelativeCommand() && (t.x += this.current.x, t.y += this.current.y), t; }, this.addMarker = function (t, e, i) { null != i && 0 < this.angles.length && null == this.angles[this.angles.length - 1] && (this.angles[this.angles.length - 1] = this.points[this.points.length - 1].angleTo(i)), this.addMarkerAngle(t, null == e ? null : e.angleTo(t)); }, this.addMarkerAngle = function (t, e) { this.points.push(t), this.angles.push(e); }, this.getMarkerPoints = function () { return this.points; }, this.getMarkerAngles = function () { for (var t = 0; t < this.angles.length; t++) { if (null == this.angles[t]) for (var e = t + 1; e < this.angles.length; e++) { if (null != this.angles[e]) { this.angles[t] = this.angles[e]; break; } } } return this.angles; }; }(e), this.path = function (t) { var e = this.PathParser; e.reset(); var i = new A.BoundingBox(); for (null != t && t.beginPath(); !e.isEnd();) { switch (e.nextCommand(), e.command) { case "M": case "m": var n = e.getAsCurrentPoint(); for (e.addMarker(n), i.addPoint(n.x, n.y), null != t && t.moveTo(n.x, n.y), e.start = e.current; !e.isCommandOrEnd();) { n = e.getAsCurrentPoint(), e.addMarker(n, e.start), i.addPoint(n.x, n.y), null != t && t.lineTo(n.x, n.y); } break; case "L": case "l": for (; !e.isCommandOrEnd();) { var s = e.current; n = e.getAsCurrentPoint(), e.addMarker(n, s), i.addPoint(n.x, n.y), null != t && t.lineTo(n.x, n.y); } break; case "H": case "h": for (; !e.isCommandOrEnd();) { var a = new A.Point((e.isRelativeCommand() ? e.current.x : 0) + e.getScalar(), e.current.y); e.addMarker(a, e.current), e.current = a, i.addPoint(e.current.x, e.current.y), null != t && t.lineTo(e.current.x, e.current.y); } break; case "V": case "v": for (; !e.isCommandOrEnd();) { a = new A.Point(e.current.x, (e.isRelativeCommand() ? e.current.y : 0) + e.getScalar()), e.addMarker(a, e.current), e.current = a, i.addPoint(e.current.x, e.current.y), null != t && t.lineTo(e.current.x, e.current.y); } break; case "C": case "c": for (; !e.isCommandOrEnd();) { var r = e.current, o = e.getPoint(), l = e.getAsControlPoint(), h = e.getAsCurrentPoint(); e.addMarker(h, l, o), i.addBezierCurve(r.x, r.y, o.x, o.y, l.x, l.y, h.x, h.y), null != t && t.bezierCurveTo(o.x, o.y, l.x, l.y, h.x, h.y); } break; case "S": case "s": for (; !e.isCommandOrEnd();) { r = e.current, o = e.getReflectedControlPoint(), l = e.getAsControlPoint(), h = e.getAsCurrentPoint(), e.addMarker(h, l, o), i.addBezierCurve(r.x, r.y, o.x, o.y, l.x, l.y, h.x, h.y), null != t && t.bezierCurveTo(o.x, o.y, l.x, l.y, h.x, h.y); } break; case "Q": case "q": for (; !e.isCommandOrEnd();) { r = e.current, l = e.getAsControlPoint(), h = e.getAsCurrentPoint(), e.addMarker(h, l, l), i.addQuadraticCurve(r.x, r.y, l.x, l.y, h.x, h.y), null != t && t.quadraticCurveTo(l.x, l.y, h.x, h.y); } break; case "T": case "t": for (; !e.isCommandOrEnd();) { r = e.current, l = e.getReflectedControlPoint(), e.control = l, h = e.getAsCurrentPoint(), e.addMarker(h, l, l), i.addQuadraticCurve(r.x, r.y, l.x, l.y, h.x, h.y), null != t && t.quadraticCurveTo(l.x, l.y, h.x, h.y); } break; case "A": case "a": for (; !e.isCommandOrEnd();) { r = e.current; var u = e.getScalar(), c = e.getScalar(), f = e.getScalar() * (Math.PI / 180), m = e.getScalar(), p = e.getScalar(), d = (h = e.getAsCurrentPoint(), new A.Point(Math.cos(f) * (r.x - h.x) / 2 + Math.sin(f) * (r.y - h.y) / 2, -Math.sin(f) * (r.x - h.x) / 2 + Math.cos(f) * (r.y - h.y) / 2)), y = Math.pow(d.x, 2) / Math.pow(u, 2) + Math.pow(d.y, 2) / Math.pow(c, 2); 1 < y && (u *= Math.sqrt(y), c *= Math.sqrt(y)); var v = (m == p ? -1 : 1) * Math.sqrt((Math.pow(u, 2) * Math.pow(c, 2) - Math.pow(u, 2) * Math.pow(d.y, 2) - Math.pow(c, 2) * Math.pow(d.x, 2)) / (Math.pow(u, 2) * Math.pow(d.y, 2) + Math.pow(c, 2) * Math.pow(d.x, 2))); isNaN(v) && (v = 0); var g = new A.Point(v * u * d.y / c, v * -c * d.x / u), x = new A.Point((r.x + h.x) / 2 + Math.cos(f) * g.x - Math.sin(f) * g.y, (r.y + h.y) / 2 + Math.sin(f) * g.x + Math.cos(f) * g.y), b = function b(t) { return Math.sqrt(Math.pow(t[0], 2) + Math.pow(t[1], 2)); }, P = function P(t, e) { return (t[0] * e[0] + t[1] * e[1]) / (b(t) * b(e)); }, E = function E(t, e) { return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(P(t, e)); }, w = E([1, 0], [(d.x - g.x) / u, (d.y - g.y) / c]), B = [(d.x - g.x) / u, (d.y - g.y) / c], C = [(-d.x - g.x) / u, (-d.y - g.y) / c], T = E(B, C); P(B, C) <= -1 && (T = Math.PI), 1 <= P(B, C) && (T = 0); var V = 1 - p ? 1 : -1, M = w + V * (T / 2), S = new A.Point(x.x + u * Math.cos(M), x.y + c * Math.sin(M)); if (e.addMarkerAngle(S, M - V * Math.PI / 2), e.addMarkerAngle(h, M - V * Math.PI), i.addPoint(h.x, h.y), null != t) { P = c < u ? u : c; var k = c < u ? 1 : u / c, D = c < u ? c / u : 1; t.translate(x.x, x.y), t.rotate(f), t.scale(k, D), t.arc(0, 0, P, w, w + T, 1 - p), t.scale(1 / k, 1 / D), t.rotate(-f), t.translate(-x.x, -x.y); } } break; case "Z": case "z": null != t && i.x1 !== i.x2 && i.y1 !== i.y2 && t.closePath(), e.current = e.start; } } return i; }, this.getMarkers = function () { for (var t = this.PathParser.getMarkerPoints(), e = this.PathParser.getMarkerAngles(), i = [], n = 0; n < t.length; n++) { i.push([t[n], e[n]]); } return i; }; }, A.Element.path.prototype = new A.Element.PathElementBase(), A.Element.pattern = function (t) { this.base = A.Element.ElementBase, this.base(t), this.createPattern = function (t, e) { var i = this.attribute("width").toPixels("x", !0), n = this.attribute("height").toPixels("y", !0), s = new A.Element.svg(); s.attributes.viewBox = new A.Property("viewBox", this.attribute("viewBox").value), s.attributes.width = new A.Property("width", i + "px"), s.attributes.height = new A.Property("height", n + "px"), s.attributes.transform = new A.Property("transform", this.attribute("patternTransform").value), s.children = this.children; var a = p(); a.width = i, a.height = n; var r = a.getContext("2d"); this.attribute("x").hasValue() && this.attribute("y").hasValue() && r.translate(this.attribute("x").toPixels("x", !0), this.attribute("y").toPixels("y", !0)); for (var o = -1; o <= 1; o++) { for (var l = -1; l <= 1; l++) { r.save(), s.attributes.x = new A.Property("x", o * a.width), s.attributes.y = new A.Property("y", l * a.height), s.render(r), r.restore(); } } return t.createPattern(a, "repeat"); }; }, A.Element.pattern.prototype = new A.Element.ElementBase(), A.Element.marker = function (t) { this.base = A.Element.ElementBase, this.base(t), this.baseRender = this.render, this.render = function (t, e, i) { if (e) { t.translate(e.x, e.y), "auto" == this.attribute("orient").valueOrDefault("auto") && t.rotate(i), "strokeWidth" == this.attribute("markerUnits").valueOrDefault("strokeWidth") && t.scale(t.lineWidth, t.lineWidth), t.save(); var n = new A.Element.svg(); n.attributes.viewBox = new A.Property("viewBox", this.attribute("viewBox").value), n.attributes.refX = new A.Property("refX", this.attribute("refX").value), n.attributes.refY = new A.Property("refY", this.attribute("refY").value), n.attributes.width = new A.Property("width", this.attribute("markerWidth").value), n.attributes.height = new A.Property("height", this.attribute("markerHeight").value), n.attributes.fill = new A.Property("fill", this.attribute("fill").valueOrDefault("black")), n.attributes.stroke = new A.Property("stroke", this.attribute("stroke").valueOrDefault("none")), n.children = this.children, n.render(t), t.restore(), "strokeWidth" == this.attribute("markerUnits").valueOrDefault("strokeWidth") && t.scale(1 / t.lineWidth, 1 / t.lineWidth), "auto" == this.attribute("orient").valueOrDefault("auto") && t.rotate(-i), t.translate(-e.x, -e.y); } }; }, A.Element.marker.prototype = new A.Element.ElementBase(), A.Element.defs = function (t) { this.base = A.Element.ElementBase, this.base(t), this.render = function (t) {}; }, A.Element.defs.prototype = new A.Element.ElementBase(), A.Element.GradientBase = function (t) { this.base = A.Element.ElementBase, this.base(t), this.stops = []; for (var e = 0; e < this.children.length; e++) { var i = this.children[e]; "stop" == i.type && this.stops.push(i); } this.getGradient = function () {}, this.gradientUnits = function () { return this.attribute("gradientUnits").valueOrDefault("objectBoundingBox"); }, this.attributesToInherit = ["gradientUnits"], this.inheritStopContainer = function (t) { for (var e = 0; e < this.attributesToInherit.length; e++) { var i = this.attributesToInherit[e]; !this.attribute(i).hasValue() && t.attribute(i).hasValue() && (this.attribute(i, !0).value = t.attribute(i).value); } }, this.createGradient = function (t, e, i) { var n = this; this.getHrefAttribute().hasValue() && (n = this.getHrefAttribute().getDefinition(), this.inheritStopContainer(n)); var s = function s(t) { return i.hasValue() ? new A.Property("color", t).addOpacity(i).value : t; }, a = this.getGradient(t, e); if (null == a) return s(n.stops[n.stops.length - 1].color); for (var r = 0; r < n.stops.length; r++) { a.addColorStop(n.stops[r].offset, s(n.stops[r].color)); } if (this.attribute("gradientTransform").hasValue()) { var o = A.ViewPort.viewPorts[0], l = new A.Element.rect(); l.attributes.x = new A.Property("x", -A.MAX_VIRTUAL_PIXELS / 3), l.attributes.y = new A.Property("y", -A.MAX_VIRTUAL_PIXELS / 3), l.attributes.width = new A.Property("width", A.MAX_VIRTUAL_PIXELS), l.attributes.height = new A.Property("height", A.MAX_VIRTUAL_PIXELS); var h = new A.Element.g(); h.attributes.transform = new A.Property("transform", this.attribute("gradientTransform").value), h.children = [l]; var u = new A.Element.svg(); u.attributes.x = new A.Property("x", 0), u.attributes.y = new A.Property("y", 0), u.attributes.width = new A.Property("width", o.width), u.attributes.height = new A.Property("height", o.height), u.children = [h]; var c = p(); c.width = o.width, c.height = o.height; var f = c.getContext("2d"); return f.fillStyle = a, u.render(f), f.createPattern(c, "no-repeat"); } return a; }; }, A.Element.GradientBase.prototype = new A.Element.ElementBase(), A.Element.linearGradient = function (t) { this.base = A.Element.GradientBase, this.base(t), this.attributesToInherit.push("x1"), this.attributesToInherit.push("y1"), this.attributesToInherit.push("x2"), this.attributesToInherit.push("y2"), this.getGradient = function (t, e) { var i = "objectBoundingBox" == this.gradientUnits() ? e.getBoundingBox(t) : null; this.attribute("x1").hasValue() || this.attribute("y1").hasValue() || this.attribute("x2").hasValue() || this.attribute("y2").hasValue() || (this.attribute("x1", !0).value = 0, this.attribute("y1", !0).value = 0, this.attribute("x2", !0).value = 1, this.attribute("y2", !0).value = 0); var n = "objectBoundingBox" == this.gradientUnits() ? i.x() + i.width() * this.attribute("x1").numValue() : this.attribute("x1").toPixels("x"), s = "objectBoundingBox" == this.gradientUnits() ? i.y() + i.height() * this.attribute("y1").numValue() : this.attribute("y1").toPixels("y"), a = "objectBoundingBox" == this.gradientUnits() ? i.x() + i.width() * this.attribute("x2").numValue() : this.attribute("x2").toPixels("x"), r = "objectBoundingBox" == this.gradientUnits() ? i.y() + i.height() * this.attribute("y2").numValue() : this.attribute("y2").toPixels("y"); return n == a && s == r ? null : t.createLinearGradient(n, s, a, r); }; }, A.Element.linearGradient.prototype = new A.Element.GradientBase(), A.Element.radialGradient = function (t) { this.base = A.Element.GradientBase, this.base(t), this.attributesToInherit.push("cx"), this.attributesToInherit.push("cy"), this.attributesToInherit.push("r"), this.attributesToInherit.push("fx"), this.attributesToInherit.push("fy"), this.getGradient = function (t, e) { var i = e.getBoundingBox(t); this.attribute("cx").hasValue() || (this.attribute("cx", !0).value = "50%"), this.attribute("cy").hasValue() || (this.attribute("cy", !0).value = "50%"), this.attribute("r").hasValue() || (this.attribute("r", !0).value = "50%"); var n = "objectBoundingBox" == this.gradientUnits() ? i.x() + i.width() * this.attribute("cx").numValue() : this.attribute("cx").toPixels("x"), s = "objectBoundingBox" == this.gradientUnits() ? i.y() + i.height() * this.attribute("cy").numValue() : this.attribute("cy").toPixels("y"), a = n, r = s; this.attribute("fx").hasValue() && (a = "objectBoundingBox" == this.gradientUnits() ? i.x() + i.width() * this.attribute("fx").numValue() : this.attribute("fx").toPixels("x")), this.attribute("fy").hasValue() && (r = "objectBoundingBox" == this.gradientUnits() ? i.y() + i.height() * this.attribute("fy").numValue() : this.attribute("fy").toPixels("y")); var o = "objectBoundingBox" == this.gradientUnits() ? (i.width() + i.height()) / 2 * this.attribute("r").numValue() : this.attribute("r").toPixels(); return t.createRadialGradient(a, r, 0, n, s, o); }; }, A.Element.radialGradient.prototype = new A.Element.GradientBase(), A.Element.stop = function (t) { this.base = A.Element.ElementBase, this.base(t), this.offset = this.attribute("offset").numValue(), this.offset < 0 && (this.offset = 0), 1 < this.offset && (this.offset = 1); var e = this.style("stop-color", !0); "" === e.value && (e.value = "#000"), this.style("stop-opacity").hasValue() && (e = e.addOpacity(this.style("stop-opacity"))), this.color = e.value; }, A.Element.stop.prototype = new A.Element.ElementBase(), A.Element.AnimateBase = function (t) { this.base = A.Element.ElementBase, this.base(t), A.Animations.push(this), this.duration = 0, this.begin = this.attribute("begin").toMilliseconds(), this.maxDuration = this.begin + this.attribute("dur").toMilliseconds(), this.getProperty = function () { var t = this.attribute("attributeType").value, e = this.attribute("attributeName").value; return "CSS" == t ? this.parent.style(e, !0) : this.parent.attribute(e, !0); }, this.initialValue = null, this.initialUnits = "", this.removed = !1, this.calcValue = function () { return ""; }, this.update = function (t) { if (null == this.initialValue && (this.initialValue = this.getProperty().value, this.initialUnits = this.getProperty().getUnits()), this.duration > this.maxDuration) { if ("indefinite" == this.attribute("repeatCount").value || "indefinite" == this.attribute("repeatDur").value) this.duration = 0;else if ("freeze" != this.attribute("fill").valueOrDefault("remove") || this.frozen) { if ("remove" == this.attribute("fill").valueOrDefault("remove") && !this.removed) return this.removed = !0, this.getProperty().value = this.parent.animationFrozen ? this.parent.animationFrozenValue : this.initialValue, !0; } else this.frozen = !0, this.parent.animationFrozen = !0, this.parent.animationFrozenValue = this.getProperty().value; return !1; } this.duration = this.duration + t; var e = !1; if (this.begin < this.duration) { var i = this.calcValue(); this.attribute("type").hasValue() && (i = this.attribute("type").value + "(" + i + ")"), this.getProperty().value = i, e = !0; } return e; }, this.from = this.attribute("from"), this.to = this.attribute("to"), this.values = this.attribute("values"), this.values.hasValue() && (this.values.value = this.values.value.split(";")), this.progress = function () { var t = { progress: (this.duration - this.begin) / (this.maxDuration - this.begin) }; if (this.values.hasValue()) { var e = t.progress * (this.values.value.length - 1), i = Math.floor(e), n = Math.ceil(e); t.from = new A.Property("from", parseFloat(this.values.value[i])), t.to = new A.Property("to", parseFloat(this.values.value[n])), t.progress = (e - i) / (n - i); } else t.from = this.from, t.to = this.to; return t; }; }, A.Element.AnimateBase.prototype = new A.Element.ElementBase(), A.Element.animate = function (t) { this.base = A.Element.AnimateBase, this.base(t), this.calcValue = function () { var t = this.progress(); return t.from.numValue() + (t.to.numValue() - t.from.numValue()) * t.progress + this.initialUnits; }; }, A.Element.animate.prototype = new A.Element.AnimateBase(), A.Element.animateColor = function (t) { this.base = A.Element.AnimateBase, this.base(t), this.calcValue = function () { var t = this.progress(), e = new m(t.from.value), i = new m(t.to.value); if (e.ok && i.ok) { var n = e.r + (i.r - e.r) * t.progress, s = e.g + (i.g - e.g) * t.progress, a = e.b + (i.b - e.b) * t.progress; return "rgb(" + parseInt(n, 10) + "," + parseInt(s, 10) + "," + parseInt(a, 10) + ")"; } return this.attribute("from").value; }; }, A.Element.animateColor.prototype = new A.Element.AnimateBase(), A.Element.animateTransform = function (t) { this.base = A.Element.AnimateBase, this.base(t), this.calcValue = function () { for (var t = this.progress(), e = A.ToNumberArray(t.from.value), i = A.ToNumberArray(t.to.value), n = "", s = 0; s < e.length; s++) { n += e[s] + (i[s] - e[s]) * t.progress + " "; } return n; }; }, A.Element.animateTransform.prototype = new A.Element.animate(), A.Element.font = function (t) { this.base = A.Element.ElementBase, this.base(t), this.horizAdvX = this.attribute("horiz-adv-x").numValue(), this.isRTL = !1, this.isArabic = !1, this.fontFace = null, this.missingGlyph = null, this.glyphs = []; for (var e = 0; e < this.children.length; e++) { var i = this.children[e]; "font-face" == i.type ? (this.fontFace = i).style("font-family").hasValue() && (A.Definitions[i.style("font-family").value] = this) : "missing-glyph" == i.type ? this.missingGlyph = i : "glyph" == i.type && ("" != i.arabicForm ? (this.isRTL = !0, this.isArabic = !0, void 0 === this.glyphs[i.unicode] && (this.glyphs[i.unicode] = []), this.glyphs[i.unicode][i.arabicForm] = i) : this.glyphs[i.unicode] = i); } }, A.Element.font.prototype = new A.Element.ElementBase(), A.Element.fontface = function (t) { this.base = A.Element.ElementBase, this.base(t), this.ascent = this.attribute("ascent").value, this.descent = this.attribute("descent").value, this.unitsPerEm = this.attribute("units-per-em").numValue(); }, A.Element.fontface.prototype = new A.Element.ElementBase(), A.Element.missingglyph = function (t) { this.base = A.Element.path, this.base(t), this.horizAdvX = 0; }, A.Element.missingglyph.prototype = new A.Element.path(), A.Element.glyph = function (t) { this.base = A.Element.path, this.base(t), this.horizAdvX = this.attribute("horiz-adv-x").numValue(), this.unicode = this.attribute("unicode").value, this.arabicForm = this.attribute("arabic-form").value; }, A.Element.glyph.prototype = new A.Element.path(), A.Element.text = function (t) { this.captureTextNodes = !0, this.base = A.Element.RenderedElementBase, this.base(t), this.baseSetContext = this.setContext, this.setContext = function (t) { this.baseSetContext(t); var e = this.style("dominant-baseline").toTextBaseline(); null == e && (e = this.style("alignment-baseline").toTextBaseline()), null != e && (t.textBaseline = e); }, this.initializeCoordinates = function (t) { this.x = this.attribute("x").toPixels("x"), this.y = this.attribute("y").toPixels("y"), this.attribute("dx").hasValue() && (this.x += this.attribute("dx").toPixels("x")), this.attribute("dy").hasValue() && (this.y += this.attribute("dy").toPixels("y")), this.x += this.getAnchorDelta(t, this, 0); }, this.getBoundingBox = function (t) { this.initializeCoordinates(t); for (var e = null, i = 0; i < this.children.length; i++) { var n = this.getChildBoundingBox(t, this, this, i); null == e ? e = n : e.addBoundingBox(n); } return e; }, this.renderChildren = function (t) { this.initializeCoordinates(t); for (var e = 0; e < this.children.length; e++) { this.renderChild(t, this, this, e); } }, this.getAnchorDelta = function (t, e, i) { var n = this.style("text-anchor").valueOrDefault("start"); if ("start" != n) { for (var s = 0, a = i; a < e.children.length; a++) { var r = e.children[a]; if (i < a && r.attribute("x").hasValue()) break; s += r.measureTextRecursive(t); } return -1 * ("end" == n ? s : s / 2); } return 0; }, this.adjustChildCoordinates = function (t, e, i, n) { var s = i.children[n]; return s.attribute("x").hasValue() ? (s.x = s.attribute("x").toPixels("x") + e.getAnchorDelta(t, i, n), s.attribute("dx").hasValue() && (s.x += s.attribute("dx").toPixels("x"))) : (s.attribute("dx").hasValue() && (e.x += s.attribute("dx").toPixels("x")), s.x = e.x), e.x = s.x + s.measureText(t), s.attribute("y").hasValue() ? (s.y = s.attribute("y").toPixels("y"), s.attribute("dy").hasValue() && (s.y += s.attribute("dy").toPixels("y"))) : (s.attribute("dy").hasValue() && (e.y += s.attribute("dy").toPixels("y")), s.y = e.y), e.y = s.y, s; }, this.getChildBoundingBox = function (t, e, i, n) { var s = this.adjustChildCoordinates(t, e, i, n), a = s.getBoundingBox(t); for (n = 0; n < s.children.length; n++) { var r = e.getChildBoundingBox(t, e, s, n); a.addBoundingBox(r); } return a; }, this.renderChild = function (t, e, i, n) { var s = this.adjustChildCoordinates(t, e, i, n); for (s.render(t), n = 0; n < s.children.length; n++) { e.renderChild(t, e, s, n); } }; }, A.Element.text.prototype = new A.Element.RenderedElementBase(), A.Element.TextElementBase = function (t) { this.base = A.Element.RenderedElementBase, this.base(t), this.getGlyph = function (t, e, i) { var n = e[i], s = null; if (t.isArabic) { var a = "isolated"; (0 == i || " " == e[i - 1]) && i < e.length - 2 && " " != e[i + 1] && (a = "terminal"), 0 < i && " " != e[i - 1] && i < e.length - 2 && " " != e[i + 1] && (a = "medial"), 0 < i && " " != e[i - 1] && (i == e.length - 1 || " " == e[i + 1]) && (a = "initial"), void 0 !== t.glyphs[n] && null == (s = t.glyphs[n][a]) && "glyph" == t.glyphs[n].type && (s = t.glyphs[n]); } else s = t.glyphs[n]; return null == s && (s = t.missingGlyph), s; }, this.renderChildren = function (t) { var e = this.parent.style("font-family").getDefinition(); if (null == e) "stroke" == t.paintOrder ? ("" != t.strokeStyle && t.strokeText(A.compressSpaces(this.getText()), this.x, this.y), "" != t.fillStyle && t.fillText(A.compressSpaces(this.getText()), this.x, this.y)) : ("" != t.fillStyle && t.fillText(A.compressSpaces(this.getText()), this.x, this.y), "" != t.strokeStyle && t.strokeText(A.compressSpaces(this.getText()), this.x, this.y));else { var i = this.parent.style("font-size").numValueOrDefault(A.Font.Parse(A.ctx.font).fontSize), n = this.parent.style("font-style").valueOrDefault(A.Font.Parse(A.ctx.font).fontStyle), s = this.getText(); e.isRTL && (s = s.split("").reverse().join("")); for (var a = A.ToNumberArray(this.parent.attribute("dx").value), r = 0; r < s.length; r++) { var o = this.getGlyph(e, s, r), l = i / e.fontFace.unitsPerEm; t.translate(this.x, this.y), t.scale(l, -l); var h = t.lineWidth; t.lineWidth = t.lineWidth * e.fontFace.unitsPerEm / i, "italic" == n && t.transform(1, 0, .4, 1, 0, 0), o.render(t), "italic" == n && t.transform(1, 0, -.4, 1, 0, 0), t.lineWidth = h, t.scale(1 / l, -1 / l), t.translate(-this.x, -this.y), this.x += i * (o.horizAdvX || e.horizAdvX) / e.fontFace.unitsPerEm, void 0 === a[r] || isNaN(a[r]) || (this.x += a[r]); } } }, this.getText = function () {}, this.measureTextRecursive = function (t) { for (var e = this.measureText(t), i = 0; i < this.children.length; i++) { e += this.children[i].measureTextRecursive(t); } return e; }, this.measureText = function (t) { var e = this.parent.style("font-family").getDefinition(); if (null != e) { var i = this.parent.style("font-size").numValueOrDefault(A.Font.Parse(A.ctx.font).fontSize), n = 0, s = this.getText(); e.isRTL && (s = s.split("").reverse().join("")); for (var a = A.ToNumberArray(this.parent.attribute("dx").value), r = 0; r < s.length; r++) { n += (this.getGlyph(e, s, r).horizAdvX || e.horizAdvX) * i / e.fontFace.unitsPerEm, void 0 === a[r] || isNaN(a[r]) || (n += a[r]); } return n; } var o = A.compressSpaces(this.getText()); if (!t.measureText) return 10 * o.length; t.save(), this.setContext(t, !0); var l = t.measureText(o).width; return t.restore(), l; }, this.getBoundingBox = function (t) { var e = this.parent.style("font-size").numValueOrDefault(A.Font.Parse(A.ctx.font).fontSize); return new A.BoundingBox(this.x, this.y - e, this.x + this.measureText(t), this.y); }; }, A.Element.TextElementBase.prototype = new A.Element.RenderedElementBase(), A.Element.tspan = function (t) { this.captureTextNodes = !0, this.base = A.Element.TextElementBase, this.base(t), this.text = A.compressSpaces(t.value || t.text || t.textContent || ""), this.getText = function () { return 0 < this.children.length ? "" : this.text; }; }, A.Element.tspan.prototype = new A.Element.TextElementBase(), A.Element.tref = function (t) { this.base = A.Element.TextElementBase, this.base(t), this.getText = function () { var t = this.getHrefAttribute().getDefinition(); if (null != t) return t.children[0].getText(); }; }, A.Element.tref.prototype = new A.Element.TextElementBase(), A.Element.a = function (t) { this.base = A.Element.TextElementBase, this.base(t), this.hasText = 0 < t.childNodes.length; for (var e = 0; e < t.childNodes.length; e++) { 3 != t.childNodes[e].nodeType && (this.hasText = !1); } this.text = this.hasText ? t.childNodes[0].value || t.childNodes[0].data : "", this.getText = function () { return this.text; }, this.baseRenderChildren = this.renderChildren, this.renderChildren = function (t) { if (this.hasText) { this.baseRenderChildren(t); var e = new A.Property("fontSize", A.Font.Parse(A.ctx.font).fontSize); A.Mouse.checkBoundingBox(this, new A.BoundingBox(this.x, this.y - e.toPixels("y"), this.x + this.measureText(t), this.y)); } else if (0 < this.children.length) { var i = new A.Element.g(); i.children = this.children, i.parent = this, i.render(t); } }, this.onclick = function () { u.open(this.getHrefAttribute().value); }, this.onmousemove = function () { A.ctx.canvas.style.cursor = "pointer"; }; }, A.Element.a.prototype = new A.Element.TextElementBase(), A.Element.image = function (t) { this.base = A.Element.RenderedElementBase, this.base(t); var e = this.getHrefAttribute().value; if ("" != e) { var a = e.match(/\.svg$/); if (A.Images.push(this), this.loaded = !1, a) this.img = A.ajax(e), this.loaded = !0;else { this.img = document.createElement("img"), 1 == A.opts.useCORS && (this.img.crossOrigin = "Anonymous"); var r = this; this.img.onload = function () { r.loaded = !0; }, this.img.onerror = function () { A.log('ERROR: image "' + e + '" not found'), r.loaded = !0; }, this.img.src = e; } this.renderChildren = function (t) { var e = this.attribute("x").toPixels("x"), i = this.attribute("y").toPixels("y"), n = this.attribute("width").toPixels("x"), s = this.attribute("height").toPixels("y"); 0 != n && 0 != s && (t.save(), a ? t.drawSvg(this.img, e, i, n, s) : (t.translate(e, i), A.AspectRatio(t, this.attribute("preserveAspectRatio").value, n, this.img.width, s, this.img.height, 0, 0), r.loaded && (void 0 === this.img.complete || this.img.complete) && t.drawImage(this.img, 0, 0)), t.restore()); }, this.getBoundingBox = function () { var t = this.attribute("x").toPixels("x"), e = this.attribute("y").toPixels("y"), i = this.attribute("width").toPixels("x"), n = this.attribute("height").toPixels("y"); return new A.BoundingBox(t, e, t + i, e + n); }; } }, A.Element.image.prototype = new A.Element.RenderedElementBase(), A.Element.g = function (t) { this.base = A.Element.RenderedElementBase, this.base(t), this.getBoundingBox = function (t) { for (var e = new A.BoundingBox(), i = 0; i < this.children.length; i++) { e.addBoundingBox(this.children[i].getBoundingBox(t)); } return e; }; }, A.Element.g.prototype = new A.Element.RenderedElementBase(), A.Element.symbol = function (t) { this.base = A.Element.RenderedElementBase, this.base(t), this.render = function (t) {}; }, A.Element.symbol.prototype = new A.Element.RenderedElementBase(), A.Element.style = function (t) { this.base = A.Element.ElementBase, this.base(t); for (var e = "", i = 0; i < t.childNodes.length; i++) { e += t.childNodes[i].data; } e = e.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ""); var n = (e = A.compressSpaces(e)).split("}"); for (i = 0; i < n.length; i++) { if ("" != A.trim(n[i])) for (var s = n[i].split("{"), a = s[0].split(","), r = s[1].split(";"), o = 0; o < a.length; o++) { var l = A.trim(a[o]); if ("" != l) { for (var h = A.Styles[l] || {}, u = 0; u < r.length; u++) { var c = r[u].indexOf(":"), f = r[u].substr(0, c), m = r[u].substr(c + 1, r[u].length - c); null != f && null != m && (h[A.trim(f)] = new A.Property(A.trim(f), A.trim(m))); } if (A.Styles[l] = h, A.StylesSpecificity[l] = w(l), "@font-face" == l) for (var p = h["font-family"].value.replace(/"/g, ""), d = h.src.value.split(","), y = 0; y < d.length; y++) { if (0 < d[y].indexOf('format("svg")')) for (var v = d[y].indexOf("url"), g = d[y].indexOf(")", v), x = d[y].substr(v + 5, g - v - 6), b = A.parseXml(A.ajax(x)).getElementsByTagName("font"), P = 0; P < b.length; P++) { var E = A.CreateElement(b[P]); A.Definitions[p] = E; } } } } } }, A.Element.style.prototype = new A.Element.ElementBase(), A.Element.use = function (t) { this.base = A.Element.RenderedElementBase, this.base(t), this.baseSetContext = this.setContext, this.setContext = function (t) { this.baseSetContext(t), this.attribute("x").hasValue() && t.translate(this.attribute("x").toPixels("x"), 0), this.attribute("y").hasValue() && t.translate(0, this.attribute("y").toPixels("y")); }; var n = this.getHrefAttribute().getDefinition(); this.path = function (t) { null != n && n.path(t); }, this.elementTransform = function () { if (null != n && n.style("transform", !1, !0).hasValue()) return new A.Transform(n.style("transform", !1, !0).value); }, this.getBoundingBox = function (t) { if (null != n) return n.getBoundingBox(t); }, this.renderChildren = function (t) { if (null != n) { var e = n; "symbol" == n.type && ((e = new A.Element.svg()).type = "svg", e.attributes.viewBox = new A.Property("viewBox", n.attribute("viewBox").value), e.attributes.preserveAspectRatio = new A.Property("preserveAspectRatio", n.attribute("preserveAspectRatio").value), e.attributes.overflow = new A.Property("overflow", n.attribute("overflow").value), e.children = n.children), "svg" == e.type && (this.attribute("width").hasValue() && (e.attributes.width = new A.Property("width", this.attribute("width").value)), this.attribute("height").hasValue() && (e.attributes.height = new A.Property("height", this.attribute("height").value))); var i = e.parent; e.parent = null, e.render(t), e.parent = i; } }; }, A.Element.use.prototype = new A.Element.RenderedElementBase(), A.Element.mask = function (t) { this.base = A.Element.ElementBase, this.base(t), this.apply = function (t, e) { var i = this.attribute("x").toPixels("x"), n = this.attribute("y").toPixels("y"), s = this.attribute("width").toPixels("x"), a = this.attribute("height").toPixels("y"); if (0 == s && 0 == a) { for (var r = new A.BoundingBox(), o = 0; o < this.children.length; o++) { r.addBoundingBox(this.children[o].getBoundingBox(t)); } i = Math.floor(r.x1), n = Math.floor(r.y1), s = Math.floor(r.width()), a = Math.floor(r.height()); } var l = e.attribute("mask").value; e.attribute("mask").value = ""; var h = p(); h.width = i + s, h.height = n + a; var u = h.getContext("2d"); this.renderChildren(u); var c = p(); c.width = i + s, c.height = n + a; var f = c.getContext("2d"); e.render(f), f.globalCompositeOperation = "destination-in", f.fillStyle = u.createPattern(h, "no-repeat"), f.fillRect(0, 0, i + s, n + a), t.fillStyle = f.createPattern(c, "no-repeat"), t.fillRect(0, 0, i + s, n + a), e.attribute("mask").value = l; }, this.render = function (t) {}; }, A.Element.mask.prototype = new A.Element.ElementBase(), A.Element.clipPath = function (t) { this.base = A.Element.ElementBase, this.base(t), this.apply = function (t) { var e = "undefined" != typeof CanvasRenderingContext2D, i = t.beginPath, n = t.closePath; e && (CanvasRenderingContext2D.prototype.beginPath = function () {}, CanvasRenderingContext2D.prototype.closePath = function () {}), i.call(t); for (var s = 0; s < this.children.length; s++) { var a = this.children[s]; if (void 0 !== a.path) { var r = void 0 !== a.elementTransform && a.elementTransform(); !r && a.style("transform", !1, !0).hasValue() && (r = new A.Transform(a.style("transform", !1, !0).value)), r && r.apply(t), a.path(t), e && (CanvasRenderingContext2D.prototype.closePath = n), r && r.unapply(t); } } n.call(t), t.clip(), e && (CanvasRenderingContext2D.prototype.beginPath = i, CanvasRenderingContext2D.prototype.closePath = n); }, this.render = function (t) {}; }, A.Element.clipPath.prototype = new A.Element.ElementBase(), A.Element.filter = function (t) { this.base = A.Element.ElementBase, this.base(t), this.apply = function (t, e) { var i = e.getBoundingBox(t), n = Math.floor(i.x1), s = Math.floor(i.y1), a = Math.floor(i.width()), r = Math.floor(i.height()), o = e.style("filter").value; e.style("filter").value = ""; for (var l = 0, h = 0, u = 0; u < this.children.length; u++) { var c = this.children[u].extraFilterDistance || 0; l = Math.max(l, c), h = Math.max(h, c); } var f = p(); f.width = a + 2 * l, f.height = r + 2 * h; var m = f.getContext("2d"); for (m.translate(-n + l, -s + h), e.render(m), u = 0; u < this.children.length; u++) { "function" == typeof this.children[u].apply && this.children[u].apply(m, 0, 0, a + 2 * l, r + 2 * h); } t.drawImage(f, 0, 0, a + 2 * l, r + 2 * h, n - l, s - h, a + 2 * l, r + 2 * h), e.style("filter", !0).value = o; }, this.render = function (t) {}; }, A.Element.filter.prototype = new A.Element.ElementBase(), A.Element.feMorphology = function (t) { this.base = A.Element.ElementBase, this.base(t), this.apply = function (t, e, i, n, s) {}; }, A.Element.feMorphology.prototype = new A.Element.ElementBase(), A.Element.feComposite = function (t) { this.base = A.Element.ElementBase, this.base(t), this.apply = function (t, e, i, n, s) {}; }, A.Element.feComposite.prototype = new A.Element.ElementBase(), A.Element.feColorMatrix = function (t) { this.base = A.Element.ElementBase, this.base(t); var n = A.ToNumberArray(this.attribute("values").value); switch (this.attribute("type").valueOrDefault("matrix")) { case "saturate": var e = n[0]; n = [.213 + .787 * e, .715 - .715 * e, .072 - .072 * e, 0, 0, .213 - .213 * e, .715 + .285 * e, .072 - .072 * e, 0, 0, .213 - .213 * e, .715 - .715 * e, .072 + .928 * e, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]; break; case "hueRotate": var s = n[0] * Math.PI / 180, i = function i(t, e, _i) { return t + Math.cos(s) * e + Math.sin(s) * _i; }; n = [i(.213, .787, -.213), i(.715, -.715, -.715), i(.072, -.072, .928), 0, 0, i(.213, -.213, .143), i(.715, .285, .14), i(.072, -.072, -.283), 0, 0, i(.213, -.213, -.787), i(.715, -.715, .715), i(.072, .928, .072), 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]; break; case "luminanceToAlpha": n = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, .2125, .7154, .0721, 0, 0, 0, 0, 0, 0, 1]; } function u(t, e, i, n, s, a) { return t[i * n * 4 + 4 * e + a]; } function c(t, e, i, n, s, a, r) { t[i * n * 4 + 4 * e + a] = r; } function f(t, e) { var i = n[t]; return i * (i < 0 ? e - 255 : e); } this.apply = function (t, e, i, n, s) { var a = t.getImageData(0, 0, n, s); for (i = 0; i < s; i++) { for (e = 0; e < n; e++) { var r = u(a.data, e, i, n, 0, 0), o = u(a.data, e, i, n, 0, 1), l = u(a.data, e, i, n, 0, 2), h = u(a.data, e, i, n, 0, 3); c(a.data, e, i, n, 0, 0, f(0, r) + f(1, o) + f(2, l) + f(3, h) + f(4, 1)), c(a.data, e, i, n, 0, 1, f(5, r) + f(6, o) + f(7, l) + f(8, h) + f(9, 1)), c(a.data, e, i, n, 0, 2, f(10, r) + f(11, o) + f(12, l) + f(13, h) + f(14, 1)), c(a.data, e, i, n, 0, 3, f(15, r) + f(16, o) + f(17, l) + f(18, h) + f(19, 1)); } } t.clearRect(0, 0, n, s), t.putImageData(a, 0, 0); }; }, A.Element.feColorMatrix.prototype = new A.Element.ElementBase(), A.Element.feGaussianBlur = function (t) { this.base = A.Element.ElementBase, this.base(t), this.blurRadius = Math.floor(this.attribute("stdDeviation").numValue()), this.extraFilterDistance = this.blurRadius, this.apply = function (t, e, i, n, s) { d && void 0 !== d.canvasRGBA ? (t.canvas.id = A.UniqueId(), t.canvas.style.display = "none", document.body.appendChild(t.canvas), d.canvasRGBA(t.canvas, e, i, n, s, this.blurRadius), document.body.removeChild(t.canvas)) : A.log("ERROR: StackBlur.js must be included for blur to work"); }; }, A.Element.feGaussianBlur.prototype = new A.Element.ElementBase(), A.Element.title = function (t) {}, A.Element.title.prototype = new A.Element.ElementBase(), A.Element.desc = function (t) {}, A.Element.desc.prototype = new A.Element.ElementBase(), A.Element.MISSING = function (t) { A.log("ERROR: Element '" + t.nodeName + "' not yet implemented."); }, A.Element.MISSING.prototype = new A.Element.ElementBase(), A.CreateElement = function (t) { var e = t.nodeName.replace(/^[^:]+:/, ""); e = e.replace(/\-/g, ""); var i = null; return (i = void 0 !== A.Element[e] ? new A.Element[e](t) : new A.Element.MISSING(t)).type = t.nodeName, i; }, A.load = function (t, e) { A.loadXml(t, A.ajax(e)); }, A.loadXml = function (t, e) { A.loadXmlDoc(t, A.parseXml(e)); }, A.loadXmlDoc = function (a, r) { A.init(a); var i = function i(t) { for (var e = a.canvas; e;) { t.x -= e.offsetLeft, t.y -= e.offsetTop, e = e.offsetParent; } return u.scrollX && (t.x += u.scrollX), u.scrollY && (t.y += u.scrollY), t; }; 1 != A.opts.ignoreMouse && (a.canvas.onclick = function (t) { var e = i(new A.Point(null != t ? t.clientX : event.clientX, null != t ? t.clientY : event.clientY)); A.Mouse.onclick(e.x, e.y); }, a.canvas.onmousemove = function (t) { var e = i(new A.Point(null != t ? t.clientX : event.clientX, null != t ? t.clientY : event.clientY)); A.Mouse.onmousemove(e.x, e.y); }); var o = A.CreateElement(r.documentElement); o.root = !0, o.addStylesFromStyleDefinition(); var l = !0, n = function n() { A.ViewPort.Clear(), a.canvas.parentNode ? A.ViewPort.SetCurrent(a.canvas.parentNode.clientWidth, a.canvas.parentNode.clientHeight) : A.ViewPort.SetCurrent(800, 600), 1 != A.opts.ignoreDimensions && (o.style("width").hasValue() && (a.canvas.width = o.style("width").toPixels("x"), a.canvas.style && (a.canvas.style.width = a.canvas.width + "px")), o.style("height").hasValue() && (a.canvas.height = o.style("height").toPixels("y"), a.canvas.style && (a.canvas.style.height = a.canvas.height + "px"))); var t = a.canvas.clientWidth || a.canvas.width, e = a.canvas.clientHeight || a.canvas.height; if (1 == A.opts.ignoreDimensions && o.style("width").hasValue() && o.style("height").hasValue() && (t = o.style("width").toPixels("x"), e = o.style("height").toPixels("y")), A.ViewPort.SetCurrent(t, e), null != A.opts.offsetX && (o.attribute("x", !0).value = A.opts.offsetX), null != A.opts.offsetY && (o.attribute("y", !0).value = A.opts.offsetY), null != A.opts.scaleWidth || null != A.opts.scaleHeight) { var i = null, n = null, s = A.ToNumberArray(o.attribute("viewBox").value); null != A.opts.scaleWidth && (o.attribute("width").hasValue() ? i = o.attribute("width").toPixels("x") / A.opts.scaleWidth : isNaN(s[2]) || (i = s[2] / A.opts.scaleWidth)), null != A.opts.scaleHeight && (o.attribute("height").hasValue() ? n = o.attribute("height").toPixels("y") / A.opts.scaleHeight : isNaN(s[3]) || (n = s[3] / A.opts.scaleHeight)), null == i && (i = n), null == n && (n = i), o.attribute("width", !0).value = A.opts.scaleWidth, o.attribute("height", !0).value = A.opts.scaleHeight, o.style("transform", !0, !0).value += " scale(" + 1 / i + "," + 1 / n + ")"; } 1 != A.opts.ignoreClear && a.clearRect(0, 0, t, e), o.render(a), l && (l = !1, "function" == typeof A.opts.renderCallback && A.opts.renderCallback(r)); }, s = !0; A.ImagesLoaded() && (s = !1, n()), A.intervalID = setInterval(function () { var t = !1; if (s && A.ImagesLoaded() && (t = !(s = !1)), 1 != A.opts.ignoreMouse && (t |= A.Mouse.hasEvents()), 1 != A.opts.ignoreAnimation) for (var e = 0; e < A.Animations.length; e++) { t |= A.Animations[e].update(1e3 / A.FRAMERATE); } "function" == typeof A.opts.forceRedraw && 1 == A.opts.forceRedraw() && (t = !0), t && (n(), A.Mouse.runEvents()); }, 1e3 / A.FRAMERATE); }, A.stop = function () { A.intervalID && clearInterval(A.intervalID); }, A.Mouse = new function () { this.events = [], this.hasEvents = function () { return 0 != this.events.length; }, this.onclick = function (t, e) { this.events.push({ type: "onclick", x: t, y: e, run: function run(t) { t.onclick && t.onclick(); } }); }, this.onmousemove = function (t, e) { this.events.push({ type: "onmousemove", x: t, y: e, run: function run(t) { t.onmousemove && t.onmousemove(); } }); }, this.eventElements = [], this.checkPath = function (t, e) { for (var i = 0; i < this.events.length; i++) { var n = this.events[i]; e.isPointInPath && e.isPointInPath(n.x, n.y) && (this.eventElements[i] = t); } }, this.checkBoundingBox = function (t, e) { for (var i = 0; i < this.events.length; i++) { var n = this.events[i]; e.isPointInBox(n.x, n.y) && (this.eventElements[i] = t); } }, this.runEvents = function () { A.ctx.canvas.style.cursor = ""; for (var t = 0; t < this.events.length; t++) { for (var e = this.events[t], i = this.eventElements[t]; i;) { e.run(i), i = i.parent; } } this.events = [], this.eventElements = []; }; }(), A; }(i || {}); "string" == typeof t && (t = document.getElementById(t)), null != t.svg && t.svg.stop(), t.childNodes && 1 == t.childNodes.length && "OBJECT" == t.childNodes[0].nodeName || (t.svg = n); var s = t.getContext("2d"); void 0 !== e.documentElement ? n.loadXmlDoc(s, e) : "<" == e.substr(0, 1) ? n.loadXml(s, e) : n.load(s, e); } else for (var a = document.querySelectorAll("svg"), r = 0; r < a.length; r++) { var o = a[r], l = document.createElement("canvas"); l.width = o.clientWidth, l.height = o.clientHeight, o.parentNode.insertBefore(l, o), o.parentNode.removeChild(o); var h = document.createElement("div"); h.appendChild(o), c(l, h.innerHTML); } }; "undefined" == typeof Element || (void 0 !== Element.prototype.matches ? f = function f(t, e) { return t.matches(e); } : void 0 !== Element.prototype.webkitMatchesSelector ? f = function f(t, e) { return t.webkitMatchesSelector(e); } : void 0 !== Element.prototype.mozMatchesSelector ? f = function f(t, e) { return t.mozMatchesSelector(e); } : void 0 !== Element.prototype.msMatchesSelector ? f = function f(t, e) { return t.msMatchesSelector(e); } : void 0 !== Element.prototype.oMatchesSelector ? f = function f(t, e) { return t.oMatchesSelector(e); } : ("function" != typeof jQuery && "function" != typeof Zepto || (f = function f(t, e) { return $(t).is(e); }), void 0 === f && "undefined" != typeof Sizzle && (f = Sizzle.matchesSelector))); var e = /(\[[^\]]+\])/g, i = /(#[^\s\+>~\.\[:]+)/g, a = /(\.[^\s\+>~\.\[:]+)/g, r = /(::[^\s\+>~\.\[:]+|:first-line|:first-letter|:before|:after)/gi, o = /(:[\w-]+\([^\)]*\))/gi, l = /(:[^\s\+>~\.\[:]+)/g, h = /([^\s\+>~\.\[:]+)/g; function w(n) { var s = [0, 0, 0], t = function t(_t, e) { var i = n.match(_t); null != i && (s[e] += i.length, n = n.replace(_t, " ")); }; return n = (n = n.replace(/:not\(([^\)]*)\)/g, " $1 ")).replace(/{[\s\S]*/gm, " "), t(e, 1), t(i, 0), t(a, 1), t(r, 2), t(o, 1), t(l, 1), n = (n = n.replace(/[\*\s\+>~]/g, " ")).replace(/[#\.]/g, " "), t(h, 2), s.join(""); } "undefined" != typeof CanvasRenderingContext2D && (CanvasRenderingContext2D.prototype.drawSvg = function (t, e, i, n, s, a) { var r = { ignoreMouse: !0, ignoreAnimation: !0, ignoreDimensions: !0, ignoreClear: !0, offsetX: e, offsetY: i, scaleWidth: n, scaleHeight: s }; for (var o in a) { a.hasOwnProperty(o) && (r[o] = a[o]); } c(this.canvas, t, r); }), t.exports = c; }(t = { exports: {} }, t.exports), t.exports; }); /***/ }), /* 43 */ /***/ (function(module) { module.exports = JSON.parse("[{\"name\":\"黑龙江省\",\"coord\":[127.64559817675396,48.48668098449708]},{\"name\":\"内蒙古自治区\",\"coord\":[118.34519572208615,45.370218276977525]},{\"name\":\"新疆维吾尔自治区\",\"coord\":[87.13479065593184,41.75497055053711]},{\"name\":\"吉林省\",\"coord\":[126.12985278813787,43.57983207702637]},{\"name\":\"辽宁省\",\"coord\":[124.02494773936439,41.105743408203125]},{\"name\":\"甘肃省\",\"coord\":[102.87785725633012,37.69582366943361]},{\"name\":\"河北省\",\"coord\":[115.66327227481898,39.33383178710938]},{\"name\":\"北京市\",\"coord\":[116.62199343603638,40.25053787231445]},{\"name\":\"山西省\",\"coord\":[112.45180235808988,37.666561126708984]},{\"name\":\"天津市\",\"coord\":[117.35711842642581,39.406789779663086]},{\"name\":\"陕西省\",\"coord\":[109.56294003056632,35.64754199981689]},{\"name\":\"宁夏回族自治区\",\"coord\":[105.96110877640074,37.3081169128418]},{\"name\":\"青海省\",\"coord\":[96.07301048277901,35.44417190551758]},{\"name\":\"山东省\",\"coord\":[118.03833752951093,36.29800605773925]},{\"name\":\"西藏自治区\",\"coord\":[87.47361520439412,31.6703872680664]},{\"name\":\"河南省\",\"coord\":[113.07832397097275,33.87751102447509]},{\"name\":\"江苏省\",\"coord\":[119.93926538201052,32.945452690124505]},{\"name\":\"安徽省\",\"coord\":[117.15146765881019,32.024482727050774]},{\"name\":\"四川省\",\"coord\":[102.28998890142759,30.182161331176758]},{\"name\":\"湖北省\",\"coord\":[112.87798261431585,31.157071113586426]},{\"name\":\"重庆市\",\"coord\":[107.870126637831,30.188085556030266]},{\"name\":\"上海市\",\"coord\":[121.42561166015514,31.276043891906745]},{\"name\":\"浙江省\",\"coord\":[119.75337092707514,29.175934791564945]},{\"name\":\"湖南省\",\"coord\":[111.52770282777405,27.38110256195069]},{\"name\":\"江西省\",\"coord\":[115.51091280655628,27.283511161804206]},{\"name\":\"云南省\",\"coord\":[101.27053825991308,25.19783210754396]},{\"name\":\"贵州省\",\"coord\":[106.49672346773299,26.92267990112305]},{\"name\":\"福建省\",\"coord\":[117.9976766946587,25.939599990844727]},{\"name\":\"广西壮族自治区\",\"coord\":[108.98706831086302,23.891559600830078]},{\"name\":\"台湾省\",\"coord\":[120.82468432537434,23.602651596069336]},{\"name\":\"香港特别行政区\",\"coord\":[114.21036850371561,22.374858856201172]},{\"name\":\"海南省\",\"coord\":[109.62792940960824,19.163116455078125]},{\"name\":\"广东省\",\"coord\":[113.32127888266032,22.873867034912106]},{\"name\":\"澳门特别行政区\",\"coord\":[113.56819996291901,22.160347992976]}]"); /***/ }), /* 44 */ /***/ (function(module) { module.exports = JSON.parse("[{\"name\":\"克拉玛依市\",\"coord\":[85.01486759299489,45.406422237230046]},{\"name\":\"昌吉回族自治州\",\"coord\":[88.7154624754753,44.26991024636568]},{\"name\":\"石河子市\",\"coord\":[86.0208600035924,44.239045558096805]},{\"name\":\"霍林郭勒市\",\"coord\":[114.73479243733115,44.16058374713977]},{\"name\":\"本溪市\",\"coord\":[124.64357865201586,41.177197783134275]},{\"name\":\"嘉峪关市\",\"coord\":[98.16891560537093,39.76279786284264]},{\"name\":\"莱芜市\",\"coord\":[117.65723565456207,36.27916499211527]},{\"name\":\"神农架林区\",\"coord\":[110.48296222218153,31.581260143666697]},{\"name\":\"天门市\",\"coord\":[113.00615321481195,30.64105781887143]},{\"name\":\"鄂州市\",\"coord\":[114.94764081970385,30.325634953844585]},{\"name\":\"潜江市\",\"coord\":[112.70703817700621,30.349210666019893]},{\"name\":\"仙桃市\",\"coord\":[113.34688900729822,30.315951161935402]},{\"name\":\"萍乡市\",\"coord\":[113.88072263074415,27.47193090553213]},{\"name\":\"台湾省\",\"coord\":[120.14338943402045,23.596002465926095]},{\"name\":\"东莞市\",\"coord\":[113.89443658529342,22.897826158636448]},{\"name\":\"中山市\",\"coord\":[113.37118387764659,22.501478858616522]},{\"name\":\"珠海市\",\"coord\":[113.21799258934986,22.23782602992192]},{\"name\":\"北海市\",\"coord\":[109.18248083043899,21.695773689750148]},{\"name\":\"香港\",\"coord\":[114.20689279508653,22.36016760139811]},{\"name\":\"舟山市\",\"coord\":[122.22514712841459,30.338633120695956]},{\"name\":\"克孜勒苏柯尔克孜\",\"coord\":[74.62910472637343,39.59886016069875]},{\"name\":\"喀什地区\",\"coord\":[77.19899922143753,37.85462871211595]},{\"name\":\"阿克苏地区\",\"coord\":[81.43930290016381,41.067304799230456]},{\"name\":\"和田地区\",\"coord\":[80.69780509160952,36.95287032287055]},{\"name\":\"阿里地区\",\"coord\":[82.536487505389,32.69566569631762]},{\"name\":\"日喀则地区\",\"coord\":[86.5996831353606,29.54861754814263]},{\"name\":\"那曲地区\",\"coord\":[88.32523292667608,33.20600450932715]},{\"name\":\"玉树藏族自治州\",\"coord\":[95.2107128446203,33.90320387919257]},{\"name\":\"迪庆藏族自治州\",\"coord\":[99.42465312188943,28.052797714348895]},{\"name\":\"怒江傈傈族自治州\",\"coord\":[98.85737910439825,26.98345757528851]},{\"name\":\"大理白族自治州\",\"coord\":[99.93934374816013,25.684737357453045]},{\"name\":\"德宏傣族景颇族自\",\"coord\":[98.13830877778075,24.593421919561205]},{\"name\":\"保山市\",\"coord\":[99.19031013453166,24.979380341662]},{\"name\":\"临沧市\",\"coord\":[99.62483778975081,24.058807858948214]},{\"name\":\"普洱市\",\"coord\":[100.94440267992684,23.44121660743221]},{\"name\":\"西双版纳傣族自治\",\"coord\":[100.86105801845994,21.882475641324206]},{\"name\":\"拉萨市\",\"coord\":[91.3684790613129,30.14176592960237]},{\"name\":\"山南地区\",\"coord\":[92.11665242621062,28.33000201578789]},{\"name\":\"林芝地区\",\"coord\":[94.9307847458166,29.125110156601963]},{\"name\":\"昌都地区\",\"coord\":[97.33912235873476,30.48520825551814]},{\"name\":\"丽江市\",\"coord\":[100.65713436205135,26.96190318191959]},{\"name\":\"攀枝花市\",\"coord\":[101.73355913301131,26.714486678752795]},{\"name\":\"凉山彝族自治州\",\"coord\":[102.08678551422615,27.683020519860396]},{\"name\":\"楚雄彝族自治州\",\"coord\":[101.68264761198458,25.369603845264024]},{\"name\":\"红河哈尼族彝族自\",\"coord\":[102.95101719613119,23.624860095239875]},{\"name\":\"文山壮族苗族自治\",\"coord\":[104.8708359910614,23.579587266862504]},{\"name\":\"百色市\",\"coord\":[106.69546907589859,23.98220841166522]},{\"name\":\"崇左市\",\"coord\":[107.3277087317123,22.49769755349952]},{\"name\":\"防城港市\",\"coord\":[107.88939931155171,21.94550204069006]},{\"name\":\"南宁市\",\"coord\":[108.67078983716917,23.12207641861882]},{\"name\":\"钦州市\",\"coord\":[108.8532307305186,22.157690108421384]},{\"name\":\"玉林市\",\"coord\":[110.26918466489103,22.391823643610415]},{\"name\":\"湛江市\",\"coord\":[109.93033457863683,21.086751055633457]},{\"name\":\"茂名市\",\"coord\":[110.80336192333934,22.069184739040775]},{\"name\":\"阳江市\",\"coord\":[111.70471342186183,22.108751366417575]},{\"name\":\"江门市\",\"coord\":[112.53715618649149,22.297368082806777]},{\"name\":\"广州市\",\"coord\":[113.4949302208309,23.28359314707863]},{\"name\":\"清远市\",\"coord\":[113.10957368131268,24.334444053233856]},{\"name\":\"肇庆市\",\"coord\":[112.11117530204233,23.60241158796112]},{\"name\":\"梧州市\",\"coord\":[111.01709510772797,23.518132876753846]},{\"name\":\"贺州市\",\"coord\":[111.50423061842756,24.4095096817199]},{\"name\":\"桂林市\",\"coord\":[110.44046163393094,25.353966673735407]},{\"name\":\"柳州市\",\"coord\":[109.34854449214147,24.972408051485047]},{\"name\":\"河池市\",\"coord\":[107.81191841865586,24.649291651298164]},{\"name\":\"黔东南苗族侗族自\",\"coord\":[108.39952601614591,26.429286420465576]},{\"name\":\"贵阳市\",\"coord\":[106.59784062851153,26.797907456479816]},{\"name\":\"安顺市\",\"coord\":[105.76161265300635,25.988644902171018]},{\"name\":\"黔西南布依族苗族\",\"coord\":[105.5954078788574,25.404850939549405]},{\"name\":\"曲靖市\",\"coord\":[103.9164335632742,25.697243690315265]},{\"name\":\"六盘水市\",\"coord\":[104.77723228072432,26.15402255629164]},{\"name\":\"毕节地区\",\"coord\":[105.03867422931839,27.077913968069666]},{\"name\":\"昭通市\",\"coord\":[104.29730513046874,27.62418247971078]},{\"name\":\"宜宾市\",\"coord\":[104.76748901448207,28.553501804266475]},{\"name\":\"乐山市\",\"coord\":[103.56027669102787,29.160754519210577]},{\"name\":\"自贡市\",\"coord\":[104.63272827056402,29.273152614922402]},{\"name\":\"内江市\",\"coord\":[104.82644562304716,29.61272653799929]},{\"name\":\"遵义市\",\"coord\":[106.82413636302059,28.191847588570702]},{\"name\":\"达州市\",\"coord\":[107.59704170009518,31.32138258839703]},{\"name\":\"遂宁市\",\"coord\":[105.48979445433736,30.677687821242678]},{\"name\":\"广安市\",\"coord\":[106.56708164098042,30.43500706741521]},{\"name\":\"泸州市\",\"coord\":[105.42591761727707,28.50277238478137]},{\"name\":\"资阳市\",\"coord\":[104.97995126874034,30.154251886139654]},{\"name\":\"雅安市\",\"coord\":[102.69931299964517,29.892630706195035]},{\"name\":\"眉山市\",\"coord\":[104.07052881858888,29.894202166560405]},{\"name\":\"甘孜藏族自治州\",\"coord\":[100.50721042614238,30.975216556269658]},{\"name\":\"果洛藏族自治州\",\"coord\":[99.30775565051923,34.03539865224808]},{\"name\":\"海南藏族自治州\",\"coord\":[100.39969108016373,35.90048272566899]},{\"name\":\"黄南藏族自治州\",\"coord\":[101.5360706381689,35.10286360841902]},{\"name\":\"赣南藏族自治州\",\"coord\":[102.97083885806067,34.326752803339026]},{\"name\":\"陇南市\",\"coord\":[105.24780098912132,33.57031117443431]},{\"name\":\"天水市\",\"coord\":[105.53503634660417,34.62320421368087]},{\"name\":\"定西市\",\"coord\":[104.58787768541339,35.08900966621695]},{\"name\":\"临夏回族自治州\",\"coord\":[103.2612870434902,35.591577124455235]},{\"name\":\"西宁市\",\"coord\":[101.57680657999033,36.84800271717157]},{\"name\":\"海东地区\",\"coord\":[102.30909850729282,36.287400615025646]},{\"name\":\"海北藏族自治州\",\"coord\":[100.27122484450717,37.892557516083826]},{\"name\":\"金昌市\",\"coord\":[102.02244049169511,38.497330414886164]},{\"name\":\"酒泉市\",\"coord\":[95.94486678270127,40.56891536586272]},{\"name\":\"海西蒙古族藏族自\",\"coord\":[94.67143298050689,36.022725148503724]},{\"name\":\"巴音郭楞蒙古自治\",\"coord\":[88.18116214759745,39.556478810319916]},{\"name\":\"哈密地区\",\"coord\":[93.84302392518026,42.95015211178875]},{\"name\":\"叶鲁番地区\",\"coord\":[89.82035217277885,42.399368632283505]},{\"name\":\"乌鲁木齐市\",\"coord\":[88.00048109561487,43.549986370786]},{\"name\":\"阿勒泰地区\",\"coord\":[88.11213933257655,47.05593413019629]},{\"name\":\"博尔塔拉蒙古自治\",\"coord\":[82.26402238163408,44.671135542630864]},{\"name\":\"伊犁哈萨克自治州\",\"coord\":[82.80778717477179,43.53783381365267]},{\"name\":\"阿拉善盟\",\"coord\":[103.29923966842289,40.10955801781495]},{\"name\":\"武威市\",\"coord\":[102.73362058791429,37.94211141321436]},{\"name\":\"兰州市\",\"coord\":[103.73793563506032,36.27379827886003]},{\"name\":\"中卫市\",\"coord\":[105.6943786030716,37.20654236148948]},{\"name\":\"银川市\",\"coord\":[106.20022174140034,38.52103167597483]},{\"name\":\"石嘴山市\",\"coord\":[106.41544011793628,38.84054137571417]},{\"name\":\"乌海市\",\"coord\":[106.8984175998405,39.54616572239788]},{\"name\":\"鄂尔多斯市\",\"coord\":[108.43285571424619,39.24036799350715]},{\"name\":\"巴彦淖尔市\",\"coord\":[107.45840392808307,41.30159860424196]},{\"name\":\"包头市\",\"coord\":[110.46472193224272,41.48017783644221]},{\"name\":\"呼和浩特市\",\"coord\":[111.48365173603975,40.498363056149884]},{\"name\":\"乌兰察布市\",\"coord\":[112.61568977597707,41.75789561273154]},{\"name\":\"大同市\",\"coord\":[113.7107192749083,39.898956799744184]},{\"name\":\"朔州市\",\"coord\":[112.65428748167508,39.681772914701924]},{\"name\":\"忻州市\",\"coord\":[112.36127575589583,38.88990233614568]},{\"name\":\"榆林市\",\"coord\":[109.68473112169593,38.19921027134876]},{\"name\":\"延安市\",\"coord\":[109.52425222161318,36.406522726136814]},{\"name\":\"庆阳市\",\"coord\":[107.73052193155061,36.183821532624464]},{\"name\":\"固原市\",\"coord\":[106.20191575442442,36.11634909496382]},{\"name\":\"白银市\",\"coord\":[104.68634478137065,36.51582865625868]},{\"name\":\"宝鸡市\",\"coord\":[107.33534779230747,34.3387216485855]},{\"name\":\"汉中市\",\"coord\":[107.03534754266246,33.00142998064871]},{\"name\":\"广元市\",\"coord\":[105.92928137563939,32.21872447205537]},{\"name\":\"巴中市\",\"coord\":[107.03422410306194,31.99874720836291]},{\"name\":\"南充市\",\"coord\":[106.32964805032347,31.156657700184095]},{\"name\":\"绵阳市\",\"coord\":[104.58949560201106,31.88628780630976]},{\"name\":\"德阳市\",\"coord\":[104.41542984932845,31.110558133718676]},{\"name\":\"成都市\",\"coord\":[103.8852290010473,30.777258040348634]},{\"name\":\"阿坝藏族羌族自治\",\"coord\":[102.26209319552814,32.45725845387284]},{\"name\":\"安康市\",\"coord\":[109.14236501848015,32.77467694678074]},{\"name\":\"十堰市\",\"coord\":[110.39934083416314,32.376209039347906]},{\"name\":\"襄阳市\",\"coord\":[111.97539147094662,31.93399822417465]},{\"name\":\"宜昌市\",\"coord\":[111.22204852395754,30.772457669035354]},{\"name\":\"恩施市\",\"coord\":[109.42158366502872,30.260366574390105]},{\"name\":\"张家界市\",\"coord\":[110.59760006538717,29.330107409240718]},{\"name\":\"吉首市\",\"coord\":[109.72176899848378,28.681903937242495]},{\"name\":\"铜仁地区\",\"coord\":[108.54247523485463,28.11736237519646]},{\"name\":\"重庆市\",\"coord\":[107.86007108564992,30.186253395053196]},{\"name\":\"怀化市\",\"coord\":[109.94325166787243,27.43919084801186]},{\"name\":\"益阳市\",\"coord\":[112.43060358108062,28.75127294553697]},{\"name\":\"娄底市\",\"coord\":[111.41891416951897,27.696312460064604]},{\"name\":\"常德市\",\"coord\":[111.72571610131646,29.27189463838195]},{\"name\":\"荆州市\",\"coord\":[112.65896596965268,30.05161542755362]},{\"name\":\"荆门市\",\"coord\":[112.6586855902184,31.01267124474617]},{\"name\":\"岳阳市\",\"coord\":[113.2595036144316,29.106247116930163]},{\"name\":\"长沙市\",\"coord\":[113.15415586456598,28.222934680488425]},{\"name\":\"湘潭市\",\"coord\":[112.51092596317824,27.69881544105668]},{\"name\":\"株州市\",\"coord\":[113.49665538546823,27.03993794610501]},{\"name\":\"衡阳市\",\"coord\":[112.48849636578527,26.783613569970782]},{\"name\":\"邵阳市\",\"coord\":[110.6723832117475,26.81652287086792]},{\"name\":\"永州市\",\"coord\":[111.8565364154186,25.768488267811968]},{\"name\":\"韶关市\",\"coord\":[113.53420325850979,24.69848878771937]},{\"name\":\"惠州市\",\"coord\":[114.32029589634925,23.25504544231892]},{\"name\":\"佛山市\",\"coord\":[112.95925897403649,23.10116677189257]},{\"name\":\"云浮市\",\"coord\":[111.78042514904234,22.840400494105687]},{\"name\":\"深圳市\",\"coord\":[114.13138648919008,22.649563063468342]},{\"name\":\"汕尾市\",\"coord\":[115.57412892884373,23.06989642104901]},{\"name\":\"河源市\",\"coord\":[114.89746229844398,23.97971937124767]},{\"name\":\"揭阳市\",\"coord\":[116.04290004239446,23.304802704715357]},{\"name\":\"汕头市\",\"coord\":[116.7008461897183,23.35898625947344]},{\"name\":\"潮州市\",\"coord\":[116.75405548481658,23.854381508863064]},{\"name\":\"梅州市\",\"coord\":[116.13719397345734,24.15633544812716]},{\"name\":\"漳州市\",\"coord\":[117.38279760543345,24.41111215459575]},{\"name\":\"厦门市\",\"coord\":[118.04275971554665,24.675908246507944]},{\"name\":\"龙岩市\",\"coord\":[116.69341144552507,25.20284542644492]},{\"name\":\"泉州市\",\"coord\":[118.12035864630246,25.22984144365049]},{\"name\":\"莆田市\",\"coord\":[118.82439690138142,25.439653480972687]},{\"name\":\"福州市\",\"coord\":[119.1608285845262,25.99117532466728]},{\"name\":\"三明市\",\"coord\":[117.51188176216434,26.318292906961602]},{\"name\":\"南平市\",\"coord\":[118.16153136678187,27.306303151805437]},{\"name\":\"抚州市\",\"coord\":[116.3455359885574,27.487043655935366]},{\"name\":\"鹰潭市\",\"coord\":[117.01082360702333,28.241253742969946]},{\"name\":\"吉安市\",\"coord\":[114.91377151807418,26.957486660664525]},{\"name\":\"赣州市\",\"coord\":[115.046455717572,25.81565075681663]},{\"name\":\"郴州市\",\"coord\":[113.1544526703492,25.871927095452524]},{\"name\":\"新余市\",\"coord\":[114.94161795877827,27.79044654578371]},{\"name\":\"宜春市\",\"coord\":[115.04574494880995,28.306428044943356]},{\"name\":\"南昌市\",\"coord\":[115.9963824234495,28.664803351584705]},{\"name\":\"九江市\",\"coord\":[115.53225905704193,29.362905920276297]},{\"name\":\"上饶市\",\"coord\":[117.8595355766598,28.765755150094634]},{\"name\":\"景德镇市\",\"coord\":[117.25387030721845,29.33426823662448]},{\"name\":\"黄山市\",\"coord\":[117.85476357809696,29.969632034273722]},{\"name\":\"池州市\",\"coord\":[117.34517113140791,30.208089337922335]},{\"name\":\"铜陵市\",\"coord\":[117.93160431300694,30.926442655001676]},{\"name\":\"安庆市\",\"coord\":[116.54307680610799,30.524265461641296]},{\"name\":\"黄石市\",\"coord\":[115.02354597728443,29.924060229331015]},{\"name\":\"咸宁市\",\"coord\":[114.26967602231792,29.652174021136048]},{\"name\":\"黄冈市\",\"coord\":[115.2859016705373,30.65856897065683]},{\"name\":\"武汉市\",\"coord\":[114.34552076948799,30.68836237966767]},{\"name\":\"随州市\",\"coord\":[113.3850627838818,31.87891659924412]},{\"name\":\"信阳市\",\"coord\":[114.81374730587638,32.0309685135914]},{\"name\":\"驻马店市\",\"coord\":[114.07756451509235,32.896720987266114]},{\"name\":\"商洛市\",\"coord\":[109.82044421310393,33.77403373563189]},{\"name\":\"西安市\",\"coord\":[109.11839808451401,34.225257215515896]},{\"name\":\"渭南市\",\"coord\":[109.75732444226935,35.025913644359306]},{\"name\":\"铜川市\",\"coord\":[108.98695328111377,35.19235092947735]},{\"name\":\"咸阳市\",\"coord\":[108.36398776446165,34.84311348287181]},{\"name\":\"三门峡市\",\"coord\":[110.80049688104964,34.31818709571671]},{\"name\":\"运城市\",\"coord\":[111.1736679525165,35.19010372283576]},{\"name\":\"洛阳市\",\"coord\":[111.87577573098216,34.33379926109848]},{\"name\":\"平顶山市\",\"coord\":[112.80931281928427,33.759895800153096]},{\"name\":\"漯河市\",\"coord\":[113.83505724178012,33.70034266174508]},{\"name\":\"许昌市\",\"coord\":[113.78762484088509,34.051835688452435]},{\"name\":\"郑州市\",\"coord\":[113.49619951867594,34.61181797865449]},{\"name\":\"焦作市\",\"coord\":[113.13404280173008,35.134167097471625]},{\"name\":\"晋城市\",\"coord\":[112.7495732073233,35.63186423091449]},{\"name\":\"长治市\",\"coord\":[112.85900842873183,36.45872910742828]},{\"name\":\"临汾市\",\"coord\":[111.49379787924448,36.22810800777857]},{\"name\":\"太原市\",\"coord\":[112.15628804033796,37.91704444063036]},{\"name\":\"吕梁市\",\"coord\":[111.31901105774872,37.712740463356496]},{\"name\":\"晋中市\",\"coord\":[113.08199599739676,37.36532613794343]},{\"name\":\"邯郸市\",\"coord\":[114.41824047234618,36.530119932543315]},{\"name\":\"安阳市\",\"coord\":[113.88883283163116,35.7797611183252]},{\"name\":\"鹤壁市\",\"coord\":[114.3654094911545,35.75770487428472]},{\"name\":\"新乡市\",\"coord\":[113.9184107718167,35.348471214026716]},{\"name\":\"开封市\",\"coord\":[114.52801677500626,34.61371216679872]},{\"name\":\"周口市\",\"coord\":[114.88509782391864,33.69999759722657]},{\"name\":\"阜阳市\",\"coord\":[115.44595951398213,32.98060371610532]},{\"name\":\"淮南市\",\"coord\":[116.68941991880993,32.79972275772595]},{\"name\":\"蚌埠市\",\"coord\":[117.38594715783302,33.106729536033896]},{\"name\":\"淮北市\",\"coord\":[116.69651711889378,33.69527529383458]},{\"name\":\"宿州市\",\"coord\":[117.30175405886838,33.943330421260015]},{\"name\":\"亳州市\",\"coord\":[116.12410804185097,33.46769392946132]},{\"name\":\"商丘市\",\"coord\":[115.59575176872548,34.28339840831147]},{\"name\":\"菏泽市\",\"coord\":[115.53631974831816,35.197319393220624]},{\"name\":\"濮阳市\",\"coord\":[115.3070485514902,35.775883510964334]},{\"name\":\"聊城市\",\"coord\":[115.8870069012884,36.40529594548765]},{\"name\":\"邢台市\",\"coord\":[114.74259008644859,37.251396750084155]},{\"name\":\"石家庄市\",\"coord\":[114.56923838363613,38.13141710980106]},{\"name\":\"阳泉市\",\"coord\":[113.39216149668508,38.09075470547468]},{\"name\":\"保定市\",\"coord\":[115.261524468934,39.09118520781398]},{\"name\":\"衡水市\",\"coord\":[115.8182936677897,37.715661598187154]},{\"name\":\"德州市\",\"coord\":[116.4582273790399,37.19372347888644]},{\"name\":\"沧州市\",\"coord\":[116.76192710911863,38.20240042039232]},{\"name\":\"廊坊市\",\"coord\":[116.50410772133856,39.27896741763884]},{\"name\":\"天津市\",\"coord\":[117.31988934444873,39.37154482470619]},{\"name\":\"北京市\",\"coord\":[116.59734730757869,40.237112944270976]},{\"name\":\"张家口市\",\"coord\":[115.1823606483226,40.83732566607167]},{\"name\":\"唐山市\",\"coord\":[117.8693184261954,39.71862889477249]},{\"name\":\"秦皇岛市\",\"coord\":[119.30467355367742,39.990574652162564]},{\"name\":\"承德市\",\"coord\":[117.16275671911026,41.36623845548547]},{\"name\":\"葫芦岛市\",\"coord\":[119.9342336210531,40.5628822626519]},{\"name\":\"朝阳市\",\"coord\":[120.11853493535794,41.471852354885755]},{\"name\":\"赤峰市\",\"coord\":[118.50943546234379,43.25452976059767]},{\"name\":\"锦州市\",\"coord\":[121.5167549323861,41.45933087433065]},{\"name\":\"营口市\",\"coord\":[122.58571915054674,40.42093503997384]},{\"name\":\"丹东市\",\"coord\":[124.33549382902183,40.46369290272115]},{\"name\":\"辽阳市\",\"coord\":[123.34064798039414,41.152331397771356]},{\"name\":\"盘锦市\",\"coord\":[122.06718005354679,41.05573599862555]},{\"name\":\"阜新市\",\"coord\":[121.93889757908204,42.27641773244204]},{\"name\":\"鞍山市\",\"coord\":[122.78904432242356,40.77781183142038]},{\"name\":\"沈阳市\",\"coord\":[122.99508899709724,42.1162195010079]},{\"name\":\"铁岭市\",\"coord\":[124.23100515588399,42.72666083611828]},{\"name\":\"扶顺市\",\"coord\":[124.46027188217573,41.82955407638859]},{\"name\":\"通辽市\",\"coord\":[122.0729370657937,43.90889130864869]},{\"name\":\"兴安盟\",\"coord\":[120.79456431092532,45.92003249442161]},{\"name\":\"白城市\",\"coord\":[123.10619907715235,45.25475749267784]},{\"name\":\"齐齐哈尔市\",\"coord\":[124.5462214659102,47.55395009317394]},{\"name\":\"大兴安岭地区\",\"coord\":[124.50992855161529,52.18438447846694]},{\"name\":\"黑河市\",\"coord\":[127.14721400335922,49.25080134026901]},{\"name\":\"大庆市\",\"coord\":[124.40329830095243,46.401048760966745]},{\"name\":\"绥化市\",\"coord\":[126.5214484055605,46.76992452194825]},{\"name\":\"松原市\",\"coord\":[124.21244334807682,44.75779381338502]},{\"name\":\"四平市\",\"coord\":[124.27839350328821,43.52139065090318]},{\"name\":\"通化市\",\"coord\":[125.67392830706305,41.91771808663852]},{\"name\":\"辽源市\",\"coord\":[125.33529527643432,42.758340204944986]},{\"name\":\"吉林市\",\"coord\":[126.83350281902375,43.60730120049175]},{\"name\":\"长春市\",\"coord\":[125.53597875970374,44.24624314701737]},{\"name\":\"白山市\",\"coord\":[127.16780160322108,42.093893880305075]},{\"name\":\"哈尔滨市\",\"coord\":[127.39125008786029,45.36200668820575]},{\"name\":\"鹤岗市\",\"coord\":[130.4703811258197,47.66520688940109]},{\"name\":\"伊春市\",\"coord\":[128.91240831703635,47.93833794565277]},{\"name\":\"七台河市\",\"coord\":[131.2677920224311,45.945099776108584]},{\"name\":\"鸡西市\",\"coord\":[132.38059153660274,45.722934218318535]},{\"name\":\"双鸭山市\",\"coord\":[132.3184817002743,46.65813679030265]},{\"name\":\"佳木斯市\",\"coord\":[132.26174446608726,47.17569713691394]},{\"name\":\"呼伦贝尔市\",\"coord\":[122.3210739998419,50.18176996070858]},{\"name\":\"孝感市\",\"coord\":[113.83749892135485,31.11757234692128]},{\"name\":\"贵港市\",\"coord\":[110.07354588052804,23.380735604767374]},{\"name\":\"黔南布依族苗族自\",\"coord\":[107.30931767543106,26.2976919432269]},{\"name\":\"宁德市\",\"coord\":[119.52482556634342,27.013151692716413]},{\"name\":\"温州市\",\"coord\":[120.30037042732202,27.8699145504001]},{\"name\":\"台州市\",\"coord\":[120.88886782713843,28.670799172772313]},{\"name\":\"丽水市\",\"coord\":[119.56796851966463,28.170268394477755]},{\"name\":\"衢州市\",\"coord\":[118.79479802644406,28.865874397158763]},{\"name\":\"金华市\",\"coord\":[119.99381920686633,29.093455548185744]},{\"name\":\"绍兴市\",\"coord\":[120.46546691682343,29.69382513836818]},{\"name\":\"宁波市\",\"coord\":[121.42142987830871,29.70001162878972]},{\"name\":\"杭州市\",\"coord\":[119.4405685790891,29.87218307296989]},{\"name\":\"宣城市\",\"coord\":[118.68748382914703,30.628143499626418]},{\"name\":\"湖州市\",\"coord\":[119.98261306633574,30.7945175862809]},{\"name\":\"嘉兴市\",\"coord\":[120.83889215988998,30.67538495499343]},{\"name\":\"上海市\",\"coord\":[121.37534147322967,31.25628247908459]},{\"name\":\"苏州市\",\"coord\":[120.6906182622391,31.381280695137775]},{\"name\":\"无锡市\",\"coord\":[120.32182300914366,31.54113306724517]},{\"name\":\"常州市\",\"coord\":[119.61953292830165,31.611878565375576]},{\"name\":\"南京市\",\"coord\":[118.71890548838064,31.910863187910323]},{\"name\":\"镇江市\",\"coord\":[119.42349332902813,31.97942313430778]},{\"name\":\"合肥市\",\"coord\":[117.30651975617157,31.79407863049138]},{\"name\":\"六安市\",\"coord\":[116.24668220575353,31.820846193819513]},{\"name\":\"滁州市\",\"coord\":[117.88422385307969,32.51792621904418]},{\"name\":\"泰州市\",\"coord\":[120.03124303305091,32.56503102346783]},{\"name\":\"南通市\",\"coord\":[120.85599446760912,32.18496706099728]},{\"name\":\"盐城市\",\"coord\":[120.01812490612667,33.54219948734023]},{\"name\":\"淮安市\",\"coord\":[119.0749424205415,33.39203631772854]},{\"name\":\"宿迁市\",\"coord\":[118.45404943216346,33.666258719120265]},{\"name\":\"徐州市\",\"coord\":[117.77482249295966,34.30847766157078]},{\"name\":\"济宁市\",\"coord\":[116.74147276546373,35.27488504351119]},{\"name\":\"枣庄市\",\"coord\":[117.43359942491492,34.884162021736]},{\"name\":\"连云港市\",\"coord\":[119.01553213785074,34.54316517587849]},{\"name\":\"临沂市\",\"coord\":[118.31478835349617,35.28173079028279]},{\"name\":\"日照市\",\"coord\":[119.14265350444272,35.54479073199592]},{\"name\":\"青岛市\",\"coord\":[120.27779044405756,36.3464117375903]},{\"name\":\"威海市\",\"coord\":[122.12963327195605,37.13879077904251]},{\"name\":\"烟台市\",\"coord\":[120.7689567423966,37.19772002195597]},{\"name\":\"潍坊市\",\"coord\":[119.02178548592039,36.49292234053931]},{\"name\":\"淄博市\",\"coord\":[117.92936024367185,36.60871347163638]},{\"name\":\"泰安市\",\"coord\":[116.93810893944303,36.0423330118612]},{\"name\":\"济南市\",\"coord\":[117.34560282551296,36.769574973846304]},{\"name\":\"东营市\",\"coord\":[118.4915054457184,37.52194690335787]},{\"name\":\"滨州市\",\"coord\":[117.67610299757533,37.4439597758601]},{\"name\":\"昆明市\",\"coord\":[102.93100245594789,25.481300763922075]},{\"name\":\"玉溪市\",\"coord\":[102.23080854291823,24.156168324611663]},{\"name\":\"塔城地区\",\"coord\":[83.60908162840168,45.3721852373893]},{\"name\":\"张掖市\",\"coord\":[100.47710030600572,38.704239320458385]},{\"name\":\"南阳市\",\"coord\":[112.1400670951149,33.03033276715801]},{\"name\":\"扬州市\",\"coord\":[119.48949608990988,32.80956776339646]},{\"name\":\"延边朝鲜族自治州\",\"coord\":[129.3577692895626,43.24968794080283]},{\"name\":\"牡丹江市\",\"coord\":[129.87240796405672,44.7073040108322]},{\"name\":\"澳门\",\"coord\":[113.56289691515346,22.14602596262204]},{\"name\":\"吴忠市\",\"coord\":[106.76894508116403,37.72566765880316]},{\"name\":\"来宾市\",\"coord\":[109.25592217010114,23.86346274681084]},{\"name\":\"平凉市\",\"coord\":[107.0708132782897,35.30329631658711]},{\"name\":\"马鞍山市\",\"coord\":[118.27245878467022,31.657727937739004]},{\"name\":\"芜湖市\",\"coord\":[118.32992684415504,31.081688223101658]},{\"name\":\"澄迈县\",\"coord\":[110.04198076060266,19.694955078668105]},{\"name\":\"保亭黎族苗族自治\",\"coord\":[109.6055304964257,18.6101488675304]},{\"name\":\"乐东黎族自治县\",\"coord\":[109.04051999525574,18.643137437909203]},{\"name\":\"儋州市\",\"coord\":[109.3431358337404,19.550974957403195]},{\"name\":\"定安县\",\"coord\":[110.38744429685676,19.47557074114284]},{\"name\":\"屯昌县\",\"coord\":[110.00574767630334,19.367175093044388]},{\"name\":\"白沙黎族自治县\",\"coord\":[109.36860737761768,19.214416393082217]},{\"name\":\"琼中黎族苗族自治\",\"coord\":[109.86691465937548,19.073671135862682]},{\"name\":\"东方市\",\"coord\":[108.86903802405428,19.017352815445214]},{\"name\":\"昌江黎族自治县\",\"coord\":[108.9686431884767,19.182594167127824]},{\"name\":\"海口市\",\"coord\":[110.420654296875,19.806565564640795]},{\"name\":\"济源市\",\"coord\":[112.38051465474433,35.07958362422394]},{\"name\":\"五指山市\",\"coord\":[109.53595187364496,18.832908264613966]},{\"name\":\"大连市\",\"coord\":[121.96662235866603,39.444150542439914]},{\"name\":\"文昌市三沙市\",\"coord\":[110.81828537536748,19.756501444162936]},{\"name\":\"三亚市\",\"coord\":[109.38424600793707,18.39186315877128]},{\"name\":\"万宁市\",\"coord\":[110.28485046979574,18.860240588635115]},{\"name\":\"陵水黎族自治县\",\"coord\":[109.95577603229562,18.594712684620465]},{\"name\":\"临高县\",\"coord\":[109.71915395436967,19.79420403032508]},{\"name\":\"琼海市\",\"coord\":[110.41650700703043,19.22315873149372]}]"); /***/ }), /* 45 */ /***/ (function(module, exports) { module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAMAAACJuGjuAAAAyVBMVEXb29vV1dXr6+vm5ubh4eHPz8/e3t7j4+PIyMjo6OjY2NjMzMzCwsLS0tK3t7e9vb3y8vLFxcWvr6/v7++rq6vu7u6/v7+6urqjo6Obm5ufn5+0tLSysrKoqKiPj4+mpqb09PSEhISHh4eTk5OXl5d4eHj39/eLi4tzc3N7e3uVlZVra2t/f39iYmICAgJYWFhSUlJvb28rKytdXV1nZ2dERERJSUkJCQlNTU0/Pz86OjoPDw8UFRUkJCQaGho1NjUfHx8xMTH6+vrCWIAcAAKGw0lEQVR42mSYiXbbNhBFpcSUYREECxblTqnUUslavMSu06ZL0v//qb43A0s5LY7lY5kEMMDceTPA5OHhcVEXuUmTJJlOJjcfP37Q9tOPP/7w40/4/RO+3H2cTaZpXr98WZTJZDK7/ajt9ubm5lZ78K0Pd3cfbyfTpFq0pUmttSbJkmyibZ7ZVfDJ/Ob2lv1ubyYzHWI2QZe8KE6LVRvqujLZXKa4w5Ac8Wbug+vX/2z8fHaD/8K0H9jEMj5O7NA3X07r8e9vbW6S6XQ+nyaust7Wj8t0isFgpth7d8cu0u2ORszm0/lkPp0mxherMVSVy91yvF/dHw/jonZphs7sfct3J3gz7d4eFhYGzrBuMV+XMMdTrKIcH556nyQYz+2etk1vkyneZYvLxj6a5SmEtisxOhq3BubixQz9UmPd0OXWGJOmqUFLMAKN4AS0NDG5M3hk+zY4vudNhq7GGr6nb2b4ezqhhXdoOm2WzGFghjfLcKiLIoR60+yCq/Iyd2G9//T5r0XPiW01hAqOm2KMjMZzam6TDH6Db7Q7M1VYLnfLoVm1fWm9txjI5l1RtKfXrw8Pk6+f/jm1ofSwNYFDJvQnG7BCI1w//ijuI1jNX58bm8Dki8W39JZ2UbZkl1PX2jRDS2EfTdNdMWGVY3mEim6YYZhbugx/p7YP23XdtG1hE6wG0HFQJQcze7v8tTbcqzuxjU0Ng2WZWa4/fd01iz/+XjufyLqTPMfud/u2JKack5MJWWI6GuZVv07B9VBX2FVvbT6Mh8V+7PIqd46YzoVLroEAlLtP+2C4KpJC+/G50TWC8P39ufEJDEhSG7aPm0oGwGN5X4Ios5tzs2k6S0NpHHkxeJHfQZYv+9Dl8JK0nC6Wl/ibYKW+sCTLu6KuQ90MXQXHpmonHM8FITanswiWgC9gIS6ShDtdCQll0Q+O04CHZbP98+G3pnCV65fBKVdo2DgJKVJGrmSdNKLsKgtLy7xrmj73BmZzoKoYFo/H8x9/TE7j49OuwBNYapI0+6/v2IQXDOfGz5/PfSqvqDrdUdp+wvN3xVINmqTLCuvgEmkM0RGD0tBItNNSw5Wzwe55ZmwX9hvEQJFHibmCNUM8Gz9s+2RyFawrWLezqRkWT3VXjH/82nsKlmiL5SZuRmegBRgwUhChEhogBjSLEttWnuqQIl7rxer5yyHHNw6QWxFQ9Sx49fXrpu9MQiNFyPhrxv3nMjBOccjBkqig2+zX4CeqEvFUcR6/PeKBR9RRESEFdDlgJY+iWnlo29B3hcsreoagKlzZlOIWqlRsK6tiWRed0i/4KwYYjSPHqEfjvNwXxdJJeiIctpJlG5v3oT4/PCJjFH0xaDRoOMQhp5iZ8S7xQ9GUHGc8NqzYLWEkSDUSl/1ivXv8+jrZtIfjue6sNx5vl/TdB/GdtitYs3nSvf153nbTWQx8WP2BuZLZ8uO7EvCD7GSHVKQKHxqmNoGm+lCmsu2pn6rVutm+LIbjIrzv0iXBahbOSuPrdZmpnkbjJEnLrs3T5ePOVcXz4zO6c4+5ubLybhvoGIGAGChUEtj0VtyormUmSqkDedHskBfWVgDVLAX5IHNJxq0Mo6hZ9OUsrkAlLStgqAtG8mvG6ZtdbVM6RbMK2fDF67fjqpFgjsyKyAiOoIv9bL9ZrdYL+LmyxgATNYaIMsAPVqTHll4QiUmK7VYxgOBg0dRUXTDzjXDrbdFRjuSLSX2ZSsYFYm798rgJHVTaKlccTgeNiRT8S4QkUCsDk1QATd6uC6o9pIloubq+/3S/mISiaF6QakEVrM1UE0jLFSwqkiS48GXsOjedkSh6/PtqJ8aGkEURCXZK09S8GK60aTEWcBJXJBmPP3NyVbnleYQSe7ph9j1Y3Chr7Ka1QPqO1tG4aJduWhIeizIfzuNa8mjcC8/Nb1a5yAu2nDgJXnCO6qj6OnOtFxSkwmnWdb3dDj6bz/mOhqspu00TwL1zQzMOiMDSSIYiXRxOwUodYXZOGFFHdu2hsBA/+pquwVDu9GW1WGLHtcqaKN2sRLRXJnb0y/Xzeb+rC0zGNCl5U1E3y8pCI6x2iRkqMqC1IOZTzRK0WG1kuSTaal1LyKBhniz1iYaLsWVoT6vBMaslUuQKpmyKaszZmL1zRhYjlRckompCb4EnxjFM0Mvjvg0T51wxnpuicBIyVCNmtytYkumkHvGr+wAL5jdRsO6Uq0iWFrLkSip46zLaNqEj+YcKxdT0p9fGIRXnIBxWaoD6PAdYvy0Yn1i2FtuXEutGwFrVBCtiT7PkIdfOFHt2ZbU6rfurOCHTGWoGKqIkOk9ERgumWHNLAFZB1JUJCVTUoa9f29wLjGx8nckae9/Vy/qw2i6GHgWY1cCnh7JYY3mbMNvgkQAjIyK3bmrHcE64WjDT7d/WbYEYTwkWo0jycapgRbQ8SurisBjv91uoG6JedWQuYBXUB63qlSotAq+pMIE+ReVH4/8SmzJNFI0z78ZJCS4SKWoDD6yAO4ttBpx0jZLFEZWk1FTBcNEak7F03vRGk6vHMH2zHwo3sSX+ehk3TS5d1XVKlujCBzoQ+YYOGIucy7nRCuvC1c9ClpYuAEjBSqpEikkehUSTNUXyxHg8b7f7AqwwDCmmpuyd6+rzGukhvYAVD4UiScjd25YaGK376f3ZTJ1eH7tqeWyW/lJUs5fxCKDmXkOG9Us8zF1TIh1q+0S0aRZPpziAHnufSo3CFutARgHpqkIz7sbFUEhscD8gRhFcq7FiQhmTHKlLLerbwbngU269zcP5vCkgzbEqjwXBXDi9kmVs7rq+qNt2s9q+bhehvKawQcsk6c3uYr0ipqdT4ylEcSflIcFOTEW9msRGkdb8i5HFsmED6YGQqeork1EDM33Trgej6TtWXFJZnjoMzjEswCp2jSvLiUEE1a9P59pkaicRULRiGpSEM4P3mtoyUWUXsH4kVdJAFujTFskyOMOpdbPJ5dzL0Cld2P71+e3UrgNTSu76YTc2bX04LxDGmEDj5aPMQlwJlnPHRZVNZGptOp7eY5j2tSi2Y5sTB/Kg0CDt5Pnw63PIRS44MA9xGFHNgWmIN5VW2UMe2WDe8wJxCyXRpcSyUYJT1NW1h3b7O/JuDeEygIUU0aEJXcK33FDC69qYcrDH7XiukcC43uXLa9tbE7m61sdSSl3B8tbCfDf0jq1jIqbIYTpb1/S/CrF0F6B0Rilgy1LKn3dNY7qhnOTBRmhUbpjEBRqd0eSHgfXQ92CRWdUlXlVYSJrmfa0C1HDbFibl87T0vgorCuqE9Wq4/+eIU9w7/VG0VBnY4CZsWr6qMDdiaqZugWApV7/8QrJ++qBIRrJupn7OEktczP9FiQFZoHo9bnbtuFuGgntWrA7r3bg970KlYF3IimBlti+enotEr2bYLuyIF3x9rsevY2/IiHIlkoUQKja/f74PJYP9+iyCxVrQhySyeKssmnxxrnOGha7nXTjVFzy/Wrc5jL9/++t4Wq2LEsobHTiN9T5EKjQ8214cndGQ9X7Vgo4iNI/PdV++g0UnxjMlJQ16EesDTIQKoQdNxhATJtEe+0XYNgRaU4w2JZg9M1aWQ+8Nc7fnaKJMKIJcX+eJFOWSHdlVYZQrK6m1QlNRvS5gKVWi9yb3tl9axM5M6lVqeATLlwHIs4az1lbNwvk0BTDAcPsw2su+KxmXqykVGiSj9QGVnjhI89oHKBaxYnuXLMVQKrAZBp8JWDMmnus11xyW5523Un3Kudm4CjvYPu8bJwWpnuSFofcjTT+cz43RBRN8Ns2tU9GD5+c/X1hwTyI77KaJqKwf70vVQfbkkAqtkJmsrXIVWYQ1+fN97xND03UeVW08l4xFjxensWn2r7hJbWrEhrVylmdBG0tcf2IBL+1aNHVtc9ihEBx/Ozah8rrSqFl6C0aGGPmSCVGkdKCQMqX7LksNq3UdmnvBDRNedZE5Fyg69AG6yEYkK493FWkJLOptIcXkpXQkNaSLhqMKl80KNo1SeMmCeuGc4lizpuARLHn0HhJ41jlvCJbJ82LcOKxtAk59ePu7NpiSrlRpQbtIA1UG6l6/DJZUwkXccqLyLlgqWTi/KT6aw26nFutmcGgCi/pHh2M4hlKSSjDBaN6BWLcbV5CKK1jfn5W75dOXRUX/Aesr9DCNFXcZTm9PUj7E+yqBJh7vbbGv6MTZ/8GazSs3xVQqsgJ9avpjIPFqNc1+P8CgyUkh9S5smrrdvmzvD8saCb2Scxvd8X4IKGrPjdYPG2uYqh/qZjy+/fl13Cwrj6UqWmqoeFZYQBOBqkrrio6IxEEowXnYnU7QVO89mYnkwu5quRtruYc6PH5+2Q2u9NY5zIJmUf+392ufCcZKFungF4AVkyhydleXmH8arRK7MLVgW20/LfFEB+APZIONt7YlT77USoBFJwpYqV3+9U+RAERVqosaEAqZPTHerf76tusZ+CxVKUFIhVpiKVg8GF4K7g8qWdhbDKBgqYP0RoyVFpeYTVTE433IelWvC8vD0RWs6EzjwuO3bejMnODETK2DYck+D9uvKyZCvbrBOzQdH46fmHppEs6lC5RnkVib824sms0TCgqYzapknYEw0wPK9QzKLrL9nmeC1ent/rRuBwfxICSREV2RKYo0yoxcFEjZziQ21Ivzpy/n43kf8nhqvzb6CHPr66XlWc2Cx0qv3+f6gul3T5+2nfUS53pr692yxQkh8DqyxB3loq2bw2HZF21XMmjD43a/Cs5Mv9taca2SERnC5HmNJCpayoMf2vsKEt8DWysMavCydwQrMx12QZzowm4pYGEFbnx4dfHK/dKwyzMSMJf5Utv88cZExQgxPBcSLMGKoqVF1h2umWL2FDfNkeIZEeQwekg1i3eaUybpWEbOIf4wY7ENy7byia4+Jigt+H3eP//5fB9SIee7PM2hMuSm7WldmHhDoDWEdNYawGxskghYFCp5Q7lKcsqvDqeXwMZXq0EqfYClZmsTspRy5m9THX59en05jmuCBYW5gqWXiHnoNA2REjxH87xmCUO7P5+adn18WwWgMf++m8oWHMlbcemTovl/2bYW5cZtGOh0aldXy1TFYSVSL48se/xM4iSXONe8ev//U8UCEJN2yjbOTWy9yOVigYXrVnGLgVXsXz98mbJMW7B5tN8NBoEQJd6idNaUJM9cNZweekKXC3cvz1UGY0VKhDJEUEs5byxTpM6j1gkkSfwd/YB5GdiiBCHI7MUiJR9n+dq0C2xnORSmGfm3L4d0gYnE5IEMwCzY1rrnkWdUjz2UhGiJX6FiILFEYGFAvdMRn8CiMDX3JLNg0MYVEs7CAnGRSxMascBSd3K2WhZTsXQ+lTacxLw8XR7O1fx3gFeGLjUKIXnlm26ZL8SHpNRPyQmHA3m2SulOtHpFL1oFWRRX0ZNUykrKEAqt6LEyRKk4IkvkJluBuVlvfl5eflwPriQEjYJJ0kOQcO0NcmgWRqKbEtLdDT3iplsiHbaHdVXzpSZxsCjDR+kIxSSXYwxiheIPVdfd5ejgB+DdtAmHpXMZWyqoZri6FKuRCHLYb9eh264eWGQsOLmJwOKpovgfE1OAdu1Q/c1zcbSSMdCmwRKriC+tJZsxIeWUpmlSvTwBy6T5hLjrePPWJlcKrDjLUXcwJPPN2swjNwKy3ygSErAwpN5AWIwdCWoe+wYAl1NHYCk7YLNEgSgCMzSF8UaAxRpTgYGNWxxeicwTqWRFZKnXVLZp3t6VU3WRUDiLChEfSFclNKTMCOeZLDozNRogpBRY83AiZ0AZSy2r6D+IZ7oQK7Iwdni8uXk5r1rIEi3E40dbORr4zDSSlDYwE4spye113WnZsEovaoqMyCsUWziaN3EC+wUYkzVl9+YTgFDpy7/+7uqyJhUFq8AWtKJFhhdjLew/3BD9ArSWbW1q45uEi/f/Byz8URxPuna2HqxtaipYsuTDUXC7KLymo0eA4Ea4iO4ku8CFbwpcuPArWztfT8q6+nHZWTCWoiLiSmUFWwRmQESfSB0flSwmrAisPwRYYzRlhKL8bqnsSgfQfYwF84hbiCCgR8iUUe+WNE8+icAaS5Ocb9TPnWtYUiusaGiamS9zEB5T1oTlpTTIKLIIQo0rFvQWpk/7GvBMc8TB8WQSvZMe9VQa7IeAvpWxImVxEOcUrnSnn3/dv789BFOkoDkmdL4BpKNm2VnIrxJpHVgocwSssL0+2Drlv6R43DplGCmuIPy1uKruNLgO4IxKHwVNs738FUim1/WyQ3mMtBXEfplqZQJD3GXrgkXSXTNrSgoTQ6ECa6yyT5DWVberrnN8gwu6EuplMDC2y+nIbJhg/sWHqVeXuApXp4ccmqb2zWRZ7S4fy5TKuNqKpUJWgIWVYdnvGvGl+LSoZEFiRWD9IcDCUujhnBdO5kVVYv/LGqkIjnEHoNLBgJ2mFW1BV6I+B5qNJW/AZZ5tfJZlV/8B1i+Q76bA1kb5jyGxGNt68BiiuJNQJziPCAyaS+Aqnc5GXOHGcKpF2ZkcASYC6xcB1Xg1wt5MZpLEjGvX29D3q247HCo6TsU6Jgqb3K5PNsvquii5zcW4UBvrr3+urfb2TGklTOcLlvkjrLTzaRZVlyaD4oprxTVtzx/Hql31dz33wCTs/+LxgagUpdXSGPrfuDasiLMKGI5aixdkiVfFSmOmqofVe/X0cHfrCugsruXwOXP/kIk+k1UT4Gt6KTrWdA59R6SsTGZsNdkd3292NVesY1L3TTuXIrAoXUUokYFTIrYhFEZcYUN/+5T/o68zTX2NMixbf7o60HCKrPiImhy6kiCvOW3EldZa8q1LaeMqyUj5QnVRNhULOfXelGnKwNLyKv7DjbQ+44WRdjtwvqHoz85jrASDsDxbaVhNnrdvEcGjiTTRDhkEpDwvK2e9NcZ2xz6gmk6DhRWWqLG7nfdV3ZCuBTR8wKc3gRSI0hs4pbrt4RvSQVIy4mYVULYMTveRiI4lPunIKdfn21PoX4m3TMrqanTrjK2dgcQiaNXWr1Z3H8/bFg04dDVxa2QSgA+xWmeixiUOl/0PwixfDDjXrsW+J58e/BZtnphgKiRN1VegRkv8TbbO5PXyft4TsBCUIt9oTNOSM7pd/FRqk/LQgPhXYGk34CwCS9fzinihJ5VJBKwm39eCYyRl/JOnsIA14ArMn4R9QEBT4nS1xPRPhbOisUMsUzMSpVnqfD6VWn6PdgxIrVzZfBpNCNTGUxR6BTaKUfpYEyT/4p2NJ9X9JZcDCwNumkGxHvemMTkqCUXtWtdwWMI7lNc1lBY93Q7OcWkqKVvb+mW3ZpiJNqeNYoaPy9HbMhU/UwuTeMGrttVxfdVlXLhSBrObzfXmfH3EahKKWAshGmZIJ+Vz/JfM+M3b63Pvm9oQtnTTjqpbEKJJstiMefX2unM5OFRIFYHY9GiDikBiLMmJIrAKFx46Z5u2a0rjdpPL08p7UhtjrZuXPAJEeo0XSd8gNADodDoB7TcRWVrDIsKi3YzjZaiSQR/uJixhJMS3vgArVtdHt8wUJNPt2LXJm0hWckLqJ5RTXnPmo8/20jITzY5pKHavf/mE+X70EES+J1s1Q1WkuAyxXzqwlY/AfcHMhRW0vwa3jTmIlxOSZWBJml25skSgY5WeObRTGlaxeWktyYyXTQjQ6gQM1/hD15VzpiCuVqWWorv7PqCNi6VW9OiUGnQXsCO97BoKmiOw6sNm93TchorQXLCyIhqLbRWYELHAUTmtno93u/22WvpaLTM1gVgqAVhgMMp5ROm+XXatON4oi4IOM7810vob7wuoAjIFo+Le2+2BWJmMunb19+TYogSsDtBIIf82dGbTcp0BWBgztGNx8VodHckIJSh9AaS0y6BdYzgfc06yBFUYn8CSIn7sIMhtTpSVqxGNOweVcmqYH/eNOvMStrWlMGnnMkHc6L53Lnh2WrlnWM+OXrItx0LJ6EpfKPP9qaocCos+1CTiBsw0oRZ58HUyJMiDzETsNqHkdjtliLRxtNSEIaibdr37+XJ/tzkQV5g2LP3m7lQnrMGkQATmmsJqIfM2gz2gPdS6DDIpHOVzMngqj94m5a+m2h/vqCCGFrE0RR8HwwqYieJV2+nR5FkFH1anfuCvNyxi1AVtURutAkv0iP37ZtdkWS61t6YgOq577vP/2vDATMS2Dg0chtsw7bC72/SrzeP7pJFsTzMzdT0iswhjzX2bX8lKEcB/4yXVWEiDm2aQEmqG/mkwztgBKfevIU9UGymusI6ySDKJcm6SxI4oy45fYhD7XYB1Zc9VwnUcPBXHe2bvuakXkxFYiU+hZpxLWGnGggXuYl2lU+WJtjNUwYOAiv2v3xAI644+gggwG28KQx8p+lysDngpmLIGn9E9K1qwiqbarskV7Fbd0J/63f39j8cu+PWmG6izsknGzSGlBbBnfR1K9PhqWw+uqiMCC/V0Ei6tRtU8q/36brft+i60dknSvLaN9FDjqRWUGu64v89zN7vvVuvWWaR8uBhPpwALpT9tl3d/X74T0iW/TH1GkPa3Vtr8MSQ+Kx5m0pgFjVVwi/Oy64fKd/tJ9OYEtEJWMWBpn/HQJJOYT4l45jQPyGJc/YlIMo3uiDCSNnIm1ce5Kq9ipxefGSskJ+L1ixowtQkBQx0MtHgrsCZz22VT3iUY6LXiXo/cdGYhtIxIiB40/F6aKCa0+J6aocpSGuWyH5pCga7AEt8wD4b70AVX6OjXKdDNIigDBukD+h0F0oVVTUme1gsEWX5zvbvb9avTpgvr/uly83Y+3z8+PL59tzLdOtShywYHImJlLbhSbLHEljyhMIZ0/6kKyOmJQqhH67it3DJ0+8118L7NRJhHYEZwKTKbmr8/YVxYrXyprs0EkzxfMMfx5gTO7fP1nRU3ARaPIdD2fcZb57OvHiFB5I46P1OiuDn8UFd5Y7wlvGoCKtn5CItI/qgC1Rs7lUdG5Uk+w69jmylLX7qCuCAjIpXh5jYs+8P8X5YR/qXAgm7Rz7LbnCW5K+eaucNPZMq9SssquYqtdxKHchKVT28H6F7pZGAHUrZdyERqAYhg6jy1/Wod9sfHn98DkpVIWKLbZySw2hyV7NHMYeP83zW90RWXDn8lWWtNIXBhDBC51OEnSSvn2qoj7tr/uNzw+OjaNOJqhh9tJ8+IYRdS4mAhGweAhUyNsBrW6+54f9qEmjIvd9jdXm8HW9eNC90xWOlyVjUd2wcwBFoQS2BFGqkbtntfaiIAmp9LXFetlFS7bu/SOQbVryrTuPWJDH7tD9FoiE/L6aVuBzHGXJoa58vMpfizwkoB9RVZ0r4+3/b1VJ6ZsrsvIjx2n7P0pcKhGnmMmkjl0yZLmx1D83PvS+YYVbyILG4D9EXa+EKbPsWoxt/phucALp94JAxa1e/v18GJaF1QhFTVepW0D5zHRG1JplB1fL/cvLw/bvxYGo1fm/yVUn/PvShz0l46G3hbPhC/MiaekM6A7oW0MiYZGYsrk1m139wFV9fWhxCG3TOQ9X7tQYgirYErVSzc28vmHIAV8xl5haaFEUeUFLb9883907nz8LF/nE+Dh3VjrHUtvv8gmkm0TBy6Bgi6XI9NwCplXR1Pnr/+g1wyL0QKzXSi/KEaAqp5QKEPtg2HlQWwFPcSWwAxbTengfIvjmBgBSK5hDWMTqQWAwRWKo5RNMxufao6hoRJxBXmnH7GPc83xjCO+2XECl3RVhZphb7HrDciFNcgXxoDdrP3xp5qttmgtGQpOLpNpeGAg6iCnqT73oy+GlU9dXp4fv6h60q0GyZiYPsgYIhrv/gZ37Gf7Zg4F22OnlAo//9TzEjyJlxbbtrE2Z2VRtJI7UrPyvaaKC+783kD2T5pKcy/AMsCCdDIuPtzU6RzLR5OaVNrrrTbYKbktodSwZ1VoWTPGb9JDiKOoF/OItiTrM9BOM5ff+76LJVrP1ksp7DA5QEwBVjqYGz7VIvGOC0okVJA/bo+Pb2c/jgcD3/++ie8bMyEfxICXL6odoy533JCAafpllWy7FGRg9RA0SyJLQ84YxhNjzZV/Yo4o5aXedZovYrzPs/Lxd+BpfGTPaBL9sLck2IOyKPNydeN+9xWXJzdJ7tZjqgHKNMTRBgG+f3XbKcBD6/2dxePgEyvxZL1SEO5BPFysoYscXdmscYi7mPRzs3krPDGVPqtpEnHdssVjWdl59+kERRYKgcOajUkYkvmQVZEyEUjrtLEvnB3wxVjy+H1q/ZFd6OXDMscvUOWI/LuU6uINekyKdtYtXm2YBKhLLomAsCyelXX7a7LwK61JViX4orJPny61OfRPMDmOlLipB24EwFtDVULY7canw6Hp7fzZlvk8ASyFuxXZWBiLRA30DeH6CQfJJsg7uy2Q5wawdpB87xPtVvICpEBdK4rvHjIPoTNapvjckg9XY3Lte3KIiNIqkUNT1G9qFcvWRnOdCd5O205F+huFDrpAkms3U/1FM0oKhCd4E4kfbcSPSsjCTzgIvxl7FnECnxqbugn9UX4F/lW6Q9LtzncNPaKOWxyS5EhecVKpXd2E6eWQ802MGyWXB+gi2UNBfFeLLiEX/4qE9ZLqFkFw/FJxr3b337PJLd8U+QxWBmw/pYpdbV0bZbEG4kfmLOyN0/4TkmVt+A+ZdT0RFYepdoo8qOlXx2w+Aph+sBijuHNzLEzCKk23FM0ncMEdnULtpg1eRnCYvnk5CETZY4tG8Uwpjt5D2cnfKBIO77gt4pi232sWbtkg7GSsbpptm0eQzHRrHftuijgdP2ZOJCpIQg7ReJjWJXsBYElPrEassoX2ehtc7HLBSApZS50EXHfZrfuwy40cfiDmJy764kKpF0NyfZLW3AL+ibVLfKTTni27kFNns/DZRdHdZmQC5KU8xMDb8OS9P9aJnc6P3QDqbBIgW2PQQV5NTxmJLW8TthEj2zUirDC0a4vMssPz7nnNkNdvO6JpOl++l9gfS8pnLaL4JOE6DECYwgAm9CtgaagXMbZapXBvCwm6Z9TRZmjQq8IgDWXvXEcaYqUUYXzPBN0FQ3SYwUkwnCwGVs5wpCfLA1CIMx0bE4FbMu5RMn00sjPtZw0w9cCYeL+t68jC9ma3WL/9jIqumO3Rrjw8rRZ5cUK9ci5Iku5hYqZJ/Yy16srZSn+/LEIKCLnAd+2EQpj4o59Z8JxLx6KAI9vDe5akpV9V2vDOoeSGVfZs/eUqrdNJ2B+qe5DaV4ReE3va2aPL6IdA1FdRzkLmvqz9+Qf80jY/226chK6eAu+m/pYvqOV2ESwfGxLrXXB/GO5Fk7baheeRO1boRoaCxX5XAYsN33EzJaR+mv/P/Ot53PXICLXZIcsjmDoEauHKRxOsQQKfM+Uew4BWAqshQKL/42fxLU0aasC+xv0zNDPmMKcM0uGZFFcVRT0iU8LAngrnLD9tKDrb8vsmCBruutUe1Fd+vqyA2EjdLhr6bKAqdocsP745amjL4zShM/gBK+0Fi6FPZspsKh6FzEplL58EjNYuq6aKTS2M7Wl3aDHoqlYpxYs2DJOJjTh2iouCeUr55lPkw+44X5z3HpihAhoezHriTW/FoCPpnHXNHlAkZNIn1guASZLBda1Tmgk5z65p4RPkyF8J5OQs55W/9lFWkjjU7njtHusgReT+t0l9+FRLVDk4l7ccizxvnqNbA7PRPMe2Lv4+Nsl8rVGDAhr3wOvSFYi/xRD3RdNE308HpG5QtOu8HPjAenqZTlN9p3Ew2HgTbLzmEYqqFBzXLUtrFYBdwWc8aWtQKjpJXOB16WU1iW8rYVCnzPIP4ZhHHtcDK1xRj0Eruvx+RVqs0Nbr/O4ivDUXPoR2YhIEYfm1YWwwEEkniIzrgP/gcDSnXJrolnqXQisbPfRsSBixs2WkXeTvonO1JRpwLbgC1sifT1ORzQPtok8GQDP8o/FXbSSqt8i+OISDcCoixFY4vcfYKbLOkpmVsm59UWCanAjl2Uj5dGSNKu+q8cTiPXCmgr1NJ1/UOLBdMr2fUw9l4qXTbBbZjticyqEI2j27qr7uw+wou1hG8xJgMHBtTlHys4tOHtcVFEVwCcmlLMESYLnEWSpkVVgzQgsQz0Zp3kLScmpfJQZp2UKPpWI0epBtNrDY5fDcgV2dSzeNFw6bmWF9BvPLykcG00B5c6uzYrxBbkr7bcPtkO9rjfPyJGcDpuuLuJlpeOI5qbKmLM86hr+dTSFB/mFCOei3McR/AtYbs/gyYybxfXv7zmcmAOW2iq1NIz5zf/NrKvNS+D5md5Phbczkp2QFULfqqbUEklOnykmS6QzdVYM+R5N7nJBSJaKqKey1iXcbJk0+T4EsvQWaO1L3QaOkZX9Po40GUh75YA1iRgliZ9+/BkBFM6EOmDhM06CoCkt/K2Zd9fiz3YwfuRojS2SpIFaaB31U6DeDzIUB6DYKpry9PSMDUg9FcCK8KNauJhqoNo+I2pRrXARWCW3leOswLDqYXy6SPs9AUv/ajI2eWUXPilYlZo6I3+PF7djoSfptmVZnLelxJYkI+PjZTz/+suvH8N6myP+5MQu0aV6Wg1aRErVuWYEtRbURdbhZ8UC1t940y2wnMUyiQlk9KfftcmYu2vJK56B6aGUWLGvn1/M6jd5j71UoYA22zmb5StH9Eyxqii1HKsWX7KxO457dFVQXSJeO78MsMVSFMJy4b67gKEFBYpv1dnZFCJK+9PU0odXT2ig1E6N5rceLyAGy1GCySqRT6o0Vr01DZYBSyVFd9ILQh1UlsmuOxqC/Q+DustA3COaX3GEvCsyikZruiZx9JdMvWN/BViK+SndCuUjWOa0ex6zC+giQ0n58nVu624ZsT7jJSIKslKDHR2x48y0BdP60CJW5NATFZYhCE+qLs8DQ1bYDKfX19f3oV1lYCV5E0cl9TiAFgAmLc6pz+iKJzTNRAqLINT5PpkHumoeyTXL4++M+fSUDVhJ9vzLWoFlmYkbcZxqh0Vol5QhCEXTcBIYdpJCWJ0XdiPX9lLd2dmkLnBszaWF/PXh/Nz28in5IjCZp3MUSuzwD3vFLxoNOnWcsGrk1NnO1OH7xRK0RIXld9NNdl5BW3HHc0nnQMy4y2VRhX6nKMe0+Gy30Ogltk9fQ0xLiYId25gcsLwwbXa7dlnRV0mW25p55AE1wuK/PgQxjmjiWE4RTsWL56UZcyQKLPZ8UW6cFdvN4+mw3vZ9FCiv9rkFAqNJ22Axpk1dvIYrxCy/TeIcLfPFsO45sgvMiND8VkjqHttVAU1EDBAz4VVWlcz+i+CNEJbEVcnW/4Rw05aOsIhhUGnuApYQbOLU7RAGQ4wD1gzzgX5/Kueao1dgTXl6m0OIOwsY5+usWbL1CA5ZvbFrBOZ2azmPCUop1rCyaJlI69ybyjRpu/vcrStJcQCfoINv75kCy6Unb207JQ6pqpmEvducKS5eJCSQXMVDneEN9UeMlNVF+cDAQJ2cbILzz3IcjKxNNHal98Qb/Tm3gMgitKpymvumM87SMGpfB6YajPs+zFyvjfUbyy0gjbLea7MuNhgxYEnbGik4UCXg0aFddvP45+vTZl1vV5xKoG1Di7lcHixxiZrNuCYuyLmm0SwGLNeBjX5EGJxgSUUyMVKiTET1T1SVAFSMhf9ApSDoXROVUbHJG9C8ARKvpgKypZ0fbC/1mRnDwCRnsRywbtiDSEVZXvTj3fNn4TEcN19IH+HiIoUfvw3aagAZyPJF4uXaNW+HXYSJbIMYF03NGs/SEgmbshar9uO0jyWZLfnsbLPbpR59lS3FPpbr01ngQwt907e0AUMSpMRg775jWTe1Tu0SLOEBQhGBWHBswLKPxyciFsy/6BMr6CjnsGQmOLzkgMIynEZVssMPWafu8sQuGuFWJlaxaW8zMTFSBiY9e2AzLrDguqOkLgWbl0uGSVNz9IVJAOb+8evH227YQwWDc9UwlD01SvAs0euW8C01XvJPUh+28+UJ+0juhMy5NZW0t6YAEAxSqckMzo6EH8qALqw4hwSoexmgCNofd+O67ddNECKPVm5B1UD/0LcgFosbbRvqDJbh6jqHp3h6eUtnboiQZabdtbfqZVVVUVNst3kTiU3lAWMv6QHcmics7c2lB9oknPQtU4DJt4Xr24+fu2VIVizdLdA1jZmHO2Bdjwou+bI7wExXW/HKyh5PEzR5wElOC72g0TS5mTN1tLWLAkifaYfa7Vimm7DvZiqMKaz1038/h4TIgdvyK4nMhJErnGI/Cggq9rHkzmdcevLaqykzhLg9SU1gzU2ZpH+RsUbzEnFLARvvgh+OBGn6bjxchnH3eB76IjKxpxSTLExxuHIfVUJm1jxkQIUBaxpDtMhQNKJfq4pSGskQeaasQ+owiDjb9jVYfJ4XcI6wkt3bL+8b9F0vGwhYoxiKxiyCqOflUsQr6gcMWEYtbAFXup82clJ3a90/53MNC7lsbw2CRsV8PEK+efrj6+v0uCKrcGCivhFxonD7sAJcfCHbd3YurpA9ifKq4+aMniqaLPrYYLhkATTqV7GYVcuNZ2l3hAf7nczFWCnBkrPDZjcZJWh0lTaZSKA1DVWKEml9BGpvN0KAo17uIeGPmiMV/LlRgzMaMIcsm36LrBZzAGC9nEtc4zRWdSVtOrxRAiyDiY1anCOOCpluEHRblwPgTHcaFitwYQW26GdSZC8g9Oq29TgeDweoUzPdp/sZ90qzKnZ/7BJOcydoVYUuiL+QM7M+QS+qEBOwNthkgBcgllC6j0W3WML1dcNmGDb7/X4DQzW8/XrqRDlYRrBWRF9U1JuP19/PbYbdAmLY2mlxDpcxd2bB3RXVfFjVbB9RBDaWY/l3RYOb/8OS5fPLftt17eNp5C3V9jYO5WUbQZTyCgQRwhqN4rQQrATe4KxxYXTpjkPP09C8yjEPkG2ByXIZmVuAGbAYQFURf0aWTe+hWBjnytYoV6GbUtHEFQQ31o8NNcwtsNysBgEEk3FWUqC+w7zkw3f2jyb+0dGnSZl1Xd40xX7fF3neNeDa0oYPfsAxUFjaMshvDmGDog1uBK+Djss12fCdeIF4PGd0LeY8KCNswG/yVT0cD+fDy/tI1YRqFmZuYtZ/pWUk5+6zUGhjWgksLtyFpcz2xdnEsICV5ha4KHhOqA7M4DQev/54fnl5fHx8ObyNrCexs7K06nsa5edfThwawKBfONZNtsH8oF4aq8vYNYzjt8iNd6DzNIOleUbuPyoLwyO2yCeDy45DXpHUcehztm2P5+e3A/aZjSolmbayFteHPNlJ7X2sdu3Y0p/qPNmoK33cSMpmjICoQ7J6ufW9W0+oEmX6YG1fwjn3Qwz+4LKSskzxEqCWYnYCehkLjy1JbCYNrAbakrmRcqdeI7Duae+dhFs14NKBwP7748vzKgbjRDwDS86CizQ/2whkfsmItjU6WIdSTO0M22KoUlpNsdDzHw3AeB1VhDMs6Rl258tuNxwuu8uhj1LKHwxYpor7p2LThlXEsEah9JrpjG2ZceJVS8r0GG/Wx46NimoUcHy4kZxZExXtGZl4rNff3s+XS83In2rcVDS3Orz1fYhDq8HAYlm2weHKhEe8gSYWtHJM29IXck9Fl0DFjB2stsGUcTsWidoLKg/RPMAegihbFZxGvt59vn4+7ddtB/mKAEu1Ky6Trl5VLlD0iEeP4OkVWDG7TRkT+XwAQuJGh247BsYuR5M0vZAOnhIXJ8Ok9ZrDrb1JYWmfC9tcLT2JdW2ahGzFjWOWsRDySwUC2F/Fq8JT6TDJzM3BcR+wtJJbf70+QomXRlC9wWksVTnnUzvOwrwuJiefT78PBXCnpTsdt+Q0LmHx60c1vwEWkwEEVns+Hw7jMPbQHhz3ufpDS2aY3PK6tNCg0m94tsBGYNGgW58zSbEhqxbv5hFZxBVZTAJg1cPzr78Isn4/vR+6IhYlK5NoFqv40aFguVRxJcByyiN1SU6Lrvtv1KHsxlB/c4ATUrnxH6IGXLZ1TO23XsU5B2AUBcS5BUU/QdTUw+H9t7dhrJs4FTrKF5YTutprm1C8+v102QY6mY0WK6qQW2c5yrtXdvDvhgO8rV2cGARUc5GqbMQqu3oVLyXXJaZgGqsc5CR7ZgaJCst/OK0VcAUTm2VIP3dtwWHhvMtS6lM4u+HOtg+uUz3N0XHVg4dE9BgJtA7w0gSWFtQEA3y6dP36OmaS8xaj6KBvoy77Py/hpHtmIpaNFCDT458vT0+HYWxrXNui23NCoGgn7CX+WcbBsnsSgG2XcmXJE6y5Ng3gCgmsBI5WRulSAsh0KAcWkr/k9WAK66+Pt+fT87BaSrFK+sl0o9MhtnPlZyCwBFn4smDIyegmlyhG2T/uaposFuCdobWci/xSkjWIxM3YcjAKzgjb0GkjQ0iQLfPh9McFGd6puw1z2Vwpy+VHcX/a1/e2sAFkM5C3oPGtlG0/ZkzaYKK7znPivoPilDeT8aRGEQ+dlNEVzlysyocqjHWaTcLChXnmB5tuHHfPX6eXy1jD8MI+5DLIVVs8fpxw5dp07UMAWBFDwjiIJV+9AKQIMZ8Tbik0FTUPrE9x+Py9Cyzphz+vU9FE4pfuD3VCwHERj7w5/R6NFKt6XOccjI87i1CtKYEsDYZtXpMue7AJ8WCcRbs7dFDO0ypJVogSLF/1ZEkIpp6j6BwIe084Um7BhGhTd7sTa4fvpz/P47DZPT4Ndd/DJyX6rmy+rc0TSSL6zgnbHGsVAZ6DOcEl2axqeEmEXkopWA0sz0Hu+iwaEHvpwamRky7LMl/mm267LaKY2dusHz9Pu2OtxJ5AtzZZx6YpSlhUu9fNVudmiIOAdDKYXdssday6PZjtuXbt6uDOJJKMpDgXmzwQwH7kK183XhK2InYBXO12c6mg3U3lkvu9HE6/vH4+DhkJn3pYv8yWgac7cadhoWOJFmySHPH7w2a1zCQg5LkFHNkuJfG5L0gCbopx6NvYkgSyxA3aZwNl7MZYkrvm1jlbJm+YCkdw2De4yxz4jmp7W1R4R1OCOrEXM6KuF497m0T5+PIJs/M0bOWXBYgD9VOmkBVZ5C5whxWToZTcpmzVz9aHw8vp85ffMMPwuO/rftt3T59PZ8gXrf4NdDJxo+yQvvhOFBW3A9uVmjtk6dUVRf8ntXAWdFtGV5+efTzb0PyUKfx04lUZIhLtx8O6LuBSIFEbvn45rSPLfXqCkJtGeym2J9kff/Sx5pOFOPlhKJoUN3qaPyV/qJRbd90SZuwZxp1DpCSY4p+car96P49ZqK9pvIIX7LYw7USWrgE5XJ0/f/kVERCjcStRcSsCyMUeNBVkFkt5mYtRkeTV6dRxXYcCbjKsBPFcVwTwi3Ke+KB1Df9aiHpB741dd5vPzU/S0pwZuYrqtm5w2tJEEfcN3LtqDvxy1W6ZKjV3qvTYMqJG21kmBtXdH19+E5f2ecyRQ+fghyTFfWTRT39lybLIAZ08r/crKebgp9rD8/n8x+MJrdd9XecFnnq5Pf7+69DAtIlajFy4oScUpqLAUj2WAxZxpcDiftvllYLF8BxOE6jsDOSOkxIehtRA5349DuuSMc0t50RIzQkEOl6dfvmtm9Q9Gqi5RVxxjtj+/YnDe4VWCTP0F4Is1yd4/Rk3pYTNwtokzPnEx7xJVXVpFVK/7J4/PxruvKVAlpyk76o8WHoI5oYYLCVN3b6cxr6UEEn9kRuZ38pUavhC7p4rSl1jyZlx89WA9lDhRlhhs3l54mFVlF7ExbbBlkRLXz7qlN+56YVMcaYGTC8BdtpVJLxa5DdxAYIhMRkxGrVrqLNI4V1y38QT1oaJ3Y+w7+Qnw8cfpy/0K720RZHlOdVcwtVJJHAtqfcqtuvd26Hr4G1WyMSx5v34OOw2bZ1vWZPGN8X94/vLfsmBEJoL9yq9qAYsDFD7u7TBgPXTFVim30AnY75Q7R2FyAIqzY6EXSvM2NrDp5OBkojPi4eNAu5FQmOy+/ztqJq3OZOWLrS2xDWM/fZycKo5sxFoCizsHbj4E85juNmwns1XpYSFzlZLKBYt+tBm/fqUs3AaJkmKZuXQhvC566Cv6OoIcATxZoxCRjqy9Lg0aTwvusW95XjdDK0rO7vDJ7N0QtuY7ZUxyPHuV3gTqOr6DI4R+8AiswjIVJFpyLIIIMjiYhVyrCh7YMHQfbuQPqxMVCDmNMkKfealiNIyjhm/uvoVJQykMQnA4t3b+GMfBj3O92+np329RTlQp8AJcQDusDmBKPXbVRPz/xJEtAiXY4cYqO9XnBOd0D/u2/Zy6WMaSimD0+zI0ajF0n5mWwYsLKXmU6eIhBDpblmahly1UaZz9IArc4MuThMFJwi4TjoU0Z64JJDhI4aZ6hBW6aZzLVo8f07nH8fLPvDM71gXuL+o7He5KZaE6mnM6sbmA8I6dAxEpPJ1RixQZQRgkUbjcXPcrNnNtK1XqauSm9lyow8V4WRm60IDc1sunKTQJRdegLjwdgqm8BnGyJ6SJjb996r5ZSExSNIMksxuuNQUeyeJnAful7FH9xjcP7quZZQXuArQcyqH8uY22tvjLAhc1wlYSZk/dxR9UVi8LPnfVT2UhBzpjK0QA6tFSiIpCZbtRV5hbillGyWf+EBWhLIz0hJTF5APGPdDn6/6AtbK/nsY5VlTdOMKqUNPKiTms5QP3dloDzeaD9yd++Ta4NUT6tzSocBreiqCNfX499jFopaXvMq4jaIEa6ZnGCBrZyRxE+Fhhs1Up9Z6rRMy09gUI+KvPJ1yN1aA5zFHCxWGMCi8es/pBHWMqTfX1rZS2pUmYJFU6WiMAjyv2zZlqfOzscwFaZB/7e+Um13yFvHUzVJNxFqG1+YVCLxWD9yOWZ4Gkkc5Qn5fkufJ3DIfJN/9sqpYCBEjIW8jfpAXfQL4VEhL0YbR1kXdddmykuFIInueaVal2yzxwlMmKmyed5GYHvVnkMPLHL8imFnJQDviybaYfRcFch2xcCvYlJCap0yLBUyZsI9Yo0EII6ZbqFkMQlbU5aMg7q3i/LjGbqssy+492ec3dzKs/edpwWQpabgNCzlegFr0atMzDNUmZQhKp2kd3eJH7vg/gIWS3zlKhGRpXKOOjlncY8/eXQnNxPxpqKaFgd3HU58tJYOrl/h7nXEJx7Cc/KNaXLUt8ymzqIXfBflnvA08q33f2xJ3mImYiBPwFHcqNnDjeVwrn/Eoa5yftHNqsCxmYDFCcg6q3XfCQ5WoUSwxNQsldaGZADUtRURtMWIBVfKgKU8vzw13nNoF4uwvtq5EO3HliNonIVGMkA4dBW0gBQGH3eDdfuMlk///qNStut2CJJ28Zd4wSO6urvXWrXb5sD/soCZ88MXpAnntdgUifVlm32anszagsvEC/10z/GSF8YO18HLRnSExnM2QtQUBVRFKtP5stIa2hrjwq6VLKHKRual5Dvh9tn49FNqJzcqGdQL+7UY8LMrVv02ydJvoLPiYMK5jcB0+HKeB1Utez9CzyWFinAq9F0w/3J2LGiVNmjV45mCkTrL5yRPnDUYEtxo1T3l4/UOkLmvTIWtzfoKR1gwL9XcCSFMJxuWGKZGKw6od4qWkmOVeHZqvw6G3caI1MAIIWfYJFHfh7Y39wUU0khZdebpdC9k0NoyVc4Y0zkR8UGVx57APcuYAtvAdokyEO41VXRlqyyIhBqMkLrKEYyW5quPDrpDOiTaNidigVZVsnYttjiFft1mVLk3Vw+rpUGhGiJr1/V9KsY7Zv7uaDgEZmgGZ0TbYsd5XOx0FlpV7OUvQJcnyggUOaHECH05r7d+kXLFSf/N3mEKTKgpWqAn/1XPpGjlzlO72ECyOqgPGCdKzSoTKEyu4WLjdSm52Klw9K6PQNBSJQYtlT+YfJSdyWaQa5ShIibb6/fixEZ+xzsAi5QWLYiovMN1lULoWoGmgmieuWKxOm12LuklWNWUGx6TWzB+p+XTZ1k0AZKNJgWOvgmVy5QWLAJihrwCx5wHFGv/zGQ2e9FsqHAFQmn7SAEck2FdBoaHhNLngDEk09UMCW9mk24DuRODAXM1Ii+fdw3kjfqEQD5XOaZjcl6LjRO+mam/V6FJRK5WhaMhCrCeI7pmYAu2zlinQU7t0ZCnx/H8woinRY1R6mrvLzpsZMguWv0HwDaOpbSRZ1W01kaMbGdLMN4rxM4X17yBY9LHY2Cbm3RqXZitlCzfuKqkO1FLgfa48pDbQcnloUva0LNbLnEgRRCeSiovTNJsfMWQISFJ1EeBZFeXm5fPXzx9HtAzHac2hDST5EJNhAJqySnVep2m4fFqUhydpigOJv8YGaOYslyUUFs+BgsXpfD40tiY57FxgeAmWUCtY5pr03C9UJ+Hm3AKeF5nKghhdQeF1CFSfm4tqi1AMtp7p7R5YvdmA/AGKS8G606xVtnl7fD3OEdDrfcBNZMUQHg6447hDeEY6lYTDsoafbta1L9jLuoJFWo/KQDz9zBlygtA19c6yxNDG1FiazcjLubbRKVG57V7ENlkd1ttoMSdU2ihY/09jkfFKsRtRCg8c3u9s27hYuYLIu3F+/D6MOdgPTid3j/1Axeuxy7QViH8AwxliyYB0D6VEhLg4kFj05T3/fN9/vm+7VZEzY06qOPylFQOfQm+UIQo/lpSJVu8gRaAnrM3WhSiwTZViB1i+CWKtdYfxwBQWPRHWlLH0tpkhlOMf0gx6WaLq4rKUsYuVURL52gCM0Bbe/55Qho5zkpVEdW4DnaxNoEcimWTRROglql7e/nVad8AjRN4OYplgzZwV5gAw1kaWtNkuD0Boq2QFZiosQrMCn4CZHJWsmNKpgjXGLHqnM+kj01lYcCGqgu0gFuCqQ6y93erwT9ctfkJ7pN2pC41FhXWpsf6qbQ8aOciD4rxalQoY5otF2c/ja5cPOF1MVphgopXN7u3deeIeOg7yNnlSzTflxIR/oKHs8vT29vMghfquSsd09Gmw+c34Tkt0lsciEX1dtGV3fD9pwVTHOJjuc04KkmcVLF8C8jGjRepQ8rq4Z8zpWTmBNQM5/YhpoH74IasktiyzlyS4U1qLpsZijxMUGGlxbIxnaoKlSU8YeT1JFDJvLlmEA10eXiHOHt7edzMpwTo07DHlxsyK2KGSg3GUnwqWLW3O8xUSW/rJHnj2v5PcyCuDUH+K3FMflOvIAVenWmsPmxQlyTKJqORxP60cko/H+gHc510O8GBoroNgKbhNxYpRIZ0FY3uVP5bnalPxzGLeShUdrdQKUsu7BoTlgeM4pN110/Ji8bxKIu9ekvsc5APl+rlKNQgYKZnm/PHXr5emmLpylcUBI0KnmYyHfuzfpF4fylm72B0+/nXcwe5zAq6F4ZLJW+wfljl5p+0wbav9iKOIEbrJFXP/HNJgH49cOmIanOqM/EwXgoVrkmfsOhv95VqwghJiTTrK7YMQLIaaqvHlMQZE4pn7wPMGAth8nhaC5yq3bU42T1sQo1gc74mnANa9xR/4Om1z4BbDWHU67EGuQh0F32Ws7qI/w9ZYHTpxrVM/naKFXqMCDR1cECu1mgxUNSraBfyRr8bfaDnnIo/FXgG2DMKxiqEC1fqA88m4n1GtqLN8SAXIJWdDvMdQBBqCOIXgedHCEJiuEl2z2bcTdt3GksA9rZpdhz7usoitzMKBnOb/MsCn25rOdgKPPf3+PnWtgs2wBSyDyjWvpfFiuYBf2wsWCUs4m9eIWyyywWC7yzqRTZnPBFrHfL7+Ng7hmhrUMGpJafruBj2JwRb2aJV+qGwy8oI1HoeQdoDe7mtEq/zSU2Zmp/elc4lo6MaFSI8Y9WGSLMgAHOaLj6LZz+MqY0cGXpKAxCt9JYsJM+P5jnPKOQULGR9B5bS6seQlQr3Eypk4SboluoVqnhVhPJunIwoWJfiGfO2UK01jXfQ4I5liuTJY33nXFHUuDwIo1dl4QEayYWeI99AZHMIOrgk4HxJFefHaSEuceFIMMCQVP1+VM+ntqZFhznE1vcusZ0klaFZAp/4lVbf/uf99KLMEKlsckJhlWmUdmJ/WszLjyHJOJiCU3BOZ54mNMJpE5rrSN/TjqNyqhqSS5nygO3oXQt7g4I/kg4BHKBkKm6jZhBGwNMQ6RCBwosZiKIM6Q6+v2EnYZ2gFWbpeuRRMkIu9wE/tosgyiVzOuySwd1PHDafn+2M1IH7bkwiwBZYrVMlVGnEi+BrPrcHkVO6qZeE0nWVov3iqQDtZJliqsVTb99wJcx0EEJSkwSYtk0UPSwSNQFJsyTjvClejupaKCXvaHg+Vc1U3LzNAJKBvrxQtZ08qJDgCwThqItxLZPHa/dfL+WGRTZAftEBze6jQZhvrXHA5qACAhMbU7JJvROd45VRScvc/UuIwdYVSGsRIsw9FI7D/LMkqItxpzeDsUBXgzVDlAFosz+lhQGoD80SshQ6kCqeJGNYlatAIUMjYQYfcgESYba7yS7i8R7QFHI3p/fEhvjXBCkQW2gLHYbEUQf0VvaCoyKpFHqOjrm67HciS+Qc1GfqyMahNQCkBT+FO9z/14LrxK3S+2AqdMn/23iSTjHgfZWNWaq+0nhVO9td6YMapEulcjosd6CSxEHCLRzNdYC8YMKhg2Z74aZb/QEcBEd/gahMXcoGmn2WFnu7v8/fjqptvmwVMMzm+uLiH0I2E56IgVWaYS2wD0AE5frv/Xs0SjnVBiadqXB5b0i1KE5rWsNvqKvQc5Ia5bPd/nM5gVrJUuzb/jEywWslaVEnilmnwsaD/grfDnnJNBE0k1pngY1jGamVdwPLzuqnGBIhYMfdvUUZGEBQEy0pWCzOZ7By7Ah5dZbWGTW2CpbaDcoWI8Lp5Fr+kjqtdnoEpbpoJRN2tt23KQXOoxWTda5EGGhBTmWIlpue338mIXPukMWM/MJVpeCVGnwr3JowQ5VGb7optjXPUbqylYuIcNhifouOOnhAsH00gCCvd8E7PjkpBuIpCvyoM4Z8VjGX6Eqe4Pe03q0NTVmW3/7z/4/O9yepEuLKw0Vc0t/7W2UAvtRUYELzctTHLm074g0VfOfyatjpKyyw30UCRO2YCpq8q4W55tg8WOqbzY1Ouz+uaLVWyGOlFcVF03TRP3Lr20CD45IRah/QjNgJY9mlbj/2oSpSIgaYud/Nuq56hR00MMG6pjukP2duw5wOkTBaAwXW/RrTZoqcqDpEf7R3+soiwBw/rryhYg3oyccLhjJge4BDXFk57cbS6slsvLFHNgQg39j5uu3mUMhNZz0nMS04mLrKRiazbRkjInxJGqONRfD1an6N3K0I9JL/Mz48G9D2uoJeDRFVWH+Te/E2LqOz9Qjzj7SBAoJPyXx+HKtNZ4Nnyj8ftHh0hEF/uihpzlazgHQYHFHQiYjYXGZLirgYH2cxliGZYhkCdtdRhWxZ+JGOSlPY82ZZ2pa6x8c/FqnKC4jhrxsLcdmurw+SiclO6us4e8JQb83fDj+oTUlRQETBNOQ9LsnzF+nRcrUtQYxBUSACQ+hRpQt5o5gR0Vlln8MO+ceyf14LFKyplL3Yoh1EkoKdidB5ejlYEOVU5urTNkCViFQpONdgLgIOaAtfiN+02kIeOxXDvG/bIcQevpAr/6lUWITWsCkBkIFdjHoQIj/q/iLlTt1BaxDCdZwi+ItgbXj26v5EOmgyodUk3sBWaYKxeMeuQwj9+l9MUGgU4i489JsWMNUS5UliXkkX0HzcficzcmAuMWXeceIyCzR4pAcjjaDxVpmpeL5ONVoY2oCiM+apMUB/sNtL5yoYpX+Gd7tarti2K3cd8qnkO9vHr8jyvDA6VbclVOCtXzIV4bF62tRjIWa71777w6acpxsiZWsDK2KwtNYjVVh32kl8JVlAPt6l2WzGIs3DhVgusgQGGMkYuaOgqCZG1JMdRlIqN1SKjAbARTgGXbsEZFI5sTrFwI9QBAsOEChOVlX+lfyjdBTmApR+NzqWkFC0ByoX0FKbilQ1pqVlOjBMb6UNvkdIFVvJ4cC1Y0oJ5LViWRhdpbjbbQjG5ym1TnKssw8+JjadgmQn0csVOlVBQU6Wk5pkOMvTokCrUBGspWEBevCgZWJhEwSIFnHJDqI9ltnOdI0E8ybYGlqKRJ5fcZuncdLZ6e+wEGKMtzlfs1EGwFPyfCybp6fj0+vj7QzSxoXzjAoLP8VEMdTkkK5ow6YW/IFhVpr6HHCW9CW7itWCBTTL2wFvqcuXECZjoIFdh2pqIVFw5C5yjW5ZyjL2Uw30xOQf4A0ieH0gNLPPlCJBLjcUNDeYZgmXj56MRTaFaVyzfQiBHnrnyASgKyhXAD1mT2bxqfti7DMO2FovDFmQTLPjvPEiNn9g3Om2KWYkSCAnipbqQ5fQZ2RRJefJuFoEZ1AxMC13U2sGcYWzmvv8uXfTXIWJ7WUBK+yDmL0wC6fTbzo2JucJNGngwl8Vzh70AhvJ6+f01L5JY7Q/7aLxk2cHayD83Wzy/3UuEiS5XpQUWh7wgrzJPmoUWbZ00lcreIHEhuynsqEzI9iqfm0gi02DN/zKKLR1GMvIbLGPepvCqiPX5iZFoprysOYHQx352G23nBMiUTVjPI0CDQ9nLFF/M4/Wy5XUXlo8LbcpOztSnjqG2HMsdhRckrvNm39U6edh0pmuz5aZxCRsPVUkwXTialNNRH5Pe4Nz+FFhmkUEy/GJU7JKJy/XQ9SluntWz1FJGLNwGjXVNLH49x8Xg1xxJp8QBWBzHPxG8Ah1D5A75XjwllizlxjO5iQhgN7HoLZeqTkwmTGY+k/np4JCH6X49JJFp9RAk2UgEXhoNSN1ie5IezLM1e5pBGbYzs4Te//FdYdBcqCbrVAm2OmyncnVvL7OjZM2hKQqHOIxR9Qp9rvq+AzX7XD4Q9r57kuSzdRKZwxNaVEJ1A9saId9jiyTUNgs3mk10G0P7kPIVBzn33FP2DnKqiurSgWK84CScUgxFdvzjqU3VWVEDDCjD6Wnz1O2KmZuing53w5N3FO5iZPcNeBoUqqa7oCXYW50BXKWx0cSZQMdNlUzU/7D2t+tW00vBMjA8K2+G5LazYScZVBcFC9+quT/0TUwijqj3gkXvF9Ny6ZKNJ0XBfkEBbZSqZfBdNlnH7R+bBOzU1e8iZiKBcUpwkC/SFqW0q3yftnKAEXwYU5rHLo2YuKSRCsu4Qu/C87JjBeLLwNLby1UYdEbBiuM7rRmRTfeGTKnYFmZT/POIf4taV23QMBDSXWFxH0U59Xl3fLM1r8McLjPDm9C4Ur5Il+dBWWo6gc0RuTEfgAhBEysOOix/fnUIQBUAMEmzopg/yp6dNoLQyYqywxT+kEq7nRRpr7JuRB9YbyHHSiKGd+3qpalT1u3u6L8ANOVBFhc0sVh0QYNe77tdmGdho4LuG3bSV6Xlaz2t2CjlgJsrwTL0DhS3BS47thIPBTJeMfvM8azR7Py5S5DQq17xKXaqYIXZN16P6rzuX/enbQlQoRLfq7AV78WQepNbcpW+korcQLHKKJWuXiqVKyNjosVh+o0RA+l34+HNlWDBEoaGf47Q9WS0Zi6ErmDvJsZvzd/kwsesSftOBdPUKeuYpjpyK+wQhxXWVZ1J88HIfZZgD5P/x5ar4uIU183b7yo1xTkG9G11en35Y+0SZWrCH8vdNGJfAq5aDt1gMi20IEjWBm48cDDN9r/entu0ryIhGdhp3Nu3VV4BfcLEeFJ8XR4hL5Y/IGKv7VUAvYmJLwUE6kqwPHqH+VE18uky8Vn2KG4LY7fw3VLZ6VdXY25jeZ5GqskCKCk0KjNvrunrx30lLb82OIt4kHwe03oGHK2f82YU0mOgXoxz4GtvaBiKIRWU7zu+SFDdGOEz1ZKN0MdWWi+hxzN6ILiRzJzfXir0WlCwuNF+r61cGWT+ouPZeoSmuQemMjLopcp3giJDM05cs6tThbkj2mc/rwXgYE/+/bZH7G0zgF21ej1UylQaRYbk1cFkvWTlEsj6RPKNjgnB8xlZ46w//ihRnPSARaAS1trRywoITeGFwgrsIEwg9ggQX/vjpWPzNPG/qMzFLFEP6qEOSOpxAjDPPBpIvGaqdgk79iBYi1hnAnjBmj7fHzPZpqQ5TvUKwCLYSfM1OVDLpkk8r+pUcSK6oUwG2WCVS5xx8BhZxEsN7BZvvzIdtsJn8Amc68H52gSZ5wo5MN4LmCGoZyuK4GKwGYn5PyizONm93D/OyEtMjyms4Iqxh5vPN7kmc+Vkltz2HKSUL79s3gW6CFopcc+mucQ7EC8rYHBEH2LC59NXh3DN7nRxXKHDbDpmEutuYCBYIu40l1XDj+AkFAZBDMOR95OLDCtoBioC2j2fd/CZ1W9RYfG5+2u5gmyygYlFXU8R0Yc9dtIsi8jzJjmFNZqOIOFBsC6IkkwKB3iRXeqDmElSHZKYnSGKqMi77+Mic3V22liTgG09Ttoe6hMOyEoBTxENkVavcYeo9qICuZjgesvyVcZeL2rjQJStNvbwwJfFE6beoOHTIE8OmYJFD3sk93wMrKKxANmUGoKwtYTanl4flnAhYXh7FrXePNCpCHgr+lBBSaLEoqqB0AymdvtGdZAzuGr7DI6J2hVZnec1pJ2mECHhdvN0dKl1bIgSXUl3aiqJHth/mPEwXDWG9iUpUx3fkjNXn86z0Txg28ZIVVEwFOdVbXVA1IhD1lUTXCOp+ySR5RU4i7sv14VNp1UycgQFlzMrHWP7dQtD1jp81ICkmCpUwhQZZ3S2emlRHTaeYBiQ8rwuK0FPPM4NYNij8DlJhqBOeMdbQsIk1AyD/lF8GclnVV/5sQY4ELsi1oiWZ0qXkK2m+gR7ZZvlwTDZk0B5wRo6AwTyXWRPo8K5qsw4CAc9O8TnKH5bEEnL/TLLEnI9syh1VTvDCr5gn96wTxkZtDLBsKAICeDiMJxJlibl+mVTZcVSzRv2lIKlNPmu22IQjDFWiBAcmqLWNiBCgOz/suTiTAyhh87lIrKSJgSLHUJ6vJ7YJYg2EqUfX2CV06G27Bv7H7miirX2O7z4oG+JD8wfl0MK/RNHKZGy09gC8L4c0scw+kV3MH9VLSaEGeDlfIKgneYXjId7aTxod6/3z1WuU6H5eyEIZi5drtaxSxg0kOiP3nlNlnAszl69YTHtztTmpGprKQEVCx1bcBV00h6pZiSUWe1SQR/L9khmuGSL3cYBMWBEnFmluBRj6QE9/HRXILxVdDwru//lgvO++F/2eTPfKIS4ESSo2sk90oWUJB1aQG/K5f78ON/tDl2b+go3dKRl3etmc9hjCrpBxdPFoqpTpQ6xN2LQYHhryTsQjf5+qrUaMLph/lIzA7LhjjOoQiCEAfBPhUO24047D3qv8Ir8jF4xFw6iFyxPgx3mKwf/88agbxBfDWXI943lXQY9XDXV4vGOnZyHEX1M6mYXj1gaNoqXdFuBK/rlX5uCQAnaMT41OLf58SE3efZ2nQr3LhmZYOHxF0CAvwCd72fPoIE/WdSEywdVDMGyP+MrUZ5FrxlDBG94V6WMstl0xP5x+L5zdU4GGmS3W5cadmMwuBYsctsHwQpeOVO0ULNBsiAfWbkrlGqhTgANTcaWVUAAfJZ5sz/PG3EJEjZO3zGGUY9qsz+edlPfPl8uZnlkDL0hGROeM0xK8+bH2fvneT1T+DUBSdbTnTC7Qs+ciG3Rh8iWyWAb0tn9N5D6iv/MgjZD/Xqis1B7C3lwnqPWIWzGV63lfi2J67KJ5lRvtCHjKCkihbOiD1zU7i0Fy1j846ZzSZ0duzoH983l2M3wWN2H5b4ehlFS5g3RN5GB5qZa+QaESOHh6nYiDiok4K6WOoiI2DEqw0AaRo3lB4kW2DdM3uOM7OPX1tCjrK/fRIhLMofAw6V11oKkQc9XNp48ajSDfqlZ9xcmEFGRGJY8wTeQIBsx7srd6vSweVp1mcKNwDD1LOx8jw/lbOYCpl5kgyGgQHNefuPDWlaalCvRqcQlU//7F8Fz4jaJlLZquzl/bYBfUVPIjEJaE/jg/XJW2h2pMXWq/IXDeF2BC4NNDXMBZKf5+uxoYNUh5FRt0/GdyGsA12n9E32k36O1maiAm5iWCCZAKVOU+2zoBYt0Z9khy/NsO4WXyBly5uNeE+HGS+NONw1r1oxzRmIKVqjHBAcek0SpslbFrEk0odHXFBWVgeVBVWEgWTRzaufYqSPx5P1Juc2Z1pKF30b0n5X75+VymdhoHLbyQvJ7H4s6S58ZAlKSTzPgIQE1t1cZeICOqKeunAuD9zqD9qq2f3yeBYZbu4xgP1UL+CwIt+av94JHNWa/oQ6rZUZAxIWvw9tvPqtTKAYUo5SBavlTN5FmBtF4aO02wX1iPDZIjGPM5MJuf5CroK6CWI2VGtxVQv2NwiJf+GJgLf8gwzNsXxwhns1jE4T+MvRBNE0tzGZcODP6SXP+oWDRDsMWrktXl8jIX/F4XFoSlc+FV1j4Gy8go6kI6IDQUOKJINWbADzHgpmmmRm2ht6jHzPodRz7emQBqrDMBpogIozX/f4uWb3yttZcVyDYFk1Ww+9g5/QIf9Lnsa40FgWrPwleBp42+Q8U8q/cThicBVKtebfaPwugbXP+2YO6L3dsWuVQQEuGZtu3+98gRDc9kU210GXGx+aCX8wTQeSUispSmmU0HpSFczf47iRrFpKNU5ed7+oN6AAWqgd7U+bwkWsrCLlCnCzCXlWw6nnqZhn4ZNjSZ54Xpd2zeN/Ab4tSXKo6uhasMHKSs311bJHgGqYlzD4GrHx9VmbvWD3SuPC5dR2bmDX1RLoPPpbA2KSF6DHFzBwHNVaUkvHdnnudOFILD9bq+Ro3mOG0qUsFFKoG8luCh2vGqJtpLkjm+uod3v9qcjaqWjaVFTBzE50eJrZNBUsPlDLbO1lMdJJ1PqzAZe3nUPjJ62CpVfbstjuuVvvzy+m4nT+UANolRVBGuiPaGRy7h/v7laODFSUI9fqAztyVAEAx0uwsMgLFkfYlNIcb9cg4tMouN7fZKjzpQONpnnP43Wt1ZZVyYyqp5l0GSkvwhmdVbuaD0Qi0A00HaWyUGMRFyEoN7lSwgrL0W0XJQjglPFniNUNlCbRy/fmvMur5AlQZTGbzqiSTFtHydKB4I4y7wHQpwhi2jNpShyi5+/P/EyzDSaGvR+RqudgFv0SBwQa1osG2kAH/ZOZrs4s9d620PMw/T5gzGwTLbqtv/hkalIBoYeUQCw17fBdd9igCAfR/1O8BvEQ6CKJIpJ/eTZ3LloeTSNb756/3Q1fCJmame+kXaJQKcNLTiyCP2HM+LhDphB+wbx0h+kyNSZ5DsIhgHo1TLbkYeODaatjnJ0N6RcHxuSZ5tre390mTOmkLpXFSaKDSeKhk3enTYA/7DDzHDiDXWMfRxFlzRvh9vsYlOTbyDUKz2IqXhWGIm7fjIh2FwNO6gKbVtksi7oKlKftL4MtkY6ClIezoQPFtEkGwVJfQBPfmh2DtCXpW5o1zUmJjj/6db6gmxwNFXf5J3FB83AiakXi8KPs67hCx974+x4sbCg5fFfhxdDr6wLPV+o3D4raTtJkrKGUqTmbg1MQul+vjoZS1LDFafyu15GO3LGBbVD3CxNEaggKkKrrjfBpTYSk1WT9CTM0KJYtDdmXj2lDyUwZa9amx7C0uAyjZpGH6F2xyGAPtR534syJujhUAzPpMTXvqJDvMB17mvNnq0FxpB/VkkRhJ6jQDvo6YCS5aQg8ZUBsWIRgvHSKdZP20bF1kCDq+wzh11bG5Cggv5rGG7GieIehWWguoB2hKWjGo9Fse11VHXmjkyiXhDyq9Qh2QsUXnsfYA2CbehYkeoVnr4eSQkzKQyOa1ciz/eY3lh4MbvHLEXja9nuOIzaUXGxPK+xyO3sPhQnzKEgglG0mp0/dpvgAXj855Tdz663O/KJyorDgorMBb0iapK5uOBIJxYb2xIVVg4PEgWZyrPZtGMfsxFd1/TUkQDkIbLUb5rVTZeLh2wH0XEc0ZoejxtJyXtdIqMd9gnc7ZWjvXCFLrpV7bLhTwK8ioGbjZByPeei6iIKlvCdlNx2AKyGPojbVkZ7SkaUm9IexksZ131Nu6/0xeMLnDvFxhFNmpygXjQj+rImrFp6Rk4W9Xdwh1gqSapZDrEsUj3fmIoFjfsU1IUMD6JA9/FIkC2cCeKZymKDH0to2xHe/OjYoU1zgmBoL8JMzKEdgoFGU+O8iLYL+wKxUS+XE7c0maT8WjAnuYUe1OXPP9VGXy39MogNfx1tYNIO5YUcGlAY2bU9JatqNSIQaVFQDkd5O1VIlYmsJL9sZHbd9lP9KtkxDpGhyJb/NZ8R41Bzznols7G99AEj0odah+IbRjJeiCSdZHLIMEk3aahUtjY5oNl4LDDP2oU99kAJLr9S6P09l2JnYxjzn4SPV9Vh6fXDlj0cFCAUjV5awJxITC1APGfBgwSwN4rkhUocH7RUf8qmBlPOl1UWiPlJTOVvMslYMZs4ZNDcWG/tAGiqriV6mCBQr7TeXi+Jbu+LVgsdNAef1VuCYSL/edg+RlYyFAfFiA8Hkl7MTJYs1R3ndW+J1XiSUvJ9MIi3jg2O1fSpdPdEZo72Hh6cbQPM2qQjs38zIxsrIejYijv6jpWvogWtcqWKHacUkeEary2gMQL27Zf/JPD+fmpAGek+pu0JVni65aLBw6jL1kIdIbQY/Mamtvxr0jKEvP0LT0rAUV0a6GP8vggUTfl8BtT8BjHBJOEut1uVUqzTTHjaNgFY//WidTsb6+nHA5wzqko+u5q2dZPCRHldXxDCGGapf1ll4mXbCIgZJQGnTqAKAW0rS0Kx2BlzfBkjBBjwI7geP7z7lLlB08XcM3E8TXBRLGkgbhokIBc7A2aR4uSHOUQpTkOxFb0XVPifMzrJvRJA/kUlfrNh9yf5QxyFOTguzsfakccHwIXx8ftq7yPFtO1W3W7A39vIvcZT9r1tzxQVVFxBFh9RqrTy8xdXyXFWzAx1LZ6hG4fqahpjarw6KU2m9ZFMWs5qhCGGcFQI5nqNlw1EhPxcAuweplsyrnS5tpgCqIHzFP6DODBpZWrQNwUj6VVbPWaaPphEkrTVx+HIs4zoCAQKUQhl3lqld60EnVqiwV9qvPFMEKI4PwHacE6TwD+/JVLErRAC+pEqN+AGz319tHlShfIzvy2acOvh9kWHj12/Xja+l0/FfRpYZ6NVtIEFwfKJPDCBR6iaJY2PivF4A4MDWpqFSn6NixpkLPf6S/0ATP2NXg7lHP32413k0bDrjzs1Mj0Oo0FClNwYYOAslPFGIrp7tV29OWU0oCyIu2QHfnNl/KlQv0iDc9UoySpWpLA6QyxtgicpSqZFGsqLEUfwLOqlVXFdXi4/f7tinRR2yGPEJ4BnpXNwgEHaHaTRrMYvMpIJ1dMx55h/sytAkBKV0kCJaSbB2EsWdXTzDpZeK9ukh4aLKiiCXJuBb3iQP6/+cmDNLVz8FQNQMKlqW7dIpPnn1YoYEwF64wb6JwOlAcPFKz5vevPxqnfbPGXaNSD2FPIyOMhVwltSvPn/sWReWkcQoxgf8VKDtI/xe0ombKEASFwfQ31gSv3zmcGGs8dhd+LPw7lTh8DKAUsJrijr0+ZGmk4RA7dXEU8u5BsNyxgx8SktgQR40UzCRq1afNsuVPQTr+XrIoXZdstcBALlMSJ8Pe3JAri59maV5jDldFuPKe/NabQ5Uua5iD/RG+wZOwSxflw+fbsapR7spKN4mwPZGVKupYs2thujoyDyPsUduthSFkmoB2mYRwTJAykXY1dQ5KlBPEs/ef0zKra+VgIyGzoPTzSS6edZq9H4p6qD3B12B0BC9R8fXqcE1VsGSNPJEBaCGKw7/aiLgMEhdRmSh8IinhUnEa1GI17zZiDbMa8Bd627FIUhIHBqAJ6FGL7efjelYn9WImn1MYQI/BRTaKyGLmSGPnJkZY7CstJMZUus4pnhTnkzqxkjDkGHVFZbPHY+M6z+a/HxfpcMjyeuiPBLrPTzSO3XmRiyXkVAyt/hCVZvBODIpbVlW3r8wU4vCCmg2SFWoWCIqqidwbKrcbi3t5gDSgin1PtsWAguWpaLh8XgxDjIT28etNyK1KuSKLBlYbCLZqV4vb58Z21YZeZZknY6Vc5M7Fi07rZZ0Xu8jPEuwhRlyUrMBzrWkFGdomDk61gwCzzlKLSA2Rvpy4Yn//1aUIva4Ei93ux8cVvFErCNwBB0lGB/TkVvvvXWrt+aZAeyuF5iqnfZVmrJJd27bF4f33sWsqV6OAkee1a1tlOOEM0Frirrpt3n+9zKu2VNoY4zRWv5sHTigJw4NJPTFu2YiIzsBWkovOW67arG3LuU7KkzAP/JhgMk5S9QsmEgk9nL8//1hOBoFXiDdD/VBjI8L7z46l+MRR35eOd+qBeRBwCfTnx62zFl6sv14BENi8rZkp60OVPKyvdN0QqNYvVrBG1fcWGiuwKlOuwjEp0qgsm+Pb13G+lub7FrUhpfiI02pT1KlLCF6dTG69YClaErXOtC6XOS65q1y2ZOqpt4UXxfxrXtZbYj7e/vWynztt3IKQTidkvNZi1ctbCQjgZY8i+30mbbEtU2ILdUuHd+wYQiNKUr5mvKChHo9FcEWRkO8L7wAOubYo5JDnMuNzJ96ACFqzKpJUO5Z1ancNYcvKzRlD4A6YuMx7oKafUR7HCSmGxpidlTQBUT+FS4mLs53QJ7+8LDJBWc3K0rm27LqmbGuMie6WIHioqvnrr/tfL52D6rhyigx4rvwsZObBuBJRWBQs/A4h5YSNi7Xs9s+PW5eQROkm5KYC6IQaEWYILVfJBFdHJfRGQT3UWH2XoBxB8rzK76x5nM77pWQp318Mw1edj4t2uVqUGLWrwcxYNrR5arIM88Cs8WBoPFLGXq8ev3voEJnBrmVuGYfpp31HnK1eeQEtfssJH9Xp9P35uMGMICXNwEXRhbhmJLCgp4llIS/HmoH3RdzVsrCWPMJcRYxwRTk7rDgmETV/KDEHwYoLFD8JyEudsgfEKUaKC6fjrGgOm5V0oGFIYS66A3lIY1tYHrbb1f60WTXIJVlhVxmbjQLTjAernTrgDZczz6dmVIc2hVHKx1ktwjOJweqbzZSyPls0IltZu9xsF4v55umPX2+f/zqJXBFQcGGtUBMgG4HezVkjLzf2ggUgLSdjsD6m6OTV89u+rWPOt2TIF9IbuBF6aKTq2LUTaE5lIkI2kGbzUmNJg2FSQuEYF42PCYNgaR+pfAXUQ1cWpSjmLIkNHa2czu3z15PTupe2DKZMAMjWQQRAN7Jft5NIffw2AbUyTSEly/OlcFhbzydhdBWLp257/vV57MqyaDOAJK8whmP3vhtr7NVrLHUKx/KnXTkhFY2ZZUuDkdC8naPcQyqmQD5MxF7cMjhXGJlLYIh0lq7L8jTNXdHItDBx/pwrnCLrsgwjj4rlWmC+q0WB1c5saIjZRFjgNFTVgJGNJIuJsSOumMpX5BhZkjj5VzGoM5DkTzGjuXDFzNLimFZZrPcvb48fvz/vP3+Oq3k5VTD+RSMsd097VMMZtbupy3lCKGKSa5n5ehga3edfZ7G5YztHZvz6fqO/mPT6wW3lfgruXlkYNn5NRxQaTW5cNlbV12dIL5lLpOFuFCloUFK6GbhCNMr2nJTT2eFffzgkBXX/osxSyDgRdGGCM7LQUTBKaC6pJ6ZkqCH4Mgw6+m46dtPGSfdcCrIWUaiOY/IJSsZQyErukwGYBIJgKQv0AM/OF2MGE0bhNx5Ch3IoXVWBP9I3Vwd8GhkfsyhkACRCjIeWy4QrpRSBddZ83H/Mm7JarqtC6gkVxrLNqvV8vlntnNhIUJmhXNIsKw1w0B+SkFcQWgN8cEgeuaosRQdWZYE2hwligsWpFMNbyd8Wm+duteq5CaBajt36cBCzUWRgXbmgE7pkDMTPZAj2aJxjVBOozfktETUWBYssBBLMPDazmRXqOFePlGCeL5rVMM12b+XKjLTlVTO6dN/5Bt6dyaaRTZkPbHX8xz+N8MgPOKirrKjHZAD32VH007yCb4KAUqeToSzNEuMHq5epDuY176F0Q+8w97DX6779y/JRPjvNsccYLz2xS8fbxqn/uD1NZEU/VoVUx2raMq4sSuUWyhdqRGCMK2WCbvug/bTMhGVZLDdUhDyH6eBemI8+URxxjmkub5/7dbNefbxuHg5biZYLUecP++MecjWOrJtdqWJEflxWlEWHqoNFuzCCcFSzYt2tt81ytxDtV4M0oOyePv+1n4thcMkUrtT5e0scFfNveZ4nmJ8T9dRl13gBChZta+7mZeFyrcFpm0ykWXNbgZUxzRYvbxv5IHaZ/HaWD7bGMlrbMHB6W0yVFxhOxi0hB72AM2VUYeIE6/s8nEsXS8wSLi5gb4q9w+PMVefkmnTT6v023vQmHpGu+26IwDErYAw4YLBe7NLrIfPXFJSqbClXWm3vfppiNqvKKrHhIeQ1p26xR5Y5oVaE3kCwDATtDK6uS/daoQ6maiuREU5z9aBY0186sKY2BkprTJQwlLlSsGwpt2SxPHzd/7HfPL9iMPfneXPoRMieP17f18pjyItmjaEGAZ7/SHir9BGyVK5cu374OO67ssXQh+6w2nbbpjnASzfiInwue27WO8EHeRZOm840HpNp8apoEXCVNnzPxDrrqjIDcyFEC6k5Jgo8RbWKqyjX/fcfhwWi/bHyU+toE5aYKVie5VuCm+Uuw6XVzj7ZqisGsNBrL8mCcC7EJ6FQSMH6E8ImG6q3LFIb7NmT8SqirVyCEYiSVcGTYBYrljtYFmKBcFi6ne2aoRgLrWy+sOWLi0xUKOvC12FZlrOscOZpsESKD5vOB0xU+B3BiablQkId2aSEcr18hpPUjWoJKgstOHJwXgHKQshxMefaRRwxogxwmdo/0VSe/Tcr53vFozTr7fsvDHx/X21Xp9NRMMAuRPbsgPaqpkjqOlvuwMSaOFhOYSv/ftw0RbldP7x/nBYzTHFBfd8kgDZgmsRwFpkqHxlvxwBWkMUwzy/Td3TrNQEdZKTF3aISe1tWWaKk7jCFfs5ZIC0Ccd7Tr5fTtnJ5muQi1+yWDu5Yn+bTnsuNKBBfhccYA58GDuKFfpUIvPgsCOnL8e5r2VG+1gRrnHXQyeEsWJWA+Sv9UHMdH0YyBWg50e8LhmaigoHbKpn/MAPVRyAmU8Q3+cuZNL/vP9CQkzjQ3wAWQcI2j09U1oyZUSvw+tptudVu0fUy4f2ktA4jm08gxxwrL254NkGoxGIkMS4sZyFkyySV+ExwshOOPN0tuv2X8Ncc1k0z3398SOT/x/nn9fQ8b11NV1AXW0z0oCObJyOGrC2bslysN+9CqLmu2llbJxi4lcDVvwIfWfAwHE6URe8mVHrI1kJtQAMTKq0cR6xmW3Koi2q53czXi0ox5Fih4ElivyEqEdX84xfA8TOXtVMoVvuolZIoWCEsdD/PeqzGxBaxJ9KWf4u7PBpBsHp8QagKwxBaKhd+xw59BX1zXu8LJehY8OIbZcQ4qJTtisM6teoC8KxRLIZRwTXeobZyG++Qnf9NMPzL9/t/PSxdHqsVspYN4pt866jCsE+NVqhJYcME60j2Vsqr+huXAZD1rhSZ1jiYaPDVEBJRYC6TtM0wqzGezqFL1l2rrICteOuF5Kn/JaPeDzoW8fTy+IbZy+fneYGh3bhmAYof7DA0UBjBD1D66uVp3qntMTZsG+XfU4jccD90XkgWE8RsVjZ47ddTc0NMjbFWNsRysV93m9eP83NXSWzIuYekmrFFojVXrh7lfmwWBYZjxtbXqhpevWIfMxuesPh8rYf8MUfxdEAi5bCUZmxCwfpHyLQHvCLlB1WAuFyCMsgTG9FumXfbmA9genEmv2BFRxKNm6fNxONLhhIqzSIWMOieY0Y/7msojihekyMgm9XXvml5ewhuwNXpvTI8ZpTsXxLKj4qdzidCSgajS5Vaiy1EzBimAqZZotoTLgmpcyhiqrImA+YYJRY/zBfCCLjtFmW5PizAK716/xZReiqllaRdbE6nH5m8/Pt9DlRQHJNRhYvFU9qyQGJf7P91nJfKv82awshLVRgXRX6SCMo3s1QhYJWetIlWJiwSVv7VBhJLgi2ps93xVRq13r7/eNks9VkqmEZCcqtoXzO40G3NSe7Ke1dVbesMY224boL/eOAax+3fXgFj1vKleCwpm110Bc0Wx5eCdcFVQg4EYNDRI9rOYhPeHnZMeoRKvjgIS2GVdkKwV8enOoxJkxi7RYIJToi5HU1XTeFUqPVXnIDZKiPMztbvhzIJ3bswXIS+eqOH95f7/1TR++IkcQkLZzbVtHCxSghr+eQZE88DLUMhijD8DpeqCcXn6xlgOtf76+Mfm7UkPg7zsiobkaTz6/vx57matTNJXq1O/5KB8d/7RtGm+GZFaBNk6YfFIkfi45LYSWXs0Ci5vM8DkDAkYFbCUSqjeYJZTXDJb0nARn11uUhYqWn9NEZibbH/ej/9yMu9/XrtZqqxSHFLEeOCEhW09/n7S+ZtdSJZeC0/roc1Hl46xcNtV+8VWURukqLzwJ5rIvMIfRT+LdlVxEUYCUgIsqLIvON9xfwrUABIiy+nD4G/83ZxFFXv/ypjn5mM8rSKtTkEaXSkq10lWXvVuj70NxIUm1Hl5q9lkY+p4tgIavaOTT1yO0ey20nphz8YZEOcLJhcFJQyyqXdUyyIrKvG1A+knOLq2d0jJ7pHNadbnu8/P4TzvnnYVMiJlmUxa8tSymtLsRriMB2e5ejufz90BQRLe5BJQBiaLVmQ8HmPpDtJVFKUC3ApMCfOil9YvNeop+PCVVP8I9UMSpCrXrA0r23wOgNbTJOpwLROn68fj/dYPwdjNGQpWt5wgKWK0jKpQhl8mB+FbU2wUTkUaR81qx5l7RzF32p3LnOlh5/cNKdVUZto+KlINsly7IbmnTAg/McFUJecHlAu08JZKYl+Whh5MSwWEZx4GwUWd10s1pfIomFyuj/T8RRRSdPGDfVsgQ+AskYzsHVkMCFpWDq9VONif3AOcCULRG3r8fAgWFJ+wYdH/2HrOrRUx44gDmPjQSMdZBllcSTA5CFNzvv/P+Wq7r5XjG3t7tvd9xgQUqljdXU19L1QHXq/vWU1FJ4jTYSMr5vy3bqFSTe1CNuZX8cN6OV6J3WJBju5jafz/XEx644f55zCpyHFY7ine97mBBY3Lnzyzu1byjGjnM4v08+lKX1ZJSQNWNHy0EikRhk9TYhw9POhmuN5pwDbiexwWcGIQsncA/A3sPq9SHS1E3YJiubhj68/3u/leMZ+VBUAHVwzX5UpobEH6rzId4+Pq+Wm0vKOZ2L7fI0jBGVVFYslew7VdDZ4+XpCwBKNGCUpqExG9aaIBk7L39SiDFjmK8UkoE9W9oEMkzIfJ2cFgy83L1nMhrbvQ/iJs/efDCZMv8OkzGcTE2emzQq5EjYrU7LQHLAUBKKhUTQFMiVyi7TMaYOPV8QzqBSKDOCNfQVDlvYEafhoagNN//VJ1V3lGy06mpXoDw8s9vCXi6RKssX28vD4MJuvsRW2y2y9Bsd1eVVhulDl7B5oFL5AbIip04Lv77ya6ePwsrlD1iztsgQt62UDSpCNl/lo3GfkgiwdueKbhtuWnR6jXvUvJaK8Boapveny0Clw9fyBVvXj+ev57fXcoQDvk04Jig1amimPUwr9V1n3x/G0yhAsiiu0JlSvesd130EE3Wr05JfYOTzoMjZJ23Lcs/HkIwCs0OnvKqSu58K0/JPmMFjTiRdG/70gthwKbphB4XluurEBS9WSv94P4UiQxfdptjAg5PCBC1BofQXvHY2uNOEFVhKCVUWN2oufRFZCM4DlXeHfiQxibhCYHLdxNfleNig/oRSGF5S2Ib4isD7hbyVMm1g3Dddqt2jb0x+XXbfd7lbrnH2bcCJlR6ILPJkMNWMYht3lD2aFL4tNMmEOdw0s45hLGuzfeEMyfp2BH0EDR2coL/cqta6HwDBXmNpcZXk5zyo8Zn5AozduODz31kpLwaSMi/YRKcb58fD08nJYk3VbamptDVIfCd9YvyhOYaHD4uVxsUcX3TZGOQ1nKydR/h0njdWTlw4mIUwGpVASUJYrHTfCvO3NMr4m/ffj5j4JiIo2m8985n7djKHFAiPKugM4u/r1MnHAkp0V+/PHTnYkifmo25SOj039qjg8HhbtEgw6MdH2CCmwaLCiMqsjdH9NMU677TYwZiHWwJaHo5/5tx5YKul6J3giZU4DGVPepMWa+AXjvRKmR5YjIIw4yAHE/Dzt90jg4lJTV2O3jMTmVgU94eJ0RL3hfTvHc2Bb0m/dM67OkCbXyilUxub2F7pT1PbYYJgAiL1746HOjWP8aoWYbyT7NubKrOsI/zogdjJQgpUAlLPu6fn++XG7WKzW6/Vmtv/axXS8DlAuBPTsfWCcXK94dd61mxlY+zp/Ya9Vcw8IlYBfmHfbdcY+eTwYaSYG8k1MkoBVMfja+dTJX+JvIf1LYO4JaWGx6BYreFFNo3pgOQ3qgS2Zk27I/ogx0R4mw+ns5YU9XfFuZdUxvpUm1nRx2M/ypCrj2m3YlpzJhkjgb9KknnA40mS8PEtfBR5ta47JPYzhC69pjtBqon+VqJTCK30WxDpt6UW9+iaX/uUXG0kjpt798Yi4PZ8n8HGGfjVBbmd3GqOHvFnAF76RK2Oh26/cmTGvvKc6wqBIma5EAIuiFHUgSz36npo3WTbMN2bI/Npx+NstRv8l18LDz86qfO98i8Dq9YQHNwf2m273OFMFJZesutTCMkVGT2J7Fh8cHsmaRuZ9lXWquRhfElbcRFTUXZfEpNIP7voQI4pLW1cqX6zMRrdO8NAkKHwzmBAFxWC/34S+GWPAEvSpbks/WnkT7OZhVRFIbqkP0th1OFKxpqpcJswleLfb2RTSZrrYzZCFwwuGcSaholKY8jw9zfNqS6Ct85G63UgzEF98Zh+fySp5BCFpU1oc1B18caT+1ePqt3aDJW/kYzSrZjMF9rUBqDmSr6YzVBTxoLo5oqpF6oezCL8UlfyiIAlSmE3QPrC5oi6DFKn/U0BwUoe0zCNYBGhSzQKx/a5h0A9M68oc4sqY7mHRnZ+fjsgvYnjrfIEi3KKZyANuiLID12nkKrfCbkqbH9SyZEMMTKtOi7iRMXzbsuTOijCedVlNVZOBNZv0z6v5VGW9hV49DbxKkOkdG6wkViuL7X49jymdd61Ebt8Jlfs/+XCCQdWO/BZ1z4o0ThPPycjk0pZwvokC2tuinYbgKwfGLI9CU1lwjXxp1UaJLKbzQv//A6xe9f9PmLn9xUm6xbfU3h7dSJ2KUI9FE7ggChK3TLKX4OA7XpUF5kVdwuIbZed6mtwqUlK9KIvVM8SApCilIryKEkeOBfD5Q7qJphJ/weGhkUQwYgmsadInehqO+23wt3zMVu8XNj/cNKWVAGwClxK0ihfhnGSLl/O+XYnODJJvRIjIQenb+kEzPQsU1cxi4TTomSfFazdl+AfrVCfCA/chs+yQgmwY93AVTVYyTzHukR/NA7VWxReCIElNidFpiKkB0t2xyXLbNkXJocor9aOeun+TGihl8Gicr2XrlwjjmWjuOAzrthLhm6rMOhldzZdTMsaNGc5bGMoIsSTf1uthDUlGVHwrSstnUs31wLKi+SC681bCaEMjSeFoUipJPUN4RBW/SAKLgv5HBlNh44FVTgErOEEYeIO3Hl6eRJ1tOG1B/CukTqRsp/+SoVVfCAjxWhujFHdV3THu8J1tD/ivYnq/ypUrJeN89dnyggxsgZTtPlYqiTU4bDyiOG3Xq03TJgAIya/gs2Vt6/yCwYRXfoRw3SyWVPrYoV3M4rhi8DCEVaEqjpaA5KtWcfswJak1SWa1FFbuLOox6xuhYIphOZFTiisdVnf6/9bqI78AApUL5MYkgHk2nGtkK5qGLCHpf7K4vgl7NhvuBZVhuGOyzDN0cssSw3cJigx5LgSrO0fNphHVjtmNyW8IsQ765AGB1fPMxFddWyz1heaRfdFaSagxkSXvkoDQWVepjfoEmTY3LSW8lmni4TQ2mGyUk5QTD1cSug6AconcTCGLqG/zSiNCNVjElaccuOHSsY0HaMx8YzREMR18tB0e/6tTQ2cImHPE4tCiGOU9kxe8w89LbqenAzfYbpYIDZfaigSvnHTCzoBlEJDUhi4mdoMfOnNXdQW6ok72PcjyOHUjP+TXTJ9mIX0OPOWcTW3JvpXKQezpQAFucolLFyfGbXSbuK1hm9bLxa474OyMX+uBZdEITfDkxuv5kFwnmqA4fMN0RL0mJFD1Jkd2jqJgM2fIzlt+Y0qyuiqOs1BSwrcqJoGV1hG9iwOWGcu+B63RhbiZ0VgGkUyJSCdWc4TtyrTLGsQFqgUMMlZCt27A8rjylspFICzRRrqliGNkBisLlm3y1ZmsbPX81XDz/0ip1wYQDyz8Lkcda2nR64OLh8hVh0iTuiPetPh7JXbAv8Vk6ZxtELfrKdNzVWQPbN2S8ZD5j4wJbjLAqJtvdjk8jZBZMX9Rz6j+QTcsktpDmSOT1UlMOcRb8GGOCrAqy4hhsqrf1rvccl3ORk0X+1IoW2DLtdkEZsUcpQGLJ5CG2W42ZVqWaZ5o1QpTlBxjvjRLsod1FdmmTWtyX+tLUk9EIw91HrBXJkLgy2+jCYAlYVWHY73aL4tYPLicrUViXHYeBhJRjWx+kOMvkyQeK7B859srxMhsMc7BVLqZnFrWaATjSTINE5Ra4M7B8kUUq2ulSag2MbV+tbEeXlbH8hx0QXkWyjTx5SNPeHPZEPPX3fn+lEyAWxX/8m0newLuBtSObKjA7KiFo3Tky46cZzNNv/8pqRuwtOY0ijanh3nK+QrKeysbUK6YXrIJehkJSYRzEL3mp7yMlO4Xy5RRrUpYvL0yIMQy7zrnaQsoA5kVnfLdUaxyfOggf5lGSk8k2/p1HoGEyE+DU4SjHLieO/5lWo/wEPm2LXLU8Uu5yz5RkAJ/liPAKF6+KK2hK+58A8T5GwJfNyPIA8w9DJ6Hb/5Esvt4wpoPHBI6uN1qWYi21ljdoH4gdQdjnAWJsfYleEzKLOLNMlMpmZWiWj//r/0i1PGkXw2ifgdK9qgJ5zKs9bDLM1Y3hS9IzpgvYRBWDl8uLbQ0HHeRwCLp7jdhx2yivowlN0Sih+eXLA2sze+XN/msjilTvorQDjA0YfULrZumcyyahfJFCd+eEOeDLJOD0t1nf3w/7DCUTgSkJV21DltMWKydVpGIPxWIjLttE9um9jJLcozaJ/gZ5aDGeIwZIuyPLQJ0fEn16MsZm7OMhsHO1mNUrtdZpOqKZbbYSRP1jthMZ8uiHKQ3xiXVDVh0n8mmaB63m7xgxVh6jkZVFUlZ1venq+fHpWxuk4lPT7rxwqWjcmJQYpIxDoTQy+OXTlqcoK1UomCFtmuzW09Zcday0K12eyiruk4AN8baQaTmO40miPKhNaNSbVapUT+sl1o3eyNI4UqqiOVrOeQOkJID19sdTrvV6njpUIdlAM8kh/uRfzEMBQe/1oELsIK4ifBkK19TgWW4MvqqsRWoVjvbnj8pVuv13fqcQAQTwcte5joybmgalSO9WiqhEG/qkjlF3woEtDzbuo/r6A+l9HmcJUBSkqjaPwKaYreJ0Rg24ugKEvN/tNm0THkdK3S8V5skzndZXNaYVLy083zWPoAH+9KgnkIqI+75Zp7QGsluEAJLiXFJ3rA+JenvekrHolAZpbOiHtAzK5VT1tAqbSWft8d2M2/Y+BarpIhL682UUI/idlsFvnjphL9dARX+J8rGZug4BsMNl3Y4SqYSw2AdOceSbXCr4X/5HMngqSYjvDNFm3OfOhvTVRzzi0Z0YvCfCcygVm6IID0DbdzgfxW8/DbVWG6T44COkzovkBYdj0+vr5j067o8wykwRRjyBrodLYYrf/TA4lZSprAj9Jv68l0PLMcOFfoyuGPH+20yEfLgdV/brlMSFjtdgafAEhPr2ZFyM2arwgRC/ubJoSa9LZ/p9fglc3t5eXk6vLzsF+s24wAaMSG1Ad3mEW8uy2a9KBJ0L2WwLEdbL0cLbfX2ejgetofXdjbfdE8Q6t6382wqa6i5z37MPIX6izLdbjsI0kIJQTBpLWeQXE1oGM/qgSzAZdnQkw34wtnydOnaBSL/kA+zirxUOUVTpDywBh5t85b8bcCyS4vEaxFIniHW3PZ0y03Qww9GQIQvzGZ4bDIw4/BxYeppViMheRQdqttmtpP5ej5l/YWSrLtTrTI/KprBd7Z6NN9Yxx8woxVONVlyAz4wkgnGhc9Pq3XbLjvktl2TzzoUi/FnqoTsVXG8UqR6LqVkcWoxWSSpGEyrGP3uVRNXXnljt9o/n+foTlzTdJ2O2038sO1EDFuApWgKPLeX4QI4xKuV+FKT2Nfughos/6EuSUL+gaPYLFeHP0AuWO9aDHGETvyY5mv+0GxmDaX8CCtofjS7RVHArv58vH+vuyWbgYjEjy3FElQ2SFdauPSSlT4jRyOvniGpJxmlQ78ytI4jTyNvBttEds9F0ciQqMhuFk/71aEDtHUaF2XwepaVdI1UHdNurVuNwtqpAcsy+rSNh5bnRhRmcPsK/R0Qg+KUljnhikB6f5nXta0tErkLwKKbFRIPTCK8BmWhxwUvCslqD0dkJZr9KB1BomhiFmdLFy1DN3mq1Rge4v9DuIb9qkVDo2mQM6Bj9rDH1HbKANWAZQ77t9aNuR0ahiB7wJy7W17g5Xq98XCWmmlhs9293p8IWW0o++ePYXryes7dun05xHGYSdD+73z/eDhsm8R2vPd8Rrfd2ZBl+eid0I4m5KpjgGw3Q+1pxlliCvOAMlPW+UMHYmKR0FHA8xVLLBXAOO0WW7HzdrcpihI4ieGqfGnLB+DWUrUrRIcDIMCh4DGvUSmPa/KirB6aPAze15IthHRd5j00T377+uNph3BEcgwYlqKRMrUgv/C9D7UUcnG9MSKwMltkcDcu4pGTBO21BK4qPiOdbYcrX/8c1jNjHEvbsMpaMMrFYEUybNC+HaEjncsSj+Ths9GFMzJeIKtqrIQ2rhgySRRKYTTHmJPeQrJZN/j5hJQ8DKXvD2/n80EEhIUKa3f5Glh+c6EzxwEG/DsJG+0rC1z6ErLRMFhvSLvVDuIWm1A4M1czakwG89VBdK5Fhg6HVvnczRGC9v7n/vn543zZFWhxaC1W9Z080UEPV+XhHJiOJ06XW1SNYN6jABF3WVHBpIbY1KEtMiZLs3yzbLfb7ev5uN6QoYgYCawXxEqIvCr5MI0WNahwrR4Gv5be39GgNjtcuTLbNnUBU+KBVa0Gzx+XHR6IiS2dEzDIyotXNPD3+CNGOFEKm8myoi0qMMmk3rjbk+uJWnFGA880Mg77CmofvLrknyAUBiyZivPH+68WtkP6hMj86tmiq8OUK5EAkTpvT/vz44LVLtFMSC6Px8W61juhBkHbxJN6veRjWSlv0z95Em+ulxLJgdsyW7brh8Prxz146XskUwWrrgqsa0/ofuX/mhBU9vRFJXAHZb/R0Are5sfk/ra75fH565U51fXW9Vuuz0Fdx4aFeudpjQnmLWlx+D5eTqv9y/n9kDuaL3OAfoRYIz9FtjLhdfU9LuasxO0S/oaYf1xCTmS3r9tM3CVmKfbb42H/dd5lQoSXBLACgIOI5tGl8T6Vx+GAZXv8RL5ttYHxyy+7jdam+BLYzbod4LoessqJXdCziEZPDfbqxzualbWEb3W7QrzFRJ8VW6o/GmfUqxxa34uwImNuY8zwsOp36P7PAh6+XqEshLLp6vz81mawoGlEjZaOAWga0fNVCPBbHJenh4bjz2RkVuvD+fO1mAgrnhmalXTC9vvjawECRC+C5ViRYbfKyHKRR5q61AgvTrCCh9e3l66JJUa+1W9mTsdbLF9P4MTi5SsbeWCZSLFX4zb6tQCrgljH4uPr+1DI4j/nkDm4AUtqQ6JEpN6QoY5qKLdh8QS3XycVnunF6+NyosAio9GUWgRZKMtbMqDCJUOVpssLXSLud5lokLxbPB5xTVP4hyxhmad9vqBgBQja/SLthy7D8MML4Q8tD3tg6f1tTkUCpgpCfVe/v+VuwtXg/PMFwhBDJm0MuVNYPzwdVquVJE1JjWmhjH3LNCW456WfW/brLW23Ak04CKGHLrqRVl8BF+ubHv+9llx/wgk2pVnTPnx+ryGeUScQJl3xM8kZk4uLIL6Kp81ut8tpRGV9RxHHxRwqCMiJWcuTN+HcOnhDXr3j7speheuljdCRyhFS/geR/GW1Pq22l5d9kWrF97+A1dP9TWKryrKXTrjAFmHZ2ktBFh2pZQq0qg8nKDz9/Hw+KvEdKUhchVL0pN+7VTVkhyvy/m2QHEqUe7bW6C7Y69oeOI9jUMY5qdYBgfUXfbBNHI6MMJJjhB9r5GY/HMu24uObdOxC2cpeJtvzgtVR1aHkr9J1VlUus1l6jn5d0uAKWNRk3jdZsfpcrHOCwvpu6W4/KLqX7UkibYG11NYRu7dNc9nO8EDv2nmRz/b7psiEh854q0DJ3LeABVYmom7P6jj/PGeswqZ5KL7ambbfyPLpofYxaaWK5vh5XK3Wu8Xx9WkxnxJMG6bDGfJjgCnLm3VLaRe6S0Z8LMNXBdKcmHAzy1+l8rHacOtv9HQ7i+TBFCMuheS4TCDMt9te9mAXbmvtJdiz2qvemKSSI5oVIWoAgdYatPLPxXVOZtzbRw4S58f9smsvGDD8OTQFlfA9E0gKgGYT1HfeSS6sajDJ8bGgfDadhFQ2N22K8W0L/3txJr9GygI3ibHQW7BmnGtGO/WY7PR9zlOWBJUKkxy7JugJofovx6pVL622uF+xJi8ixHSRXDlbgCz41O0QxbueUgm54gG6DltRAxTLRm9ML5ElELdbFAxyN+vV9vDxtl1AYlID7bTm0hFcFnPuvubNWE83ea/3JFhN5l1wvfTbUPgbWF57QJ7n6Wz//fX18/kD94HJKmC63XaUlBHaL4rI2XIpfWkVstGRQDdw43qvwJtVRYXkpvXycbZOxt4b3YhcEFik4GV37a7bnV4QzyRgR6oXMOqUX4l5RR4fYgY5asM7pT+bI7ySp3XdMViErHt86YDbA8nv709tJlRSG4OTMhgPw5V2isn2AAK6n06r40MJmqTry+2M7jr2wPIreYgrUqNgmLJAAhBN2j2wWLDt3j4ahOfWSo7yU5Iosc1iKd0ZJocJtttHikFWYJlAgAopgEC3bravy46i2UOdXwJu0kFQZivw8c01s1uSwP/QS+zbGsUJWpH9F4Y56ENpJAFSWc/q+ZC9n9CzU60XuKSyPurABKORPie3Ss41sLRYMmLymWxWr5/PIDl+H7YrFmKWjfYbmDiMeT453Zmgww0q2kWwYhnFlW2ZukUIkqiEy3SkDt+AxXJGFdZ516KUtWkXhz8+H7I4Vc6zrif2wPKVbqFA4cfjZui3pvq93xY02moJGTg+n7lQ8viGL3T/OgPZzasOwJUartRRmbJYmLAdURz2SSSwMh4iixzZ0Al+/MVr6HhgsR0tcbom7aYaqmmqWiGeUdns3xBTGG9hFKEpk2o1yPapu3CRZ2UzcP7gZzgpLyLVhnjy7Xp/7mAEyghHWoGKjNxrEIXgKuD9aW/jDfWVlKwUZvsmlnmmjHKQTEvM/4+TAvUjkw60OR7+Q2BZsg3dBhYxV+ekn3rxZ9knki68uNodQxmK4/kHHYUFTjUrigL32qRY2JKYoE04cQ1Ms0okvfeHqvD7oIdgI9RFCURrMUoXjSiIF1eoJnZoHM5RJsXE79Oyjkyn022zt3qkWSxMMLAkgUcnEWEm6SgNXDvSWPEAA/mvDANfPw/7/eXw+f4FbZAWNUPLnBw9UB9EkcqmcjebADipeLPYhBNVMr1xVIVgE7ollHSGBnV7soEHP3gbR1aZMD9oLU5GMWF3+W6RYFoSgRYCHlitsPl4kdZX12T8T+8B5lgZPWYCpeKQzB6O50WHW6VaA0L4DgYsDM5WXcYUabnTwXXtKh3ySuRai2y+em0zPG1We61zAZZ+ChhGNh9mwJLMLM3LMlm/n/mMWsmr56b7so8NFGioqA95WtXNC9zGC/LXmBWSrA5FHcwyx3FgdUxfRbtWnXD+6PbWfpefYctl8VOuVKpPGuJoFGTny6bL55sGuc3y8fn+OGcsi1Pxe9/021FcUPvG+kxBfTmQwqxseVbH63dtBWQmI36LEcC+Piwg4Xj84481e3hhIPaH2HRhteKKVKANvjNfE1YZ2imp1gwFWLc6jFmM8HnWOHPpqlV8iG4ry0YhfsbcbJ/PwdOwufDw85nrzKJMu9YcvuVr+4KcRxPzMRdlemBZ3GWdTI2ckvbt43UxL5BI5XNVtB8SWDASixXaKlw7NpEVcyIG0R6LimLS+Kr58thlkd4ZfsGc1WFlwMhSET7Sv4EVbaZx3Lw1sk7Abb/3p2+HM9IsYBrJB0CuW/iNMziz0s4K60rk5BQP44BjkY7tjuO/13BbG3xw+3fPexFgRQj2vP6w2pMasp5LiC4sIcHQtBk4bOiYvX+ucppsTygwZVYfu9Nvqbob2Vt3RvXkvw0mvF9Sl0yKHOHpy3G3mc92x+OlgUIW3bnJZ7qOmwno1O365efjjTqlWYLRwjp2/l9QoL22TJgaLqKw2Mr68F41ZSizv7c2SuoAP1AaT4E+IrcnKqkgFJ79jWenaOui33Gr8yl95mJkT4taxcySwBdvnjCLBJ24DXyMNr/Hk0EVssmR16TYMaijnxDu6dM+p5xcyoS/ECuOk9AZ96mxYPD2yol0k+0EllKcQfqN2105JgvAzT1pDmRxic+yVQXQPhaed3b6+n56Qnm9kn53RUfopuAnyHiUmH6thPtLZtn60PonnoM1TaQ+JLjSKbO46fZH9HPWLeSMl5uY7YcqO10uD02dpPoR16j1wPrbrYZtuIOT4M5YsUzOFVU0hiWwUaNRssNnnOYZxnVOj3vOVLgsQ3GlOGSVcZ5DcKOe5fgxBB5dt+oKNhwsxJLUX/xAfEO4m483TU+7E8IS5oviQJ6f3xZLl2pSUvL4lCgxiUCNpNbnKWX8xYm22fc1KjUO14a3aq6+o/T/qvz1+Y/zqe1m+B5xiQgdYveDAh1g1Ne1bIiPdEOK649VUdSspODmTqH2HfSDUuXECsYiEWSekIjWLyGqe3mcrDMRYODVcUwIZWQbW8p08jhHb4FgVNWz9dvxhBoHoS/iwUpI1x0qyJfKUg1WL0PoYryemHm1UEuT8FTkSW4tqGY3LGsO5+ev8/lxezluIUaFYr5Q/2DAno7Kc+lHi6+DDNtGL7FUMpP3hfdRjQlSgci1q+bb/eP3Cp23fLebIsjId+hxVma9WSz0PSYUgnK0yiQVFOkqkvKmEFmeC+tRszcCS4kqoiWnQYQ2dySJw3X0uhiTTEjOVnmVQ4FABE/qlz+2kRNfqRLYCr7z9ZYcXRnnyIgGLL29Ng1uCNaCqjxH+c/3GoIoL6d1C54KHo8szwdPT5d9N63YXQYeaKV1s9Dbz3pe06oJre7UVsLiUu2FoMLJy0cYHVvARVdIWykavMhhIMajxobt5AgIc+IpAzt0BmSkc18SuEP75/Xjm2F7TMVglhi8wCLfhqUhrzPhx37/2WduBiweV7ucA1ZrxXQLPymf7fZvJl3w8XTYQ5QRBhsHALdZQDZqIazca46yoZQZkyULQh2GLJ48kEli9RrR9dssnlC3agt04CAmmpRVgpmrXSKdVgaKppEpBhpsKLgj1bigjosgv0Lsl7e4/qmwviyXZecgZPXGapbSUbM9X/jHFACsxeVnbvy6dyk6dR8/ENSxB2xpW8Z7YOFXXbrgn1KVWHDb3jTUUe61Ek6FMrr+usybTfv4eT4/7Q8XZsF/DESGJ5OdhzIMc6t0j8XzY14h9SYiSYTsKtehFRW1sUawvL/XSQOn2rWKAx4RzLlWvmTEcxqmKkxnqxH04HmJqeROhWlNfZ1LC/q76G1Sq3SsKYPOQHNgSx0hHcI1roT+1u8J88G8NqVD27YTpRNOkkKHf8Xh9+f3r/Nxv982BYAV4qgyRPFNk693oiTetzh7QUTaCt8bHDByBWs82e0ZsrLBSZGD/evLZb9ClAlE5ewEx3l7PtWpqeGpjgyvUb09P3Bo1zGMxOmJKWFwmS3bnDO16gsVC1Mt0Omots1OWUFT+3dppXfJeDhXDzDvwvRwf6mEFUzzV1h/mMDyMarmm//yz+hvhSGXxptHV8J7doLiPiqfDUo233+8P5+fHraXASsKSWaqPmJV+Mhs3l4Lyp7KncfN2OyUrGRS1HGtpEA+vP/wMfMVx+1PFHLfQRpa2Opi3tudjquM9fpXVc2mitYAEUtRYQa4OrPEj4BHxXBAAQnMYJHgmSbVxCbrf8vBa3itD5mnFPM/pX0W39hAL0yG8G+S5unrDDW79W69xdECWUlcQ1mMzMvNJgONogag/VybEeulWqjpuCUfOj+9efi6f1yjVFMXOYDJJliJjgGzITDK2RTI94enPByr1cY/CqCgxToPFXMyP0bHJENAiHd5STIarcAz1MCqjtxOKQW3VmR13ZTmqmNWYrwmmtu1phyeGC55xplNrTUMjdd7eyVDYIUM74SuWvEOWEo3xmHCBOmsw5erwhLkiYYZMK5AUg14qxG+V5Jka2md831PGaF2p1MfkEhqS4YdjoozLCLaNwJLas6m9T1wTE36wqI9sdKsJA6U/NrtA4fSZ8g/jXFNfhA5igxvyil67w9vzz9cKBsyeTIubeC0KQC8aWojxT2wegq5gks3vFzzviAc+iemVPw6BDyXjT49viy6RoY1Z20HQul60eQ1gFCx300JolWX2oyzTa7bqvqeJcN//qbKNWXz9X4+dbLeJpKvxqlFaaSDoAG9v8Xi5XmVGEJcpJpuaoYotP2+80JgAR2pyg1wtEbMvsxIy9xb5cZSiXS381KNFJ/4acKXXi1wtrjI4rk02+bwf1pwTZ3YzS9g/d3yQP76uwPnYEqc6qJvedMx+q0PCZ0BTDPl5lYZE8HBjYZfhdAmAlljRYbojFGGqbwFZdWsQwWWvvFd2ODmB3eOxmFhpJyobYwNaRvXy4wPL65vuz+eKVDdJHgjL3VGjQM4YlCFNqvD0/cZmxXWS/XL7Ochl+UCSV3uhWaU3pm+qc0AwKeE7vBzNTra8KcypMEaIvQwmlM6XbaLDg4MOdg844wQOtst/n+asC8dTsignW07nqhOV+jB/3LAcvs6xZMA9LvVjGw6cqHcIS0qmCzucqrn+/ePRWzIUkJunIixoqKMaxmwMih9C0l6NDyNppiFkf+V1gPNTF+5UXY9PaEm2OEuoouwwrWZGQWWyrjUDzmjXXEAIyfWM7hW5CGw+jS4B5ZZbJOCIjIsoQCXr1iXbGgCWnU+28yqFOc/uJMoMmlZkAvKWqgx0bT1hFk6EfiObTk2YKmwXb4pkfyKKfX1bj4ovhpXC2d1WhRgVXfr/X612LXbRSaw8gVwWke89+Hl+/HUtovjCmNnibAXPTtZr2k0bbqQNsdX3H9vWezRBTAZsLR7Fgs3+e5Gzb6S/eoZBgUYUwFLWbugZAy190XLPNBZ1rpZ7EToWMy0bUdRZp/jYYundVQdiCgK+8nIvLpvnTlsTDkmOPHVd8cpJEUL68+cmRCxb58P8Dm45Vj0huVELe7IXFQZSQ41xBFyT6cf99AUTdAviNzk7C/beiYf+fr5bETvbaZlQdlC46g+PbCUlNMf/l38ZJtCAlC2NUmTOCw3u3Ci+Sz3cJB+hNnIGwXW5ZgndZ3UY3nOEGJ4Kg+j5mx5qIbKwXLyYxdEKPgKFoVYmdBwRTtPJgSBQa4sXV1ZVmWZ6WikHRLOhfXq8+t7u0ABfNWSCR3F6ciSU6aMvMS0qHGsp8T7bJ/a+zyfLTv/oL14PgHkg0k2TuOqWpkoBxRlSldVg3ez6gCyKJIRIElPdQ4qbFan2AuSqfU30pUbCiOynAbRRMJRsbR2iEUmpIqKtMTpFr00MWgSeiC20okBFmL1fL0eQTgPdIKZN06mjgu0CYpU1Ahq3SBhTBbd3u+EVtAahw8Qg9XHRp4Sr1y1XCm6o1il2oRY3osQ/BohUcPMw3errHNBy2AKVGkWT9suHOt8IW92nJWg9Q40Bmoe71/nlEAU5jHq8qoToaAcpvPFa8zsxAGL2y1+/jjSZFkhTqqEAixl088n1ofBoQRRHAjebPGWwopj380CHJnVdtfu1h2bTQFyBSLIVZ3Yd4r5rAc8JR110GJYP5th/2EhtnLW3ZYSKWHqKIM6GwowIVlBxyGtEsSz65wrxNSJ8UTVjyGFmj8c68nIBwT8+jQU5mV8EGf9QVvVLM9Eb4/HgewFjSa4xOjHKvrSfA9SkcVWpnPped3S4A5UHFuzYYRDTVvMKQHBC1baTLmLyljnskw852vY9sFp+fq5NdCUgjlp5rqZNYhvfNLbp/Zi590z0zdJ9IOU/SJrXogu43DgMmavJ+WfEvmcU0/DNACw2H6bN5dLMlFfPkw2aeq66sKMiNdv38n4F7Am08v9H8XEGzG3l0yzxiCbB/RbV93lkd8G6uzg0Pausc4za5btBQEZ7UbAmRYLDVk+nUzlKaMgqXBwTMvSSzn5RXp2FZRKZNpAVi0UIGp/mjEsmGU8mMrM2lq6vSK6SSiYtjquz/zwnfNCcLSDv6Vvo01ab7KsKOyEdnkosO6Muc/AIwnx65xNGrrZYlawIW76UqZO4E0WROpqOn1ZPGfT5+Xi6QgCsQ4aj+9Ul8pxlHQ3FiMWMG0wi2HG3PX4/OwUXwtqL4wL3jymqpuL1Lz7851os1H9RgiGw6gHwe9NxhIhyP0hsBDM7HeJEK74C78zK7sDCQe4W2UFYMlVLdfxhGGm34ozqQ/3Z6ptjfycPO7A9PV+ldkkHmtbpM66Gm9QjC0hNcEFWbHNujQdKq8WgT3lbdM6Wd6028eD6KHjXJzUqrIOs86EQYYgHtiaWT+zaJNdgjfXFTPtvFueBsVIFQ5uZJWM/iyUWIpzZPP1dOILTKOxSD6aGE25e32blZrX0qTpU2Tdf9/x1iahxGLXpV8vxTHh90uqKmlouADqKWO3XubMAUuQRQ7oJI9HWtX2k8JB8Ql+ViSXYRLaNb+1MSfH2JosZzFsGqtSXtlPHwBjl8rU9Ub0VAJ8hA8ovCfkCyXgUzqw32ETYPpggTE8xL8N5nGuWdY3wFkM2jrRYZcRgKL0jVcMLvJ0zKtanqaafPGwkK95f28YUNJiiFFi+WL5+rXNlWQCyOjWapNciFP7YFu5wFhFDryIHz1U1zMONDIvix3S/Q7birjeUaTLFa2id7HMQlJFJQBy8YU1G+2ZUtjYHifzsSMSGSeqAe+VtXXKBqomtFiceaMCShZp511677K8BEdZkWe/+PmjldrphPOVfpq1p5RZrmSyiS4ptsNoC5zeprJqN2dmUlS+QsbDN5Vd+xSR0pySRmJm9W0IrKeP1yTQJdCVPs39rmgzE8VBFt0NDFh2eBVGHaxGwyUacVnYzf8CyyNLHY/TgInqFmQCODGhNSXLRVMb34QfTlWibc42qG4TUT8F2Pp4IASpHgytqqulFuy1KOk7sp/3p1ga7frbSES4Dnr7+baLJ+JWdXueujlZdqFcD5nln2iTTB2ErguxsEAuFMjui7YGQwYTcCkbSEpntsZpuslBwpKFsPRp19Iu14dFC04Rkdvj82V0w5DdKEx+mSbVPxhOyhJlak3zkRFoBaUux6lCFo0zFKD+uP/iShOO9YQaFjHl9rV4LwDvGZd931cTSdNdYrtqSTn4yqSvfXjTp10Ce2qRthPJyD3jBUEWlNnPuW6QwDCfFVVNRlyXPob52y4UPQnfRvXA0gsj/AEEfCwUsS7rkmua4P61FlKZ+gT3f2FMQpdYGWOueVnFOqMn/jeK4lMxEZEU4IOvU1diPofVqhxPZrzLjYvm4ynuD35bLKcBu4nWlb9h0wbTI+dniE3TRo6VZyS1jVHCbpTbdRKN1S8Z+UOQh1+NfMYi2nyBIIpyzhm71vDmvbY7mBQ78IVTTtN6Ivp11uIHVNSKyUcK62f9uEjJNOovm7FMBjz1ygq36CMluqsUXku0WuK4lHyWlnO+275+vHJUCLiKnHifPOg+HXWfKqds9tPgZRQARkE0y/mhdotV/Xr5q46YMeZxcrsJH0K+lwU4fBIgNlGNNQ6s4rFmFGozpO+G0udjNRQrYqGTB6xVCmyN3azG9UzmXuCTZ++BpWchBlhEPJrlbDcD1cMIPuoLyuUfi4TfRAiNESru24KVGtvIM7RlrK6mwKgJzZR1G8ht10M/AgnSIk7DwGySrqbWz8XA1vvrhR5Ry25aUg61/KMxvfkI06YXcJnd0/n/OF8UTCGpQD8P5Zaapb8jBNqWO4HlMtuACg9/L7wfMWPBH+PAz/bjSWuJV+mzcdaZF+qW8oAxdTwNdBaPt78krGjldWI2615+no8bmLBKZ8NcCdiQhV9cKo/D1cQlibcate7TEMMcPmxM5NaIKp789MtkDbN10LdkTC0iwMW+YBREZZmhq+fWjgpHTQjCl/lQg2KvH2KRu8tZpIgCCiFIU4s5g14nnOSvkUfhrVij4XTxx9eOuPJO+U6UYQ5PsylpcirIFhcvKDcIsCycpr01YInZC9vldqHKDldarbSfi4yOQ1JpRZZAF5zHdv8Efvq5EQvAoh7BwBTBEbZkRaVdZ/GF7iNt/JHS1Ukwso2/CTNT22ZEYCG93LfFRPUw6AGdIp4nNeKwi6F1Kp0ZmD094dpJROjCWF8ulE+NRX9nDGBlsZjJodisMU6AXtvoy9C3wlK15wuInRnPzL5VP7nia0T8XlqMMPdiX9nHqYwlM5SdbXjGIiu1K17cwwQd8mHvKsVl0LqGxXKfBLZ5c1rZuDghNWFNI1vNQquM9BxFe0/1g8rArXdtt1ycG56JGuCeKdLv61dpvDDbLpBq0FuopLsFTensu52WWulmI2N+WCJaCQNtAWoZ2+6yNn2A+sf4t36B1hghf8qcW32kK+UPh4xHQBZfdy20rWLSp5RDEuIWuISflEf/9fBV+o/ULjlGgmITk6D6DNcUp0Nr0NPqL8/rlOA0fJj2mEeWDyHUvqrEy7Rdo8OmS6HUJHgrZ3W+IQ2T5MVpEbPnYFZqnCFx6Jer0BC0j/fPl3Y2S/D1bBKCyPLQsgFkP+1NNoseFntZO4U3pCuHUorr13bK2RkzxFVI46ifhRVMaB0kmz3MdCcPK2FloNpOUVzI6EuxisdaeWSg4WTqPa5U3YyDyNh40H1/NaHoHtvgQh8yal2CmLvDWsANx/x0sZhl/Aqs7OVxNtVJH4Z83eOeo51AGg8T47t2hfHu8GCEcoOWtW9WMTkFmsSbmLnNa3Esg9NvVKGAYEyWhWldQHtR7gCldWyk0B5sG1ijvXaLBKYlUOiXckZg8NRjqwkx0zl/1iYKTlx4+WCvD+v2yujB7LQurPUt5sVLnekPmBTRXTQld4N9kjqGerRWc+ndKf/UG3G4jnz9ff9+XDdsUSmyFFjArB1qJ51spXbUHK7cwKgy+ufTiYQ2duP75E1F5HmD2dxUGRuPqzultCXrw65WegjbPEkaMXlFV5Npa5zXRq5i5cew4qaU3Op05nTzxSnPtq8djJ921npd7N5m4how1MslO1edGK9Uwo7j9Pi8nccWM0Bo/o9zwea7xO6yww1AMQNEHCaoVZzox41n6zgyUVs4pQotF6u0nxJi8JcNOsgaR7R399jw4dbUkFjjHx7JpeXnLZZniJXjIXauV4b/Du1Mlsgysp9kx+cFSwYuyeFsuQOWr+kZ2Y3GO4jpslR6U9Ppf3iLZdNber+hnGwMngqtaMiWawtGeM9+q4xQKtAe/7z/XrTsCvjBECDWDYO6wf7eCtHbmsccmPVXV8TKsxXcDVc8PcMV/k/Tj7vUaNH2LPKQ/vHl46JyVFISmRZobhc5dMxQxZjCQjvWAK2j36UnjFcDlgictYfPNl8sqZrMG6c7P3vlDXHrQzJXqlUuMaq1KxzV507G5A/3n+s5FXBUw3p/v0hCq30ySRVgub10YXfsEoxgz0kbctRs1ToqIhe0Ag+KrJHKAppqkv/yFLTpIGQiszmEPT2hV/rTcRYBlopjAVdGeHRuFyj+mQdOJzLcbH+Koc3L/Nqn74Gltpsg4Db8KvB1Dblkvqbst/daEfWmSgIUrTjJOIUzIbD4sKWV8nL65gDT7cPH1/7U1JWyIW2BTE+kk5s58tLg2sEzZrBjcKoBrB5CVev7TSAUXElfQGiJkz5yV9qkVYOOz6sZhVmIK4SmqFVCgenn/HKBxlcmup137k7Y1JCdqMnAYYoSmqtbqICsjCjCK6+Y9tkPA3fpHC0ttOWhRLtbWiM+fMXqfP+8A+eqJJpgB2cff2xIhdLonb/CF+pENyijL6gXIZY9yZYx0/xj0NjgbrkJPrmMGpGZPLY5VK3UsSzEOC4qwchjySwgKGhuvFKLuVcjQOdakpHauOk75edVoMWuEbjCxWeCjLAnznodfZ8XakkZTjSMfu8wNdZAT3xQXPEAsNI5an5j9gbBKI3Z5RDPx7ZzDywTwTkdsdp5nSW4MGIVNNezIRtJ+tVIuNIUgcPYRTNDi+ClM9MpsHDoS422LtRBsm9Jjkp9E08A6mUXdm9/nBopsYUpyZkI5n8+uF0MmgTdLAdXUZiZVvaxWRers7J0KHouYX54v4cMaDkRx+nECw3GajPSAAFdhwilnzd0d4cPIi5Ie3x+bskXEJs1RGfmj1NRUTMPB0+CT+eNtMXyh5YEa6rrbjLaLK2ZB+DfVWPVDDD+j1p2t+dPy6+2JXlILbhKSHrwSQjmJ8ibLUPxe90MWNKDnKM2ZrRUp0WLLuO6Mh4rzmf6iIUyHliM3a9wZSs3CSvkRpo/+2xW3Ml/s2t6DsGwXha6ETEtiozPrxRIdSr3ClhUPl6vzu8YjagTnbO5A4yMYa3UdVlm0EvP0AAJKtQG+DYTXbvpFtnyCCUYm+aVbVO/KV1K2Eu4cWpq83rcQRoMNHouQyzm7emV8+Kf+11HFVXOzeUZefXqK1xLTOwvYGVaKChk7b6eD5vKllEYsNzHiRpwXlV5W2n61Us0WYUgoFDNdP6qCzeMjRkvz8cuRhWUmJLKMxoAIl2xpozu2Bp3daYeBY2XMG/CEZ/GHtW9DpR8EsFpbeVRVBRQmREby8pmk2uvFdCyhi0fZLcuCFiY1aka5D4FveGKG/zYDc0u6w+n8O43sEw7n4fF7fQTkalPucOzPfv+xnX6zR1u+0ZKDsz85pUqDAdVFrkxPo23KTpcbdZHSIU1YB7blDiTSKNeDHkdMaPjdCxI07ImrkLbO3nwqaCgwd6vIkssG8/lbwxwdKMg6tVpxEkCs3xOlHxcNYfjMp+dXrZgj82Rie9B2v/4/D6QWl+mPAkKiIBGtomF+iuFKL+/WsJsoE00fVbPPx0jUT/1+9vvBnnS7qvhFX9EXLqt8x4KHbhe3D/qCJY+e9njx0NWhbIBCWaMmiODCvqrFIrVFiLbD0w5CLMgqXXMhgbLp69mBnyezVKBzf9Om9P3VDf+yRD6K3jzI6XJ9spg8hje0X6uc3m+nJqB2FqJ26JEcwJqBnc9sNwGVR9gmSTUqEpM+tkyfYOWJzl5ZFnmQzBCf1XUV9mwjGdONCtmN9WnrkZPqLL24ev5kWtnGFZgas5INkPmZdR9tUosr4/ivx8lVWRZWBqFa9sUoMjCYyaEc9OKwRfmUnbGpWYlbJF4EK/3HXDVNC0na8M4gQ7B62q5nG02Nfia6gKZqDOYaXKlkowDrZiSPavDWvibz8nr/VMRgrfpe59qPlkOEjZYsciGzg3yj5SMKN6QYRMDvNnXWyGeT9foAWh/LKcxSzJcfRVV4Lw/tcrXt8NEGpHHhlxj4xmbHli9TIQvDGt7hn7zMRPpZS2NTvZYzyvAIvL9M6il5HCzX8ahKPcqeHUruqYvqZskCZJlKK7QYPF7E43FIaOlv1uKLP+rJvVyz93wjnnCGzLUUk1sEepxMxT1mZIchAvfuR/xGENZsFu93n/tqSUxZREejybwlTIWLsjeZ0ShseSvsWwbdtBDmFNBdtgGdxJTGrBoWI2LCnY+zqGM1T+YOKH0WpERrQtkgFxflZakT8dZu8JsQAUKbNVv+ncdz2SWafBjw0kjt+lDFcSgAvq+5fSM79w5iUsZhcq2qwQnebVHnIalz1FFuiT/eV+GWlSWDGf5dX+EBAZJUFOMpuSr10HCkUI9Mx58JV+MY+SW95nCmh2/e3U+EGAzedMGvSTO7Xj+su9Y3TT6Ab+A4x1m3Xk7YzFbdN159DKK9FMVjTe39M5DEOsVF3Rr1/p6fbhU6bSdQcs/gk6bc+DdlD0MNqAWj8WWk5hN7Wp0l2JAzE304yrwcRSF3TU2WmLccV6Qnj/fwHQs19BwxDxKGVo5mNf+94AH8OJZYrY8NFh8iDyBiQYqa8ZG5ZmqVvGMBss/haKwF663eazzLmomqaexakjQZyCvi/EUQzY5EyQZannGBpIxQt8vodj6cn/5aBNJ3CVp9dGDCtD8bGC1FVhWIXQuSi6c6i88/qB4bzxrWrDXMxwz9Bvybvt9ftouNoORMWp1S6HDvVD8NHy7FrfrYfXLZpiWWdqkGvLp8AjWeabJlEaVD6c6O0S5MnywfT+rdJLGmbZzm4fktUESijWf5BmSXsPFYGDhknM1RgeIMCLmCkfujRytVLN5qz26G8xETS4/z0A8IDg7LcUrIFFKA+6iAv4ZKC8AFtaGf1xWu2bWQBB2Bbpri7kbLLGHRrqkirbw3AOLZlXEwPxhatLbnKwXe/zoY/rMBnK3y/2MBtrbh2GZhvPj9wzeBf1BKxgiJ4LVEe5aEHF7hE0eahPWlrnjEaHx5athmcQZmNZ6WTcP7dNXK0L9ljr1ZNRh/HgIVVXPN6Uc0q1xyf0Ws+ZJShY4pPzf7VfbV0R8EKHeXy5c1UNQMLczi+UHKvVkzLf8svD/csfVCLt014ZZdaNu06A+Eg7EmCUGF4dKygKt3TNpOPhIsdDIjW17nfMAaNqlVOybbOrxnXbWmJFa29ZuBc9MZGJp9DyZtE+hPbDMgBneGNioXHMqvTcCa7lAa6rNYY12h12mOx0ALyWAAm2L/Rkd0ePlYfvwsKIua5xgRh+rbx+Ol2mkzQqBrweW5RfaJVF7KTlDVrAQFWlgSmPQAwsGrXvPPLBosKJNt/16KFBkr3C5nHYKfr5eJqluvVHdEFOD8PKFI6SRy5qNV9uq5BdkDcl+K5qvLxlOMRKKq/Kiktd9dhPuyvN2zKyxp1qwXpjUxUMOvod2ncEJoggzZRFihAmVxBgsyVhAoZGYJM8EFj/SkOVHQzXGscPn+za7GEyRdPvsiLGgzuNHhBvGGQgp5Q41x3a7Fu08623yc8TVa8uFNO85U+doIwvINH0nwGl+XIPVzHdQ8lH2SunGeJfD3VFP3OZfrgHObKPSmL3KF0lcJFA4hXjhz6XLOF2BP9IUKNtBR/L9mWvDDwukuhyLZNt3zogCg5LzeGiprS136ifz1Gb5zQo82zneNyDByWyFzfCLxYpO283IA4tnOPv8WFeEf5ZqQ1VdXZS0zLfoqZX9p3/Yz9OLwApnMGD6xUwMvDAzxePjZH8+Ztpv1x/TKZ8AdafVPNKBLMs6dO78SpaDqvxV9rAMJTRnISGl1jdVEWhEx4HwYJTXYRT0SMZIU29a5SbYjJqN8NsudS9EZmkymzSh38lnJW7ihe6PCsHDEcAShEMpmjVFXNDH+y37KjSNwycno/gUg5s4T5Q4ZBGkfBxPRzycdZwozOAro33/3OUMHlg2TGG9dxUPEtsEqvKuKBGzlPPTH+dn9sHCKA2UnxcXUCh9+uPz4/755xWqlaT9jUUGKSZfGfWHqrAWlm/RXQvispTgJ/TRS8orZAlWQ+KhWFQGYpalqYuxGHON0tVHl0pWX01w2naQd7Cg4hS7O66L5+6X3H8lX+FCzztboGDAolkC6T6EL0Wn3qo9cphA1QvWvKfK4DVgqfGywFSbxMBI2bSx7XWK0oRqAmA3uezU+s0KZO7jt3Z1qFZX75MlV17ORXBl7TpBkLEY/L6vfkWAW7F6C5JwEwXRfJdQIJDMg4luNvcbZG4GfYFMvDOWv83KsACRVtu2COG9J/PDotK3Ticaud7K4cDFN3U1GrtRbkxHAP0n3YAUM1XnoqR1XDGNrlHk+T6vOXUo6zCqKWpHT49Pj2+f9+8fByb7qflIDgkybJDSSUm/bhfLVsA5dF1taaYxTmYTPiu9uiWhqBS/lGGU6KDZiQazh6ZSKlIwFmzYnHmUd6RrE1futyUTMCcjPD02i/ffwKVqIPeGehRlETzlNGtExuh6qihs9818HvQ8BLylK+tZUVhkS8Yw2C2zPloj2O6E9G2hQhinVe2xMFZM1kSGrysTgdV42mrXhiwDlpW/xTfpDu+ITXW9qgYtX6+HPhWencvXB7a7FEo9mPAh78+f/BocVvzFIZFP0WVJPVSmjb2XsOyMvG4NRaMm9NJT7mkxl+jo8FbiQgRnrQJe4niiTYl9XtJah9nLH6vDEQASXaOkWH9DVQnLFPdP7+/nF0nFeKV4E6SOo4I+IxgB3g6/euC6j6QtG4uy7sqWutrWTDRkaYMeO4c0BHfrmiYF3A2svTZ/yVVWs85EeBtzC6FW0LyWqY7FGTOIErm79zwwASevD4FHsUiDlM9Opqxsm4KkfNYaxiz2a/mtx2njGjSZNh3DfkTHh5L8lpgrkCgcPnazcmYyhHRpD73py6lj9hPlPHx49RtYYglocm5Cq6N6P0CSvhy6E7t8eDssE7kb5NApH9h/A2U0mZSJjXdkp0VWy/PjaV2+CCzcOlFRK1O1yGqHFV9KTDKjIGNMNGB6KP0Hr1FxqiiQSf7ZiXx7WPX1Y4cNVdgCgsbJfIfRIe6ewTKn0/n+9dAgFTOC24j8I6WVqIjZOnIMpz6L1uvAR8GH75M1Cw7afVKkKyh0Ca25Mo14ZpsJ68fCCRa4ebX1m6iLmQ8GXiHXce+drqlKjjcf80gLvry8LrAPE4pGcqthYqssNVpLq+Ws5AZ1d1+IQ+WwKDi8dI089lNGTkxuqlSHyMe6fsGyU5+suQddWoQCrL/1wLoqe+PX3hcCNAosaAzp3JHfIEqlEm+7VJvVeE/C6o/iskxE2sgtI0MmYa18TU6DuD20eVsSgY74b7G3e3TYWo3jlFuGk6xOYhx4S0GYoMt8ovyi99zIlGLcZMQ6jlQZHctT2N+Nl5d5BhIWkr9u2cwbSN3XNaQuNs3D56cCy8YtA6ONuyU4ydz29jjisTfdmu+aXRrOl4EpfivQbTFNGmrE7IExzBeB0ysV/Pb1LRQm5hK7uy1Ffk+dPT1WWhw3LzN/fT1pF0VYQLIK+LVRHSOdDnEQA8q6k7k4scm2SFwPF4a5uEkokLifwt8hRPnzE/o5v1XVips6IWqPH7jIbALo4K+7SPj7f5BFdUh8F8YDQ5QaCMFrYDk+vxLNgzEA46bRGHXJeJ2oso1Vs44UVdIljaY/idv26eUFtElbeclymCdTG9U2rIoG24a6goji2qtySrGPkv7/KqKXGMFCWJHlsNOIpjIHzSTvoZHViR3X9yE9fDg1YDwlZVkStAWYT/vvtw5mLVLrDkxr3ozDWD7TJmJUb8RijyyNCF0JYRTOE+NBKq7MikRKILOQmUC9lCY1gBe73qfrSEU5VWl948WnnQSa/KrucLbaeK0EbzfGNUAVJYGoLYAhWML7CZ7KPOciVhxDG4L17Kn+MOcIX9pNS4QLca0KO2wQjpTu3ANreGM/b1THKCN/2bYM2nJ68XEeWYItsVji+pn036nB9zrRqmbpNchJQrSZcTRjM6rNe4M55NJc5Tuz5i/fDKdedEX3x/13UUUjT5gjtwAHuZ+imrN4OH4/6F4yaTCOdFIRfdJEYgVtFdl8uN9D5VWYo6TLhYYRhE0OYe52sVhscqplTTfdXDauiHhInRXd+vC25RK1sf40/EPfLNDCWLhEIl8gXDZVjl4XVcskNDayn1WNiGGIvPHK7VjVb8nq3Fa2yKuhkBdez+FHswlyjpGtbfWZJe0acOe863Cz3ozvrqChJS6Gk3EcKeegomi0VE7iAjnvlMqvqRMfvHHA8Mg07XCSUdsZdcDYu1TtprRXuri1Si1NuBQ5NZtI8zkzRNXlssYIgdULnSrCFFh3sog9DP8XWD2hG5eCht7ionTVpCzqucI+DZ6QeUYymxwEyNAm3GzXzZfb7+fXhr14o5xSOo0gkjHQanMBc+SFDPfgKsKSthSYi5vQ1IB0Vw/5P/oYWtuK1YSsBf8jYvWYwrLzeZbPZQcUG3J5noShSN1Pa4rmgFuwRZTol0Xc9sCyDDXYPa5qGmI/KNPvDfPKpeGsiZSc4xaFZ1M3DIu/rKM/C11XQm2bBWomfjnJAwBLP0b5Gx5YV+nAsDk1gU6e6+i0zQQwmtRGuohpv0BFcT5frrE5qWlZjqpKWCGGT7rDRPNGDcK1OSMkGLYroT/FIW8ia0LxMgesO/0schuE+Ed1lyDevGxSMR3EgikGeRUSV3V3wBqMxJmW41sDlneF0thzRCzYP8dZqxZNKrbELot1/PhdUGIpcZplXdRQ8/pj3TRNd3p9vLS5hAJU/aO6g8lPljVm4A+XVZfo8Lm1oswijfDd52DM8hKKgkIRanxPztAYRo1bxcDSb3Mhw0xSqi6VoSy158FiQzaNhViOAxzlboG4foM/Hymy/DSTpbYCmp9FOrSlvv9w8XuvDKuEp5ed8L7sRsdtzsEPRY9zhDUb6zaBafD9yxWw4FNG4xt/Aa/lulwKyjzz9NUKsAbmDfX6xzD3PH8dRkft6v798wc70I7bxf6P1y7PCoQTaLdnpRCsLOnGr2rmdecf6jCnxXK2XOe0W7TskT796m+N2RhGeDLFzcbZ5uH7nbdqrG1oT6swZPnDpAQHY2nnlEr6hkXuNdGviJvclWT1sqKDIdGEu5eLYR01ySm5n6QJ5WA3i+/7j0WzybIMjbyn8+vhspjV6GzIZORIVxy0nWz7aVjC0DjXgjg+I2yWlpuWC0anm91+sVwsSTGZEKEI9uM0ZA83yfKldt3EBgYpzJWgT/s5CchzGTPzkkp/8znXLGSVgtuqUYIoa4pg8qzO7fv9114HX7zm0rUtKEPkDIoMXK5rua08bFXf3Ij/jr0o178vWoRFYBsl7OglyjQAIcpu4u39wamw+Mg0qOHsNDxXVYHsBB7qGc2+l4fVCiB7xMqDRh7pPGPkSgOOT9NtRrKRFKFo8/D9+Uqt1cMin8qDBxT6cI6mljcgpurZAmR17q2YHZ7f1g10lEmW6h+YXpxa/zIv99cByXzwhEzcfrM1+Q3dl6SJNrmTzobrjMbvuSzsjK3z5aYqS8RH2e78taBwFdMOaBk/Ph33SNQW66SU5eMstBbIKmVJZxabxDSxZWK+JA6FXP+8whO4e9huL5/vbyuOtHDFNnklZJ6lXNLECCMKNL5LKbkjCpli8idJt9jBjkU8whqdX+YHiXBJveGnQVCTRWFnJAToKmhueD3QqPIhQt6Ipl3bkcsLV1yXIterTxlhQ255tPQyA3f9GtGrub+6mES84raywa/S5EKHq6Z28f5d2+pcfoaJcEuhxBREhez1/rJ/2D9cjoeH/SPUpF9aYKXCBa7wq0gNzHJcxCxvZnPupe1Q2Dt8/7weXx7Pn+/n7QaJM9IcTvT2SjsDbNXMlt/nw+PT636GO4WB6YesxNvWYdSrcIqNvc51+kICg6NhMtFlYB5Z5jt9Ed7xYR52SRXIRfMsL0fYA7KWl+8tSPox4ujjxw6WRBczgbw2JfuWyoJo1gF3pS6lVZcVsrtiJHxlNWsqHaO+EWfr1awBNOIEOxeX68V2v9qfRLhXHGRczxf7ppZ2BI28+AgDqNDyi+NqTgDTqMW5DPaxNJnCj0b24ONvlxeMhwRlVCRcjmYBfM/x6bfbx/PFI2k46IOwTuem9tW634Xbg8mfACtqlwxYLrWc57Y5T52J/jb/VyNhF9cm50OsVxugsl2gBUdNTbVHDHu42gM4G4iHrrD7fv30vMgYs451NYZsTQ710ULky5XTvGr5rs25me3w9nxetUso+1Y2EWCLTQd4qrvd4zNWVmRJUcIX5AWq0SS9mVyoTwqc9KWT/rSrgJwNtUxm0PrHvjF2BSyOCYim7/nrNI9HNkJlLzXVAtnQlaPpOi+wyu71a5EoUYyN4Cl4sKpZhhvhaC3CeVUhU770RoGlxQxocMj6FkAgOf505US09QDHZH7BJjMBCGGUxkXzcD7kpbAwZdrbUHVre+jrHHliIsEs34GAlKBDY42IdM6Ib6WzQYFagmHeBX1qqHjx1DUmv7DD8zUCR4TgmKq0DMnXZsZPra1owD/KIbTGjzXpx2ASgKLkEWc/KApq/QQlRN9X+RR2ZKCdGX6fKBdJPCesLi2ETZ7HyFxm82KOYmB+WSUpOV49/1pIg55MqDkhN7NAMX+9/74/Hw6IPuvQrRCRrH0wzbGVerN8echCpGSwVEqzYbM4gd8YWnlFVXMUPM4m6dxNWQWIE8beZPuA3Hyh7fYhpbR7P8bSB9GY18xbz5LAk7x/upwW68XhaZWp5hkpkSgTmywsR3+s3+SrUSNE4iVea/Q8kQlcFunIbXfLz/tKllwgWGCuucMCAWGvDzUvbPYPeVKqKzRthX47OYCZtes8qSTSCBNmCW4rj44m8XczShmIHq8Ve4dVXt0oJHiYxKwfcQKkqSEpK5tw0w2A3odFq2iIn1bOokUYDleaWF7Wfim1LxfK5fRJuXTSiikn31UsUwvKcSPEz1tLNzh/WlItmtWGuiyrFIqihVxu1od4wnRsFrzSGjnFeBb9arjF1eHnmTuATnki3XmdAyiLQYG3BaTipklg8IArnVjVHi2aCk4q8xanpsmv35BncWQdJuucd9tv5NQw1F7Hr8j3Q+DwtZ/caWYuDcZrvypTh6MobWYwsKf9oiO/1CFnEk5MW587hXpSum0W4Mx5Kmnhnd7n7ljQweirRkmxWoa2kTXADSe86k0iYRUp2tANXwI40pTws96uJYG3LnPuly1ZR8UAtRReveiF0yoK5xtuVfKzY7yFSWB8fz+aNzAVPOughHiznhDS12Zui4Rf1zP4DVeGLZYR8vej7A62qc3+8KVrAdYQ9Xl5WGir7oirtEjwv/0mehMimiCrw5WJJrTLWRloMVvulLIa+saMdavRTNVcOW8Wb5/nj/OZwsTiMfnILGYDWwTEUFdWGFoerUqiecvBP2W2wIoZOcSvXpTuQjjL5qfCdQ56coE6AmMaySaE1xdORqgIPVt414LaOs46LjcZT3Y5yxNWIs0yBX7DnqQyxoc0HQjAjboTcFITTjJmyezUFlpStQwrqFazkvZJNhIoJaza6BIollLz9SmPK4Ztbhht0It5ANX54/1ZGZuRWDYDX78yWT6lyHDGd746xXXhifaIBR5XglYjYdtYYukJIX3YetNaoUfMv4LHH4zuh/njWgfJPLBMR0A2ReOQZtufJiJAw9smJAOSsDshlNqpG7ACXLqQwAqECCR9eclM/LCfh9XAAoQSOZAuvawLbHj5+vy8/zywwYo+RQ6sdeVgpDiyJ8n1lexqlXVejZyaGrUS6SV8pURfE+yQSzSR5FLWhTM+jL2OeQ4JAKtFeGNlMW0E/cUaRX6QC7XTnA2/aZ5zv6jfMDiKQ5JHDFsmkK0QNiUJSuuzYgKdgNMMptcK2XKCvFZEPi8XadjWzKllXX5Z4dKsXx82eZelmq4qW8SHILgG7dNTw41VIZJRiYo8o8hvbuPFaqapw7OauygRKSUeXu8F3jfEAWTpA9LHFq51/6d4dXPFNO81wfgvBVa2LWLJltzPal2RsOIhK33xRlWocmQS2uDADAFiFmvPC7KIEjbxZYg9UkJQJfwpwZUeRp3Rq6KTxhXyItaQ4xIFqhlHxS9r8LWbXJbjowQUDK7ZhX56Ar9qowasqJDXUebixFcDOhJqEh1aIy5+7p/XLCuSjY2zt2o3sWOmm+Fq3BW1q+jxS6sHoMUSYDnKZBNbIYE0AjczjhFrv4THn6M9TvQv5i9RdGo2bVOxUeztiVzWcb6IZD7e6VWIegh3oNGaz7ZvH1jY2C91kfd2oW3MwOyUc59uFkVcL+GePk9UtaAgWKLObbUtIp/lvWk1NpIO8nru3WE0E5YJd62apt5vYNETpnIejv/aGzQHrHHexiWDMO9EBVTElRywWP+gxapHZrWNe34Tbswoe2Cx0aI0prC2nd8xgzD/KiMOXu/t5EaJSIwbTBYLCO0XXLOshOd4tCSON64TpZqWTlzb5Kxv+bBPJ/KMB1SW1bCjH+AQEbPs8f7+lRLt9dy3526kRmhdDBT006KJY1Fh0EPIL70ZN/kyhHVFgfZTRmkXTeaN/qPZmihBD64mPpXk7gihQVIlssQLtQfPbFACSTgjNZ32z+qF9FRzdK6lqtW2oPCFkqg4YJlc/SSSxgenhQCqeZkiYTL9J/NyTpuPz3W0yEdirAX6NhM3n8owUlSS7xyK2BMn8bjX4L+34yl760/TO91JbYqYLlnSv5jkBMtZGMkkjUHyClb//jeA9U953agW6qUad4kp4vnYVZAc1xh8prEMjTC1lpgoHP0Xrkw9uAdWFJMOrhQuhP4IPr7PHUxVXFUT1beWB+xKkNUYkORYqQ4sCrWU2MJblCHullIh8DK/n4OYWX18XWZZwgjNL51glmqaSjBXEVXKw95gaVWPnF0vqarGJSgy9HulMBqFY4nHdRmcTvd6k+LiWm+s5VRwy8TfmSVXS6zZZJpL/E/T63L+Kkf9SuvIeXNKokiBpT9n2/jHVnBNUZCY0NlW3BfulTeu2imSfJQ7RJE8+lFxLuNGKTuZ2GaCYKScIMRf/nr/zmFuKjg57Ij1yff1lk/NnkEWZB5jGo+eIWe4IrAY2aYT049we+xvMinyG2AMWIFKV6O+NNFg2xqZvZqOJ90YroYBr5XbkYAWfdFcPo9o7eiCNz7+v6hlLodR2RMdvxFdtzSgiFx6Yz4Rhsf880BcdLJ7XXccnxTf5XZO3OhdIb4hNZCQ74Of05KMEmD0aVVcWYdsmELIsKFFxU1MRN1d9zeXpAGbHTKKnL6NAcyIMTayaQ10HmLFRa6wMna48PxFiLRuc5jyCXcpJCt+y7trSi49GQBqD1OSSMqUVjqczm/4v5yVG1hGkcrxH06NtyXIzbspL7mUykxtOIyUyuzmH/0j9rdhOCCP0eBmnTHDnU7zjNrwDrZ3pHUKZ67MDzJ4xysZq43UZ3g9l1GOkMIDxtqbE9IcOK2rrnCkvKD+4bjOkjVi0/6hhr9itKDWvf24zGAPJkYGsIDFjbh4g2LjBwKsiAlaWDWRRPZ0cneO5CoOKJ2idI2wKE6N5uqaKsMyHNOF71Z8XPFz1nXuRcT7ORrdtRpAVKRbPa523RIkFtmzgCOg40AOYhR/Z64MV71m3W3f1LkGllY6AQ2XzfFryIfFm00Ss4qQ1pjixEVRg6iHW0VkjjNFwZrTVGXGTqBOMTnpAL8TBK+LMxpquyu8C3QWkMldZ3h/Pl2O6Qi5dmMy+2qXASsdD7iRy0cJri/bj4kN5+zTqLc0P2iostBdk8vqT369IqMbZpNjo2T0IpZwRUM5okxM15j30dIvu6rCNfaXQqMTJ52npL8MxdA/2BSpUgtglAPJFE0PBZafW7ihRYJMYhUv16EUt2+Ez9nnzkJp4oq+WoAlj6POU3O0DdlnsWwTmhv8oDXE9K0la+vHuO/o3Flv2z8dNhkcYgJpxK6WULAsUaq1zaoGLB5Xo6lqHBjbWxoZjJymoA1y0idZQcSo/WPUEQqYWRbgqxTAsTyNhwHQ7yll0yAewyJrI9AMmQFLiyo0DNQpj6Xr67CpD5+MabCdnchFVAptOXJkbM0LFVjo6sekWf1JPaGx2no5X6XDJHc6bWawMoPlcSU/NwgJUEde1dl0KCD4SoOeH2J1OgaZ6QkJ/IlIwlgV0KDDG+8opUb169nHtsStOG43U+TZOj3ogWVZs+Vxfj0IVcWr3WJWoDVUynYGOoI7yXMEQUqrz0lzYcHRLb9iLwWbJ1aP210WlixCmZSl4wop2cZtH5elN0l7WeVJUWzQ2AsjSiOgY7CcVlSRQIOGxYc+vhIw+RlU4QwIqIRTxizyTpCmz5q5M27hFsUorTiQHgEin/Rj0HYsE1/ftOqY4tCko2+qAv0Xyt+KMCc/R325AUtLTpTDy9z6DD9VMxD+1wR1241uzBMd3XhIGFtdQbc+KfUFggEAz1/8WK4Cy4dY+IwAtkjLXx5X3mTZMAI8YXZD1riKB2pMPMEEpB8YdKwAFZCmAm0pzYU8TpXY4ttaFBWxo6+SmgSfglO4Jqcmd815sWdWzRRVOU0WjMFBGTSOn3+fj6dlvikQ86OoINK4Zpk0/qnB4S1qqVwbU4q/DXLT6udMcr5MQxBrdO8GhDuuLnA1HwbH9XK9iRHGwFKF0uyUojikuttNTHJLpCtHaCccsCx9ddJNBIIcMhZ7y28l6h9ea2QshROeC+Mcsu6zMLU1cilSykjLN17CiP9lwIJFjZYlgQWPoZqMXq3dHWYW/hSXxjZysLd1xlCTblHA90F8EvDD7vy7OBrVbYix5T7E+qtft+RXEUt9CnPhV1WG/0IW6UyTDMj3wJLedVRK35B320/VR9VQKUIlh22Qki9yirWoUotl4saF6OfrpA/TV5HFwERgSc6noWg8eVaMF2oR5+EXyQ4rbHD8AEdzmcUyqZAGkhP1cix0IwVIU/NS7o/lmgE5c7O2XS2qQNS1ccD2uWiV+Z+FQ0J0jUJy/IReB61ZTsuMdR9nWsb5cY9CRs7JUi8g3dclXRCq2nVW6qJYrk3AArS+7MVZfEZXws5l8lPlOqbOE8fbh6zfGE+NofGNLTi03sdk2eiCltgtx3aLTF0KQgyxyDQLh1q7JGBM3kLHudIJ7lyJ7Bn0/LRg0ffGhGx5700Z9wYapKCvuQ7g362m4BwjL14jkjQk6155QUWWNXSAzyTAayyqMUYpaxTGTsQvaonJoRGZsGoJ5lreXD4emtmsqbmU2wSwRmqg8Y9vd3gZZeJE8YfEKy6zjPG7kxzyyOIH6sID0btB2vT4Ae7vkbR51PVSr2tizUjdHDbbwJylAoxxJNaUdX1wFLIl6Wwjp+U79jLpt0pMIW+czQSpftI/cB1fzNYJEWrrmzr47nwmEODLejpwf95upzajF8GVCUUSTfYD1ruVdoYEPYipMUcxluiPmc0EmMYlNlYnfnVlOPxL7sC4WXE3EVdTu+YVQgKJvn3RREnt+XJ8a2C52pIju1ZE7LVAXRYxY1PAKtMdOn9u1m1YcnHn37wrRATe03IlPNV0zwdY/eFwhSnZv90U8IRXC+v4c9Txs7zXMRSHgh5WhJLFElK5x597aFK0qy0lKlj1SXHldYirb6MSU4JMY3pZPR6JTVjME+BEP8ViOfu3LnufwOjwts7AKWkzWpFIeKr0fjbhov6uTPJ2CXdF+r2EwYjXs2yWS/N7lg6dqoCmk64JOcKP89V1FutGQODZZgk5zSWdNB5jWL7mcliv4ULE8fv2qS8L8B8rkbKpdCcy3Pw+trJJAGgTVdHEMeenCToRsdh7rXMBY3FiEpkSpjKKsfhN12CL/D+OoBRgmaqHcqD0sKUOyUNw6xqleljCotuFYNCrYlbMHx4YlprXpK+wDQgTqibfeGD9dUTj5WcMJO+R+YIeWL8PHcq7jTZ3AxhNPxpGFFHc0XkwKzYwbDBdw8vh8vnH8Xym6EnC5et5s9xBLnpq/FzX+zdo9imAq5uOa9zzdj3XPMtmQ/qPkpyAszB0u9sLJ564xQ9hCBk6TBE8rKqEe8sXC+TS9F7CT6qXXYdoviypPT4eqQimJiASHRPbMkKb5MtmquLkPqwZh5uklrla8o/F05ZF+8fnUwubSdt81ycr/z2TRAIRiwh0LnbwKztFCEFeNRKjBpbVot0hbjPzy1NClFUgpVGFQYvlzIbwbdgUAM9chH6sEWm5qeZ0fWiNF8Ze6PlqTZi9kYjiRcVs+/2zSMRI6m97rfsyALgJLH2Dv90ZsBxk8JKIJEKbmrpClFkr1c/Ma0qhK74Fj3CFLP9Y7uzkskw7jbn9K8igzbxVZe3x0NHNsq4RysuNquP5wNz0p20IxGrlcTUFA1CQ5WRKbDg6YAqn4g/gotHFDW2VH2a9tdnGg2WxBKDa7o8gDTdThFhGNoxzcKly9ndjneB0uKHOSSiJVZiAq7J4WgFWTDg8rsjqWMxnqLWWFAIw2nlVHCD08tAUcaR8B4kirecnX9Xau0O+eYUKT584GrBsQTxhxwCdmvYP7zu2/TyXdogoL64B/bFtJb+qFpvFDcCZwIUZ1rKH5ooPYzxY0wbntsabwRXa9FejO+raQNj/7u3+e93IZIvGoDYdd5MEzC8UOQqkv19bLEKT0ZMBrxf/MWdJuTfug+wiOUWvW0lBZllgr4WiW8WXsF/pGeL55edjC2AkTFJ4o310MgGrb11zDlhwaOnQ3zXT7OnR0g0twP59WTcQshnIXLSkSsRLGtl6AUpvVvja/K4AI/VAJRASYIklSTbt4mF/eHu//1ROifbt4/np1DVcoIZG9/VAEBm5xQyJR7E9HrbtLAnEPojJsq2GZXF83S92TYGymPKOJcxaPgJZkIBhNOaJjGO3TEZ1z0lvqoJxyhacgEmBdV3vFDmVQFMELDjn4k9pJiiwWB+hSrUVB4kcDx3jZiXlUCwWRYiAXccVNt6LmSUWaeK0lxC/lj90Mn5cVTBdQbhtlRntEl9enD/MbiFLQwU6SpJEc8cA9GcBDTq4+FNfke//5e3mAFZhzbp8P9opKVM5NO10zw1SYI2pZv+wfW0qkhxszY4dSgXJoBYiWZX2y4wTrcIFfjsHrE2eYAzmbbGdp4OsFvIkex7RJNGFRbJSN7IV7lZmvBsSY2a9WIFekvQ8aw+vx8vrdlmzSMCBtBpjQfME/1Esp5naBD+WXW5eDtunz49HQCd1/JWxc62wxk/YUpcXIq0nUduYi8rjvLs8A71zUAMQ+FF7ggMgnO+uSpmVFAbHbLebJt106KMWvYn+ApmoaYRcusas5TSfR3p2yv4f8fLBJrmBf4LAa0sqQXwyHfPrh7XOqloJy7fz3GtBK0sQOOv4uDGDPHfYbUzCh709v7+ttUQ7jOKYA26IbsNOhZuNhkVyyN/8zjOZPL+NfmPGrcG5AtZduOl0Mt1PU9GWsvngw2oN3hU3yQbJVnMoZCCaqaOEsn0vnuWgx9cVGsITtRUWCPTVatPOCjGM0/58ns+7QRzSziBYWh1Xq9euSGSUR6hQTvjUOph/Urs2knLYfIdPmebNGjqjEOVsuYEePKgKv9fBFHKQq6oK6R07dluaLTAD8r3t5k1eB55fHNCKMJZCcLY+5GAhlqTrJ8JwSDkvmi1n+/v7P/YYNKLYlwA7WWjD58ZnqPGy2x2/3AyQLdRXayjUG6FQBuDkLDcFhzHKDEGWReuKbVCaw5E9CFow8PvbzWTRF46iWTT2U/S/q+JMvvh2TPV/czv9IiYru3GG4flpcbrsZ9O47tY6phFVWbEV7T5btCSso0G/I4xcpdvJnV8uZIyj/+Y239SHAnGeAsulk+hKDwUwvZHRbt8kyzMUorNTIRJNOjXEV5mBZakozqGK8v7CaQHhnHm5Pw8sfau86fbn56d9PjD+AzKVh/0fL8uaFTzjaHo4CnJtYIjsxwCxUJFjPHi2Ov6xagrkWNNN26HzAzwUzZp7EvIMIKO7k8IBGHJAYdt0rw0ngXLPryHLYInGM7wnqD1z0J6oo4yDK7qRuaaAQA2OKhQ/X7tpzKieKMS7SWfviks2jqt6+/m0mqsEojlg9TJjMtnkgagXqx0Xz5BEW048fdDWCXVLeVdTVTJgOf4n2+nMoUCOmdwZsFyMo4ZDrrAMTzJ8741IX41QISalG3WvL+365fz59PRzyARXdNL5HqRdL8kisborlhIe+Lp/mly9+fVKF2O7E1jLr+pPJhYoqmYa0acjL+xuRkbnRQqOkkMqI5dYY+SYYm7rIp+CJKlz+I3775lumjWLZ7GmY08MS7Bx17NtW4TAixN6q4q2tGjbUvpeFk+Iw8ZXi0KAu8mWy271xOrpjloHIeJxwKkGk6FZtRSBLbKsWGfgpExRsi/FY6Vp1cWkSli50wasMEHEbZdssIfwavhThvhUUC0qVHyqelNnzdP7cca+UQSaBr1G6pT4jRbCcgZIN7CUGH6r6eUYK0oFBFMoeVE0ScJ/zVcZ8apzKCP9Tpa4wKjORPbRA6sXtNfa+TQlv/5wCdygBG6by/HdahBJrWPdwNXTrBRY0hTmSwisPF8cj4c33q2cFWKdWVtuNamwiROJcohwF8pT/cHM6ZWZsgxRkPUXvKT7Hv5NIz83sk7IR6O+P2vi2jiPGoOb4o6LTUVMWwvfkmJhMKaBRLtIo77e8lDLn5oL9vwlmdeNN6tdUtZ4o17mC25CE2lrvGhp5YoVQs9Ly4B+6nY/m+927er1HWH1cTFLyjJlCbXAfBrmGQ+rFeYf96fLz5b8AU0nlE0mc1w2vqXjkvkSFXoZySE1iAU7Yo4PUjPLqirhyBZ70us/uqxm21A2QEGIzBE4FVwSAYaBhPPkzMalLnaePZxWOwx3f3xAW5Rj9OvTDObKpn6sbuUl7eqpyIMyLfMz7TZjzOZBPOeTvd5GtuLEcVa0jfLXnt8XkVlwzbSiW1O5DnGtfAkDw2K+3L18QMUmxH0jATDebRO7YPrEk+ejIDZ+5CBgYZ9nR+QYV8vsFXd2CLAWhxtNH8wXemD5x8UqMFw+mk40sq67xAJfoz17UXy3Navc3t8/xUq25KG8fAMXy/gxipoh0shwhJd4tYqJjnXzgvK4HquX7ig3kwsb8wLyDZ792bJ9+H7YblBjn6L4wTi74tjG6vX7CdvO4LmX1cR3MJlLDrmUwGiyLCUgzqGAGJDA6AWFLsGb3GeGt3keV7BY2SYuAZLuMEccJ7t9buV5sOujQaY09CYu5BKhnXp5Opzfz4/A+erlfMlC2fTXvF8K8ZbW5xJYucbEJJ+O9Xz9GlTrh4h1Dbdz8N6zfTmiD3DA6ht0wIFmOtCwFeB7m6I+tY95YQZGTMciFKHbDUpFZTil6FmyXU11/aQu56SPkGfIOLasYrFSJw+994XeE0rVHdXcy+JPbtbeonfe4oB29BpY7Npl0teS/vq+FntNKLm8z2RNXd5XHu/f54HHvIkr8hAmO6YWk64EaRBkMycUSutsnEY/zGwUTz9IKY81CVgfh47+D2znBZK4ijPKccq0kLrR2fIRbaCijAC0ifXflMuCkYfASmGyOyNrOT2pA2+yfJHlO9Ppom/Oc/Yoq6IIQ96B9oSJ3YQbBb1Zvd6/Qj6JL5vKGsu0zkE5lpitzHdq77P1+ZtRTL/uUsU1jUY2zyMCm91C40k5MX9akWjehhGKYHON3q1dd936xQ8LFzqLdYmXZ1WpyOMVsEb4ZF1fEJfw9puiKCqUIw+ItyYMB3HoXOXEt8K0iRlbXftqkfN1jMVVBMO3BkUKyyu0vCVM87G5QstfaSX4aTTzOJX4UjB+sikjGyxQcV4/gl2/3r/USitg/9wHC9Kom8RdBcoIN6/0Dz4rszSx14phnr/oKWZiaNLisuEIGStn85haADjSktqDMn+dL873n1ytJ1pc1sG0gEeJh3LBxklC1qZJp5I914+/iA5CiPB9mlVgjYtMDgpgqy4jNK+4XGZdrWdy42y0zYUK89QkQ0uq0bKoUa8SyRw98crNPovE1Q60F91rps7OA4t1/THZShOsUYxMqsJMlk0w0BsyBGdHNhP9tX5iVfYWmG6tYYS5BSw0JUnYYFjt4QaWb285I+kAeb2ObE2SYOwX0t6QcC6rdBmbO8xaOGcVCVRCJ+eMwCIpwlwhB6MwEGw0ADVYd5yHrCLVKhI+HL+793KaFl/ZXJXc+uPc1ZGUIAd9FGrbgvJ6klZTnHPQL4k1PTiDVa8mfV3hkxIM+drrDPEzheNnWVnqeuVxxBiBBwpPq4/7pxmcnKzdUNeiOs0jzbkEV/hz+j0jxUnj91r4F1Y6T+KEkiBJJHlitj60dTi+ApZPjox07nijCqxAdy9I+VdCdfY6cY5FLrGkyVGZsKYF8ONdhw+gffU7z4wOwxYya1245/EqEV+oaWE/cyUZ2Uhn92cTJQHblTct3r6E1G9BphtiT7x7+Vzt9ufzsuaIh/IuYHW7BfkU0iO444WuETVwJoS49nM715sIAKzys/zTFbB4YqyDDEmc6NcNs4yaRVr5l0ZtKcDy4PMmxntz0bk5gppHmrjn/CtM+XZFREJXQEm4gUuqJYqyG/UbWP/6vXSSfnlBtRYiq0AhleAR2caJto4p/rN/fj4uUddituOWqpBN5maYWXcKRmIprAtuNAzXhGEQUs/LMEGmOStlQj7FnNZKLZaWmdQZ+a8tqZtv4FBdzdkhK6ZLTQ33Pcx1QsZxv3sROqouPFWyfMa0XIBdex4JLOFb42svc5VmMGpwz4OiZbiTgmeDaWYSI3zNiHbQJGT41m7+kJin4ZK1XF/n8+fzaU5h3VAmr5mJZUqgFPVMPL+zidh7frwZ6+udPFr5is+TK4vFX3UvRkiwa0AkQFgWoZFPlAxciNt1GhzXq0icRDYilHjBGR0fYfW7q4ck5eFJSCm6a4+l3xl3PVcLH+hVuB2ydBCzQcdFsuOpjGMLaiDKZ/09NAOxZ/aMenyGjrLnEBBZRmSiwmqgFh0QsdkK7fcO+iw1iSOyPJeLMlCCTrZ4mDMnNPbMtWiePk9+QZSFTXYf+9+V8bVgPjFqmNc6Mz4I96AsahYoJS/yE0XODckDAVsdt5EUHPohGSOsaHlygkrbbkfJMz+ZQWtj+ueOEOXU+ySSkvr3+vV8j0rwaTlbL0VRJ86a1wUZndY2jSmqHoyUjat3Xz2NzZXzFtHHFd+BAKs/JPm6qbSIoaKBnJ0ygpYiaxhkoQCrXx9KEDi1bCv8342SbKhFqX5GQoBKp43sqAsnyFu9nzS8G7D0nfC3b3/a2SmddT6LWUrjmQBgBhsSElSxDBhY/DwvUPJkGj30s6YwIeZ3KKilUtaWPIjEJvMD3gdbD01Jw7gKm04UB6MKnfNFF6p/c7zLazl1/KTeSP3V9+D9Sl01SpgHTm8csPir6cCYnEex5GyTr4DaUhc4H/c1Ma2fNrIvzyazfgmUy6RyiCDh4HhbWq4LmH8Ystx6Awsm77SnFJTd7vIJZH0eDudj2zRUp/z86uqSdA86mTlqcW0tNC6lebv5Tm+/gTOGFe13Ctz9aoJLCBqPdI5Lk7BkDhJmv7RadrXbgnHf4xZYmUi2+lkuBAo86d8C9wH9NGkRiLsv0xD49ecnb3ItWaJ1EbtqHllKUM8OFf0fMA+L5TisliQPdQMN5AVq8rqGVoVUXN0aFT1ITMvITKZIX7gy7EApaHGBIK0E1bIUHVZq4aB4nyj5xiLr69RCgNpX4f7aP1G96oHo+QzVTRlx12/JNSmBqksCI3a6VqAke0oaYcCbolNZIKB2Jstfeq/yEqIY+5jYvkCh2eZbrASfRirjJffW9+vubNUe2027zx9sTv14/nmCwt7heH6+f4MiQo46ISxY0nTTfJukqRVc3NTurbGNnXrB7ej0k95quOyaiBLljZJAnmxrpVGRp+dBsr5ZLlW00n7IA6t/bFSC0hJT35AlUGEIJiyeHJ+PmW76JjyviBmGMdMC6J9Gh3uqaCY7ARae/dhIYASWisviL6HVFItaKiRevIYII7C0kukKs4IQpWbLDaZl4IvANeBw+wQgDVQsk8O6yMpT3hw96+sGmcnlOTFemWyQN71+jY3fJGW/89uz1QksYfRtFjJpplfX58O/osNhNBPel+euOGdhwUxQQN6yEXF+jvI3DWrsT+8fT40sUFBxPQ0tjT1NQ8qEev74/XT/jj1j++MLjdc92m4PDyeYrw5/Hw7Ndo+G6Vi14Vyao+UIRqdaT78Ljn+EugDYqxzJkzaapnRhTokcX9NCAi1qsac1HVr0dl3Q9xDwS38mMpzpiPPqCJKUwwPl/Nyy1AiLaahyP6zX04DFwwqATqdWVtZlSSB1c3ppDxyyRe1grTHbEBI02zYZLSsm1AzTJmvHwjpizlvTHrKFx4KTCDhI80VER+XB3yxjr0rcf31tw/Jx9dIsUo783Qh23Kq7eKIhghEU5MXwFOaDy30u9PyrPi9+zuo7rBBE5Tio65FHt49v+6Q8aS5fu5gFmWV7aleH89PLH8/fZ7SlEtN2U1PhgSXrclAwPrxsvz+P29P2QFy9v+3Xi9Ou7Xa73Xp1Ob+/fLysSfwQf+H4emM+idY5J85G/+HrSrRTx44gWZwQI0sHRUG7iASE3WDwbsfznP//qFR1972Sk5xoZt7MvIdBSKVeq6vj5xU1Q5SRT2C5OtYiFha47P+Z6yZM1zpUZM3bcCK8ag+sn6tILDJIY95LfRKdVuBsrgMPySbkSPPo58ijWiYp/HlkDafVlNYNi7MDoLjUZ2G1xlsBlnpwGyOe1aAPABVKGHZLEEUcBrruXn2EaHLD4haixDHaOM/nPALThkVyYeqIsuq8O8BkiSMbWizzSUAoQ1ZTTyKw+rvu2wcAVuXkhRSaVv7Dm2pdYX6IPLD8XfGLVlhVTJlA3Vl86P2xD0Opu/b2smkW2Gf49HbePGAyKl8/rJ4v9895CGQxhvMWS2mZGkLUG+xG/Hy/np8Yxv/20C12oIIkCfr7BQbZf/328dB1a+5jKUNYP51n57iKS2xl8CY5NfnUa5c6Cin+oF1Ftj1whjqDrbXpowFqmPHaDIuZhIEHlo8MkjH9jppaKWuDRxYrsObFhEHCiBAy8PxDBCXwRgP36oFleLUzCHblmEF6lo2tsm4C/XqxrI6UIfxWe3ZnvE8bBKvoCS1hk0K0r++ZKmu9fn15qKWnp90gWQfEVZ6bNdl4VFfskeXsvQ3MeDLnaLj1wAwuT6zkxeufSxeASYmHIcQ2m1iM5dEikbayrUheoAK/yJ4MlYScwaJFLl7vz8fr829HtCiyJCWvDA3P4vhy4p5vpsc9Q0Bck44UJ4f1enX6/HhBaxr7zRec3K1CRu8R+vHr75fnnNIbbDNitft+PWcnrdQlmfxmyuhfvBXL1CgK2pjS2H2Wr6qI009od6UTsTTDkoFEz8VM+6D6dLoeJA9lSWgaUMYUuVNFt7Gsmi638ISigZmyt/n7Ec2VYuofctikhzOEOvvhgWUm625SZSyHMo3o2b1WA+mDwWjJHgHP30vQCxM2jX3vRS+uD/IEWRTZTJ5+PcxTLXDeaT2DJFEkW49ZOvCFCgxl0xH3ZoIEY3hfjyv/tDFEpASQIGIILIlFNRTJ18HEPsCXBr0O1ogGO+YjP1GtbL6K/tSpfEmlpHm6/3X57ZEdCgBJyjEhhduu75sCFA7fxzXqua32Seu2Abft+YvAumDpSh3L6udoJiL3zff9Q1bKnigZYVrsT6frfrM6srWv0gJyoYpXwI+1zsFCC0av02TLIkYYoC/JKqvl5IPN8dAXDgOnYkYvOnBdtqJSPEywkPkA3Z2P+0Ph7XLGXC3IJiIJPlJcDQ8/T/sXL2TSY80ibG5AZQQVCQFcUQMAuyarpaCTeCUPhsHKKH+wcxQVZn7vE0NX4XAJ+6Rc5VZjv7XyJrfkxXX+/L5DWUsGrwxYLjEeAst2QTu8mhW2dDmU1Ed/fNhVcOP/UDKktmxvjGTiU4Bme3OYWScZo6VB/fkvRkxSPYsvCKZvdnUZcW7askOOu54fNkXBLTl+mZb23fkCWuSuO2xOp9e3j7fTFv1YAgtGibQVxGsfl6WkMrbGSvYitM8v95ctnjZd9sJVKMUGPG4uaTAxfSPJAFjXfAkjl2alL3z0PTGx1pMMFBDz0xZ+y6EWSx98vlWyREQiG0AicV2Hj00e89xCUtFg6QisHlf/+mG4/Fu64p8BS/otxTHkXrM6VH6vqlxaB89/lWCXB04yTaNGXaNONR21xHKnCAD7Bo4CmeScNhysNNRFx83h6bIwEqMvNA0FPD1RF8cAV0Cdn/ec5oH8+H8Ci+9nLceQM+w6ceqBZTQSHd2eJmm5iNkJJQKdRIkyeVnqbJ5f3vedhNnK8NbmJTzGZnN+bULP2cZF8Vxawc4WcrHPzCGfXg9LSshyadtMUpcEs3iFAct2w8uk6eL1/vNpJVxBluunUd4UyYw6os6yu5Jz9s/jIgQl14iyXmvSmSzGYaDwoEgnYb2lce6wQX+5QukqD1TINo5giA+f3zv5smmTKpV6ZLj6F//6178EWx5ahii/ptcXosnKWs6DMYfxdNGFAkttqB0Mw5NCsyDtdWnfoOoeS+PSAFgcnxmWOwxYy1T8w7DHc8sV7Kvv97ZCt2xQIB4WFPrnT3/fA8uodlLei01Sw3BloZFJEDO+h6lVLS/Dnqlp+3YrnWEBz1RFbKr3OxY0tGdT8+3j5XxQHeFeEIJjC+H69fJbQU6HGXrDlQz9z0pMeaywdfP48PDb42q9o6Y9jlIah2l+7bag7QQ2QcrD4Pjwfby+PuZxGfFWh1BwrSMq5REeRqeQkvP2ZZuVOO+JSsz5ONKAZYud0PmPIxVl9guUtJXt816uVk6EzjtL8ElV881uNqcpam5Lh/8RYNmhyOqx5VyiMXrUYP1J3RNrWCF7Yhkvkhz4t88xTFIZfeBEWqguuGQMHh9WpRLKTN6UJ2KLgV2tc5r10n3mXulawbT5esJWdxryIbB6XLkch8DqV+7rtbP4FMIH8q5Dg8X3VxxJh+Q2Cn4UNFRVQ2MV1V6cLuNku8l1HsM0f/Q2w1yd/vlx/71a0jUM91dIVXLx/HAVa3zrxq8UWcrfLtrzfr/dHtrtY7cuuBQCv7DjjzsYb/N6uZvHko8DGb3GEix5126+L4dEVJIpPCVEXRU5NTEelsbXb4c8a7OxCR76h8vhiogpz+dNzgjNL9fwuZyPhShVWG/rkt3yeYjob7+tUkoVJBJh/aUH1r8GJksOBZcaLb6l3SNm3loppGFNOSQmisY2ruCA5Uwrfm+2jI2HrFRhCnpiLZdRYAnSAbAMHNicPPa0657KeEs1yPf37TbWyT699UN1cB7eZvrLMbh03FN2Z0yhnw3snt/ItBb7Yn8Cy1XpXaV5Uhb19nOl60Os4CJ7VyGV+/T29vK5KhLU2Y0I6lbLAz3lavO4i6wob2JTwphlMxSaT+dfK8RZTbOlQj9iym7VLoqKDZ3dEnwtCErPlFRN1LgYYZzCsmXduYlnlFCDv8QI5oQqLNYMVY0vsL32x/088PV2BZbZeHt408f7Exp22nxzRmuQ91riy0xgPY+TGlrC1fo8F3J1jfIZcUVgDUN3A1YPLas04OaYm5W8UOvXbDqm0yDblVYIHrsqQL+makQi1LJgN1xwJWrPDcMBXnJOURmzyBcbdClBGv70qi4AmEbZcbN9aAjMkedlu0ljaeLo7/lel4eO49mie6yJkDF7/T42S4+UkncbjC1h8shzcFTy0CSKd/mK047wAPbtOMJW7E/Pj5vHfx7zRKNPdw+V9sVRjO2G569UIlv1oNseYijzrldPJzR/mu7A7VLUjy52ecZtlfO8RMF1Xsgaa1K0PAVHCONhWJbZqki5qySLdJjpRpMjrcKiYRPnx6evPDItI9958OGDdC7D468LR3PV0xJZysujI+yBJZKvxyN7Crtid2o5v57kYE+4mznySaFH1wBZrrSlxS4Ay+bWcGhWXc5CuH3hdXDNs/nCfrc28Zbs80hpM6LGULe7mqxFRJo3PbCGpJ/btJHbOjyUUz0tweNtN++LMhjsj3IMZWnKsN7UA2tQh1Kd3dD0FS3Cd8b91pWbxWTRiUfsiXhgCXNCjaFVqnCP8x03/SHLUmaQTG0fP5/37W5/KCjz2pObrM3NecK2PVIFQjlpY+7o1p3WsCeYTi/y7ec/V4tlswalFE4wDEUe45AV5P+hxwuWNutagYBDvpbFnxxvmrf1DHEcdClFxwyWyavI4QVx0r2fZbrMM8XsbvngHS+sHzfv6HNKNcKGhYg5X5qx1JfipVl3fPrn/Xl1fISNhVQw9pH5gF+yQj3+C1gWa9FkWXHeEk7t9/I5SWpcS9xmoR9EXgHLPwEyfRxn9Pgqm8+uTCGCZ6AzjzWi91wi14WPi7v+bTzrnDT4eZdni4ePry71FBTlTRm4VAh7yFLT4qDposxKw5UByj+quiXfUkqxL8HETJYv2dP3KsY1kQjzZv95/9RlScgvxmxr+fh9edxl60Mic+p68wcUABKN1wcAS6EoSi4UteZGZY4AY2oka3/7una73RqusCIrFwXQeX7YcGyOrDSy3jgeLt1OzUcVEJx2xa0uuW8khPogpQSs/alFsjhZXE+7ZenqjX43q4lLWA0unkfJHqtpJALU5flWDrNX+YF6KMAUVHx4ftpvINsiDRHfd4bFshqoj+L/H7B8cdwP8y3y7bnQRTOwS8aTMrKwjccyEwxD9FhLjjXvlk0HDm5+uO7VIwhVc6idMQYryIoBw4eJF6euw6is9x9nhmmWTvkN9/KLe455IbwD1MWgwRymeqjhYT9i4YaHMt+AJstV99U/M+cddj9QZTw8ft3fPx0QapTlPKl3mE06/baY75gwqc6vJ1hY+sG9esfvLddBwkRZDIFHL2X5c8sZ4GKx6Pb7dt09cAUegQW2b9ZgkCmWq0z5WLbkca29yLW1Y8DfTlFyn8UAFouyGF73exD4HHSY+auTAbC8zZbDvhhAj2Hax3gsftpI3N5cu1EvxjUzbgHbPp7emnksbCZ3cYmWkTJjyJDxpdIhsFybx4DVa+nwYG6dtN3+tOSO2xpPqWmX66HQ1uCqLLKCmwNzLCDOUZvBc7jF/zMQVfq4HfRCaCR67QNnUrT9GJes94f5+amhFVQhgZ9ekzm068DgMNIsnnToeAX21XtGvzLQXSKrHpLAoq7i2GlB6mlBnNcJ3CuwKB/2wo7eqcXM23qxOp8Oh9MqyzfFzGZ+vU6pxWa8/e3H/SNVnpJU+URUdQrmSbLcb3JE4HPqP+32x9PTZZtnMbXGGFdBEuFALceZlrFkAE7h4bUyp4RhuMvChHqqEsRaP411gLhB7/LaxGXFu2RFwB/xgpVISUabpFs41YA1DtXDsUQah7WhWBwJE4gs7H+9PIrQEV5mjlDQMmJB1VfYDVr/C1jDTiQ9g1/YWa43z6euyOaLOp0yP/LQUnAbS4MeuajnBS6c7XSrQwQl/B+rMTqxv1SJrR5YSmqR4lEllwum+ldbVyAJkyHbBz/6WgGW023Q+XDM5yK3Qodw2Fr25RvXdLRfDFijcWr1Xhv/Uu6SZyrzNNr3zw/09D5/vX0/X0/HbbvYor13yGX5krqQH8OJvPvJ6f6Dq0szRCSuCgHeKqKq8yrPherNKKE4nH+9QMJ1vdgtEThgACo7YfyQSb3soiIhSwMPN/bDmINNoy28QSVdnwlut2rtRWHR7A7rFiNwUZwS9L2bt79+786RYMR7wZ9nIUxSKLbvxq9C94K2YTanAuDbP6+L0uq95ggFKyPFlQVaNFsDZPlqltqzIbJkglP3QVTYpYIqcdFlQqC2doBaTVXVM+2rCBMcbChx+oRtyzF/jYtaQjM7a+SaQnP845B4YLhKdWyQZhKGAY+n2Wk3TqLAUjio41Etqs3z8yFJTePMcMUv0etp9B6hB9ZdOPGRN/GuBXRXUuP3yU+/gYPw9evr/vO3V4x/75o1wu7jAffCnA2flgGw+Gxkj/eXJoEQz42G1tqumtar1fc+5+YE2ZLLNa7L0z7nMJTT3YlhtLJwMM16B7FSP7PL1izHe8rtqVjOI5lISnWbSbxrFnUZrx6fTjVnYAbAGlgsf45a84pLrBA9bLW9oBvXbBu65W0Zp4jbN3irWMMSK6j2wHLzAMQQWFcDZPkKPF7rCV/OGaqCKKE7b14/98uiFWY+QdGXNc0b8rGR5Zopyiziv2Q5kKhFliALMnc2Dm+Q8f9MEk+Tf6sc2UoSDVT2NSe7DFiGKwPWSJlrxDNHmo6rFs+p5miaYA+p4Hb0/9dHEUHUp/SynEp7UPw/fWeIQh9/fVy+z6B7brslvHzb7dZrKQL1wdUQWPypt/u3RaZdeL61WdW0ff08FaJEMHb6TfGuTkV3wrq9syhmbgisKLBuZZK1n9aYcV9rtVjBOlXVjD2gjHovh7cN5+fKxfGd0iMqrNjzY+0vH48axxSflqzf798Osnwd6HJzYRqUJPMqXjar62HO5an6x3xP3/Uf6UZ6i66kQWhBPHClh5Qb8PKByTKbRZusMqTPl01zyI3TbUwjA5YN7pFvyuzRZmdg/qcqxYWMqGKrGtDBES0SEiL8VLl0I4Q3SE/mu4blta6Y+PDWW7zg2CE2L3A7QQYW42kSI0DNNj84PrRPP4Gl0anpvkLETZDsBNtx/0V3TzvisxiVj113+n552+8RYTXL3RJ1qJaaJA5XivWBuixS/vbXy3GhS8FGg4GZtHi6f1vGANZUVaXsQRSQ4ZrpFWRNginkxG0JGRmy9EmIQ8Ixa5ZdvqxABen2TbsBcSdFaBaF65dViLcyvU0F1rAbNgQWq5RRmUCL9HHbUI6ttFWOxpCKizjOjq9tIRlFlBJYuuDVA4v/qRbLrJOhzKFKfg/Q64HVs1tULgtJX7x4fzueOjWJbveByeD4weSZJNm+y6U7b/jzpJQwFwnKNF6dZPOG5fbqdoQObCIgpvU74wCafRiZKzgMWJDPERsQprEuCuUdorVy4iiDIVKvENoDSzQ7rLUWViborskni0GsjtASikQGjub6/HRBV2+xXCx3TbddNXoHzIq6gqI6KwxqzOv8+/sApRwhE1u8oDpBx/uvQ8blWSogrbRmIMGtZZDEVrTLKtW3wLmod/fb8bm/JY3inBt118v18dfLb6u85iZmFsCu/8xka69O3HmLZYZ6ACxjSoepWDyE6IvD8ZzDCauiH7VjH9t2e1hwXzrHPKhxZqRwPy824jv7oUsFlsGMTR5vxnz07qcGLFNjPQbIaj+/vx4SJcB7m8XDLRWcpKWM8/hBzSmIlPwNNfNRXccFOW77AqUJJeOrD2LtsKg1wvdbzqaLRNcZKop97A6081tiieLWOF+4+BMNpQWkbl/KfxxDqfZ+e1qi/Roe0txDqIFD6KwUaEWUvN5stlhe3qIHc1jj+V7MNSH0NELPtZfNd2UU5pdTU4w1yxrmmHH3z/unFshKU9b40kBGU3Rrqxxw7SZ8WMsu8DGtmLPi8rQBWCRDwoUCCut1e/w85xx+JV0nrZrrRsWjPHu2jwCGZD/ynBm7cKE6IWPzfNztFc+pKpSsNxdoLEBSikcUSDrBxXE/ytIjjbcMWB5D3mj93epYwyEnHQXSYGSkyTxi0s9/ntaVpgdmW8y+aEweVcpo8JKk9sipKHcwg9XbbPeXDYltOFkpA7G9RlZlG2rRhofFP0syrAVY/A0BirWDYNxQ3W8DvXeIcMXyW5df30ZQryNTNgI2nHnu94jO8X1s28ZU3bapsJIqmSwQvO7abbdGx/gRa6zPj9uW0hJ3ntMzmNLWlh6Zu7hKquvgawW62D6BkssZ9V/GNDhUOBqzZiYk5kynJPpU3J/p1AFh7FpsVciCRARed86Z1+aBvB2G8UGJyL/IpfdvOXgPLK8YbjMVctmJJ2ZXTiJb7KZK+aDlsFlKssgXmT7NrUUkPs4QLtSQ0CdlUzNhvlnIIOs/TRYviq/6pdXy6fu8W9fkm/WKb+4+8RVaZtcYxS+U0ixP5zFTbDL9J4UB4Q9CDWJR8FsXsaUxklkLVknuKOSOq2GzK/UHJXZj+qCIJ7KgSLJnrWWoCKu+XNypFe7lb0Wt6Sy7rh7qZTsW1ZlZ6dKNgBv2nEfKcxSY8q5dILwCuWC72Syg4ZRJf1mBNaAJqs3ijUi6GAoW9pj0TW2OXv26/0D4pXOadzgmpI0KsEwCwPIlUUdMSonHqE4hf8Q4LQ5JL42istjBvtQZcRVQAyIsujYJ1bU7/tgwFxaematQyXmKWrA+3Xa37MbpYkild6osDw/h0lqoq8AYuRTRIcaxJGw6x1jJA2a8Rln+UVRu2xRl6O+3ImtI7xyaLCPfzlLGJ05fnIf25m/lSlmlq0KCvX44X357ghTzcc+Zp6VIvbIDaLxhW74+ybju2K2E1U/TYuh09/GEKScnuspOpB8AIp7YA5Jz1tYlV5703Ba1CpRICGJEp+sNTiApyeaNU3o/UoBN3DfOFyj3NgcAa1HgyHP+q2mYnv8sQPY0NtLlqZIpI1aDlREKi/x8/8Ld/Y74p37PUbe88iCBjV521gA17DXSafK1ZN2EYrA4QZ3P59mOmq0iL1tsG2o4yf6o4bDlgPjRw4bSM4Q1YOXogLxmdojpZb6sh0UstrPBCFPyCOuDpcDxI8+9ETO2Mw2Ws2H6GwNkafC5fL4sYtR358P+MMtYaC2U5CS6xTTmHXXqnYdpUM7KrluiNHLdrpvDar/PUZ/X4pPfumfUIhJYM21mqQKwl2zAYNrj27Ii2UwbPFTD6yUOeolzynssdrjaOkSka08D0myBcGAqrqoka65rlBCuT/uuOWyLjJU6TdnwWvwpUsFus+rabpFnGVBGdHV5ZVFWX1uTQ6J3akOEDJ6Mu+EaKSo3ApXP4zxSO9Hz+GzAyR+iL0bXmWcVI31Ur1Q3LYorelFpApUF5DqTVBSK0PffcCkgYw510kaD7IssSrrmm1sOSvjao2YuQeBoN+COlUazEuYYqAumyLK2x0iNouaGRonjBxsL3XlAc449++8n7Ysmq9j/eoAtXm7mmhf5QHssO7f1DHkYtuwkTe1F7vQa/dykCl1BUArY9p0EWCa0yzi1E2CNpLrhVbeRGKG8380DNF9Mg33IjZGTUV82Roky1R2wA3edHbIkWy423+8A1KLb7iFZDi37t+8vtG4+vr4wFchpd+bX5TxbrFZge56O+1XHhcgwX0WWFxa+4yp7RPdCZwgOqXsAHS9PNtd1FgKs1eb5exlKTtKz+CbC59Zghzba6VazqrXMuPQbBgrYmgHrduU4JxeLsCjZWXjZLksnGnSwFOOt1bBppgJXfLIcC8jMgBM3t8O6tgSVSRRYnCgXUTJ5/SFZVdgn3F422nHA6BN5GLB4OG+ovEwHrBSrDU4JoqP5mu6rZ6HdpJudyGKZXK8CS++81owMWOEhj9nBtwnEO/K1ho1HPWxMZhObQLwljyaYXayTas0dwboxqWdAOmIyH2AE981chbkMtZaGTKRO3f26bCkeTTVVpKhpCVpUA7XQp39eTgeM9FFxOa7Bk2of3/75CcHA62rTIdJaHxZshi4z3XNgVGcDlhVe7sJ6IumlmNS+9cu+S9GtD8+H2IvCmSSWn/f1epszatxRMQz8CkkjwzAiCYC6/DwYm5JbU1ZI5GDY4DOJK8mVhsFfH7s7YHHMxoY/erqXxxVfKdGYJ4aL6KPr/Uuv2oyJBBxKMzGPqyPEvlnro/phpuh2ARkD2oIsMHIfcwbdYVbLU2dt6mi5ziOXg3sC9h9d4GOleXY18jKcuWq6yjf000l+5Z2V5/exLndzwFL6wm4Lk5fdGN9hyD7265TH4+R86kxVxfrPTltN16HkW04FqKo+9TnFv8RRxFUc29N5tW6aHaOrzf76+tvz6fT9ebmc9tzR8YgVxhS/L5mk9yo/8hirqZ0kpZigKbHfA+tWhFTyRd495KSq9ys4dQOHjU1MxyLmtF612IuVoZ+c5JstBw1TCpriXP2uY65CUts1I+lPdVnA4jOWo12QvsnvlCA5FSzAcrrdagx61pbc7zHptY4RYZ5UBFk8BVt1ziyKGVxhfL4AS+2VcGqGwPJxli/SMFPoTm0bSy7HxcnqqAG4RZPlbCW4aAng6Jv+Yr9MCxtjHoxUvWXjaQ5wxYNLHYQB8vZUpGralCSpRjN/XSZ1hkKDPU1D8Vc9VdERfXkux33TxV9aV72yDe03+Jg192erfhXjGoms9s/Pm/USnhJ1BhSx9g+n397Rif7nGVzxFYb8GrjDAhUTiZN1absvFCPESmA90IsueYt7PmTAI4bBazexMG5U/EaB5ZA1ZZlzffr18fH5dXl7Ox3gp1Hl2C5r9BeSXSwlJXGTjLR07M/05qyQOuqnnAVU/RiFEvljfATzX+tl2RbLYa1Pn07PoPMdKxp8TVnpaUS0hI7IsjWXcaKbhHcVvTqn3WD//mGxBvoznOpaXxvwvEUmtWKzVG5F3HbQSAmVSWumksDqRcNci6RoK+GFukDRO2QFoMbm1kebX2VE806RhUMqXsv3MzKz8s5prjo1bDvwJnQ5y9NubQKhP8NrU8HXIVkJG7fIRmIrk9hyjajcna9tkdXgj4JXRrv19vTr/v20aQ8PwFSetyskH21bW3LcbzOVdZoQVZDW83R2O2B3oW/KKGs+ny8f2orIsplDW5JnJmsazY//vH/59XZ+P4EQXCPJWGxfnzYtGuCrI0le8JhWvAGa9LhBJOmVZnvaiFkr3+VXhfA0jMRkGbCIKwerHlh3d/5N/mLcO8KNygH6AOK4GQmzxyW3PA8kcWM3qtDX5BVY/9Ng8Zyk2f+0AAtG5ib58IXsT2UbPMLlxIkEyFU2e+WQbttfqy5LQ1mEM/Qgdt5WFqUQkuRwOYZFPc/PzC90D3/t96vYMkLjtHuTZQpRk3IXwaEMJFVce8eooVa6kYbYCtZ26oRRbUFZkCFqp+YeuWX5ooOOzNuvt1VT1EmBgAfForp7wIqhE5dv+EEK2xl5U7cztbG/i+4M/vq8iH+EU0uWq4wK0k63gNwaQxaJGs8YvO+KOA2LrAw5Xo/Ifb1B2f/15boMabF06lAVQ+xHiW9XCPgJLF8JMaX/7ZzlWdpUk/r3uOq5tHg6rfjpTZbtAbDNMrpObETl0BlcN4PVoq65VISiYiol7gk1PxalWwVC39eAIdz6RTiTKIlqlPuHdt1sXo/XVhZtOOlAEwjzLkiDcUZNbTyLHOVJQ17fwFUrroZDGodF4BpovAXmwuqn1+t6JrRrHgSWeUFPpod/S4RTMRoCa0ig5OXxFIpVu6qEu2gLVIQ0h1u5Q9U2TuB1wfc8nJ9+nVZrCaKjKGXKGCZQnnhegeYwtW2NbsPaNO6AFHmvyeTWESfoPfAPaqTsHC87lfHX6fLxnf6kTi+cPr9WVl2YphGdAv8jPyyXp/NpyzjEYm/VqvYytf0E0i3NhceVryDw7Zm2HIuSzPqJ/fSQQumlVrjzzoNTfaFtY3TbeVhRHtXLrG3XC3QvGORFGcoy+dh6u2axbHOnt10eV8QFAOge8JYalMzqyA5ZrdotSCW/nWOo7PgGHUE15MKKzIb+8BbEZQOW9+l9PghAEYFal0imtq3+TlVfhYGdXF/OCfJ4v6LPcwX1L5kZmiRTeblKLgxOxfOfXQGEQyCbdxlX8QpjKmdIMir3s1QVejroFvz2ulrspBMz5Siybt5uj2eE8pA2cwUprZKUxdR8tzbQ5RGnJZRuOeLvtKwblrpsLswF8qJeXu/PXRsKBiXbiZzGZLFbt1mxXcpo30T9j1+eq3w1b24GLUJfmeJgnW7LuTx0yHuN1mFRiR2+HOiBJabFySWKwIsNVzJpGLVfv7DKBYmqmtAgXXxuZkI94Qj+sEPo+4n9ZKnEdn6PSheL/Db+noZModYP+6f7Yzj2HBj87ZDeezgrNXzvs6oaW5utB9Zg8YRcXzYPy3HfH5MLyeGX9fXXQ4X6xFA92E/Im/Yt9+7eDbZcDgIsw5V3H6B/rU6XQ+B4QL5NycmaSjjDnJ/BJODpfd+S+gn7wUNEx6MIqiurp+drF4uGn0GBDy6ssumwajKsrRqdcipBmoPn6IpQN8vfuLXmgp+wO8xrClyZnMXvGLKYi4TsTFg3YrJsYSWbd1bdGc7R0wv9ZPYBV3wsiyLbnS+L+Zw+XkuRBIEZBCudWDsWyPC30VFsvciJhKJxPbr88x3cV53PumG2ne0fi7E8Vj/27/8UNLI3VbBaXpishRsqS6CgulPnDbgV/3yYT9U7qekY7mM3G0BlbihbQBOxCXU/UL+XwxVUqTcsdBWMZoY6A+obVzxC1DUfyGfow0plvxtFVMWEEfVP1GAPCA60uH5E3gELHm/79v3Ej+pzZuO+kNhQq+Pj1oz9Px/avEJlyXYaExDKnSqOiKtVxO9GQmou2iLdjIAyS9bjakLYxQjR5sstGX+0PgosI1RmRQqFwzvjnTJlMt0CBGecDUMjh+WsiblRa4DaKK6/6IOCpeczsPUYg2+TbWXeCsXuuQyo2XXpp4Z1CpkXxF9lvTLMy3zhckLW7ihJFgir1GKL3nQd100o6gaOD/gDWENBUv+ki6kuoFlk4+IBemmwWN1h9Zz52z2c1DZmqPFiKtjx8zLh5ZlOfg7jmUznTCOHAKUeDcR6gUPpbOE2ZrvAz4TrJ9wal8HZVdTlSyLF666azVQ+DD2r79Khc7d/3BeiXja8qAQWxp4K3AYykcoyyfeXIxZo0gc5bQ+73bBsxf7a5PlcNrsLvNCIUWuE76OHgVFrnwlrU7vF6rgrJPdx3RzOMSaoQ8hWGo3R9MQ1WwUjMKHQEYU7ASwc+IleU6oHFgdP5XAz5yo6UGZVKvLfWaBUDmArDqfGybHKtO+Z8yoP/YJrtAFbWrlE1LddjmQecGIxJt4VTwk+aIJ3NDQMS+9GrFERXF9Y1vbRbJEpzYL5BfpTu8Vivd1jWpv325bbuu15wxR/hHA4itcrSOEy6bYqiAkz4l9SUQ9F1Kusd9nszrt+105SMWMsGbGJ8F6YyORe+SMybdDNdOPvsAXMJUJJN2clNOI/Us8od+tDe6Dm9rCboaoZYVrRQOCYcV/sw9eew/Q6EsO/famALqF5aGANsuW8nIpCb5Uf4OjYOjG9VmetxtqAZF7YYrvogevQhRlJnFCiR4IrxqusZ3OPGOMaE3hC/AULFyUFAayTAPwja973dWIBlpPt97gqZDCUn4JYQs0px9znicrym5PzKwopUUBkWd9FDoshTKR3CVkP5gN+4zXPkW8N+VZPjTdnyCH7Iefdrd7vJ2ijQxaY8Azp1miK1Ivt+a1GmnjrRNmHayPFZaskzQyjPl2MJ0aXbU5ozocKNWGbZwgpKYU3FVx51q8+trLisoiGQ4MCXAcefEm1d6BE0PuIIXN0YcSD5EHqqDb+J6xw5lm26xokMT8TIxumjudL8p6g04FYOzt+HDS+UonV0bCbhffLj23CbC9JShiVsipWV7K2dO8EDyvNBTKlt87mOTrwmKfedtuChD5teofcSsbv4J4JOS1F1i0u1Fj26kZ1ALM3dt0IXpuRgKBfeOjLLz2uspzMLvG3dLTODI7DRvuxBhorQMD4eD6XnIcSI7VGo2t+ZQeWFDCIcWuiMLsGp4lVRm+xTHbthzC3mdi+DnIX5IE4FHYHwzqr0NyJsWWwQ9xkRHvnpXScmjZMhh94TZNVCzcogQehnsIu65owGNRkcbqsy6n1Nkwkkna9LxFIq80so+HqLy4IVPSSiBpec6Fdku4oyMKV5yIDvK8xvXnrtMKdtFkb3g1aYtYFZ6M7WS4qvES39ufXb4RRPFneG90mzUOiR9LW84ciTGWLT5lkoCZ358tpQVGplMJXPEQDk/lAmMxla0D78PTr8usoCRraXBF4fUIY5Wla0uG+mJsfi7MS0VGVAq5iZo3B+Ls7Xq3+cetrxq7OcBPnkfKumBvKF3CqL1WTS4yk0nmO+jvW3oh1zQgsYxtJOshWceS6nXczt/MJ9Tirt7D/6y2W6fnZPry/Gs3PhNSdeMBsrqEmi5DJXL1a0n0+z2c2IqtUDWaa5g59+w5O+dmaf1q9SZtG5slDxFTzpMrmxkMg+Ic9CWPD0P7WBJbPA+1K8sG2Kgvf9J+LyC/LtrUqzCzkCgvLb6TpMol0GEIZi2S2m9G0n+EG327HhWLC/wuq7Rs8Cc9d7vwQWLxV1BRYO34gXOxi87h9vFzAx1l0mL7IweECeGIof6QBUBiS8xIvD8cnSEVet12DI09EQ0Xf3ElMWB0QwqkyQTSutxFDOE7xWueBeDKxE78orHcatPYad3as7DkqhWBKMyM6/Z1UPjTWsIL0xJYH6GUzJRuiT4YXgnjTpRPPE55MFKXcgKhvqcyTn8ASRJikIwVlbaBFrjvFA+uJDhrA5RRMkYQ1fvx8qKbDUEXf4G+9UgNDb4jIFIF2xSTkwKLRdZZ366ZOJbLg6kcXOw7VjD2yJuVjx3ELc/38GAOWM1ncOQFlWIltb519nt34brgrbCgpuYoixmyOtu+Y8PpTWct6AEdCyUrZveapEdOHwLIfvcOk3y7uk6Og4rze8+Xz5enYAjWLtkXjsVmK9Hjo1mMfTpevl/e2KOZzNsJpvZWr6R8raf5K5iukm2mK68fMMZy4x1hcoDX8+GKpO5qMmkVHIqC2jS3CZiTkd844vvSOwRuTDf7CvxkI8xryYmgU5xsDHIopYvblXMcBvytZL6NJRW49HQDLO0DbJaVhlq1yU3ijgbmorDM0TlqhKoovKNBZC8emU4+6rxOxNVwwshaFnUZps0yh5cZ2X5drA3EDbcqrpJXlxyosOZRrEh7NmsR4K5gNag5eIAaAaCKYFn5NtSZheKdleiNRumyANzdIl6pbRhvp6Al6cWZJOycANJOb1U+FbAWQw9TWLTTj/YG/TDJbHcnLYyuy6+56vj7st5s1FIu2ABi3H0cMqFjN2FwfNvvz47JGmshskG+vk2d9+fcv8qtyBia46ATWlMtwrNHsrpb4Ra9QZ/p2UoWXCCufI2L3wOIX9haX/ddq3bIZo9V+5ivzWmg6Y82CCEkVJpRgMS2Qo4gBNPEkPaxDwrQu4d5hN8wzsDBDYPlbJv27dJdOtAoY58lYPRcgMWvW7Rogt1M3Hd6+XvFH9c1Vnur2eVN66F7ff8NvuTaBAMuPgf/lx6pl22tFsrhtghsGq7gVhIVEWVAiNzUqwX9Z3qlW9XDYXvfZkvBeT+zT/TCNoX4Wt7KrVd8sKF+XqQDr1h5LrQG6nJfM4PmYpkCcjIGTH5Ds9m+X9+P+TJ6/DOhJn5Wp5AEqkXlzfN4gWU0T5wgNWL83i4X/cKcMN1umE8YeIU7RDVrammAkkBLhOklWvwdANOEzPGwWYuFtJO/wAQA3Riebc1vHyHtlgQOGCU8P1/NmB7RNJK7EoUE7Upkw03PlFdDYSpwQ39g2EU+QFqrJokfuYTA4NfNseluZ0myriUw2g1bFnNKYL9AWz9BxEyFUh1U1Vyaypt2JeJcqZ4g12mm4hIDLAs+gZ1sNtBwYivY5szENbyqqo6gIKsHVd98dLgCsLFUdwSAkV7zIJj8ahm58TIIWjpjbjk5bjCg0talGjnkEs0OLJVq9m204NblMSWOlVOOXOOM1AR80czLM1SQkpfh2Anrqr88nAIsaFoIrKR1kXNAeo8dybuCT40rX1PLwTwIbVnqQZIdmFZciw9LHIihtoT3qTS481OdxCCzpxE3iUgofugd76kuE9lRQaSRr35+OS3jqGcos29PX5/mMfBUHu+CBJJQsfaVVsZRREtPTMP2kW/WTTk72Bh12v9xqsFZkaMB4g73uPMozb7QHgAjsPi6tp2lAUaDenlHMIaPA3KtgyiBBPgU7CpFOSLNnNpsniNzDPGCQI8aCRF9/LnqJDJwG7XEVWFJmlQ3vC/2Z3I3pkQTGSZF3j51pz/Dw5CQ4Dm3JwqkIHf4HhxX681LtmfO55B8Lj6zt6KxUyJi/8M72c9x4jwBqFLpf1QqNiixagOzh/n2z3+YI4HtgJToHGlZl3TaoVYDKYd7KOlZut6T9t4wtlfUUOQc3vnntJPss+kaGWQ5YJpwovi6oTUJWEjt+yoCaJ0X5CNr6l/tTnrDX9LiFsEgDKpydaTzfxTOcHcW3kvXzkeYPeZYCywoX/NUTs2525e88rvpn3yUV1oDuO2zYjXn8WLD8XCWmD9qPpkyrxdPHttJp2V5kSc+cwKJvnqdam8NjFyYybxBx9cMfLfbGFVVWvopq9wGWs4vpRFClQ62GFlMUNWDdjDMximwjR/nXr50tBTGo66+a4tK1rjmUbEpyvQw0B/WDeB7QcLnSZdfQj9MvOFKC8Y75RRVYN8ZG06qF2gKpkeTfmFXetfuFrjGWWbhZpRMbjONCaI7mGNe0Afdbs1i8JPwIy6xFD2A3A1BpTH/nCNe8Gq6LZ4UYm2vgn9KUAIlsdSiyNCkksIbOaErpWjTaW6QZC1L7N13IWWMrDcb49jBd2S7LMNCf8dYZsIhbG1nzC5m53umnwRKE28nZbwzFXskRe1okaIQm8gSwOPyzsn0CyVzJVj6stEF2xoTVOqPFUpW2OhmLx6INUguH7gy1w72ytpovCxRkuDyUfrxacb983/gcWnAB+LAKzvanhO0WZTxZs/ST/+2W2gaLEwRaIokVe2AxFEfKOleLpa4wKLs8psniIaQLOu6+24XvlCYCLOLKmRGTrUtO57yAYdpdm3npgaUhGzevMn9vX5/yUqN/U6dXnz0YW5S1UI/ziM4148Ng6FXqqmLagKVxjR+TLeOpzqfrlVGC3/De4eumMdpS3fW0AXhykLIX2mmymD3Kcpj/U7deN7noZDn1cRuFVFEdBRaXlY8ZJg7blUy6h+mW+RgDFuKIfV3FTRHyYTZLYDdWOShtyIfOPXAmTCg/CWObrVigkDm6IATGJBDG+zhGGekeaseZOBiwrNLAeio3pBG1nts/kIn0FqtaBHLzpZ8bwRqkd4PQzdy9aZjNkZM23D9t0aJ+VaIT5nWhwNJQe1ru6jIOGdtqqKItI9uvT12tcSLA0p2jhL2XrU8XEJipQuBhechEaYJPVhAJN1mydDKlN1ALIe9DcEVkydcyYHnyXdqigQFXWJisIovkbg8WjdaPveFiM4XDVgXKk7d5Zrfv0UtikqGdLOd514EGDRWBNosTGA9Dj3bAsw6L77pdXpdpYJhTkh3vjfIZ3PjhOB7/oBrKbizvOCzs9murVTNyU8zXTVxSHMpxRJ2zIlQjAp3v4KkqjscFvfv2Sr0KZs1pmNuyaLp8XA6rEwNYfhIN+ajt5JIJVdRwyPlyCODhtoENgTXJNlyBJ2SKZCqYUJHKfrMsXm2KSdf7yxmS6IlXv7RvekPRvDaXNR9SOGBnrC4T5HRTLZJa8d1X6jH9thNr7amOXmJrXB1yWfWPTs+iQZQlBIibKd26HJIKBMXz6X1DsBHk6tkJJf/g23abnDt6qsS2ZkmnFb94rSS5ML23UXpLmleai94Z48KCVD/DKcp6WbFsMkTrEB28XDoQMCIPLOGmoBdVgDiUlKGsNtBjpOxFmlq1tQKUQCeoBgVuMS9DPou81JcUUYkCr+8AHaZUpyaGC450ci5sSyUEe46f8fbK5vTbCRx2wIpzr5u5O70x4zwrFBvpkMDilbS4nPlguViSlz4Eln245UziHXEC9T7SrDDk62X7kzufXtdW9UsOLx/HeSj8BaPrm5VBtypNuiUFMWba44vYFZ0nuEFy0nLFtenh9NDSzZJZod1bDyzSqDqpiAbIU+ebAqGVJRd+tb9OJC2z1b6Tko2pHXuOcS8WfjvmAgu2hmQgxe24vtV2gUJ9aBUIWbAp0EgTiyUz/YIBf1vdpvuoajCXB9CwSb65PB3q0Ekp2ioJXoQatGoaLJ/FjBDhsARh81qW3eNqDoyOGSgjq9qDKNbdVMZJq62afVtHot1kUfpQzER3rc1kkFQdoU1yyaYsSDrntKJjycBDjnTSlgY39HlugQtCrCGwCAKyKtIFpgh6Ot4fBybLdmO6wkfyEKrSpBQSdNmrG94dDiVPw+7zZWM70mFWhE9pJLabKEuybYu4qFLpvbAqwDPCPxQfc6onLj21H2lLDnj6UUqzBcE03GQBJwFla/seS2utbUO9fE9bZsxJjZcicav39UGBNffb9GStFemnCCuaxG0CU/UweyB+NwxPfH8VfHBZEX+juYe6W+saGCkhnTdY+VSmUnkPki6DrFtmk0TaveVYdhlyhrGUWpxuBh8FFOAojYtqBusm9ksmPIFBzJkzaci7rW5vdEtMmECLnGz+QKSAlc/QI0s7c+X0driFWbo+5PF+3186Di+Rq9aZWoOsCkXI7slDv+8XL0vPUfJlRNlNHvEn3HqP4WmbJikPfqltKLzhmDbI9Ry8/KA/qaB++Ly/1jqMp6qAVSDRh8SqaMI8P3fQ84EwqISHBSmXWSJCOy6mnchmWxPwKBsVZXcCptZxDMP1qRZ7IUvislVlHJNbmdP1On3TKpBgLoqjGy1pC7BM6MxvYeRu9gik1sUaASePmZy0pkg36Ik6V+wVSqg43FJbRJJQIzzrDbb5cD5kGTZEZqV8Oa4/SKhGuWx1G5AtUUKAH4ITUnPvTwx8RTTDI/Bo8diJL/FXO6jwFRwtlX9bgjxy3O2JJak23s+8b5ftCk5MSlCit9g7Uy9vqT1fR5mzTkBavH29izJUGEPTOhnb0gm05ofjIL/vdUtosCRfZvkVLY+ZDRHo0/ZzRlcIjypgvpLGdhXpDdSbqBjzHWbCaPvyck2iiWvRC8s+FJTd8U/P1/dXiq6XOGGQp5ZIlRCDCEdRbAQP4edPpLRRVcl66sUseBH0Latm+/WKEIeSJHLL8phZqsDg1oCuyHLcA0CsVIVJXRIn67lcnZkdjxiD//P1iZekLG0pn+Pv8Af9wLBinkpMmyyWMWpaLWLL/YgCi5OGKyijEtr2/dXCptTP1bl/HV0i43EBSa59C1qL7BUejWczEF7VCruedB3hJ3olIvsQYloJhhGdrAUUAtmgzsI0zqly6oyu5f2GCi/hHhjflVwh27RW7Y6rYxPDAkRhXefhxGbPmNf4DEItlgbvejUJ9SBLYDTSKpzQ9ptOpkHXrYEjlMVExPsSVD4k2Kp+5BThPJtTpq3S5fnjuxWCldhAx15LKVfM4uXDbw/7R5Qtwcoi472BbD0V9HIKcljVmT9BJPNJ5DatrQLLoGtTN0GyeK31HsgSiWk9s8X+w3KFdsw8GSPiAA+5fngRnlFpjdpYIEmvy2y+fv7VLbM6RibQnwyR5YNQJRrJwF5xuC5khSvDSZMDkZ8xhCPa7IT0M3Zhm2xWJHErJA1RWdbC2pgX683r5ePSzlNpohJYUUQGnfIfpXMc5PCM9lTboaqQMK8BuXC6Sw5/mYpxBEcwpYmkVJfYJLMZViby3Tggi7iRt1aBLxZtt13ediKSOAOHLpQIg7aG+a6jiQCibtHn77VGTgoYiz+zbD7uYyATJcXhgUU7Iav3H2OYGbDQlJHn0xpLiXDq3ETZ/PMxERD1+hOaneBKRim4Uq/YztXmdZLn7bptlgfoRGK6cCE/5CBLWTwna1Oen3SCQ58nL5VSdh1JPPLJdJlJQMJLn8L5FYJeBl++RQx6Nd0trb8hkFgRk7VbbbavH4/NEh2hmWrX8QtKYUFjYgO37Qnunn9tOhJzCvBVuR547IGlMEqbdc71KR6jd+5Ppgh+1qLMptsJsub49H7PPR2hZjV0hVLp5tez9a9J4ZpTghs3ITCheCDakFAep6yl0G9IlUgJaa3wowSFjqC7LD/nbm0BeqB39tZKcogd6v2yzvdzIV1X4NtTHc4iar6FvJ0RPhRXxmiHcgsXU5fFRGNdi100YvWkdlKYTPr1WKAkk81wie0woTwj0ahKFVSPxTb5Sp8ZZTwAu2VWYN752GG6HhIg3R6bSSBYgZ1Khz0XT9nPEFnKdJBbGLWvhS5W8Idutzvy8VSpDhyTSu6qaE35K6hDZ25Hl1bSciFosimLf5l7M/m7ZNdiz+amAYlNd4/1u8WCoajkrXXBF9enhz1ayl2e4SgyDW9xuOAyn5eQ//QSZbQGTlaDYXVBvrUwI2H8IF/xzz2q87yRsH8j9qRn+sd4B+IjXCVoOylVQ0rBgXqBKKWg/HL/z8umZesImUCzLEONLVRAMZwHOuzlKwpOI8lHmTdRnldTgFJH6XBOixY3bCNiTzjBJqYspMZ2TmnOuuHWprQe4N3NnD2aSaWiRV5FcsxF4cb0VmDp70/LwzrPN4leYfPvntBtvIqgaMKAYYTJmtgfCZeVwu6XzeJwQmsjp6pMBgrC4fJ2Pu03x+uCPRnLaJjdqFtGx2qGjjoGJqW66YNy9mD21UTr6fo8m2YqPaHvNfKweKIfuqWWaZUGaZ5HVC5XpKqBieKkOKwohvq0X1KYjfc/mIgUp9+b6BaSJsvt8+VybndzOMOULebV3GTfJlKCqjJqmnK48dZ9jG36pwNTkQ7RT4Gh30HMaXOkSA+Zi2DGjgCQKhrbxocUfjF5eEAJlc6cvgpnhkOG5aZQot9eL/cfr10ua6ngQ0O1t7rlEiYvKkKjA2krq9fMccjCuud2U5Q63jmlesqxK6owy9KQaSF4bbZDzDV/nDyJHu6N8D5AMT6bYakZJ4sexmNtwxqwQLlR35Muzl3dVH204YTqPHom0wSNMFphDToNJBJV6Kz38/VwuG5kuTyl2fIddj+/vHxd3leyI9ujkWIeCrBJsFyGaeDnyIzLgpBvZ/yJW3mEb5Kx/A9rT5aAuG6A7pLXet6ftTOCB3CxRv8udNTaEZN5UufhoZIK+CLJueS+lEUig2oFPO1gKmiaomn8cf/ryP4ebQwXaNb4CcmcywqBTcblh4GuXBx2iYwCJoJ1EX5aZr+7Q7NsWbxAzJtTAGeUs0iiNimo8yUo2Z+PhZb7CBkdllRp5GT7umm2qzzBAipGZULu70MxKTlW67H5QrkupvHl8KDNh+L0vio0G+FU8ZbrFxDBcIdWFK+WAqzhSgcDFn7pGdt/mkTFmKUURrwORGLn2WRUZ2I9QhN3QIX/C6WBED/lgeXGFjVR40bjUiRlw0hrtCawa057FsNQ4bk8rcGTpCwVHPfm/fv78vGFln9dmclSd6M8VU6L5W2KN3RiO26T6ZgNWyPuSm8UIYCFZ5r7+ITYlYaNl2Ab6dNs9c+v4y5yaz0kDGAuJHPDOExrJoJZhQ+vWxCTbOJRZK7XTx/3/3x7XuXkrtJy4LUSHbHms2/niHkFE8ZdtTVClpdRrEApschBai6+66iUwxXnIGXAlK93o21WlXPRHAS3bZ7Nd1dUY2E+rS9gDvmGvPQOli6hzyX28c6WpuvXsnwH3nAy6qXcdPORg5UCCwzJ06/XNi+Qs4d4onR3WFnjnpImtY/urMZv1fCBMyVGdbD7dynliihiarVoIXGbJA0Wd/mfJmtEk/WyOxYxTl/dB4Glh20SlDZlEQWMI4VpxNOhsQ7dOsJZjLpovdxyFYksEoyzZnXarw77S5sltFgiGOQobtoxo2pBhXkITTD6DSoBNg3wVOTysjOa3mlSaGqEpHM4Qkc/ju6fT0b/i8vLkwhzug6IBNJoGnI5ubMLN7y2eByef20JFgpgRWndgvv82x4rxlZwHhoJ4R9TiAbnIZwqhycQA9NLtXih51u/JCReNMyKs6ReZAkBAl8IXcRRzTJMkrJgj5QpowwqrZFPcY1ROUUgFwF7KQMqWnDlsxkV3fzKn1hgn2WTWzcr64kIXuaVLHCIZuwv/3x96LI5QsZGCmpoDM91CldMllC3DBt989RZLsBl3OpqZ8uglOLtmFfRTS/gpILcVElNqqypASy36W8AK02Zk0VTzDM83Xm7WUHUZAHKeRgmCAz4HIYh/mGYmXfHbpHF4grb7XW7yzvUHxhQqBahG4l0rdCiJYtv5pyhVdVmyALF3xJYIldrpke/uDhAo3MIsHRUmBGBR1bYfP6ilkPfcZKudZGhhtWrdAMgTKseX+5hV/MEzhHU1N/ert1yPseDUaDLKfeU/zgasVY/WQMBsBgfurjZItc/ksGj7GXS7VfHh2UGCaaEIvUh4Jum5SiKymyH61TG6Ey0633DFNHZbQ1wGcCnGnGnEx96WEZiVHQrKcuIz1JEx4bAMvK/sWhCOJT9L6z0P3QdFKxLfjP2F1JZu7pYpWIMLVTzJstNSCiNJn5Q5WEr+fgtXtI3mxJYXhRL6uC4DdBT2HGpvgDLhoR9MYFDfYvDriiWDw/H12PDkzIVGFxvPsVVDedFiCXzLs8RNMzrbNFsjg0sf5sBcpGVbMQXOsPF1QjbmrGG1Ptd0sB1LADWRGlQBNY00tMyEvYfiCtvpnp1A8Za1i1Hl/XtesjgXAY7fOmcusqltFqBuZFZoeMvyMMh1Xj9fnm57GFdZNLssNRhVWn7aztKmAlavQtTrcYTWEoD0xkOfgW3VIjys9Cf25C3L8IDolcTjTjUF+LZ426F42+Pu7jHlVO4YUk0j6diK62X5G2F1n6VRsCXy2hzy02WxlH3+3D7WYWg3nWbb2z6+74eV9sFXYhY3VIyjGSznGrf8qfSSR90cK9JBncnwPLc7794G6Xda3st04U7lj5nfO+2kLFvvb/421mVpEaFj1LNm21TxzFB5doK7v4EeB4QnFKSOMvRd14gOeSsN6LfbEGrq6VuW2ng2vl3sMGHZSWzCJYy8t0IVHgbredLlTSaGrB86e+vXoTlL6pYTWQptlwXZ79aLGYKLEWsTkbFBiy/BROzizjrzW/3wNavp327nFeprhpYN9oUJa5cgdz9JI2d7UlHGNvrrAk7gtfQqvopwhksxNy0RVzhfVlLDgL0CpOI2RliLhh2iIgC4R5XtugFfiqHKYeFtOiEx8jIVXY4Rh3v5GydTHxnylGz+XPWL4+b/emTX/L5+Ihtd+LjGccxvIRAyDGeqLqoZ9jKr85gIf64Qflc9xKO/mDA8qcCYCFPHJwXm28MzTn/sl7FgZEHeI8tuGIJZ71/fz+umT5Pp6qrYYrKvkCGBAP5twhgcV3lvNl23eGA6Go+jzlZYcMXilrXdhVl1CZhnKb7b9wC0TiODFg3dDdTZKsKSde8/1svdIf/1P/2IlL8mmiUZk2Bup+zwCa5X6zmMh/RK7ZZAh4mh82qbQqpLgQ4OMLYzjVRMRNHsHhb55Yuep6gPePSbnRQpkQn4vSkLjo4oIwb0bm7bhQmpaqhBJxfluYOnZwCyDHS5i2n+hlW9cQUEQ3hYZpGuPPmsVAFPc4dqde7Kr3cQlvB+vcP4ApZycPqxBFongGBC4gh2H3fhkxmHcdObd1Qvvo2nOlENNBMuP3HxBd+0ApfpjoDd8aEacLaxmPGN7fqsurL523bYiPOKzs59H9WZ7Zql6e5BGWcJ+zfU6auwoO4XXWrdo3OTqK5k/Z8NZAyHtStCBYcEqCIVsnphjAtS0oZRWCbkGMQta29Y//PcOU3ZXGrsl/F5nRZmAeVoLLFfju0sqxQJm3SnuOpBUbCmuWmLEYf0WAVsA/RbDZZauuu5Jzpo7SAwa6ezhw46QKbOTapYWOegxbPQKCskiKGKypAnqHS4CjUBSsyWB4nkvBZ9NSb13Fx4Lwa/JtfWkNzaGOHUmKhlRyIEydv1USgJT19AaO3nMgjzoQVVA9PK7gSTn9qQ5P+EABf/+pCpsbDWW6ZvXHN7Gnq6fN/tC/cs/H/IEMpcmYGLEY6kmVTgbd9XMsjKr18MR2Hp8vTZok4tg7EA+JwsNIb5iZGwhKPZqr1CABr3h67tt0VcWpOUJFo2+IMWLLjhqlXwCaDW2zBnfV1GaK/SDtKWasqGyuzwCk+9RtJBU1+sZELtsQ0hxhhqGQEwvNSZUlI4hl3UguV5FbywSrEUSLcpHNMiazu6ZCw/XPra1XuiWJ6+kcJcvrJgMEyq56WHoOww8bgPJQiVokWCgqkqXBO5KbqGKIRIHk4YE2LBJU403JW34OPk9wfuLJN0ZLGuF3kk4dLl/AbW/VaLLV2fGdlfvwUYH2gmQD9aW7o7Ae4EcPMoXgWz+iRPAXbO1rZA17dmZS2otv5Dh1Y5EcR5H7qA7nqnfSsuD54j+Xo24JrS3XOpFq8vfx6rENEGxsvse4nyPWxcFLS+PEiVj3GGWuQ21PbLAqpi/ofwsvNlNJ6KbCmDfQdWaIWGgGAyTOJ4X9zqVtHYFAFRWltnyGw/D5Sb7G8CKxQ/3+H5qVqivVBFr/TegfoiJWaEMSyCT4VYXgCS1rOOOgf0T1eLuQb3OrZW9HGtZJcLug2DvTA0quik+HxTJ7aKpWCd8aC5HSUip8XDzWz5vZ/bkS6iUTUiWxlx5zux2p9hUXTGFtlOCm+L5kmdxrQWnF7QtWIE/3g5+fn5WG9bPZFDMIBEiNTcw5wj9vN24aF2/FQKsvk6WynrrpIfmWDlZooeggL5F2h3mhtCHbYOnjagZfQbFAXZFkaGourt03D4nG2baKx0R09H9G7QgKLYxQdnkqCgSWvxfH5UCTC+zSuiTeu1uW0jRfT7LADBQNZqbqgGcM0SDqAL8gEqpqjz5uzgmoEUQXWcNHtzwWSulZSgAWBkmhsl8luFrdd4WktYZUMXYAVgnXdsTOHKKAQ8gLdiEhZEwC7V6v2ZESLdDSo6iE1FIdV8nK0DCdSQ49S4YHVBQPV0exGYZWSaGG1BLcgyqtg5BGY2SYT8hf7PMdBN6fvZvH/ytwB6XR0ugZaRPMaN8JzRb/t5Z/vz1DePz5vUUI7EUGhWwwoNZd822zewHmqtLhh+hBSXyRbqQr1KriJBa/mLh7ZnnilnlpmzturZLlkU0ScVqUz4NIZREq7qpyyD7jJOc9BdEtI4ZJZfqqq0RMh+xrmPhB9hW57+a2VuRTXfPTiky4BNulztNY5g1AzviHTkr2wtMqW2wUFQSqS1avENX1oJ3j6P3ZzW+xuCyR7YAVB3gTKq9F4WCL1cPd2aoAgDTEY0KEGyZNmqZLUIWDM4lp2a8s8tX3vLsphosV73U+bC6YMVvYVvczkPAtM0382ZcQRFVkEDVJ2yskXiWTPlAWt5m5dp6BIUDqe3voQzpdZhvKRvcyReo7pNjNtO/nbBKXnq7fX7ZrK9y32kRbz/AkpEw4GBequpjO0H5aH82/401I7ADpzomd2O86nTqmPrlBx5Q+5Lfy3l1Vh/ko7xzAjKim7YHP2mrKw/4GrG+erPGWIRVz1aJUBM18oHicbakQCGNUcgp333+tYcGW2yttON4V4Y5pwIJCg0d4WGYBFriW5xmXWZHOWw5abXVwWqcnCk2NFPBuwvC9UU2W4MmD9Cae/Ke/MCeMvBVaUrC/3T0cG5RP7jg3CSlNHFVIkEjXHCSXfuO6BJYeYLH00LTGTy6rAsllG/GWskSaRcpytc4Sae9yVCN6Vo6xCjL7x+ie/REKc6C6O4gqOze6iygCIvbL6iuzK9D7ReHizpfbChBpmimpxt1rnUnBfIMVv83l+Ws+ZYiWhjSFR66BMyJ17el4tClppp+unjbVQRZcANcLLFyH0+fJMAJ6pc4V8LTnHESKbVWFsSBdY0sfz2hebRcWtDLeerv8TWRKmZpuS6UWEPL243gNYoUUn/QhML3fCaSdmt3z/NEee0jXkPeEgEa9ChhnXKPEcL21R4Kxc+1rd8N8sE/TRuxqswf53ZCnjSbidaJRh1WxhxyGW+L4+/tYS9aIw1iQGMT63wrGfAmBGqgESlzP3tfu9URbq8DBdLS+eZMqjtgms6mLcEJ0EU57GrCmqeDSGi7bIQtZ1uorgQHNk1iIasdlNRY35PU1R/CppOXhhrU5Zz/yyS9XODpJDw0uLBH0uMwjLLN+gBlxVcTzT/Y/29SPEtssNNheudWWpUX2pL1BOJDc25Q1Fkm9FekAMCmy46Bp9TMukODUqEsG/6ZtN6jit5/vjIrMLbMAaIksJlUVDOp8qs23vX06ZUpXsJ4zZo1UO7dXqVkQyT9vL9+WVhBs8V0mWwDNWjHmy5ekFBK94QCQWkyXBO48faeFPTwiDsyxIIacB8MBiyllvTscT6SsaDi4lybZYfnIj0HKqiSIlQqqk+94GLJh8RtA/lg0SVWY2/uBmxnEKqSrPoCyF5hkvavbQVCPTH9WlbFMrx9iiSpsTSdC7n92ZhLUg2YzVj2/qPKF1HUDxvFEzzffUgtEc5BJVsa7rDAAL0ZzcdFTsDXTply33lN5kwqbW58dpF9tYlHZFE86Qm0F1bCUvtKoo09DKA4MvFZMHjuXh0qa2DJfAmkidg58Wz68vsi3AtKvtMK0mOdj3zVOyakR1Yfv1tk2YkenjZs+33Ih+7I1FwADePcxWz1/3v5Gv2a04UZzNKzrFotg9fr4fudbJdf3VF1odyw5ebLVYerXVYIFr0wYjq4ZY/dn03ZrT9S0vpW3HC2mD2k69mb/o9b4TsIVIHfrBKhuHtbs8bH6bbIHXsWF5OYBhBISEBoJmurjE6vU5HNnsoV75GT/NHmhL5Thu/rrgLK/mK+oDfSnYshQBlC0J86nh7UwEAu0NuZAvZ7rLGLaK8SvXg+QItFjuZq1YDxO1RtaMguTmn19YE62RJu4Q9/CNbQ7cOKIDIoWrt4vJ8PmrBpkm/l//dp73xCReabGSJLU937dM+b3BsmvoMzzW85AeK8EIRZvtcdOQDvVT+bDfi+Yq1JqRgK7ZPl1eN4cD6vW7LM8JrHiOYvXx6fuEt7X7wMdZMlICy6Cki257mIkj/AvbkePljbyawPJzErpr4BUBYErpZTDsEqCIh9fRFWCpSjQfrKgoxrf9N+e3Hn4h/6y4J02eamtxlw1COZuqMNWaSXh6D0euvyG2BW1xO8TKmNrhYrNL/QX8m+HqP+sqwJvtklZkCUMmpDy7DXjMsmtOLFXCQY5CG8rZn5eyXltPDp8nh5S08LB1kPR+PB93CTOpGPciT31mbIPv7ADoOBhrWnKKLsgaLLdQfblJuF8XsA6qNdorEJCDsDmdkrFnb/ZipqpVqvKbQV6S9U+EJ5s8byAN/l8L+KxTbFbLGngs+i8fr/vXt/PqwJ2sBex0vVweNofT03WzrKwJ028H/L2/xtzYoP/9L3uWiSuuB/xdGYp9kxlLsSLEPy1wuX762mRk/7ABlZo+AzBkvE2hyOr15pOVIgDvkWVu3YDVI8uiK7+TWYZrcyo1W33bxgcm4fNbKsByipl3acjwLpi5wi3v80262haU41Rg/YSVN81/FTvRS8GLL7yjuBA/U1bNPnZIrmU8UpgcOCLIJr79WnNzsbHs7bAkI6xBXEF8e/r4ejpkZVWG9SKY+Kq7y3ldTWXYYjKJU+JKSRVaRktXNQrOUnaRyoJy60RRudsdt6Wn4/WeVHWvJb4bz5o5iDNSRF8u4nLRi0tb7uKaeTgGe8aljZ8tXs8P+/3j9XR82K+WOXC5Bk/w6f2h60QelyejbH0e0oM2YA2jDvkN4oqV4vpmJJ9uerBmsmRW8/j1tkCQxU5zboQeywKlDC8eQmW7eX9mWeDVl0Qmlqjy6ZmZCiW96cYLx08OD4kpO2vuRdMIi/UYYqmhZvOaceUhypW4mWg2iJMgpz48t4llDTRY/KgeVg5YvIqKK02G1RdOkcEr7XkWb1ZgavQ6AZNZQCn+3f7jtOSwqpWvfeVLamtZXPGIs7zbdpSj2LHppNUGBdZAZ+MnCdqslR1ywWmxDjA5qU9SXBxJ6ds8737b05p5I2RGR9mDfM003bRCduLMGt5oHpkinATt/qlSbPU2SwvDy+0/z9fVoYUUwevz+xuU/PYnLKR7fm2XoN1EY+1hu6cE1tfe0OGqxxauNvoteN9gprphxNlo0CkZs6zzeWnzjCN18ZLAcr5wolkh01lj+MjtqNB9tcLgcNGNAcuQhUNe4SS+yMvsYuaZ0uiNdFACoehynYxEfU+yEXZ9FvMWc6+o/MdxKoUI3oy3deVjOzNYhiqLADjrpxfCh/LGb+dApvCaMfa7LITOof6H15p74YvFczsXoXWvhGnukPaFlWNXcAqBrmaTUUZqsCjaS/urGR+oTRiuzLYpsMbxOmXlmx+l5kGLKsLXCqvV0z6hcJn1VbzJkU4Ju6nV62ssSjOiTDkuZ6CqevlM91RZn9ibLBVNqbbvv87nQ7NA+P6w3b+/YHfm5e103uyb3W5Fo+IaWF5p9a/+1vag0tLOX1hqQUcWWpcaDuI+9zdcB9O/Xq5NLamSSFn+BFYQaK7tqUPjUsdkUWfwuJIbOzRZ9o36lRaz+DGPERtEExqqIDIxOsTOhQBLJJSYtyXbts3Y4MDfJVWg2ZOvnpYiIMwEzB6jHwZLi6K/5yloJK9FB1Haro3XG2VP211mwsg0FmK0aLLq1UYXuFjXlJgyQjR+y/+vPPTN5rlRwWlr5/MXhyyrCf9YxmLdUoJDebTFWprIVit3L5MADN4hrfImtkRvoA+rk8t8+JfHVShpVFGz7IbKBQK8/kb4w65B7wvRDXr/eDoeu2W+61CeK/LVOypbB1JVl0XzMACWn0IBYH1Rx4OKhwSw5L2loHGYLhGBxcOABfLxxwe7ZQQWdX7sUFRNp8SVE5jQPhn5YBLfOeNhGP7rDwts0DI1glm8uqyJF22uT6XGToMQhYtR6IGFGuz6eRPLrKB6r1jKh/W5rmw+wTyhocrjyjyBfX1FmipVJKW43yh+uGy7yKbWJDi3bbQYHGrFUhNEnmPmp279CsmRbGt+OGRZQtackeKk4MxD/zXYIOENmjQZzRNCcI0NQVZB9RZa4mfzYWNZ1ULJbmPdDzRXghA5FmjdHRs6YVZNbdukB9bf/xNZWnSxmsM03l+e9/ttVxTNtS1AtanXD81isev22JW6PBQSevC0fPm7L+vY4XySZ73HN6RxyAFgsbRkZwvk16v7L0yskM8y72KywXDYlmjZ/ecGKl3DbFLeaKGXxqP/QMOVN1nD8u9N2X0+4WqR+61TrBNd+4AC8nKU3Rix63YaxG+/ZRRC52yP5BZJiq5PvgLlVBWI+KEEkK8DE1euFz1YRe6WGf4urWS2bVb887Iu3DY4G4vR1C+qFro3y5GgDFiMKY2HwkNWEjavOc4nncflTP6QT5xjr5v9kghWWxwCKdtL5cQKntd4qJiJ4M8HbRttp04m1lCc18pL88tWSRnIa+S08wb5aVKEMnYoglK8EXb3zbQMd6TZHQhqSCxuKbtdFId2WdRIYxJMGRdoMFw6xFh8R1GxHoaK3hSac9VH2K+gSovfKa40nnWMX945Bu/332hQkhpTt3PRPGatNFXSTKS6T06QgNnJXTy1HqkP7ph/9rjywPJfa1JcPpeBGASbYiWXGweasNmoGzuVr2n98LGOdAJHizyQI5lH4apLyaj/r+DdUmFvr4cmzO32nmUzmZguLptVYXpiRlPQAB1xVgFLpkbMYUqz4B42ggyAsHudT2WNEwovLMAP+CI88NYq1kuL1O+SsLq/SERiGBrpi86c9LV5g6PMaaqPZjctjhH7iaK/LLpZb2vqu+aonqc6AyOzg73r8C7LwkzrgMtaJ5QnOgxPY6ClW1BFhGX3LF+iPtp9nxYEllB2CHje2x5Zw5Rffasf0EzGgivF74gPi4aLrJBW+fP9eYdPici5AjmFlioN57vFjrtVFFgWT5i/vwl1Nz05hv/BWFVilEn9m+YytxBt7l8pU+Kp/KKxJQt2o3i0Da0gfxNtXk6SLMAJCa7Ia9wk2d50/G0emYbSVxrog63MMgCWUuzoC4NCeE+z9ghZpYlf2+miPxksswWEt55My4O/5U2QUQSD7lrLLSWTh0wB0YGwFQaD3X8Taf549Ql+iI03lQ81MnCb1fadPdewJ3qlCuHfSbbl1AUI8bvt+ZOrJDbNLg9NFgFNZgWWeiwDVt88dWNaFY1Fidxj1aDpHCOazhMWiTkgla+v/2yb7VJWHlvCz/Py0OpFdtSz+lz1Jh3pS7VvJbRft4cynHeXlxURNGPpfZnAOSXZevv69fnr+7xaxmJnbMzRKemFE1wX54G97fWfjmPQj6CNi54+CgtXtfwPG886AlfFJqONDOwL8/vXl+7vuuPd0xVJcbvetdTwkZ+2QmC/zl5LHb778C/7TQMWnqpgKezbYNWV88YmEX0VyjjhaWXAcqiSKtOt0eYGoXe42BBYqsUPB1suMtoOO6iIRPCINLYTXbd5chwSEyWHJMluVKVXGFtqW/3V0gfe2U6Dq2wSTKviiuZTsshAmUO4YDUTPG4D/pAd3hOKIdB21hSM06bd5QXYEei84p0YVsNoLbYfr5vjgZoibrGZIUrupNP0VVzJidvShNmdM1h8GeyyVyziboLHX+dFAosrqmNFXtfFerfePH/guP+45uVUSru9lhgHVEq3n9aANWzXEVlDYDGAnn88R+IcnH72iAENM+gAc4Wvm5kQZ6bx8dcmloIHOf74F2tNVXE4NNHEbjOR5Q1/D+efHVLWtNRqc2XcQqLc4JCHSSHj4GqyPLJEHVUrDaZtRp9FJPe73/gt2BNCwOukW1F9UT+alqUIh4n7wk0rTeDEdIAVp27r33TRJllol8+r6feHWzDDTze9QjOGjLJyRJwy0qqL4uUE7mDHfSzk0eW7WhYFsmY5C7lwogEdiqN3HO2U8au82V7u//l8RJz9E1hGWhmq/stYiRK9IfMdmcHS1ijFxGicmbLGYLQdv3dVyhF5XqO6W5NQ0h2Pm0P78Pz5z7eMgtAeWCbLE459IP2zEWyNaPcM2hjf7PhJgSaV+jaTL9kZs9L16OlSM2eYVutrNw+U/s74XZqZoAmvzy1DVd/q8KG6X0FuTS0fzdutkg8aNwGtHzg7ZZ1wlkij074YQsBkU/QufZzMepHThfaiDFI1T6N54/W1zLpx785So2ESBDMRawXI8I8WbbTxqlKIs1W3KHvZXnXjXhfC19n5cV7CyDcCxlHESZdlqK0xO92+QIpjmEL5iFpnaGnz1sct0jQRfMowlChHvmj3mIT72uwSPjN6dXyAZRDrm0uD9aHU0TSLJdzKMegF0lGfFd0BOsbosBozucyWLQoch/1hmTe7pr1+Pe3DwaIBZ2+mMwkSvFMyCpgtPx1s6xMYjvPX7RIiXW6oxgFLK6fxqKV8XQBu/6INkfOaI1LmYZAmGKj5Z8d6tIBZgywfUlpsoZS0PpwfqESPDxGBFWHGK4mtsOnPwziP40VsVRUG6IhHOCtqyOqBNeZ+wHQZ2tyvEcqVlhoXD69Pz2+f35j0RkIHYmhdVXOuDSG5HYfJicZPx2x6Y8GiURFs8VQfxWgB4m7i9C/UlLJkQBma2U4irD4e9DDt1xwbhckcufkIbOhofmsq9oMYA+V5K+ptddGtN+9AVhfPlLbhfSGPwbZjpQcbCR1pkR9xsw78RNJskUJ+7RZUfbfVPBEiHuwh2D50omUSF6vX08NiRhibR3Ba4yW/tAeWd4beAqtSi704wWMSY+gd5+HvtwKLO3DCUfPP39oK/d1EVpwqt1KcBw0WTP/h+s/nlsGefeW/mti63hiPKxye4mHdOgEWNstTl2AXBiXL90OukxUm74LtSnssGhhpG88yPtexQaQY0d1VIrLmhuickeNu/0cS6T/++fYbikXd6txySHm7adHwJf9bR2KLj4foxnkv+yKklw9Tap2fk7FJA4WnedAGBlmiTEG/1c+qqT0aTCp8IESkuTjW+IIyT68N59Ru0B/EE8DcIOcUwBkk0t4x+PfiLxLe2N1zTmc8USqe/CXWEUCRjAPUr8dF0wovmTibBhSZ2D+dD0U54xHm3cP+UI8H43X8lcMEFW6zunaPrCGw6Iu96ucWwj0Ba1W+rfoTWBXcA5k7y4IbS1jrZ5NaFAx5x6pt02GwoSKy7Ib4x9I+33Noe06H+hUG78dkwq4kSPPM4dyOIXM8f5azmOYr4YEZK/DGuRljMZhIs7TmEQnqfCYPLUuo1gD3eoNFD77TLqHobKpTBFWcYF3pdZOHMg6zeikYvVkXxpDkg8b/qC+za2ZmVTuKPAO0ZjhLLdAaFEcUXJ50wsNLmug34BY7TORnqQHruonpFEXcJc6aw9vTFYKxLmXpt2PhDIeBoNcYn90KsAZjuTdeNr/bNtsscCtZkKNVcfH4z0Mi8jGQz0Mwfzy0pV1IX9IBWLAaUCu+5ossw/XAIqZMJwH8vglgbFoKBqw/6b1jQXkUrhuy7uaN1Mhh7iVwlzahdK93ZbzNeQ0mFAS1CMuA1dP9FFceWDzUYO8TYjQugilMjq6CGSx60tZ3kAdMAzXbM1lwkzS2mpdpm0ieGqrNUtqGGTouClEiaqVl/DsFnehA5e3b5yajNvT5UtHdKLHap9EuGfFDIZaQSbLEu2ye14ZOKHZAX80T7Q+lu+hhIBvCjOPYQQhFY937Fy6uRRoIp0OIzlXdHLE0xw2P+PXZ+MXy/OHCM9YaxjRtvi5BqDF4l95RUUC6MrR0mVT/EiTw0zIhb8p2K8XrzXrtBI0tlqTvaHY3Zs89sqwy6xhm1lydJHNZFHHHtLgHlqOhTwCscrmLwwraRniojSwjPO0bvV9VPZsVi1Tm4exRH1osnxIOYyx1BkrIWiW8kklNpvj4Vq6ZX11CkyX4hpCcqEmZjLENTPoSpwnyU8uGVP2EHRdVStPVICblaCtIxvh/efJNJIFL9ra/bbIyrb/PKZNKA1b/eAyrNn8l7E3124c0JktP4fHZssD0lJfe1nxEfYqTg5Y+k/IElHJpkxXT+XapMVa13la0oZoisc8S54c8y3TF0bBIaq7V3I2/sBEnK/0QKX9LGUB3sKhViSrG1KqTFO2oN8fvDmQMZh1CoQyj6tBuY6vG8WWWjUf5TPTjPbSGFFLp66vixU2CZr2qSJnhNA+laOaewVGU78o0TbpEpup0ySkNqCm+wnaPK4yPkrSjyDJLJfmntPSHjUOpuwv9XOXB4r2wKrIK8IocycSQqQIEsuo08QqZjK38ygunIiwdcBtDQaxSz0S7l8lr37gmyNQZwFqZkRdkyTLFxW+HOMy+TqlkXlpdNmD53NoVzPtFBSY0olpnDlj5vgFBWdMBnqwN4vutk16DXAyXnyKTyc22oUoe5pDWFIuyh1d1OsOiK8CD1zboEFmmGW2H7lW9KYk+P/3A0zNuVVCXwRTe9cYtuyFa/vlyqWcyv0pgcUwL0iurXWpUWgMWQR4idXeI/ZHk+t6zbB2MMxu//lMvk0EzoTUPesJgNMsKtBeKRPdsKuzxPQ1YQRYAESu2+RgNjXQmSJndbpTwB6nDmqQulSs2JYAV5Lp7XFkeauicyZIyeq0rWaUd0+uAMzBWQbeezCfSfOuQOB0bq4r/9APu8mO0cMShcuww9IQ5+iZZfB5T5RL7k/CRogeW9wFK/TGbwABcLj+A9c/fzpQ8BLb8uICtCBnusfoZE9HqUsRD9uAGadEtIkJTjK2tPQviZldnTJNGBs8hmd/LhAlXNpqoqILlB7LqSKcnyzigRkVKo26MjhDAOlai+W3ZMdWilseijuR/Bd7yH+Q0c3OVr/P5q6S4kliRW0fz8a1tNB6N+park2OTDbWjqJhToj010U0ZJOSOK1GZm5Q1QvjZAcDSnQkaqfmS3c/+u4Fbfb6+z7YNqfOxi9TJapTmjIUqePChSgIPrMltL0dOg6AlJa/coMjaFeiPu31lPOth4ZXlFCMnCB1ZBlPn232xfXkt+UUsVjRc9cASNPl2xqCf74ElVufl/rLgFJfJ5tkJ4LMsf3c+zCHLWgfSNFznJUjoYOfkM9v5r/LR2vNvdtm6ZpQ7JEgLLjVm8/1n1MiVucHrJMmNtYEDTjbQE8n11AQtyj8uiLS96Li22tNDm8Qyc/c7C0dlWDzMRQBOja3f5OdHB8SdhTm6Ym4A0lssXnhLwFgSH5XUkMz9+JFoO1HqAP6fCXqMs0A8OFU64N3tjyLLX/5Xn9RwJXzf+o1Ue0h76jCsbR30tkKAxWSvBEr4/rh7gEsvzSXDxOoJdVu2IAv0l8PbRoClXWc5N734FoPwTbRlRNIXBzjyx/Z8/yunFzW76R8Ob3UJLP1PQ9YAWES4mPDVExaioD5GprTQmrw2keWGdn146D0hwnVRTJCRI1HOE26UtSfZqy5ya9Nh3UHyzYS5PdnMZv7s60mb0G1q1Xfgy2U+reT3IznfEc65CHl1Oenvi8acBFqk2a1ysIXDmREsBVkwIgkmdqzP4nNTw5VmWtB0CaQxqRU/Byz1x757Mhvl7bzSxbkWL9BSMEgeM6XqyjEt6y5V/XmFRn/4Lqiq+g5blPhy0Xz/uUip4plLJo3DnJDhSoDF7zMTLR4eoohnU9iauRJXnsUnqTaAn30/My5zo6TuMvQ1/176nzKUs7hotufj1xEn4pdd+06vWinF1ZC5gSbCsI2oAhdF1n08FpxoBlmgTv26qxu1hTj6J8+gKxGvCdYUsnAGPzs1foF+T9UDhyfanvcJ39Q4NMa7EPtl14CjwGPe2F4e0ic+wUwldW985swG6enQsfRtivV+VLfuuMSMD4em3LpCoVxKPdy2sg742XwFywTNvuTqdCdaxf/wdtlrKUyi0fYxqxeJGSxeAcaZYm7giKutCBpOMw16OZJgN1B/cXZ/GFG4cbooTtb//BJiXJxNJyZnQidk9tWxTAHjaTLuRWGVzaEq7JxSH+kN8+xQjoGWywKCiLdOTfu/VL9JzjJBLhP/yvb/PP3WNjTNcp98l4R+0YdVfvzYNRGGwJLl1WjEXV4X85gH/kf0YkU+BkgxgPtszoAlZ6Mx52xexYAVmwECB0sx7Cng/v7Vx2vGPrrRZPGX0suGTb2KAni9SKyFAuxO3OizJrwLxwk5bLOMjtevTCCwiKFMy0hsDeuoEoWO4vx6zYUd5hWCdWRAhHrDMH/b0qSN3DYbIMIV7Igc/Qjgb9Q2eZ5HShowYOE/lXEeQqsg5SdXohWtE/cWVtpnOlT7ciBxy7Rgni3a31hPRqEhT9x2TEGWSWrpdIlYrOl8JtdZzkolc93gkFDQFVmD5AMJf5pz1YDG6Ao7LUH58qZpC0hYylVQ16+3Q5YI1UaNovlP/pgBayCYYMAyMPN0SJ+grGb+9Bs4WdzkwHVIEJpOYvAUEBvpNRoWoZxddskIhOTpfRj4a7pidsdxGXVH1G+UASA5wxxIL7DomFNiYyyKdAftoQWoaFHjoTMrGHdxWqYaSvGgQ7Qua8ENQHSAEr+LMkyM4fSHRlfq80GxcS9tpSMLO5y3M0Gvz31tAE2DYi1Xsfw/yrlwS0MgLyNsUA/j4lyooLy5Kv6JBZJmmYd67KYsqQIn8+Xj5f7lIaH05y42i+WbH3b7NWLi6rVEnyhyrUYKb6cGbhtSCcleK56t7UlSE1n8Rn562QMLyb4Rde9MALjMn5+2RUIRMCJAQaUGSyooHld2KLAsrKERprhHFgNYj9cH7jwoqcKwWOfLtmvaI+o1Wt70Jst3eHiRTGNomrgRuB/AGhKyo81xswstR+fhlzTZTOptoEVzO+Sq4QDxKyAUNMVR/8YZ3ZytOtuF6PX4tTEb7Sg5KzdMG3nTWQ7Fg7rlpvVeRccv/UCM+P5c3nCqv9ftBCWt3xTFwTqdaxwlVZKHpuhm39KiE6SEBUg9BFbaA+t25Cdj3JSwfmGVK5VFUSrpCgHoz1UZUJQC6LQRfY3B+3UeJCLKkDegYluzRkLBl1RLM3iTMBXTYiS3gJfmpox1eM1c2/DwE9ASskqdoIYs5WKJh1EHfZRcbqxYyygMV0NgyauMuF4l6yTGLrb945q61lmFJlz7uD3sn3+9vB8yoVhbsj48TA9KUomwiiIlYNwMxZvtUIG8HTpRsr/YGlZ+vaLxNBOhbRrU/DKvoA61ryy+SzbSy7vVwkl203UKQw/i9YOoo7IvrJJHInaf7x93WUjKluHKCVrNiq8Wn62X2y+htwE7KaPJQGxQNetRFec1MjcNJXnuiisJBYvd6zHja8NYYyDJQEyHVHEiV9yFbEHIJMDILN3n/cvrnAYvbLiQoC/7aaujL0nPAMMmDvwotG6U0YgFP2Wu17TUxH78bioqlKBoyYNvLxrm+P3OYLP+aAYtHtuCa15s5tVbOQDL2lPAlT+kne4bO6zRYNvorgCB6vFhCyWm3SEvCoQR683x7QW6l98byMQqp0rfd5hLOOFvBMcznAGfJZZCvdEy1Gi3Wvo+QQqboYxqeiqHLN69ohpr4NCvI8A291U+9iOnLvPnpHIgXZzAgKUr3rztSLjfWqQcQm3UE1tVt/r+auNw2vtgUwiLttd88uPRoWUxI8mLTF4h1W4O81EFT1iKiqZVkkY2EUS0N+ePJqJ051zXvvDkbnyqawaOxC5R4M241phhJ0Wa6uNvZzQZOY6eNCGlqD0h5GeQjSmidJZcr7GrClktZKRzW/5LKGnW9lLc6R9itiTQR2IwgeB7am4rm3s88wd2oynkI9m8xUIsA8I04Z//AtZf5cO8U+W6zzm4Tddtuzq+nvftYrfGuq3T5R7H1/3Hc1GamIMrDjhRILmVOnFNJk/E8ju3kqj4lx3erGHfrWqHzvhKzuJNrF6mwGPRUZA23Fu+3kW2btlSR91NgKa9NGu4Vs5mVHSEwtLIoMpS2cERS29dF88jg3i55OCEWNHDXCEq7pssHmwLN56w3gvTNQfF/vB4KOIRHCqXmyINt56Kk7Cj7c83L3Bm0xlDU56oAEt7w3bLeKZUJ4yLRUNOd4yhbq7EWazW1BljdTTNOxppl4s5jpHfp45vv1xujqUAy9gzMP8WLfTNjR5Yf7j9nbpTRKlhLFJC9jrP2HODlfTeLtqoN48YOFLhQr9STGfXKD3x38AyFNu8tDAHiny56kD4+O3tYdPtYLDabvUmSr0v9x9vK5Yz/H4Qp4Lnmug6KJQgOgvTqqx8GPNj4Rwdjs23yILWeIn0qpq66TgKORWzKVn9Nj6hHnYnzbuBqCA+Di+eVRMV/hjrNmFbHuXrSpxHyPC0gcHGgqMp/o7jzfPbsU6NVenlsyd5HoZon/yUeTKhdREjSaBW/PZ8yOJ4tNwsKXYDF2tpmYsRZW/x4ftSlFGZlzZPKum7tfCMVxZVyeKwejh/f718QYngvMW0LwRVZF/PlIW4f7N1JdqNakfQWZwoEYYjDhE7BJCOdkvyNl7GS/7/p1LV3fdCFt57M35jj4Sg6LW6OnmU3bVet21aueedp+b9Zv0tWjtOb8agAuDZs+EqTjY6oCrcUgdLB3IvnYQCD3VgfgJasYXLVcJp9cLT89kbQSVGSzPDKbAokYCDrF+NL4Xa0AzdegAJ87VfreqqpAg1nr7P5/cHRJQv2MYfmCSvPMfepOigEJ9oFN2ZT4baKLRmoz9ULWmmf2pN9DBuixgTb6oAzKZSRE6MRUDiX+NcJG7NE7oWFBEyY3WB2MIt4EPrCA2GYdFJWzVFu8pCBEd0XNIQjYr1EyTxpxkG6/r7Kkj/YMD6bxECrqdNuh+oy27zhMMU+ypi/KbWFoVvDywWo4rDv85tleW2tEcVDPTkdCowqooeBKA+XwFMYCoWTdO0sVrXQKbR2/4l4WNspY+xdKgJk7bzqsOvA9MElZWQvUqabVouyM6LAFINnScBEVnJrlSm1wSBXjFE3IfNJYbbYXVsyUwYLZaSuYXfa8AaQ3dDKahOUlwksAosmuya44HquEmMMJxTFk8P3dBdXn/f//xru8lD3xwzoPAgiFjzALB22916g56lMYFcnDUN3+eeJaubbU2HNq2UVpaH1MNndGGCFE3BvGFkhZnKDb6zUF4RnaUMN/kldBrtmNZBvL5ACYgDuzN1woBz0T31VaBb61wbN0LhyxZgjcjiu1ktJaoPH/e/HxtY8uYGqvkaJFr/kHbc1+/nafcILdChLiPkyKblmDrJSUSi+ZBEBBFiP0ETExD2JGxzlJZqX6QK5mqriisrvbuBiiB5Pg2o8KieES+SAUvTD2u/jArbIjFqNNR5VMe6y27Mw8RJONFy/ivA2sRw2aiWq1ExZHltGq2Ojrhy4EcSurTp2rA4PHxv109X8FIrigSxMtq+71DO6h8vv+7/dVxlXFMxLipXfplbG7CMqgyLtx5lkb6aQUfrsBBK/YDfe2e7Tu/U4jHkAJ73qFigoKPj7OgDoVx0a0oMNnNjwEoDzasYxAgrdzRA9p5G7k5efq+lRyLIuhNHtF+dNty0OamTVQVkCDywvIqYjcVQ7+37+fWph0EehptMxSiNa8tyq+ZBplSWPV6fMfekVm0mul10cPLWYVbjj/VMZjNmF9KGmgNQohGhmwnS9dkWW3mr4tdaOWkyIPi4FzKtihk6upuV9k0ozwMLLka/NhLQvExmE+1Q2etj1QZeSi+blqUIhessDMaKkx02mzKdxNUmtQ4qhMLZZuh4/vX1+vpw6HJubFrKIzVskzQqs/4Mf3jo27gG795J6Jn1Up+zYIaTH96/N6U6Lv3sRtHwZSscXlzYYi19ERtyzjD3uqlCPutUSkGiq8wUYxcJtlR2lhLfvkIm6ZmLmQxdLqVIN/3pfaCwpFQdZGYX7dVTsrTzt8QjCxbeYk2RxRCLi9pPYCPvIViY1fsbtx2DH0ZoAWpLnS9MBywnf4PuqwGLMRWvmuh5mxYO27P8E78FwAyWCn2n51OgpQOf4fkumq45pr2MNhnewohvAJYxBchw8bK54pqUGWTAsnYjFV11uY4n5vFLfgQNj4wuWy/pUWJd9++XTPEw8R5DlhctsLwQhMkwkNGS6/MvBuqvHZeIMl8GUBGjcn1Icfz+fn2BkCl6Dn0SLiNQQ51GAr0QQZGGxfrhq08Y+pjF4oOk3C67fPzwPhnj4RgcXtJ8SOp+VeQ110dWKgqs6sG+7KS4KuXNzRkzyNHSlz+kLSSxGNr07RmClSB1C6VfY+e4W/MJcMuI4emyZWC0GoPU2MS7BcivQ9K2Gff3Yq6QJoeH2hQm+b49pPI73fZ6/t4WssdV2pT0JfB49aoSVTizp9odN5vP+4dv6hLtf20XBJbjvY17UnypiekPNwkq/V9qrHxdurMpz8bJi+o2v8keDBx3UcnZyXF7vZLzDFgEP888YDCJJwsJiQ2puOxS5acn69umHCCY+RUCyKw/vXze8/g8NFkVytxQkiU0XBFkl7Gz9PkdD+1+X4tGv1wwJdLpXFtQ1v3bPRN5czEsKcbcw5Wm7B+KMo91bRVWPtX3+GBpKkS4lYISqqKPCgRx1tp+tO1+qa3uMl+oybwT2XTA0qwS4ERJqUceV2aVLBSi30/jp1UqRk9zCrB9wiiUkRjXKlbGCV4WpxWfH2tU2/MaFPEhvnHrfLQBTztnwHLcfCTVbXs8EM5L4TrWdcBVGU2smY3Zau2O64dEjYYOVglM2UcXmLSntP7HHu0UWLNSlsfLcz0zRrlt0/TA8gUqGBFjdHgqA/eqSlPepWPm+O+cJ6BVy9VDISx5KmQzqeFQanKTwVNPcLPMFfc/Pby/Xd6+vj4NWVxtwQ2ISR3qcxaGSdFcfl4u636TgZMrd30x0TulBnacXz/uH5AumRqYKIBKooPFXLB1qCiGTrjKYOWhNX6ODBsPooDBCR9EJ0pNlBJZtkU/CO/GATb1Zw6s4yihK7nOEMtwYnrdYVVIxjovLSMaPNtsbtwJNjqyXRa3SjA3VW73QrIc6rLN2yxh12tVRAYst59HdSEc+4ZxQUtRY1Awu+tQhhKdl0MYIVbYh6ktNRJc6WYC6fQvytjE1GWT7K9h4YHFY6S3TIEVJoHtSliqHKcve3phU9cSxmF5gNXC9Ord6eZlq98qoUsFKC37KQdXzI7YQhauphvb0LFLv9LUO1+jdyHYfKYP/Px8+BZova/3bEBDTAcGVjC0YDHv9HB6vOLyU6BfOA8SH9zp08aVgfjLDz3zHGVXixZsQMrY6vzxed5tunzURB+h5TbBaqU3juX98BJ6WOYnssXmLxeY5BpXsJjP0zkve00TQtR8jqGxkFivD+fHosSdUC5+uN3QaSv+OFi2b3MWtwycHvhSdN+chm6FLldZFejhUQNRkS1leYndvcWi3hhXMehkyWrXZVSZqBqUVxOZGQtM3NIEF1SLknZahEaFnp+9/eL4sp9qHqtrXndW1ftiA9ZctjbrX1DrNmURelL/yOH3+g5g31S8LWOyfofZIn2CdaftzNKrhQjLJSXTEGm0EY9+sdNouTxp8TZon1BdfzycdusnqbT/nPo8qVSOX8d8JT7YYxf5GwrPcSq6srFt3JAJijZfn//19vv5KafUHN9WTueWYjZtf/rXD2qsXzvlXBIpvgMswDJk8RZS7wq1ASsoq2e4k7RRcj8WC9pbN+isTy+hYVOaHq5+WZI6LdyuMGteP4+oa5oqfLBZKxNPOw9lfiwasrvtJXwTnSWz6vllgLGqE+QnmJ2hlfQAVJdgfDr5DGmGxNaWn6OuWmy6Psu2DQLUvoEvrXSdBHUe9OICY8KY55WUC5v1Dz85ewNu//l0D7n+idx1pmyGrMVkIvi/gWUu1PPLPLCMLrpEsk9/IP/wUrhOBtmybXBnhKE5D1mVnGfomHD94Vi/NfkYQ7JTIlo9HZAfb3dDsz5cvu7vLw1q1ToYZLxJfok+WYNsZ8vgHtXTukBcb8uQ4mZ76LfH9aVfd9WSuW9gYkhgOSHeb5rN4QuLm49xoBH/tG7qVCTENQQxZVARi9JamYxKMLPwlLFE0sczvwlh1JYzx6WAmgAL9tQV6hB/Pvwr1+2KTNHqdWJFUmrJRAnW1IC7Z7U3nqKeGJl9uw8gsiyGonne6c/YGbjRpb8asITMU0WyodJrr4dVsuoO6926O5ybOi6KikN2ppfurbKL4RdQ0Dl8fG0qMEq8epxGcYKrcU8HbPfebtTtfw+q+MF1K2iZe/L0HS3eGJ1yEZXagtPuR2yuUCoa4a0RRmzAh7XBNIcMdw+xLcY1xn/2JFdLFGgLsyGr63z91Od5P2yu/7o/ADPyTJGg4rVDZgEc4v709XNZb/b7odu0cZkul2yk7l6ekIy3m3VeDFkoPUBtoCxQY10lZQWdIbSKfmPfxXJCNhkDLP0cjN4VWDRZ6iqAXAEW0k6OauQbtiwnEm6GLB9cyWUfK/1S3vF8sO3HeUPKgzw0YV8tfVUV3K7s8XNnkljS03M7tYMQy4XyOATyTr9P8UILhWNyZFsB9WriHVO8qgFGEcNHryzQKztcfs7Qz/y+tlR7MaVvUw6334SrEncfX4cOlXvvonSnr/KX1RKL2E3Y90kq/LL/nYAyxqlvBYmnphTcdGM/Dpswwh2zJyEs4SIMVwE5AYYy1pfcGru2xyboVhNcvJYOh/lyiNuPnjPQDAt0QCFBUgyIRbJooWUCzRiMV6cO8Xh5+P31gyUn53UHNK2G7um8W+V1W1UFyIb1KqF8sFoZ2PUhY288StoYIcbjw2tfmXCUIcvE4n0aUAWidmKPtI4n4jz4GZdp0WeChSkHQYl4Hli+1CB2nWxTQw798grNFq6aVeO3qij56qjPaTL8/PSYAtWQztfWUuQuNTs5q831+xBKZmL9Uhz+LunVZCpUCklKCXh2S2iHchwN5tm709ev13XDurwMu5os30gpgwEZPp6vKyaQpqRhqbSyqN1rzrknuiOwAjYr/hdYFl95YEknSIHq41BFqWCIxoT+Jykl6pAIy3kYSf15T6yaW3LaI8sT6cDeQCDGtQd81srQPQwYl7VESRYnqIaeqO7Ic3fVTK97Ji52WD++f94jZnp4e/vX9+Vw3CNfKqhV0q/qpBjavCvQsJcJIjKHuRaaLG4UkiBKgyBYHnrfSFTQWkI051I40W6GR2VJwx0zzPl0A+lmXsPFc4g0ancR94RJSbKp489LF6/BGh7aChluTRIToNc9cGHxdP85sHMshRHxNSLuBid4agYg4nsdClvsxhyKl1meLHII2pkvXBtWVM+HqmFxvh7yor/si6E75kkU+QK+SfOpyvNy//HZsPvg26o4tDLiyZ1zJlT1qkcFJJIuyd24JWHSWabiNw/b6GXFT79u3/l7CYeFVh5VrbC8yDIKknRu5lTnn4KFloGERicLpJKUofydDcr555xUdVoXNuuKoh6GpKqS5nTag3vGjrzcQ4dt9SfMX1qoQJ6v2/UGD2FRrLpd3wwDur3FphmyvO+PQ0YZcsbt1Ie9pV929PxtnxckpNqstYvciSwFVrlk4AZbx+xQ65mSr2+/tlxvQhvkceU/yYRbNe3oiH+woQ4h4RUb6BADr/KyFTSmLEVVZA0Pv78PiMJSrFOV2FFWdZCJAJGA/kRPKXnDzTgG6QMWY4vfVqkNERm+zaPygzGr2qyqGHNw3MCHq5UtNUN0vQmTD48298/xzOmJKmKdfKN0gUSAjns/21WRVHFFcWe/0saoeMYyILCsyaKf0xpuY4Br4GddN4sRDsYihLFgsKfzrXZ31FTydPXM5JSWfYsSZcDhR19Q1jIPRbEIrKqpwWKp4xh1hVMupkLzDDu8AKYlLkAQV8ZLkFXhdHbP2Hiy3b5u16fnJ4AM5S48UaFAiJxuk5IGgW0fo0uEQMxVCmlMeMa6YzDl9iEuf0pBeNG4NEIXcYUIhY8PzngcOh3rOu4RxOFupVhvpdbbRZhXWRHXTUhDKKPRSOn9XKCQHa+/nx9+P5z2iNRDOcWZ3sPNeX16+OziQPPRG3fnDFiUCzepgoBFVmVxqk+2JjfgEgs1bIVyTVstGR5AdIlCKpq38j8HrHR9v46cuzDEWg8/qI9tkiFi4cUPkULlcQmMpaiG+RqMUeQ9hVQlVr1Mx2yUtbCPbsDiiF7X9XEGd4PeRMH5YD039ciGQTN5Ngwzj48DGnCMDiwwMNGShPk9mdynrFrtcM+r7LDF5JFC1J3pqH9JdFBIL0YNGiR7rZVyDWeBhPKDdFNUs679CtFW246TfRoOyuaduojDMC2TLHCkEl5VeSpk+C8EoijGn5RlwAo/JWZwqzN2cYTma5H7lKjtrLtF7abUI/mbQk2kf0rK/BcJ7JBYRwq2OGBZK/+47q+vP29P3XpXE1jkLIawWOfnh8smicwqeGCpOzQQsYM0F0K5goG/eCIIH2FxJlUeRihZSeEZrY08VsqQinVYjFVeflbBnYmoTYHFBATRXs0NawQW7sEqq5BGite58+0yPxJs+keml6MD9Lf8QdohA5f102SF3enrocm4bnO9Ru6g5tS1fP2VshXAxt6/ix9hj2b21gSJGug8VFWkBIqOxyJc4vlcd7WzJpMzdEZLt/UDGvg3XYppEzHLtG1259/3cvx+24IxiNzSr/r0wkhCd20qvE9WJ7Z+VsuFpsCfwLbzG2XdtBW+zvtdwTm0cG4W+L+AJb5oJKuab5WOmwvNzThDBZ5iURmNpcygSCZwY+BTsXzYgv4RnwJmK6nozbkXtL88QNGGesxKvL/x9tJYtKbrAnX4JfGgkbEK8VhFW0e2SOJI8rDUpbApjjivAimMMoC1jsWyfXjOdCzXy9SqNRPpuW4D2uluM4BsQqm5TQJOWyJZvGdmj52p0XYp/PkiCwqourRAgaXj6mnxfP/xtEMb5m0HwLv1VzAO/IetQT0UE+otGKU3j/uCFtastHyG/Ckh2GEFuyIX2ZYUtq2WGGgKLD9fZyqz0L+Wrd6BbQsW7eRmi4zxF457iNo2qHLbvIE1XoyVhbpJCwJFwlGXpgBAJUeTEqHYwiJb7TnYuLpe1tcOeT4/49wGoJkWiWbMNMgyLvnoCDWHFWupRltKzDNBbshaiuSZCxAAfe3Dnhh6+f1md/7++X4CPRuEht36vN30Up67tcWgNxOWuC4y5rvSKNnUnu2pEcCLzdFKtG7ihfdSYAVlHCG9SSLTkdPAk7HeryfVSxhpXhKHyX7o7v15vcoyXKF6wGMADVHSmaOZpvB2ePUWP4ql6NeMprQROC9Xpbe0bDcPWOH2/OutafkTlqrLDyrreUL88HhlYFk8PDXkj3m/T+noPOG6+XI47lf1Upp+mzqe+8aTAXQ6Wyncz2BhRCCtx1D3BoHQcXs4nZ9Ob9+nvmAibE+RFzaRUjtDhXwHzGQhGaQZVZUD8TrkFmbQBd+CJt1Av/R5g9Kydg5nUr7S0uVEJNdvXhlBZbU9OllfMBNcAeWsdgLw0olExzsjVjwirRBMsce4RkkT/u/t5bQhiUgMu67Q8sByl9YCYpKo84U6MKJK/aFrI5qIqSArG9idYLUggfYnst3U+jJqISDF/NaFTpTQRHAYuDPNb7M6Rn4ZyPUCtRJy57jUsTydk/kQX+WzvWY4ACzzUhLopYiOZXRXGcAqytsdd5fvywnfFptAj6ntAcGVB5TlnOPI4rx/7tpSUiHtBFE9lzxrxJOnpxWrV/y4Q+iY6b7wOIUWgUEzKW+rEbmQAuOWoz0DDnzYp13Oq0a0u4zHK0X/lUYr2b4eGup25yhA1HR+EeLlCvZid3j+fn6BhuHpcGAcGag6mHbuJY9x/Q39j+fkpuqMjuLpYl56kztLVP8mzRmQSIdzcw0cECQVd3PUuGfUfy6zYYX+lbSIY2ih+QoageUvK5uFxpnIY01D9QEirkyOyXVl/6BhEiIrPswIu2MW9Bt6Qxx8Qpm+bB4PPQqTk5xQN9MAiECkaAiqli7uVb57/HwlTqK5lgcV0z5tVWOlXlAXcgXgY74dNhvUKVLJoFQ+jEFtgf5A0x83iaZWpk/LazJV4waijHVo2MJAHkQ0mtRWsKvqMCibAG+YDM/Xgukh87ZCkmBiQd2qewA9sMDv1RqLT1aE/plRvAH/ohpx2F5RpzGWitULR5SKAUkRPqFKsdrn24e3dcc17aLX9/j8r3+9PWFdK5jpa64lFI1wvatWePmf4F2vmgeG4EpFhd0CQjwLPA34gaojw0ieh9XWTYGZM7SXsF0fAVp+WkyFmy50fMiAZYch5m65oHpSls2M589/rMU3lZSD1RU3gecYHj5NuHw4bnHdSgSrUKQSfIFJgfsbc/LRokP1X1FOeRtxT25+gshanT+/G7Ix5fQcsJxmvpHEGLarUEGMZ3+z+/78uRz3NHyBPDb4DZFMtlkXVZnkfRLhxhn5yXq7XkBbDv3Nvtah/+CYLbT4Jztuo7pJKrgjVA57PshyCYtAz9HYLQIIVUl2TF0G427Fj7WbwiTLWpRUmATH7bDtNrtVXS7VAVnpxM30CjjV1sUd1syy2vrw/ny5vF4uj4fD6+sV6+g67Kof+kIyz7kAywm7eP7wlIznMSFNOt0G6sRHZEyTCaAWScOFidIkJD2NxULV8/SdlVvTgFQl2NKuirhCZzCdMNwC96XMuqVPVfBmcp5GrXNMc+tTsUZUNPuBOUoMIz1wyCBWexSEKAruKF5iBSclXyM05PI2J2arH5a8mc3zN1ahVbhKfrrbTwc45SuJE6RzG4fMt8MczqIumryKCK0FLUxVD3RerLXlBWqJjjqDt7KOoFfOnij4GfuZ1yBoYmFcI2JgWyqBO6KrPj30lWZ4i7yePsdyqlZfdjkYDm1ruM4A04CSi7C5WpYhSoai6XHNJf6RxCaaeZkKoIR8pnd5x0iheaEsNETfrrvuuD6cz13fbZ++sQJ/kwNYjLHo8b1vMP8yBZY223DYdgUJh53NEi1MBRZSroyaDkQWjFfqU3R+VJdlWAvDvjSmWJ3MxR6x3OBn3k1wYoZbvHnOZr6R6/Z+OsF9k5uWsTUNl5AuHbp+X7BymOXAVQWTX3JnbJFke46t2B4trYyEbRwZ52o8JYZZ2Wb79QDnFZjokQ846I3dXLO2bWagXilTJVmnpJ3UG0Ao4BHW7ZCnar+CCsE2QyyprvOdxo9ihxotwEo57hxQRa10FQjxW4kDSZ9UsDXJ/vOcRASWRQp2tS0H81rvjsKozHs7TPxBskR+WMbx+zUoDce+gCOXZ0m35PlkZayMSbsj3qzfHtabzdA0cIavL9fHh+eXz+/rZtPARbbhRPvIlI8MoqMrJFFAl4wSUZYqiz83L2dSoWmbIKeQLCyo1rHuGpgyDv3SIzOReAE9y0LX47BA6j+5hZycBHx6ilmmdmIvjp7nyCQ4ONunVG699mWZrI7dJkcEUNRZXYbMlIuiLNsir2xgkJ6T9i2Rxam+c6hESlmHmxTXjxNI0H5G2HcuXUIsl4EKtwGnmdh7TfNABtJjuFfxx8V+kI6HlI6WxcpVgcBytzmWUa5yVPUbmTLS4A5xNWHotcvYHou2b/GZDus+FGClBajNXizcBF7Fm47EUzFbdOAGMioXusXJcwnks/UVS+1322NDu8orTVszloS9IphO7ZVVxrx5te87bGj9/P5+ava7VQvHmqZJ18Vu7QIP3TLnpZtNrVI8rmUTMvNiZFV1Dl4uZlbmpa4k5/6Up872u/tRezMIdsjbyd8Wtl8SUIFMeTJWVOC3GHcv9+vaGCb4xY0nmoqU2zEmTHCJh3U7nDT18+PTGXuP9+ym4QbnMfCWDTUTKQ0XkNRwhGWmpRE/SKevMef64vefvo0CXubJnjA306/ZKPxvPfNqT7OIuBVibU6L2R878VcWIsRNFsNm4VjgbSzy+G+LpX/ggQWTNY8ldZanYZkd+i6vKDU8sK9HKkYiObPxyab7dOwSuWkihlxu1N/iSQve+CisX5+22D5+OmZVunDAsunL/6qDqNgNCDbDvtm9fv48/FzXfZEJ6SLg8wpHwbkYF2P5pZpuQkupHxoTmD4WgDiSAly//RY5YZkvZPVZmoJE9vCzCW7HJF1ZEI7Q4SBpNNG7GaLqZEkFC95fAx1PXvS4NiFMhk6DST3EaiFOREqfSvTu7niWtg9BubdJsbucn45cyZcNu6IOEa42nE9aWC+i7cioFjU1LyAwzpMHEVg2lwGt6FSA7doATjFRQ09I/i7d8I2CWk1A1Q9o9q7XGW2UW2merp4o0gTLhpe0h2ScKLO8cLr1xJLjRbJUvjoqL9nLaw9vhZNrwzKlfUyquVPqlC6Ajfi4Y6TLjxaL91rtsy0ALZNhfT512KLx9gTczmyKdiRdT1M66V+pQsYKRMLv5+f7y26Peg3jgBnRICRfQMv6VXezkeBgJwDYKJL0MTamrm9JGbK4tjTNZk4jPuLiwzoCsixHUQEfz+eRL7zwELzd6WMbStXB7VjQ/iyrrrtq4XZsyTo+y8fdknp7MP/BBErSbZfIs2wWJ/kKdIe+75t1BwUJJGY7aF2alAnbZ5w9MM/OgwmG6/FwB1L+/rFl138xKd0JHvR+E55VEatwnZHZZwasMj+tL6dNXVo7XFCRFmshEM7wttMCFj8UwyH+7qXFPbC4dDgOZSJUVId/9hULWXkMyFOXqU3nTsGSCbPH1Si+LKjVAqxXAtP00GLKFClrc3w+rI/H/nq5MnU2qJrO1/ibFcYYLZCICp7l4fDy6+G0KdowsuqvPkcLkXeRZnJg8j4WPiuN0+p5uifSpiv9XL42R29RPioTNW0Crvpf6xJhqiFLDZbVcc1mTSRu0ixurxSZv2NVSVczWT0p3XN3pckOUwZ2dBJeTtiLVUvNTWhQwqch46uWQvpm/Xg5f/ZZm/fn12tOeV4WrJOSvyvVWw46G0eb0FX1h/uXPVInEEKcFgsvt/vYc7xHftC92GbsJLsR0sjq7eNfJHVZL/xGVQiyjK4wkPLJGM56fHlL5cb+VQxrXlGTTO5ldb3/6pIYyMqYeoYLQDjko6euULny/71kVqE1dWcCQ99/BGO2Qyvk5/O4B0/lcqLqrmaRnnrvzZaldDrs14CUCscA3v2/dntuEzfWhhHgAiprafdHaeY8+JsAy1113m0Ci8+uVxLRIuptGkeZAMskFRfHo2wb9F2dGwvlXLWUkJNoCScpC4KxvgAuiUHVUoqaOuxb5EviihN6vBhOcFueQL/zeESWewfiW1K7NqtIVBjW23/dv3dNkzebYY98WPQt2YJy1RM7K3o8HgQWgJnsPr6uK1g6EZHRCqObCWBwGS3LM4WgaE8BS8mO+WEWYNcd/3V/ynS5Mg/bhRLmKWHHYHuiXGU97anSrmf3iYRqspNF9fDv2fn+hfsr0yijlk4chVnvpEwJd7HpI7CmyKKfBViNPeKVlbihJemGothvv9ENqZum65EtmPKYnoi3WF7PW2oyh10ZsQlwfAPHsgPpMDD1Zc/FK7M2roAE3VDMj2nAUmMzAZaJ3Vip0AVit7CJiSpSq5pQfOK9cDVr7mK1PeV+1BHY1IcH32BLiPuGbpY6saUrE4OIVBzBlYkIMRX0cYMfFLYdDszNRTHCgiTK4bKQldT15rjfvTwe1l2DOsvQVqnUnBDHS8tHmi/+/Myd4s/ZhHu4f23Y64lszHoy60HyYda/aSvPDQ0y6k9ZGEr6l/ctLvTYelNGWF6R1DdVnlVGpd/sYcXR8VvsRhfbTMws54ygv52iPpDWSSQ9g3wraav5QkmX/xdYuplHRUdwjGqmViPOkhJ99+uxjdsMEURhfBOJ3Y3YOJURs2G8JuYSeta1sMYFBSzTidDCsWmpJ6crbuI80Nlwb7HEAHhgcaTYA8uasG6v11vFx9CVIJbXbElvJqfHg3dMvnS5FSMmJzBnOoLQx6q0rBiQvbdMjlmgyaWWkA1YhiwDll/iYH1r3kILvzFo3nLBddUMeY8HKlvt1semKeBJWAkAWshhFul8dYKKSz0bWanUvf76dYFkF+6hdTq8KjUtSZB9neA1DFimDrRkU6Ms0LM9wpR4hqrCbtnkOCNL4sYaEf41ZPmBfz7d6hCE0sDd71L//b4/JGS8IzdBJTLZl32hYtqm6z5uW/e7sv9pwNJQzntFv0sPzEzu1U2r/Fok4J7gi1jVAGVwdnTVBiytbs7jzPh3sHj506kYgWUpqqpz5FCRorQeoaCzch5Yf7BiAxueS5Nv8yGWlTKzr8yAJYZy1nRSZPHyC6aWwItol9JE34W8p1ngEpuAGTnIvCUu2jYLvM6SnJHuFhdg8V9DlQHL9hghKDT61TxK8Gyz+jeAt5xz9GTf7Ju+2xcV2cx5SBYfDp3q9ywqzUFYqy+ObxyBQmVVtHr4g6OcM2Gy+npkyuhYEkpeKlMRCOqKgc/FaKhFCyTbJq3NYo/9Ia1u/6da15SaEDRnpM2iHdS9PuwArDSMkgHRXwtOVuVEsBRYpuY9rsV269+n62ic0K04rFkGNQwSFZJjk7ETHVVFKj1VE9IfD+/FcFK6s9saPZvndcEYQ2PwybQC1UcSXPDWBoWFFmwvYn6Qa09CbquwpHAKrLv4mvu+ggzI7hKNS8yz+pb7RGVVHlRxlIJucFg5izdQmpMSO5uE5nEKLIr7TA536QxZroCnyqG8xbxgLNIMuzapqUuWU7O6KMDizlAMKKhjp2t1p6mhiLFHXL89PH2+XB6eNwWMQ6DEaz6PIxcoO+vaKtorD+dI8vBDkbQ5OtgeWTrclDzthpmRne3hnF6Uqb6gX1SNMbktKU6I3Fbrp5emZu01rZoCPrpNutBuJh9cBZYmNiO0DFnOR6q/5XsobtMVAz/S8vMdh1HwVVYE2g4R6Ju5MhOqcfJMhZlxqIhbvm5DuBsgy/BhSb8yX/JNn89E9Y8dADNY6gWVfhOWJmU94kp9YVXICkDTbYRgy3EVyEzKn10w9j+X0PEc/+ZfRLLCCs3QBB3CTa7EAg/ivzB+8KDiP7xyHlj/gC305l0mcUNKMdLM5pcMpQXkiC0rQKHI7eebNWIuPJ9Qk9Sem1HkpdIQJSs0lU8v2259+del44QUsDWXeVB7fWZTCRCr8wN+L3MQMVmrt30SgousxLnRGM6S59/5wped1IQbuUv+mWZf4nRYk0suvciglPlqtRZqZJoiJds1aLQnfTj3/sdcoUl5u4vjkeUiVD+oaCx6STnZ18y36wxEf26bruAMRSV6DK/kTrkZjZQTM+blBVmrPNTms1vfISh0okOr9/dSgnCjBetgqZCppN+1rJEp+5vNR8QsVlKyMuYyP9Tc9qfw1oA1zX7cSmq19vafKwzxgWcc8XhZgc8Zs0s3baXIRRutlSmTeWCxmyvIEvvOzlLKaiRbKU8rqWLBz/JD8HmHPdqjfZGjw19A4Il5InczapUhSYp9s12Dd7SCaPrh/AKNjJpznZoV47DJrqSrWQckU8ON2YGOhTr25oRYtoq5+X/cpSkLXH//GvC5/DNt8PovaWNrHUupgSvr+7wMI+mrr7YH1Et4xM3DmrVfJjjWljOheAPWeBiaLPZyyGInTOZUYg6x687hZpe3MS9GsufL3tG8THMMb2mCJjVGhQ21LONNKzxLnLB+PLmp9hTO0/5nXbo5K2W1KtFF+UqoeCiwJpuhteCQ0Ec6fhj538W7dGKUcKSHYn+612VyIRVYrBJE8f78dgGzAAGQ36KlNRXbWD8F1mjsJfaVz6/V3og1eynf15vDqk2GBpdMp0giYUZ3l8OuA7Qk5goraksBcXGNGIboKMEpadv8etgeHt/PT3ASYVraYjL6S+GQZKWyRG69/iJeuywwkFVzYIh7taw8Juzl5fb+uZQCn+Ph/HeM4LvGqrzKk03yOqmgMMj4enVeFwQWGhzd82nT7VebmIQNR78QdUFb7uTtleHK8DYiSxRMcO8CW3YalRn8q7i0FDorc5eR85Q0HdQQgFSmlQl08NBd8XVfiYOQaNMssn2bOv3YWg8xC1EU1JiBBX/rz5NrbZ1v6/S78vy8DRz/z/p88XM8l/WijnGkCDINFe0yeMgJHAgs+YCISw+/v/uxxKr0PgOWjyFMpNOrk2lSpYkm6R2hstYIrPZwAgm3pU0S9h1HoEJsbfr1xKEcsCEVcACB/CojGLpzHXWDE5TUQdd/6UiGz0INWSU2CFtkjBXh6taFlhWcVNhusfS4BMJgsgJtcVvZtXp5OCxNIsM4qf8Tfaqx0lAG466ICwF3PAvsoZT76z6LQ1I30aZ6wO7mggMfd6P2CF7JkmdvrKae0K4V/0TIE5J4ibyZCKzH+RBGYrLKPJMAntmmG4z3bOsw2yWmDG/Q4eUTCv7MIi+PEKtpLJMoTTIxg3Bt2lBFYIJDoEWvKHbXMRVNAGNRa6/HcMCa6akQkVwZuXSFOWO7jEvaAbUpsNw212x7OJygGuASTZ6lrQf2Jl0u0hRYEPxRuP5JxU9DJzQYJHX//PXd4CZbHsM4uNjtdoi9JQldmDIb396pkEm2E6GW9XbqDhiG+PV1Wh/7rkemqYI31JKHwatjvIb+UZrlVRmSywXpABbG03aDuzSubJvlb0/rYHSEozCbJyxZyM6DFaa62bLehhNUwZihKzjIVdfwgh2qbEh3s6W10XVayHvDKaI0Xh9XdhuwxGLN8khkNzlMC7ZrDD49TVZ7FX6lpfXimIxWxMU3D4lwmUZgMezqOwSvARHHcpL7aKqQEKTsoIokzjxQAYmkDHHQ5FPlDSbMkXtlUlo5WVG2mAKL+uDbYcGg0oDFBHcEFg+hu3jpSOka8vSohRQ2CH66U82sUBUjeLX1dXhom1CB5cMILlA2jVoxzVUkwmsEFhgeL79/hnBhum7CHUeC2A4n/KHaNfzCdFKeGuM5KG25/1g3Tx/Ph+3zY5MXq/VxyDPcWkb3eF2EaTmaGRUJ4EW3AT2pyPvT8wl2BYVSDIF3gJ2f1Qu2213jV76NWg+eAuwSQWbgNFAAUaKDxouARe6667Mky0EPzjfH6+X7bVPkOYyoWQke4gamaxs9cY1fGagkKAWw6G0WfcutahYiJkVESWDy/o2C6SvCulVXQu74VIhetUGLPW3S4i+vu72inBiXj0WU8JkSmasg4FPIiVJw45Cgx/w3Ye4uGkIWtTmwyq3bLeX1XKeWlNqNAcsXZ9i8H4FFi6Waeqr2gqgIFkunpYYWVad9FzpdGFFX0ABtsh54TKndZm4j9GrWEs2tSrLMdpf344YD36YQgm8jkKAW7CljM0GZzZMrZeEl1xw+/u76E1r+bbbra1BvCtTy8277/AJOzunlsNvBjHVHEBmOhx2XjoAud/583fUZwIafbiDeqPJlVDo/9js0631Goi7eOOo2NgTJONo6I+EDXso/XnK/PDgITVYXgHJRwGQVzfbaNAj+5INZN5MVAvcIWpuPh1NP9WaMwBJbEyLnTE0ljVtN42VUl3wqMtnP4ZSrSecw8i+A1YTprb2f7jUmDsLTx0GXyclk3lgn5QsrNQAPS8gnpEIqVbSII2p8jDjSUUtOZvr2h8RFQZ1r7HXjV5DMuo2w4QksF67rFw5YrmWl8y4s8oC8LspXVCRAXKHFFL7TSA3ybCVbCiKwMmBZtUWANS/bQHhXog3XP59z0KMkwVAfMzMlp7whR8QUnu/U5vK6eMH8/Pi6A1OSXPoSXSC4o4oF0NVWZj1/QcXlcr0eDk+np/MZtgzQ6o9nigQlOFBtanOm73rZwn7oO6V72sSR8Yrc07jgIIKg3/rWqh9HhFH+sSXZmsyGCMEfgBZTiXS7hRrkTMYfjUfqk8xpacyiCB9zaYzFT138PDQLv1gVbaoybPOUdiUnBdOXvTm9STARJbjfC5K27OzlJmG+rtqeQGqxvIQpoX42XknbBkBlJRwgwRZFmyC/Cbm0jA0rDYNEhAf/6lAfareJE8V1Oo+zVX4rb8e+qC5cMGCNzEaZzjSfQMTfBAtewj37aSXKy0WiwvRePtvLHNPgWerj0xw33wMWJUlexdJSNSC1KRgAo641o3GyC6SCdEPhZc7vdP2IDVyLpFUa18W2K1ZFnNIZcfKO7ZS0RJHi8Pp2OmDi6fEJunlvr2+/v65H1vhRxOy6ni3GtmaFP2MQIeoQqw2O0oUSRinShfhCnotjsZqTcTsu42bzmdYqZKG9RKwrw1vsfMH91v31egKrngMjzpM49Sej9vnNrf5QXDHGItEn+/idmdYge/fhGloNcYrAM8qpoAL46DQ6ogrn0mdFjmKd6tmb4gHZU7MZ7J02BX1iqw5CnhZeUSZEdVsnqFDDFZZ8SNt1X4tZlqdPvKJwbIWFVFR6q4gsTQSCvJVk1TbkehqbAcvCbEGCK/CD3cCGfcMmOdV/0FOJbDe7rfqfSLOjxGzIcmQ2NYDSRuA0NjN9XS8U1qXtD4jLhcZTykiQ53W/HPXzbf+wz/WXCC0ThDU5RA0kPEcGhiCaNYl6AOAScHIy9rkLuKXL63W72yHmWh/BpuxXOYz9ijTSvIpEq7Hts34/RJP9fu4LaV7H5TgT4Zb9Um0WUKbbZt01k4E2Sc81jSWdscfE6TqvdaDcuD0TUaWJYtyILTerwag6f3krZiadwuJcPMRodkqk0BRpAPjw8tt6mRutgbQb2O6AEDJxHeV3oHPfzqyINfbqTaxMSYUomeByZqjy1AiwQlZQVnmhNUQ1WoFbCUKYEVimmKXA+nvQJH9QNtm4JsY7f2uHTZbZq1o1GlDDgYhgCW6J9CTTvpBEpv9dSeRlcgmOshv+rORIXveoGFhDUNpQxOKtxlEzJrpKhFYa45JLmzywfJpstZmUI8frtsiiQN00nmRgC1kZe6uMhUCjp2fCwzcMWTEc0S7q2cVL4mQPkg6K4/tdxkmhst6tyK6wrrVWkg1ADAlDPEPeknmORpqw/S0XfLFEn0BY6v4m8IzQAT28/8Ykc20aNiYGYJRXa+uazZoiS9iRdE75iXGfCVRx8DcJoEdLs1htMLvoZu61+KACtC2ZmTNVmzPyps6Y/SEK/+77MtbudBsvNTOrYoSH/LfIWgY8LVqxMpKqzTWlnc3sU4YDZuBNKkWB9Yeg17X5OFxd1E+OeO1qDyyGZQKs9uGhDXR/Bp1PkixsxYa9GMBozOnJlXKzOnd8KihRiOc7W2eaRYe6Yst0ZeUu+fQV/m52bHW5Dun9Gvy4J425GCONY53htYzPvGR1ggpaMi4KBO8zAItqX3XNCYM9rFUiw4xAG8SCDnswlKEo0HQv177fdHVg1Yep5uIstt6cT4mUVIJLzE9vI9UVP4l2bu/EClgOHTfr55fX83WoU8t7+Zpu28SN0ionMpcGLObPsksgfdorsBzPKuOaiZSC8as+UXF1ymTzBZUsexcMKfeyauKnLl0CIZbK5+NaT2suuuUporfXNnlbZxySbVY1aJh5jJyEmq907vL0UkiRBnOJ+39I4KVtVFnXQqbHCFjQ6Fxg4LuZfhxQM+MpsObp+gHFbJopmizyj0JbL+ZQ6hNz84nSHAJCpRAmiuDIO3ibu41Me4c68GXdB9Hn8eVd0UfQGjLu4+3cHMi4KZSlO/ZtWvDzLGCjyaKUWS12lU2yTZ1KoR4U9BI9yBYGXh4/0RSoMSS7fX05HM6fvwGs9bqNTHxUR+I0W6zipUtJ5RSs/yZJGQ7bWomXNdEvNzklvOIAwtrrhjYAVYhWF3ONSii3Wnd0YuI8PLCIBgYyqx3jTOPt02SVuM0yC8lM2CKKuVKwjQxTVLJJWsl2Ou+ObzLSSsO/6/iR3CJHvrKKPcfqeuT8CRC1ariTpKckZbPPWFmOyKygQAHPf8FK1+rcztwQPP07G1DrYGzn/Hee4slteshtJvnvLkLmGwVMPpn5ooVU5qnqPlr4Y0+0F+c0xqWZLN9rp1zMvuA95mY1sobHQohzquqAb8t9dKv+3FyiWXbeNdVA7LOaNUTLI6MA5oni8aqyy/FcbrLhOiyEZG2ONkUklWxRFCjb5nh6/fn4+Lh/QUHiMa9w473ILauNbDmGmm65c1QvaCmsZ5eVarzlITDAKbIidAfoViKeGMM98s1w6srMDBZmoUdkuWoPgUDwxV3guR28fGWxZCCewAJ3zw1MF233nQOWNq4LYM8KcqJaZpvW4QJWc310SZGdSsbhI0Ay99ANTUINhBbWvdte1jDxxWZzRKBVN11R2uwJr0tUrC/v7Sjy9wcRKW0uAqyJidLfDMU4Jg7SBGxhR0MWyrRlsoiXzEz6MDAmlLvo8rWjXPryn0wX4vtKikJcTQ9uk8f415lTYylaaMdLRNqU1FDUd9hGdnkd0euJYLPZ6SUO+CAF5KxEc0dpZskioU5HXEaQ6+VAjZyvEAY4CgrO78sHd948nl+7jOkloUWQqppzWpDGrY+O1zqXjr74b7ftxe0KGgfp/D6bNnsCVbZMaaFJuh62b8e6CkneS5ehOt9xh6JeNvGEOKRJkYW3IpTgtj4WJelGJe78+vdlXy2XrMFqCGiSHYs9PgizMwMWDJapSs2OiTRM+Cempo5vadsT+8oe17gGiB0oJ5J3z1/nfmiGzfr8/vCv8ykPmd0SWaIBEh++PvZqcSVrlypE9sr1l9ZfcCnh9DBXZqjQabeIq+D9gicVxVz3TqnMP1P8QOOop0cWcOKlvoMCjwWVEuxvuYqKPmHeBQs9s2NIHN2qAee39VUIUC3c7/Mn9NMUBwFcHoHF/zMnBVpoDHYfyu9l3nCTgk4tm1BFmCAhocz/x+e/IEpP3TkhE3gxoTyPNAfyNllatDYcZXXLOLJA0Yv/eQPDiK/p61gX4UnchzHuy9tpTfIGx/v5dE2XFdtFd4vLyXqd3Y2jDdxlGRFZ4eoRuyTf+qIiq8NrMagvvA4hYlLfLeYF1twpzuYKQV5ON+LPe8J6dJfhiS8jIouCEZ+fn+fD4Xp5gLTgO2YTZRxRjlsCq//1tU21KekqW/NVviTLz83IKYTsV8bvhqtxuykdfqhhjm1VwZNPlJ/zdEG/4z46fJutipgAS72rV/OirY5mbhbVr265Ub9PvHtgBfW5RQdjcWN/qrqMrCQrsCj/Wx/WqVXw0iyjs1u4zch0mOWxiEVfsm1qKXJYbC0ZTlomeDLvcXyfOhRacZ8FWOIqU5Q415w75YfyofBfxDhqzchUlpcmLzTdSWrAolWMMz7sCPVUx4k1//7199djTzGtka+ltD07DFkSiYXlQkMz9Z8lVLRZyEqay+f9D+eaaZ+Vu22Lg+Nv0DRMhJxuihjTguQ8EVKKDIto/C5+hK4Nxop8agKLhdHt1y954J5PO/DeLqdDX0Q2ai860+Xm421lVW3RfaIsI/g6fEr8vefhpgUMXlYttT4MMsmbpdujI8bzbqbl6i0ieI1a9W4ZvcJbLIdNFddzfN4ypKaSqdHbGio1VVZAsyI9EoYMIQmd6zQAlPx4didDaEN2POl2HWT3cUqJY+0OWZQT5LxiJfraKw2weRAbKsLMSIUX8B2Lm1dJtBA6nDFV4vz1miyZYakGkak7SrmWLy/YLOGJjGwyTR01c2TzOwX9NxMjI5vbgxm/Ap7Pb4emNCI6kypHLLTDImtRy1FtX1ufGoJZTk43ysOb1xemxLaSbbRY9eULI+BunNFpCUpBIFGLpTAmsJTZkRZNTfccMvaNYcf7p6f14f3nEe2yFtnh8fB2lhqRiuYiK6wP95cstAs6X9xJkLOfMdb6L2BNyyh2GCykC3QzN6V3bTVRi4HEkeNa6NWaBd1NNpJ6c/gPa2S75q6ke6QVuEBIH35dqqW8CrNYdDO7Y4YMVoPbyewc/jaRzZ18IBLsQxnAksIDrYI9R6YNtkNy0+Zb6q3rdbBngNcnEmD9/vXwr0PX9JTjs2tH2xB3F4rgwS/60F3+YyGbr819xHU6N1wxDrNalyfdsY/I6DpWWnyZpBq3y60p8/UmZt1OUaE08Kl8nMKCaudCT8axoCHNt20oXaOyPr7aelKtNugbk1n2+xre+rKNRxZEveKFaPbrJXZFyrvFCokZXjCOOdcgezhbfL0/yO4yPpbD8WlXSKqAcxde3tuvdZFqiWW2xPUgjSaRWNiAZUAyjPGf6VcEFpEe3twRWBMmvW5XKA9NpZ1iiZ5pCQ1YFod6ONicsiFLw2iJcO2Dm/OU6qwBC8jtv1a3bi3SRNcXt2wu759Che2r5/rJZQtBdRUKs8YyI2yYrOF9WG2/Px6bhHUJ9xDo7Y3ivH+BNvHPz9OuFwFZAxb9ZPt06HtVwbv1w3JqFWYzfnYwpCRrdWOgHlceWTCKJmMCbMAdjrPXPHsOUJbaBdXDmKZ22JVGQDu0bA8IszoKs2OX8H8xezAcACwJsUxdwxUcmn8pUcN6Oo4ngyArJPdUb5Al3zD+CXEVVWxCarE5kCm8ZL+h5sOSD1AONdM8Buq0UtMcnr92remPLgOJcaNmqUWOKbCmFsvA5SMk6qRElKwdp39MnIjLFk8tQxwBbmAfxsquaoD0ALAMmIasRaX7Ynmn/2xItFzbZnokq9v+hHfeYHlg4W9ZfB03p/XrkaKt+arkHykvjlYJ6NLKz2mL1HkTl9y54kYVrQUeIkj9vqcvPK/7XKfOtMC8wEjs19vzc86iiFTqLHuQmDoI4ARX+8pyYnXqij2PLG3CEMvksgwl5cOtHuzr3dwNhFjC6hOeHW+bI72qUQ0+RokWi9ipdv+YUeWIuUWnOwOl7j4CC6/ZHJzSosYbfzaQlgVspF1v4RcQh2gUsdgnHCDTQBb6Bjw2gcWlGLWUt/C/JVV0u9369PkvUf8kvZxmngpZuW18GoHlGS8joMZqwd+Ig0DGum2mR8Ic7XPPww4uX5e0wOy7yR0HLTo2+Q2vgs/Dwz4961BiHFj4IKgAw0lDA/dPdj91z9EfjG1i874Ca7Y7cPCRP4IG3OR9z1lflrbERzMAIx7IrgeBpXvKgSrZKjwunJwTV3unev122BWILkQCl4WiMDt93L/tcluaOemxieJauEyeeh0vU2MldsFYzd5kAfnKUsTQRdfUgMOkAOYGu+9gHkxVgd+zBsNEpJThOKXek5Ls+qrODl3MrJxbHloPrJsRWPRlQ7Zk59u0p5lSKdX5VLJY6Cyi4KrME8SmpVT/dC8wflGDjk5FBUBHZZyG1K/kRE+LRjWqES9rGnj0OkSnmB3kwtzvFFiyI2063DYVRQQNIjJg+aWUlLzSZkK8Rv4rQW+QOtL9hOaP300ni4moQUvif5vW4qfEmTj+qZ0PaziyfO2EpIHAmhosuWeLQKLNFtt+Pl/hkCki4oBzx20MOl4GDkOxve5LDnIHpKzZj9BeUXWcO3Z5/HoDc74qQW9jlTXpkWbfP0BpR6QXvF6gG4+s8uK8i3xzX7EyCipZXUQNq1gmzLttu7wIfcHeScXqqhSkHcy5TFRgdIjGA6PgyCrLWZ9IExTDz0VZykz3nvkG62ruBXVchsz3PBJZKwUdp9slNlw/L3TxqSXYLBY28IFcWDUKZfAr5fei7A5+VlzJtS7Z4M+Kuk7a/HhuxCGHmHhV9lCYLWxx7bTWxNKcMxo+M9TAm2RmiOW7Zb06ZwRcifmlM+xaYwSPq7vGRfHEhOLTXoGHMOcclcvOw2YxDFn8cZamq2NktVzDlpNT1N1+FGa8PHxt85oS5zNRT7X1S3FeI3dmvt9sj/Jwwbjrd81gRVW+/kbc/kuR9X5uqDXIlV2X03FY9ee+WhgH3k7b3et5/3hZA1eWiDm1Tbf824m26BiVinoFZdxia7ZUBzwMXA2DI0IIhbUfb8RQH5ASn8wkdse8rdIQPqk4dTVldFHKj2UNk5km49DoFoKwluIK2CKCLK1ghv1R0kL/vrCXecwrE4221AvTwrsV9IWymUAXS3InS0aO7HpHY1bGJRn/fIGUIn0SDvjep3GTFVyCK09uNInkRRHc2Bi2GSwWQuUz42Rz5k4L9HY5UjJVvCEOHLBIMCKI5HBaUGrzPa7+qcgyBivRs6y34d1k1yX/2IbY5vysTOt6inMnVVmRDRXYnlImLgxAUanCePW6WIo6M4CvPUAb5Dx//Hxxw64d34+7ftig/1qJLWxiMiS9KpkZbJ5X9Paxlhq2T8TwPzjMZLlup5JrFMaIUwCK4xZdcLUkikGvG0QFzIxEAj+2oI8wX1VrdIe3HrFkCWAlx4OMA8UFpZiEeGCiKQpDkSGbVRVNM7+lHlfkx5PcaaNpxxrV6jhgqSYSm+Bne1zjINtUosjkqQ3MS+O8uz5eB+giYN4JuOKRFgVX/dge5SlnRnV7FFXTxiErlcsuledIrxnrpXdOIIjCSMMuryiGwS05lvw6ay7oHYMs/6pyOIdpBEp3EFhOcyPcisaVBxbfXMaWXZAdVcVx1xctGr0IQKTCbdrY4izi1W5I2mui4mjaRHJj0cUJTYwN9r183v/6+kBn54cC95UWyWXHv8S/epZGJFKDtfp1XlkGZHuq7tzSMocWV/WyOj/nLWRLDpxtlhDmPmbQmrhKt+W5gJmgcy9hTe+ovn5eupz8Mu4q3GRw2yQO6+parfjYJ+NTI43SkEVkEx8WB4kkor1T3NorB5t9yGHfWDfvElceWfSFbVfLOPCtVNxlj5eGEIfL83b7QlUIdqeoIFgJ09Qs/H9NYo4NncmuAspkDTMUMifRAxkN+va8HJvd4zaP0QZIiG0a3fGijbO6EPbzZQPj10zYW1NgjcjC7Axd4Wiw9EGjtVduM3xey7HpoemR1eV5m1RSeIlXBdKYbNXAlkXxsQ0k1HFKPtIqATtg11GY6/H98nw5P77+/FyHFgG2DscCmVLAsstkpyyhe/n+OdTKxnSUcy8P5E2WW2mikNFBZDGzJG+1UaCzx3pI6qakema30w1B4pVEgeH79/3PO6gSeYa88AB6f0GdXs2BWBJ3u9xppmy9TapBp+BNl+TFlZMJVR28qGUFRGNB+sBphVc2Da33FDu49arjPH8Gd3lzeP+4/31tSKbMiv0mkXiIKPYhog+K/f3j7/7PYZ+i1QyuUGNN29PmeZ63nDVcP79hMWiz58ZN5w19F/2PFhth3MyBdoTwuLPbTz+NW5aRxsQLJjH+XFSqkuVZA9YianeXNYQUwdRsTXkbgNo9dmAis9sL5lC8t+3hUofQJmK6GjhVnbSrZofk+em4RucCPpW7Iw1Ytn/UXKABi/b79LEpg7/7nU1uN63+4oFlGxp08S+vuqTOirMI9lUnEXhY0mbdlSBpZUWk3l9bQFsmxREy32/vb1skZvvu0ORND38Y2LorS3UBMQ0FlKBGjo2AAg+SVn1r26JjiJ3BQKqAqtJHjK3gnVGanXagMKoetzwXOBaoPmR1XXSvjB4gcdp3x4ZNRtG4ntTzfNFTGcYu6p5kvMs8uLF1dTwY9MlFUWDBTGfD6dyhEe7lcm5M6Y+Rgvk+EBymrnAkrI5yZBOTZZtV7sqZy44N/ZoyuK6sSOXCYjXNoDqTd1pIqLhLi4fIyOe1LlDl6kyZ952H+4yLMto8h2sqy2y37aB2M6yHhGG+6NJWCxdh2aHvj5T9X5dwZpQ5Kw9NSDWGNzXtUldZkAlvO+zdYMQiWYU07i7o9jovym4nZcEpUdBwLLlDo11dD8cjyM7d0D1ut6KsGbiKK12hAcskl+ecqaIdoSVRvXZAzShg5uvKUGsSnuvj1Wht+nX1espTYVtbx8B0nGNqCuy+v3HlN82wKmrGfOVybjffPWjWrjOcOUT5UB1UzuSGAcfY6cThfAp7FVAxvD6ftq86KW9rDHShxrgh/S8jsAxXvh7rhR98lOW9MAvvU0lzXd8k9t7ENhHj9fscKeBs1P+wRrxciShkwsKkP+IAkNzWPJS1nwWI4/iKRF+sOGV9ZlWHhCRoCVQs8MDyy2VB7N4+1CgeTYDFB92UpiUUtWPUrZZsQUvkfmI57mW5oXXtXfnVzIXU6fDzAisZdYdqK4QGjs0K2ernYXt+OR0pBkwH4YHlldIALR4UENlUQaAVbJmJKmYacsmWVIRQgRsC5h8TV45UaHSRzftTS0/oOqjBTBfSlpQxGw6PcAtZ22YJd/HbEKK3n1481nyvn4K0nJQc4b6/sbkyjSR40/QWqlzsUAzd9fPn9/NKGQK2PcYnzqp15IBFnBmuJlME/wksxRFK/nfWfByBZdUW3ezHfUb77bZvExXgsBTICAdS9UZNItCoI5pLBLKsazxbzAtlRJDfCeLjDiUbyoIXbI9VVEGVmS2j8vqy0m37dcDLjZbJ1+R0fe9/fwOHEyK0ErmxA7OXayFsAAWVX4nsWbIz4IYQV73AOIaL3wzorPRvvz6//nWl6LtbryiLI9RZ8aDv4gGu6XbHBTrGLAzZQTKLIHp6TGocZZbosoMsfintt93buRZgmcFKo5CyB2lKpXxUHfIsofFKcHAnp8rT6FIif2gCDP9laoKmca2iJ8VNoNA2/s0ch50CVeM23ANEgtDzpoUgr8n+W3iqY8QE1rQ3M63HTmV89Ffj2iCg+cNEwtgcz51ChmXfJa42VeMPm9hRUNSBaDlGHtO2i43Cmyo7kGx9IlO13YwSWHX7WLhIaFrUccnCo49EBVymKRU+/9QwJtZTdxx835i780GWxuR2mP82L6Q7lc+wfM7Z+nmBMe7nz8SVUAQJr7LkWp28aEFORIXkNzJYyQnNQ3lijTxti9txbvOYsS3DgaIy60w4xSbtYl3aasgyg8ebpzz+Ih92ryjGBqYNwpIIp+8jCrMwwS2TFSfPKy3Kr4pWHCI9otx+flx/cdSe8538VSGtIr9J56PoLi01s1f9FEuIL36+P57O54f7j8uhz1J7kCz0YG6rDUaja/iZp/88pmoGDlh3DJItePcdbG15MyTmpsUOofv3fROOqkQj3475VNkdUxXMXqa68JU5Ig74M44rulCx3ZFOHuixmHk6vuHEurhB9+uQBCYoORXAY1BpwPIUG15XT8BTg+Xojmj2pKscgat1ysY1E26WU04qbQvJSJYofsOYDplUveEanl8OLGtREsY2xeBQI82gTpMEVoERmTEao1QJJtxSJcSKgZunsbqhGwuYPY1N25hB1nXb82uhjckUvNK2XyWibYqDCjsoE2YwWQnP7HBlQAIsovSktAR7zA1gtoXH0l+vGbq6WenJ8sdpCYQ8geKVzrs83//CVqD19fn+YbtvuQlcl5cZsqzToSvT/XDrf9os+9pq/640O1/qxNJ0yFFbMtQOQWbU7y675vj6tS1nU2BZanFH1eF9je4GL3IViIZ8Fs0lRWQk77djszmfaIF5rkpSEi6M+xgM1Mnje15i1E8l/DUwkqVSGpxo4dOI1mL2cZhioOBKv8P/Y6iHWoplnVPCmVQwnNJcvMkrVOSovLPBR4kpIvD5vF5vGxoInyv5Ax9MKWlWjomLzfMXVlAWCeVq1JZxnJAvrRt8FVmEsqd0mc0K+/PleR9TcJFr4qkihSdOavBokQneAHeMOUEv6ImiZV2/PeZJqHG2uTjWZs1IsSDiCvvaV1sONxuuurE1zjaGFsrK4Rqd3H/d/35Z900PriF6SGXKcRxomPl9UbreUlnI6tm8EvF/A0sOc3uIlNHaGltJuoZXF+QtQaE8QRV3aI7HBgp/XgZ5dNiiDdvloSimcEZoRr3llo6QD8utDlf6kCZJQhXAkBsSWLqljEvn8qJic8o47eg4n5qoTgMKo5A6itS4WHzca8s1jlJaKG9vXHYw9kL1jBihKml4PyRlxUEB6CRxC1S+e39BCp5x8prgd0+H9S3lobdRNM42rq6vX/e/IUMKYSfJIh0ZNcpSZUBYkKjNRv1f66Ym598/a8zIHdGPED65Z0EqQ4zMLZDdhk2HBXYPX1//+vx96ofC9AO1aPuHcfcXX3aycIuE2uRmn+nWiOmeF8hhoACc9ee3X5euH1ZDB2WNpw3JPWFVwTmZ4KwNQagfULENr0fiAKUGbCRwacQSLvhMeyIYAyzLeWMIHbFD2ha4xjGe65LIkk/i1ZkX9XZQovsCORJVFMBbGJgiMofXAFx5rbyFURuwWqjNRr8UU1BjN+4OlKh8XS3Zb5skFBZMCRjMBDhbPVGS5TXwigUm9LEIrYE6KdU5rRt9Sw7Wr0BvPWYt6r8DgbU/PG33Wa6iCuZf9cfNGMzEj+vOa7iwBA/Dv34/DpuCkaMuTNUUEQParlDi9Ijsdexvh5uf+4fLOpctd5KV6eYhIHrOIU42wuuMPBpUEiGB9/j5ftqu15u2ws8LhoWOubSHlE6YfCvXVKM8wU3Rx8qrnbuit8hO1WSGH5+++xzHvmtWbdaBeBdKqVIny9XLWtXMhyZ+s4IxVf/huPd2s/C3GOEu/dCi3kEmCzLlfFi3SYo+VtImlD9L4jqmRTL+vQqd5nkR6J/NKBLDdYxBsgmFZRpYHcPrE91hETsydA0PJi1Zfs+Y3aRwtA1lMg1XhiwXSjmigyMp/8mdOHnWWpC2fRYzG8RNZz5zdmkvQSYCN14vCIpLh/PAXgLSegDr2m+yNluVgUkSjnuRNCXWxXECDYlYEliV3cO/tqRx6fJpZcg2rKhY+OPLmk4GUEL/ajjfPxzBJ4oMVQ6vIiEZEBhZg6C9KFBzaNZd99RkkGHs15DaaWUplGg+sQyLEq3fgKiOWlTVk5tN18iMXrR0jV4R+OuPx6HIn3YZcLvq1+wdhQX0lVLlPKazUavdl2N9oAps+XalPzywsGww2y8sKnY9NVRSwiIp1uccXFqR9KW4RxmlMrdQkgAiYQD+t+QI79yREENV8wyKXcgxcRke9sxFJU8lFX5ET3jMl02IWURmpEowRBJyj50wjbPsB6eUGEGMwgT9LK9mLQMl1lqax9IaHFkff/PAMuYNIVDt3z53DNVDxB5xjult/NonrBlqIGsu1/4KYWXOhseCImr18e3hKLUgMQ5MuuJNpUJsiiUDlreUvO95t3v46tjq1usoLpJzmeoPkbfVWQvyX10xZ81hujISAotmt4VwFNJWIfsvGWNYQH8n1R0e1nW86c9IQ9qQ9Fi9czQd2JX0uK+TocO9zpv1qSNTDj++XyFlj4jowHA4LkeZDi16jE0Pi6aYE3UdZROMPaijcdEChuiwruSMg1QSFDAg1elHRBl1/EDq0xaa7uOhfodtTNwPIalPVHkViPulomCaFCyh0NtPgYXD6TiIGnxD2b/prh1zdvqTBKHdoymwbm4JHv/pqIZmApXtQia1TJgPvyjaPVdQCIkoTayzkgYaRqvYoYESQqa5EmGlqciwre5y9QOpEbMGFpZth8oqZbl573T5Z0zZplH5b2qx6KXJhIHNONy/FpojeOlqY2/P6GYTtP4jHchFuL3q6xgQK7Ia7cPTE+KyJQP8gjqVtoEZEJUoUFfcFvnNK0YOXrucRDiKbwQ42OXermv48KRqMXN9+N3FAlE0Kc+7asm/TLNFu2X1HcGVkJbdZKYc1jHRw6bhKK7SUx3WiCT6h7CYSXM4VGSDioiBSBe3NNWT6qDjoTOxtoKfFSmWq33JWUVaHasdmRoEk6BAN4fSgttV5D2arkyctRlyQkOJLd2y2qkbaXX6IRZhCUr+/oe/TnFIFKpxiYbl7birZZQqcCmF0M6S5tpxn7WYiCQ/bTipVWWcDnG1timhwl7cthBR1Sxp13kVF+drFvIGARLcyZInC/lZjyz/FfnQKYUVq6T7+Rmc0zVgwXoZAaBuS8qSUXE4SpE8ZtS0467JGHkk0iqmsXDemySykIRFW/HDgYxkYMjyZrV5/Ph5fpIyImBIDYZ2k9fFMcuOCQxFCFXV9z1p0NQnrnU0QZ15Eruut2q0mf6FZzHwcHmfvzp3LOg3qhpisTEbJFEab19PscQKgW1eDhJTAdGkxcIjBwUezCR1y1e0GmKZFXRTovq24nnjXWbiXAjFTJDNCHz2ajKKMpdnZMzjnMCG1aicxJaHiXrCMdgXC+Yli5exjgDy4kyrY1YEYQmrAPmwzXopKEUVClOZiDfUrtcwGiwfLWleaQvfonK4PmIeo0RgSsV3PvpgB6VZToLsKPVoyNI6W5qA7c1C4dP7OUutUSfWfy4QEb1gmUWkEyOwuNchp2Ok+hioJSQyr3tEX8O6ljEVIzrJANySpe2igMXC78e3RwjkDWL+soJiNwk8zxG4SinbVHRWCVrIBF2bUQuByI5kbkJLpUa1t8P3bixEGGU3UNjM+pe+CmxzuxcFjvt/XfRtAnY0BFjhPsHXC0uH/YCf5eBeqENGSVabZAkMagHJWUrb7bjZzm0YC+G1FPZLrfVasY9ASEiYcRRFHuMrGPXRyZdotcHEL3RDibdvNv8uOgLY32N5vvNqTIitDQy/soI/QPpbCBcY96PtEymlV5XuCTBgOf1Bvy6HJ6wNh3L4uNSib3Y5SCmK7iaN4iHWJMIy2vELCgNumkqk0TePYIvSYFiQJXuYNDcMk5Tua0Hme8gDaJJV3yJgmiFZL7puD5LvXuZ75AjYSoBrLhJ5TsIb8oCP6+Pj9opQC5t/OHImaoLkm8fUR8j3MZ4hS2eZqxbC/eKs+q032BNgKY3BIUuleK2xTdGy5vr1RcUAzra6CgcynOHyXEfsMBhbVGRfmwYfJwrnqljqKv4jF9LUHUkRLvqqhDSIMPjGerdNoL9H1tiyBXi3VtX2zQjuihBgjXQ2a7FrPcuXme0mG07wZ39zy99M88SyRYZZC5b/FQZqbfSs6biLQ4fSu3Kss7zknQ6TLgsltIy12WBZkeagAueJ0RNqUbz99ZZzxKftEQZHgoUZuM2tY33icC7fakxpt44l/aqKdbcaejy5xtDhVXfDKPxTHgv8HHs7SU1gEVZZ1qKeSR7u4fH1LU9INyEIgyUiPrSmGO3Js3uzILL6zfq4ux4b8DaYpERcrpRxeIS14QEPhQ0qGLsNTU6dI/p/wPpP6pUyj9wiLk7FF+vXTVvndWA5CFWZwqzfvualiPBFwlBT/bb99xpvZRJlen/ssOVfnlo5y/oKIeethUm83eNy0tl37jaE8hWUKm7PsdFKbiOZRXFVW2+x/A6R/8rb5Uv+Zm1SRSGBJXmD6u6zsKZPlFpG6fLz7lLZmU1f3j9yl8MUnZW6Y9OMG/kxvTJJt3GIR/a0ZjccsAivb9A4rJbwo5vXplKJ8kWExDmLjAjoG8E2D1lchG/Od8GeG6qxcf2bqJqhIGAsiiqmtZI4PE2ymq0dkQPM2rotSIFYAlkdplKaFg9+GaYqndtAMw6PhogfYhJa6vd9v4LATQPvGfMJ4K4SScwo5JvQkGiIzBol+U9pEjLOV21PS5JGxuhosuAbNC6ynTeYsUE+TV4IBa+W9HsBUyLksa9dwndOpNJuiUZ4uO9Cm1g2G+UDBjNY+DkD1hq908XfXYRlCaqJjq9PcwOWzVJJdGUIVdBH8dwU1i2t9aUCvjPvklks+0sEJc3gGLsbsGwfAV1wYvNDM5hnfQZ0z2yR1CWusUxBEVmF6FDEFJzliFdNcoJ90nGvrhEyLP5nDkft0gpNbHqe+rgjmZHpC3ETOlKIItqpnQbl9QoSDIGVJnm3KdokYeSj47sLmaMTKs8SLyLz2VVBAu9+2Awr1HGHfdMI75Lbyg6/7rHXJgHcEjY6O+YEacXEnSbjZi5cggI7bDbbPm/akGY5zZqIHjYoy5p8KJsXUTqi2B48ZWWYjdMu/wssW1YquNKCoOR2SQ6gaumJcm1LaYNm3eEkS1DKlDtTHLCS3WVLYJnKJ2+wb61oV4EOUw15dkkqGJ2JHu9Yk/3D/jKbTtpIX8+HtEY9pTy/3xrteWtuay5+aDSWbsciyFuuomrDmaRAjluclwX5YZT6rZEzsV+F9CfnepcSoRBvpma/pZQJk55cd7IVyJBXk6VX15ClX0mgJRSiWXqMA8Um4u0OvKCFbjFmX0efUKf8Y44wSi699J4JrGLYsdNYwnQOPTvf3BWlWV2bauAexgUABUg1u/V6t9vu2Mrcr3C2+Fb3+fMGW7Tv+t31iuEecpOSTGpqlIwTTxoWA6hm3XZYkYoBjklfaJKRtRQ0cvQuAsvUpKJVN+xhTkaT9cdpkGVD/KI3p1GN1GsRmWaZ9Vf4cKTwycxQ8vW5kwK0fLRbV/zM4hwFCNef0AKRo0TiX2X3mX+OX7NQ5SB42KisI+lkh9QIVa7uMQXW35VfQ4vlY3dd8GC4msoJ2aECn9QUMb8pb0xgGS7FXSVDLgXA7FCwJJSAV20lIOBHOU5ChQV1E4/wOqsiCQySmgwVpwXlqvZ2Soy59B4syj41jcMFgnHCUlmmMqWR5al4mqm8W5q9NqrpRRpy1hz6VRvjuhf5+v3Sb/qM0zkcvhMlH/J5uqFopei+Pb8/X55fjwOaToUo5A7n0/Z0ul5+Pt8QmHMogXcyj7VEBGCRIIPyPSQ7z11DM8eHp17KcpdeN9rLQWKLH8u9Dbv357c2GBltU8qMGSy6DacKFIltgtOLF36Z4zxAXNQyf308c6Fhwo6R4Y6ZYhklW0rO0NrYKlZlhkgV3RDFnyawnpDKWEvmH1MhMAKr2jW3NxbVu63aDlYKEQJLtn1bhKWux6029QUv/kfHIudh5Bg56EInFksNJbdNthnXcRy+XkE/eunrMJUnFsGAp39GIYvaSZIfCrg1IqvKEjIWSdK0DJRvoRZUtqzYFtOkh49V6x6Uvc7CjQoSyb6uZn/wOirSRFo9DciGGMqWMSLxBr3AZrMBuf3wL4xgfrxdwQxDSfy4x93gvwO+SOAuV5v16fL99euybfgHRc09ITto7WM19c9lxx2AeF3Krzd5Ih+RwTs76y0+Pbb0C4WhKvd7Fl3jvmOUMMop3grtUxkliwQ+9hpp6V2fKTUT42o+gSC9lxZJuPMhXh/D2UQltgTW2IN6B7Ue5yCLAgLriS5CPDyrHPhXto9pC1rlhRaPqZENBMziLWIWA5aZLPYqBVh3VbZdiJsz8+KBZeK7BBZcoRu9VTvHO0jkeXbIlMNCWM/UWmsk9r/AsvKKDN9i8uXrcs3bUpwfnjIry6l2eUmbAQWkvBKjw7/CL/SRVmipopofWFfl8qKx+vAdZ6qSmdMHMsJk2e+Fm2dQkx34HSjHJQsIJd81Ww0DAqgVINSszz//Ou1lOKc59iuGXmBe1AkiqBrAOpwuX/c/kMLYyJ4QRF4dNoSez6+fD089Qq1SCKhhCFwm3AJ1w51udUuzMRzfn5EE06CBQgYm9m7XhraPTYPWm3GE5QbX4/hbNkx60u6oCK/2ipcAo4pEgyCFeUwHuTgPLFoszt70h5+H0w42S8okGoJxFpSucx/SZmqwbXPpuoNGZyN06JKkrG0cqMWyYoE1wamTOk+Sx/TOy7wpsCwnFOEjknOL5a3wR201tx/xFPa4x5UPV6jY6oaPrfPAOhaD91FflsgSt5OvjocNpyQWstgdhVy/mIohAQOe4frRJTEdJYLPbEhCXXrmavDWxTTU0xHMoz4nsJTIHui2FF4pDRNuOQJQhJ5Pw1J/3O3Z1ec2Hf5St0j3ROCSR5kdZdqfqZssaOQitqpiSjg03ekZROLP87ZDLom/toMqIL7eddfLMxwdM8esUmLzZsPR/ZsqltH9Nt9gUvxzm7PZ2L30KAr3x3JGHsiEJKLEAX4pIzHbX/9qZyZKMIWW77QJWZxo8MTHptcHS7GxBK5apIQv9/dfDy+X0w4x4rXWxtdiKYFknvDRZfSs0RBD4IARL2mWYIwzZRXFsGsVgDJhIZK5ZUCLmSnIl6uI6jcTc/J3q2DIWDEXsZyph+iL3S7/AzScmp8GdkZp4kyyNE6siKmx+18xFT4Z7ZYQexGxei02SVz9QmJqT8MkMYD8/QZTV++ruqUfQc51PHeyOvjWCcEyePMHaRUovK8FWLZRO6kWDlhmU+fLqEDNUSUYVJyVCimxWJaURGTEffg6MH2sRdgCTCknBJC4M3YJq5IiNGDMPL3f44DF6vocRqg/vZyPGyBu2B0R0h/2RdEgA8EB5/A8FEV9k8TAFaj8x+3jYfvK3nU2XH4/9TlALWf6l2nPlVUi63OQtH9+OwEnZMDYnml/6xRXLixxfn+RQh9A+VXSWEHAx77ki8gsfH0/Xx5Pb1+nviU5B7mT7Jcd5IOrNpICFCItBdeirEFrrE1HZpmd62WqdXfFtvlk3mIgIYnv1NFZyqZXnwjhK/LxbxJhqhusHCtPCqPWOTZDgBxM0/rAifCYP2QSPLJibVXSnDtA0xQhstQFbc2e965u1XUyDOuvE257IJ2BeP11GXKESK6RoyvdfJufC7aC1VsR3bqB1lkdjyNjto6WYIqTSkrh0k7OtoyyuYvRiNpSkfZBL9gHrFUAa0UiuWMIiMFgbb8ffuQW/etxt9lv9vvNYduAUJWxcQhzBjrN06lf5Wz7QGPx18uxKW6KjF4wz/stZtoup3UH1uDPBzk+4Uw/v4871OLzMAWP2bCHgVlqv4SH3BG/sk2FTTVMsYAy3KxqIf7rDj6wRSBD+6mqMEeIedc1tt7vmfyiDCdNingj8Z6W/o2sF+aHf/2WJ+jSCUGctwJ5dKyBlKpKTCwWhDSX2S19oZfkcCc0c6OMs6xU62w1UOOZaMXehuLdrn3aUqqyW03AcCUk7SmwbOw4KlH8rONQ00Dr+gqupqPJfd5fNrgeUvMO6ub1/l8FUiNT5zK1F78tkBieF7+OsFJGU5ux5GxCqwYUHdCOEE/XrTSNsYV4KKgxY2M3ShVhGObUoMEQUc3LTBQAy4Rl96J/v//8pgr1y7pBdLXvD0cQV4UWj/CsLUAkP2xhuI6I/Pfr5/t3/NgN4i7klTRhmwbVimY1bHanF/Y0GT4JYnzcgnBcEObXUpegr65XUnTxN2DqTRxJBCbK2Na5jPnq+OCsrCjji6jw99f7esjomnUt+f5waPD0ptJ6QOkkk2a0jm0u0npY0zi/vn9+fXwdMljuiGoONHCwr8SVjcta0YNXbTHMpsPzQJLkDoGyGwmsKrY5ZWPG/oeArDdyf5BgBUjmOAsF/qfMBesnOVwxoUT8hGbzaoWPTTjqXXcygSOw0mKd91QxChWz2fr54b1VkgJelK+qkHUiVGTs5L85EaD8OmyMBhaYUpvxmbsZ1xnp8ZiDPXbH3fqx25P7osr+wKCm2BY6is0C1siSyCqRKQsjltR3l6/Xx7eHf329IMBChNXwcWZPOk4QlZUqsbXqdrKS7fUDMuiH4w3BuwhYZG1XyM+QG++RIWi1/Uau1FQTRkE2CvjFVd7uRTfbZS/4zz/z8mNe1fmOZ6zeW/mOXNu26jdNfwJI1nvkhCJGDnOa7b5+X7pNywCz6DHtnWgLCpVFmDIGCLTY9OEDVkHz0QHlkXVjaQq7hXpufRCrA/NhydkuRyuVdjwXk9t8FYAVZoEFPv6jEGH43T6uRnkCyBRHxKkgDd+t88z82Cy6e6DmUTvszm/PZ2TkZarhjh9X9wQ+cqjW+8OlLUtG9yTirep81wSSOfn2pVV03IbIebsumQlp0a88Madk7KIgEXukFokVz3yzu54uL9/np9MJliWpNLKSJ1w/tXVHeGuk4pEGZFxSVGnong7XAyKl69MRkTssVJOV+AbuPexVKIXUpMVRNJuO04IPx1V8Y0o2zIHREyH5uq0pnW662gKOMWgUv2jAYtEhIKaLIrSuoR2+YeoK1/YYSfsiQalKys5S2N2jrLvZrk8/X6dBUpKqRkcqG7rvf3WcCwK0ig0E2LJaTFmkzXh6Upp6vuD+9dwdszBmiAFyA3uWkhBKfkqnoVrhORd92UCcgCPZvfSJSyrZHzHL67dGMcK3arcoyCpHWTZkliXQ3R5FBcL7Tau7eFyx2Zw9fqlM18fDucsrQsv4Qvw7mmkLkej1iDWIaGpJwpJtYjBmqzw20SsjiXlkqSu8SxK+2kyLfvHDNVv49VrENBQXHGstYDtx2GBf6LHbYS8fJrq4tU/lwJ1btvG1udhkTvGntDdwZfsGwhKodw0IkFHngtzKuihhAijWmlFGVe9lpTs2N+dHXNfFjU/9SbeqBhb2www5PoGlEvgqyOCAZeVAp6pacsax2K5SQZYcZuasXMwrYFsMb0VFSKRUVfwnbLnzM8mG/eb4fhlaqTbkCHPxAAyv/+pyPB4sq/RcA50GVqsdeTO6+Xb19fGeldA5JrBM21dLWDrOr8BqC9llB0iq3ndx+ng4dSuawjkPZASiledaCVqT+OtYU3W7KaX7zy7BsGU/TrDKf/iF9YHUDYK52hwp8nH59Xx+pJc47undOZ5mgBSYs275fB7gDNNA+8PWREyZp6qit211tyXyNpuZBKKJr55w9WuL//XOXKl7dnMVKu0GQ08wMhB5QbhNWT3Z1eYXo+lzw2IP/WeVozmtNTUYoqJgv1oLFUX/fFixL5WC8jMM0jkkH1BacjGGnAsWtW8cwsXBpixjpfARBBY6AzYNhX/tkeH/KqwsObytUm78PjWhW+ilmZnlSSrtqZGMCj6zqb2QCFHU+apK2D6wkk9cGVIiT9TzyynYVyOvKLJ9XYqOkpJPPPfNbResXu8fijhjTqBKzE7a/o8OD6QaJE/hraZMgsbh8rmrZSSz1r2Ii5Bmej7qOogrtI9vS0QMByl3laIde+JGWW3yKr9zOusKJaGQ0maih3zIVwOSpAL3E7X3Oc/B9zw5I7l+3LUJiS9M33TcWbBewGSJGXSxFbyHB9ZtxQ8EA8OfLp9+2rktFZUTMAIIAWY1w7RBlUCKTUs80burkLEs/8CbWDnbbZcL6oJJkaz0X0lMUse2Ajjb9nCl2uuO84xHi5IYkkLeN7TSjVox7h4iuYCljRIOlmDwY5dj/USApdQUXf+1SGYsxa1X1VIkHXV61Q7LwNzA+Eyb++WSXxBXmYjkwACQnrNmKhiJIDXQjZPkRvE433Uqp20rxPwsopcDDV8fPvc1OmPMt1RR14Blt4A/BleR4Qk1inKFBCVZ4mREQriN5HS6Gv7ZA8tbLEfsUtdFedY0QXHmdIQrrfxScyCMH9xrbc9C8SkqrRAmLEzLvtb82Gds18g4otXmq+Op79vkGLNytHTzafxOEVvG4ZfxWJ2MmcKMMaEU4chk2p9K1JG9TKVDyt+VPCPIwrL0xziQEgMBgwlGnr7GMH5O+1bqeiLJlNC1hE3RFiFlL4hJYSRm6y7R1hRj4ihlbYjduhXKWk1hm95t6N7E8IIQfW2kO+TIsjjs5Mk8b25aCDV5D2SPMBvtcRMzzjGJVR5+KSMnBjWZ0hGgKpWsKhaBcRyodTIwj5uBw5rMdmWXCKT4mXHsz0Vk5spNAhm0bMND0hW77Uo2ZOsmKbfWRX5RCcH5svhYZ5ES/4N6VQycibMFKTnJwVG1bZBs830MWCyX+IxYOMaG0TBbrc/ny/nhtTABALyQXis7q3koL6+mZ8ZHO2KyEeEGJKfHDNdBYhshBC/j4wUrsPPimqSTZcAifBzlC9UvGdX1bYMMRahulfAj4E3zdSS9Tjt8t13wqwv72vXhkEpMyWCg6mubBVZcGaVRE3hadQmHgwo5eckuIKyTVujR76aUJM287uRwwznLqsiY/JJkqG9roMbPpTm7d4jhUyH0E8t/G5GlIiB+btxJ5M4Ys7SXh20808zLOHLqFZigSForwuHKqZa13cNKnWKwZMtVilx9op33UHZqLRG+VkhoehElttBnIoRgItUxqJiHLiEmDFi+3uDJO5hk/PoRhQM8PkiRW1uYKPEHjFYC3u36mJk+tAeWX4vto0q+IaxrARnYh1+/d4ncGxlUNc1i2UOQBOyQGl+MMZwub4lISdpfkWpQsN904PYvn4+H46Zb6e4gUwfSud5ZWqlMiYqt2HPCc6OvNV4uPQaikX6pwDLGjxcEveHHUDsNHTpcaTutZZKZJo3tTtULapV8ArHEDYJ1Zm6m9dUy5eogAAtSDwIsKkXhgbbeLVcBwYZ7P+gkHhhbp01bxQjP2sgT+ke9H+FH6kn7URaeDLwDu1u7XaVTOx5YmvXAP+o7m1gKnQOrdUVCvR4CXbpcuMElm68yp7JcGJunRWmvqBcU+ZjQ0c0WalBArnVz5WCHAcsWrPtmOBtQ8/rrMxNcpas6icW6qRMT8lLXFKvTtjBgKUZEmoLZir2h9ahIymA+u4Hw3WVFk0V0EliWSf5hGdu2J/5im9mU/gsvWiFo3KApB+4SvMvw9PDxvWUzpF3vCNKxQaYqXPGMaDH/rjbLWmrLuZU1WStBAtXoyjmeLX/14q6Muay3eHrdBOZp+ZxnIR9GS/21k256FdpoCpIGncW8BdMlYPRHZBFg9bHJEglMWZsgUFTOSSaCbZPWVPD+dk5ggd+ANLJ1w86WF2qjVa83TQJhhcP2a9jfDouU/Z0xk9Lv4HKp1RdNfN1QGnH0IxaVNGov3KkMykyk7dFz15ETdK1WLTnXRWRytA5XXkqErpC+M3+SWTqdEZ0QeDxxZo4FxcAvW/5Zwt20uvLB+sQoSD6dP18HmkYfcjgispPBt/BJaeEpBhh+3Z9WVSDPBNtarjsfxUbHcBsk/Iw860TFsYU85OWBx9vrM2hQzJJx5ftBpbNdd4Mg5a4FPKpyzfVB8TpQUSy30LCVlpuNB5Ykj56bjcNuRLD+3ZiOls5ViNrFCCxfBvZbGYu+QJcalAydq4ilehXnp20uPVqk6ZKVWtL2FykJe/0WuQjKbOEixm2B3CzLQ1XCsYaFtGf8Y2Db6vjbOLEgRpmjsVb7MT0zunMXP6qchOuLpKzA644pecBxAgzWkh7k+ziifgD3wCCgx+lkwajXMR1/dSPF0IQsdKJrXMWswPIK4NjaVFNe+LCqS67QgpezV6DVR177ff+5UWkb39dxQzJy1X2513oIxenn/oDw41ZyflpqlZNJe1bw8brGnJIo2qk44hohWEHl7uX9969/PT8dcwYddIqLIqSXmqju6iqnNBCZuAmw9ElpojunPSFjlad+5ldvWutHoOU5+AgH+ofjzKWxxGy+tAFGDywS/MfQaBkP1w2oidL/kQCdCkd1c+6SSipuovZjwBIPrh9bf7eX4Y9QlOucA1jJKlYgGv9KumBmCQAsPfzntDMn96yqg4Xuw1baFg2Rf0aE4KvonrMQNzf60NxWa2tBJr7+euFsfSS90zpHZTfMF6MerfeGep/vhBiJUp0CC66LZzkBlrnCFq0h+Mw1ckzhKxKmvn5LTcn3+49jvJBPbTpF1p3BMbYU5KZIa7leP9yvE8aNBJasBScS5vtSEz7T49HCvXW7gCxbT5ZWq2MtIozCa6GO18K7Ya8dgbszj2ENfaNKnAQ/UFAwTxpVApuPjmZYzKtdAPtpD9I/RN0zi/k2WsG1A7FmCy7ewW8mI8LvM68oDuc+i7VsG6ZVLrWq7GlTl6EsufIWy/fv9QEjEcZEfRVYcdYfaxZQE3XGvi+jz4JFxbxh5mroD+3MbRlmCesyIQSYcClw55iY9n7Whte9wNrhldHToH5/eMpZ0wro15scMRTbeOJiJwZLgUUB/SCPEVBq/VPwzzM0XHlglW2BcQvMbFR+et2NSjCfqIbL/cdBfK5bEugZMDgYzxFZbsUwqWTDw/c6ZgguXsNt9MhqnqupaDm/NulCeAZRyrEDAZXRXm614T1NuckhCZd3DODo2sxDCHWRVtf6HDSE4cOW72v7iSZLqH2ohWJ2/16EjMxs+Lvc9rXweR0J2EyO9SfYgYNdvuiMR8AmVpPTGRaPqhKP88cxU3/jiWnGD7nRvv2dTYgW2fDSZFybSK8w7vC0jMwDa0JBtpW0rsCWDqGG0c6ViwUgzGzm01fubpw2nM9N8TNMc7fH7eGYUWOOKyhWKUIvByyfNHhhY2466FH0q2GI8HZmsUZcGbAoJLnLm9+vsYvPff32Rrvjp/tfWz4V8t1p710rdhqJKLp0kqF9Wa/wyLtpPCWvJEeeh6Nw+eqIfzOvrXcrXfVRvjYI75xR5mEAAhwWtRQHx7yFj1O08CZCFyAFj+eQP+aANU4N/8NLoJfZpULe7izSLN19HxPWzWAIxkVbBix8Rk1ruuMmkY3OqDN0WUVPfmgoYsL+Ew5WreTCm2m3vPSGqNG8W8ZFiv0Zxi/B32fya4EswwxtgvoC0UT90c7cZR9Bnd6OC7p5F53JFvUDo89Z/Wy6Y1Ktwd0y3nLhzaGBBebAWFgjNV/IhuWJwbLgXfiGHPhcMJhl6MgzHReO+Y0FMOvxfv39r1qTkrG6rkVWSgp9fb0BKHM3OGEwdnYCyFJtJAmktNmIyq3XN56LOFX9b76uRLtR7Qg6ixMlwhARInY4gBTtkeR9y9j+/59KVXffC1lOeLO9GVtCUPRaXf2ez3RNCVuHU27eSCpWYhc732KubF3wMvIFFd9A463BoxrdusdKZnTYotXSgqJBUxisFiWwmECOD9a4P4TMQDyyoXYqlYnbvv/jvIolhHBFOHG/TuqfljzuVnk/1OSVIkKSABwiEw16bTIGxir+gotZrJU0qnUQWBrDcxdVMqyah5ddy7xyGS3EOKs6nvuwBBXhNQWWVbS8IlEp9DNyCsz72Xg5CsP6YnxwxXDxZCbFdA2aUlBm8sPHgd1qkviqcEYhdz/z50WG9MOnieg1gbMu1b7RYvlgV4AVVPHq6aVP9Yn1pAWNfbkX9eny+M9rLuN42iR1Q2REJyuTfx73hSqFqphsuVcSfrTZMYSgKRYoiPsSu+nSnOlmaVX9suw/Bf3VcDVundX2XTUXLVSNSUS2LsRlVWD5at5xqBbyRVOLrf5TE2PqEKzBtXcbVBbJfn3foeQjXejxJniJJ+WOs+JQ7AuhMufnTcJi1LnfbzaH48BuT6KLfq2AMN6hG3pyHAKsKOn7fvt2LVhkXeCYOeelLSobqzIf7pfFOcPthGIxVUwLI7eMbtD5U3XEFtrxkFBnskLDCvUcgFw9XtgEEHEesOD9NJCPeqSWw+om0wxabeGM8NMJ+qfDQkLkDaq2e3lDTVBjvnGtCd0YF859rZvDZZ/IqpARxMSVVfCBWefQpLFacPrPboPNgyYPidIxcbJjUGqVWoMKcaBA9FLusiE6mKyrcVtnBUdY/qfNRR6g7SyKjAngVB6cFqtdpqZI6Le/6UoulvJUjHO5DW4teCf/N63WUtj5jQJrnAFxeSN3Yzcx+ckY9ivyVf/+QA7y4W29PoBw3KwwBrNe7yMddzEumh0E1o3gE/coRBeo250uPZt4C/aUuLfCCNeuumDwmtgsDyxvs7hJVjtoqhZr8wkElqFP7ZZX1dL7b3eNmivlcM5L6RGSMApvLiGmf65Mwo1t0JnuGJ+n5M24CqnPCn2AgdTy4WU92DYCT4YCREgNiYsLaDv5gy5e9RL0VmvFD9m1qEbeuc+CA2OMSLzCTPjwlXHo2V/jqe2c1EgsD5cauI3qLPfh7YisMSUSIZPQ1WloQvqnS6gT6COycCW6GqVLcYYjsBxGtYkAS4eOjknSSz8kyPdLmVpWPPpNDhPN8xIVq5BxVXNcP7794/P8uD08n7s9BlX7gvtZs82lS3QVn9uT6oGlBDags+hPQw5uBWRy0ZqntdDz8A+fZGP8qec+BRatzVgwjuRa3Jp510CZCPaXggdf2LyrVlws0QtS0mu4uFfJtkGWpZiPHmvS/jldrlqJmVh0WBYwFsqknoSvCll2R6rm5z5vikj3FtnMvoywLJgxPu2RLjTHSl7EG6zJ3BE4Q2YvzdDFlTKHDVdwjtl9H9xN17LbWXiI2xOhBmHURZbCaeBdoeHBdkcREDMBFn12uPv83gTAri3It4bgXXRoYNcDjTFNpnPMAozhUTzjlN0n55WtVrzC9EsGCr0BDBKtJ8E1rWFIJh+oEb9ATn487t6u+4yqRDWpWKTjNCulJI5nb8C6UbZZBnOXxMDgDvjMlLPJVukf/43Gj2MMkEdf6EdbNFVNKVBTRlotxQ8btnShjXHjideRQuzapjMGVUlTlAasWdhlFLgxQ2PBPu9l7Nahcj1FEQgm/GPAwwMLkd/65TmLG+rcaFOBWFAl5bhZ//QJe467BAyIERoOWkrCAbA8sjgvKgUOtegaY5WP0Z3GwRNj5dYIaZtCvplnb8Dy9iOeu4laPTywaJhLY+bPo2HL2USBh6UfFphusgVrSq5ZymN8Eb4jHUkj9UCFNYse0WopwGJo6qnBOmNscyPxPgaJSTWydk+vz7uhWb/KoE5So4in1Oc4Z39foe5dIVNgJjUlGTNVmXJu5pDhVQqpXlArVvcdugzLPvzobab1Bh56z5M4CIa5MuX0SjPtdyVesT2GK9/Tc8Cal+Q65Bl60cY7GS5DIu2WkZRGXER1yKhey/bpnpmzbg125sKdNCts0ekfZ5To+keVHWFh1nYjhv3br2tN8aZk2LCSZU7XJXNqUx2w7JP41VBjFnWbFHMDJe+tA5Uha7qkWCUzFVeaJs6r2ymwxrjzRi7m4k5C6XhVS7H8jk/QVM0cOhfZgmkpTJazlq6GpcMH1DCJklsnW68aa0EeUnJangarDmqUzLK2kJqzJgEiQgIL/gzatnlzABmcbbdSx6eYOyJGla6bj4IZkcqCcHiDUIgGHBLIzqAF1n0W4uBOcLv96g8IDRfFO6OgmDBLwp98BHPQC++0ceiHwvz42H/KPZjJsqsUgmiCfiWAJXpZsMfvv7AHLdVJAS/KEyRLIVCrxY27dK4LYuXaGq4sJyKwmn8c0Oyti67h/ibKyFHGG+/U/frHmZkCGYdb3EOf26vWid4o7wp9IXu+HLWNNYDOlmzsOT9ouPo7DgDLOyYfaN1NgXVrzCsDlvw27o6uhPRWSTfebBzP0b5EpsxAN2UrlI+yZbMenbz+ksumoTV0iCsCa5EnwAbNmEkE2Mylo5Kh1bVXjVtOTa9P2y0GbiCbitQwiYTkI6kKo/G0Euq3X11/Q0ubCauT2BMt7rAvoiDKulWWynDxJH+dLCXELbMV02ZCvZSLDqaXT/9MACwjR5iv5wcYWV3/URfwlfAQ+K43dUgOBg9kYE+nrk1EQEtbN7KAiZdSRoHZg8ueeNl54fSUCfuROEOkvzThkswrSO40TT60JKiFdXP5+Md9HpJgWCVxt5lZliC+WW+RwvP3f/DBj2avgbBGbZcA+Ywt3ZkF3wasv/OgxaIBGasOysGzKQbFDgPvMe91D6ANf+NOhG091TtQ56Whq3QLm1jWKUxUBjiTb/xXXXBWRrbvF9oqOoVfDGgq8XPobbIoVzr7yi8ZUJyvWoRUQ4O9vg+n9fpyv+Mcfhnp1i6jo5FrWAay7t7lE+z7xoGt8BGYRkWO6fbw+FgHU2B5ZHmZIPd/BpVRylWS5PeX+tYrgvputREcDVcjsByuGL2UJRLUXRZXgc4nCSscQ7zU10psaBzNOnLMRlHA9mJtKASf0yDnr2ayZsVLkyIvkHmo8+fn+2G33++Pz5iXuz9RG1GE5qs+cMByTtAxoRgT6OGIsW7E3sYslyHMu2BR2hMKLP6gJySuXNfeb7Vw4mEMAaUjM3JkfTlE21yrWheOaLnZzw5PgFVkgbg1y16UPWO2z5LyRB4FGcG3lCHv8KyGdGIjsOQWwH6zKNpu1/sWA0NbDI89grX//PP2+ZgzHC3FFIkuottoAo6pWVTOY+Lbg+XcRhZVEifKN+Rx5v8sIpNDGIHlkeVslQbuU2RZ/B4evvu5URKm0o1WxfIBlgeWIV1a2VU8NCST2WZ64Gl9FsE2tG/JUQcI2niZ2vMgzbrmVNFVOvLMZJe/mqx5+7kJA8mCINPStEmN8ZNNv33/uYKYpMxp/EzKO3eZAaRpQczoHaP8FesS05Q/nCmV2cDoYywzWPx7I7GNRQcceo+r4M5vVRsTIaWvcMVeKLdxLF9JjOUZ9qx+5iXd2mysysg1tj2ysp5yH3gamgbwQYYAgxn8dNxdm1xMBGuoGz3vNh2ED7odRhMfnjFb/GudZwzoI6Z2tuBLZZdJ4Yyx+la83o0KT7jURv413B/hgxbVdp0uuP6NwBq7byOsRoXEKa4E83AUdYUytB9r//d7YgHulITgQUcmwgYh4qAqFzglOafscOj2MCxw7VUFjmlGhri3s/OgfduqhK+yZ/6TG8e662cOD8/CWLCUr1Tq99CHTmaEBnuhwY7QGqe5L27RKGPrBiacidFcqrp1LXB/TBY1/k5SABxTYPm9RvMynAuy3GFFSqqu01AXFaXb2AnxY+bjY6zScUmeLmCRBe3GhsPvLndk6NrMKMnoNU4Ixsu+gg+wur7FYo4yAk0siBt9bTcr1Ea7Tb8TAYfvdUFRICFpzl2zk07dGS40bjE56ic0tWtPFXYMzK1JPI0SCLgwePe2xUrQBqzJsjQe0zVtiHPgWqq8danOmLyrG/er9qe0LtN8xygTBg27rKZCqx+hToYzeJecNAzDvMj3OZyXqjeTNxglp5drsmB9xypkv7fHYQRW8pPjW2wVgyq3kf+VEJ46iScgLhdCVqUOw8SkWpI12l7rKLsQmiYx1H3+8q5uFaj/9j/9yVOkfmutYzkPeTDkPio5yh2EG+emJI7kwM5SUxNrRo0yS793RM1gtSpTLB4b4xycjzzuJmm23wVkVN549TwkPB8PA5ldxpQwMrnGFmG2/USYsN4X1IOk5sz2G2P2hzyWgXXkhDjE1xFVfkm+aybo7ZSXJOaYKhRvp0gWajWrKJJ1DVZyNL8ywZU5Pvl401lzEHhRm85I8FfDPF2ir2miwVPgNZ2uBkPg4fJ0XbG5Yp1/WeXcHg8rbizOMnRBDw9sAOveCiHd3b+cQhLPrWk0IWN42nv8tApmRsbFYTspnfY1JwalZboo8TJCvPrPMrBPXXxq+BvPX+Du3+jPHlj+8HYep+OtvGg9ehApjyBIRn0KlQeLW6kQ610ue3aLp/x0wNpP6pv9adb7plQOrALrRqRadNYWTLFkNjOdXTc9U/wcoKtle/FoBBWCJgWUrV9eHjjuycUnXBCO4du3jiEWt2bOuByFJXe/rkMlLvQvbsyCCLCANNrU8nKORdc92YWphEljKEyX9SdvffSV/KKZkYwjvc67oBtuLcg0/saYpXigWQ5gLWGwOarHl3/cd5pPeNkgyjehH8C1kegmvP7zWoQis5O0rOieX/7xEDrGmv5wRV2rvjFNfeuXMjioV0Jjkwi3y6+TEFrYPEFQTiIkyiya2an2pXGGFK7yWUwExOwXQizGo2PRfwIscX8ekX4rsJ9jkXUcJQWMAjHCHLsqKYXiRpmXySNqwZPZxamOqutVopD8z689G5gm6izFEBIt5IPNioCpmdvaqZv1L6ejNYhw6OvhHzSwpUb625riDNx5nOTdF8Smrj25cksG4aJEYWIB01XschduvEPjCKQyOdPTvhV5hWiXhEySxBcasHA5p/GSH0kelckVVzh1bAHfBKOQnoeS/c/0rzyuqH/4/Y/nvU4JjavuOJ+V74aEMiLH4+WFjp5iYcVQFFl+vYe90paPEe7Nro5+Cxj6OoWziYC4zsH4rTN4rHjFAaxYbJh4Qh8lARyu3mqFV5UctQiSF682YFnoaAGkI9zBmNlh7TiPK0KCKRMFpahaJWl5KKoSLptKsvz4DDGs6VYBjyn5RUka1en+acfeuNLteQHl5sh7cLPx7RLAGtfZL+PzvROS5UvqWRkVkczkw4bLTpAwcSD9/PZzeaAKrm5dkq3blnHwuvMYxcIALO/TXKMjPCdhCXRj81Eeojc6rZADWF4Yj/D0qlFE+bi50T7YvA2kZKhGTj3JpMoyhZWp7pc59vW+yySh00WWJRiICKui79Chgv7fw/PLgTMRaLsjABiO1y4jG2tCv3QhHOCg3ofils/3qfcTvnkxuhMAU2a34jWTJ3pC4soB62+jRzSwaL5BHEuRKDyiM+qbhPwCf9F41YzbaUwDs1dui42kuSUqyiJWEdeJTkBKS0Rl/IfDzzHWp8BvmjP1Zi+zBas35MVmsyp59W7IptTE5lZUQ5oUSaPsZLSwjN7h/NGUc9tv4DJVNw5Jlh/KfSSNkjNzfdiesVvFb6zWAPFOzaMByw62dMZGpesizbLnGu2NOaV9NnESKLB8Y3NckKPBml/+JLMSRvCXX9mLACNtOgXhPJTBzKPKQrzbaHN6/77Pl35fpSoPBBUJCP36ut4dsc74/uMfX5dX/PnxAtle2SPjcaWHu7/TIGt2+jZ36T8AUcXzU2DJ8AOwfY2Ef0NgTfbvO2AZwqz5p6/FV282ZPt7RBuu3An8UYHlVCrts9kqcZy+iFJ16xwJWJtKTMxrKZmq7BwIh+9/duGtXF+lS7rngSgVFM2pdS5blym9HiBIBrB0RobKSIcVhVhUeUmxxQ7l+aNnOup76QSL0dSjuNntswJWlK6w7R+7HuqQtj7HiGikhvuUQg7nkG58QcqaMbCPu8cS8b4ovvZFv9RcZ1QFGpmLNrstqi8MEJT16z813rVa0r9MBpi9U/Sw8iVVtmUOEIU+JOIGrVUjHSs2FPIc6paZKPgiVP91fjifT+vNqg1VPE1EDsbI2rXrdKZAGZT1RwYXTZj70qLEKW4SVYEFBcwMMP3NH80Telx5YE2JaEQWfsKD1hCjnJIR/VyNvL/tvBAwGxzk7vFIOf4lnasm4UIjVaRRcVG/Bb7avdw3Er9bpD2RFaHHFPhFbrXNshiGPBOm2lyVPU7PQ5yQk2ejIsbJOr+sq9mUVobvMPHNqoFATl6H1P2H/Nj2ODS7XRPLlgL9DmGL3WkSbQGIv783I2Dc2EvQVzPZicThj+OV1BdnZzSuGHUBOIWQJCpCH0Zst0xXTrE5Eyqwpi3CEVtu2aSs6aYW69BnMZT1VKfYmsucTU8GhpCV7FUs4f8ePu8fV7WM6s/cYuIpl0lTV/VETk8KUyk/O0lF7HSUv2LhAbUXrZe8bBoWZich1l8mwPrT3/QvPcXKOXEZ+BiH8l3xz1zx7/3coVU+yQMTadAwTxgtLmlp9pXFL7dS3PJ6zey7JU8/b7C4Xk7EZ/h8uLUFwd9Af9IaXbrZ5qHoNCDHKV5fLkcEbk53yQGrPLxs26U9x+IemTpAEoZbnLDJssm4UIIt6G43QKa2WVWMUuTEHLFD8v7/CpxvfEruZe+DvUougaI/2//zMVGJxbGv7/WG52EtcxctlJl324GawMSEiyl1HIwUKSPOa0nCx/K+har6/XVdRVFcJcs7tfdqEGWhC5r6HAqJs0i2dXCPy8N2XaS2QUytOBFjmaDy820c2iwWHoNFdwk8/tR4aM6qs+h8XwmyVutoPvvzFFiTBM8FXh4zrG7ITlUlRdoYopffM/ThNgjz2rjevMzU52CxlttHkqpi5tVQvsF8Fx7tyV4WpFTby1sT3CrY3MiAzQpbqZIOSuNdK++xV7zgZqzt025oNXXxBouPbbj+53mfGlR46CqVdImW2oFxOzeFUUM43+72+W69z9QTuqhM6mkGDl5w+SF/vBGDbcDS7CmNtX6EqzVL0Mq+9QvnrSrIc2ByGzN1UwGC7uf+fhezZ+weCTXg7UafY73vXujPj63YnFFIzRxSGos8sHO2vY184tKipgZYWYiTYK8vWe82250uBrF8V+ziZCpFTZYeqjEBotux/o0bZFFt0j9O5U00LUTP4C0JghtbwGi48gV4DyxvC1V+PkispGP9ULqFib8nhqXI4ylrs6WqFfMDlQ3EyJGXKAuOhkxEEqdr9JBhn9e7Son95rjsEjkFyjuVo8Y9GLWL4n0NGmPXJWi1OMkioTYpitLm/b6rbCKEjRflv1Vle72uKlZ0oojAKo5gYg07EAFkxZ9S41ylXi61hZRmpjywrN6jQnGBjrZK12532SzuRiFOyWgU1XHkA2zU74Zf/3gAbUXGJ+TclXC7PshwgXXf5AXMKZgJI/ukLThBrTG6KRcrgUgVP6N6T2XqCJIdGuwGaVpk7b7IK53rFbDix3R0ysgjXrJTt2mEDVtpftaOBHl3SMDFIgmcGtYlz2/GFukUXs6MjQUq4pPAqn3O5kSkaQk9E21EiRlpJZ3w83AJb359A+EXOddSgUWM/DuwIBjeHKk6yBszFhnuTPJXAy2xWMoTsw5LlPXrQ85xa4crBZZyKqLi+eWhKL2Y8y13gLG80d+vdNgZLppKFevzBpX3VVWKlqSEqj6icHnStB4MYMkfjcomMW5yq2UH2vdl8nb2BTTz6NQtwb2e3U2cYlBd/vFazdWWaXTKoebm/qlmcXaisC6SitJnsB23bV5FbA1TMpZXxBEGxs3Je5Ja0rycGYsI1gtuV1ZozO1mavVkooXhRoJ5jDyXWVmye+lNls3R6HdIKMoPk/18bm4n4z6aHLoxSjNjZrMk32SIKONnNrKnXs8wpYZeYyP+5+vkZCsYsII0zo+vb+fLqtYlybbH3kIsMUyLegchvnKhD6rbfuhGE40TfycKIbfuL6gyn20fN6Vu+/DGnYfIaSyTwz++UaxxSxuAP848F8fjNknNVYdllaweXo/N8cD9d3TVbi5day3+ARwvE2MsxZiEolJ9j1NjPhBYs/D0qwjcbga1VtyT95AIrqzqy1bX6f2VvQHZMyMrsWljXv9xgIrTJC0kYAQKDntJI8v9F9TVN9UEByyWhim/kayLMK36IjAhWn4yPEyBLKZYOCKJeNhxOl3h4w8hoCzAGkpgsjytRBhBQJYCS55jfL5o+HxOKDppYZJF61pimJIW3MYgXqrbOGHEbfU848fycORFC8T5U4mJ4dI+Dx0fYpqiQd33dbOKI9nZqMjyK5YAkRqC/WfR9eKFsuxJgWXVCyKJ5A0tMUknOeeKE+NGjD1ubyKCEuVorASndcIRMYSlgPY6z0sR0iPoKRf3z1/n0wlhdCp/7YBl/AKPKx4OWPKX6jCUW7GZ2Xyyqv6uPq/xzNtWmMmKqeshnI8JIB+U9LA51ToFJCsqtYdafDczl+CP3AZFHgdd0n3XUptSCxWeCWHEuTte8LDaPxZxhv32tsiQbuKWCZWtCHOyuuqtvc6NgdkKZuLjU3zHIr7zNFyv86Aw4ytw8jjpfvolkmKlgfugSj3hlLNgVVJlZNQtLK6coX4Qb6NtSz85elP1xDnmNm0VKAVQypbqjT+Xt8s6SzSE95CxcCOBKlWOmp278vTaM0n8iUDeHfxg7ccx1oIkz6uAjL2wSB2Zi4e2sKzTfH15YWc2JIU2BTUB1Md9MeSt6ErQF4Zlu3tD9/m1T0KR8FuYJI/vm41kWQcslBvMdBFYwq0oilsbWMSJ0509/drhTFk0o8WOE8r3XBrpA1h2QRtcdfGQ4yNbnqI7p+bxUz5h3JoAjW5qZfAUH49guVbp3Nqr0wYv6w+44viY27cGAovlzKIA2flksS0tI6qJUjNXh+jFsw2lY9B1o7PwYcjGi9cWt2LLdOB2Vu0y2l77MgOWXScHLL2ExKSSxINNY5ObvChCu/EFUdonQOXOWp886P5w53jTdf1XscJ22/fnx8Prx/cDbrOrbvswlqvX47jOyCL1TzSif9EqsBcmYFkoSKm0VxdJquL4VFnLK9YUXPAi323svP0TqDGYEa6TFhRk7m3Kkrgt8liBRS2zhnSZ1w0FGxBxwVfrTLvjcJpJ9yxs1o7/ejOdkqIOrTAoaS8AGZEKW7/8E1ANK1laSS2F07XpjjF80ESh97bK0zon2FSw14BVXWJdGDZZ58aGMinGad2/XjD/GM8sqHSJnBsJZ5EnRdj49g8sQ49pDWyyGthUWNt6ZLf03GgaxhIxOHuFONFrwpkmbsLj98qNtSjMIZJD/l2telyqFz0JSifbiT2wCB1cpstXFtiTbMDyKldCQ+Qkq4aIPOj+4pBXgYqvXK/VrA/PP/fvb89vrxfuc4ooLG12y3STiiTOqMLn+VSzQFyDHU7Uru2bpueCeEevvRFOjUz6iDMyg6W0kbTdgrPw+X7aotqcD6gqJBQXjrn0RFcOtv3r+fnje62r7SnX61XEtCL61wmw+JtEDAossxI0WJwWwSElHZpW0M0xprgbyH8X1e8+5yafUsyM4YqNa/AOACxzcyaTOK+v6W/MaKq50mcvKisUbYaffzx0fS2RoE20G4NK605ME+Ej6u7z876vbOGLhmGskk/I5pjEoqexh9HQbibLF3ZpE0VnKLIdZtZ/4WEVdDNZi74Yhd6muGIRi8c0eNfaapB8P1POzariTgbUs7/DoRVinFP4DZDDJxz4bAdgYGgaPKvXp5+Pr2cc5+3hkdOgVcmavLhLjrgMBFYRGbCkYHGnPLKZ+lRR/o+H54+X+2MydsXUsAd5aAmB+3aLwtrj+YP8vaczoijsmq8pZFuVte6OBk7zQw/hhV/rAjUtlbSl9R3Dd6vK/H0EFq/ZjdgruQyk+CxrNil1KbdOWQct6V0P3OmLyn6W57JTmE+cKc/TQuEzllG7mo2lYnIvWLin/ZtMWfiC3rLu4Lefr+2CQLbigDVtFVg06wwY4v7+aYu8UAZNff3aIir+IiFOGjPFGA/TqJ+KpYrOJYyWsHd5w6fAUwNjvjBPZhYpTdnTBOC/lR98Ji1rQS9S2bWSmj9UzTLNdhv4Gdp8/BDtfWIqK6k2RUFrappiYcip67BwEhuN+g5s4L7vh0ztGqrQ3TFvkxW3iJsk8V1EJOsqHrIiRCn7+PoL1BatHbtY2dxmEQpx0ssYGZ0vSVYnIAtB1PfrFm/YctkOtTx1j3CVc8kq9BoaGizVuw4CLwIs8qiCK/5nRBADlkRX2kmdJ8CV408YlTppTj8/96d+aLO86WvRo5WtNkyvDUEcmaEKpqkAWkiPMlYPpqxFPzbVbjq/ULL9hf13g7DzxhHTkWXC2J5xXdXiMyUVaSReKZu5/Cj47Rh78dKWEzkPQF/mcYVD/R/G68QoK3DssGayBdpFIn1ZEe4fJZEskB8P4kqeR1BS8q9uceda8DZW60ak0XV7+/Vz7TZYw5EAS3Ve1GXEBfFc7RaHXKa874mjXnYfFU3XrbjXb7c9nbdH3Ne8yZsrl1N2daSxkjpCI90s2AwcutPr/ffTgeCoAqWja6DuptNqCQLNahFYOhKIK7y93H/ev78/Hpshq8HjqyrSGUpZtrtpgLWa0kXhUsWIVXLNLIYH1pjQ8E6qxcLlkQjrNtGHGaZL4MGWeVjs+90RT9Jh16yyaslkX3nyd25lAO3wMim7zUJ7k76kF18LmWTx/FKrDfJJqXZw7ZcsUp1lcznjYAWBqXuUhqbnygYq/HpFZqrfjHG+W3ETUtSU+RBsIr/5xut3G/nPdKxvbQqKb+s3IyiwbD6wEtvri6wGIgPWlGZlpOSAmkYBQ22x9J57d8dsLu4ezvcPu6Kti2bT5NyHC6dCN5OEMGAh7l6I1jr8Yl0j5OISwSpvhiJb9Q0WaAJwu+vjgYAZjl2c8p4K1yaS6o7o8yOq35/e//n2sBtWOX3oUjjDPBGLO4XEVJX4XG5+QypHdJ4lIrz+evl6e8Zyr2FVAPspa1f7opQNTQN3UhRHqi6k0i1HSo7fJcfD02rAskMrMt5i/VEkau/ihZLqabBsKntRDdeuwcesW/InIqmQW6lXkhadKJ6h7fLcpy4T1kckyC/JXOn7I/OfrlOItyckI8c6dGO4/06LQxSli0EXeV8VBTPzhdo2CRi98pQ8EF7eY1YWCSkorLUR/Y75Z4qvXnchSKVYPq27q/i/itAFmeS8vvc+tvxs6YUzYYarWw78rlptjNy4MJMXaBnDAiEQ3ncS+XLtZ4OmHVrNUnyMYLIC/JmbBBM6mpBxmK4IynrAiitQwTjLOwzKXLnwbFWlSyduHinABFho1u5yvseSAQuAEUih3UqCvt5cxoKskZl7C2DR7XGH0+Hx8gwlTdm4GrIDfMBNz7vTZp/Dim6u1IlkxVG3D+MshBkypUNOaSA3YrAURRxfUk9DXMktmIXUYw7hakXatyKwJFORJFYtq7jFsN9+DjPT0zKh7PT0rG1Hz6dVwMmi/v0v8PTxTNAvCbAcrJRlgmFcUeasQduo8ogtWdusKwAw4qCblVUXxoiQEvWBFVyFVTURi/WKsXdlxNvu6gn2Inb1uaGfwDLttelh1QnfKDK6jSjWFNliFqEz5QcdU+T9eRezlr3MmPpI8pMRZKEE8pReKgEmEmaSVpqEQkzWG45PfVoXlKPiWqT++Hg6//za5glQE2gZYKE7PFmvOsqVjPRF9RAdqVH2yiY2I+SKhKI7SU7WpXj3vNltr9eHr/tDX8DgldyN2mBIuF+/vnbNnpSlVwx2lvgIOAh+WDuRSPctVfwyNec3onYh81oyvWSBrja76MeDSFa6CUwXdcpzlhYXf8KRc58lDUvx/PaQAsPO8AqwXnci7etlzkzLQxQ8QGy/FBFru6TljBbLuAi3iCVYfkkCkovCgPVmE+kH7DSfkx/8fy282irHvs9qGPOFRq9TkqFnf6FOTqEDCaJsBbTvXXLYbguXYbzIkeYzpa1bm8gloKRbtgWFLbNEEFQm0IEX4znTRVJsLuBHCrtUEmW2zWEJ31cG9EbxUoUktD0jpKioBaBgtBDZbteH1/uXj2cQ7+qMO3DYkbAuDN4sRE5AAM+lE626ptI4800GY5EzfU2JCTYJxCOwBg3wNtuH5/uv159//Hro8qxuMQa1ud6/PG+xgB5kP1g0kPxWJAMES5oseQGnIPi3Cbnf/wkMUpgH5krhb/xpEFUKLPCdAppVW6m4j8miWNDoM8NlFK9/iMDpID1uUgRAxegpt46LN1iqa0glrtM/Po+x7psx6R07NW0Ic05rHu5yUUNJRHICx6gbrcCyw1ySRB6Lcv22TaKlAstwZXzVsUg7qxdztc+CeXPU6i+C4q0INFc1YHnlYZsLcbw0bwjgGooBSXrdnb4OsCrInjTIYUGPzYJAjjAOcCOBrsXcbit6JPGShqwKCApjr1j/GESoDGH8vr+eL4DVP78uV0yPrrOSKNWNmShwisbJHU3lVMrN6JWT9MTcxTyOU0ZIerCeWtXwd5BSOzw/vP6T+8SPfd8dj7vt5ftphw10q6zmnr/tpWuQcwT0tjahLgGT79XLWluv/XqDN4QtmJdLqTQbsPzUuFvXQfgAYudutcrh92WvcDCTuy+PT3a5XyPddr0VVS/cv9V+btzjSvOZZQLtFxKEuGHID7eYvWKexVeO8khpRuk+vnVFVIer6SCGsau0KBsV56cs5UNlk+N+0IyH198vsEFaeRR+1NZQv8yue2Ty4/Ng6SdTGl+01z9ZtM/mZd5vjvBcYdiWonerxDQ3hBNEXPISa7M9li6CyLnAHVQBF5aoRCXFPLUOqAsXZuRFnc73n/98f34FrNaPzz99y/QspKo/ipdtaF0OiZ1YqNKYVs5b+Y7mt/22u7JhL9miuQXphbv1kCNdAJw4+dzsuc25KDA0fI9VAVzJirSjP3y9bos4FBm2QIkZSidwUSjfbWRW3mD6bDGPh+WNPdsOWJai3sHNWa+UmwGxiy20YKHZxFHETxcBJtuPextPs2+lvt3hibG7jgM5AVvNj4Moe3/ZoVCiC4M0/xovAAX40EwrFsrfuQt2FG4dS/jGXJhAS4MdGeuIKoxKxUvb6+SB5bRSXeOwajJM6/KcDFzeYMWgXorKwTjV5EbT+HrKThxF/pVtXm+6NtUC6EJSSq3HGgMBzd6UK6y0N1iGFuNQb61KZ+IiZ652OU4bCoOlyq/v3z8gYp+OA1T0zuf1Ji/gvCgsmzWZk5/RAzdbXkVVLZ3ku/KzXTscRiTf1HEM7zkTR1hcj2KUWtC/991hlYG7iUosmkzrn4cVN0bC/XZr8sGPRR1XMZMpGhuTD7d1BYTNBMU3iNmzPkNIMSUz2Ryqyr/r5aAW6PnlFC/pyaVkuznj/CKeWr375z907M0PFnLM9n3NIioB4QdLNHQPUE7/+OzjQJv4aH55UrFpys0jKMwIUgXe/erWACpEDR6TaTLDld0Oruo+DaVUcohFr/5i0DI4zIuzoBWn5/kU2tUrLte8CCdnbtksDs1pJmKoojRPGlEFBsFCYENLpKucjVRGKfqwRoTMM+LcSSpWhsEU9CbLhVA9Q6kKWo9MDjFZvLjYBvf4jCJTU8AjrXiPj8frJkbCWQVaNHakP7dwxAzrVMbMJxtKrNz3mwJuGB26ONtd97JxtIozhOxdwS2fNTcUAmldhki+qlDU6h7/ibrjAVMHRVFzV4Xr63iuJGZUxyX7rIl+bSPFlQUjsqxHUSAR3kxpokGyyddNZBuXZM9egXofzi3f/fzjOdFJilEucpF9ZcaFNaF7vfEUT4mzLWZS22CujeEJR8r0NnDx8wULfCYwsl/82QBgrV0PLb/DAYfjBkbDOhEpGpbf/xtZxsDevqlSKhHrVzxw48TH93nXL+ee9Ozm8Hj6YyfD2T7iClY8GULhwPEViWiBnwCLaEr29SpQpX1K6fJParuzckZgtVwf4HXLR11l/hv3n63Rb9kem1WhqsVv7wixw2Dkwug32qiBmBE7pkJRbhBUimvrxzV8HHrOu21TAFQ1cCbKyJn+mduYyrJoQ3hdAAv1hgcg6x/cSsuyBt/bGrTOeNNOjpf35nreBhy0mBosd0l0Y5y0q3DB2zQiIcz2lMjoWSjntv31j88mZMt7CqxZ8ZTIlhxvsUxKjs9s8/7x1GewfhoamGVxg7OgV+adOiO1nLNSpDqsU21f6M7Yj75MiIioqYrqj4uKFFf44SNvMGWfH6u50lzG9C7Nzh8f74f15Zo4yXdaKvthNkuBpXEXtZIXTDCaODCmkjHOLNYUMO17bsQQR4cHMuILG7CYpKEAl9E8GxgV427tHZeibx4eNwWiHm7QHo6Hw/fnrqY78pR/FyTqFfOP6X/Wnfk1zjDnl0vPdG97BFDkSNl9rlctKTRI0RgXlrJLXAwbIvyfl/eHx+0mJ31i3KzowgMm7d4wtDeQ8L5lrDdxLZrt6OTMTFmFs6DNcN1S3w0UsTOW+Ipi8/yPl2sd6W1Q40QvGmygK+Rp1uIJ7TFkWP79cX/IePNp/5QLON1OHn8lmnPo8kmIYkTsDVnMZCRqvcFqr6YMV+6O72KtULhH5m9e5srmV5EfDMWmxgXyUu2yFeN8ej0MiCQQciTGmLNKNT+3UostpFeXGmYzmvWsSdKQTRY5EwJL/kA7B+u9uh4Xxp+8TdvA/gizWREdZCdp78uVMwlj9ySCgNBsc6mgyvpbWLDtbptHmvfSOE6ApemIt///Aaw/jS4fOcrr12ODUsbALBZHyrW2Yb1OyLxkzknWn64qlT16zenhcn8+XLddRl6g3Vse0tK/kZabLqjEZlLcs9uJufLA0ij7ToyVsKAlEwhsaNZRpoksdL65VQnA8lGJytvujrI2ZVxCLmw05XgXX+8v742E2ASC9Z0M0Tiz9YXuWTM2Um1QQuONoWebLkN0EZ05A71k9NLldhMBtECFd/ImauTD9z8HFXIIkESUmqLS7dvTlk8kaT3lMuDCGC150tJqt4qgsbunm49ylhwBHfT0khmBrJG+PUyEEIg4zWs2d3PvYbaw4BHfvZBNe5R592JbtifAYn8OOMdIDHgmwoZnDhmXCegSfqWk/0Y1kxMm7X/4QglPHbKi/PDPp8fH7UqXlwh6kPFlsmqf7yVlWOk9BUvOob8+X1+/nk4nnRBmKdcP/fBKcDkBbzB6WMgphKLuaz02UGEBEcM8LWEF+5asaSJAAnT3mTmDture3nuQquVDji3PeXIdUHa20UaTDTXCbBTm95fT04V8faYHCMUErp7InRzbSh4AfS8VhmTeZKpIBixXofx3YMnqxGbLYpH0ol3JYapRzZ7RgiFRuoH0mKgi4pMc1t0BKuCVyPstU15YMpDk6Q38TJ69rRrmOeVd2LzZvjaeE2Gw57MkvUN8nhOHeDRgjNu53BDODVFXSJUiQ2tA2Rp8pzmubPeW99oX5dn5CdICkYTdWg8shdhkI+5/qnE6eq14o3DYfny8raEyaqSFkktzUImw+hIdFR8xXSs+bL/+8XZ6/nW5AFgkv7JupsDSwfw2DgnABHmThK62MM7XD7X55viwMhS7iPNQt/BbGOXndbjGZ32/5t5MN+albwUVwu2K4J9s3BxJ2RWAhaIMRLCkaxZEdtXxQ0RRtxTckZNW46rdRVLACGs97MuBJJ6UHbQC8g71NdMynpfzt1TYr7SlQSMXlZwVBBCb7fv9YbfJ6QiCGQ+xEfbgcgIq0szePXaqIRDnwDvrgO+XITVmmeFeEzURWF/thpL+XixWEt/J69ATun1Wd1Gis1D20KhgjtMdSBgv8vqrTIZKZgVZa0/zuNPZN7BcuDCNsqbAUq0Z6Hy8/Do0tYqo4eEpQ7YHZm6TPe8MmzgcTWyuJyxnHvrz5wc6lmqxLEBFTEznlkP0YEhIY+fNvMHJ/NteIFdpUIq73vawRcWJ38CbPdkWoozZ63MXR7Zg0bOVMai+Fu7WTMMo6VPgoPskyeP97djtGM6IE2crWmsR4jnyZo4vlzzQ1F9phSLbh2lhnBvaAJ3GTKKNe7CWi/p7nyzFpAMO2lA2dqq5QrhM21UEGlPd7B5+ttwMHSG+MEIeWG38kx2zMJHyk4vmlB+wbELdWBvjogu93zyvQEulhoCfHr0AByzRs7DRwsCvpVwU8+ks7cgJol4YiaJSArVI0HamJ4mNCo5laTdc6VjRk62g+uEd6Uw+Oae8Xt7WhSiwqucLUFYaXeECuIK5Iikxa1Ew7UHc+fnHfVOHGsQYUeJugUpe8fqPh0S7xYT3jZPXMzTbu3p+IQO3KgulDQVgqXdyutkqiXe6buoU+Z9aLMUVZBiuQzEU4r7dzJoeZFHXq/M7uD/77npsqONlLRuaF4oBXiW6tWCOCCIqMRxU9MVSYGRMNUG2TuDZoSoYAqzLELPtoZKwkyVxtu5Z7rkiqwS54LhxpmohxCDWpIn5CbKiBDL5buKTsum4mkMeSSt4kf+zy5i4+uzbhO/lQYHPKQPnNgI+HVolXFqxQJRYTFbThhEt7yRDO4nutLZOFNlGCxuvqCXtHke6xDhP+UR+/72pVHrTIbt7kzh/fL5HPV1G0aR5SVAFkfagljJSK8NpSBR5kfq8wF7Hf5wb3HC/L5cTNwU6MsUW1lugLfpYgiafw/OiqS6RCjPxYiPzC0wHwgJMz1wimS9732ZgK7vc3KYoo/zUgOaTo25basdVh4k4zoXS2+r0fczRUN3A+bRormfRTGJBuQ+r4m4i60ycmlZShIJOU9l4IUz5zMQi70bRRf4vu5rV4eVUsNHotlT7opfnDJsn5ca5HD7ZzNOcv4oqeVSgygwvwXBAlUurSueQzAnfBcNPG0qTLrq+rUtZzmB561TmaZ7l61D5S+SQEB9qsJzUBXmKGdJg+16bw7ByRqjsMSH06OJyJxQCW6bb+E2LwRZvjjJcfjOrT1u8FrhYvrgqut3rZZUwauAl1doSJ6FLKjaIv2M/EYoSDO03O65oegHzF0Nq+BarOSWbU56SBVTN/uzjxBvT4uGv9oApFYODP1HMZj2oVgHxzPEYVx60bI2tueafOXhq8JUTcWkUZnbXzarp8hq1NVXpkXOrRDZmtW+232dS24ph2w3cc4CJEvWDaIf3M7fpyz32Is5LLwoqdnfYtKCbgOWf9+1SnjT+onIF0iFij6T4+se1Yimcc9yu4DCtvnumNHP9OqQLlItr2ORyfVjTYpUlpBTz+cVD28aaibnyZvPWyGOzSN6fT6VaLF889T5nkRe7SvZdsSQnc+Z8Y+YsRk9iEWI98/tYJ0bvZla6Pr4GmybppfWxIK5U+lEDaMttJgt0FFgWYY3NaANWVWZNs/3ZFozXVTtQQ8plynDe/R33SjAZTY6XPYzc1/PT97lBjK7WDBzmNIXZljhYVxV7fSzbUm8FX744co6EIm4UyI0hUGwrCP5NBMgGm+rXZIkEWJEl0xSkwGfn6+66bVB7i1nKCwLKh+Y5/jfGGPX2fH7+BKcSbOfdZb1CzzOVIE3VGwurxPNQtU2h56g/iov+7ePz+/3t/bJtZExK3Jeuw+YwpWZ4+/v7IqWtkdBluh/Oewpbw0tgCT1Kk0h6Gp3K5YKOMmbZsIoZ4a9yFCqx1Wi0j8F1H/K5DsLh42kduNW7PMbEnj304lBTSo9WLrzlb5JSMyDxAyHzTSmi2NwTPAnTkMTrWIen99/p82cbkEPZZ+saAw6aftuwo1D+VYAl5sNXqkEEiTNIE70/F6FORIojUHst99sGX+eq9Rq2K67sTY550W2bZt/GHNxSorpV+hCCGqViqujnNAIXgFL//Hw5P1ze13BUpIFovCgV+nGySSc1w64KcGXBmaWHkjOBJzqien0+7dlyIneyTDbrQVoBETCe756/f718Pg5w2evvr+2QZZpyCdumTP+9ccnJTOvVcAlskh9e39/uv7EC4LXnpxOdFjZOWxHdYYc8TXYn7MwRJaepwTIqqDdZBiySmcQm81DZFvrHFT2Aukd8wqRZX56evrcJAhL1lgjkKo5HwEmsUcqbeWC5cpQN9mfr/qkrA2kykLxKXBAhdPgj/TEZbvV/GfQaCBBvElfeCslN0nEkt2sJwDaqjWk58bA5WRKDR1M9lkdN12yB+ReQ6U/vXRL4iMnwhZNlSVCj1mXIWinoGSuyiGG1EpTnUZpwtEZAytpJuvd1CiyLxckcJ5Kquj9wSvE0tFkPmAqwAMyxUWbAwrvuQxbmc5a6lQLI3dJv94+ny/YIbljCfnjTDTpAppNPVfF4//2ChAQMRSjZojCxlK6iEoam+2DI6jMOjyuwzmSZWZis1g/XriePp65BzMxXm4fLemCBOs6a4dCEsO//BSzvEcwliN+m4yey7kZgzdIkwSfC4bmWsJZ1/vj9dqDzjqsqSusulLXVyeb95Z+Fsjtsbb1J+EsdOina7ZZLgSn2PbdiGDMS/GZLvmmo6Qt1//G4h4+4YqA0eRqsAeB0s+ZJSZtlwpJWVJaakQ2gT4kzbkzq1p4WuMJ9f/j52tiY+SgDIWDVZIGJs1Ihwpzz/5TjprXgt6gDHmdIQO2zrvTNFFey4DZiKkA096cPsIfzoY/RZNXry+zKEOkruAFdziLcrABgqllwYBpz2/fwVbuuH+BAgIAuw4swd1Wt3SCEqtfj+xeM4v3LP36dN1JIsCZyglaA9MmtI++mZ/RqyjNkQipluKT7F8GBkovPun3TQFcjW+9X10wFd+6cFNqkDe2Eb6yyzU+b0ttLBqiSwZzMcOwWmz0QBEZxd+wOp3U3oJCaN2WaclL46/Mfh4rAskKtBeEWPiVJmB2lnHkXBBavi9HSrzRidUDtchOpd72t2VwqY1Ntab1/VtbR9ZuV7v0iw8vTE4k+noXjcOs3c1LUfcY7lbSrs+b61itpxazPeGg2Ok8ZxvOureAFlnALaYJCEoc6LK0wNQ75HCxxGLCMf0kB1AQw5PvK5P/m4f3lYXfp4kprjRIS/BewZqBrE8xNyfAcP5e4sViZ+PG17foGPvz18/OYVSHtDMXBxaZFdXM9rs/QT7m+fTwf1gXaclbJmsdGZSWwpn5LoxHVc1X+3EJKGeoiU7ZK0RIHJ61BCLA7Mrgk28CAZbQcjyteCZPnmEviE2lxwS1ZiTGTYuo5Y7TO91rma866513fb7scsVez/Xr5/EbXW4tSxqqZ7rFEnDp0oXBib42yIX6D9XVv2Jb7TEs2f/aif2HgBDCZ2Zkek4VlqqancVbNHZjCFpbv5cu5j+3V5Q3nTPdNhpKtXpnGOW6P9IX6DDlgGWzVZy41IIgKAqso0xJAdA0lHuT7WGP3DuOaBiwV/WWCZ2K9tmYkzBHYPV3+cUbYL2m9kSqnwGJuUcu27zTLygiPL/rjzeETXvTXY9fAfiDreAU3DWMYatAsR13GzRGU22HfP7/v+q4lsNQwzFoAyyzM6ALcGg+9bmZrlHmvGXFFclGb8JavD6ftYxFKnU8rK7/9H0xmzaT4QecyBkXHSVw5xbJ0oWwyXmOfh/HcSTGOYR/b/WG7vp5ffz6xePQQBzL8psDyyBIbjDOJki4PUyjMmEaPm8QnbKzFEiXHpVO8U55tkTiR/b9OF8O4yX1iy2zWvmijBR8xv4+Q18va0EpytNOx+p/TgwCyErjDXSxCruLaVDzJI4vHfKHAWrYx9aTAz6oMWFpsNFFwzXAdsCyr5UIK3QPvVChmaVVhqebl4/lYVOS90856rq5JXUkpNFkQM2WeUUkaJuoHlY7vy3bXowK6ezz1GZyyTJzO5+OdWyIYPsBZIiscVmAGSKueNdiZWSy7HOMEvIXyJnFuQuB8MfG+dY0sNs/wy2a9fvraZaLmGSiwGBMa2cyPVJjZI9rpDLVHYeEHHs42tRXaeoxi/wLkZQxe5Qoe8RFDou/nx90e6FFisALLngcdKpnRRPcoF+eBck10BT3R5ewwxxxOraqaSbQEuChxiCc82eo3PtZe6BgQhDOLVLDNYIPvk81407VHjpEjkoyqsxykJSlYZDBpU9mbKwWW6Cd4YKUtmuEVRG/opAxYpjyllA7+wQFLF3yzHlXMGbKNwILrqorT01MzMFxD7OmB5daPWZechSqarM1qteofPgGrlycoVuYIeLZPD3uQARdsDhBWlm7osoXN5f5wfr02eQ7Cp4+eASxHKLXAU5A1mi6PLD92MOeEwtA0m80w7I/r4+ntss0r7RW54UJDFMMO+8imIx5FPD1cKBujNp1hEJG0zK6HvZ/R0XUPd7GGkPAeqW2e91lIsoGSVkdfKN92V+K2IGbdXRvq9mr2ZhQI/CCuBFjt6+sqLsNUNwfMUhm4tSHxkfkyMiKV1KEN/3y7UXVh1eFyZQdPzOXhmP1yi81kLcCUiYt2NYQGLIJpovfmRq1p+3mLc/BqUG7gEoFAtOTdNmX7PESuTgPcaAI6q7pM8mFxqyqyLXlQd/+MxiwZO3x+pqIEOIzVAV6V0P7709v7r5eXl1/3OzEdRb97P2S4VNq0c8sFrT8B/HNl57EfcGOimZ9TnCUA1kR6yYILOwgs33C2bdCiDTZ0PahldX58Ol3++dihU0lKZM19qaNQsvxqjU5Zr8oZcvl00UKiPy3kiMJe7Kl3/uM6t2gfIMqLUpbathkIXKqiba1MfTfignN1M4l86/Uju8kEpmTXgiixXwqszffLkWODrAzN00CrWtbsmwJr7Ni4Ud15lLY7yHmgrKdmxICl+PZXzmYyDTi2TZxrxJH5J8GkN2ZtX8/2lqILZ6Yb3NiGzCK0DsNRAdZVzcXFG0/uRueXkrcj61CCQc3AtaeDQuOlzypOQ6rk4xRYZocXbSWEnWz3gxGlV/gH8KlLRIXF7rwtOHuh89P2tBJZuiou5rqStkZYxjE/rU2yS24jrDz0kv7HQvYpsJRjWcb4wLuhy1e791///H7gWPojnqx+w/qYQEvv5Ljgb0ZSd0w2d7POE1hkEx7mweXLu5Cfd7IjBj+nPpHBVpunFHYid5zULRmE9vQL3zmax4Hwb6o9Ysl0zutqhVEG8L4uHAyPvwbgVGaZ44UpCo/0YhMA/+MUWCrkBMEnlnNfwTFOGc1MgTW5cA7tdHOqXypJS5yhjNg5xq0mglObxdaEJoVQPHod9pd7aB7tOrBtAifj7V5aCSo69q6qjtXp0kaq26d9TlZiBdDF+/tKp28DpeONwDLSCoXjOJTddkDyMKxWRUvhd1hYiF/mJUuzaqJdM8StiouSCjz9is88cUWUyFh6D0lBBdZ05aCZ89/7JQram6Y5D9sCKy3Xr1//vL9/efnn/bHZHTrQxF9PX6dEolL7HnUeMuJVcRif1wtRRt6zvCtXSW01XGuSB3ceWNN9jMoatibwBsRd6/+HS0/WNddrVWTwu6V6nbK7tenxoJWzGzdpoZuhVdUkTk77ENcaW00h7a3BlROP+D8Wi/6GHYnd98vTtlDxWwnhRmCpnqWZFaFcuDBmERFYRQ7BM7oVK9qpKcJ/OBj1SuhHinR/7c4vEEkq6gLhdJak/MxOutg3R+XlpQmbHN5XMthm4bD9LhqWX2+bpCwjqunaI+y3BBmckc4U6CPnRR3HZQUjgAM+aXM59a2cLm79TGRErJWowFqI8A4hWJpRFTXb2wCiNfSFltDwGA0WztfpDisIgrCi2nSPJOEZ8jUfT7tuKOq6QK3pDPL/z5ESpxpXK6ZZR65K/pXhW3aNrBiqux2G/Lu4oBMdgeX8my1J0/Qw2SLRVw5vKibPgOU9OTsr7BpLLpRQZ3EPttBOi1mmpu3UD4O0gvRngV5oNw63WA95Cix3KYxmyr4Er3D++Pbxj/dtqIHyGAy7ZvYdTakjY/ldOgGe6rYfmsdnki6FMcSMx3kXq48GStaCKPfp/h+f2z3ItXieENc2TUKzZVsYrIdghCQEofv3f7whLzPxWGtqqqBqmp0uHZApg1om762lcHMKJCImp1ODbnPIQAwHTHnVNm8vz03BhXvCZZqPexZMQIenyscll+X0jmSKamWwLmRHuUtotBvh2zu2+eZGtZPikEQ06mBwwGR3xrOUxVosXWPbM5B23m3akGVbFUWCMcX74TCzc8dQK0o2lUwuu/H2RVBlwQgsoskIv4YsKgsEMOd9xVILBaxK+nvj3f0bdwVvIslzxXvG1Yr/eKNd8dNq6UyyCI4kN8+v227F+f7pfouJJIJu43SnofENwclx/FW+/efPG6Uk8cA40pyPKX/vsGazPLawkBqvSHugMfpEURGGwwHdh1VetEEXSg+a+w2ePjC/TsqMROD0wDVH0Cw/UnNjlX0qN2b3pzF2czxmIxnG24djH2tyyR2kVltWX2SrybL+gJOiVzC1uqjMDm+7fMVpTMlwAp3yshSWd0XMAgNnb66M+zYLDsOt509NkhrTIDLSCu4IxHsC6SGpSh7dUZLQscq8CcppiAZY+DhtG9jcrMUviFRn9ij6CE04hEVN5++nj1B4z0w117Jfk9cwvryOXFf7+5+m4iACAgEUkQ1ZahrG3E1Wu90y+qH/r/LH1X7VlhjyVjztE9HARovq+vVxKJLQ48oUUMfD1tt6cRNHRJ2VjPXidnf/CUa20hF9ZGg9UToBv7fU1QHnYYIoc4/Q9Pv7ikhTxwUtCJ5LnC2bFJHcVHG7ecPV3MXwXpLmCOzmaVuLMLaFrzYZjj4ozMn6ohUstRl+6EqsYHw9Xw+VAot2W2Dn60j0B3C1bY9onSIvcpDQcqDCboiOmmR7HIuyZNayEToxHsuAodtk3xDJ3LnswvC4MoNlF9PXbrIco39WDlclOCZ5JKkT3dSLHbavn/94Wh+b/b7Id4U4e9s+gZ9mcFWJM868YicrpgAWKYV+kxn+Uw1lOw1TDwk3T/syYhuaJIhU6HJ/9vJwFirfaPM5ENjCZhZDykIO0xvkN1n/fr/t8xXn27vrBRL9INN40RNfafAGayoToFqiHN5mtxapcXH5eCs4Xu4nnHzt0pom/m9sd28aU3y7gGTRUxNHDleW+CpRBPFKDXeQDY8oe3+pZDzDJScuPIP8iVOudhaUwIKcxU9D02yOFxG6A5aGEW+nVcKH0bGLLRc1jcKKMg5lMcQVgUXrKEQpnKTQWPAb7zjBP26yUjKe/CpL0yZYvSMbP7fl92Ox3HQSnPWnBylyJFgqmYjzdHM2yDGMjxC2SXa8PL0+bAvROCSsiEo3meX48dZyZunSDtFXKIdoppfOYvHphlSX5UPkqw+ZEdNOsvKQLsWtj+G744zMlm74a1GFM60Ti4QQxIouJ+r8VfWqG84/kKvQMp5VNae4coR9VQXTbFJXz5nSf3J4e9oyrB3blvy8rsXjY+NxPCCouAEL8UP/wJkpHC7FMkoCP1xSNJBuuP/Hy/vhqMmQW/NoRNhhhYtlnXFB+hzD4Ivq4VTp1K/moBPzcceVsS/rutL4gcjyYZ32kCJhwJVJUyQlAI+DrJg61SEMxxlnMMgL61w7oGUlM4k/RlzBssKT7YU87l2hl8pWg6UCC227EAUNoyWZBBlLUzZRhpYl7CY1CbioiIJRluThrtssqWDclMF5Q3HI5WRfKe6qhWp7WTFpshrHTz/Oov5aLUXwI6TGIwpJbmONpWAEFnVPrL/MXl260I+t7RLu+KxI/K1reKX+qw04VqS5oAeWx9U0dCN2FN766FKHurvuzjksp7YtzTBp9KHAUovh12OopsRQZxhV7DitxIunuaC/oEEKbzmsnz7et02/YcPbivu2t4GnUHW9TXdbvjyf30TF68DFo+7dfMda2zrF5WVLvoswv8SWa5FTE7uUJorGMm+ypMT8LCkrdRRopXaGk7Cerg48mZaBX3jtTkUfK6FcBfioTTCuq9RIlecjlupGv2w5VJpZ2Tkv8IIWd3sqJJtMKoIfgPaz4LSG4lN/upRMg6p0JRRjgl0I5rfxqZwxyb5xotzeLXtuqNyXrohkOqrd71cUwQbjcaI1IM4bt72yIUldfeE6JnYXWCFS2dggeYslwDIqhqO8mLju2OqUBEIvoSm24BQQ6G1ArzpyKhJ3yQeS0nfUIRC9AWb2dWSxhFVIalSyeJvlqQTqeWhYIJYwjrMr2EJ5u2/CwFkW51zF0cySzYo0UvX38GSzm3gF8+anpQksq4yZuPjbP7dtKpLj4m9UbM2AJQQbeVbi/SaLmYwVbCM5cWjVzJedxzZob8L1oyoCwWUzerQfrCGVu5hfbtDSmXuT0VVbiVHL0L+i0C8jCbxdxMnOgVTGK40HmNiEVoHnQV9mBsu1nKu+UhMvuCKdfZszyTa+vEHKUlRC3XUdkk5kiGJVVTi+PaHiz7DR30dp7s+8qCENnQaxbgWzNYn0NPsluj2ezWB0GQJriiu3dFi8zq0b1UyqZLVKKlleEYR+XYHiQ0dkvbaJOVFKwZZhtgFw2mLNIIvBqjERtQ+rwKr7LT5fHO9ZljFguU/kNM+qJkdqbTMHaXjTdiuKDk5mX7RtoeMXyf58PmShTQcxw6PlvbPrIIwnAouizVTMJKykM6LjvTNXnpobUUiBBey61BI/TfoI6GFMT7husvkYAfsl2Dh3OClJZXIO3RpObEvOn71r8WkymKHeb1u3xc/Gq0XmG+pavPxtkLQNUNO4bdEAIEtqSE9nEj1V0IDFtk4T4tLDXsOpZMPQwf1C/2q6DyYYAhO51Hf2IPPdPpyMFfPbpVehE2DZW/uu1t88rYQPAE28K30k6LgWNFZRCxo0Ik1/m6hERe0yLbfz0lgEIcCq4lVThngq8qNMSMylEqKXh7cb8U7YNqhlwiJW+5wpoUVY7lP4FkwJvVRChZ3h5Abtn5idOl9YsXuk5cd4uwVLM0mFQMgXZb3FTUQF2gOUubMcPeBC6l0jQ+Ju9md7OExvXif7CV2jhSow7CIzvfszQZBRX8idtrEtddJLWnnpanlnXEknxqUQllqBLO2zob+Zz0T56eRb+G5KE7LNeZgIx5F/XTGCRnayXYVgaKqkJHxNKlySMttvIJqDruwPC8EyB+OAJBS1KZgMXY1mFfWAdfQpk0YGLsaReAsxeUIRgCUGS/cVWKvQYKXYMs1wnZOdmd9fltlj16oBCJKYXTSTm8IBDvVSHxiLyR11UQt7+cAEvt1fuzyWzSx+VoTJu6y62HMSTuyyAmsck/WBm/L5wKHndCaq1jfduZfVLbfqtCSIArosyYoPnDtdZdQX4RAQrZzGwmx2p4FNocP+DnxeAg1UnEq8DjObybcc5c+o3+lZjSfmJLVuta+TQr/PmyOTBadRZszDClNEywXojSH9LDBXKKftBjt9l9QrZLPsw3e2+0gAslhRZcNbx8kfBr3mbfvTvgSSCazpfmdHXtGIUK57PtQF2GCso4ntvnYxSPT6Sqzzz0zK3nP4rUxly4zt0OhnHumeRHufUad+El+ZcpnEIlpq4kacpudCS+Uco2ws9Vr9P6rk6XZeI5bMpXRkfMY23udgHiM3fNwe81b3ExgD0jqE3RCrYakGaylasXNKKcIrigXn8O/jehhunj4/f54ODa2Wzk6lc5aexVfiRdfXXRtD335Vw2jWEk/UZD6zxh6WmhRSQolUxGTpqyDyfviTquR6dIsoujhbt2lVO7WKeCJOSg7hOL6iUa4GkVIjS/Kl2FSv5yYK5o6haAsEdAP8JHS0sg4drqcM2vwBfTY3ya1AuRXDJz206vRdKHMPFsRH0A5Yqu83D6yY3g3IXAxYYYJ5esrha7RQsqqkuLJAjR/Xl0+1YK0QkzHpEVh/HYFloPQlV6lB8tVplmQoosigFG8lJs4tWH9BA+CyWAmfzjexpBNsa9yLdsgArBSZX5/XldNu0qvAIZICvj3SZVJxv0Gt3JAl4PJsBMctYCeGbeOHm83piUt6LkcMvKTsZhUYyUCOIvqUFagwXM7DQjY1Kdewc233espjVgRLSQSXsmsM9Fu0cpxLNUEaWn2+M3/1I2N3Js+pfzXux+T1EvN0l6b8AkefsMyJO88CSkUhLsVH8I+MdukjrcEbtIzzhcjL7cmY8F88UY7u0PQs0IXv0Yf2G5G46eNM8Syqef6b/IFZEnWFwjvFzWm4hJsTmKLLUhaHFfinFHoEuUpEYA1X9GlqqBxMFFaOhQfuVkhgWSznJcT5rcZ5J7DEmkhJZbbAESUZPHGZ5+RX2KBVksWSmYvYdr5m9CTZl5DNZpZ00ZbFqwxPRURC274AAKy9ZuYnBBeqS0q6WDF8h3NhiZzFrGoXDFp+3y4KKNkNRFkPb49oFGVD33f98fDzmOO0loE8fc2R2iJLvWAxYHZ6eAIV9/0ogoJZ3gJaJTEVhSKyNPf7+2nxBVIEjSo8ap7M+24rJvxhk8kGrHL5Z19LUzaeUBhaJC+HhyRQyWojFZma0jLTrf2qyKLAurVBfXOFvuHveSQuAGM41mMWe1zVTRmaLhTzS5r0hA9lLXG9lgwr0I+t9m2x48a/tNRl9KuOktso0QYqPGJTRw4uRuzkHxVkCiwc2A2CNYmjZKoadIWkAstV0OY4SZkBRiLOAI97VCIGNK5+so9ZBgGsss3DW58RPNwoERAV5FxKnSgiHgdq+DNMTvC7LybQIJeb3fOpQFYSCQDgLd/Z/w0rpnu+cuxduVxP/c4wuanAD8uRKSL2pJI9FsR/vL8+wv+F1P/u1t+HQjfX0csCtN35noqB12GfJeCXM8sW6otoSWkQ7Wr3TlZnRJHYCR1/M6gxejBxPFesmrcTkUh4Z2NIgWG+Oz01oV9r63l+JCNsAH95Dokt1jh1INR6NyNlb9oexnXwYedeS8pODxt/U8TzO9F4MoPlgTUqINwIskCyZs+zqkEX0mX0Wb9G0Se2pPQ30P12CYDfcTGG5O7KqDlv7zQAm3A+XU5qwJJBg5TtAc5r1gM8OGVN8rxhjGVVPEzWrJKIIN+vXz/QiT/Cz5VpqWLJZrAw5lSWdQeyAmGTUeYbLzAanrCBhN8a0OCnglk5bu9fXiHQ3WQihjbq4MtP8tt9M2Ae3AQJxvRLlCD4omyGogZ7PGMiK6c0Ybe9J2XdBH3mwnven1/+8fLrYb3C5azbHBN9FIzkIyGMHuelDM2KrkmfTZDnCQDT2EGABaW9euZuOZyNhaekyP96+cfVKyQ6j76MK7jp3eF+m0MDxWr9Gk1IuKDuVMvOuGdTYPnSHdmF5H+YupoWHsN2xjxDQqzpEnvpXar1FaeEM8hLfaY5TEXpfTDhZWxdqmv4ELBYU5lZQZOZrymwOOOSTGTwVCeLmJTD/kY6Isz+0rrKmqYlkovmelmf8JbGVuQnimqYjALkcLT4sIHp0DVNl5eR8uNUnQqRVZXsNjHtLKvJgVxtTbCp8vv+jxdsQG/LBF+BnLA5vv3j/vCwk0bMnemserVh0XX3T+otpA7xrIq0vW1cjkDrLLbYxtjvufTz164uS6R/Omol5Ybs9H44vWHGAv2SOoO07rrrN5IUahfMUUe8ProFqzYPZHQh37CZAouV6TC9c7jiu2phOS32R/CrHlqYa76JrYGpkJKFTPL353tkNWZctXVImNi8CX2x3rwJsOirlZFGYGV0pX7PNStZDN4BSQOW7TpWF2YTGZpXLJNVJSotSuyIcf2GnjUHXbpirnBKMFZgGbK80INu5LYJVZ8A2nWyq2dPGyvtETS9DkNSoz286bbvYHJAe9PSRC1CVsXu9ZX+hcfnP7+/T11Rp6IuqstTI7B9kn6dwOZVBTs6NAyGq3mEpsv9pQ2FNEe3GqEA/M+36zEzp6ED/VPTgPVEJqBKjYmgoEDcklmhpoJlCx+4e3x67KHd8c8P1FwrYGYJPobb4YmFPXl3OUNvdWj643rXcd0LZnlEUMpqVnorrSHzbxbLr+l10NKo1ESnQMNxMtyg3FrSzNSrecBIGaZRuPQvRXgYU8VQ2NjStKy3w6pfHzNGfLy6Ei7JfaUXnOzc8BmZUcb18axbtnI1XzVj2YasFZkrNGMj1sO3DF3fsmOuZM0GDuPX3KuULK2mh1/4rtMUwAMLL+a2z+qEB/RXhOrpBurt0jkvqB0TlhOj+PR+QjTMNlLbDsPw8PL9UMQBT4JugyanWl0BLH9gnOg6yPJnI86FMYC1QapBWhyVA1SsyuSpXj+uWUtfhS8lEBnpn+5fV8p2n6yT8Z6bc9Dj0PptmsjkeyDI4k2KkfqttidoKgw7nHwMB4uDAZtRAfa7DKILb6ft9fzPj3eqRANYlzM32km6OuLKaLH+brI9M37BNHw3BvhtKkvzjZJNtOs8ajysoVS4Pa6HFjnDPislWHd9C1ivNMfIzGZ3JoF9aQ+JPAm6bWkyUYBDPaGxOIQpVxez24Ui2vB2FxaMumS/738AyweMuj61eEDd0Kr4Un/g3OxmKC2Yxk8dbZwCizATZOkyH782uA+NpKeNG21VWjnCuquWzAz/fF/VxfWny0BqSRArHdZPT3nJieG5ToZK9vXwYrD6eDp//bpAmRaPJJdGM7LPEMx023O/yTk95th9WpJ//McJnFf+JVAl5bAUL/fP924KrClTQPnPXk+cw0OJ5JDwMdb5S+o6Hy7/fOo2x9eeaGExhHZAgRWQfp/358sD3PcPplHzDL66weREFS38NjN5Dv3dHKVjcKtNW8RrRo/0uQUC4bklvBwNJdJlkzp0eL9/tj2MUjeInpza7LGfvoTdKDHrh7A5oesmtvCLvNhkUdMojOB4Z7a7KA/mgQLLFccWBS/rNMgCqqbAcjtSyi5hpm9KLRzxITOWRHo+rEzy9QymrtDniH5LlMpD7wIl+qrWvsUxnvpp1VtR3X9EVJmvH06d7O4J0QXO8sNDXoXclakNQt7K5tlw9fN6fjs9PpwfN2SicNMrYqcSUyPrz69Nokk1HwQTuWs+37JIYi58JFNLg3N9/4VRYJaV/FZouxqmk2hXz3hiQx7S1uHNWJhhp6dYNdeXj1O3vpCzHLDsnurWL5a3EKqT+PX0/nPebjskoCU33A2wqQHXqk86yHY3FVm2xH6Enh02mQzrOY8bsMhdG2yuyrdyQt3x9HlaH7lPj4Q0y148sDgAm1UlLO36tGtQLqxEzS/iw+XlWpz2gYnJG650RKZuOC4i5s23CBLsFebWDPotA8R/WCwbNS0S5QUIsngD0hh8nX1MLzBXjoSuAZ4CyykIGGq0Db/sACzP0TX6nCdS2TC2rH7ur+tdjwXhtWgD0EqSF7c9N/tVqBLfytEqThJhfX3df99jFdP2fLl0BaOqKJS1+KvD6f5+X0pv8dZsB9mWP9/rSqrsxLGSi2gBt5fXjgwOcUxu8d7k4qob4IMpO13PQyTJwpLiC+JN8+7hA67nclipOUOxTEE9lyw1jtv+8dd5SHAzE2ZjfNNunaVKgvCtJGey2B1zuJrdGdonhykjJ0jRlcqiMjvyFHEZEYTun78fTkepFgVyE3Ve0jabk0RdFBiheFx3ayi+NQBXXCIZ153o00QLt0uZb3+cAis7phyw8HVXvcvVbMaxUVcr8FZ/mshRySmTiXNTLoMvkpW8eS/LhmhfrKfjR0OMMDFd16CJQHykGqVf0DrSbzyDTAecst2u2V3OPeAUiCYKyf8kCmGmchOKodduLoqaHCB+e9xev74uh+3j2/0LqpBxWZUJAquk6IG2C3ihapWcDk25/vVxDPm/AixHo4xChBtYdB8vbQ7axnNGh0Rg4aQVWLcQot6UABWUNYT0ybVSzeEDMjDPOwpUCtZKzfPxtvg6FDUesCcxjvRjpQtZRbUlcYKxo1XPHFsPd9PDB0+DM2p2OFIyL448G46NHizVNePt6qz7+XzeSeoZjI1NQsu6qXiGz49d34I30tToghbckrvvdd2M+D/nvqh0L2c4Bdb+nODR8TRp3VC1h8mSBrIrO9lh9tcCavaxQ5gHG60WcVjy1OLjiU8lqXKKLE+0Hose2mX3klWL4iBLdWy1rm+qqrCAAktHZdeb5nwP0XJW7xgu2ehf/PjxeUyimZXZYbKzzfevD2wh3DegPr/985+v58uv+zVsOhf2rlgUx8j6Vtclslajuh3l4/oBYoWmOmDs4bkIDMfFBuk3raLp8I2eSfIPnqyzWGG1en3b7guEgXEk0mVs5jxhKQ+eiVIUZFDW11SLFA2cbv/4AGZbyucRPwJm+WE5XOGWAWyhH4mn8KPmf7B9FZhW4fla4VyJPzIPFNnuSrNCyuISHM9oDfPr5z+eYSDjSpi3evGVlKd3s9o8krCyZKu0kN1R+XXXb1RkQNNUc7lsaWvPyI8V3Ibb703C4YxRroF/O0RwEMDEOKk+aoSOQCUtK5ibhBgiGxOKDcp+m8d0OaFwUbzZxHUfnYcJnwvRAkHJgbwwo/3wmzy/yFMIhD7WrKCKuOZjxtBFUnrp/cWb+3+89swNlcwfVW3+fHn+OW2KPCtWh++fw253+PrqMhQgN4jP2rxJUCHh2hGYWjdbuUi65srN2Hcc2BHBbHtokpjtvaHboDrhWNjWzlCnhL+xvgtMfpUMWKv/DuwOKy7+DViyHc5IUK9QXsBsLvDGu252GKjL110Cf0kJUB6iWQrezmmXLJlg3jkxeAcsDEGxvwwURi2Y/44PJhYpBVCVbmPMDpf9zM23kMXWP3/cD1JqEI880ufxFdIt71fomCnTPukKCmfhm96epLQzKRPravKxXGXzdeX5H2/og4p5GzmPMwzvqB8ze+fqAGPOYU485a4lY3eJrZChzGyLhcrQ0FiYXIjbLUCMGczVBplJmIWHUyiylTY5bqcyLvtRmfxyT5mKFbIYHTPgZmONgkKM8n3swtkIrLh9OD1+XQf0SDAf1x2et8fd5R5iiqtVt90lcZaFOHDBlgtC2nQ7sjrvENBbpouzc1MrfGQjZpuHXsbXjU0nkbKFWUZiBJlJppVRCLo8XJ8euW2MZaKih+7yU8f4rm1DLenymAfSNFwBfn4CQTSQWBzs33KYYbcWXHJ7X5HROnmYt+mSJHGa4v1qyOq4dAR+L9JqwJIXl2JDtTog6mw12Zst1DYLd0v3IyfHhjm0CjNHiDALmXEM999YmuHBQmwZPUVNlVHPWdd/gMhyLGuWbJ2nGjIw3wMm17Zvgpr4pgU83X2Ij894dkFY0ZvIIQJ08rhWMhyrKNG3dwG5TlLOlG/P0eq3nk2XKPKlZlsNxUMuCSOPKl83bVLHkv1ShjeYizOheGX/6+X7WC0UWCQsh8n6tIbyyp5Kwm2bX5+228dfl77JQYeCR8wSPthtX6q+tmnfZ2XWxKz60iPJ/bEnQAv3CMJhi+rARAx19aybKdaD5yr1NKpSr7HG65CzvdxiK9Tbrzf0hVZDI+rD7nJxcqneZBHvYGG6R7w7C3JG2lekEjOjm/gQi3dEwnYmIhnD/X2/3u0ZIFCG3SJmR/7HOemhjTbZBpnsjnm3rnHzzDsqvUgb8CFqXE0IB24EJBRwPx/aUIxX8/HRRBpo3oxUHC/dhl9siK34vhSUf4xAnzdgkUsP3rZMhrlVhfhNGRITYCmVueZdEFyZUpOMJ7+hrdqIRBOMqxto1MEKP8emO5al6ZHf5wjC5WGZTwaxxrkZ1EWTjPwWfGrQS5biCW23C9Wb293h4dexXmp6s2A2X26uh8sF6gd5DXITRL3eTqdf5w5eEMi0FnYaxaHk80YmSXGTBmoQGBWCJ6LukNeYfWOmBZtCt/1rZ8eHjX/Q3VRzN0fKkO34+c/n07rvj/1uvcVqtc1+KCrcGDVLShkI0IAqJFYMMq0M6HeztQ8FSPJi2YpmRuNAzHBLJRNChHFo7K05I+3vgRUlVatCzCgPT77Fc5h3K2qh2plwom+hefEiyrrjw7otA9U61NZBfXgHvUPGCw9fT01krDu/1W8c43Dt+EV8eWPGuaS1HVdYzqunhwxjNZ5pLFYPP8dMyMSmb3WfLQ9X7gOurqfX+3uxmXbwGqohMia4hBZuHjNeA1gRfJIi1GhAXvOA0Kt7eDXSv8gs1M9orec72aoGTdHXHRVF3fqHEBIxu/eX+x2VTzhQNTzd33+tNxtOjJMlxfifVlKYKVbPgGMM9w2MJ43gzKJ3SyiYcGq9NB5WpaY7jKj98jgxy/IZ/SzDsugRaHBmo27RTl33Rcb9PWrRfMGouBaMrbjmSYBlHM+gQKE24aCdiONhqdi04Wv6xFWBCbaurqzjJ1faFSUVWeYsOJItkb3kOnmD/Hi1LxfWcriNIOyPg3HU/cuhJSIUpLqjuzjvtGtIT3DZheKLXLxihMfxkDyr2bJgh5fx+80kX36+z0awCTDVYI1O3hr6sxxnZztopLnZZjVJAWieNzxvokQyLA3ynX4hnwN+Fvbt2s0Tov3QBsoJLPsWr7deZkWdgdUnNesZ0ngFlhVnkYjmCI62W7oY4WkGZGs1hy22QzZtHDF4rrL1xwv6wPu6jFK41YF3mFyJ1AGLsR7Op+a/cDO3OnILAwkFzROYrDfU1bKqpMtvzIrQKo8rBqMQTw/LMDKn2K9qhr7GYneKSuFqG9lSgnLmt5By7Qea4OHmlbUs+Z7f/xew5rAvr49tJNwNmnsL0VwjxYClrKw7W3Ih2u4Z5WwaffSVHRqmsuT96dfHK4CaKsdNCw/4xP1TU0bSOQdkns9YOsMMcrov1YcvShmFZrau5nM7vjSkKVfXDRw2zkVBZdgyATdfMhcB91xEC3UUvAx5Rr7Nmfm1PMip6fjUhtkCmFK5Ns3p1wVcVBtHWCgDSGGqtYQKFXN8ZZFLzVo2VZqvwovzRzqAcQK961gVMxIJB5Lubbt+vhYlowUm2Jt/flzBXamRlLGwKj1CAEVCKYKdRC9S0HNRDRBgqbXyrtkBK4x7IEtE2qfzvDrbIM+hjiTI82YpnshsFb6P7fKnW47UV4Gt8CtnaghtCV0EJ549H5JAo4MJsHRlM0xc8/2UqD7xTBqUEl/5WTfZxWPqrBMPHaZZxRpHnjhOPXkPJRon+/X962O3GaQjoWLKcypWVcUV2xAD7UUs2revfClUMS9j7bygZ/otkm1WSpJlk7Vywnjr5Jpb+V6q4zx8J9QTRkRAoc4jXWm1qgNHGVMN2bToCxlxxI1FBoIbGhobgs8vi8xxtl//E0k40njtrdOM4JgZpmCcqc/Ifl0MQgerjfiPWTBfxPhVQcnpTpTfKbFIqc8lb2OyhibjY1cjlOLLoGh8OD1x8zPSLRLwlnwcJJd19apFRI+zzDNxtamyf7z7tnyHBwi9D5j0lZx7erNFMfKPzmJZEC6cVGlzRtxwM7cygI1HQPe3xruxiklgEa1WY5EKdBG3238O9Dy+keKIo8wcw/b5UV6TTWMdGXYNVwDbzpxAFb68AYsEX15T2Kemsh6huJB26F+fNhVDz3TsngahCLaunt4SP1UYX+47WR3vw6oRWPhPgXXpEm3t8eOaIDEAEOWPWTq3lM5yjDHG8quhGUDmDJDgQpKFXjMejqxLMg2yoni1jSNulWxjEQOsknyTiXrq8enX/QUyE7C+S7osZQMvNDqPYNAklga9HR+bHGI+P7FABcjQ+kQQN1WVplCViiRoovYphbOeVvt1pwaKelirVXM+mEoj/K9koKku5BQbOYv0/serkqtW04W6CX3efGQoNrHEMofCOqweWHI/IUVqVUIXafH51RwlyHilbYKKv9h6EJlplJsbL81H6Pfioe2H68tzRpt041ntWpak586uO2pSSwyiI5QGPlfTYfykGjt6TgIsXGUCK0IDfxOnc0PQLKifv++HVHNBteLaeF0AtWBnPCCbM5LyrD1jXiQdxRBNIX+aFma/ruFMQhOT8SKweC8gSjfGkjRv+sgYotzFpKxefNgV7bDTZW+ek28RBI0DdAafPq9Dka36gY2BDAS9r+d1B5W40/Pl9Hg6HHv080scwvTmwu8lR/iBFZof1goLfmuLL6prJEDskgQzd03jAvEaKPhcqUGDJsAKhy+IDHfsKRKFadWiVf841KXU+hCvSV9FPqEOtLnRn3DTlhJ2mtOyapoFKBpohcP3jnpPlHWzK2H3k+K2dkjyJvJFWt8LSMh3clkqOwc2Bas6dldmeapkJ9uWB9fRHsDGu1Bc2wuWWrkbtfVk06jgNK2XldamzBmujhFP78emJc7BJeK+TFjuBM1SqdnQMqXDP385gQVaWkECrr0ENvFQ748Y3THzFvUPr7/6SuUgNcZ3v9oAdbT+HGjhKDBiPowmNgSnPH/oU5YOddxTGp3uxFXES5GFAcL1x+VACo1WNr0orgbpMthb5q8gg0BxEFsItsdufb7/fnq8PmCFdw9BxPP7z9dDN6BOja3itZR9KkAsxsBopQQUKq6gOdOj8j7QXhFrFiSByp7UOGEECD2CXXhLBrtwtsXbbtN1BQnIHAGNqXKz2mWiiBBvxLoRPLxShJZgRjfCrzkSR70ss+LmnSR4MFZofXnm5gTH7xmVz2/+c2hN80Mp49YVtZZ83VIq1JHkDgIswCgyMVfrBOKvqu7XP35q6eb6f9HEoMI6nciVzK2b6GR9PbSoN+9g5cbgcYUKUPJlFDNhNsTB0iBsHy/PVDBzPtM2MopFBy22DPNax1j5Gulx/Xx+HCQomYsGnxZkDGZAYv+cC7Ak0hAo8Nouyd9NOhg/15c02Buw2Ew2YX9OmT++/OOQLMVxToBl8e6t7HPOyY6viwKFwsfd7gqGyOW6zrOErOYe7AMsCrr//uf9P++fz+fztsn3RdF0KJuLKOWSyh/NsHm4/7qq3jgpRcHMJtJrlCFwuqtrwZlVTjTig6b16XzYbflsBswShV6XNBsZ/mjXBaDjQ1cbh9NuRpiDSBjqFia9yp75YSMsONLVT8+hTjUTcj2Ut3Hjbqrrtetub7FzidbELdahmUmrmToXbf1GbuGVrcYUf4e++D4wbSn+m46zzJDUXRJi2/qD1uBwjG5DFr94BJYgEt6t6mCwee2WLSsswZxkumO/78r5SM2TkH5ukJ8zQM6X3tUt8k2f79a7DfuhFWWOdWhtriwAQrbLl0Y3sfqRkB5FIipm981xK9kg86Vfm1O2MGuW/fMfW+X9GLDMF7oeH+42PBFYkj22y/7zH5/vcIDbFXwa+/8Iy5tVRqr3+Z+fv/75DpXghpLmPRgbPfDIL4J3TJp8ePzH5yP469oorEpmoEIqJ7CiqrnsuEKCGYKEBZfL+8NaSxRcYEXeaExJMxIcLmxZ0FyN6lRitXTa63FglmGEZXdHvTaaVqMPh2SmqbRuqjFq7A2uynTPzJ8EWMqhSGw7n6lPUC1raUO0WqENlpJojaPWUmXtPy6VXz3uJJxCbIk9GjdUk0Bd++jn7fyWSq8Vps5QWiOr2GgdjHpbKvZlPQINiqNpq8aGDJzyAnrdSJ/j+taFhkhEuCCv6MHVfX9++/r+upwO/Qb0DHUxMXUJREQfZO+xDTwTZq6QCAO5umrPPMHLPZ824Xxbnt+fBmtlm4qANhLs1Tj4tIEK6XaHKYHd5drvsyKzTnKACL1gizfvu67bnjCWzN2z+IZddzzuOpldT5FF7vMNPGnfSaZJfoDQ4GTgJIPvQnXp7dLF7GilRNIyuR6evtckE7AHzGJMRgGTPs/aZPjnaROKsZjmfLr8EjHAyzufaKukGbK8M9Tx9GX2KGuC8O+668D2bt7g93EzllUGbOI/yXTbmAWyELqMhZTqVbsXEZE6VYdgGBZfPvOFyuEojmhCssefz0zKXvo3AnBTCHLjmH6hniqqGy+fgsNZaPrgIVjJWdLWq20/1HG2UI/qhrFcicIy20UxsxOAwZScKkVWBh1NPb5Oj69NkfMxr1CFLnIlQgehGCczWUJ9DMJhV6c2TDIleNkEoFufdIfk7fC6qZzKpNPXkRfjje+3G/BVkhhHhdCAQohhFbFaIPzAOIYnA5borThHGoaUpjp1+wx7rtbo7DHwSop9X9Pu1Ktmha9J42271BW78ZAnFWgtrx+HlpIzHMCCa9w+vX0/ovIKzIU6TERRawyUrvbPGE9h1ueLCU4NKmBtF2HNIQejxqA1BvCKqzsVQ3xoQgZiNBSTkZEb3ULtqP3KAjShiaJDJdQDK2iLPJQCjQ+UFqHMwYzIEqmkZf59LoVToMCSTmKy/sdrPbOAyIutEVr+7liw55eqOs3oWwbvdlfDbNvUbQ7CB2V1KOPidVVN28tx5OjNq5AXQ3ozVp1M2Zi/fL1hrOABkc1e1QES3I8E/yP2aelFI2XsTNa4h/X2VQYXZ0hnOfnkaEjT2VJYrBTgOV1qPo/eofMzKNcFlYVWh6XlqPKa8Y1YG+WdsQAqZV3+LCsZGi6zXZHQffYDShTSMG5i7UtyyBRh+e6646ipztHE1EE/vDw1FHNrE46kttuXf277po4rdm/4aXRMcPd4fXx/hyLUfwBLxcWkTLV96RLWVXmKIubocmPbk8yss36+7LOQxSw/MeKB5S2W6ajcqjROJQNQfn6xOA+htIF9zj5L7zxtwM/ww2SdPoZUG0GOObysrlA0Vs0NzfMFVxNojfJPo+iSWjvAIStnVqlBT74thsNRYqR4Ns55q89RYBnnBouWCWWpshp9gFQCcpg5ChgLT2a2UA+V5yR+A1ec1rcdvuIRlCfSXA6JliOZmWvGS2CNm/EhvE3izALQD0lkUoFpG7udw9bmrFAJwEUxFClZaq0bXYdIKoJkeKbIQJ4DuRqyiwi044LfL5JJS2Pg0bDAFfz6fton/Lc0pi9Flezp+8ilyUlLidH+FaLYWS17/VTVmvWzLMem96G7JkvtMbuysH5yJtcsFV626mZtZYd9oetV41zJIPkcrIL8u/8Alh3eFcpNEcK+1caEPhg1XWyrVq36TWAZF3TSrWcB5BdkoaUl5hRsghbUn1U69/thzYcaGdAfVgpR/SKRGRKFjrxSguOSrY8M845DFSFZRhnNgOU0EPFjBBbILKGJMhmcBZyym2TJDCDWR581nxjsiYIhDNXaBFM4VPoLVoKbjw/XWviyAJ5pKPnhdwMWz5dFswxTGESWX3RA7bUjLJ6UBf3qZfBB/NYq2x6rk1I8WFojDYelIjgKngcLBpyaV0VYPTi/VDcP/8TyIprwloMkZKa/rwv4TPhOEPpOv369SoIgqIpEXh+PFv6lzze290vwopCRM5B3oAzPutZc2YvS/dsIi5AcrveJEzH809QVGrLME7r1RTIkFy+9V5gjQOAH1H6npU2yfm+6H8uKlOXhZQeTpdtw1WD27FBXMx5zSqvrN5qlG0Nh/jLOO924PelNrCEkQ8piQKq0ZzPOSBujjJZbAaOuUESfWfUaIztJ+qTyRR430xMBlrT39nCvLcqTtSZbesgdZQ4fhtnpgNoPS5YanPPcLTq1hNpEQZcgaadUm3GJitT1j4kRr01LnmpoQroysU/mYTPtVTt9Pza1RcJdaphRVkU8sRSp7HTwjd47Oe6u58v5dEL2SB5Rf7z2bFbnm2N/QNniqRGLRtsbCCMfiQwX8O77a80VktPBFJmZU9kaZMWIPN0SbAOVMssUWLSz4Er9q60rUW8UPYLOl2yiRDJEhIhTKICIbuvyIV9jO+//UKnq7v+HHMyud3bGlhAUfVZXpyPfGvbIuuOXwVZbMRT6M1TDITpEgS0Errg0xpOOJMEtvegNZWw8V2CW/nzm7GCC5qB4gJAOMpKUzDQTNwSyfHTWQ8uA5dfWAcPc19jaulRc3jkSqWVWwciHhcFaShrOd/7BWAPaJpxrqdbbU5tiRZCAn2URRO6VsDDj/XXH7dTzhE24QKyT3IWklLV4Rc5gglk/er9Gyu3X4v5euJO6BJopvmw9dby5UVIjVvEr3wxJNmrkWSNajdZyLw5qJ+rujTSS4C9mu5HmVQqWvoPASgbqMODw1a/vn4AWkpttVulmsuZwfMRv9hXSAkEV00iR8ioSeMnlvpsHagAdsMRDATBGxEmyaOTcloDLjxrwDFUgrKvwYZV5bb7QA2sw5KY9Q5os0RImiLjZNuYpJKGKmdOZ3TMNySemn8c3tgBHxBz37ycWTkL2UulzlnD284UOZ/uFLcrYUXvja/DGSDEOL2w94xztWupmszRKQT7MuH/Cgcb25fUBKC2sOM95YKbRDVQBcDalo6KvqIpZJFxUh+fnVVvPccnx6iq3E5B5ECBPQwk8bn59r0WCI5iotrfVbYwsgktrZWLgX1slJk4SZiCQO1VYS9WBZVw774AI+Hv3DVarh2Xk95GBQGBFqkXEYct+YhuHaVYmaC9XVX3e7VDTX1X79eFwOKHGWmMEJV+CVamrk+ndcWNkKiDOug5tGy+wTcybGK6YRRH4SumlHP7lq3L+eIpCrki2HeRPtNjAcsMQWF4QmBGWRiWiMxvNQ8aLJcLlY5fGOMCD9hKfSVlHurHCBHE1j+NfpceXXYZ+FhwgeTvNMstSfjRhNmqcRWfBe+xWihhjwB+WZE5kyfWi5EMrtNwYrMeaLQ8IvTtrZMCSUMFWR4WC6EVrLVKHrN/J+m5/R+55YaYCrCC/Pr1jTlIUvCOpnzK3r6B4grQMq6fy+nR522rGDivHxNYaB+YIbXxZOCBls0NMpE1XEms57OSXc0tMZZ1657t/4xeDi41nC7BEV3HOtKGALRUNelp7/6FVmYBbUEPW90pOfK6vh+vp+vT9DIGeDdC2zZHySHuGwOItZfmO7aEOg+6SCjirZEjn8k7FznSBoUnbAiC4o8yJBUMUPWeUdYhnKiLux73/8Y87MVguvJHLYtrpspMEQR9c8e4HTOorhE2Y1fSbQUA/DIVt8R+6gaqsVH2/Xzd1V0OKZlk/UjKAM3a6BczJztEE9/LCTkZEv2qpVLwVopwluqvCP4py4BNl47oFL1JHWwXP+hL2vEnsrtPtYWY1JS+wjLf0upWaczK7lxmM5vbr5XOzqpZAElcQZxVSxevz7bA7nVH0oQd+PGaFqWqMe2aQAOveeqPsM5BpmzX0fowDyu79rAUT1hStWzQWa+VxhAKMZB7D/NpCdLwC6QBTGi4d7LTUh9GpXTxxpmo/qG2UZWw41udz1x227ArlrMNK6d32ds9ksxSU1MjL9VxeK9fIpjq6bemzbiMHLJmo6pUT5dTgYqPDPrBh716OQIDlnZC2IFwviCKD0DTC+t33p/2WaiQMCwxXstw857TX2D0/domEmb28YUzy++m6Rg15rQmzAEvXCch675xpkt9LwfEof1jkJSaF+yybCu0tCnZl4A+zuNeduwNk6sbsAQxXHvj8T/EvBQe9C4Y9LY95nNGcM/US6dZs942lTscNzWu2rA5vT7fXy+Xy/fH28/O4W9cVtU92eNspzRx9qmfQkN4g22rs0bzjWzcLmk2wpy/HSErNLpxS82ClvOEakmGtmc8ADpsjZElUFSLYDuiBxcOQpSP+RE6he/24ivHpq15mOQL5nN59RgZnSMaCaT9ujhwctXEBU9ZUgtT03slmxs1Me1TWMcbB/zVJw7BIovNbLPVRsd/DAqnEnr7I6YBFEcTl4fm8x9S6Tl6OTPTMfdwgB2uNn9KX+m33TxK3zy8UDPh1ul12NToN4uCJLNKFJSXODoc2S1kVUjPrcvjB5SLVbpKnGFvaI0aDQD90bYoE9j5vnr+PeFU5HXucHJ1Dzs2p8QBYSkq2g2PQwzcgidvkVimp+IOn4fNxfajxmV9fXr6uHQr9OaOUbNmu1sc6Q1DQoaAlZk6VKM1OAUwGLJcKzraHZUizv//IKEPYj1IqigYPkl/SP9S6JTfOkYHmhywIWMskeigyYTrrbskfxyAtU5c5w5ARIuXYzsfDvuJ24RQPt3BwkpmQvLR/XV03IjExEpEa2mBb0IUUxIlPJ53maH6wlm7Cqy2CUpGvv7e6e5vQclmhBu241oYtrxVyD+BgUmH99bqDI5tpjKPWmXdTNyMi6Lr3Dt+XHBgWVKcH1Tn5eazSSKsobPuiNFJTGCldPf+CJbiuiqlSaZBYuPtv9kSXGKBXmnZHbrhef3zATAUkUdaXh2vGMlTfa9CERZhJvXEIUzx5jmzsgGVOV2+ePSZjpAXbjTwNLx8/1123r6/QRBL9ywLJOquKcbuuwTXYXcEGp9HSNU4aF/ER9ouRbQo23Bwj6q4/v0a0zGZlvLqA2ToTBTFUDoAlV0X9+nQSV2UCvSk3qEFuj9lgS0wGVUuZ+6GrI718uzofsPcd4MoYwMt9sDEgaq1AVjbXaYqposdzyESeV/Z7LVNl+lrj1/sYgT0Y6VX9/YgN1oIsv0zjTnMaW2prZhWHLqrqNvvHw+22XxBYOhh5r4QdEf/LoeTdGyyDpMZnYB/Ai/A+fV8RuosvpOAdMwApHTANQ6sizjhKKWQWQlQOSwJs4En6smdoqeSb19tXByuXV5vz7nBraMSZddoMicvUBwzQUZxP2bTsqam04v0a/ju9cTbUAFlFjHu+PW4qLTYirNO1U2WkPAKwL7fISCA4ir/C/5KJ5BCNr04Nwj0Vo6irIzCqPw9JL5VisPZSPH5WX0H2n8DyNQWOGoDDjAtn0wwuM9S3sguvEQyQJYeQ0uEEs/Ov1yuCxG2GYomWs+wboFy6OcNTMgV2agwGLMsd+M4cZxUT6d7FFnB6Ofj4+eEiBCbjbcqWyTubMpTHzWHf5gvi289hvdpW3Qk2qwxK1VCiTbB9Dvv1nnIHw6a3AyVITMfj44VKcq8wxstsMQeqhM8/cTGpFPJJJkmYfM2bZGwpo10k4wxTPee8XmUcp0tjWd8aI017PFkfC8HsUNTIW20ZnRGaNLt7xvDiX/pFs1ant+4ADfTt4eW0qTJW26OCyb0Aa8LfatMly1FtwPlyyo0T3AJq3mbxELQiPbBQz2swuL/CaLIAyw/xDjXneHguqpouI0XYJI9bxhDkSA5txE+XQzgY3FlP1kjDUoIUuo+swZnn7fPDr92Wly4uaYIDbRZRKZKq2NmWOgDijOR1/AInWVPGMCo1mou+i0effSOWLXy/1BTlGkqA3nnZRLvy2nJjJlnuX947ykFmzdP31+txFYszFlxp4ef2lA0LkDYJasDagHF7vLw8PcKrgPEoU3typ6TMwDMPyK5RA0dVlMuuZI3McTit6JFEnMbZPFfZcs4MAOEnDrRW6+c15Xhs3HMILM21+MJhjuoR5ZP9TjUNTXrpIIMgTT6l8o/vWJxZZ9z8CKMkMwY4RolXTQ+WOgob6c4AEhNs7K6vl+GXaf1Fi26z7F4wWWgWazB04KlLCi4vnmzGX3Bl6NGWaQhOPXVN1SeoS7dDBF6saU+nopx0ldOkvb+8H7dcgYsLyLKcrkwNuZZ2Cfpjjjgj0fKsHYpl3dCn5Y7xkMbPdxruiAtWnz+pSTm45+bO1PQ10VRwqGeI1h/PEDmDfi0UUk8/n5vcgGX7DsK4e745NriC2NsZ4begpbcDxayBdwc/W1hHKtmgNp67CU3AWfLvoHpbZ4nMhVnrWwolC5BHi3T/KHprWhgQI75o9utNzuyHhADX4/AhgEqixRBCYuXB2AhAlv9dv+pZkUUmGXRO3yBHeeDkQRLK6f7FZN2UrksBoTqY6m8ypIcz5V6SWOqqZX12DGDF7evh+rARupGcF4FlTCGXPw01bmWM33oEVu/tizhJm8sqay17WaxsP2bKIXKj/6I68DbjiqJCt+luNSKsRIj0kXSzhZkVBhwOQwYspWvPynLph8hk0IRodGd/af/xo/T31CI51kCW36dHzrsNxqklF1dm3KHN6TkrA5FqJjks23eoOMgzikNk83dHVfPvKX04TI8n2i6QTh0Oj5BfXkgfxCR5gdl7Dz8Lu3VZV9DGEbNifmOfaKt27bLe5DAj8u6aKKfNenOulzkirkxyC9N4t70XMoZRBEKF1T5WD6z+MMtlZxOlObbTXqscfR0+B+pftXagy5A43tzlE0HZJJDBUR1ndNs27OY6ox/nyGE+Xs6y3dVUdntb9Vd/DEVuDeje0/Ult1FUC9NS7bJC1HPZ8HN2J9UdmPlmD2LeQqjoVsUxq75sUpF+FiuBBxybr00FxavQdQb86BJNkQ0C5kaD8odVcCQbZQ8Pw3PI41QeR+cc7ty14JMn5Fvd4p01VbdIJFlwG1mKRcaFAbLem9KEXbNbzGznr95MV+4HLjFHgjJK21SHTbag17CWvMnzGBXdbKvNV/CVA9YV+z0wkxjYhixJhayGBN4+OKge354eT+CL79cYvwQS6Jj68gNT00iCNuDKZrKZo/jfDpvdxA7HtOE1DtyNwCZOyfjJr0cHyOSh4CRAAzOthLWUVHRFtNNlMEzpLvwZhBhPHw8fZ9uo/seBwYKhQoGahyLLb2CyeLyXBLCUStROO7y3WCwDlic88bNJeKbsXNUtsAymBBMrXZ+bUsskLOIDZNILRR+oOr2iSIdGsDz3Q19ITAZyr7dxyFa1+Pshsrw2cLKqAhQ53KyDKLCpD6fqiZcAmMSbNt3O5f72cIChENpKHs/hHpfVaruJfB/Js8RUTqcEAONsAShWj62MyhGgfteNPXXKWcKhhSyZzAdPrU11xwaZbGmQAFfbJfoqTGpCsmVQem/3Eg3t3o6I+tMc6JvnVaUzi/eWJYv/IbB8gdwDyx/WOdJBkYIaKusliiEJl//LtI0ZPxhRPejkMYRns7GM5adj807mLOxqS4EZ6lR7qMveVrkNLllwq+xd4EoP8Ye9lKW505707ZA1Dqo2NNE5v5TA6+U6zRMuTXDTfBrLsi+4vTSBehsG5LGIj3A2EdNMX++X84Fy3HYvPQWPnFdK57Z1OtzbYLfb3ziZxWsKhijqDnnQdPiXMYOQpPBei9grMjo7hkPVwRPOJIGtvdeZUPdO6kVpaGQKCZzfCL6tO8kKI7/6XDgYOqt4L2mEBSY6w0E56yjbxhz9xHOWlVQFQwu1LPGOqUxE5fm23nS7n+/1CiHRz65Nc5HiyfdNPtcJAwQWyBQ0+Bn3m8sH7C+Dl5osHf+Xh3NRwQma5r2fqWSJWRdY49cktv2OvJ5cV0gnIVZqkBM6TnWAEOIbfSKrBPsYyzpqOP75T0WWkZYoBeFzCw8sv9EVF32i3HsD1sCZ4rPpp3E+2YSW71kqmuWPNTMQE3cOVxE7hqyh5s3x5eN6vFasCqrbMmEhKYFvmqbZrZexIUurOkNsKbCiFemHwJC6fGUM6mvh3YqIAZ5S+mNzqj75d0sVhWRA+xhFfF6N3mDA0gJXGFHeNRdiAJj/GzKJHD0LZ2WviPdWYPnCDfeOkSeCH4bXxbhKA4Y4imAl00EciRjMlIWLFIpZVbU/Xy+3uuoypjyMHKIYB6mSXgQIwGKYa9bJhuP90u7hGl7lYaBv0u/GG6i+64SiCFVTQ8CIsfDVXJOsazAUBwYs/gwvExWsf2548FWo3G+pMz84RJbbRfF7L/g7bPFosk1kMdEd9cByFs+V5xSPcmW1jimqeNB8l0aF+aR5zrFCrsTNmsPPyxG2vxHs6KPPx4g5MAjMX9+feHhlO4RvuzjP3/vCIF2G2hkdq/1G6V45i2TjEcGxqEUEbky8n96whYCC+BGJjGxPC7CshuO4X8gXOUbTsocAF9VUO2ZZ2jQwTNnLmk6J4xbjtdXZiHTF4fZ2qkFF28YCq5lyiXAEMJkw4asVV62kWyzHW8oOm6hEu4L1P6NPa+0St6BfAuwnZH2s7IHFy0bFJJtjtiE6316RnrGGYnGFQrR+WDK5ojbG/RjLzkw7jJAsHdGyRmXs6bBMw0GUNQQWceWRJU/ZQP1pWBwR+n+cNctwjGqCB5b9+N8G2sX+02prfky2LLL8BSGptxC6NREe1HKetqv96e3l8/j08bNSbSlvPEKkyQ0l1y+7Jg1UlMZvV3PI0vhnjO5fORU5eJydpFAT2xOGAIowyNJCtPnQONIRaF8y66Ej5RFQYgqUZI242kuDAVcUMi2XNXWL2cLZdKdubkQugylf1oAlV9JKHsL0IrBYE318eL/um1q2Ekijkf9KwRhXCbhWIg58zeO1jkWTmiZfskabLVLnzFqDa6Hwiy9MOr0YvfgqOY1AV5uXDlXGs7jT1TG6pRDdBl8NwawxyUMj8EZ6+6JZnPYgo/NLl61u51YSK9n24oH1TxzDMAvA8iMAYr9MQtDwL3Z1mT1mSSj7KyxWM2D93T0yJnjXd/J/k4g9aYQMapylsMykN4a6e9atn19+vtAjWbd5pLlZCOO/yFfXt+93tExvh00j0b7IYN77Pfb2rGm4mcLWqwqApO53aYUak6wbjGI6IF1BKHU4q6/q0SNrzGNK0CSFE94gYtzkUEESXo5ahAw8IKGtDp/njBr7vn3uxzh1qNgBS8huVCiiBOr68fh03FeZdLcELzhhsdAiE7xYpJTBx0NXf12XpZQzrHWo08z+fNWQ2Jv0sbvByhmse81MASyBiAe805WgeDIdEmmMbsJa8g1cim2R6O5OO3TSVqlF6duvCqJxb7t5wb2rsr2ciFBgeWj1G1WHs3i6WKuX4uJGmKxBywHPvW7o5JIf/XGxWIZHU2TWTwd6GIPnMNuHTgiRJFesNo0YTEfzLbinn6ev99fX6x6PK48t5SReL98/+Oe6QeNkyweczy0PlwZbCiYblsK4ikNhT8TyvN8toSXQtC1CGtTH2dHjJPfUi2Dwi69PW1ld1PxQ4OJYLgy86f350lOZFhAH2K8h7aU5HNw4h+0Id3tVraxhKoqF8L7BQqcsoV68qJar/bnbdZtMZlO0eGaLdcgMYXsinAgNMaouu7yUtmFP37ZAwBQicdhTP3A0A2AB0sY+irgH2jvoQdVSe16qeDny/Ug01PCJ51UGefbhDgmSXqRPFNSYsIpAAHhdKoeUn5joGQIL2BBcKar8ehU9+tMQmwUxgLdrAmDJUIx3qXCFMsqgwLIc2HZtq/prkV0jiQatUY20H0k77ENEtfevn9MXds/FDGcThl7tGhcfs2W71zUqkbjcumd1LHsqNPxRBonyLWaScqGcDu9ZY4QjveO6wXie7cE1ZL2JqBT1Mc8I6Lvn1hdWF8wbSRKTbi8Qq2VU7ojlNwbXsFw8CtQD6mefl5sIFhvAXijccjP17hxNqqrmeN4uEFhu2LZxPk7wRWVNmEvqO1nAvfs4pPgu4q7P+Akr/Vfdmslae+OFw68AkOBBgYWJNu8FefiqpQ91UJDWOoSGZqQTng/S3fchGTNeUYGbxvvXW4bWJoRA4olSSOHdHLD00FKW4mpYNFVZCDkJM0GqEV6tKckEgNrrWIxFC2Yjjr1SlV0IEibrXwjP1ePzspV76EfkjE1xLdPu+9dlrWvwldEFohD6cCvolpxW+Zy7+1xnFsDqy0YKh6kMQEJYtoIJzDZUobyjk822+NquYANm7I+Z0oYQz+zob5TTjJjKrATUZ7THY9hi2bAsE7Kpnz4wkiTxewRk7Y+qIGodA131SvdhytSWFrIQG+dg2u2PO3jlIq1uFQyf9nKmnJ2RZUH4+FQNx8nqzOTpkLqChu/M8j9qdN391sND2SOFpS7jY49SnYE1RosZNqIScHDwZ7ld3oT4kV5k/RmLoVOrRlsmNRXuZqueDuho4c4sq2H5/e/DIIvAYgndYOXrD9yGoevBDDASiScgiALaeBmLsgyXf1ICPk3VUErRhIfQh3jeZdyIxJvESZlNxY1tuD1IhbBy5+P765whetHNSaSd4DZQvGSD/gY7e9rBtv7ZvYr0DYpQ5bLrqjRGOnDgj90duxWCbNq/tIrZ97aE0YuL2D0xZOEwKc2J9NAT0SV3SqzMLWXKNoN/PT/tOg6RlxEHkTYHicfMh/Dfe2uHDxnu0uZtMNKw3qYizRqvnuo0LkmMoog3cIqSFtlQgec9cvSuywI1nb1IiHbVlT3H1zez64Hl6Wf3NDbm2GbxCKZgIALsyxQm00PXMgnHDOWVwsDi27R+yccS3cu7iIWwLlG7eoXI2Rw3rIAMsTJTgNHeiZm9cZj63z+SoNxPJMgkMej+v/ktKt6++SnH4bkL0q0jtGwS3irT1w/r/Ypb+KKEyRps1gfWXgILsk4VLg1ZdyT1yrkUeBB78fFgRVIfZ8sfjZIQxssMVaAMNu754/np+XaXya4coYTEIPTRMBhFQgeVeXilYYWW6YyYqDr74jrcr/osKCRJYglM7LcAWMo95dxzA/kDS+VtgM02RshtN5VS0rT2p8dDswhE54SiWifgE7MMKVp4zES1iqtLPkzJKUzbWmYC2IBVSJk78198C86bLL97Erjy8wtFJitOHLDMUuDwwOIK2GB857TgxY1O68vShKkdlUSBNYnTFWZHceYBBdECx3kaIktQ8R+o0sIW/t583EA2lj0zIisdiRyKIcsySn6bAEs6iIOnwpR6i2aiM94ExWjWbqoaFquU0R3YlQ6J4ccrRDFQxFmuQMeMhK0bR7L+G8nSIgKwzB9OldchQGUquBAGJtKBdvP58vV8re/KmZgb4UWVTY6Sn9LFeeVcNGqQN2SxGs8ZHtW7TidmN8wtxXk50VuPK9ngkgJasKrQJ2S41Pcy6ejNe/S8bRkceHv4WkUqvSwjeiR2nZ66NlYzbeRHx5bRMZisywhwZAN+cmJYZFAQEDrysYbAuhubKqHtZRr9xcDu0351QgYsOuwk+s318XRyeNIeNzpl7nnJmgpM5vP2eY+50TnH+vLU1Fl14yohYcGVdnfUL7p43uNO5YBsNs9qaVlBIPe6QT600t/aLigPLb1/k4omU2XMKRPTIWsjYYbYYPs1e/wEMfPXzwk7Ui7nSqpFJL8hFyMRriw4DVey38WsSRDF28TgZK6jGgzOlj/IVsrojrfHsaVnGbm02hMaFgiVS+Oqm/bdAJGsKPANY3mHOCfzxfb2xe2KG1xQIt0ddrvj556jIqN7a+aR2cv38Lgyts7LN0WDlE9E15gdXt6xoyNK9FPIQ6IVLRospXUsudkYSPTA8qm/T/1oT5QpbsgSzHEufjAcNpvbvsAeWK425IAFfeSSRs6FnrgSWIV5LccmTiZensBibWCRN29o1leJDAZ2pdGpdIeKX1ZnkXx/OFzxd85kWSPRZMLbQoh1/yFcxxdVU6UvbH9s+thcOjURmyHlBvQMOhQV0lTX+KKBViCEqZ8vKsbzjcnXBZOOdonsLmL4znWo4A0WnAMKEqOaJzL9Cm6T0ejDsjnmVBW781J1EngvkRRrk1upvPaw2yokT2nUZGAqOl66BJVAoghYElhDSpfl1XW7XXWPtwOSTkyBpXBws7FRXkOnKCLhio2ZLrrD16GcCqyUTQN9p4ePddW6sbiJU6C2EXRy2dKs3iykI9HPev03sAANYeBpvESMyF8RWH6K6ndc1DVcd+9DFeUzy57D36LwfggsimqeboXwPJwgGJlBQiGtH9+/To+iEIAS5VzDd1NmMSWpYeXB/foHQ3L5QwILcTwOsZuO9byFX7U1iMOTVEqq2UL5Mde1Yql4HiglUeREZtG6atb1IhSRZpSkQ1GBz7P6+IZw64JR19WqPlB4IN+yjRLiQFDP+kQRCqCKOSxZwR6g1qYJ0LTjakDEFxpOOu4ObhGRoswTz9O3BT2eXO4k6nBCggHTzIcs4YSLfdwKHMBuUVfLtukeT+uu25MTxFxOKNvwvAIsHl4Tu0zxwbJqptGTDdUtnp8okhYXqtWDVzBcqaS1jARW3XMVox7tJ+4MHcMmC74SW76gbgurh8CC7sI9gKXzL0MFTf6084SjciLvos+DACv+ueQ9l/bO2J+MsQ7f6IisQlngNNmubEkGvtGUagRWhqt/4dc/Xe8QXwxYfyXHxoClqRTBvc2Wqg6m/HnT+eTpDjkParX4QzzRpFRgybxsWGL2/nQUpT+yrwN5YmVOd7nBztHNIxzir4f32647n1cwVDYbjkAKqEIowvZL3GKCqclKEprkbkTcLChKD/aUmQQruICxtV480cyeSib3VojyvGHoo+hKeVPsABHcugZixSYkVW8RCO6Oh8fT4fa94Q5++kqibtrr+6kXDLgUgJpjUoJz23JmbYcUc/244iXA3ws1WIFFhXNhdlN9H8FmSOjb3R1QRBVn9gd9KcstyNaautY7kpFvAckd8zGKUw3nbLbMUAzkdZD2/PyqZ36LptOxIGGfayhfU11BMs1OsdcNI2553wkhg5WZLMNVDyzCRAUiFPJyEnMQR7zunJlTmCye8xBYln1Iq5EaKbYjQDxzDWBdl2KKUCCaKDKURZmyItrun+gVL7fDGRaLbC4h2gBFwJjGVlDSvZ423MejfxBlRd8Q7qnfHCJLkbgP5Ues1s7qqukFegNHe0rHx2ieOAoLmfWQw0EtypvVHiKuh+vXx8P7YzMH4lmDAwT9GdAHcuhbAAfwxMzvHLDGM4aCi+0RJqkUbXQFFs23mONICmXVGcRtPCx2d70EqI1kETfW4cC9UNR48SEtqmj4NLIaiBbpnftzWGMYNi4DHSDx4yyjcn75zt2uQ/J/PLDKPT51F6te3TT9tTNik+eI/c1wZcDyZS2LsTTIUpRIi9r5NSpoz+KEPtk/RV4Dw5NTnXiXAWsaW4wHfpkAq96gjE0FwYKT9nJIcAyc6G6SbyLr5XJuM6+uxflWyaHwlXyu/dcRdCVyOSkMG4z9NJ4fC1bZ4SjO+OB7p0e7Kf9/7wW6/Gwo/sYkwPhrnGD+wDErCDext/PV+rzZr9c7Tuwc1lQKCqg4pcwWa+UGZagqNBKsBf8BrHCe0LevzutuuaDOYswS1gxGWSgN6ZK1jKzeZSzg6XCcHdbNMWBYveyPVlnvuQAwUfgDFYoJ+FzYT/m0QmMCJ4U5WQi5YUhGD7Jfv7B83wNL/I0uk8q+Hn5tEHUQWLP9w7UUuU55cgECRtn/H1c8fEVrCCydV+fIJMUwRazLcl3aXSdU4nHVAwtmTsXUxTXB5mDmsIWQbod6FdzbVFE1Fntgc4kB2rxP3y+YXOoyGrYZD124O1MtHg6QrTHI31Rs4+TobPVD04NGBDOHsMjSqTJpbIeIEfhx1w1X5gl1GR1TMeOyz4p+tmCsTLEZLNYB45+7x+dvNA1A+GxXVF8IZoHEWtJOo3KUUccl7A91cbelqvB94Ux0sTCt32FzAwcoEqrA0OvTJnbQV7leMxXUv/fjeGIWeJgftLERXZoxEF0gjdfo4iOK0+iPORKntYj8IqtRXI4NQS6gGhWby27fU9xU+1fceJld399qrnnDR4lO7/lUzLTJzpnBGiJriCsPLPNrxIcVk3mnKGPHqeLJVEM6W0c0EGw0XClPQqQ9C0JapwULFBlTDHY/3fZpzOl9f4ynql45CclZaDePb7+eqtS6PTPd38ODG1vKrG5l+2+bc9Ka9sp3Plx8qwtGKD4d2AZUSe7Eu2lZZnA9BV1E0FQ532JbypGXljShlBAMytPX8fh6ua03j6efy/FYU2uuKEw2cZSUyWAznyh52GoEQSbs/bKgywOeCvh96iosOPdaFOxOS0SQNfvXh7c2ZTNLnI7YWwvjlfLmwiQh59zZgmYDFidejLkQBmhGa/3B8WtttY6b+4Fu99QaqX4aZ1TebkinvRNw1EhK0OXdz1M7D3kpZ9XhqxzrYFJPy2I9dGCw+l7hkE8zAJbaH75LMANIiNc8pqyNa5E6jVmy6oe7GYR9nbrFfOMgB4uSF/TxZ13Vqe0b1r9Tip4UQMMQTqFdY/gvpaOgUqoBizaLVfA2a+ssllH32dg3mV3EYcBiwDBKsnZiAxSoS9AveWD1I05+En88Y8aj8m82WiE+Vfs77CB9fX5/oLuzarF3/enjsq4wDEMSIN10ECfD8Q8nZceftuRyKhKJEFHRR4Rq6FBJr9KSbNcZCTRl3jaPP19CJgrhDI1/S/aLxo+2HNWib3wMfmalZRFYvNWCJMhps4Jp1CsT2vLLX1V1AFPbA8Ut65XMXyu0bGRfphosy3DQK4zb408ly8lG8/Z0TPSH+9r7f1osxdEQWAIpfqcuv3dUWN28P9L6Pml7WeiKQT2yAMUeWJJmBJB+shV18TZdFCHTnqfPx2cRhHSdeN9mVhmvGa/wft3E4iEmCVNzHPgf3gxWI5ZzDd5xBTxH8u4/2WngnTMzJP2ZwErSOFRgCUHiblgo97RUI7NIi0eNsrWqZbf89sRGwW6zJ7TXx49f1129QaTNwkMYy6awQZ6gyfAQWMB5AVwFU0dwAJJaEDraLJ8zZAzQiczWULXpNuwq8HRx8OEziqLgSjm/Rk9ixNW7wj/gG+80mRuRgECX76nYymKU50qHl3TvhD1fVq0Mqz0FrELLRlwkqkK/6frSlEnCfbTZ60rzSYLd93T+ObBYZp/k8PaKkPLFdT8VgkwjDI2CLnO9aMfZyVpeYDrUPRKFJjgx+WluVw2n3NJUQ6NKLZbcPT4pZkpw6Mi+BByVqLFOmPqHEyqZJjRmwCcYnVwobbffHjoLQ/yafjLpgnmuBXteSP6MpsgEltUOHbXbLyrWMjhXZw1ND5st+8vD5fT9dN5smrZanW+vX7fjccfN4HgQoqnjenpc0bpPxBXaSySokmAcejAqm8j8z+YgIgtQscrbwwHKBNUyEmk3zSQcxG1V1FATgX/kqSUIupQnCwMTIufGO+P62CM71o+l23sADQyD20yzwxXzHRDjCmmLjDThkLDMgIXY8HhgPx1souw1QodPf9QzXpzFsmIoD2+0/DyrnWsPrN+LOiEZh4oFnisl/0STVpE1PAgsJWHKYBU1xwEPpP98TBe7h5dGdi2adbZSeG8i2O4LclIhAqWVhIl0dygWn2XQ7dS1lhSo6YHlbZABi4tFgkxmeRB6RoUq+UpsfW93yd8nv7JfoyyWdIfAolr08vTw9nj4en8+XI+barvaXb9efl1uVUr5hWjiBZ4NWGrqZNhKLQ8zxriMQTIzYIlwJQPFuH5+//w57c7gbnEbDZi0DDD1RwUYBOqAJOPV3HjdlQKgFVL2eqTJFJdiqSNLyhnt8XClkzyFq/WaLG7phq5GGqnRJqR9AV4sSRC1u5RrdgGsjZbseRI0WD3r3XClXBmD0wBWQ16i18JnqdaKRswVrOdNGtNIP7X9WB9iMWRabiNps/I5naqIdJmhO4tOnGb9/Ex+oLKvnHPOvpJQqsBFDjmeT47WcoWZqWU0M1Hxe5ctE1hm1K2tMiY7lEK9M0b8LZzL1JJ/oU951T05Z9fvGdbj7b84xBN2L78eN+fT5XJdr2vo0m6rzesDMvBlXjXxTAtmw0RTHbuQYG2SPwT/aBlTOEiBRZY/Z1e5nOcHVZa3XYdZwIw6Vl2sQxtjT1CmjfW4cs0+veoKLBIGtKaJhDhPJKxkqdOCb02R6IDLVGI97ckM9BynMe2R7RxhJKgFD7fGYMaVNFzdgNtQx/g7S0D/7IFlRsu1BYWEhaPf6cDDPoKkhf7Ko0wqQth2sGuZtFWACiEn3vQeaWHegEWOQCs9VS1r24LfuLt8ogIvxGX93LZZx3sSibWAwGUWQ3OLLFNy4rk3ZcX5fLK8xKibwhbBZUL+f/TSOyLvjGuQ0CZU8zIgV11DHgXWYCjPM2rk0ODf+KoSYk2T/Oflsu5QH31/OzcZ8kFQaICslyNkJNPEb8Lz/EFrK5d0wLp8IaSs4DZSusxYxfeDQMtxzfrz/f3hqWsyLs+iPmLMMquQ44lrsw92eAb0nywEtn1jtix9nOTpTBYEjPlHqvMlbXAZtWzntn7Xi2PwrBFEIfrTQ82As8EWf8LXRKsDSEDzeNE4g4V3FWD9dQgsY8h4QPVqNMPNCs6zC7AR3sWMR9XUq5B1XC8SuEgTUbDKl/UKuVIznbNb4qZtdDor787H2zb2Kyr8R7Rum7b0ODy4B1WlkY0pHBlFsaKuVnVa2EZuWgZXb8eIvaqBGDVGWkBJ1G0WMH2vO9KdZdAOiR/Scn0OvAP3YfwfvSoK5+sUJnImj78+fh2aVX1+e3htslQWb1WPH79ua8SCfrhWDbm0eWxeCADREl2BAHFXU4KnpHSDJrocCJM6L2oouCaI3FMUTtmKz6XxkIheLXvpxsvBF2e5KEKrwDKc2bVEJ5kzl6TEMux3w+EISIS2nwdqMYdj6CQllzN5/tUTmOKhN+CIe9CXX7TPuJrpvEkldNdbrcCySQhLAEnR8+tfhof+geDJhbmOZljkOAFbP6Ll/aBZRpG9k9cIlCkQmVZLlojyPbA0dy+WebP7rLQwzvO2Tl+/m93C3XnWVKs1JalAz9o2DfZM1TUo6IkoYaoApvUx7uRNFZw0gtq1jptrllfHh1/YaLYUKp9EtGax+iV0RlDkYXoztsFJ28dF8/H+69rm29Xh+eW7A8mYOgxLbBK9QnXRmGD97mTZLSLw4T4IFnkDEMyyx6dligdkAWl32q8CQT9KrKQ54m9ZeF92x26J32Z1nbPtA/qQ9cKH9RG3InggvAZcoYatEIBDqNiMTAVYVl0AYri3b5VpEMU43i3PZMiCguNE0WbblEm78NrtvAQc3m3Pl48z2N9dMPYLjT1DzwPLWMhip9y+Kj+03RfQRd6NeOFll52R+xTOj9ZchpiJrBqiXJZ+KhAVhCx1c1vmSkYciQNr61LSJ96ezykfEuXVqMhJ37fS5STkkTS7t01VtVuIxx+OR8S43XqfFdOx5S3WiuWGVVdoUBW3OFE9xzXQePs8cA3jKuMWEDoXA5b/oGZllR3gi4hSWhbGcH64PF7hAbP2jD75pSKzJ16gWPC42+/pthRZelOs3ktSO3vN3CkULSD9gNonViXzRZYLrkNbpC0MFAphHA+XEWigddWt1xCJQ/IbFQCc8ZR9JZP/+ikbNxikW2FHqvoDkmMHyhfoRAFtrlahZFi/aE+5SBrZ8ZurBE1K2XHux99MYcBqxCbjKpNqu/d3SCOS2nBn4sJWHnVzzG76y2dzxhbD1yGBR0wWo1gndMeqf/dxY8PFNWlV/TuLx86rqclQvolQM5ebxcRWaLvF/xSFXaAk5bQvcPUGUkVOtFD0wSAisq6bVVNvNuvjCduuIPm9Tmc2nd+vzb2jP6MyJq4Ny5EBbyr85+Z6rjcHClBFVZcKIUHEvkQPyJBlaZZPK80r4vWtrRx1oFxkMQCCdaKnrz0MDwO+anPYL8VtTW2DimSCmtXLmFfIFUqrarW5Mjz/2m26rm74Wbrd4cpM4NpJcwrcWSV9JHFzuRzqaiublikjppMVXoYOsDeaCwPbvr7y20irZbN53S6DMIm3qDSab5Z+WLldZbjejq3KPEpOcRbJmmZlgvTqlKYIayUgngWJP+eX7+MJqYGPUj2whkM5HlgWqfNK43ds/w2BNbYKrgoDzLEs+WWtRsjsT9ScsrS0aK9nx9JTy5Oy2S0mbiejl2ufBLBGc90FipdlGD5UC7emMSlKq0WMkJadwf3uEVpSj+t1F02kG0rhRGvw02KZD9a9axxg2Lab07GmJnVMHZe2iZnEQs/d08G9JxyMC6vXUZ6bcP4BLNjJBUK9cgEV+3pX5dKUabmDEWeWBsIvloMmwS6MnD6s0eb2/f7w/vXMKRfZ+V7CHy6rzfH7ctytUkZTqhAoupUxJ4Gej2sWYmN0o93OKr3Hd762ZMGHOkU0cYT6Bf8BQMr2rzg0zYr76YydSLQyEjIKxQtKfhiE9NGLWFYU6A3ot471OZrBS2xI9nT59bwMhsDyvpBJoOJK4KSoMv0yHgYyX0Hv5TRck/7p1yF33o3oB+9wM08TKRHDRFq4YhaUy2+utQLBNvso5CiWlZW2WEyA1ddVDFiqwkanFsrITLXbtMu26o7nij6CSaE7cQiveWCJqQgm9KPduT637CQFeIlisc8S1uup2+I/pVfM7Cc/7SNoK4RaRimaw11askSLCSKO12bIWJcwg+GMFCBZLopjghR/7BZjAcBUD1+suqdfyB7y1BrrEx7c1lGsUnL+zGpbvYsONME4/+0LKs+yaUceT3swbfGCpKuDqyWL57QRvoxgJTnWHEdW5hyz+JRC6syKv3JZaYbbPKtEqIzUf1fw8Q+2Wgkf9ZrcWPf+sa6z2b0vf3hgeQ6CFgc9jdpPCmlth4hz41yuLW7SkNO8pfa0FoV0/HrzBd0dnhuBNbgtGCjCp4q2FT+WOnH9rJIqsQpq6g2j8X8JChLFWv+RKyvNtUV12C7miHTr02MmUYEJ+DpgibG8k9yY+kPx/rDLckSAZREDAUGJCAbp/2w8ZngyQJbLZn31blg0FWmU58Ob7J0KowXtZ77foEJuN33K0pwMss2ACGk868yNLiCJm9PzumUwHlETJDGkyFIyi6QlQrDDaPdhuVgdcDzyjbIoFIFmn7ZJBOSI6cbRk8X1SZoYGQnolJyJRmwGB5uLbqqXx4QMV3eB+CkJQgSryUGZz7AEyoVAjtI94rD21xLuY6RX0Pipw0KVxVOqPXQHBSAfzxq8zDE42uJw9WiSLDZ019LSkVNffDZRIAxd3fQ6uC1j3NBs3u6qiHmHZiK6yFGqdUQW7gH8hmoIeYtFXOkMgtNkxi065kKRi7e754w/qBmDnCgLpG4umbNbEbQQLocsildrNl2igMou7TUPSPyU6H1osuz39tndCsuewP51ec0KTjlS7LiMcypCq7Uxf521Em23ceJ84niilIV8fdyRQMZJXdq3kuLYKoY0GVn3UryQBjXumgJbrMBRnafmHFMsuhRFwAKExDxDP3LPrjNbDfmM7y6EDhRntSCEn1sg6LB19xr5cfvLwwPWPlOaUgxbDyxDErRAWBT0pG7N05e/ntsiAa1ICyB+aTHntaRuYwtM1Fs7gvWgaOjpowY/T0LEneN92xMRklXQsZfPhyj8r236PJQvHVVpurptxJeL3LNEuGNpCqYZ4gH5P6dU5MWRbVtnonIH7EC367ykXyzKfLfj64n31VP066fIoZpFGRq630dR9WhKup2yoKTZGwqmvPVWRfHA0uvT/y8Pf0GRxV4eXrdU4ZN6WgvzTP7n1Hf9WCBaLReL7aoIQo2XyKcQCkN92rQU4I7TtET6aJgSa6IZvbfShhM3TCuRdWgCz2b+UH/J4B75ETTqMhM3hUegdSTvUQ86VbGak6iIaw4A2LnKEHn9ho76DWUz5NdGH1cpn4HABYffe3PCyiWnji81riftJzk7hIxpkTrSsf2ELwUOZUn0EOKPvbL1qTydNIyRusIC0TlL/fD4FBP75pf7pQyaq8ZZhmLBqS1njphpWh+6toerQtUXDuS5/6I2G65UmeUEVrPSqa8kpHfdpLha1oU2xpHsZyCUm2799ustj7iIYRkxeCU5pUiPoNSyZen4Dc4XDppuGgL0NAnmGvnbwyGLyaOSodWIYtqGK+JfUJ/v9/tTS16CrjyjklK+3dxOj/UWDAYQzWIjodFAEBfSkbTNTGYg/TYvHEJDFT/lXKXsKcVRiLKo9f5ohZCvMRFchKI144j8TFQYbsybupw4OypCzXskYE9U55lHxn40Ro1jcMm9GO4/d7K5r8e0WZACMPAWTgLE1h32c4s0gz2Xvae6apHI+rQ9sAQrQd4GUzEl8iQdLjGSZYsAdfTYQnjVzw6givF0WaN5rjtihDqqtIctbDx/Vsidng7K+qrCiYwD+U2xOG9L4WjNwImD5WhYUvM+ATdYX5I7VD/fX77OTSG0+cVcCJo4yvRwyyLKxUhIMTBZ/yvo6RVEmAxtCSykf4jYXQQ+5XnZG+ou7erw68LV4fyGskQc9vx6e3p9umEtZbclF006P7b70UbP/jLcnS+HwMwshvlJOyxNtsVZSFUFXcQOzDrqqsss7CXOBVgT2UhbVWvYM4+rBM4ZMyu7vAilvsEr71o3DljmO3rqpGVuk+xzU6YN7gmB5VDD8N1ZrL67TNoxd/RYFceXtjgBaW5GPaILa40ejfs1ocGa4piVj79QgJha0KMnJ5fKMMIPsOguL291oNL6I4tCOWJQ5wWgZRVPbRpaZ0SmdKS8w7A4239RV5NYKRE2kSW+OWeSrLMOZvMWXMi0+8YDWTcLopDrFxO+RMimyuNXG5XaafQKrTy8I+S1sWkQxyYRB/B1avLlqlrgVF307awu3RpH9LFz/XKATEkGN4yvHJ2GAsAjeTA75ndxKD0LJyJDs6RjfRrNDg8TL8E32WGdYEDZskMtbG43y1LU9LH96rpScR+HQtI+RdF097znVXeNb1R7MXBzzNgNJ0Al6fIq5K6Ax9/0ntBCk1Fx+M6ToMlwYQksC7OsL+h0PAxY7AUIx1Th6aNYVBqnxnGSerRnA8nllgQk0HyOt+74kZN6168NwVlZkKKDdjKl8/7w8bggHKnCYYThMH1+zPPC1bl4us5gMTJiZy3U0a/s+PDIBjyTfgSxVOyo6uPzYZdT4eFuHnNvTL7cP/1i+FBlVcxLx5IhLSKpYFF6+K7nhXszKTr8Zy9rYLHMKbFQh4huX68QKIkanIx2OItLwQNTvFtcXzf1fo9uJkhaTBYYfKOGh5Odb2vyZ3UwfcDZ7IXqbaQOh/ckFlP0xBYNhywSE2Ql+eNpn6O9mD09rKPQezVL4oKCHJe3nzbwsiOMVJ+xzWyd4lmWI/RiDb7OQF0CHg7yRpLHvfo8lnABu/lMFXcEjr9XWW4LsXoNLLVYnkzoqPqEg1wDE5DxXtFCWlK/YBDFFSbZz3tVkrjd711ylVKvb4Dq2un95f0xMgqHBr740+/3Q6rasmqy3PYrQjaUEpGmMvHh17EV7xZqxMCicX16ecA2wSa/+357evu5fKAU+cNV1VEMTUPd1xuVwgYOozh7fDlgZcbI+JTWlzAz5WFFe67baowcVHfQ8kA/T3edMOIzIQ/CHzmmlnjyI6alSWWPy4SdStEuxqhayFpeXK1T7pP0O+d0O5DuMBvKH/fT5H43nRWcpwO+gRbYpFJf79CXOD4/q6Rr39+j5yo4uvH5lhf+vGcJsP7+cKm10MPnYjJc3WoxrraOhk6KMyZQvawLRG1Nm0wQ39rqbncNtb9sn0OEDY0Npm5VkGS9SwUJMcej58RJioB1sjLIz3Hk+c87mcRTzvDYZ1fS8JAHM8FnOl6eV4nN/mpHLdi/vNSQb9FJLUGXtujMoOVzN6cXdeectwkO3s6Y2Jrv3j64Qe3ueHt9+0LFummZ29NTJlMtF8EXClUAqXv3Qk1t+F3lmFCH2EyVd4l6MX2VllGgbCQpZcTBYhU6Pwvcx9rAmUSwabmMR0R0QRMewZKz+Coyku1zmCwng+uSeJtGGB7mSgaHUJZwgQapjW5jlhiqvmKtGcqvsUgNKrJcpRzMjvoTVQXdzj2l58sqcmH3Kh1Iltxo2OJ2DdthwVjnpPERs4+XKmBR/4xNyOwT0THrigx38sNnkyFzL1dtPTtGw/fi5MUGyT+GK4ssmcfSwYj2y+Vln8qsnwROQoaVl3ODJma6Mbv1dMxDkJNGpr6RZKcDKiO2poIWy7VyeZGo5GhdDUpRVOj8SvnKYCG05lmRLjFPdccSKg7qEouxCCMpNQs4S0HactmcHn4oyqGxoJF7FVYeWX2pwSgWeZOKfgR+zprNbrBVxhGtMxiiCqGrOITWhC+kxWSJTuIzmMzboidW6Xwf68keWHQoPcpdtdaCHJogaxT2I9djmuGqezzuhIkaaEnKl7d4zbK6uzVLSL+JqopcjKx+fni5VqlqosrMlUHJi7oZ2vtttXfC2qwuv/KQ7V9ohIXylPUDq8OHwn5OIMVoQvNUrefyvGh0NBAguPwskSeTRBQ5hD1BTvLx3WXUhxEGiSJUoU+oUxdT7UuCqOh2iBJmv5qlp22er9uAzxpflxdEZUbF0orY6ESyTz4nmbCALZBTxBOLouZ5Z+LtvOFqEmEEbR42zWVAaNu063eO8E4szQeZ19NnBk5ILzDDdqH4LbkcD0hFgdTvHNbSOg58WlMpXnJ2m+9rJ8GwsCpoFbRgMA6zdCYWa6Dc3aempmJHcHlpGLMZMosufPY+5LLspkj34LNiYi4lFVXnzwYbx/Dc7g7njHxUL51TBvMa1YbnWtQVowBJoZNW1uaFphPDJ40zh4xFmudTJipy2aWDGSHx2TRuzRcaqc9RrqTsqshSBr1UkXivFRC0OEQcAcfyga6DBijSgh24kNryz00sc5cm1TzQ0MNrMegUlWIUrhfN5yoO9PEh/7gsMNEFn9rTytQT4nX02kwnWnAIqhtTK6u3S97k4j/CcTgcM54yP9J14OR4x8ucfT6QUeuPNZIzjQVpBvi4mbXQ2+mVUIR7M4LNWZTm2EKnkOaBFUgIq5aVLGqTuhIDxT7hNpXPaT3ccdmlEy92rUTbu/8CFr9oIOzzCAMgvvi13Ar7MYz16lqjQgYXT2SxIGgmy0qsYJ48vm4YpvabTkJYOYlMb/V2W6UhOQZW1DNkeVy5Jg3fjTcvZ1UaXUYma02sw8gMsXqG6FAyhk0aAMtqgWNHxpuI5jIdmwrdUdDTfBpu2TjkxhvsK+U+j6DML9cKIBMnYNNqPlXl/TPqNsCIttrpiM6nVj2TSATOt0G/ccTWJdL1C0hsWBVJ4e2AqrnJX/pGUz9lI19cWIuTELfK31MuKwtk1njZfRy4OJvi72IgB2ac93K4Do0rG1HnLihIQgfnInYlwsq2fxa6lSwwpayRIM/VvVm0rK2NZULGwfoYob2pN1HjKBZ0PLAMU17FujcZjq3Jw9HdOCOy6XIWzdL2/HTKaTBdk4i4Emp41D3Vi8iyQjHqbDSV7OhwoeE2DUZGT9V3MPKQe9YUIlbNSyI2/6UhEJ8omOmBhcMsVW+y8NkQTBiwkHv6pMfoVKgLsehXRExuJM+WVkuS59ykKJILCUwjEruZsKsUWF7WyRWDlKM/xcvNN9cjUhIdrJOyZYaSfD/IZ7VAAosIw/fptt1okyccENYai+8T6HOGR7gfPlUnfmc6ywTnfBXpROjh5Q2FeGMl/eYSGneoJ3S+fprWh5aVCtOO4GEMFtNJiyeu9B4GrEJYndzR5xq+k+pFaBUqaUGIVCk+gww/Rk9mdbjyYy0+werxb1kazOksarJEnX2MEsIbeaPGKfbgnhT1c5sjXemduOyCLaDc+vHyBLlXTSiIXHO7zobyZPSSYAKYWrTcNp4nnN9hwwTkGaapTn3VhVaD02RAxfax8qXH/eC7duriJQMUGSeCGQHhcUrvlKTnKg6VVw6bU71vIuYJYnDxYiwu+tqa1aXsJSdR2j7WEWM/oioM0Z7Zzif9cLqbeKc4kMmJ4Hnjfl1gm0+Js9yO8a0ZFIFl/VOTNLZMRKRn6hToYEP4/auKA9osVt/90j3DFQ5ts3Pev1idU9oggtCkT+Wn/GoxlIn4eSXtZ7VRczJT88aT0Gaqe2IoJp8xTkes7TjGm/Zfh7J7w+V/ZrZ4Z4fVNrcoIJznsVONQPn59vBUUYVVSDDmqwmsRtgIhS20ldBZfGSZ1dc3KJ9HVur0yKILsDaNvb2Eyrj0k7DKA/M9QXXKmIHR2dlDPnSFLq+2J5xovndDD+JDwni7VB+nVcBidUpBqs3R20hmtueZdcdLViaBNtDvNcjyGaylkV6jOEBPAKwDLlEqAiEMbJAu9cCyGQY8e2ZuuGqQfZoNkQzU+v6T92PGbnBxrdw7W5ZqkxVtHU7Zvqsux7S0ZZasjw4fzV7bfoyPVNe+akuXLJeFgZMZLVkyDoDq7t/S9lH1moIjdBoKbUYx4zW4TfKJ3EV7xPvbYNDxwPLIUmCph/F8cZnxhIMbWSot1YzvK0uxYaJjQbaoADfsivpKTFEEI3I5gwqCW4sdjPOJbe/3vRXiRIHlgk7ycgvusana5DdjSsWnazzjs6Se9D8/kfprpc0QV8qnl8P6SmUmaakWhOhl65dfr8e2TArltXISlS7+ETypQihS2na3lqHP3Gk4JEeXml67PiznMZXcOeC8OC6VaYxz6Dmx45CWlmCXpxA5VYferzTXjI8ssPCM9TtXIjayhq6X1UY495NHIoKUP21EspZOy2/B5zGMOEdB8+trG0ydaJ3LDkzz0kscq5QolYgKHXnQ7zemzeMylFhCZY5syco85sk5ssh/FH56CbvhobdWZ140eNGtMkkOJ+KeRSGY7DupbVDDTfEsXdWyXTNiCSKTo6DvsCIXZ8E24JXymlrIbt0sxbnXZ2TycC/3YH+eaE4lg5a7BZMwLd24MU1XCPRLhz2Y9GDOxiBvUbfIStlyDRMMXC7r3dOvryaiJ1fcU6M9mncVBJ8KW9ZhW8Ttzppym4Y+ptAOsu61yhdboc4V1au8nhNXsS9kfKgICXVBuH/gKMR6n296i+WWjfs9RVaD1K+6eDFBOMJeUHxdBZq60aP6iYreXnFJ4xaT9F1JXPcSkH79zsgSLDpoHqIHp/NG+KfvpnQHFiyZevj1JaKSPbKmjn9rH6cP9kF6CSBjDJgaow8C78NFAMURG5qzndNVKdQ19d6MsLnMJdp2MT1/WBi+6RL6vcZFW4uwu3GrLPLz16U3P0LhDzaPExteAN0TZdZzHo5tgbIdzug5YLlcdELda1nXQEYAo92unVMXLOZeUJKEUT63rauePAw+y6LkikBYYilPEhJeVJaHLMuUSUPxHKCCvh/rZh+TMJye6kKrP8ak9GR6zWNAriLXaHG6tDNr2nrJw0HucmfIcEp3nsIuwELpJeBM1nwn1FPDjEUGA4IygtRi/XHpljo8ZQk+03u7Tu7OjYTbYFsyIo1g3FI63rLoKQ9tuYmXXxAhafhXD2mNqYgsHmax/PinIYsiwuIjLbsgb2kWk1/lSEZ3EpNHS8YigNDUbddDzg0qA2T49I5aVO8lJsRjz6rzxPrxBizHUPCQl3LH/T17OtGGikNafI3Q6r9WQK3N4LlhlCEx5J7JnDKZQokhRHYTKCohBNGgW9CuqlRp68zXwn73pO3zbjiwnOU4sgYRGJ2vy94UWMJO1ERFWHHNz8PlbcXxhHgDMo1qudOQcHjBjblocRtWFx6z2ENJZGTqh8ZqEb61zkV6YJlGtY4duatCQMwXIT5QfE5Fh0WBNSgEeqrZ/Ply2Of5XHDlr5WL3mijvf6pA1aCnN1anQ5Yk3ZdMn/CoaQNSyOmbcb03qIYZ6B8fWG4/8+v78PIpHxrv9RhSqxg1sg8vlStRkUW8u6N+fksjIoiSGvu5i4js9yilwIQRbzaxk9x9FRtBblDFoEl41WzVcCgSsLFMs5OTxnaVyPrRovZG+7T56GhDX2G47JTUoOci9umqfdcUszRBf0Y0985UV2bj4qrKAKZDwaN6u11t6Y6wOjebKQX/9KaHRfal4v1y8OnrOltHmXKjuGWoxrNFFnGyGK9Icqq9cctMOKny4t7woYHFo7epHtDLsv58qhEBrqL5QPqiKx/MWP+Q2Gx+f7aMrfCrqJBw8yulnYnCxSM6Gym5L0KwWkvmxl10NECRLQ/bcWvOkdzpaO4muqwp7dPQzEWDyx/cFOINXnlYG93JGUOQavW3HSPXBrI7hSbcpFF9XkULY8VrJsqf2n7ybOv1DsHceRIKd6AG+p7YEGNVDKq7dxenfrqiLP2aO0AMhaLGkNeF9D7jTA6+yEW01bgTtBB2X0cj1cUZPB6NrnAHprg25rR91xbEBQUR+D+GhKflhWloLQjJ9/oUkNtnFI/rQEL4bxMob/YLLdcYNvGZaTMhYkVhLR6zEPUXt6eCgLL0g8fCbgy9Z0PlAxXgx6NVI7LHPXV+BBpeGhDiXpoCsNU6/pyKAhrDrVa0dAMocpRyGhFHCpbWDmHASb4z5EbzbZB4kgWeRNY0hCz8At/UTQsviv2hymgeERTzLfDA+s/WA9QVYusdaO3k4aUb8lVuFpI1E1pBFYG1szzmdNgNhlMP+C241u7Bavgg98UpHpxeRiwfDOCwxaMBKJWZ0W0+jIt6kooSTo7hGRc8zQ/fmw0L8IYUZCPQZHiV28Pvy7XnCqRGnKq5NcfnUKq8krSCLAXg2OE40lCE8Sik8gTWtbvhA3QE5h3PycstAWfqqtaONC2OexWiOfjBQeDA7kOZkzt8Sv2h5CkEx8IeLa1dkLufKm692+90K6s5Mfzmz8WWh3XW66sRA35KQ73/LFLWLQXjt2wnuFIi7yDYaDAUoVB0Eqbp/eKOaSpCDAAyQt8eJM60z01JodU1OG9CTz+r8Uyk+WR9Ve/KGQ45xmUY20262Gr0cOmZISlwLKWw1QmoleUTiKcnKXSxNtRuvEUBYFunfJB52CLpZD3IAqlA+ZJlzCpsiI+mR/LYEK3otdU2VwmAiSHpuVaGzQnrDu9d2Qbxros3veT2KUjwCy1DrMikUkJqzVoWpT7hTMKW0vYyWGEe27qFUiPu+fHet+2q27T/aCMcTpBFqOuNzmKur7nZc5lktb2rBt8bKsdvjDOIrA8kowO6p43J+ZaZxjYD9xEqZFdzfbKYsbLd6vEH/zxQDfWb/pTo5MkSiGVJhHYyhVX0G8D2wYnLmfCaRmJ5u91xaIrNyTxPugLs0NgqdcZ/qEP3h2zVVcxTWKnMj7UfZ6km0CnOPiXbnl7gWnwvCqnBsReOfLenInVZ4IEpRW/c9HOws5KQiwBFmPEOgtCwbUlWGHeUFBHupQactMmKrD85aU1/B238FuCzZ/bYt3N81ybtn3Z3+R4iRZmQCtYLNY5bCDC5rrznMGI8rLUGQjiKDK6QKi/bM7P32/H5/O+w/jcMwCMwZG3w+H184Z6hs+kfAYfVOPhI/Un2Wqn/k+B9TeXH9vVGTZpiOgCDYxHmG57pIe8SXFSu4f37UQftj4HsBqTRxZfJ1Gl8ISDFdBKe/x5oFBWTKUSK9pAFNpG1nG/7J1UGG++iVBBw0tbqcHcoJQVhjVSf/RMGl5x6CHnFOPqx+H5yDJO32wSyULVctpeW/ipMK0DU+8SG+UKl5bJ2ThNBG9oikEGLA93fnRPrRql16U99erb2aYvpcwkRUwt9FkYJ7hSWy8my4CtXm4BTf9b7MRknCwh4zxHE+Jmn7hknuL3QCgqZ9UOrSWLaqWLZtwzUBzo/erjx8f75XA4vX2+Xh54fEEJgcpFbcVFOI5Y5DP1kTzqiiy2z9RSW8nl7u8eaLbXdmixeO2D/LHDQJjpIPLSyqF2dBbX3997WVrkRGSHfRR7Gdm/XiRkdyEByTKh48ybNTS6MfWCcpxNLMwDKWnY2bsHlyHsvItRJvA9ymHHWc+2N1n4z1Av2JgiEQXWhW5iomLSjy6ryyaS6VnzEnLJZcFBtA2lPORNiJles1g4iI+56DF4ZPVT89ZQVjI98tHHulCr7rk5Yc53lrrLLGEnXs+g/+CKXjhIU52QuxmBYPEDTXlNobwf+qPfLICTKqsyRtrofKjZZ6Ib7T1NnWzBFehNlH9CSyhrHp8uYBM/vX2+CKjePz8+NymioASxCzIcnQeTyqrpPuUT9SGmGej0dH+vfJM7a/o5SpUBS5u2qqKZnS5PS80KEcz72hKHzMDYrW/bxMbCxEL1BLyBxZInIwLLPM22acEaqTAbSki//no/sJJEwz1D3dCvseYN9Gy9aXpIASxfmvV8HV/oHloLsRdDXLHiPhVzIYeRp8cIWT/fO67rGLllelqkYmcgyBKWmiyPUlyZLj4OTeLIDo20UKpTNwNgaSoKB6Jck6gmdV/TPlcNhibeTJlvshTBzwp5ZipPfSxQJrS01VlfHn74nrzeHll4nFU/RIdYsiLNSikvDIAFK1k2niDjhIILKJZxs/jp8+Xz6dBtNtdfAqynNfRXlmUSTZQ0lPJq2EvZusksuCeeXaLmu6T6mzu5JxZkDeXPvb7gbHEjBWBkjVst9OEwMbhdykDDhIj7OaahxZJKa5wv22111klsvgiL0pQ6Ot3qNqMwJui/fBczuQMGEZ+OU8bFMcMA7n95yTpMJbjzMy/0g/J06cv6EJSCxvN581YnlPsVjqurjeNmi1hz4CyWWQ+9uT4p1tJ1WAV0j4TWIGF1xbM/aK4gnI8Wz1+/EUuQXaSxqg1we4soL5mn9sCCDyew5BAoj/LXhyd4iJ6dppIO/K1eawIrrtjq7rfZWoQ2LfYtc11h4kglPypwXzavHwDTy+upztrt5nB7+fi5rBiuUFxF4kI+hKFz1Y77F0T38CHajvo/wMJpeSjh+vQTgz4tjB4vx8yoSSP2JlwOTt2PdT7z62fEZP1JNe719rruNDKPrKna85Gf182qab9gGj0e8oJc31mMkSVL8NUCEt22ye1STSwT8kUjkz0f9gx7YoOvo4miYlmYG7JLo6SrpKjOOgPNDXmyDkNV+YyYrafqHJGrFbmWl+s2rRKaBj0v+mNFtwILvtCEMMEv35LD1RsRnUlO44S3WBZL3qt+G2FFZJmALV/BZnP5iMZfLzcWkHiDvOrDfwJrlsWZ6D46JRwcRo2Nz41yr6bSU4ygLFaffgFVv57eLscV6lcVkqpXkLbn8wyZ5dQ1i0aRMhTtKopbXhDfvqLp2C7C0SOwhhkcF2b4s7VC1izfb0GkUPlWtPfGcsrGDd83so5Wif2GhP/u9vxOCDL5ptm8tRRQ7dfeqoUuKsJ2jAQWss7KfzKdJa8aeh9calahrJ/phzY9vUyg3D8T9k0648gWofLW+sdXNswH8ToaKdGB7sE6traBc5ZHLoVSfRdTTqDV5BsrRoGseAnIG7D6+qgLLogsvDMfwrqbyevhl8/zxklVRYUQoZw6tfW2rVvskiWtJ/Cz3C6nUoFl+T3OyusfSVg8wyg51ycaL4NfXLcHfOKVkGZF/zIFFevn/eHXCSpXKOhjwdocvNrV9dy1aEQyrhJYK9MlT8i9snqDlH2zqQqtqTaqr+HJadEVEgAmzicXSAHhx+KibYRiJowJNfKjQGsviquyWzPy9jvDFVm+fqQdR1ueUK52n4/wLnKdVDbC6WhO8liW5y+jxMiEdh8VWFKEejrPhe4yVCHifdXWpT/EWuF++NhXkv089GNQAxmxUdm1vHACD7hgLwGuMuDZInE0ymGbShm4sAxedDXNTffKrKb5A59Zm70YlfVCI1TPwieyILDXoCSJ+DOU7juBpaiyWWp9X+NlIg84707xb1JfcNExMnHiul8MFjVbWyjSF5/5+Rh5PJ2ajCqI8IFtd/t+eH/rlkBRluPfSmYcqjNqpGjqaKPCql50hlPNJB0jGlXH36xJhCr5n4xK4sJbsoyJAFu8zcEuJ6KmsXuJDyyCQyQtLUiqVGqRBNtHERf0HF07fJfIqD+Cz6D5/MGCUVvWK3iR51+MahZwPAf+P5xyZMO/YA+sw0YWAvoanTZkdFVvr+GuH8Nbf3tMyRMc6Igp2NmYPCa8bpp72Q3AoU2LZLUNdPaRAo8KdL1IvDL+xbg6cMu60rCDOgwwabKcbmQc4iMYsLxMdZK9/nq+roGFCX2Clw8Q/IqP9S8mwEp3561UkHgr1WTZAnXnCydBVReOE+skLlnRIJ9r9/F6bWGOCKsP0KxXFEtJyrhIYMIWCwCr2aBvHUVDYDGBGi0CXYXKJ1DC7flWx6f49AiweDg56jvXnLZKiSvT8GowJ1ZVcE7O1Mt5XkWm8ipEvahjLYb+ojcw+NpDVaMRY2+37+vQ7a134ZMbGwlzbt/o0iIKuETLXs3MO9e9Fd2yNbNjkkU2OqPeyp5xkyP7izVSJHziPuLkt/8GFoP3BUsYNgJqlVBt4+Jgy2IVqdK+AJ1I8FdG0OhqWwjgs+Q/tT74yyIBPqxmIknfn9rI+gBYYdS8vl9OmyoWZSotX9hsrq1cGrIpp0HXNFO5Tz4lxqOka8HUF05Awkt1WYQNOZsWdbRAL/Dj4bJrqmZz/Xz4PmMMORBWcsFe9DxGRwQxC+GVpwCWssbMtpZLbsIQwrQY9Ul6LZXDx1na3/d8IdmqeGd31zn93vQJsccpwyNVrW+bcx3zjyxVLfYiqkYU61XtD2+9+0nzWfWSAeDmNK1x6RWeStCZS05bF4PvMYtFpMyXaeHXosuwXoxjUW10fbkzHyZ9NhFEMWAROzGfWb+NeHCycJMtiDH3Ltxzi8ItfKAUQlOxCRsQzt7CKNnEXsfIU0yZVgHeoU8thnPZWGPnEimWPdR2GrCIAs2MUYw8L2UbiX4YW/sz/ovSOXjoeAY+elZJf4uu0CWfHENwFxPASrLVekvxEhwyXYEjCIUDCIuFWsK5u/58fTzVKWdaeczoKpC5IzqrIbcdceovp+qT62ixkbsux1Kul2FjjspfMwT02iL5Y19PkDV+NkzRC8ULTITkk9W5EfF0ajaqLy+nbJ5FbJqTsJxl4LIGTBd9vcfMlBeS1lRFBQ2rXzQQSrjsiSa2DneazoPFpY4iKQt5IXYBJsOGjHtizF3RkKaZ7pFivW9WRigmWP6jHSCZuFXKKvLRRNwC4zHFnWitVl0wslQeH943btTX0nXvIWVSRCYqY3Zc1HnkdXrZV1GTyaZiOd1nH344y0dt96rTZPamk6XyooGOzXEfYwadCYNZYDVYxgHXwhh1HX5LVvsY/S2m31YmumPeL4eWk5MsrW4HikBxx3a1RyheijonmoL1K3LAt+sOvZqaTyVvpi5ATgoAK9s8Q94gIpUwlsVNrgXOTxmNxBWOhSbAfP4o3wMTBMWAfh+UaJrc9aAy8TnRb02bHFxkt1zcsdHf31/X6828YGlzXjU5Ir4041yql0IjTP/7sTXHv/8JTI3aH34JCbDQps33Fj343xR87mfNE+ZJObNdmcxTl6WPIExRHkbK07pGgWTUyjUu24Us2DHNbCHPlbh8daky0FYucoIIHljRbo/ymskSqAURcvNMPqo3j2R0w+jEBQHY21oPLNl8YTta+VGwapPAEhdsbAlYx/YAXulhW3ChMVMXX+r3G+IMWMLRWtaVOEy/sImT4RbQaIyVRovNr/evrqV4T7M/PF/3W/FzWbN7Rc3qc900h1MzLxLTGmKvIQCwIO5/aqhpzhH2ka44dQHrKEaVXIkePLhJ/WVNqU/MDHmtR6Hx8Gd6jV/NucP5eremj7NRBvtrqa7lEF4+Xl5eDztIxx+fnp++3r4uH8cmA8RFUMmeS8cf7gutlJE9P01gIJQgLr88oVfMd7pev3ESSIDVyyPKDyO4hyCVm2kNt6hdujo6/khsWImJJSW+kDtbUi9ClEujFWdSdTGPXJUQic/q9bIupiqgYJuefaJm5XeIxh3XEd/TLJHtDVI+g+dc21I9IIsGtc+++zF/TUS9gsdfZjPeKeuEW40ryLL29vBJMjwjC61c6bpUs1gmoqVqtlENMgkiN6tI9zsZNWobzzBIkbaoSNVdXXeH6+H09fLwDnn2FcRXqu50+nw4Nk3X7Z0c7IzlaRos0Ga+H5uKygOgPOjmM0+uGEX0fDhdfcIRGJ+4FInisqH0B/Rp8MvDnD6sBHrJsjvddvTPfMF++5LqQeTbHGSXzxt0RC6Xn9fX2+FwfHo6rLGMMMuXeTA2kokfxjToEFjT3RHA0kKe5+cMDNr8entt4PIldveJEG81p38mMNYm/hTViiEJhqwXAH8SVUHIC8HzjOcphQgL7Chff53zmJODSECmbHxu2xpGN0mgJGP1a94OjRL5bpZKF93Dca7VXO8JmeLBoHglbOnFMDQgoQ5lnl7mrC+0SbgkXwxn98FYnMCAZDEK4KSWbw+fXOZE9DuYIyb3MZa7HEyiN0fWztRIMK5z0pE24VZmQclgnOFVNM9W26qtd887XbYQL6t2c/m+7juIDERcSsSwJuTex3Z//Xr4PK47eCHgyrauapQg3EbsdHYLrUmcmW++X7o8LhGm2GXRCoD2e8nY0MFn9hrTEo96EaFmpz0Q60GY7g1OM992z0c8CPtsEePm4YqUIc8qr9ZPl10sIYIhw2yWAut308NhdOfriGLZLaXRVdRQf/lu4iSYmmS151FxDxKpw2xa4U5WR6xBMPtjWgDSzgJRIUvwKWh002rdZtlqs+9OFzA/NlWezqHFhEzo8noUjXPyw4BzPzjilY6JVtXg+8bAkc8m3YQ+31bM5Jg7X2XbDyf5cCmQIkwsIHAhgTdVpm1EbIkz5GUfbOQZy5R1/f5eAw7C0JJX0XL/kIRkJzhaXp5RFdccwjr/vpaMeDUTtVUvRRhwEVGZNqomEMzTRdo9X6D9X2HmIpSFlvOInZ3j9Xo51W213mzBTs5XInw4tjxWMiw5Ozh9K8a3h5fXFm2gtIRPsAFIUlVEoG9kCsYg6rPUKh0bXjqrg+hz5biGsjM/S6O4XVAliYfXJQIx/uvjuQYIxOMNcyNZdH06j4k47U2q3ILRloQTH2f7H4jwxgnLYuZMJDEq0OeVVgvnXbLnF6g5+0xUmaD3I9kjm+8yOHx+EPSW33Z1Ay23HSUndxCdXCMPen17riJbZUf4EE2mf23KMV7muFx/PqXyNmaxLHnESJ1kBEUxMWKgI5/kyyyeGYff7RNwrS6JDniIySpoWftBY2BcmqYtHsw5X1ZNllJ7rPBqQYUmkrDOPw+3VUgvpYjqJ9Bkb9MST6LOQRj1eEJApVUpEqBg9CPG7E7P5+aM8Qnq8S2W2F+Cf7rHR5i1CI2d1TJrzwvpmtojIJXghEvTbTkayyy40Mf1Oke9fiFLkJBcyvXBj91pjhfMmzboeRsm5kXtGq9BKbMjTF/LEhg03PFP9Y2ZdadrxKBNQIfrVMX8NoXJ825EYJnBsogUwLJq8TxvTqfVIlWukTGSWH6cM9LhvcNZVj8PH11hylRavVe3jqGIIlqtU+4Xa46Xa5sH9ARF3qXwg3IEC9Yy1KbIaLA6QFtg5JwPrRFLX5tDw8jdTJDfYc+pTeAqpv6NMeDNnk/iza2ORaxZi2LCXXNnqQZLd1KHVPvXS22XVdv51erQLgRYVhzBweDBV0i1nsy3P768nNHLvPNymdY7Yd4ZbtLCMmgaCb/6J8xKFiDwTFCUerk5PR+eXqsFQvpsdbisVwzJ8KKB7FJaVOvdLZcaJl5GKXKzbTlR1U6BPFP58+Xh42eNCLHZHXb1di7PvMBkdse+ERR66oUPKFwlUCNUuxF+BRk9cpvPeq0yX/n6HdcW1D/vm8QH4H5lFT/vGsQwH9cbsDz9YYaRpt36tKnBr3Mj4eztQzCawSDz/wjrer83cTn2nUTXuSMeWII41Hm63DdLPLK6gi7MmoAWVbeajJwip6KyV2X8i4mz6awhF5zvq7VuZvIFMMEVF+xznGvqCtJDDh5i6tvTukpDWxCr4BC09ip/qGuF3YLn5Eqx/C2xXBbRdl0pJOzaUhYL5+pTZE9Bym+XfAbP4IEFXBnTb7qrODeh2Ba7ZVXlkbCDuCOCw4hpu398fn+4dft9t9us6jrbVt2uQp5IwwM6VPX0sibJdeqXP5EjMFZgEeCccFqTYvO8ezzdfl5Phw4+UfZF0vjccbFAe+agm40GCP6dKqMYXyt3q9A1MB+tipF/pvSh1+srb3/+QEuQn7kvbBDvUV5PPLAcrhRY2i+Elu3q/Hl7dZZThOen935tSJrG2bXCXdPr6V7bKhKStJ9Pq00byRLtidQaku0W118Dfda0h6OTNoek7R23jUAX54d5m3WUS9SQ1IEIF2A6IrnRxuuHK8cZtKWPh9v3y+cup7IwHw8vzmgmxVbLLHKGH/xQMrSnfQQ686g70qjq4YgYdy6AMmBpL/lNps+Gsu/GzMwqnOK03+9y52PvqeiaUDmNux7zCs/B+xFPcoUQlFTx+iTmfTZRxcMN4q05yP8q6Uk0k+zLc+Vn16Sj+iUE5q/T6fV0XFNTbFESt1Ea3YHu3F2zmBGteRg/V+hn/U1R6V7Jh0mK/MtzKyWwtexKeq1B/f666I2TEBw4TxDkBcpoQ2DZKLpQPZI8bW+r6vj+8N1xBJ0BlRAIbYRzhBA0rpuQMBm2OdwSQt4aaPAeW2Q+7GTjztK/rHKmT2J0TRyAh35Ea74xgXb0RUmNEYZUWdvFvoDiSKOqKzRJS3z7sHtogtjJfNsgOcYGvcO2pKV1qzP4JPTBNUphGc7QhuYJXqlvqHboUeNjiY9sHsjlri5/EPpLUGNsyTsXSzoZbkYbyZ4tpddSh83g0f4yrxYtbK7ueNwd0R6qUOyawx9iLmdZ2rQwl7tkXUa4ZaHutU0AmZlwvKy/SkYWtkmTyPV8ffr4+PXziXX4zztUCBBypXfw7AcIqzg5X+/CbMTXyiMcQ+Lry1aMQEMvu9zW++vZ7bP2+4f9dy8eLAuXuceTu4otFPUpNBM/WXeftadu2xxRcXm6rmQzHEkyPrhBprxdJ2MpVw5lYQ3S3NIYP34cco6CCnGM4UVYp7Qu2sfRR3+owWEW4J4tCt4INVeYw9u0m02pwKKHtLq70K/CcoUan2egyS1XXkkomnqIjM9vP6dlbIMtfE0Nwb1IxigPRDMBeSXxZ7xVnnSyrAo1YUpKt7EHAsxLtdju2hYhgdPaNgvAZWarUHb0aZTi9NDMUsrf0GhRNTHONo9fWJbWQe2LIuh5dYCBUnIUqaXJAuZrFmQ1ilqysz4kA1IA63f0h/Hjw/v7y+Xn+fLx8nW8gtP1AUX3DdgR27vD61OVk3ukmtfOogz4fxrF6CIfsqbQy++5HVpwHbTGGG9DnKZEnOU2msHeSYKfBgN6ia8a26xFsMgOXYOaw8MF2usljBVh5SmkESLO3VajJHsFJ6AkppIi1NX684aisURGYvhHwa4CJ0IDHdsF7d+6P1/TF9RFAwXaZNBmPWwi9hN89QCnYbWctivVC/23oBuNLFqaJVgo9eX1iXRY6gQwTlef5aZKxwvW5WYMZ/C02gZ6uEBmm3EeOvqIBXj4h9eeyNceCA4+3ikx6fy0MWUnQXIvHHsyoq3Q5a+hRG/EDd6c8Tsi7/fX28/bab1vmu22PjTSB9bh5ySJQl1ywYBft6nzZAXqpp8PeK+fvm6vkOlv9lxBWS2bfbM+Pj8dNt3d+wfoN6TeS/HBTVg5q+LBhTDyflIgeJlnE2teuHVBaoSGHZgA+5XahFIkpnara0wn+dgx9azpgb81qzFOFtkOP4UlmVmJD0NHrpZQ7NEsDorsGpFTojXD/5Kh4qXO98s3rGuxCTJeolF5rUNL+LyX9w+OAcuFzyq72u1Qq0YN+PtM1qG6M7cvRPrb58trRINtLQwfLEjNZRpvtl2Oksf88HHbb1OhHt/3nVQDVpyGjKGnIhdhi+MlehEh9ZltmLedUsSIDWnzHCUGIoZz3ecjxEGj4LPWxz/4izYm3D1yD6ew6GQRQAiDBaGa75fbbl9Vy22zRlPlWiM4FWABdyH6lspiMdUwbcT4GW0BFmrvEDQ/dRl3yy1jbvhaRJDAub5//tw9vNxg7QRY7En4Uq+fabUIW1SNMvSgynGPK5NV98bNekWTGt0Z7B/Ad2pCaUIEcaQJgoWbvydK+AOa1KWbZpXCIwYzBrA2yK/K52OcdLrrQpuQ9LtCBM0SVCPgXi/zt0uemHP5DeELqo47mE4faA8tllvPcqdqwABFudhiVHO1bNeXy+vXMTPVNd8CVY29/P2is/U9m0PgaduY9h8n0mGnxfbt8khJSe1Ou5DMgFVxRcFEwyl3l8RR0WRyIbCVN932PA3WbD9EASdNkRASuvvGm9TYCELaFIBZ6N32ZFoUCnTqasdgkaNBjajqumbdqgQYDs/HLz5Lwocv4pLcgkExSQXfLZ/QjIeto/rrcXPeZdTRDYuSOwmjIkpXe+xa+DeuottgZ11jOwAAAABJRU5ErkJggg==" /***/ }), /* 46 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var meta_1 = __webpack_require__(82); /** * Takes a set of features, calculates the bbox of all input features, and returns a bounding box. * * @name bbox * @param {GeoJSON} geojson any GeoJSON object * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order * @example * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]); * var bbox = turf.bbox(line); * var bboxPolygon = turf.bboxPolygon(bbox); * * //addToMap * var addToMap = [line, bboxPolygon] */ function bbox(geojson) { var result = [Infinity, Infinity, -Infinity, -Infinity]; meta_1.coordEach(geojson, function (coord) { if (result[0] > coord[0]) { result[0] = coord[0]; } if (result[1] > coord[1]) { result[1] = coord[1]; } if (result[2] < coord[0]) { result[2] = coord[0]; } if (result[3] < coord[1]) { result[3] = coord[1]; } }); return result; } exports.default = bbox; /***/ }), /* 47 */ /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(84); /***/ }), /* 48 */ /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /* 49 */ /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /* 50 */ /***/ (function(module, exports, __webpack_require__) { var arrayWithHoles = __webpack_require__(51); var iterableToArrayLimit = __webpack_require__(52); var nonIterableRest = __webpack_require__(53); function _slicedToArray(arr, i) { return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest(); } module.exports = _slicedToArray; /***/ }), /* 51 */ /***/ (function(module, exports) { function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } module.exports = _arrayWithHoles; /***/ }), /* 52 */ /***/ (function(module, exports) { function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } module.exports = _iterableToArrayLimit; /***/ }), /* 53 */ /***/ (function(module, exports) { function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } module.exports = _nonIterableRest; /***/ }), /* 54 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = { "aliceblue": [240, 248, 255], "antiquewhite": [250, 235, 215], "aqua": [0, 255, 255], "aquamarine": [127, 255, 212], "azure": [240, 255, 255], "beige": [245, 245, 220], "bisque": [255, 228, 196], "black": [0, 0, 0], "blanchedalmond": [255, 235, 205], "blue": [0, 0, 255], "blueviolet": [138, 43, 226], "brown": [165, 42, 42], "burlywood": [222, 184, 135], "cadetblue": [95, 158, 160], "chartreuse": [127, 255, 0], "chocolate": [210, 105, 30], "coral": [255, 127, 80], "cornflowerblue": [100, 149, 237], "cornsilk": [255, 248, 220], "crimson": [220, 20, 60], "cyan": [0, 255, 255], "darkblue": [0, 0, 139], "darkcyan": [0, 139, 139], "darkgoldenrod": [184, 134, 11], "darkgray": [169, 169, 169], "darkgreen": [0, 100, 0], "darkgrey": [169, 169, 169], "darkkhaki": [189, 183, 107], "darkmagenta": [139, 0, 139], "darkolivegreen": [85, 107, 47], "darkorange": [255, 140, 0], "darkorchid": [153, 50, 204], "darkred": [139, 0, 0], "darksalmon": [233, 150, 122], "darkseagreen": [143, 188, 143], "darkslateblue": [72, 61, 139], "darkslategray": [47, 79, 79], "darkslategrey": [47, 79, 79], "darkturquoise": [0, 206, 209], "darkviolet": [148, 0, 211], "deeppink": [255, 20, 147], "deepskyblue": [0, 191, 255], "dimgray": [105, 105, 105], "dimgrey": [105, 105, 105], "dodgerblue": [30, 144, 255], "firebrick": [178, 34, 34], "floralwhite": [255, 250, 240], "forestgreen": [34, 139, 34], "fuchsia": [255, 0, 255], "gainsboro": [220, 220, 220], "ghostwhite": [248, 248, 255], "gold": [255, 215, 0], "goldenrod": [218, 165, 32], "gray": [128, 128, 128], "green": [0, 128, 0], "greenyellow": [173, 255, 47], "grey": [128, 128, 128], "honeydew": [240, 255, 240], "hotpink": [255, 105, 180], "indianred": [205, 92, 92], "indigo": [75, 0, 130], "ivory": [255, 255, 240], "khaki": [240, 230, 140], "lavender": [230, 230, 250], "lavenderblush": [255, 240, 245], "lawngreen": [124, 252, 0], "lemonchiffon": [255, 250, 205], "lightblue": [173, 216, 230], "lightcoral": [240, 128, 128], "lightcyan": [224, 255, 255], "lightgoldenrodyellow": [250, 250, 210], "lightgray": [211, 211, 211], "lightgreen": [144, 238, 144], "lightgrey": [211, 211, 211], "lightpink": [255, 182, 193], "lightsalmon": [255, 160, 122], "lightseagreen": [32, 178, 170], "lightskyblue": [135, 206, 250], "lightslategray": [119, 136, 153], "lightslategrey": [119, 136, 153], "lightsteelblue": [176, 196, 222], "lightyellow": [255, 255, 224], "lime": [0, 255, 0], "limegreen": [50, 205, 50], "linen": [250, 240, 230], "magenta": [255, 0, 255], "maroon": [128, 0, 0], "mediumaquamarine": [102, 205, 170], "mediumblue": [0, 0, 205], "mediumorchid": [186, 85, 211], "mediumpurple": [147, 112, 219], "mediumseagreen": [60, 179, 113], "mediumslateblue": [123, 104, 238], "mediumspringgreen": [0, 250, 154], "mediumturquoise": [72, 209, 204], "mediumvioletred": [199, 21, 133], "midnightblue": [25, 25, 112], "mintcream": [245, 255, 250], "mistyrose": [255, 228, 225], "moccasin": [255, 228, 181], "navajowhite": [255, 222, 173], "navy": [0, 0, 128], "oldlace": [253, 245, 230], "olive": [128, 128, 0], "olivedrab": [107, 142, 35], "orange": [255, 165, 0], "orangered": [255, 69, 0], "orchid": [218, 112, 214], "palegoldenrod": [238, 232, 170], "palegreen": [152, 251, 152], "paleturquoise": [175, 238, 238], "palevioletred": [219, 112, 147], "papayawhip": [255, 239, 213], "peachpuff": [255, 218, 185], "peru": [205, 133, 63], "pink": [255, 192, 203], "plum": [221, 160, 221], "powderblue": [176, 224, 230], "purple": [128, 0, 128], "rebeccapurple": [102, 51, 153], "red": [255, 0, 0], "rosybrown": [188, 143, 143], "royalblue": [65, 105, 225], "saddlebrown": [139, 69, 19], "salmon": [250, 128, 114], "sandybrown": [244, 164, 96], "seagreen": [46, 139, 87], "seashell": [255, 245, 238], "sienna": [160, 82, 45], "silver": [192, 192, 192], "skyblue": [135, 206, 235], "slateblue": [106, 90, 205], "slategray": [112, 128, 144], "slategrey": [112, 128, 144], "snow": [255, 250, 250], "springgreen": [0, 255, 127], "steelblue": [70, 130, 180], "tan": [210, 180, 140], "teal": [0, 128, 128], "thistle": [216, 191, 216], "tomato": [255, 99, 71], "turquoise": [64, 224, 208], "violet": [238, 130, 238], "wheat": [245, 222, 179], "white": [255, 255, 255], "whitesmoke": [245, 245, 245], "yellow": [255, 255, 0], "yellowgreen": [154, 205, 50] }; /***/ }), /* 55 */ /***/ (function(module, exports, __webpack_require__) { /** * geostats() is a tiny and standalone javascript library for classification * Project page - https://github.com/simogeo/geostats * Copyright (c) 2011 Simon Georget, http://www.empreinte-urbaine.eu * Licensed under the MIT license */ (function (definition) { // This file will function properly as a