if (typeof rvAgentPlayer !== 'undefined') { throw new Error('ResponsiveVoice Website Agent is already running'); } var rvAgentPlayer = { version: 1 }; var rvApiKey = '5tX5zUJU'; var rvApiEndpoint = 'https://texttospeech.responsivevoice.org/v1/text:synthesize'; if (typeof responsiveVoice === 'undefined') { /* ResponsiveVoice JS v1.8.3 (c) 2015-2022 LearnBrite License: https://responsivevoice.org/license */ var $jscomp = $jscomp || {}; $jscomp.scope = {}; $jscomp.arrayIteratorImpl = function (f) { var k = 0; return function () { return k < f.length ? { done: !1, value: f[k++] } : { done: !0 }; }; }; $jscomp.arrayIterator = function (f) { return { next: $jscomp.arrayIteratorImpl(f) }; }; $jscomp.ASSUME_ES5 = !1; $jscomp.ASSUME_NO_NATIVE_MAP = !1; $jscomp.ASSUME_NO_NATIVE_SET = !1; $jscomp.SIMPLE_FROUND_POLYFILL = !1; $jscomp.ISOLATE_POLYFILLS = !1; $jscomp.FORCE_POLYFILL_PROMISE = !1; $jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION = !1; $jscomp.defineProperty = $jscomp.ASSUME_ES5 || 'function' == typeof Object.defineProperties ? Object.defineProperty : function (f, k, m) { if (f == Array.prototype || f == Object.prototype) return f; f[k] = m.value; return f; }; $jscomp.getGlobal = function (f) { f = [ 'object' == typeof globalThis && globalThis, f, 'object' == typeof window && window, 'object' == typeof self && self, 'object' == typeof global && global ]; for (var k = 0; k < f.length; ++k) { var m = f[k]; if (m && m.Math == Math) return m; } throw Error('Cannot find global object'); }; $jscomp.global = $jscomp.getGlobal(this); $jscomp.IS_SYMBOL_NATIVE = 'function' === typeof Symbol && 'symbol' === typeof Symbol('x'); $jscomp.TRUST_ES6_POLYFILLS = !$jscomp.ISOLATE_POLYFILLS || $jscomp.IS_SYMBOL_NATIVE; $jscomp.polyfills = {}; $jscomp.propertyToPolyfillSymbol = {}; $jscomp.POLYFILL_PREFIX = '$jscp$'; var $jscomp$lookupPolyfilledValue = function (f, k) { var m = $jscomp.propertyToPolyfillSymbol[k]; if (null == m) return f[k]; m = f[m]; return void 0 !== m ? m : f[k]; }; $jscomp.polyfill = function (f, k, m, l) { k && ($jscomp.ISOLATE_POLYFILLS ? $jscomp.polyfillIsolated(f, k, m, l) : $jscomp.polyfillUnisolated(f, k, m, l)); }; $jscomp.polyfillUnisolated = function (f, k, m, l) { m = $jscomp.global; f = f.split('.'); for (l = 0; l < f.length - 1; l++) { var a = f[l]; if (!(a in m)) return; m = m[a]; } f = f[f.length - 1]; l = m[f]; k = k(l); k != l && null != k && $jscomp.defineProperty(m, f, { configurable: !0, writable: !0, value: k }); }; $jscomp.polyfillIsolated = function (f, k, m, l) { var a = f.split('.'); f = 1 === a.length; l = a[0]; l = !f && l in $jscomp.polyfills ? $jscomp.polyfills : $jscomp.global; for (var q = 0; q < a.length - 1; q++) { var z = a[q]; if (!(z in l)) return; l = l[z]; } a = a[a.length - 1]; m = $jscomp.IS_SYMBOL_NATIVE && 'es6' === m ? l[a] : null; k = k(m); null != k && (f ? $jscomp.defineProperty($jscomp.polyfills, a, { configurable: !0, writable: !0, value: k }) : k !== m && (void 0 === $jscomp.propertyToPolyfillSymbol[a] && ((m = (1e9 * Math.random()) >>> 0), ($jscomp.propertyToPolyfillSymbol[a] = $jscomp.IS_SYMBOL_NATIVE ? $jscomp.global.Symbol(a) : $jscomp.POLYFILL_PREFIX + m + '$' + a)), $jscomp.defineProperty(l, $jscomp.propertyToPolyfillSymbol[a], { configurable: !0, writable: !0, value: k }))); }; $jscomp.initSymbol = function () {}; $jscomp.polyfill( 'Symbol', function (f) { if (f) return f; var k = function (q, z) { this.$jscomp$symbol$id_ = q; $jscomp.defineProperty(this, 'description', { configurable: !0, writable: !0, value: z }); }; k.prototype.toString = function () { return this.$jscomp$symbol$id_; }; var m = 'jscomp_symbol_' + ((1e9 * Math.random()) >>> 0) + '_', l = 0, a = function (q) { if (this instanceof a) throw new TypeError('Symbol is not a constructor'); return new k(m + (q || '') + '_' + l++, q); }; return a; }, 'es6', 'es3' ); $jscomp.polyfill( 'Symbol.iterator', function (f) { if (f) return f; f = Symbol('Symbol.iterator'); for ( var k = 'Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array'.split( ' ' ), m = 0; m < k.length; m++ ) { var l = $jscomp.global[k[m]]; 'function' === typeof l && 'function' != typeof l.prototype[f] && $jscomp.defineProperty(l.prototype, f, { configurable: !0, writable: !0, value: function () { return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this)); } }); } return f; }, 'es6', 'es3' ); $jscomp.iteratorPrototype = function (f) { f = { next: f }; f[Symbol.iterator] = function () { return this; }; return f; }; Array.from || (Array.from = (function () { var f = Object.prototype.toString, k = function (l) { return 'function' === typeof l || '[object Function]' === f.call(l); }, m = Math.pow(2, 53) - 1; return function (l) { var a = Object(l); if (null == l) throw new TypeError( 'Array.from requires an array-like object - not null or undefined' ); var q = 1 < arguments.length ? arguments[1] : void 0, z; if ('undefined' !== typeof q) { if (!k(q)) throw new TypeError( 'Array.from: when provided, the second argument must be a function' ); 2 < arguments.length && (z = arguments[2]); } var w = Number(a.length); w = isNaN(w) ? 0 : 0 !== w && isFinite(w) ? (0 < w ? 1 : -1) * Math.floor(Math.abs(w)) : w; w = Math.min(Math.max(w, 0), m); for ( var b = k(this) ? Object(new this(w)) : Array(w), c = 0, d; c < w; ) (d = a[c]), (b[c] = q ? 'undefined' === typeof z ? q(d, c) : q.call(z, d, c) : d), (c += 1); b.length = w; return b; }; })()); if (!isNaN) var isNaN = function (f) { f = Number(f); return f !== f; }; (function (f, k) { 'object' === typeof exports && 'undefined' !== typeof module ? k() : 'function' === typeof define && define.amd ? define(k) : k(); })(this, function () { function f(m) { f = 'function' === typeof Symbol && 'symbol' === typeof Symbol.iterator ? function (l) { return typeof l; } : function (l) { return l && 'function' === typeof Symbol && l.constructor === Symbol && l !== Symbol.prototype ? 'symbol' : typeof l; }; return f(m); } function k(m, l) { var a = this.event && this.event.type; a = 'unload' === a || 'beforeunload' === a; var q = 'XMLHttpRequest' in this ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); q.open('POST', m, !a); q.withCredentials = !0; q.setRequestHeader('Accept', '*/*'); 'string' === typeof l ? (q.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'), (q.responseType = 'text')) : l instanceof Blob && l.type && q.setRequestHeader('Content-Type', l.type); try { q.send(l); } catch (z) { return !1; } return !0; } (function () { 'navigator' in this || (this.navigator = {}); 'function' !== typeof this.navigator.sendBeacon && (this.navigator.sendBeacon = k.bind(this)); }).call( 'object' === ('undefined' === typeof window ? 'undefined' : f(window)) ? window : {} ); }); if ('undefined' != typeof responsiveVoice) console.log('ResponsiveVoice already loaded'), console.log(responsiveVoice); else var ResponsiveVoice = function () { function f(b) { b = b.replace(/([\n\r])+/gm, '\n'); for ( var c = /([,.:!\u00a1?\u00bf;()\[\]\u2014\u00ab\u00bb])+[\n\r]/gm, d = !0; d; ) null === b.match(c) ? (d = !1) : (b = b.replace(c, '$1 ')); return b; } function k(b, c) { if (!q) return b; console.log(c); var d = b; try { for (var e = 0; e < q.length; e++) { var n = q[e], g = !1, h = n.collectionvoices; h ? (Array.isArray(h) || (h = [h]), c.collectionvoice && c.collectionvoice.name && -1 != h.indexOf(c.collectionvoice.name) && (g = !0)) : (g = !0); var r = !1, p = n.systemvoices; p ? (Array.isArray(p) || (p = [p]), c.systemvoice && c.systemvoice.name && -1 != p.indexOf(c.systemvoice.name) && (r = !0)) : (r = !0); (null == h || (null != h && g)) && (null == p || (null != p && r)) && (d = d.replace(n.searchvalue, n.newvalue)); } return d; } catch (u) { return ( console.warn( 'ResponsiveVoice: There was an error while processing the textReplacements array' ), b ); } } function m() { var b = document.getElementsByTagName('script'), c; for (c = 0; c < b.length; ++c) if (b[c].src && w.test(b[c].src)) { var d = b[c].src; var e = document.createElement('a'); var n = {}; e.href = d; if (e.search) { var g = e.search.replace(/^\?/, '').split('&'); for (d = 0; d < g.length; d++) (e = g[d].split('=')), (n[e[0]] = e[1]); n = n.source ? n.source : !1; } else n = !1; if (n && 'wp-plugin' == n) return (w.lastIndex = 0), !0; } return !1; } function l() { var b = document.getElementsByTagName('script'), c; for (c = 0; c < b.length; ++c) if (b[c].src && w.test(b[c].src)) return (w.lastIndex = 0), !1; return !0; } var a = this; a.version = '1.8.3'; console.log('ResponsiveVoice r' + a.version); a.responsivevoices = [ { name: 'UK English Female', flag: 'gb', gender: 'f', lang: 'en-GB', voiceIDs: [ 3, 7, 171, 201, 5, 1, 528, 257, 286, 342, 258, 287, 343, 8 ] }, { name: 'UK English Male', flag: 'gb', gender: 'm', lang: 'en-GB', voiceIDs: [0, 277, 202, 75, 4, 2, 256, 285, 341, 159] }, { name: 'US English Female', flag: 'us', gender: 'f', lang: 'en-US', voiceIDs: [ 432, 433, 434, 40, 41, 42, 383, 205, 204, 43, 481, 173, 235, 283, 339, 408, 44 ] }, { name: 'US English Male', flag: 'us', gender: 'm', lang: 'en-US', voiceIDs: [ 431, 39, 234, 282, 338, 236, 284, 340, 2, 4, 0, 75, 195, 169 ] }, { name: 'Arabic Male', flag: 'ar', gender: 'm', lang: 'ar-SA', voiceIDs: [96, 95, 97, 196, 388] }, { name: 'Arabic Female', flag: 'ar', gender: 'f', lang: 'ar-SA', voiceIDs: [483, 98] }, { name: 'Armenian Male', flag: 'hy', gender: 'f', lang: 'hy-AM', voiceIDs: [99] }, { name: 'Australian Female', flag: 'au', gender: 'f', lang: 'en-AU', voiceIDs: [495, 415, 276, 201, 87, 5, 88] }, { name: 'Australian Male', flag: 'au', gender: 'm', lang: 'en-AU', voiceIDs: [86, 386] }, { name: 'Bangla Bangladesh Female', flag: 'bd', gender: 'f', lang: 'bn-BD', voiceIDs: [435] }, { name: 'Bangla Bangladesh Male', flag: 'bd', gender: 'm', lang: 'bn-BD', voiceIDs: [485, 410, 436] }, { name: 'Bangla India Female', flag: 'bd', gender: 'f', lang: 'bn-IN', voiceIDs: [447] }, { name: 'Bangla India Male', flag: 'bd', gender: 'm', lang: 'bn-IN', voiceIDs: [492, 411, 448] }, { name: 'Brazilian Portuguese Female', flag: 'br', gender: 'f', lang: 'pt-BR', voiceIDs: [245, 124, 123, 125, 499, 186, 223, 126] }, { name: 'Brazilian Portuguese Male', flag: 'br', gender: 'm', lang: 'pt-BR', voiceIDs: [315, 332, 371, 399], deprecated: !0 }, { name: 'Chinese Female', flag: 'cn', gender: 'f', lang: 'zh-CN', voiceIDs: [ 249, 58, 59, 452, 380, 281, 231, 155, 60, 513, 191, 268, 297, 353, 269, 298, 354, 409, 61 ] }, { name: 'Chinese Male', flag: 'cn', gender: 'm', lang: 'zh-CN', voiceIDs: [317, 334, 373, 389] }, { name: 'Chinese (Hong Kong) Female', flag: 'hk', gender: 'f', lang: 'zh-HK', voiceIDs: [ 463, 464, 192, 193, 232, 250, 251, 270, 299, 355, 409, 444, 252 ] }, { name: 'Chinese (Hong Kong) Male', flag: 'hk', gender: 'm', lang: 'zh-HK', voiceIDs: [430, 318, 335, 374, 445, 390] }, { name: 'Chinese Taiwan Female', flag: 'tw', gender: 'f', lang: 'zh-TW', voiceIDs: [ 469, 194, 233, 253, 254, 305, 322, 361, 384, 319, 336, 375, 409, 255 ] }, { name: 'Chinese Taiwan Male', flag: 'tw', gender: 'm', lang: 'zh-TW', voiceIDs: [320, 337, 376, 391] }, { name: 'Czech Female', flag: 'cz', gender: 'f', lang: 'cs-CZ', voiceIDs: [504, 412, 101, 100, 102, 197, 103] }, { name: 'Czech Male', flag: 'cz', gender: 'm', lang: 'cs-CZ', voiceIDs: [161], deprecated: !0 }, { name: 'Danish Female', flag: 'dk', gender: 'f', lang: 'da-DK', voiceIDs: [474, 413, 105, 104, 106, 198, 107] }, { name: 'Danish Male', flag: 'da', gender: 'm', lang: 'da-DK', voiceIDs: [162], deprecated: !0 }, { name: 'Deutsch Female', flag: 'de', gender: 'f', lang: 'de-DE', voiceIDs: [ 27, 28, 29, 30, 78, 170, 275, 199, 31, 502, 261, 290, 346, 262, 291, 347, 32 ] }, { name: 'Deutsch Male', flag: 'de', gender: 'm', lang: 'de-DE', voiceIDs: [307, 324, 363, 377, 393] }, { name: 'Dutch Female', flag: 'nl', gender: 'f', lang: 'nl-NL', voiceIDs: [243, 219, 84, 157, 158, 496, 184, 45] }, { name: 'Dutch Male', flag: 'nl', gender: 'm', lang: 'nl-NL', voiceIDs: [157, 220, 407] }, { name: 'Estonian Male', flag: 'ee', gender: 'm', lang: 'et-EE', voiceIDs: [476, 416, 446] }, { name: 'Filipino Female', flag: 'ph', gender: 'f', lang: 'fil-PH', voiceIDs: [507, 418, 437] }, { name: 'Finnish Female', flag: 'fi', gender: 'f', lang: 'fi-FI', voiceIDs: [490, 417, 90, 89, 91, 209, 92] }, { name: 'Finnish Male', flag: 'fi', gender: 'm', lang: 'fi-FI', voiceIDs: [160], deprecated: !0 }, { name: 'French Female', flag: 'fr', gender: 'f', lang: 'fr-FR', voiceIDs: [ 240, 21, 22, 23, 77, 178, 279, 210, 493, 266, 295, 351, 304, 321, 360, 26 ] }, { name: 'French Male', flag: 'fr', gender: 'm', lang: 'fr-FR', voiceIDs: [311, 328, 367, 378, 392] }, { name: 'French Canadian Female', flag: 'ca', gender: 'f', lang: 'fr-CA', voiceIDs: [497, 419, 210, 449] }, { name: 'French Canadian Male', flag: 'ca', gender: 'm', lang: 'fr-CA', voiceIDs: [450] }, { name: 'Greek Female', flag: 'gr', gender: 'f', lang: 'el-GR', voiceIDs: [488, 414, 62, 63, 80, 200, 64] }, { name: 'Greek Male', flag: 'gr', gender: 'm', lang: 'el-GR', voiceIDs: [163], deprecated: !0 }, { name: 'Hindi Female', flag: 'hi', gender: 'f', lang: 'hi-IN', voiceIDs: [247, 66, 154, 179, 213, 489, 259, 288, 344, 67] }, { name: 'Hindi Male', flag: 'hi', gender: 'm', lang: 'hi-IN', voiceIDs: [394] }, { name: 'Hungarian Female', flag: 'hu', gender: 'f', lang: 'hu-HU', voiceIDs: [470, 420, 9, 10, 81, 214, 11] }, { name: 'Hungarian Male', flag: 'hu', gender: 'm', lang: 'hu-HU', voiceIDs: [164], deprecated: !0 }, { name: 'Indonesian Female', flag: 'id', gender: 'f', lang: 'id-ID', voiceIDs: [241, 111, 112, 524, 180, 215, 113] }, { name: 'Indonesian Male', flag: 'id', gender: 'm', lang: 'id-ID', voiceIDs: [395] }, { name: 'Italian Female', flag: 'it', gender: 'f', lang: 'it-IT', voiceIDs: [ 242, 33, 34, 35, 36, 37, 79, 181, 216, 508, 271, 300, 356, 38 ] }, { name: 'Italian Male', flag: 'it', gender: 'm', lang: 'it-IT', voiceIDs: [312, 329, 368, 406] }, { name: 'Japanese Female', flag: 'jp', gender: 'f', lang: 'ja-JP', voiceIDs: [ 51, 280, 217, 52, 153, 517, 182, 273, 302, 358, 274, 303, 359, 53 ] }, { name: 'Japanese Male', flag: 'jp', gender: 'm', lang: 'ja-JP', voiceIDs: [248, 50, 313, 330, 369, 396] }, { name: 'Korean Female', flag: 'kr', gender: 'f', lang: 'ko-KR', voiceIDs: [54, 55, 56, 156, 183, 218, 466, 306, 323, 362, 384, 57] }, { name: 'Korean Male', flag: 'kr', gender: 'm', lang: 'ko-KR', voiceIDs: [397] }, { name: 'Latin Female', flag: 'va', gender: 'f', lang: 'la', voiceIDs: [114], deprecated: !0 }, { name: 'Latin Male', flag: 'va', gender: 'm', lang: 'la', voiceIDs: [165] }, { name: 'Nepali', flag: 'np', gender: 'f', lang: 'ne-NP', voiceIDs: [509, 423, 441] }, { name: 'Norwegian Female', flag: 'no', gender: 'f', lang: 'nb-NO', voiceIDs: [473, 422, 72, 73, 221, 74] }, { name: 'Norwegian Male', flag: 'no', gender: 'm', lang: 'nb-NO', voiceIDs: [166] }, { name: 'Polish Female', flag: 'pl', gender: 'f', lang: 'pl-PL', voiceIDs: [244, 120, 119, 121, 185, 222, 505, 267, 296, 352, 122] }, { name: 'Polish Male', flag: 'pl', gender: 'm', lang: 'pl-PL', voiceIDs: [314, 331, 370, 398] }, { name: 'Portuguese Female', flag: 'br', gender: 'f', lang: 'pt-BR', voiceIDs: [128, 127, 129, 187, 224, 479, 272, 301, 357, 130] }, { name: 'Portuguese Male', flag: 'br', gender: 'm', lang: 'pt-BR', voiceIDs: [400] }, { name: 'Romanian Female', flag: 'ro', gender: 'f', lang: 'ro-RO', voiceIDs: [526, 424, 151, 150, 152, 225, 46] }, { name: 'Russian Female', flag: 'ru', gender: 'f', lang: 'ru-RU', voiceIDs: [246, 47, 48, 83, 468, 188, 226, 260, 289, 345, 49] }, { name: 'Russian Male', flag: 'ru', gender: 'm', lang: 'ru-RU', voiceIDs: [316, 333, 372, 387], deprecated: !0 }, { name: 'Sinhala', flag: 'lk', gender: 'f', lang: 'si-LK', voiceIDs: [501, 425, 442] }, { name: 'Slovak Female', flag: 'sk', gender: 'f', lang: 'sk-SK', voiceIDs: [506, 426, 133, 132, 134, 227, 135] }, { name: 'Slovak Male', flag: 'sk', gender: 'm', lang: 'sk-SK', voiceIDs: [167], deprecated: !0 }, { name: 'Spanish Female', flag: 'es', gender: 'f', lang: 'es-ES', voiceIDs: [ 19, 238, 16, 17, 18, 20, 76, 174, 207, 514, 521, 263, 292, 348, 264, 293, 349, 15 ] }, { name: 'Spanish Male', flag: 'es', gender: 'm', lang: 'es-ES', voiceIDs: [309, 326, 365, 401], deprecated: !0 }, { name: 'Spanish Latin American Female', flag: 'es', gender: 'f', lang: 'es-MX', voiceIDs: [239, 137, 136, 138, 175, 208, 265, 294, 350, 139] }, { name: 'Spanish Latin American Male', flag: 'es', gender: 'm', lang: 'es-MX', voiceIDs: [136, 310, 327, 366, 402] }, { name: 'Swedish Female', flag: 'sv', gender: 'f', lang: 'sv-SE', voiceIDs: [482, 427, 85, 149, 228, 65] }, { name: 'Swedish Male', flag: 'sv', gender: 'm', lang: 'sv-SE', voiceIDs: [148, 168] }, { name: 'Tamil Female', flag: 'hi', gender: 'm', lang: 'hi-IN', voiceIDs: [458, 516, 451] }, { name: 'Tamil Male', flag: 'hi', gender: 'm', lang: 'hi-IN', voiceIDs: [141] }, { name: 'Thai Female', flag: 'th', gender: 'f', lang: 'th-TH', voiceIDs: [143, 142, 144, 471, 189, 229, 145] }, { name: 'Thai Male', flag: 'th', gender: 'm', lang: 'th-TH', voiceIDs: [403] }, { name: 'Turkish Female', flag: 'tr', gender: 'f', lang: 'tr-TR', voiceIDs: [69, 70, 82, 475, 190, 230, 71] }, { name: 'Turkish Male', flag: 'tr', gender: 'm', lang: 'tr-TR', voiceIDs: [465, 404] }, { name: 'Ukrainian Female', flag: 'ua', gender: 'f', lang: 'uk-UA', voiceIDs: [494, 428, 443] }, { name: 'Vietnamese Female', flag: 'vi', gender: 'f', lang: 'vi-VN', voiceIDs: [480, 429, 405] }, { name: 'Vietnamese Male', flag: 'vi', gender: 'm', lang: 'vi-VN', voiceIDs: [146] }, { name: 'Afrikaans Male', flag: 'af', gender: 'm', lang: 'af-ZA', voiceIDs: [93] }, { name: 'Albanian Male', flag: 'sq', gender: 'm', lang: 'sq-AL', voiceIDs: [94] }, { name: 'Bosnian Male', flag: 'bs', gender: 'm', lang: 'bs', voiceIDs: [14] }, { name: 'Catalan Male', flag: 'catalonia', gender: 'm', lang: 'ca-ES', voiceIDs: [68] }, { name: 'Croatian Male', flag: 'hr', gender: 'm', lang: 'hr-HR', voiceIDs: [13] }, { name: 'Esperanto Male', flag: 'eo', gender: 'm', lang: 'eo', voiceIDs: [108] }, { name: 'Icelandic Male', flag: 'is', gender: 'm', lang: 'is-IS', voiceIDs: [110], deprecated: !0 }, { name: 'Icelandic Female', flag: 'is', gender: 'm', lang: 'is-IS', voiceIDs: [110] }, { name: 'Latvian Male', flag: 'lv', gender: 'm', lang: 'lv-LV', voiceIDs: [115] }, { name: 'Macedonian Male', flag: 'mk', gender: 'm', lang: 'mk-MK', voiceIDs: [116] }, { name: 'Moldavian Female', flag: 'md', gender: 'f', lang: 'md', voiceIDs: [117] }, { name: 'Moldavian Male', flag: 'md', gender: 'm', lang: 'md', voiceIDs: [117], deprecated: !0 }, { name: 'Montenegrin Male', flag: 'me', gender: 'm', lang: 'me', voiceIDs: [118] }, { name: 'Serbian Male', flag: 'sr', gender: 'm', lang: 'sr-RS', voiceIDs: [12] }, { name: 'Serbo-Croatian Male', flag: 'hr', gender: 'm', lang: 'hr-HR', voiceIDs: [131] }, { name: 'Swahili Male', flag: 'sw', gender: 'm', lang: 'sw-KE', voiceIDs: [140] }, { name: 'Welsh Male', flag: 'cy', gender: 'm', lang: 'cy', voiceIDs: [147] }, { name: 'Fallback UK Female', flag: 'gb', gender: 'f', lang: 'en-GB', voiceIDs: [8] } ]; a.voicecollection = [ { name: 'Google UK English Male' }, { name: 'Agnes' }, { name: 'Daniel Compact' }, { name: 'Google UK English Female' }, { name: 'en-GB', rate: 0.25, pitch: 1 }, { name: 'en-AU', rate: 0.25, pitch: 1 }, { name: 'ingl\u00e9s Reino Unido' }, { name: 'English United Kingdom' }, { name: 'Fallback en-GB Female', lang: 'en-GB', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Eszter Compact' }, { name: 'hu-HU', rate: 0.4 }, { name: 'Fallback Hungarian Female', lang: 'hu', fallbackvoice: !0, service: 'g1' }, { name: 'Fallback Serbian Male', lang: 'sr', fallbackvoice: !0, service: 'g1', gender: 'male' }, { name: 'Fallback Croatian Male', lang: 'hr', rate: 0.5, fallbackvoice: !0, service: 'g2', gender: 'male' }, { name: 'Fallback Bosnian Male', lang: 'bs', fallbackvoice: !0, service: 'g2', gender: 'male' }, { name: 'Fallback Spanish Female', lang: 'es', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Spanish Spain' }, { name: 'espa\u00f1ol Espa\u00f1a' }, { name: 'Diego Compact', rate: 0.3 }, { name: 'Google Espa\u00f1ol' }, { name: 'es-ES', rate: 0.2 }, { name: 'Google Fran\u00e7ais' }, { name: 'French France' }, { name: 'franc\u00e9s Francia' }, { name: 'Virginie Compact', rate: 0.5 }, { name: 'fr-FR', rate: 0.25 }, { name: 'Fallback French Female', lang: 'fr', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Google Deutsch' }, { name: 'German Germany' }, { name: 'alem\u00e1n Alemania' }, { name: 'Yannick Compact', rate: 0.5 }, { name: 'de-DE', rate: 0.25 }, { name: 'Fallback Deutsch Female', lang: 'de', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Google Italiano' }, { name: 'Italian Italy' }, { name: 'italiano Italia' }, { name: 'Paolo Compact', rate: 0.5 }, { name: 'it-IT', rate: 0.25 }, { name: 'Fallback Italian Female', lang: 'it', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Google US English', timerSpeed: 1 }, { name: 'English United States' }, { name: 'ingl\u00e9s Estados Unidos' }, { name: 'Vicki' }, { name: 'en-US', rate: 0.2, pitch: 1, timerSpeed: 1.3 }, { name: 'Fallback US English', lang: 'en-US', fallbackvoice: !0, timerSpeed: 0, service: 'g1', gender: 'female' }, { name: 'Fallback Dutch Female', lang: 'nl', fallbackvoice: !0, timerSpeed: 0, service: 'g1', gender: 'female' }, { name: 'Fallback Romanian', lang: 'ro', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Milena Compact' }, { name: 'ru-RU', rate: 0.25 }, { name: 'Fallback Russian', lang: 'ru', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Google \u65e5\u672c\u4eba', timerSpeed: 1 }, { name: 'Kyoko Compact' }, { name: 'ja-JP', rate: 0.25 }, { name: 'Fallback Japanese Female', lang: 'ja', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Google \ud55c\uad6d\uc758', timerSpeed: 1 }, { name: 'Narae Compact' }, { name: 'ko-KR', rate: 0.25 }, { name: 'Fallback Korean Female', lang: 'ko', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Google \u4e2d\u56fd\u7684', timerSpeed: 1 }, { name: 'Ting-Ting Compact' }, { name: 'zh-CN', rate: 0.25 }, { name: 'Fallback Chinese', lang: 'zh-CN', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Alexandros Compact' }, { name: 'el-GR', rate: 0.25 }, { name: 'Fallback Greek', lang: 'el', fallbackvoice: !0, service: 'g3', gender: 'female' }, { name: 'Fallback Swedish', lang: 'sv', fallbackvoice: !0, service: 'g3', gender: 'female' }, { name: 'hi-IN', rate: 0.25 }, { name: 'Fallback Hindi Female', lang: 'hi', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Fallback Catalan', lang: 'ca', fallbackvoice: !0, service: 'g1', gender: 'male' }, { name: 'Aylin Compact' }, { name: 'tr-TR', rate: 0.25 }, { name: 'Fallback Turkish', lang: 'tr', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Stine Compact' }, { name: 'no-NO', rate: 0.25 }, { name: 'Fallback Norwegian', lang: 'no', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Daniel' }, { name: 'Monica' }, { name: 'Amelie' }, { name: 'Anna' }, { name: 'Alice' }, { name: 'Melina' }, { name: 'Mariska' }, { name: 'Yelda' }, { name: 'Milena' }, { name: 'Xander' }, { name: 'Alva' }, { name: 'Lee Compact' }, { name: 'Karen' }, { name: 'Fallback Australian Female', lang: 'en-AU', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Mikko Compact' }, { name: 'Satu' }, { name: 'fi-FI', rate: 0.25 }, { name: 'Fallback Finnish', lang: 'fi', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Fallback Afrikans', lang: 'af', fallbackvoice: !0, service: 'g1', gender: 'male' }, { name: 'Fallback Albanian', lang: 'sq', fallbackvoice: !0, service: 'g2', gender: 'male' }, { name: 'Maged Compact' }, { name: 'Tarik' }, { name: 'ar-SA', rate: 0.25 }, { name: 'Fallback Arabic', lang: 'ar', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Fallback Armenian', lang: 'hy', fallbackvoice: !0, service: 'g5', gender: 'male' }, { name: 'Zuzana Compact' }, { name: 'Zuzana' }, { name: 'cs-CZ', rate: 0.25 }, { name: 'Fallback Czech', lang: 'cs', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Ida Compact' }, { name: 'Sara' }, { name: 'da-DK', rate: 0.25 }, { name: 'Fallback Danish', lang: 'da', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Fallback Esperanto', lang: 'eo', fallbackvoice: !0, service: 'g5', gender: 'male' }, { name: 'Fallback Haitian Creole', lang: 'ht', fallbackvoice: !0 }, { name: 'Fallback Icelandic', lang: 'is', fallbackvoice: !0, service: 'g1', gender: 'male' }, { name: 'Damayanti' }, { name: 'id-ID', rate: 0.25 }, { name: 'Fallback Indonesian Female', lang: 'id', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Fallback Latin Female', lang: 'la', fallbackvoice: !0, service: 'g2', gender: 'female' }, { name: 'Fallback Latvian Male', lang: 'lv', fallbackvoice: !0, service: 'g1', gender: 'male' }, { name: 'Fallback Macedonian Male', lang: 'mk', fallbackvoice: !0, service: 'g5', gender: 'male' }, { name: 'Fallback Moldavian Female', lang: 'mo', fallbackvoice: !0, service: 'g2', gender: 'female' }, { name: 'Fallback Montenegrin Male', lang: 'sr-ME', fallbackvoice: !0, service: 'g1', gender: 'male' }, { name: 'Agata Compact' }, { name: 'Zosia' }, { name: 'pl-PL', rate: 0.25 }, { name: 'Fallback Polish Female', lang: 'pl', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Raquel Compact' }, { name: 'Luciana' }, { name: 'pt-BR', rate: 0.25 }, { name: 'Fallback Brazilian Portuguese Female', lang: 'pt-BR', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Joana Compact' }, { name: 'Joana' }, { name: 'pt-PT', rate: 0.25 }, { name: 'Fallback Portuguese', lang: 'pt-PT', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Fallback Serbo-Croation', lang: 'sh', fallbackvoice: !0, service: 'g2', gender: 'male' }, { name: 'Laura Compact' }, { name: 'Laura' }, { name: 'sk-SK', rate: 0.25 }, { name: 'Fallback Slovak', lang: 'sk', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Javier Compact' }, { name: 'Paulina' }, { name: 'es-MX', rate: 0.25 }, { name: 'Fallback Spanish (Latin American) Female', lang: 'es-419', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Fallback Swahili', lang: 'sw', fallbackvoice: !0, service: 'g2', gender: 'male' }, { name: 'Fallback Tamil', lang: 'ta', fallbackvoice: !0, service: 'g1', gender: 'male' }, { name: 'Narisa Compact' }, { name: 'Kanya' }, { name: 'th-TH', rate: 0.25 }, { name: 'Fallback Thai Female', lang: 'th', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Fallback Vietnamese Male', lang: 'vi', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Welsh', lang: 'cy', fallbackvoice: !0, service: 'g5', gender: 'male' }, { name: 'Oskar Compact' }, { name: 'sv-SE', rate: 0.25 }, { name: 'Simona Compact' }, { name: 'Ioana' }, { name: 'ro-RO', rate: 0.25 }, { name: 'Kyoko' }, { name: 'Lekha' }, { name: 'Ting-Ting' }, { name: 'Yuna' }, { name: 'Xander Compact' }, { name: 'nl-NL', rate: 0.25 }, { name: 'Fallback UK English Male', lang: 'en-GB', fallbackvoice: !0, service: 'g1', voicename: 'rjs', gender: 'male' }, { name: 'Finnish Male', lang: 'fi', fallbackvoice: !0, service: 'g3', voicename: '', gender: 'male', deprecated: !0 }, { name: 'Czech Male', lang: 'cs', fallbackvoice: !0, service: 'g3', voicename: '', gender: 'male', deprecated: !0 }, { name: 'Danish Male', lang: 'da', fallbackvoice: !0, service: 'g3', voicename: '', gender: 'male', deprecated: !0 }, { name: 'Greek Male', lang: 'el', fallbackvoice: !0, service: 'g3', voicename: '', gender: 'male', deprecated: !0 }, { name: 'Hungarian Male', lang: 'hu', fallbackvoice: !0, service: 'g3', voicename: '', gender: 'male', deprecated: !0 }, { name: 'Latin Male', lang: 'la', fallbackvoice: !0, service: 'g2', voicename: '', gender: 'male' }, { name: 'Norwegian Male', lang: 'no', fallbackvoice: !0, service: 'g3', voicename: '', gender: 'male' }, { name: 'Slovak Male', lang: 'sk', fallbackvoice: !0, service: 'g3', voicename: '', gender: 'male', deprecated: !0 }, { name: 'Swedish Male', lang: 'sv', fallbackvoice: !0, service: 'g3', voicename: '', gender: 'male' }, { name: 'Fallback US English Male', lang: 'en-US', fallbackvoice: !0, service: 'g3', voicename: '', gender: 'male' }, { name: 'German Germany', lang: 'de_DE' }, { name: 'English United Kingdom', lang: 'en_GB' }, { name: 'English India', lang: 'en_IN' }, { name: 'English United States', lang: 'en_US' }, { name: 'Spanish Spain', lang: 'es_ES' }, { name: 'Spanish Mexico', lang: 'es_MX' }, { name: 'Spanish United States', lang: 'es_US' }, { name: 'French Belgium', lang: 'fr_BE' }, { name: 'French France', lang: 'fr_FR' }, { name: 'Hindi India', lang: 'hi_IN' }, { name: 'Indonesian Indonesia', lang: 'in_ID' }, { name: 'Italian Italy', lang: 'it_IT' }, { name: 'Japanese Japan', lang: 'ja_JP' }, { name: 'Korean South Korea', lang: 'ko_KR' }, { name: 'Dutch Netherlands', lang: 'nl_NL' }, { name: 'Polish Poland', lang: 'pl_PL' }, { name: 'Portuguese Brazil', lang: 'pt_BR' }, { name: 'Portuguese Portugal', lang: 'pt_PT' }, { name: 'Russian Russia', lang: 'ru_RU' }, { name: 'Thai Thailand', lang: 'th_TH' }, { name: 'Turkish Turkey', lang: 'tr_TR' }, { name: 'Chinese China', lang: 'zh_CN_#Hans' }, { name: 'Chinese Hong Kong', lang: 'zh_HK_#Hans' }, { name: 'Chinese Hong Kong', lang: 'zh_HK_#Hant' }, { name: 'Chinese Taiwan', lang: 'zh_TW_#Hant' }, { name: 'Alex' }, { name: 'Maged', lang: 'ar-SA' }, { name: 'Zuzana', lang: 'cs-CZ' }, { name: 'Sara', lang: 'da-DK' }, { name: 'Anna', lang: 'de-DE' }, { name: 'Melina', lang: 'el-GR' }, { name: 'Karen', lang: 'en-AU' }, { name: 'Daniel', lang: 'en-GB' }, { name: 'Moira', lang: 'en-IE' }, { name: 'Samantha (Enhanced)', lang: 'en-US' }, { name: 'Samantha', lang: 'en-US' }, { name: 'Tessa', lang: 'en-ZA' }, { name: 'Monica', lang: 'es-ES' }, { name: 'Paulina', lang: 'es-MX' }, { name: 'Satu', lang: 'fi-FI' }, { name: 'Amelie', lang: 'fr-CA' }, { name: 'Thomas', lang: 'fr-FR' }, { name: 'Carmit', lang: 'he-IL' }, { name: 'Lekha', lang: 'hi-IN' }, { name: 'Mariska', lang: 'hu-HU' }, { name: 'Damayanti', lang: 'id-ID' }, { name: 'Alice', lang: 'it-IT' }, { name: 'Kyoko', lang: 'ja-JP' }, { name: 'Yuna', lang: 'ko-KR' }, { name: 'Ellen', lang: 'nl-BE' }, { name: 'Xander', lang: 'nl-NL' }, { name: 'Nora', lang: 'no-NO' }, { name: 'Zosia', lang: 'pl-PL' }, { name: 'Luciana', lang: 'pt-BR' }, { name: 'Joana', lang: 'pt-PT' }, { name: 'Ioana', lang: 'ro-RO' }, { name: 'Milena', lang: 'ru-RU' }, { name: 'Laura', lang: 'sk-SK' }, { name: 'Alva', lang: 'sv-SE' }, { name: 'Kanya', lang: 'th-TH' }, { name: 'Yelda', lang: 'tr-TR' }, { name: 'Ting-Ting', lang: 'zh-CN' }, { name: 'Sin-Ji', lang: 'zh-HK' }, { name: 'Mei-Jia', lang: 'zh-TW' }, { name: 'Microsoft David Mobile - English (United States)', lang: 'en-US' }, { name: 'Microsoft Zira Mobile - English (United States)', lang: 'en-US' }, { name: 'Microsoft Mark Mobile - English (United States)', lang: 'en-US' }, { name: 'native', lang: '' }, { name: 'Google espa\u00f1ol' }, { name: 'Google espa\u00f1ol de Estados Unidos' }, { name: 'Google fran\u00e7ais' }, { name: 'Google Bahasa Indonesia' }, { name: 'Google italiano' }, { name: 'Google Nederlands' }, { name: 'Google polski' }, { name: 'Google portugu\u00eas do Brasil' }, { name: 'Google \u0440\u0443\u0441\u0441\u043a\u0438\u0439' }, { name: 'Google \u0939\u093f\u0928\u094d\u0926\u0940' }, { name: 'Google \u65e5\u672c\u8a9e' }, { name: 'Google \u666e\u901a\u8bdd\uff08\u4e2d\u56fd\u5927\u9646\uff09' }, { name: 'Google \u7ca4\u8a9e\uff08\u9999\u6e2f\uff09' }, { name: 'zh-HK', rate: 0.25 }, { name: 'Fallback Chinese (Hong Kong) Female', lang: 'zh-HK', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Google \u7ca4\u8a9e\uff08\u9999\u6e2f\uff09' }, { name: 'zh-TW', rate: 0.25 }, { name: 'Fallback Chinese (Taiwan) Female', lang: 'zh-TW', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Microsoft George Mobile - English (United Kingdom)', lang: 'en-GB' }, { name: 'Microsoft Susan Mobile - English (United Kingdom)', lang: 'en-GB' }, { name: 'Microsoft Hazel Mobile - English (United Kingdom)', lang: 'en-GB' }, { name: 'Microsoft Heera Mobile - English (India)', lang: 'en-In' }, { name: 'Microsoft Irina Mobile - Russian (Russia)', lang: 'ru-RU' }, { name: 'Microsoft Hedda Mobile - German (Germany)', lang: 'de-DE' }, { name: 'Microsoft Katja Mobile - German (Germany)', lang: 'de-DE' }, { name: 'Microsoft Helena Mobile - Spanish (Spain)', lang: 'es-ES' }, { name: 'Microsoft Laura Mobile - Spanish (Spain)', lang: 'es-ES' }, { name: 'Microsoft Sabina Mobile - Spanish (Mexico)', lang: 'es-MX' }, { name: 'Microsoft Julie Mobile - French (France)', lang: 'fr-FR' }, { name: 'Microsoft Paulina Mobile - Polish (Poland)', lang: 'pl-PL' }, { name: 'Microsoft Huihui Mobile - Chinese (Simplified, PRC)', lang: 'zh-CN' }, { name: 'Microsoft Yaoyao Mobile - Chinese (Simplified, PRC)', lang: 'zh-CN' }, { name: 'Microsoft Tracy Mobile - Chinese (Traditional, Hong Kong S.A.R.)', lang: 'zh-CN' }, { name: 'Microsoft Elsa Mobile - Italian (Italy)', lang: 'it-IT' }, { name: 'Microsoft Maria Mobile - Portuguese (Brazil)', lang: 'pt-BR' }, { name: 'Microsoft Ayumi Mobile - Japanese (Japan)', lang: 'ja-JP' }, { name: 'Microsoft Haruka Mobile - Japanese (Japan)', lang: 'ja-JP' }, { name: 'Helena', lang: 'de-DE' }, { name: 'Catherine', lang: 'en-AU' }, { name: 'Arthur', lang: 'en-GB' }, { name: 'Martha', lang: 'en-GB' }, { name: 'Marie', lang: 'fr-FR' }, { name: 'O-ren', lang: 'ja-JP' }, { name: 'Yu-shu', lang: 'zh-CN' }, { name: 'Microsoft David - English (United States)', lang: 'en-US' }, { name: 'Microsoft Zira - English (United States)', lang: 'en-US' }, { name: 'Microsoft Mark - English (United States)', lang: 'en-US' }, { name: 'Microsoft George - English (United Kingdom)', lang: 'en-GB' }, { name: 'Microsoft Susan - English (United Kingdom)', lang: 'en-GB' }, { name: 'Microsoft Hazel - English (United Kingdom)', lang: 'en-GB' }, { name: 'Microsoft Heera - English (India)', lang: 'en-In' }, { name: 'Microsoft Irina - Russian (Russia)', lang: 'ru-RU' }, { name: 'Microsoft Hedda - German (Germany)', lang: 'de-DE' }, { name: 'Microsoft Katja - German (Germany)', lang: 'de-DE' }, { name: 'Microsoft Helena - Spanish (Spain)', lang: 'es-ES' }, { name: 'Microsoft Laura - Spanish (Spain)', lang: 'es-ES' }, { name: 'Microsoft Sabina - Spanish (Mexico)', lang: 'es-MX' }, { name: 'Microsoft Julie - French (France)', lang: 'fr-FR' }, { name: 'Microsoft Paulina - Polish (Poland)', lang: 'pl-PL' }, { name: 'Microsoft Huihui - Chinese (Simplified, PRC)', lang: 'zh-CN' }, { name: 'Microsoft Yaoyao - Chinese (Simplified, PRC)', lang: 'zh-CN' }, { name: 'Microsoft Tracy - Chinese (Traditional, Hong Kong S.A.R.)', lang: 'zh-CN' }, { name: 'Microsoft Elsa - Italian (Italy)', lang: 'it-IT' }, { name: 'Microsoft Maria - Portuguese (Brazil)', lang: 'pt-BR' }, { name: 'Microsoft Ayumi - Japanese (Japan)', lang: 'ja-JP' }, { name: 'Microsoft Haruka - Japanese (Japan)', lang: 'ja-JP' }, { name: 'Microsoft Hortense - French (France)', lang: 'fr-FR' }, { name: 'Microsoft Hanhan - Chinese (Traditional, Taiwan)', lang: 'zh-TW' }, { name: 'Microsoft Heami - Korean (Korean)', lang: 'ko-KR' }, { name: 'Microsoft Stefan - German (Germany)', lang: 'de-DE' }, { name: 'Microsoft Ravi - English (India)', lang: 'en-IN' }, { name: 'Microsoft Pablo - Spanish (Spain)', lang: 'es-ES' }, { name: 'Microsoft Raul - Spanish (Mexico)', lang: 'es-MX' }, { name: 'Microsoft Paul - French (France)', lang: 'fr-FR' }, { name: 'Microsoft Cosimo - Italian (Italy)', lang: 'it-IT' }, { name: 'Microsoft Ichiro - Japanese (Japan)', lang: 'ja-JP' }, { name: 'Microsoft Adam - Polish (Poland)', lang: 'pl-PL' }, { name: 'Microsoft Daniel - Portuguese (Brazil)', lang: 'pt-BR' }, { name: 'Microsoft Pavel - Russian (Russia)', lang: 'ru-RU' }, { name: 'Microsoft Kangkang - Chinese (Simplified, PRC)', lang: 'zh-CN' }, { name: 'Microsoft Danny - Chinese (Traditional, Hong Kong S.A.R.)', lang: 'zh-HK' }, { name: 'Microsoft Yating - Chinese (Traditional, Taiwan)', lang: 'zh-TW' }, { name: 'Microsoft Zhiwei - Chinese (Traditional, Taiwan)', lang: 'zh-TW' }, { name: 'Microsoft Hortense Mobile - French (France)', lang: 'fr-FR' }, { name: 'Microsoft Hanhan Mobile - Chinese (Traditional, Taiwan)', lang: 'zh-TW' }, { name: 'Microsoft Heami Mobile - Korean (Korean)', lang: 'ko-KR' }, { name: 'Microsoft Stefan Mobile - German (Germany)', lang: 'de-DE' }, { name: 'Microsoft Ravi Mobile - English (India)', lang: 'en-IN' }, { name: 'Microsoft Pablo Mobile - Spanish (Spain)', lang: 'es-ES' }, { name: 'Microsoft Raul Mobile - Spanish (Mexico)', lang: 'es-MX' }, { name: 'Microsoft Paul Mobile - French (France)', lang: 'fr-FR' }, { name: 'Microsoft Cosimo Mobile - Italian (Italy)', lang: 'it-IT' }, { name: 'Microsoft Ichiro Mobile - Japanese (Japan)', lang: 'ja-JP' }, { name: 'Microsoft Adam Mobile - Polish (Poland)', lang: 'pl-PL' }, { name: 'Microsoft Daniel Mobile - Portuguese (Brazil)', lang: 'pt-BR' }, { name: 'Microsoft Pavel Mobile - Russian (Russia)', lang: 'ru-RU' }, { name: 'Microsoft Kangkang Mobile - Chinese (Simplified, PRC)', lang: 'zh-CN' }, { name: 'Microsoft Danny Mobile - Chinese (Traditional, Hong Kong S.A.R.)', lang: 'zh-HK' }, { name: 'Microsoft Yating Mobile - Chinese (Traditional, Taiwan)', lang: 'zh-TW' }, { name: 'Microsoft Zhiwei Mobile - Chinese (Traditional, Taiwan)', lang: 'zh-TW' }, { name: 'Microsoft David Desktop - English (United States)', lang: 'en-US' }, { name: 'Microsoft Zira Desktop - English (United States)', lang: 'en-US' }, { name: 'Microsoft Mark Desktop - English (United States)', lang: 'en-US' }, { name: 'Microsoft George Desktop - English (United Kingdom)', lang: 'en-GB' }, { name: 'Microsoft Susan Desktop - English (United Kingdom)', lang: 'en-GB' }, { name: 'Microsoft Hazel Desktop - English (United Kingdom)', lang: 'en-GB' }, { name: 'Microsoft Heera Desktop - English (India)', lang: 'en-In' }, { name: 'Microsoft Irina Desktop - Russian (Russia)', lang: 'ru-RU' }, { name: 'Microsoft Hedda Desktop - German (Germany)', lang: 'de-DE' }, { name: 'Microsoft Katja Desktop - German (Germany)', lang: 'de-DE' }, { name: 'Microsoft Helena Desktop - Spanish (Spain)', lang: 'es-ES' }, { name: 'Microsoft Laura Desktop - Spanish (Spain)', lang: 'es-ES' }, { name: 'Microsoft Sabina Desktop - Spanish (Mexico)', lang: 'es-MX' }, { name: 'Microsoft Julie Desktop - French (France)', lang: 'fr-FR' }, { name: 'Microsoft Paulina Desktop - Polish (Poland)', lang: 'pl-PL' }, { name: 'Microsoft Huihui Desktop - Chinese (Simplified, PRC)', lang: 'zh-CN' }, { name: 'Microsoft Yaoyao Desktop - Chinese (Simplified, PRC)', lang: 'zh-CN' }, { name: 'Microsoft Tracy Desktop - Chinese (Traditional, Hong Kong S.A.R.)', lang: 'zh-CN' }, { name: 'Microsoft Elsa Desktop - Italian (Italy)', lang: 'it-IT' }, { name: 'Microsoft Maria Desktop - Portuguese (Brazil)', lang: 'pt-BR' }, { name: 'Microsoft Ayumi Desktop - Japanese (Japan)', lang: 'ja-JP' }, { name: 'Microsoft Haruka Desktop - Japanese (Japan)', lang: 'ja-JP' }, { name: 'Microsoft Hortense Desktop - French (France)', lang: 'fr-FR' }, { name: 'Microsoft Hanhan Desktop - Chinese (Traditional, Taiwan)', lang: 'zh-TW' }, { name: 'Microsoft Heami Desktop - Korean (Korean)', lang: 'ko-KR' }, { name: 'Microsoft Stefan Desktop - German (Germany)', lang: 'de-DE' }, { name: 'Microsoft Ravi Desktop - English (India)', lang: 'en-IN' }, { name: 'Microsoft Pablo Desktop - Spanish (Spain)', lang: 'es-ES' }, { name: 'Microsoft Raul Desktop - Spanish (Mexico)', lang: 'es-MX' }, { name: 'Microsoft Paul Desktop - French (France)', lang: 'fr-FR' }, { name: 'Microsoft Cosimo Desktop - Italian (Italy)', lang: 'it-IT' }, { name: 'Microsoft Ichiro Desktop - Japanese (Japan)', lang: 'ja-JP' }, { name: 'Microsoft Adam Desktop - Polish (Poland)', lang: 'pl-PL' }, { name: 'Microsoft Daniel Desktop - Portuguese (Brazil)', lang: 'pt-BR' }, { name: 'Microsoft Pavel Desktop - Russian (Russia)', lang: 'ru-RU' }, { name: 'Microsoft Kangkang Desktop - Chinese (Simplified, PRC)', lang: 'zh-CN' }, { name: 'Microsoft Danny Desktop - Chinese (Traditional, Hong Kong S.A.R.)', lang: 'zh-HK' }, { name: 'Microsoft Yating Desktop - Chinese (Traditional, Taiwan)', lang: 'zh-TW' }, { name: 'Microsoft Zhiwei Desktop - Chinese (Traditional, Taiwan)', lang: 'zh-TW' }, { name: 'Martin', lang: 'de-DE' }, { name: 'Daniel', lang: 'fr-FR' }, { name: 'Hattori', lang: 'ja-JP' }, { name: 'Li-mu', lang: 'zh-CN' }, { name: 'Gordon', lang: 'en-AU' }, { name: 'Aaron', lang: 'en-US' }, { name: 'Nicky', lang: 'en-US' }, { name: 'Microsoft Hanhan Desktop - Chinese (Taiwan)', lang: 'zh-TW' }, { name: 'Microsoft Heami Desktop - Korean', lang: 'ko-KR' }, { name: 'Fallback Australian Male', lang: 'en-AU', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Russian Male', lang: 'ru', fallbackvoice: !0, service: 'g3', gender: 'male', deprecated: !0 }, { name: 'Fallback Arabic Male', lang: 'ar', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Chinese', lang: 'zh-CN', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Chinese HK', lang: 'zh-HK', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Chinese TW', lang: 'zh-TW', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback French Male', lang: 'fr', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Deutsch Male', lang: 'de', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Hindi Male', lang: 'hi', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Indonesian Male', lang: 'id', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Japanese Male', lang: 'ja', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Korean Male', lang: 'ko', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Polish Male', lang: 'pl', fallbackvoice: !0, service: 'g1', gender: 'male' }, { name: 'Fallback Brazilian Portuguese Male', lang: 'pt-BR', fallbackvoice: !0, service: 'g3', gender: 'male', deprecated: !0 }, { name: 'Fallback Portuguese Male', lang: 'pt-PT', fallbackvoice: !0, service: 'g1', gender: 'male' }, { name: 'Fallback Spanish Male', lang: 'es', fallbackvoice: !0, service: 'g3', gender: 'male', deprecated: !0 }, { name: 'Fallback Spanish (Latin American) Male', lang: 'es-419', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Thai Male', lang: 'th', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Turkish Male', lang: 'tr', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Vietnamese Female', lang: 'vi', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Fallback Italian Male', lang: 'it', fallbackvoice: !0, service: 'g3', gender: 'male' }, { name: 'Fallback Dutch Male', lang: 'nl', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'male' }, { name: 'Microsoft Anna - English (United States)', lang: 'en-US', gender: 'female' }, { name: 'Microsoft Lili - Chinese (China)', lang: 'zh-CN', gender: 'female' }, { name: 'Bangla Bangladesh', lang: 'bn_BD', gender: 'male' }, { name: 'Bangla India', lang: 'bn_IN', gender: 'male' }, { name: 'Czech Czechia', lang: 'cs_CZ', gender: 'female' }, { name: 'Danish Denmark', lang: 'da_DK', gender: 'female' }, { name: 'Greek Greece', lang: 'el_GR', gender: 'female' }, { name: 'English Australia', lang: 'en_AU', gender: 'female' }, { name: 'Estonian Estonia', lang: 'et_EE', gender: 'male' }, { name: 'Finnish Finland', lang: 'fi_FI', gender: 'female' }, { name: 'Filipino Philippines', lang: 'fil_PH', gender: 'female' }, { name: 'French Canada', lang: 'fr_CAF', gender: 'female' }, { name: 'Hungarian Hungary', lang: 'hu_HU', gender: 'female' }, { name: 'Khmer Cambodia', lang: 'km_KH', gender: 'female' }, { name: 'Norwegian Bokm\u00e5l Norway', lang: 'nb_NO', gender: 'female' }, { name: 'Nepali Nepal', lang: 'ne_NP', gender: 'female' }, { name: 'Romanian Romania', lang: 'ro_RO', gender: 'female' }, { name: 'Sinhala Sri Lanka', lang: 'si_LK', gender: 'female' }, { name: 'Slovak Slovakia', lang: 'sk_SK', gender: 'female' }, { name: 'Swedish Sweden', lang: 'sv_SE', gender: 'female' }, { name: 'Ukrainian Ukraine', lang: 'uk_UA', gender: 'female' }, { name: 'Vietnamese Vietnam', lang: 'vi_VN', gender: 'female' }, { name: 'Cantonese Hong Kong', lang: 'yue_HK_#Hant', gender: 'female' }, { name: 'Microsoft Server Speech Text to Speech Voice (en-US, Guy24kRUS)', lang: 'en-US', gender: 'male' }, { name: 'Microsoft Server Speech Text to Speech Voice (en-US, Jessa24kRUS)', lang: 'en-US', gender: 'female' }, { name: 'Microsoft Server Speech Text to Speech Voice (en-US, JessaRUS)', lang: 'en-US', gender: 'female' }, { name: 'Microsoft Server Speech Text to Speech Voice (en-US, ZiraRUS)', lang: 'en-US', gender: 'female' }, { name: 'Fallback Bangla Bangladeh Female', lang: 'bn-BD', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'female' }, { name: 'Fallback Bangla Bangladeh Male', lang: 'bn-BD', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'male' }, { name: 'Fallback Filipino Female', lang: 'fil-PH', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'female' }, { name: 'Fallback Filipino Male', lang: 'fil-PH', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'male' }, { name: 'Fallback Cambodian Khmer Female', lang: 'km-KH', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'female' }, { name: 'Fallback Cambodian Khmer Male', lang: 'km-KH', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'male' }, { name: 'Fallback Nepali Female', lang: 'ne-NP', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'female' }, { name: 'Fallback Sinhala Female', lang: 'si-LK', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'female' }, { name: 'Fallback Ukrainian Female', lang: 'uk-UA', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'female' }, { name: 'Fallback Cantonese Hong Kong Female', lang: 'yue-HK', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'female' }, { name: 'Fallback Cantonese Hong Kong Male', lang: 'yue-HK', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'male' }, { name: 'Fallback Estonian Male', lang: 'et-EE', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'male' }, { name: 'Fallback Bangla India Female', lang: 'bn-IN', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'female' }, { name: 'Fallback Bangla India Male', lang: 'bn-IN', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'male' }, { name: 'Fallback French Canadian Female', lang: 'fr-CA', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'female' }, { name: 'Fallback French Canadian Male', lang: 'fr-CA', fallbackvoice: !0, timerSpeed: 0, service: 'g3', gender: 'male' }, { name: 'Fallback Tamil', lang: 'ta', fallbackvoice: !0, service: 'g1', gender: 'female' }, { name: 'Tian-Tian', voiceURI: 'com.apple.ttsbundle.Ting-Ting-compact', lang: 'zh-CN', gender: 'female' }, { name: 'English Nigeria', lang: 'en_NG', gender: 'female' }, { name: 'Gujarati India', lang: 'gu_IN', gender: 'female' }, { name: 'Kannada India', lang: 'kn_IN', gender: 'female' }, { name: 'Malayalam India', lang: 'ml_IN', gender: 'female' }, { name: 'Marathi India', lang: 'mr_IN', gender: 'female' }, { name: 'Tamil India', lang: 'ta_IN', gender: 'female' }, { name: 'Telugu India', lang: 'te_IN', gender: 'female' }, { name: 'Urdu Pakistan', lang: 'ur_PK', gender: 'female' }, { name: 'Javanese Indonesia', lang: 'jv_ID', gender: 'female' }, { name: 'Malay Malaysia', lang: 'ms_MY', gender: 'female' }, { name: 'Chinese Hong Kong', lang: 'zh_HK_#Hans', gender: 'female' }, { name: 'Chinese Hong Kong', lang: 'zh_HK_#Hant', gender: 'female' }, { name: 'Microsoft Tolga - Turkish (Turkey)', lang: 'tr-TR', gender: 'male' }, { name: 'Korean (South Korea)', voiceURI: 'moz-tts:android:ko_KR', lang: 'ko-KR', gender: 'female' }, { name: 'Marathi (India)', voiceURI: 'moz-tts:android:mr_IN', lang: 'mr-IN', gender: 'female' }, { name: 'Russian (Russia)', voiceURI: 'moz-tts:android:ru_RU', lang: 'ru-RU', gender: 'female' }, { name: 'Chinese (Taiwan)', voiceURI: 'moz-tts:android:zh_TW', lang: 'zh-TW', gender: 'female' }, { name: 'Hungarian (Hungary)', voiceURI: 'moz-tts:android:hu_HU', lang: 'hu-HU', gender: 'female' }, { name: 'Thai (Thailand)', voiceURI: 'moz-tts:android:th_TH', lang: 'th-TH', gender: 'female' }, { name: 'Urdu (Pakistan)', voiceURI: 'moz-tts:android:ur_PK', lang: 'ur-PK', gender: 'female' }, { name: 'Norwegian Bokm\u00e5l (Norway)', voiceURI: 'moz-tts:android:nb_NO', lang: 'nb-NO', gender: 'female' }, { name: 'Danish (Denmark)', voiceURI: 'moz-tts:android:da_DK', lang: 'da-DK', gender: 'female' }, { name: 'Turkish (Turkey)', voiceURI: 'moz-tts:android:tr_TR', lang: 'tr-TR', gender: 'female' }, { name: 'Estonian (Estonia)', voiceURI: 'moz-tts:android:et_EE', lang: 'et-EE', gender: 'male' }, { name: 'Bosnian', voiceURI: 'moz-tts:android:bs', lang: 'bs', deprecated: !0 }, { name: 'Swahili', voiceURI: 'moz-tts:android:sw', lang: 'sw', deprecated: !0 }, { name: 'Portuguese (Portugal)', voiceURI: 'moz-tts:android:pt_PT', lang: 'pt-PT', gender: 'female' }, { name: 'Vietnamese (Vietnam)', voiceURI: 'moz-tts:android:vi_VN', lang: 'vi-VN', gender: 'female' }, { name: 'English (United States)', voiceURI: 'moz-tts:android:en_US', lang: 'en-US', gender: 'female' }, { name: 'Swedish (Sweden)', voiceURI: 'moz-tts:android:sv_SE', lang: 'sv-SE', gender: 'female' }, { name: 'Arabic', voiceURI: 'moz-tts:android:ar', lang: 'ar', gender: 'female' }, { name: 'Sundanese (Indonesia)', voiceURI: 'moz-tts:android:su_ID', lang: 'su-ID', gender: 'female' }, { name: 'Bangla (Bangladesh)', voiceURI: 'moz-tts:android:bn_BD', lang: 'bn-BD', gender: 'male' }, { name: 'Gujarati (India)', voiceURI: 'moz-tts:android:gu_IN', lang: 'gu-IN', gender: 'female' }, { name: 'Kannada (India)', voiceURI: 'moz-tts:android:kn_IN', lang: 'kn-IN', gender: 'female' }, { name: 'Greek (Greece)', voiceURI: 'moz-tts:android:el_GR', lang: 'el-GR', gender: 'female' }, { name: 'Hindi (India)', voiceURI: 'moz-tts:android:hi_IN', lang: 'hi-IN', gender: 'female' }, { name: 'Finnish (Finland)', voiceURI: 'moz-tts:android:fi_FI', lang: 'fi-FI', gender: 'female' }, { name: 'Khmer (Cambodia)', voiceURI: 'moz-tts:android:km_KH', lang: 'km-KH', gender: 'female' }, { name: 'Bangla (India)', voiceURI: 'moz-tts:android:bn_IN', lang: 'bn-IN', gender: 'male' }, { name: 'French (France)', voiceURI: 'moz-tts:android:fr_FR', lang: 'fr-FR', gender: 'female' }, { name: 'Ukrainian (Ukraine)', voiceURI: 'moz-tts:android:uk_UA', lang: 'uk-UA', gender: 'female' }, { name: 'English (Australia)', voiceURI: 'moz-tts:android:en_AU', lang: 'en-AU', gender: 'female' }, { name: 'Dutch (Netherlands)', voiceURI: 'moz-tts:android:nl_NL', lang: 'nl-NL', gender: 'female' }, { name: 'French (Canada)', voiceURI: 'moz-tts:android:fr_CA', lang: 'fr-CA', gender: 'female' }, { name: 'Serbian', voiceURI: 'moz-tts:android:sr', lang: 'sr', gender: 'female' }, { name: 'Portuguese (Brazil)', voiceURI: 'moz-tts:android:pt_BR', lang: 'pt-BR', gender: 'female' }, { name: 'Malayalam (India)', voiceURI: 'moz-tts:android:ml_IN', lang: 'ml-IN', gender: 'female' }, { name: 'Sinhala (Sri Lanka)', voiceURI: 'moz-tts:android:si_LK', lang: 'si-LK', gender: 'female' }, { name: 'German (Germany)', voiceURI: 'moz-tts:android:de_DE', lang: 'de-DE', gender: 'female' }, { name: 'Kurdish', voiceURI: 'moz-tts:android:ku', lang: 'ku', deprecated: !0 }, { name: 'Czech (Czechia)', voiceURI: 'moz-tts:android:cs_CZ', lang: 'cs-CZ', gender: 'female' }, { name: 'Polish (Poland)', voiceURI: 'moz-tts:android:pl_PL', lang: 'pl-PL', gender: 'female' }, { name: 'Slovak (Slovakia)', voiceURI: 'moz-tts:android:sk_SK', lang: 'sk-SK', gender: 'female' }, { name: 'Filipino (Philippines)', voiceURI: 'moz-tts:android:fil_PH', lang: 'fil-PH', gender: 'female' }, { name: 'Italian (Italy)', voiceURI: 'moz-tts:android:it_IT', lang: 'it-IT', gender: 'female' }, { name: 'Nepali (Nepal)', voiceURI: 'moz-tts:android:ne_NP', lang: 'ne-NP', gender: 'female' }, { name: 'Malay (Malaysia)', voiceURI: 'moz-tts:android:ms_MY', lang: 'ms-MY', gender: 'female' }, { name: 'Croatian', voiceURI: 'moz-tts:android:hr', lang: 'hr', deprecated: !0 }, { name: 'English (Nigeria)', voiceURI: 'moz-tts:android:en_NG', lang: 'en-NG', gender: 'female' }, { name: 'Chinese (China)', voiceURI: 'moz-tts:android:zh_CN', lang: 'zh-CN', gender: 'female' }, { name: 'Spanish (Spain)', voiceURI: 'moz-tts:android:es_ES', lang: 'es-ES', gender: 'female' }, { name: 'Welsh', voiceURI: 'moz-tts:android:cy', lang: 'cy', deprecated: !0 }, { name: 'Tamil (India)', voiceURI: 'moz-tts:android:ta_IN', lang: 'ta-IN', gender: 'female' }, { name: 'Japanese (Japan)', voiceURI: 'moz-tts:android:ja_JP', lang: 'ja-JP', gender: 'female' }, { name: 'Albanian', voiceURI: 'moz-tts:android:sq', lang: 'sq', deprecated: !0 }, { name: 'Cantonese (Hong Kong)', voiceURI: 'moz-tts:android:yue_HK', lang: 'yue-HK', gender: 'female' }, { name: 'English (India)', voiceURI: 'moz-tts:android:en_IN', lang: 'en-IN', gender: 'female' }, { name: 'Spanish (United States)', voiceURI: 'moz-tts:android:es_US', lang: 'es-US', gender: 'female' }, { name: 'Javanese (Indonesia)', voiceURI: 'moz-tts:android:jv_ID', lang: 'jv-ID', gender: 'female' }, { name: 'Latin', voiceURI: 'moz-tts:android:la', lang: 'la', deprecated: !0 }, { name: 'Indonesian (Indonesia)', voiceURI: 'moz-tts:android:in_ID', lang: 'in-ID', gender: 'female' }, { name: 'Telugu (India)', voiceURI: 'moz-tts:android:te_IN', lang: 'te-IN', gender: 'female' }, { name: 'Romanian (Romania)', voiceURI: 'moz-tts:android:ro_RO', lang: 'ro-RO', gender: 'female' }, { name: 'Catalan', voiceURI: 'moz-tts:android:ca', lang: 'ca', gender: 'female' }, { name: 'English (United Kingdom)', voiceURI: 'moz-tts:android:en_GB', lang: 'en-GB', gender: 'female' }, { name: 'Rishi', voiceURI: 'com.apple.ttsbundle.Rishi-compact', lang: 'en-IN', gender: 'male' } ]; a.iOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent); a.iOS9 = /(iphone|ipod|ipad).* os 9_/.test( navigator.userAgent.toLowerCase() ); a.iOS10 = /(iphone|ipod|ipad).* os 10_/.test( navigator.userAgent.toLowerCase() ); a.iOS11 = /(iphone|ipod|ipad).* os 11_/.test( navigator.userAgent.toLowerCase() ); a.iOS11plus = /(iphone|ipod|ipad).* os 1[1-9]/.test( navigator.userAgent.toLowerCase() ); a.iOS9plus = /(iphone|ipod|ipad).* os 10_/.test( navigator.userAgent.toLowerCase() ); a.iOS12_0 = /(iphone|ipod|ipad).* os 12_0/.test( navigator.userAgent.toLowerCase() ); a.iOS12 = /(iphone|ipod|ipad).* os 12_/.test( navigator.userAgent.toLowerCase() ); a.is_chrome = -1 < navigator.userAgent.indexOf('Chrome'); a.is_safari = -1 < navigator.userAgent.indexOf('Safari'); a.is_chrome && a.is_safari && (a.is_safari = !1); a.is_opera = !!window.opera || 0 <= navigator.userAgent.indexOf(' OPR/'); a.is_android = -1 < navigator.userAgent.toLowerCase().indexOf('android'); a.iOS_initialized = !1; a.iOS9_initialized = !1; a.iOS10_initialized = !1; a.iOS11_initialized = !1; a.cache_ios_voices = [ { name: 'he-IL', voiceURI: 'he-IL', lang: 'he-IL' }, { name: 'th-TH', voiceURI: 'th-TH', lang: 'th-TH' }, { name: 'pt-BR', voiceURI: 'pt-BR', lang: 'pt-BR' }, { name: 'sk-SK', voiceURI: 'sk-SK', lang: 'sk-SK' }, { name: 'fr-CA', voiceURI: 'fr-CA', lang: 'fr-CA' }, { name: 'ro-RO', voiceURI: 'ro-RO', lang: 'ro-RO' }, { name: 'no-NO', voiceURI: 'no-NO', lang: 'no-NO' }, { name: 'fi-FI', voiceURI: 'fi-FI', lang: 'fi-FI' }, { name: 'pl-PL', voiceURI: 'pl-PL', lang: 'pl-PL' }, { name: 'de-DE', voiceURI: 'de-DE', lang: 'de-DE' }, { name: 'nl-NL', voiceURI: 'nl-NL', lang: 'nl-NL' }, { name: 'id-ID', voiceURI: 'id-ID', lang: 'id-ID' }, { name: 'tr-TR', voiceURI: 'tr-TR', lang: 'tr-TR' }, { name: 'it-IT', voiceURI: 'it-IT', lang: 'it-IT' }, { name: 'pt-PT', voiceURI: 'pt-PT', lang: 'pt-PT' }, { name: 'fr-FR', voiceURI: 'fr-FR', lang: 'fr-FR' }, { name: 'ru-RU', voiceURI: 'ru-RU', lang: 'ru-RU' }, { name: 'es-MX', voiceURI: 'es-MX', lang: 'es-MX' }, { name: 'zh-HK', voiceURI: 'zh-HK', lang: 'zh-HK' }, { name: 'sv-SE', voiceURI: 'sv-SE', lang: 'sv-SE' }, { name: 'hu-HU', voiceURI: 'hu-HU', lang: 'hu-HU' }, { name: 'zh-TW', voiceURI: 'zh-TW', lang: 'zh-TW' }, { name: 'es-ES', voiceURI: 'es-ES', lang: 'es-ES' }, { name: 'zh-CN', voiceURI: 'zh-CN', lang: 'zh-CN' }, { name: 'nl-BE', voiceURI: 'nl-BE', lang: 'nl-BE' }, { name: 'en-GB', voiceURI: 'en-GB', lang: 'en-GB' }, { name: 'ar-SA', voiceURI: 'ar-SA', lang: 'ar-SA' }, { name: 'ko-KR', voiceURI: 'ko-KR', lang: 'ko-KR' }, { name: 'cs-CZ', voiceURI: 'cs-CZ', lang: 'cs-CZ' }, { name: 'en-ZA', voiceURI: 'en-ZA', lang: 'en-ZA' }, { name: 'en-AU', voiceURI: 'en-AU', lang: 'en-AU' }, { name: 'da-DK', voiceURI: 'da-DK', lang: 'da-DK' }, { name: 'en-US', voiceURI: 'en-US', lang: 'en-US' }, { name: 'en-IE', voiceURI: 'en-IE', lang: 'en-IE' }, { name: 'hi-IN', voiceURI: 'hi-IN', lang: 'hi-IN' }, { name: 'el-GR', voiceURI: 'el-GR', lang: 'el-GR' }, { name: 'ja-JP', voiceURI: 'ja-JP', lang: 'ja-JP' } ]; a.cache_ios9_voices = [ { name: 'Maged', voiceURI: 'com.apple.ttsbundle.Maged-compact', lang: 'ar-SA', localService: !0, default: !0 }, { name: 'Zuzana', voiceURI: 'com.apple.ttsbundle.Zuzana-compact', lang: 'cs-CZ', localService: !0, default: !0 }, { name: 'Sara', voiceURI: 'com.apple.ttsbundle.Sara-compact', lang: 'da-DK', localService: !0, default: !0 }, { name: 'Anna', voiceURI: 'com.apple.ttsbundle.Anna-compact', lang: 'de-DE', localService: !0, default: !0 }, { name: 'Melina', voiceURI: 'com.apple.ttsbundle.Melina-compact', lang: 'el-GR', localService: !0, default: !0 }, { name: 'Karen', voiceURI: 'com.apple.ttsbundle.Karen-compact', lang: 'en-AU', localService: !0, default: !0 }, { name: 'Daniel', voiceURI: 'com.apple.ttsbundle.Daniel-compact', lang: 'en-GB', localService: !0, default: !0 }, { name: 'Moira', voiceURI: 'com.apple.ttsbundle.Moira-compact', lang: 'en-IE', localService: !0, default: !0 }, { name: 'Samantha (Enhanced)', voiceURI: 'com.apple.ttsbundle.Samantha-premium', lang: 'en-US', localService: !0, default: !0 }, { name: 'Samantha', voiceURI: 'com.apple.ttsbundle.Samantha-compact', lang: 'en-US', localService: !0, default: !0 }, { name: 'Tessa', voiceURI: 'com.apple.ttsbundle.Tessa-compact', lang: 'en-ZA', localService: !0, default: !0 }, { name: 'Monica', voiceURI: 'com.apple.ttsbundle.Monica-compact', lang: 'es-ES', localService: !0, default: !0 }, { name: 'Paulina', voiceURI: 'com.apple.ttsbundle.Paulina-compact', lang: 'es-MX', localService: !0, default: !0 }, { name: 'Satu', voiceURI: 'com.apple.ttsbundle.Satu-compact', lang: 'fi-FI', localService: !0, default: !0 }, { name: 'Amelie', voiceURI: 'com.apple.ttsbundle.Amelie-compact', lang: 'fr-CA', localService: !0, default: !0 }, { name: 'Thomas', voiceURI: 'com.apple.ttsbundle.Thomas-compact', lang: 'fr-FR', localService: !0, default: !0 }, { name: 'Carmit', voiceURI: 'com.apple.ttsbundle.Carmit-compact', lang: 'he-IL', localService: !0, default: !0 }, { name: 'Lekha', voiceURI: 'com.apple.ttsbundle.Lekha-compact', lang: 'hi-IN', localService: !0, default: !0 }, { name: 'Mariska', voiceURI: 'com.apple.ttsbundle.Mariska-compact', lang: 'hu-HU', localService: !0, default: !0 }, { name: 'Damayanti', voiceURI: 'com.apple.ttsbundle.Damayanti-compact', lang: 'id-ID', localService: !0, default: !0 }, { name: 'Alice', voiceURI: 'com.apple.ttsbundle.Alice-compact', lang: 'it-IT', localService: !0, default: !0 }, { name: 'Kyoko', voiceURI: 'com.apple.ttsbundle.Kyoko-compact', lang: 'ja-JP', localService: !0, default: !0 }, { name: 'Yuna', voiceURI: 'com.apple.ttsbundle.Yuna-compact', lang: 'ko-KR', localService: !0, default: !0 }, { name: 'Ellen', voiceURI: 'com.apple.ttsbundle.Ellen-compact', lang: 'nl-BE', localService: !0, default: !0 }, { name: 'Xander', voiceURI: 'com.apple.ttsbundle.Xander-compact', lang: 'nl-NL', localService: !0, default: !0 }, { name: 'Nora', voiceURI: 'com.apple.ttsbundle.Nora-compact', lang: 'no-NO', localService: !0, default: !0 }, { name: 'Zosia', voiceURI: 'com.apple.ttsbundle.Zosia-compact', lang: 'pl-PL', localService: !0, default: !0 }, { name: 'Luciana', voiceURI: 'com.apple.ttsbundle.Luciana-compact', lang: 'pt-BR', localService: !0, default: !0 }, { name: 'Joana', voiceURI: 'com.apple.ttsbundle.Joana-compact', lang: 'pt-PT', localService: !0, default: !0 }, { name: 'Ioana', voiceURI: 'com.apple.ttsbundle.Ioana-compact', lang: 'ro-RO', localService: !0, default: !0 }, { name: 'Milena', voiceURI: 'com.apple.ttsbundle.Milena-compact', lang: 'ru-RU', localService: !0, default: !0 }, { name: 'Laura', voiceURI: 'com.apple.ttsbundle.Laura-compact', lang: 'sk-SK', localService: !0, default: !0 }, { name: 'Alva', voiceURI: 'com.apple.ttsbundle.Alva-compact', lang: 'sv-SE', localService: !0, default: !0 }, { name: 'Kanya', voiceURI: 'com.apple.ttsbundle.Kanya-compact', lang: 'th-TH', localService: !0, default: !0 }, { name: 'Yelda', voiceURI: 'com.apple.ttsbundle.Yelda-compact', lang: 'tr-TR', localService: !0, default: !0 }, { name: 'Ting-Ting', voiceURI: 'com.apple.ttsbundle.Ting-Ting-compact', lang: 'zh-CN', localService: !0, default: !0 }, { name: 'Sin-Ji', voiceURI: 'com.apple.ttsbundle.Sin-Ji-compact', lang: 'zh-HK', localService: !0, default: !0 }, { name: 'Mei-Jia', voiceURI: 'com.apple.ttsbundle.Mei-Jia-compact', lang: 'zh-TW', localService: !0, default: !0 } ]; a.cache_ios10_voices = [ { name: 'Maged', voiceURI: 'com.apple.ttsbundle.Maged-compact', lang: 'ar-SA' }, { name: 'Zuzana', voiceURI: 'com.apple.ttsbundle.Zuzana-compact', lang: 'cs-CZ' }, { name: 'Sara', voiceURI: 'com.apple.ttsbundle.Sara-compact', lang: 'da-DK' }, { name: 'Anna', voiceURI: 'com.apple.ttsbundle.Anna-compact', lang: 'de-DE' }, { name: 'Helena', voiceURI: 'com.apple.ttsbundle.siri_female_de-DE_compact', lang: 'de-DE' }, { name: 'Martin', voiceURI: 'com.apple.ttsbundle.siri_male_de-DE_compact', lang: 'de-DE' }, { name: 'Nikos (Enhanced)', voiceURI: 'com.apple.ttsbundle.Nikos-premium', lang: 'el-GR' }, { name: 'Melina', voiceURI: 'com.apple.ttsbundle.Melina-compact', lang: 'el-GR' }, { name: 'Nikos', voiceURI: 'com.apple.ttsbundle.Nikos-compact', lang: 'el-GR' }, { name: 'Catherine', voiceURI: 'com.apple.ttsbundle.siri_female_en-AU_compact', lang: 'en-AU' }, { name: 'Gordon', voiceURI: 'com.apple.ttsbundle.siri_male_en-AU_compact', lang: 'en-AU' }, { name: 'Karen', voiceURI: 'com.apple.ttsbundle.Karen-compact', lang: 'en-AU' }, { name: 'Daniel (Enhanced)', voiceURI: 'com.apple.ttsbundle.Daniel-premium', lang: 'en-GB' }, { name: 'Arthur', voiceURI: 'com.apple.ttsbundle.siri_male_en-GB_compact', lang: 'en-GB' }, { name: 'Daniel', voiceURI: 'com.apple.ttsbundle.Daniel-compact', lang: 'en-GB' }, { name: 'Martha', voiceURI: 'com.apple.ttsbundle.siri_female_en-GB_compact', lang: 'en-GB' }, { name: 'Moira', voiceURI: 'com.apple.ttsbundle.Moira-compact', lang: 'en-IE' }, { name: 'Nicky (Enhanced)', voiceURI: 'com.apple.ttsbundle.siri_female_en-US_premium', lang: 'en-US' }, { name: 'Samantha (Enhanced)', voiceURI: 'com.apple.ttsbundle.Samantha-premium', lang: 'en-US' }, { name: 'Aaron', voiceURI: 'com.apple.ttsbundle.siri_male_en-US_compact', lang: 'en-US' }, { name: 'Fred', voiceURI: 'com.apple.speech.synthesis.voice.Fred', lang: 'en-US' }, { name: 'Nicky', voiceURI: 'com.apple.ttsbundle.siri_female_en-US_compact', lang: 'en-US' }, { name: 'Samantha', voiceURI: 'com.apple.ttsbundle.Samantha-compact', lang: 'en-US' }, { name: 'Tessa', voiceURI: 'com.apple.ttsbundle.Tessa-compact', lang: 'en-ZA' }, { name: 'Monica', voiceURI: 'com.apple.ttsbundle.Monica-compact', lang: 'es-ES' }, { name: 'Paulina', voiceURI: 'com.apple.ttsbundle.Paulina-compact', lang: 'es-MX' }, { name: 'Satu', voiceURI: 'com.apple.ttsbundle.Satu-compact', lang: 'fi-FI' }, { name: 'Amelie', voiceURI: 'com.apple.ttsbundle.Amelie-compact', lang: 'fr-CA' }, { name: 'Daniel', voiceURI: 'com.apple.ttsbundle.siri_male_fr-FR_compact', lang: 'fr-FR' }, { name: 'Marie', voiceURI: 'com.apple.ttsbundle.siri_female_fr-FR_compact', lang: 'fr-FR' }, { name: 'Thomas', voiceURI: 'com.apple.ttsbundle.Thomas-compact', lang: 'fr-FR' }, { name: 'Carmit', voiceURI: 'com.apple.ttsbundle.Carmit-compact', lang: 'he-IL' }, { name: 'Lekha', voiceURI: 'com.apple.ttsbundle.Lekha-compact', lang: 'hi-IN' }, { name: 'Mariska', voiceURI: 'com.apple.ttsbundle.Mariska-compact', lang: 'hu-HU' }, { name: 'Damayanti', voiceURI: 'com.apple.ttsbundle.Damayanti-compact', lang: 'id-ID' }, { name: 'Alice', voiceURI: 'com.apple.ttsbundle.Alice-compact', lang: 'it-IT' }, { name: 'Hattori', voiceURI: 'com.apple.ttsbundle.siri_male_ja-JP_compact', lang: 'ja-JP' }, { name: 'Kyoko', voiceURI: 'com.apple.ttsbundle.Kyoko-compact', lang: 'ja-JP' }, { name: 'O-ren', voiceURI: 'com.apple.ttsbundle.siri_female_ja-JP_compact', lang: 'ja-JP' }, { name: 'Yuna', voiceURI: 'com.apple.ttsbundle.Yuna-compact', lang: 'ko-KR' }, { name: 'Ellen', voiceURI: 'com.apple.ttsbundle.Ellen-compact', lang: 'nl-BE' }, { name: 'Xander', voiceURI: 'com.apple.ttsbundle.Xander-compact', lang: 'nl-NL' }, { name: 'Nora', voiceURI: 'com.apple.ttsbundle.Nora-compact', lang: 'no-NO' }, { name: 'Zosia', voiceURI: 'com.apple.ttsbundle.Zosia-compact', lang: 'pl-PL' }, { name: 'Luciana', voiceURI: 'com.apple.ttsbundle.Luciana-compact', lang: 'pt-BR' }, { name: 'Joana', voiceURI: 'com.apple.ttsbundle.Joana-compact', lang: 'pt-PT' }, { name: 'Ioana', voiceURI: 'com.apple.ttsbundle.Ioana-compact', lang: 'ro-RO' }, { name: 'Milena', voiceURI: 'com.apple.ttsbundle.Milena-compact', lang: 'ru-RU' }, { name: 'Laura', voiceURI: 'com.apple.ttsbundle.Laura-compact', lang: 'sk-SK' }, { name: 'Alva', voiceURI: 'com.apple.ttsbundle.Alva-compact', lang: 'sv-SE' }, { name: 'Kanya', voiceURI: 'com.apple.ttsbundle.Kanya-compact', lang: 'th-TH' }, { name: 'Yelda', voiceURI: 'com.apple.ttsbundle.Yelda-compact', lang: 'tr-TR' }, { name: 'Li-mu', voiceURI: 'com.apple.ttsbundle.siri_male_zh-CN_compact', lang: 'zh-CN' }, { name: 'Ting-Ting', voiceURI: 'com.apple.ttsbundle.Ting-Ting-compact', lang: 'zh-CN' }, { name: 'Yu-shu', voiceURI: 'com.apple.ttsbundle.siri_female_zh-CN_compact', lang: 'zh-CN' }, { name: 'Sin-Ji', voiceURI: 'com.apple.ttsbundle.Sin-Ji-compact', lang: 'zh-HK' }, { name: 'Mei-Jia', voiceURI: 'com.apple.ttsbundle.Mei-Jia-compact', lang: 'zh-TW' } ]; a.cache_ios11_voices = [ { name: 'Maged', voiceURI: 'com.apple.ttsbundle.Maged-compact', lang: 'ar-SA' }, { name: 'Zuzana', voiceURI: 'com.apple.ttsbundle.Zuzana-compact', lang: 'cs-CZ' }, { name: 'Sara', voiceURI: 'com.apple.ttsbundle.Sara-compact', lang: 'da-DK' }, { name: 'Anna', voiceURI: 'com.apple.ttsbundle.Anna-compact', lang: 'de-DE' }, { name: 'Helena', voiceURI: 'com.apple.ttsbundle.siri_female_de-DE_compact', lang: 'de-DE' }, { name: 'Martin', voiceURI: 'com.apple.ttsbundle.siri_male_de-DE_compact', lang: 'de-DE' }, { name: 'Melina', voiceURI: 'com.apple.ttsbundle.Melina-compact', lang: 'el-GR' }, { name: 'Catherine', voiceURI: 'com.apple.ttsbundle.siri_female_en-AU_compact', lang: 'en-AU' }, { name: 'Gordon', voiceURI: 'com.apple.ttsbundle.siri_male_en-AU_compact', lang: 'en-AU' }, { name: 'Karen', voiceURI: 'com.apple.ttsbundle.Karen-compact', lang: 'en-AU' }, { name: 'Arthur', voiceURI: 'com.apple.ttsbundle.siri_male_en-GB_compact', lang: 'en-GB' }, { name: 'Daniel', voiceURI: 'com.apple.ttsbundle.Daniel-compact', lang: 'en-GB' }, { name: 'Martha', voiceURI: 'com.apple.ttsbundle.siri_female_en-GB_compact', lang: 'en-GB' }, { name: 'Moira', voiceURI: 'com.apple.ttsbundle.Moira-compact', lang: 'en-IE' }, { name: 'Aaron', voiceURI: 'com.apple.ttsbundle.siri_male_en-US_compact', lang: 'en-US' }, { name: 'Fred', voiceURI: 'com.apple.speech.synthesis.voice.Fred', lang: 'en-US' }, { name: 'Nicky', voiceURI: 'com.apple.ttsbundle.siri_female_en-US_compact', lang: 'en-US' }, { name: 'Samantha', voiceURI: 'com.apple.ttsbundle.Samantha-compact', lang: 'en-US' }, { name: 'Tessa', voiceURI: 'com.apple.ttsbundle.Tessa-compact', lang: 'en-ZA' }, { name: 'Monica', voiceURI: 'com.apple.ttsbundle.Monica-compact', lang: 'es-ES' }, { name: 'Paulina', voiceURI: 'com.apple.ttsbundle.Paulina-compact', lang: 'es-MX' }, { name: 'Satu', voiceURI: 'com.apple.ttsbundle.Satu-compact', lang: 'fi-FI' }, { name: 'Amelie', voiceURI: 'com.apple.ttsbundle.Amelie-compact', lang: 'fr-CA' }, { name: 'Daniel', voiceURI: 'com.apple.ttsbundle.siri_male_fr-FR_compact', lang: 'fr-FR' }, { name: 'Marie', voiceURI: 'com.apple.ttsbundle.siri_female_fr-FR_compact', lang: 'fr-FR' }, { name: 'Thomas', voiceURI: 'com.apple.ttsbundle.Thomas-compact', lang: 'fr-FR' }, { name: 'Carmit', voiceURI: 'com.apple.ttsbundle.Carmit-compact', lang: 'he-IL' }, { name: 'Lekha', voiceURI: 'com.apple.ttsbundle.Lekha-compact', lang: 'hi-IN' }, { name: 'Mariska', voiceURI: 'com.apple.ttsbundle.Mariska-compact', lang: 'hu-HU' }, { name: 'Damayanti', voiceURI: 'com.apple.ttsbundle.Damayanti-compact', lang: 'id-ID' }, { name: 'Alice', voiceURI: 'com.apple.ttsbundle.Alice-compact', lang: 'it-IT' }, { name: 'Hattori', voiceURI: 'com.apple.ttsbundle.siri_male_ja-JP_compact', lang: 'ja-JP' }, { name: 'Kyoko', voiceURI: 'com.apple.ttsbundle.Kyoko-compact', lang: 'ja-JP' }, { name: 'O-ren', voiceURI: 'com.apple.ttsbundle.siri_female_ja-JP_compact', lang: 'ja-JP' }, { name: 'Yuna', voiceURI: 'com.apple.ttsbundle.Yuna-compact', lang: 'ko-KR' }, { name: 'Ellen', voiceURI: 'com.apple.ttsbundle.Ellen-compact', lang: 'nl-BE' }, { name: 'Xander', voiceURI: 'com.apple.ttsbundle.Xander-compact', lang: 'nl-NL' }, { name: 'Nora', voiceURI: 'com.apple.ttsbundle.Nora-compact', lang: 'no-NO' }, { name: 'Zosia', voiceURI: 'com.apple.ttsbundle.Zosia-compact', lang: 'pl-PL' }, { name: 'Luciana', voiceURI: 'com.apple.ttsbundle.Luciana-compact', lang: 'pt-BR' }, { name: 'Joana', voiceURI: 'com.apple.ttsbundle.Joana-compact', lang: 'pt-PT' }, { name: 'Ioana', voiceURI: 'com.apple.ttsbundle.Ioana-compact', lang: 'ro-RO' }, { name: 'Milena', voiceURI: 'com.apple.ttsbundle.Milena-compact', lang: 'ru-RU' }, { name: 'Laura', voiceURI: 'com.apple.ttsbundle.Laura-compact', lang: 'sk-SK' }, { name: 'Alva', voiceURI: 'com.apple.ttsbundle.Alva-compact', lang: 'sv-SE' }, { name: 'Kanya', voiceURI: 'com.apple.ttsbundle.Kanya-compact', lang: 'th-TH' }, { name: 'Yelda', voiceURI: 'com.apple.ttsbundle.Yelda-compact', lang: 'tr-TR' }, { name: 'Li-mu', voiceURI: 'com.apple.ttsbundle.siri_male_zh-CN_compact', lang: 'zh-CN' }, { name: 'Ting-Ting', voiceURI: 'com.apple.ttsbundle.Ting-Ting-compact', lang: 'zh-CN' }, { name: 'Yu-shu', voiceURI: 'com.apple.ttsbundle.siri_female_zh-CN_compact', lang: 'zh-CN' }, { name: 'Sin-Ji', voiceURI: 'com.apple.ttsbundle.Sin-Ji-compact', lang: 'zh-HK' }, { name: 'Mei-Jia', voiceURI: 'com.apple.ttsbundle.Mei-Jia-compact', lang: 'zh-TW' } ]; a.systemvoices = null; a.CHARACTER_LIMIT = 100; a.VOICESUPPORT_ATTEMPTLIMIT = 5; a.voicesupport_attempts = 0; a.fallbackMode = !1; a.WORDS_PER_MINUTE = 130; a.fallback_audio = null; a.fallback_playbackrate = 1; a.def_fallback_playbackrate = a.fallback_playbackrate; a.fallback_audiopool = []; a.msgparameters = null; a.timeoutId = null; a.OnLoad_callbacks = []; a.useTimer = !1; a.utterances = []; a.userInteractionEvents = [ 'mousedown', 'mouseup', 'mousewheel', 'keydown' ]; a.fallbackBufferLength = 5; a.iOS && (a.fallbackBufferLength = 2); var q = null, z = 1; a.tstCompiled = function () { return !/param/.test(function (b) {}); }; a.fallbackServicePath = 'undefined' != typeof rvApiEndpoint && rvApiEndpoint ? rvApiEndpoint : 'https://code.responsivevoice.org/' + (a.tstCompiled() ? '' : 'develop/') + 'getvoice.php'; a.default_rv = a.responsivevoices[0]; a.debug = !1; a.rvsMapped = !1; a.forcedFallbackMode = !1; a.speechAllowedByUser = !0; a.enableEstimationTimeout = !0; a.analytics = { characterCount: 0 }; a.log = function (b) { a.debug && console.log(b); }; a.init = function () { a.is_wordpress = m(); a.is_bundle = l(); 'undefined' == typeof rvApiKey && console.error( 'ResponsiveVoice missing API key. See https://responsivevoice.org/register?devtools=' + encodeURIComponent(window.location.href) ); if (a.is_android || a.iOS || a.is_safari) a.useTimer = !0; a.is_opera || 'undefined' === typeof speechSynthesis ? (console.log('RV: Voice synthesis not supported'), a.enableFallbackMode()) : setTimeout(function () { var b = setInterval(function () { var c = window.speechSynthesis.getVoices(); 0 != c.length || (null != a.systemvoices && 0 != a.systemvoices.length) ? (console.log('RV: Voice support ready'), a.systemVoicesReady(c), clearInterval(b)) : (console.log('Voice support NOT ready'), a.voicesupport_attempts++, a.voicesupport_attempts > a.VOICESUPPORT_ATTEMPTLIMIT && (clearInterval(b), null != window.speechSynthesis ? a.iOS ? (a.iOS11plus ? a.systemVoicesReady(a.cache_ios11_voices) : a.iOS10 ? a.systemVoicesReady(a.cache_ios10_voices) : a.iOS9 ? a.systemVoicesReady(a.cache_ios9_voices) : a.systemVoicesReady(a.cache_ios_voices), console.log('RV: Voice support ready (cached)')) : (console.log( 'RV: speechSynthesis present but no system voices found' ), a.enableFallbackMode()) : a.enableFallbackMode())); }, 100); }, 100); (a.iOS || a.is_android || a.is_safari) && a.enableWindowClickHook(); a.Dispatch('OnLoad'); }; a.systemVoicesReady = function (b) { a.systemvoices = b; a.mapRVs(); null != a.OnVoiceReady && a.OnVoiceReady.call(); a.Dispatch('OnReady'); window.hasOwnProperty('dispatchEvent') && window.dispatchEvent(new Event('ResponsiveVoice_OnReady')); }; a.enableFallbackMode = function () { a.fallbackMode = !0; a.forcedFallbackMode = !0; console.log('RV: Enabling fallback mode'); a.mapRVs(); null != a.OnVoiceReady && a.OnVoiceReady.call(); a.Dispatch('OnReady'); window.hasOwnProperty('dispatchEvent') && window.dispatchEvent(new Event('ResponsiveVoice_OnReady')); a.Dispatch('OnServiceSwitched'); }; a.getVoices = function () { for (var b = [], c = 0; c < a.responsivevoices.length; c++) { var d = a.responsivevoices[c]; !0 !== d.deprecated && b.push({ name: d.name }); } return b; }; a.speak = function (b, c, d) { if (null == b) a.log('No text provided'); else if ( (a.initializePermissionsTimeout && clearTimeout(a.initializePermissionsTimeout), a.rvsMapped) ) { var e = function (B) { -1 != B.search(/[\u3002]/gm) ? B.split(/[\u3002]/).filter(function (F) { F && r.push(F); }) : r.push(B); }, n = null; if (a.isPlaying()) a.log('Cancelling previous speech'), a.cancel(), setTimeout(function () { a.speak(b, c, d); }, 50); else { if (null == c) { var g = a.default_rv; a.setDefaultVoice(g.name); } else g = a.getResponsiveVoice(c); if (g) { !0 === g.deprecated && console.warn( 'ResponsiveVoice: Voice "' + g.name + '" is deprecated; it might not always be the right gender, and could be removed in future releases' ); var h = {}; if (null != g.mappedProfile) h = g.mappedProfile; else if ( ((h.systemvoice = a.getMatchedVoice(g)), (h.collectionvoice = {}), null == h.systemvoice) ) { console.log('RV: ERROR: No voice found for: ' + c); return; } b = k(b, h); b = b.replace(/["`]/gm, "'"); a.msgparameters = d || {}; a.msgtext = b; a.msgvoicename = c; a.onstartFired = !1; var r = []; if (b.length > a.CHARACTER_LIMIT) { for (var p = (b = f(b)); p.length > a.CHARACTER_LIMIT; ) { g = p.search( /([\u3002:!\u00a1?\u00bf;\(\)\[\]\u2014\u00ab\u00bb\n]+|\.[^0-9]+)/ ); var u = ''; if (-1 == g || g >= a.CHARACTER_LIMIT) g = p.search(/,[^0-9]+/); if ( (-1 == g || g >= a.CHARACTER_LIMIT) && -1 != p.search(' ') ) { var A = p.split(' '); for (g = 0; g < A.length; g++) { if (u.length + A[g].length + 1 > a.CHARACTER_LIMIT) { A[g].length >= a.CHARACTER_LIMIT && (u += A[g].substr( 0, a.CHARACTER_LIMIT - u.length - 1 )); break; } u += (0 != g ? ' ' : '') + A[g]; } } else { if (-1 == g || g >= a.CHARACTER_LIMIT) g = a.CHARACTER_LIMIT - 1; u = p.substr(0, g + 1); } p = p.substr(u.length, p.length - u.length); r.push(u); } 0 < p.length && e(p); } else e(b); console.log(r); a.multipartText = r; if (a.checkSpeechAllowed()) { a.fallbackMode && 0 < a.fallback_audiopool.length && a.clearFallbackPool(); a.msgprofile = h; a.log('Voice picked: ' + a.msgprofile.systemvoice.name); a.utterances = []; a.fallbackChunks = []; for (g = 0; g < r.length; g++) if ( !a.fallbackMode && a.getServiceEnabled(a.services.NATIVE_TTS) ) a.log('Using SpeechSynthesis'), (n = a.services.NATIVE_TTS), (e = new SpeechSynthesisUtterance()), (e.voiceURI = h.systemvoice.voiceURI), (e.volume = a.selectBest([ h.collectionvoice.volume, h.systemvoice.volume, 1 ])), (e.rate = a.selectBest([ a.iOS9plus ? 1 : null, h.collectionvoice.rate, h.systemvoice.rate, z ])), (e.pitch = a.selectBest([ h.collectionvoice.pitch, h.systemvoice.pitch, 1 ])), (e.text = r[g]), (e.lang = a.selectBest([ h.collectionvoice.lang, h.systemvoice.lang ])), (e.rvIndex = g), (e.rvTotal = r.length), 0 == g && (e.onstart = a.speech_onstart), (a.msgparameters.onendcalled = !1), null != d ? ((e.voice = 'undefined' !== typeof d.voice ? d.voice : h.systemvoice), g < r.length - 1 && 1 < r.length ? ((e.onend = a.onPartEnd), e.hasOwnProperty('addEventListener') && e.addEventListener('end', a.onPartEnd)) : ((e.onend = a.speech_onend), e.hasOwnProperty('addEventListener') && e.addEventListener('end', a.speech_onend)), (e.onerror = d.onerror || function (B) { a.log('RV: Unknown Error'); a.log(B); 'not-allowed' === B.error && ((a.speechSynthesisNotAllowedError = !0), a.speak(b, c, d)); }), (d.rate = a.validateParameters(d, 'rate')), (d.pitch = a.validateParameters(d, 'pitch')), (d.volume = a.validateParameters(d, 'volume')), (e.onpause = d.onpause), (e.onresume = d.onresume), (e.onmark = d.onmark), (e.onboundary = d.onboundary || a.onboundary), (e.pitch = null != d.pitch ? d.pitch : e.pitch), (e.rate = a.iOS ? (null != d.rate ? d.rate * d.rate : 1) * e.rate : (null != d.rate ? d.rate : z) * e.rate), (e.volume = null != d.volume ? d.volume : e.volume)) : (a.log('No Params received for current Utterance'), (e.voice = h.systemvoice), (d = d || {}), (e.onend = a.speech_onend), (e.onboundary = a.onboundary), (e.onerror = function (B) { a.log('RV: Unknown Error'); a.log(B); 'not-allowed' === B.error && ((a.speechSynthesisNotAllowedError = !0), a.speak(b, c, d)); })), a.utterances.push(e), 0 == g && (a.currentMsg = e), console.log(e), a.tts_speak(e); else if ( a.fallbackMode && a.getServiceEnabled(a.services.FALLBACK_AUDIO) ) { n = a.services.FALLBACK_AUDIO; a.fallback_playbackrate = a.def_fallback_playbackrate; e = a.selectBest([ h.collectionvoice.pitch, h.systemvoice.pitch, 1 ]); p = a.selectBest([ a.iOS9plus ? 1 : null, h.collectionvoice.rate, h.systemvoice.rate, 1 ]); u = a.selectBest([ h.collectionvoice.volume, h.systemvoice.volume, 1 ]); if (null != d) { e *= null != d.pitch ? d.pitch : 1; p *= null != d.rate ? d.rate : 1; u *= null != d.volume ? d.volume : 1; var G = d.extraParams || null; } e /= 2; p /= 2; u *= 2; e = Math.min(Math.max(e, 0), 1); p = Math.min(Math.max(p, 0), 1); u = Math.min(Math.max(u, 0), 1); A = '?t=' + encodeURIComponent(r[g]) + '&tl=' + (h.collectionvoice.lang || h.systemvoice.lang || 'en-US') + '&sv=' + (h.collectionvoice.service || h.systemvoice.service || '') + '&vn=' + (h.collectionvoice.voicename || h.systemvoice.voicename || '') + '&pitch=' + e.toString() + '&rate=' + p.toString() + '&vol=' + u.toString(); 'undefined' != typeof rvApiEndpoint && rvApiEndpoint && (A = '?text=' + encodeURIComponent(r[g]) + '&lang=' + (h.collectionvoice.lang || h.systemvoice.lang || 'en-US') + '&engine=' + (h.collectionvoice.service || h.systemvoice.service || '') + '&name=' + (h.collectionvoice.voicename || h.systemvoice.voicename || '') + '&pitch=' + e.toString() + '&rate=' + p.toString() + '&volume=' + u.toString()); e = a.fallbackServicePath + A; 'undefined' != typeof rvApiKey && (e += '&key=' + rvApiKey); 'undefined' == typeof rvApiKey && a.is_bundle && (e += '&key=FQ9r4hgY'); 'undefined' == typeof rvApiKey && a.is_wordpress && (e += '&key=HY7lTyiS'); void 0 !== h.collectionvoice.gender && (e += '&gender=' + h.collectionvoice.gender); G && (e += '&extraParams=' + JSON.stringify(G)); a.fallbackChunks.push({ text: r[g], url: e, audio: null }); } a.fallbackMode && a.getServiceEnabled(a.services.FALLBACK_AUDIO) && ((a.fallbackChunkIndex = 0), a.fallback_startPart()); a.log('Service used: ' + n); } else a.scheduledSpeak = { text: b, voicename: c, parameters: d }; } else console.error('Selected voice does not exist: ' + c), a.Dispatch('OnMissingVoiceError', { voice: c }); } } else setTimeout(function () { a.speak(b, c, d); }, 15); }; a.startTimeout = function (b, c) { var d = a.msgprofile.collectionvoice.timerSpeed; null == a.msgprofile.collectionvoice.timerSpeed && (d = 1); 0 >= d || ((a.timeoutId = setTimeout(c, a.getEstimatedTimeLength(b, d))), a.log('Timeout ID: ' + a.timeoutId)); }; a.checkAndCancelTimeout = function () { null != a.timeoutId && (clearTimeout(a.timeoutId), (a.timeoutId = null)); }; a.speech_timedout = function () { a.cancel(); a.cancelled = !1; a.speech_onend(); }; a.speech_onend = function () { a.checkAndCancelTimeout(); !0 === a.cancelled ? (a.cancelled = !1) : (a.log('on end fired'), null != a.msgparameters && null != a.msgparameters.onend && 1 != a.msgparameters.onendcalled && (a.log('Speech on end called -' + a.msgtext), (a.msgparameters.onendcalled = !0), a.msgparameters.onend())); }; a.speech_onstart = function () { if ( !a.onstartFired && ((a.onstartFired = !0), a.log('Speech start'), a.enableEstimationTimeout && a.useTimer && (a.fallbackMode || a.startTimeout(a.msgtext, a.speech_timedout)), (a.msgparameters.onendcalled = !1), null != a.msgparameters && null != a.msgparameters.onstart) ) a.msgparameters.onstart(); }; a.fallback_startPart = function () { 0 == a.fallbackChunkIndex && a.speech_onstart(); a.fallback_updateChunksBuffer(); a.fallback_audio = a.fallbackChunks[a.fallbackChunkIndex].audio; null == a.fallback_audio ? a.log('RV: Fallback Audio is not available') : ((function () { var b = a.fallback_audio; setTimeout(function () { b.playbackRate = a.fallback_playbackrate; }, 50); b.onloadedmetadata = function () { b.playbackRate = a.fallback_playbackrate; }; var c = function (e) { setTimeout(function () { if (0 == e.currentTime) { a.log( 'Audio chunk not playing. Trying to recover. Disabling time estimation' ); a.enableEstimationTimeout = !1; a.checkAndCancelTimeout(); e.load(); var n = function () { e.play(); e.removeEventListener('canplaythrough', n); }; e.addEventListener('canplaythrough', n, !1); } }, 700); }; if (2 <= b.readyState) b.play(), c(b); else { var d = function () { b.play(); b.removeEventListener('canplaythrough', d); }; b.addEventListener('canplaythrough', d, !1); } })(), (a.fallback_audio.onerror = function (b) { function c() { if (this.readyState == this.DONE && 200 !== this.status) switch (this.status) { case 400: console.error( 'ResponsiveVoice audio could not be loaded. Invalid parameters.' ); break; case 403: console.error( 'ResponsiveVoice invalid API key. See https://responsivevoice.org/register?devtools=' + encodeURIComponent(window.location.href) ); break; default: console.error( 'ResponsiveVoice audio could not be loaded. There is an issue connecting your browser to the API endpoint.' ); } } switch (b.target.error.code) { case b.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED: var d = new XMLHttpRequest(); d.open('GET', b.target.src, !0); d.send(); d.onreadystatechange = c; break; default: console.error( 'ResponsiveVoice: an unknown error occurred.' ); } }), a.fallback_audio.addEventListener('ended', a.fallback_finishPart), a.enableEstimationTimeout && a.useTimer && a.startTimeout( a.multipartText[a.fallbackChunkIndex], a.fallback_finishPart )); }; a.isFallbackAudioPlaying = function () { var b; for (b = 0; b < a.fallback_audiopool.length; b++) { var c = a.fallback_audiopool[b]; if (!c.paused && !c.ended && c.currentTime != c.duration) return !0; } return !1; }; a.fallback_finishPart = function (b) { a.isFallbackAudioPlaying() ? (a.checkAndCancelTimeout(), (a.timeoutId = setTimeout( a.fallback_finishPart, 1e3 * (a.fallback_audio.duration - a.fallback_audio.currentTime) ))) : (a.checkAndCancelTimeout(), a.fallbackChunkIndex < a.fallbackChunks.length - 1 ? (a.fallbackChunkIndex++, a.fallback_startPart()) : a.speech_onend()); }; a.cancel = function () { a.checkAndCancelTimeout(); a.fallbackMode ? (null != a.fallback_audio && a.fallback_audio.pause(), a.clearFallbackPool()) : ((a.cancelled = !0), speechSynthesis.cancel()); }; a.voiceSupport = function () { return 'speechSynthesis' in window; }; a.OnFinishedPlaying = function (b) { if (null != a.msgparameters && null != a.msgparameters.onend) a.msgparameters.onend(); }; a.setDefaultVoice = function (b) { if (a.rvsMapped) { var c = a.getResponsiveVoice(b); null != c && (a.default_rv = c); } else setTimeout(function () { a.setDefaultVoice(b); }, 15); }; a.setDefaultRate = function (b) { var c = b; b = parseFloat(b); isNaN(b) ? console.error( '[responsiveVoice.setDefaultRate] invalid argument: ' + c.toString() ) : 0 === b ? console.error('[responsiveVoice.setDefaultRate] rate must be > 0') : 1.5 < b ? console.error( '[responsiveVoice.setDefaultRate] rate must be <= 1.5' ) : (z = b); }; a.mapRVs = function () { if ('object' == typeof navigator) { var b, c = 'anguage', d = navigator; var e = ((b = d['l' + c + 's']), b && b.length ? b : (c = d['l' + c] || d['browserL' + c] || d['userL' + c]) ? [c] : c); } else e = void 0; e = e[0]; for (b = 0; b < a.responsivevoices.length; b++) for (c = a.responsivevoices[b], d = 0; d < c.voiceIDs.length; d++) { var n = a.voicecollection[c.voiceIDs[d]]; if (1 != n.fallbackvoice) { var g = a.getSystemVoice(n.name); a.forcedFallbackMode && (g = null); a.iOS12_0 && c.lang.toLowerCase() != e.toLowerCase() && c.lang.toLowerCase().split('-')[0] != e.toLowerCase() && (g = null); if (null != g) { c.mappedProfile = { systemvoice: g, collectionvoice: n }; break; } } else { c.mappedProfile = { systemvoice: {}, collectionvoice: n }; break; } } a.rvsMapped = !0; }; a.getMatchedVoice = function (b) { for (var c = 0; c < b.voiceIDs.length; c++) { var d = a.getSystemVoice(a.voicecollection[b.voiceIDs[c]].name); if (null != d) return d; } return null; }; a.getSystemVoice = function (b) { var c = String.fromCharCode(160); var d = b.replace(new RegExp('\\s+|' + c, 'g'), ''); if ('undefined' === typeof a.systemvoices || null === a.systemvoices) return null; for (var e = 0; e < a.systemvoices.length; e++) if ( 0 === a.systemvoices[e].name.localeCompare(b) || 0 === a.systemvoices[e].name .replace(new RegExp('\\s+|' + c, 'g'), '') .replace(/ *\([^)]*\) */g, '') .localeCompare(d) ) return a.systemvoices[e]; return null; }; a.getResponsiveVoice = function (b) { for (var c = 0; c < a.responsivevoices.length; c++) if (a.responsivevoices[c].name == b) return ( (b = a.fallbackMode), (a.fallbackMode = !0 === a.responsivevoices[c].mappedProfile.collectionvoice .fallbackvoice || !0 === a.forcedFallbackMode ? !0 : !1), b != a.fallbackMode && (a.mapRVs(), a.Dispatch('OnServiceSwitched')), a.responsivevoices[c] ); return null; }; a.Dispatch = function (b, c) { c = void 0 !== c ? c : null; if ( a.hasOwnProperty(b + '_callbacks') && null != a[b + '_callbacks'] && 0 < a[b + '_callbacks'].length ) { for (var d = a[b + '_callbacks'], e = 0; e < d.length; e++) d[e](c); return !0; } var n = b + '_callbacks_timeout', g = b + '_callbacks_timeoutCount'; a.hasOwnProperty(n) || ((a[g] = 10), (a[n] = setInterval(function () { --a[g]; (a.Dispatch(b, c) || 0 > a[g]) && clearTimeout(a[n]); }, 50))); return !1; }; a.AddEventListener = function (b, c) { a.hasOwnProperty(b + '_callbacks') || (a[b + '_callbacks'] = []); a[b + '_callbacks'].push(c); }; a.addEventListener = a.AddEventListener; a.RemoveEventListener = function (b, c) { a[b + '_callbacks'] && -1 != a[b + '_callbacks'].indexOf(c) && a[b + '_callbacks'].splice(a[b + '_callbacks'].indexOf(c), 1); }; a.clickEvent = function () { a.log('Click event'); a.click_event_detected = !0; a.initializePermissionsTimeout = setTimeout( a.initializePermissions, 5 ); a.userInteractionEvents.forEach(function (b) { window.removeEventListener(b, a.clickEvent, !1); }); a.Dispatch('OnClickEvent'); }; a.initializePermissions = function () { if (a.iOS && !a.iOS_initialized) { a.log('Initializing iOS click event'); if ('undefined' !== typeof speechSynthesis) { var b = new SpeechSynthesisUtterance(' '); speechSynthesis.speak(b); } a.iOS_initialized = !0; } a.is_android && !a.android_initialized && (a.log('Initializing Android click event'), 'undefined' !== typeof speechSynthesis && ((b = new SpeechSynthesisUtterance(' ')), speechSynthesis.speak(b)), (a.android_initialized = !0)); a.initFallbackPool(); }; a.isPlaying = function () { return a.fallbackMode ? null != a.fallback_audio && !a.fallback_audio.ended && !a.fallback_audio.paused : 'undefined' != typeof speechSynthesis ? speechSynthesis.speaking : !1; }; a.clearFallbackPool = function () { for (var b = 0; b < a.fallback_audiopool.length; b++) null != a.fallback_audiopool[b] && a.fallback_audiopool[b].pause(); a.fallback_audiopool_index = 0; a.fallbackChunks = []; }; a.initFallbackPool = function () { if (!a.fallback_audiopool || 0 == a.fallback_audiopool.length) { for (var b = 0; 10 > b; b++) { var c = b, d = document.createElement('AUDIO'); d.preload = 'auto'; a.is_android && ((d.src = 'data:audio/mpeg;base64,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'), d.load(), 9 == c && (a.log('Android HTML audio initialized'), (a.android_initialized = !0))); a.iOS && ((d.src = 'data:audio/mpeg;base64,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'), d.load(), 9 == c && (a.log('iOS HTML audio initialized'), (a.iOS_initialized = !0))); a.fallback_audiopool.push(d); } a.fallback_audiopool_index = 0; } }; a.allowSpeechClicked = function (b) { a.allowSpeechDiv.parentNode.removeChild(a.allowSpeechDiv); a.allowSpeechDiv = null; if ((a.speechAllowedByUser = b)) a.clickEvent(), a.scheduledSpeak && (a.speak( a.scheduledSpeak.text, a.scheduledSpeak.voicename, a.scheduledSpeak.parameters ), (a.scheduledSpeak = null)); a.Dispatch('OnAllowSpeechClicked'); }; a.checkSpeechAllowed = function (b) { if (0 == a.speechAllowedByUser) return !1; var c = a.is_android || a.iOS, d = a.is_safari && (a.fallbackMode || a.forcedFallbackMode); if ( !0 !== a.disablePermissionPopup && (!0 === a.allowPermissionPopupEverywhere || c || d || !0 === a.speechSynthesisNotAllowedError) && !a.click_event_detected ) { if (a.allowSpeechDiv) return; a.allowSpeechDiv_appearances = null == a.allowSpeechDiv_appearances ? 1 : ++a.allowSpeechDiv_appearances; if (2 < a.allowSpeechDiv_appearances) return ( console.log('ResponsiveVoice: Speech not allowed by user'), !1 ); c = document.createElement('style'); c.innerHTML = '.rvNotification{position:fixed;background-color:#fff;text-align:center;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:400;line-height:1.5;box-shadow:0 4px 8px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19);z-index:10000;width:100vw;left:0;bottom:0;font-size:1rem;padding-bottom:.5em;padding-right:.5em}.rvButtonRow{padding-right:2em;padding-bottom:1em;text-align:right;font-size:medium}.rvButton{cursor:pointer;display:inline-block;margin-left:1em;padding:.8em 2em;border-radius:3px;font-size:small}.rvButtonAllow{border:none;background-color:#2b8cff;color:#fff}.rvButtonDeny{border:1px solid #2b8cff;color:#2b8cff;background-color:#fff}.rvTextRow{padding-top:1em;padding-bottom:2em}@media (min-width:576px){.rvNotification{width:60vw;left:20vw}}@media (min-width:768px){.rvNotification{width:50vw;left:25vw}}@media (min-width:992px){.rvNotification{width:40vw;left:30vw}}@media (min-width:1200px){.rvNotification{width:30vw;left:35vw}}'; document.body.appendChild(c); a.allowSpeechDiv = document.createElement('div'); a.allowSpeechDiv.classList.add('rvNotification'); void 0 == b && (b = {}); a.allowSpeechDiv.innerHTML = '
' + (void 0 != b.urlOverride ? b.urlOverride : window.location.hostname) + ' ' + (void 0 != b.textOverride ? b.textOverride : 'wants to play speech') + '
DENY
ALLOW
'; document.body.appendChild(a.allowSpeechDiv); return !1; } return !0; }; a.fallback_audioPool_getAudio = function () { a.initFallbackPool(); a.fallback_audiopool_index >= a.fallback_audiopool.length && (a.fallback_audiopool_index = 0); return a.fallback_audiopool[a.fallback_audiopool_index++]; }; a.fallback_updateChunksBuffer = function () { for ( var b = a.fallbackChunkIndex; b < Math.min( a.fallbackChunks.length, a.fallbackChunkIndex + a.fallbackBufferLength ); b++ ) { var c = a.fallbackChunks[b]; null == c.audio && ((c.audio = a.fallback_audioPool_getAudio()), (function (d) { var e = function () { d.audio.src = d.url; d.audio.playbackRate = a.fallback_playbackrate; d.audio.preload = 'auto'; d.audio.load(); }; 0 == b ? e() : setTimeout(e, 50 * b); })(c)); } }; a.selectBest = function (b) { for (var c = 0; c < b.length; c++) if (null != b[c]) return b[c]; return null; }; a.pause = function () { a.fallbackMode ? null != a.fallback_audio && a.fallback_audio.pause() : (speechSynthesis.pause(), (a.ttsCancelledByTimeout = !1), (a.ttsKeepAliveTimeout = setTimeout(function () { a.ttsKeepAliveTimeout = null; speechSynthesis.cancel(); a.ttsCancelledByTimeout = !0; }, 6e4))); }; a.resume = function () { if (a.fallbackMode) null != a.fallback_audio && a.fallback_audio.play(); else if (a.ttsCancelledByTimeout) for ( var b = (a.ttsCancelledByTimeout = !1), c = 0; c < a.utterances.length; c++ ) { var d = a.utterances[c]; a.currentMsg == d && (b = !0); b && a.tts_speak(d); } else a.ttsKeepAliveTimeout && (clearTimeout(a.ttsKeepAliveTimeout), (a.ttsKeepAliveTimeout = null)), speechSynthesis.resume(); }; a.tts_speak = function (b) { setTimeout(function () { a.cancelled = !1; a.analytics.characterCount += b.text.toString().length; speechSynthesis.speak(b); }, 0.01); }; a.setVolume = function (b) { if (a.isPlaying()) if (a.fallbackMode) { for (var c = 0; c < a.fallback_audiopool.length; c++) a.fallback_audiopool[c].volume = b; a.fallback_audio.volume = b; } else for (c = 0; c < a.utterances.length; c++) a.utterances[c].volume = b; }; a.onPartEnd = function (b) { if (null != a.msgparameters && null != a.msgparameters.onchuckend) a.msgparameters.onchuckend(); a.Dispatch('OnPartEnd'); b = a.utterances.indexOf(b.utterance); a.currentMsg = a.utterances[b + 1]; }; a.onboundary = function (b) { a.log('On Boundary'); a.iOS && !a.onstartFired && a.speech_onstart(); }; a.numToWords = function (b) { var c = (function () { return function (x, t) { if (Array.isArray(x)) return x; if (Symbol.iterator in Object(x)) { var y = [], v = !0, C = !1, H = void 0; try { for ( var D = x[Symbol.iterator](), E; !(v = (E = D.next()).done) && (y.push(E.value), !t || y.length !== t); v = !0 ); } catch (I) { (C = !0), (H = I); } finally { try { if (!v && D['return']) D['return'](); } finally { if (C) throw H; } } return y; } throw new TypeError( 'Invalid attempt to destructure non-iterable instance' ); }; })(), d = function (x) { return 0 === x.length; }, e = function (x) { return function (t) { return t.slice(0, x); }; }, n = function (x) { return function (t) { return t.slice(x); }; }, g = function (x) { return x.slice(0).reverse(); }, h = function (x) { return function (t) { return function (y) { return x(t(y)); }; }; }, r = function (x) { return !x; }, p = function y(t) { return function (v) { if (d(v)) var C = []; else { C = [e(t)(v)]; var H = C.concat; v = y(t)(n(t)(v)); if (Array.isArray(v)) { for (var D = 0, E = Array(v.length); D < v.length; D++) E[D] = v[D]; v = E; } else v = Array.from(v); C = H.call(C, v); } return C; }; }, u = ' one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen'.split( ' ' ), A = ' twenty thirty forty fifty sixty seventy eighty ninety'.split( ' ' ), G = ' thousand million billion trillion quadrillion quintillion sextillion septillion octillion nonillion'.split( ' ' ), B = function (t) { var y = c(t, 3); t = y[0]; var v = y[1]; y = y[2]; return [ 0 === (Number(y) || 0) ? '' : u[y] + ' hundred ', 0 === (Number(t) || 0) ? A[v] : (A[v] && A[v] + ' ') || '', u[v + t] || u[t] ].join(''); }, F = function (t, y) { return '' === t ? t : t + ' ' + G[y]; }; return 'number' === typeof b ? a.numToWords(String(b)) : '0' === b ? 'zero' : h(p(3))(g)(Array.from(b)) .map(B) .map(F) .filter(h(r)(d)) .reverse() .join(' ') .trim(); }; a.getWords = function (b) { b = b.replace( /$|\u00a5|\u20a1|\u20ac|\u00a3|\u20aa|\u20b9|\uffe5|\u17db|\u20a9|\u20a6|\u0e3f|\u20b4|\u20ab/gi, ' dummy currency ' ); var c = b.split(/(\s*[\s,]\s*|\?|;|:|\.|\(|\)|!)/); c = c.filter(function (e) { return /[^\s]/.test(e); }); for (var d = 0; d < c.length; d++) null != (b = c[d].toString().match(/\d+/)) && (c.splice(d, 1), a .numToWords(+b[0]) .split(/\s+/) .map(function (e) { c.push(e); })); return c; }; a.getEstimatedTimeLength = function (b, c) { var d = a.getWords(b), e = 0, n = a.fallbackMode ? 1300 : 700; c = c || 1; d.map(function (r, p) { e += (r.toString().match(/[^ ]/gim) || r).length; }); var g = d.length, h = (60 / a.WORDS_PER_MINUTE) * c * 1e3 * g; 5 > g && (h = c * (n + 50 * e)); a.log( 'Estimated time length: ' + h + ' ms, words: [' + d + '], charsCount: ' + e ); return h; }; a.validateParameters = function (b, c) { if ('undefined' === typeof b[c]) return b[c]; switch (c) { case 'rate': case 'pitch': case 'volume': var d = Number(b[c]); isNaN(d) && console.warn( 'ResponsiveVoice: the parameter ' + c + ' has a wrong value "' + b[c] + '". Defaults were used.' ); b[c] = isNaN(d) ? '1' : b[c]; } return b[c]; }; a.services = { NATIVE_TTS: 0, FALLBACK_AUDIO: 1 }; a.servicesPriority = [0, 1]; a.servicesEnabled = []; a.setServiceEnabled = function (b, c) { a.servicesEnabled[b] = c; }; a.getServiceEnabled = function (b) { return a.servicesEnabled[b] || !1; }; a.setServiceEnabled(a.services.NATIVE_TTS, !0); a.setServiceEnabled(a.services.FALLBACK_AUDIO, !0); a.forceFallbackMode = function (b) { a.forcedFallbackMode = b; a.fallbackMode = b; a.mapRVs(); a.Dispatch('OnServiceSwitched'); }; a.enableWindowClickHook = function () { a.userInteractionEvents.forEach(function (b) { window.addEventListener(b, a.clickEvent, !1); }); }; a.setTextReplacements = function (b) { if (null == b) q = null; else { q = []; for (var c = 0; c < b.length; c++) { var d = b[c], e = d.searchvalue; if ('string' == typeof e) try { var n = e.match(RegExp('^/(.*?)/([gimy]*)$')), g = new RegExp(n[1], n[2]); g instanceof RegExp && (e = g); } catch (h) { e = new RegExp(e, 'g'); } q.push({ searchvalue: e, newvalue: d.newvalue, collectionvoices: d.collectionvoices, systemvoices: d.systemvoices }); } } }; var w = /(code\.responsivevoice\.org|local-lb).*?responsivevoice(\.\w+)?\.js/gi; 'interactive' === document.readyState ? a.init() : document.addEventListener('DOMContentLoaded', function () { a.init(); }); window.addEventListener('beforeunload', function () { if (rvApiKey && a.analytics.characterCount) { var b = new FormData(); b.append('key', rvApiKey); b.append('count', a.analytics.characterCount); navigator.sendBeacon( 'https://app.responsivevoice.org/analytics/cc/session', b ) && (a.analytics.characterCount = 0); } }); }, responsiveVoice = new ResponsiveVoice(); /// -------- RESPONSIVE VOICE ends responsiveVoice.debug = true; } if ( document.location.search && /rvWebsiteVerify=5tX5zUJU/gi.test(document.location.search) ) { function rvNotificationPopup() { var css = '#rv_5tX5zUJU_notification,#rv_5tX5zUJU_notification *{font-family:"Open Sans",Helvetica,Arial,sans-serif,Tahoma!important}#rv_5tX5zUJU_notification{transition-duration:.3s;opacity:1;transform:scale(1);background:#fff;border:1px solid rgba(0,0,0,.125);border-radius:.3rem;position:fixed;z-index:2147483646;top:20px;left:20px;width:400px;padding:25px;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.3);-moz-box-shadow:0 2px 4px 0 rgba(0,0,0,.3);box-shadow:0 2px 4px 0 rgba(0,0,0,.3)}#rv_5tX5zUJU_notification .rv_notification_logo{background:url(https://app.responsivevoice.org/favicon-96x96.png) no-repeat;background-size:50px 50px;float:left;margin:0 20px 0 0;width:50px;height:50px}#rv_5tX5zUJU_notification_play{background:url(https://app.responsivevoice.org/images/play.png) no-repeat;background-size:25px 25px;float:left;margin:0 5px 0 0;width:25px;height:25px;cursor:pointer}#rv_5tX5zUJU_notification .rv_notification_body{float:left;color:#343a40;font-size:13px;width:78%;min-height:50px;vertical-align:middle}#rv_5tX5zUJU_notification .rv_notification_title{color:#1d643b;font-size:16px;font-weight:700;margin:1px 0 4px 0;display:inline-block}#rv_5tX5zUJU_notification_close{position:absolute;top:15px;right:15px;font-size:22px;color:#343a40;cursor:pointer;line-height:11px}.rv_notification_clear{clear:both}', head = document.head || document.getElementsByTagName('head')[0], style = document.createElement('style'); head.appendChild(style); style.type = 'text/css'; if (style.styleSheet) { style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); } var rvNotification = document.createElement('div'); rvNotification.innerHTML = '
×
ResponsiveVoice URL verified
Your ResponsivVoice code snippet is correctly installed, you may now close this window.
'; document.body.appendChild(rvNotification); function speakVerification() { responsiveVoice.speak( document .getElementById('rv_5tX5zUJU_notification') .getElementsByClassName('rv_notification_text')[0].textContent ); } document .getElementById('rv_5tX5zUJU_notification_play') .addEventListener('click', function (e) { speakVerification(); }); document .getElementById('rv_5tX5zUJU_notification_close') .addEventListener('click', function (e) { style.remove(); rvNotification.remove(); }); speakVerification(); } document.addEventListener( 'DOMContentLoaded', function () { var xhttp = new XMLHttpRequest(); xhttp.open( 'POST', 'https://code.responsivevoice.org/verify/5tX5zUJU', true ); xhttp.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' ); xhttp.send('rv=' + (typeof responsiveVoice !== 'undefined')); xhttp.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { rvNotificationPopup(); } }; }, false ); } /** Copyright (c) Tristen Brown Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ !(function (e, t) { if ('function' == typeof define && define.amd) define('hoverintent', ['module'], t); else if ('undefined' != typeof exports) t(module); else { var n = { exports: {} }; t(n), (e.hoverintent = n.exports); } })(this, function (e) { 'use strict'; var t = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var o in n) Object.prototype.hasOwnProperty.call(n, o) && (e[o] = n[o]); } return e; }; e.exports = function (e, n, o) { function i(e, t) { return y && (y = clearTimeout(y)), (b = 0), p ? void 0 : o.call(e, t); } function r(e) { (m = e.clientX), (d = e.clientY); } function u(e, t) { if ( (y && (y = clearTimeout(y)), Math.abs(h - m) + Math.abs(E - d) < x.sensitivity) ) return (b = 1), p ? void 0 : n.call(e, t); (h = m), (E = d), (y = setTimeout(function () { u(e, t); }, x.interval)); } function s(t) { return ( (L = !0), y && (y = clearTimeout(y)), e.removeEventListener('mousemove', r, !1), 1 !== b && ((h = t.clientX), (E = t.clientY), e.addEventListener('mousemove', r, !1), (y = setTimeout(function () { u(e, t); }, x.interval))), this ); } function c(t) { return ( (L = !1), y && (y = clearTimeout(y)), e.removeEventListener('mousemove', r, !1), 1 === b && (y = setTimeout(function () { i(e, t); }, x.timeout)), this ); } function v(t) { L || ((p = !0), n.call(e, t)); } function a(t) { !L && p && ((p = !1), o.call(e, t)); } function f() { e.addEventListener('focus', v, !1), e.addEventListener('blur', a, !1); } function l() { e.removeEventListener('focus', v, !1), e.removeEventListener('blur', a, !1); } var m, d, h, E, L = !1, p = !1, T = {}, b = 0, y = 0, x = { sensitivity: 7, interval: 100, timeout: 0, handleFocus: !1 }; return ( (T.options = function (e) { var n = e.handleFocus !== x.handleFocus; return (x = t({}, x, e)), n && (x.handleFocus ? f() : l()), T; }), (T.remove = function () { e && (e.removeEventListener('mouseover', s, !1), e.removeEventListener('mouseout', c, !1), l()); }), e && (e.addEventListener('mouseover', s, !1), e.addEventListener('mouseout', c, !1)), T ); }; }); var config = { welcomeMessage: false, speakSelectedText: false, speakLinks: false, speakInactivity: false, speakEndPage: false, exitIntent: false, accesibilityNavigation: false, accesibilityNavigation2: false, welcomeMessageTime: false, text_welcomeMessage: null, text_speakInactivity: null, text_speakEndPage: null, text_exitIntent: null, trackEvents: false, abTesting: false, analytics_id: null, another_field: null }; /* var _wla = _wla || []; _wla.push(['trackPageView']); //_wla.setCountPrerender(true); _wla.push(['enableLinkTracking']); (function() { var u="//ai.learnbrite.com/"; _wla.push(['setTrackerUrl', u+'analytics.php']); _wla.push(['setSiteId', 75]); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'analytics.js.php'; s.parentNode.insertBefore(g,s); })(); */ var splitTestEnabled = config.abTesting || false; var splitTest_useGS = Math.random() < 0.5; function GetRandomMsg(text) { var texts = text.split('|'); return texts[Math.floor(Math.random() * texts.length)]; } function getHiddenProp() { var prefixes = ['webkit', 'moz', 'ms', 'o']; // if 'hidden' is natively supported just return it if ('hidden' in document) return 'hidden'; // otherwise loop over all the known prefixes until we find one for (var i = 0; i < prefixes.length; i++) { if (prefixes[i] + 'Hidden' in document) return prefixes[i] + 'Hidden'; } // otherwise it's not supported return null; } function getVisibilityState() { var prefixes = ['webkit', 'moz', 'ms', 'o']; // if 'visibilityState' is natively supported just return it if ('visibilityState' in document) return 'visibilityState'; // otherwise loop over all the known prefixes until we find one for (var i = 0; i < prefixes.length; i++) { if (prefixes[i] + 'VisibilityState' in document) return prefixes[i] + 'VisibilityState'; } // otherwise it's not supported return null; } function isHidden() { var prop = getHiddenProp(); if (!prop) return false; return document[prop]; } function isPrerendered() { var prop = getVisibilityState(); //console.log(prop); if (!prop) return false; //console.log(document[prop]); if (document[prop] != 'prerender') return false; return document[prop]; } console.log('isHidden: ' + isHidden()); console.log('Prerender: ' + isPrerendered()); //Analytics //Search Message var prerenderUsed = false; if (isPrerendered() && !prerenderUsed) { prerenderUsed = true; setTimeout(function () { if (!splitTestEnabled || (splitTestEnabled && splitTest_useGS)) { var txt = GetRandomMsg(''); if (txt != null && txt != '') { console.log('Launching search message'); responsiveVoice.speak( 'According to Voicebrite, ' + txt, 'UK English Female' ); } } //Search Message Split Test - Impression if (splitTestEnabled) { if (splitTest_useGS) { trackEvent('searchMessage', 'impressionAB', 'true'); } else { trackEvent('searchMessage', 'impressionAB', 'false'); } } else { trackEvent('searchMessage', 'impression'); } }, 1500); } window.addEventListener('load', function () { //We came from prerender var smessInterval = null; if (prerenderUsed) { smessInterval = setInterval(function () { if (!isPrerendered()) { clearInterval(smessInterval); //Search Message Split Test - Impression if (splitTestEnabled) { if (splitTest_useGS) { trackEvent('searchMessage', 'visitAB', 'true'); } else { trackEvent('searchMessage', 'visitAB', 'false'); } } else { trackEvent('searchMessage', 'visit'); } } }, 1000); } console.log('Configuring'); //Speak links var _allLinks = document.getElementsByTagName('a'); Array.prototype.forEach.call(_allLinks, function (el) { hoverintent( el, function () { if (config.speakLinks) { //responsiveVoice.cancel(); responsiveVoice.speak(el.textContent, 'UK English Female'); trackEvent('agentFeature', 'spokenLink'); } }, function () {} ); }); //Speak selected text var selectedText = ''; var last_selectedText = ''; function getSelectionText() { var text = ''; if (window.getSelection) { text = window.getSelection().toString(); } else if (document.selection && document.selection.type != 'Control') { // for Internet Explorer 8 and below text = document.selection.createRange().text; } return text; } if (config.speakSelectedText) { attachToElements( document.querySelectorAll('PRE,DIV'), ['mouseup', 'touchend'], onMouseUp ); } function attachToElements(elements, events, callback) { if (elements.length > 0) { for (var i = 0; i < elements.length; i++) { events.forEach(function (event) { elements[i].addEventListener(event, function (e) { callback(); }); }); } } } function onMouseUp() { selectedText = getSelectionText(); console.log('Selected text *' + selectedText + '*'); if (selectedText != last_selectedText && selectedText != '') { last_selectedText = selectedText; responsiveVoice.cancel(); // stop anything currently being spoken responsiveVoice.speak(selectedText, 'UK English Female'); //speak the text as returned by getSelectionText trackEvent('agentFeature', 'highlightText'); } } //Speak welcome message. Will only play if user didn't came from google. var welcomeMessageLaunched = false; if ( config.welcomeMessage && (!config.welcomeMessageTime || oneTimeTest('welcomeMessage')) && !isPrerendered() && !prerenderUsed ) { welcomeMessageLaunched = true; setTimeout(function () { if ( config.text_welcomeMessage != null && config.text_welcomeMessage != '' ) { console.log('Launching welcome message'); responsiveVoice.speak( GetRandomMsg(config.text_welcomeMessage), 'UK English Female' ); trackEvent('agentFeature', 'welcomeMessage'); } }, 1500); } //Speak welcome message when user came from Google. Won't play if default message played var welcomeMessage2Launched = false; var welcomeMessage2Interval = null; if ( !welcomeMessageLaunched && config.welcomeMessage2 && (!config.welcomeMessageTime || oneTimeTest('welcomeMessage2')) && config.text_welcomeMessage2 != null && config.text_welcomeMessage2 != '' ) { //Wait until we're visible and launch message welcomeMessage2Interval = setInterval(function () { console.log('Welcome Message from Google Waiting'); if (!isPrerendered() && !welcomeMessage2Launched) { console.log('Welcome Message from Google launched'); welcomeMessage2Launched = true; responsiveVoice.speak( GetRandomMsg(config.text_welcomeMessage2), 'UK English Female' ); trackEvent('agentFeature', 'welcomeMessage2'); clearInterval(welcomeMessage2Interval); } }, 1000); } //Speak when scroll end function bindScroll() { if ( window.innerHeight + window.pageYOffset >= document.body.offsetHeight - 100 && config.text_speakEndPage != null && config.text_speakEndPage != '' ) { console.log('bottom'); window.removeEventListener('scroll', bindScroll); responsiveVoice.speak( GetRandomMsg(config.text_speakEndPage), 'UK English Female' ); trackEvent('agentFeature', 'scrollEnd'); } } if (config.speakEndPage) { window.addEventListener('scroll', bindScroll); } //Inactivity var idleTime = 0; if (config.speakInactivity) { setInterval(timerIncrement, 1000); window.addEventListener('mousemove', function () { idleTime = 0; }); window.addEventListener('keyup', function () { idleTime = 0; }); } function timerIncrement() { idleTime += 1000; if (idleTime >= 30000) { responsiveVoice.speak( GetRandomMsg(config.text_speakInactivity), 'UK English Female' ); trackEvent('agentFeature', 'inactivity'); idleTime = 0; } } //Exit intent if (config.speakInactivity) { console.info('setting up exit intent'); document.addEventListener('mouseout', exitIntent); } function exitIntent(e) { if (e.clientY < 0) { responsiveVoice.speak( GetRandomMsg(config.text_exitIntent), 'UK English Female' ); trackEvent('agentFeature', 'exitIntent'); } } //Tab and ctrl to speak - Accessibility Navigation var started = 0; if (config.accesibilityNavigation) { console.log('accesibilityNavigation'); document.addEventListener('keyup', function (e) { console.log('keyup called'); var code = e.keyCode || e.which; if (e.target) { switch (e.target.tagName) { case 'A': if (code == '9') { responsiveVoice.speak( 'Link 2 ' + e.target.text, 'UK English Female' ); trackEvent('agentFeature', 'accesibilityNavigation', 'tab'); } break; case 'BUTTON': if (code == '9') { setTimeout( responsiveVoice.speak( e.target.textContent + ' button', 'UK English Female' ), 1000 ); trackEvent('agentFeature', 'accesibilityNavigation', 'tab'); } break; case 'TEXTAREA': if (code == '9') { responsiveVoice.speak( 'Text Input ' + document .querySelectorAll(':focus')[0] .getAttribute('placeholder'), 'UK English Female' ); trackEvent('agentFeature', 'accesibilityNavigation', 'tab'); } break; } } }); } if (config.accesibilityNavigation2) { document.addEventListener('keyup', function (e) { console.log('keyup called'); var code = e.keyCode || e.which; if (code == '40' && e.ctrlKey) { console.log('ctrl + down arrow'); responsiveVoice.speak( document.querySelectorAll('p')[started].textContent, 'UK English Female' ); trackEvent('agentFeature', 'accesibilityNavigation', 'ctrl-arrow'); document.querySelectorAll('p')[started].scrollIntoView(false); started = started + 1; } if (code == '38' && e.ctrlKey) { console.log('ctrl + up arrow'); responsiveVoice.speak( document.querySelectorAll('p')[started].textContent, 'UK English Female' ); trackEvent('agentFeature', 'accesibilityNavigation', 'ctrl-arrow'); document.querySelectorAll('p')[started].scrollIntoView(false); started = started - 1; if (started < 1) { started = 0; } } }); } }); function createCookie(name, value, days) { if (days) { var date = new Date(); date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); var expires = '; expires=' + date.toGMTString(); } else var expires = ''; document.cookie = name + '=' + value + expires + '; path=/'; } function readCookie(name) { var nameEQ = name + '='; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); } return null; } function eraseCookie(name) { createCookie(name, '', -1); } function getOrCreateTest(name, prob, days) { var c = readCookie(name); if (c == null) { console.log('Cookie set'); var v = Math.random() < (prob != null ? prob : 0.5); //1 hour createCookie(name, v.toString(), days != null ? days : 1 / 24); return v; } console.log('Cookie read'); return c == true.toString(); } function oneTimeTest(name, days) { var c = readCookie(name); if (c == null) { console.log('Cookie set - one time True'); //1 hour createCookie(name, false.toString(), days != null ? days : 0.5 / 24); return true; } console.log('Cookie read - one time False'); return false; } function trackEvent(category, action, name, value) { if (config.trackEvents != true) return; console.log('Track ' + category + ',' + action + ',' + name); var url = 'https://ai.learnbrite.com/analytics.php'; var postArray = []; var data = { idsite: config.analytics_id, rec: 1, url: window.location.href, rand: Math.floor(Math.random() * 1000000000), e_c: category, e_a: action, e_n: name, e_v: value }; for (var property in data) { postArray.push(encodeURI(property + '=' + data[property])); } var xhttp = new XMLHttpRequest(); xhttp.open('POST', url, true); xhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhttp.send(postArray.join('&')); xhttp.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { console.log('Tracking Success'); console.log(data); } }; }