PageSourceSearch

https://larkmead.com/resources/js/javascript.js?v=11778185069

js larkmead.com collected 2026-10-03 21:50:22 UTC 1,260,846 bytes, 28,646 lines download raw bytes

1/******/ (function() { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
4/***/ "../FigureBaseResources/FigureBaseResources.js":
5/*!*****************************************************!*\
6  !*** ../FigureBaseResources/FigureBaseResources.js ***!
7  \*****************************************************/
8/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
9
10// Load 3rd party scripts
11window.$ = window.jQuery = __webpack_require__(/*! jquery */ "../FigureBaseResources/node_modules/jquery/dist/jquery.js");
12__webpack_require__(/*! bootstrap */ "../FigureBaseResources/node_modules/bootstrap/dist/js/bootstrap.js");
13// Load Headroom globally then the jQuery plugin
14window.Headroom = __webpack_require__(/*! headroom.js */ "../FigureBaseResources/node_modules/headroom.js/dist/headroom.js");
15__webpack_require__(/*! headroom.js/dist/jQuery.headroom.js */ "../FigureBaseResources/node_modules/headroom.js/dist/jQuery.headroom.js");
16
17// Include our scripts
18__webpack_require__(/*! ./js/offset.config.js */ "../FigureBaseResources/js/offset.config.js");
19__webpack_require__(/*! ./js/figure.js */ "../FigureBaseResources/js/figure.js");
20window.crs = __webpack_require__(/*! ./js/crs.min.js */ "../FigureBaseResources/js/crs.min.js");
21__webpack_require__(/*! ./js/viewport.js */ "../FigureBaseResources/js/viewport.js");
22__webpack_require__(/*! ./js/cookies.js */ "../FigureBaseResources/js/cookies.js");
23__webpack_require__(/*! ./js/jquery.stuck.js */ "../FigureBaseResources/js/jquery.stuck.js");
24__webpack_require__(/*! ./js/autofillbyip.js */ "../FigureBaseResources/js/autofillbyip.js");
25//require("moment");
26//require("tempusdominus-bootstrap-4");
27__webpack_require__(/*! ./js/site.js */ "../FigureBaseResources/js/site.js");
28__webpack_require__(/*! offset-analytics */ "../FigureBaseResources/node_modules/offset-analytics/dist/offset-analytics.umd.cjs");
29
30
31/***/ }),
32
33/***/ "../FigureBaseResources/js/autofillbyip.js":
34/*!*************************************************!*\
35  !*** ../FigureBaseResources/js/autofillbyip.js ***!
36  \*************************************************/
37/***/ (function() {
38
39(function() {
40  // Check if Page has a mailing address section before sending request
41  const checkIfValidPage = document.getElementById("ipstack_request");
42  if (!checkIfValidPage) return;
43
44  if (checkIfValidPage) {
45    // Get IP
46    const getIp = new XMLHttpRequest();
47    getIp.addEventListener("load", function() {
48      try {
49        const response = JSON.parse(getIp.response);
50        if (!response || !response.ip) return;
51
52        const ip = response.ip;
53
54        // After IP has been fetched
55        // Then call for location
56        const accessKey = "67ca1e1ad4f856a694c56d2109b303a6";
57        const getLocation = new XMLHttpRequest();
58        getLocation.addEventListener("load", function(e) {
59          try {
60            const response = JSON.parse(getLocation.response);
61
62            if (response.error || !response.city) return;
63
64            const country = document.getElementById("location_country") ? document.getElementById("location_country") : document.getElementById("signup_mailing_country");
65            const city = document.getElementById("location_city") ? document.getElementById("location_city") :  document.getElementById("signup_mailing_city");
66            const state = document.getElementById("location_state") ? document.getElementById("location_state") :  document.getElementById("signup_mailing_state");
67            const zip = document.getElementById("location_zip") ? document.getElementById("location_zip") :  document.getElementById("signup_mailing_zip");
68            const isEU = document.getElementById("data[is_eu]");
69
70
71            city.setAttribute("value", response.city);
72            zip.setAttribute("value", response.zip);
73
74            // Set and manually call onchange event
75            country.value = response.country_code;
76            country.dispatchEvent(new Event('change'));
77
78
79            if (state) {
80              $(state).val(response.region_code).change();
81            }
82            if ( isEU ) {
83              isEU.value =
84                  (response.location && response.location.is_eu ? "Yes" : "No") ||
85                  "Unknown";
86            }
87
88          } catch (err) {
89            console.log(err)
90          }
91        });
92
93        getLocation.open(
94            "GET",
95            "https://api.ipstack.com/" + ip + "?access_key=" + accessKey
96        );
97        getLocation.send();
98      } catch (err) {}
99    });
100    getIp.open("GET", "https://api.ipify.org/?format=json");
101    getIp.send();
102  }
103})();
104
105
106/***/ }),
107
108/***/ "../FigureBaseResources/js/cookies.js":
109/*!********************************************!*\
110  !*** ../FigureBaseResources/js/cookies.js ***!
111  \********************************************/
112/***/ (function(module, exports, __webpack_require__) {
113
114var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
115 * jQuery Cookie Plugin v1.4.1
116 * https://github.com/carhartl/jquery-cookie
117 *
118 * Copyright 2006, 2014 Klaus Hartl
119 * Released under the MIT license
120 */
121(function (factory) {
122	if (true) {
123		// AMD (Register as an anonymous module)
124		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "../FigureBaseResources/node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
125		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
126		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
127		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
128	} else // removed by dead control flow
129{}
130}(function ($) {
131
132	var pluses = /\+/g;
133
134	function encode(s) {
135		return config.raw ? s : encodeURIComponent(s);
136	}
137
138	function decode(s) {
139		return config.raw ? s : decodeURIComponent(s);
140	}
141
142	function stringifyCookieValue(value) {
143		return encode(config.json ? JSON.stringify(value) : String(value));
144	}
145
146	function parseCookieValue(s) {
147		if (s.indexOf('"') === 0) {
148			// This is a quoted cookie as according to RFC2068, unescape...
149			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
150		}
151
152		try {
153			// Replace server-side written pluses with spaces.
154			// If we can't decode the cookie, ignore it, it's unusable.
155			// If we can't parse the cookie, ignore it, it's unusable.
156			s = decodeURIComponent(s.replace(pluses, ' '));
157			return config.json ? JSON.parse(s) : s;
158		} catch(e) {}
159	}
160
161	function read(s, converter) {
162		var value = config.raw ? s : parseCookieValue(s);
163		return $.isFunction(converter) ? converter(value) : value;
164	}
165
166	var config = $.cookie = function (key, value, options) {
167
168		// Write
169
170		if (arguments.length > 1 && !$.isFunction(value)) {
171			options = $.extend({}, config.defaults, options);
172
173			if (typeof options.expires === 'number') {
174				var days = options.expires, t = options.expires = new Date();
175				t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
176			}
177
178			return (document.cookie = [
179				encode(key), '=', stringifyCookieValue(value),
180				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
181				options.path    ? '; path=' + options.path : '',
182				options.domain  ? '; domain=' + options.domain : '',
183				options.secure  ? '; secure' : ''
184			].join(''));
185		}
186
187		// Read
188
189		var result = key ? undefined : {},
190			// To prevent the for loop in the first place assign an empty array
191			// in case there are no cookies at all. Also prevents odd result when
192			// calling $.cookie().
193			cookies = document.cookie ? document.cookie.split('; ') : [],
194			i = 0,
195			l = cookies.length;
196
197		for (; i < l; i++) {
198			var parts = cookies[i].split('='),
199				name = decode(parts.shift()),
200				cookie = parts.join('=');
201
202			if (key === name) {
203				// If second argument (value) is a function it's a converter...
204				result = read(cookie, value);
205				break;
206			}
207
208			// Prevent storing a cookie that we couldn't decode.
209			if (!key && (cookie = read(cookie)) !== undefined) {
210				result[name] = cookie;
211			}
212		}
213
214		return result;
215	};
216
217	config.defaults = {};
218
219	$.removeCookie = function (key, options) {
220		// Must not alter options, thus extending a fresh object...
221		$.cookie(key, '', $.extend({}, options, { expires: -1 }));
222		return !$.cookie(key);
223	};
224
225}));
226
227/***/ }),
228
229/***/ "../FigureBaseResources/js/crs.min.js":
230/*!********************************************!*\
231  !*** ../FigureBaseResources/js/crs.min.js ***!
232  \********************************************/
233/***/ (function(module, exports) {
234
235var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
236 * country-region-selector
237 * ------------------------
238 * 0.5.0
239 * @author Ben Keen
240 * @repo https://github.com/benkeen/country-region-selector
241 * @licence MIT
242 */
243!(function(a, n) {
244  if (true) !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (n),
245		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
246		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
247		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
248  else // removed by dead control flow
249{}
250})(this, function() {
251  "use strict";
252  var m = !0,
253    h = !0,
254    M = [],
255    l = [
256      [
257        "Afghanistan",
258        "AF",
259        "Badakhshan~BDS|Badghis~BDG|Baghlan~BGL|Balkh~BAL|Bamyan~BAM|Daykundi~DAY|Farah~FRA|Faryab~FYB|Ghazni~GHA|Ghor~GHO|Helmand~HEL|Herat~HER|Jowzjan~JOW|Kabul~KAB|Kandahar~KAN|Kapisa~KAP|Khost~KHO|Kunar~KNR|Kunduz~KDZ|Laghman~LAG|Logar~LOW|Maidan Wardak~WAR|Nangarhar~NAN|Nimruz~NIM|Nuristan~NUR|Paktia~PIA|Paktika~PKA|Panjshir~PAN|Parwan~PAR|Samangan~SAM|Sar-e Pol~SAR|Takhar~TAK|Urozgan~ORU|Zabul~ZAB"
260      ],
261      [
262        "Åland Islands",
263        "AX",
264        "Brändö~BR|Eckerö~EC|Finström~FN|Föglö~FG|Geta~GT|Hammarland~HM|Jomala~JM|Kumlinge~KM|Kökar~KK|Lemland~LE|Lumparland~LU|Mariehamn~MH|Saltvik~SV|Sottunga~ST|Sund~SD|Vårdö~VR"
265      ],
266      [
267        "Albania",
268        "AL",
269        "Berat~01|Dibër~09|Durrës~02|Elbasan~03|Fier~04|Gjirokastër~05|Korçë~06|Kukës~07|Lezhë~08|Shkodër~10|Tirana~11|Vlorë~12"
270      ],
271      [
272        "Algeria",
273        "DZ",
274        "Adrar~01|Aïn Defla~44|Aïn Témouchent~46|Algiers~16|Annaba~23|Batna~05|Béchar~08|Béjaïa~06|Biskra~07|Blida~09|Bordj Bou Arréridj~34|Bouïra~10|Boumerdès~35|Chlef~02|Constantine~25|Djelfa~17|El Bayadh~32|El Oued~39|El Tarf~36|Ghardaïa~47|Guelma~24|Illizi~33|Jijel~18|Khenchela~40|Laghouat~03|Mascara~29|Médéa~26|Mila~43|Mostaganem~27|Msila~28|Naâma~45|Oran~31|Ouargla~30|Oum el Bouaghi~04|Relizane~48|Saïda~20|Sétif~19|Sidi Bel Abbès~22|Skikda~21|Souk Ahras~41|Tamanghasset~11|Tébessa~12|Tiaret~14|Tindouf~37|Tipaza~42|Tissemsilt~38|Tizi Ouzou~15|Tlemcen~13"
275      ],
276      [
277        "American Samoa",
278        "AS",
279        "Tutuila~01|Aunu'u~02|Ta'ū~03|Ofu‑Olosega~04|Rose Atoll~21|Swains Island~22"
280      ],
281      [
282        "Andorra",
283        "AD",
284        "Andorra la Vella~07|Canillo~02|Encamp~03|Escaldes-Engordany~08|La Massana~04|Ordino~05|Sant Julià de Lòria~06"
285      ],
286      [
287        "Angola",
288        "AO",
289        "Bengo~BGO|Benguela~BGU|Bié~BIE|Cabinda~CAB|Cuando Cubango~CCU|Cuanza Norte~CNO|Cuanza Sul~CUS|Cunene~CNN|Huambo~HUA|Huíla~HUI|Luanda~LUA|Lunda Norte~LNO|Lunda Sul~LSU|Malanje~MAL|Moxico~MOX|Namibe~NAM|Uíge~UIG|Zaire~ZAI"
290      ],
291      [
292        "Anguilla",
293        "AI",
294        "Anguilla~01|Anguillita Island~02|Blowing Rock~03|Cove Cay~04|Crocus Cay~05|Deadman's Cay~06|Dog Island~07|East Cay~08|Little Island~09|Little Scrub Island~10|Mid Cay~11|North Cay~12|Prickly Pear Cays~13|Rabbit Island~14|Sandy Island/Sand Island~15|Scilly Cay~16|Scrub Island~17|Seal Island~18|Sombrero/Hat Island~19|South Cay~20|South Wager Island~21|West Cay~22"
295      ],
296      ["Antarctica", "AQ", "Antarctica~AQ"],
297      [
298        "Antigua and Barbuda",
299        "AG",
300        "Antigua Island~01|Barbuda Island~02|Bird Island~04|Bishop Island~05|Blake Island~06|Crump Island~09|Dulcina Island~10|Exchange Island~11|Five Islands~12|Great Bird Island~13|Green Island~14|Guiana Island~15|Hawes Island~17|Hells Gate Island~16|Henry Island~18|Johnson Island~19|Kid Island~20|Lobster Island~22|Maiden Island~24|Moor Island~25|Nanny Island~26|Pelican Island~27|Prickly Pear Island~28|Rabbit Island~29|Red Head Island~31|Redonda Island~03|Sandy Island~32|Smith Island~33|The Sisters~34|Vern
300on Island~35|Wicked Will Island~36|York Island~37"
301      ],
302      [
303        "Argentina",
304        "AR",
305        "Buenos Aires~B|Capital Federal~C|Catamarca~K|Chaco~H|Chubut~U|Córdoba~X|Corrientes~W|Entre Ríos~E|Formosa~P|Jujuy~Y|La Pampa~L|La Rioja~F|Mendoza~M|Misiones~N|Neuquén~Q|Río Negro~R|Salta~A|San Juan~J|San Luis~D|Santa Cruz~Z|Santa Fe~S|Santiago del Estero~G|Tierra del Fuego~V|Tucumán~T"
306      ],
307      [
308        "Armenia",
309        "AM",
310        "Aragatsotn~AG|Ararat~AR|Armavir~AV|Gegharkunik~GR|Kotayk~KT|Lori~LO|Shirak~SH|Syunik~SU|Tavush~TV|Vayots Dzor~VD|Yerevan~ER"
311      ],
312      ["Aruba", "AW", "Aruba~AW"],
313      [
314        "Australia",
315        "AU",
316        "Australian Capital Territory~ACT|New South Wales~NSW|Northern Territory~NT|Queensland~QLD|South Australia~SA|Tasmania~TAS|Victoria~VIC|Western Australia~WA"
317      ],
318      [
319        "Austria",
320        "AT",
321        "Burgenland~1|Kärnten~2|Niederösterreich~3|Oberösterreich~4|Salzburg~5|Steiermark~6|Tirol~7|Vorarlberg~8|Wien~9"
322      ],
323      [
324        "Azerbaijan",
325        "AZ",
326        "Abşeron~ABS|Ağcabədi~AGC|Ağdam~AGM|Ağdaş~AGS|Ağstafa~AGA|Ağsu~AGU|Astara~AST|Babək~BAB|Balakən~BAL|Bərdə~BAR|Beyləqan~BEY|Biləsuvar~BIL|Cəbrayıl~CAB|Cəlilabad~CAL|Culfa~CUL|Daşkəsən~DAS|Füzuli~FUZ|Gədəbəy~GAD|Goranboy~GOR|Göyçay~GOY|Göygöl~GYG|Hacıqabul~HAC|İmişli~IMI|İsmayıllı~ISM|Kəlbəcər~KAL|Kǝngǝrli~KAN|Kürdəmir~KUR|Laçın~LAC|Lənkəran~LAN|Lerik~LER|Masallı~MAS|Neftçala~NEF|Oğuz~OGU|Ordubad~ORD|Qəbələ~QAB|Qax~QAX|Qazax~QAZ|Qobustan~QOB|Quba~QBA|Qubadli~QBI|Qusar~QUS|Saatlı~SAT|Sabirabad~SAB|Şabran~SBN|Sədərək~SAD|Şahbuz~SAH|Şəki~SAK|Salyan~SAL|Şamaxı~SMI|Şəmkir~SKR|Samux~SMX|Şərur~SAR|Siyəzən~SIY|Şuşa~SUS|Tərtər~TAR|Tovuz~TOV|Ucar~UCA|Xaçmaz~XAC|Xızı~XIZ|Xocalı~XCI|Xocavənd~XVD|Yardımlı~YAR|Yevlax~YEV|Zəngilan~ZAN|Zaqatala~ZAQ|Zərdab~ZAR"
327      ],
328      [
329        "Bahamas",
330        "BS",
331        "Acklins Island~01|Berry Islands~22|Bimini~02|Black Point~23|Cat Island~03|Central Abaco~24|Crooked Island and Long Cay~28|East Grand Bahama~29|Exuma~04|Freeport~05|Fresh Creek~06|Governor's Harbour~07|Green Turtle Cay~08|Harbour Island~09|High Rock~10|Inagua~11|Kemps Bay~12|Long Island~13|Marsh Harbour~14|Mayaguana~15|Moore’s Island~40|New Providence~16|Nichollstown and Berry Islands~17|North Abaco~42|North Andros~41|North Eleuthera~33|Ragged Island~18|Rock Sound~19|San Salvador and Rum Cay~20|Sandy Point~21|South Abaco~35|South Andros~36|South Eleuthera~37|West Grand Bahama~39"
332      ],
333      [
334        "Bahrain",
335        "BH",
336        "Al Janūbīyah~14|Al Manāmah~13|Al Muḩarraq~15|Al Wusţá~16|Ash Shamālīyah~17"
337      ],
338      [
339        "Bangladesh",
340        "BD",
341        "Barisal~A|Chittagong~B|Dhaka~C|Khulna~D|Mymensingh~M|Rajshahi~E|Rangpur~F|Sylhet~G"
342      ],
343      [
344        "Barbados",
345        "BB",
346        "Christ Church~01|Saint Andrew~02|Saint George~03|Saint James~04|Saint John~05|Saint Joseph~06|Saint Lucy~07|Saint Michael~08|Saint Peter~09|Saint Philip~10|Saint Thomas~11"
347      ],
348      [
349        "Belarus",
350        "BY",
351        "Brest voblast~BR|Gorod Minsk~HO|Homiel voblast~HO|Hrodna voblast~HR|Mahilyow voblast~MA|Minsk voblast~MI|Vitsebsk voblast~VI"
352      ],
353      [
354        "Belgium",
355        "BE",
356        "Bruxelles-Capitale~BRU|Région Flamande~VLG|Région Wallonië~WAL"
357      ],
358      [
359        "Belize",
360        "BZ",
361        "Belize District~BZ|Cayo District~CY|Corozal District~CZL|Orange Walk District~OW|Stann Creek District~SC|Toledo District~TOL"
362      ],
363      [
364        "Benin",
365        "BJ",
366        "Alibori~AL|Atakora~AK|Atlantique~AQ|Borgou~BO|Collines Department~CO|Donga~DO|Kouffo~KO|Littoral Department~LI|Mono Department~MO|Ouémé~OU|Plateau~PL|Zou~ZO"
367      ],
368      [
369        "Bermuda",
370        "BM",
371        "City of Hamilton~03|Devonshire Parish~01|Hamilton Parish~02|Paget Parish~04|Pembroke Parish~05|Sandys Parish~08|Smith's Parish~09|Southampton Parish~10|St. George's Parish~07|Town of St. George~06|Warwick Parish~11"
372      ],
373      [
374        "Bhutan",
375        "BT",
376        "Bumthang~33|Chhukha~12|Dagana~22|Gasa~GA|Haa~13|Lhuntse~44|Mongar~42|Paro~11|Pemagatshel~43|Punakha~23|Samdrup Jongkhar~45|Samtse~14|Sarpang~31|Thimphu~15|Trashigang~41|Trashiyangtse~TY|Trongsa~32|Tsirang~21|Wangdue Phodrang~24|Zhemgang~34"
377      ],
378      [
379        "Bolivia",
380        "BO",
381        "Beni~B|Chuquisaca~H|Cochabamba~C|La Paz~L|Oruro~O|Pando~N|Potosí~P|Santa Cruz~S|Tarija~T"
382      ],
383      [
384        "Bonaire, Sint Eustatius and Saba",
385        "BQ",
386        "Bonaire~BO|Saba Isand~SA|Sint Eustatius~SE"
387      ],
388      [
389        "Bosnia and Herzegovina",
390        "BA",
391        "Brčko Distrikt~BRC|Federacija Bosne i Hercegovine~BIH|Republika Srpska~SRP"
392      ],
393      [
394        "Botswana",
395        "BW",
396        "Central~CE|Ghanzi~GH|Kgalagadi~KG|Kgatleng~KL|Kweneng~KW|North West~NW|North-East~NE|South East~SE|Southern~SO"
397      ],
398      ["Bouvet Island", "BV", "Bouvet Island~BV"],
399      [
400        "Brazil",
401        "BR",
402        "Acre~AC|Alagoas~AL|Amapá~AP|Amazonas~AM|Bahia~BA|Ceará~CE|Distrito Federal~DF|Espírito Santo~ES|Goiás~GO|Maranhão~MA|Mato Grosso~MT|Mato Grosso do Sul~MS|Minas Gerais~MG|Pará~PA|Paraíba~PB|Paraná~PR|Pernambuco~PE|Piauí~PI|Rio de Janeiro~RJ|Rio Grande do Norte~RN|Rio Grande do Sul~RS|Rondônia~RO|Roraima~RR|Santa Catarina~SC|São Paulo~SP|Sergipe~SE|Tocantins~TO"
403      ],
404      [
405        "British Indian Ocean Territory",
406        "IO",
407        "British Indian Ocean Territory~IO"
408      ],
409      [
410        "Brunei Darussalam",
411        "BN",
412        "Belait~BE|Brunei Muara~BM|Temburong~TE|Tutong~TU"
413      ],
414      [
415        "Bulgaria",
416        "BG",
417        "Blagoevgrad~01|Burgas~02|Dobrich~08|Gabrovo~07|Jambol~28|Khaskovo~26|Kjustendil~10|Kurdzhali~09|Lovech~11|Montana~12|Pazardzhik~13|Pernik~14|Pleven~15|Plovdiv~16|Razgrad~17|Ruse~18|Shumen~27|Silistra~19|Sliven~20|Smoljan~21|Sofija~23|Sofija-Grad~22|Stara Zagora~24|Turgovishhe~25|Varna~03|Veliko Turnovo~04|Vidin~05|Vraca~06"
418      ],
419      [
420        "Burkina Faso",
421        "BF",
422        "Balé~BAL|Bam/Lake Bam~BAM|Banwa Province~BAN|Bazèga~BAZ|Bougouriba~BGR|Boulgou Province~BLG|Boulkiemdé~BLK|Comoé/Komoe~COM|Ganzourgou Province~GAN|Gnagna~GNA|Gourma Province~GOU|Houet~HOU|Ioba~IOB|Kadiogo~KAD|Kénédougou~KEN|Komondjari~KMD|Kompienga~KMP|Kossi Province~KOS|Koulpélogo~KOP|Kouritenga~KOT|Kourwéogo~KOW|Léraba~LER|Loroum~LOR|Mouhoun~MOU|Namentenga~NAM|N
422aouri/Nahouri~NAO|Nayala~NAY|Noumbiel~NOU|Oubritenga~OUB|Oudalan~OUD|Passoré~PAS|Poni~PON|Sanguié~SNG|Sanmatenga~SMT|Séno~SEN|Sissili~SIS|Soum~SOM|Sourou~SOR|Tapoa~TAP|Tui/Tuy~TUI|Yagha~YAG|Yatenga~YAT|Ziro~ZIR|Zondoma~ZON|Zoundwéogo~ZOU"
423      ],
424      [
425        "Burundi",
426        "BI",
427        "Bubanza~BB|Bujumbura Mairie~BM|Bujumbura Rural~BL|Bururi~BR|Cankuzo~CA|Cibitoke~CI|Gitega~GI|Karuzi~KR|Kayanza~KY|Kirundo~KI|Makamba~MA|Muramvya~MU|Muyinga~MY|Mwaro~MW|Ngozi~NG|Rutana~RT|Ruyigi~RY"
428      ],
429      [
430        "Cambodia",
431        "KH",
432        "Baat Dambang~2|Banteay Mean Chey~1|Kampong Chaam~3|Kampong Chhnang~4|Kampong Spueu~5|Kampong Thum~6|Kampot~7|Kandaal~8|Kaoh Kong~9|Kracheh~10|Krong Kaeb~23|Krong Pailin~24|Krong Preah Sihanouk~18|Mondol Kiri~11|Otdar Mean Chey~22|Phnom Penh~12|Pousaat~15|Preah Vihear~13|Prey Veaeng~14|Rotanah Kiri~16|Siem Reab~17|Stueng Treng~19|Svaay Rieng~20|Taakaev~21|Tbong Khmum~25"
433      ],
434      [
435        "Cameroon",
436        "CM",
437        "Adamaoua~AD|Centre~CE|Est~ES|Extrême-Nord~EN|Littoral~LT|Nord~NO|Nord-Ouest~NW|Ouest~OU|Sud~SU|Sud-Ouest~SW"
438      ],
439      [
440        "Canada",
441        "CA",
442        "Alberta~AB|British Columbia~BC|Manitoba~MB|New Brunswick~NB|Newfoundland and Labrador~NL|Northwest Territories~NT|Nova Scotia~NS|Nunavut~NU|Ontario~ON|Prince Edward Island~PE|Quebec~QC|Saskatchewan~SK|Yukon~YT"
443      ],
444      [
445        "Cape Verde",
446        "CV",
447        "Boa Vista~BV|Brava~BR|Calheta de São Miguel~CS|Maio~MA|Mosteiros~MO|Paúl~PA|Porto Novo~PN|Praia~PR|Ribeira Brava~RB|Ribeira Grande~RG|Sal~SL|Santa Catarina~CA|Santa Cruz~CR|São Domingos~SD|São Filipe~SF|São Nicolau~SN|São Vicente~SV|Tarrafal~TA|Tarrafal de São Nicolau~TS"
448      ],
449      [
450        "Cayman Islands",
451        "KY",
452        "Creek|Eastern|Midland|South Town|Spot Bay|Stake Bay|West End|Western"
453      ],
454      [
455        "Central African Republic",
456        "CF",
457        "Bamingui-Bangoran~BB|Bangui~BGF|Basse-Kotto~BK|Haute-Kotto~HK|Haut-Mbomou~HM|Kémo~KG|Lobaye~LB|Mambéré-Kadéï~HS|Mbomou~MB|Nana-Grebizi~10|Nana-Mambéré~NM|Ombella-M'Poko~MP|Ouaka~UK|Ouham~AC|Ouham Péndé~OP|Sangha-Mbaéré~SE|Vakaga~VK"
458      ],
459      [
460        "Chad",
461        "TD",
462        "Bahr el Ghazal~BG|Batha~BA|Borkou~BO|Chari-Baguirmi~CB|Ennedi-Est~EE|Ennedi-Ouest~EO|Guéra~GR|Hadjer Lamis~HL|Kanem~KA|Lac~LC|Logone Occidental~LO|Logone Oriental~LR|Mondoul~MA|Mayo-Kébbi-Est~ME|Moyen-Chari~MC|Ouaddai~OD|Salamat~SA|Sila~SI|Tandjilé~TA|Tibesti~TI|Ville de Ndjamena~ND|Wadi Fira~WF"
463      ],
464      [
465        "Chile",
466        "CL",
467        "Aisén del General Carlos Ibáñez del Campo~AI|Antofagasta~AN|Araucanía~AR|Arica y Parinacota~AP|Atacama~AT|Bío-Bío~BI|Coquimbo~CO|Libertador General Bernardo O'Higgins~LI|Los Lagos~LL|Los Ríos~LR|Magallanes y Antartica Chilena~MA|Marga-Marga~|Maule~ML|Región Metropolitana de Santiago~RM|Tarapacá~TA|Valparaíso~VS"
468      ],
469      [
470        "China",
471        "CN",
472        "Anhui~34|Beijing~11|Chongqing~50|Fujian~35|Gansu~62|Guangdong~44|Guangxi~45|Guizhou~52|Hainan~46|Hebei~13|Heilongjiang~23|Henan~41|Hong Kong~91|Hubei~42|Hunan~43|Inner Mongolia~15|Jiangsu~32|Jiangxi~36|Jilin~22|Liaoning~21|Macau~92|Ningxia~64|Qinghai~63|Shaanxi~61|Shandong~37|Shanghai~31|Shanxi~14|Sichuan~51|Tianjin~12|Tibet~54|Xinjiang~65|Yunnan~53|Zhejiang~33"
473      ],
474      ["Christmas Island", "CX", "Christmas Island~CX"],
475      [
476        "Cocos (Keeling) Islands",
477        "CC",
478        "Direction Island~DI|Home Island~HM|Horsburgh Island~HR|North Keeling Island~NK|South Island~SI|West Island~WI"
479      ],
480      [
481        "Colombia",
482        "CO",
483        "Amazonas~AMA|Antioquia~ANT|Arauca~ARA|Archipiélago de San Andrés~SAP|Atlántico~ATL|Bogotá D.C.~DC|Bolívar~BOL|Boyacá~BOY|Caldas~CAL|Caquetá~CAQ|Casanare~CAS|Cauca~CAU|Cesar~CES|Chocó~CHO|Córdoba~COR|Cundinamarca~CUN|Guainía~GUA|Guaviare~GUV|Huila~HUI|La Guajira~LAG|Magdalena~MAG|Meta~MET|Nariño~NAR|Norte de Santander~NSA|Putumayo~PUT|Quindío~QUI|Risaralda~RIS|Santander~SAN|Sucre~SUC|Tolima~TOL|Valle del Cauca~VAC|Vaupés~VAU|Vichada~VID"
484      ],
485      ["Comoros", "KM", "Andjazîdja~G|Andjouân~A|Moûhîlî~M"],
486      [
487        "Congo, Republic of the (Brazzaville)",
488        "CG",
489        "Bouenza~11|Brazzaville~BZV|Cuvette~8|Cuvette-Ouest~15|Kouilou~5|Lékoumou~2|Likouala~7|Niari~9|Plateaux~14|Pointe-Noire~16|Pool~12|Sangha~13"
490      ],
491      [
492        "Congo, the Democratic Republic of the (Kinshasa)",
493        "CD",
494        "Bandundu~BN|Bas-Congo~BC|Équateur~EQ|Kasaï-Occidental~KE|Kasaï-Oriental~KW|Katanga~KA|Kinshasa~KN|Maniema~MA|Nord-Kivu~NK|Orientale~OR|Sud-Kivu~SK"
495      ],
496      [
497        "Cook Islands",
498        "CK",
499        "Aitutaki|Atiu|Avarua|Mangaia|Manihiki|Ma'uke|Mitiaro|Nassau|Palmerston|Penrhyn|Pukapuka|Rakahanga"
500      ],
501      [
502        "Costa Rica",
503        "CR",
504        "Alajuela~2|Cartago~3|Guanacaste~5|Heredia~4|Limón~7|Puntarenas~6|San José~1"
505      ],
506      [
507        "Côte d'Ivoire, Republic of",
508        "CI",
509        "Agnéby~16|Bafing~17|Bas-Sassandra~09|Denguélé~10|Dix-Huit Montagnes~06|Fromager~18|Haut-Sassandra~02|Lacs~07|Lagunes~01|Marahoué~12|Moyen-Cavally~19|Moyen-Comoé~05|N'zi-Comoé~11|Savanes~03|Sud-Bandama~15|Sud-Comoé~13|Vallée du Bandama~04|Worodougou~14|Zanzan~08"
510      ],
511      [
512        "Croatia",
513        "HR",
514        "Bjelovarsko-Bilogorska Županija~07|Brodsko-Posavska Županija~12|Dubrovačko-Neretvanska Županija~19|Grad Zagreb~21|Istarska Županija~18|Karlovačka Županija~04|Koprivničko-Krizevačka Županija~06|Krapinsko-Zagorska Županija~02|Ličko-Senjska Županija~09|Međimurska Županija~20|Osječko-Baranjska Županija~14|Požeško-Slavonska Županija~11|Primorsko-Goranska Županija~08|Sisačko-Moslavačka Županija~03|Splitsko-Dalmatinska Županija~17|Sibensko-Kninska Županija~15|Varaždinska Županija~05|Virovitičko-Podravska Županija~10|Vukovarsko-Srijemska Županija~16|Zadarska Županija~13|Zagrebacka Zupanija~01"
515      ],
516      [
517        "Cuba",
518        "CU",
519        "Artemisa~15|Camagüey~09|Ciego de Ávila~08|Cienfuegos~06|Granma~12|Guantánamo~14|Holguín~11|Isla de la Juventud~99|La Habana~03|Las Tunas~10|Matanzas~04|Mayabeque~16|Pinar del Río~01|Sancti Spíritus~07|Santiago de Cuba~13|Villa Clara~05"
520      ],
521      ["Curaçao", "CW", "Curaçao~CW"],
522      [
523        "Cyprus",
524        "CY",
525        "Ammochostos~04|Keryneia~05|Larnaka~03|Lefkosia~01|Lemesos~02|Pafos~05"
526      ],
527      [
528        "Czech Republic",
529        "CZ",
530        "Hlavní město Praha~PR|Jihočeský kraj~JC|Jihomoravský kraj~JM|Karlovarský kraj~KA|Královéhradecký kraj~KR|Liberecký kraj~LI|Moravskoslezský kraj~MO|Olomoucký kraj~OL|Pardubický kraj~PA|Plzeňský kraj~PL|Středočeský kraj~ST|Ústecký kraj~US|Vysočina~VY|Zlínský kraj~ZL"
531      ],
532      [
533        "Denmark",
534        "DK",
535        "Hovedstaden~84|Kujalleq~GL-KU|Midtjylland~82|Norderøerne~FO-01|Nordjylland~81|Østerø~FO-06|Qaasuitsup~GL-QA|Qeqqata~GL-QE|Sandø~FO-02|Sermersooq~GL-SM|Sjælland~85|Strømø~FO-03|Suderø~FO-04|Syddanmark~83|Vågø~FO-05"
536      ],
537      [
538        "Djibouti",
539        "DJ",
540        "Ali Sabieh~AS|Arta~AR|Dikhil~DI|Obock~OB|Tadjourah~TA"
541      ],
542      [
543        "Dominica",
544        "DM",
545        "Saint Andrew Parish~02|Saint David Parish~03|Saint George Parish~04|Saint John Parish~05|Saint Joseph Parish~06|Saint Luke Parish~07|Saint Mark Parish~08|Saint Patrick Parish~09|Saint Paul Parish~10|Saint Peter Parish~11"
546      ],
547      [
548        "Dominican Republic",
549        "DO",
550        "Cibao Central~02|Del Valle~37|Distrito Nacional~01|Enriquillo~38|Norcentral~04|Nordeste~34|Noroeste~34|Norte~35|Valdesia~42"
551      ],
552      [
553        "Ecuador",
554        "EC",
555        "Azuay~A|Bolívar~B|Cañar~F|Carchi~C|Chimborazo~H|Cotopaxi~X|El Oro~O|Esmeraldas~E|Galápagos~W|Guayas~G|Imbabura~I|Loja~L|Los Ríos~R|Manabí~M|Morona-Santiago~S|Napo~N|Orellana~D|Pastaza~Y|Pichincha~P|Santa Elena~SE|Santo Domingo de los Tsáchilas~SD|Sucumbíos~U|Tungurahua~T|Zamora-Chinchipe~Z"
556      ],
557      [
558        "Egypt",
559        "EG",
560        "Alexandria~ALX|Aswan~ASN|Asyout~AST|Bani Sueif~BNS|Beheira~BH|Cairo~C|Daqahlia~DK|Dumiat~DT|El Bahr El Ahmar~BA|El Ismailia~IS|El Suez~SUZ|El Wadi El Gedeed~WAD|Fayoum~FYM|Gharbia~GH|Giza~SUZ|Helwan~HU|Kafr El Sheikh~KFS|Luxor~LX|Matrouh~MT|Menia~MN|Menofia~MNF|North Sinai~SIN|Port Said~PTS|Qalubia~KB|Qena~KN|Sharqia~SHR|Sixth of October~SU|Sohag~SHG|South Sinai~JS"
561      ],
562      [
563        "El Salvador",
564        "SV",
565        "Ahuachapán~AH|Cabañas~CA|Cuscatlán~CU|Chalatenango~CH|La Libertad~LI|La Paz~PA|La Unión~UN|Morazán~MO|San Miguel~SM|San Salvador~SS|Santa Ana~SA|San Vicente~SV|Sonsonate~SO|Usulután~US"
566      ],
567      [
568        "Equatorial Guinea",
569        "GQ",
570        "Annobón~AN|Bioko Norte~BN|Bioko Sur~BS|Centro Sur~CS|Kié-Ntem~KN|Litoral~LI|Wele-Nzas~WN"
571      ],
572      [
573        "Eritrea",
574        "ER",
575        "Anseba~AN|Debub~DU|Debub-Keih-Bahri~DK|Gash-Barka~GB|Maekel~MA|Semien-Keih-Bahri~SK"
576      ],
577      [
578        "Estonia",
579        "EE",
580        "Harjumaa (Tallinn)~37|Hiiumaa (Kardla)~39|Ida-Virumaa (Johvi)~44|Järvamaa (Paide)~41|Jõgevamaa (Jogeva)~49|Läänemaa~57|Lääne-Virumaa (Rakvere)~59|Pärnumaa (Parnu)~67|Põlvamaa (Polva)~65|Raplamaa (Rapla)~70|Saaremaa (Kuessaare)~74|Tartumaa (Tartu)~78|Valgamaa (Valga)~82|Viljandimaa (Viljandi)~84|Võrumaa (Voru)~86"
581      ],
582      [
583        "Ethiopia",
584        "ET",
585        "Addis Ababa~AA|Afar~AF|Amhara~AM|Benshangul-Gumaz~BE|Dire Dawa~DD|Gambela~GA|Harari~HA|Oromia~OR|Somali~SO|Southern Nations Nationalities and People's Region~SN|Tigray~TI"
586      ],
587      [
588        "Falkland Islands (Islas Malvinas)",
589        "FK",
590        "Falkland Islands (Islas Malvinas)"
591      ],
592      [
593        "Faroe Islands",
594        "FO",
595        "Bordoy|Eysturoy|Mykines|Sandoy|Skuvoy|Streymoy|Suduroy|Tvoroyri|Vagar"
596      ],
597      [
598        "Fiji",
599        "FJ",
600        "Ba~01|Bua~01|Cakaudrove~03|Kadavu~04|Lau~05|Lomaiviti~06|Macuata~07|Nadroga and Navosa~08|Naitasiri~09|Namosi~10|Ra~011|Rewa~12|Rotuma~R|Serua~12|Tailevu~14"
601      ],
602      [
603        "Finland",
604        "FI",
605        "Ahvenanmaan lääni~AL|Etelä-Suomen lääni~ES|Itä-Suomen lääni~IS|Länsi-Suomen lääni~LS|Lapin lääni~LL|Oulun lääni~OL"
606      ],
607      [
608        "France",
609        "FR",
610        "Auvergne-Rhône-Alpes~ARA|Bourgogne-Franche-Comté~BFC|Bretagne~BRE|Centre-Val de Loire~CVL|Corse~COR|Grand Est~GES|Hauts-de-France~HDF|Île-de
610-France~IDF|Normandie~NOR|Nouvelle-Aquitaine~NAQ|Occitanie~OCC|Pays de la Loire~PDL|Provence-Alpes-Cote d'Azur~PAC|Clipperton~CP|Guadeloupe~GP|Guyane~GF|Martinique~MQ|Mayotte~YT|Novelle-Calédonie~NC|Polynésie~PF|Saint-Pierre-et-Miquelon~PM|Saint Barthélemy~BL|Saint Martin~MF|Réunion~RE|Terres Australes Françaises~TF|Wallis-et-Futuna~WF"
611      ],
612      ["French Guiana", "GF", "French Guiana"],
613      [
614        "French Polynesia",
615        "PF",
616        "Archipel des Marquises|Archipel des Tuamotu|Archipel des Tubuai|Iles du Vent|Iles Sous-le-Vent"
617      ],
618      [
619        "French Southern and Antarctic Lands",
620        "TF",
621        "Adelie Land|Ile Crozet|Iles Kerguelen|Iles Saint-Paul et Amsterdam"
622      ],
623      [
624        "Gabon",
625        "GA",
626        "Estuaire~1|Haut-Ogooué~2|Moyen-Ogooué~3|Ngounié~4|Nyanga~5|Ogooué-Ivindo~6|Ogooué-Lolo~7|Ogooué-Maritime~8|Woleu-Ntem~9"
627      ],
628      [
629        "Gambia, The",
630        "GM",
631        "Banjul~B|Central River~M|Lower River~L|North Bank~N|Upper River~U|Western~W"
632      ],
633      [
634        "Georgia",
635        "GE",
636        "Abkhazia (Sokhumi)~AB|Ajaria (Bat'umi)~AJ|Guria~GU|Imereti~IM|K'akheti~KA|Kvemo Kartli~KK|Mtshkheta-Mtianeti~MM|Rach'a-Lexhkumi-KvemoSvaneti~RL|Samegrelo-Zemo Svaneti~SZ|Samtskhe-Javakheti~SJ|Shida Kartli~SK|Tbilisi~TB"
637      ],
638      [
639        "Germany",
640        "DE",
641        "Baden-Württemberg~BW|Bayern~BY|Berlin~BE|Brandenburg~BB|Bremen~HB|Hamburg~HH|Hessen~HE|Mecklenburg-Vorpommern~MV|Niedersachsen~NI|Nordrhein-Westfalen~NW|Rheinland-Pfalz~RP|Saarland~SL|Sachsen~SN|Sachsen-Anhalt~ST|Schleswig-Holstein~SH|Thüringen~TH"
642      ],
643      [
644        "Ghana",
645        "GH",
646        "Ashanti~AH|Brong-Ahafo~BA|Central~CP|Eastern~EP|Greater Accra~AA|Northern~NP|Upper East~UE|Upper West~UW|Volta~TV|Western~WP"
647      ],
648      ["Gibraltar", "GI", "Gibraltar"],
649      [
650        "Greece",
651        "GR",
652        "Anatolikí Makedonía kai Thráki~A|Attikḯ~I|Dytikí Elláda~G|Dytikí Makedonía~C|Ionía Nísia~F|Kentrikí Makedonía~B|Krítí~M|Notío Aigaío~L|Peloponnísos~J|Stereá Elláda~H|Thessalía~E|Voreío Aigaío~K|Ípeiros~D|Ágion Óros~69"
653      ],
654      [
655        "Greenland",
656        "GL",
657        "Kommune Kujalleq~KU|Kommuneqarfik Sermersooq~SM|Qaasuitsup Kommunia~QA|Qeqqata Kommunia~QE"
658      ],
659      [
660        "Grenada",
661        "GD",
662        "Saint Andrew~01|Saint David~02|Saint George~03|Saint John~04|Saint Mark~05|Saint Patrick~06|Southern Grenadine Islands~10"
663      ],
664      ["Guadeloupe", "GP", "Guadeloupe"],
665      ["Guam", "GU", "Guam"],
666      [
667        "Guatemala",
668        "GT",
669        "Alta Verapaz~AV|Baja Verapaz~BV|Chimaltenango~CM|Chiquimula~CQ|El Progreso~PR|Escuintla~ES|Guatemala~GU|Huehuetenango~HU|Izabal~IZ|Jalapa~JA|Jutiapa~JU|Petén~PE|Quetzaltenango~QZ|Quiché~QC|Retalhuleu~Re|Sacatepéquez~SA|San Marcos~SM|Santa Rosa~SR|Sololá~SO|Suchitepéquez~SU|Totonicapán~TO|Zacapa~ZA"
670      ],
671      [
672        "Guernsey",
673        "GG",
674        "Castel|Forest|St. Andrew|St. Martin|St. Peter Port|St. Pierre du Bois|St. Sampson|St. Saviour|Torteval|Vale"
675      ],
676      [
677        "Guinea",
678        "GN",
679        "Boké~B|Conakry~C|Faranah~F|Kankan~K|Kindia~D|Labé~L|Mamou~M|Nzérékoré~N"
680      ],
681      [
682        "Guinea-Bissau",
683        "GW",
684        "Bafatá~BA|Biombo~BM|Bissau~BS|Bolama-Bijagos~BL|Cacheu~CA|Gabú~GA|Oio~OI|Quinara~QU|Tombali~TO"
685      ],
686      [
687        "Guyana",
688        "GY",
689        "Barima-Waini~BA|Cuyuni-Mazaruni~CU|Demerara-Mahaica~DE|East Berbice-Corentyne~EB|Essequibo Islands-West Demerara~ES|Mahaica-Berbice~MA|Pomeroon-Supenaam~PM|Potaro-Siparuni~PT|Upper Demerara-Berbice~UD|Upper Takutu-Upper Essequibo~UT"
690      ],
691      [
692        "Haiti",
693        "HT",
694        "Artibonite~AR|Centre~CE|Grand'Anse~GA|Nippes~NI|Nord~ND|Nord-Est~NE|Nord-Ouest~NO|Ouest~OU|Sud~SD|Sud-Est~SE"
695      ],
696      [
697        "Heard Island and McDonald Islands",
698        "HM",
699        "Heard Island and McDonald Islands"
700      ],
701      ["Holy See (Vatican City)", "VA", "Holy See (Vatican City)~01"],
702      [
703        "Honduras",
704        "HN",
705        "Atlántida~AT|Choluteca~CH|Colón~CL|Comayagua~CM|Copán~CP|Cortés~CR|El Paraíso~EP|Francisco Morazan~FM|Gracias a Dios~GD|Intibucá~IN|Islas de la Bahía~IB|La Paz~LP|Lempira~LE|Ocotepeque~OC|Olancho~OL|Santa Bárbara~SB|Valle~VA|Yoro~YO"
706      ],
707      ["Hong Kong", "HK", "Hong Kong"],
708      [
709        "Hungary",
710        "HU",
711        "Bács-Kiskun~BK|Baranya~BA|Békés~BE|Békéscsaba~BC|Borsod-Abauj-Zemplen~BZ|Budapest~BU|Csongrád~CS|Debrecen~DE|Dunaújváros~DU|Eger~EG|Érd~ER|Fejér~FE|Győr~GY|Győr-Moson-Sopron~GS|Hajdú-Bihar~HB|Heves~HE|Hódmezővásárhely~HV|Jász-Nagykun-Szolnok~N|Kaposvár~KV|Kecskemét~KM|Komárom-Esztergom~KE|Miskolc~MI|Nagykanizsa~NK|Nógrád~NO|Nyíregyháza~NY|Pécs~PS|Pest~PE|Salgótarján~ST|Somogy~SO|Sopron~SN|Szabolcs-á-Bereg~SZ|Szeged~SD|Székesfehérvár~SF|Szekszárd~SS|Szolnok~SK|Szombathely~SH|Tatabánya~TB|Tolna~TO|Vas~VA|Veszprém~VE|Veszprém (City)~VM|Zala~ZA|Zalaegerszeg~ZE"
712      ],
713      [
714        "Iceland",
715        "IS",
716        "Austurland~7|Höfuðborgarsvæði utan Reykjavíkur~1|Norðurland eystra~6|Norðurland vestra~5|Suðurland~8|Suðurnes~2|Vestfirðir~4|Vesturland~3"
717      ],
718      [
719        "India",
720        "IN",
721        "Andaman and Nicobar Islands~AN|Andhra Pradesh~AP|Arunachal Pradesh~AR|Assam~AS|Bihar~BR|Chandigarh~CH|Chhattisgarh~CT|Dadra and Nagar Haveli~DN|Daman and Diu~DD|Delhi~DL|Goa~GA|Gujarat~GJ|Haryana~HR|Himachal Pradesh~HP|Jammu and Kashmir~JK|Jharkhand~JH|K
721arnataka~KA|Kerala~KL|Lakshadweep~LD|Madhya Pradesh~MP|Maharashtra~MH|Manipur~MN|Meghalaya~ML|Mizoram~MZ|Nagaland~NL|Odisha~OR|Puducherry~PY|Punjab~PB|Rajasthan~RJ|Sikkim~WK|Tamil Nadu~TN|Telangana~TG|Tripura~TR|Uttarakhand~UT|Uttar Pradesh~UP|West Bengal~WB"
722      ],
723      [
724        "Indonesia",
725        "ID",
726        "Aceh~AC|Bali~BA|Bangka Belitung~BB|Banten~BT|Bengkulu~BE|Gorontalo~GO|Jakarta Raya~JK|Jambi~JA|Jawa Barat~JB|Jawa Tengah~JT|Jawa Timur~JI|Kalimantan Barat~KB|Kalimantan Selatan~KS|Kalimantan Tengah~KT|Kalimantan Timur~KI|Kalimantan Utara~KU|Kepulauan Riau~KR|Lampung~LA|Maluku~MA|Maluku Utara~MU|Nusa Tenggara Barat~NB|Nusa Tenggara Timur~NT|Papua~PA|Papua Barat~PB|Riau~RI|Sulawesi Selatan~SR|Sulawesi Tengah~ST|Sulawesi Tenggara~SG|Sulawesi Utara~SA|Sumatera Barat~SB|Sumatera Selatan~SS|Sumatera Utara~SU|Yogyakarta~YO"
727      ],
728      [
729        "Iran, Islamic Republic of",
730        "IR",
731        "Alborz~32|Ardabīl~03|Āz̄arbāyjān-e Gharbī~02|Āz̄arbāyjān-e Sharqī~01|Būshehr~06|Chahār Maḩāl va Bakhtīārī~08|Eşfahān~04|Fārs~14|Gīlān~19|Golestān~27|Hamadān~24|Hormozgān~23|Īlām~05|Kermān~15|Kermānshāh~17|Khorāsān-e Jonūbī~29|Khorāsān-e Raẕavī~30|Khorāsān-e Shomālī~61|Khūzestān~10|Kohgīlūyeh va Bowyer Aḩmad~18|Kordestān~16|Lorestān~20|Markazi~22|Māzandarān~21|Qazvīn~28|Qom~26|Semnān~12|Sīstān va Balūchestān~13|Tehrān~07|Yazd~25|Zanjān~11"
732      ],
733      [
734        "Iraq",
735        "IQ",
736        "Al Anbār~AN|Al Başrah~BA|Al Muthanná~MU|Al Qādisīyah~QA|An Najaf~NA|Arbīl~AR|As Sulaymānīyah~SU|Bābil~BB|Baghdād~BG|Dohuk~DA|Dhī Qār~DQ|Diyālá~DI|Karbalā'~KA|Kirkuk~KI|Maysān~MA|Nīnawá~NI|Şalāḩ ad Dīn~SD|Wāsiţ~WA"
737      ],
738      [
739        "Ireland",
740        "IE",
741        "Carlow~CW|Cavan~CN|Clare~CE|Cork~CO|Donegal~DL|Dublin~D|Galway~G|Kerry~KY|Kildare~KE|Kilkenny~KK|Laois~LS|Leitrim~LM|Limerick~LK|Longford~LD|Louth~LH|Mayo~MO|Meath~MH|Monaghan~MN|Offaly~OY|Roscommon~RN|Sligo~SO|Tipperary~TA|Waterford~WD|Westmeath~WH|Wexford~WX|Wicklow~WW"
742      ],
743      ["Isle of Man", "IM", "Isle of Man"],
744      [
745        "Israel",
746        "IL",
747        "HaDarom~D|HaMerkaz~M|HaTsafon~Z|H̱efa~HA|Tel-Aviv~TA|Yerushalayim~JM"
748      ],
749      [
750        "Italy",
751        "IT",
752        "Abruzzo~65|Basilicata~77|Calabria~78|Campania~72|Emilia-Romagna~45|Friuli-Venezia Giulia~36|Lazio~62|Liguria~42|Lombardia~25|Marche~57|Molise~67|Piemonte~21|Puglia~75|Sardegna~88|Sicilia~82|Toscana~52|Trentino-Alto Adige~32|Umbria~55|Valle d'Aosta~23|Veneto~34"
753      ],
754      [
755        "Jamaica",
756        "JM",
757        "Clarendon~13|Hanover~09|Kingston~01|Manchester~12|Portland~04|Saint Andrew~02|Saint Ann~06|Saint Catherine~14|Saint Elizabeth~11|Saint James~08|Saint Mary~05|Saint Thomas~03|Trelawny~07|Westmoreland~10"
758      ],
759      [
760        "Japan",
761        "JP",
762        "Aichi~23|Akita~05|Aomori~02|Chiba~12|Ehime~38|Fukui~18|Fukuoka~40|Fukushima~07|Gifu~21|Gunma~10|Hiroshima~34|Hokkaido~01|Hyogo~28|Ibaraki~08|Ishikawa~17|Iwate~03|Kagawa~37|Kagoshima~46|Kanagawa~14|Kochi~39|Kumamoto~43|Kyoto~26|Mie~24|Miyagi~04|Miyazaki~45|Nagano~20|Nagasaki~42|Nara~29|Niigata~15|Oita~44|Okayama~33|Okinawa~47|Osaka~27|Saga~41|Saitama~11|Shiga~25|Shimane~32|Shizuoka~22|Tochigi~09|Tokushima~36|Tokyo~13|Tottori~31|Toyama~16|Wakayama~30|Yamagata~06|Yamaguchi~35|Yamanashi~19"
763      ],
764      ["Jersey", "JE", "Jersey"],
765      [
766        "Jordan",
767        "JO",
768        "‘Ajlūn~AJ|Al 'Aqabah~AQ|Al Balqā’~BA|Al Karak~KA|Al Mafraq~MA|Al ‘A̅şimah~AM|Aţ Ţafīlah~AT|Az Zarqā’~AZ|Irbid~IR|Jarash~JA|Ma‘ān~MN|Mādabā~MD"
769      ],
770      [
771        "Kazakhstan",
772        "KZ",
773        "Almaty~ALA|Aqmola~AKM|Aqtobe~AKT|Astana~AST|Atyrau~ATY|Batys Qazaqstan~ZAP|Bayqongyr|Mangghystau~MAN|Ongtustik Qazaqstan~YUZ|Pavlodar~PAV|Qaraghandy~KAR|Qostanay~KUS|Qyzylorda~KZY|Shyghys Qazaqstan~VOS|Soltustik Qazaqstan~SEV|Zhambyl~ZHA"
774      ],
775      [
776        "Kenya",
777        "KE",
778        "Baringo~01|Bomet~02|Bungoma~03|Busia~04|Eleyo/Marakwet~05|Embu~06|Garissa~07|Homa Bay~08|Isiolo~09|Kajiado~10|Kakamega~11|Kericho~12|Kiambu~13|Kil
778ifi~14|Kirinyaga~15|Kisii~16|Kisumu~17|Kitui~18|Kwale~19|Laikipia~20|Lamu~21|Machakos~22|Makueni~23|Mandera~24|Marsabit~25|Meru~26|Migori~27|Mombasa~28|Murang'a~29|Nairobi City~30|Nakuru~31|Nandi~32|Narok~33|Nyamira~34|Nyandarua~35|Nyeri~36|Samburu~37|Siaya~38|Taita/Taveta~39|Tana River~40|Tharaka-Nithi~41|Trans Nzoia~42|Turkana~43|Uasin Gishu~44|Vihiga~45|Wajir~46|West Pokot~47"
779      ],
780      [
781        "Kiribati",
782        "KI",
783        "Abaiang|Abemama|Aranuka|Arorae|Banaba|Beru|Butaritari|Central Gilberts|Gilbert Islands~G|Kanton|Kiritimati|Kuria|Line Islands~L|Maiana|Makin|Marakei|Nikunau|Nonouti|Northern Gilberts|Onotoa|Phoenix Islands~P|Southern Gilberts|Tabiteuea|Tabuaeran|Tamana|Tarawa|Teraina"
784      ],
785      [
786        "Korea, Democratic People's Republic of",
787        "KP",
788        "Chagang-do (Chagang Province)~04|Hamgyong-bukto (North Hamgyong Province)~09|Hamgyong-namdo (South Hamgyong Province)~08|Hwanghae-bukto (North Hwanghae Province)~06|Hwanghae-namdo (South Hwanghae Province)~05|Kangwon-do (Kangwon Province)~07|Nasŏn (Najin-Sŏnbong)~13|P'yongan-bukto (North P'yongan Province)~03|P'yongan-namdo (South P'yongan Province)~02|P'yongyang-si (P'yongyang City)~01|Yanggang-do (Yanggang Province)~10"
789      ],
790      [
791        "Korea, Republic of",
792        "KR",
793        "Ch'ungch'ongbuk-do~43|Ch'ungch'ongnam-do~44|Cheju-do~49|Chollabuk-do~45|Chollanam-do~46|Inch'on-Kwangyokhi~28|Kang-won-do~42|Kwangju-Kwangyokshi~28|Kyonggi-do~41|Kyongsangbuk-do~47|Kyongsangnam-do~48|Pusan-Kwangyokshi~26|Seoul-T'ukpyolshi~11|Sejong~50|Taegu-Kwangyokshi~27|Taejon-Kwangyokshi~30|Ulsan-Kwangyokshi~31"
794      ],
795      [
796        "Kuwait",
797        "KW",
798        "Al Aḩmadi~AH|Al Farwānīyah~FA|Al Jahrā’~JA|Al ‘Āşimah~KU|Ḩawallī~HA|Mubārak al Kabir~MU"
799      ],
800      [
801        "Kyrgyzstan",
802        "KG",
803        "Batken Oblasty~B|Bishkek Shaary~GB|Chuy Oblasty (Bishkek)~C|Jalal-Abad Oblasty~J|Naryn Oblasty~N|Osh Oblasty~O|Talas Oblasty~T|Ysyk-Kol Oblasty (Karakol)~Y"
804      ],
805      [
806        "Laos",
807        "LA",
808        "Attapu~AT|Bokèo~BK|Bolikhamxai~BL|Champasak~CH|Houaphan~HO|Khammouan~KH|Louang Namtha~LM|Louangphabang~LP|Oudômxai~OU|Phôngsali~PH|Salavan~SL|Savannakhét~SV|Vientiane~VI|Xaignabouli~XA|Xékong~XE|Xaisomboun~XS|Xiangkhouang~XI"
809      ],
810      [
811        "Latvia",
812        "LV",
813        "Aglona~001|Aizkraukle~002|Aizpute~003|Aknīste~004|Aloja~005|Alsunga~06|Alūksne~007|Amata~008|Ape~009|Auce~010|Ādaži~011|Babīte~012|Baldone~013|Baltinava~014|Balvi~015|Bauska~016|Beverīna~017|Brocēni~018|Burtnieki~019|Carnikava~020|Cesvaine~021|Cēsis~022|Cibla~023|Dagda~024|Daugavpils~025|Daugavpils (City)~DGV|Dobele~026|Dundaga~027|Durbe~028|Engure~029|Ērgļi~030|Garkalne~031|Grobiņa~032|Gulbene~033|Iecava~034|Ikšķile~035|Ilūkste~036|Inčukalns~037|Jaunjelgava~038|Jaunpiebalga~039|Jaunpils~040|Jelgava~041|Jelgava (City)~JEL|Jēkabpils~042|Jēkabpils (City)~JKB|Jūrmala (City)~JUR|Kandava~043|Kārsava~044|Kocēni~045|Koknese~046|Krāslava~047|Krimulda~048|Krustpils~049|Kuldīga~050|Ķegums~051|Ķekava~052|Lielvārde~053|Liepāja~LPX|Limbaži~054|Līgatne~055|Līvāni~056|Lubāna~057|Ludza~058|Madona~059|Mazsalaca~060|Mālpils~061|Mārupe~062|Mērsrags~063|Naukšēni~064|Nereta~065|Nīca~066|Ogre~067|Olaine~068|Ozolnieki~069|Pārgauja~070|Pāvilosta~071|Pļaviņas~072|Preiļi~073|Priekule~074|Priekuļi~075|Rauna~076|Rēzekne~077|Rēzekne (City)~REZ|Riebiņi~078|Rīga~RIX|Roja~079|Ropaži~080|Rucava~081|Rugāji~082|Rundāle~083|Rūjiena~084|Sala~085|Salacgrīva~086|Salaspils~087|Saldus~088|Saulkrasti~089|Sēja~090|Sigulda~091|Skrīveri~092|Skrunda~093|Smiltene~094|Stopiņi~095|Strenči~096|Talsi~097|Tērvete~098|Tukums~099|Vaiņode~100|Valka~101|Valmiera~VMR|Varakļāni~102|Vārkava~103|Vecpiebalga~104|Vecumnieki~105|Ventspils~106|Ventspils (City)~VEN|Viesīte~107|Viļaka~108|Viļāni~109|Zilupe~110"
814      ],
815      [
816        "Lebanon",
817        "LB",
818        "Aakkâr~AK|Baalbelk-Hermel~BH|Béqaa~BI|Beyrouth~BA|Liban-Nord~AS|Liban-Sud~JA|Mont-Liban~JL|Nabatîyé~NA"
819      ],
820      [
821        "Lesotho",
822        "LS",
823        "Berea~D|Butha-Buthe~B|Leribe~C|Mafeteng~E|Maseru~A|Mohales Hoek~F|Mokhotlong~J|Qacha's Nek~H|Quthing~G|Thaba-Tseka~K"
824      ],
825      [
826        "Liberia",
827        "LR",
828        "Bomi~BM|Bong~BG|Gbarpolu~GP|Grand Bassa~GB|Grand Cape Mount~CM|Grand Gedeh~GG|Grand Kru~GK|Lofa~LO|Margibi~MG|Maryland~MY|Montserrado~MO|Nimba~NI|River Cess~RI|River Geee~RG|Sinoe~SI"
829      ],
830      [
831        "Libya",
832        "LY",
833        "Al Buţnān~BU|Al Jabal al Akhḑar~JA|Al Jabal al Gharbī~JG|Al Jafārah~JA|Al Jufrah~JU|Al Kufrah~FK|Al Marj~MJ|Al Marquab~MB|Al Wāḩāt~WA|An Nuqaţ al Khams~NQ|Az Zāwiyah~ZA|Banghāzī~BA|Darnah~DR|Ghāt~GH|Mişrātah~MI|Murzuq~MQ|Nālūt~NL|Sabhā~SB|Surt~SR|Ţarābulus~TB|Yafran~WD|Wādī ash Shāţiʾ~WS"
834      ],
835      [
836        "Liechtenstein",
837        "LI",
838        "Balzers~01|Eschen~02|Gamprin~03|Mauren~04|Planken~05|Ruggell~06|Schaan~07|Schellenberg~08|Triesen~09|Triesenberg~10|Vaduz~11"
839      ],
840      [
841        "Lithuania",
842        "LT",
843        "Alytaus~AL|Kauno~KU|Klaipėdos~KL|Marijampolės~MR|Panevėžio~PN|Šiaulių~SA|Tauragės~TA|Telšių~TE|Utenos~UT|Vilniaus~VL"
844      ],
845      [
846        "Luxembourg",
847        "LU",
848        "Capellen~CA|Clevaux~CL|Diekirch~DI|Echternach~EC|Esch-sur-Alzette~ES|Grevenmacher~GR|Luxembourg~LU|Mersch~ME|Redange~RD|Remich~RM|Vianden~VD|Wiltz~WI"
849      ],
850      ["Macao", "MO", "Macao"],
851      [
852        "Macedonia, Republic of",
853        "MK",
854        "Aračinovo~02|Berovo~03|Bitola~04|Bogdanci~05|Bogovinje~06|Bosilovo~07|Brvenica~08|Centar Župa~78|Čaška~08|Češinovo-Obleševo~81|Čučer Sandevo~82|Debar~21|Debarca~22|Delčevo~23|Demir Hisar~25|Demir Kapija~24|Doran~26|Dolneni~27|Gevgelija~18|Gostivar~19|Gradsko~20|Ilinden~34|Jegunovce~35|Karbinci~37|Kavadarci~36|Kičevo~40|Kočani~42|Konče~41|Kratovo~43|Kriva Palanka~44|Krivogaštani~45|Kruševo~46|Kumanovo~47|Lipkovo~48|Lozovo~49|Makedonska Kamenica~51|Makedonski Brod~52|Mavrovo i Rostuša~50|Mogila~53|Negotino~54|Novaci~55|Novo Selo~56|Ohrid~58|Pehčevo~60|Petrovec~59|Plasnica~61|Prilep~62|Probištip~63|Radoviš~|Rankovce~65|Resen~66|Rosoman~67|Skopje~85|Sopište~70|Staro Nagoričane~71|Struga~72|Strumica~73|Studeničani~74|Sveti Nikole~69|Štip~83|Tearce~75|Tetovo~76|Valandovo~10|Vasilevo~11|Veles~13|Vevčani~12|Vinica~14|Vrapčište~16|Zelenikovo~32|Zrnovci~33|Želino~30"
855      ],
856      [
857        "Madagascar",
858        "MG",
859        "Antananarivo~T|Antsiranana~D|Fianarantsoa~F|Mahajanga~M|Toamasina~A|Toliara~U"
860      ],
861      [
862        "Malawi",
863        "MW",
864        "Balaka~BA|Blantyre~BL|Chikwawa~CK|Chiradzulu~CR|Chitipa~CT|Dedza~DE|Dowa~DO|Karonga~KR|Kasungu~KS|Likoma~LK|Lilongwe~LI|Machinga~MH|Mangochi~MG|Mchinji~MC|Mulanje~MU|Mwanza~MW|Mzimba~MZ|Nkhata Bay~NE|Nkhotakota~NB|Nsanje~NS|Ntcheu~NU|Ntchisi~NI|Phalombe~PH|Rumphi~RU|Salima~SA|Thyolo~TH|Zomba~ZO"
865      ],
866      [
867        "Malaysia",
868        "MY",
869        "Johor~01|Kedah~02|Kelantan~03|Melaka~04|Negeri Sembilan~05|Pahang~06|Perak~08|Perlis~09|Pulau Pinang~07|Sabah~12|Sarawak~13|Selangor~10|Terengganu~11|Wilayah Persekutuan (Kuala Lumpur)~14|Wilayah Persekutuan (Labuan)~15|Wilayah Persekutuan (Putrajaya)~16"
870      ],
871      [
872        "Maldives",
873        "MV",
874        "Alifu Alifu~02|Alifu Dhaalu~00|Baa~20|Dhaalu~17|Faafu~14|Gaafu Alifu~27|Gaafu Dhaalu~28|Gnaviyani~29|Haa Alifu~07|Haa Dhaalu~23|Kaafu~29|Laamu~05|Lhaviyani~03|Malé~MLE|Meemu~12|Noonu~25|Raa~13|Seenu~01|Shaviyani~24|Thaa~08|Vaavu~04"
875      ],
876      [
877        "Mali",
878        "ML",
879        "Bamako~BKO|Gao~7|Kayes~1|Kidal~8|Koulikoro~2|Mopti~5|Segou~4|Sikasso~3|Tombouctou~6"
880      ],
881      [
882        "Malta",
883        "MT",
884        "Attard~01|Balzan~02|Birgu~03|Birkirkara~04|Birżebbuġa~05|Bormla~06|Dingli~07|Fgura~08|Floriana~09|Fontana~10|Guda~11|Gżira~12|Għajnsielem~13|Għarb~14|Għargħur~15|Għasri~16|Għaxaq~17|Ħamrun~18|Iklin~19|Isla~20|Kalkara~21|Kerċem~22|Kirkop~23|Lija~24|Luqa~25|Marsa~26|Marsaskala~27|Marsaxlokk~28|Mdina~29|Mellieħa~30|Mġarr~31|Mosta~32|Mqabba~33|Msida~34|Mtarfa~35|Munxar~36|Nadur~37|Naxxar~38|Paola~39|Pembroke~40|Pietà~41|Qala~42|Qormi~43|Qrendi~44|Rabat Għawdex~45|Rabat Malta~46|Safi~47|San Ġiljan~48|San Ġwann~49|San Lawrenz~50|San Pawl il-Baħar~51|Sannat~52|Santa Luċija~53|Santa Venera~54|Siġġiewi~55|Sliema~56|Swieqi~57|Tai Xbiex~58|Tarzien~59|Valletta~60|Xagħra~61|Xewkija~62|Xgħajra~63|Żabbar~64|Żebbuġ Għawde~65|Żebbuġ Malta~66|Żejtun~67|Żurrieq~68"
885      ],
886      [
887        "Marshall Islands",
888        "MH",
889        "Ailinglaplap~ALL|Ailuk~ALK|Arno~ARN|Aur~AUR|Bikini and Kili~KIL|Ebon~EBO|Jabat~JAB|Jaluit~JAL|Kwajalein~KWA|Lae~LAE|Lib~LIB|Likiep~LIK|Majuro~MAJ|Maloelap~MAL|Mejit~MEJ|Namdrik~NMK|Namu~NMU|Rongelap~RON|Ujae~UJA|Utrik~UTI|Wotho~WTH|Wotje~WTJ"
890      ],
891      ["Martinique", "MQ", "Martinique"],
892      [
893        "Mauritania",
894        "MR",
895        "Adrar~07|Assaba~03|Brakna~05|Dakhlet Nouadhibou~08|Gorgol~04|Guidimaka~10|Hodh Ech Chargui~01|Hodh El Gharbi~02|Inchiri~12|Nouakchott Nord~14|Nouakchott Ouest~13|Nouakchott Sud~15|Tagant~09|Tiris Zemmour~11|Trarza~06"
896      ],
897      [
898        "Mauritius",
899        "MU",
900        "Agalega Islands~AG|Beau Bassin-Rose Hill~BR|Black River~BL|Cargados Carajos Shoals~CC|Curepipe~CU|Flacq~FL|Grand Port~GP|Moka~MO|Pamplemousses~PA|Plaines Wilhems~PW|Port Louis (City)~PU|Port Louis~PL|Riviere du Rempart~RR|Rodrigues Island~RO|Savanne~SA|Vacoas-Phoenix~CP"
901      ],
902      [
903        "Mayotte",
904        "YT",
905        "Dzaoudzi~01|Pamandzi~02|Mamoudzou~03|Dembeni~04|Bandrélé~05|
905Kani-Kéli~06|Bouéni~07|Chirongui~08|Sada~09|Ouangani~10|Chiconi~11|Tsingoni~12|M'Tsangamouji~13|Acoua~14|Mtsamboro~15|Bandraboua~16|Koungou~17"
906      ],
907      [
908        "Mexico",
909        "MX",
910        "Aguascalientes~AGU|Baja California~BCN|Baja California Sur~BCS|Campeche~CAM|Ciudad de México~DIF|Chiapas~CHP|Chihuahua~CHH|Coahuila de Zaragoza~COA|Colima~COL|Durango~DUR|Estado de México~MEX|Guanajuato~GUA|Guerrero~GRO|Hidalgo~HID|Jalisco~JAL|Michoacán de Ocampo~MIC|Morelos~MOR|Nayarit~NAY|Nuevo León~NLE|Oaxaca~OAX|Puebla~PUE|Querétaro de Arteaga~QUE|Quintana Roo~ROO|San Luis Potosí~SLP|Sinaloa~SIN|Sonora~SON|Tabasco~TAB|Tamaulipas~TAM|Tlaxcala~TLA|Veracruz~VER|Yucatán~YUC|Zacatecas~ZAC"
911      ],
912      [
913        "Micronesia, Federated States of",
914        "FM",
915        "Chuuk (Truk)~TRK|Kosrae~KSA|Pohnpei~PNI|Yap~YAP"
916      ],
917      [
918        "Moldova",
919        "MD",
920        "Aenii Noi~AN|Basarabeasca~BS|Bălți~BA|Bender~BD|Briceni~BR|Cahul~CA|Cantemir~CT|Călărași~CL|Căușeni~CS|Chișinău~CU|Cimișlia~CM|Criuleni~CR|Dondușeni~DO|Drochia~DR|Dubăsari~DU|Edineț~ED|Fălești~FA|Florești~FL|Găgăuzia~GA|Glodeni~GL|Hîncești~HI|Ialoveni~IA|Leova~LE|Nisporeni~NI|Ocnița~OC|Orhei~OR|Rezina~RE|Rîșcani~RI|Sîngerei~SI|Soroca~SO|Stînga Nistrului~SN|Strășeni~ST|Șoldănești~SD|Ștefan Vodă~SV|Taraclia~TA|Telenești~TE|Ungheni~UN"
921      ],
922      [
923        "Monaco",
924        "MC",
925        "Colle~CL|Condamine~CO|Fontvieille~FO|Gare~GA|Jardin Exotique~JE|Larvotto~LA|Malbousquet~MA|Monaco-Ville~MO|Moneghetti~MG|Monte-Carlo~MC|Moulins~MU|Port-Hercule~PH|Saint-Roman~SR|Sainte-Dévote~SD|Source~SO|Spélugues~SP|Vallon de la Rousse~VR"
926      ],
927      [
928        "Mongolia",
929        "MN",
930        "Arhangay~073|Bayan-Olgiy~071|Bayanhongor~069|Bulgan~067|Darhan~037|Dornod~061|Dornogovi~063|Dundgovi~059|Dzavhan~065|Govi-Altay~065|Govi-Sumber~064|Hovd~043|Hovsgol~041|Omnogovi~053|Ovorhangay~055|Selenge~049|Suhbaatar~051|Tov~047|Ulaanbaatar~1|Uvs~046"
931      ],
932      [
933        "Montenegro",
934        "ME",
935        "Andrijevica~01|Bar~02|Berane~03|Bijelo Polje~04|Budva~05|Cetinje~06|Danilovgrad~07|Gusinje~22|Herceg Novi~08|Kolašin~09|Kotor~10|Mojkovac~11|Nikšić~12|Petnica~23|Plav~13|Plužine~14|Pljevlja~15|Podgorica~16|Rožaje~17|Šavnik~18|Tivat~19|Ulcinj~20|Žabljak~21"
936      ],
937      ["Montserrat", "MS", "Saint Anthony|Saint Georges|Saint Peter's"],
938      [
939        "Morocco",
940        "MA",
941        "Chaouia-Ouardigha~09|Doukhala-Abda~10|Fès-Boulemane~05|Gharb-Chrarda-Beni Hssen~02|Grand Casablanca~08|Guelmim-Es Semara~14|Laâyoune-Boujdour-Sakia el Hamra~15|Marrakech-Tensift-Al Haouz~11|Meknès-Tafilalet~06|Oriental~04|Oued ed Dahab-Lagouira~16|Souss-Massa-Drâa~13|Tadla-Azilal~12|Tanger-Tétouan~01|Taza-Al Hoceima-Taounate~03"
942      ],
943      [
944        "Mozambique",
945        "MZ",
946        "Cabo Delgado~P|Gaza~G|Inhambane~I|Manica~B|Maputo~L|Maputo (City)~MPM|Nampula~N|Niassa~A|Sofala~S|Tete~T|Zambezia~Q"
947      ],
948      [
949        "Myanmar",
950        "MM",
951        "Ayeyarwady~07|Bago~02|Chin~14|Kachin~11|Kayah~12|Kayin~13|Magway~03|Mandalay~04|Mon~15|Nay Pyi Taw~18|Rakhine~16|Sagaing~01|Shan~17|Tanintharyi~05|Yangon~06"
952      ],
953      [
954        "Namibia",
955        "NA",
956        "Erongo~ER|Hardap~HA|Kavango East~KE|Kavango West~KW|Karas~KA|Khomas~KH|Kunene~KU|Ohangwena~OW|Omaheke~OH|Omusati~OS|Oshana~ON|Oshikoto~OT|Otjozondjupa~OD|Zambezi~CA"
957      ],
958      [
959        "Nauru",
960        "NR",
961        "Aiwo~01|Anabar~02|Anetan~03|Anibare~04|Baiti~05|Boe~06|Buada~07|Denigomodu~08|Ewa~09|Ijuw~10|Meneng~11|Nibok~12|Uaboe~13|Yaren~14"
962      ],
963      [
964        "Nepal",
965        "NP",
966        "Bagmati~BA|Bheri~BH|Dhawalagiri~DH|Gandaki~GA|Janakpur~JA|Karnali~KA|Kosi~KO|Lumbini~LU|Mahakali~MA|Mechi~ME|Narayani~NA|Rapti~RA|Sagarmatha~SA|Seti~SE"
967      ],
968      [
969        "Netherlands",
970        "NL",
971        "Drenthe~DR|Flevoland~FL|Friesland~FR|Gelderland~GE|Groningen~GR|Limburg~LI|Noord-Brabant~NB|Noord-Holland~NH|Overijssel~OV|Utrecht~UT|Zeeland~ZE|Zuid-Holland~ZH"
972      ],
973      ["New Caledonia", "NC", "Iles Loyaute|Nord|Sud"],
974      [
975        "New Zealand",
976        "NZ",
977        "Auckland~AUK|Bay of Plenty~BOP|Canterbury~CAN|Gisborne~GIS|Hawke's Bay~HKB|Marlborough~MBH|Manawatu-Wanganui~MWT|Northland~NTL|Nelson~NSN|Otago~OTA|Southland~STL|Taranaki~TKI|Tasman~TAS|Waikato~WKO|Wellington~WGN|West Coast~WTC|Chatham Islands Territory~CIT"
978      ],
979      [
980        "Nicaragua",
981        "NI",
982        "Boaco~BO|Carazo~CA|Chinandega~CI|Chontales~CO|Estelí~ES|Granada~GR|Jinotega~JI|León~LE|Madriz~MD|Managua~MN|Masaya~MS|Matagalpa~MT|Nueva Segovia~NS|Río San Juan~SJ|Rivas~RI|Atlántico Norte~AN|Atlántico 
982Sur~AS"
983      ],
984      [
985        "Niger",
986        "NE",
987        "Agadez~1|Diffa~2|Dosso~3|Maradi~4|Niamey~8|Tahoua~5|Tillabéri~6|Zinder~7"
988      ],
989      [
990        "Nigeria",
991        "NG",
992        "Abia~AB|Abuja Federal Capital Territory~FC|Adamawa~AD|Akwa Ibom~AK|Anambra~AN|Bauchi~BA|Bayelsa~BY|Benue~BE|Borno~BO|Cross River~CR|Delta~DE|Ebonyi~EB|Edo~ED|Ekiti~EK|Enugu~EN|Gombe~GO|Imo~IM|Jigawa~JI|Kaduna~KD|Kano~KN|Katsina~KT|Kebbi~KE|Kogi~KO|Kwara~KW|Lagos~LA|Nassarawa~NA|Niger~NI|Ogun~OG|Ondo~ON|Osun~OS|Oyo~OY|Plateau~PL|Rivers~RI|Sokoto~SO|Taraba~TA|Yobe~YO|Zamfara~ZA"
993      ],
994      ["Niue", "NU", "Niue"],
995      ["Norfolk Island", "NF", "Norfolk Island"],
996      ["Northern Mariana Islands", "MP", "Northern Islands|Rota|Saipan|Tinian"],
997      [
998        "Norway",
999        "NO",
1000        "Akershus~02|Aust-Agder~09|Buskerud~06|Finnmark~20|Hedmark~04|Hordaland~12|Møre og Romsdal~15|Nordland~18|Nord-Trøndelag~17|Oppland~05|Oslo~03|Rogaland~11|Sogn og Fjordane~14|Sør-Trøndelag~16|Telemark~08|Troms~19|Vest-Agder~10|Vestfold~07|Østfold~01|Jan Mayen~22|Svalbard~21"
1001      ],
1002      [
1003        "Oman",
1004        "OM",
1005        "Ad Dakhiliyah~DA|Al Buraymi~BU|Al Wusta~WU|Az Zahirah~ZA|Janub al Batinah~BS|Janub ash Sharqiyah~SS|Masqat~MA|Musandam~MU|Shamal al Batinah~BJ|Shamal ash Sharqiyah~SJ|Zufar~ZU"
1006      ],
1007      [
1008        "Pakistan",
1009        "PK",
1010        "Āzād Kashmīr~JK|Balōchistān~BA|Gilgit-Baltistān~GB|Islāmābād~IS|Khaībar Pakhtūnkhwās~KP|Punjāb~PB|Sindh~SD|Federally Administered Tribal Areas~TA"
1011      ],
1012      [
1013        "Palau",
1014        "PW",
1015        "Aimeliik~002|Airai~004|Angaur~010|Hatobohei~050|Kayangel~100|Koror~150|Melekeok~212|Ngaraard~214|Ngarchelong~218|Ngardmau~222|Ngatpang~224|Ngchesar~226|Ngeremlengui~227|Ngiwal~228|Peleliu~350|Sonsoral~350"
1016      ],
1017      [
1018        "Palestine, State of",
1019        "PS",
1020        "Ak Khalīl~HBN|Al Quds~JEM|Arīḩā wal Aghwār~JRH|Bayt Laḩm~BTH|Dayr al Balaḩ~DEB|Ghazzah~GZA|Janīn~JEN|Khān Yūnis~KYS|Nāblus~NBS|Qalqīyah~QQA|Rafaḩ~RFH|Rām Allāh wal Bīrah~RBH|Salfīt~SLT|Shamāl Ghazzah~NGZ|Ţūbās~TBS|Ţūlkarm~TKM"
1021      ],
1022      [
1023        "Panama",
1024        "PA",
1025        "Bocas del Toro~1|Chiriquí~4|Coclé~2|Colón~3|Darién~5|Emberá~EM|Herrera~6|Kuna Yala~KY|Los Santos~7|Ngäbe-Buglé~NB|Panamá~8|Panamá Oeste~10|Veraguas~9"
1026      ],
1027      [
1028        "Papua New Guinea",
1029        "PG",
1030        "Bougainville~NSB|Central~CPM|Chimbu~CPK|East New Britain~EBR|East Sepik~ESW|Eastern Highlands~EHG|Enga~EPW|Gulf~GPK|Hela~HLA|Jiwaka~JWK|Madang~MOM|Manus~MRL|Milne Bay~MBA|Morobe~MPL|Port Moresby~NCD|New Ireland~NIK|Northern~NPP|Southern Highlands~SHM|West New Britain~WBK|West Sepik~SAN|Western~WPD|Western Highlands~WHM"
1031      ],
1032      [
1033        "Paraguay",
1034        "PY",
1035        "Alto Paraguay~16|Alto Parana~10|Amambay~13|Asuncion~ASU|Caaguazu~5|Caazapa~6|Canindeyu~14|Central~11|Concepcion~1|Cordillera~3|Guaira~4|Itapua~7|Misiones~8|Neembucu~12|Paraguari~9|Presidente Hayes~15|San Pedro~2"
1036      ],
1037      [
1038        "Peru",
1039        "PE",
1040        "Amazonas~AMA|Ancash~ANC|Apurimac~APU|Arequipa~ARE|Ayacucho~AYA|Cajamarca~CAJ|Callao~CAL|Cusco~CUS|Huancavelica~HUV|Huanuco~HUC|Ica~ICA|Junin~JUN|La Libertad~LAL|Lambayeque~LAM|Lima~LIM|Loreto~LOR|Madre de Dios~MDD|Moquegua~MOQ|Municipalidad Metropolitana de Lima~LMA|Pasco~PAS|Piura~PIU|Puno~PUN|San Martin~SAM|Tacna~TAC|Tumbes~TUM|Ucayali~UCA"
1041      ],
1042      [
1043        "Philippines",
1044        "PH",
1045        "Abra~ABR|Agusan del Norte~AGN|Agusan del Sur~AGS|Aklan~AKL|Albay~ALB|Antique~ANT|Apayao~APA|Aurora~AUR|Basilan~BAS|Bataan~BAN|Batanes~BTN|Batangas~BTG|Benguet~BEN|Biliran~BIL|Bohol~BOH|Bukidnon~BUK|Bulacan~BUL|Cagayan~CAG|Camarines Norte~CAN|Camarines Sur~CAS|Camiguin~CAM|Capiz~CAP|Catanduanes~CAT|Cavite~CAV|Cebu~CEB|Compostela~COM|Cotabato~NCO|Davao del Norte~DAV|Davao del Sur~DAS|Davao Occidental~DVO|Davao Oriental~DAO|Dinagat Islands~DIN|Eastern Samar~EAS|Guimaras~GUI|Ifugao~IFU|Ilocos Norte~ILN|Ilocos Sur~ILS|Iloilo~ILI|Isabela~ISA|Kalinga~KAL|La Union~LUN|Laguna~LAG|Lanao del Norte~LAN|Lanao del Sur~LAS|Leyte~LEY|Maguindanao~MAG|Masbate~MAS|Metro Manila~00|Mindoro Occidental~MDC|Mindoro Oriental~MDR|Misamis Occidental~MSC|Misamis Oriental~MSR|Mountain Province~MOU|Negros Occidental~NEC|Negros Oriental~NER|Northern Samar~NSA|Nueva Ecija~NUE|Nueva Vizcaya~NUV|Palawan~PLW|Pampanga~PAM|Pangasinan~PAN|Quezon~QUE|Quirino~QUI|Rizal~RIZ|Romblon~ROM|Samar~WSA|Sarangani~SAR|Siquijor~SIG|Sorsogon~SOR|Southern Leyte~SLE|Sultan Kudarat~AUK|Sulu~SLU|Surigao del Norte~SUN|Surigao del Sur~SUR|Tarlac~TAR|Tawi-Tawi~TAW|Zambales~ZMB|Zamboanga del Norte~ZAN|Zamboanga del Sur~ZAS|Zamboanga Sibugay~ZSI"
1046      ],
1047      ["Pitcairn", "PN", "Pitcairn Islands"],
1048      [
1049        "Poland",
1050        "PL",
1051        "Dolnośląskie~DS|Kujawsko-pomorskie~KP|Łódzkie~LD|Lubelskie~LU|Lubuskie~LB|Malopolskie~MA|Mazowieckie~MZ|Opolskie~OP|Podkarpackie~PK|Podlaskie~PD|Pomorskie~PM|Śląskie~SL|Świętokrzyskie~SK|Warmińsko-mazurskie~WN|Wielkopolskie~WP|Zachodniopomorskie~ZP"
1052      ],
1053      [
1054        "Portugal",
1055        "PT",
1056        "Acores~20|Aveiro~01|Beja~02|Braga~03|Braganca~04|Castelo Branco~05|Coimbra~06|Evora~07|Faro~08|Guarda~09|Leiria~10|Lisboa~11|Madeira~30|Portalegre~12|Porto~13|Santarem~14|Setubal~15|Viana do Castelo~16|Vila Real~17|Viseu~18"
1057      ],
1058      [
1059        "Puerto Rico",
1060        "PR",
1061        "Adjuntas|Aguada|Aguadilla|Aguas Buenas|Aibonito|Anasco|Arecibo|Arroyo|Barceloneta|Barranquitas|Bayamon|Cabo Rojo|Caguas|Camuy|Canovanas|Carolina|Cat|Ceiba|Ciales|Cidra|Coamo|Comerio|Corozal|Culebra|Dorado|Fajardo|Florida|Guanica|Guayama|Guayanilla|Guaynabo|Gurabo|Hatillo|Hormigueros|Humacao|Isabe|Juana Diaz|Juncos|Lajas|Lares|Las Marias|Las oiza|Luquillo|Manati|Maricao|Maunabo|Mayaguez|Moca|Morovis|Naguabo|Naranjito|Orocovis|Patillas|Penuelas|Ponce|Quebradillas|Rincon|Rio Grande|Sabana linas|San German|San Juan|San Lorenzo|San Sebastian|Santa Isabel|Toa Alta|Toa Baja|Trujillo Alto|Utuado|Vega Alta|Vega ues|Villalba|Yabucoa|Yauco"
1062      ],
1063      [
1064        "Qatar",
1065        "QA",
1066        "Ad Dawḩah~DA|Al Khawr wa adh Dhakhīrah~KH|Al Wakrah~WA|Ar Rayyān~RA|Ash Shamāl~MS|Az̧ Za̧`āyin~ZA|Umm Şalāl~US"
1067      ],
1068      ["Réunion", "RE", "Réunion"],
1069      [
1070        "Romania",
1071        "RO",
1072        "Alba~AB|Arad~AR|Arges~AG|Bacau~BC|Bihor~BH|Bistrita-Nasaud~BN|Botosani~BT|Braila~BR|Brasov~BV|Bucuresti~B|Buzau~BZ|Calarasi~CL|Caras-Severin~CS|Cluj~CJ|Constanta~CT|Covasna~CV|Dambovita~DB|Dolj~DJ|Galati~GL|Giurgiu~GR|Gorj~GJ|Harghita~HR|Hunedoara~HD|Ialomita~IL|Iasi~IS|Maramures~MM|Mehedinti~MH|Mures~MS|Neamt~NT|Olt~OT|Prahova~PH|Salaj~SJ|Satu Mare~SM|Sibiu~SB|Suceava~SV|Teleorman~TR|Timis~TM|Tulcea~TL|Valcea~VL|Vaslui~VS|Vrancea~VN"
1073      ],
1074      [
1075        "Russian Federation",
1076        "RU",
1077        "Republic of Adygea~AD|Republic of Altai (Gorno-Altaysk)~AL|Altai Krai~ALT|Amur Oblast~AMU|Arkhangelsk Oblast~ARK|Astrakhan Oblast~AST|Republic of Bashkortostan~BA|Belgorod Oblast~BEL|Bryansk Oblast~BRY|Republic of Buryatia~BU|Chechen Republic~CE|Chelyabinsk Oblast~CHE|Chukotka Autonomous Okrug~CHU|Chuvash Republic~CU|Republic of Dagestan~DA|Republic of Ingushetia~IN|Irkutsk Oblast~IRK|Ivanovo Oblast~IVA|Jewish Autonomous Oblast~JEW|Kabardino-Balkar Republic~KB|Kaliningrad Oblast~KLN|Republic of Kalmykia~KL|Kaluga Oblast~KLU|Kamchatka Krai~KAM|Karachay-Cherkess Republic~KC|Republic of Karelia~KR|Khabarovsk Krai~KHA|Republic of Khakassia~KK|Khanty-Mansi Autonomous Okrug - Yugra~KHM|Kemerovo Oblast~KEM|Kirov Oblast~KIR|Komi Republic~KO|Kostroma Oblast~KOS|Krasnodar Krai~KDA|Krasnoyarsk Krai~KYA|Kurgan Oblast~KGN|Kursk Oblast~KRS|Leningrad Oblast~LEN|Lipetsk Oblast~LIP|Magadan Oblast~MAG|Mari El Republic~ME|Republic of Mordovia~MO|Moscow Oblast~MOS|Moscow~MOW|Murmansk Oblast~MU|Nenets Autonomous Okrug~NEN|Nizhny Novgorod Oblast~NIZ|Novgorod Oblast~NGR|Novosibirsk Oblast~NVS|Omsk Oblast~OMS|Orenburg Oblast~ORE|Oryol Oblast~ORL|Penza Oblast~PNZ|Perm Krai~PER|Primorsky Krai~PRI|Pskov Oblast~PSK|Rostov Oblast~ROS|Ryazan Oblast~RYA|Saint Petersburg~SPE|Sakha (Yakutia) Republic~SA|Sakhalin Oblast~SAK|Samara Oblast~SAM|Saratov Oblast~SAR|Republic of North Ossetia-Alania~NOA|Smolensk Oblast~SMO|Stavropol Krai~STA|Sverdlovsk Oblast~SVE|Tambov Oblast~TAM|Republic of Tatarstan~TA|Tomsk Oblast~TOM|Tuva Republic~TU|Tula Oblast~TUL|Tver Oblast~TVE|Tyumen Oblast~TYU|Udmurt Republic~UD|Ulyanovsk Oblast~ULY|Vladimir Oblast~VLA|Volgograd Oblast~VGG|Vologda Oblast~VLG|Voronezh Oblast~VOR|Yamalo-Nenets Autonomous Okrug~YAN|Yaroslavl Oblast~YAR|Zabaykalsky Krai~ZAB"
1078      ],
1079      [
1080        "Rwanda",
1081        "RW",
1082        "Kigali~01|Eastern~02|Northern~03|Western~04|Southern~05"
1083      ],
1084      ["Saint Barthélemy", "BL", "Au Vent~02|Sous le Vent~01"],
1085      [
1086        "Saint Helena, Ascension and Tristan da Cunha",
1087        "SH",
1088        "Ascension~AC|Saint Helena~HL|Tristan da Cunha~TA"
1089      ],
1090      ["Saint Kitts and Nevis", "KN", "Saint Kitts~K|Nevis~N"],
1091      [
1092        "Saint Lucia",
1093        "LC",
1094        "Anse-la-Raye~01|Canaries~12|Castries~02|Choiseul~03|Dennery~05|Gros Islet~06|Laborie~07|Micoud~08|Soufriere~10|Vieux Fort~11"
1095      ],
1096      ["Saint Martin", "MF", "Saint Martin"],
1097      ["Saint Pierre and Miquelon", "PM", "Miquelon|Saint Pierre"],
1098      [
1099        "Saint Vincent and the Grenadines",
1100        "VC",
1101        "Charlotte~01|Grenadines~06|Saint Andrew~02|Saint David~03|Saint George~04|Saint Patrick~05"
1102      ],
1103      [
1104        "Samoa",
1105        "WS",
1106        "A'ana~AA|Aiga-i-le-Tai~AL|Atua~AT|Fa'asaleleaga~FA|Gaga'emauga~GE|Gagaifomauga~GI|Palauli~PA|Satupa'itea~SA|Tuamasaga~TU|Va'a-o-Fonoti~VF|Vaisigano~VS"
1107      ],
1108      [
1109        "San Marino",
1110        "SM",
1111        "Acquaviva~01|Borgo Maggiore~06|Chiesanuova~02|Domagnano~03|Faetano~04|Fiorentino~05|Montegiardino~08|San Marino~07|Serravalle~09"
1112      ],
1113      ["Sao Tome and Principe", "ST", "Principe~P|Sao Tome~S"],
1114      [
1115        "Saudi Arabia",
1116        "SA",
1117        "'Asir~14|Al Bahah~11|Al Hudud ash Shamaliyah~08|Al Jawf~12|Al Madinah al Munawwarah~03|Al Qasim~05|Ar Riyad~01|Ash Sharqiyah~04|Ha'il~06|Jazan~09|Makkah al Mukarramah~02|Najran~10|Tabuk~07"
1118      ],
1119      [
1120        "Senegal",
1121        "SN",
1122        "Dakar~DK|Diourbel~DB|Fatick~FK|Kaffrine~KA|Kaolack~KL|Kedougou~KE|Kolda~KD|Louga~LG|Matam~MT|Saint-Louis~SL|Sedhiou~SE|Tambacounda~TC|Thies~TH|Ziguinchor~ZG"
1123      ],
1124      [
1125        "Serbia",
1126        "RS",
1127        "Beograd (Belgrade)~00|Borski~14|Braničevski~11|Jablanički~23|Južnobački~06|Južnobanatski~04|Kolubarski~09|Kosovski~25|Kosovsko-Mitrovački~28|Kosovsko-Pomoravski~29|Mačvanski~08|Moravički~17|Nišavski~20|Pčinjski~24|Pećki~26|Pirotski~22|Podunavski~10|Pomoravski~13|Prizrenski~27|Rasinski~19|Raški~18|Severnobački~01|Sever
1127nobanatski~03|Srednjebanatski~02|Sremski~07|Šumadijski~12|Toplički~21|Zaječarski~15|Zapadnobački~05|Zlatiborski~16"
1128      ],
1129      [
1130        "Seychelles",
1131        "SC",
1132        "Anse aux Pins~01|Anse Boileau~02|Anse Etoile~03|Anse Royale~05|Anu Cap~04|Baie Lazare~06|Baie Sainte Anne~07|Beau Vallon~08|Bel Air~09|Bel Ombre~10|Cascade~11|Glacis~12|Grand'Anse Mahe~13|Grand'Anse Praslin~14|La Digue~15|La Riviere Anglaise~16|Les Mamelles~24|Mont Buxton~17|Mont Fleuri~18|Plaisance~19|Pointe La Rue~20|Port Glaud~21|Roche Caiman~25|Saint Louis~22|Takamaka~23"
1133      ],
1134      ["Sierra Leone", "SL", "Eastern~E|Northern~N|Southern~S|Western~W"],
1135      [
1136        "Singapore",
1137        "SG",
1138        "Central Singapore~01|North East~02|North West~03|South East~04|South West~05"
1139      ],
1140      ["Sint Maarten (Dutch part)", "SX", "Sint Maarten"],
1141      [
1142        "Slovakia",
1143        "SK",
1144        "Banskobystricky~BC|Bratislavsky~BL|Kosicky~KI|Nitriansky~NI|Presovsky~PV|Trenciansky~TC|Trnavsky~TA|Zilinsky~ZI"
1145      ],
1146      [
1147        "Slovenia",
1148        "SI",
1149        "Ajdovscina~001|Apace~195|Beltinci~002|Benedikt~148|Bistrica ob Sotli~149|Bled~003|Bloke~150|Bohinj~004|Borovnica~005|Bovec~006|Braslovce~151|Brda~007|Brezice~009|Brezovica~008|Cankova~152|Celje~011|Cerklje na Gorenjskem~012|Cerknica~013|Cerkno~014|Cerkvenjak~153|Cirkulane~196|Crensovci~015|Crna na Koroskem~016|Crnomelj~017|Destrnik~018|Divaca~019|Dobje~154|Dobrepolje~020|Dobrna~155|Dobrova-Polhov Gradec~021|Dobrovnik~156|Dol pri Ljubljani~022|Dolenjske Toplice~157|Domzale~023|Dornava~024|Dravograd~025|Duplek~026|Gorenja Vas-Poljane~027|Gorisnica~028|Gorje~207|Gornja Radgona~029|Gornji Grad~030|Gornji Petrovci~031|Grad~158|Grosuplje~032|Hajdina~159|Hoce-Slivnica~160|Hodos~161|Horjul~162|Hrastnik~034|Hrpelje-Kozina~035|Idrija~036|Ig~037|Ilirska Bistrica~038|Ivancna Gorica~039|Izola~040s|Jesenice~041|Jursinci~042|Kamnik~043|Kanal~044|Kidricevo~045|Kobarid~046|Kobilje~047|Kocevje~048|Komen~049|Komenda~164|Koper~050|Kodanjevica na Krki~197|Kostel~165|Kozje~051|Kranj~052|Kranjska Gora~053|Krizevci~166|Krsko~054|Kungota~055|Kuzma~056|Lasko~057|Lenart~058|Lendava~059|Litija~068|Ljubljana~061|Ljubno~062|Ljutomer~063|Log-Dragomer~208|Logatec~064|Loska Dolina~065|Loski Potok~066|Lovrenc na Pohorju~167|Lukovica~068|Luce~067|Majsperk~069|Makole~198|Maribor~070|Markovci~168|Medvode~071|Menges~072|Metlika~073|Mezica~074|Miklavz na Dravskem Polju~169|Miren-Kostanjevica~075|Mirna~212|Mirna Pec~170|Mislinja~076|Mokronog-Trebelno~199|Moravce~077|Moravske Toplice~078|Mozirje~079|Murska Sobota~080|Naklo~082|Nazarje~083|Nova Gorica~084|Novo Mesto~085|Odranci~086|Ormoz~087|Osilnica~088|Pesnica~089|Piran~090|Pivka~091|Podcetrtek~092|Podlehnik~172|Podvelka~093|Poljcane~200|Postojna~094|Prebold~174|Preddvor~095|Prevalje~175|Ptuj~096|Race-Fram~098|Radece~099|Radenci~100|Radlje ob Dravi~101|Radovljica~102|Ravne na Koroskem~103|Razkrizje~176|Recica ob Savinji~209|Rence-Vogrsko~201|Ribnica~104|Ribnica na Poboriu~177|Rogaska Slatina~106|Rogasovci~105|Rogatec~107|Ruse~108|Salovci~033|Selnica ob Dravi~178|Semic~109|Sempeter-Vrtojba~183|Sencur~117|Sentilj~118|Sentjernej~119|Sentjur~120|Sentrupert~211|Sevnica~110|Sezana~111|Skocjan~121|Skofja Loka~122|Skofljica~123|Slovenj Gradec~112|Slovenska Bistrica~113|Slovenske Konjice~114|Smarje pri elsah~124|Smarjeske Toplice~206|Smartno ob Paki~125|Smartno pri Litiji~194|Sodrazica~179|Solcava~180|Sostanj~126|Sredisce ob Dravi~202|Starse~115|Store~127|Straza~203|Sveta Ana~181|Sveta Trojica v Slovenskih Goricah~204|Sveta Andraz v Slovenskih Goricah~182|Sveti Jurij~116|Sveti Jurij v Slovenskih Goricah~210|Sveti Tomaz~205|Tabor~184|Tisina~128|Tolmin~128|Trbovlje~129|Trebnje~130|Trnovska Vas~185|Trzin~186|Trzic~131|Turnisce~132|Velenje~133|Velika Polana~187|Velike Lasce~134|Verzej~188|Videm~135|Vipava~136|Vitanje~137|Vodice~138|Vojnik~139|Vransko~189|Vrhnika~140|Vuzenica~141|Zagorje ob Savi~142|Zavrc~143|Zrece~144|Zalec~190|Zelezniki~146|Zetale~191|Ziri~147|Zirovnica~192|Zuzemberk~193"
1150      ],
1151      [
1152        "Solomon Islands",
1153        "SB",
1154        "Central~CE|Choiseul~CH|Guadalcanal~GU|Honiara~CT|Isabel~IS|Makira-Ulawa~MK|Malaita~ML|Rennell and Bellona~RB|Temotu~TE|Western~WE"
1155      ],
1156      [
1157        "Somalia",
1158        "SO",
1159        "Awdal~AW|Bakool~BK|Banaadir~BN|Bari~BR|Bay~BY|Galguduud~GA|Gedo~GE|Hiiraan~HI|Jubbada Dhexe~JD|Jubbada Hoose~JH|Mudug~MU|Nugaal~NU|Sanaag~SA|Shabeellaha Dhexe~SD|Shabeellaha Hoose~SH|Sool~SO|Togdheer~TO|Woqooyi Galbeed~WO"
1160      ],
1161      [
1162        "South Africa",
1163        "ZA",
1164        "Eastern Cape~EC|Free State~FS|Gauteng~GT|KwaZulu-Natal~NL|Limpopo~LP|Mpumalanga~MP|Northern Cape~NC|North West~NW|Western Cape~WC"
1165      ],
1166      [
1167        "South Georgia and South Sandwich Islands",
1168        "GS",
1169        "Bird Island|Bristol Island|Clerke Rocks|Montagu Island|Saunders Island|South Georgia|Southern Thule|Traversay Islands"
1170      ],
1171      [
1172        "South Sudan",
1173        "SS",
1174        "Central Equatoria~CE|Eastern Equatoria~EE|Jonglei~JG|Lakes~LK|Northern Bahr el Ghazal~BN|Unity~UY|Upper Nile~NU|Warrap~WR|Western Bahr el Ghazal~BW|Western Equatoria~EW"
1175      ],
1176      [
1177        "Spain",
1178        "ES",
1179        "Albacete~CM|Alicante~VC|Almería~AN|Araba/Álava~VI|Asturias~O|Ávila~AV|Badajoz~BA|Barcelona~B|Bizkaia~BI|Burgos~BU|Cáceres~CC|Cádiz~CA|Cantabria~S|Castellón~CS|Cueta~CU|Ciudad Real~CR|Córdoba~CO|A Coruña~C|Cuenca~CU|Gipuzkoa~SS|Girona~GI|Granada~GR|Guadalajara~GU|Huelva~H|Huesca~HU|Illes Balears~PM|Jaén~J|León~LE|Lleida~L|Lugo~LU|Madrid~M|Málaga~MA|Melilla~ML|Murcia~MU|Navarre~NA|Ourense~OR|Palencia~P|Las Palmas~GC|Pontevedra~PO|La Rioja~LO|Salamanca~SA|Santa Cruz de Tenerife~TF|Segovia~SG|Sevilla~SE|Soria~SO|Tarragona~T|Teruel~TE|Toledo~TO|Valencia~V|Valladolid~VA|Zamora~ZA|Zaragoza~Z"
1180      ],
1181      [
1182        "Sri Lanka",
1183        "LK",
1184        "Basnahira~1|Dakunu~3|Madhyama~2|Naegenahira~5|Sabaragamuwa~9|Uturu~4|Uturumaeda~7|Vayamba~6|Uva~8"
1185      ],
1186      [
1187        "Sudan",
1188        "SD",
1189        "Al Bahr al Ahmar~RS|Al Jazirah~GZ|Al Khartum~KH|Al Qadarif~GD|An Nil al Abyad~NW|An Nil al Azraq~NB|Ash Shamaliyah~NO|Gharb Darfur~DW|Gharb Kurdufan~GK|Janub Darfur~DS|Janub Kurdufan~KS|Kassala~KA|Nahr an Nil~NR|Shamal Darfur~DN|Sharq Darfur~DE|Shiamal Kurdufan~KN|Sinnar~SI|Wasat Darfur Zalinjay~DC"
1190      ],
1191      [
1192        "Suriname",
1193        "SR",
1194        "Brokopondo~BR|Commewijne~CM|Coronie~CR|Marowijne~MA|Nickerie~NI|Para~PR|Paramaribo~PM|Saramacca~SA|Sipaliwini~SI|Wanica~WA"
1195      ],
1196      ["Swaziland", "SZ", "Hhohho~HH|Lubombo~LU|Manzini~MA|Shiselweni~SH"],
1197      [
1198        "Sweden",
1199        "SE",
1200        "Blekinge~K|Dalarnas~W|Gotlands~X|Gavleborgs~I|Hallands~N|Jamtlands~Z|Jonkopings~F|Kalmar~H|Kronobergs~G|Norrbottens~BD|Orebro~T|Ostergotlands~E|Skane~M|Sodermanlands~D|Stockholm~AB|Varmlands~S|Vasterbottens~AC|Vasternorrlands~Y|Vastmanlands~U|Vastra Gotalands~O"
1201      ],
1202      [
1203        "Switzerland",
1204        "CH",
1205        "Aargau~AG|Appenzell Ausserrhoden~AR|Appenzell Innerhoden~AI|Basel-Landschaft~BL|Basel-Stadt~BS|Bern~BE|Fribourg~FR|Genève~G
1205E|Glarus~GL|Graubünden~GR|Jura~JU|Luzern~LU|Neuchâtel~NE|Nidwalden~NW|Obwalden~OW|Sankt Gallen~SG|Schaffhausen~SH|Schwyz~SZ|Solothurn~SO|Thurgau~TG|Ticino~TI|Uri~UR|Valais~VS|Vaud~VD|Zug~ZG|Zürich~ZH"
1206      ],
1207      [
1208        "Syrian Arab Republic",
1209        "SY",
1210        "Al Hasakah~HA|Al Ladhiqiyah~LA|Al Qunaytirah~QU|Ar Raqqah~RA|As Suwayda'~SU|Dar'a~DR|Dayr az Zawr~DY|Dimashq~DI|Halab~HL|Hamah~HM|Hims~HI|Idlib~ID|Rif Dimashq~RD|Tartus~TA"
1211      ],
1212      [
1213        "Taiwan",
1214        "TW",
1215        "Chang-hua~CHA|Chia-i~CYQ|Hsin-chu~HSQ|Hua-lien~HUA|Kao-hsiung~KHH|Keelung~KEE|Kinmen~KIN|Lienchiang~LIE|Miao-li~MIA|Nan-t'ou~NAN|P'eng-hu~PEN|New Taipei~NWT|P'ing-chung~PIF|T'ai-chung~TXG|T'ai-nan~TNN|T'ai-pei~TPE|T'ai-tung~TTT|T'ao-yuan~TAO|Yi-lan~ILA|Yun-lin~YUN"
1216      ],
1217      [
1218        "Tajikistan",
1219        "TJ",
1220        "Dushanbe~DU|KÅ­histoni Badakhshon~GB|Khatlon~KT|Sughd~SU"
1221      ],
1222      [
1223        "Tanzania, United Republic of",
1224        "TZ",
1225        "Arusha~01|Coast~19|Dar es Salaam~02|Dodoma~03|Iringa~04|Kagera~05|Kigoma~08|Kilimanjaro~09|Lindi~12|Manyara~26|Mara~13|Mbeya~14|Morogoro~16|Mtwara~17|Mwanza~18|Pemba North~06|Pemba South~10|Rukwa~20|Ruvuma~21|Shinyanga~22|Singida~23|Tabora~24|Tanga~25|Zanzibar North~07|Zanzibar Central/South~11|Zanzibar Urban/West~15"
1226      ],
1227      [
1228        "Thailand",
1229        "TH",
1230        "Amnat Charoen~37|Ang Thong~15|Bueng Kan~38|Buri Ram~31|Chachoengsao~24|Chai Nat~18|Chaiyaphum~36|Chanthaburi~22|Chiang Mai~50|Chiang Rai~57|Chon Buri~20|Chumphon~86|Kalasin~46|Kamphaeng Phet~62|Kanchanaburi~71|Khon Kaen~40|Krabi~81|Krung Thep Mahanakhon (Bangkok)~10|Lampang~52|Lamphun~51|Loei~42|Lop Buri~16|Mae Hong Son~58|Maha Sarakham~44|Mukdahan~49|Nakhon Nayok~26|Nakhon Phathom~73|Nakhon Phanom~48|Nakhon Ratchasima~30|Nakhon Sawan~60|Nakhon Si Thammarat~80|Nan~55|Narathiwat~96|Nong Bua Lam Phu~39|Nong Khai~43|Nonthaburi~12|Pathum Thani~13|Pattani~94|Phangnga~82|Phatthalung~93|Phayao~56|Phetchabun~76|Phetchaburi~76|Phichit~66|Phitsanulok~65|Phra Nakhon Si Ayutthaya~14|Phrae~54|Phuket~83|Prachin Buri~25|Prachuap Khiri Khan~77|Ranong~85|Ratchaburi~70|Rayong~21|Roi Et~45|Sa Kaeo~27|Sakon Nakhon~47|Samut Prakan~11|Samut Sakhon~74|Samut Songkhram~75|Saraburi~19|Satun~91|Sing Buri~17|Si Sa ket~33|Songkhla~90|Sukhothai~64|Suphan Buri~72|Surat Thani~84|Surin~32|Tak~63|Trang~92|Trat~23|Ubon Ratchathani~34|Udon Thani~41|Uthai Thani~61|Uttaradit~53|Yala~95|Yasothon~35"
1231      ],
1232      [
1233        "Timor-Leste",
1234        "TL",
1235        "Aileu~AL|Ainaro~AN|Baucau~BA|Bobonaro~BO|Cova Lima~CO|Dili~DI|Ermera~ER|Lautem~LA|Liquica~LI|Manatuto~MT|Manufahi~MF|Oecussi~OE|Viqueque~VI"
1236      ],
1237      ["Togo", "TG", "Centre~C|Kara~K|Maritime~M|Plateaux~P|Savannes~S"],
1238      ["Tokelau", "TK", "Atafu|Fakaofo|Nukunonu"],
1239      ["Tonga", "TO", "'Eua~01|Ha'apai~02|Niuas~03|Tongatapu~04|Vava'u~05"],
1240      [
1241        "Trinidad and Tobago",
1242        "TT",
1243        "Arima~ARI|Chaguanas~CHA|Couva-Tabaquite-Talparo~CTT|Diefo Martin~DMN|Mayaro-Rio Claro~MRC|Penal-Debe~PED|Point Fortin~PTF|Port-of-Spain~POS|Princes Town~PRT|San Fernando~SFO|San Juan-Laventille~SJL|Sangre Grande~SGE|Siparia~SIP|Tobago~TOB|Tunapuna-Piarco~TUP"
1244      ],
1245      [
1246        "Tunisia",
1247        "TN",
1248        "Ariana~12|Beja~31|Ben Arous~13|Bizerte~23|Gabes~81|Gafsa~71|Jendouba~32|Kairouan~41|Kasserine~42|Kebili~73|Kef~33|Mahdia~53|Medenine~82|Monastir~52|Nabeul~21|Sfax~61|Sidi Bouzid~43|Siliana~34|Sousse~51|Tataouine~83|Tozeur~72|Tunis~11|Zaghouan~22"
1249      ],
1250      [
1251        "Turkey",
1252        "TR",
1253        "Adana~01|Adiyaman~02|Afyonkarahisar~03|Agri~04|Aksaray~68|Amasya~05|Ankara~06|Antalya~07|Ardahan~75|Artvin~08|Aydin~09|Balikesir~10|Bartin~74|Batman~72|Bayburt~69|Bilecik~11|Bingol~12|Bitlis~13|Bolu~14|Burdur~15|Bursa~16|Canakkale~17|Cankiri~18|Corum~19|Denizli~20|Diyarbakir~21|Duzce~81|Edirne~22|Elazig~23|Erzincan~24|Erzurum~25|Eskisehir~26|Gaziantep~27|Giresun~28|Gumushane~29|Hakkari~30|Hatay~31|Igdir~76|Isparta~32|Istanbul~34|Izmir~35|Kahramanmaras~46|Karabuk~78|Karaman~70|Kars~36|Kastamonu~37|Kayseri~38|Kilis~79|Kirikkale~71|Kirklareli~39|Kirsehir~40|Kocaeli~41|Konya~42|Kutahya~43|Malatya~44|Manisa~45|Mardin~47|Mersin~33|Mugla~48|Mus~49|Nevsehir~50|Nigde~51|Ordu~52|Osmaniye~80|Rize~53|Sakarya~54|Samsun~55|Sanliurfa~63|Siirt~56|Sinop~57|Sirnak~73|Sivas~58|Tekirdag~59|Tokat~60|Trabzon~61|Tunceli~62|Usak~64|Van~65|Yalova~77|Yozgat~66|Zonguldak~67"
1254      ],
1255      [
1256        "Turkmenistan",
1257        "TM",
1258        "Ahal~A|Asgabat~S|Balkan~B|Dashoguz~D|Lebap~L|Mary~M"
1259      ],
1260      ["Turks and Caicos Islands", "TC", "Turks and Caicos Islands"],
1261      [
1262        "Tuvalu",
1263        "TV",
1264        "Funafuti~FUN|Nanumanga~NMG|Nanumea~NMA|Niutao~NIT|Nui~NUI|Nukufetau~NKF|Nukulaelae~NKL|Vaitupu~VAU"
1265      ],
1266      [
1267        "Uganda",
1268        "UG",
1269        "Abim~317|Adjumani~301|Amolatar~314|Amuria~216|Amuru~319|Apac~302|Arua~303|Budaka~217|Bududa~223|Bugiri~201|Bukedea~224|Bukwa~218|Buliisa~419|Bundibugyo~401|Bushenyi~402|Busia~202|Butaleja~219|Dokolo~318|Gulu~304|Hoima~403|Ibanda~416|Iganga~203|Isingiro~417|Jinja~204|Kaabong~315|Kabale~404|Kabarole~405|Kaberamaido~213|Kalangala~101|Kaliro~220|Kampala~102|Kamuli~205|Kamwenge~413|Kanungu~414|Kapchorwa~206|Kasese~406|Katakwi~207|Kayunga~112|Kibaale~407|Kiboga~103|Kiruhura~418|Kisoro~408|Kitgum~305|Koboko~316|Kotido~306|Kumi~208|Kyenjojo~415|Lira~307|Luwero~104|Lyantonde~116|Manafwa~221|Maracha~320|Masaka~105|Masindi~409|Mayuge~214|Mbale~209|Mbarara~410|Mityana~114|Moroto~308|Moyo~309|Mpigi~106|Mubende~107|Mukono~108|Nakapiripirit~311|Nakaseke~115|Nakasongola~109|Namutumba~222|Nebbi~310|Ntungamo~411|Oyam~321|Pader~312|Pallisa~210|Rakai~110|Rukungiri~412|Sembabule~111|Sironko~215|Soroti~211|Tororo~212|Wakiso~113|Yumbe~313"
1270      ],
1271      [
1272        "Ukraine",
1273        "UA",
1274        "Cherkasy~71|Chernihiv~74|Chernivtsi~77|Dnipropetrovsk~12|Donetsk~14|Ivano-Frankivsk~26|Kharkiv~63|Kherson~65|Khmelnytskyi~68|Kiev~32|Kirovohrad~35|Luhansk~09|Lviv~46|Mykolaiv~48|Odessa~51|Poltava~53|Rivne~56|Sumy~59|Ternopil~61|Vinnytsia~05|Volyn~07|Zakarpatti
1274a~21|Zaporizhia~23|Zhytomyr~18|Avtonomna Respublika Krym~43|Kyïv~30|Sevastopol~40"
1275      ],
1276      [
1277        "United Arab Emirates",
1278        "AE",
1279        "Abu Dhabi~AZ|Ajman~AJ|Dubai~DU|Fujairah~FU|Ras al Khaimah~RK|Sharjah~SH|Umm Al Quwain~UQ"
1280      ],
1281      [
1282        "United Kingdom",
1283        "GB",
1284        "Avon~AVN|Bedfordshire~BDF|Berkshire~BRK|Bristol, City of~COB|Buckinghamshire~BKM|Cambridgeshire~CAM|Cheshire~CHS|Cleveland~CLV|Cornwall~CON|Cumbria~CMA|Derbyshire~DBY|Devon~DEV|Dorset~DOR|Durham~DUR|East Sussex~SXE|Essex~ESS|Gloucestershire~GLS|Greater London~LND|Greater Manchester~GTM|Hampshire (County of Southampton)~HAM|Hereford and Worcester~HWR|Herefordshire~HEF|Hertfordshire~HRT|Isle of Wight~IOW|Kent~KEN|Lancashire~LAN|Leicestershire~LEI|Lincolnshire~LIN|London~LDN|Merseyside~MSY|Middlesex~MDX|Norfolk~NFK|Northamptonshire~NTH|Northumberland~NBL|North Humberside~NHM|North Yorkshire~NYK|Nottinghamshire~NTT|Oxfordshire~OXF|Rutland~RUT|Shropshire~SAL|Somerset~SOM|South Humberside~SHM|South Yorkshire~SYK|Staffordshire~STS|Suffolk~SFK|Surrey~SRY|Tyne and Wear~TWR|Warwickshire~WAR|West Midlands~WMD|West Sussex~SXW|West Yorkshire~WYK|Wiltshire~WIL|Worcestershire~WOR|Antrim~ANT|Armagh~ARM|Belfast, City of~BLF|Down~DOW|Fermanagh~FER|Londonderry~LDY|Derry, City of~DRY|Tyrone~TYR|Aberdeen, City of~AN|Aberdeenshire~ABD|Angus (Forfarshire)~ANS|Argyll~AGB|Ayrshire~ARG|Banffshire~BAN|Berwickshire~BEW|Bute~BUT|Caithness~CAI|Clackmannanshire~CLK|Cromartyshire~COC|Dumfriesshire~DFS|Dunbartonshire (Dumbarton)~DNB|Dundee, City of~DD|East Lothian (Haddingtonshire)~ELN|Edinburgh, City of~EB|Fife~FIF|Glasgow, City of~GLA|Inverness-shire~INV|Kincardineshire~KCD|Kinross-shire~KRS|Kirkcudbrightshire~KKD|Lanarkshire~LKS|Midlothian (County of Edinburgh)~MLN|Moray (Elginshire)~MOR|Nairnshire~NAI|Orkney~OKI|Peeblesshire~PEE|Perthshire~PER|Renfrewshire~RFW|Ross and Cromarty~ROC|Ross-shire~ROS|Roxburghshire~ROX|Selkirkshire~SEL|Shetland (Zetland)~SHI|Stirlingshire~STI|Sutherland~SUT|West Lothian (Linlithgowshire)~WLN|Wigtownshire~WIG|Clwyd~CWD|Dyfed~DFD|Gwent~GNT|Gwynedd~GWN|Mid Glamorgan~MGM|Powys~POW|South Glamorgan~SGM|West Glamorgan~WGM"
1285      ],
1286      [
1287        "United States",
1288        "US",
1289        "Alabama~AL|Alaska~AK|American Samoa~AS|Arizona~AZ|Arkansas~AR|California~CA|Colorado~CO|Connecticut~CT|Delaware~DE|District of Columbia~DC|Micronesia~FM|Florida~FL|Georgia~GA|Guam~GU|Hawaii~HI|Idaho~ID|Illinois~IL|Indiana~IN|Iowa~IA|Kansas~KS|Kentucky~KY|Louisiana~LA|Maine~ME|Marshall Islands~MH|Maryland~MD|Massachusetts~MA|Michigan~MI|Minnesota~MN|Mississippi~MS|Missouri~MO|Montana~MT|Nebraska~NE|Nevada~NV|New Hampshire~NH|New Jersey~NJ|New Mexico~NM|New York~NY|North Carolina~NC|North Dakota~ND|Northern Mariana Islands~MP|Ohio~OH|Oklahoma~OK|Oregon~OR|Palau~PW|Pennsylvania~PA|Puerto Rico~PR|Rhode Island~RI|South Carolina~SC|South Dakota~SD|Tennessee~TN|Texas~TX|Utah~UT|Vermont~VT|Virgin Islands~VI|Virginia~VA|Washington~WA|West Virginia~WV|Wisconsin~WI|Wyoming~WY|Armed Forces Americas~AA|Armed Forces Europe, Canada, Africa and Middle East~AE|Armed Forces Pacific~AP"
1290      ],
1291      [
1292        "United States Minor Outlying Islands",
1293        "UM",
1294        "Baker Island~81|Howland Island~84|Jarvis Island~86|Johnston Atoll~67|Kingman Reef~89|Midway Islands~71|Navassa Island~76|Palmyra Atoll~95|Wake Island~79|Bajo Nuevo Bank~BN|Serranilla Bank~SB"
1295      ],
1296      [
1297        "Uruguay",
1298        "UY",
1299        "Artigas~AR|Canelones~CA|Cerro Largo~CL|Colonia~CO|Durazno~DU|Flores~FS|Florida~FD|Lavalleja~LA|Maldonado~MA|Montevideo~MO|Paysandú~PA|Río Negro~RN|Rivera~RV|Rocha~RO|Salto~SA|San José~SJ|Soriano~SO|Tacuarembó~TA|Treinta y Tres~TT"
1300      ],
1301      [
1302        "Uzbekistan",
1303        "UZ",
1304        "Toshkent shahri~TK|Andijon~AN|Buxoro~BU|Farg‘ona~FA|Jizzax~JI|Namangan~NG|Navoiy~NW|Qashqadaryo (Qarshi)~QA|Samarqand~SA|Sirdaryo (Guliston)~SI|Surxondaryo (Termiz)~SU|Toshkent wiloyati~TO|Xorazm (Urganch)~XO|Qoraqalpog‘iston Respublikasi (Nukus)~QR"
1305      ],
1306      [
1307        "Vanuatu",
1308        "VU",
1309        "Malampa~MAP|Pénama~PAM|Sanma~SAM|Shéfa~SEE|Taféa~TAE|Torba~TOB"
1310      ],
1311      [
1312        "Venezuela, Bolivarian Republic of",
1313        "VE",
1314        "Dependencias Federales~W|Distrito Federal~A|Amazonas~Z|Anzoátegui~B|Apure~C|Aragua~D|Barinas~E|Bolívar~F|Carabobo~G|Cojedes~H|Delta Amacuro~Y|Falcón~I|Guárico~J|Lara~K|Mérida~L|Miranda~M|Monagas~N|Nueva Esparta~O|Portuguesa~P|Sucre~R|Táchira~S|Trujillo~T|Vargas~X|Yaracuy~U|Zulia~V"
1315      ],
1316      [
1317        "Vietnam",
1318        "VN",
1319        "Đồng Nai~39|Đồng Tháp~45|Gia Lai~30|Hà Giang~03|Hà Nam~63|Hà Tây~15|Hà Tĩnh~23|Hải Dương~61|Hậu Giang~73|Hòa Bình~14|Hưng Yên~66|Khánh Hòa~34|Kiên Giang~47|Kon Tum~28|Lai Châu~01|Lâm Đồng~35|Lạng Sơn~09|Lào Cai~02|Long An~41|Nam Định~67|Nghệ An~22|Ninh Bình~18|Ninh Thuận~36|Phú Thọ~68|Phú Yên~32|Quảng Bình~24|Quảng Nam~27|Quảng Ngãi~29|Quảng Ninh~13|Quảng Trị~25|Sóc Trăng~52|Sơn La~05|Tây Ninh~37|Thái Bình~20|Thái Nguyên~69|Thanh Hóa~21|Thừa Thiên–Huế~26|Tiền Giang~46|Trà Vinh~51|Tuyên Quang~07|Vĩnh Long~49|Vĩnh Phúc~70|Yên Bái~06|Cần Thơ~CT|Đà Nẵng~DN|Hà Nội~HN|Hải Phòng~HP|Hồ Chí Minh (Sài Gòn)~SG"
1320      ],
1321      [
1322        "Virgin Islands, British",
1323        "VG",
1324        "Anegada~ANG|Jost Van Dyke~JVD|Tortola~TTA|Virgin Gorda~VGD"
1325      ],
1326      [
1327        "Virgin Islands, U.S.",
1328        "VI",
1329        "St. Thomas~STH|St. John~SJO|St. Croix~SCR"
1330      ],
1331      ["Wallis and Futuna", "WF", "Alo~ALO|Sigave~SIG|Wallis~WAL"],
1332      [
1333        "Western Sahara",
1334        "EH",
1335        "Es Smara~ESM|Boujdour~BOD|Laâyoune~LAA|Aousserd~AOU|Oued ed Dahab~OUD"
1336      ],
1337      [
1338        "Yemen",
1339        "YE",
1340        "Abyān~AB|'Adan~AD|Aḑ Ḑāli'~DA|Al Bayḑā'~BA|Al Ḩudaydah~HU|Al Jawf~JA|Al Mahrah~MR|Al Maḩwīt~MW|'Amrān~AM|Dhamār~DH|Ḩaḑramawt~HD|Ḩajjah~HJ|Ibb~IB|Laḩij~LA|Ma'rib~MA|Raymah~RA|Şā‘dah~SD|Şan‘ā'~SN|Shabwah~SH|Tā‘izz~TA"
1341      ],
1342      [
1343        "Zambia",
1344        "ZM",
1345        "Central~02|Copperbelt~08|Eastern~03|Luapula~04|Lusaka~09|Northern~05|North-Western~06|Southern~07|Western~01"
1346      ],
1347      [
1348        "Zimbabwe",
1349        "ZW",
1350        "Bulawayo~BU|Harare~HA|Manicaland~MA|Mashonaland Central~MC|Mashonaland East~ME|Mashonaland West~MW|Masvingo~MV|Matabeleland North~MN|Matabeleland South~MS|Midlands~MI"
1351      ]
1352    ],
1353    a = function() {
1354      $(".crs-country").each(n);
1355    },
1356    n = function() {
1357      var a = this;
1358      if ("true" !== a.getAttribute("data-crs-loaded")) {
1359        a.length = 0;
1360        var n = $(a).attr("data-default-option"),
1361          i = n || "Select country",
1362          e = a.getAttribute("data-show-default-option");
1363        m = null === e || "true" === e;
1364        var r = $(a).attr("data-default-value"),
1365          o = $(a).attr("data-value"),
1366          l = 0;
1367        m && (this.options[0] = new Option(i, "")),
1368          k({
1369            whitelist: a.getAttribute("data-whitelist"),
1370            blacklist: a.getAttribute("data-blacklist"),
1371            preferred: a.getAttribute("data-preferred"),
1372            preferredDelim: a.getAttribute("data-preferred-delim")
1373          });
1374        for (var t = 0; t < M.length; t++) {
1375          var s = "shortcode" == o || "2-char" === o ? M[t][1] : M[t][0];
1376          M[t][4] && (s = ""),
1377            (a.options[a.length] = new Option(M[t][0], s)),
1378            null != r && r === s && ((l = t), m && l++);
1379        }
1380        this.selectedIndex = l;
1381        var u = $(a).attr("data-region-id");
1382        if (u) {
1383          var d = $("#" + u)[0];
1384          if (d)
1385            if (
1386              (B(d),
1387              $(this).on("change", function() {
1388                b(a, d);
1389              }),
1390              r && 0 < a.selectedIndex)
1391            ) {
1392              b(a, d);
1393              var h = $(d).attr("data-default-value"),
1394                S = "shortcode" === d.getAttribute("data-value");
1395              if (null !== h) {
1396                var A = m ? a.selectedIndex - 1 : a.selectedIndex,
1397                  g = M[A][3];
1398                c(d, g, h, S);
1399              }
1400            } else !1 === m && b(a, d);
1401          else
1402            console.error(
1403              "Region dropdown DOM node with ID " + u + " not found."
1404            );
1405          a.setAttribute("data-crs-loaded", "true");
1406        } else
1407          console.error(
1408            "Missing data-region-id on country-region-selector country field."
1409          );
1410      }
1411    },
1412    B = function(a) {
1413      var n = $(a).attr("data-blank-option"),
1414        i = n || "-",
1415        e = a.getAttribute("data-show-default-option");
1416      (h = null === e || "true" === e),
1417        (a.length = 0),
1418        h && ((a.options[0] = new Option(i, "")), (a.selectedIndex = 0));
1419    },
1420    k = function(a) {
1421      var n = l,
1422        i = [],
1423        e = 0;
1424      if (a.whitelist) {
1425        var r = a.whitelist.split(",");
1426        for (e = 0; e < l.length; e++)
1427          -1 !== r.indexOf(l[e][1]) && i.push(l[e]);
1428        n = i;
1429      } else if (a.blacklist) {
1430        var o = a.blacklist.split(",");
1431        for (e = 0; e < l.length; e++)
1432          -1 === o.indexOf(l[e][1]) && i.push(l[e]);
1433        n = i;
1434      }
1435      a.preferred && (n = s(n, a.preferred, a.preferredDelim)), (M = n), t();
1436    },
1437    t = function() {
1438      for (var a = 0; a < M.length; a++) {
1439        for (
1440          var n = { hasShortcodes: /~/.test(M[a][2]), regions: [] },
1441            i = M[a][2].split("|"),
1442            e = 0;
1443          e < i.length;
1444          e++
1445        ) {
1446          var r = i[e].split("~");
1447          n.regions.push([r[0], r[1]]);
1448        }
1449        M[a][3] = n;
1450      }
1451    },
1452    c = function(a, n, i, e) {
1453      for (var r = 0; r < n.regions.length; r++) {
1454        if (
1455          (e && n.hasShortcodes && n.regions[r][1]
1456            ? n.regions[r][1]
1457            : n.regions[r][0]) === i
1458        ) {
1459          a.selectedIndex = h ? r + 1 : r;
1460          break;
1461        }
1462      }
1463    },
1464    b = function(a, n) {
1465      var i = m ? a.selectedIndex - 1 : a.selectedIndex,
1466        e = $(n).attr("data-default-option"),
1467        r = n.getAttribute("data-value"),
1468        o = e || "Select region";
1469      if ("" === a.value) B(n);
1470      else {
1471        (n.length = 0), h && (n.options[0] = new Option(o, ""));
1472        var l = M[i][3],
1473          t = "shortcode" === r && l.hasShortcodes,
1474          s = t ? 1 : 0;
1475        l.regions.sort(function(a, n) {
1476          var i = a[s].toLowerCase(),
1477            e = n[s].toLowerCase();
1478          return i < e ? -1 : e < i ? 1 : 0;
1479        });
1480        for (var u = 0; u < l.regions.length; u++) {
1481          var d = t ? l.regions[u][1] : l.regions[u][0];
1482          n.options[n.length] = new Option(l.regions[u][0], d);
1483        }
1484        n.selectedIndex = 0;
1485      }
1486    },
1487    s = function(a, n, i) {
1488      var e = n.split(",").reverse(),
1489        r = {},
1490        o = !1,
1491        l = a.filter(function(a) {
1492          return -1 === e.indexOf(a[1]) || ((r[a[1]] = a), !(o = !0));
1493        });
1494      o && i && l.unshift([i, "", "", {}, !0]);
1495      for (var t = 0; t < e.length; t++) {
1496        var s = e[t];
1497        l.unshift(r[s]);
1498      }
1499      return l;
1500    };
1501  return $(a), { init: a };
1502});
1503
1504
1505/***/ }),
1506
1507/***/ "../FigureBaseResources/js/figure.js":
1508/*!*******************************************!*\
1509  !*** ../FigureBaseResources/js/figure.js ***!
1510  \*******************************************/
1511/***/ (function() {
1512
1513/**
1514 * Copyright 2009-2018, Figure (http://www.commercebyfigure.com)
1515 *
1516 * Licensed under The BSD License
1517 * Redistributions of files must retain the above copyright notice.
1518 *
1519 * @copyright    Copyright 2009-2018, Figure (http://www.commercebyfigure.com)
1520 * @package      Figure - Cart
1521 * @author       Ian Tucker <ian at commercebyfigure.com>
1522 * @license      BSD License (http://www.opensource.org/licenses/bsd-license.php)
1523 */
1524
1525const page = window.location.pathname.split("/")[1];
1526
1527$(document).ready(function () {
1528	$("a.add-cart-modal").bind("click", addCart);
1529	$(".product-order").bind("click", addCart);
1530	$(".btn-add-cart").bind("click", addCart);
1531
1532	$(".btn-add-on-cart").bind("click", addOnCart);
1533
1534	$(".btn-add-club").on("click", addClub);
1535
1536	$("#shipping_insurance").bind("change", toggleInsurance);
1537
1538	//NOTE: tokenizeCard comes from the payment-form(|-no-zip|-se).st.js file that
1539	// FigureBaseCart's _snippets/javascript-payment includes (with the latter's just being an empty function)
1540	$("#credit-card-form").bind("submit", tokenizeCard);
1541//$("#shipping_methods").on('change', 'input:radio.shipping_method', updateShipping);
1542
1543	// Auto-save Requested Ship Date
1544	$("input[type=radio][name='data[requested_ship_date]']").bind("change", updateRequestedShipDate);
1545	selectFirstRadioOption("data[requested_ship_date]");
1546
1547	//legacy; remove once all client overrides are updated to use name="data[requested_ship_date]"
1548	$("input[type=radio][name=requested_ship_date]").bind("change", updateRequestedShipDate);
1549	selectFirstRadioOption("requested_ship_date");
1550
1551	// Auto-save order comments (instructions & gift message)
1552	$("#js-instructions, #js-gift_message").on("blur", updateComments);
1553
1554	$("#credit-card-form #state").bind("change", internationalShippingSelect);
1555
1556	// Purchase Quantity Selector
1557	$(".qty").on("change", function () {
1558		const $this = $(this);
1559		const parts = $this.attr("id").split("qty-");
1560		const id = parts[1];
1561		const val = $this.val();
1562
1563		updateQuantity(id, val);
1564		checkWishRequests(id, val);
1565	});
1566
1567	// Wish Quantity Selector
1568	$(".wish-qty").bind("change", function () {
1569		const $this = $(this);
1570		const parts = $this.attr("id").split("qty-");
1571		const id = parts[1];
1572		const val = $this.val();
1573
1574		updateWishQuantity(id, val);
1575	});
1576
1577	$("a.launch-modal").bind("click", launchModal);
1578	$("input:radio.launch-modal").bind("change", launchModalSelect);
1579	$("select.launch-modal").bind("change", launchModalSelect);
1580
1581	/**
1582	 * Click Handler for /offering/checkout
1583	 * Appends Spinner to body and disabled button
1584	 * to prevent duplicate order
1585	 *
1586	 * Last Edit: 9/01/2020
1587	 *
1588	 * @author Victor Ragojos
1589	 */
1590	$("#button-place-order").on("mousedown", function (e) {
1591		e.stopPropagation();
1592
1593		$(this).attr("disabled", true);
1594		const modal = $('<div id="checkoutSpinnerModal"></div>');
1595		modal.addClass("fade");
1596		modal.addClass("modal");
1597		modal.attr("keyboard", false);
1598		modal.attr("data-backdrop", "static");
1599		const dialog = $('<div class="modal-dialog modal-dialog-centered"></div>');
1600
1601		const content = $('<div class="modal-content d-flex"></div>');
1602		content.addClass("align-items-center");
1603		const body = $('<div class="modal-body d-flex"></div>');
1604		const spinner = $('<div class="spinner-border text-primary"></div>');
1605
1606		body.append(spinner);
1607
1608		content.append(body);
1609		dialog.append(content);
1610		modal.append(dialog);
1611
1612		content.css({
1613			border: "none",
1614			backgroundColor: "transparent",
1615		});
1616
1617		spinner.css({
1618			zIndex: 9999,
1619		});
1620
1621		$("body").append(modal);
1622		modal.modal("show");
1623
1624		$("#cartForm").submit();
1625	});
1626
1627	// prevent rage-click multi-submission of form
1628	$("form").bind("submit", function (e) {
1629		const $form = $(this);
1630		if ($form.data("submitted") === true) {
1631			// Previously submitted - don't submit again
1632			e.preventDefault();
1633		} else {
1634			// Mark it so that the next submit can be ignored
1635			$form.data("submitted", true);
1636		}
1637	});
1638});
1639
1640function addCart(event) {
1641	const $this = $(this);
1642	if (
1643		$this.hasClass("add-to-added")
1644		&& $this.text().includes('Add')
1645		&& !$this.text().includes('Added')
1646	) {
1647		$this.text('Added');
1648	}
1649
1650	// Everything after /add/
1651	let $parts = $this.attr("href").split("/add/");
1652
1653	// Break up by forward slash (/)
1654	$parts = $parts[1].split("/");
1655
1656	// First Argument is SKU
1657	const $sku = $parts[0];
1658	const $quant = $this.closest("form").find("select").val() || 1;
1659
1660	//const modalSize = 'small-modal';
1661	//$('.site-mask').fadeIn();
1662	//$('.site-modal').attr('class', 'site-modal '+modalSize);
1663	//$('body').addClass('modal-open').addClass('modal-on-page');
1664	//$('.site-modal').removeAttr('aria-hidden').attr('tab-index','1');
1665	const $cartModal = $("#cartModal");
1666	$cartModal.modal();
1667	$cartModal.find(".modal-load-area").html("").removeClass("loaded");
1668	$.getJSON(`/cart/add_modal/${$sku}/${$quant}.json`, function (data) {
1669		const { product } = data;
1670		$cartModal.find(".modal-load-area").html(data.html).addClass("loaded");
1671		const $face = $(".face");
1672		const $cartcount = $("#cartcount");
1673		if (data.quantity > 0) {
1674			// NOTE: For analytics since `preventDefault` prevents other `click` event listeners from being triggered
1675			try {
1676				fbq("track", "AddToCart", {
1677					"currency": "USD",
1678					"value": data.total.subtotal,
1679					"contents": [{ id: product.sku, name: product.name, quantity: data.quantity }]
1680				});
1681
1682				const formatter = new Intl.NumberFormat('en-US', {
1683					currency: "USD",
1684					style: "currency",
1685				});
1686
1687				window.dataLayer = window.dataLayer || [];
1688				window.dataLayer.push({ ecommerce: null });
1689				window.dataLayer.push({
1690					event: "add_to_cart",
1691					ecommerce: {
1692						"currency": "USD",
1693						"value": data.total.subtotal,
1694						"items": [{
1695							item_id: product.sku,
1696							item_name: product.name,
1697							item_brand: product.producer,
1698							item_category: product.country,
1699							item_category2: product.region,
1700							item_category3: product.producer,
1701							item_variant: product.blends,
1702							price: formatter.format(product.price),
1703							quantity: data.quantity,
1704						}],
1705					},
1706				});
1707			} catch(e) {}
1708
1709			$cartcount.html(` <span class='badge badge-pill badge-primary'>${data.quantity}</span>`);
1710			$(".cart-link").removeClass("hide-cart");
1711			$face.addClass("happy");
1712
1713			// Check if klaviyo instance is available
1714			// in global window object
1715			if (!!window._learnq) {
1716				klaviyoAddCart(data);
1717			}
1718		}
1719		else {
1720			$cartcount.html("");
1721			$face.removeClass("happy");
1722		}
1723		$face.addClass("show");
1724	});
1725	event.preventDefault();
1726	return false;
1727}
1728
1729function addClub() {
1730	const data = $(this).data();
1731	console.log(data);
1732	klaviyoAddClub(data);
1733}
1734
1735// Add a Thousand Separator to a numeric string
1736function addCommas(x) {
1737	return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
1738}
1739
1740function addOnCart(event) {
1741	const $this = $(this);
1742
1743	// Everything after /add/
1744	let $parts = $this.attr("href").split("/add/");
1745
1746	// Break up by forward slash (/)
1747	$parts = $parts[1].split("/");
1748
1749	// First Argument is SKU
1750	const $sku = $parts[0];
1751	const $quant = $this.closest("form").find("select").val() || 1;
1752
1753	//const modalSize = 'small-modal';
1754	//$('.site-mask').fadeIn();
1755	//$('.site-modal').attr('class', 'site-modal '+modalSize);
1756	//$('body').addClass('modal-open').addClass('modal-on-page');
1757	//$('.site-modal').removeAttr('aria-hidden').attr('tab-index','1');
1758	const $cartModal = $("#cartModal");
1759	$cartModal.modal();
1760	$cartModal.find(".modal-load-area").html("").removeClass("loaded");
1761	$.getJSON(`/purchase/add_modal/${$sku}/${$quant}.json`, function (data) {
1762		$cartModal.find(".modal-load-area").html(data.html).addClass("loaded");
1763		const $face = $(".face");
1764		const $cartcount = $("#cartcount");
1765		if (data.quantity > 0) {
1766			$cartcount.html(` <span class='badge badge-pill badge-primary'>${data.quantity}</span>`);
1767			$(".cart-link").removeClass("hide-cart");
1768			$face.addClass("happy");
1769
1770			// Check if klaviyo instance is available
1771			// in global window object
1772			if (!!window._learnq) {
1773				klaviyoAddCart(data);
1774			}
1775		}
1776		else {
1777			$cartcount.html("");
1778			$face.removeClass("happy");
1779		}
1780		$face.addClass("show");
1781	});
1782	event.preventDefault();
1783	return false;
1784}
1785
1786function checkWishRequests(id, quant) {
1787	const max = parseInt($(`#qty-${id} option:last-child`).val());
1788	quant = parseInt(quant);
1789	const $wishwrapper = $(`.wishwrapper-${id}`);
1790	const $wishqty = $(`#wishqty-${id}`);
1791	if (quant === max) {
1792		$wishwrapper.show();
1793	}
1794	else if (quant < max) {
1795		$wishwrapper.hide();
1796		$wishqty.val($wishqty.find("option:first").val());
1797		updateWishQuantity(id, 0);
1798	}
1799}
1800
1801function formatProductName(product) {
1802	return `${product.name} ${product.subtitle}`;
1803}
1804
1805function internationalShippingSelect() {
1806	if ($(this).val() === "Int") {
1807		$("#state_select_field").html(
1808			`<input type="text" size="10" name="data[state]" value="" placeholder="International..." />`
1809		);
1810	}
1811}
1812
1813function klaviyoAddCart(payload) {
1814	const { url, cart, total, product, quantity } = payload;
1815	if (
1816		!Array.isArray(cart)
1817		|| typeof url !== "string"
1818		|| typeof total !== "object"
1819		|| typeof product !== "object"
1820	) {
1821		return;
1822	}
1823
1824	const { subtotal } = total;
1825
1826	const cats = [];
1827	if (typeof product.categories === "object") {
1828		Object.keys(product.categories).forEach((k) => {
1829			const c = product.categories[k];
1830			cats.push(c.name);
1831		});
1832	}
1833
1834	const prodURL = `${url}/product/detail/${product.sku}/`;
1835	const coURL = `${url}/cart/`;
1836	window._learnq.push([
1837		"track",
1838		"Added to Cart",
1839		{
1840			$value: subtotal,
1841			AddedItemProductName: formatProductName(product),
1842			AddedItemProductID: product.id,
1843			AddedItemSKU: product.sku,
1844			AddedItemCategories: cats,
1845			AddedItemImageURL: product.image,
1846			AddedItemURL: prodURL,
1847			AddedItemPrice: product.price,
1848			AddedItemQuantity: quantity,
1849			ItemNames: cart.map((p) => formatProductName(p)),
1850			CheckoutURL: coURL,
1851			Items: cart.map((p) => ({
1852				ProductID: p.id,
1853				SKU: p.sku,
1854				ProductName: formatProductName(p),
1855				Quantity: quantity,
1856				ItemPrice: p.price,
1857				RowTotal: p.price * quantity,
1858				ProductURL: prodURL,
1859				ImageURL: p.image || "",
1860				ProductCategories: (
1861					typeof p.categories === "object"
1862					&& Object.keys(p.categories).map((k) => {
1863						return p.categories[k].name;
1864					})
1865				) || [],
1866			})),
1867		},
1868	]);
1869}
1870
1871function klaviyoAddClub(data) {
1872	const { id = "", sku = "", url = "", name = "", image = "" } = data;
1873	window._learnq.push([
1874		"track",
1875		"Added to Cart (Club)",
1876		{
1877			$value: 1.0,
1878			AddedItemProductName: name,
1879			AddedItemProductID: id,
1880			AddedItemSKU: id,
1881			AddedItemCategories: ["Club"],
1882			AddedItemImageURL: url,
1883			AddedItemURL: url,
1884			AddedItemPrice: 1.0,
1885			AddedItemQuantity: 1,
1886			ItemNames: [name],
1887			CheckoutURL: url,
1888			Items: [
1889				{
1890					ProductID: id,
1891					SKU: id,
1892					ProductName: name,
1893					Quantity: 1,
1894					ItemPrice: 1.0,
1895					RowTotal: 1.0,
1896					ProductURL: `${url}${sku}`,
1897					ImageURL: image,
1898					ProductCategories: ["Club"],
1899				},
1900			],
1901		},
1902	]);
1903}
1904
1905// Launch modal from Link
1906function launchModal($event) {
1907	const $href = $(this).attr("href").split("#");
1908	const $url = $href[0];
1909	const $id = $href[1];
1910
1911	$event.preventDefault();
1912
1913	const $idTarget = $("#" + $id);
1914	if ($url.length > 0) {
1915		$.get($url, function ($data) {
1916			$idTarget.html($data);
1917			$idTarget.modal({ backdrop: "static" });
1918		});
1919	}
1920	else {
1921		$idTarget.modal({ backdrop: "static" });
1922	}
1923}
1924
1925// Launch modal from Select
1926function launchModalSelect($event) {
1927	const href = $(this).val().split("#");
1928	const url = href[0];
1929	const id = href[1];
1930	const $id = $("#" + id);
1931
1932	$event.preventDefault();
1933
1934	if (url.length === 0) {
1935		$id.modal({ backdrop: "static" });
1936	}
1937	else if (id === undefined || id.length === 0) {
1938		window.location = url;
1939	}
1940	else {
1941		$.get(url, function ($data) {
1942			$id.html($data);
1943			$id.modal({ backdrop: "static" });
1944		});
1945	}
1946}
1947
1948// If no radio option is selected, select the first one
1949function selectFirstRadioOption(name) {
1950	const $radio = $(`input[type=radio][name='${name}']`);
1951	if ($radio.length > 0) {
1952		if (!$radio.filter(":checked").length) {
1953			$radio[0].checked = true;
1954		}
1955	}
1956}
1957
1958// Toggle Insurance
1959function toggleInsurance() {
1960	const insurance = $("#shipping_insurance").is(":checked") ? 1 : 0;
1961
1962	$.getJSON(
1963		`/${page}/update_insurance/${insurance}/`,
1964		function (data) {
1965			const {
1966				shipping,
1967				shipping_insurance,
1968				tax,
1969				total,
1970			} = data;
1971
1972			updateDisplay(
1973				".js-shipping_display, #shipping_display, #shipping_display_alt",
1974				parseFloat(shipping).toFixed(2)
1975			);
1976
1977			updateDisplay(
1978				".js-shipping_insurance_display, #shipping_insurance_display",
1979				shipping_insurance.toFixed(2),
1980				true
1981			);
1982
1983			updateDisplay(".js-tax_display, #tax_display", parseFloat(tax).toFixed(2));
1984
1985			updateDisplay(
1986				".js-total_display, #total_display, #total_display_alt, #total_display_top",
1987				parseFloat(total).toFixed(2)
1988			);
1989		}
1990	);
1991}
1992
1993function updateComments() {
1994	const instructions = $("#js-instructions").val() || "";
1995	const giftMessage = $("#js-gift_message").val() || "";
1996
1997	$.getJSON(
1998		`/${page}/update_comments/`,
1999		{
2000			instructions: instructions,
2001			gift_message: giftMessage,
2002		},
2003		function (data) {}
2004	);
2005}
2006
2007/**
2008 * Makes an ajax call to cart/get_items and updates #Price_(sku) & #Vol_(sku) for each item in the cart.
2009 *
2010 * Called by updateQuantity if $product['enable_product_volume_discounts'] == 'TRUE' on cart/index,
2011 * and therefore it added an input#enable_product_volume_discounts with value = 'TRUE' to the page.
2012 */
2013function updateDiscountPrice() {
2014	$.getJSON("/cart/get_items", function (data) {
2015		$.each(data, function (i, item) {
2016			const { price, has_volume_discount, sku } = item;
2017
2018			$(`#Price_${sku}`).html(price);
2019
2020			const $theVolID = $(`#Vol_${sku}`);
2021			if (Number(has_volume_discount) === 1) {
2022				$theVolID.fadeIn();
2023			} else {
2024				$theVolID.fadeOut();
2025			}
2026		});
2027	});
2028}
2029
2030/**
2031 * Update Display
2032 *
2033 * @param  selector       string  id's & classes to update with the provided value
2034 * @param  value          string  numeric string of the value in question
2035 * @param  hideRowIfZero  bool    if true, hide the (monetary) field row if zero, otherwise show it
2036 */
2037function updateDisplay(selector, value, hideRowIfZero = false) {
2038	const $displayField = $(selector);
2039
2040	if ($displayField.length) {
2041		if (value > 0) {
2042			value = addCommas(value);
2043			$displayField.html(value);
2044			if (hideRowIfZero) {
2045				$displayField.closest("tr").show();
2046			}
2047		}
2048		else {
2049			$displayField.html(value === "0.00" ? "0.00" : "0");
2050			if (hideRowIfZero) {
2051				$displayField.closest("tr").hide();
2052			}
2053		}
2054	}
2055}
2056
2057// Updates quantity in cart
2058function updateQuantity(id, value) {
2059	if (value <= 0) {
2060		value = "0";
2061	}
2062
2063	$.getJSON(
2064		`/${page}/update_quantity/${id}/${value}/`,
2065		function (data) {
2066			const {
2067				quantity,
2068				subtotal,
2069				shipping,
2070				discount,
2071				tax,
2072				total,
2073				crv,
2074				ca_redemption_value,
2075				co_retail_delivery_fee,
2076				me_bottle_deposit,
2077				credits,
2078				adjusted_subtotal,
2079				shipping_insurance,
2080				tip,
2081				allocation_remaining,
2082				expires,
2083			} = data;
2084
2085			updateDisplay(".js-item_count_display, #item_count_display", quantity);
2086
2087			updateDisplay(
2088				".js-subtotal_display, #subtotal_display, #subtotal_display_2",
2089				subtotal.toFixed(2)
2090			);
2091
2092			updateDisplay(
2093				".js-shipping_display, #shipping_display, #shipping_display_alt",
2094				shipping.toFixed(2)
2095			);
2096
2097			// CA redemption value (CRV)
2098			const crvAmount = ca_redemption_value || crv;
2099			updateDisplay(
2100				".js-ca_redemption_value_display, #ca_redemption_value_display, #crv_display",
2101				crvAmount.toFixed(2),
2102				true
2103			);
2104
2105			updateDisplay(
2106				".js-co_retail_delivery_fee_display, #co_retail_delivery_fee_display",
2107				co_retail_delivery_fee.toFixed(2),
2108				true
2109			);
2110
2111			updateDisplay(
2112				".js-me_bottle_deposit_display, #me_bottle_deposit_display",
2113				me_bottle_deposit.toFixed(2),
2114				true
2115			);
2116
2117			updateDisplay(".js-discount_display, #discount_display", discount.toFixed(2));
2118
2119			updateDisplay(".js-credits_display, #credits_display", credits.toFixed(2), true);
2120
2121			// Adjusted subtotal - only show if different from subtotal
2122			const $adjustedSubtotalDisplay = $(".js-adjusted_subtotal_display, #adjusted_subtotal_display");
2123			if (adjusted_subtotal !== undefined && adjusted_subtotal !== subtotal) {
2124				updateDisplay($adjustedSubtotalDisplay, adjusted_subtotal.toFixed(2));
2125				$adjustedSubtotalDisplay.closest("tr").show();
2126			}
2127			else {
2128				$adjustedSubtotalDisplay.closest("tr").hide();
2129			}
2130
2131			updateDisplay(".js-tax_display, #tax_display", tax.toFixed(2));
2132
2133			updateDisplay(
2134				".js-shipping_insurance_display, #shipping_insurance_display",
2135				shipping_insurance.toFixed(2),
2136				true
2137			);
2138
2139			updateDisplay(".js-tip_display, #tip_display", tip.toFixed(2), true);
2140
2141			updateDisplay(
2142				".js-total_display, #total_display, #total_display_alt, #total_display_top",
2143				total.toFixed(2)
2144			);
2145
2146			const $addYourFullAllocation = $(".add-your-full-allocation");
2147			if ($addYourFullAllocation.length) {
2148				console.log(allocation_remaining);
2149				if (allocation_remaining === true) {
2150					console.log("you have more to add");
2151				$addYourFullAllocation.show();
2152        }
2153				else {
2154					console.log("you have NO more to add");
2155				$addYourFullAllocation.hide();
2156				}
2157			}
2158
2159			const $cartcount = $("#cartcount");
2160			const $cartcountnav = $("#cartcountnav");
2161			const $cartLink = $(".cart-link");
2162			if (quantity > 0) {
2163				$cartcount.html(`<span class='badge badge-pill badge-primary'>${quantity}</span>`);
2164				$cartcountnav.html(`<span class='badge badge-pill badge-primary'>${quantity}</span>`);
2165				$cartLink.removeClass("hide-cart");
2166			}
2167			else {
2168			$cartcount.html("");
2169			$cartcountnav.html("");
2170			$cartLink.addClass("hide-cart");
2171			}
2172
2173			if (expires > 0) {
2174				const totalSecs = expires;
2175				const secondz = totalSecs * 1000;
2176				console.log(totalSecs);
2177				if (secondz > 0) {
2178					window.setTimeout(function () {
2179						location.href = "/offering/expired/";
2180					}, secondz);
2181				}
2182			}
2183
2184			const $shippingOfferMin = $("#shipping-offer-min");
2185			if ($shippingOfferMin.length) {
2186				//TODO: this function doesn't appear to exist!!!
2187				swapAddBottleText(parseInt($shippingOfferMin.val()), parseInt(quantity));
2188			}
2189
2190			const $cartShippingMessage = $(".cart-shipping-message");
2191			const $moreBottles = $(".more-bottles");
2192			const $qualified = $(".qualified");
2193			if (quantity < 6) {
2194				$cartShippingMessage.removeClass("blank");
2195				$moreBottles.removeClass("no-more");
2196				$("#moar").html(6 - quantity);
2197				$qualified.removeClass("success");
2198
2199				//plural must be in relation to #moar above, so 6 - 5 = 1...
2200				if (parseInt(quantity) === 5) {
2201					$("#plural").hide();
2202			}
2203			else {
2204					$("#plural").show();
2205				}
2206			}
2207			else {
2208				$cartShippingMessage.removeClass("blank");
2209				$moreBottles.addClass("no-more");
2210				$qualified.addClass("success");
2211			}
2212
2213			$("#secure-checkout-update-cart").hide();
2214		}
2215	).done(function () {
2216		const isDiscounted = $("#enable_product_volume_discounts").val();
2217		if (isDiscounted === "TRUE") {
2218			updateDiscountPrice();
2219		}
2220	});
2221}
2222
2223function updateRequestedShipDate() {
2224	$.getJSON(`/${page}/select-requested-ship-date/${$(this).val()}/`, function (data) {});
2225}
2226
2227// Update Shipping Method -- event handler is currently commented out
2228// function updateShipping() {
2229//   const fields = [
2230//     "first_name",
2231//     "last_name",
2232//     "company",
2233//     "address",
2234//     "address_2",
2235//     "city",
2236//     "state",
2237//     "zip",
2238//     "phone",
2239//   ];
2240//   const ship_method = $("input:radio.shipping_method:checked");
2241//
2242//   // Not Pickup
2243//   if (!ship_method.hasClass("pickup")) {
2244//     $.each(fields, function (key, value) {
2245//       const $value = $(`#${value}`);
2246//       $value.val("");
2247//       $value.removeAttr("disabled");
2248//     });
2249//     $("#address-form-container").removeClass("hidden");
2250//     $("#shipping-method-description").addClass("hidden");
2251//     $("#shipping-address-form").attr("action", "/cart/add-address.html");
2252//     $.getJSON(`/${page}/update_shipping_method/${ship_method.val()}.json`, function (data) {});
2253//     return;
2254//   }
2255//
2256//   // Pickup Address
2257//   $.getJSON(`/${page}/update_shipping_method/${ship_method.val()}.json`, function (data) {
2258//     data = data.shipment.address;
2259//     $.each(fields, function (key, value) {
2260//       const $value = $(`#${value}`);
2261//       $value.attr("disabled", "disabled");
2262//       $value.val(data[value]);
2263//     });
2264//     const $shippingMethodDescription = $("#shipping-method-description");
2265//     const description = $(`#shipping-method-message-${ship_method.val()}`).html();
2266//     if (description) {
2267//       $shippingMethodDescription.html(description);
2268//       $shippingMethodDescription.removeClass("hidden");
2269//     }
2270// else {
2271//       $shippingMethodDescription.addClass("hidden");
2272//     }
2273//     $("#address-form-container").addClass("hidden");
2274//     $("#shipping-address-form").attr("action", "/cart/checkout.html");
2275//   });
2276// }
2277
2278// Updates quantity in wishlist
2279function updateWishQuantity(id, value) {
2280	if (value < 0) {
2281		value = 0;
2282	}
2283	$.getJSON(`/offering/update_wishlist/${id}/${value}/`, function (data) {});
2284}
2285
2286
2287/***/ }),
2288
2289/***/ "../FigureBaseResources/js/jquery.stuck.js":
2290/*!*************************************************!*\
2291  !*** ../FigureBaseResources/js/jquery.stuck.js ***!
2292  \*************************************************/
2293/***/ (function() {
2294
2295// Generated by CoffeeScript 1.7.1
2296(function() {
2297  (function($) {
2298    return $.fn.stuck = function(opts) {
2299      var Stuck;
2300      Stuck = (function() {
2301        Stuck.prototype.elements = [];
2302
2303        Stuck.prototype.resizing = false;
2304
2305        function Stuck(w, opts) {
2306          this.window = w;
2307          this.body = $("body");
2308          this.loadElements();
2309          this.calculateTopOffset();
2310          if (this.isIOS()) {
2311            this.body.on({
2312              touchmove: (function(_this) {
2313                return function() {
2314                  return _this.update();
2315                };
2316              })(this)
2317            });
2318          }
2319          this.window.scroll(((function(_this) {
2320            return function() {
2321              return _this.update();
2322            };
2323          })(this)));
2324          this.window.resize(((function(_this) {
2325            return function() {
2326              return _this.resize();
2327            };
2328          })(this)));
2329          this.update();
2330          this;
2331        }
2332
2333        Stuck.prototype.isIOS = function() {
2334          return this._isIOS || (this._isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent));
2335        };
2336
2337        Stuck.prototype.resize = function() {
2338          this.resizing = true;
2339          this.calculateTopOffset();
2340          this.update();
2341        };
2342
2343        Stuck.prototype.loadElements = function() {
2344          var classes, container, divs, i, name, node, release, spacer, top, x, y;
2345          divs = $(".stuck");
2346          i = divs.length;
2347          y = 0;
2348          while (i--) {
2349            node = divs.eq(y);
2350            y++;
2351            release = false;
2352            container = '';
2353            classes = node.attr("class").split(/\s+/);
2354            spacer = $("<div/>");
2355            x = classes.length;
2356            while (x--) {
2357              name = classes[x];
2358              if (name === "release") {
2359                release = true;
2360                container = node.closest(".release-container");
2361              }
2362              if (!(name === "stuck" || name === "release")) {
2363                spacer.addClass(name);
2364              }
2365            }
2366            spacer.height(node.outerHeight()).hide().css("background-color", "transparent").insertBefore(node);
2367            top = node.offset().top - parseInt(node.css('margin-top'));
2368            this.elements.push({
2369              node: node,
2370              spacer: spacer,
2371              top: top,
2372              top_offset: 0,
2373              fixed: false,
2374              release: release,
2375              container: container,
2376              contained: false
2377            });
2378          }
2379        };
2380
2381        Stuck.prototype.calculateTopOffset = function() {
2382          var collide_flag, collide_y, collision, el, elements, i, matrix, max_height, row_element, value, x, y, z;
2383          matrix = [];
2384          i = this.elements.length;
2385          x = 0;
2386          while (i--) {
2387            el = this.elements[x];
2388            x++;
2389            y = matrix.length;
2390            if (y === 0) {
2391              if (!el.release) {
2392                matrix.push([el]);
2393              }
2394            } else {
2395              collide_flag = false;
2396              while (y-- && !collide_flag) {
2397                max_height = 0;
2398                elements = matrix[y];
2399                z = elements.length;
2400                while (z--) {
2401                  row_element = elements[z];
2402                  collision = this.collide(row_element.node, el.node);
2403                  if (collision) {
2404                    value = row_element.top_offset + row_element.node.outerHeight(true);
2405                    if (value > max_height) {
2406                      max_height = value;
2407                    }
2408                    collide_flag = true;
2409                    if (matrix[y + 1] != null) {
2410                      collide_y = y + 1;
2411                    } else {
2412                      collide_y = -1;
2413                    }
2414                  } else {
2415                    if (y === 0) {
2416                      collide_y = 0;
2417                    }
2418                  }
2419                }
2420              }
2421              if (collide_flag) {
2422                el.top_offset = max_height;
2423                if (!el.release) {
2424                  if (collide_y >= 0) {
2425                    matrix[collide_y].push(el);
2426                  } else {
2427                    matrix.push([el]);
2428                  }
2429                }
2430              } else {
2431                el.top_offset = 0;
2432                if (!el.release) {
2433                  matrix[0].push(el);
2434                }
2435              }
2436            }
2437          }
2438        };
2439
2440        Stuck.prototype.collide = function(node1, node2) {
2441          var n1l, n2l;
2442          n1l = node1.offset().left;
2443          n2l = node2.offset().left;
2444          if (n1l === n2l) {
2445            return true;
2446          } else if (n1l < n2l) {
2447            if (Math.floor(n1l) + node1.width() > Math.ceil(n2l)) {
2448              return true;
2449            } else {
2450              return false;
2451            }
2452          } else {
2453            if (Math.floor(n2l) + node2.width() > Math.ceil(n1l)) {
2454              return true;
2455            } else {
2456              return false;
2457            }
2458          }
2459        };
2460
2461        Stuck.prototype.update = function() {
2462          var el, i, window_top;
2463          window_top = this.window.scrollTop();
2464          i = this.elements.length;
2465          while (i--) {
2466            el = this.elements[i];
2467            if (this.resizing) {
2468              if (el.fixed) {
2469                el.top = el.spacer.offset().top - parseInt(el.spacer.css('margin-top'));
2470              } else {
2471                el.top = el.node.offset().top - parseInt(el.node.css('margin-top'));
2472              }
2473              if (el.fixed) {
2474                el.node.css({
2475                  top: el.top_offset,
2476                  left: el.spacer.offset().left,
2477                  width: el.spacer.outerWidth()
2478                });
2479              }
2480              if (el.contained && window_top > (el.container.offset().top + el.container.height() - el.node.height() - el.top_offset)) {
2481                el.node.css({
2482                  position: "absolute",
2483                  top: el.container.height() - el.node.height(),
2484                  left: '',
2485                  width: '',
2486                  "z-index": ''
2487                });
2488              }
2489            }
2490            if (el.fixed && el.release && !el.contained && window_top > (el.container.offset().top + el.container.height() - el.node.height() - el.top_offset)) {
2491              el.contained = true;
2492              el.container.css("position", "relative");
2493              el.node.css({
2494                position: "absolute",
2495                top: el.container.height() - el.node.height(),
2496                left: '',
2497                width: '',
2498                "z-index": ''
2499              });
2500            }
2501            if (el.contained && window_top < (el.container.offset().top + el.container.height() - el.node.height() - el.top_offset)) {
2502              el.contained = false;
2503              el.container.css("position", '');
2504              el.node.css({
2505                position: "fixed",
2506                top: el.top_offset,
2507                left: el.spacer.offset().left,
2508                width: el.spacer.outerWidth(),
2509                "z-index": 99
2510              });
2511            }
2512            if (!el.fixed && window_top > el.top - el.top_offset) {
2513              el.fixed = true;
2514              el.spacer.show();
2515              el.node.css({
2516                position: "fixed",
2517                top: el.top_offset,
2518                left: el.spacer.offset().left,
2519                width: el.spacer.outerWidth(),
2520                "z-index": 99
2521              });
2522            }
2523            if (el.fixed && window_top < el.top - el.top_offset) {
2524              el.fixed = false;
2525              el.spacer.hide();
2526              el.node.css({
2527                position: "relative",
2528                top: '',
2529                left: '',
2530                width: '',
2531                "z-index": ''
2532              });
2533            }
2534          }
2535          this.resizing = false;
2536        };
2537
2538        Stuck.prototype.destroy = function() {
2539          var i;
2540          i = this.elements.length;
2541          while (i--) {
2542            this.elements[i].spacer.remove();
2543          }
2544          this.window.unbind('scroll');
2545          this.window.unbind('resize');
2546          this.window = this.elements = null;
2547        };
2548
2549        return Stuck;
2550
2551      })();
2552      return new Stuck(this, opts);
2553    };
2554  })(jQuery);
2555
2556}).call(this);
2557
2558
2559/***/ }),
2560
2561/***/ "../FigureBaseResources/js/offset.config.js":
2562/*!**************************************************!*\
2563  !*** ../FigureBaseResources/js/offset.config.js ***!
2564  \**************************************************/
2565/***/ (function() {
2566
2567/**
2568 * This config should be required before:
2569 *  require("offset-cantina") or require("offset-analytics")
2570 */
2571window.OFFSET = window.OFFSET || {};
2572window.OFFSET['offsetLocalCantina'] = {
2573    // Only config works with local cantina atm
2574    "config": "/cantina/config",
2575};
2576
2577
2578/***/ }),
2579
2580/***/ "../FigureBaseResources/js/site.js":
2581/*!*****************************************!*\
2582  !*** ../FigureBaseResources/js/site.js ***!
2583  \*****************************************/
2584/***/ (function() {
2585
2586const FIGURE = {};
2587
2588FIGURE.init = (function() {
2589	const $body = $("body");
2590	//Mobile Detection
2591	const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
2592	if (isMobile) {
2593		$body.addClass("mobile-device");
2594	}
2595	//Headroom
2596	$body.headroom({ offset: 100 });
2597
2598	//Footer measurer
2599	// const scaleFooter = function() {
2600	// 	const theFooterHeight = $(".site-footer").outerHeight();
2601	// 	const $bottomBorder = $(".bottom-border");
2602	// 	let bottomBorderHeight;
2603	// 	if ($bottomBorder.length) {
2604	// 		bottomBorderHeight = $bottomBorder.height();
2605	// 	}
2606	// 	else {
2607	// 		bottomBorderHeight = 20;
2608	// 	}
2609	// 	$body.css("padding-bottom", theFooterHeight + bottomBorderHeight);
2610	// 	//$(".site-footer").addClass("loaded");
2611	// 	$(".site-modal").css("margin-bottom", "0");
2612	// };
2613	// $(window).resize(function() {
2614	//   scaleFooter();
2615	// });
2616	// $(window).on('load', function () {
2617	//  scaleFooter();
2618	// });
2619
2620	$(".system-messages").slideDown();
2621	//Tooltips
2622	$('[data-toggle="tooltip"]').tooltip();
2623	$('[data-toggle="popover"]')
2624		.popover()
2625		.addClass("pointer");
2626	$(document).find("#figureMessageModal").on("shown.bs.modal", function (e) {
2627		console.log("2", e);
2628	});
2629
2630	return true;
2631})();
2632
2633FIGURE.loginReminder = (function() {
2634	const cookieValueSuper = $.cookie("loginReminder");
2635	if (cookieValueSuper === "reminded") {
2636		// already reminded
2637	}
2638	else {
2639		setTimeout(function() {
2640			$(".login-reminder").fadeIn();
2641		}, 3000);
2642		setTimeout(function() {
2643			$(".login-reminder").addClass("loaded");
2644		}, 3500);
2645		setTimeout(function() {
2646			$(".login-reminder").fadeOut();
2647		}, 11000);
2648		$.cookie("loginReminder", "reminded", { expires: 1, path: "/" });
2649	}
2650
2651	return true;
2652})();
2653
2654FIGURE.adaCollapse = (function() {
2655	$(".btn[data-toggle=\"collapse\"]").keyup(function() {
2656		const toExpand = $(this).attr("href");
2657		$(toExpand).addClass("show");
2658	});
2659
2660	return true;
2661})();
2662
2663FIGURE.modaler = (function() {
2664	$(document).on("show.bs.modal", ".ajaxmodal", function(e) {
2665		const $button = $(e.relatedTarget);
2666		const modalContent = $button.attr("href");
2667		const target = $button.attr("data-target");
2668		$(`${target} .modal-load-area`).load(`${modalContent}?pagetype=modal`, function() {
2669			if ($(this).find(".needs-validation").length) {
2670				FIGURE.validateForm(`${target} .modal-load-area`);
2671			}
2672		});
2673	});
2674
2675	$(document).on("shown.bs.modal", ".ajaxmodal", function(e) {
2676		const theRedirect = $(e.relatedTarget).attr("data-redirect");
2677		if (theRedirect !== "") {
2678			$("#redirectField").val(theRedirect);
2679		}
2680	});
2681
2682	$(document).on("hide.bs.modal", ".ajaxmodal", function() {
2683		$(".modal-load-area").html("");
2684	});
2685
2686	return true;
2687})();
2688
2689FIGURE.openModal = (function() {
2690	$(document).on("click", ".modal-trigger", function() {
2691		const $this = $(this);
2692		const theContent = $this.attr("href");
2693		const modalSize = $this.attr("data-modal-size");
2694		const $siteModal = $(".site-modal");
2695		const $siteModalContent = $(".site-modal-content");
2696
2697		$siteModal.attr("class", `site-modal ${modalSize}`);
2698		$siteModal.focus();
2699		$siteModal
2700			.removeAttr("aria-hidden")
2701			.removeAttr("tabindex");
2702		if ($this.hasClass("inline-modal")) {
2703			const inlineContent = $(theContent).html();
2704			$siteModalContent.html("");
2705			$siteModalContent.html(inlineContent);
2706			setTimeout(function() {
2707				$siteModal.scrollTop(0);
2708			}, 20);
2709		}
2710		else {
2711			$siteModalContent.load(`${theContent}?pagetype=modal`);
2712		}
2713		$("body")
2714			.addClass("modal-open")
2715			.addClass("modal-on-page");
2716		$(".site-mask").fadeIn();
2717
2718		return false;
2719	});
2720
2721	$(document).on(
2722		"click",
2723		".modal-close, .modal-close-generic, .page-mask, .modal-mask",
2724		function() {
2725			const $siteModal = $(".site-modal");
2726			const $siteModalContent = $(".site-modal-content");
2727
2728			$("body").removeClass("modal-open");
2729			$(".site-mask").fadeOut();
2730			$siteModal
2731				.attr("aria-hidden", "true")
2732				.attr("tabindex", "-1");
2733			setTimeout(function() {
2734				$("body").removeClass("modal-on-page");
2735				$siteModal.attr("class", "site-modal");
2736				$siteModalContent.html("");
2737			}, 500);
2738
2739			return false;
2740		}
2741	);
2742
2743	return true;
2744})();
2745
2746FIGURE.noDoubleClick = (function() {
2747	$(".btn-no-double").click(function() {
2748		setTimeout(function() {
2749			$(".btn-no-double")
2750				.attr("disabled", "disabled")
2751				.val("processing")
2752				.text("processing");
2753		}, 100);
2754	});
2755
2756	return true;
2757})();
2758
2759FIGURE.openNav = (function() {
2760	const $body = $("body");
2761	const $navMask = $(".nav-mask");
2762	const $siteNav = $(".site-nav");
2763	const $openNav = $(".open-nav");
2764	const mainContentSelector = "#maincontent a, #maincontent button, .site-footer a, .site-footer button, .site-logo, .account-links a, .skip-link";
2765
2766	$(document).on("click", ".open-nav", function() {
2767		if (!$(this).hasClass("disabled")) {
2768			if ($body.hasClass("nav-open")) {
2769				$body.removeClass("nav-open");
2770				$navMask.fadeOut();
2771				setTimeout(function() {
2772					$body.removeClass("nav-on-page");
2773				}, 500);
2774				$siteNav
2775					.attr("aria-hidden", "true")
2776					.attr("tabindex", "-1");
2777				$(mainContentSelector)
2778					.removeAttr("aria-hidden")
2779					.removeAttr("tabindex");
2780				$openNav.attr("aria-expanded", "false");
2781			}
2782			else {
2783				$body.addClass("nav-on-page");
2784				setTimeout(function() {
2785					$body.addClass("nav-open");
2786				}, 50);
2787				$navMask.fadeIn();
2788				$siteNav
2789					.removeAttr("aria-hidden")
2790					.removeAttr("tabindex");
2791				$(mainContentSelector)
2792					.attr("aria-hidden", "true")
2793					.attr("tabindex", "-1");
2794				$openNav.attr("aria-expanded", "true");
2795			}
2796
2797			return false;
2798		}
2799	});
2800
2801	$(document).on("click", ".nav-mask", function() {
2802		$body.removeClass("nav-open");
2803		$navMask.fadeOut();
2804		setTimeout(function() {
2805			$body.removeClass("nav-on-page");
2806		}, 500);
2807		$siteNav
2808			.attr("aria-hidden", "true")
2809			.attr("tabindex", "-1");
2810		$(mainContentSelector)
2811			.removeAttr("aria-hidden")
2812			.removeAttr("tabindex");
2813		$openNav.attr("aria-expanded", "false");
2814	});
2815
2816	return true;
2817})();
2818
2819FIGURE.singlepageBehavior = (function() {
2820	$(document).on("click", ".single-page .site-nav a", function() {
2821		const $body = $("body");
2822		$body.removeClass("nav-open");
2823		$(".nav-mask").fadeOut();
2824		setTimeout(function() {
2825			$body.removeClass("nav-on-page");
2826		}, 500);
2827		if (
2828			location.pathname.replace(/^\//, "") === this.pathname.replace(/^\//, "")
2829			&& location.hostname === this.hostname
2830		) {
2831			let target = $(this.hash);
2832			target = target.length ? target : $(`[name=${this.hash.slice(1)}]`);
2833			if (target.length) {
2834				$("html,body").animate(
2835					{
2836						scrollTop: target.offset().top //-200
2837					},
2838					1000
2839				);
2840			}
2841		}
2842	});
2843
2844	return true;
2845})();
2846
2847FIGURE.openNavID = (function() {
2848	const $body = $("body");
2849
2850	$(document).on("click", "#opennav", function() {
2851		if (!$(this).hasClass("disabled")) {
2852			if ($body.hasClass("nav-open")) {
2853				$body.removeClass("nav-open");
2854				setTimeout(function() {
2855					$body.removeClass("nav-on-page");
2856				}, 500);
2857			}
2858			else {
2859				$body
2860					.addClass("nav-open")
2861					.addClass("nav-on-page");
2862			}
2863			return false;
2864		}
2865	});
2866	$(document).on("click", ".nav-open #opennav", function() {
2867		$body.removeClass("nav-open");
2868		setTimeout(function() {
2869			$body.removeClass("nav-on-page");
2870		}, 500);
2871	});
2872
2873	return true;
2874})();
2875
2876FIGURE.closeEverything = (function() {
2877	$(document).keyup(function(e) {
2878		if (e.keyCode === 27) {
2879			const $body = $("body");
2880			const $siteModal = $(".site-modal");
2881			const $siteModalContent = $(".site-modal-content");
2882			const $siteNav = $(".site-nav");
2883			const mainContentSelector = "#maincontent a, #maincontent button, .site-footer a, .site-footer button, .site-logo, .account-links a, .skip-link";
2884
2885			$body.removeClass("nav-open");
2886			$(".site-mask").fadeOut();
2887			$(".nevermiss-modal").fadeOut();
2888			$(".nav-mask").fadeOut();
2889			$siteNav
2890				.attr("aria-hidden", "true")
2891				.attr("tabindex", "-1");
2892			$siteModal
2893				.attr("aria-hidden", "true")
2894				.attr("tabindex", "-1");
2895			$(mainContentSelector)
2896				.removeAttr("aria-hidden")
2897				.removeAttr("tabindex");
2898			$(".open-nav").attr("aria-expanded", "false");
2899			setTimeout(function() {
2900				$body.removeClass("nav-on-page");
2901			}, 500);
2902			$body.removeClass("modal-open");
2903			setTimeout(function() {
2904				$body.removeClass("modal-on-page");
2905				$siteModal.attr("class", "site-modal");
2906				$siteModalContent.html("");
2907			}, 500);
2908		}
2909	});
2910
2911	return true;
2912})();
2913
2914FIGURE.banners = (function() {
2915	$(document).on("click", ".show-top-promo", function() {
2916		$("body").toggleClass("promo-open");
2917		return false;
2918	});
2919
2920	return true;
2921})();
2922
2923FIGURE.textSwap = (function() {
2924	$(document).on("click", ".btn-swap-text", function() {
2925		const $this = $(this);
2926		const newText = $this.attr("data-new-text");
2927		const originalText = $this.attr("data-original-text");
2928		if ($this.hasClass("activated")) {
2929			$this.text(originalText);
2930			$this
2931				.removeClass("activated")
2932				.addClass("killscroll");
2933		}
2934		else {
2935			$this.text(newText);
2936			$this
2937				.addClass("activated")
2938				.removeClass("killscroll");
2939		}
2940	});
2941
2942	return true;
2943})();
2944
2945FIGURE.validateForm = (function() {
2946	"use strict";
2947
2948	function validateForm(selector) {
2949		const root = selector
2950			? document.querySelector(selector)
2951			: document;
2952
2953		if (!root) {
2954			return;
2955		}
2956
2957		// Fetch all the forms we want to apply custom Bootstrap validation styles to
2958		const forms = root.getElementsByClassName("needs-validation");
2959		// Loop over them and prevent submission
2960		Array.prototype.filter.call(forms, function(form) {
2961			if (form.dataset.validationEventAdded === "true") {
2962				return;
2963			}
2964
2965			form.dataset.validationEventAdded = "true";
2966			form.addEventListener(
2967				"submit",
2968				function(event) {
2969					event.preventDefault();
2970					event.stopPropagation();
2971					if (form.checkValidity() === false) {
2972						$(".needs-validation").addClass("not-yet-sparky");
2973					}
2974					else {
2975						$(".needs-validation").removeClass("not-yet-sparky");
2976						form.submit();
2977					}
2978
2979					form.classList.add("was-validated");
2980				},
2981				false
2982			);
2983		});
2984	}
2985
2986	window.addEventListener(
2987		"load",
2988		function() {
2989			validateForm();
2990		},
2991		false
2992	);
2993
2994	return validateForm;
2995})();
2996
2997// .trim-text for text inputs
2998/**
2999* Adding by Zachary Stovall on 04-10-2024
3000* This is to remove any white space from the beginning and end of the input field
3001* Designed for Quilceda Creek home page but can be used anywhere by adding the trim-text tag
3002*
3003* */
3004FIGURE.trimText = (function() {
3005	$(document).on("blur", ".trim-text", function() {
3006		const $this = $(this);
3007		const trimText = $this.val().trim();
3008		$this.val(trimText);
3009	});
3010
3011	return true;
3012})();
3013
3014FIGURE.validateEmail = (function() {
3015	$(document).on("blur", ".validate-email", function() {
3016		const $this = $(this);
3017		const sEmail = $this.val();
3018		const $formGroup = $this.parents(".form-group");
3019		const $form = $this.parents("form");
3020
3021		if (validateEmail(sEmail)) {
3022			$formGroup.removeClass("form-error");
3023			$form
3024				.find("button[type=submit]")
3025				.removeAttr("disabled");
3026			if (!$("#validEmail").length) {
3027				$formGroup.append(
3028					'<div class="positive-feedback" id="validEmail">Email is valid</div>'
3029				);
3030			}
3031		}
3032		else {
3033			$formGroup.addClass("form-error");
3034			$form
3035				.find("button[type=submit]")
3036				.attr("disabled", "disabled");
3037			$formGroup
3038				.find("#validEmail")
3039				.remove();
3040		}
3041	});
3042	function validateEmail(sEmail) {
3043		const filter = /^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
3044		return filter.test(sEmail);
3045	}
3046
3047	return true;
3048})();
3049
3050/*FIGURE.euroCookie = (function() {
3051	const defaultButtonTxt = $("#cookie_accept").text();
3052	$("#cookie_enable").change(function() {
3053		if (this.checked) {
3054			$("#cookie_accept")
3055				.addClass("die-cookie")
3056				.removeClass("disabled")
3057				.removeClass("btn-outline-primary")
3058				.addClass("btn-primary")
3059				.text("Accept & Close");
3060		}
3061		else {
3062			$("#cookie_accept")
3063				.removeClass("die-cookie")
3064				.addClass("disabled")
3065				.addClass("btn-outline-primary")
3066				.removeClass("btn-primary")
3067				.text(defaultButtonTxt);
3068		}
3069	});
3070
3071	$(document).on("click", ".die-cookie", function() {
3072		$.cookie("euroWarning", "nomnomnom", { expires: 1825, path: "/" });
3073		$("#euroCookie").fadeOut();
3074		$('body').removeClass('no-cookie');
3075		return false;
3076	});
3077	const cookieValue = $.cookie("euroWarning");
3078	if (cookieValue === "nomnomnom") {
3079		return;
3080	}
3081	else {
3082		$("#euroCookie").fadeIn();
3083		$('body').addClass('no-cookie');
3084	}
3085})();*/
3086
3087FIGURE.stuck = (function() {
3088	$(window).stuck();
3089	$(document).ready(function() {
3090		//stuck
3091		$(window).stuck();
3092		$(window).scroll(function() {
3093			$(".super-stuck").each(function() {
3094				const $this = $(this);
3095				if ($this.css("position") === "fixed") {
3096					$this.addClass("show-more");
3097				}
3098				else {
3099					$this.removeClass("show-more");
3100				}
3101			});
3102		});
3103	});
3104
3105	return true;
3106})();
3107
3108FIGURE.cartCount = (function() {
3109	// cart count
3110	const doCartCount = function() {
3111		$.getJSON("/cart/item-count.json", function(data) {
3112			console.log(data);
3113			const $cartLink = $(".cart-link");
3114			const $face = $(".face");
3115
3116			if (data > 0) {
3117				$("#cartcount").html(
3118					` <span class="badge badge-pill badge-primary">${data}</span>`
3119				);
3120				$("#cartcountnav").html(
3121					` <span class="badge badge-pill badge-primary">${data}</span>`
3122				);
3123				$cartLink.removeClass("hide-cart");
3124				$face.addClass("happy");
3125				$(".cart-link.check-cart").attr("href", "/cart/");
3126			}
3127			else {
3128				$("#cartcount").html("");
3129				$("#cartcountnav").html("");
3130				$cartLink.addClass("hide-cart");
3131				$face.removeClass("happy");
3132			}
3133			$face.addClass("show");
3134		});
3135	};
3136	if ($(".cart-link").hasClass("check-cart")) {
3137		doCartCount();
3138	}
3139
3140	return true;
3141})();
3142
3143FIGURE.refer = (function() {
3144	$(".refer-radio").change(function() {
3145		const $this = $(this);
3146		const textInput = $this.attr("data-the-text");
3147		if ($this.is(":checked")) {
3148			$(".referrer-text")
3149				.removeClass("current")
3150				.addClass("d-none")
3151				.val("")
3152				.attr("disabled", "disabled");
3153			$(textInput)
3154				.addClass("current")
3155				.removeClass("d-none")
3156				.focus()
3157				.removeAttr("disabled");
3158		}
3159	});
3160
3161	return true;
3162})();
3163
3164FIGURE.scrollTo = (function() {
3165	$(document).on("click", ".scrollto", function() {
3166		const $this = $(this);
3167		if (!$this.hasClass("killscroll")) {
3168			let target = '';
3169			let theScroll = '';
3170			const scrollOffset = $this.attr("data-offset");
3171			if (
3172				location.hostname === this.hostname
3173				&& this.pathname
3174				&& location.pathname.replace(/^\//, "") === this.pathname.replace(/^\//, "")
3175			) {
3176				target = $(this.hash);
3177				target = target.length
3178					? target
3179					: $(`[name=${this.hash.slice(1)}]`);
3180			}
3181			else if ($($this.data().target).length) {
3182				target = $($this.data().target);
3183			}
3184			if (target) {
3185				const fadeIn = $(target).hasClass("tab-pane") || $(target).hasClass("fade");
3186				const scrollDelay = !!$this.attr("data-delay") ? parseFloat($this.attr("data-delay")) : 200;
3187				setTimeout(() => {
3188					if (scrollOffset > 0) {
3189						theScroll = $(document).find(target[0]).offset().top - scrollOffset;
3190					}
3191					else {
3192						theScroll = $(document).find(target[0]).offset().top;
3193					}
3194					if (target.length) {
3195						$("html,body").animate({
3196							scrollTop: theScroll
3197						}, 1000);
3198					}
3199				}, fadeIn ? scrollDelay : 0);
3200			}
3201		}
3202		return false;
3203	});
3204
3205	return true;
3206})();
3207
3208FIGURE.scrollToTrade = (function() {
3209	$(document).on("click", ".scrolltotrade", function() {
3210		if (
3211			location.pathname.replace(/^\//, "") === this.pathname.replace(/^\//, "")
3212			&& location.hostname === this.hostname
3213		) {
3214			let target = $(this.hash);
3215			const scrollOffset = $(this).attr("data-offset");
3216			target = target.length
3217				? target
3218				: $(`[name=${this.hash.slice(1)}]`);
3219			let theScroll;
3220			if (scrollOffset > 0) {
3221				theScroll = target.offset().top - scrollOffset;
3222			}
3223			else {
3224				theScroll = target.offset().top;
3225			}
3226			if (target.length) {
3227				$("html,body").animate(
3228					{
3229						scrollTop: theScroll
3230					},
3231					1000
3232				);
3233			}
3234		}
3235	});
3236	$(window).scroll(function() {
3237		$(".trade-section").each(function() {
3238			const $this = $(this);
3239			if ($this.is(":in-viewport(500)")) {
3240				const theNav = $this.attr("data-nav");
3241				$(".trade-nav a").removeClass("active");
3242				$(theNav).addClass("active");
3243			}
3244		});
3245	});
3246
3247	return true;
3248})();
3249
3250FIGURE.formMonkey = (function() {
3251	// Object of Countries that don't have Postal Code
3252	const noPostalCode = {
3253		AO: true, AG: true, AW: true, AC: true, BS: true, BZ: true, BJ: true,
3254		BO: true, BQ: true, BW: true, BF: true, BI: true, CM: true, CF: true,
3255		KM: true, CG: true, CD: true, CK: true, CI: true, CW: true, DJ: true,
3256		DM: true, TL: true, GQ: true, ER: true, FJ: true, TF: true, GA: true,
3257		GM: true, GH: true, GD: true, GY: true, HM: true, HK: true, KI: true,
3258		LY: true, MO: true, MW: true, ML: true, MR: true, NR: true, AN: true,
3259		NU: true, KP: true, QA: true, RW: true, KN: true, ST: true, SC: true,
3260		SL: true, SB: true, SR: true, SY: true, TG: true, TK: true, TO: true,
3261		TV: true, UG: true, AE: true, VU: true, YE: true, ZW: true
3262	};
3263
3264	// Template function for Address Form
3265	function handleCountrySelect(countryCode) {
3266		const $stateText = $(".state-text");
3267		const $stateSelect = $(".state-select");
3268		const $zipCol = $(".zip-col");
3269		const $zip = $("#zip");
3270
3271		//Removes state dropdown if not MURCA!
3272		if (countryCode === "US") {
3273			$(".murca").show();
3274			$(".not-murca").hide();
3275			$stateText
3276				.hide()
3277				.removeAttr("required")
3278				.attr("id", "nothing")
3279				.attr("name", "nothing");
3280			$stateSelect
3281				.show()
3282				.attr("required", "true")
3283				.attr("id", "state")
3284				.attr("name", "data[state]");
3285		}
3286		else {
3287			$(".murca").hide();
3288			$(".not-murca").show();
3289			$stateSelect
3290				.hide()
3291				.removeAttr("required")
3292				.attr("id", "nothing")
3293				.attr("name", "nothing");
3294			$stateText
3295				.show()
3296				.attr("required", "true")
3297				.attr("id", "state")
3298				.attr("name", "data[state]");
3299		}
3300		//Removes zip code field from countries without a postal code
3301		if (noPostalCode[countryCode]) {
3302			$zipCol.hide();
3303			$zip.removeAttr("required");
3304		}
3305		else {
3306			$zipCol.show();
3307			$zip.attr("required", "true");
3308		}
3309	}
3310
3311	// Checks for any input that contains id of country
3312	$(document).on("change", '[id*="country"]', function() {
3313		const thisVal = $(this).val();
3314
3315		try {
3316			handleCountrySelect(thisVal);
3317			// Reset input fields
3318			$('[id*="company"]').val("");
3319			$('[id*="address"]').val("");
3320			$('[id*="city"]').val("");
3321			$('[id*="state"]').val("");
3322			$('[id*="zip"]').val("");
3323		} catch (e) {}
3324	});
3325
3326	// On New Address
3327	$("a[href=\"#newaddress\"]").on("click", function() {
3328		const countryVal = $("#newaddress")
3329			.find("[id^=\"country\"]")
3330			.val();
3331		handleCountrySelect(countryVal);
3332	});
3333
3334	$(document).ready(function() {
3335		// On page load, if a country field exists, and a non-US country is selected, hide the state dropdown
3336		const countryVal = $('[id*="country"]').val();
3337		if (countryVal && countryVal !== "US") {
3338			handleCountrySelect(countryVal);
3339		}
3340
3341		// On Modal open check for default values
3342		$('[id*="figureModal"]').on("shown.bs.modal", function(e) {
3343			$(document).ajaxComplete(function() {
3344				try {
3345					const countryVal = $(`#${e.target.id}`)
3346						.find('[id^="country"]')
3347						.val();
3348					if (!countryVal) return;
3349					handleCountrySelect(countryVal);
3350				} catch (e) {}
3351			});
3352		});
3353	});
3354
3355	return true;
3356})();
3357
3358FIGURE.modularForm = (function() {
3359	$(".modular-form-fields .interest-radio").change(function() {
3360		const $requireMe = $(".require-me");
3361		const $extendedForm = $(".modular-form-fields .extended-form");
3362		const $defaultForm = $(".modular-form-fields .default-form");
3363
3364		if ($(".modular-form-fields .interest-radio.show-everything").is(":checked")) {
3365			$(".swap-text .alt-text").hide();
3366			$(".swap-text .default-text").show();
3367			$requireMe.removeAttr("required");
3368			$extendedForm
3369				.hide()
3370				.show();
3371			$defaultForm
3372				.hide()
3373				.show();
3374			$requireMe.attr("required", "required");
3375		}
3376		if ($(".modular-form-fields .interest-radio.show-default").is(":checked")) {
3377			$(".swap-text .default-text").hide();
3378			$(".swap-text .alt-text").show();
3379			$requireMe.removeAttr("required");
3380			$extendedForm.hide();
3381			$defaultForm
3382				.hide()
3383				.show();
3384			$(".default-form .require-me").attr("required", "required");
3385			$(".first-name-copy").val("");
3386			$(".last-name-copy").val("");
3387			$(".email-copy").val("");
3388			$("#copyinfo").prop("checked", false);
3389		}
3390	});
3391	$("#copyinfo").change(function() {
3392		if ($(this).is(":checked")) {
3393			const firstname = $(".first-name-base").val();
3394			$(".first-name-copy").val(firstname);
3395			const lastname = $(".last-name-base").val();
3396			$(".last-name-copy").val(lastname);
3397			const email = $(".email-base").val();
3398			$(".email-copy").val(email);
3399		}
3400		else {
3401			$(".first-name-copy").val("");
3402			$(".last-name-copy").val("");
3403			$(".email-copy").val("");
3404		}
3405	});
3406
3407	return true;
3408})();
3409
3410FIGURE.refer = (function() {
3411	if (window.location.hash) {
3412		const hash = window.location.hash.substr(1);
3413		$("#referral_note").val(hash);
3414	}
3415
3416	return true;
3417})();
3418
3419FIGURE.owlHack = (function() {
3420	setTimeout(function() {
3421		$(".owl-dot").each(function() {
3422			const $this = $(this);
3423			$this.attr("aria-label", "advance to next pane");
3424		});
3425	}, 3000);
3426
3427	return true;
3428})();
3429
3430FIGURE.styleGuideColor = function() {
3431	$(".style-color").each((i, el) => {
3432		const color = $(el).css("background-color");
3433		const hexer = {
3434			0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9,
3435			10: "A", 11: "B", 12: "C", 13: "D", 14: "E", 15: "F"
3436		};
3437		const colorArr1 = color.split("(")[1];
3438		const colorArr2 = colorArr1.split(")")[0];
3439		const colorArr = colorArr2.split(",").map(color => color.trim());
3440		let hexColor = "#";
3441		for (let i = 0; i < 3; i++) {
3442			const colorHex = parseFloat(colorArr[i]) / 16;
3443			const colorHex1 = Math.floor(colorHex);
3444			let colorHex2 = 0;
3445			if (colorHex !== colorHex1) {
3446				colorHex2 = parseFloat(`.${(colorHex + "").split(".")[1]}`) * 16;
3447			}
3448			hexColor += hexer[colorHex1];
3449			hexColor += hexer[colorHex2];
3450		}
3451		$(el).siblings(".style-color-hex").text(hexColor);
3452	});
3453
3454	return true;
3455}();
3456
3457FIGURE.specialMessageModal = function () {
3458	const $figureMessageModal = $("#figureMessageModal");
3459	if ($figureMessageModal.length) {
3460		const specialMessageModal = $.cookie("specialmessage");
3461		if (specialMessageModal === "read") {
3462			return;
3463		}
3464		else {
3465			setTimeout(function () {
3466				$figureMessageModal.modal();
3467			}, 2000);
3468		}
3469		$(document).on("hide.bs.modal", "#figureMessageModal", function () {
3470			$.cookie("specialmessage", "read", { expires: 30, path: "/" });
3471		});
3472		$(document).on("click", "#figureMessageModal a", function () {
3473			$.cookie("specialmessage", "read", { expires: 30, path: "/" });
3474		});
3475		$(document).on("click", "#figureMessageModal button", function () {
3476			$.cookie("specialmessage", "read", { expires: 30, path: "/" });
3477		});
3478	}
3479	return true;
3480};
3481
3482FIGURE.ageGateModal = function () {
3483	$(window).on("load", function () {
3484		const $offsetAgeGate = $("#offsetAgeGate");
3485		if ($offsetAgeGate.length) {
3486			const currentYear = new Date().getFullYear();
3487			const leapYears = [];
3488			for (let year = currentYear; year >= currentYear - 150; year--) {
3489				if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
3490					leapYears.push(year);
3491				}
3492			}
3493			const $verifyMonth = $("#verify-month");
3494			const $verifyDay = $("#verify-day");
3495			const $verifyYear = $("#verify-year");
3496			const age = {
3497				month: $verifyMonth.val(),
3498				day: $verifyDay.val(),
3499				year: $verifyYear.val()
3500			};
3501
3502			if ($.cookie("ageGateCookie") !== "oldEnough") {
3503				if ($(".page-pages-styleguide").length === 0) {
3504					$offsetAgeGate.modal("show");
3505				}
3506				initAge();
3507			}
3508			else {
3509				FIGURE.specialMessageModal();
3510			}
3511
3512			// starts the age verification process
3513			function initAge() {
3514				$verifyMonth.on("change", function (e) {
3515					const month = $(e.target);
3516					if (["4", "6", "9", "11"].includes(month.val())) {
3517						$verifyDay.find("option[value=\"31\"]").remove();
3518					}
3519					else if (month.val() === "2") {
3520						if (!leapYears.includes(parseFloat($verifyYear.val()))) {
3521							$verifyDay.find("option[value=\"29\"]").remove();
3522						}
3523						$verifyDay.find("option[value=\"30\"]").remove();
3524						$verifyDay.find("option[value=\"31\"]").remove();
3525					}
3526					else {
3527						if (!$verifyDay.find("option[value=\"29\"]").length) {
3528							$verifyDay.append("<option value=\"29\">29</option>");
3529						}
3530						if (!$verifyDay.find("option[value=\"30\"]").length) {
3531							$verifyDay.append("<option value=\"30\">30</option>");
3532						}
3533						if (!$verifyDay.find("option[value=\"31\"]").length) {
3534							$verifyDay.append("<option value=\"31\">31</option>");
3535						}
3536					}
3537					age.month = month.val();
3538				});
3539				$verifyYear.on("change", function (e) {
3540					const year = $(e.target);
3541					if (
3542						leapYears.includes(parseFloat(year.val()))
3543						&& $verifyMonth.val() === "2"
3544					) {
3545						if (!$verifyDay.find("option[value=\"29\"]").length) {
3546							$verifyDay.append("<option value=\"29\">29</option>");
3547						}
3548					}
3549					age.year = year.val();
3550				});
3551				$verifyDay.on("change", function (e) {
3552					age.day = $(e.target).val();
3553				});
3554				$("#js-age-submit").on("click", function () {
3555					age.month = $verifyMonth.val();
3556					age.day = $verifyDay.val();
3557					age.year = $verifyYear.val();
3558					checkDate();
3559				});
3560			}
3561
3562			// Check to see if user entered a valid date...
3563			function checkDate() {
3564				if (age.month === "none" || age.day === "none" || age.year === "none") {
3565					// Fade in the error...
3566					$("#modal-error").css("visibility", "visible").hide().fadeIn("slow");
3567
3568					// changes the background color of the select if invalid
3569					if (age.month === "none") {
3570						$verifyMonth.css("background", "rgba(223,32,44,0.5)");
3571						// Look for change of value and change background color when valid
3572						$verifyMonth.on("change", function () {
3573							if ($verifyMonth.val() === "none") {
3574								$verifyMonth.css("background", "rgba(223,32,44,0.5)");
3575							}
3576							else {
3577								$verifyMonth.css("background", "white");
3578							}
3579						});
3580					}
3581
3582					// changes the background color of the select if invalid
3583					if (age.day === "none") {
3584						$verifyDay.css("background", "rgba(223,32,44,0.5)");
3585						// Look for change of value and change background color when valid
3586						$verifyDay.on("change", function () {
3587							if ($verifyDay.val() === "none") {
3588								$verifyDay.css("background", "rgba(223,32,44,0.5)");
3589							}
3590							else {
3591								$verifyDay.css("background", "white");
3592							}
3593						});
3594					}
3595
3596					// changes the background color of the select if invalid
3597					if (age.year === "none") {
3598						$verifyYear.css("background", "rgba(223,32,44,0.5)");
3599						// Look for change of value and change background color when valid
3600						$verifyYear.on("change", function () {
3601							if ($verifyYear.val() === "none") {
3602								$verifyYear.css("background", "rgba(223,32,44,0.5)");
3603							}
3604							else {
3605								$verifyYear.css("background", "white");
3606							}
3607						});
3608					}
3609				}
3610				else {
3611					oldEnough();
3612				}
3613			}
3614
3615			// Compares age entered with today's date 21 years ago...
3616			function oldEnough() {
3617				const birthDate = new Date(`${age.year}-${age.month}-${age.day}`);
3618				const currentDate = new Date();
3619				const timeDiff = currentDate.getTime() - birthDate.getTime();
3620				const timeByYearsDiff = timeDiff / (1000 * 60 * 60 * 24 * 365.25);
3621				if (parseFloat(timeByYearsDiff) >= 21) {
3622					$("#age-error-message").addClass("d-none");
3623					$.cookie("ageGateCookie", "oldEnough", { expires: 365, path: "/" });
3624					// saving age info for implementation in signup forms
3625					$.cookie("offsetBirthDay", parseInt(age.day), { expires: 14, path: "/" });
3626					$.cookie("offsetBirthMonth", age.month, { expires: 14, path: "/" });
3627					$.cookie("offsetBirthYear", age.year, { expires: 14, path: "/" });
3628					$offsetAgeGate.modal("hide");
3629					FIGURE.signUpAgeCookieFill();
3630					FIGURE.specialMessageModal();
3631				}
3632				else {
3633					$("#age-error-message").removeClass("d-none");
3634				}
3635			}
3636		}
3637		else {
3638			FIGURE.specialMessageModal();
3639		}
3640	});
3641
3642	return true;
3643}();
3644
3645FIGURE.signUpAgeCookieFill = function () {
3646	if ($("#signUp").length) {
3647		if ($.cookie("offsetBirthDay") && $.cookie("offsetBirthMonth") && $.cookie("offsetBirthYear")) {
3648			const month = $.cookie("offsetBirthMonth").toString();
3649			const monthInput = $("select[id=\"data\\[birth_month\\]\"]");
3650			const dayInput = $("select[id=\"data\\[birth_day\\]\"]");
3651			const yearInput = $("select[id=\"data\\[birth_year\\]\"]");
3652			monthInput.val(month);
3653			dayInput.val(parseInt($.cookie("offsetBirthDay")));
3654			yearInput.val($.cookie("offsetBirthYear"));
3655		}
3656	}
3657};
3658FIGURE.signUpAgeCookieFill();
3659
3660FIGURE.SignUpPopulate = function() {
3661	if ($(".page-signup-dynamic").length || $(".page-signup-index").length) {
3662		const params = {};
3663		const queryString = window.location.search.substring(1); // Get the part after "?"
3664		const paramPairs = queryString.split("&"); // Split into key-value pairs
3665
3666		paramPairs.forEach(pair => {
3667			const [key, value] = pair.split("=");
3668			if (key) params[decodeURIComponent(key)] = decodeURIComponent(value || "");
3669		});
3670
3671		// Loop through each parameter and populate the form field if it exists
3672		$.each(params, function (key, value) {
3673			let set = { [key]: value };
3674			if (["name", "fullname", "full_name"].includes(key)) {
3675				// Split the name into first and last
3676				const firstLast = value.split(/ (.+)/);
3677				set = {
3678					first_name: firstLast[0],
3679					last_name: firstLast[1] || ""
3680				};
3681			}
3682			else if (["email", "email_address", "emailaddress"].includes(key)) {
3683				set = { username: value };
3684			}
3685			Object.keys(set).forEach(setKey => {
3686				const field = $(`[name="data[${setKey}]"]`);
3687				if (field.length) {
3688					field.val(set[setKey]);
3689				}
3690			});
3691		});
3692	}
3693
3694	return true;
3695}();
3696
3697/**
3698* Controls for the mobile horizontal warning modal
3699*/
3700FIGURE.mobileHorizontalWarningModal = function () {
3701	let warningModal = $(document).find("#mobileHorizontalWarning");
3702	$(window).on("load resize", function () {
3703		warningModal = $(document).find("#mobileHorizontalWarning");
3704		const isNarrowScreen = (window.innerWidth <= 767 && window.innerHeight <= 1200)
3705			|| (window.innerHeight <= 767 && window.innerWidth <= 1200);
3706		const isLandscape = window.innerWidth > window.innerHeight;
3707		const isTouchDevice = "ontouchstart" in window || navigator.maxTouchPoints > 0;
3708		const isMobileUA = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
3709		if (warningModal.length) {
3710			if (isNarrowScreen && isLandscape && isTouchDevice && isMobileUA) {
3711				if ($.cookie("mobileHorizontalWarning") !== "read") {
3712					warningModal.modal("show");
3713					$.cookie("mobileHorizontalWarning", "read", { expires: 1, path: "/" });
3714					setTimeout(() => {
3715						warningModal.modal("hide");
3716					}, 10000);
3717				}
3718			}
3719			else {
3720				warningModal.modal("hide");
3721			}
3722		}
3723	});
3724
3725	return true;
3726}();
3727
3728/**
3729* This is a function to show a second input after an option is selected on a sign up page
3730*/
3731FIGURE.referralSelect = function() {
3732	const $referralSourceSelect = $("#referralSourceSelect");
3733	const $referralText = $("#referraltext");
3734	if ($referralSourceSelect.length && $referralText.length) {
3735		$referralSourceSelect.change(function() {
3736			const theText = $(this).find(":selected").attr("data-message");
3737			if (!theText) {
3738				$referralText.addClass("d-none").attr("placeholder", "").attr("disabled", "disabled");
3739			}
3740			else {
3741				$referralText.removeClass("d-none").attr("placeholder", theText).removeAttr("disabled");
3742			}
3743		});
3744	}
3745
3746	return true;
3747}();
3748
3749/** Giftcard **/
3750
3751FIGURE.giftCardValue = function(amount) {
3752	const dollars = amount;
3753	$(".gift-card-value-input").val(dollars);
3754	$(".gift-card-value").text(dollars);
3755};
3756
3757FIGURE.formatNumber = function(n) {
3758	// format number 1000000 to 1,234,567
3759	return n.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
3760};
3761
3762FIGURE.formatCurrency = function(input) {
3763	let input_val = input.val();
3764	if (input_val === "") {
3765		return;
3766	}
3767	// original length
3768	const original_len = input_val.length;
3769	// initial caret position
3770	let caret_pos = input.prop("selectionStart");
3771	// check for decimal
3772	let cleanNum = input_val.replace(".", "");
3773	cleanNum = cleanNum.replace(/[^0-9]/g, "");
3774	cleanNum = cleanNum.replace(/^0+/, "");
3775	input_val = FIGURE.formatNumber(cleanNum);
3776	// send updated string to input
3777	input.val(input_val);
3778	FIGURE.giftCardValue(input_val);
3779	// put caret back in the right position
3780	const updated_len = input_val.length;
3781	caret_pos = updated_len - original_len + caret_pos;
3782	input[0].setSelectionRange(caret_pos, caret_pos);
3783};
3784
3785FIGURE.giftCards = function () {
3786	if ($(".page-giftcard-index").length) {
3787		const defaultVal = $(".gift-card-value-input").val();
3788		const $giftCardValueOptions = $(".gift-card-value-options");
3789		const option1 = $giftCardValueOptions.data("option-1");
3790		const option2 = $giftCardValueOptions.data("option-2");
3791		const option3 = $giftCardValueOptions.data("option-3");
3792		const options = [option1, option2, option3];
3793		const stripNumbers = (num) => {
3794			return parseFloat(num.replace("$", "").replace(",", ""));
3795		};
3796		const $giftCardValueBtnSelect = $(".gift-card-value-btn-select");
3797		$giftCardValueBtnSelect.removeClass("active");
3798		if (option1 && option2 && option3) {
3799			let isDefault = false;
3800			options.forEach((option) => {
3801				if (stripNumbers(defaultVal) === stripNumbers(option)) {
3802					$giftCardValueBtnSelect.each((_index, sel) => {
3803						const $giftCardValueBtnSelect = $(sel);
3804						if (stripNumbers($giftCardValueBtnSelect.val()) === stripNumbers(option)) {
3805							$giftCardValueBtnSelect.addClass("active");
3806							$(".gift-card-value-btn-custom").removeClass("active");
3807							isDefault = true;
3808						}
3809					});
3810				}
3811				else {
3812					$giftCardValueBtnSelect.each((_index, sel) => {
3813						const $giftCardValueBtnSelect = $(sel);
3814						if (stripNumbers($giftCardValueBtnSelect.val()) === stripNumbers(option)) {
3815							$giftCardValueBtnSelect.removeClass("active");
3816						}
3817					});
3818				}
3819			});
3820			if (!isDefault) {
3821				$giftCardValueBtnSelect.removeClass("active");
3822				const $giftCardValueBtnCustom = $(".gift-card-value-btn-custom");
3823				$giftCardValueBtnCustom.addClass("active");
3824				$giftCardValueBtnCustom.text(defaultVal);
3825			}
3826			$(document).on("click", ".gift-card-value-btn-select", function () {
3827				$(".gift-card-value-custom-input").removeClass("active");
3828				$(".gift-card-value-btn-custom").removeClass("active");
3829				$giftCardValueBtnSelect.removeClass("active");
3830				$(this).addClass("active");
3831				const thisValue = $(this).val();
3832				FIGURE.giftCardValue(thisValue);
3833				$("#collapseCustom").collapse("hide");
3834			});
3835
3836			$(document).on("click", ".gift-card-value-btn-custom", function () {
3837				$giftCardValueBtnSelect.removeClass("active");
3838				const $giftCardValueBtnCustom = $(".gift-card-value-btn-custom");
3839				$giftCardValueBtnCustom.addClass("active");
3840				const $customAmount = $("#custom_amount");
3841				const value = $customAmount.val();
3842				const rawValue = parseFloat(value.replace("$", "").replace(",", ""));
3843				if (rawValue > 0) {
3844					FIGURE.giftCardValue(`$${value}`);
3845				}
3846				$customAmount.focus();
3847			});
3848		}
3849		$("input[data-type=\"currency\"]").on({
3850			keydown: function (e) {
3851				if (e.key === "Enter") {
3852					e.preventDefault();
3853				}
3854			},
3855			keyup: function (e) {
3856				FIGURE.formatCurrency($(this));
3857				if (e.key === "Enter") {
3858					$(this).trigger("blur");
3859				}
3860			},
3861			blur: function () {
3862				const $this = $(this);
3863				if ($this.hasClass("gift-card-value-custom-input")) {
3864					const val = parseFloat($this.val().replace("$", "").replace(",", "").replace(/^0+/, ""));
3865					FIGURE.formatCurrency($this);
3866					if (val === 0 || isNaN(val)) {
3867						const $giftCardValueBtnCustom = $(".gift-card-value-btn-custom");
3868						$giftCardValueBtnCustom.removeClass("active");
3869						$giftCardValueBtnCustom.text("Custom");
3870						$($giftCardValueBtnSelect[0]).trigger("click");
3871					}
3872					else if ($this.val()) {
3873						$giftCardValueBtnSelect.removeClass("active");
3874						$(".gift-card-value-custom-input").addClass("active");
3875						if (val > 2500) {
3876							$this.val("$2,500");
3877							FIGURE.giftCardValue("$2,500");
3878						}
3879						else if (val < 25) {
3880							$this.val("$25");
3881							FIGURE.giftCardValue("$25");
3882						}
3883						else {
3884							FIGURE.giftCardValue(`$${$this.val()}`);
3885						}
3886						const dollars = `$${$this.val()}`;
3887						const $giftCardValueBtnCustom = $(".gift-card-value-btn-custom");
3888						$giftCardValueBtnCustom.text(dollars);
3889						$giftCardValueBtnCustom.addClass("active");
3890					}
3891					$("#collapseCustom").collapse("hide");
3892				}
3893			}
3894		});
3895		const manualFormSubmit = async function() {
3896			const form = $("#giftCardSetUp");
3897			const action = form.attr("action");
3898			const formData = new FormData(form[0]);
3899			try {
3900				const res = await fetch(action, {
3901					method: "POST",
3902					body: formData,
3903				});
3904				if (res.status === 200) {
3905					window.location.href = res.url;
3906				}
3907				else {
3908					console.error("Something went wrong");
3909				}
3910			} catch (e) {
3911				console.error(e);
3912			}
3913		};
3914		$(document).on("submit", "#giftCardSetUp", function (e) {
3915			e.preventDefault();
3916		});
3917		$(document).on("click", "#submitGiftCard", function (e) {
3918			const value = parseFloat($(".gift-card-value-input").val().replace("$", "").replace(",", ""));
3919			if (value < 25 || value > 2500) {
3920				e.preventDefault();
3921				$(".less-than-five").show();
3922			}
3923			else {
3924				$(".less-than-five").hide();
3925				if (!$("#giftCardSetUp").hasClass("not-yet-sparky")) {
3926					$(document).find("#submitGiftCard").html("<div class=\"spinner-border\" style=\"width: 1.5rem; height: 1.5rem;\" role=\"status\"><span class=\"sr-only\">Loading...</span></div>");
3927					manualFormSubmit();
3928				}
3929			}
3930		});
3931
3932		$(window).on("load resize", function () {
3933			const customButtonHeight = $(".gift-card-value-btn-custom").outerHeight();
3934			$(".gift-card-value-custom-input").css({ height: customButtonHeight });
3935		});
3936
3937		$("#giftCardBalanceModal").on("hide.bs.modal", function () {
3938			$("#giftCardCode").val("");
3939			grecaptcha.reset();
3940			$("#giftCardBalance").text("");
3941		});
3942	}
3943
3944	return true;
3945}();
3946
3947FIGURE.giftCardsBalance = function () {
3948	const runBalanceCheck = async function(code) {
3949		try {
3950			const action = `/giftcard/balance/${code}/`;
3951			const res = await fetch(action);
3952			const data = await res.json();
3953			if (data) {
3954				let amount = data.value;
3955				let cardActive = true;
3956				if ([null, false, 0].includes(amount)) {
3957					cardActive = false;
3958				}
3959				let balance = "";
3960				if (cardActive) {
3961					const splitAmount = amount.split(".");
3962					const formattedAmount = `${FIGURE.formatNumber(splitAmount[0])}.${splitAmount[1]}`;
3963					balance = `$${formattedAmount}`;
3964				}
3965				if (!cardActive) {
3966					balance = "Card Number Not Valid";
3967				}
3968				$(document).find("#giftCardBalance").html(balance);
3969			}
3970		} catch (error) {
3971			console.error(error);
3972		}
3973	};
3974
3975	$(document).on("click", ".js-gift-card-check-balance", function() {
3976		const code = $(document).find("#giftCardCode").val();
3977		if (code) {
3978			$("#giftCardBalanceTitle").removeClass("d-none");
3979			$(document).find("#giftCardBalance").html("<div class=\"loading\"><div class=\"spinner-grow\" role=\"status\"><span class=\"sr-only\">Loading...</span></div></div>");
3980			setTimeout(() => {
3981				$(document).find("#giftCardBalance .loading").append("<div class=\"spinner-grow\" role=\"status\"><span class=\"sr-only\">Loading...</span></div>");
3982			}, 100);
3983			setTimeout(() => {
3984				$(document).find("#giftCardBalance .loading").append("<div class=\"spinner-grow\" role=\"status\"><span class=\"sr-only\">Loading...</span></div>");
3985			}, 200);
3986			if (code === "123-test") {
3987				return;
3988			}
3989			runBalanceCheck(code);
3990		}
3991	});
3992
3993	return true;
3994}();
3995
3996FIGURE.applyCode = function() {
3997	$(document).on("click", "#jsApplyCodeAjax", function () {
3998		const $jsApplyCodeAjax = $(this);
3999		const theCode = $(".ajax-promo-code").val();
4000		const urlBase = (!!$jsApplyCodeAjax.data("url-base") && $jsApplyCodeAjax.data("url-base").trim().length)
4001			? $jsApplyCodeAjax.data("url-base").trim()
4002			: "cart";
4003
4004		$.getJSON(`/${urlBase}/use-coupon-json/${theCode}/`, function(data) {
4005			if (data.success === true) {
4006				location.reload();
4007			}
4008			else if (data.gift_card_balance <= 0) {
4009				$(".promo-code-not-found").addClass("d-none");
4010				$(".promo-code-no-value").removeClass("d-none");
4011			}
4012			else {
4013				$(".promo-code-no-value").addClass("d-none");
4014				const $promoCodeNotFound = $(".promo-code-not-found");
4015				$promoCodeNotFound.removeClass("d-none");
4016				$promoCodeNotFound.find(".bad-promo-code").text(`${theCode} `);
4017			}
4018		});
4019		return false;
4020	});
4021
4022	return true;
4023}();
4024
4025
4026/***/ }),
4027
4028/***/ "../FigureBaseResources/js/viewport.js":
4029/*!*********************************************!*\
4030  !*** ../FigureBaseResources/js/viewport.js ***!
4031  \*********************************************/
4032/***/ (function() {
4033
4034/**
4035 * @author  Mudit Ameta
4036 * @license https://github.com/zeusdeux/isInViewport/blob/master/license.md MIT
4037 */
4038(function($, window) {
4039
4040  // polyfilling trim for ie < 9. sigh ;-;
4041  if (!String.prototype.hasOwnProperty('trim')) {
4042    String.prototype.trim = function() {
4043      return this.replace(/^\s*(.*?)\s*$/, '$1');
4044    };
4045  }
4046
4047
4048  // lets you chain any arbitrary function or an array of functions and returns a jquery object
4049  var run = function(args) {
4050    if (arguments.length === 1 && typeof args === 'function')
4051      args = [args];
4052
4053    if (!(args instanceof Array))
4054      throw new SyntaxError('isInViewport: Argument(s) passed to .do/.run should be a function or an array of functions');
4055
4056    for (var i = 0; i < args.length; i++) {
4057      if (typeof args[i] !== 'function') {
4058        console.warn('isInViewport: Argument(s) passed to .do/.run should be a function or an array of functions');
4059        console.warn('isInViewport: Ignoring non-function values in array and moving on');
4060        continue;
4061      }
4062      for (var j = 0; j < this.length; j++)
4063        args[i].call($(this[j]));
4064    }
4065    return this;
4066  };
4067
4068
4069  // do is a reserved word and hence using it as a property throws on some browsers
4070  // it is now aliased as $.fn.run
4071  // deprecate $.fn.do (2.3.0)
4072  $.fn['do'] = function(args) {
4073    console.warn('isInViewport: .do is deprecated as it causes issues in IE and some browsers since it\'s a reserved word. Use $.fn.run instead i.e., $(el).run(fn).');
4074    return run(args);
4075  };
4076  $.fn.run = run;
4077
4078
4079  // gets the width of the scrollbar
4080  function getScrollbarWidth(viewport) {
4081    var scrollBarWidth;
4082
4083    // append a div that has 100% width to get true width of viewport
4084    var el = $('<div></div>').css({
4085      'width': '100%'
4086    });
4087    viewport.append(el);
4088
4089    // subtract true width from the viewport width which is inclusive
4090    // of scrollbar by default
4091    scrollBarWidth = viewport.width() - el.width();
4092
4093    // remove our element from DOM
4094    el.remove();
4095    return scrollBarWidth;
4096  }
4097
4098
4099  // Returns true if DOM element `element` is in viewport
4100  function isInViewport(element, options) {
4101    var boundingRect  = element.getBoundingClientRect();
4102    var top           = boundingRect.top;
4103    var bottom        = boundingRect.bottom;
4104    var left          = boundingRect.left;
4105    var right         = boundingRect.right;
4106    var settings      = $.extend({
4107      'tolerance': 0,
4108      'viewport': window
4109    }, options);
4110    var isVisibleFlag = false;
4111    var $viewport     = settings.viewport.jquery ? settings.viewport : $(settings.viewport);
4112
4113    if (!$viewport.length) {
4114      console.warn('isInViewport: The viewport selector you have provided matches no element on page.');
4115      console.warn('isInViewport: Defaulting to viewport as window');
4116      $viewport = $(window);
4117    }
4118
4119    var $viewportHeight = $viewport.height();
4120    var $viewportWidth  = $viewport.width();
4121    var typeofViewport  = $viewport[0].toString();
4122
4123    // if the viewport is other than window recalculate the top,
4124    // bottom,left and right wrt the new viewport
4125    // the [object DOMWindow] check is for window object type in PhantomJS
4126    if ($viewport[0] !== window && typeofViewport !== '[object Window]' && typeofViewport !== '[object DOMWindow]') {
4127      // Use getBoundingClientRect() instead of $.Offset()
4128      // since the original top/bottom positions are calculated relative to browser viewport and not document
4129      var viewportRect = $viewport[0].getBoundingClientRect();
4130
4131      // recalculate these relative to viewport
4132      top    = top - viewportRect.top;
4133      bottom = bottom - viewportRect.top;
4134      left   = left - viewportRect.left;
4135      right  = right - viewportRect.left;
4136
4137      // get the scrollbar width from cache or calculate it
4138      isInViewport.scrollBarWidth = isInViewport.scrollBarWidth || getScrollbarWidth($viewport);
4139
4140      // remove the width of the scrollbar from the viewport width
4141      $viewportWidth -= isInViewport.scrollBarWidth;
4142    }
4143
4144    // handle falsy, non-number and non-integer tolerance value
4145    // same as checking using isNaN and then setting to 0
4146    // bitwise operators deserve some love too you know
4147    settings.tolerance = ~~Math.round(parseFloat(settings.tolerance));
4148
4149    if (settings.tolerance < 0)
4150      settings.tolerance = $viewportHeight + settings.tolerance; // viewport height - tol
4151
4152    // the element is NOT in viewport iff it is completely out of
4153    // viewport laterally or if it is completely out of the tolerance
4154    // region. Therefore, if it is partially in view then it is considered
4155    // to be in the viewport and hence true is returned. Because we have adjusted
4156    // the left/right positions relative to the viewport, we should check the
4157    // element's right against the viewport's 0 (left side), and the element's
4158    // left against the viewport's width to see if it is outside of the viewport.
4159
4160    if (right <= 0 || left >= $viewportWidth)
4161      return isVisibleFlag;
4162
4163    // if the element is bound to some tolerance
4164    isVisibleFlag = settings.tolerance ? !!(top <= settings.tolerance && bottom >= settings.tolerance) : !!(bottom > 0 && top <= $viewportHeight);
4165
4166    return isVisibleFlag;
4167  }
4168
4169
4170  // get the selector args from the args string proved by Sizzle
4171  var getSelectorArgs = function(argsString) {
4172    if (argsString) {
4173      var args = argsString.split(',');
4174
4175      // when user only gives viewport and no tolerance
4176      if (args.length === 1 && isNaN(args[0])) {
4177        args[1] = args[0];
4178        args[0] = void 0;
4179      }
4180
4181      return {
4182        tolerance: args[0] ? args[0].trim() : void 0,
4183        viewport: args[1] ? $(args[1].trim()) : void 0
4184      };
4185    }
4186    return {};
4187  };
4188
4189
4190  // expose isInViewport as a custom pseudo-selector
4191  $.extend($.expr[':'], {
4192    // if $.expr.createPseudo is available, use it
4193    'in-viewport': $.expr.createPseudo ?
4194      $.expr.createPseudo(function(argsString) {
4195        return function(currElement) {
4196          return isInViewport(currElement, getSelectorArgs(argsString));
4197        };
4198      }) :
4199    function(currObj, index, meta) {
4200      return isInViewport(currObj, getSelectorArgs(meta[3]));
4201    }
4202  });
4203
4204
4205  // expose isInViewport as a function too
4206  // this lets folks pass around actual objects as options (like custom viewport)
4207  // and doesn't tie 'em down to strings. It also prevents isInViewport from
4208  // having to look up and wrap the dom element corresponding to the viewport selector
4209  $.fn.isInViewport = function(options) {
4210    return this.filter(function(i, el) {
4211      return isInViewport(el, options);
4212    });
4213  };
4214
4215})(jQuery, window);
4216
4217/***/ }),
4218
vendor: 137,986 bytes, lines 4219-8583
4219/***/ "../FigureBaseResources/node_modules/bootstrap/dist/js/bootstrap.js":
4220/*!**************************************************************************!*\
4221  !*** ../FigureBaseResources/node_modules/bootstrap/dist/js/bootstrap.js ***!
4222  \**************************************************************************/
4223/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
4224
4225/*!
4226  * Bootstrap v4.6.2 (https://getbootstrap.com/)
4227  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4228  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4229  */
4230(function (global, factory) {
4231   true ? factory(exports, __webpack_require__(/*! jquery */ "../FigureBaseResources/node_modules/jquery/dist/jquery.js"), __webpack_require__(/*! popper.js */ "../FigureBaseResources/node_modules/popper.js/dist/esm/popper.js")) :
4232  0;
4233})(this, (function (exports, $, Popper) { 'use strict';
4234
4235  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
4236
4237  var $__default = /*#__PURE__*/_interopDefaultLegacy($);
4238  var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
4239
4240  function _defineProperties(target, props) {
4241    for (var i = 0; i < props.length; i++) {
4242      var descriptor = props[i];
4243      descriptor.enumerable = descriptor.enumerable || false;
4244      descriptor.configurable = true;
4245      if ("value" in descriptor) descriptor.writable = true;
4246      Object.defineProperty(target, descriptor.key, descriptor);
4247    }
4248  }
4249
4250  function _createClass(Constructor, protoProps, staticProps) {
4251    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
4252    if (staticProps) _defineProperties(Constructor, staticProps);
4253    Object.defineProperty(Constructor, "prototype", {
4254      writable: false
4255    });
4256    return Constructor;
4257  }
4258
4259  function _extends() {
4260    _extends = Object.assign ? Object.assign.bind() : function (target) {
4261      for (var i = 1; i < arguments.length; i++) {
4262        var source = arguments[i];
4263
4264        for (var key in source) {
4265          if (Object.prototype.hasOwnProperty.call(source, key)) {
4266            target[key] = source[key];
4267          }
4268        }
4269      }
4270
4271      return target;
4272    };
4273    return _extends.apply(this, arguments);
4274  }
4275
4276  function _inheritsLoose(subClass, superClass) {
4277    subClass.prototype = Object.create(superClass.prototype);
4278    subClass.prototype.constructor = subClass;
4279
4280    _setPrototypeOf(subClass, superClass);
4281  }
4282
4283  function _setPrototypeOf(o, p) {
4284    _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
4285      o.__proto__ = p;
4286      return o;
4287    };
4288    return _setPrototypeOf(o, p);
4289  }
4290
4291  /**
4292   * --------------------------------------------------------------------------
4293   * Bootstrap (v4.6.2): util.js
4294   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4295   * --------------------------------------------------------------------------
4296   */
4297  /**
4298   * Private TransitionEnd Helpers
4299   */
4300
4301  var TRANSITION_END = 'transitionend';
4302  var MAX_UID = 1000000;
4303  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
4304
4305  function toType(obj) {
4306    if (obj === null || typeof obj === 'undefined') {
4307      return "" + obj;
4308    }
4309
4310    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
4311  }
4312
4313  function getSpecialTransitionEndEvent() {
4314    return {
4315      bindType: TRANSITION_END,
4316      delegateType: TRANSITION_END,
4317      handle: function handle(event) {
4318        if ($__default["default"](event.target).is(this)) {
4319          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
4320        }
4321
4322        return undefined;
4323      }
4324    };
4325  }
4326
4327  function transitionEndEmulator(duration) {
4328    var _this = this;
4329
4330    var called = false;
4331    $__default["default"](this).one(Util.TRANSITION_END, function () {
4332      called = true;
4333    });
4334    setTimeout(function () {
4335      if (!called) {
4336        Util.triggerTransitionEnd(_this);
4337      }
4338    }, duration);
4339    return this;
4340  }
4341
4342  function setTransitionEndSupport() {
4343    $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator;
4344    $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
4345  }
4346  /**
4347   * Public Util API
4348   */
4349
4350
4351  var Util = {
4352    TRANSITION_END: 'bsTransitionEnd',
4353    getUID: function getUID(prefix) {
4354      do {
4355        // eslint-disable-next-line no-bitwise
4356        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
4357      } while (document.getElementById(prefix));
4358
4359      return prefix;
4360    },
4361    getSelectorFromElement: function getSelectorFromElement(element) {
4362      var selector = element.getAttribute('data-target');
4363
4364      if (!selector || selector === '#') {
4365        var hrefAttr = element.getAttribute('href');
4366        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
4367      }
4368
4369      try {
4370        return document.querySelector(selector) ? selector : null;
4371      } catch (_) {
4372        return null;
4373      }
4374    },
4375    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
4376      if (!element) {
4377        return 0;
4378      } // Get transition-duration of the element
4379
4380
4381      var transitionDuration = $__default["default"](element).css('transition-duration');
4382      var transitionDelay = $__default["default"](element).css('transition-delay');
4383      var floatTransitionDuration = parseFloat(transitionDuration);
4384      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
4385
4386      if (!floatTransitionDuration && !floatTransitionDelay) {
4387        return 0;
4388      } // If multiple durations are defined, take the first
4389
4390
4391      transitionDuration = transitionDuration.split(',')[0];
4392      transitionDelay = transitionDelay.split(',')[0];
4393      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
4394    },
4395    reflow: function reflow(element) {
4396      return element.offsetHeight;
4397    },
4398    triggerTransitionEnd: function triggerTransitionEnd(element) {
4399      $__default["default"](element).trigger(TRANSITION_END);
4400    },
4401    supportsTransitionEnd: function supportsTransitionEnd() {
4402      return Boolean(TRANSITION_END);
4403    },
4404    isElement: function isElement(obj) {
4405      return (obj[0] || obj).nodeType;
4406    },
4407    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
4408      for (var property in configTypes) {
4409        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
4410          var expectedTypes = configTypes[property];
4411          var value = config[property];
4412          var valueType = value && Util.isElement(value) ? 'element' : toType(value);
4413
4414          if (!new RegExp(expectedTypes).test(valueType)) {
4415            throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
4416          }
4417        }
4418      }
4419    },
4420    findShadowRoot: function findShadowRoot(element) {
4421      if (!document.documentElement.attachShadow) {
4422        return null;
4423      } // Can find the shadow root otherwise it'll return the document
4424
4425
4426      if (typeof element.getRootNode === 'function') {
4427        var root = element.getRootNode();
4428        return root instanceof ShadowRoot ? root : null;
4429      }
4430
4431      if (element instanceof ShadowRoot) {
4432        return element;
4433      } // when we don't find a shadow root
4434
4435
4436      if (!element.parentNode) {
4437        return null;
4438      }
4439
4440      return Util.findShadowRoot(element.parentNode);
4441    },
4442    jQueryDetection: function jQueryDetection() {
4443      if (typeof $__default["default"] === 'undefined') {
4444        throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
4445      }
4446
4447      var version = $__default["default"].fn.jquery.split(' ')[0].split('.');
4448      var minMajor = 1;
4449      var ltMajor = 2;
4450      var minMinor = 9;
4451      var minPatch = 1;
4452      var maxMajor = 4;
4453
4454      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
4455        throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
4456      }
4457    }
4458  };
4459  Util.jQueryDetection();
4460  setTransitionEndSupport();
4461
4462  /**
4463   * Constants
4464   */
4465
4466  var NAME$a = 'alert';
4467  var VERSION$a = '4.6.2';
4468  var DATA_KEY$a = 'bs.alert';
4469  var EVENT_KEY$a = "." + DATA_KEY$a;
4470  var DATA_API_KEY$7 = '.data-api';
4471  var JQUERY_NO_CONFLICT$a = $__default["default"].fn[NAME$a];
4472  var CLASS_NAME_ALERT = 'alert';
4473  var CLASS_NAME_FADE$5 = 'fade';
4474  var CLASS_NAME_SHOW$7 = 'show';
4475  var EVENT_CLOSE = "close" + EVENT_KEY$a;
4476  var EVENT_CLOSED = "closed" + EVENT_KEY$a;
4477  var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$a + DATA_API_KEY$7;
4478  var SELECTOR_DISMISS = '[data-dismiss="alert"]';
4479  /**
4480   * Class definition
4481   */
4482
4483  var Alert = /*#__PURE__*/function () {
4484    function Alert(element) {
4485      this._element = element;
4486    } // Getters
4487
4488
4489    var _proto = Alert.prototype;
4490
4491    // Public
4492    _proto.close = function close(element) {
4493      var rootElement = this._element;
4494
4495      if (element) {
4496        rootElement = this._getRootElement(element);
4497      }
4498
4499      var customEvent = this._triggerCloseEvent(rootElement);
4500
4501      if (customEvent.isDefaultPrevented()) {
4502        return;
4503      }
4504
4505      this._removeElement(rootElement);
4506    };
4507
4508    _proto.dispose = function dispose() {
4509      $__default["default"].removeData(this._element, DATA_KEY$a);
4510      this._element = null;
4511    } // Private
4512    ;
4513
4514    _proto._getRootElement = function _getRootElement(element) {
4515      var selector = Util.getSelectorFromElement(element);
4516      var parent = false;
4517
4518      if (selector) {
4519        parent = document.querySelector(selector);
4520      }
4521
4522      if (!parent) {
4523        parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0];
4524      }
4525
4526      return parent;
4527    };
4528
4529    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
4530      var closeEvent = $__default["default"].Event(EVENT_CLOSE);
4531      $__default["default"](element).trigger(closeEvent);
4532      return closeEvent;
4533    };
4534
4535    _proto._removeElement = function _removeElement(element) {
4536      var _this = this;
4537
4538      $__default["default"](element).removeClass(CLASS_NAME_SHOW$7);
4539
4540      if (!$__default["default"](element).hasClass(CLASS_NAME_FADE$5)) {
4541        this._destroyElement(element);
4542
4543        return;
4544      }
4545
4546      var transitionDuration = Util.getTransitionDurationFromElement(element);
4547      $__default["default"](element).one(Util.TRANSITION_END, function (event) {
4548        return _this._destroyElement(element, event);
4549      }).emulateTransitionEnd(transitionDuration);
4550    };
4551
4552    _proto._destroyElement = function _destroyElement(element) {
4553      $__default["default"](element).detach().trigger(EVENT_CLOSED).remove();
4554    } // Static
4555    ;
4556
4557    Alert._jQueryInterface = function _jQueryInterface(config) {
4558      return this.each(function () {
4559        var $element = $__default["default"](this);
4560        var data = $element.data(DATA_KEY$a);
4561
4562        if (!data) {
4563          data = new Alert(this);
4564          $element.data(DATA_KEY$a, data);
4565        }
4566
4567        if (config === 'close') {
4568          data[config](this);
4569        }
4570      });
4571    };
4572
4573    Alert._handleDismiss = function _handleDismiss(alertInstance) {
4574      return function (event) {
4575        if (event) {
4576          event.preventDefault();
4577        }
4578
4579        alertInstance.close(this);
4580      };
4581    };
4582
4583    _createClass(Alert, null, [{
4584      key: "VERSION",
4585      get: function get() {
4586        return VERSION$a;
4587      }
4588    }]);
4589
4590    return Alert;
4591  }();
4592  /**
4593   * Data API implementation
4594   */
4595
4596
4597  $__default["default"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
4598  /**
4599   * jQuery
4600   */
4601
4602  $__default["default"].fn[NAME$a] = Alert._jQueryInterface;
4603  $__default["default"].fn[NAME$a].Constructor = Alert;
4604
4605  $__default["default"].fn[NAME$a].noConflict = function () {
4606    $__default["default"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;
4607    return Alert._jQueryInterface;
4608  };
4609
4610  /**
4611   * Constants
4612   */
4613
4614  var NAME$9 = 'button';
4615  var VERSION$9 = '4.6.2';
4616  var DATA_KEY$9 = 'bs.button';
4617  var EVENT_KEY$9 = "." + DATA_KEY$9;
4618  var DATA_API_KEY$6 = '.data-api';
4619  var JQUERY_NO_CONFLICT$9 = $__default["default"].fn[NAME$9];
4620  var CLASS_NAME_ACTIVE$3 = 'active';
4621  var CLASS_NAME_BUTTON = 'btn';
4622  var CLASS_NAME_FOCUS = 'focus';
4623  var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$9 + DATA_API_KEY$6;
4624  var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$9 + DATA_API_KEY$6 + " " + ("blur" + EVENT_KEY$9 + DATA_API_KEY$6);
4625  var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$9 + DATA_API_KEY$6;
4626  var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
4627  var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
4628  var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="button"]';
4629  var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
4630  var SELECTOR_INPUT = 'input:not([type="hidden"])';
4631  var SELECTOR_ACTIVE$2 = '.active';
4632  var SELECTOR_BUTTON = '.btn';
4633  /**
4634   * Class definition
4635   */
4636
4637  var Button = /*#__PURE__*/function () {
4638    function Button(element) {
4639      this._element = element;
4640      this.shouldAvoidTriggerChange = false;
4641    } // Getters
4642
4643
4644    var _proto = Button.prototype;
4645
4646    // Public
4647    _proto.toggle = function toggle() {
4648      var triggerChangeEvent = true;
4649      var addAriaPressed = true;
4650      var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];
4651
4652      if (rootElement) {
4653        var input = this._element.querySelector(SELECTOR_INPUT);
4654
4655        if (input) {
4656          if (input.type === 'radio') {
4657            if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) {
4658              triggerChangeEvent = false;
4659            } else {
4660              var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2);
4661
4662              if (activeElement) {
4663                $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$3);
4664              }
4665            }
4666          }
4667
4668          if (triggerChangeEvent) {
4669            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
4670            if (input.type === 'checkbox' || input.type === 'radio') {
4671              input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3);
4672            }
4673
4674            if (!this.shouldAvoidTriggerChange) {
4675              $__default["default"](input).trigger('change');
4676            }
4677          }
4678
4679          input.focus();
4680          addAriaPressed = false;
4681        }
4682      }
4683
4684      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
4685        if (addAriaPressed) {
4686          this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3));
4687        }
4688
4689        if (triggerChangeEvent) {
4690          $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE$3);
4691        }
4692      }
4693    };
4694
4695    _proto.dispose = function dispose() {
4696      $__default["default"].removeData(this._element, DATA_KEY$9);
4697      this._element = null;
4698    } // Static
4699    ;
4700
4701    Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {
4702      return this.each(function () {
4703        var $element = $__default["default"](this);
4704        var data = $element.data(DATA_KEY$9);
4705
4706        if (!data) {
4707          data = new Button(this);
4708          $element.data(DATA_KEY$9, data);
4709        }
4710
4711        data.shouldAvoidTriggerChange = avoidTriggerChange;
4712
4713        if (config === 'toggle') {
4714          data[config]();
4715        }
4716      });
4717    };
4718
4719    _createClass(Button, null, [{
4720      key: "VERSION",
4721      get: function get() {
4722        return VERSION$9;
4723      }
4724    }]);
4725
4726    return Button;
4727  }();
4728  /**
4729   * Data API implementation
4730   */
4731
4732
4733  $__default["default"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
4734    var button = event.target;
4735    var initialButton = button;
4736
4737    if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) {
4738      button = $__default["default"](button).closest(SELECTOR_BUTTON)[0];
4739    }
4740
4741    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
4742      event.preventDefault(); // work around Firefox bug #1540995
4743    } else {
4744      var inputBtn = button.querySelector(SELECTOR_INPUT);
4745
4746      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
4747        event.preventDefault(); // work around Firefox bug #1540995
4748
4749        return;
4750      }
4751
4752      if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {
4753        Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT');
4754      }
4755    }
4756  }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
4757    var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0];
4758    $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
4759  });
4760  $__default["default"](window).on(EVENT_LOAD_DATA_API$2, function () {
4761    // ensure correct active class is set to match the controls' actual values/states
4762    // find all checkboxes/readio buttons inside data-toggle groups
4763    var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
4764
4765    for (var i = 0, len = buttons.length; i < len; i++) {
4766      var button = buttons[i];
4767      var input = button.querySelector(SELECTOR_INPUT);
4768
4769      if (input.checked || input.hasAttribute('checked')) {
4770        button.classList.add(CLASS_NAME_ACTIVE$3);
4771      } else {
4772        button.classList.remove(CLASS_NAME_ACTIVE$3);
4773      }
4774    } // find all button toggles
4775
4776
4777    buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4));
4778
4779    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
4780      var _button = buttons[_i];
4781
4782      if (_button.getAttribute('aria-pressed') === 'true') {
4783        _button.classList.add(CLASS_NAME_ACTIVE$3);
4784      } else {
4785        _button.classList.remove(CLASS_NAME_ACTIVE$3);
4786      }
4787    }
4788  });
4789  /**
4790   * jQuery
4791   */
4792
4793  $__default["default"].fn[NAME$9] = Button._jQueryInterface;
4794  $__default["default"].fn[NAME$9].Constructor = Button;
4795
4796  $__default["default"].fn[NAME$9].noConflict = function () {
4797    $__default["default"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;
4798    return Button._jQueryInterface;
4799  };
4800
4801  /**
4802   * Constants
4803   */
4804
4805  var NAME$8 = 'carousel';
4806  var VERSION$8 = '4.6.2';
4807  var DATA_KEY$8 = 'bs.carousel';
4808  var EVENT_KEY$8 = "." + DATA_KEY$8;
4809  var DATA_API_KEY$5 = '.data-api';
4810  var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8];
4811  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
4812
4813  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
4814
4815  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
4816
4817  var SWIPE_THRESHOLD = 40;
4818  var CLASS_NAME_CAROUSEL = 'carousel';
4819  var CLASS_NAME_ACTIVE$2 = 'active';
4820  var CLASS_NAME_SLIDE = 'slide';
4821  var CLASS_NAME_RIGHT = 'carousel-item-right';
4822  var CLASS_NAME_LEFT = 'carousel-item-left';
4823  var CLASS_NAME_NEXT = 'carousel-item-next';
4824  var CLASS_NAME_PREV = 'carousel-item-prev';
4825  var CLASS_NAME_POINTER_EVENT = 'pointer-event';
4826  var DIRECTION_NEXT = 'next';
4827  var DIRECTION_PREV = 'prev';
4828  var DIRECTION_LEFT = 'left';
4829  var DIRECTION_RIGHT = 'right';
4830  var EVENT_SLIDE = "slide" + EVENT_KEY$8;
4831  var EVENT_SLID = "slid" + EVENT_KEY$8;
4832  var EVENT_KEYDOWN = "keydown" + EVENT_KEY$8;
4833  var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$8;
4834  var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$8;
4835  var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$8;
4836  var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$8;
4837  var EVENT_TOUCHEND = "touchend" + EVENT_KEY$8;
4838  var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$8;
4839  var EVENT_POINTERUP = "pointerup" + EVENT_KEY$8;
4840  var EVENT_DRAG_START = "dragstart" + EVENT_KEY$8;
4841  var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$8 + DATA_API_KEY$5;
4842  var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$8 + DATA_API_KEY$5;
4843  var SELECTOR_ACTIVE$1 = '.active';
4844  var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
4845  var SELECTOR_ITEM = '.carousel-item';
4846  var SELECTOR_ITEM_IMG = '.carousel-item img';
4847  var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
4848  var SELECTOR_INDICATORS = '.carousel-indicators';
4849  var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
4850  var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
4851  var Default$7 = {
4852    interval: 5000,
4853    keyboard: true,
4854    slide: false,
4855    pause: 'hover',
4856    wrap: true,
4857    touch: true
4858  };
4859  var DefaultType$7 = {
4860    interval: '(number|boolean)',
4861    keyboard: 'boolean',
4862    slide: '(boolean|string)',
4863    pause: '(string|boolean)',
4864    wrap: 'boolean',
4865    touch: 'boolean'
4866  };
4867  var PointerType = {
4868    TOUCH: 'touch',
4869    PEN: 'pen'
4870  };
4871  /**
4872   * Class definition
4873   */
4874
4875  var Carousel = /*#__PURE__*/function () {
4876    function Carousel(element, config) {
4877      this._items = null;
4878      this._interval = null;
4879      this._activeElement = null;
4880      this._isPaused = false;
4881      this._isSliding = false;
4882      this.touchTimeout = null;
4883      this.touchStartX = 0;
4884      this.touchDeltaX = 0;
4885      this._config = this._getConfig(config);
4886      this._element = element;
4887      this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);
4888      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
4889      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
4890
4891      this._addEventListeners();
4892    } // Getters
4893
4894
4895    var _proto = Carousel.prototype;
4896
4897    // Public
4898    _proto.next = function next() {
4899      if (!this._isSliding) {
4900        this._slide(DIRECTION_NEXT);
4901      }
4902    };
4903
4904    _proto.nextWhenVisible = function nextWhenVisible() {
4905      var $element = $__default["default"](this._element); // Don't call next when the page isn't visible
4906      // or the carousel or its parent isn't visible
4907
4908      if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {
4909        this.next();
4910      }
4911    };
4912
4913    _proto.prev = function prev() {
4914      if (!this._isSliding) {
4915        this._slide(DIRECTION_PREV);
4916      }
4917    };
4918
4919    _proto.pause = function pause(event) {
4920      if (!event) {
4921        this._isPaused = true;
4922      }
4923
4924      if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
4925        Util.triggerTransitionEnd(this._element);
4926        this.cycle(true);
4927      }
4928
4929      clearInterval(this._interval);
4930      this._interval = null;
4931    };
4932
4933    _proto.cycle = function cycle(event) {
4934      if (!event) {
4935        this._isPaused = false;
4936      }
4937
4938      if (this._interval) {
4939        clearInterval(this._interval);
4940        this._interval = null;
4941      }
4942
4943      if (this._config.interval && !this._isPaused) {
4944        this._updateInterval();
4945
4946        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
4947      }
4948    };
4949
4950    _proto.to = function to(index) {
4951      var _this = this;
4952
4953      this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
4954
4955      var activeIndex = this._getItemIndex(this._activeElement);
4956
4957      if (index > this._items.length - 1 || index < 0) {
4958        return;
4959      }
4960
4961      if (this._isSliding) {
4962        $__default["default"](this._element).one(EVENT_SLID, function () {
4963          return _this.to(index);
4964        });
4965        return;
4966      }
4967
4968      if (activeIndex === index) {
4969        this.pause();
4970        this.cycle();
4971        return;
4972      }
4973
4974      var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
4975
4976      this._slide(direction, this._items[index]);
4977    };
4978
4979    _proto.dispose = function dispose() {
4980      $__default["default"](this._element).off(EVENT_KEY$8);
4981      $__default["default"].removeData(this._element, DATA_KEY$8);
4982      this._items = null;
4983      this._config = null;
4984      this._element = null;
4985      this._interval = null;
4986      this._isPaused = null;
4987      this._isSliding = null;
4988      this._activeElement = null;
4989      this._indicatorsElement = null;
4990    } // Private
4991    ;
4992
4993    _proto._getConfig = function _getConfig(config) {
4994      config = _extends({}, Default$7, config);
4995      Util.typeCheckConfig(NAME$8, config, DefaultType$7);
4996      return config;
4997    };
4998
4999    _proto._handleSwipe = function _handleSwipe() {
5000      var absDeltax = Math.abs(this.touchDeltaX);
5001
5002      if (absDeltax <= SWIPE_THRESHOLD) {
5003        return;
5004      }
5005
5006      var direction = absDeltax / this.touchDeltaX;
5007      this.touchDeltaX = 0; // swipe left
5008
5009      if (direction > 0) {
5010        this.prev();
5011      } // swipe right
5012
5013
5014      if (direction < 0) {
5015        this.next();
5016      }
5017    };
5018
5019    _proto._addEventListeners = function _addEventListeners() {
5020      var _this2 = this;
5021
5022      if (this._config.keyboard) {
5023        $__default["default"](this._element).on(EVENT_KEYDOWN, function (event) {
5024          return _this2._keydown(event);
5025        });
5026      }
5027
5028      if (this._config.pause === 'hover') {
5029        $__default["default"](this._element).on(EVENT_MOUSEENTER, function (event) {
5030          return _this2.pause(event);
5031        }).on(EVENT_MOUSELEAVE, function (event) {
5032          return _this2.cycle(event);
5033        });
5034      }
5035
5036      if (this._config.touch) {
5037        this._addTouchEventListeners();
5038      }
5039    };
5040
5041    _proto._addTouchEventListeners = function _addTouchEventListeners() {
5042      var _this3 = this;
5043
5044      if (!this._touchSupported) {
5045        return;
5046      }
5047
5048      var start = function start(event) {
5049        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
5050          _this3.touchStartX = event.originalEvent.clientX;
5051        } else if (!_this3._pointerEvent) {
5052          _this3.touchStartX = event.originalEvent.touches[0].clientX;
5053        }
5054      };
5055
5056      var move = function move(event) {
5057        // ensure swiping with one touch and not pinching
5058        _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;
5059      };
5060
5061      var end = function end(event) {
5062        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
5063          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
5064        }
5065
5066        _this3._handleSwipe();
5067
5068        if (_this3._config.pause === 'hover') {
5069          // If it's a touch-enabled device, mouseenter/leave are fired as
5070          // part of the mouse compatibility events on first tap - the carousel
5071          // would stop cycling until user tapped out of it;
5072          // here, we listen for touchend, explicitly pause the carousel
5073          // (as if it's the second time we tap on it, mouseenter compat event
5074          // is NOT fired) and after a timeout (to allow for mouse compatibility
5075          // events to fire) we explicitly restart cycling
5076          _this3.pause();
5077
5078          if (_this3.touchTimeout) {
5079            clearTimeout(_this3.touchTimeout);
5080          }
5081
5082          _this3.touchTimeout = setTimeout(function (event) {
5083            return _this3.cycle(event);
5084          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
5085        }
5086      };
5087
5088      $__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
5089        return e.preventDefault();
5090      });
5091
5092      if (this._pointerEvent) {
5093        $__default["default"](this._element).on(EVENT_POINTERDOWN, function (event) {
5094          return start(event);
5095        });
5096        $__default["default"](this._element).on(EVENT_POINTERUP, function (event) {
5097          return end(event);
5098        });
5099
5100        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
5101      } else {
5102        $__default["default"](this._element).on(EVENT_TOUCHSTART, function (event) {
5103          return start(event);
5104        });
5105        $__default["default"](this._element).on(EVENT_TOUCHMOVE, function (event) {
5106          return move(event);
5107        });
5108        $__default["default"](this._element).on(EVENT_TOUCHEND, function (event) {
5109          return end(event);
5110        });
5111      }
5112    };
5113
5114    _proto._keydown = function _keydown(event) {
5115      if (/input|textarea/i.test(event.target.tagName)) {
5116        return;
5117      }
5118
5119      switch (event.which) {
5120        case ARROW_LEFT_KEYCODE:
5121          event.preventDefault();
5122          this.prev();
5123          break;
5124
5125        case ARROW_RIGHT_KEYCODE:
5126          event.preventDefault();
5127          this.next();
5128          break;
5129      }
5130    };
5131
5132    _proto._getItemIndex = function _getItemIndex(element) {
5133      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];
5134      return this._items.indexOf(element);
5135    };
5136
5137    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
5138      var isNextDirection = direction === DIRECTION_NEXT;
5139      var isPrevDirection = direction === DIRECTION_PREV;
5140
5141      var activeIndex = this._getItemIndex(activeElement);
5142
5143      var lastItemIndex = this._items.length - 1;
5144      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
5145
5146      if (isGoingToWrap && !this._config.wrap) {
5147        return activeElement;
5148      }
5149
5150      var delta = direction === DIRECTION_PREV ? -1 : 1;
5151      var itemIndex = (activeIndex + delta) % this._items.length;
5152      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
5153    };
5154
5155    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
5156      var targetIndex = this._getItemIndex(relatedTarget);
5157
5158      var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
5159
5160      var slideEvent = $__default["default"].Event(EVENT_SLIDE, {
5161        relatedTarget: relatedTarget,
5162        direction: eventDirectionName,
5163        from: fromIndex,
5164        to: targetIndex
5165      });
5166      $__default["default"](this._element).trigger(slideEvent);
5167      return slideEvent;
5168    };
5169
5170    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
5171      if (this._indicatorsElement) {
5172        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
5173        $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$2);
5174
5175        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
5176
5177        if (nextIndicator) {
5178          $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2);
5179        }
5180      }
5181    };
5182
5183    _proto._updateInterval = function _updateInterval() {
5184      var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);
5185
5186      if (!element) {
5187        return;
5188      }
5189
5190      var elementInterval = parseInt(element.getAttribute('data-interval'), 10);
5191
5192      if (elementInterval) {
5193        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
5194        this._config.interval = elementInterval;
5195      } else {
5196        this._config.interval = this._config.defaultInterval || this._config.interval;
5197      }
5198    };
5199
5200    _proto._slide = function _slide(direction, element) {
5201      var _this4 = this;
5202
5203      var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
5204
5205      var activeElementIndex = this._getItemIndex(activeElement);
5206
5207      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
5208
5209      var nextElementIndex = this._getItemIndex(nextElement);
5210
5211      var isCycling = Boolean(this._interval);
5212      var directionalClassName;
5213      var orderClassName;
5214      var eventDirectionName;
5215
5216      if (direction === DIRECTION_NEXT) {
5217        directionalClassName = CLASS_NAME_LEFT;
5218        orderClassName = CLASS_NAME_NEXT;
5219        eventDirectionName = DIRECTION_LEFT;
5220      } else {
5221        directionalClassName = CLASS_NAME_RIGHT;
5222        orderClassName = CLASS_NAME_PREV;
5223        eventDirectionName = DIRECTION_RIGHT;
5224      }
5225
5226      if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) {
5227        this._isSliding = false;
5228        return;
5229      }
5230
5231      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
5232
5233      if (slideEvent.isDefaultPrevented()) {
5234        return;
5235      }
5236
5237      if (!activeElement || !nextElement) {
5238        // Some weirdness is happening, so we bail
5239        return;
5240      }
5241
5242      this._isSliding = true;
5243
5244      if (isCycling) {
5245        this.pause();
5246      }
5247
5248      this._setActiveIndicatorElement(nextElement);
5249
5250      this._activeElement = nextElement;
5251      var slidEvent = $__default["default"].Event(EVENT_SLID, {
5252        relatedTarget: nextElement,
5253        direction: eventDirectionName,
5254        from: activeElementIndex,
5255        to: nextElementIndex
5256      });
5257
5258      if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) {
5259        $__default["default"](nextElement).addClass(orderClassName);
5260        Util.reflow(nextElement);
5261        $__default["default"](activeElement).addClass(directionalClassName);
5262        $__default["default"](nextElement).addClass(directionalClassName);
5263        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
5264        $__default["default"](activeElement).one(Util.TRANSITION_END, function () {
5265          $__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$2);
5266          $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + " " + orderClassName + " " + directionalClassName);
5267          _this4._isSliding = false;
5268          setTimeout(function () {
5269            return $__default["default"](_this4._element).trigger(slidEvent);
5270          }, 0);
5271        }).emulateTransitionEnd(transitionDuration);
5272      } else {
5273        $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2);
5274        $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$2);
5275        this._isSliding = false;
5276        $__default["default"](this._element).trigger(slidEvent);
5277      }
5278
5279      if (isCycling) {
5280        this.cycle();
5281      }
5282    } // Static
5283    ;
5284
5285    Carousel._jQueryInterface = function _jQueryInterface(config) {
5286      return this.each(function () {
5287        var data = $__default["default"](this).data(DATA_KEY$8);
5288
5289        var _config = _extends({}, Default$7, $__default["default"](this).data());
5290
5291        if (typeof config === 'object') {
5292          _config = _extends({}, _config, config);
5293        }
5294
5295        var action = typeof config === 'string' ? config : _config.slide;
5296
5297        if (!data) {
5298          data = new Carousel(this, _config);
5299          $__default["default"](this).data(DATA_KEY$8, data);
5300        }
5301
5302        if (typeof config === 'number') {
5303          data.to(config);
5304        } else if (typeof action === 'string') {
5305          if (typeof data[action] === 'undefined') {
5306            throw new TypeError("No method named \"" + action + "\"");
5307          }
5308
5309          data[action]();
5310        } else if (_config.interval && _config.ride) {
5311          data.pause();
5312          data.cycle();
5313        }
5314      });
5315    };
5316
5317    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
5318      var selector = Util.getSelectorFromElement(this);
5319
5320      if (!selector) {
5321        return;
5322      }
5323
5324      var target = $__default["default"](selector)[0];
5325
5326      if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) {
5327        return;
5328      }
5329
5330      var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
5331
5332      var slideIndex = this.getAttribute('data-slide-to');
5333
5334      if (slideIndex) {
5335        config.interval = false;
5336      }
5337
5338      Carousel._jQueryInterface.call($__default["default"](target), config);
5339
5340      if (slideIndex) {
5341        $__default["default"](target).data(DATA_KEY$8).to(slideIndex);
5342      }
5343
5344      event.preventDefault();
5345    };
5346
5347    _createClass(Carousel, null, [{
5348      key: "VERSION",
5349      get: function get() {
5350        return VERSION$8;
5351      }
5352    }, {
5353      key: "Default",
5354      get: function get() {
5355        return Default$7;
5356      }
5357    }]);
5358
5359    return Carousel;
5360  }();
5361  /**
5362   * Data API implementation
5363   */
5364
5365
5366  $__default["default"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
5367  $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function () {
5368    var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
5369
5370    for (var i = 0, len = carousels.length; i < len; i++) {
5371      var $carousel = $__default["default"](carousels[i]);
5372
5373      Carousel._jQueryInterface.call($carousel, $carousel.data());
5374    }
5375  });
5376  /**
5377   * jQuery
5378   */
5379
5380  $__default["default"].fn[NAME$8] = Carousel._jQueryInterface;
5381  $__default["default"].fn[NAME$8].Constructor = Carousel;
5382
5383  $__default["default"].fn[NAME$8].noConflict = function () {
5384    $__default["default"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;
5385    return Carousel._jQueryInterface;
5386  };
5387
5388  /**
5389   * Constants
5390   */
5391
5392  var NAME$7 = 'collapse';
5393  var VERSION$7 = '4.6.2';
5394  var DATA_KEY$7 = 'bs.collapse';
5395  var EVENT_KEY$7 = "." + DATA_KEY$7;
5396  var DATA_API_KEY$4 = '.data-api';
5397  var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7];
5398  var CLASS_NAME_SHOW$6 = 'show';
5399  var CLASS_NAME_COLLAPSE = 'collapse';
5400  var CLASS_NAME_COLLAPSING = 'collapsing';
5401  var CLASS_NAME_COLLAPSED = 'collapsed';
5402  var DIMENSION_WIDTH = 'width';
5403  var DIMENSION_HEIGHT = 'height';
5404  var EVENT_SHOW$4 = "show" + EVENT_KEY$7;
5405  var EVENT_SHOWN$4 = "shown" + EVENT_KEY$7;
5406  var EVENT_HIDE$4 = "hide" + EVENT_KEY$7;
5407  var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$7;
5408  var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$7 + DATA_API_KEY$4;
5409  var SELECTOR_ACTIVES = '.show, .collapsing';
5410  var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="collapse"]';
5411  var Default$6 = {
5412    toggle: true,
5413    parent: ''
5414  };
5415  var DefaultType$6 = {
5416    toggle: 'boolean',
5417    parent: '(string|element)'
5418  };
5419  /**
5420   * Class definition
5421   */
5422
5423  var Collapse = /*#__PURE__*/function () {
5424    function Collapse(element, config) {
5425      this._isTransitioning = false;
5426      this._element = element;
5427      this._config = this._getConfig(config);
5428      this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
5429      var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3));
5430
5431      for (var i = 0, len = toggleList.length; i < len; i++) {
5432        var elem = toggleList[i];
5433        var selector = Util.getSelectorFromElement(elem);
5434        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
5435          return foundElem === element;
5436        });
5437
5438        if (selector !== null && filterElement.length > 0) {
5439          this._selector = selector;
5440
5441          this._triggerArray.push(elem);
5442        }
5443      }
5444
5445      this._parent = this._config.parent ? this._getParent() : null;
5446
5447      if (!this._config.parent) {
5448        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
5449      }
5450
5451      if (this._config.toggle) {
5452        this.toggle();
5453      }
5454    } // Getters
5455
5456
5457    var _proto = Collapse.prototype;
5458
5459    // Public
5460    _proto.toggle = function toggle() {
5461      if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
5462        this.hide();
5463      } else {
5464        this.show();
5465      }
5466    };
5467
5468    _proto.show = function show() {
5469      var _this = this;
5470
5471      if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
5472        return;
5473      }
5474
5475      var actives;
5476      var activesData;
5477
5478      if (this._parent) {
5479        actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {
5480          if (typeof _this._config.parent === 'string') {
5481            return elem.getAttribute('data-parent') === _this._config.parent;
5482          }
5483
5484          return elem.classList.contains(CLASS_NAME_COLLAPSE);
5485        });
5486
5487        if (actives.length === 0) {
5488          actives = null;
5489        }
5490      }
5491
5492      if (actives) {
5493        activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY$7);
5494
5495        if (activesData && activesData._isTransitioning) {
5496          return;
5497        }
5498      }
5499
5500      var startEvent = $__default["default"].Event(EVENT_SHOW$4);
5501      $__default["default"](this._element).trigger(startEvent);
5502
5503      if (startEvent.isDefaultPrevented()) {
5504        return;
5505      }
5506
5507      if (actives) {
5508        Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide');
5509
5510        if (!activesData) {
5511          $__default["default"](actives).data(DATA_KEY$7, null);
5512        }
5513      }
5514
5515      var dimension = this._getDimension();
5516
5517      $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
5518      this._element.style[dimension] = 0;
5519
5520      if (this._triggerArray.length) {
5521        $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
5522      }
5523
5524      this.setTransitioning(true);
5525
5526      var complete = function complete() {
5527        $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6);
5528        _this._element.style[dimension] = '';
5529
5530        _this.setTransitioning(false);
5531
5532        $__default["default"](_this._element).trigger(EVENT_SHOWN$4);
5533      };
5534
5535      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
5536      var scrollSize = "scroll" + capitalizedDimension;
5537      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
5538      $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5539      this._element.style[dimension] = this._element[scrollSize] + "px";
5540    };
5541
5542    _proto.hide = function hide() {
5543      var _this2 = this;
5544
5545      if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
5546        return;
5547      }
5548
5549      var startEvent = $__default["default"].Event(EVENT_HIDE$4);
5550      $__default["default"](this._element).trigger(startEvent);
5551
5552      if (startEvent.isDefaultPrevented()) {
5553        return;
5554      }
5555
5556      var dimension = this._getDimension();
5557
5558      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
5559      Util.reflow(this._element);
5560      $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6);
5561      var triggerArrayLength = this._triggerArray.length;
5562
5563      if (triggerArrayLength > 0) {
5564        for (var i = 0; i < triggerArrayLength; i++) {
5565          var trigger = this._triggerArray[i];
5566          var selector = Util.getSelectorFromElement(trigger);
5567
5568          if (selector !== null) {
5569            var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector)));
5570
5571            if (!$elem.hasClass(CLASS_NAME_SHOW$6)) {
5572              $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
5573            }
5574          }
5575        }
5576      }
5577
5578      this.setTransitioning(true);
5579
5580      var complete = function complete() {
5581        _this2.setTransitioning(false);
5582
5583        $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4);
5584      };
5585
5586      this._element.style[dimension] = '';
5587      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
5588      $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5589    };
5590
5591    _proto.setTransitioning = function setTransitioning(isTransitioning) {
5592      this._isTransitioning = isTransitioning;
5593    };
5594
5595    _proto.dispose = function dispose() {
5596      $__default["default"].removeData(this._element, DATA_KEY$7);
5597      this._config = null;
5598      this._parent = null;
5599      this._element = null;
5600      this._triggerArray = null;
5601      this._isTransitioning = null;
5602    } // Private
5603    ;
5604
5605    _proto._getConfig = function _getConfig(config) {
5606      config = _extends({}, Default$6, config);
5607      config.toggle = Boolean(config.toggle); // Coerce string values
5608
5609      Util.typeCheckConfig(NAME$7, config, DefaultType$6);
5610      return config;
5611    };
5612
5613    _proto._getDimension = function _getDimension() {
5614      var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH);
5615      return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
5616    };
5617
5618    _proto._getParent = function _getParent() {
5619      var _this3 = this;
5620
5621      var parent;
5622
5623      if (Util.isElement(this._config.parent)) {
5624        parent = this._config.parent; // It's a jQuery object
5625
5626        if (typeof this._config.parent.jquery !== 'undefined') {
5627          parent = this._config.parent[0];
5628        }
5629      } else {
5630        parent = document.querySelector(this._config.parent);
5631      }
5632
5633      var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
5634      var children = [].slice.call(parent.querySelectorAll(selector));
5635      $__default["default"](children).each(function (i, element) {
5636        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
5637      });
5638      return parent;
5639    };
5640
5641    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
5642      var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$6);
5643
5644      if (triggerArray.length) {
5645        $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
5646      }
5647    } // Static
5648    ;
5649
5650    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
5651      var selector = Util.getSelectorFromElement(element);
5652      return selector ? document.querySelector(selector) : null;
5653    };
5654
5655    Collapse._jQueryInterface = function _jQueryInterface(config) {
5656      return this.each(function () {
5657        var $element = $__default["default"](this);
5658        var data = $element.data(DATA_KEY$7);
5659
5660        var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {});
5661
5662        if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
5663          _config.toggle = false;
5664        }
5665
5666        if (!data) {
5667          data = new Collapse(this, _config);
5668          $element.data(DATA_KEY$7, data);
5669        }
5670
5671        if (typeof config === 'string') {
5672          if (typeof data[config] === 'undefined') {
5673            throw new TypeError("No method named \"" + config + "\"");
5674          }
5675
5676          data[config]();
5677        }
5678      });
5679    };
5680
5681    _createClass(Collapse, null, [{
5682      key: "VERSION",
5683      get: function get() {
5684        return VERSION$7;
5685      }
5686    }, {
5687      key: "Default",
5688      get: function get() {
5689        return Default$6;
5690      }
5691    }]);
5692
5693    return Collapse;
5694  }();
5695  /**
5696   * Data API implementation
5697   */
5698
5699
5700  $__default["default"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
5701    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
5702    if (event.currentTarget.tagName === 'A') {
5703      event.preventDefault();
5704    }
5705
5706    var $trigger = $__default["default"](this);
5707    var selector = Util.getSelectorFromElement(this);
5708    var selectors = [].slice.call(document.querySelectorAll(selector));
5709    $__default["default"](selectors).each(function () {
5710      var $target = $__default["default"](this);
5711      var data = $target.data(DATA_KEY$7);
5712      var config = data ? 'toggle' : $trigger.data();
5713
5714      Collapse._jQueryInterface.call($target, config);
5715    });
5716  });
5717  /**
5718   * jQuery
5719   */
5720
5721  $__default["default"].fn[NAME$7] = Collapse._jQueryInterface;
5722  $__default["default"].fn[NAME$7].Constructor = Collapse;
5723
5724  $__default["default"].fn[NAME$7].noConflict = function () {
5725    $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;
5726    return Collapse._jQueryInterface;
5727  };
5728
5729  /**
5730   * Constants
5731   */
5732
5733  var NAME$6 = 'dropdown';
5734  var VERSION$6 = '4.6.2';
5735  var DATA_KEY$6 = 'bs.dropdown';
5736  var EVENT_KEY$6 = "." + DATA_KEY$6;
5737  var DATA_API_KEY$3 = '.data-api';
5738  var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6];
5739  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key
5740
5741  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
5742
5743  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
5744
5745  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
5746
5747  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
5748
5749  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
5750
5751  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE$1);
5752  var CLASS_NAME_DISABLED$1 = 'disabled';
5753  var CLASS_NAME_SHOW$5 = 'show';
5754  var CLASS_NAME_DROPUP = 'dropup';
5755  var CLASS_NAME_DROPRIGHT = 'dropright';
5756  var CLASS_NAME_DROPLEFT = 'dropleft';
5757  var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
5758  var CLASS_NAME_POSITION_STATIC = 'position-static';
5759  var EVENT_HIDE$3 = "hide" + EVENT_KEY$6;
5760  var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$6;
5761  var EVENT_SHOW$3 = "show" + EVENT_KEY$6;
5762  var EVENT_SHOWN$3 = "shown" + EVENT_KEY$6;
5763  var EVENT_CLICK = "click" + EVENT_KEY$6;
5764  var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$6 + DATA_API_KEY$3;
5765  var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$6 + DATA_API_KEY$3;
5766  var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$6 + DATA_API_KEY$3;
5767  var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
5768  var SELECTOR_FORM_CHILD = '.dropdown form';
5769  var SELECTOR_MENU = '.dropdown-menu';
5770  var SELECTOR_NAVBAR_NAV = '.navbar-nav';
5771  var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
5772  var PLACEMENT_TOP = 'top-start';
5773  var PLACEMENT_TOPEND = 'top-end';
5774  var PLACEMENT_BOTTOM = 'bottom-start';
5775  var PLACEMENT_BOTTOMEND = 'bottom-end';
5776  var PLACEMENT_RIGHT = 'right-start';
5777  var PLACEMENT_LEFT = 'left-start';
5778  var Default$5 = {
5779    offset: 0,
5780    flip: true,
5781    boundary: 'scrollParent',
5782    reference: 'toggle',
5783    display: 'dynamic',
5784    popperConfig: null
5785  };
5786  var DefaultType$5 = {
5787    offset: '(number|string|function)',
5788    flip: 'boolean',
5789    boundary: '(string|element)',
5790    reference: '(string|element)',
5791    display: 'string',
5792    popperConfig: '(null|object)'
5793  };
5794  /**
5795   * Class definition
5796   */
5797
5798  var Dropdown = /*#__PURE__*/function () {
5799    function Dropdown(element, config) {
5800      this._element = element;
5801      this._popper = null;
5802      this._config = this._getConfig(config);
5803      this._menu = this._getMenuElement();
5804      this._inNavbar = this._detectNavbar();
5805
5806      this._addEventListeners();
5807    } // Getters
5808
5809
5810    var _proto = Dropdown.prototype;
5811
5812    // Public
5813    _proto.toggle = function toggle() {
5814      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1)) {
5815        return;
5816      }
5817
5818      var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5);
5819
5820      Dropdown._clearMenus();
5821
5822      if (isActive) {
5823        return;
5824      }
5825
5826      this.show(true);
5827    };
5828
5829    _proto.show = function show(usePopper) {
5830      if (usePopper === void 0) {
5831        usePopper = false;
5832      }
5833
5834      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {
5835        return;
5836      }
5837
5838      var relatedTarget = {
5839        relatedTarget: this._element
5840      };
5841      var showEvent = $__default["default"].Event(EVENT_SHOW$3, relatedTarget);
5842
5843      var parent = Dropdown._getParentFromElement(this._element);
5844
5845      $__default["default"](parent).trigger(showEvent);
5846
5847      if (showEvent.isDefaultPrevented()) {
5848        return;
5849      } // Totally disable Popper for Dropdowns in Navbar
5850
5851
5852      if (!this._inNavbar && usePopper) {
5853        // Check for Popper dependency
5854        if (typeof Popper__default["default"] === 'undefined') {
5855          throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
5856        }
5857
5858        var referenceElement = this._element;
5859
5860        if (this._config.reference === 'parent') {
5861          referenceElement = parent;
5862        } else if (Util.isElement(this._config.reference)) {
5863          referenceElement = this._config.reference; // Check if it's jQuery element
5864
5865          if (typeof this._config.reference.jquery !== 'undefined') {
5866            referenceElement = this._config.reference[0];
5867          }
5868        } // If boundary is not `scrollParent`, then set position to `static`
5869        // to allow the menu to "escape" the scroll parent's boundaries
5870        // https://github.com/twbs/bootstrap/issues/24251
5871
5872
5873        if (this._config.boundary !== 'scrollParent') {
5874          $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC);
5875        }
5876
5877        this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig());
5878      } // If this is a touch-enabled device we add extra
5879      // empty mouseover listeners to the body's immediate children;
5880      // only needed because of broken event delegation on iOS
5881      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
5882
5883
5884      if ('ontouchstart' in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
5885        $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
5886      }
5887
5888      this._element.focus();
5889
5890      this._element.setAttribute('aria-expanded', true);
5891
5892      $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5);
5893      $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_SHOWN$3, relatedTarget));
5894    };
5895
5896    _proto.hide = function hide() {
5897      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {
5898        return;
5899      }
5900
5901      var relatedTarget = {
5902        relatedTarget: this._element
5903      };
5904      var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget);
5905
5906      var parent = Dropdown._getParentFromElement(this._element);
5907
5908      $__default["default"](parent).trigger(hideEvent);
5909
5910      if (hideEvent.isDefaultPrevented()) {
5911        return;
5912      }
5913
5914      if (this._popper) {
5915        this._popper.destroy();
5916      }
5917
5918      $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5);
5919      $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget));
5920    };
5921
5922    _proto.dispose = function dispose() {
5923      $__default["default"].removeData(this._element, DATA_KEY$6);
5924      $__default["default"](this._element).off(EVENT_KEY$6);
5925      this._element = null;
5926      this._menu = null;
5927
5928      if (this._popper !== null) {
5929        this._popper.destroy();
5930
5931        this._popper = null;
5932      }
5933    };
5934
5935    _proto.update = function update() {
5936      this._inNavbar = this._detectNavbar();
5937
5938      if (this._popper !== null) {
5939        this._popper.scheduleUpdate();
5940      }
5941    } // Private
5942    ;
5943
5944    _proto._addEventListeners = function _addEventListeners() {
5945      var _this = this;
5946
5947      $__default["default"](this._element).on(EVENT_CLICK, function (event) {
5948        event.preventDefault();
5949        event.stopPropagation();
5950
5951        _this.toggle();
5952      });
5953    };
5954
5955    _proto._getConfig = function _getConfig(config) {
5956      config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config);
5957      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
5958      return config;
5959    };
5960
5961    _proto._getMenuElement = function _getMenuElement() {
5962      if (!this._menu) {
5963        var parent = Dropdown._getParentFromElement(this._element);
5964
5965        if (parent) {
5966          this._menu = parent.querySelector(SELECTOR_MENU);
5967        }
5968      }
5969
5970      return this._menu;
5971    };
5972
5973    _proto._getPlacement = function _getPlacement() {
5974      var $parentDropdown = $__default["default"](this._element.parentNode);
5975      var placement = PLACEMENT_BOTTOM; // Handle dropup
5976
5977      if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
5978        placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
5979      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
5980        placement = PLACEMENT_RIGHT;
5981      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
5982        placement = PLACEMENT_LEFT;
5983      } else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
5984        placement = PLACEMENT_BOTTOMEND;
5985      }
5986
5987      return placement;
5988    };
5989
5990    _proto._detectNavbar = function _detectNavbar() {
5991      return $__default["default"](this._element).closest('.navbar').length > 0;
5992    };
5993
5994    _proto._getOffset = function _getOffset() {
5995      var _this2 = this;
5996
5997      var offset = {};
5998
5999      if (typeof this._config.offset === 'function') {
6000        offset.fn = function (data) {
6001          data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element));
6002          return data;
6003        };
6004      } else {
6005        offset.offset = this._config.offset;
6006      }
6007
6008      return offset;
6009    };
6010
6011    _proto._getPopperConfig = function _getPopperConfig() {
6012      var popperConfig = {
6013        placement: this._getPlacement(),
6014        modifiers: {
6015          offset: this._getOffset(),
6016          flip: {
6017            enabled: this._config.flip
6018          },
6019          preventOverflow: {
6020            boundariesElement: this._config.boundary
6021          }
6022        }
6023      }; // Disable Popper if we have a static display
6024
6025      if (this._config.display === 'static') {
6026        popperConfig.modifiers.applyStyle = {
6027          enabled: false
6028        };
6029      }
6030
6031      return _extends({}, popperConfig, this._config.popperConfig);
6032    } // Static
6033    ;
6034
6035    Dropdown._jQueryInterface = function _jQueryInterface(config) {
6036      return this.each(function () {
6037        var data = $__default["default"](this).data(DATA_KEY$6);
6038
6039        var _config = typeof config === 'object' ? config : null;
6040
6041        if (!data) {
6042          data = new Dropdown(this, _config);
6043          $__default["default"](this).data(DATA_KEY$6, data);
6044        }
6045
6046        if (typeof config === 'string') {
6047          if (typeof data[config] === 'undefined') {
6048            throw new TypeError("No method named \"" + config + "\"");
6049          }
6050
6051          data[config]();
6052        }
6053      });
6054    };
6055
6056    Dropdown._clearMenus = function _clearMenus(event) {
6057      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
6058        return;
6059      }
6060
6061      var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
6062
6063      for (var i = 0, len = toggles.length; i < len; i++) {
6064        var parent = Dropdown._getParentFromElement(toggles[i]);
6065
6066        var context = $__default["default"](toggles[i]).data(DATA_KEY$6);
6067        var relatedTarget = {
6068          relatedTarget: toggles[i]
6069        };
6070
6071        if (event && event.type === 'click') {
6072          relatedTarget.clickEvent = event;
6073        }
6074
6075        if (!context) {
6076          continue;
6077        }
6078
6079        var dropdownMenu = context._menu;
6080
6081        if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$5)) {
6082          continue;
6083        }
6084
6085        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) {
6086          continue;
6087        }
6088
6089        var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget);
6090        $__default["default"](parent).trigger(hideEvent);
6091
6092        if (hideEvent.isDefaultPrevented()) {
6093          continue;
6094        } // If this is a touch-enabled device we remove the extra
6095        // empty mouseover listeners we added for iOS support
6096
6097
6098        if ('ontouchstart' in document.documentElement) {
6099          $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
6100        }
6101
6102        toggles[i].setAttribute('aria-expanded', 'false');
6103
6104        if (context._popper) {
6105          context._popper.destroy();
6106        }
6107
6108        $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5);
6109        $__default["default"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget));
6110      }
6111    };
6112
6113    Dropdown._getParentFromElement = function _getParentFromElement(element) {
6114      var parent;
6115      var selector = Util.getSelectorFromElement(element);
6116
6117      if (selector) {
6118        parent = document.querySelector(selector);
6119      }
6120
6121      return parent || element.parentNode;
6122    } // eslint-disable-next-line complexity
6123    ;
6124
6125    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
6126      // If not input/textarea:
6127      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
6128      // If input/textarea:
6129      //  - If space key => not a dropdown command
6130      //  - If key is other than escape
6131      //    - If key is not up or down => not a dropdown command
6132      //    - If trigger inside the menu => not a dropdown command
6133      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
6134        return;
6135      }
6136
6137      if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED$1)) {
6138        return;
6139      }
6140
6141      var parent = Dropdown._getParentFromElement(this);
6142
6143      var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$5);
6144
6145      if (!isActive && event.which === ESCAPE_KEYCODE$1) {
6146        return;
6147      }
6148
6149      event.preventDefault();
6150      event.stopPropagation();
6151
6152      if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) {
6153        if (event.which === ESCAPE_KEYCODE$1) {
6154          $__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');
6155        }
6156
6157        $__default["default"](this).trigger('click');
6158        return;
6159      }
6160
6161      var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
6162        return $__default["default"](item).is(':visible');
6163      });
6164
6165      if (items.length === 0) {
6166        return;
6167      }
6168
6169      var index = items.indexOf(event.target);
6170
6171      if (event.which === ARROW_UP_KEYCODE && index > 0) {
6172        // Up
6173        index--;
6174      }
6175
6176      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
6177        // Down
6178        index++;
6179      }
6180
6181      if (index < 0) {
6182        index = 0;
6183      }
6184
6185      items[index].focus();
6186    };
6187
6188    _createClass(Dropdown, null, [{
6189      key: "VERSION",
6190      get: function get() {
6191        return VERSION$6;
6192      }
6193    }, {
6194      key: "Default",
6195      get: function get() {
6196        return Default$5;
6197      }
6198    }, {
6199      key: "DefaultType",
6200      get: function get() {
6201        return DefaultType$5;
6202      }
6203    }]);
6204
6205    return Dropdown;
6206  }();
6207  /**
6208   * Data API implementation
6209   */
6210
6211
6212  $__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
6213    event.preventDefault();
6214    event.stopPropagation();
6215
6216    Dropdown._jQueryInterface.call($__default["default"](this), 'toggle');
6217  }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) {
6218    e.stopPropagation();
6219  });
6220  /**
6221   * jQuery
6222   */
6223
6224  $__default["default"].fn[NAME$6] = Dropdown._jQueryInterface;
6225  $__default["default"].fn[NAME$6].Constructor = Dropdown;
6226
6227  $__default["default"].fn[NAME$6].noConflict = function () {
6228    $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;
6229    return Dropdown._jQueryInterface;
6230  };
6231
6232  /**
6233   * Constants
6234   */
6235
6236  var NAME$5 = 'modal';
6237  var VERSION$5 = '4.6.2';
6238  var DATA_KEY$5 = 'bs.modal';
6239  var EVENT_KEY$5 = "." + DATA_KEY$5;
6240  var DATA_API_KEY$2 = '.data-api';
6241  var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5];
6242  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
6243
6244  var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
6245  var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
6246  var CLASS_NAME_BACKDROP = 'modal-backdrop';
6247  var CLASS_NAME_OPEN = 'modal-open';
6248  var CLASS_NAME_FADE$4 = 'fade';
6249  var CLASS_NAME_SHOW$4 = 'show';
6250  var CLASS_NAME_STATIC = 'modal-static';
6251  var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
6252  var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
6253  var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
6254  var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
6255  var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
6256  var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
6257  var EVENT_RESIZE = "resize" + EVENT_KEY$5;
6258  var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$5;
6259  var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
6260  var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
6261  var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
6262  var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$5 + DATA_API_KEY$2;
6263  var SELECTOR_DIALOG = '.modal-dialog';
6264  var SELECTOR_MODAL_BODY = '.modal-body';
6265  var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="modal"]';
6266  var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="modal"]';
6267  var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
6268  var SELECTOR_STICKY_CONTENT = '.sticky-top';
6269  var Default$4 = {
6270    backdrop: true,
6271    keyboard: true,
6272    focus: true,
6273    show: true
6274  };
6275  var DefaultType$4 = {
6276    backdrop: '(boolean|string)',
6277    keyboard: 'boolean',
6278    focus: 'boolean',
6279    show: 'boolean'
6280  };
6281  /**
6282   * Class definition
6283   */
6284
6285  var Modal = /*#__PURE__*/function () {
6286    function Modal(element, config) {
6287      this._config = this._getConfig(config);
6288      this._element = element;
6289      this._dialog = element.querySelector(SELECTOR_DIALOG);
6290      this._backdrop = null;
6291      this._isShown = false;
6292      this._isBodyOverflowing = false;
6293      this._ignoreBackdropClick = false;
6294      this._isTransitioning = false;
6295      this._scrollbarWidth = 0;
6296    } // Getters
6297
6298
6299    var _proto = Modal.prototype;
6300
6301    // Public
6302    _proto.toggle = function toggle(relatedTarget) {
6303      return this._isShown ? this.hide() : this.show(relatedTarget);
6304    };
6305
6306    _proto.show = function show(relatedTarget) {
6307      var _this = this;
6308
6309      if (this._isShown || this._isTransitioning) {
6310        return;
6311      }
6312
6313      var showEvent = $__default["default"].Event(EVENT_SHOW$2, {
6314        relatedTarget: relatedTarget
6315      });
6316      $__default["default"](this._element).trigger(showEvent);
6317
6318      if (showEvent.isDefaultPrevented()) {
6319        return;
6320      }
6321
6322      this._isShown = true;
6323
6324      if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) {
6325        this._isTransitioning = true;
6326      }
6327
6328      this._checkScrollbar();
6329
6330      this._setScrollbar();
6331
6332      this._adjustDialog();
6333
6334      this._setEscapeEvent();
6335
6336      this._setResizeEvent();
6337
6338      $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) {
6339        return _this.hide(event);
6340      });
6341      $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
6342        $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
6343          if ($__default["default"](event.target).is(_this._element)) {
6344            _this._ignoreBackdropClick = true;
6345          }
6346        });
6347      });
6348
6349      this._showBackdrop(function () {
6350        return _this._showElement(relatedTarget);
6351      });
6352    };
6353
6354    _proto.hide = function hide(event) {
6355      var _this2 = this;
6356
6357      if (event) {
6358        event.preventDefault();
6359      }
6360
6361      if (!this._isShown || this._isTransitioning) {
6362        return;
6363      }
6364
6365      var hideEvent = $__default["default"].Event(EVENT_HIDE$2);
6366      $__default["default"](this._element).trigger(hideEvent);
6367
6368      if (!this._isShown || hideEvent.isDefaultPrevented()) {
6369        return;
6370      }
6371
6372      this._isShown = false;
6373      var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4);
6374
6375      if (transition) {
6376        this._isTransitioning = true;
6377      }
6378
6379      this._setEscapeEvent();
6380
6381      this._setResizeEvent();
6382
6383      $__default["default"](document).off(EVENT_FOCUSIN);
6384      $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$4);
6385      $__default["default"](this._element).off(EVENT_CLICK_DISMISS$1);
6386      $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
6387
6388      if (transition) {
6389        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
6390        $__default["default"](this._element).one(Util.TRANSITION_END, function (event) {
6391          return _this2._hideModal(event);
6392        }).emulateTransitionEnd(transitionDuration);
6393      } else {
6394        this._hideModal();
6395      }
6396    };
6397
6398    _proto.dispose = function dispose() {
6399      [window, this._element, this._dialog].forEach(function (htmlElement) {
6400        return $__default["default"](htmlElement).off(EVENT_KEY$5);
6401      });
6402      /**
6403       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
6404       * Do not move `document` in `htmlElements` array
6405       * It will remove `EVENT_CLICK_DATA_API` event that should remain
6406       */
6407
6408      $__default["default"](document).off(EVENT_FOCUSIN);
6409      $__default["default"].removeData(this._element, DATA_KEY$5);
6410      this._config = null;
6411      this._element = null;
6412      this._dialog = null;
6413      this._backdrop = null;
6414      this._isShown = null;
6415      this._isBodyOverflowing = null;
6416      this._ignoreBackdropClick = null;
6417      this._isTransitioning = null;
6418      this._scrollbarWidth = null;
6419    };
6420
6421    _proto.handleUpdate = function handleUpdate() {
6422      this._adjustDialog();
6423    } // Private
6424    ;
6425
6426    _proto._getConfig = function _getConfig(config) {
6427      config = _extends({}, Default$4, config);
6428      Util.typeCheckConfig(NAME$5, config, DefaultType$4);
6429      return config;
6430    };
6431
6432    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
6433      var _this3 = this;
6434
6435      var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED);
6436      $__default["default"](this._element).trigger(hideEventPrevented);
6437
6438      if (hideEventPrevented.isDefaultPrevented()) {
6439        return;
6440      }
6441
6442      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
6443
6444      if (!isModalOverflowing) {
6445        this._element.style.overflowY = 'hidden';
6446      }
6447
6448      this._element.classList.add(CLASS_NAME_STATIC);
6449
6450      var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);
6451      $__default["default"](this._element).off(Util.TRANSITION_END);
6452      $__default["default"](this._element).one(Util.TRANSITION_END, function () {
6453        _this3._element.classList.remove(CLASS_NAME_STATIC);
6454
6455        if (!isModalOverflowing) {
6456          $__default["default"](_this3._element).one(Util.TRANSITION_END, function () {
6457            _this3._element.style.overflowY = '';
6458          }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
6459        }
6460      }).emulateTransitionEnd(modalTransitionDuration);
6461
6462      this._element.focus();
6463    };
6464
6465    _proto._showElement = function _showElement(relatedTarget) {
6466      var _this4 = this;
6467
6468      var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4);
6469      var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
6470
6471      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
6472        // Don't move modal's DOM position
6473        document.body.appendChild(this._element);
6474      }
6475
6476      this._element.style.display = 'block';
6477
6478      this._element.removeAttribute('aria-hidden');
6479
6480      this._element.setAttribute('aria-modal', true);
6481
6482      this._element.setAttribute('role', 'dialog');
6483
6484      if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
6485        modalBody.scrollTop = 0;
6486      } else {
6487        this._element.scrollTop = 0;
6488      }
6489
6490      if (transition) {
6491        Util.reflow(this._element);
6492      }
6493
6494      $__default["default"](this._element).addClass(CLASS_NAME_SHOW$4);
6495
6496      if (this._config.focus) {
6497        this._enforceFocus();
6498      }
6499
6500      var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, {
6501        relatedTarget: relatedTarget
6502      });
6503
6504      var transitionComplete = function transitionComplete() {
6505        if (_this4._config.focus) {
6506          _this4._element.focus();
6507        }
6508
6509        _this4._isTransitioning = false;
6510        $__default["default"](_this4._element).trigger(shownEvent);
6511      };
6512
6513      if (transition) {
6514        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
6515        $__default["default"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
6516      } else {
6517        transitionComplete();
6518      }
6519    };
6520
6521    _proto._enforceFocus = function _enforceFocus() {
6522      var _this5 = this;
6523
6524      $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
6525      .on(EVENT_FOCUSIN, function (event) {
6526        if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) {
6527          _this5._element.focus();
6528        }
6529      });
6530    };
6531
6532    _proto._setEscapeEvent = function _setEscapeEvent() {
6533      var _this6 = this;
6534
6535      if (this._isShown) {
6536        $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
6537          if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
6538            event.preventDefault();
6539
6540            _this6.hide();
6541          } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
6542            _this6._triggerBackdropTransition();
6543          }
6544        });
6545      } else if (!this._isShown) {
6546        $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
6547      }
6548    };
6549
6550    _proto._setResizeEvent = function _setResizeEvent() {
6551      var _this7 = this;
6552
6553      if (this._isShown) {
6554        $__default["default"](window).on(EVENT_RESIZE, function (event) {
6555          return _this7.handleUpdate(event);
6556        });
6557      } else {
6558        $__default["default"](window).off(EVENT_RESIZE);
6559      }
6560    };
6561
6562    _proto._hideModal = function _hideModal() {
6563      var _this8 = this;
6564
6565      this._element.style.display = 'none';
6566
6567      this._element.setAttribute('aria-hidden', true);
6568
6569      this._element.removeAttribute('aria-modal');
6570
6571      this._element.removeAttribute('role');
6572
6573      this._isTransitioning = false;
6574
6575      this._showBackdrop(function () {
6576        $__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
6577
6578        _this8._resetAdjustments();
6579
6580        _this8._resetScrollbar();
6581
6582        $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2);
6583      });
6584    };
6585
6586    _proto._removeBackdrop = function _removeBackdrop() {
6587      if (this._backdrop) {
6588        $__default["default"](this._backdrop).remove();
6589        this._backdrop = null;
6590      }
6591    };
6592
6593    _proto._showBackdrop = function _showBackdrop(callback) {
6594      var _this9 = this;
6595
6596      var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : '';
6597
6598      if (this._isShown && this._config.backdrop) {
6599        this._backdrop = document.createElement('div');
6600        this._backdrop.className = CLASS_NAME_BACKDROP;
6601
6602        if (animate) {
6603          this._backdrop.classList.add(animate);
6604        }
6605
6606        $__default["default"](this._backdrop).appendTo(document.body);
6607        $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) {
6608          if (_this9._ignoreBackdropClick) {
6609            _this9._ignoreBackdropClick = false;
6610            return;
6611          }
6612
6613          if (event.target !== event.currentTarget) {
6614            return;
6615          }
6616
6617          if (_this9._config.backdrop === 'static') {
6618            _this9._triggerBackdropTransition();
6619          } else {
6620            _this9.hide();
6621          }
6622        });
6623
6624        if (animate) {
6625          Util.reflow(this._backdrop);
6626        }
6627
6628        $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$4);
6629
6630        if (!callback) {
6631          return;
6632        }
6633
6634        if (!animate) {
6635          callback();
6636          return;
6637        }
6638
6639        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
6640        $__default["default"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
6641      } else if (!this._isShown && this._backdrop) {
6642        $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$4);
6643
6644        var callbackRemove = function callbackRemove() {
6645          _this9._removeBackdrop();
6646
6647          if (callback) {
6648            callback();
6649          }
6650        };
6651
6652        if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) {
6653          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
6654
6655          $__default["default"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
6656        } else {
6657          callbackRemove();
6658        }
6659      } else if (callback) {
6660        callback();
6661      }
6662    } // ----------------------------------------------------------------------
6663    // the following methods are used to handle overflowing modals
6664    // todo (fat): these should probably be refactored out of modal.js
6665    // ----------------------------------------------------------------------
6666    ;
6667
6668    _proto._adjustDialog = function _adjustDialog() {
6669      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
6670
6671      if (!this._isBodyOverflowing && isModalOverflowing) {
6672        this._element.style.paddingLeft = this._scrollbarWidth + "px";
6673      }
6674
6675      if (this._isBodyOverflowing && !isModalOverflowing) {
6676        this._element.style.paddingRight = this._scrollbarWidth + "px";
6677      }
6678    };
6679
6680    _proto._resetAdjustments = function _resetAdjustments() {
6681      this._element.style.paddingLeft = '';
6682      this._element.style.paddingRight = '';
6683    };
6684
6685    _proto._checkScrollbar = function _checkScrollbar() {
6686      var rect = document.body.getBoundingClientRect();
6687      this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
6688      this._scrollbarWidth = this._getScrollbarWidth();
6689    };
6690
6691    _proto._setScrollbar = function _setScrollbar() {
6692      var _this10 = this;
6693
6694      if (this._isBodyOverflowing) {
6695        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
6696        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
6697        var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
6698        var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
6699
6700        $__default["default"](fixedContent).each(function (index, element) {
6701          var actualPadding = element.style.paddingRight;
6702          var calculatedPadding = $__default["default"](element).css('padding-right');
6703          $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
6704        }); // Adjust sticky content margin
6705
6706        $__default["default"](stickyContent).each(function (index, element) {
6707          var actualMargin = element.style.marginRight;
6708          var calculatedMargin = $__default["default"](element).css('margin-right');
6709          $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
6710        }); // Adjust body padding
6711
6712        var actualPadding = document.body.style.paddingRight;
6713        var calculatedPadding = $__default["default"](document.body).css('padding-right');
6714        $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
6715      }
6716
6717      $__default["default"](document.body).addClass(CLASS_NAME_OPEN);
6718    };
6719
6720    _proto._resetScrollbar = function _resetScrollbar() {
6721      // Restore fixed content padding
6722      var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
6723      $__default["default"](fixedContent).each(function (index, element) {
6724        var padding = $__default["default"](element).data('padding-right');
6725        $__default["default"](element).removeData('padding-right');
6726        element.style.paddingRight = padding ? padding : '';
6727      }); // Restore sticky content
6728
6729      var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
6730      $__default["default"](elements).each(function (index, element) {
6731        var margin = $__default["default"](element).data('margin-right');
6732
6733        if (typeof margin !== 'undefined') {
6734          $__default["default"](element).css('margin-right', margin).removeData('margin-right');
6735        }
6736      }); // Restore body padding
6737
6738      var padding = $__default["default"](document.body).data('padding-right');
6739      $__default["default"](document.body).removeData('padding-right');
6740      document.body.style.paddingRight = padding ? padding : '';
6741    };
6742
6743    _proto._getScrollbarWidth = function _getScrollbarWidth() {
6744      // thx d.walsh
6745      var scrollDiv = document.createElement('div');
6746      scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
6747      document.body.appendChild(scrollDiv);
6748      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
6749      document.body.removeChild(scrollDiv);
6750      return scrollbarWidth;
6751    } // Static
6752    ;
6753
6754    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
6755      return this.each(function () {
6756        var data = $__default["default"](this).data(DATA_KEY$5);
6757
6758        var _config = _extends({}, Default$4, $__default["default"](this).data(), typeof config === 'object' && config ? config : {});
6759
6760        if (!data) {
6761          data = new Modal(this, _config);
6762          $__default["default"](this).data(DATA_KEY$5, data);
6763        }
6764
6765        if (typeof config === 'string') {
6766          if (typeof data[config] === 'undefined') {
6767            throw new TypeError("No method named \"" + config + "\"");
6768          }
6769
6770          data[config](relatedTarget);
6771        } else if (_config.show) {
6772          data.show(relatedTarget);
6773        }
6774      });
6775    };
6776
6777    _createClass(Modal, null, [{
6778      key: "VERSION",
6779      get: function get() {
6780        return VERSION$5;
6781      }
6782    }, {
6783      key: "Default",
6784      get: function get() {
6785        return Default$4;
6786      }
6787    }]);
6788
6789    return Modal;
6790  }();
6791  /**
6792   * Data API implementation
6793   */
6794
6795
6796  $__default["default"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
6797    var _this11 = this;
6798
6799    var target;
6800    var selector = Util.getSelectorFromElement(this);
6801
6802    if (selector) {
6803      target = document.querySelector(selector);
6804    }
6805
6806    var config = $__default["default"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
6807
6808    if (this.tagName === 'A' || this.tagName === 'AREA') {
6809      event.preventDefault();
6810    }
6811
6812    var $target = $__default["default"](target).one(EVENT_SHOW$2, function (showEvent) {
6813      if (showEvent.isDefaultPrevented()) {
6814        // Only register focus restorer if modal will actually get shown
6815        return;
6816      }
6817
6818      $target.one(EVENT_HIDDEN$2, function () {
6819        if ($__default["default"](_this11).is(':visible')) {
6820          _this11.focus();
6821        }
6822      });
6823    });
6824
6825    Modal._jQueryInterface.call($__default["default"](target), config, this);
6826  });
6827  /**
6828   * jQuery
6829   */
6830
6831  $__default["default"].fn[NAME$5] = Modal._jQueryInterface;
6832  $__default["default"].fn[NAME$5].Constructor = Modal;
6833
6834  $__default["default"].fn[NAME$5].noConflict = function () {
6835    $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;
6836    return Modal._jQueryInterface;
6837  };
6838
6839  /**
6840   * --------------------------------------------------------------------------
6841   * Bootstrap (v4.6.2): tools/sanitizer.js
6842   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6843   * --------------------------------------------------------------------------
6844   */
6845  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
6846  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
6847  var DefaultWhitelist = {
6848    // Global attributes allowed on any supplied element below.
6849    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
6850    a: ['target', 'href', 'title', 'rel'],
6851    area: [],
6852    b: [],
6853    br: [],
6854    col: [],
6855    code: [],
6856    div: [],
6857    em: [],
6858    hr: [],
6859    h1: [],
6860    h2: [],
6861    h3: [],
6862    h4: [],
6863    h5: [],
6864    h6: [],
6865    i: [],
6866    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
6867    li: [],
6868    ol: [],
6869    p: [],
6870    pre: [],
6871    s: [],
6872    small: [],
6873    span: [],
6874    sub: [],
6875    sup: [],
6876    strong: [],
6877    u: [],
6878    ul: []
6879  };
6880  /**
6881   * A pattern that recognizes a commonly useful subset of URLs that are safe.
6882   *
6883   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
6884   */
6885
6886  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
6887  /**
6888   * A pattern that matches safe data URLs. Only matches image, video and audio types.
6889   *
6890   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
6891   */
6892
6893  var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
6894
6895  function allowedAttribute(attr, allowedAttributeList) {
6896    var attrName = attr.nodeName.toLowerCase();
6897
6898    if (allowedAttributeList.indexOf(attrName) !== -1) {
6899      if (uriAttrs.indexOf(attrName) !== -1) {
6900        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
6901      }
6902
6903      return true;
6904    }
6905
6906    var regExp = allowedAttributeList.filter(function (attrRegex) {
6907      return attrRegex instanceof RegExp;
6908    }); // Check if a regular expression validates the attribute.
6909
6910    for (var i = 0, len = regExp.length; i < len; i++) {
6911      if (regExp[i].test(attrName)) {
6912        return true;
6913      }
6914    }
6915
6916    return false;
6917  }
6918
6919  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
6920    if (unsafeHtml.length === 0) {
6921      return unsafeHtml;
6922    }
6923
6924    if (sanitizeFn && typeof sanitizeFn === 'function') {
6925      return sanitizeFn(unsafeHtml);
6926    }
6927
6928    var domParser = new window.DOMParser();
6929    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
6930    var whitelistKeys = Object.keys(whiteList);
6931    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
6932
6933    var _loop = function _loop(i, len) {
6934      var el = elements[i];
6935      var elName = el.nodeName.toLowerCase();
6936
6937      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
6938        el.parentNode.removeChild(el);
6939        return "continue";
6940      }
6941
6942      var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread
6943
6944      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
6945      attributeList.forEach(function (attr) {
6946        if (!allowedAttribute(attr, whitelistedAttributes)) {
6947          el.removeAttribute(attr.nodeName);
6948        }
6949      });
6950    };
6951
6952    for (var i = 0, len = elements.length; i < len; i++) {
6953      var _ret = _loop(i);
6954
6955      if (_ret === "continue") continue;
6956    }
6957
6958    return createdDocument.body.innerHTML;
6959  }
6960
6961  /**
6962   * Constants
6963   */
6964
6965  var NAME$4 = 'tooltip';
6966  var VERSION$4 = '4.6.2';
6967  var DATA_KEY$4 = 'bs.tooltip';
6968  var EVENT_KEY$4 = "." + DATA_KEY$4;
6969  var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4];
6970  var CLASS_PREFIX$1 = 'bs-tooltip';
6971  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
6972  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
6973  var CLASS_NAME_FADE$3 = 'fade';
6974  var CLASS_NAME_SHOW$3 = 'show';
6975  var HOVER_STATE_SHOW = 'show';
6976  var HOVER_STATE_OUT = 'out';
6977  var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
6978  var SELECTOR_ARROW = '.arrow';
6979  var TRIGGER_HOVER = 'hover';
6980  var TRIGGER_FOCUS = 'focus';
6981  var TRIGGER_CLICK = 'click';
6982  var TRIGGER_MANUAL = 'manual';
6983  var AttachmentMap = {
6984    AUTO: 'auto',
6985    TOP: 'top',
6986    RIGHT: 'right',
6987    BOTTOM: 'bottom',
6988    LEFT: 'left'
6989  };
6990  var Default$3 = {
6991    animation: true,
6992    template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
6993    trigger: 'hover focus',
6994    title: '',
6995    delay: 0,
6996    html: false,
6997    selector: false,
6998    placement: 'top',
6999    offset: 0,
7000    container: false,
7001    fallbackPlacement: 'flip',
7002    boundary: 'scrollParent',
7003    customClass: '',
7004    sanitize: true,
7005    sanitizeFn: null,
7006    whiteList: DefaultWhitelist,
7007    popperConfig: null
7008  };
7009  var DefaultType$3 = {
7010    animation: 'boolean',
7011    template: 'string',
7012    title: '(string|element|function)',
7013    trigger: 'string',
7014    delay: '(number|object)',
7015    html: 'boolean',
7016    selector: '(string|boolean)',
7017    placement: '(string|function)',
7018    offset: '(number|string|function)',
7019    container: '(string|element|boolean)',
7020    fallbackPlacement: '(string|array)',
7021    boundary: '(string|element)',
7022    customClass: '(string|function)',
7023    sanitize: 'boolean',
7024    sanitizeFn: '(null|function)',
7025    whiteList: 'object',
7026    popperConfig: '(null|object)'
7027  };
7028  var Event$1 = {
7029    HIDE: "hide" + EVENT_KEY$4,
7030    HIDDEN: "hidden" + EVENT_KEY$4,
7031    SHOW: "show" + EVENT_KEY$4,
7032    SHOWN: "shown" + EVENT_KEY$4,
7033    INSERTED: "inserted" + EVENT_KEY$4,
7034    CLICK: "click" + EVENT_KEY$4,
7035    FOCUSIN: "focusin" + EVENT_KEY$4,
7036    FOCUSOUT: "focusout" + EVENT_KEY$4,
7037    MOUSEENTER: "mouseenter" + EVENT_KEY$4,
7038    MOUSELEAVE: "mouseleave" + EVENT_KEY$4
7039  };
7040  /**
7041   * Class definition
7042   */
7043
7044  var Tooltip = /*#__PURE__*/function () {
7045    function Tooltip(element, config) {
7046      if (typeof Popper__default["default"] === 'undefined') {
7047        throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
7048      } // Private
7049
7050
7051      this._isEnabled = true;
7052      this._timeout = 0;
7053      this._hoverState = '';
7054      this._activeTrigger = {};
7055      this._popper = null; // Protected
7056
7057      this.element = element;
7058      this.config = this._getConfig(config);
7059      this.tip = null;
7060
7061      this._setListeners();
7062    } // Getters
7063
7064
7065    var _proto = Tooltip.prototype;
7066
7067    // Public
7068    _proto.enable = function enable() {
7069      this._isEnabled = true;
7070    };
7071
7072    _proto.disable = function disable() {
7073      this._isEnabled = false;
7074    };
7075
7076    _proto.toggleEnabled = function toggleEnabled() {
7077      this._isEnabled = !this._isEnabled;
7078    };
7079
7080    _proto.toggle = function toggle(event) {
7081      if (!this._isEnabled) {
7082        return;
7083      }
7084
7085      if (event) {
7086        var dataKey = this.constructor.DATA_KEY;
7087        var context = $__default["default"](event.currentTarget).data(dataKey);
7088
7089        if (!context) {
7090          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
7091          $__default["default"](event.currentTarget).data(dataKey, context);
7092        }
7093
7094        context._activeTrigger.click = !context._activeTrigger.click;
7095
7096        if (context._isWithActiveTrigger()) {
7097          context._enter(null, context);
7098        } else {
7099          context._leave(null, context);
7100        }
7101      } else {
7102        if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) {
7103          this._leave(null, this);
7104
7105          return;
7106        }
7107
7108        this._enter(null, this);
7109      }
7110    };
7111
7112    _proto.dispose = function dispose() {
7113      clearTimeout(this._timeout);
7114      $__default["default"].removeData(this.element, this.constructor.DATA_KEY);
7115      $__default["default"](this.element).off(this.constructor.EVENT_KEY);
7116      $__default["default"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);
7117
7118      if (this.tip) {
7119        $__default["default"](this.tip).remove();
7120      }
7121
7122      this._isEnabled = null;
7123      this._timeout = null;
7124      this._hoverState = null;
7125      this._activeTrigger = null;
7126
7127      if (this._popper) {
7128        this._popper.destroy();
7129      }
7130
7131      this._popper = null;
7132      this.element = null;
7133      this.config = null;
7134      this.tip = null;
7135    };
7136
7137    _proto.show = function show() {
7138      var _this = this;
7139
7140      if ($__default["default"](this.element).css('display') === 'none') {
7141        throw new Error('Please use show on visible elements');
7142      }
7143
7144      var showEvent = $__default["default"].Event(this.constructor.Event.SHOW);
7145
7146      if (this.isWithContent() && this._isEnabled) {
7147        $__default["default"](this.element).trigger(showEvent);
7148        var shadowRoot = Util.findShadowRoot(this.element);
7149        var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
7150
7151        if (showEvent.isDefaultPrevented() || !isInTheDom) {
7152          return;
7153        }
7154
7155        var tip = this.getTipElement();
7156        var tipId = Util.getUID(this.constructor.NAME);
7157        tip.setAttribute('id', tipId);
7158        this.element.setAttribute('aria-describedby', tipId);
7159        this.setContent();
7160
7161        if (this.config.animation) {
7162          $__default["default"](tip).addClass(CLASS_NAME_FADE$3);
7163        }
7164
7165        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
7166
7167        var attachment = this._getAttachment(placement);
7168
7169        this.addAttachmentClass(attachment);
7170
7171        var container = this._getContainer();
7172
7173        $__default["default"](tip).data(this.constructor.DATA_KEY, this);
7174
7175        if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) {
7176          $__default["default"](tip).appendTo(container);
7177        }
7178
7179        $__default["default"](this.element).trigger(this.constructor.Event.INSERTED);
7180        this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment));
7181        $__default["default"](tip).addClass(CLASS_NAME_SHOW$3);
7182        $__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra
7183        // empty mouseover listeners to the body's immediate children;
7184        // only needed because of broken event delegation on iOS
7185        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
7186
7187        if ('ontouchstart' in document.documentElement) {
7188          $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
7189        }
7190
7191        var complete = function complete() {
7192          if (_this.config.animation) {
7193            _this._fixTransition();
7194          }
7195
7196          var prevHoverState = _this._hoverState;
7197          _this._hoverState = null;
7198          $__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN);
7199
7200          if (prevHoverState === HOVER_STATE_OUT) {
7201            _this._leave(null, _this);
7202          }
7203        };
7204
7205        if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) {
7206          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
7207          $__default["default"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
7208        } else {
7209          complete();
7210        }
7211      }
7212    };
7213
7214    _proto.hide = function hide(callback) {
7215      var _this2 = this;
7216
7217      var tip = this.getTipElement();
7218      var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE);
7219
7220      var complete = function complete() {
7221        if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
7222          tip.parentNode.removeChild(tip);
7223        }
7224
7225        _this2._cleanTipClass();
7226
7227        _this2.element.removeAttribute('aria-describedby');
7228
7229        $__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);
7230
7231        if (_this2._popper !== null) {
7232          _this2._popper.destroy();
7233        }
7234
7235        if (callback) {
7236          callback();
7237        }
7238      };
7239
7240      $__default["default"](this.element).trigger(hideEvent);
7241
7242      if (hideEvent.isDefaultPrevented()) {
7243        return;
7244      }
7245
7246      $__default["default"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra
7247      // empty mouseover listeners we added for iOS support
7248
7249      if ('ontouchstart' in document.documentElement) {
7250        $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
7251      }
7252
7253      this._activeTrigger[TRIGGER_CLICK] = false;
7254      this._activeTrigger[TRIGGER_FOCUS] = false;
7255      this._activeTrigger[TRIGGER_HOVER] = false;
7256
7257      if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) {
7258        var transitionDuration = Util.getTransitionDurationFromElement(tip);
7259        $__default["default"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
7260      } else {
7261        complete();
7262      }
7263
7264      this._hoverState = '';
7265    };
7266
7267    _proto.update = function update() {
7268      if (this._popper !== null) {
7269        this._popper.scheduleUpdate();
7270      }
7271    } // Protected
7272    ;
7273
7274    _proto.isWithContent = function isWithContent() {
7275      return Boolean(this.getTitle());
7276    };
7277
7278    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
7279      $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment);
7280    };
7281
7282    _proto.getTipElement = function getTipElement() {
7283      this.tip = this.tip || $__default["default"](this.config.template)[0];
7284      return this.tip;
7285    };
7286
7287    _proto.setContent = function setContent() {
7288      var tip = this.getTipElement();
7289      this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
7290      $__default["default"](tip).removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$3);
7291    };
7292
7293    _proto.setElementContent = function setElementContent($element, content) {
7294      if (typeof content === 'object' && (content.nodeType || content.jquery)) {
7295        // Content is a DOM node or a jQuery
7296        if (this.config.html) {
7297          if (!$__default["default"](content).parent().is($element)) {
7298            $element.empty().append(content);
7299          }
7300        } else {
7301          $element.text($__default["default"](content).text());
7302        }
7303
7304        return;
7305      }
7306
7307      if (this.config.html) {
7308        if (this.config.sanitize) {
7309          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
7310        }
7311
7312        $element.html(content);
7313      } else {
7314        $element.text(content);
7315      }
7316    };
7317
7318    _proto.getTitle = function getTitle() {
7319      var title = this.element.getAttribute('data-original-title');
7320
7321      if (!title) {
7322        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
7323      }
7324
7325      return title;
7326    } // Private
7327    ;
7328
7329    _proto._getPopperConfig = function _getPopperConfig(attachment) {
7330      var _this3 = this;
7331
7332      var defaultBsConfig = {
7333        placement: attachment,
7334        modifiers: {
7335          offset: this._getOffset(),
7336          flip: {
7337            behavior: this.config.fallbackPlacement
7338          },
7339          arrow: {
7340            element: SELECTOR_ARROW
7341          },
7342          preventOverflow: {
7343            boundariesElement: this.config.boundary
7344          }
7345        },
7346        onCreate: function onCreate(data) {
7347          if (data.originalPlacement !== data.placement) {
7348            _this3._handlePopperPlacementChange(data);
7349          }
7350        },
7351        onUpdate: function onUpdate(data) {
7352          return _this3._handlePopperPlacementChange(data);
7353        }
7354      };
7355      return _extends({}, defaultBsConfig, this.config.popperConfig);
7356    };
7357
7358    _proto._getOffset = function _getOffset() {
7359      var _this4 = this;
7360
7361      var offset = {};
7362
7363      if (typeof this.config.offset === 'function') {
7364        offset.fn = function (data) {
7365          data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element));
7366          return data;
7367        };
7368      } else {
7369        offset.offset = this.config.offset;
7370      }
7371
7372      return offset;
7373    };
7374
7375    _proto._getContainer = function _getContainer() {
7376      if (this.config.container === false) {
7377        return document.body;
7378      }
7379
7380      if (Util.isElement(this.config.container)) {
7381        return $__default["default"](this.config.container);
7382      }
7383
7384      return $__default["default"](document).find(this.config.container);
7385    };
7386
7387    _proto._getAttachment = function _getAttachment(placement) {
7388      return AttachmentMap[placement.toUpperCase()];
7389    };
7390
7391    _proto._setListeners = function _setListeners() {
7392      var _this5 = this;
7393
7394      var triggers = this.config.trigger.split(' ');
7395      triggers.forEach(function (trigger) {
7396        if (trigger === 'click') {
7397          $__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
7398            return _this5.toggle(event);
7399          });
7400        } else if (trigger !== TRIGGER_MANUAL) {
7401          var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
7402          var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
7403          $__default["default"](_this5.element).on(eventIn, _this5.config.selector, function (event) {
7404            return _this5._enter(event);
7405          }).on(eventOut, _this5.config.selector, function (event) {
7406            return _this5._leave(event);
7407          });
7408        }
7409      });
7410
7411      this._hideModalHandler = function () {
7412        if (_this5.element) {
7413          _this5.hide();
7414        }
7415      };
7416
7417      $__default["default"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
7418
7419      if (this.config.selector) {
7420        this.config = _extends({}, this.config, {
7421          trigger: 'manual',
7422          selector: ''
7423        });
7424      } else {
7425        this._fixTitle();
7426      }
7427    };
7428
7429    _proto._fixTitle = function _fixTitle() {
7430      var titleType = typeof this.element.getAttribute('data-original-title');
7431
7432      if (this.element.getAttribute('title') || titleType !== 'string') {
7433        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
7434        this.element.setAttribute('title', '');
7435      }
7436    };
7437
7438    _proto._enter = function _enter(event, context) {
7439      var dataKey = this.constructor.DATA_KEY;
7440      context = context || $__default["default"](event.currentTarget).data(dataKey);
7441
7442      if (!context) {
7443        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
7444        $__default["default"](event.currentTarget).data(dataKey, context);
7445      }
7446
7447      if (event) {
7448        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
7449      }
7450
7451      if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {
7452        context._hoverState = HOVER_STATE_SHOW;
7453        return;
7454      }
7455
7456      clearTimeout(context._timeout);
7457      context._hoverState = HOVER_STATE_SHOW;
7458
7459      if (!context.config.delay || !context.config.delay.show) {
7460        context.show();
7461        return;
7462      }
7463
7464      context._timeout = setTimeout(function () {
7465        if (context._hoverState === HOVER_STATE_SHOW) {
7466          context.show();
7467        }
7468      }, context.config.delay.show);
7469    };
7470
7471    _proto._leave = function _leave(event, context) {
7472      var dataKey = this.constructor.DATA_KEY;
7473      context = context || $__default["default"](event.currentTarget).data(dataKey);
7474
7475      if (!context) {
7476        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
7477        $__default["default"](event.currentTarget).data(dataKey, context);
7478      }
7479
7480      if (event) {
7481        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
7482      }
7483
7484      if (context._isWithActiveTrigger()) {
7485        return;
7486      }
7487
7488      clearTimeout(context._timeout);
7489      context._hoverState = HOVER_STATE_OUT;
7490
7491      if (!context.config.delay || !context.config.delay.hide) {
7492        context.hide();
7493        return;
7494      }
7495
7496      context._timeout = setTimeout(function () {
7497        if (context._hoverState === HOVER_STATE_OUT) {
7498          context.hide();
7499        }
7500      }, context.config.delay.hide);
7501    };
7502
7503    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
7504      for (var trigger in this._activeTrigger) {
7505        if (this._activeTrigger[trigger]) {
7506          return true;
7507        }
7508      }
7509
7510      return false;
7511    };
7512
7513    _proto._getConfig = function _getConfig(config) {
7514      var dataAttributes = $__default["default"](this.element).data();
7515      Object.keys(dataAttributes).forEach(function (dataAttr) {
7516        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
7517          delete dataAttributes[dataAttr];
7518        }
7519      });
7520      config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
7521
7522      if (typeof config.delay === 'number') {
7523        config.delay = {
7524          show: config.delay,
7525          hide: config.delay
7526        };
7527      }
7528
7529      if (typeof config.title === 'number') {
7530        config.title = config.title.toString();
7531      }
7532
7533      if (typeof config.content === 'number') {
7534        config.content = config.content.toString();
7535      }
7536
7537      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
7538
7539      if (config.sanitize) {
7540        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
7541      }
7542
7543      return config;
7544    };
7545
7546    _proto._getDelegateConfig = function _getDelegateConfig() {
7547      var config = {};
7548
7549      if (this.config) {
7550        for (var key in this.config) {
7551          if (this.constructor.Default[key] !== this.config[key]) {
7552            config[key] = this.config[key];
7553          }
7554        }
7555      }
7556
7557      return config;
7558    };
7559
7560    _proto._cleanTipClass = function _cleanTipClass() {
7561      var $tip = $__default["default"](this.getTipElement());
7562      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);
7563
7564      if (tabClass !== null && tabClass.length) {
7565        $tip.removeClass(tabClass.join(''));
7566      }
7567    };
7568
7569    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
7570      this.tip = popperData.instance.popper;
7571
7572      this._cleanTipClass();
7573
7574      this.addAttachmentClass(this._getAttachment(popperData.placement));
7575    };
7576
7577    _proto._fixTransition = function _fixTransition() {
7578      var tip = this.getTipElement();
7579      var initConfigAnimation = this.config.animation;
7580
7581      if (tip.getAttribute('x-placement') !== null) {
7582        return;
7583      }
7584
7585      $__default["default"](tip).removeClass(CLASS_NAME_FADE$3);
7586      this.config.animation = false;
7587      this.hide();
7588      this.show();
7589      this.config.animation = initConfigAnimation;
7590    } // Static
7591    ;
7592
7593    Tooltip._jQueryInterface = function _jQueryInterface(config) {
7594      return this.each(function () {
7595        var $element = $__default["default"](this);
7596        var data = $element.data(DATA_KEY$4);
7597
7598        var _config = typeof config === 'object' && config;
7599
7600        if (!data && /dispose|hide/.test(config)) {
7601          return;
7602        }
7603
7604        if (!data) {
7605          data = new Tooltip(this, _config);
7606          $element.data(DATA_KEY$4, data);
7607        }
7608
7609        if (typeof config === 'string') {
7610          if (typeof data[config] === 'undefined') {
7611            throw new TypeError("No method named \"" + config + "\"");
7612          }
7613
7614          data[config]();
7615        }
7616      });
7617    };
7618
7619    _createClass(Tooltip, null, [{
7620      key: "VERSION",
7621      get: function get() {
7622        return VERSION$4;
7623      }
7624    }, {
7625      key: "Default",
7626      get: function get() {
7627        return Default$3;
7628      }
7629    }, {
7630      key: "NAME",
7631      get: function get() {
7632        return NAME$4;
7633      }
7634    }, {
7635      key: "DATA_KEY",
7636      get: function get() {
7637        return DATA_KEY$4;
7638      }
7639    }, {
7640      key: "Event",
7641      get: function get() {
7642        return Event$1;
7643      }
7644    }, {
7645      key: "EVENT_KEY",
7646      get: function get() {
7647        return EVENT_KEY$4;
7648      }
7649    }, {
7650      key: "DefaultType",
7651      get: function get() {
7652        return DefaultType$3;
7653      }
7654    }]);
7655
7656    return Tooltip;
7657  }();
7658  /**
7659   * jQuery
7660   */
7661
7662
7663  $__default["default"].fn[NAME$4] = Tooltip._jQueryInterface;
7664  $__default["default"].fn[NAME$4].Constructor = Tooltip;
7665
7666  $__default["default"].fn[NAME$4].noConflict = function () {
7667    $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;
7668    return Tooltip._jQueryInterface;
7669  };
7670
7671  /**
7672   * Constants
7673   */
7674
7675  var NAME$3 = 'popover';
7676  var VERSION$3 = '4.6.2';
7677  var DATA_KEY$3 = 'bs.popover';
7678  var EVENT_KEY$3 = "." + DATA_KEY$3;
7679  var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3];
7680  var CLASS_PREFIX = 'bs-popover';
7681  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
7682  var CLASS_NAME_FADE$2 = 'fade';
7683  var CLASS_NAME_SHOW$2 = 'show';
7684  var SELECTOR_TITLE = '.popover-header';
7685  var SELECTOR_CONTENT = '.popover-body';
7686
7687  var Default$2 = _extends({}, Tooltip.Default, {
7688    placement: 'right',
7689    trigger: 'click',
7690    content: '',
7691    template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
7692  });
7693
7694  var DefaultType$2 = _extends({}, Tooltip.DefaultType, {
7695    content: '(string|element|function)'
7696  });
7697
7698  var Event = {
7699    HIDE: "hide" + EVENT_KEY$3,
7700    HIDDEN: "hidden" + EVENT_KEY$3,
7701    SHOW: "show" + EVENT_KEY$3,
7702    SHOWN: "shown" + EVENT_KEY$3,
7703    INSERTED: "inserted" + EVENT_KEY$3,
7704    CLICK: "click" + EVENT_KEY$3,
7705    FOCUSIN: "focusin" + EVENT_KEY$3,
7706    FOCUSOUT: "focusout" + EVENT_KEY$3,
7707    MOUSEENTER: "mouseenter" + EVENT_KEY$3,
7708    MOUSELEAVE: "mouseleave" + EVENT_KEY$3
7709  };
7710  /**
7711   * Class definition
7712   */
7713
7714  var Popover = /*#__PURE__*/function (_Tooltip) {
7715    _inheritsLoose(Popover, _Tooltip);
7716
7717    function Popover() {
7718      return _Tooltip.apply(this, arguments) || this;
7719    }
7720
7721    var _proto = Popover.prototype;
7722
7723    // Overrides
7724    _proto.isWithContent = function isWithContent() {
7725      return this.getTitle() || this._getContent();
7726    };
7727
7728    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
7729      $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
7730    };
7731
7732    _proto.getTipElement = function getTipElement() {
7733      this.tip = this.tip || $__default["default"](this.config.template)[0];
7734      return this.tip;
7735    };
7736
7737    _proto.setContent = function setContent() {
7738      var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events
7739
7740      this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
7741
7742      var content = this._getContent();
7743
7744      if (typeof content === 'function') {
7745        content = content.call(this.element);
7746      }
7747
7748      this.setElementContent($tip.find(SELECTOR_CONTENT), content);
7749      $tip.removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$2);
7750    } // Private
7751    ;
7752
7753    _proto._getContent = function _getContent() {
7754      return this.element.getAttribute('data-content') || this.config.content;
7755    };
7756
7757    _proto._cleanTipClass = function _cleanTipClass() {
7758      var $tip = $__default["default"](this.getTipElement());
7759      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
7760
7761      if (tabClass !== null && tabClass.length > 0) {
7762        $tip.removeClass(tabClass.join(''));
7763      }
7764    } // Static
7765    ;
7766
7767    Popover._jQueryInterface = function _jQueryInterface(config) {
7768      return this.each(function () {
7769        var data = $__default["default"](this).data(DATA_KEY$3);
7770
7771        var _config = typeof config === 'object' ? config : null;
7772
7773        if (!data && /dispose|hide/.test(config)) {
7774          return;
7775        }
7776
7777        if (!data) {
7778          data = new Popover(this, _config);
7779          $__default["default"](this).data(DATA_KEY$3, data);
7780        }
7781
7782        if (typeof config === 'string') {
7783          if (typeof data[config] === 'undefined') {
7784            throw new TypeError("No method named \"" + config + "\"");
7785          }
7786
7787          data[config]();
7788        }
7789      });
7790    };
7791
7792    _createClass(Popover, null, [{
7793      key: "VERSION",
7794      get: // Getters
7795      function get() {
7796        return VERSION$3;
7797      }
7798    }, {
7799      key: "Default",
7800      get: function get() {
7801        return Default$2;
7802      }
7803    }, {
7804      key: "NAME",
7805      get: function get() {
7806        return NAME$3;
7807      }
7808    }, {
7809      key: "DATA_KEY",
7810      get: function get() {
7811        return DATA_KEY$3;
7812      }
7813    }, {
7814      key: "Event",
7815      get: function get() {
7816        return Event;
7817      }
7818    }, {
7819      key: "EVENT_KEY",
7820      get: function get() {
7821        return EVENT_KEY$3;
7822      }
7823    }, {
7824      key: "DefaultType",
7825      get: function get() {
7826        return DefaultType$2;
7827      }
7828    }]);
7829
7830    return Popover;
7831  }(Tooltip);
7832  /**
7833   * jQuery
7834   */
7835
7836
7837  $__default["default"].fn[NAME$3] = Popover._jQueryInterface;
7838  $__default["default"].fn[NAME$3].Constructor = Popover;
7839
7840  $__default["default"].fn[NAME$3].noConflict = function () {
7841    $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;
7842    return Popover._jQueryInterface;
7843  };
7844
7845  /**
7846   * Constants
7847   */
7848
7849  var NAME$2 = 'scrollspy';
7850  var VERSION$2 = '4.6.2';
7851  var DATA_KEY$2 = 'bs.scrollspy';
7852  var EVENT_KEY$2 = "." + DATA_KEY$2;
7853  var DATA_API_KEY$1 = '.data-api';
7854  var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2];
7855  var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
7856  var CLASS_NAME_ACTIVE$1 = 'active';
7857  var EVENT_ACTIVATE = "activate" + EVENT_KEY$2;
7858  var EVENT_SCROLL = "scroll" + EVENT_KEY$2;
7859  var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$2 + DATA_API_KEY$1;
7860  var METHOD_OFFSET = 'offset';
7861  var METHOD_POSITION = 'position';
7862  var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
7863  var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
7864  var SELECTOR_NAV_LINKS = '.nav-link';
7865  var SELECTOR_NAV_ITEMS = '.nav-item';
7866  var SELECTOR_LIST_ITEMS = '.list-group-item';
7867  var SELECTOR_DROPDOWN$1 = '.dropdown';
7868  var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
7869  var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
7870  var Default$1 = {
7871    offset: 10,
7872    method: 'auto',
7873    target: ''
7874  };
7875  var DefaultType$1 = {
7876    offset: 'number',
7877    method: 'string',
7878    target: '(string|element)'
7879  };
7880  /**
7881   * Class definition
7882   */
7883
7884  var ScrollSpy = /*#__PURE__*/function () {
7885    function ScrollSpy(element, config) {
7886      var _this = this;
7887
7888      this._element = element;
7889      this._scrollElement = element.tagName === 'BODY' ? window : element;
7890      this._config = this._getConfig(config);
7891      this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
7892      this._offsets = [];
7893      this._targets = [];
7894      this._activeTarget = null;
7895      this._scrollHeight = 0;
7896      $__default["default"](this._scrollElement).on(EVENT_SCROLL, function (event) {
7897        return _this._process(event);
7898      });
7899      this.refresh();
7900
7901      this._process();
7902    } // Getters
7903
7904
7905    var _proto = ScrollSpy.prototype;
7906
7907    // Public
7908    _proto.refresh = function refresh() {
7909      var _this2 = this;
7910
7911      var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
7912      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
7913      var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
7914      this._offsets = [];
7915      this._targets = [];
7916      this._scrollHeight = this._getScrollHeight();
7917      var targets = [].slice.call(document.querySelectorAll(this._selector));
7918      targets.map(function (element) {
7919        var target;
7920        var targetSelector = Util.getSelectorFromElement(element);
7921
7922        if (targetSelector) {
7923          target = document.querySelector(targetSelector);
7924        }
7925
7926        if (target) {
7927          var targetBCR = target.getBoundingClientRect();
7928
7929          if (targetBCR.width || targetBCR.height) {
7930            // TODO (fat): remove sketch reliance on jQuery position/offset
7931            return [$__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector];
7932          }
7933        }
7934
7935        return null;
7936      }).filter(Boolean).sort(function (a, b) {
7937        return a[0] - b[0];
7938      }).forEach(function (item) {
7939        _this2._offsets.push(item[0]);
7940
7941        _this2._targets.push(item[1]);
7942      });
7943    };
7944
7945    _proto.dispose = function dispose() {
7946      $__default["default"].removeData(this._element, DATA_KEY$2);
7947      $__default["default"](this._scrollElement).off(EVENT_KEY$2);
7948      this._element = null;
7949      this._scrollElement = null;
7950      this._config = null;
7951      this._selector = null;
7952      this._offsets = null;
7953      this._targets = null;
7954      this._activeTarget = null;
7955      this._scrollHeight = null;
7956    } // Private
7957    ;
7958
7959    _proto._getConfig = function _getConfig(config) {
7960      config = _extends({}, Default$1, typeof config === 'object' && config ? config : {});
7961
7962      if (typeof config.target !== 'string' && Util.isElement(config.target)) {
7963        var id = $__default["default"](config.target).attr('id');
7964
7965        if (!id) {
7966          id = Util.getUID(NAME$2);
7967          $__default["default"](config.target).attr('id', id);
7968        }
7969
7970        config.target = "#" + id;
7971      }
7972
7973      Util.typeCheckConfig(NAME$2, config, DefaultType$1);
7974      return config;
7975    };
7976
7977    _proto._getScrollTop = function _getScrollTop() {
7978      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
7979    };
7980
7981    _proto._getScrollHeight = function _getScrollHeight() {
7982      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
7983    };
7984
7985    _proto._getOffsetHeight = function _getOffsetHeight() {
7986      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
7987    };
7988
7989    _proto._process = function _process() {
7990      var scrollTop = this._getScrollTop() + this._config.offset;
7991
7992      var scrollHeight = this._getScrollHeight();
7993
7994      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
7995
7996      if (this._scrollHeight !== scrollHeight) {
7997        this.refresh();
7998      }
7999
8000      if (scrollTop >= maxScroll) {
8001        var target = this._targets[this._targets.length - 1];
8002
8003        if (this._activeTarget !== target) {
8004          this._activate(target);
8005        }
8006
8007        return;
8008      }
8009
8010      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
8011        this._activeTarget = null;
8012
8013        this._clear();
8014
8015        return;
8016      }
8017
8018      for (var i = this._offsets.length; i--;) {
8019        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
8020
8021        if (isActiveTarget) {
8022          this._activate(this._targets[i]);
8023        }
8024      }
8025    };
8026
8027    _proto._activate = function _activate(target) {
8028      this._activeTarget = target;
8029
8030      this._clear();
8031
8032      var queries = this._selector.split(',').map(function (selector) {
8033        return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
8034      });
8035
8036      var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(','))));
8037
8038      if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
8039        $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1);
8040        $link.addClass(CLASS_NAME_ACTIVE$1);
8041      } else {
8042        // Set triggered link as active
8043        $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active
8044        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
8045
8046        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item
8047
8048        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1);
8049      }
8050
8051      $__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, {
8052        relatedTarget: target
8053      });
8054    };
8055
8056    _proto._clear = function _clear() {
8057      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
8058        return node.classList.contains(CLASS_NAME_ACTIVE$1);
8059      }).forEach(function (node) {
8060        return node.classList.remove(CLASS_NAME_ACTIVE$1);
8061      });
8062    } // Static
8063    ;
8064
8065    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
8066      return this.each(function () {
8067        var data = $__default["default"](this).data(DATA_KEY$2);
8068
8069        var _config = typeof config === 'object' && config;
8070
8071        if (!data) {
8072          data = new ScrollSpy(this, _config);
8073          $__default["default"](this).data(DATA_KEY$2, data);
8074        }
8075
8076        if (typeof config === 'string') {
8077          if (typeof data[config] === 'undefined') {
8078            throw new TypeError("No method named \"" + config + "\"");
8079          }
8080
8081          data[config]();
8082        }
8083      });
8084    };
8085
8086    _createClass(ScrollSpy, null, [{
8087      key: "VERSION",
8088      get: function get() {
8089        return VERSION$2;
8090      }
8091    }, {
8092      key: "Default",
8093      get: function get() {
8094        return Default$1;
8095      }
8096    }]);
8097
8098    return ScrollSpy;
8099  }();
8100  /**
8101   * Data API implementation
8102   */
8103
8104
8105  $__default["default"](window).on(EVENT_LOAD_DATA_API, function () {
8106    var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
8107    var scrollSpysLength = scrollSpys.length;
8108
8109    for (var i = scrollSpysLength; i--;) {
8110      var $spy = $__default["default"](scrollSpys[i]);
8111
8112      ScrollSpy._jQueryInterface.call($spy, $spy.data());
8113    }
8114  });
8115  /**
8116   * jQuery
8117   */
8118
8119  $__default["default"].fn[NAME$2] = ScrollSpy._jQueryInterface;
8120  $__default["default"].fn[NAME$2].Constructor = ScrollSpy;
8121
8122  $__default["default"].fn[NAME$2].noConflict = function () {
8123    $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;
8124    return ScrollSpy._jQueryInterface;
8125  };
8126
8127  /**
8128   * Constants
8129   */
8130
8131  var NAME$1 = 'tab';
8132  var VERSION$1 = '4.6.2';
8133  var DATA_KEY$1 = 'bs.tab';
8134  var EVENT_KEY$1 = "." + DATA_KEY$1;
8135  var DATA_API_KEY = '.data-api';
8136  var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1];
8137  var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
8138  var CLASS_NAME_ACTIVE = 'active';
8139  var CLASS_NAME_DISABLED = 'disabled';
8140  var CLASS_NAME_FADE$1 = 'fade';
8141  var CLASS_NAME_SHOW$1 = 'show';
8142  var EVENT_HIDE$1 = "hide" + EVENT_KEY$1;
8143  var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$1;
8144  var EVENT_SHOW$1 = "show" + EVENT_KEY$1;
8145  var EVENT_SHOWN$1 = "shown" + EVENT_KEY$1;
8146  var EVENT_CLICK_DATA_API = "click" + EVENT_KEY$1 + DATA_API_KEY;
8147  var SELECTOR_DROPDOWN = '.dropdown';
8148  var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
8149  var SELECTOR_ACTIVE = '.active';
8150  var SELECTOR_ACTIVE_UL = '> li > .active';
8151  var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
8152  var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
8153  var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
8154  /**
8155   * Class definition
8156   */
8157
8158  var Tab = /*#__PURE__*/function () {
8159    function Tab(element) {
8160      this._element = element;
8161    } // Getters
8162
8163
8164    var _proto = Tab.prototype;
8165
8166    // Public
8167    _proto.show = function show() {
8168      var _this = this;
8169
8170      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) {
8171        return;
8172      }
8173
8174      var target;
8175      var previous;
8176      var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];
8177      var selector = Util.getSelectorFromElement(this._element);
8178
8179      if (listElement) {
8180        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
8181        previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector));
8182        previous = previous[previous.length - 1];
8183      }
8184
8185      var hideEvent = $__default["default"].Event(EVENT_HIDE$1, {
8186        relatedTarget: this._element
8187      });
8188      var showEvent = $__default["default"].Event(EVENT_SHOW$1, {
8189        relatedTarget: previous
8190      });
8191
8192      if (previous) {
8193        $__default["default"](previous).trigger(hideEvent);
8194      }
8195
8196      $__default["default"](this._element).trigger(showEvent);
8197
8198      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
8199        return;
8200      }
8201
8202      if (selector) {
8203        target = document.querySelector(selector);
8204      }
8205
8206      this._activate(this._element, listElement);
8207
8208      var complete = function complete() {
8209        var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN$1, {
8210          relatedTarget: _this._element
8211        });
8212        var shownEvent = $__default["default"].Event(EVENT_SHOWN$1, {
8213          relatedTarget: previous
8214        });
8215        $__default["default"](previous).trigger(hiddenEvent);
8216        $__default["default"](_this._element).trigger(shownEvent);
8217      };
8218
8219      if (target) {
8220        this._activate(target, target.parentNode, complete);
8221      } else {
8222        complete();
8223      }
8224    };
8225
8226    _proto.dispose = function dispose() {
8227      $__default["default"].removeData(this._element, DATA_KEY$1);
8228      this._element = null;
8229    } // Private
8230    ;
8231
8232    _proto._activate = function _activate(element, container, callback) {
8233      var _this2 = this;
8234
8235      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE);
8236      var active = activeElements[0];
8237      var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE$1);
8238
8239      var complete = function complete() {
8240        return _this2._transitionComplete(element, active, callback);
8241      };
8242
8243      if (active && isTransitioning) {
8244        var transitionDuration = Util.getTransitionDurationFromElement(active);
8245        $__default["default"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
8246      } else {
8247        complete();
8248      }
8249    };
8250
8251    _proto._transitionComplete = function _transitionComplete(element, active, callback) {
8252      if (active) {
8253        $__default["default"](active).removeClass(CLASS_NAME_ACTIVE);
8254        var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
8255
8256        if (dropdownChild) {
8257          $__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE);
8258        }
8259
8260        if (active.getAttribute('role') === 'tab') {
8261          active.setAttribute('aria-selected', false);
8262        }
8263      }
8264
8265      $__default["default"](element).addClass(CLASS_NAME_ACTIVE);
8266
8267      if (element.getAttribute('role') === 'tab') {
8268        element.setAttribute('aria-selected', true);
8269      }
8270
8271      Util.reflow(element);
8272
8273      if (element.classList.contains(CLASS_NAME_FADE$1)) {
8274        element.classList.add(CLASS_NAME_SHOW$1);
8275      }
8276
8277      var parent = element.parentNode;
8278
8279      if (parent && parent.nodeName === 'LI') {
8280        parent = parent.parentNode;
8281      }
8282
8283      if (parent && $__default["default"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
8284        var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN)[0];
8285
8286        if (dropdownElement) {
8287          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));
8288          $__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);
8289        }
8290
8291        element.setAttribute('aria-expanded', true);
8292      }
8293
8294      if (callback) {
8295        callback();
8296      }
8297    } // Static
8298    ;
8299
8300    Tab._jQueryInterface = function _jQueryInterface(config) {
8301      return this.each(function () {
8302        var $this = $__default["default"](this);
8303        var data = $this.data(DATA_KEY$1);
8304
8305        if (!data) {
8306          data = new Tab(this);
8307          $this.data(DATA_KEY$1, data);
8308        }
8309
8310        if (typeof config === 'string') {
8311          if (typeof data[config] === 'undefined') {
8312            throw new TypeError("No method named \"" + config + "\"");
8313          }
8314
8315          data[config]();
8316        }
8317      });
8318    };
8319
8320    _createClass(Tab, null, [{
8321      key: "VERSION",
8322      get: function get() {
8323        return VERSION$1;
8324      }
8325    }]);
8326
8327    return Tab;
8328  }();
8329  /**
8330   * Data API implementation
8331   */
8332
8333
8334  $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
8335    event.preventDefault();
8336
8337    Tab._jQueryInterface.call($__default["default"](this), 'show');
8338  });
8339  /**
8340   * jQuery
8341   */
8342
8343  $__default["default"].fn[NAME$1] = Tab._jQueryInterface;
8344  $__default["default"].fn[NAME$1].Constructor = Tab;
8345
8346  $__default["default"].fn[NAME$1].noConflict = function () {
8347    $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;
8348    return Tab._jQueryInterface;
8349  };
8350
8351  /**
8352   * Constants
8353   */
8354
8355  var NAME = 'toast';
8356  var VERSION = '4.6.2';
8357  var DATA_KEY = 'bs.toast';
8358  var EVENT_KEY = "." + DATA_KEY;
8359  var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
8360  var CLASS_NAME_FADE = 'fade';
8361  var CLASS_NAME_HIDE = 'hide';
8362  var CLASS_NAME_SHOW = 'show';
8363  var CLASS_NAME_SHOWING = 'showing';
8364  var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
8365  var EVENT_HIDE = "hide" + EVENT_KEY;
8366  var EVENT_HIDDEN = "hidden" + EVENT_KEY;
8367  var EVENT_SHOW = "show" + EVENT_KEY;
8368  var EVENT_SHOWN = "shown" + EVENT_KEY;
8369  var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]';
8370  var Default = {
8371    animation: true,
8372    autohide: true,
8373    delay: 500
8374  };
8375  var DefaultType = {
8376    animation: 'boolean',
8377    autohide: 'boolean',
8378    delay: 'number'
8379  };
8380  /**
8381   * Class definition
8382   */
8383
8384  var Toast = /*#__PURE__*/function () {
8385    function Toast(element, config) {
8386      this._element = element;
8387      this._config = this._getConfig(config);
8388      this._timeout = null;
8389
8390      this._setListeners();
8391    } // Getters
8392
8393
8394    var _proto = Toast.prototype;
8395
8396    // Public
8397    _proto.show = function show() {
8398      var _this = this;
8399
8400      var showEvent = $__default["default"].Event(EVENT_SHOW);
8401      $__default["default"](this._element).trigger(showEvent);
8402
8403      if (showEvent.isDefaultPrevented()) {
8404        return;
8405      }
8406
8407      this._clearTimeout();
8408
8409      if (this._config.animation) {
8410        this._element.classList.add(CLASS_NAME_FADE);
8411      }
8412
8413      var complete = function complete() {
8414        _this._element.classList.remove(CLASS_NAME_SHOWING);
8415
8416        _this._element.classList.add(CLASS_NAME_SHOW);
8417
8418        $__default["default"](_this._element).trigger(EVENT_SHOWN);
8419
8420        if (_this._config.autohide) {
8421          _this._timeout = setTimeout(function () {
8422            _this.hide();
8423          }, _this._config.delay);
8424        }
8425      };
8426
8427      this._element.classList.remove(CLASS_NAME_HIDE);
8428
8429      Util.reflow(this._element);
8430
8431      this._element.classList.add(CLASS_NAME_SHOWING);
8432
8433      if (this._config.animation) {
8434        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
8435        $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
8436      } else {
8437        complete();
8438      }
8439    };
8440
8441    _proto.hide = function hide() {
8442      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
8443        return;
8444      }
8445
8446      var hideEvent = $__default["default"].Event(EVENT_HIDE);
8447      $__default["default"](this._element).trigger(hideEvent);
8448
8449      if (hideEvent.isDefaultPrevented()) {
8450        return;
8451      }
8452
8453      this._close();
8454    };
8455
8456    _proto.dispose = function dispose() {
8457      this._clearTimeout();
8458
8459      if (this._element.classList.contains(CLASS_NAME_SHOW)) {
8460        this._element.classList.remove(CLASS_NAME_SHOW);
8461      }
8462
8463      $__default["default"](this._element).off(EVENT_CLICK_DISMISS);
8464      $__default["default"].removeData(this._element, DATA_KEY);
8465      this._element = null;
8466      this._config = null;
8467    } // Private
8468    ;
8469
8470    _proto._getConfig = function _getConfig(config) {
8471      config = _extends({}, Default, $__default["default"](this._element).data(), typeof config === 'object' && config ? config : {});
8472      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
8473      return config;
8474    };
8475
8476    _proto._setListeners = function _setListeners() {
8477      var _this2 = this;
8478
8479      $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () {
8480        return _this2.hide();
8481      });
8482    };
8483
8484    _proto._close = function _close() {
8485      var _this3 = this;
8486
8487      var complete = function complete() {
8488        _this3._element.classList.add(CLASS_NAME_HIDE);
8489
8490        $__default["default"](_this3._element).trigger(EVENT_HIDDEN);
8491      };
8492
8493      this._element.classList.remove(CLASS_NAME_SHOW);
8494
8495      if (this._config.animation) {
8496        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
8497        $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
8498      } else {
8499        complete();
8500      }
8501    };
8502
8503    _proto._clearTimeout = function _clearTimeout() {
8504      clearTimeout(this._timeout);
8505      this._timeout = null;
8506    } // Static
8507    ;
8508
8509    Toast._jQueryInterface = function _jQueryInterface(config) {
8510      return this.each(function () {
8511        var $element = $__default["default"](this);
8512        var data = $element.data(DATA_KEY);
8513
8514        var _config = typeof config === 'object' && config;
8515
8516        if (!data) {
8517          data = new Toast(this, _config);
8518          $element.data(DATA_KEY, data);
8519        }
8520
8521        if (typeof config === 'string') {
8522          if (typeof data[config] === 'undefined') {
8523            throw new TypeError("No method named \"" + config + "\"");
8524          }
8525
8526          data[config](this);
8527        }
8528      });
8529    };
8530
8531    _createClass(Toast, null, [{
8532      key: "VERSION",
8533      get: function get() {
8534        return VERSION;
8535      }
8536    }, {
8537      key: "DefaultType",
8538      get: function get() {
8539        return DefaultType;
8540      }
8541    }, {
8542      key: "Default",
8543      get: function get() {
8544        return Default;
8545      }
8546    }]);
8547
8548    return Toast;
8549  }();
8550  /**
8551   * jQuery
8552   */
8553
8554
8555  $__default["default"].fn[NAME] = Toast._jQueryInterface;
8556  $__default["default"].fn[NAME].Constructor = Toast;
8557
8558  $__default["default"].fn[NAME].noConflict = function () {
8559    $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
8560    return Toast._jQueryInterface;
8561  };
8562
8563  exports.Alert = Alert;
8564  exports.Button = Button;
8565  exports.Carousel = Carousel;
8566  exports.Collapse = Collapse;
8567  exports.Dropdown = Dropdown;
8568  exports.Modal = Modal;
8569  exports.Popover = Popover;
8570  exports.Scrollspy = ScrollSpy;
8571  exports.Tab = Tab;
8572  exports.Toast = Toast;
8573  exports.Tooltip = Tooltip;
8574  exports.Util = Util;
8575
8576  Object.defineProperty(exports, '__esModule', { value: true });
8577
8578}));
8579//# sourceMappingURL=bootstrap.js.map
8580
8581
8582/***/ }),
8583
vendor: 14,213 bytes, lines 8584-9056
8584/***/ "../FigureBaseResources/node_modules/headroom.js/dist/headroom.js":
8585/*!************************************************************************!*\
8586  !*** ../FigureBaseResources/node_modules/headroom.js/dist/headroom.js ***!
8587  \************************************************************************/
8588/***/ (function(module, exports) {
8589
8590var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
8591 * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it
8592 * Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js
8593 * License: MIT
8594 */
8595
8596(function(root, factory) {
8597  'use strict';
8598
8599  if (true) {
8600    // AMD. Register as an anonymous module.
8601    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
8602		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
8603		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
8604		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
8605  }
8606  else // removed by dead control flow
8607{}
8608}(this, function() {
8609  'use strict';
8610
8611  /* exported features */
8612  
8613  var features = {
8614    bind : !!(function(){}.bind),
8615    classList : 'classList' in document.documentElement,
8616    rAF : !!(window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame)
8617  };
8618  window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;
8619  
8620  /**
8621   * Handles debouncing of events via requestAnimationFrame
8622   * @see http://www.html5rocks.com/en/tutorials/speed/animations/
8623   * @param {Function} callback The callback to handle whichever event
8624   */
8625  function Debouncer (callback) {
8626    this.callback = callback;
8627    this.ticking = false;
8628  }
8629  Debouncer.prototype = {
8630    constructor : Debouncer,
8631  
8632    /**
8633     * dispatches the event to the supplied callback
8634     * @private
8635     */
8636    update : function() {
8637      this.callback && this.callback();
8638      this.ticking = false;
8639    },
8640  
8641    /**
8642     * ensures events don't get stacked
8643     * @private
8644     */
8645    requestTick : function() {
8646      if(!this.ticking) {
8647        requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)));
8648        this.ticking = true;
8649      }
8650    },
8651  
8652    /**
8653     * Attach this as the event listeners
8654     */
8655    handleEvent : function() {
8656      this.requestTick();
8657    }
8658  };
8659  /**
8660   * Check if object is part of the DOM
8661   * @constructor
8662   * @param {Object} obj element to check
8663   */
8664  function isDOMElement(obj) {
8665    return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType);
8666  }
8667  
8668  /**
8669   * Helper function for extending objects
8670   */
8671  function extend (object /*, objectN ... */) {
8672    if(arguments.length <= 0) {
8673      throw new Error('Missing arguments in extend function');
8674    }
8675  
8676    var result = object || {},
8677        key,
8678        i;
8679  
8680    for (i = 1; i < arguments.length; i++) {
8681      var replacement = arguments[i] || {};
8682  
8683      for (key in replacement) {
8684        // Recurse into object except if the object is a DOM element
8685        if(typeof result[key] === 'object' && ! isDOMElement(result[key])) {
8686          result[key] = extend(result[key], replacement[key]);
8687        }
8688        else {
8689          result[key] = result[key] || replacement[key];
8690        }
8691      }
8692    }
8693  
8694    return result;
8695  }
8696  
8697  /**
8698   * Helper function for normalizing tolerance option to object format
8699   */
8700  function normalizeTolerance (t) {
8701    return t === Object(t) ? t : { down : t, up : t };
8702  }
8703  
8704  /**
8705   * UI enhancement for fixed headers.
8706   * Hides header when scrolling down
8707   * Shows header when scrolling up
8708   * @constructor
8709   * @param {DOMElement} elem the header element
8710   * @param {Object} options options for the widget
8711   */
8712  function Headroom (elem, options) {
8713    options = extend(options, Headroom.options);
8714  
8715    this.lastKnownScrollY = 0;
8716    this.elem             = elem;
8717    this.tolerance        = normalizeTolerance(options.tolerance);
8718    this.classes          = options.classes;
8719    this.offset           = options.offset;
8720    this.scroller         = options.scroller;
8721    this.initialised      = false;
8722    this.onPin            = options.onPin;
8723    this.onUnpin          = options.onUnpin;
8724    this.onTop            = options.onTop;
8725    this.onNotTop         = options.onNotTop;
8726    this.onBottom         = options.onBottom;
8727    this.onNotBottom      = options.onNotBottom;
8728  }
8729  Headroom.prototype = {
8730    constructor : Headroom,
8731  
8732    /**
8733     * Initialises the widget
8734     */
8735    init : function() {
8736      if(!Headroom.cutsTheMustard) {
8737        return;
8738      }
8739  
8740      this.debouncer = new Debouncer(this.update.bind(this));
8741      this.elem.classList.add(this.classes.initial);
8742  
8743      // defer event registration to handle browser
8744      // potentially restoring previous scroll position
8745      setTimeout(this.attachEvent.bind(this), 100);
8746  
8747      return this;
8748    },
8749  
8750    /**
8751     * Unattaches events and removes any classes that were added
8752     */
8753    destroy : function() {
8754      var classes = this.classes;
8755  
8756      this.initialised = false;
8757  
8758      for (var key in classes) {
8759        if(classes.hasOwnProperty(key)) {
8760          this.elem.classList.remove(classes[key]);
8761        }
8762      }
8763  
8764      this.scroller.removeEventListener('scroll', this.debouncer, false);
8765    },
8766  
8767    /**
8768     * Attaches the scroll event
8769     * @private
8770     */
8771    attachEvent : function() {
8772      if(!this.initialised){
8773        this.lastKnownScrollY = this.getScrollY();
8774        this.initialised = true;
8775        this.scroller.addEventListener('scroll', this.debouncer, false);
8776  
8777        this.debouncer.handleEvent();
8778      }
8779    },
8780  
8781    /**
8782     * Unpins the header if it's currently pinned
8783     */
8784    unpin : function() {
8785      var classList = this.elem.classList,
8786        classes = this.classes;
8787  
8788      if(classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) {
8789        classList.add(classes.unpinned);
8790        classList.remove(classes.pinned);
8791        this.onUnpin && this.onUnpin.call(this);
8792      }
8793    },
8794  
8795    /**
8796     * Pins the header if it's currently unpinned
8797     */
8798    pin : function() {
8799      var classList = this.elem.classList,
8800        classes = this.classes;
8801  
8802      if(classList.contains(classes.unpinned)) {
8803        classList.remove(classes.unpinned);
8804        classList.add(classes.pinned);
8805        this.onPin && this.onPin.call(this);
8806      }
8807    },
8808  
8809    /**
8810     * Handles the top states
8811     */
8812    top : function() {
8813      var classList = this.elem.classList,
8814        classes = this.classes;
8815  
8816      if(!classList.contains(classes.top)) {
8817        classList.add(classes.top);
8818        classList.remove(classes.notTop);
8819        this.onTop && this.onTop.call(this);
8820      }
8821    },
8822  
8823    /**
8824     * Handles the not top state
8825     */
8826    notTop : function() {
8827      var classList = this.elem.classList,
8828        classes = this.classes;
8829  
8830      if(!classList.contains(classes.notTop)) {
8831        classList.add(classes.notTop);
8832        classList.remove(classes.top);
8833        this.onNotTop && this.onNotTop.call(this);
8834      }
8835    },
8836  
8837    bottom : function() {
8838      var classList = this.elem.classList,
8839        classes = this.classes;
8840  
8841      if(!classList.contains(classes.bottom)) {
8842        classList.add(classes.bottom);
8843        classList.remove(classes.notBottom);
8844        this.onBottom && this.onBottom.call(this);
8845      }
8846    },
8847  
8848    /**
8849     * Handles the not top state
8850     */
8851    notBottom : function() {
8852      var classList = this.elem.classList,
8853        classes = this.classes;
8854  
8855      if(!classList.contains(classes.notBottom)) {
8856        classList.add(classes.notBottom);
8857        classList.remove(classes.bottom);
8858        this.onNotBottom && this.onNotBottom.call(this);
8859      }
8860    },
8861  
8862    /**
8863     * Gets the Y scroll position
8864     * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY
8865     * @return {Number} pixels the page has scrolled along the Y-axis
8866     */
8867    getScrollY : function() {
8868      return (this.scroller.pageYOffset !== undefined)
8869        ? this.scroller.pageYOffset
8870        : (this.scroller.scrollTop !== undefined)
8871          ? this.scroller.scrollTop
8872          : (document.documentElement || document.body.parentNode || document.body).scrollTop;
8873    },
8874  
8875    /**
8876     * Gets the height of the viewport
8877     * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript
8878     * @return {int} the height of the viewport in pixels
8879     */
8880    getViewportHeight : function () {
8881      return window.innerHeight
8882        || document.documentElement.clientHeight
8883        || document.body.clientHeight;
8884    },
8885  
8886    /**
8887     * Gets the physical height of the DOM element
8888     * @param  {Object}  elm the element to calculate the physical height of which
8889     * @return {int}     the physical height of the element in pixels
8890     */
8891    getElementPhysicalHeight : function (elm) {
8892      return Math.max(
8893        elm.offsetHeight,
8894        elm.clientHeight
8895      );
8896    },
8897  
8898    /**
8899     * Gets the physical height of the scroller element
8900     * @return {int} the physical height of the scroller element in pixels
8901     */
8902    getScrollerPhysicalHeight : function () {
8903      return (this.scroller === window || this.scroller === document.body)
8904        ? this.getViewportHeight()
8905        : this.getElementPhysicalHeight(this.scroller);
8906    },
8907  
8908    /**
8909     * Gets the height of the document
8910     * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/
8911     * @return {int} the height of the document in pixels
8912     */
8913    getDocumentHeight : function () {
8914      var body = document.body,
8915        documentElement = document.documentElement;
8916  
8917      return Math.max(
8918        body.scrollHeight, documentElement.scrollHeight,
8919        body.offsetHeight, documentElement.offsetHeight,
8920        body.clientHeight, documentElement.clientHeight
8921      );
8922    },
8923  
8924    /**
8925     * Gets the height of the DOM element
8926     * @param  {Object}  elm the element to calculate the height of which
8927     * @return {int}     the height of the element in pixels
8928     */
8929    getElementHeight : function (elm) {
8930      return Math.max(
8931        elm.scrollHeight,
8932        elm.offsetHeight,
8933        elm.clientHeight
8934      );
8935    },
8936  
8937    /**
8938     * Gets the height of the scroller element
8939     * @return {int} the height of the scroller element in pixels
8940     */
8941    getScrollerHeight : function () {
8942      return (this.scroller === window || this.scroller === document.body)
8943        ? this.getDocumentHeight()
8944        : this.getElementHeight(this.scroller);
8945    },
8946  
8947    /**
8948     * determines if the scroll position is outside of document boundaries
8949     * @param  {int}  currentScrollY the current y scroll position
8950     * @return {bool} true if out of bounds, false otherwise
8951     */
8952    isOutOfBounds : function (currentScrollY) {
8953      var pastTop  = currentScrollY < 0,
8954        pastBottom = currentScrollY + this.getScrollerPhysicalHeight() > this.getScrollerHeight();
8955  
8956      return pastTop || pastBottom;
8957    },
8958  
8959    /**
8960     * determines if the tolerance has been exceeded
8961     * @param  {int} currentScrollY the current scroll y position
8962     * @return {bool} true if tolerance exceeded, false otherwise
8963     */
8964    toleranceExceeded : function (currentScrollY, direction) {
8965      return Math.abs(currentScrollY-this.lastKnownScrollY) >= this.tolerance[direction];
8966    },
8967  
8968    /**
8969     * determine if it is appropriate to unpin
8970     * @param  {int} currentScrollY the current y scroll position
8971     * @param  {bool} toleranceExceeded has the tolerance been exceeded?
8972     * @return {bool} true if should unpin, false otherwise
8973     */
8974    shouldUnpin : function (currentScrollY, toleranceExceeded) {
8975      var scrollingDown = currentScrollY > this.lastKnownScrollY,
8976        pastOffset = currentScrollY >= this.offset;
8977  
8978      return scrollingDown && pastOffset && toleranceExceeded;
8979    },
8980  
8981    /**
8982     * determine if it is appropriate to pin
8983     * @param  {int} currentScrollY the current y scroll position
8984     * @param  {bool} toleranceExceeded has the tolerance been exceeded?
8985     * @return {bool} true if should pin, false otherwise
8986     */
8987    shouldPin : function (currentScrollY, toleranceExceeded) {
8988      var scrollingUp  = currentScrollY < this.lastKnownScrollY,
8989        pastOffset = currentScrollY <= this.offset;
8990  
8991      return (scrollingUp && toleranceExceeded) || pastOffset;
8992    },
8993  
8994    /**
8995     * Handles updating the state of the widget
8996     */
8997    update : function() {
8998      var currentScrollY  = this.getScrollY(),
8999        scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up',
9000        toleranceExceeded = this.toleranceExceeded(currentScrollY, scrollDirection);
9001  
9002      if(this.isOutOfBounds(currentScrollY)) { // Ignore bouncy scrolling in OSX
9003        return;
9004      }
9005  
9006      if (currentScrollY <= this.offset ) {
9007        this.top();
9008      } else {
9009        this.notTop();
9010      }
9011  
9012      if(currentScrollY + this.getViewportHeight() >= this.getScrollerHeight()) {
9013        this.bottom();
9014      }
9015      else {
9016        this.notBottom();
9017      }
9018  
9019      if(this.shouldUnpin(currentScrollY, toleranceExceeded)) {
9020        this.unpin();
9021      }
9022      else if(this.shouldPin(currentScrollY, toleranceExceeded)) {
9023        this.pin();
9024      }
9025  
9026      this.lastKnownScrollY = currentScrollY;
9027    }
9028  };
9029  /**
9030   * Default options
9031   * @type {Object}
9032   */
9033  Headroom.options = {
9034    tolerance : {
9035      up : 0,
9036      down : 0
9037    },
9038    offset : 0,
9039    scroller: window,
9040    classes : {
9041      pinned : 'headroom--pinned',
9042      unpinned : 'headroom--unpinned',
9043      top : 'headroom--top',
9044      notTop : 'headroom--not-top',
9045      bottom : 'headroom--bottom',
9046      notBottom : 'headroom--not-bottom',
9047      initial : 'headroom'
9048    }
9049  };
9050  Headroom.cutsTheMustard = typeof features !== 'undefined' && features.rAF && features.bind && features.classList;
9051
9052  return Headroom;
9053}));
9054
9055/***/ }),
9056
vendor: 1,407 bytes, lines 9057-9114
9057/***/ "../FigureBaseResources/node_modules/headroom.js/dist/jQuery.headroom.js":
9058/*!*******************************************************************************!*\
9059  !*** ../FigureBaseResources/node_modules/headroom.js/dist/jQuery.headroom.js ***!
9060  \*******************************************************************************/
9061/***/ (function() {
9062
9063/*!
9064 * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it
9065 * Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js
9066 * License: MIT
9067 */
9068
9069(function($) {
9070
9071  if(!$) {
9072    return;
9073  }
9074
9075  ////////////
9076  // Plugin //
9077  ////////////
9078
9079  $.fn.headroom = function(option) {
9080    return this.each(function() {
9081      var $this   = $(this),
9082        data      = $this.data('headroom'),
9083        options   = typeof option === 'object' && option;
9084
9085      options = $.extend(true, {}, Headroom.options, options);
9086
9087      if (!data) {
9088        data = new Headroom(this, options);
9089        data.init();
9090        $this.data('headroom', data);
9091      }
9092      if (typeof option === 'string') {
9093        data[option]();
9094
9095        if(option === 'destroy'){
9096          $this.removeData('headroom');
9097        }
9098      }
9099    });
9100  };
9101
9102  //////////////
9103  // Data API //
9104  //////////////
9105
9106  $('[data-headroom]').each(function() {
9107    var $this = $(this);
9108    $this.headroom($this.data());
9109  });
9110
9111}(window.Zepto || window.jQuery));
9112
9113/***/ }),
9114
vendor: 285,839 bytes, lines 9115-19841
9115/***/ "../FigureBaseResources/node_modules/jquery/dist/jquery.js":
9116/*!*****************************************************************!*\
9117  !*** ../FigureBaseResources/node_modules/jquery/dist/jquery.js ***!
9118  \*****************************************************************/
9119/***/ (function(module, exports) {
9120
9121var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
9122 * jQuery JavaScript Library v3.7.1
9123 * https://jquery.com/
9124 *
9125 * Copyright OpenJS Foundation and other contributors
9126 * Released under the MIT license
9127 * https://jquery.org/license
9128 *
9129 * Date: 2023-08-28T13:37Z
9130 */
9131( function( global, factory ) {
9132
9133	"use strict";
9134
9135	if (  true && typeof module.exports === "object" ) {
9136
9137		// For CommonJS and CommonJS-like environments where a proper `window`
9138		// is present, execute the factory and get jQuery.
9139		// For environments that do not have a `window` with a `document`
9140		// (such as Node.js), expose a factory as module.exports.
9141		// This accentuates the need for the creation of a real `window`.
9142		// e.g. var jQuery = require("jquery")(window);
9143		// See ticket trac-14549 for more info.
9144		module.exports = global.document ?
9145			factory( global, true ) :
9146			function( w ) {
9147				if ( !w.document ) {
9148					throw new Error( "jQuery requires a window with a document" );
9149				}
9150				return factory( w );
9151			};
9152	} else {
9153		factory( global );
9154	}
9155
9156// Pass this if window is not defined yet
9157} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
9158
9159// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
9160// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
9161// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
9162// enough that all such attempts are guarded in a try block.
9163"use strict";
9164
9165var arr = [];
9166
9167var getProto = Object.getPrototypeOf;
9168
9169var slice = arr.slice;
9170
9171var flat = arr.flat ? function( array ) {
9172	return arr.flat.call( array );
9173} : function( array ) {
9174	return arr.concat.apply( [], array );
9175};
9176
9177
9178var push = arr.push;
9179
9180var indexOf = arr.indexOf;
9181
9182var class2type = {};
9183
9184var toString = class2type.toString;
9185
9186var hasOwn = class2type.hasOwnProperty;
9187
9188var fnToString = hasOwn.toString;
9189
9190var ObjectFunctionString = fnToString.call( Object );
9191
9192var support = {};
9193
9194var isFunction = function isFunction( obj ) {
9195
9196		// Support: Chrome <=57, Firefox <=52
9197		// In some browsers, typeof returns "function" for HTML <object> elements
9198		// (i.e., `typeof document.createElement( "object" ) === "function"`).
9199		// We don't want to classify *any* DOM node as a function.
9200		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
9201		// Plus for old WebKit, typeof returns "function" for HTML collections
9202		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
9203		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
9204			typeof obj.item !== "function";
9205	};
9206
9207
9208var isWindow = function isWindow( obj ) {
9209		return obj != null && obj === obj.window;
9210	};
9211
9212
9213var document = window.document;
9214
9215
9216
9217	var preservedScriptAttributes = {
9218		type: true,
9219		src: true,
9220		nonce: true,
9221		noModule: true
9222	};
9223
9224	function DOMEval( code, node, doc ) {
9225		doc = doc || document;
9226
9227		var i, val,
9228			script = doc.createElement( "script" );
9229
9230		script.text = code;
9231		if ( node ) {
9232			for ( i in preservedScriptAttributes ) {
9233
9234				// Support: Firefox 64+, Edge 18+
9235				// Some browsers don't support the "nonce" property on scripts.
9236				// On the other hand, just using `getAttribute` is not enough as
9237				// the `nonce` attribute is reset to an empty string whenever it
9238				// becomes browsing-context connected.
9239				// See https://github.com/whatwg/html/issues/2369
9240				// See https://html.spec.whatwg.org/#nonce-attributes
9241				// The `node.getAttribute` check was added for the sake of
9242				// `jQuery.globalEval` so that it can fake a nonce-containing node
9243				// via an object.
9244				val = node[ i ] || node.getAttribute && node.getAttribute( i );
9245				if ( val ) {
9246					script.setAttribute( i, val );
9247				}
9248			}
9249		}
9250		doc.head.appendChild( script ).parentNode.removeChild( script );
9251	}
9252
9253
9254function toType( obj ) {
9255	if ( obj == null ) {
9256		return obj + "";
9257	}
9258
9259	// Support: Android <=2.3 only (functionish RegExp)
9260	return typeof obj === "object" || typeof obj === "function" ?
9261		class2type[ toString.call( obj ) ] || "object" :
9262		typeof obj;
9263}
9264/* global Symbol */
9265// Defining this global in .eslintrc.json would create a danger of using the global
9266// unguarded in another place, it seems safer to define global only for this module
9267
9268
9269
9270var version = "3.7.1",
9271
9272	rhtmlSuffix = /HTML$/i,
9273
9274	// Define a local copy of jQuery
9275	jQuery = function( selector, context ) {
9276
9277		// The jQuery object is actually just the init constructor 'enhanced'
9278		// Need init if jQuery is called (just allow error to be thrown if not included)
9279		return new jQuery.fn.init( selector, context );
9280	};
9281
9282jQuery.fn = jQuery.prototype = {
9283
9284	// The current version of jQuery being used
9285	jquery: version,
9286
9287	constructor: jQuery,
9288
9289	// The default length of a jQuery object is 0
9290	length: 0,
9291
9292	toArray: function() {
9293		return slice.call( this );
9294	},
9295
9296	// Get the Nth element in the matched element set OR
9297	// Get the whole matched element set as a clean array
9298	get: function( num ) {
9299
9300		// Return all the elements in a clean array
9301		if ( num == null ) {
9302			return slice.call( this );
9303		}
9304
9305		// Return just the one element from the set
9306		return num < 0 ? this[ num + this.length ] : this[ num ];
9307	},
9308
9309	// Take an array of elements and push it onto the stack
9310	// (returning the new matched element set)
9311	pushStack: function( elems ) {
9312
9313		// Build a new jQuery matched element set
9314		var ret = jQuery.merge( this.constructor(), elems );
9315
9316		// Add the old object onto the stack (as a reference)
9317		ret.prevObject = this;
9318
9319		// Return the newly-formed element set
9320		return ret;
9321	},
9322
9323	// Execute a callback for every element in the matched set.
9324	each: function( callback ) {
9325		return jQuery.each( this, callback );
9326	},
9327
9328	map: function( callback ) {
9329		return this.pushStack( jQuery.map( this, function( elem, i ) {
9330			return callback.call( elem, i, elem );
9331		} ) );
9332	},
9333
9334	slice: function() {
9335		return this.pushStack( slice.apply( this, arguments ) );
9336	},
9337
9338	first: function() {
9339		return this.eq( 0 );
9340	},
9341
9342	last: function() {
9343		return this.eq( -1 );
9344	},
9345
9346	even: function() {
9347		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
9348			return ( i + 1 ) % 2;
9349		} ) );
9350	},
9351
9352	odd: function() {
9353		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
9354			return i % 2;
9355		} ) );
9356	},
9357
9358	eq: function( i ) {
9359		var len = this.length,
9360			j = +i + ( i < 0 ? len : 0 );
9361		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
9362	},
9363
9364	end: function() {
9365		return this.prevObject || this.constructor();
9366	},
9367
9368	// For internal use only.
9369	// Behaves like an Array's method, not like a jQuery method.
9370	push: push,
9371	sort: arr.sort,
9372	splice: arr.splice
9373};
9374
9375jQuery.extend = jQuery.fn.extend = function() {
9376	var options, name, src, copy, copyIsArray, clone,
9377		target = arguments[ 0 ] || {},
9378		i = 1,
9379		length = arguments.length,
9380		deep = false;
9381
9382	// Handle a deep copy situation
9383	if ( typeof target === "boolean" ) {
9384		deep = target;
9385
9386		// Skip the boolean and the target
9387		target = arguments[ i ] || {};
9388		i++;
9389	}
9390
9391	// Handle case when target is a string or something (possible in deep copy)
9392	if ( typeof target !== "object" && !isFunction( target ) ) {
9393		target = {};
9394	}
9395
9396	// Extend jQuery itself if only one argument is passed
9397	if ( i === length ) {
9398		target = this;
9399		i--;
9400	}
9401
9402	for ( ; i < length; i++ ) {
9403
9404		// Only deal with non-null/undefined values
9405		if ( ( options = arguments[ i ] ) != null ) {
9406
9407			// Extend the base object
9408			for ( name in options ) {
9409				copy = options[ name ];
9410
9411				// Prevent Object.prototype pollution
9412				// Prevent never-ending loop
9413				if ( name === "__proto__" || target === copy ) {
9414					continue;
9415				}
9416
9417				// Recurse if we're merging plain objects or arrays
9418				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
9419					( copyIsArray = Array.isArray( copy ) ) ) ) {
9420					src = target[ name ];
9421
9422					// Ensure proper type for the source value
9423					if ( copyIsArray && !Array.isArray( src ) ) {
9424						clone = [];
9425					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
9426						clone = {};
9427					} else {
9428						clone = src;
9429					}
9430					copyIsArray = false;
9431
9432					// Never move original objects, clone them
9433					target[ name ] = jQuery.extend( deep, clone, copy );
9434
9435				// Don't bring in undefined values
9436				} else if ( copy !== undefined ) {
9437					target[ name ] = copy;
9438				}
9439			}
9440		}
9441	}
9442
9443	// Return the modified object
9444	return target;
9445};
9446
9447jQuery.extend( {
9448
9449	// Unique for each copy of jQuery on the page
9450	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
9451
9452	// Assume jQuery is ready without the ready module
9453	isReady: true,
9454
9455	error: function( msg ) {
9456		throw new Error( msg );
9457	},
9458
9459	noop: function() {},
9460
9461	isPlainObject: function( obj ) {
9462		var proto, Ctor;
9463
9464		// Detect obvious negatives
9465		// Use toString instead of jQuery.type to catch host objects
9466		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
9467			return false;
9468		}
9469
9470		proto = getProto( obj );
9471
9472		// Objects with no prototype (e.g., `Object.create( null )`) are plain
9473		if ( !proto ) {
9474			return true;
9475		}
9476
9477		// Objects with prototype are plain iff they were constructed by a global Object function
9478		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
9479		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
9480	},
9481
9482	isEmptyObject: function( obj ) {
9483		var name;
9484
9485		for ( name in obj ) {
9486			return false;
9487		}
9488		return true;
9489	},
9490
9491	// Evaluates a script in a provided context; falls back to the global one
9492	// if not specified.
9493	globalEval: function( code, options, doc ) {
9494		DOMEval( code, { nonce: options && options.nonce }, doc );
9495	},
9496
9497	each: function( obj, callback ) {
9498		var length, i = 0;
9499
9500		if ( isArrayLike( obj ) ) {
9501			length = obj.length;
9502			for ( ; i < length; i++ ) {
9503				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
9504					break;
9505				}
9506			}
9507		} else {
9508			for ( i in obj ) {
9509				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
9510					break;
9511				}
9512			}
9513		}
9514
9515		return obj;
9516	},
9517
9518
9519	// Retrieve the text value of an array of DOM nodes
9520	text: function( elem ) {
9521		var node,
9522			ret = "",
9523			i = 0,
9524			nodeType = elem.nodeType;
9525
9526		if ( !nodeType ) {
9527
9528			// If no nodeType, this is expected to be an array
9529			while ( ( node = elem[ i++ ] ) ) {
9530
9531				// Do not traverse comment nodes
9532				ret += jQuery.text( node );
9533			}
9534		}
9535		if ( nodeType === 1 || nodeType === 11 ) {
9536			return elem.textContent;
9537		}
9538		if ( nodeType === 9 ) {
9539			return elem.documentElement.textContent;
9540		}
9541		if ( nodeType === 3 || nodeType === 4 ) {
9542			return elem.nodeValue;
9543		}
9544
9545		// Do not include comment or processing instruction nodes
9546
9547		return ret;
9548	},
9549
9550	// results is for internal usage only
9551	makeArray: function( arr, results ) {
9552		var ret = results || [];
9553
9554		if ( arr != null ) {
9555			if ( isArrayLike( Object( arr ) ) ) {
9556				jQuery.merge( ret,
9557					typeof arr === "string" ?
9558						[ arr ] : arr
9559				);
9560			} else {
9561				push.call( ret, arr );
9562			}
9563		}
9564
9565		return ret;
9566	},
9567
9568	inArray: function( elem, arr, i ) {
9569		return arr == null ? -1 : indexOf.call( arr, elem, i );
9570	},
9571
9572	isXMLDoc: function( elem ) {
9573		var namespace = elem && elem.namespaceURI,
9574			docElem = elem && ( elem.ownerDocument || elem ).documentElement;
9575
9576		// Assume HTML when documentElement doesn't yet exist, such as inside
9577		// document fragments.
9578		return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" );
9579	},
9580
9581	// Support: Android <=4.0 only, PhantomJS 1 only
9582	// push.apply(_, arraylike) throws on ancient WebKit
9583	merge: function( first, second ) {
9584		var len = +second.length,
9585			j = 0,
9586			i = first.length;
9587
9588		for ( ; j < len; j++ ) {
9589			first[ i++ ] = second[ j ];
9590		}
9591
9592		first.length = i;
9593
9594		return first;
9595	},
9596
9597	grep: function( elems, callback, invert ) {
9598		var callbackInverse,
9599			matches = [],
9600			i = 0,
9601			length = elems.length,
9602			callbackExpect = !invert;
9603
9604		// Go through the array, only saving the items
9605		// that pass the validator function
9606		for ( ; i < length; i++ ) {
9607			callbackInverse = !callback( elems[ i ], i );
9608			if ( callbackInverse !== callbackExpect ) {
9609				matches.push( elems[ i ] );
9610			}
9611		}
9612
9613		return matches;
9614	},
9615
9616	// arg is for internal usage only
9617	map: function( elems, callback, arg ) {
9618		var length, value,
9619			i = 0,
9620			ret = [];
9621
9622		// Go through the array, translating each of the items to their new values
9623		if ( isArrayLike( elems ) ) {
9624			length = elems.length;
9625			for ( ; i < length; i++ ) {
9626				value = callback( elems[ i ], i, arg );
9627
9628				if ( value != null ) {
9629					ret.push( value );
9630				}
9631			}
9632
9633		// Go through every key on the object,
9634		} else {
9635			for ( i in elems ) {
9636				value = callback( elems[ i ], i, arg );
9637
9638				if ( value != null ) {
9639					ret.push( value );
9640				}
9641			}
9642		}
9643
9644		// Flatten any nested arrays
9645		return flat( ret );
9646	},
9647
9648	// A global GUID counter for objects
9649	guid: 1,
9650
9651	// jQuery.support is not used in Core but other projects attach their
9652	// properties to it so it needs to exist.
9653	support: support
9654} );
9655
9656if ( typeof Symbol === "function" ) {
9657	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
9658}
9659
9660// Populate the class2type map
9661jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
9662	function( _i, name ) {
9663		class2type[ "[object " + name + "]" ] = name.toLowerCase();
9664	} );
9665
9666function isArrayLike( obj ) {
9667
9668	// Support: real iOS 8.2 only (not reproducible in simulator)
9669	// `in` check used to prevent JIT error (gh-2145)
9670	// hasOwn isn't used here due to false negatives
9671	// regarding Nodelist length in IE
9672	var length = !!obj && "length" in obj && obj.length,
9673		type = toType( obj );
9674
9675	if ( isFunction( obj ) || isWindow( obj ) ) {
9676		return false;
9677	}
9678
9679	return type === "array" || length === 0 ||
9680		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
9681}
9682
9683
9684function nodeName( elem, name ) {
9685
9686	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
9687
9688}
9689var pop = arr.pop;
9690
9691
9692var sort = arr.sort;
9693
9694
9695var splice = arr.splice;
9696
9697
9698var whitespace = "[\\x20\\t\\r\\n\\f]";
9699
9700
9701var rtrimCSS = new RegExp(
9702	"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
9703	"g"
9704);
9705
9706
9707
9708
9709// Note: an element does not contain itself
9710jQuery.contains = function( a, b ) {
9711	var bup = b && b.parentNode;
9712
9713	return a === bup || !!( bup && bup.nodeType === 1 && (
9714
9715		// Support: IE 9 - 11+
9716		// IE doesn't have `contains` on SVG.
9717		a.contains ?
9718			a.contains( bup ) :
9719			a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
9720	) );
9721};
9722
9723
9724
9725
9726// CSS string/identifier serialization
9727// https://drafts.csswg.org/cssom/#common-serializing-idioms
9728var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
9729
9730function fcssescape( ch, asCodePoint ) {
9731	if ( asCodePoint ) {
9732
9733		// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
9734		if ( ch === "\0" ) {
9735			return "\uFFFD";
9736		}
9737
9738		// Control characters and (dependent upon position) numbers get escaped as code points
9739		return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
9740	}
9741
9742	// Other potentially-special ASCII characters get backslash-escaped
9743	return "\\" + ch;
9744}
9745
9746jQuery.escapeSelector = function( sel ) {
9747	return ( sel + "" ).replace( rcssescape, fcssescape );
9748};
9749
9750
9751
9752
9753var preferredDoc = document,
9754	pushNative = push;
9755
9756( function() {
9757
9758var i,
9759	Expr,
9760	outermostContext,
9761	sortInput,
9762	hasDuplicate,
9763	push = pushNative,
9764
9765	// Local document vars
9766	document,
9767	documentElement,
9768	documentIsHTML,
9769	rbuggyQSA,
9770	matches,
9771
9772	// Instance-specific data
9773	expando = jQuery.expando,
9774	dirruns = 0,
9775	done = 0,
9776	classCache = createCache(),
9777	tokenCache = createCache(),
9778	compilerCache = createCache(),
9779	nonnativeSelectorCache = createCache(),
9780	sortOrder = function( a, b ) {
9781		if ( a === b ) {
9782			hasDuplicate = true;
9783		}
9784		return 0;
9785	},
9786
9787	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" +
9788		"loop|multiple|open|readonly|required|scoped",
9789
9790	// Regular expressions
9791
9792	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
9793	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
9794		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
9795
9796	// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors
9797	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
9798
9799		// Operator (capture 2)
9800		"*([*^$|!~]?=)" + whitespace +
9801
9802		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
9803		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
9804		whitespace + "*\\]",
9805
9806	pseudos = ":(" + identifier + ")(?:\\((" +
9807
9808		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
9809		// 1. quoted (capture 3; capture 4 or capture 5)
9810		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
9811
9812		// 2. simple (capture 6)
9813		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
9814
9815		// 3. anything else (capture 2)
9816		".*" +
9817		")\\)|)",
9818
9819	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
9820	rwhitespace = new RegExp( whitespace + "+", "g" ),
9821
9822	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
9823	rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" +
9824		whitespace + "*" ),
9825	rdescend = new RegExp( whitespace + "|>" ),
9826
9827	rpseudo = new RegExp( pseudos ),
9828	ridentifier = new RegExp( "^" + identifier + "$" ),
9829
9830	matchExpr = {
9831		ID: new RegExp( "^#(" + identifier + ")" ),
9832		CLASS: new RegExp( "^\\.(" + identifier + ")" ),
9833		TAG: new RegExp( "^(" + identifier + "|[*])" ),
9834		ATTR: new RegExp( "^" + attributes ),
9835		PSEUDO: new RegExp( "^" + pseudos ),
9836		CHILD: new RegExp(
9837			"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
9838				whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
9839				whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
9840		bool: new RegExp( "^(?:" + booleans + ")$", "i" ),
9841
9842		// For use in libraries implementing .is()
9843		// We use this for POS matching in `select`
9844		needsContext: new RegExp( "^" + whitespace +
9845			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
9846			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
9847	},
9848
9849	rinputs = /^(?:input|select|textarea|button)$/i,
9850	rheader = /^h\d$/i,
9851
9852	// Easily-parseable/retrievable ID or TAG or CLASS selectors
9853	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
9854
9855	rsibling = /[+~]/,
9856
9857	// CSS escapes
9858	// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters
9859	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace +
9860		"?|\\\\([^\\r\\n\\f])", "g" ),
9861	funescape = function( escape, nonHex ) {
9862		var high = "0x" + escape.slice( 1 ) - 0x10000;
9863
9864		if ( nonHex ) {
9865
9866			// Strip the backslash prefix from a non-hex escape sequence
9867			return nonHex;
9868		}
9869
9870		// Replace a hexadecimal escape sequence with the encoded Unicode code point
9871		// Support: IE <=11+
9872		// For values outside the Basic Multilingual Plane (BMP), manually construct a
9873		// surrogate pair
9874		return high < 0 ?
9875			String.fromCharCode( high + 0x10000 ) :
9876			String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
9877	},
9878
9879	// Used for iframes; see `setDocument`.
9880	// Support: IE 9 - 11+, Edge 12 - 18+
9881	// Removing the function wrapper causes a "Permission Denied"
9882	// error in IE/Edge.
9883	unloadHandler = function() {
9884		setDocument();
9885	},
9886
9887	inDisabledFieldset = addCombinator(
9888		function( elem ) {
9889			return elem.disabled === true && nodeName( elem, "fieldset" );
9890		},
9891		{ dir: "parentNode", next: "legend" }
9892	);
9893
9894// Support: IE <=9 only
9895// Accessing document.activeElement can throw unexpectedly
9896// https://bugs.jquery.com/ticket/13393
9897function safeActiveElement() {
9898	try {
9899		return document.activeElement;
9900	} catch ( err ) { }
9901}
9902
9903// Optimize for push.apply( _, NodeList )
9904try {
9905	push.apply(
9906		( arr = slice.call( preferredDoc.childNodes ) ),
9907		preferredDoc.childNodes
9908	);
9909
9910	// Support: Android <=4.0
9911	// Detect silently failing push.apply
9912	// eslint-disable-next-line no-unused-expressions
9913	arr[ preferredDoc.childNodes.length ].nodeType;
9914} catch ( e ) {
9915	push = {
9916		apply: function( target, els ) {
9917			pushNative.apply( target, slice.call( els ) );
9918		},
9919		call: function( target ) {
9920			pushNative.apply( target, slice.call( arguments, 1 ) );
9921		}
9922	};
9923}
9924
9925function find( selector, context, results, seed ) {
9926	var m, i, elem, nid, match, groups, newSelector,
9927		newContext = context && context.ownerDocument,
9928
9929		// nodeType defaults to 9, since context defaults to document
9930		nodeType = context ? context.nodeType : 9;
9931
9932	results = results || [];
9933
9934	// Return early from calls with invalid selector or context
9935	if ( typeof selector !== "string" || !selector ||
9936		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
9937
9938		return results;
9939	}
9940
9941	// Try to shortcut find operations (as opposed to filters) in HTML documents
9942	if ( !seed ) {
9943		setDocument( context );
9944		context = context || document;
9945
9946		if ( documentIsHTML ) {
9947
9948			// If the selector is sufficiently simple, try using a "get*By*" DOM method
9949			// (excepting DocumentFragment context, where the methods don't exist)
9950			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
9951
9952				// ID selector
9953				if ( ( m = match[ 1 ] ) ) {
9954
9955					// Document context
9956					if ( nodeType === 9 ) {
9957						if ( ( elem = context.getElementById( m ) ) ) {
9958
9959							// Support: IE 9 only
9960							// getElementById can match elements by name instead of ID
9961							if ( elem.id === m ) {
9962								push.call( results, elem );
9963								return results;
9964							}
9965						} else {
9966							return results;
9967						}
9968
9969					// Element context
9970					} else {
9971
9972						// Support: IE 9 only
9973						// getElementById can match elements by name instead of ID
9974						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
9975							find.contains( context, elem ) &&
9976							elem.id === m ) {
9977
9978							push.call( results, elem );
9979							return results;
9980						}
9981					}
9982
9983				// Type selector
9984				} else if ( match[ 2 ] ) {
9985					push.apply( results, context.getElementsByTagName( selector ) );
9986					return results;
9987
9988				// Class selector
9989				} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {
9990					push.apply( results, context.getElementsByClassName( m ) );
9991					return results;
9992				}
9993			}
9994
9995			// Take advantage of querySelectorAll
9996			if ( !nonnativeSelectorCache[ selector + " " ] &&
9997				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {
9998
9999				newSelector = selector;
10000				newContext = context;
10001
10002				// qSA considers elements outside a scoping root when evaluating child or
10003				// descendant combinators, which is not what we want.
10004				// In such cases, we work around the behavior by prefixing every selector in the
10005				// list with an ID selector referencing the scope context.
10006				// The technique has to be used as well when a leading combinator is used
10007				// as such selectors are not recognized by querySelectorAll.
10008				// Thanks to Andrew Dupont for this technique.
10009				if ( nodeType === 1 &&
10010					( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
10011
10012					// Expand context for sibling selectors
10013					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
10014						context;
10015
10016					// We can use :scope instead of the ID hack if the browser
10017					// supports it & if we're not changing the context.
10018					// Support: IE 11+, Edge 17 - 18+
10019					// IE/Edge sometimes throw a "Permission denied" error when
10020					// strict-comparing two documents; shallow comparisons work.
10021					// eslint-disable-next-line eqeqeq
10022					if ( newContext != context || !support.scope ) {
10023
10024						// Capture the context ID, setting it first if necessary
10025						if ( ( nid = context.getAttribute( "id" ) ) ) {
10026							nid = jQuery.escapeSelector( nid );
10027						} else {
10028							context.setAttribute( "id", ( nid = expando ) );
10029						}
10030					}
10031
10032					// Prefix every selector in the list
10033					groups = tokenize( selector );
10034					i = groups.length;
10035					while ( i-- ) {
10036						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
10037							toSelector( groups[ i ] );
10038					}
10039					newSelector = groups.join( "," );
10040				}
10041
10042				try {
10043					push.apply( results,
10044						newContext.querySelectorAll( newSelector )
10045					);
10046					return results;
10047				} catch ( qsaError ) {
10048					nonnativeSelectorCache( selector, true );
10049				} finally {
10050					if ( nid === expando ) {
10051						context.removeAttribute( "id" );
10052					}
10053				}
10054			}
10055		}
10056	}
10057
10058	// All others
10059	return select( selector.replace( rtrimCSS, "$1" ), context, results, seed );
10060}
10061
10062/**
10063 * Create key-value caches of limited size
10064 * @returns {function(string, object)} Returns the Object data after storing it on itself with
10065 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
10066 *	deleting the oldest entry
10067 */
10068function createCache() {
10069	var keys = [];
10070
10071	function cache( key, value ) {
10072
10073		// Use (key + " ") to avoid collision with native prototype properties
10074		// (see https://github.com/jquery/sizzle/issues/157)
10075		if ( keys.push( key + " " ) > Expr.cacheLength ) {
10076
10077			// Only keep the most recent entries
10078			delete cache[ keys.shift() ];
10079		}
10080		return ( cache[ key + " " ] = value );
10081	}
10082	return cache;
10083}
10084
10085/**
10086 * Mark a function for special use by jQuery selector module
10087 * @param {Function} fn The function to mark
10088 */
10089function markFunction( fn ) {
10090	fn[ expando ] = true;
10091	return fn;
10092}
10093
10094/**
10095 * Support testing using an element
10096 * @param {Function} fn Passed the created element and returns a boolean result
10097 */
10098function assert( fn ) {
10099	var el = document.createElement( "fieldset" );
10100
10101	try {
10102		return !!fn( el );
10103	} catch ( e ) {
10104		return false;
10105	} finally {
10106
10107		// Remove from its parent by default
10108		if ( el.parentNode ) {
10109			el.parentNode.removeChild( el );
10110		}
10111
10112		// release memory in IE
10113		el = null;
10114	}
10115}
10116
10117/**
10118 * Returns a function to use in pseudos for input types
10119 * @param {String} type
10120 */
10121function createInputPseudo( type ) {
10122	return function( elem ) {
10123		return nodeName( elem, "input" ) && elem.type === type;
10124	};
10125}
10126
10127/**
10128 * Returns a function to use in pseudos for buttons
10129 * @param {String} type
10130 */
10131function createButtonPseudo( type ) {
10132	return function( elem ) {
10133		return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) &&
10134			elem.type === type;
10135	};
10136}
10137
10138/**
10139 * Returns a function to use in pseudos for :enabled/:disabled
10140 * @param {Boolean} disabled true for :disabled; false for :enabled
10141 */
10142function createDisabledPseudo( disabled ) {
10143
10144	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
10145	return function( elem ) {
10146
10147		// Only certain elements can match :enabled or :disabled
10148		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
10149		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
10150		if ( "form" in elem ) {
10151
10152			// Check for inherited disabledness on relevant non-disabled elements:
10153			// * listed form-associated elements in a disabled fieldset
10154			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
10155			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
10156			// * option elements in a disabled optgroup
10157			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
10158			// All such elements have a "form" property.
10159			if ( elem.parentNode && elem.disabled === false ) {
10160
10161				// Option elements defer to a parent optgroup if present
10162				if ( "label" in elem ) {
10163					if ( "label" in elem.parentNode ) {
10164						return elem.parentNode.disabled === disabled;
10165					} else {
10166						return elem.disabled === disabled;
10167					}
10168				}
10169
10170				// Support: IE 6 - 11+
10171				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
10172				return elem.isDisabled === disabled ||
10173
10174					// Where there is no isDisabled, check manually
10175					elem.isDisabled !== !disabled &&
10176						inDisabledFieldset( elem ) === disabled;
10177			}
10178
10179			return elem.disabled === disabled;
10180
10181		// Try to winnow out elements that can't be disabled before trusting the disabled property.
10182		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
10183		// even exist on them, let alone have a boolean value.
10184		} else if ( "label" in elem ) {
10185			return elem.disabled === disabled;
10186		}
10187
10188		// Remaining elements are neither :enabled nor :disabled
10189		return false;
10190	};
10191}
10192
10193/**
10194 * Returns a function to use in pseudos for positionals
10195 * @param {Function} fn
10196 */
10197function createPositionalPseudo( fn ) {
10198	return markFunction( function( argument ) {
10199		argument = +argument;
10200		return markFunction( function( seed, matches ) {
10201			var j,
10202				matchIndexes = fn( [], seed.length, argument ),
10203				i = matchIndexes.length;
10204
10205			// Match elements found at the specified indexes
10206			while ( i-- ) {
10207				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
10208					seed[ j ] = !( matches[ j ] = seed[ j ] );
10209				}
10210			}
10211		} );
10212	} );
10213}
10214
10215/**
10216 * Checks a node for validity as a jQuery selector context
10217 * @param {Element|Object=} context
10218 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
10219 */
10220function testContext( context ) {
10221	return context && typeof context.getElementsByTagName !== "undefined" && context;
10222}
10223
10224/**
10225 * Sets document-related variables once based on the current document
10226 * @param {Element|Object} [node] An element or document object to use to set the document
10227 * @returns {Object} Returns the current document
10228 */
10229function setDocument( node ) {
10230	var subWindow,
10231		doc = node ? node.ownerDocument || node : preferredDoc;
10232
10233	// Return early if doc is invalid or already selected
10234	// Support: IE 11+, Edge 17 - 18+
10235	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10236	// two documents; shallow comparisons work.
10237	// eslint-disable-next-line eqeqeq
10238	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
10239		return document;
10240	}
10241
10242	// Update global variables
10243	document = doc;
10244	documentElement = document.documentElement;
10245	documentIsHTML = !jQuery.isXMLDoc( document );
10246
10247	// Support: iOS 7 only, IE 9 - 11+
10248	// Older browsers didn't support unprefixed `matches`.
10249	matches = documentElement.matches ||
10250		documentElement.webkitMatchesSelector ||
10251		documentElement.msMatchesSelector;
10252
10253	// Support: IE 9 - 11+, Edge 12 - 18+
10254	// Accessing iframe documents after unload throws "permission denied" errors
10255	// (see trac-13936).
10256	// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,
10257	// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.
10258	if ( documentElement.msMatchesSelector &&
10259
10260		// Support: IE 11+, Edge 17 - 18+
10261		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10262		// two documents; shallow comparisons work.
10263		// eslint-disable-next-line eqeqeq
10264		preferredDoc != document &&
10265		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
10266
10267		// Support: IE 9 - 11+, Edge 12 - 18+
10268		subWindow.addEventListener( "unload", unloadHandler );
10269	}
10270
10271	// Support: IE <10
10272	// Check if getElementById returns elements by name
10273	// The broken getElementById methods don't pick up programmatically-set names,
10274	// so use a roundabout getElementsByName test
10275	support.getById = assert( function( el ) {
10276		documentElement.appendChild( el ).id = jQuery.expando;
10277		return !document.getElementsByName ||
10278			!document.getElementsByName( jQuery.expando ).length;
10279	} );
10280
10281	// Support: IE 9 only
10282	// Check to see if it's possible to do matchesSelector
10283	// on a disconnected node.
10284	support.disconnectedMatch = assert( function( el ) {
10285		return matches.call( el, "*" );
10286	} );
10287
10288	// Support: IE 9 - 11+, Edge 12 - 18+
10289	// IE/Edge don't support the :scope pseudo-class.
10290	support.scope = assert( function() {
10291		return document.querySelectorAll( ":scope" );
10292	} );
10293
10294	// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only
10295	// Make sure the `:has()` argument is parsed unforgivingly.
10296	// We include `*` in the test to detect buggy implementations that are
10297	// _selectively_ forgiving (specifically when the list includes at least
10298	// one valid selector).
10299	// Note that we treat complete lack of support for `:has()` as if it were
10300	// spec-compliant support, which is fine because use of `:has()` in such
10301	// environments will fail in the qSA path and fall back to jQuery traversal
10302	// anyway.
10303	support.cssHas = assert( function() {
10304		try {
10305			document.querySelector( ":has(*,:jqfake)" );
10306			return false;
10307		} catch ( e ) {
10308			return true;
10309		}
10310	} );
10311
10312	// ID filter and find
10313	if ( support.getById ) {
10314		Expr.filter.ID = function( id ) {
10315			var attrId = id.replace( runescape, funescape );
10316			return function( elem ) {
10317				return elem.getAttribute( "id" ) === attrId;
10318			};
10319		};
10320		Expr.find.ID = function( id, context ) {
10321			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
10322				var elem = context.getElementById( id );
10323				return elem ? [ elem ] : [];
10324			}
10325		};
10326	} else {
10327		Expr.filter.ID =  function( id ) {
10328			var attrId = id.replace( runescape, funescape );
10329			return function( elem ) {
10330				var node = typeof elem.getAttributeNode !== "undefined" &&
10331					elem.getAttributeNode( "id" );
10332				return node && node.value === attrId;
10333			};
10334		};
10335
10336		// Support: IE 6 - 7 only
10337		// getElementById is not reliable as a find shortcut
10338		Expr.find.ID = function( id, context ) {
10339			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
10340				var node, i, elems,
10341					elem = context.getElementById( id );
10342
10343				if ( elem ) {
10344
10345					// Verify the id attribute
10346					node = elem.getAttributeNode( "id" );
10347					if ( node && node.value === id ) {
10348						return [ elem ];
10349					}
10350
10351					// Fall back on getElementsByName
10352					elems = context.getElementsByName( id );
10353					i = 0;
10354					while ( ( elem = elems[ i++ ] ) ) {
10355						node = elem.getAttributeNode( "id" );
10356						if ( node && node.value === id ) {
10357							return [ elem ];
10358						}
10359					}
10360				}
10361
10362				return [];
10363			}
10364		};
10365	}
10366
10367	// Tag
10368	Expr.find.TAG = function( tag, context ) {
10369		if ( typeof context.getElementsByTagName !== "undefined" ) {
10370			return context.getElementsByTagName( tag );
10371
10372		// DocumentFragment nodes don't have gEBTN
10373		} else {
10374			return context.querySelectorAll( tag );
10375		}
10376	};
10377
10378	// Class
10379	Expr.find.CLASS = function( className, context ) {
10380		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
10381			return context.getElementsByClassName( className );
10382		}
10383	};
10384
10385	/* QSA/matchesSelector
10386	---------------------------------------------------------------------- */
10387
10388	// QSA and matchesSelector support
10389
10390	rbuggyQSA = [];
10391
10392	// Build QSA regex
10393	// Regex strategy adopted from Diego Perini
10394	assert( function( el ) {
10395
10396		var input;
10397
10398		documentElement.appendChild( el ).innerHTML =
10399			"<a id='" + expando + "' href='' disabled='disabled'></a>" +
10400			"<select id='" + expando + "-\r\\' disabled='disabled'>" +
10401			"<option selected=''></option></select>";
10402
10403		// Support: iOS <=7 - 8 only
10404		// Boolean attributes and "value" are not treated correctly in some XML documents
10405		if ( !el.querySelectorAll( "[selected]" ).length ) {
10406			rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
10407		}
10408
10409		// Support: iOS <=7 - 8 only
10410		if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
10411			rbuggyQSA.push( "~=" );
10412		}
10413
10414		// Support: iOS 8 only
10415		// https://bugs.webkit.org/show_bug.cgi?id=136851
10416		// In-page `selector#id sibling-combinator selector` fails
10417		if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
10418			rbuggyQSA.push( ".#.+[+~]" );
10419		}
10420
10421		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
10422		// In some of the document kinds, these selectors wouldn't work natively.
10423		// This is probably OK but for backwards compatibility we want to maintain
10424		// handling them through jQuery traversal in jQuery 3.x.
10425		if ( !el.querySelectorAll( ":checked" ).length ) {
10426			rbuggyQSA.push( ":checked" );
10427		}
10428
10429		// Support: Windows 8 Native Apps
10430		// The type and name attributes are restricted during .innerHTML assignment
10431		input = document.createElement( "input" );
10432		input.setAttribute( "type", "hidden" );
10433		el.appendChild( input ).setAttribute( "name", "D" );
10434
10435		// Support: IE 9 - 11+
10436		// IE's :disabled selector does not pick up the children of disabled fieldsets
10437		// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+
10438		// In some of the document kinds, these selectors wouldn't work natively.
10439		// This is probably OK but for backwards compatibility we want to maintain
10440		// handling them through jQuery traversal in jQuery 3.x.
10441		documentElement.appendChild( el ).disabled = true;
10442		if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
10443			rbuggyQSA.push( ":enabled", ":disabled" );
10444		}
10445
10446		// Support: IE 11+, Edge 15 - 18+
10447		// IE 11/Edge don't find elements on a `[name='']` query in some cases.
10448		// Adding a temporary attribute to the document before the selection works
10449		// around the issue.
10450		// Interestingly, IE 10 & older don't seem to have the issue.
10451		input = document.createElement( "input" );
10452		input.setAttribute( "name", "" );
10453		el.appendChild( input );
10454		if ( !el.querySelectorAll( "[name='']" ).length ) {
10455			rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
10456				whitespace + "*(?:''|\"\")" );
10457		}
10458	} );
10459
10460	if ( !support.cssHas ) {
10461
10462		// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
10463		// Our regular `try-catch` mechanism fails to detect natively-unsupported
10464		// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
10465		// in browsers that parse the `:has()` argument as a forgiving selector list.
10466		// https://drafts.csswg.org/selectors/#relational now requires the argument
10467		// to be parsed unforgivingly, but browsers have not yet fully adjusted.
10468		rbuggyQSA.push( ":has" );
10469	}
10470
10471	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
10472
10473	/* Sorting
10474	---------------------------------------------------------------------- */
10475
10476	// Document order sorting
10477	sortOrder = function( a, b ) {
10478
10479		// Flag for duplicate removal
10480		if ( a === b ) {
10481			hasDuplicate = true;
10482			return 0;
10483		}
10484
10485		// Sort on method existence if only one input has compareDocumentPosition
10486		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
10487		if ( compare ) {
10488			return compare;
10489		}
10490
10491		// Calculate position if both inputs belong to the same document
10492		// Support: IE 11+, Edge 17 - 18+
10493		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10494		// two documents; shallow comparisons work.
10495		// eslint-disable-next-line eqeqeq
10496		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
10497			a.compareDocumentPosition( b ) :
10498
10499			// Otherwise we know they are disconnected
10500			1;
10501
10502		// Disconnected nodes
10503		if ( compare & 1 ||
10504			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
10505
10506			// Choose the first element that is related to our preferred document
10507			// Support: IE 11+, Edge 17 - 18+
10508			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10509			// two documents; shallow comparisons work.
10510			// eslint-disable-next-line eqeqeq
10511			if ( a === document || a.ownerDocument == preferredDoc &&
10512				find.contains( preferredDoc, a ) ) {
10513				return -1;
10514			}
10515
10516			// Support: IE 11+, Edge 17 - 18+
10517			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10518			// two documents; shallow comparisons work.
10519			// eslint-disable-next-line eqeqeq
10520			if ( b === document || b.ownerDocument == preferredDoc &&
10521				find.contains( preferredDoc, b ) ) {
10522				return 1;
10523			}
10524
10525			// Maintain original order
10526			return sortInput ?
10527				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
10528				0;
10529		}
10530
10531		return compare & 4 ? -1 : 1;
10532	};
10533
10534	return document;
10535}
10536
10537find.matches = function( expr, elements ) {
10538	return find( expr, null, null, elements );
10539};
10540
10541find.matchesSelector = function( elem, expr ) {
10542	setDocument( elem );
10543
10544	if ( documentIsHTML &&
10545		!nonnativeSelectorCache[ expr + " " ] &&
10546		( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
10547
10548		try {
10549			var ret = matches.call( elem, expr );
10550
10551			// IE 9's matchesSelector returns false on disconnected nodes
10552			if ( ret || support.disconnectedMatch ||
10553
10554					// As well, disconnected nodes are said to be in a document
10555					// fragment in IE 9
10556					elem.document && elem.document.nodeType !== 11 ) {
10557				return ret;
10558			}
10559		} catch ( e ) {
10560			nonnativeSelectorCache( expr, true );
10561		}
10562	}
10563
10564	return find( expr, document, null, [ elem ] ).length > 0;
10565};
10566
10567find.contains = function( context, elem ) {
10568
10569	// Set document vars if needed
10570	// Support: IE 11+, Edge 17 - 18+
10571	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10572	// two documents; shallow comparisons work.
10573	// eslint-disable-next-line eqeqeq
10574	if ( ( context.ownerDocument || context ) != document ) {
10575		setDocument( context );
10576	}
10577	return jQuery.contains( context, elem );
10578};
10579
10580
10581find.attr = function( elem, name ) {
10582
10583	// Set document vars if needed
10584	// Support: IE 11+, Edge 17 - 18+
10585	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
10586	// two documents; shallow comparisons work.
10587	// eslint-disable-next-line eqeqeq
10588	if ( ( elem.ownerDocument || elem ) != document ) {
10589		setDocument( elem );
10590	}
10591
10592	var fn = Expr.attrHandle[ name.toLowerCase() ],
10593
10594		// Don't get fooled by Object.prototype properties (see trac-13807)
10595		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
10596			fn( elem, name, !documentIsHTML ) :
10597			undefined;
10598
10599	if ( val !== undefined ) {
10600		return val;
10601	}
10602
10603	return elem.getAttribute( name );
10604};
10605
10606find.error = function( msg ) {
10607	throw new Error( "Syntax error, unrecognized expression: " + msg );
10608};
10609
10610/**
10611 * Document sorting and removing duplicates
10612 * @param {ArrayLike} results
10613 */
10614jQuery.uniqueSort = function( results ) {
10615	var elem,
10616		duplicates = [],
10617		j = 0,
10618		i = 0;
10619
10620	// Unless we *know* we can detect duplicates, assume their presence
10621	//
10622	// Support: Android <=4.0+
10623	// Testing for detecting duplicates is unpredictable so instead assume we can't
10624	// depend on duplicate detection in all browsers without a stable sort.
10625	hasDuplicate = !support.sortStable;
10626	sortInput = !support.sortStable && slice.call( results, 0 );
10627	sort.call( results, sortOrder );
10628
10629	if ( hasDuplicate ) {
10630		while ( ( elem = results[ i++ ] ) ) {
10631			if ( elem === results[ i ] ) {
10632				j = duplicates.push( i );
10633			}
10634		}
10635		while ( j-- ) {
10636			splice.call( results, duplicates[ j ], 1 );
10637		}
10638	}
10639
10640	// Clear input after sorting to release objects
10641	// See https://github.com/jquery/sizzle/pull/225
10642	sortInput = null;
10643
10644	return results;
10645};
10646
10647jQuery.fn.uniqueSort = function() {
10648	return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );
10649};
10650
10651Expr = jQuery.expr = {
10652
10653	// Can be adjusted by the user
10654	cacheLength: 50,
10655
10656	createPseudo: markFunction,
10657
10658	match: matchExpr,
10659
10660	attrHandle: {},
10661
10662	find: {},
10663
10664	relative: {
10665		">": { dir: "parentNode", first: true },
10666		" ": { dir: "parentNode" },
10667		"+": { dir: "previousSibling", first: true },
10668		"~": { dir: "previousSibling" }
10669	},
10670
10671	preFilter: {
10672		ATTR: function( match ) {
10673			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
10674
10675			// Move the given value to match[3] whether quoted or unquoted
10676			match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" )
10677				.replace( runescape, funescape );
10678
10679			if ( match[ 2 ] === "~=" ) {
10680				match[ 3 ] = " " + match[ 3 ] + " ";
10681			}
10682
10683			return match.slice( 0, 4 );
10684		},
10685
10686		CHILD: function( match ) {
10687
10688			/* matches from matchExpr["CHILD"]
10689				1 type (only|nth|...)
10690				2 what (child|of-type)
10691				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
10692				4 xn-component of xn+y argument ([+-]?\d*n|)
10693				5 sign of xn-component
10694				6 x of xn-component
10695				7 sign of y-component
10696				8 y of y-component
10697			*/
10698			match[ 1 ] = match[ 1 ].toLowerCase();
10699
10700			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
10701
10702				// nth-* requires argument
10703				if ( !match[ 3 ] ) {
10704					find.error( match[ 0 ] );
10705				}
10706
10707				// numeric x and y parameters for Expr.filter.CHILD
10708				// remember that false/true cast respectively to 0/1
10709				match[ 4 ] = +( match[ 4 ] ?
10710					match[ 5 ] + ( match[ 6 ] || 1 ) :
10711					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" )
10712				);
10713				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
10714
10715			// other types prohibit arguments
10716			} else if ( match[ 3 ] ) {
10717				find.error( match[ 0 ] );
10718			}
10719
10720			return match;
10721		},
10722
10723		PSEUDO: function( match ) {
10724			var excess,
10725				unquoted = !match[ 6 ] && match[ 2 ];
10726
10727			if ( matchExpr.CHILD.test( match[ 0 ] ) ) {
10728				return null;
10729			}
10730
10731			// Accept quoted arguments as-is
10732			if ( match[ 3 ] ) {
10733				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
10734
10735			// Strip excess characters from unquoted arguments
10736			} else if ( unquoted && rpseudo.test( unquoted ) &&
10737
10738				// Get excess from tokenize (recursively)
10739				( excess = tokenize( unquoted, true ) ) &&
10740
10741				// advance to the next closing parenthesis
10742				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
10743
10744				// excess is a negative index
10745				match[ 0 ] = match[ 0 ].slice( 0, excess );
10746				match[ 2 ] = unquoted.slice( 0, excess );
10747			}
10748
10749			// Return only captures needed by the pseudo filter method (type and argument)
10750			return match.slice( 0, 3 );
10751		}
10752	},
10753
10754	filter: {
10755
10756		TAG: function( nodeNameSelector ) {
10757			var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
10758			return nodeNameSelector === "*" ?
10759				function() {
10760					return true;
10761				} :
10762				function( elem ) {
10763					return nodeName( elem, expectedNodeName );
10764				};
10765		},
10766
10767		CLASS: function( className ) {
10768			var pattern = classCache[ className + " " ];
10769
10770			return pattern ||
10771				( pattern = new RegExp( "(^|" + whitespace + ")" + className +
10772					"(" + whitespace + "|$)" ) ) &&
10773				classCache( className, function( elem ) {
10774					return pattern.test(
10775						typeof elem.className === "string" && elem.className ||
10776							typeof elem.getAttribute !== "undefined" &&
10777								elem.getAttribute( "class" ) ||
10778							""
10779					);
10780				} );
10781		},
10782
10783		ATTR: function( name, operator, check ) {
10784			return function( elem ) {
10785				var result = find.attr( elem, name );
10786
10787				if ( result == null ) {
10788					return operator === "!=";
10789				}
10790				if ( !operator ) {
10791					return true;
10792				}
10793
10794				result += "";
10795
10796				if ( operator === "=" ) {
10797					return result === check;
10798				}
10799				if ( operator === "!=" ) {
10800					return result !== check;
10801				}
10802				if ( operator === "^=" ) {
10803					return check && result.indexOf( check ) === 0;
10804				}
10805				if ( operator === "*=" ) {
10806					return check && result.indexOf( check ) > -1;
10807				}
10808				if ( operator === "$=" ) {
10809					return check && result.slice( -check.length ) === check;
10810				}
10811				if ( operator === "~=" ) {
10812					return ( " " + result.replace( rwhitespace, " " ) + " " )
10813						.indexOf( check ) > -1;
10814				}
10815				if ( operator === "|=" ) {
10816					return result === check || result.slice( 0, check.length + 1 ) === check + "-";
10817				}
10818
10819				return false;
10820			};
10821		},
10822
10823		CHILD: function( type, what, _argument, first, last ) {
10824			var simple = type.slice( 0, 3 ) !== "nth",
10825				forward = type.slice( -4 ) !== "last",
10826				ofType = what === "of-type";
10827
10828			return first === 1 && last === 0 ?
10829
10830				// Shortcut for :nth-*(n)
10831				function( elem ) {
10832					return !!elem.parentNode;
10833				} :
10834
10835				function( elem, _context, xml ) {
10836					var cache, outerCache, node, nodeIndex, start,
10837						dir = simple !== forward ? "nextSibling" : "previousSibling",
10838						parent = elem.parentNode,
10839						name = ofType && elem.nodeName.toLowerCase(),
10840						useCache = !xml && !ofType,
10841						diff = false;
10842
10843					if ( parent ) {
10844
10845						// :(first|last|only)-(child|of-type)
10846						if ( simple ) {
10847							while ( dir ) {
10848								node = elem;
10849								while ( ( node = node[ dir ] ) ) {
10850									if ( ofType ?
10851										nodeName( node, name ) :
10852										node.nodeType === 1 ) {
10853
10854										return false;
10855									}
10856								}
10857
10858								// Reverse direction for :only-* (if we haven't yet done so)
10859								start = dir = type === "only" && !start && "nextSibling";
10860							}
10861							return true;
10862						}
10863
10864						start = [ forward ? parent.firstChild : parent.lastChild ];
10865
10866						// non-xml :nth-child(...) stores cache data on `parent`
10867						if ( forward && useCache ) {
10868
10869							// Seek `elem` from a previously-cached index
10870							outerCache = parent[ expando ] || ( parent[ expando ] = {} );
10871							cache = outerCache[ type ] || [];
10872							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
10873							diff = nodeIndex && cache[ 2 ];
10874							node = nodeIndex && parent.childNodes[ nodeIndex ];
10875
10876							while ( ( node = ++nodeIndex && node && node[ dir ] ||
10877
10878								// Fallback to seeking `elem` from the start
10879								( diff = nodeIndex = 0 ) || start.pop() ) ) {
10880
10881								// When found, cache indexes on `parent` and break
10882								if ( node.nodeType === 1 && ++diff && node === elem ) {
10883									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
10884									break;
10885								}
10886							}
10887
10888						} else {
10889
10890							// Use previously-cached element index if available
10891							if ( useCache ) {
10892								outerCache = elem[ expando ] || ( elem[ expando ] = {} );
10893								cache = outerCache[ type ] || [];
10894								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
10895								diff = nodeIndex;
10896							}
10897
10898							// xml :nth-child(...)
10899							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
10900							if ( diff === false ) {
10901
10902								// Use the same loop as above to seek `elem` from the start
10903								while ( ( node = ++nodeIndex && node && node[ dir ] ||
10904									( diff = nodeIndex = 0 ) || start.pop() ) ) {
10905
10906									if ( ( ofType ?
10907										nodeName( node, name ) :
10908										node.nodeType === 1 ) &&
10909										++diff ) {
10910
10911										// Cache the index of each encountered element
10912										if ( useCache ) {
10913											outerCache = node[ expando ] ||
10914												( node[ expando ] = {} );
10915											outerCache[ type ] = [ dirruns, diff ];
10916										}
10917
10918										if ( node === elem ) {
10919											break;
10920										}
10921									}
10922								}
10923							}
10924						}
10925
10926						// Incorporate the offset, then check against cycle size
10927						diff -= last;
10928						return diff === first || ( diff % first === 0 && diff / first >= 0 );
10929					}
10930				};
10931		},
10932
10933		PSEUDO: function( pseudo, argument ) {
10934
10935			// pseudo-class names are case-insensitive
10936			// https://www.w3.org/TR/selectors/#pseudo-classes
10937			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
10938			// Remember that setFilters inherits from pseudos
10939			var args,
10940				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
10941					find.error( "unsupported pseudo: " + pseudo );
10942
10943			// The user may use createPseudo to indicate that
10944			// arguments are needed to create the filter function
10945			// just as jQuery does
10946			if ( fn[ expando ] ) {
10947				return fn( argument );
10948			}
10949
10950			// But maintain support for old signatures
10951			if ( fn.length > 1 ) {
10952				args = [ pseudo, pseudo, "", argument ];
10953				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
10954					markFunction( function( seed, matches ) {
10955						var idx,
10956							matched = fn( seed, argument ),
10957							i = matched.length;
10958						while ( i-- ) {
10959							idx = indexOf.call( seed, matched[ i ] );
10960							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
10961						}
10962					} ) :
10963					function( elem ) {
10964						return fn( elem, 0, args );
10965					};
10966			}
10967
10968			return fn;
10969		}
10970	},
10971
10972	pseudos: {
10973
10974		// Potentially complex pseudos
10975		not: markFunction( function( selector ) {
10976
10977			// Trim the selector passed to compile
10978			// to avoid treating leading and trailing
10979			// spaces as combinators
10980			var input = [],
10981				results = [],
10982				matcher = compile( selector.replace( rtrimCSS, "$1" ) );
10983
10984			return matcher[ expando ] ?
10985				markFunction( function( seed, matches, _context, xml ) {
10986					var elem,
10987						unmatched = matcher( seed, null, xml, [] ),
10988						i = seed.length;
10989
10990					// Match elements unmatched by `matcher`
10991					while ( i-- ) {
10992						if ( ( elem = unmatched[ i ] ) ) {
10993							seed[ i ] = !( matches[ i ] = elem );
10994						}
10995					}
10996				} ) :
10997				function( elem, _context, xml ) {
10998					input[ 0 ] = elem;
10999					matcher( input, null, xml, results );
11000
11001					// Don't keep the element
11002					// (see https://github.com/jquery/sizzle/issues/299)
11003					input[ 0 ] = null;
11004					return !results.pop();
11005				};
11006		} ),
11007
11008		has: markFunction( function( selector ) {
11009			return function( elem ) {
11010				return find( selector, elem ).length > 0;
11011			};
11012		} ),
11013
11014		contains: markFunction( function( text ) {
11015			text = text.replace( runescape, funescape );
11016			return function( elem ) {
11017				return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;
11018			};
11019		} ),
11020
11021		// "Whether an element is represented by a :lang() selector
11022		// is based solely on the element's language value
11023		// being equal to the identifier C,
11024		// or beginning with the identifier C immediately followed by "-".
11025		// The matching of C against the element's language value is performed case-insensitively.
11026		// The identifier C does not have to be a valid language name."
11027		// https://www.w3.org/TR/selectors/#lang-pseudo
11028		lang: markFunction( function( lang ) {
11029
11030			// lang value must be a valid identifier
11031			if ( !ridentifier.test( lang || "" ) ) {
11032				find.error( "unsupported lang: " + lang );
11033			}
11034			lang = lang.replace( runescape, funescape ).toLowerCase();
11035			return function( elem ) {
11036				var elemLang;
11037				do {
11038					if ( ( elemLang = documentIsHTML ?
11039						elem.lang :
11040						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
11041
11042						elemLang = elemLang.toLowerCase();
11043						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
11044					}
11045				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
11046				return false;
11047			};
11048		} ),
11049
11050		// Miscellaneous
11051		target: function( elem ) {
11052			var hash = window.location && window.location.hash;
11053			return hash && hash.slice( 1 ) === elem.id;
11054		},
11055
11056		root: function( elem ) {
11057			return elem === documentElement;
11058		},
11059
11060		focus: function( elem ) {
11061			return elem === safeActiveElement() &&
11062				document.hasFocus() &&
11063				!!( elem.type || elem.href || ~elem.tabIndex );
11064		},
11065
11066		// Boolean properties
11067		enabled: createDisabledPseudo( false ),
11068		disabled: createDisabledPseudo( true ),
11069
11070		checked: function( elem ) {
11071
11072			// In CSS3, :checked should return both checked and selected elements
11073			// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
11074			return ( nodeName( elem, "input" ) && !!elem.checked ) ||
11075				( nodeName( elem, "option" ) && !!elem.selected );
11076		},
11077
11078		selected: function( elem ) {
11079
11080			// Support: IE <=11+
11081			// Accessing the selectedIndex property
11082			// forces the browser to treat the default option as
11083			// selected when in an optgroup.
11084			if ( elem.parentNode ) {
11085				// eslint-disable-next-line no-unused-expressions
11086				elem.parentNode.selectedIndex;
11087			}
11088
11089			return elem.selected === true;
11090		},
11091
11092		// Contents
11093		empty: function( elem ) {
11094
11095			// https://www.w3.org/TR/selectors/#empty-pseudo
11096			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
11097			//   but not by others (comment: 8; processing instruction: 7; etc.)
11098			// nodeType < 6 works because attributes (2) do not appear as children
11099			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
11100				if ( elem.nodeType < 6 ) {
11101					return false;
11102				}
11103			}
11104			return true;
11105		},
11106
11107		parent: function( elem ) {
11108			return !Expr.pseudos.empty( elem );
11109		},
11110
11111		// Element/input types
11112		header: function( elem ) {
11113			return rheader.test( elem.nodeName );
11114		},
11115
11116		input: function( elem ) {
11117			return rinputs.test( elem.nodeName );
11118		},
11119
11120		button: function( elem ) {
11121			return nodeName( elem, "input" ) && elem.type === "button" ||
11122				nodeName( elem, "button" );
11123		},
11124
11125		text: function( elem ) {
11126			var attr;
11127			return nodeName( elem, "input" ) && elem.type === "text" &&
11128
11129				// Support: IE <10 only
11130				// New HTML5 attribute values (e.g., "search") appear
11131				// with elem.type === "text"
11132				( ( attr = elem.getAttribute( "type" ) ) == null ||
11133					attr.toLowerCase() === "text" );
11134		},
11135
11136		// Position-in-collection
11137		first: createPositionalPseudo( function() {
11138			return [ 0 ];
11139		} ),
11140
11141		last: createPositionalPseudo( function( _matchIndexes, length ) {
11142			return [ length - 1 ];
11143		} ),
11144
11145		eq: createPositionalPseudo( function( _matchIndexes, length, argument ) {
11146			return [ argument < 0 ? argument + length : argument ];
11147		} ),
11148
11149		even: createPositionalPseudo( function( matchIndexes, length ) {
11150			var i = 0;
11151			for ( ; i < length; i += 2 ) {
11152				matchIndexes.push( i );
11153			}
11154			return matchIndexes;
11155		} ),
11156
11157		odd: createPositionalPseudo( function( matchIndexes, length ) {
11158			var i = 1;
11159			for ( ; i < length; i += 2 ) {
11160				matchIndexes.push( i );
11161			}
11162			return matchIndexes;
11163		} ),
11164
11165		lt: createPositionalPseudo( function( matchIndexes, length, argument ) {
11166			var i;
11167
11168			if ( argument < 0 ) {
11169				i = argument + length;
11170			} else if ( argument > length ) {
11171				i = length;
11172			} else {
11173				i = argument;
11174			}
11175
11176			for ( ; --i >= 0; ) {
11177				matchIndexes.push( i );
11178			}
11179			return matchIndexes;
11180		} ),
11181
11182		gt: createPositionalPseudo( function( matchIndexes, length, argument ) {
11183			var i = argument < 0 ? argument + length : argument;
11184			for ( ; ++i < length; ) {
11185				matchIndexes.push( i );
11186			}
11187			return matchIndexes;
11188		} )
11189	}
11190};
11191
11192Expr.pseudos.nth = Expr.pseudos.eq;
11193
11194// Add button/input type pseudos
11195for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
11196	Expr.pseudos[ i ] = createInputPseudo( i );
11197}
11198for ( i in { submit: true, reset: true } ) {
11199	Expr.pseudos[ i ] = createButtonPseudo( i );
11200}
11201
11202// Easy API for creating new setFilters
11203function setFilters() {}
11204setFilters.prototype = Expr.filters = Expr.pseudos;
11205Expr.setFilters = new setFilters();
11206
11207function tokenize( selector, parseOnly ) {
11208	var matched, match, tokens, type,
11209		soFar, groups, preFilters,
11210		cached = tokenCache[ selector + " " ];
11211
11212	if ( cached ) {
11213		return parseOnly ? 0 : cached.slice( 0 );
11214	}
11215
11216	soFar = selector;
11217	groups = [];
11218	preFilters = Expr.preFilter;
11219
11220	while ( soFar ) {
11221
11222		// Comma and first run
11223		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
11224			if ( match ) {
11225
11226				// Don't consume trailing commas as valid
11227				soFar = soFar.slice( match[ 0 ].length ) || soFar;
11228			}
11229			groups.push( ( tokens = [] ) );
11230		}
11231
11232		matched = false;
11233
11234		// Combinators
11235		if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
11236			matched = match.shift();
11237			tokens.push( {
11238				value: matched,
11239
11240				// Cast descendant combinators to space
11241				type: match[ 0 ].replace( rtrimCSS, " " )
11242			} );
11243			soFar = soFar.slice( matched.length );
11244		}
11245
11246		// Filters
11247		for ( type in Expr.filter ) {
11248			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
11249				( match = preFilters[ type ]( match ) ) ) ) {
11250				matched = match.shift();
11251				tokens.push( {
11252					value: matched,
11253					type: type,
11254					matches: match
11255				} );
11256				soFar = soFar.slice( matched.length );
11257			}
11258		}
11259
11260		if ( !matched ) {
11261			break;
11262		}
11263	}
11264
11265	// Return the length of the invalid excess
11266	// if we're just parsing
11267	// Otherwise, throw an error or return tokens
11268	if ( parseOnly ) {
11269		return soFar.length;
11270	}
11271
11272	return soFar ?
11273		find.error( selector ) :
11274
11275		// Cache the tokens
11276		tokenCache( selector, groups ).slice( 0 );
11277}
11278
11279function toSelector( tokens ) {
11280	var i = 0,
11281		len = tokens.length,
11282		selector = "";
11283	for ( ; i < len; i++ ) {
11284		selector += tokens[ i ].value;
11285	}
11286	return selector;
11287}
11288
11289function addCombinator( matcher, combinator, base ) {
11290	var dir = combinator.dir,
11291		skip = combinator.next,
11292		key = skip || dir,
11293		checkNonElements = base && key === "parentNode",
11294		doneName = done++;
11295
11296	return combinator.first ?
11297
11298		// Check against closest ancestor/preceding element
11299		function( elem, context, xml ) {
11300			while ( ( elem = elem[ dir ] ) ) {
11301				if ( elem.nodeType === 1 || checkNonElements ) {
11302					return matcher( elem, context, xml );
11303				}
11304			}
11305			return false;
11306		} :
11307
11308		// Check against all ancestor/preceding elements
11309		function( elem, context, xml ) {
11310			var oldCache, outerCache,
11311				newCache = [ dirruns, doneName ];
11312
11313			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
11314			if ( xml ) {
11315				while ( ( elem = elem[ dir ] ) ) {
11316					if ( elem.nodeType === 1 || checkNonElements ) {
11317						if ( matcher( elem, context, xml ) ) {
11318							return true;
11319						}
11320					}
11321				}
11322			} else {
11323				while ( ( elem = elem[ dir ] ) ) {
11324					if ( elem.nodeType === 1 || checkNonElements ) {
11325						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
11326
11327						if ( skip && nodeName( elem, skip ) ) {
11328							elem = elem[ dir ] || elem;
11329						} else if ( ( oldCache = outerCache[ key ] ) &&
11330							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
11331
11332							// Assign to newCache so results back-propagate to previous elements
11333							return ( newCache[ 2 ] = oldCache[ 2 ] );
11334						} else {
11335
11336							// Reuse newcache so results back-propagate to previous elements
11337							outerCache[ key ] = newCache;
11338
11339							// A match means we're done; a fail means we have to keep checking
11340							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
11341								return true;
11342							}
11343						}
11344					}
11345				}
11346			}
11347			return false;
11348		};
11349}
11350
11351function elementMatcher( matchers ) {
11352	return matchers.length > 1 ?
11353		function( elem, context, xml ) {
11354			var i = matchers.length;
11355			while ( i-- ) {
11356				if ( !matchers[ i ]( elem, context, xml ) ) {
11357					return false;
11358				}
11359			}
11360			return true;
11361		} :
11362		matchers[ 0 ];
11363}
11364
11365function multipleContexts( selector, contexts, results ) {
11366	var i = 0,
11367		len = contexts.length;
11368	for ( ; i < len; i++ ) {
11369		find( selector, contexts[ i ], results );
11370	}
11371	return results;
11372}
11373
11374function condense( unmatched, map, filter, context, xml ) {
11375	var elem,
11376		newUnmatched = [],
11377		i = 0,
11378		len = unmatched.length,
11379		mapped = map != null;
11380
11381	for ( ; i < len; i++ ) {
11382		if ( ( elem = unmatched[ i ] ) ) {
11383			if ( !filter || filter( elem, context, xml ) ) {
11384				newUnmatched.push( elem );
11385				if ( mapped ) {
11386					map.push( i );
11387				}
11388			}
11389		}
11390	}
11391
11392	return newUnmatched;
11393}
11394
11395function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
11396	if ( postFilter && !postFilter[ expando ] ) {
11397		postFilter = setMatcher( postFilter );
11398	}
11399	if ( postFinder && !postFinder[ expando ] ) {
11400		postFinder = setMatcher( postFinder, postSelector );
11401	}
11402	return markFunction( function( seed, results, context, xml ) {
11403		var temp, i, elem, matcherOut,
11404			preMap = [],
11405			postMap = [],
11406			preexisting = results.length,
11407
11408			// Get initial elements from seed or context
11409			elems = seed ||
11410				multipleContexts( selector || "*",
11411					context.nodeType ? [ context ] : context, [] ),
11412
11413			// Prefilter to get matcher input, preserving a map for seed-results synchronization
11414			matcherIn = preFilter && ( seed || !selector ) ?
11415				condense( elems, preMap, preFilter, context, xml ) :
11416				elems;
11417
11418		if ( matcher ) {
11419
11420			// If we have a postFinder, or filtered seed, or non-seed postFilter
11421			// or preexisting results,
11422			matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
11423
11424				// ...intermediate processing is necessary
11425				[] :
11426
11427				// ...otherwise use results directly
11428				results;
11429
11430			// Find primary matches
11431			matcher( matcherIn, matcherOut, context, xml );
11432		} else {
11433			matcherOut = matcherIn;
11434		}
11435
11436		// Apply postFilter
11437		if ( postFilter ) {
11438			temp = condense( matcherOut, postMap );
11439			postFilter( temp, [], context, xml );
11440
11441			// Un-match failing elements by moving them back to matcherIn
11442			i = temp.length;
11443			while ( i-- ) {
11444				if ( ( elem = temp[ i ] ) ) {
11445					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
11446				}
11447			}
11448		}
11449
11450		if ( seed ) {
11451			if ( postFinder || preFilter ) {
11452				if ( postFinder ) {
11453
11454					// Get the final matcherOut by condensing this intermediate into postFinder contexts
11455					temp = [];
11456					i = matcherOut.length;
11457					while ( i-- ) {
11458						if ( ( elem = matcherOut[ i ] ) ) {
11459
11460							// Restore matcherIn since elem is not yet a final match
11461							temp.push( ( matcherIn[ i ] = elem ) );
11462						}
11463					}
11464					postFinder( null, ( matcherOut = [] ), temp, xml );
11465				}
11466
11467				// Move matched elements from seed to results to keep them synchronized
11468				i = matcherOut.length;
11469				while ( i-- ) {
11470					if ( ( elem = matcherOut[ i ] ) &&
11471						( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {
11472
11473						seed[ temp ] = !( results[ temp ] = elem );
11474					}
11475				}
11476			}
11477
11478		// Add elements to results, through postFinder if defined
11479		} else {
11480			matcherOut = condense(
11481				matcherOut === results ?
11482					matcherOut.splice( preexisting, matcherOut.length ) :
11483					matcherOut
11484			);
11485			if ( postFinder ) {
11486				postFinder( null, results, matcherOut, xml );
11487			} else {
11488				push.apply( results, matcherOut );
11489			}
11490		}
11491	} );
11492}
11493
11494function matcherFromTokens( tokens ) {
11495	var checkContext, matcher, j,
11496		len = tokens.length,
11497		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
11498		implicitRelative = leadingRelative || Expr.relative[ " " ],
11499		i = leadingRelative ? 1 : 0,
11500
11501		// The foundational matcher ensures that elements are reachable from top-level context(s)
11502		matchContext = addCombinator( function( elem ) {
11503			return elem === checkContext;
11504		}, implicitRelative, true ),
11505		matchAnyContext = addCombinator( function( elem ) {
11506			return indexOf.call( checkContext, elem ) > -1;
11507		}, implicitRelative, true ),
11508		matchers = [ function( elem, context, xml ) {
11509
11510			// Support: IE 11+, Edge 17 - 18+
11511			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
11512			// two documents; shallow comparisons work.
11513			// eslint-disable-next-line eqeqeq
11514			var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (
11515				( checkContext = context ).nodeType ?
11516					matchContext( elem, context, xml ) :
11517					matchAnyContext( elem, context, xml ) );
11518
11519			// Avoid hanging onto element
11520			// (see https://github.com/jquery/sizzle/issues/299)
11521			checkContext = null;
11522			return ret;
11523		} ];
11524
11525	for ( ; i < len; i++ ) {
11526		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
11527			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
11528		} else {
11529			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
11530
11531			// Return special upon seeing a positional matcher
11532			if ( matcher[ expando ] ) {
11533
11534				// Find the next relative operator (if any) for proper handling
11535				j = ++i;
11536				for ( ; j < len; j++ ) {
11537					if ( Expr.relative[ tokens[ j ].type ] ) {
11538						break;
11539					}
11540				}
11541				return setMatcher(
11542					i > 1 && elementMatcher( matchers ),
11543					i > 1 && toSelector(
11544
11545						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
11546						tokens.slice( 0, i - 1 )
11547							.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
11548					).replace( rtrimCSS, "$1" ),
11549					matcher,
11550					i < j && matcherFromTokens( tokens.slice( i, j ) ),
11551					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
11552					j < len && toSelector( tokens )
11553				);
11554			}
11555			matchers.push( matcher );
11556		}
11557	}
11558
11559	return elementMatcher( matchers );
11560}
11561
11562function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
11563	var bySet = setMatchers.length > 0,
11564		byElement = elementMatchers.length > 0,
11565		superMatcher = function( seed, context, xml, results, outermost ) {
11566			var elem, j, matcher,
11567				matchedCount = 0,
11568				i = "0",
11569				unmatched = seed && [],
11570				setMatched = [],
11571				contextBackup = outermostContext,
11572
11573				// We must always have either seed elements or outermost context
11574				elems = seed || byElement && Expr.find.TAG( "*", outermost ),
11575
11576				// Use integer dirruns iff this is the outermost matcher
11577				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
11578				len = elems.length;
11579
11580			if ( outermost ) {
11581
11582				// Support: IE 11+, Edge 17 - 18+
11583				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
11584				// two documents; shallow comparisons work.
11585				// eslint-disable-next-line eqeqeq
11586				outermostContext = context == document || context || outermost;
11587			}
11588
11589			// Add elements passing elementMatchers directly to results
11590			// Support: iOS <=7 - 9 only
11591			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching
11592			// elements by id. (see trac-14142)
11593			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
11594				if ( byElement && elem ) {
11595					j = 0;
11596
11597					// Support: IE 11+, Edge 17 - 18+
11598					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
11599					// two documents; shallow comparisons work.
11600					// eslint-disable-next-line eqeqeq
11601					if ( !context && elem.ownerDocument != document ) {
11602						setDocument( elem );
11603						xml = !documentIsHTML;
11604					}
11605					while ( ( matcher = elementMatchers[ j++ ] ) ) {
11606						if ( matcher( elem, context || document, xml ) ) {
11607							push.call( results, elem );
11608							break;
11609						}
11610					}
11611					if ( outermost ) {
11612						dirruns = dirrunsUnique;
11613					}
11614				}
11615
11616				// Track unmatched elements for set filters
11617				if ( bySet ) {
11618
11619					// They will have gone through all possible matchers
11620					if ( ( elem = !matcher && elem ) ) {
11621						matchedCount--;
11622					}
11623
11624					// Lengthen the array for every element, matched or not
11625					if ( seed ) {
11626						unmatched.push( elem );
11627					}
11628				}
11629			}
11630
11631			// `i` is now the count of elements visited above, and adding it to `matchedCount`
11632			// makes the latter nonnegative.
11633			matchedCount += i;
11634
11635			// Apply set filters to unmatched elements
11636			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
11637			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
11638			// no element matchers and no seed.
11639			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
11640			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
11641			// numerically zero.
11642			if ( bySet && i !== matchedCount ) {
11643				j = 0;
11644				while ( ( matcher = setMatchers[ j++ ] ) ) {
11645					matcher( unmatched, setMatched, context, xml );
11646				}
11647
11648				if ( seed ) {
11649
11650					// Reintegrate element matches to eliminate the need for sorting
11651					if ( matchedCount > 0 ) {
11652						while ( i-- ) {
11653							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
11654								setMatched[ i ] = pop.call( results );
11655							}
11656						}
11657					}
11658
11659					// Discard index placeholder values to get only actual matches
11660					setMatched = condense( setMatched );
11661				}
11662
11663				// Add matches to results
11664				push.apply( results, setMatched );
11665
11666				// Seedless set matches succeeding multiple successful matchers stipulate sorting
11667				if ( outermost && !seed && setMatched.length > 0 &&
11668					( matchedCount + setMatchers.length ) > 1 ) {
11669
11670					jQuery.uniqueSort( results );
11671				}
11672			}
11673
11674			// Override manipulation of globals by nested matchers
11675			if ( outermost ) {
11676				dirruns = dirrunsUnique;
11677				outermostContext = contextBackup;
11678			}
11679
11680			return unmatched;
11681		};
11682
11683	return bySet ?
11684		markFunction( superMatcher ) :
11685		superMatcher;
11686}
11687
11688function compile( selector, match /* Internal Use Only */ ) {
11689	var i,
11690		setMatchers = [],
11691		elementMatchers = [],
11692		cached = compilerCache[ selector + " " ];
11693
11694	if ( !cached ) {
11695
11696		// Generate a function of recursive functions that can be used to check each element
11697		if ( !match ) {
11698			match = tokenize( selector );
11699		}
11700		i = match.length;
11701		while ( i-- ) {
11702			cached = matcherFromTokens( match[ i ] );
11703			if ( cached[ expando ] ) {
11704				setMatchers.push( cached );
11705			} else {
11706				elementMatchers.push( cached );
11707			}
11708		}
11709
11710		// Cache the compiled function
11711		cached = compilerCache( selector,
11712			matcherFromGroupMatchers( elementMatchers, setMatchers ) );
11713
11714		// Save selector and tokenization
11715		cached.selector = selector;
11716	}
11717	return cached;
11718}
11719
11720/**
11721 * A low-level selection function that works with jQuery's compiled
11722 *  selector functions
11723 * @param {String|Function} selector A selector or a pre-compiled
11724 *  selector function built with jQuery selector compile
11725 * @param {Element} context
11726 * @param {Array} [results]
11727 * @param {Array} [seed] A set of elements to match against
11728 */
11729function select( selector, context, results, seed ) {
11730	var i, tokens, token, type, find,
11731		compiled = typeof selector === "function" && selector,
11732		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
11733
11734	results = results || [];
11735
11736	// Try to minimize operations if there is only one selector in the list and no seed
11737	// (the latter of which guarantees us context)
11738	if ( match.length === 1 ) {
11739
11740		// Reduce context if the leading compound selector is an ID
11741		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
11742		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
11743				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
11744
11745			context = ( Expr.find.ID(
11746				token.matches[ 0 ].replace( runescape, funescape ),
11747				context
11748			) || [] )[ 0 ];
11749			if ( !context ) {
11750				return results;
11751
11752			// Precompiled matchers will still verify ancestry, so step up a level
11753			} else if ( compiled ) {
11754				context = context.parentNode;
11755			}
11756
11757			selector = selector.slice( tokens.shift().value.length );
11758		}
11759
11760		// Fetch a seed set for right-to-left matching
11761		i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;
11762		while ( i-- ) {
11763			token = tokens[ i ];
11764
11765			// Abort if we hit a combinator
11766			if ( Expr.relative[ ( type = token.type ) ] ) {
11767				break;
11768			}
11769			if ( ( find = Expr.find[ type ] ) ) {
11770
11771				// Search, expanding context for leading sibling combinators
11772				if ( ( seed = find(
11773					token.matches[ 0 ].replace( runescape, funescape ),
11774					rsibling.test( tokens[ 0 ].type ) &&
11775						testContext( context.parentNode ) || context
11776				) ) ) {
11777
11778					// If seed is empty or no tokens remain, we can return early
11779					tokens.splice( i, 1 );
11780					selector = seed.length && toSelector( tokens );
11781					if ( !selector ) {
11782						push.apply( results, seed );
11783						return results;
11784					}
11785
11786					break;
11787				}
11788			}
11789		}
11790	}
11791
11792	// Compile and execute a filtering function if one is not provided
11793	// Provide `match` to avoid retokenization if we modified the selector above
11794	( compiled || compile( selector, match ) )(
11795		seed,
11796		context,
11797		!documentIsHTML,
11798		results,
11799		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
11800	);
11801	return results;
11802}
11803
11804// One-time assignments
11805
11806// Support: Android <=4.0 - 4.1+
11807// Sort stability
11808support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
11809
11810// Initialize against the default document
11811setDocument();
11812
11813// Support: Android <=4.0 - 4.1+
11814// Detached nodes confoundingly follow *each other*
11815support.sortDetached = assert( function( el ) {
11816
11817	// Should return 1, but returns 4 (following)
11818	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
11819} );
11820
11821jQuery.find = find;
11822
11823// Deprecated
11824jQuery.expr[ ":" ] = jQuery.expr.pseudos;
11825jQuery.unique = jQuery.uniqueSort;
11826
11827// These have always been private, but they used to be documented as part of
11828// Sizzle so let's maintain them for now for backwards compatibility purposes.
11829find.compile = compile;
11830find.select = select;
11831find.setDocument = setDocument;
11832find.tokenize = tokenize;
11833
11834find.escape = jQuery.escapeSelector;
11835find.getText = jQuery.text;
11836find.isXML = jQuery.isXMLDoc;
11837find.selectors = jQuery.expr;
11838find.support = jQuery.support;
11839find.uniqueSort = jQuery.uniqueSort;
11840
11841	/* eslint-enable */
11842
11843} )();
11844
11845
11846var dir = function( elem, dir, until ) {
11847	var matched = [],
11848		truncate = until !== undefined;
11849
11850	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
11851		if ( elem.nodeType === 1 ) {
11852			if ( truncate && jQuery( elem ).is( until ) ) {
11853				break;
11854			}
11855			matched.push( elem );
11856		}
11857	}
11858	return matched;
11859};
11860
11861
11862var siblings = function( n, elem ) {
11863	var matched = [];
11864
11865	for ( ; n; n = n.nextSibling ) {
11866		if ( n.nodeType === 1 && n !== elem ) {
11867			matched.push( n );
11868		}
11869	}
11870
11871	return matched;
11872};
11873
11874
11875var rneedsContext = jQuery.expr.match.needsContext;
11876
11877var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
11878
11879
11880
11881// Implement the identical functionality for filter and not
11882function winnow( elements, qualifier, not ) {
11883	if ( isFunction( qualifier ) ) {
11884		return jQuery.grep( elements, function( elem, i ) {
11885			return !!qualifier.call( elem, i, elem ) !== not;
11886		} );
11887	}
11888
11889	// Single element
11890	if ( qualifier.nodeType ) {
11891		return jQuery.grep( elements, function( elem ) {
11892			return ( elem === qualifier ) !== not;
11893		} );
11894	}
11895
11896	// Arraylike of elements (jQuery, arguments, Array)
11897	if ( typeof qualifier !== "string" ) {
11898		return jQuery.grep( elements, function( elem ) {
11899			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
11900		} );
11901	}
11902
11903	// Filtered directly for both simple and complex selectors
11904	return jQuery.filter( qualifier, elements, not );
11905}
11906
11907jQuery.filter = function( expr, elems, not ) {
11908	var elem = elems[ 0 ];
11909
11910	if ( not ) {
11911		expr = ":not(" + expr + ")";
11912	}
11913
11914	if ( elems.length === 1 && elem.nodeType === 1 ) {
11915		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
11916	}
11917
11918	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
11919		return elem.nodeType === 1;
11920	} ) );
11921};
11922
11923jQuery.fn.extend( {
11924	find: function( selector ) {
11925		var i, ret,
11926			len = this.length,
11927			self = this;
11928
11929		if ( typeof selector !== "string" ) {
11930			return this.pushStack( jQuery( selector ).filter( function() {
11931				for ( i = 0; i < len; i++ ) {
11932					if ( jQuery.contains( self[ i ], this ) ) {
11933						return true;
11934					}
11935				}
11936			} ) );
11937		}
11938
11939		ret = this.pushStack( [] );
11940
11941		for ( i = 0; i < len; i++ ) {
11942			jQuery.find( selector, self[ i ], ret );
11943		}
11944
11945		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
11946	},
11947	filter: function( selector ) {
11948		return this.pushStack( winnow( this, selector || [], false ) );
11949	},
11950	not: function( selector ) {
11951		return this.pushStack( winnow( this, selector || [], true ) );
11952	},
11953	is: function( selector ) {
11954		return !!winnow(
11955			this,
11956
11957			// If this is a positional/relative selector, check membership in the returned set
11958			// so $("p:first").is("p:last") won't return true for a doc with two "p".
11959			typeof selector === "string" && rneedsContext.test( selector ) ?
11960				jQuery( selector ) :
11961				selector || [],
11962			false
11963		).length;
11964	}
11965} );
11966
11967
11968// Initialize a jQuery object
11969
11970
11971// A central reference to the root jQuery(document)
11972var rootjQuery,
11973
11974	// A simple way to check for HTML strings
11975	// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
11976	// Strict HTML recognition (trac-11290: must start with <)
11977	// Shortcut simple #id case for speed
11978	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
11979
11980	init = jQuery.fn.init = function( selector, context, root ) {
11981		var match, elem;
11982
11983		// HANDLE: $(""), $(null), $(undefined), $(false)
11984		if ( !selector ) {
11985			return this;
11986		}
11987
11988		// Method init() accepts an alternate rootjQuery
11989		// so migrate can support jQuery.sub (gh-2101)
11990		root = root || rootjQuery;
11991
11992		// Handle HTML strings
11993		if ( typeof selector === "string" ) {
11994			if ( selector[ 0 ] === "<" &&
11995				selector[ selector.length - 1 ] === ">" &&
11996				selector.length >= 3 ) {
11997
11998				// Assume that strings that start and end with <> are HTML and skip the regex check
11999				match = [ null, selector, null ];
12000
12001			} else {
12002				match = rquickExpr.exec( selector );
12003			}
12004
12005			// Match html or make sure no context is specified for #id
12006			if ( match && ( match[ 1 ] || !context ) ) {
12007
12008				// HANDLE: $(html) -> $(array)
12009				if ( match[ 1 ] ) {
12010					context = context instanceof jQuery ? context[ 0 ] : context;
12011
12012					// Option to run scripts is true for back-compat
12013					// Intentionally let the error be thrown if parseHTML is not present
12014					jQuery.merge( this, jQuery.parseHTML(
12015						match[ 1 ],
12016						context && context.nodeType ? context.ownerDocument || context : document,
12017						true
12018					) );
12019
12020					// HANDLE: $(html, props)
12021					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
12022						for ( match in context ) {
12023
12024							// Properties of context are called as methods if possible
12025							if ( isFunction( this[ match ] ) ) {
12026								this[ match ]( context[ match ] );
12027
12028							// ...and otherwise set as attributes
12029							} else {
12030								this.attr( match, context[ match ] );
12031							}
12032						}
12033					}
12034
12035					return this;
12036
12037				// HANDLE: $(#id)
12038				} else {
12039					elem = document.getElementById( match[ 2 ] );
12040
12041					if ( elem ) {
12042
12043						// Inject the element directly into the jQuery object
12044						this[ 0 ] = elem;
12045						this.length = 1;
12046					}
12047					return this;
12048				}
12049
12050			// HANDLE: $(expr, $(...))
12051			} else if ( !context || context.jquery ) {
12052				return ( context || root ).find( selector );
12053
12054			// HANDLE: $(expr, context)
12055			// (which is just equivalent to: $(context).find(expr)
12056			} else {
12057				return this.constructor( context ).find( selector );
12058			}
12059
12060		// HANDLE: $(DOMElement)
12061		} else if ( selector.nodeType ) {
12062			this[ 0 ] = selector;
12063			this.length = 1;
12064			return this;
12065
12066		// HANDLE: $(function)
12067		// Shortcut for document ready
12068		} else if ( isFunction( selector ) ) {
12069			return root.ready !== undefined ?
12070				root.ready( selector ) :
12071
12072				// Execute immediately if ready is not present
12073				selector( jQuery );
12074		}
12075
12076		return jQuery.makeArray( selector, this );
12077	};
12078
12079// Give the init function the jQuery prototype for later instantiation
12080init.prototype = jQuery.fn;
12081
12082// Initialize central reference
12083rootjQuery = jQuery( document );
12084
12085
12086var rparentsprev = /^(?:parents|prev(?:Until|All))/,
12087
12088	// Methods guaranteed to produce a unique set when starting from a unique set
12089	guaranteedUnique = {
12090		children: true,
12091		contents: true,
12092		next: true,
12093		prev: true
12094	};
12095
12096jQuery.fn.extend( {
12097	has: function( target ) {
12098		var targets = jQuery( target, this ),
12099			l = targets.length;
12100
12101		return this.filter( function() {
12102			var i = 0;
12103			for ( ; i < l; i++ ) {
12104				if ( jQuery.contains( this, targets[ i ] ) ) {
12105					return true;
12106				}
12107			}
12108		} );
12109	},
12110
12111	closest: function( selectors, context ) {
12112		var cur,
12113			i = 0,
12114			l = this.length,
12115			matched = [],
12116			targets = typeof selectors !== "string" && jQuery( selectors );
12117
12118		// Positional selectors never match, since there's no _selection_ context
12119		if ( !rneedsContext.test( selectors ) ) {
12120			for ( ; i < l; i++ ) {
12121				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
12122
12123					// Always skip document fragments
12124					if ( cur.nodeType < 11 && ( targets ?
12125						targets.index( cur ) > -1 :
12126
12127						// Don't pass non-elements to jQuery#find
12128						cur.nodeType === 1 &&
12129							jQuery.find.matchesSelector( cur, selectors ) ) ) {
12130
12131						matched.push( cur );
12132						break;
12133					}
12134				}
12135			}
12136		}
12137
12138		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
12139	},
12140
12141	// Determine the position of an element within the set
12142	index: function( elem ) {
12143
12144		// No argument, return index in parent
12145		if ( !elem ) {
12146			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
12147		}
12148
12149		// Index in selector
12150		if ( typeof elem === "string" ) {
12151			return indexOf.call( jQuery( elem ), this[ 0 ] );
12152		}
12153
12154		// Locate the position of the desired element
12155		return indexOf.call( this,
12156
12157			// If it receives a jQuery object, the first element is used
12158			elem.jquery ? elem[ 0 ] : elem
12159		);
12160	},
12161
12162	add: function( selector, context ) {
12163		return this.pushStack(
12164			jQuery.uniqueSort(
12165				jQuery.merge( this.get(), jQuery( selector, context ) )
12166			)
12167		);
12168	},
12169
12170	addBack: function( selector ) {
12171		return this.add( selector == null ?
12172			this.prevObject : this.prevObject.filter( selector )
12173		);
12174	}
12175} );
12176
12177function sibling( cur, dir ) {
12178	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
12179	return cur;
12180}
12181
12182jQuery.each( {
12183	parent: function( elem ) {
12184		var parent = elem.parentNode;
12185		return parent && parent.nodeType !== 11 ? parent : null;
12186	},
12187	parents: function( elem ) {
12188		return dir( elem, "parentNode" );
12189	},
12190	parentsUntil: function( elem, _i, until ) {
12191		return dir( elem, "parentNode", until );
12192	},
12193	next: function( elem ) {
12194		return sibling( elem, "nextSibling" );
12195	},
12196	prev: function( elem ) {
12197		return sibling( elem, "previousSibling" );
12198	},
12199	nextAll: function( elem ) {
12200		return dir( elem, "nextSibling" );
12201	},
12202	prevAll: function( elem ) {
12203		return dir( elem, "previousSibling" );
12204	},
12205	nextUntil: function( elem, _i, until ) {
12206		return dir( elem, "nextSibling", until );
12207	},
12208	prevUntil: function( elem, _i, until ) {
12209		return dir( elem, "previousSibling", until );
12210	},
12211	siblings: function( elem ) {
12212		return siblings( ( elem.parentNode || {} ).firstChild, elem );
12213	},
12214	children: function( elem ) {
12215		return siblings( elem.firstChild );
12216	},
12217	contents: function( elem ) {
12218		if ( elem.contentDocument != null &&
12219
12220			// Support: IE 11+
12221			// <object> elements with no `data` attribute has an object
12222			// `contentDocument` with a `null` prototype.
12223			getProto( elem.contentDocument ) ) {
12224
12225			return elem.contentDocument;
12226		}
12227
12228		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
12229		// Treat the template element as a regular one in browsers that
12230		// don't support it.
12231		if ( nodeName( elem, "template" ) ) {
12232			elem = elem.content || elem;
12233		}
12234
12235		return jQuery.merge( [], elem.childNodes );
12236	}
12237}, function( name, fn ) {
12238	jQuery.fn[ name ] = function( until, selector ) {
12239		var matched = jQuery.map( this, fn, until );
12240
12241		if ( name.slice( -5 ) !== "Until" ) {
12242			selector = until;
12243		}
12244
12245		if ( selector && typeof selector === "string" ) {
12246			matched = jQuery.filter( selector, matched );
12247		}
12248
12249		if ( this.length > 1 ) {
12250
12251			// Remove duplicates
12252			if ( !guaranteedUnique[ name ] ) {
12253				jQuery.uniqueSort( matched );
12254			}
12255
12256			// Reverse order for parents* and prev-derivatives
12257			if ( rparentsprev.test( name ) ) {
12258				matched.reverse();
12259			}
12260		}
12261
12262		return this.pushStack( matched );
12263	};
12264} );
12265var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
12266
12267
12268
12269// Convert String-formatted options into Object-formatted ones
12270function createOptions( options ) {
12271	var object = {};
12272	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
12273		object[ flag ] = true;
12274	} );
12275	return object;
12276}
12277
12278/*
12279 * Create a callback list using the following parameters:
12280 *
12281 *	options: an optional list of space-separated options that will change how
12282 *			the callback list behaves or a more traditional option object
12283 *
12284 * By default a callback list will act like an event callback list and can be
12285 * "fired" multiple times.
12286 *
12287 * Possible options:
12288 *
12289 *	once:			will ensure the callback list can only be fired once (like a Deferred)
12290 *
12291 *	memory:			will keep track of previous values and will call any callback added
12292 *					after the list has been fired right away with the latest "memorized"
12293 *					values (like a Deferred)
12294 *
12295 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
12296 *
12297 *	stopOnFalse:	interrupt callings when a callback returns false
12298 *
12299 */
12300jQuery.Callbacks = function( options ) {
12301
12302	// Convert options from String-formatted to Object-formatted if needed
12303	// (we check in cache first)
12304	options = typeof options === "string" ?
12305		createOptions( options ) :
12306		jQuery.extend( {}, options );
12307
12308	var // Flag to know if list is currently firing
12309		firing,
12310
12311		// Last fire value for non-forgettable lists
12312		memory,
12313
12314		// Flag to know if list was already fired
12315		fired,
12316
12317		// Flag to prevent firing
12318		locked,
12319
12320		// Actual callback list
12321		list = [],
12322
12323		// Queue of execution data for repeatable lists
12324		queue = [],
12325
12326		// Index of currently firing callback (modified by add/remove as needed)
12327		firingIndex = -1,
12328
12329		// Fire callbacks
12330		fire = function() {
12331
12332			// Enforce single-firing
12333			locked = locked || options.once;
12334
12335			// Execute callbacks for all pending executions,
12336			// respecting firingIndex overrides and runtime changes
12337			fired = firing = true;
12338			for ( ; queue.length; firingIndex = -1 ) {
12339				memory = queue.shift();
12340				while ( ++firingIndex < list.length ) {
12341
12342					// Run callback and check for early termination
12343					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
12344						options.stopOnFalse ) {
12345
12346						// Jump to end and forget the data so .add doesn't re-fire
12347						firingIndex = list.length;
12348						memory = false;
12349					}
12350				}
12351			}
12352
12353			// Forget the data if we're done with it
12354			if ( !options.memory ) {
12355				memory = false;
12356			}
12357
12358			firing = false;
12359
12360			// Clean up if we're done firing for good
12361			if ( locked ) {
12362
12363				// Keep an empty list if we have data for future add calls
12364				if ( memory ) {
12365					list = [];
12366
12367				// Otherwise, this object is spent
12368				} else {
12369					list = "";
12370				}
12371			}
12372		},
12373
12374		// Actual Callbacks object
12375		self = {
12376
12377			// Add a callback or a collection of callbacks to the list
12378			add: function() {
12379				if ( list ) {
12380
12381					// If we have memory from a past run, we should fire after adding
12382					if ( memory && !firing ) {
12383						firingIndex = list.length - 1;
12384						queue.push( memory );
12385					}
12386
12387					( function add( args ) {
12388						jQuery.each( args, function( _, arg ) {
12389							if ( isFunction( arg ) ) {
12390								if ( !options.unique || !self.has( arg ) ) {
12391									list.push( arg );
12392								}
12393							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
12394
12395								// Inspect recursively
12396								add( arg );
12397							}
12398						} );
12399					} )( arguments );
12400
12401					if ( memory && !firing ) {
12402						fire();
12403					}
12404				}
12405				return this;
12406			},
12407
12408			// Remove a callback from the list
12409			remove: function() {
12410				jQuery.each( arguments, function( _, arg ) {
12411					var index;
12412					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
12413						list.splice( index, 1 );
12414
12415						// Handle firing indexes
12416						if ( index <= firingIndex ) {
12417							firingIndex--;
12418						}
12419					}
12420				} );
12421				return this;
12422			},
12423
12424			// Check if a given callback is in the list.
12425			// If no argument is given, return whether or not list has callbacks attached.
12426			has: function( fn ) {
12427				return fn ?
12428					jQuery.inArray( fn, list ) > -1 :
12429					list.length > 0;
12430			},
12431
12432			// Remove all callbacks from the list
12433			empty: function() {
12434				if ( list ) {
12435					list = [];
12436				}
12437				return this;
12438			},
12439
12440			// Disable .fire and .add
12441			// Abort any current/pending executions
12442			// Clear all callbacks and values
12443			disable: function() {
12444				locked = queue = [];
12445				list = memory = "";
12446				return this;
12447			},
12448			disabled: function() {
12449				return !list;
12450			},
12451
12452			// Disable .fire
12453			// Also disable .add unless we have memory (since it would have no effect)
12454			// Abort any pending executions
12455			lock: function() {
12456				locked = queue = [];
12457				if ( !memory && !firing ) {
12458					list = memory = "";
12459				}
12460				return this;
12461			},
12462			locked: function() {
12463				return !!locked;
12464			},
12465
12466			// Call all callbacks with the given context and arguments
12467			fireWith: function( context, args ) {
12468				if ( !locked ) {
12469					args = args || [];
12470					args = [ context, args.slice ? args.slice() : args ];
12471					queue.push( args );
12472					if ( !firing ) {
12473						fire();
12474					}
12475				}
12476				return this;
12477			},
12478
12479			// Call all the callbacks with the given arguments
12480			fire: function() {
12481				self.fireWith( this, arguments );
12482				return this;
12483			},
12484
12485			// To know if the callbacks have already been called at least once
12486			fired: function() {
12487				return !!fired;
12488			}
12489		};
12490
12491	return self;
12492};
12493
12494
12495function Identity( v ) {
12496	return v;
12497}
12498function Thrower( ex ) {
12499	throw ex;
12500}
12501
12502function adoptValue( value, resolve, reject, noValue ) {
12503	var method;
12504
12505	try {
12506
12507		// Check for promise aspect first to privilege synchronous behavior
12508		if ( value && isFunction( ( method = value.promise ) ) ) {
12509			method.call( value ).done( resolve ).fail( reject );
12510
12511		// Other thenables
12512		} else if ( value && isFunction( ( method = value.then ) ) ) {
12513			method.call( value, resolve, reject );
12514
12515		// Other non-thenables
12516		} else {
12517
12518			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
12519			// * false: [ value ].slice( 0 ) => resolve( value )
12520			// * true: [ value ].slice( 1 ) => resolve()
12521			resolve.apply( undefined, [ value ].slice( noValue ) );
12522		}
12523
12524	// For Promises/A+, convert exceptions into rejections
12525	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
12526	// Deferred#then to conditionally suppress rejection.
12527	} catch ( value ) {
12528
12529		// Support: Android 4.0 only
12530		// Strict mode functions invoked without .call/.apply get global-object context
12531		reject.apply( undefined, [ value ] );
12532	}
12533}
12534
12535jQuery.extend( {
12536
12537	Deferred: function( func ) {
12538		var tuples = [
12539
12540				// action, add listener, callbacks,
12541				// ... .then handlers, argument index, [final state]
12542				[ "notify", "progress", jQuery.Callbacks( "memory" ),
12543					jQuery.Callbacks( "memory" ), 2 ],
12544				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
12545					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
12546				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
12547					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
12548			],
12549			state = "pending",
12550			promise = {
12551				state: function() {
12552					return state;
12553				},
12554				always: function() {
12555					deferred.done( arguments ).fail( arguments );
12556					return this;
12557				},
12558				"catch": function( fn ) {
12559					return promise.then( null, fn );
12560				},
12561
12562				// Keep pipe for back-compat
12563				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
12564					var fns = arguments;
12565
12566					return jQuery.Deferred( function( newDefer ) {
12567						jQuery.each( tuples, function( _i, tuple ) {
12568
12569							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
12570							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
12571
12572							// deferred.progress(function() { bind to newDefer or newDefer.notify })
12573							// deferred.done(function() { bind to newDefer or newDefer.resolve })
12574							// deferred.fail(function() { bind to newDefer or newDefer.reject })
12575							deferred[ tuple[ 1 ] ]( function() {
12576								var returned = fn && fn.apply( this, arguments );
12577								if ( returned && isFunction( returned.promise ) ) {
12578									returned.promise()
12579										.progress( newDefer.notify )
12580										.done( newDefer.resolve )
12581										.fail( newDefer.reject );
12582								} else {
12583									newDefer[ tuple[ 0 ] + "With" ](
12584										this,
12585										fn ? [ returned ] : arguments
12586									);
12587								}
12588							} );
12589						} );
12590						fns = null;
12591					} ).promise();
12592				},
12593				then: function( onFulfilled, onRejected, onProgress ) {
12594					var maxDepth = 0;
12595					function resolve( depth, deferred, handler, special ) {
12596						return function() {
12597							var that = this,
12598								args = arguments,
12599								mightThrow = function() {
12600									var returned, then;
12601
12602									// Support: Promises/A+ section 2.3.3.3.3
12603									// https://promisesaplus.com/#point-59
12604									// Ignore double-resolution attempts
12605									if ( depth < maxDepth ) {
12606										return;
12607									}
12608
12609									returned = handler.apply( that, args );
12610
12611									// Support: Promises/A+ section 2.3.1
12612									// https://promisesaplus.com/#point-48
12613									if ( returned === deferred.promise() ) {
12614										throw new TypeError( "Thenable self-resolution" );
12615									}
12616
12617									// Support: Promises/A+ sections 2.3.3.1, 3.5
12618									// https://promisesaplus.com/#point-54
12619									// https://promisesaplus.com/#point-75
12620									// Retrieve `then` only once
12621									then = returned &&
12622
12623										// Support: Promises/A+ section 2.3.4
12624										// https://promisesaplus.com/#point-64
12625										// Only check objects and functions for thenability
12626										( typeof returned === "object" ||
12627											typeof returned === "function" ) &&
12628										returned.then;
12629
12630									// Handle a returned thenable
12631									if ( isFunction( then ) ) {
12632
12633										// Special processors (notify) just wait for resolution
12634										if ( special ) {
12635											then.call(
12636												returned,
12637												resolve( maxDepth, deferred, Identity, special ),
12638												resolve( maxDepth, deferred, Thrower, special )
12639											);
12640
12641										// Normal processors (resolve) also hook into progress
12642										} else {
12643
12644											// ...and disregard older resolution values
12645											maxDepth++;
12646
12647											then.call(
12648												returned,
12649												resolve( maxDepth, deferred, Identity, special ),
12650												resolve( maxDepth, deferred, Thrower, special ),
12651												resolve( maxDepth, deferred, Identity,
12652													deferred.notifyWith )
12653											);
12654										}
12655
12656									// Handle all other returned values
12657									} else {
12658
12659										// Only substitute handlers pass on context
12660										// and multiple values (non-spec behavior)
12661										if ( handler !== Identity ) {
12662											that = undefined;
12663											args = [ returned ];
12664										}
12665
12666										// Process the value(s)
12667										// Default process is resolve
12668										( special || deferred.resolveWith )( that, args );
12669									}
12670								},
12671
12672								// Only normal processors (resolve) catch and reject exceptions
12673								process = special ?
12674									mightThrow :
12675									function() {
12676										try {
12677											mightThrow();
12678										} catch ( e ) {
12679
12680											if ( jQuery.Deferred.exceptionHook ) {
12681												jQuery.Deferred.exceptionHook( e,
12682													process.error );
12683											}
12684
12685											// Support: Promises/A+ section 2.3.3.3.4.1
12686											// https://promisesaplus.com/#point-61
12687											// Ignore post-resolution exceptions
12688											if ( depth + 1 >= maxDepth ) {
12689
12690												// Only substitute handlers pass on context
12691												// and multiple values (non-spec behavior)
12692												if ( handler !== Thrower ) {
12693													that = undefined;
12694													args = [ e ];
12695												}
12696
12697												deferred.rejectWith( that, args );
12698											}
12699										}
12700									};
12701
12702							// Support: Promises/A+ section 2.3.3.3.1
12703							// https://promisesaplus.com/#point-57
12704							// Re-resolve promises immediately to dodge false rejection from
12705							// subsequent errors
12706							if ( depth ) {
12707								process();
12708							} else {
12709
12710								// Call an optional hook to record the error, in case of exception
12711								// since it's otherwise lost when execution goes async
12712								if ( jQuery.Deferred.getErrorHook ) {
12713									process.error = jQuery.Deferred.getErrorHook();
12714
12715								// The deprecated alias of the above. While the name suggests
12716								// returning the stack, not an error instance, jQuery just passes
12717								// it directly to `console.warn` so both will work; an instance
12718								// just better cooperates with source maps.
12719								} else if ( jQuery.Deferred.getStackHook ) {
12720									process.error = jQuery.Deferred.getStackHook();
12721								}
12722								window.setTimeout( process );
12723							}
12724						};
12725					}
12726
12727					return jQuery.Deferred( function( newDefer ) {
12728
12729						// progress_handlers.add( ... )
12730						tuples[ 0 ][ 3 ].add(
12731							resolve(
12732								0,
12733								newDefer,
12734								isFunction( onProgress ) ?
12735									onProgress :
12736									Identity,
12737								newDefer.notifyWith
12738							)
12739						);
12740
12741						// fulfilled_handlers.add( ... )
12742						tuples[ 1 ][ 3 ].add(
12743							resolve(
12744								0,
12745								newDefer,
12746								isFunction( onFulfilled ) ?
12747									onFulfilled :
12748									Identity
12749							)
12750						);
12751
12752						// rejected_handlers.add( ... )
12753						tuples[ 2 ][ 3 ].add(
12754							resolve(
12755								0,
12756								newDefer,
12757								isFunction( onRejected ) ?
12758									onRejected :
12759									Thrower
12760							)
12761						);
12762					} ).promise();
12763				},
12764
12765				// Get a promise for this deferred
12766				// If obj is provided, the promise aspect is added to the object
12767				promise: function( obj ) {
12768					return obj != null ? jQuery.extend( obj, promise ) : promise;
12769				}
12770			},
12771			deferred = {};
12772
12773		// Add list-specific methods
12774		jQuery.each( tuples, function( i, tuple ) {
12775			var list = tuple[ 2 ],
12776				stateString = tuple[ 5 ];
12777
12778			// promise.progress = list.add
12779			// promise.done = list.add
12780			// promise.fail = list.add
12781			promise[ tuple[ 1 ] ] = list.add;
12782
12783			// Handle state
12784			if ( stateString ) {
12785				list.add(
12786					function() {
12787
12788						// state = "resolved" (i.e., fulfilled)
12789						// state = "rejected"
12790						state = stateString;
12791					},
12792
12793					// rejected_callbacks.disable
12794					// fulfilled_callbacks.disable
12795					tuples[ 3 - i ][ 2 ].disable,
12796
12797					// rejected_handlers.disable
12798					// fulfilled_handlers.disable
12799					tuples[ 3 - i ][ 3 ].disable,
12800
12801					// progress_callbacks.lock
12802					tuples[ 0 ][ 2 ].lock,
12803
12804					// progress_handlers.lock
12805					tuples[ 0 ][ 3 ].lock
12806				);
12807			}
12808
12809			// progress_handlers.fire
12810			// fulfilled_handlers.fire
12811			// rejected_handlers.fire
12812			list.add( tuple[ 3 ].fire );
12813
12814			// deferred.notify = function() { deferred.notifyWith(...) }
12815			// deferred.resolve = function() { deferred.resolveWith(...) }
12816			// deferred.reject = function() { deferred.rejectWith(...) }
12817			deferred[ tuple[ 0 ] ] = function() {
12818				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
12819				return this;
12820			};
12821
12822			// deferred.notifyWith = list.fireWith
12823			// deferred.resolveWith = list.fireWith
12824			// deferred.rejectWith = list.fireWith
12825			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
12826		} );
12827
12828		// Make the deferred a promise
12829		promise.promise( deferred );
12830
12831		// Call given func if any
12832		if ( func ) {
12833			func.call( deferred, deferred );
12834		}
12835
12836		// All done!
12837		return deferred;
12838	},
12839
12840	// Deferred helper
12841	when: function( singleValue ) {
12842		var
12843
12844			// count of uncompleted subordinates
12845			remaining = arguments.length,
12846
12847			// count of unprocessed arguments
12848			i = remaining,
12849
12850			// subordinate fulfillment data
12851			resolveContexts = Array( i ),
12852			resolveValues = slice.call( arguments ),
12853
12854			// the primary Deferred
12855			primary = jQuery.Deferred(),
12856
12857			// subordinate callback factory
12858			updateFunc = function( i ) {
12859				return function( value ) {
12860					resolveContexts[ i ] = this;
12861					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
12862					if ( !( --remaining ) ) {
12863						primary.resolveWith( resolveContexts, resolveValues );
12864					}
12865				};
12866			};
12867
12868		// Single- and empty arguments are adopted like Promise.resolve
12869		if ( remaining <= 1 ) {
12870			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
12871				!remaining );
12872
12873			// Use .then() to unwrap secondary thenables (cf. gh-3000)
12874			if ( primary.state() === "pending" ||
12875				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
12876
12877				return primary.then();
12878			}
12879		}
12880
12881		// Multiple arguments are aggregated like Promise.all array elements
12882		while ( i-- ) {
12883			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
12884		}
12885
12886		return primary.promise();
12887	}
12888} );
12889
12890
12891// These usually indicate a programmer mistake during development,
12892// warn about them ASAP rather than swallowing them by default.
12893var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
12894
12895// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error
12896// captured before the async barrier to get the original error cause
12897// which may otherwise be hidden.
12898jQuery.Deferred.exceptionHook = function( error, asyncError ) {
12899
12900	// Support: IE 8 - 9 only
12901	// Console exists when dev tools are open, which can happen at any time
12902	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
12903		window.console.warn( "jQuery.Deferred exception: " + error.message,
12904			error.stack, asyncError );
12905	}
12906};
12907
12908
12909
12910
12911jQuery.readyException = function( error ) {
12912	window.setTimeout( function() {
12913		throw error;
12914	} );
12915};
12916
12917
12918
12919
12920// The deferred used on DOM ready
12921var readyList = jQuery.Deferred();
12922
12923jQuery.fn.ready = function( fn ) {
12924
12925	readyList
12926		.then( fn )
12927
12928		// Wrap jQuery.readyException in a function so that the lookup
12929		// happens at the time of error handling instead of callback
12930		// registration.
12931		.catch( function( error ) {
12932			jQuery.readyException( error );
12933		} );
12934
12935	return this;
12936};
12937
12938jQuery.extend( {
12939
12940	// Is the DOM ready to be used? Set to true once it occurs.
12941	isReady: false,
12942
12943	// A counter to track how many items to wait for before
12944	// the ready event fires. See trac-6781
12945	readyWait: 1,
12946
12947	// Handle when the DOM is ready
12948	ready: function( wait ) {
12949
12950		// Abort if there are pending holds or we're already ready
12951		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
12952			return;
12953		}
12954
12955		// Remember that the DOM is ready
12956		jQuery.isReady = true;
12957
12958		// If a normal DOM Ready event fired, decrement, and wait if need be
12959		if ( wait !== true && --jQuery.readyWait > 0 ) {
12960			return;
12961		}
12962
12963		// If there are functions bound, to execute
12964		readyList.resolveWith( document, [ jQuery ] );
12965	}
12966} );
12967
12968jQuery.ready.then = readyList.then;
12969
12970// The ready event handler and self cleanup method
12971function completed() {
12972	document.removeEventListener( "DOMContentLoaded", completed );
12973	window.removeEventListener( "load", completed );
12974	jQuery.ready();
12975}
12976
12977// Catch cases where $(document).ready() is called
12978// after the browser event has already occurred.
12979// Support: IE <=9 - 10 only
12980// Older IE sometimes signals "interactive" too soon
12981if ( document.readyState === "complete" ||
12982	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
12983
12984	// Handle it asynchronously to allow scripts the opportunity to delay ready
12985	window.setTimeout( jQuery.ready );
12986
12987} else {
12988
12989	// Use the handy event callback
12990	document.addEventListener( "DOMContentLoaded", completed );
12991
12992	// A fallback to window.onload, that will always work
12993	window.addEventListener( "load", completed );
12994}
12995
12996
12997
12998
12999// Multifunctional method to get and set values of a collection
13000// The value/s can optionally be executed if it's a function
13001var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
13002	var i = 0,
13003		len = elems.length,
13004		bulk = key == null;
13005
13006	// Sets many values
13007	if ( toType( key ) === "object" ) {
13008		chainable = true;
13009		for ( i in key ) {
13010			access( elems, fn, i, key[ i ], true, emptyGet, raw );
13011		}
13012
13013	// Sets one value
13014	} else if ( value !== undefined ) {
13015		chainable = true;
13016
13017		if ( !isFunction( value ) ) {
13018			raw = true;
13019		}
13020
13021		if ( bulk ) {
13022
13023			// Bulk operations run against the entire set
13024			if ( raw ) {
13025				fn.call( elems, value );
13026				fn = null;
13027
13028			// ...except when executing function values
13029			} else {
13030				bulk = fn;
13031				fn = function( elem, _key, value ) {
13032					return bulk.call( jQuery( elem ), value );
13033				};
13034			}
13035		}
13036
13037		if ( fn ) {
13038			for ( ; i < len; i++ ) {
13039				fn(
13040					elems[ i ], key, raw ?
13041						value :
13042						value.call( elems[ i ], i, fn( elems[ i ], key ) )
13043				);
13044			}
13045		}
13046	}
13047
13048	if ( chainable ) {
13049		return elems;
13050	}
13051
13052	// Gets
13053	if ( bulk ) {
13054		return fn.call( elems );
13055	}
13056
13057	return len ? fn( elems[ 0 ], key ) : emptyGet;
13058};
13059
13060
13061// Matches dashed string for camelizing
13062var rmsPrefix = /^-ms-/,
13063	rdashAlpha = /-([a-z])/g;
13064
13065// Used by camelCase as callback to replace()
13066function fcamelCase( _all, letter ) {
13067	return letter.toUpperCase();
13068}
13069
13070// Convert dashed to camelCase; used by the css and data modules
13071// Support: IE <=9 - 11, Edge 12 - 15
13072// Microsoft forgot to hump their vendor prefix (trac-9572)
13073function camelCase( string ) {
13074	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
13075}
13076var acceptData = function( owner ) {
13077
13078	// Accepts only:
13079	//  - Node
13080	//    - Node.ELEMENT_NODE
13081	//    - Node.DOCUMENT_NODE
13082	//  - Object
13083	//    - Any
13084	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
13085};
13086
13087
13088
13089
13090function Data() {
13091	this.expando = jQuery.expando + Data.uid++;
13092}
13093
13094Data.uid = 1;
13095
13096Data.prototype = {
13097
13098	cache: function( owner ) {
13099
13100		// Check if the owner object already has a cache
13101		var value = owner[ this.expando ];
13102
13103		// If not, create one
13104		if ( !value ) {
13105			value = {};
13106
13107			// We can accept data for non-element nodes in modern browsers,
13108			// but we should not, see trac-8335.
13109			// Always return an empty object.
13110			if ( acceptData( owner ) ) {
13111
13112				// If it is a node unlikely to be stringify-ed or looped over
13113				// use plain assignment
13114				if ( owner.nodeType ) {
13115					owner[ this.expando ] = value;
13116
13117				// Otherwise secure it in a non-enumerable property
13118				// configurable must be true to allow the property to be
13119				// deleted when data is removed
13120				} else {
13121					Object.defineProperty( owner, this.expando, {
13122						value: value,
13123						configurable: true
13124					} );
13125				}
13126			}
13127		}
13128
13129		return value;
13130	},
13131	set: function( owner, data, value ) {
13132		var prop,
13133			cache = this.cache( owner );
13134
13135		// Handle: [ owner, key, value ] args
13136		// Always use camelCase key (gh-2257)
13137		if ( typeof data === "string" ) {
13138			cache[ camelCase( data ) ] = value;
13139
13140		// Handle: [ owner, { properties } ] args
13141		} else {
13142
13143			// Copy the properties one-by-one to the cache object
13144			for ( prop in data ) {
13145				cache[ camelCase( prop ) ] = data[ prop ];
13146			}
13147		}
13148		return cache;
13149	},
13150	get: function( owner, key ) {
13151		return key === undefined ?
13152			this.cache( owner ) :
13153
13154			// Always use camelCase key (gh-2257)
13155			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
13156	},
13157	access: function( owner, key, value ) {
13158
13159		// In cases where either:
13160		//
13161		//   1. No key was specified
13162		//   2. A string key was specified, but no value provided
13163		//
13164		// Take the "read" path and allow the get method to determine
13165		// which value to return, respectively either:
13166		//
13167		//   1. The entire cache object
13168		//   2. The data stored at the key
13169		//
13170		if ( key === undefined ||
13171				( ( key && typeof key === "string" ) && value === undefined ) ) {
13172
13173			return this.get( owner, key );
13174		}
13175
13176		// When the key is not a string, or both a key and value
13177		// are specified, set or extend (existing objects) with either:
13178		//
13179		//   1. An object of properties
13180		//   2. A key and value
13181		//
13182		this.set( owner, key, value );
13183
13184		// Since the "set" path can have two possible entry points
13185		// return the expected data based on which path was taken[*]
13186		return value !== undefined ? value : key;
13187	},
13188	remove: function( owner, key ) {
13189		var i,
13190			cache = owner[ this.expando ];
13191
13192		if ( cache === undefined ) {
13193			return;
13194		}
13195
13196		if ( key !== undefined ) {
13197
13198			// Support array or space separated string of keys
13199			if ( Array.isArray( key ) ) {
13200
13201				// If key is an array of keys...
13202				// We always set camelCase keys, so remove that.
13203				key = key.map( camelCase );
13204			} else {
13205				key = camelCase( key );
13206
13207				// If a key with the spaces exists, use it.
13208				// Otherwise, create an array by matching non-whitespace
13209				key = key in cache ?
13210					[ key ] :
13211					( key.match( rnothtmlwhite ) || [] );
13212			}
13213
13214			i = key.length;
13215
13216			while ( i-- ) {
13217				delete cache[ key[ i ] ];
13218			}
13219		}
13220
13221		// Remove the expando if there's no more data
13222		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
13223
13224			// Support: Chrome <=35 - 45
13225			// Webkit & Blink performance suffers when deleting properties
13226			// from DOM nodes, so set to undefined instead
13227			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
13228			if ( owner.nodeType ) {
13229				owner[ this.expando ] = undefined;
13230			} else {
13231				delete owner[ this.expando ];
13232			}
13233		}
13234	},
13235	hasData: function( owner ) {
13236		var cache = owner[ this.expando ];
13237		return cache !== undefined && !jQuery.isEmptyObject( cache );
13238	}
13239};
13240var dataPriv = new Data();
13241
13242var dataUser = new Data();
13243
13244
13245
13246//	Implementation Summary
13247//
13248//	1. Enforce API surface and semantic compatibility with 1.9.x branch
13249//	2. Improve the module's maintainability by reducing the storage
13250//		paths to a single mechanism.
13251//	3. Use the same single mechanism to support "private" and "user" data.
13252//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
13253//	5. Avoid exposing implementation details on user objects (eg. expando properties)
13254//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
13255
13256var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
13257	rmultiDash = /[A-Z]/g;
13258
13259function getData( data ) {
13260	if ( data === "true" ) {
13261		return true;
13262	}
13263
13264	if ( data === "false" ) {
13265		return false;
13266	}
13267
13268	if ( data === "null" ) {
13269		return null;
13270	}
13271
13272	// Only convert to a number if it doesn't change the string
13273	if ( data === +data + "" ) {
13274		return +data;
13275	}
13276
13277	if ( rbrace.test( data ) ) {
13278		return JSON.parse( data );
13279	}
13280
13281	return data;
13282}
13283
13284function dataAttr( elem, key, data ) {
13285	var name;
13286
13287	// If nothing was found internally, try to fetch any
13288	// data from the HTML5 data-* attribute
13289	if ( data === undefined && elem.nodeType === 1 ) {
13290		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
13291		data = elem.getAttribute( name );
13292
13293		if ( typeof data === "string" ) {
13294			try {
13295				data = getData( data );
13296			} catch ( e ) {}
13297
13298			// Make sure we set the data so it isn't changed later
13299			dataUser.set( elem, key, data );
13300		} else {
13301			data = undefined;
13302		}
13303	}
13304	return data;
13305}
13306
13307jQuery.extend( {
13308	hasData: function( elem ) {
13309		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
13310	},
13311
13312	data: function( elem, name, data ) {
13313		return dataUser.access( elem, name, data );
13314	},
13315
13316	removeData: function( elem, name ) {
13317		dataUser.remove( elem, name );
13318	},
13319
13320	// TODO: Now that all calls to _data and _removeData have been replaced
13321	// with direct calls to dataPriv methods, these can be deprecated.
13322	_data: function( elem, name, data ) {
13323		return dataPriv.access( elem, name, data );
13324	},
13325
13326	_removeData: function( elem, name ) {
13327		dataPriv.remove( elem, name );
13328	}
13329} );
13330
13331jQuery.fn.extend( {
13332	data: function( key, value ) {
13333		var i, name, data,
13334			elem = this[ 0 ],
13335			attrs = elem && elem.attributes;
13336
13337		// Gets all values
13338		if ( key === undefined ) {
13339			if ( this.length ) {
13340				data = dataUser.get( elem );
13341
13342				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
13343					i = attrs.length;
13344					while ( i-- ) {
13345
13346						// Support: IE 11 only
13347						// The attrs elements can be null (trac-14894)
13348						if ( attrs[ i ] ) {
13349							name = attrs[ i ].name;
13350							if ( name.indexOf( "data-" ) === 0 ) {
13351								name = camelCase( name.slice( 5 ) );
13352								dataAttr( elem, name, data[ name ] );
13353							}
13354						}
13355					}
13356					dataPriv.set( elem, "hasDataAttrs", true );
13357				}
13358			}
13359
13360			return data;
13361		}
13362
13363		// Sets multiple values
13364		if ( typeof key === "object" ) {
13365			return this.each( function() {
13366				dataUser.set( this, key );
13367			} );
13368		}
13369
13370		return access( this, function( value ) {
13371			var data;
13372
13373			// The calling jQuery object (element matches) is not empty
13374			// (and therefore has an element appears at this[ 0 ]) and the
13375			// `value` parameter was not undefined. An empty jQuery object
13376			// will result in `undefined` for elem = this[ 0 ] which will
13377			// throw an exception if an attempt to read a data cache is made.
13378			if ( elem && value === undefined ) {
13379
13380				// Attempt to get data from the cache
13381				// The key will always be camelCased in Data
13382				data = dataUser.get( elem, key );
13383				if ( data !== undefined ) {
13384					return data;
13385				}
13386
13387				// Attempt to "discover" the data in
13388				// HTML5 custom data-* attrs
13389				data = dataAttr( elem, key );
13390				if ( data !== undefined ) {
13391					return data;
13392				}
13393
13394				// We tried really hard, but the data doesn't exist.
13395				return;
13396			}
13397
13398			// Set the data...
13399			this.each( function() {
13400
13401				// We always store the camelCased key
13402				dataUser.set( this, key, value );
13403			} );
13404		}, null, value, arguments.length > 1, null, true );
13405	},
13406
13407	removeData: function( key ) {
13408		return this.each( function() {
13409			dataUser.remove( this, key );
13410		} );
13411	}
13412} );
13413
13414
13415jQuery.extend( {
13416	queue: function( elem, type, data ) {
13417		var queue;
13418
13419		if ( elem ) {
13420			type = ( type || "fx" ) + "queue";
13421			queue = dataPriv.get( elem, type );
13422
13423			// Speed up dequeue by getting out quickly if this is just a lookup
13424			if ( data ) {
13425				if ( !queue || Array.isArray( data ) ) {
13426					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
13427				} else {
13428					queue.push( data );
13429				}
13430			}
13431			return queue || [];
13432		}
13433	},
13434
13435	dequeue: function( elem, type ) {
13436		type = type || "fx";
13437
13438		var queue = jQuery.queue( elem, type ),
13439			startLength = queue.length,
13440			fn = queue.shift(),
13441			hooks = jQuery._queueHooks( elem, type ),
13442			next = function() {
13443				jQuery.dequeue( elem, type );
13444			};
13445
13446		// If the fx queue is dequeued, always remove the progress sentinel
13447		if ( fn === "inprogress" ) {
13448			fn = queue.shift();
13449			startLength--;
13450		}
13451
13452		if ( fn ) {
13453
13454			// Add a progress sentinel to prevent the fx queue from being
13455			// automatically dequeued
13456			if ( type === "fx" ) {
13457				queue.unshift( "inprogress" );
13458			}
13459
13460			// Clear up the last queue stop function
13461			delete hooks.stop;
13462			fn.call( elem, next, hooks );
13463		}
13464
13465		if ( !startLength && hooks ) {
13466			hooks.empty.fire();
13467		}
13468	},
13469
13470	// Not public - generate a queueHooks object, or return the current one
13471	_queueHooks: function( elem, type ) {
13472		var key = type + "queueHooks";
13473		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
13474			empty: jQuery.Callbacks( "once memory" ).add( function() {
13475				dataPriv.remove( elem, [ type + "queue", key ] );
13476			} )
13477		} );
13478	}
13479} );
13480
13481jQuery.fn.extend( {
13482	queue: function( type, data ) {
13483		var setter = 2;
13484
13485		if ( typeof type !== "string" ) {
13486			data = type;
13487			type = "fx";
13488			setter--;
13489		}
13490
13491		if ( arguments.length < setter ) {
13492			return jQuery.queue( this[ 0 ], type );
13493		}
13494
13495		return data === undefined ?
13496			this :
13497			this.each( function() {
13498				var queue = jQuery.queue( this, type, data );
13499
13500				// Ensure a hooks for this queue
13501				jQuery._queueHooks( this, type );
13502
13503				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
13504					jQuery.dequeue( this, type );
13505				}
13506			} );
13507	},
13508	dequeue: function( type ) {
13509		return this.each( function() {
13510			jQuery.dequeue( this, type );
13511		} );
13512	},
13513	clearQueue: function( type ) {
13514		return this.queue( type || "fx", [] );
13515	},
13516
13517	// Get a promise resolved when queues of a certain type
13518	// are emptied (fx is the type by default)
13519	promise: function( type, obj ) {
13520		var tmp,
13521			count = 1,
13522			defer = jQuery.Deferred(),
13523			elements = this,
13524			i = this.length,
13525			resolve = function() {
13526				if ( !( --count ) ) {
13527					defer.resolveWith( elements, [ elements ] );
13528				}
13529			};
13530
13531		if ( typeof type !== "string" ) {
13532			obj = type;
13533			type = undefined;
13534		}
13535		type = type || "fx";
13536
13537		while ( i-- ) {
13538			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
13539			if ( tmp && tmp.empty ) {
13540				count++;
13541				tmp.empty.add( resolve );
13542			}
13543		}
13544		resolve();
13545		return defer.promise( obj );
13546	}
13547} );
13548var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
13549
13550var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
13551
13552
13553var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
13554
13555var documentElement = document.documentElement;
13556
13557
13558
13559	var isAttached = function( elem ) {
13560			return jQuery.contains( elem.ownerDocument, elem );
13561		},
13562		composed = { composed: true };
13563
13564	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
13565	// Check attachment across shadow DOM boundaries when possible (gh-3504)
13566	// Support: iOS 10.0-10.2 only
13567	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
13568	// leading to errors. We need to check for `getRootNode`.
13569	if ( documentElement.getRootNode ) {
13570		isAttached = function( elem ) {
13571			return jQuery.contains( elem.ownerDocument, elem ) ||
13572				elem.getRootNode( composed ) === elem.ownerDocument;
13573		};
13574	}
13575var isHiddenWithinTree = function( elem, el ) {
13576
13577		// isHiddenWithinTree might be called from jQuery#filter function;
13578		// in that case, element will be second argument
13579		elem = el || elem;
13580
13581		// Inline style trumps all
13582		return elem.style.display === "none" ||
13583			elem.style.display === "" &&
13584
13585			// Otherwise, check computed style
13586			// Support: Firefox <=43 - 45
13587			// Disconnected elements can have computed display: none, so first confirm that elem is
13588			// in the document.
13589			isAttached( elem ) &&
13590
13591			jQuery.css( elem, "display" ) === "none";
13592	};
13593
13594
13595
13596function adjustCSS( elem, prop, valueParts, tween ) {
13597	var adjusted, scale,
13598		maxIterations = 20,
13599		currentValue = tween ?
13600			function() {
13601				return tween.cur();
13602			} :
13603			function() {
13604				return jQuery.css( elem, prop, "" );
13605			},
13606		initial = currentValue(),
13607		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
13608
13609		// Starting value computation is required for potential unit mismatches
13610		initialInUnit = elem.nodeType &&
13611			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
13612			rcssNum.exec( jQuery.css( elem, prop ) );
13613
13614	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
13615
13616		// Support: Firefox <=54
13617		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
13618		initial = initial / 2;
13619
13620		// Trust units reported by jQuery.css
13621		unit = unit || initialInUnit[ 3 ];
13622
13623		// Iteratively approximate from a nonzero starting point
13624		initialInUnit = +initial || 1;
13625
13626		while ( maxIterations-- ) {
13627
13628			// Evaluate and update our best guess (doubling guesses that zero out).
13629			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
13630			jQuery.style( elem, prop, initialInUnit + unit );
13631			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
13632				maxIterations = 0;
13633			}
13634			initialInUnit = initialInUnit / scale;
13635
13636		}
13637
13638		initialInUnit = initialInUnit * 2;
13639		jQuery.style( elem, prop, initialInUnit + unit );
13640
13641		// Make sure we update the tween properties later on
13642		valueParts = valueParts || [];
13643	}
13644
13645	if ( valueParts ) {
13646		initialInUnit = +initialInUnit || +initial || 0;
13647
13648		// Apply relative offset (+=/-=) if specified
13649		adjusted = valueParts[ 1 ] ?
13650			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
13651			+valueParts[ 2 ];
13652		if ( tween ) {
13653			tween.unit = unit;
13654			tween.start = initialInUnit;
13655			tween.end = adjusted;
13656		}
13657	}
13658	return adjusted;
13659}
13660
13661
13662var defaultDisplayMap = {};
13663
13664function getDefaultDisplay( elem ) {
13665	var temp,
13666		doc = elem.ownerDocument,
13667		nodeName = elem.nodeName,
13668		display = defaultDisplayMap[ nodeName ];
13669
13670	if ( display ) {
13671		return display;
13672	}
13673
13674	temp = doc.body.appendChild( doc.createElement( nodeName ) );
13675	display = jQuery.css( temp, "display" );
13676
13677	temp.parentNode.removeChild( temp );
13678
13679	if ( display === "none" ) {
13680		display = "block";
13681	}
13682	defaultDisplayMap[ nodeName ] = display;
13683
13684	return display;
13685}
13686
13687function showHide( elements, show ) {
13688	var display, elem,
13689		values = [],
13690		index = 0,
13691		length = elements.length;
13692
13693	// Determine new display value for elements that need to change
13694	for ( ; index < length; index++ ) {
13695		elem = elements[ index ];
13696		if ( !elem.style ) {
13697			continue;
13698		}
13699
13700		display = elem.style.display;
13701		if ( show ) {
13702
13703			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
13704			// check is required in this first loop unless we have a nonempty display value (either
13705			// inline or about-to-be-restored)
13706			if ( display === "none" ) {
13707				values[ index ] = dataPriv.get( elem, "display" ) || null;
13708				if ( !values[ index ] ) {
13709					elem.style.display = "";
13710				}
13711			}
13712			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
13713				values[ index ] = getDefaultDisplay( elem );
13714			}
13715		} else {
13716			if ( display !== "none" ) {
13717				values[ index ] = "none";
13718
13719				// Remember what we're overwriting
13720				dataPriv.set( elem, "display", display );
13721			}
13722		}
13723	}
13724
13725	// Set the display of the elements in a second loop to avoid constant reflow
13726	for ( index = 0; index < length; index++ ) {
13727		if ( values[ index ] != null ) {
13728			elements[ index ].style.display = values[ index ];
13729		}
13730	}
13731
13732	return elements;
13733}
13734
13735jQuery.fn.extend( {
13736	show: function() {
13737		return showHide( this, true );
13738	},
13739	hide: function() {
13740		return showHide( this );
13741	},
13742	toggle: function( state ) {
13743		if ( typeof state === "boolean" ) {
13744			return state ? this.show() : this.hide();
13745		}
13746
13747		return this.each( function() {
13748			if ( isHiddenWithinTree( this ) ) {
13749				jQuery( this ).show();
13750			} else {
13751				jQuery( this ).hide();
13752			}
13753		} );
13754	}
13755} );
13756var rcheckableType = ( /^(?:checkbox|radio)$/i );
13757
13758var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
13759
13760var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
13761
13762
13763
13764( function() {
13765	var fragment = document.createDocumentFragment(),
13766		div = fragment.appendChild( document.createElement( "div" ) ),
13767		input = document.createElement( "input" );
13768
13769	// Support: Android 4.0 - 4.3 only
13770	// Check state lost if the name is set (trac-11217)
13771	// Support: Windows Web Apps (WWA)
13772	// `name` and `type` must use .setAttribute for WWA (trac-14901)
13773	input.setAttribute( "type", "radio" );
13774	input.setAttribute( "checked", "checked" );
13775	input.setAttribute( "name", "t" );
13776
13777	div.appendChild( input );
13778
13779	// Support: Android <=4.1 only
13780	// Older WebKit doesn't clone checked state correctly in fragments
13781	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
13782
13783	// Support: IE <=11 only
13784	// Make sure textarea (and checkbox) defaultValue is properly cloned
13785	div.innerHTML = "<textarea>x</textarea>";
13786	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
13787
13788	// Support: IE <=9 only
13789	// IE <=9 replaces <option> tags with their contents when inserted outside of
13790	// the select element.
13791	div.innerHTML = "<option></option>";
13792	support.option = !!div.lastChild;
13793} )();
13794
13795
13796// We have to close these tags to support XHTML (trac-13200)
13797var wrapMap = {
13798
13799	// XHTML parsers do not magically insert elements in the
13800	// same way that tag soup parsers do. So we cannot shorten
13801	// this by omitting <tbody> or other required elements.
13802	thead: [ 1, "<table>", "</table>" ],
13803	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
13804	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
13805	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
13806
13807	_default: [ 0, "", "" ]
13808};
13809
13810wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
13811wrapMap.th = wrapMap.td;
13812
13813// Support: IE <=9 only
13814if ( !support.option ) {
13815	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
13816}
13817
13818
13819function getAll( context, tag ) {
13820
13821	// Support: IE <=9 - 11 only
13822	// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
13823	var ret;
13824
13825	if ( typeof context.getElementsByTagName !== "undefined" ) {
13826		ret = context.getElementsByTagName( tag || "*" );
13827
13828	} else if ( typeof context.querySelectorAll !== "undefined" ) {
13829		ret = context.querySelectorAll( tag || "*" );
13830
13831	} else {
13832		ret = [];
13833	}
13834
13835	if ( tag === undefined || tag && nodeName( context, tag ) ) {
13836		return jQuery.merge( [ context ], ret );
13837	}
13838
13839	return ret;
13840}
13841
13842
13843// Mark scripts as having already been evaluated
13844function setGlobalEval( elems, refElements ) {
13845	var i = 0,
13846		l = elems.length;
13847
13848	for ( ; i < l; i++ ) {
13849		dataPriv.set(
13850			elems[ i ],
13851			"globalEval",
13852			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
13853		);
13854	}
13855}
13856
13857
13858var rhtml = /<|&#?\w+;/;
13859
13860function buildFragment( elems, context, scripts, selection, ignored ) {
13861	var elem, tmp, tag, wrap, attached, j,
13862		fragment = context.createDocumentFragment(),
13863		nodes = [],
13864		i = 0,
13865		l = elems.length;
13866
13867	for ( ; i < l; i++ ) {
13868		elem = elems[ i ];
13869
13870		if ( elem || elem === 0 ) {
13871
13872			// Add nodes directly
13873			if ( toType( elem ) === "object" ) {
13874
13875				// Support: Android <=4.0 only, PhantomJS 1 only
13876				// push.apply(_, arraylike) throws on ancient WebKit
13877				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
13878
13879			// Convert non-html into a text node
13880			} else if ( !rhtml.test( elem ) ) {
13881				nodes.push( context.createTextNode( elem ) );
13882
13883			// Convert html into DOM nodes
13884			} else {
13885				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
13886
13887				// Deserialize a standard representation
13888				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
13889				wrap = wrapMap[ tag ] || wrapMap._default;
13890				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
13891
13892				// Descend through wrappers to the right content
13893				j = wrap[ 0 ];
13894				while ( j-- ) {
13895					tmp = tmp.lastChild;
13896				}
13897
13898				// Support: Android <=4.0 only, PhantomJS 1 only
13899				// push.apply(_, arraylike) throws on ancient WebKit
13900				jQuery.merge( nodes, tmp.childNodes );
13901
13902				// Remember the top-level container
13903				tmp = fragment.firstChild;
13904
13905				// Ensure the created nodes are orphaned (trac-12392)
13906				tmp.textContent = "";
13907			}
13908		}
13909	}
13910
13911	// Remove wrapper from fragment
13912	fragment.textContent = "";
13913
13914	i = 0;
13915	while ( ( elem = nodes[ i++ ] ) ) {
13916
13917		// Skip elements already in the context collection (trac-4087)
13918		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
13919			if ( ignored ) {
13920				ignored.push( elem );
13921			}
13922			continue;
13923		}
13924
13925		attached = isAttached( elem );
13926
13927		// Append to fragment
13928		tmp = getAll( fragment.appendChild( elem ), "script" );
13929
13930		// Preserve script evaluation history
13931		if ( attached ) {
13932			setGlobalEval( tmp );
13933		}
13934
13935		// Capture executables
13936		if ( scripts ) {
13937			j = 0;
13938			while ( ( elem = tmp[ j++ ] ) ) {
13939				if ( rscriptType.test( elem.type || "" ) ) {
13940					scripts.push( elem );
13941				}
13942			}
13943		}
13944	}
13945
13946	return fragment;
13947}
13948
13949
13950var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
13951
13952function returnTrue() {
13953	return true;
13954}
13955
13956function returnFalse() {
13957	return false;
13958}
13959
13960function on( elem, types, selector, data, fn, one ) {
13961	var origFn, type;
13962
13963	// Types can be a map of types/handlers
13964	if ( typeof types === "object" ) {
13965
13966		// ( types-Object, selector, data )
13967		if ( typeof selector !== "string" ) {
13968
13969			// ( types-Object, data )
13970			data = data || selector;
13971			selector = undefined;
13972		}
13973		for ( type in types ) {
13974			on( elem, type, selector, data, types[ type ], one );
13975		}
13976		return elem;
13977	}
13978
13979	if ( data == null && fn == null ) {
13980
13981		// ( types, fn )
13982		fn = selector;
13983		data = selector = undefined;
13984	} else if ( fn == null ) {
13985		if ( typeof selector === "string" ) {
13986
13987			// ( types, selector, fn )
13988			fn = data;
13989			data = undefined;
13990		} else {
13991
13992			// ( types, data, fn )
13993			fn = data;
13994			data = selector;
13995			selector = undefined;
13996		}
13997	}
13998	if ( fn === false ) {
13999		fn = returnFalse;
14000	} else if ( !fn ) {
14001		return elem;
14002	}
14003
14004	if ( one === 1 ) {
14005		origFn = fn;
14006		fn = function( event ) {
14007
14008			// Can use an empty set, since event contains the info
14009			jQuery().off( event );
14010			return origFn.apply( this, arguments );
14011		};
14012
14013		// Use same guid so caller can remove using origFn
14014		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
14015	}
14016	return elem.each( function() {
14017		jQuery.event.add( this, types, fn, data, selector );
14018	} );
14019}
14020
14021/*
14022 * Helper functions for managing events -- not part of the public interface.
14023 * Props to Dean Edwards' addEvent library for many of the ideas.
14024 */
14025jQuery.event = {
14026
14027	global: {},
14028
14029	add: function( elem, types, handler, data, selector ) {
14030
14031		var handleObjIn, eventHandle, tmp,
14032			events, t, handleObj,
14033			special, handlers, type, namespaces, origType,
14034			elemData = dataPriv.get( elem );
14035
14036		// Only attach events to objects that accept data
14037		if ( !acceptData( elem ) ) {
14038			return;
14039		}
14040
14041		// Caller can pass in an object of custom data in lieu of the handler
14042		if ( handler.handler ) {
14043			handleObjIn = handler;
14044			handler = handleObjIn.handler;
14045			selector = handleObjIn.selector;
14046		}
14047
14048		// Ensure that invalid selectors throw exceptions at attach time
14049		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
14050		if ( selector ) {
14051			jQuery.find.matchesSelector( documentElement, selector );
14052		}
14053
14054		// Make sure that the handler has a unique ID, used to find/remove it later
14055		if ( !handler.guid ) {
14056			handler.guid = jQuery.guid++;
14057		}
14058
14059		// Init the element's event structure and main handler, if this is the first
14060		if ( !( events = elemData.events ) ) {
14061			events = elemData.events = Object.create( null );
14062		}
14063		if ( !( eventHandle = elemData.handle ) ) {
14064			eventHandle = elemData.handle = function( e ) {
14065
14066				// Discard the second event of a jQuery.event.trigger() and
14067				// when an event is called after a page has unloaded
14068				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
14069					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
14070			};
14071		}
14072
14073		// Handle multiple events separated by a space
14074		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
14075		t = types.length;
14076		while ( t-- ) {
14077			tmp = rtypenamespace.exec( types[ t ] ) || [];
14078			type = origType = tmp[ 1 ];
14079			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
14080
14081			// There *must* be a type, no attaching namespace-only handlers
14082			if ( !type ) {
14083				continue;
14084			}
14085
14086			// If event changes its type, use the special event handlers for the changed type
14087			special = jQuery.event.special[ type ] || {};
14088
14089			// If selector defined, determine special event api type, otherwise given type
14090			type = ( selector ? special.delegateType : special.bindType ) || type;
14091
14092			// Update special based on newly reset type
14093			special = jQuery.event.special[ type ] || {};
14094
14095			// handleObj is passed to all event handlers
14096			handleObj = jQuery.extend( {
14097				type: type,
14098				origType: origType,
14099				data: data,
14100				handler: handler,
14101				guid: handler.guid,
14102				selector: selector,
14103				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
14104				namespace: namespaces.join( "." )
14105			}, handleObjIn );
14106
14107			// Init the event handler queue if we're the first
14108			if ( !( handlers = events[ type ] ) ) {
14109				handlers = events[ type ] = [];
14110				handlers.delegateCount = 0;
14111
14112				// Only use addEventListener if the special events handler returns false
14113				if ( !special.setup ||
14114					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
14115
14116					if ( elem.addEventListener ) {
14117						elem.addEventListener( type, eventHandle );
14118					}
14119				}
14120			}
14121
14122			if ( special.add ) {
14123				special.add.call( elem, handleObj );
14124
14125				if ( !handleObj.handler.guid ) {
14126					handleObj.handler.guid = handler.guid;
14127				}
14128			}
14129
14130			// Add to the element's handler list, delegates in front
14131			if ( selector ) {
14132				handlers.splice( handlers.delegateCount++, 0, handleObj );
14133			} else {
14134				handlers.push( handleObj );
14135			}
14136
14137			// Keep track of which events have ever been used, for event optimization
14138			jQuery.event.global[ type ] = true;
14139		}
14140
14141	},
14142
14143	// Detach an event or set of events from an element
14144	remove: function( elem, types, handler, selector, mappedTypes ) {
14145
14146		var j, origCount, tmp,
14147			events, t, handleObj,
14148			special, handlers, type, namespaces, origType,
14149			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
14150
14151		if ( !elemData || !( events = elemData.events ) ) {
14152			return;
14153		}
14154
14155		// Once for each type.namespace in types; type may be omitted
14156		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
14157		t = types.length;
14158		while ( t-- ) {
14159			tmp = rtypenamespace.exec( types[ t ] ) || [];
14160			type = origType = tmp[ 1 ];
14161			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
14162
14163			// Unbind all events (on this namespace, if provided) for the element
14164			if ( !type ) {
14165				for ( type in events ) {
14166					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
14167				}
14168				continue;
14169			}
14170
14171			special = jQuery.event.special[ type ] || {};
14172			type = ( selector ? special.delegateType : special.bindType ) || type;
14173			handlers = events[ type ] || [];
14174			tmp = tmp[ 2 ] &&
14175				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
14176
14177			// Remove matching events
14178			origCount = j = handlers.length;
14179			while ( j-- ) {
14180				handleObj = handlers[ j ];
14181
14182				if ( ( mappedTypes || origType === handleObj.origType ) &&
14183					( !handler || handler.guid === handleObj.guid ) &&
14184					( !tmp || tmp.test( handleObj.namespace ) ) &&
14185					( !selector || selector === handleObj.selector ||
14186						selector === "**" && handleObj.selector ) ) {
14187					handlers.splice( j, 1 );
14188
14189					if ( handleObj.selector ) {
14190						handlers.delegateCount--;
14191					}
14192					if ( special.remove ) {
14193						special.remove.call( elem, handleObj );
14194					}
14195				}
14196			}
14197
14198			// Remove generic event handler if we removed something and no more handlers exist
14199			// (avoids potential for endless recursion during removal of special event handlers)
14200			if ( origCount && !handlers.length ) {
14201				if ( !special.teardown ||
14202					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
14203
14204					jQuery.removeEvent( elem, type, elemData.handle );
14205				}
14206
14207				delete events[ type ];
14208			}
14209		}
14210
14211		// Remove data and the expando if it's no longer used
14212		if ( jQuery.isEmptyObject( events ) ) {
14213			dataPriv.remove( elem, "handle events" );
14214		}
14215	},
14216
14217	dispatch: function( nativeEvent ) {
14218
14219		var i, j, ret, matched, handleObj, handlerQueue,
14220			args = new Array( arguments.length ),
14221
14222			// Make a writable jQuery.Event from the native event object
14223			event = jQuery.event.fix( nativeEvent ),
14224
14225			handlers = (
14226				dataPriv.get( this, "events" ) || Object.create( null )
14227			)[ event.type ] || [],
14228			special = jQuery.event.special[ event.type ] || {};
14229
14230		// Use the fix-ed jQuery.Event rather than the (read-only) native event
14231		args[ 0 ] = event;
14232
14233		for ( i = 1; i < arguments.length; i++ ) {
14234			args[ i ] = arguments[ i ];
14235		}
14236
14237		event.delegateTarget = this;
14238
14239		// Call the preDispatch hook for the mapped type, and let it bail if desired
14240		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
14241			return;
14242		}
14243
14244		// Determine handlers
14245		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
14246
14247		// Run delegates first; they may want to stop propagation beneath us
14248		i = 0;
14249		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
14250			event.currentTarget = matched.elem;
14251
14252			j = 0;
14253			while ( ( handleObj = matched.handlers[ j++ ] ) &&
14254				!event.isImmediatePropagationStopped() ) {
14255
14256				// If the event is namespaced, then each handler is only invoked if it is
14257				// specially universal or its namespaces are a superset of the event's.
14258				if ( !event.rnamespace || handleObj.namespace === false ||
14259					event.rnamespace.test( handleObj.namespace ) ) {
14260
14261					event.handleObj = handleObj;
14262					event.data = handleObj.data;
14263
14264					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
14265						handleObj.handler ).apply( matched.elem, args );
14266
14267					if ( ret !== undefined ) {
14268						if ( ( event.result = ret ) === false ) {
14269							event.preventDefault();
14270							event.stopPropagation();
14271						}
14272					}
14273				}
14274			}
14275		}
14276
14277		// Call the postDispatch hook for the mapped type
14278		if ( special.postDispatch ) {
14279			special.postDispatch.call( this, event );
14280		}
14281
14282		return event.result;
14283	},
14284
14285	handlers: function( event, handlers ) {
14286		var i, handleObj, sel, matchedHandlers, matchedSelectors,
14287			handlerQueue = [],
14288			delegateCount = handlers.delegateCount,
14289			cur = event.target;
14290
14291		// Find delegate handlers
14292		if ( delegateCount &&
14293
14294			// Support: IE <=9
14295			// Black-hole SVG <use> instance trees (trac-13180)
14296			cur.nodeType &&
14297
14298			// Support: Firefox <=42
14299			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
14300			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
14301			// Support: IE 11 only
14302			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
14303			!( event.type === "click" && event.button >= 1 ) ) {
14304
14305			for ( ; cur !== this; cur = cur.parentNode || this ) {
14306
14307				// Don't check non-elements (trac-13208)
14308				// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
14309				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
14310					matchedHandlers = [];
14311					matchedSelectors = {};
14312					for ( i = 0; i < delegateCount; i++ ) {
14313						handleObj = handlers[ i ];
14314
14315						// Don't conflict with Object.prototype properties (trac-13203)
14316						sel = handleObj.selector + " ";
14317
14318						if ( matchedSelectors[ sel ] === undefined ) {
14319							matchedSelectors[ sel ] = handleObj.needsContext ?
14320								jQuery( sel, this ).index( cur ) > -1 :
14321								jQuery.find( sel, this, null, [ cur ] ).length;
14322						}
14323						if ( matchedSelectors[ sel ] ) {
14324							matchedHandlers.push( handleObj );
14325						}
14326					}
14327					if ( matchedHandlers.length ) {
14328						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
14329					}
14330				}
14331			}
14332		}
14333
14334		// Add the remaining (directly-bound) handlers
14335		cur = this;
14336		if ( delegateCount < handlers.length ) {
14337			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
14338		}
14339
14340		return handlerQueue;
14341	},
14342
14343	addProp: function( name, hook ) {
14344		Object.defineProperty( jQuery.Event.prototype, name, {
14345			enumerable: true,
14346			configurable: true,
14347
14348			get: isFunction( hook ) ?
14349				function() {
14350					if ( this.originalEvent ) {
14351						return hook( this.originalEvent );
14352					}
14353				} :
14354				function() {
14355					if ( this.originalEvent ) {
14356						return this.originalEvent[ name ];
14357					}
14358				},
14359
14360			set: function( value ) {
14361				Object.defineProperty( this, name, {
14362					enumerable: true,
14363					configurable: true,
14364					writable: true,
14365					value: value
14366				} );
14367			}
14368		} );
14369	},
14370
14371	fix: function( originalEvent ) {
14372		return originalEvent[ jQuery.expando ] ?
14373			originalEvent :
14374			new jQuery.Event( originalEvent );
14375	},
14376
14377	special: {
14378		load: {
14379
14380			// Prevent triggered image.load events from bubbling to window.load
14381			noBubble: true
14382		},
14383		click: {
14384
14385			// Utilize native event to ensure correct state for checkable inputs
14386			setup: function( data ) {
14387
14388				// For mutual compressibility with _default, replace `this` access with a local var.
14389				// `|| data` is dead code meant only to preserve the variable through minification.
14390				var el = this || data;
14391
14392				// Claim the first handler
14393				if ( rcheckableType.test( el.type ) &&
14394					el.click && nodeName( el, "input" ) ) {
14395
14396					// dataPriv.set( el, "click", ... )
14397					leverageNative( el, "click", true );
14398				}
14399
14400				// Return false to allow normal processing in the caller
14401				return false;
14402			},
14403			trigger: function( data ) {
14404
14405				// For mutual compressibility with _default, replace `this` access with a local var.
14406				// `|| data` is dead code meant only to preserve the variable through minification.
14407				var el = this || data;
14408
14409				// Force setup before triggering a click
14410				if ( rcheckableType.test( el.type ) &&
14411					el.click && nodeName( el, "input" ) ) {
14412
14413					leverageNative( el, "click" );
14414				}
14415
14416				// Return non-false to allow normal event-path propagation
14417				return true;
14418			},
14419
14420			// For cross-browser consistency, suppress native .click() on links
14421			// Also prevent it if we're currently inside a leveraged native-event stack
14422			_default: function( event ) {
14423				var target = event.target;
14424				return rcheckableType.test( target.type ) &&
14425					target.click && nodeName( target, "input" ) &&
14426					dataPriv.get( target, "click" ) ||
14427					nodeName( target, "a" );
14428			}
14429		},
14430
14431		beforeunload: {
14432			postDispatch: function( event ) {
14433
14434				// Support: Firefox 20+
14435				// Firefox doesn't alert if the returnValue field is not set.
14436				if ( event.result !== undefined && event.originalEvent ) {
14437					event.originalEvent.returnValue = event.result;
14438				}
14439			}
14440		}
14441	}
14442};
14443
14444// Ensure the presence of an event listener that handles manually-triggered
14445// synthetic events by interrupting progress until reinvoked in response to
14446// *native* events that it fires directly, ensuring that state changes have
14447// already occurred before other listeners are invoked.
14448function leverageNative( el, type, isSetup ) {
14449
14450	// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add
14451	if ( !isSetup ) {
14452		if ( dataPriv.get( el, type ) === undefined ) {
14453			jQuery.event.add( el, type, returnTrue );
14454		}
14455		return;
14456	}
14457
14458	// Register the controller as a special universal handler for all event namespaces
14459	dataPriv.set( el, type, false );
14460	jQuery.event.add( el, type, {
14461		namespace: false,
14462		handler: function( event ) {
14463			var result,
14464				saved = dataPriv.get( this, type );
14465
14466			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
14467
14468				// Interrupt processing of the outer synthetic .trigger()ed event
14469				if ( !saved ) {
14470
14471					// Store arguments for use when handling the inner native event
14472					// There will always be at least one argument (an event object), so this array
14473					// will not be confused with a leftover capture object.
14474					saved = slice.call( arguments );
14475					dataPriv.set( this, type, saved );
14476
14477					// Trigger the native event and capture its result
14478					this[ type ]();
14479					result = dataPriv.get( this, type );
14480					dataPriv.set( this, type, false );
14481
14482					if ( saved !== result ) {
14483
14484						// Cancel the outer synthetic event
14485						event.stopImmediatePropagation();
14486						event.preventDefault();
14487
14488						return result;
14489					}
14490
14491				// If this is an inner synthetic event for an event with a bubbling surrogate
14492				// (focus or blur), assume that the surrogate already propagated from triggering
14493				// the native event and prevent that from happening again here.
14494				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
14495				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
14496				// less bad than duplication.
14497				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
14498					event.stopPropagation();
14499				}
14500
14501			// If this is a native event triggered above, everything is now in order
14502			// Fire an inner synthetic event with the original arguments
14503			} else if ( saved ) {
14504
14505				// ...and capture the result
14506				dataPriv.set( this, type, jQuery.event.trigger(
14507					saved[ 0 ],
14508					saved.slice( 1 ),
14509					this
14510				) );
14511
14512				// Abort handling of the native event by all jQuery handlers while allowing
14513				// native handlers on the same element to run. On target, this is achieved
14514				// by stopping immediate propagation just on the jQuery event. However,
14515				// the native event is re-wrapped by a jQuery one on each level of the
14516				// propagation so the only way to stop it for jQuery is to stop it for
14517				// everyone via native `stopPropagation()`. This is not a problem for
14518				// focus/blur which don't bubble, but it does also stop click on checkboxes
14519				// and radios. We accept this limitation.
14520				event.stopPropagation();
14521				event.isImmediatePropagationStopped = returnTrue;
14522			}
14523		}
14524	} );
14525}
14526
14527jQuery.removeEvent = function( elem, type, handle ) {
14528
14529	// This "if" is needed for plain objects
14530	if ( elem.removeEventListener ) {
14531		elem.removeEventListener( type, handle );
14532	}
14533};
14534
14535jQuery.Event = function( src, props ) {
14536
14537	// Allow instantiation without the 'new' keyword
14538	if ( !( this instanceof jQuery.Event ) ) {
14539		return new jQuery.Event( src, props );
14540	}
14541
14542	// Event object
14543	if ( src && src.type ) {
14544		this.originalEvent = src;
14545		this.type = src.type;
14546
14547		// Events bubbling up the document may have been marked as prevented
14548		// by a handler lower down the tree; reflect the correct value.
14549		this.isDefaultPrevented = src.defaultPrevented ||
14550				src.defaultPrevented === undefined &&
14551
14552				// Support: Android <=2.3 only
14553				src.returnValue === false ?
14554			returnTrue :
14555			returnFalse;
14556
14557		// Create target properties
14558		// Support: Safari <=6 - 7 only
14559		// Target should not be a text node (trac-504, trac-13143)
14560		this.target = ( src.target && src.target.nodeType === 3 ) ?
14561			src.target.parentNode :
14562			src.target;
14563
14564		this.currentTarget = src.currentTarget;
14565		this.relatedTarget = src.relatedTarget;
14566
14567	// Event type
14568	} else {
14569		this.type = src;
14570	}
14571
14572	// Put explicitly provided properties onto the event object
14573	if ( props ) {
14574		jQuery.extend( this, props );
14575	}
14576
14577	// Create a timestamp if incoming event doesn't have one
14578	this.timeStamp = src && src.timeStamp || Date.now();
14579
14580	// Mark it as fixed
14581	this[ jQuery.expando ] = true;
14582};
14583
14584// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
14585// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
14586jQuery.Event.prototype = {
14587	constructor: jQuery.Event,
14588	isDefaultPrevented: returnFalse,
14589	isPropagationStopped: returnFalse,
14590	isImmediatePropagationStopped: returnFalse,
14591	isSimulated: false,
14592
14593	preventDefault: function() {
14594		var e = this.originalEvent;
14595
14596		this.isDefaultPrevented = returnTrue;
14597
14598		if ( e && !this.isSimulated ) {
14599			e.preventDefault();
14600		}
14601	},
14602	stopPropagation: function() {
14603		var e = this.originalEvent;
14604
14605		this.isPropagationStopped = returnTrue;
14606
14607		if ( e && !this.isSimulated ) {
14608			e.stopPropagation();
14609		}
14610	},
14611	stopImmediatePropagation: function() {
14612		var e = this.originalEvent;
14613
14614		this.isImmediatePropagationStopped = returnTrue;
14615
14616		if ( e && !this.isSimulated ) {
14617			e.stopImmediatePropagation();
14618		}
14619
14620		this.stopPropagation();
14621	}
14622};
14623
14624// Includes all common event props including KeyEvent and MouseEvent specific props
14625jQuery.each( {
14626	altKey: true,
14627	bubbles: true,
14628	cancelable: true,
14629	changedTouches: true,
14630	ctrlKey: true,
14631	detail: true,
14632	eventPhase: true,
14633	metaKey: true,
14634	pageX: true,
14635	pageY: true,
14636	shiftKey: true,
14637	view: true,
14638	"char": true,
14639	code: true,
14640	charCode: true,
14641	key: true,
14642	keyCode: true,
14643	button: true,
14644	buttons: true,
14645	clientX: true,
14646	clientY: true,
14647	offsetX: true,
14648	offsetY: true,
14649	pointerId: true,
14650	pointerType: true,
14651	screenX: true,
14652	screenY: true,
14653	targetTouches: true,
14654	toElement: true,
14655	touches: true,
14656	which: true
14657}, jQuery.event.addProp );
14658
14659jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
14660
14661	function focusMappedHandler( nativeEvent ) {
14662		if ( document.documentMode ) {
14663
14664			// Support: IE 11+
14665			// Attach a single focusin/focusout handler on the document while someone wants
14666			// focus/blur. This is because the former are synchronous in IE while the latter
14667			// are async. In other browsers, all those handlers are invoked synchronously.
14668
14669			// `handle` from private data would already wrap the event, but we need
14670			// to change the `type` here.
14671			var handle = dataPriv.get( this, "handle" ),
14672				event = jQuery.event.fix( nativeEvent );
14673			event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
14674			event.isSimulated = true;
14675
14676			// First, handle focusin/focusout
14677			handle( nativeEvent );
14678
14679			// ...then, handle focus/blur
14680			//
14681			// focus/blur don't bubble while focusin/focusout do; simulate the former by only
14682			// invoking the handler at the lower level.
14683			if ( event.target === event.currentTarget ) {
14684
14685				// The setup part calls `leverageNative`, which, in turn, calls
14686				// `jQuery.event.add`, so event handle will already have been set
14687				// by this point.
14688				handle( event );
14689			}
14690		} else {
14691
14692			// For non-IE browsers, attach a single capturing handler on the document
14693			// while someone wants focusin/focusout.
14694			jQuery.event.simulate( delegateType, nativeEvent.target,
14695				jQuery.event.fix( nativeEvent ) );
14696		}
14697	}
14698
14699	jQuery.event.special[ type ] = {
14700
14701		// Utilize native event if possible so blur/focus sequence is correct
14702		setup: function() {
14703
14704			var attaches;
14705
14706			// Claim the first handler
14707			// dataPriv.set( this, "focus", ... )
14708			// dataPriv.set( this, "blur", ... )
14709			leverageNative( this, type, true );
14710
14711			if ( document.documentMode ) {
14712
14713				// Support: IE 9 - 11+
14714				// We use the same native handler for focusin & focus (and focusout & blur)
14715				// so we need to coordinate setup & teardown parts between those events.
14716				// Use `delegateType` as the key as `type` is already used by `leverageNative`.
14717				attaches = dataPriv.get( this, delegateType );
14718				if ( !attaches ) {
14719					this.addEventListener( delegateType, focusMappedHandler );
14720				}
14721				dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );
14722			} else {
14723
14724				// Return false to allow normal processing in the caller
14725				return false;
14726			}
14727		},
14728		trigger: function() {
14729
14730			// Force setup before trigger
14731			leverageNative( this, type );
14732
14733			// Return non-false to allow normal event-path propagation
14734			return true;
14735		},
14736
14737		teardown: function() {
14738			var attaches;
14739
14740			if ( document.documentMode ) {
14741				attaches = dataPriv.get( this, delegateType ) - 1;
14742				if ( !attaches ) {
14743					this.removeEventListener( delegateType, focusMappedHandler );
14744					dataPriv.remove( this, delegateType );
14745				} else {
14746					dataPriv.set( this, delegateType, attaches );
14747				}
14748			} else {
14749
14750				// Return false to indicate standard teardown should be applied
14751				return false;
14752			}
14753		},
14754
14755		// Suppress native focus or blur if we're currently inside
14756		// a leveraged native-event stack
14757		_default: function( event ) {
14758			return dataPriv.get( event.target, type );
14759		},
14760
14761		delegateType: delegateType
14762	};
14763
14764	// Support: Firefox <=44
14765	// Firefox doesn't have focus(in | out) events
14766	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
14767	//
14768	// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
14769	// focus(in | out) events fire after focus & blur events,
14770	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
14771	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
14772	//
14773	// Support: IE 9 - 11+
14774	// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,
14775	// attach a single handler for both events in IE.
14776	jQuery.event.special[ delegateType ] = {
14777		setup: function() {
14778
14779			// Handle: regular nodes (via `this.ownerDocument`), window
14780			// (via `this.document`) & document (via `this`).
14781			var doc = this.ownerDocument || this.document || this,
14782				dataHolder = document.documentMode ? this : doc,
14783				attaches = dataPriv.get( dataHolder, delegateType );
14784
14785			// Support: IE 9 - 11+
14786			// We use the same native handler for focusin & focus (and focusout & blur)
14787			// so we need to coordinate setup & teardown parts between those events.
14788			// Use `delegateType` as the key as `type` is already used by `leverageNative`.
14789			if ( !attaches ) {
14790				if ( document.documentMode ) {
14791					this.addEventListener( delegateType, focusMappedHandler );
14792				} else {
14793					doc.addEventListener( type, focusMappedHandler, true );
14794				}
14795			}
14796			dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );
14797		},
14798		teardown: function() {
14799			var doc = this.ownerDocument || this.document || this,
14800				dataHolder = document.documentMode ? this : doc,
14801				attaches = dataPriv.get( dataHolder, delegateType ) - 1;
14802
14803			if ( !attaches ) {
14804				if ( document.documentMode ) {
14805					this.removeEventListener( delegateType, focusMappedHandler );
14806				} else {
14807					doc.removeEventListener( type, focusMappedHandler, true );
14808				}
14809				dataPriv.remove( dataHolder, delegateType );
14810			} else {
14811				dataPriv.set( dataHolder, delegateType, attaches );
14812			}
14813		}
14814	};
14815} );
14816
14817// Create mouseenter/leave events using mouseover/out and event-time checks
14818// so that event delegation works in jQuery.
14819// Do the same for pointerenter/pointerleave and pointerover/pointerout
14820//
14821// Support: Safari 7 only
14822// Safari sends mouseenter too often; see:
14823// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
14824// for the description of the bug (it existed in older Chrome versions as well).
14825jQuery.each( {
14826	mouseenter: "mouseover",
14827	mouseleave: "mouseout",
14828	pointerenter: "pointerover",
14829	pointerleave: "pointerout"
14830}, function( orig, fix ) {
14831	jQuery.event.special[ orig ] = {
14832		delegateType: fix,
14833		bindType: fix,
14834
14835		handle: function( event ) {
14836			var ret,
14837				target = this,
14838				related = event.relatedTarget,
14839				handleObj = event.handleObj;
14840
14841			// For mouseenter/leave call the handler if related is outside the target.
14842			// NB: No relatedTarget if the mouse left/entered the browser window
14843			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
14844				event.type = handleObj.origType;
14845				ret = handleObj.handler.apply( this, arguments );
14846				event.type = fix;
14847			}
14848			return ret;
14849		}
14850	};
14851} );
14852
14853jQuery.fn.extend( {
14854
14855	on: function( types, selector, data, fn ) {
14856		return on( this, types, selector, data, fn );
14857	},
14858	one: function( types, selector, data, fn ) {
14859		return on( this, types, selector, data, fn, 1 );
14860	},
14861	off: function( types, selector, fn ) {
14862		var handleObj, type;
14863		if ( types && types.preventDefault && types.handleObj ) {
14864
14865			// ( event )  dispatched jQuery.Event
14866			handleObj = types.handleObj;
14867			jQuery( types.delegateTarget ).off(
14868				handleObj.namespace ?
14869					handleObj.origType + "." + handleObj.namespace :
14870					handleObj.origType,
14871				handleObj.selector,
14872				handleObj.handler
14873			);
14874			return this;
14875		}
14876		if ( typeof types === "object" ) {
14877
14878			// ( types-object [, selector] )
14879			for ( type in types ) {
14880				this.off( type, selector, types[ type ] );
14881			}
14882			return this;
14883		}
14884		if ( selector === false || typeof selector === "function" ) {
14885
14886			// ( types [, fn] )
14887			fn = selector;
14888			selector = undefined;
14889		}
14890		if ( fn === false ) {
14891			fn = returnFalse;
14892		}
14893		return this.each( function() {
14894			jQuery.event.remove( this, types, fn, selector );
14895		} );
14896	}
14897} );
14898
14899
14900var
14901
14902	// Support: IE <=10 - 11, Edge 12 - 13 only
14903	// In IE/Edge using regex groups here causes severe slowdowns.
14904	// See https://connect.microsoft.com/IE/feedback/details/1736512/
14905	rnoInnerhtml = /<script|<style|<link/i,
14906
14907	// checked="checked" or checked
14908	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
14909
14910	rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
14911
14912// Prefer a tbody over its parent table for containing new rows
14913function manipulationTarget( elem, content ) {
14914	if ( nodeName( elem, "table" ) &&
14915		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
14916
14917		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
14918	}
14919
14920	return elem;
14921}
14922
14923// Replace/restore the type attribute of script elements for safe DOM manipulation
14924function disableScript( elem ) {
14925	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
14926	return elem;
14927}
14928function restoreScript( elem ) {
14929	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
14930		elem.type = elem.type.slice( 5 );
14931	} else {
14932		elem.removeAttribute( "type" );
14933	}
14934
14935	return elem;
14936}
14937
14938function cloneCopyEvent( src, dest ) {
14939	var i, l, type, pdataOld, udataOld, udataCur, events;
14940
14941	if ( dest.nodeType !== 1 ) {
14942		return;
14943	}
14944
14945	// 1. Copy private data: events, handlers, etc.
14946	if ( dataPriv.hasData( src ) ) {
14947		pdataOld = dataPriv.get( src );
14948		events = pdataOld.events;
14949
14950		if ( events ) {
14951			dataPriv.remove( dest, "handle events" );
14952
14953			for ( type in events ) {
14954				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
14955					jQuery.event.add( dest, type, events[ type ][ i ] );
14956				}
14957			}
14958		}
14959	}
14960
14961	// 2. Copy user data
14962	if ( dataUser.hasData( src ) ) {
14963		udataOld = dataUser.access( src );
14964		udataCur = jQuery.extend( {}, udataOld );
14965
14966		dataUser.set( dest, udataCur );
14967	}
14968}
14969
14970// Fix IE bugs, see support tests
14971function fixInput( src, dest ) {
14972	var nodeName = dest.nodeName.toLowerCase();
14973
14974	// Fails to persist the checked state of a cloned checkbox or radio button.
14975	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
14976		dest.checked = src.checked;
14977
14978	// Fails to return the selected option to the default selected state when cloning options
14979	} else if ( nodeName === "input" || nodeName === "textarea" ) {
14980		dest.defaultValue = src.defaultValue;
14981	}
14982}
14983
14984function domManip( collection, args, callback, ignored ) {
14985
14986	// Flatten any nested arrays
14987	args = flat( args );
14988
14989	var fragment, first, scripts, hasScripts, node, doc,
14990		i = 0,
14991		l = collection.length,
14992		iNoClone = l - 1,
14993		value = args[ 0 ],
14994		valueIsFunction = isFunction( value );
14995
14996	// We can't cloneNode fragments that contain checked, in WebKit
14997	if ( valueIsFunction ||
14998			( l > 1 && typeof value === "string" &&
14999				!support.checkClone && rchecked.test( value ) ) ) {
15000		return collection.each( function( index ) {
15001			var self = collection.eq( index );
15002			if ( valueIsFunction ) {
15003				args[ 0 ] = value.call( this, index, self.html() );
15004			}
15005			domManip( self, args, callback, ignored );
15006		} );
15007	}
15008
15009	if ( l ) {
15010		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
15011		first = fragment.firstChild;
15012
15013		if ( fragment.childNodes.length === 1 ) {
15014			fragment = first;
15015		}
15016
15017		// Require either new content or an interest in ignored elements to invoke the callback
15018		if ( first || ignored ) {
15019			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
15020			hasScripts = scripts.length;
15021
15022			// Use the original fragment for the last item
15023			// instead of the first because it can end up
15024			// being emptied incorrectly in certain situations (trac-8070).
15025			for ( ; i < l; i++ ) {
15026				node = fragment;
15027
15028				if ( i !== iNoClone ) {
15029					node = jQuery.clone( node, true, true );
15030
15031					// Keep references to cloned scripts for later restoration
15032					if ( hasScripts ) {
15033
15034						// Support: Android <=4.0 only, PhantomJS 1 only
15035						// push.apply(_, arraylike) throws on ancient WebKit
15036						jQuery.merge( scripts, getAll( node, "script" ) );
15037					}
15038				}
15039
15040				callback.call( collection[ i ], node, i );
15041			}
15042
15043			if ( hasScripts ) {
15044				doc = scripts[ scripts.length - 1 ].ownerDocument;
15045
15046				// Re-enable scripts
15047				jQuery.map( scripts, restoreScript );
15048
15049				// Evaluate executable scripts on first document insertion
15050				for ( i = 0; i < hasScripts; i++ ) {
15051					node = scripts[ i ];
15052					if ( rscriptType.test( node.type || "" ) &&
15053						!dataPriv.access( node, "globalEval" ) &&
15054						jQuery.contains( doc, node ) ) {
15055
15056						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
15057
15058							// Optional AJAX dependency, but won't run scripts if not present
15059							if ( jQuery._evalUrl && !node.noModule ) {
15060								jQuery._evalUrl( node.src, {
15061									nonce: node.nonce || node.getAttribute( "nonce" )
15062								}, doc );
15063							}
15064						} else {
15065
15066							// Unwrap a CDATA section containing script contents. This shouldn't be
15067							// needed as in XML documents they're already not visible when
15068							// inspecting element contents and in HTML documents they have no
15069							// meaning but we're preserving that logic for backwards compatibility.
15070							// This will be removed completely in 4.0. See gh-4904.
15071							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
15072						}
15073					}
15074				}
15075			}
15076		}
15077	}
15078
15079	return collection;
15080}
15081
15082function remove( elem, selector, keepData ) {
15083	var node,
15084		nodes = selector ? jQuery.filter( selector, elem ) : elem,
15085		i = 0;
15086
15087	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
15088		if ( !keepData && node.nodeType === 1 ) {
15089			jQuery.cleanData( getAll( node ) );
15090		}
15091
15092		if ( node.parentNode ) {
15093			if ( keepData && isAttached( node ) ) {
15094				setGlobalEval( getAll( node, "script" ) );
15095			}
15096			node.parentNode.removeChild( node );
15097		}
15098	}
15099
15100	return elem;
15101}
15102
15103jQuery.extend( {
15104	htmlPrefilter: function( html ) {
15105		return html;
15106	},
15107
15108	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
15109		var i, l, srcElements, destElements,
15110			clone = elem.cloneNode( true ),
15111			inPage = isAttached( elem );
15112
15113		// Fix IE cloning issues
15114		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
15115				!jQuery.isXMLDoc( elem ) ) {
15116
15117			// We eschew jQuery#find here for performance reasons:
15118			// https://jsperf.com/getall-vs-sizzle/2
15119			destElements = getAll( clone );
15120			srcElements = getAll( elem );
15121
15122			for ( i = 0, l = srcElements.length; i < l; i++ ) {
15123				fixInput( srcElements[ i ], destElements[ i ] );
15124			}
15125		}
15126
15127		// Copy the events from the original to the clone
15128		if ( dataAndEvents ) {
15129			if ( deepDataAndEvents ) {
15130				srcElements = srcElements || getAll( elem );
15131				destElements = destElements || getAll( clone );
15132
15133				for ( i = 0, l = srcElements.length; i < l; i++ ) {
15134					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
15135				}
15136			} else {
15137				cloneCopyEvent( elem, clone );
15138			}
15139		}
15140
15141		// Preserve script evaluation history
15142		destElements = getAll( clone, "script" );
15143		if ( destElements.length > 0 ) {
15144			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
15145		}
15146
15147		// Return the cloned set
15148		return clone;
15149	},
15150
15151	cleanData: function( elems ) {
15152		var data, elem, type,
15153			special = jQuery.event.special,
15154			i = 0;
15155
15156		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
15157			if ( acceptData( elem ) ) {
15158				if ( ( data = elem[ dataPriv.expando ] ) ) {
15159					if ( data.events ) {
15160						for ( type in data.events ) {
15161							if ( special[ type ] ) {
15162								jQuery.event.remove( elem, type );
15163
15164							// This is a shortcut to avoid jQuery.event.remove's overhead
15165							} else {
15166								jQuery.removeEvent( elem, type, data.handle );
15167							}
15168						}
15169					}
15170
15171					// Support: Chrome <=35 - 45+
15172					// Assign undefined instead of using delete, see Data#remove
15173					elem[ dataPriv.expando ] = undefined;
15174				}
15175				if ( elem[ dataUser.expando ] ) {
15176
15177					// Support: Chrome <=35 - 45+
15178					// Assign undefined instead of using delete, see Data#remove
15179					elem[ dataUser.expando ] = undefined;
15180				}
15181			}
15182		}
15183	}
15184} );
15185
15186jQuery.fn.extend( {
15187	detach: function( selector ) {
15188		return remove( this, selector, true );
15189	},
15190
15191	remove: function( selector ) {
15192		return remove( this, selector );
15193	},
15194
15195	text: function( value ) {
15196		return access( this, function( value ) {
15197			return value === undefined ?
15198				jQuery.text( this ) :
15199				this.empty().each( function() {
15200					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
15201						this.textContent = value;
15202					}
15203				} );
15204		}, null, value, arguments.length );
15205	},
15206
15207	append: function() {
15208		return domManip( this, arguments, function( elem ) {
15209			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
15210				var target = manipulationTarget( this, elem );
15211				target.appendChild( elem );
15212			}
15213		} );
15214	},
15215
15216	prepend: function() {
15217		return domManip( this, arguments, function( elem ) {
15218			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
15219				var target = manipulationTarget( this, elem );
15220				target.insertBefore( elem, target.firstChild );
15221			}
15222		} );
15223	},
15224
15225	before: function() {
15226		return domManip( this, arguments, function( elem ) {
15227			if ( this.parentNode ) {
15228				this.parentNode.insertBefore( elem, this );
15229			}
15230		} );
15231	},
15232
15233	after: function() {
15234		return domManip( this, arguments, function( elem ) {
15235			if ( this.parentNode ) {
15236				this.parentNode.insertBefore( elem, this.nextSibling );
15237			}
15238		} );
15239	},
15240
15241	empty: function() {
15242		var elem,
15243			i = 0;
15244
15245		for ( ; ( elem = this[ i ] ) != null; i++ ) {
15246			if ( elem.nodeType === 1 ) {
15247
15248				// Prevent memory leaks
15249				jQuery.cleanData( getAll( elem, false ) );
15250
15251				// Remove any remaining nodes
15252				elem.textContent = "";
15253			}
15254		}
15255
15256		return this;
15257	},
15258
15259	clone: function( dataAndEvents, deepDataAndEvents ) {
15260		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
15261		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
15262
15263		return this.map( function() {
15264			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
15265		} );
15266	},
15267
15268	html: function( value ) {
15269		return access( this, function( value ) {
15270			var elem = this[ 0 ] || {},
15271				i = 0,
15272				l = this.length;
15273
15274			if ( value === undefined && elem.nodeType === 1 ) {
15275				return elem.innerHTML;
15276			}
15277
15278			// See if we can take a shortcut and just use innerHTML
15279			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
15280				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
15281
15282				value = jQuery.htmlPrefilter( value );
15283
15284				try {
15285					for ( ; i < l; i++ ) {
15286						elem = this[ i ] || {};
15287
15288						// Remove element nodes and prevent memory leaks
15289						if ( elem.nodeType === 1 ) {
15290							jQuery.cleanData( getAll( elem, false ) );
15291							elem.innerHTML = value;
15292						}
15293					}
15294
15295					elem = 0;
15296
15297				// If using innerHTML throws an exception, use the fallback method
15298				} catch ( e ) {}
15299			}
15300
15301			if ( elem ) {
15302				this.empty().append( value );
15303			}
15304		}, null, value, arguments.length );
15305	},
15306
15307	replaceWith: function() {
15308		var ignored = [];
15309
15310		// Make the changes, replacing each non-ignored context element with the new content
15311		return domManip( this, arguments, function( elem ) {
15312			var parent = this.parentNode;
15313
15314			if ( jQuery.inArray( this, ignored ) < 0 ) {
15315				jQuery.cleanData( getAll( this ) );
15316				if ( parent ) {
15317					parent.replaceChild( elem, this );
15318				}
15319			}
15320
15321		// Force callback invocation
15322		}, ignored );
15323	}
15324} );
15325
15326jQuery.each( {
15327	appendTo: "append",
15328	prependTo: "prepend",
15329	insertBefore: "before",
15330	insertAfter: "after",
15331	replaceAll: "replaceWith"
15332}, function( name, original ) {
15333	jQuery.fn[ name ] = function( selector ) {
15334		var elems,
15335			ret = [],
15336			insert = jQuery( selector ),
15337			last = insert.length - 1,
15338			i = 0;
15339
15340		for ( ; i <= last; i++ ) {
15341			elems = i === last ? this : this.clone( true );
15342			jQuery( insert[ i ] )[ original ]( elems );
15343
15344			// Support: Android <=4.0 only, PhantomJS 1 only
15345			// .get() because push.apply(_, arraylike) throws on ancient WebKit
15346			push.apply( ret, elems.get() );
15347		}
15348
15349		return this.pushStack( ret );
15350	};
15351} );
15352var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
15353
15354var rcustomProp = /^--/;
15355
15356
15357var getStyles = function( elem ) {
15358
15359		// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
15360		// IE throws on elements created in popups
15361		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
15362		var view = elem.ownerDocument.defaultView;
15363
15364		if ( !view || !view.opener ) {
15365			view = window;
15366		}
15367
15368		return view.getComputedStyle( elem );
15369	};
15370
15371var swap = function( elem, options, callback ) {
15372	var ret, name,
15373		old = {};
15374
15375	// Remember the old values, and insert the new ones
15376	for ( name in options ) {
15377		old[ name ] = elem.style[ name ];
15378		elem.style[ name ] = options[ name ];
15379	}
15380
15381	ret = callback.call( elem );
15382
15383	// Revert the old values
15384	for ( name in options ) {
15385		elem.style[ name ] = old[ name ];
15386	}
15387
15388	return ret;
15389};
15390
15391
15392var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
15393
15394
15395
15396( function() {
15397
15398	// Executing both pixelPosition & boxSizingReliable tests require only one layout
15399	// so they're executed at the same time to save the second computation.
15400	function computeStyleTests() {
15401
15402		// This is a singleton, we need to execute it only once
15403		if ( !div ) {
15404			return;
15405		}
15406
15407		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
15408			"margin-top:1px;padding:0;border:0";
15409		div.style.cssText =
15410			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
15411			"margin:auto;border:1px;padding:1px;" +
15412			"width:60%;top:1%";
15413		documentElement.appendChild( container ).appendChild( div );
15414
15415		var divStyle = window.getComputedStyle( div );
15416		pixelPositionVal = divStyle.top !== "1%";
15417
15418		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
15419		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
15420
15421		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
15422		// Some styles come back with percentage values, even though they shouldn't
15423		div.style.right = "60%";
15424		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
15425
15426		// Support: IE 9 - 11 only
15427		// Detect misreporting of content dimensions for box-sizing:border-box elements
15428		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
15429
15430		// Support: IE 9 only
15431		// Detect overflow:scroll screwiness (gh-3699)
15432		// Support: Chrome <=64
15433		// Don't get tricked when zoom affects offsetWidth (gh-4029)
15434		div.style.position = "absolute";
15435		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
15436
15437		documentElement.removeChild( container );
15438
15439		// Nullify the div so it wouldn't be stored in the memory and
15440		// it will also be a sign that checks already performed
15441		div = null;
15442	}
15443
15444	function roundPixelMeasures( measure ) {
15445		return Math.round( parseFloat( measure ) );
15446	}
15447
15448	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
15449		reliableTrDimensionsVal, reliableMarginLeftVal,
15450		container = document.createElement( "div" ),
15451		div = document.createElement( "div" );
15452
15453	// Finish early in limited (non-browser) environments
15454	if ( !div.style ) {
15455		return;
15456	}
15457
15458	// Support: IE <=9 - 11 only
15459	// Style of cloned element affects source element cloned (trac-8908)
15460	div.style.backgroundClip = "content-box";
15461	div.cloneNode( true ).style.backgroundClip = "";
15462	support.clearCloneStyle = div.style.backgroundClip === "content-box";
15463
15464	jQuery.extend( support, {
15465		boxSizingReliable: function() {
15466			computeStyleTests();
15467			return boxSizingReliableVal;
15468		},
15469		pixelBoxStyles: function() {
15470			computeStyleTests();
15471			return pixelBoxStylesVal;
15472		},
15473		pixelPosition: function() {
15474			computeStyleTests();
15475			return pixelPositionVal;
15476		},
15477		reliableMarginLeft: function() {
15478			computeStyleTests();
15479			return reliableMarginLeftVal;
15480		},
15481		scrollboxSize: function() {
15482			computeStyleTests();
15483			return scrollboxSizeVal;
15484		},
15485
15486		// Support: IE 9 - 11+, Edge 15 - 18+
15487		// IE/Edge misreport `getComputedStyle` of table rows with width/height
15488		// set in CSS while `offset*` properties report correct values.
15489		// Behavior in IE 9 is more subtle than in newer versions & it passes
15490		// some versions of this test; make sure not to make it pass there!
15491		//
15492		// Support: Firefox 70+
15493		// Only Firefox includes border widths
15494		// in computed dimensions. (gh-4529)
15495		reliableTrDimensions: function() {
15496			var table, tr, trChild, trStyle;
15497			if ( reliableTrDimensionsVal == null ) {
15498				table = document.createElement( "table" );
15499				tr = document.createElement( "tr" );
15500				trChild = document.createElement( "div" );
15501
15502				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
15503				tr.style.cssText = "box-sizing:content-box;border:1px solid";
15504
15505				// Support: Chrome 86+
15506				// Height set through cssText does not get applied.
15507				// Computed height then comes back as 0.
15508				tr.style.height = "1px";
15509				trChild.style.height = "9px";
15510
15511				// Support: Android 8 Chrome 86+
15512				// In our bodyBackground.html iframe,
15513				// display for all div elements is set to "inline",
15514				// which causes a problem only in Android 8 Chrome 86.
15515				// Ensuring the div is `display: block`
15516				// gets around this issue.
15517				trChild.style.display = "block";
15518
15519				documentElement
15520					.appendChild( table )
15521					.appendChild( tr )
15522					.appendChild( trChild );
15523
15524				trStyle = window.getComputedStyle( tr );
15525				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
15526					parseInt( trStyle.borderTopWidth, 10 ) +
15527					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
15528
15529				documentElement.removeChild( table );
15530			}
15531			return reliableTrDimensionsVal;
15532		}
15533	} );
15534} )();
15535
15536
15537function curCSS( elem, name, computed ) {
15538	var width, minWidth, maxWidth, ret,
15539		isCustomProp = rcustomProp.test( name ),
15540
15541		// Support: Firefox 51+
15542		// Retrieving style before computed somehow
15543		// fixes an issue with getting wrong values
15544		// on detached elements
15545		style = elem.style;
15546
15547	computed = computed || getStyles( elem );
15548
15549	// getPropertyValue is needed for:
15550	//   .css('filter') (IE 9 only, trac-12537)
15551	//   .css('--customProperty) (gh-3144)
15552	if ( computed ) {
15553
15554		// Support: IE <=9 - 11+
15555		// IE only supports `"float"` in `getPropertyValue`; in computed styles
15556		// it's only available as `"cssFloat"`. We no longer modify properties
15557		// sent to `.css()` apart from camelCasing, so we need to check both.
15558		// Normally, this would create difference in behavior: if
15559		// `getPropertyValue` returns an empty string, the value returned
15560		// by `.css()` would be `undefined`. This is usually the case for
15561		// disconnected elements. However, in IE even disconnected elements
15562		// with no styles return `"none"` for `getPropertyValue( "float" )`
15563		ret = computed.getPropertyValue( name ) || computed[ name ];
15564
15565		if ( isCustomProp && ret ) {
15566
15567			// Support: Firefox 105+, Chrome <=105+
15568			// Spec requires trimming whitespace for custom properties (gh-4926).
15569			// Firefox only trims leading whitespace. Chrome just collapses
15570			// both leading & trailing whitespace to a single space.
15571			//
15572			// Fall back to `undefined` if empty string returned.
15573			// This collapses a missing definition with property defined
15574			// and set to an empty string but there's no standard API
15575			// allowing us to differentiate them without a performance penalty
15576			// and returning `undefined` aligns with older jQuery.
15577			//
15578			// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
15579			// as whitespace while CSS does not, but this is not a problem
15580			// because CSS preprocessing replaces them with U+000A LINE FEED
15581			// (which *is* CSS whitespace)
15582			// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
15583			ret = ret.replace( rtrimCSS, "$1" ) || undefined;
15584		}
15585
15586		if ( ret === "" && !isAttached( elem ) ) {
15587			ret = jQuery.style( elem, name );
15588		}
15589
15590		// A tribute to the "awesome hack by Dean Edwards"
15591		// Android Browser returns percentage for some values,
15592		// but width seems to be reliably pixels.
15593		// This is against the CSSOM draft spec:
15594		// https://drafts.csswg.org/cssom/#resolved-values
15595		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
15596
15597			// Remember the original values
15598			width = style.width;
15599			minWidth = style.minWidth;
15600			maxWidth = style.maxWidth;
15601
15602			// Put in the new values to get a computed value out
15603			style.minWidth = style.maxWidth = style.width = ret;
15604			ret = computed.width;
15605
15606			// Revert the changed values
15607			style.width = width;
15608			style.minWidth = minWidth;
15609			style.maxWidth = maxWidth;
15610		}
15611	}
15612
15613	return ret !== undefined ?
15614
15615		// Support: IE <=9 - 11 only
15616		// IE returns zIndex value as an integer.
15617		ret + "" :
15618		ret;
15619}
15620
15621
15622function addGetHookIf( conditionFn, hookFn ) {
15623
15624	// Define the hook, we'll check on the first run if it's really needed.
15625	return {
15626		get: function() {
15627			if ( conditionFn() ) {
15628
15629				// Hook not needed (or it's not possible to use it due
15630				// to missing dependency), remove it.
15631				delete this.get;
15632				return;
15633			}
15634
15635			// Hook needed; redefine it so that the support test is not executed again.
15636			return ( this.get = hookFn ).apply( this, arguments );
15637		}
15638	};
15639}
15640
15641
15642var cssPrefixes = [ "Webkit", "Moz", "ms" ],
15643	emptyStyle = document.createElement( "div" ).style,
15644	vendorProps = {};
15645
15646// Return a vendor-prefixed property or undefined
15647function vendorPropName( name ) {
15648
15649	// Check for vendor prefixed names
15650	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
15651		i = cssPrefixes.length;
15652
15653	while ( i-- ) {
15654		name = cssPrefixes[ i ] + capName;
15655		if ( name in emptyStyle ) {
15656			return name;
15657		}
15658	}
15659}
15660
15661// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
15662function finalPropName( name ) {
15663	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
15664
15665	if ( final ) {
15666		return final;
15667	}
15668	if ( name in emptyStyle ) {
15669		return name;
15670	}
15671	return vendorProps[ name ] = vendorPropName( name ) || name;
15672}
15673
15674
15675var
15676
15677	// Swappable if display is none or starts with table
15678	// except "table", "table-cell", or "table-caption"
15679	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
15680	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
15681	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
15682	cssNormalTransform = {
15683		letterSpacing: "0",
15684		fontWeight: "400"
15685	};
15686
15687function setPositiveNumber( _elem, value, subtract ) {
15688
15689	// Any relative (+/-) values have already been
15690	// normalized at this point
15691	var matches = rcssNum.exec( value );
15692	return matches ?
15693
15694		// Guard against undefined "subtract", e.g., when used as in cssHooks
15695		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
15696		value;
15697}
15698
15699function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
15700	var i = dimension === "width" ? 1 : 0,
15701		extra = 0,
15702		delta = 0,
15703		marginDelta = 0;
15704
15705	// Adjustment may not be necessary
15706	if ( box === ( isBorderBox ? "border" : "content" ) ) {
15707		return 0;
15708	}
15709
15710	for ( ; i < 4; i += 2 ) {
15711
15712		// Both box models exclude margin
15713		// Count margin delta separately to only add it after scroll gutter adjustment.
15714		// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).
15715		if ( box === "margin" ) {
15716			marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
15717		}
15718
15719		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
15720		if ( !isBorderBox ) {
15721
15722			// Add padding
15723			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
15724
15725			// For "border" or "margin", add border
15726			if ( box !== "padding" ) {
15727				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
15728
15729			// But still keep track of it otherwise
15730			} else {
15731				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
15732			}
15733
15734		// If we get here with a border-box (content + padding + border), we're seeking "content" or
15735		// "padding" or "margin"
15736		} else {
15737
15738			// For "content", subtract padding
15739			if ( box === "content" ) {
15740				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
15741			}
15742
15743			// For "content" or "padding", subtract border
15744			if ( box !== "margin" ) {
15745				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
15746			}
15747		}
15748	}
15749
15750	// Account for positive content-box scroll gutter when requested by providing computedVal
15751	if ( !isBorderBox && computedVal >= 0 ) {
15752
15753		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
15754		// Assuming integer scroll gutter, subtract the rest and round down
15755		delta += Math.max( 0, Math.ceil(
15756			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
15757			computedVal -
15758			delta -
15759			extra -
15760			0.5
15761
15762		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
15763		// Use an explicit zero to avoid NaN (gh-3964)
15764		) ) || 0;
15765	}
15766
15767	return delta + marginDelta;
15768}
15769
15770function getWidthOrHeight( elem, dimension, extra ) {
15771
15772	// Start with computed style
15773	var styles = getStyles( elem ),
15774
15775		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
15776		// Fake content-box until we know it's needed to know the true value.
15777		boxSizingNeeded = !support.boxSizingReliable() || extra,
15778		isBorderBox = boxSizingNeeded &&
15779			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
15780		valueIsBorderBox = isBorderBox,
15781
15782		val = curCSS( elem, dimension, styles ),
15783		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
15784
15785	// Support: Firefox <=54
15786	// Return a confounding non-pixel value or feign ignorance, as appropriate.
15787	if ( rnumnonpx.test( val ) ) {
15788		if ( !extra ) {
15789			return val;
15790		}
15791		val = "auto";
15792	}
15793
15794
15795	// Support: IE 9 - 11 only
15796	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
15797	// In those cases, the computed value can be trusted to be border-box.
15798	if ( ( !support.boxSizingReliable() && isBorderBox ||
15799
15800		// Support: IE 10 - 11+, Edge 15 - 18+
15801		// IE/Edge misreport `getComputedStyle` of table rows with width/height
15802		// set in CSS while `offset*` properties report correct values.
15803		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
15804		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
15805
15806		// Fall back to offsetWidth/offsetHeight when value is "auto"
15807		// This happens for inline elements with no explicit setting (gh-3571)
15808		val === "auto" ||
15809
15810		// Support: Android <=4.1 - 4.3 only
15811		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
15812		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
15813
15814		// Make sure the element is visible & connected
15815		elem.getClientRects().length ) {
15816
15817		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
15818
15819		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
15820		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
15821		// retrieved value as a content box dimension.
15822		valueIsBorderBox = offsetProp in elem;
15823		if ( valueIsBorderBox ) {
15824			val = elem[ offsetProp ];
15825		}
15826	}
15827
15828	// Normalize "" and auto
15829	val = parseFloat( val ) || 0;
15830
15831	// Adjust for the element's box model
15832	return ( val +
15833		boxModelAdjustment(
15834			elem,
15835			dimension,
15836			extra || ( isBorderBox ? "border" : "content" ),
15837			valueIsBorderBox,
15838			styles,
15839
15840			// Provide the current computed size to request scroll gutter calculation (gh-3589)
15841			val
15842		)
15843	) + "px";
15844}
15845
15846jQuery.extend( {
15847
15848	// Add in style property hooks for overriding the default
15849	// behavior of getting and setting a style property
15850	cssHooks: {
15851		opacity: {
15852			get: function( elem, computed ) {
15853				if ( computed ) {
15854
15855					// We should always get a number back from opacity
15856					var ret = curCSS( elem, "opacity" );
15857					return ret === "" ? "1" : ret;
15858				}
15859			}
15860		}
15861	},
15862
15863	// Don't automatically add "px" to these possibly-unitless properties
15864	cssNumber: {
15865		animationIterationCount: true,
15866		aspectRatio: true,
15867		borderImageSlice: true,
15868		columnCount: true,
15869		flexGrow: true,
15870		flexShrink: true,
15871		fontWeight: true,
15872		gridArea: true,
15873		gridColumn: true,
15874		gridColumnEnd: true,
15875		gridColumnStart: true,
15876		gridRow: true,
15877		gridRowEnd: true,
15878		gridRowStart: true,
15879		lineHeight: true,
15880		opacity: true,
15881		order: true,
15882		orphans: true,
15883		scale: true,
15884		widows: true,
15885		zIndex: true,
15886		zoom: true,
15887
15888		// SVG-related
15889		fillOpacity: true,
15890		floodOpacity: true,
15891		stopOpacity: true,
15892		strokeMiterlimit: true,
15893		strokeOpacity: true
15894	},
15895
15896	// Add in properties whose names you wish to fix before
15897	// setting or getting the value
15898	cssProps: {},
15899
15900	// Get and set the style property on a DOM Node
15901	style: function( elem, name, value, extra ) {
15902
15903		// Don't set styles on text and comment nodes
15904		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
15905			return;
15906		}
15907
15908		// Make sure that we're working with the right name
15909		var ret, type, hooks,
15910			origName = camelCase( name ),
15911			isCustomProp = rcustomProp.test( name ),
15912			style = elem.style;
15913
15914		// Make sure that we're working with the right name. We don't
15915		// want to query the value if it is a CSS custom property
15916		// since they are user-defined.
15917		if ( !isCustomProp ) {
15918			name = finalPropName( origName );
15919		}
15920
15921		// Gets hook for the prefixed version, then unprefixed version
15922		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
15923
15924		// Check if we're setting a value
15925		if ( value !== undefined ) {
15926			type = typeof value;
15927
15928			// Convert "+=" or "-=" to relative numbers (trac-7345)
15929			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
15930				value = adjustCSS( elem, name, ret );
15931
15932				// Fixes bug trac-9237
15933				type = "number";
15934			}
15935
15936			// Make sure that null and NaN values aren't set (trac-7116)
15937			if ( value == null || value !== value ) {
15938				return;
15939			}
15940
15941			// If a number was passed in, add the unit (except for certain CSS properties)
15942			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
15943			// "px" to a few hardcoded values.
15944			if ( type === "number" && !isCustomProp ) {
15945				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
15946			}
15947
15948			// background-* props affect original clone's values
15949			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
15950				style[ name ] = "inherit";
15951			}
15952
15953			// If a hook was provided, use that value, otherwise just set the specified value
15954			if ( !hooks || !( "set" in hooks ) ||
15955				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
15956
15957				if ( isCustomProp ) {
15958					style.setProperty( name, value );
15959				} else {
15960					style[ name ] = value;
15961				}
15962			}
15963
15964		} else {
15965
15966			// If a hook was provided get the non-computed value from there
15967			if ( hooks && "get" in hooks &&
15968				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
15969
15970				return ret;
15971			}
15972
15973			// Otherwise just get the value from the style object
15974			return style[ name ];
15975		}
15976	},
15977
15978	css: function( elem, name, extra, styles ) {
15979		var val, num, hooks,
15980			origName = camelCase( name ),
15981			isCustomProp = rcustomProp.test( name );
15982
15983		// Make sure that we're working with the right name. We don't
15984		// want to modify the value if it is a CSS custom property
15985		// since they are user-defined.
15986		if ( !isCustomProp ) {
15987			name = finalPropName( origName );
15988		}
15989
15990		// Try prefixed name followed by the unprefixed name
15991		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
15992
15993		// If a hook was provided get the computed value from there
15994		if ( hooks && "get" in hooks ) {
15995			val = hooks.get( elem, true, extra );
15996		}
15997
15998		// Otherwise, if a way to get the computed value exists, use that
15999		if ( val === undefined ) {
16000			val = curCSS( elem, name, styles );
16001		}
16002
16003		// Convert "normal" to computed value
16004		if ( val === "normal" && name in cssNormalTransform ) {
16005			val = cssNormalTransform[ name ];
16006		}
16007
16008		// Make numeric if forced or a qualifier was provided and val looks numeric
16009		if ( extra === "" || extra ) {
16010			num = parseFloat( val );
16011			return extra === true || isFinite( num ) ? num || 0 : val;
16012		}
16013
16014		return val;
16015	}
16016} );
16017
16018jQuery.each( [ "height", "width" ], function( _i, dimension ) {
16019	jQuery.cssHooks[ dimension ] = {
16020		get: function( elem, computed, extra ) {
16021			if ( computed ) {
16022
16023				// Certain elements can have dimension info if we invisibly show them
16024				// but it must have a current display style that would benefit
16025				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
16026
16027					// Support: Safari 8+
16028					// Table columns in Safari have non-zero offsetWidth & zero
16029					// getBoundingClientRect().width unless display is changed.
16030					// Support: IE <=11 only
16031					// Running getBoundingClientRect on a disconnected node
16032					// in IE throws an error.
16033					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
16034					swap( elem, cssShow, function() {
16035						return getWidthOrHeight( elem, dimension, extra );
16036					} ) :
16037					getWidthOrHeight( elem, dimension, extra );
16038			}
16039		},
16040
16041		set: function( elem, value, extra ) {
16042			var matches,
16043				styles = getStyles( elem ),
16044
16045				// Only read styles.position if the test has a chance to fail
16046				// to avoid forcing a reflow.
16047				scrollboxSizeBuggy = !support.scrollboxSize() &&
16048					styles.position === "absolute",
16049
16050				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
16051				boxSizingNeeded = scrollboxSizeBuggy || extra,
16052				isBorderBox = boxSizingNeeded &&
16053					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
16054				subtract = extra ?
16055					boxModelAdjustment(
16056						elem,
16057						dimension,
16058						extra,
16059						isBorderBox,
16060						styles
16061					) :
16062					0;
16063
16064			// Account for unreliable border-box dimensions by comparing offset* to computed and
16065			// faking a content-box to get border and padding (gh-3699)
16066			if ( isBorderBox && scrollboxSizeBuggy ) {
16067				subtract -= Math.ceil(
16068					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
16069					parseFloat( styles[ dimension ] ) -
16070					boxModelAdjustment( elem, dimension, "border", false, styles ) -
16071					0.5
16072				);
16073			}
16074
16075			// Convert to pixels if value adjustment is needed
16076			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
16077				( matches[ 3 ] || "px" ) !== "px" ) {
16078
16079				elem.style[ dimension ] = value;
16080				value = jQuery.css( elem, dimension );
16081			}
16082
16083			return setPositiveNumber( elem, value, subtract );
16084		}
16085	};
16086} );
16087
16088jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
16089	function( elem, computed ) {
16090		if ( computed ) {
16091			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
16092				elem.getBoundingClientRect().left -
16093					swap( elem, { marginLeft: 0 }, function() {
16094						return elem.getBoundingClientRect().left;
16095					} )
16096			) + "px";
16097		}
16098	}
16099);
16100
16101// These hooks are used by animate to expand properties
16102jQuery.each( {
16103	margin: "",
16104	padding: "",
16105	border: "Width"
16106}, function( prefix, suffix ) {
16107	jQuery.cssHooks[ prefix + suffix ] = {
16108		expand: function( value ) {
16109			var i = 0,
16110				expanded = {},
16111
16112				// Assumes a single number if not a string
16113				parts = typeof value === "string" ? value.split( " " ) : [ value ];
16114
16115			for ( ; i < 4; i++ ) {
16116				expanded[ prefix + cssExpand[ i ] + suffix ] =
16117					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
16118			}
16119
16120			return expanded;
16121		}
16122	};
16123
16124	if ( prefix !== "margin" ) {
16125		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
16126	}
16127} );
16128
16129jQuery.fn.extend( {
16130	css: function( name, value ) {
16131		return access( this, function( elem, name, value ) {
16132			var styles, len,
16133				map = {},
16134				i = 0;
16135
16136			if ( Array.isArray( name ) ) {
16137				styles = getStyles( elem );
16138				len = name.length;
16139
16140				for ( ; i < len; i++ ) {
16141					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
16142				}
16143
16144				return map;
16145			}
16146
16147			return value !== undefined ?
16148				jQuery.style( elem, name, value ) :
16149				jQuery.css( elem, name );
16150		}, name, value, arguments.length > 1 );
16151	}
16152} );
16153
16154
16155function Tween( elem, options, prop, end, easing ) {
16156	return new Tween.prototype.init( elem, options, prop, end, easing );
16157}
16158jQuery.Tween = Tween;
16159
16160Tween.prototype = {
16161	constructor: Tween,
16162	init: function( elem, options, prop, end, easing, unit ) {
16163		this.elem = elem;
16164		this.prop = prop;
16165		this.easing = easing || jQuery.easing._default;
16166		this.options = options;
16167		this.start = this.now = this.cur();
16168		this.end = end;
16169		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
16170	},
16171	cur: function() {
16172		var hooks = Tween.propHooks[ this.prop ];
16173
16174		return hooks && hooks.get ?
16175			hooks.get( this ) :
16176			Tween.propHooks._default.get( this );
16177	},
16178	run: function( percent ) {
16179		var eased,
16180			hooks = Tween.propHooks[ this.prop ];
16181
16182		if ( this.options.duration ) {
16183			this.pos = eased = jQuery.easing[ this.easing ](
16184				percent, this.options.duration * percent, 0, 1, this.options.duration
16185			);
16186		} else {
16187			this.pos = eased = percent;
16188		}
16189		this.now = ( this.end - this.start ) * eased + this.start;
16190
16191		if ( this.options.step ) {
16192			this.options.step.call( this.elem, this.now, this );
16193		}
16194
16195		if ( hooks && hooks.set ) {
16196			hooks.set( this );
16197		} else {
16198			Tween.propHooks._default.set( this );
16199		}
16200		return this;
16201	}
16202};
16203
16204Tween.prototype.init.prototype = Tween.prototype;
16205
16206Tween.propHooks = {
16207	_default: {
16208		get: function( tween ) {
16209			var result;
16210
16211			// Use a property on the element directly when it is not a DOM element,
16212			// or when there is no matching style property that exists.
16213			if ( tween.elem.nodeType !== 1 ||
16214				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
16215				return tween.elem[ tween.prop ];
16216			}
16217
16218			// Passing an empty string as a 3rd parameter to .css will automatically
16219			// attempt a parseFloat and fallback to a string if the parse fails.
16220			// Simple values such as "10px" are parsed to Float;
16221			// complex values such as "rotate(1rad)" are returned as-is.
16222			result = jQuery.css( tween.elem, tween.prop, "" );
16223
16224			// Empty strings, null, undefined and "auto" are converted to 0.
16225			return !result || result === "auto" ? 0 : result;
16226		},
16227		set: function( tween ) {
16228
16229			// Use step hook for back compat.
16230			// Use cssHook if its there.
16231			// Use .style if available and use plain properties where available.
16232			if ( jQuery.fx.step[ tween.prop ] ) {
16233				jQuery.fx.step[ tween.prop ]( tween );
16234			} else if ( tween.elem.nodeType === 1 && (
16235				jQuery.cssHooks[ tween.prop ] ||
16236					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
16237				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
16238			} else {
16239				tween.elem[ tween.prop ] = tween.now;
16240			}
16241		}
16242	}
16243};
16244
16245// Support: IE <=9 only
16246// Panic based approach to setting things on disconnected nodes
16247Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
16248	set: function( tween ) {
16249		if ( tween.elem.nodeType && tween.elem.parentNode ) {
16250			tween.elem[ tween.prop ] = tween.now;
16251		}
16252	}
16253};
16254
16255jQuery.easing = {
16256	linear: function( p ) {
16257		return p;
16258	},
16259	swing: function( p ) {
16260		return 0.5 - Math.cos( p * Math.PI ) / 2;
16261	},
16262	_default: "swing"
16263};
16264
16265jQuery.fx = Tween.prototype.init;
16266
16267// Back compat <1.8 extension point
16268jQuery.fx.step = {};
16269
16270
16271
16272
16273var
16274	fxNow, inProgress,
16275	rfxtypes = /^(?:toggle|show|hide)$/,
16276	rrun = /queueHooks$/;
16277
16278function schedule() {
16279	if ( inProgress ) {
16280		if ( document.hidden === false && window.requestAnimationFrame ) {
16281			window.requestAnimationFrame( schedule );
16282		} else {
16283			window.setTimeout( schedule, jQuery.fx.interval );
16284		}
16285
16286		jQuery.fx.tick();
16287	}
16288}
16289
16290// Animations created synchronously will run synchronously
16291function createFxNow() {
16292	window.setTimeout( function() {
16293		fxNow = undefined;
16294	} );
16295	return ( fxNow = Date.now() );
16296}
16297
16298// Generate parameters to create a standard animation
16299function genFx( type, includeWidth ) {
16300	var which,
16301		i = 0,
16302		attrs = { height: type };
16303
16304	// If we include width, step value is 1 to do all cssExpand values,
16305	// otherwise step value is 2 to skip over Left and Right
16306	includeWidth = includeWidth ? 1 : 0;
16307	for ( ; i < 4; i += 2 - includeWidth ) {
16308		which = cssExpand[ i ];
16309		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
16310	}
16311
16312	if ( includeWidth ) {
16313		attrs.opacity = attrs.width = type;
16314	}
16315
16316	return attrs;
16317}
16318
16319function createTween( value, prop, animation ) {
16320	var tween,
16321		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
16322		index = 0,
16323		length = collection.length;
16324	for ( ; index < length; index++ ) {
16325		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
16326
16327			// We're done with this property
16328			return tween;
16329		}
16330	}
16331}
16332
16333function defaultPrefilter( elem, props, opts ) {
16334	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
16335		isBox = "width" in props || "height" in props,
16336		anim = this,
16337		orig = {},
16338		style = elem.style,
16339		hidden = elem.nodeType && isHiddenWithinTree( elem ),
16340		dataShow = dataPriv.get( elem, "fxshow" );
16341
16342	// Queue-skipping animations hijack the fx hooks
16343	if ( !opts.queue ) {
16344		hooks = jQuery._queueHooks( elem, "fx" );
16345		if ( hooks.unqueued == null ) {
16346			hooks.unqueued = 0;
16347			oldfire = hooks.empty.fire;
16348			hooks.empty.fire = function() {
16349				if ( !hooks.unqueued ) {
16350					oldfire();
16351				}
16352			};
16353		}
16354		hooks.unqueued++;
16355
16356		anim.always( function() {
16357
16358			// Ensure the complete handler is called before this completes
16359			anim.always( function() {
16360				hooks.unqueued--;
16361				if ( !jQuery.queue( elem, "fx" ).length ) {
16362					hooks.empty.fire();
16363				}
16364			} );
16365		} );
16366	}
16367
16368	// Detect show/hide animations
16369	for ( prop in props ) {
16370		value = props[ prop ];
16371		if ( rfxtypes.test( value ) ) {
16372			delete props[ prop ];
16373			toggle = toggle || value === "toggle";
16374			if ( value === ( hidden ? "hide" : "show" ) ) {
16375
16376				// Pretend to be hidden if this is a "show" and
16377				// there is still data from a stopped show/hide
16378				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
16379					hidden = true;
16380
16381				// Ignore all other no-op show/hide data
16382				} else {
16383					continue;
16384				}
16385			}
16386			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
16387		}
16388	}
16389
16390	// Bail out if this is a no-op like .hide().hide()
16391	propTween = !jQuery.isEmptyObject( props );
16392	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
16393		return;
16394	}
16395
16396	// Restrict "overflow" and "display" styles during box animations
16397	if ( isBox && elem.nodeType === 1 ) {
16398
16399		// Support: IE <=9 - 11, Edge 12 - 15
16400		// Record all 3 overflow attributes because IE does not infer the shorthand
16401		// from identically-valued overflowX and overflowY and Edge just mirrors
16402		// the overflowX value there.
16403		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
16404
16405		// Identify a display type, preferring old show/hide data over the CSS cascade
16406		restoreDisplay = dataShow && dataShow.display;
16407		if ( restoreDisplay == null ) {
16408			restoreDisplay = dataPriv.get( elem, "display" );
16409		}
16410		display = jQuery.css( elem, "display" );
16411		if ( display === "none" ) {
16412			if ( restoreDisplay ) {
16413				display = restoreDisplay;
16414			} else {
16415
16416				// Get nonempty value(s) by temporarily forcing visibility
16417				showHide( [ elem ], true );
16418				restoreDisplay = elem.style.display || restoreDisplay;
16419				display = jQuery.css( elem, "display" );
16420				showHide( [ elem ] );
16421			}
16422		}
16423
16424		// Animate inline elements as inline-block
16425		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
16426			if ( jQuery.css( elem, "float" ) === "none" ) {
16427
16428				// Restore the original display value at the end of pure show/hide animations
16429				if ( !propTween ) {
16430					anim.done( function() {
16431						style.display = restoreDisplay;
16432					} );
16433					if ( restoreDisplay == null ) {
16434						display = style.display;
16435						restoreDisplay = display === "none" ? "" : display;
16436					}
16437				}
16438				style.display = "inline-block";
16439			}
16440		}
16441	}
16442
16443	if ( opts.overflow ) {
16444		style.overflow = "hidden";
16445		anim.always( function() {
16446			style.overflow = opts.overflow[ 0 ];
16447			style.overflowX = opts.overflow[ 1 ];
16448			style.overflowY = opts.overflow[ 2 ];
16449		} );
16450	}
16451
16452	// Implement show/hide animations
16453	propTween = false;
16454	for ( prop in orig ) {
16455
16456		// General show/hide setup for this element animation
16457		if ( !propTween ) {
16458			if ( dataShow ) {
16459				if ( "hidden" in dataShow ) {
16460					hidden = dataShow.hidden;
16461				}
16462			} else {
16463				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
16464			}
16465
16466			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
16467			if ( toggle ) {
16468				dataShow.hidden = !hidden;
16469			}
16470
16471			// Show elements before animating them
16472			if ( hidden ) {
16473				showHide( [ elem ], true );
16474			}
16475
16476			/* eslint-disable no-loop-func */
16477
16478			anim.done( function() {
16479
16480				/* eslint-enable no-loop-func */
16481
16482				// The final step of a "hide" animation is actually hiding the element
16483				if ( !hidden ) {
16484					showHide( [ elem ] );
16485				}
16486				dataPriv.remove( elem, "fxshow" );
16487				for ( prop in orig ) {
16488					jQuery.style( elem, prop, orig[ prop ] );
16489				}
16490			} );
16491		}
16492
16493		// Per-property setup
16494		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
16495		if ( !( prop in dataShow ) ) {
16496			dataShow[ prop ] = propTween.start;
16497			if ( hidden ) {
16498				propTween.end = propTween.start;
16499				propTween.start = 0;
16500			}
16501		}
16502	}
16503}
16504
16505function propFilter( props, specialEasing ) {
16506	var index, name, easing, value, hooks;
16507
16508	// camelCase, specialEasing and expand cssHook pass
16509	for ( index in props ) {
16510		name = camelCase( index );
16511		easing = specialEasing[ name ];
16512		value = props[ index ];
16513		if ( Array.isArray( value ) ) {
16514			easing = value[ 1 ];
16515			value = props[ index ] = value[ 0 ];
16516		}
16517
16518		if ( index !== name ) {
16519			props[ name ] = value;
16520			delete props[ index ];
16521		}
16522
16523		hooks = jQuery.cssHooks[ name ];
16524		if ( hooks && "expand" in hooks ) {
16525			value = hooks.expand( value );
16526			delete props[ name ];
16527
16528			// Not quite $.extend, this won't overwrite existing keys.
16529			// Reusing 'index' because we have the correct "name"
16530			for ( index in value ) {
16531				if ( !( index in props ) ) {
16532					props[ index ] = value[ index ];
16533					specialEasing[ index ] = easing;
16534				}
16535			}
16536		} else {
16537			specialEasing[ name ] = easing;
16538		}
16539	}
16540}
16541
16542function Animation( elem, properties, options ) {
16543	var result,
16544		stopped,
16545		index = 0,
16546		length = Animation.prefilters.length,
16547		deferred = jQuery.Deferred().always( function() {
16548
16549			// Don't match elem in the :animated selector
16550			delete tick.elem;
16551		} ),
16552		tick = function() {
16553			if ( stopped ) {
16554				return false;
16555			}
16556			var currentTime = fxNow || createFxNow(),
16557				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
16558
16559				// Support: Android 2.3 only
16560				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
16561				temp = remaining / animation.duration || 0,
16562				percent = 1 - temp,
16563				index = 0,
16564				length = animation.tweens.length;
16565
16566			for ( ; index < length; index++ ) {
16567				animation.tweens[ index ].run( percent );
16568			}
16569
16570			deferred.notifyWith( elem, [ animation, percent, remaining ] );
16571
16572			// If there's more to do, yield
16573			if ( percent < 1 && length ) {
16574				return remaining;
16575			}
16576
16577			// If this was an empty animation, synthesize a final progress notification
16578			if ( !length ) {
16579				deferred.notifyWith( elem, [ animation, 1, 0 ] );
16580			}
16581
16582			// Resolve the animation and report its conclusion
16583			deferred.resolveWith( elem, [ animation ] );
16584			return false;
16585		},
16586		animation = deferred.promise( {
16587			elem: elem,
16588			props: jQuery.extend( {}, properties ),
16589			opts: jQuery.extend( true, {
16590				specialEasing: {},
16591				easing: jQuery.easing._default
16592			}, options ),
16593			originalProperties: properties,
16594			originalOptions: options,
16595			startTime: fxNow || createFxNow(),
16596			duration: options.duration,
16597			tweens: [],
16598			createTween: function( prop, end ) {
16599				var tween = jQuery.Tween( elem, animation.opts, prop, end,
16600					animation.opts.specialEasing[ prop ] || animation.opts.easing );
16601				animation.tweens.push( tween );
16602				return tween;
16603			},
16604			stop: function( gotoEnd ) {
16605				var index = 0,
16606
16607					// If we are going to the end, we want to run all the tweens
16608					// otherwise we skip this part
16609					length = gotoEnd ? animation.tweens.length : 0;
16610				if ( stopped ) {
16611					return this;
16612				}
16613				stopped = true;
16614				for ( ; index < length; index++ ) {
16615					animation.tweens[ index ].run( 1 );
16616				}
16617
16618				// Resolve when we played the last frame; otherwise, reject
16619				if ( gotoEnd ) {
16620					deferred.notifyWith( elem, [ animation, 1, 0 ] );
16621					deferred.resolveWith( elem, [ animation, gotoEnd ] );
16622				} else {
16623					deferred.rejectWith( elem, [ animation, gotoEnd ] );
16624				}
16625				return this;
16626			}
16627		} ),
16628		props = animation.props;
16629
16630	propFilter( props, animation.opts.specialEasing );
16631
16632	for ( ; index < length; index++ ) {
16633		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
16634		if ( result ) {
16635			if ( isFunction( result.stop ) ) {
16636				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
16637					result.stop.bind( result );
16638			}
16639			return result;
16640		}
16641	}
16642
16643	jQuery.map( props, createTween, animation );
16644
16645	if ( isFunction( animation.opts.start ) ) {
16646		animation.opts.start.call( elem, animation );
16647	}
16648
16649	// Attach callbacks from options
16650	animation
16651		.progress( animation.opts.progress )
16652		.done( animation.opts.done, animation.opts.complete )
16653		.fail( animation.opts.fail )
16654		.always( animation.opts.always );
16655
16656	jQuery.fx.timer(
16657		jQuery.extend( tick, {
16658			elem: elem,
16659			anim: animation,
16660			queue: animation.opts.queue
16661		} )
16662	);
16663
16664	return animation;
16665}
16666
16667jQuery.Animation = jQuery.extend( Animation, {
16668
16669	tweeners: {
16670		"*": [ function( prop, value ) {
16671			var tween = this.createTween( prop, value );
16672			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
16673			return tween;
16674		} ]
16675	},
16676
16677	tweener: function( props, callback ) {
16678		if ( isFunction( props ) ) {
16679			callback = props;
16680			props = [ "*" ];
16681		} else {
16682			props = props.match( rnothtmlwhite );
16683		}
16684
16685		var prop,
16686			index = 0,
16687			length = props.length;
16688
16689		for ( ; index < length; index++ ) {
16690			prop = props[ index ];
16691			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
16692			Animation.tweeners[ prop ].unshift( callback );
16693		}
16694	},
16695
16696	prefilters: [ defaultPrefilter ],
16697
16698	prefilter: function( callback, prepend ) {
16699		if ( prepend ) {
16700			Animation.prefilters.unshift( callback );
16701		} else {
16702			Animation.prefilters.push( callback );
16703		}
16704	}
16705} );
16706
16707jQuery.speed = function( speed, easing, fn ) {
16708	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
16709		complete: fn || !fn && easing ||
16710			isFunction( speed ) && speed,
16711		duration: speed,
16712		easing: fn && easing || easing && !isFunction( easing ) && easing
16713	};
16714
16715	// Go to the end state if fx are off
16716	if ( jQuery.fx.off ) {
16717		opt.duration = 0;
16718
16719	} else {
16720		if ( typeof opt.duration !== "number" ) {
16721			if ( opt.duration in jQuery.fx.speeds ) {
16722				opt.duration = jQuery.fx.speeds[ opt.duration ];
16723
16724			} else {
16725				opt.duration = jQuery.fx.speeds._default;
16726			}
16727		}
16728	}
16729
16730	// Normalize opt.queue - true/undefined/null -> "fx"
16731	if ( opt.queue == null || opt.queue === true ) {
16732		opt.queue = "fx";
16733	}
16734
16735	// Queueing
16736	opt.old = opt.complete;
16737
16738	opt.complete = function() {
16739		if ( isFunction( opt.old ) ) {
16740			opt.old.call( this );
16741		}
16742
16743		if ( opt.queue ) {
16744			jQuery.dequeue( this, opt.queue );
16745		}
16746	};
16747
16748	return opt;
16749};
16750
16751jQuery.fn.extend( {
16752	fadeTo: function( speed, to, easing, callback ) {
16753
16754		// Show any hidden elements after setting opacity to 0
16755		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
16756
16757			// Animate to the value specified
16758			.end().animate( { opacity: to }, speed, easing, callback );
16759	},
16760	animate: function( prop, speed, easing, callback ) {
16761		var empty = jQuery.isEmptyObject( prop ),
16762			optall = jQuery.speed( speed, easing, callback ),
16763			doAnimation = function() {
16764
16765				// Operate on a copy of prop so per-property easing won't be lost
16766				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
16767
16768				// Empty animations, or finishing resolves immediately
16769				if ( empty || dataPriv.get( this, "finish" ) ) {
16770					anim.stop( true );
16771				}
16772			};
16773
16774		doAnimation.finish = doAnimation;
16775
16776		return empty || optall.queue === false ?
16777			this.each( doAnimation ) :
16778			this.queue( optall.queue, doAnimation );
16779	},
16780	stop: function( type, clearQueue, gotoEnd ) {
16781		var stopQueue = function( hooks ) {
16782			var stop = hooks.stop;
16783			delete hooks.stop;
16784			stop( gotoEnd );
16785		};
16786
16787		if ( typeof type !== "string" ) {
16788			gotoEnd = clearQueue;
16789			clearQueue = type;
16790			type = undefined;
16791		}
16792		if ( clearQueue ) {
16793			this.queue( type || "fx", [] );
16794		}
16795
16796		return this.each( function() {
16797			var dequeue = true,
16798				index = type != null && type + "queueHooks",
16799				timers = jQuery.timers,
16800				data = dataPriv.get( this );
16801
16802			if ( index ) {
16803				if ( data[ index ] && data[ index ].stop ) {
16804					stopQueue( data[ index ] );
16805				}
16806			} else {
16807				for ( index in data ) {
16808					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
16809						stopQueue( data[ index ] );
16810					}
16811				}
16812			}
16813
16814			for ( index = timers.length; index--; ) {
16815				if ( timers[ index ].elem === this &&
16816					( type == null || timers[ index ].queue === type ) ) {
16817
16818					timers[ index ].anim.stop( gotoEnd );
16819					dequeue = false;
16820					timers.splice( index, 1 );
16821				}
16822			}
16823
16824			// Start the next in the queue if the last step wasn't forced.
16825			// Timers currently will call their complete callbacks, which
16826			// will dequeue but only if they were gotoEnd.
16827			if ( dequeue || !gotoEnd ) {
16828				jQuery.dequeue( this, type );
16829			}
16830		} );
16831	},
16832	finish: function( type ) {
16833		if ( type !== false ) {
16834			type = type || "fx";
16835		}
16836		return this.each( function() {
16837			var index,
16838				data = dataPriv.get( this ),
16839				queue = data[ type + "queue" ],
16840				hooks = data[ type + "queueHooks" ],
16841				timers = jQuery.timers,
16842				length = queue ? queue.length : 0;
16843
16844			// Enable finishing flag on private data
16845			data.finish = true;
16846
16847			// Empty the queue first
16848			jQuery.queue( this, type, [] );
16849
16850			if ( hooks && hooks.stop ) {
16851				hooks.stop.call( this, true );
16852			}
16853
16854			// Look for any active animations, and finish them
16855			for ( index = timers.length; index--; ) {
16856				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
16857					timers[ index ].anim.stop( true );
16858					timers.splice( index, 1 );
16859				}
16860			}
16861
16862			// Look for any animations in the old queue and finish them
16863			for ( index = 0; index < length; index++ ) {
16864				if ( queue[ index ] && queue[ index ].finish ) {
16865					queue[ index ].finish.call( this );
16866				}
16867			}
16868
16869			// Turn off finishing flag
16870			delete data.finish;
16871		} );
16872	}
16873} );
16874
16875jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
16876	var cssFn = jQuery.fn[ name ];
16877	jQuery.fn[ name ] = function( speed, easing, callback ) {
16878		return speed == null || typeof speed === "boolean" ?
16879			cssFn.apply( this, arguments ) :
16880			this.animate( genFx( name, true ), speed, easing, callback );
16881	};
16882} );
16883
16884// Generate shortcuts for custom animations
16885jQuery.each( {
16886	slideDown: genFx( "show" ),
16887	slideUp: genFx( "hide" ),
16888	slideToggle: genFx( "toggle" ),
16889	fadeIn: { opacity: "show" },
16890	fadeOut: { opacity: "hide" },
16891	fadeToggle: { opacity: "toggle" }
16892}, function( name, props ) {
16893	jQuery.fn[ name ] = function( speed, easing, callback ) {
16894		return this.animate( props, speed, easing, callback );
16895	};
16896} );
16897
16898jQuery.timers = [];
16899jQuery.fx.tick = function() {
16900	var timer,
16901		i = 0,
16902		timers = jQuery.timers;
16903
16904	fxNow = Date.now();
16905
16906	for ( ; i < timers.length; i++ ) {
16907		timer = timers[ i ];
16908
16909		// Run the timer and safely remove it when done (allowing for external removal)
16910		if ( !timer() && timers[ i ] === timer ) {
16911			timers.splice( i--, 1 );
16912		}
16913	}
16914
16915	if ( !timers.length ) {
16916		jQuery.fx.stop();
16917	}
16918	fxNow = undefined;
16919};
16920
16921jQuery.fx.timer = function( timer ) {
16922	jQuery.timers.push( timer );
16923	jQuery.fx.start();
16924};
16925
16926jQuery.fx.interval = 13;
16927jQuery.fx.start = function() {
16928	if ( inProgress ) {
16929		return;
16930	}
16931
16932	inProgress = true;
16933	schedule();
16934};
16935
16936jQuery.fx.stop = function() {
16937	inProgress = null;
16938};
16939
16940jQuery.fx.speeds = {
16941	slow: 600,
16942	fast: 200,
16943
16944	// Default speed
16945	_default: 400
16946};
16947
16948
16949// Based off of the plugin by Clint Helfers, with permission.
16950jQuery.fn.delay = function( time, type ) {
16951	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
16952	type = type || "fx";
16953
16954	return this.queue( type, function( next, hooks ) {
16955		var timeout = window.setTimeout( next, time );
16956		hooks.stop = function() {
16957			window.clearTimeout( timeout );
16958		};
16959	} );
16960};
16961
16962
16963( function() {
16964	var input = document.createElement( "input" ),
16965		select = document.createElement( "select" ),
16966		opt = select.appendChild( document.createElement( "option" ) );
16967
16968	input.type = "checkbox";
16969
16970	// Support: Android <=4.3 only
16971	// Default value for a checkbox should be "on"
16972	support.checkOn = input.value !== "";
16973
16974	// Support: IE <=11 only
16975	// Must access selectedIndex to make default options select
16976	support.optSelected = opt.selected;
16977
16978	// Support: IE <=11 only
16979	// An input loses its value after becoming a radio
16980	input = document.createElement( "input" );
16981	input.value = "t";
16982	input.type = "radio";
16983	support.radioValue = input.value === "t";
16984} )();
16985
16986
16987var boolHook,
16988	attrHandle = jQuery.expr.attrHandle;
16989
16990jQuery.fn.extend( {
16991	attr: function( name, value ) {
16992		return access( this, jQuery.attr, name, value, arguments.length > 1 );
16993	},
16994
16995	removeAttr: function( name ) {
16996		return this.each( function() {
16997			jQuery.removeAttr( this, name );
16998		} );
16999	}
17000} );
17001
17002jQuery.extend( {
17003	attr: function( elem, name, value ) {
17004		var ret, hooks,
17005			nType = elem.nodeType;
17006
17007		// Don't get/set attributes on text, comment and attribute nodes
17008		if ( nType === 3 || nType === 8 || nType === 2 ) {
17009			return;
17010		}
17011
17012		// Fallback to prop when attributes are not supported
17013		if ( typeof elem.getAttribute === "undefined" ) {
17014			return jQuery.prop( elem, name, value );
17015		}
17016
17017		// Attribute hooks are determined by the lowercase version
17018		// Grab necessary hook if one is defined
17019		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
17020			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
17021				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
17022		}
17023
17024		if ( value !== undefined ) {
17025			if ( value === null ) {
17026				jQuery.removeAttr( elem, name );
17027				return;
17028			}
17029
17030			if ( hooks && "set" in hooks &&
17031				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
17032				return ret;
17033			}
17034
17035			elem.setAttribute( name, value + "" );
17036			return value;
17037		}
17038
17039		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
17040			return ret;
17041		}
17042
17043		ret = jQuery.find.attr( elem, name );
17044
17045		// Non-existent attributes return null, we normalize to undefined
17046		return ret == null ? undefined : ret;
17047	},
17048
17049	attrHooks: {
17050		type: {
17051			set: function( elem, value ) {
17052				if ( !support.radioValue && value === "radio" &&
17053					nodeName( elem, "input" ) ) {
17054					var val = elem.value;
17055					elem.setAttribute( "type", value );
17056					if ( val ) {
17057						elem.value = val;
17058					}
17059					return value;
17060				}
17061			}
17062		}
17063	},
17064
17065	removeAttr: function( elem, value ) {
17066		var name,
17067			i = 0,
17068
17069			// Attribute names can contain non-HTML whitespace characters
17070			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
17071			attrNames = value && value.match( rnothtmlwhite );
17072
17073		if ( attrNames && elem.nodeType === 1 ) {
17074			while ( ( name = attrNames[ i++ ] ) ) {
17075				elem.removeAttribute( name );
17076			}
17077		}
17078	}
17079} );
17080
17081// Hooks for boolean attributes
17082boolHook = {
17083	set: function( elem, value, name ) {
17084		if ( value === false ) {
17085
17086			// Remove boolean attributes when set to false
17087			jQuery.removeAttr( elem, name );
17088		} else {
17089			elem.setAttribute( name, name );
17090		}
17091		return name;
17092	}
17093};
17094
17095jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
17096	var getter = attrHandle[ name ] || jQuery.find.attr;
17097
17098	attrHandle[ name ] = function( elem, name, isXML ) {
17099		var ret, handle,
17100			lowercaseName = name.toLowerCase();
17101
17102		if ( !isXML ) {
17103
17104			// Avoid an infinite loop by temporarily removing this function from the getter
17105			handle = attrHandle[ lowercaseName ];
17106			attrHandle[ lowercaseName ] = ret;
17107			ret = getter( elem, name, isXML ) != null ?
17108				lowercaseName :
17109				null;
17110			attrHandle[ lowercaseName ] = handle;
17111		}
17112		return ret;
17113	};
17114} );
17115
17116
17117
17118
17119var rfocusable = /^(?:input|select|textarea|button)$/i,
17120	rclickable = /^(?:a|area)$/i;
17121
17122jQuery.fn.extend( {
17123	prop: function( name, value ) {
17124		return access( this, jQuery.prop, name, value, arguments.length > 1 );
17125	},
17126
17127	removeProp: function( name ) {
17128		return this.each( function() {
17129			delete this[ jQuery.propFix[ name ] || name ];
17130		} );
17131	}
17132} );
17133
17134jQuery.extend( {
17135	prop: function( elem, name, value ) {
17136		var ret, hooks,
17137			nType = elem.nodeType;
17138
17139		// Don't get/set properties on text, comment and attribute nodes
17140		if ( nType === 3 || nType === 8 || nType === 2 ) {
17141			return;
17142		}
17143
17144		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
17145
17146			// Fix name and attach hooks
17147			name = jQuery.propFix[ name ] || name;
17148			hooks = jQuery.propHooks[ name ];
17149		}
17150
17151		if ( value !== undefined ) {
17152			if ( hooks && "set" in hooks &&
17153				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
17154				return ret;
17155			}
17156
17157			return ( elem[ name ] = value );
17158		}
17159
17160		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
17161			return ret;
17162		}
17163
17164		return elem[ name ];
17165	},
17166
17167	propHooks: {
17168		tabIndex: {
17169			get: function( elem ) {
17170
17171				// Support: IE <=9 - 11 only
17172				// elem.tabIndex doesn't always return the
17173				// correct value when it hasn't been explicitly set
17174				// Use proper attribute retrieval (trac-12072)
17175				var tabindex = jQuery.find.attr( elem, "tabindex" );
17176
17177				if ( tabindex ) {
17178					return parseInt( tabindex, 10 );
17179				}
17180
17181				if (
17182					rfocusable.test( elem.nodeName ) ||
17183					rclickable.test( elem.nodeName ) &&
17184					elem.href
17185				) {
17186					return 0;
17187				}
17188
17189				return -1;
17190			}
17191		}
17192	},
17193
17194	propFix: {
17195		"for": "htmlFor",
17196		"class": "className"
17197	}
17198} );
17199
17200// Support: IE <=11 only
17201// Accessing the selectedIndex property
17202// forces the browser to respect setting selected
17203// on the option
17204// The getter ensures a default option is selected
17205// when in an optgroup
17206// eslint rule "no-unused-expressions" is disabled for this code
17207// since it considers such accessions noop
17208if ( !support.optSelected ) {
17209	jQuery.propHooks.selected = {
17210		get: function( elem ) {
17211
17212			/* eslint no-unused-expressions: "off" */
17213
17214			var parent = elem.parentNode;
17215			if ( parent && parent.parentNode ) {
17216				parent.parentNode.selectedIndex;
17217			}
17218			return null;
17219		},
17220		set: function( elem ) {
17221
17222			/* eslint no-unused-expressions: "off" */
17223
17224			var parent = elem.parentNode;
17225			if ( parent ) {
17226				parent.selectedIndex;
17227
17228				if ( parent.parentNode ) {
17229					parent.parentNode.selectedIndex;
17230				}
17231			}
17232		}
17233	};
17234}
17235
17236jQuery.each( [
17237	"tabIndex",
17238	"readOnly",
17239	"maxLength",
17240	"cellSpacing",
17241	"cellPadding",
17242	"rowSpan",
17243	"colSpan",
17244	"useMap",
17245	"frameBorder",
17246	"contentEditable"
17247], function() {
17248	jQuery.propFix[ this.toLowerCase() ] = this;
17249} );
17250
17251
17252
17253
17254	// Strip and collapse whitespace according to HTML spec
17255	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
17256	function stripAndCollapse( value ) {
17257		var tokens = value.match( rnothtmlwhite ) || [];
17258		return tokens.join( " " );
17259	}
17260
17261
17262function getClass( elem ) {
17263	return elem.getAttribute && elem.getAttribute( "class" ) || "";
17264}
17265
17266function classesToArray( value ) {
17267	if ( Array.isArray( value ) ) {
17268		return value;
17269	}
17270	if ( typeof value === "string" ) {
17271		return value.match( rnothtmlwhite ) || [];
17272	}
17273	return [];
17274}
17275
17276jQuery.fn.extend( {
17277	addClass: function( value ) {
17278		var classNames, cur, curValue, className, i, finalValue;
17279
17280		if ( isFunction( value ) ) {
17281			return this.each( function( j ) {
17282				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
17283			} );
17284		}
17285
17286		classNames = classesToArray( value );
17287
17288		if ( classNames.length ) {
17289			return this.each( function() {
17290				curValue = getClass( this );
17291				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
17292
17293				if ( cur ) {
17294					for ( i = 0; i < classNames.length; i++ ) {
17295						className = classNames[ i ];
17296						if ( cur.indexOf( " " + className + " " ) < 0 ) {
17297							cur += className + " ";
17298						}
17299					}
17300
17301					// Only assign if different to avoid unneeded rendering.
17302					finalValue = stripAndCollapse( cur );
17303					if ( curValue !== finalValue ) {
17304						this.setAttribute( "class", finalValue );
17305					}
17306				}
17307			} );
17308		}
17309
17310		return this;
17311	},
17312
17313	removeClass: function( value ) {
17314		var classNames, cur, curValue, className, i, finalValue;
17315
17316		if ( isFunction( value ) ) {
17317			return this.each( function( j ) {
17318				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
17319			} );
17320		}
17321
17322		if ( !arguments.length ) {
17323			return this.attr( "class", "" );
17324		}
17325
17326		classNames = classesToArray( value );
17327
17328		if ( classNames.length ) {
17329			return this.each( function() {
17330				curValue = getClass( this );
17331
17332				// This expression is here for better compressibility (see addClass)
17333				cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
17334
17335				if ( cur ) {
17336					for ( i = 0; i < classNames.length; i++ ) {
17337						className = classNames[ i ];
17338
17339						// Remove *all* instances
17340						while ( cur.indexOf( " " + className + " " ) > -1 ) {
17341							cur = cur.replace( " " + className + " ", " " );
17342						}
17343					}
17344
17345					// Only assign if different to avoid unneeded rendering.
17346					finalValue = stripAndCollapse( cur );
17347					if ( curValue !== finalValue ) {
17348						this.setAttribute( "class", finalValue );
17349					}
17350				}
17351			} );
17352		}
17353
17354		return this;
17355	},
17356
17357	toggleClass: function( value, stateVal ) {
17358		var classNames, className, i, self,
17359			type = typeof value,
17360			isValidValue = type === "string" || Array.isArray( value );
17361
17362		if ( isFunction( value ) ) {
17363			return this.each( function( i ) {
17364				jQuery( this ).toggleClass(
17365					value.call( this, i, getClass( this ), stateVal ),
17366					stateVal
17367				);
17368			} );
17369		}
17370
17371		if ( typeof stateVal === "boolean" && isValidValue ) {
17372			return stateVal ? this.addClass( value ) : this.removeClass( value );
17373		}
17374
17375		classNames = classesToArray( value );
17376
17377		return this.each( function() {
17378			if ( isValidValue ) {
17379
17380				// Toggle individual class names
17381				self = jQuery( this );
17382
17383				for ( i = 0; i < classNames.length; i++ ) {
17384					className = classNames[ i ];
17385
17386					// Check each className given, space separated list
17387					if ( self.hasClass( className ) ) {
17388						self.removeClass( className );
17389					} else {
17390						self.addClass( className );
17391					}
17392				}
17393
17394			// Toggle whole class name
17395			} else if ( value === undefined || type === "boolean" ) {
17396				className = getClass( this );
17397				if ( className ) {
17398
17399					// Store className if set
17400					dataPriv.set( this, "__className__", className );
17401				}
17402
17403				// If the element has a class name or if we're passed `false`,
17404				// then remove the whole classname (if there was one, the above saved it).
17405				// Otherwise bring back whatever was previously saved (if anything),
17406				// falling back to the empty string if nothing was stored.
17407				if ( this.setAttribute ) {
17408					this.setAttribute( "class",
17409						className || value === false ?
17410							"" :
17411							dataPriv.get( this, "__className__" ) || ""
17412					);
17413				}
17414			}
17415		} );
17416	},
17417
17418	hasClass: function( selector ) {
17419		var className, elem,
17420			i = 0;
17421
17422		className = " " + selector + " ";
17423		while ( ( elem = this[ i++ ] ) ) {
17424			if ( elem.nodeType === 1 &&
17425				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
17426				return true;
17427			}
17428		}
17429
17430		return false;
17431	}
17432} );
17433
17434
17435
17436
17437var rreturn = /\r/g;
17438
17439jQuery.fn.extend( {
17440	val: function( value ) {
17441		var hooks, ret, valueIsFunction,
17442			elem = this[ 0 ];
17443
17444		if ( !arguments.length ) {
17445			if ( elem ) {
17446				hooks = jQuery.valHooks[ elem.type ] ||
17447					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
17448
17449				if ( hooks &&
17450					"get" in hooks &&
17451					( ret = hooks.get( elem, "value" ) ) !== undefined
17452				) {
17453					return ret;
17454				}
17455
17456				ret = elem.value;
17457
17458				// Handle most common string cases
17459				if ( typeof ret === "string" ) {
17460					return ret.replace( rreturn, "" );
17461				}
17462
17463				// Handle cases where value is null/undef or number
17464				return ret == null ? "" : ret;
17465			}
17466
17467			return;
17468		}
17469
17470		valueIsFunction = isFunction( value );
17471
17472		return this.each( function( i ) {
17473			var val;
17474
17475			if ( this.nodeType !== 1 ) {
17476				return;
17477			}
17478
17479			if ( valueIsFunction ) {
17480				val = value.call( this, i, jQuery( this ).val() );
17481			} else {
17482				val = value;
17483			}
17484
17485			// Treat null/undefined as ""; convert numbers to string
17486			if ( val == null ) {
17487				val = "";
17488
17489			} else if ( typeof val === "number" ) {
17490				val += "";
17491
17492			} else if ( Array.isArray( val ) ) {
17493				val = jQuery.map( val, function( value ) {
17494					return value == null ? "" : value + "";
17495				} );
17496			}
17497
17498			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
17499
17500			// If set returns undefined, fall back to normal setting
17501			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
17502				this.value = val;
17503			}
17504		} );
17505	}
17506} );
17507
17508jQuery.extend( {
17509	valHooks: {
17510		option: {
17511			get: function( elem ) {
17512
17513				var val = jQuery.find.attr( elem, "value" );
17514				return val != null ?
17515					val :
17516
17517					// Support: IE <=10 - 11 only
17518					// option.text throws exceptions (trac-14686, trac-14858)
17519					// Strip and collapse whitespace
17520					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
17521					stripAndCollapse( jQuery.text( elem ) );
17522			}
17523		},
17524		select: {
17525			get: function( elem ) {
17526				var value, option, i,
17527					options = elem.options,
17528					index = elem.selectedIndex,
17529					one = elem.type === "select-one",
17530					values = one ? null : [],
17531					max = one ? index + 1 : options.length;
17532
17533				if ( index < 0 ) {
17534					i = max;
17535
17536				} else {
17537					i = one ? index : 0;
17538				}
17539
17540				// Loop through all the selected options
17541				for ( ; i < max; i++ ) {
17542					option = options[ i ];
17543
17544					// Support: IE <=9 only
17545					// IE8-9 doesn't update selected after form reset (trac-2551)
17546					if ( ( option.selected || i === index ) &&
17547
17548							// Don't return options that are disabled or in a disabled optgroup
17549							!option.disabled &&
17550							( !option.parentNode.disabled ||
17551								!nodeName( option.parentNode, "optgroup" ) ) ) {
17552
17553						// Get the specific value for the option
17554						value = jQuery( option ).val();
17555
17556						// We don't need an array for one selects
17557						if ( one ) {
17558							return value;
17559						}
17560
17561						// Multi-Selects return an array
17562						values.push( value );
17563					}
17564				}
17565
17566				return values;
17567			},
17568
17569			set: function( elem, value ) {
17570				var optionSet, option,
17571					options = elem.options,
17572					values = jQuery.makeArray( value ),
17573					i = options.length;
17574
17575				while ( i-- ) {
17576					option = options[ i ];
17577
17578					/* eslint-disable no-cond-assign */
17579
17580					if ( option.selected =
17581						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
17582					) {
17583						optionSet = true;
17584					}
17585
17586					/* eslint-enable no-cond-assign */
17587				}
17588
17589				// Force browsers to behave consistently when non-matching value is set
17590				if ( !optionSet ) {
17591					elem.selectedIndex = -1;
17592				}
17593				return values;
17594			}
17595		}
17596	}
17597} );
17598
17599// Radios and checkboxes getter/setter
17600jQuery.each( [ "radio", "checkbox" ], function() {
17601	jQuery.valHooks[ this ] = {
17602		set: function( elem, value ) {
17603			if ( Array.isArray( value ) ) {
17604				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
17605			}
17606		}
17607	};
17608	if ( !support.checkOn ) {
17609		jQuery.valHooks[ this ].get = function( elem ) {
17610			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
17611		};
17612	}
17613} );
17614
17615
17616
17617
17618// Return jQuery for attributes-only inclusion
17619var location = window.location;
17620
17621var nonce = { guid: Date.now() };
17622
17623var rquery = ( /\?/ );
17624
17625
17626
17627// Cross-browser xml parsing
17628jQuery.parseXML = function( data ) {
17629	var xml, parserErrorElem;
17630	if ( !data || typeof data !== "string" ) {
17631		return null;
17632	}
17633
17634	// Support: IE 9 - 11 only
17635	// IE throws on parseFromString with invalid input.
17636	try {
17637		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
17638	} catch ( e ) {}
17639
17640	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
17641	if ( !xml || parserErrorElem ) {
17642		jQuery.error( "Invalid XML: " + (
17643			parserErrorElem ?
17644				jQuery.map( parserErrorElem.childNodes, function( el ) {
17645					return el.textContent;
17646				} ).join( "\n" ) :
17647				data
17648		) );
17649	}
17650	return xml;
17651};
17652
17653
17654var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
17655	stopPropagationCallback = function( e ) {
17656		e.stopPropagation();
17657	};
17658
17659jQuery.extend( jQuery.event, {
17660
17661	trigger: function( event, data, elem, onlyHandlers ) {
17662
17663		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
17664			eventPath = [ elem || document ],
17665			type = hasOwn.call( event, "type" ) ? event.type : event,
17666			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
17667
17668		cur = lastElement = tmp = elem = elem || document;
17669
17670		// Don't do events on text and comment nodes
17671		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
17672			return;
17673		}
17674
17675		// focus/blur morphs to focusin/out; ensure we're not firing them right now
17676		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
17677			return;
17678		}
17679
17680		if ( type.indexOf( "." ) > -1 ) {
17681
17682			// Namespaced trigger; create a regexp to match event type in handle()
17683			namespaces = type.split( "." );
17684			type = namespaces.shift();
17685			namespaces.sort();
17686		}
17687		ontype = type.indexOf( ":" ) < 0 && "on" + type;
17688
17689		// Caller can pass in a jQuery.Event object, Object, or just an event type string
17690		event = event[ jQuery.expando ] ?
17691			event :
17692			new jQuery.Event( type, typeof event === "object" && event );
17693
17694		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
17695		event.isTrigger = onlyHandlers ? 2 : 3;
17696		event.namespace = namespaces.join( "." );
17697		event.rnamespace = event.namespace ?
17698			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
17699			null;
17700
17701		// Clean up the event in case it is being reused
17702		event.result = undefined;
17703		if ( !event.target ) {
17704			event.target = elem;
17705		}
17706
17707		// Clone any incoming data and prepend the event, creating the handler arg list
17708		data = data == null ?
17709			[ event ] :
17710			jQuery.makeArray( data, [ event ] );
17711
17712		// Allow special events to draw outside the lines
17713		special = jQuery.event.special[ type ] || {};
17714		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
17715			return;
17716		}
17717
17718		// Determine event propagation path in advance, per W3C events spec (trac-9951)
17719		// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
17720		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
17721
17722			bubbleType = special.delegateType || type;
17723			if ( !rfocusMorph.test( bubbleType + type ) ) {
17724				cur = cur.parentNode;
17725			}
17726			for ( ; cur; cur = cur.parentNode ) {
17727				eventPath.push( cur );
17728				tmp = cur;
17729			}
17730
17731			// Only add window if we got to document (e.g., not plain obj or detached DOM)
17732			if ( tmp === ( elem.ownerDocument || document ) ) {
17733				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
17734			}
17735		}
17736
17737		// Fire handlers on the event path
17738		i = 0;
17739		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
17740			lastElement = cur;
17741			event.type = i > 1 ?
17742				bubbleType :
17743				special.bindType || type;
17744
17745			// jQuery handler
17746			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
17747				dataPriv.get( cur, "handle" );
17748			if ( handle ) {
17749				handle.apply( cur, data );
17750			}
17751
17752			// Native handler
17753			handle = ontype && cur[ ontype ];
17754			if ( handle && handle.apply && acceptData( cur ) ) {
17755				event.result = handle.apply( cur, data );
17756				if ( event.result === false ) {
17757					event.preventDefault();
17758				}
17759			}
17760		}
17761		event.type = type;
17762
17763		// If nobody prevented the default action, do it now
17764		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
17765
17766			if ( ( !special._default ||
17767				special._default.apply( eventPath.pop(), data ) === false ) &&
17768				acceptData( elem ) ) {
17769
17770				// Call a native DOM method on the target with the same name as the event.
17771				// Don't do default actions on window, that's where global variables be (trac-6170)
17772				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
17773
17774					// Don't re-trigger an onFOO event when we call its FOO() method
17775					tmp = elem[ ontype ];
17776
17777					if ( tmp ) {
17778						elem[ ontype ] = null;
17779					}
17780
17781					// Prevent re-triggering of the same event, since we already bubbled it above
17782					jQuery.event.triggered = type;
17783
17784					if ( event.isPropagationStopped() ) {
17785						lastElement.addEventListener( type, stopPropagationCallback );
17786					}
17787
17788					elem[ type ]();
17789
17790					if ( event.isPropagationStopped() ) {
17791						lastElement.removeEventListener( type, stopPropagationCallback );
17792					}
17793
17794					jQuery.event.triggered = undefined;
17795
17796					if ( tmp ) {
17797						elem[ ontype ] = tmp;
17798					}
17799				}
17800			}
17801		}
17802
17803		return event.result;
17804	},
17805
17806	// Piggyback on a donor event to simulate a different one
17807	// Used only for `focus(in | out)` events
17808	simulate: function( type, elem, event ) {
17809		var e = jQuery.extend(
17810			new jQuery.Event(),
17811			event,
17812			{
17813				type: type,
17814				isSimulated: true
17815			}
17816		);
17817
17818		jQuery.event.trigger( e, null, elem );
17819	}
17820
17821} );
17822
17823jQuery.fn.extend( {
17824
17825	trigger: function( type, data ) {
17826		return this.each( function() {
17827			jQuery.event.trigger( type, data, this );
17828		} );
17829	},
17830	triggerHandler: function( type, data ) {
17831		var elem = this[ 0 ];
17832		if ( elem ) {
17833			return jQuery.event.trigger( type, data, elem, true );
17834		}
17835	}
17836} );
17837
17838
17839var
17840	rbracket = /\[\]$/,
17841	rCRLF = /\r?\n/g,
17842	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
17843	rsubmittable = /^(?:input|select|textarea|keygen)/i;
17844
17845function buildParams( prefix, obj, traditional, add ) {
17846	var name;
17847
17848	if ( Array.isArray( obj ) ) {
17849
17850		// Serialize array item.
17851		jQuery.each( obj, function( i, v ) {
17852			if ( traditional || rbracket.test( prefix ) ) {
17853
17854				// Treat each array item as a scalar.
17855				add( prefix, v );
17856
17857			} else {
17858
17859				// Item is non-scalar (array or object), encode its numeric index.
17860				buildParams(
17861					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
17862					v,
17863					traditional,
17864					add
17865				);
17866			}
17867		} );
17868
17869	} else if ( !traditional && toType( obj ) === "object" ) {
17870
17871		// Serialize object item.
17872		for ( name in obj ) {
17873			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
17874		}
17875
17876	} else {
17877
17878		// Serialize scalar item.
17879		add( prefix, obj );
17880	}
17881}
17882
17883// Serialize an array of form elements or a set of
17884// key/values into a query string
17885jQuery.param = function( a, traditional ) {
17886	var prefix,
17887		s = [],
17888		add = function( key, valueOrFunction ) {
17889
17890			// If value is a function, invoke it and use its return value
17891			var value = isFunction( valueOrFunction ) ?
17892				valueOrFunction() :
17893				valueOrFunction;
17894
17895			s[ s.length ] = encodeURIComponent( key ) + "=" +
17896				encodeURIComponent( value == null ? "" : value );
17897		};
17898
17899	if ( a == null ) {
17900		return "";
17901	}
17902
17903	// If an array was passed in, assume that it is an array of form elements.
17904	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
17905
17906		// Serialize the form elements
17907		jQuery.each( a, function() {
17908			add( this.name, this.value );
17909		} );
17910
17911	} else {
17912
17913		// If traditional, encode the "old" way (the way 1.3.2 or older
17914		// did it), otherwise encode params recursively.
17915		for ( prefix in a ) {
17916			buildParams( prefix, a[ prefix ], traditional, add );
17917		}
17918	}
17919
17920	// Return the resulting serialization
17921	return s.join( "&" );
17922};
17923
17924jQuery.fn.extend( {
17925	serialize: function() {
17926		return jQuery.param( this.serializeArray() );
17927	},
17928	serializeArray: function() {
17929		return this.map( function() {
17930
17931			// Can add propHook for "elements" to filter or add form elements
17932			var elements = jQuery.prop( this, "elements" );
17933			return elements ? jQuery.makeArray( elements ) : this;
17934		} ).filter( function() {
17935			var type = this.type;
17936
17937			// Use .is( ":disabled" ) so that fieldset[disabled] works
17938			return this.name && !jQuery( this ).is( ":disabled" ) &&
17939				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
17940				( this.checked || !rcheckableType.test( type ) );
17941		} ).map( function( _i, elem ) {
17942			var val = jQuery( this ).val();
17943
17944			if ( val == null ) {
17945				return null;
17946			}
17947
17948			if ( Array.isArray( val ) ) {
17949				return jQuery.map( val, function( val ) {
17950					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
17951				} );
17952			}
17953
17954			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
17955		} ).get();
17956	}
17957} );
17958
17959
17960var
17961	r20 = /%20/g,
17962	rhash = /#.*$/,
17963	rantiCache = /([?&])_=[^&]*/,
17964	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
17965
17966	// trac-7653, trac-8125, trac-8152: local protocol detection
17967	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
17968	rnoContent = /^(?:GET|HEAD)$/,
17969	rprotocol = /^\/\//,
17970
17971	/* Prefilters
17972	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
17973	 * 2) These are called:
17974	 *    - BEFORE asking for a transport
17975	 *    - AFTER param serialization (s.data is a string if s.processData is true)
17976	 * 3) key is the dataType
17977	 * 4) the catchall symbol "*" can be used
17978	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
17979	 */
17980	prefilters = {},
17981
17982	/* Transports bindings
17983	 * 1) key is the dataType
17984	 * 2) the catchall symbol "*" can be used
17985	 * 3) selection will start with transport dataType and THEN go to "*" if needed
17986	 */
17987	transports = {},
17988
17989	// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
17990	allTypes = "*/".concat( "*" ),
17991
17992	// Anchor tag for parsing the document origin
17993	originAnchor = document.createElement( "a" );
17994
17995originAnchor.href = location.href;
17996
17997// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
17998function addToPrefiltersOrTransports( structure ) {
17999
18000	// dataTypeExpression is optional and defaults to "*"
18001	return function( dataTypeExpression, func ) {
18002
18003		if ( typeof dataTypeExpression !== "string" ) {
18004			func = dataTypeExpression;
18005			dataTypeExpression = "*";
18006		}
18007
18008		var dataType,
18009			i = 0,
18010			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
18011
18012		if ( isFunction( func ) ) {
18013
18014			// For each dataType in the dataTypeExpression
18015			while ( ( dataType = dataTypes[ i++ ] ) ) {
18016
18017				// Prepend if requested
18018				if ( dataType[ 0 ] === "+" ) {
18019					dataType = dataType.slice( 1 ) || "*";
18020					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
18021
18022				// Otherwise append
18023				} else {
18024					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
18025				}
18026			}
18027		}
18028	};
18029}
18030
18031// Base inspection function for prefilters and transports
18032function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
18033
18034	var inspected = {},
18035		seekingTransport = ( structure === transports );
18036
18037	function inspect( dataType ) {
18038		var selected;
18039		inspected[ dataType ] = true;
18040		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
18041			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
18042			if ( typeof dataTypeOrTransport === "string" &&
18043				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
18044
18045				options.dataTypes.unshift( dataTypeOrTransport );
18046				inspect( dataTypeOrTransport );
18047				return false;
18048			} else if ( seekingTransport ) {
18049				return !( selected = dataTypeOrTransport );
18050			}
18051		} );
18052		return selected;
18053	}
18054
18055	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
18056}
18057
18058// A special extend for ajax options
18059// that takes "flat" options (not to be deep extended)
18060// Fixes trac-9887
18061function ajaxExtend( target, src ) {
18062	var key, deep,
18063		flatOptions = jQuery.ajaxSettings.flatOptions || {};
18064
18065	for ( key in src ) {
18066		if ( src[ key ] !== undefined ) {
18067			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
18068		}
18069	}
18070	if ( deep ) {
18071		jQuery.extend( true, target, deep );
18072	}
18073
18074	return target;
18075}
18076
18077/* Handles responses to an ajax request:
18078 * - finds the right dataType (mediates between content-type and expected dataType)
18079 * - returns the corresponding response
18080 */
18081function ajaxHandleResponses( s, jqXHR, responses ) {
18082
18083	var ct, type, finalDataType, firstDataType,
18084		contents = s.contents,
18085		dataTypes = s.dataTypes;
18086
18087	// Remove auto dataType and get content-type in the process
18088	while ( dataTypes[ 0 ] === "*" ) {
18089		dataTypes.shift();
18090		if ( ct === undefined ) {
18091			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
18092		}
18093	}
18094
18095	// Check if we're dealing with a known content-type
18096	if ( ct ) {
18097		for ( type in contents ) {
18098			if ( contents[ type ] && contents[ type ].test( ct ) ) {
18099				dataTypes.unshift( type );
18100				break;
18101			}
18102		}
18103	}
18104
18105	// Check to see if we have a response for the expected dataType
18106	if ( dataTypes[ 0 ] in responses ) {
18107		finalDataType = dataTypes[ 0 ];
18108	} else {
18109
18110		// Try convertible dataTypes
18111		for ( type in responses ) {
18112			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
18113				finalDataType = type;
18114				break;
18115			}
18116			if ( !firstDataType ) {
18117				firstDataType = type;
18118			}
18119		}
18120
18121		// Or just use first one
18122		finalDataType = finalDataType || firstDataType;
18123	}
18124
18125	// If we found a dataType
18126	// We add the dataType to the list if needed
18127	// and return the corresponding response
18128	if ( finalDataType ) {
18129		if ( finalDataType !== dataTypes[ 0 ] ) {
18130			dataTypes.unshift( finalDataType );
18131		}
18132		return responses[ finalDataType ];
18133	}
18134}
18135
18136/* Chain conversions given the request and the original response
18137 * Also sets the responseXXX fields on the jqXHR instance
18138 */
18139function ajaxConvert( s, response, jqXHR, isSuccess ) {
18140	var conv2, current, conv, tmp, prev,
18141		converters = {},
18142
18143		// Work with a copy of dataTypes in case we need to modify it for conversion
18144		dataTypes = s.dataTypes.slice();
18145
18146	// Create converters map with lowercased keys
18147	if ( dataTypes[ 1 ] ) {
18148		for ( conv in s.converters ) {
18149			converters[ conv.toLowerCase() ] = s.converters[ conv ];
18150		}
18151	}
18152
18153	current = dataTypes.shift();
18154
18155	// Convert to each sequential dataType
18156	while ( current ) {
18157
18158		if ( s.responseFields[ current ] ) {
18159			jqXHR[ s.responseFields[ current ] ] = response;
18160		}
18161
18162		// Apply the dataFilter if provided
18163		if ( !prev && isSuccess && s.dataFilter ) {
18164			response = s.dataFilter( response, s.dataType );
18165		}
18166
18167		prev = current;
18168		current = dataTypes.shift();
18169
18170		if ( current ) {
18171
18172			// There's only work to do if current dataType is non-auto
18173			if ( current === "*" ) {
18174
18175				current = prev;
18176
18177			// Convert response if prev dataType is non-auto and differs from current
18178			} else if ( prev !== "*" && prev !== current ) {
18179
18180				// Seek a direct converter
18181				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
18182
18183				// If none found, seek a pair
18184				if ( !conv ) {
18185					for ( conv2 in converters ) {
18186
18187						// If conv2 outputs current
18188						tmp = conv2.split( " " );
18189						if ( tmp[ 1 ] === current ) {
18190
18191							// If prev can be converted to accepted input
18192							conv = converters[ prev + " " + tmp[ 0 ] ] ||
18193								converters[ "* " + tmp[ 0 ] ];
18194							if ( conv ) {
18195
18196								// Condense equivalence converters
18197								if ( conv === true ) {
18198									conv = converters[ conv2 ];
18199
18200								// Otherwise, insert the intermediate dataType
18201								} else if ( converters[ conv2 ] !== true ) {
18202									current = tmp[ 0 ];
18203									dataTypes.unshift( tmp[ 1 ] );
18204								}
18205								break;
18206							}
18207						}
18208					}
18209				}
18210
18211				// Apply converter (if not an equivalence)
18212				if ( conv !== true ) {
18213
18214					// Unless errors are allowed to bubble, catch and return them
18215					if ( conv && s.throws ) {
18216						response = conv( response );
18217					} else {
18218						try {
18219							response = conv( response );
18220						} catch ( e ) {
18221							return {
18222								state: "parsererror",
18223								error: conv ? e : "No conversion from " + prev + " to " + current
18224							};
18225						}
18226					}
18227				}
18228			}
18229		}
18230	}
18231
18232	return { state: "success", data: response };
18233}
18234
18235jQuery.extend( {
18236
18237	// Counter for holding the number of active queries
18238	active: 0,
18239
18240	// Last-Modified header cache for next request
18241	lastModified: {},
18242	etag: {},
18243
18244	ajaxSettings: {
18245		url: location.href,
18246		type: "GET",
18247		isLocal: rlocalProtocol.test( location.protocol ),
18248		global: true,
18249		processData: true,
18250		async: true,
18251		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
18252
18253		/*
18254		timeout: 0,
18255		data: null,
18256		dataType: null,
18257		username: null,
18258		password: null,
18259		cache: null,
18260		throws: false,
18261		traditional: false,
18262		headers: {},
18263		*/
18264
18265		accepts: {
18266			"*": allTypes,
18267			text: "text/plain",
18268			html: "text/html",
18269			xml: "application/xml, text/xml",
18270			json: "application/json, text/javascript"
18271		},
18272
18273		contents: {
18274			xml: /\bxml\b/,
18275			html: /\bhtml/,
18276			json: /\bjson\b/
18277		},
18278
18279		responseFields: {
18280			xml: "responseXML",
18281			text: "responseText",
18282			json: "responseJSON"
18283		},
18284
18285		// Data converters
18286		// Keys separate source (or catchall "*") and destination types with a single space
18287		converters: {
18288
18289			// Convert anything to text
18290			"* text": String,
18291
18292			// Text to html (true = no transformation)
18293			"text html": true,
18294
18295			// Evaluate text as a json expression
18296			"text json": JSON.parse,
18297
18298			// Parse text as xml
18299			"text xml": jQuery.parseXML
18300		},
18301
18302		// For options that shouldn't be deep extended:
18303		// you can add your own custom options here if
18304		// and when you create one that shouldn't be
18305		// deep extended (see ajaxExtend)
18306		flatOptions: {
18307			url: true,
18308			context: true
18309		}
18310	},
18311
18312	// Creates a full fledged settings object into target
18313	// with both ajaxSettings and settings fields.
18314	// If target is omitted, writes into ajaxSettings.
18315	ajaxSetup: function( target, settings ) {
18316		return settings ?
18317
18318			// Building a settings object
18319			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
18320
18321			// Extending ajaxSettings
18322			ajaxExtend( jQuery.ajaxSettings, target );
18323	},
18324
18325	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
18326	ajaxTransport: addToPrefiltersOrTransports( transports ),
18327
18328	// Main method
18329	ajax: function( url, options ) {
18330
18331		// If url is an object, simulate pre-1.5 signature
18332		if ( typeof url === "object" ) {
18333			options = url;
18334			url = undefined;
18335		}
18336
18337		// Force options to be an object
18338		options = options || {};
18339
18340		var transport,
18341
18342			// URL without anti-cache param
18343			cacheURL,
18344
18345			// Response headers
18346			responseHeadersString,
18347			responseHeaders,
18348
18349			// timeout handle
18350			timeoutTimer,
18351
18352			// Url cleanup var
18353			urlAnchor,
18354
18355			// Request state (becomes false upon send and true upon completion)
18356			completed,
18357
18358			// To know if global events are to be dispatched
18359			fireGlobals,
18360
18361			// Loop variable
18362			i,
18363
18364			// uncached part of the url
18365			uncached,
18366
18367			// Create the final options object
18368			s = jQuery.ajaxSetup( {}, options ),
18369
18370			// Callbacks context
18371			callbackContext = s.context || s,
18372
18373			// Context for global events is callbackContext if it is a DOM node or jQuery collection
18374			globalEventContext = s.context &&
18375				( callbackContext.nodeType || callbackContext.jquery ) ?
18376				jQuery( callbackContext ) :
18377				jQuery.event,
18378
18379			// Deferreds
18380			deferred = jQuery.Deferred(),
18381			completeDeferred = jQuery.Callbacks( "once memory" ),
18382
18383			// Status-dependent callbacks
18384			statusCode = s.statusCode || {},
18385
18386			// Headers (they are sent all at once)
18387			requestHeaders = {},
18388			requestHeadersNames = {},
18389
18390			// Default abort message
18391			strAbort = "canceled",
18392
18393			// Fake xhr
18394			jqXHR = {
18395				readyState: 0,
18396
18397				// Builds headers hashtable if needed
18398				getResponseHeader: function( key ) {
18399					var match;
18400					if ( completed ) {
18401						if ( !responseHeaders ) {
18402							responseHeaders = {};
18403							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
18404								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
18405									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
18406										.concat( match[ 2 ] );
18407							}
18408						}
18409						match = responseHeaders[ key.toLowerCase() + " " ];
18410					}
18411					return match == null ? null : match.join( ", " );
18412				},
18413
18414				// Raw string
18415				getAllResponseHeaders: function() {
18416					return completed ? responseHeadersString : null;
18417				},
18418
18419				// Caches the header
18420				setRequestHeader: function( name, value ) {
18421					if ( completed == null ) {
18422						name = requestHeadersNames[ name.toLowerCase() ] =
18423							requestHeadersNames[ name.toLowerCase() ] || name;
18424						requestHeaders[ name ] = value;
18425					}
18426					return this;
18427				},
18428
18429				// Overrides response content-type header
18430				overrideMimeType: function( type ) {
18431					if ( completed == null ) {
18432						s.mimeType = type;
18433					}
18434					return this;
18435				},
18436
18437				// Status-dependent callbacks
18438				statusCode: function( map ) {
18439					var code;
18440					if ( map ) {
18441						if ( completed ) {
18442
18443							// Execute the appropriate callbacks
18444							jqXHR.always( map[ jqXHR.status ] );
18445						} else {
18446
18447							// Lazy-add the new callbacks in a way that preserves old ones
18448							for ( code in map ) {
18449								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
18450							}
18451						}
18452					}
18453					return this;
18454				},
18455
18456				// Cancel the request
18457				abort: function( statusText ) {
18458					var finalText = statusText || strAbort;
18459					if ( transport ) {
18460						transport.abort( finalText );
18461					}
18462					done( 0, finalText );
18463					return this;
18464				}
18465			};
18466
18467		// Attach deferreds
18468		deferred.promise( jqXHR );
18469
18470		// Add protocol if not provided (prefilters might expect it)
18471		// Handle falsy url in the settings object (trac-10093: consistency with old signature)
18472		// We also use the url parameter if available
18473		s.url = ( ( url || s.url || location.href ) + "" )
18474			.replace( rprotocol, location.protocol + "//" );
18475
18476		// Alias method option to type as per ticket trac-12004
18477		s.type = options.method || options.type || s.method || s.type;
18478
18479		// Extract dataTypes list
18480		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
18481
18482		// A cross-domain request is in order when the origin doesn't match the current origin.
18483		if ( s.crossDomain == null ) {
18484			urlAnchor = document.createElement( "a" );
18485
18486			// Support: IE <=8 - 11, Edge 12 - 15
18487			// IE throws exception on accessing the href property if url is malformed,
18488			// e.g. http://example.com:80x/
18489			try {
18490				urlAnchor.href = s.url;
18491
18492				// Support: IE <=8 - 11 only
18493				// Anchor's host property isn't correctly set when s.url is relative
18494				urlAnchor.href = urlAnchor.href;
18495				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
18496					urlAnchor.protocol + "//" + urlAnchor.host;
18497			} catch ( e ) {
18498
18499				// If there is an error parsing the URL, assume it is crossDomain,
18500				// it can be rejected by the transport if it is invalid
18501				s.crossDomain = true;
18502			}
18503		}
18504
18505		// Convert data if not already a string
18506		if ( s.data && s.processData && typeof s.data !== "string" ) {
18507			s.data = jQuery.param( s.data, s.traditional );
18508		}
18509
18510		// Apply prefilters
18511		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
18512
18513		// If request was aborted inside a prefilter, stop there
18514		if ( completed ) {
18515			return jqXHR;
18516		}
18517
18518		// We can fire global events as of now if asked to
18519		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
18520		fireGlobals = jQuery.event && s.global;
18521
18522		// Watch for a new set of requests
18523		if ( fireGlobals && jQuery.active++ === 0 ) {
18524			jQuery.event.trigger( "ajaxStart" );
18525		}
18526
18527		// Uppercase the type
18528		s.type = s.type.toUpperCase();
18529
18530		// Determine if request has content
18531		s.hasContent = !rnoContent.test( s.type );
18532
18533		// Save the URL in case we're toying with the If-Modified-Since
18534		// and/or If-None-Match header later on
18535		// Remove hash to simplify url manipulation
18536		cacheURL = s.url.replace( rhash, "" );
18537
18538		// More options handling for requests with no content
18539		if ( !s.hasContent ) {
18540
18541			// Remember the hash so we can put it back
18542			uncached = s.url.slice( cacheURL.length );
18543
18544			// If data is available and should be processed, append data to url
18545			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
18546				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
18547
18548				// trac-9682: remove data so that it's not used in an eventual retry
18549				delete s.data;
18550			}
18551
18552			// Add or update anti-cache param if needed
18553			if ( s.cache === false ) {
18554				cacheURL = cacheURL.replace( rantiCache, "$1" );
18555				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
18556					uncached;
18557			}
18558
18559			// Put hash and anti-cache on the URL that will be requested (gh-1732)
18560			s.url = cacheURL + uncached;
18561
18562		// Change '%20' to '+' if this is encoded form body content (gh-2658)
18563		} else if ( s.data && s.processData &&
18564			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
18565			s.data = s.data.replace( r20, "+" );
18566		}
18567
18568		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
18569		if ( s.ifModified ) {
18570			if ( jQuery.lastModified[ cacheURL ] ) {
18571				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
18572			}
18573			if ( jQuery.etag[ cacheURL ] ) {
18574				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
18575			}
18576		}
18577
18578		// Set the correct header, if data is being sent
18579		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
18580			jqXHR.setRequestHeader( "Content-Type", s.contentType );
18581		}
18582
18583		// Set the Accepts header for the server, depending on the dataType
18584		jqXHR.setRequestHeader(
18585			"Accept",
18586			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
18587				s.accepts[ s.dataTypes[ 0 ] ] +
18588					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
18589				s.accepts[ "*" ]
18590		);
18591
18592		// Check for headers option
18593		for ( i in s.headers ) {
18594			jqXHR.setRequestHeader( i, s.headers[ i ] );
18595		}
18596
18597		// Allow custom headers/mimetypes and early abort
18598		if ( s.beforeSend &&
18599			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
18600
18601			// Abort if not done already and return
18602			return jqXHR.abort();
18603		}
18604
18605		// Aborting is no longer a cancellation
18606		strAbort = "abort";
18607
18608		// Install callbacks on deferreds
18609		completeDeferred.add( s.complete );
18610		jqXHR.done( s.success );
18611		jqXHR.fail( s.error );
18612
18613		// Get transport
18614		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
18615
18616		// If no transport, we auto-abort
18617		if ( !transport ) {
18618			done( -1, "No Transport" );
18619		} else {
18620			jqXHR.readyState = 1;
18621
18622			// Send global event
18623			if ( fireGlobals ) {
18624				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
18625			}
18626
18627			// If request was aborted inside ajaxSend, stop there
18628			if ( completed ) {
18629				return jqXHR;
18630			}
18631
18632			// Timeout
18633			if ( s.async && s.timeout > 0 ) {
18634				timeoutTimer = window.setTimeout( function() {
18635					jqXHR.abort( "timeout" );
18636				}, s.timeout );
18637			}
18638
18639			try {
18640				completed = false;
18641				transport.send( requestHeaders, done );
18642			} catch ( e ) {
18643
18644				// Rethrow post-completion exceptions
18645				if ( completed ) {
18646					throw e;
18647				}
18648
18649				// Propagate others as results
18650				done( -1, e );
18651			}
18652		}
18653
18654		// Callback for when everything is done
18655		function done( status, nativeStatusText, responses, headers ) {
18656			var isSuccess, success, error, response, modified,
18657				statusText = nativeStatusText;
18658
18659			// Ignore repeat invocations
18660			if ( completed ) {
18661				return;
18662			}
18663
18664			completed = true;
18665
18666			// Clear timeout if it exists
18667			if ( timeoutTimer ) {
18668				window.clearTimeout( timeoutTimer );
18669			}
18670
18671			// Dereference transport for early garbage collection
18672			// (no matter how long the jqXHR object will be used)
18673			transport = undefined;
18674
18675			// Cache response headers
18676			responseHeadersString = headers || "";
18677
18678			// Set readyState
18679			jqXHR.readyState = status > 0 ? 4 : 0;
18680
18681			// Determine if successful
18682			isSuccess = status >= 200 && status < 300 || status === 304;
18683
18684			// Get response data
18685			if ( responses ) {
18686				response = ajaxHandleResponses( s, jqXHR, responses );
18687			}
18688
18689			// Use a noop converter for missing script but not if jsonp
18690			if ( !isSuccess &&
18691				jQuery.inArray( "script", s.dataTypes ) > -1 &&
18692				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
18693				s.converters[ "text script" ] = function() {};
18694			}
18695
18696			// Convert no matter what (that way responseXXX fields are always set)
18697			response = ajaxConvert( s, response, jqXHR, isSuccess );
18698
18699			// If successful, handle type chaining
18700			if ( isSuccess ) {
18701
18702				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
18703				if ( s.ifModified ) {
18704					modified = jqXHR.getResponseHeader( "Last-Modified" );
18705					if ( modified ) {
18706						jQuery.lastModified[ cacheURL ] = modified;
18707					}
18708					modified = jqXHR.getResponseHeader( "etag" );
18709					if ( modified ) {
18710						jQuery.etag[ cacheURL ] = modified;
18711					}
18712				}
18713
18714				// if no content
18715				if ( status === 204 || s.type === "HEAD" ) {
18716					statusText = "nocontent";
18717
18718				// if not modified
18719				} else if ( status === 304 ) {
18720					statusText = "notmodified";
18721
18722				// If we have data, let's convert it
18723				} else {
18724					statusText = response.state;
18725					success = response.data;
18726					error = response.error;
18727					isSuccess = !error;
18728				}
18729			} else {
18730
18731				// Extract error from statusText and normalize for non-aborts
18732				error = statusText;
18733				if ( status || !statusText ) {
18734					statusText = "error";
18735					if ( status < 0 ) {
18736						status = 0;
18737					}
18738				}
18739			}
18740
18741			// Set data for the fake xhr object
18742			jqXHR.status = status;
18743			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
18744
18745			// Success/Error
18746			if ( isSuccess ) {
18747				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
18748			} else {
18749				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
18750			}
18751
18752			// Status-dependent callbacks
18753			jqXHR.statusCode( statusCode );
18754			statusCode = undefined;
18755
18756			if ( fireGlobals ) {
18757				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
18758					[ jqXHR, s, isSuccess ? success : error ] );
18759			}
18760
18761			// Complete
18762			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
18763
18764			if ( fireGlobals ) {
18765				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
18766
18767				// Handle the global AJAX counter
18768				if ( !( --jQuery.active ) ) {
18769					jQuery.event.trigger( "ajaxStop" );
18770				}
18771			}
18772		}
18773
18774		return jqXHR;
18775	},
18776
18777	getJSON: function( url, data, callback ) {
18778		return jQuery.get( url, data, callback, "json" );
18779	},
18780
18781	getScript: function( url, callback ) {
18782		return jQuery.get( url, undefined, callback, "script" );
18783	}
18784} );
18785
18786jQuery.each( [ "get", "post" ], function( _i, method ) {
18787	jQuery[ method ] = function( url, data, callback, type ) {
18788
18789		// Shift arguments if data argument was omitted
18790		if ( isFunction( data ) ) {
18791			type = type || callback;
18792			callback = data;
18793			data = undefined;
18794		}
18795
18796		// The url can be an options object (which then must have .url)
18797		return jQuery.ajax( jQuery.extend( {
18798			url: url,
18799			type: method,
18800			dataType: type,
18801			data: data,
18802			success: callback
18803		}, jQuery.isPlainObject( url ) && url ) );
18804	};
18805} );
18806
18807jQuery.ajaxPrefilter( function( s ) {
18808	var i;
18809	for ( i in s.headers ) {
18810		if ( i.toLowerCase() === "content-type" ) {
18811			s.contentType = s.headers[ i ] || "";
18812		}
18813	}
18814} );
18815
18816
18817jQuery._evalUrl = function( url, options, doc ) {
18818	return jQuery.ajax( {
18819		url: url,
18820
18821		// Make this explicit, since user can override this through ajaxSetup (trac-11264)
18822		type: "GET",
18823		dataType: "script",
18824		cache: true,
18825		async: false,
18826		global: false,
18827
18828		// Only evaluate the response if it is successful (gh-4126)
18829		// dataFilter is not invoked for failure responses, so using it instead
18830		// of the default converter is kludgy but it works.
18831		converters: {
18832			"text script": function() {}
18833		},
18834		dataFilter: function( response ) {
18835			jQuery.globalEval( response, options, doc );
18836		}
18837	} );
18838};
18839
18840
18841jQuery.fn.extend( {
18842	wrapAll: function( html ) {
18843		var wrap;
18844
18845		if ( this[ 0 ] ) {
18846			if ( isFunction( html ) ) {
18847				html = html.call( this[ 0 ] );
18848			}
18849
18850			// The elements to wrap the target around
18851			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
18852
18853			if ( this[ 0 ].parentNode ) {
18854				wrap.insertBefore( this[ 0 ] );
18855			}
18856
18857			wrap.map( function() {
18858				var elem = this;
18859
18860				while ( elem.firstElementChild ) {
18861					elem = elem.firstElementChild;
18862				}
18863
18864				return elem;
18865			} ).append( this );
18866		}
18867
18868		return this;
18869	},
18870
18871	wrapInner: function( html ) {
18872		if ( isFunction( html ) ) {
18873			return this.each( function( i ) {
18874				jQuery( this ).wrapInner( html.call( this, i ) );
18875			} );
18876		}
18877
18878		return this.each( function() {
18879			var self = jQuery( this ),
18880				contents = self.contents();
18881
18882			if ( contents.length ) {
18883				contents.wrapAll( html );
18884
18885			} else {
18886				self.append( html );
18887			}
18888		} );
18889	},
18890
18891	wrap: function( html ) {
18892		var htmlIsFunction = isFunction( html );
18893
18894		return this.each( function( i ) {
18895			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
18896		} );
18897	},
18898
18899	unwrap: function( selector ) {
18900		this.parent( selector ).not( "body" ).each( function() {
18901			jQuery( this ).replaceWith( this.childNodes );
18902		} );
18903		return this;
18904	}
18905} );
18906
18907
18908jQuery.expr.pseudos.hidden = function( elem ) {
18909	return !jQuery.expr.pseudos.visible( elem );
18910};
18911jQuery.expr.pseudos.visible = function( elem ) {
18912	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
18913};
18914
18915
18916
18917
18918jQuery.ajaxSettings.xhr = function() {
18919	try {
18920		return new window.XMLHttpRequest();
18921	} catch ( e ) {}
18922};
18923
18924var xhrSuccessStatus = {
18925
18926		// File protocol always yields status code 0, assume 200
18927		0: 200,
18928
18929		// Support: IE <=9 only
18930		// trac-1450: sometimes IE returns 1223 when it should be 204
18931		1223: 204
18932	},
18933	xhrSupported = jQuery.ajaxSettings.xhr();
18934
18935support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
18936support.ajax = xhrSupported = !!xhrSupported;
18937
18938jQuery.ajaxTransport( function( options ) {
18939	var callback, errorCallback;
18940
18941	// Cross domain only allowed if supported through XMLHttpRequest
18942	if ( support.cors || xhrSupported && !options.crossDomain ) {
18943		return {
18944			send: function( headers, complete ) {
18945				var i,
18946					xhr = options.xhr();
18947
18948				xhr.open(
18949					options.type,
18950					options.url,
18951					options.async,
18952					options.username,
18953					options.password
18954				);
18955
18956				// Apply custom fields if provided
18957				if ( options.xhrFields ) {
18958					for ( i in options.xhrFields ) {
18959						xhr[ i ] = options.xhrFields[ i ];
18960					}
18961				}
18962
18963				// Override mime type if needed
18964				if ( options.mimeType && xhr.overrideMimeType ) {
18965					xhr.overrideMimeType( options.mimeType );
18966				}
18967
18968				// X-Requested-With header
18969				// For cross-domain requests, seeing as conditions for a preflight are
18970				// akin to a jigsaw puzzle, we simply never set it to be sure.
18971				// (it can always be set on a per-request basis or even using ajaxSetup)
18972				// For same-domain requests, won't change header if already provided.
18973				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
18974					headers[ "X-Requested-With" ] = "XMLHttpRequest";
18975				}
18976
18977				// Set headers
18978				for ( i in headers ) {
18979					xhr.setRequestHeader( i, headers[ i ] );
18980				}
18981
18982				// Callback
18983				callback = function( type ) {
18984					return function() {
18985						if ( callback ) {
18986							callback = errorCallback = xhr.onload =
18987								xhr.onerror = xhr.onabort = xhr.ontimeout =
18988									xhr.onreadystatechange = null;
18989
18990							if ( type === "abort" ) {
18991								xhr.abort();
18992							} else if ( type === "error" ) {
18993
18994								// Support: IE <=9 only
18995								// On a manual native abort, IE9 throws
18996								// errors on any property access that is not readyState
18997								if ( typeof xhr.status !== "number" ) {
18998									complete( 0, "error" );
18999								} else {
19000									complete(
19001
19002										// File: protocol always yields status 0; see trac-8605, trac-14207
19003										xhr.status,
19004										xhr.statusText
19005									);
19006								}
19007							} else {
19008								complete(
19009									xhrSuccessStatus[ xhr.status ] || xhr.status,
19010									xhr.statusText,
19011
19012									// Support: IE <=9 only
19013									// IE9 has no XHR2 but throws on binary (trac-11426)
19014									// For XHR2 non-text, let the caller handle it (gh-2498)
19015									( xhr.responseType || "text" ) !== "text"  ||
19016									typeof xhr.responseText !== "string" ?
19017										{ binary: xhr.response } :
19018										{ text: xhr.responseText },
19019									xhr.getAllResponseHeaders()
19020								);
19021							}
19022						}
19023					};
19024				};
19025
19026				// Listen to events
19027				xhr.onload = callback();
19028				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
19029
19030				// Support: IE 9 only
19031				// Use onreadystatechange to replace onabort
19032				// to handle uncaught aborts
19033				if ( xhr.onabort !== undefined ) {
19034					xhr.onabort = errorCallback;
19035				} else {
19036					xhr.onreadystatechange = function() {
19037
19038						// Check readyState before timeout as it changes
19039						if ( xhr.readyState === 4 ) {
19040
19041							// Allow onerror to be called first,
19042							// but that will not handle a native abort
19043							// Also, save errorCallback to a variable
19044							// as xhr.onerror cannot be accessed
19045							window.setTimeout( function() {
19046								if ( callback ) {
19047									errorCallback();
19048								}
19049							} );
19050						}
19051					};
19052				}
19053
19054				// Create the abort callback
19055				callback = callback( "abort" );
19056
19057				try {
19058
19059					// Do send the request (this may raise an exception)
19060					xhr.send( options.hasContent && options.data || null );
19061				} catch ( e ) {
19062
19063					// trac-14683: Only rethrow if this hasn't been notified as an error yet
19064					if ( callback ) {
19065						throw e;
19066					}
19067				}
19068			},
19069
19070			abort: function() {
19071				if ( callback ) {
19072					callback();
19073				}
19074			}
19075		};
19076	}
19077} );
19078
19079
19080
19081
19082// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
19083jQuery.ajaxPrefilter( function( s ) {
19084	if ( s.crossDomain ) {
19085		s.contents.script = false;
19086	}
19087} );
19088
19089// Install script dataType
19090jQuery.ajaxSetup( {
19091	accepts: {
19092		script: "text/javascript, application/javascript, " +
19093			"application/ecmascript, application/x-ecmascript"
19094	},
19095	contents: {
19096		script: /\b(?:java|ecma)script\b/
19097	},
19098	converters: {
19099		"text script": function( text ) {
19100			jQuery.globalEval( text );
19101			return text;
19102		}
19103	}
19104} );
19105
19106// Handle cache's special case and crossDomain
19107jQuery.ajaxPrefilter( "script", function( s ) {
19108	if ( s.cache === undefined ) {
19109		s.cache = false;
19110	}
19111	if ( s.crossDomain ) {
19112		s.type = "GET";
19113	}
19114} );
19115
19116// Bind script tag hack transport
19117jQuery.ajaxTransport( "script", function( s ) {
19118
19119	// This transport only deals with cross domain or forced-by-attrs requests
19120	if ( s.crossDomain || s.scriptAttrs ) {
19121		var script, callback;
19122		return {
19123			send: function( _, complete ) {
19124				script = jQuery( "<script>" )
19125					.attr( s.scriptAttrs || {} )
19126					.prop( { charset: s.scriptCharset, src: s.url } )
19127					.on( "load error", callback = function( evt ) {
19128						script.remove();
19129						callback = null;
19130						if ( evt ) {
19131							complete( evt.type === "error" ? 404 : 200, evt.type );
19132						}
19133					} );
19134
19135				// Use native DOM manipulation to avoid our domManip AJAX trickery
19136				document.head.appendChild( script[ 0 ] );
19137			},
19138			abort: function() {
19139				if ( callback ) {
19140					callback();
19141				}
19142			}
19143		};
19144	}
19145} );
19146
19147
19148
19149
19150var oldCallbacks = [],
19151	rjsonp = /(=)\?(?=&|$)|\?\?/;
19152
19153// Default jsonp settings
19154jQuery.ajaxSetup( {
19155	jsonp: "callback",
19156	jsonpCallback: function() {
19157		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
19158		this[ callback ] = true;
19159		return callback;
19160	}
19161} );
19162
19163// Detect, normalize options and install callbacks for jsonp requests
19164jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
19165
19166	var callbackName, overwritten, responseContainer,
19167		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
19168			"url" :
19169			typeof s.data === "string" &&
19170				( s.contentType || "" )
19171					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
19172				rjsonp.test( s.data ) && "data"
19173		);
19174
19175	// Handle iff the expected data type is "jsonp" or we have a parameter to set
19176	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
19177
19178		// Get callback name, remembering preexisting value associated with it
19179		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
19180			s.jsonpCallback() :
19181			s.jsonpCallback;
19182
19183		// Insert callback into url or form data
19184		if ( jsonProp ) {
19185			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
19186		} else if ( s.jsonp !== false ) {
19187			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
19188		}
19189
19190		// Use data converter to retrieve json after script execution
19191		s.converters[ "script json" ] = function() {
19192			if ( !responseContainer ) {
19193				jQuery.error( callbackName + " was not called" );
19194			}
19195			return responseContainer[ 0 ];
19196		};
19197
19198		// Force json dataType
19199		s.dataTypes[ 0 ] = "json";
19200
19201		// Install callback
19202		overwritten = window[ callbackName ];
19203		window[ callbackName ] = function() {
19204			responseContainer = arguments;
19205		};
19206
19207		// Clean-up function (fires after converters)
19208		jqXHR.always( function() {
19209
19210			// If previous value didn't exist - remove it
19211			if ( overwritten === undefined ) {
19212				jQuery( window ).removeProp( callbackName );
19213
19214			// Otherwise restore preexisting value
19215			} else {
19216				window[ callbackName ] = overwritten;
19217			}
19218
19219			// Save back as free
19220			if ( s[ callbackName ] ) {
19221
19222				// Make sure that re-using the options doesn't screw things around
19223				s.jsonpCallback = originalSettings.jsonpCallback;
19224
19225				// Save the callback name for future use
19226				oldCallbacks.push( callbackName );
19227			}
19228
19229			// Call if it was a function and we have a response
19230			if ( responseContainer && isFunction( overwritten ) ) {
19231				overwritten( responseContainer[ 0 ] );
19232			}
19233
19234			responseContainer = overwritten = undefined;
19235		} );
19236
19237		// Delegate to script
19238		return "script";
19239	}
19240} );
19241
19242
19243
19244
19245// Support: Safari 8 only
19246// In Safari 8 documents created via document.implementation.createHTMLDocument
19247// collapse sibling forms: the second one becomes a child of the first one.
19248// Because of that, this security measure has to be disabled in Safari 8.
19249// https://bugs.webkit.org/show_bug.cgi?id=137337
19250support.createHTMLDocument = ( function() {
19251	var body = document.implementation.createHTMLDocument( "" ).body;
19252	body.innerHTML = "<form></form><form></form>";
19253	return body.childNodes.length === 2;
19254} )();
19255
19256
19257// Argument "data" should be string of html
19258// context (optional): If specified, the fragment will be created in this context,
19259// defaults to document
19260// keepScripts (optional): If true, will include scripts passed in the html string
19261jQuery.parseHTML = function( data, context, keepScripts ) {
19262	if ( typeof data !== "string" ) {
19263		return [];
19264	}
19265	if ( typeof context === "boolean" ) {
19266		keepScripts = context;
19267		context = false;
19268	}
19269
19270	var base, parsed, scripts;
19271
19272	if ( !context ) {
19273
19274		// Stop scripts or inline event handlers from being executed immediately
19275		// by using document.implementation
19276		if ( support.createHTMLDocument ) {
19277			context = document.implementation.createHTMLDocument( "" );
19278
19279			// Set the base href for the created document
19280			// so any parsed elements with URLs
19281			// are based on the document's URL (gh-2965)
19282			base = context.createElement( "base" );
19283			base.href = document.location.href;
19284			context.head.appendChild( base );
19285		} else {
19286			context = document;
19287		}
19288	}
19289
19290	parsed = rsingleTag.exec( data );
19291	scripts = !keepScripts && [];
19292
19293	// Single tag
19294	if ( parsed ) {
19295		return [ context.createElement( parsed[ 1 ] ) ];
19296	}
19297
19298	parsed = buildFragment( [ data ], context, scripts );
19299
19300	if ( scripts && scripts.length ) {
19301		jQuery( scripts ).remove();
19302	}
19303
19304	return jQuery.merge( [], parsed.childNodes );
19305};
19306
19307
19308/**
19309 * Load a url into a page
19310 */
19311jQuery.fn.load = function( url, params, callback ) {
19312	var selector, type, response,
19313		self = this,
19314		off = url.indexOf( " " );
19315
19316	if ( off > -1 ) {
19317		selector = stripAndCollapse( url.slice( off ) );
19318		url = url.slice( 0, off );
19319	}
19320
19321	// If it's a function
19322	if ( isFunction( params ) ) {
19323
19324		// We assume that it's the callback
19325		callback = params;
19326		params = undefined;
19327
19328	// Otherwise, build a param string
19329	} else if ( params && typeof params === "object" ) {
19330		type = "POST";
19331	}
19332
19333	// If we have elements to modify, make the request
19334	if ( self.length > 0 ) {
19335		jQuery.ajax( {
19336			url: url,
19337
19338			// If "type" variable is undefined, then "GET" method will be used.
19339			// Make value of this field explicit since
19340			// user can override it through ajaxSetup method
19341			type: type || "GET",
19342			dataType: "html",
19343			data: params
19344		} ).done( function( responseText ) {
19345
19346			// Save response for use in complete callback
19347			response = arguments;
19348
19349			self.html( selector ?
19350
19351				// If a selector was specified, locate the right elements in a dummy div
19352				// Exclude scripts to avoid IE 'Permission Denied' errors
19353				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
19354
19355				// Otherwise use the full result
19356				responseText );
19357
19358		// If the request succeeds, this function gets "data", "status", "jqXHR"
19359		// but they are ignored because response was set above.
19360		// If it fails, this function gets "jqXHR", "status", "error"
19361		} ).always( callback && function( jqXHR, status ) {
19362			self.each( function() {
19363				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
19364			} );
19365		} );
19366	}
19367
19368	return this;
19369};
19370
19371
19372
19373
19374jQuery.expr.pseudos.animated = function( elem ) {
19375	return jQuery.grep( jQuery.timers, function( fn ) {
19376		return elem === fn.elem;
19377	} ).length;
19378};
19379
19380
19381
19382
19383jQuery.offset = {
19384	setOffset: function( elem, options, i ) {
19385		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
19386			position = jQuery.css( elem, "position" ),
19387			curElem = jQuery( elem ),
19388			props = {};
19389
19390		// Set position first, in-case top/left are set even on static elem
19391		if ( position === "static" ) {
19392			elem.style.position = "relative";
19393		}
19394
19395		curOffset = curElem.offset();
19396		curCSSTop = jQuery.css( elem, "top" );
19397		curCSSLeft = jQuery.css( elem, "left" );
19398		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
19399			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
19400
19401		// Need to be able to calculate position if either
19402		// top or left is auto and position is either absolute or fixed
19403		if ( calculatePosition ) {
19404			curPosition = curElem.position();
19405			curTop = curPosition.top;
19406			curLeft = curPosition.left;
19407
19408		} else {
19409			curTop = parseFloat( curCSSTop ) || 0;
19410			curLeft = parseFloat( curCSSLeft ) || 0;
19411		}
19412
19413		if ( isFunction( options ) ) {
19414
19415			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
19416			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
19417		}
19418
19419		if ( options.top != null ) {
19420			props.top = ( options.top - curOffset.top ) + curTop;
19421		}
19422		if ( options.left != null ) {
19423			props.left = ( options.left - curOffset.left ) + curLeft;
19424		}
19425
19426		if ( "using" in options ) {
19427			options.using.call( elem, props );
19428
19429		} else {
19430			curElem.css( props );
19431		}
19432	}
19433};
19434
19435jQuery.fn.extend( {
19436
19437	// offset() relates an element's border box to the document origin
19438	offset: function( options ) {
19439
19440		// Preserve chaining for setter
19441		if ( arguments.length ) {
19442			return options === undefined ?
19443				this :
19444				this.each( function( i ) {
19445					jQuery.offset.setOffset( this, options, i );
19446				} );
19447		}
19448
19449		var rect, win,
19450			elem = this[ 0 ];
19451
19452		if ( !elem ) {
19453			return;
19454		}
19455
19456		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
19457		// Support: IE <=11 only
19458		// Running getBoundingClientRect on a
19459		// disconnected node in IE throws an error
19460		if ( !elem.getClientRects().length ) {
19461			return { top: 0, left: 0 };
19462		}
19463
19464		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
19465		rect = elem.getBoundingClientRect();
19466		win = elem.ownerDocument.defaultView;
19467		return {
19468			top: rect.top + win.pageYOffset,
19469			left: rect.left + win.pageXOffset
19470		};
19471	},
19472
19473	// position() relates an element's margin box to its offset parent's padding box
19474	// This corresponds to the behavior of CSS absolute positioning
19475	position: function() {
19476		if ( !this[ 0 ] ) {
19477			return;
19478		}
19479
19480		var offsetParent, offset, doc,
19481			elem = this[ 0 ],
19482			parentOffset = { top: 0, left: 0 };
19483
19484		// position:fixed elements are offset from the viewport, which itself always has zero offset
19485		if ( jQuery.css( elem, "position" ) === "fixed" ) {
19486
19487			// Assume position:fixed implies availability of getBoundingClientRect
19488			offset = elem.getBoundingClientRect();
19489
19490		} else {
19491			offset = this.offset();
19492
19493			// Account for the *real* offset parent, which can be the document or its root element
19494			// when a statically positioned element is identified
19495			doc = elem.ownerDocument;
19496			offsetParent = elem.offsetParent || doc.documentElement;
19497			while ( offsetParent &&
19498				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
19499				jQuery.css( offsetParent, "position" ) === "static" ) {
19500
19501				offsetParent = offsetParent.parentNode;
19502			}
19503			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
19504
19505				// Incorporate borders into its offset, since they are outside its content origin
19506				parentOffset = jQuery( offsetParent ).offset();
19507				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
19508				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
19509			}
19510		}
19511
19512		// Subtract parent offsets and element margins
19513		return {
19514			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
19515			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
19516		};
19517	},
19518
19519	// This method will return documentElement in the following cases:
19520	// 1) For the element inside the iframe without offsetParent, this method will return
19521	//    documentElement of the parent window
19522	// 2) For the hidden or detached element
19523	// 3) For body or html element, i.e. in case of the html node - it will return itself
19524	//
19525	// but those exceptions were never presented as a real life use-cases
19526	// and might be considered as more preferable results.
19527	//
19528	// This logic, however, is not guaranteed and can change at any point in the future
19529	offsetParent: function() {
19530		return this.map( function() {
19531			var offsetParent = this.offsetParent;
19532
19533			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
19534				offsetParent = offsetParent.offsetParent;
19535			}
19536
19537			return offsetParent || documentElement;
19538		} );
19539	}
19540} );
19541
19542// Create scrollLeft and scrollTop methods
19543jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
19544	var top = "pageYOffset" === prop;
19545
19546	jQuery.fn[ method ] = function( val ) {
19547		return access( this, function( elem, method, val ) {
19548
19549			// Coalesce documents and windows
19550			var win;
19551			if ( isWindow( elem ) ) {
19552				win = elem;
19553			} else if ( elem.nodeType === 9 ) {
19554				win = elem.defaultView;
19555			}
19556
19557			if ( val === undefined ) {
19558				return win ? win[ prop ] : elem[ method ];
19559			}
19560
19561			if ( win ) {
19562				win.scrollTo(
19563					!top ? val : win.pageXOffset,
19564					top ? val : win.pageYOffset
19565				);
19566
19567			} else {
19568				elem[ method ] = val;
19569			}
19570		}, method, val, arguments.length );
19571	};
19572} );
19573
19574// Support: Safari <=7 - 9.1, Chrome <=37 - 49
19575// Add the top/left cssHooks using jQuery.fn.position
19576// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
19577// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
19578// getComputedStyle returns percent when specified for top/left/bottom/right;
19579// rather than make the css module depend on the offset module, just check for it here
19580jQuery.each( [ "top", "left" ], function( _i, prop ) {
19581	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
19582		function( elem, computed ) {
19583			if ( computed ) {
19584				computed = curCSS( elem, prop );
19585
19586				// If curCSS returns percentage, fallback to offset
19587				return rnumnonpx.test( computed ) ?
19588					jQuery( elem ).position()[ prop ] + "px" :
19589					computed;
19590			}
19591		}
19592	);
19593} );
19594
19595
19596// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
19597jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
19598	jQuery.each( {
19599		padding: "inner" + name,
19600		content: type,
19601		"": "outer" + name
19602	}, function( defaultExtra, funcName ) {
19603
19604		// Margin is only for outerHeight, outerWidth
19605		jQuery.fn[ funcName ] = function( margin, value ) {
19606			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
19607				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
19608
19609			return access( this, function( elem, type, value ) {
19610				var doc;
19611
19612				if ( isWindow( elem ) ) {
19613
19614					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
19615					return funcName.indexOf( "outer" ) === 0 ?
19616						elem[ "inner" + name ] :
19617						elem.document.documentElement[ "client" + name ];
19618				}
19619
19620				// Get document width or height
19621				if ( elem.nodeType === 9 ) {
19622					doc = elem.documentElement;
19623
19624					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
19625					// whichever is greatest
19626					return Math.max(
19627						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
19628						elem.body[ "offset" + name ], doc[ "offset" + name ],
19629						doc[ "client" + name ]
19630					);
19631				}
19632
19633				return value === undefined ?
19634
19635					// Get width or height on the element, requesting but not forcing parseFloat
19636					jQuery.css( elem, type, extra ) :
19637
19638					// Set width or height on the element
19639					jQuery.style( elem, type, value, extra );
19640			}, type, chainable ? margin : undefined, chainable );
19641		};
19642	} );
19643} );
19644
19645
19646jQuery.each( [
19647	"ajaxStart",
19648	"ajaxStop",
19649	"ajaxComplete",
19650	"ajaxError",
19651	"ajaxSuccess",
19652	"ajaxSend"
19653], function( _i, type ) {
19654	jQuery.fn[ type ] = function( fn ) {
19655		return this.on( type, fn );
19656	};
19657} );
19658
19659
19660
19661
19662jQuery.fn.extend( {
19663
19664	bind: function( types, data, fn ) {
19665		return this.on( types, null, data, fn );
19666	},
19667	unbind: function( types, fn ) {
19668		return this.off( types, null, fn );
19669	},
19670
19671	delegate: function( selector, types, data, fn ) {
19672		return this.on( types, selector, data, fn );
19673	},
19674	undelegate: function( selector, types, fn ) {
19675
19676		// ( namespace ) or ( selector, types [, fn] )
19677		return arguments.length === 1 ?
19678			this.off( selector, "**" ) :
19679			this.off( types, selector || "**", fn );
19680	},
19681
19682	hover: function( fnOver, fnOut ) {
19683		return this
19684			.on( "mouseenter", fnOver )
19685			.on( "mouseleave", fnOut || fnOver );
19686	}
19687} );
19688
19689jQuery.each(
19690	( "blur focus focusin focusout resize scroll click dblclick " +
19691	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
19692	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
19693	function( _i, name ) {
19694
19695		// Handle event binding
19696		jQuery.fn[ name ] = function( data, fn ) {
19697			return arguments.length > 0 ?
19698				this.on( name, null, data, fn ) :
19699				this.trigger( name );
19700		};
19701	}
19702);
19703
19704
19705
19706
19707// Support: Android <=4.0 only
19708// Make sure we trim BOM and NBSP
19709// Require that the "whitespace run" starts from a non-whitespace
19710// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
19711var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
19712
19713// Bind a function to a context, optionally partially applying any
19714// arguments.
19715// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
19716// However, it is not slated for removal any time soon
19717jQuery.proxy = function( fn, context ) {
19718	var tmp, args, proxy;
19719
19720	if ( typeof context === "string" ) {
19721		tmp = fn[ context ];
19722		context = fn;
19723		fn = tmp;
19724	}
19725
19726	// Quick check to determine if target is callable, in the spec
19727	// this throws a TypeError, but we will just return undefined.
19728	if ( !isFunction( fn ) ) {
19729		return undefined;
19730	}
19731
19732	// Simulated bind
19733	args = slice.call( arguments, 2 );
19734	proxy = function() {
19735		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
19736	};
19737
19738	// Set the guid of unique handler to the same of original handler, so it can be removed
19739	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
19740
19741	return proxy;
19742};
19743
19744jQuery.holdReady = function( hold ) {
19745	if ( hold ) {
19746		jQuery.readyWait++;
19747	} else {
19748		jQuery.ready( true );
19749	}
19750};
19751jQuery.isArray = Array.isArray;
19752jQuery.parseJSON = JSON.parse;
19753jQuery.nodeName = nodeName;
19754jQuery.isFunction = isFunction;
19755jQuery.isWindow = isWindow;
19756jQuery.camelCase = camelCase;
19757jQuery.type = toType;
19758
19759jQuery.now = Date.now;
19760
19761jQuery.isNumeric = function( obj ) {
19762
19763	// As of jQuery 3.0, isNumeric is limited to
19764	// strings and numbers (primitives or objects)
19765	// that can be coerced to finite numbers (gh-2662)
19766	var type = jQuery.type( obj );
19767	return ( type === "number" || type === "string" ) &&
19768
19769		// parseFloat NaNs numeric-cast false positives ("")
19770		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
19771		// subtraction forces infinities to NaN
19772		!isNaN( obj - parseFloat( obj ) );
19773};
19774
19775jQuery.trim = function( text ) {
19776	return text == null ?
19777		"" :
19778		( text + "" ).replace( rtrim, "$1" );
19779};
19780
19781
19782
19783// Register as a named AMD module, since jQuery can be concatenated with other
19784// files that may use define, but not via a proper concatenation script that
19785// understands anonymous AMD modules. A named AMD is safest and most robust
19786// way to register. Lowercase jquery is used because AMD module names are
19787// derived from file names, and jQuery is normally delivered in a lowercase
19788// file name. Do this after creating the global so that if an AMD module wants
19789// to call noConflict to hide this version of jQuery, it will work.
19790
19791// Note that for maximum portability, libraries that are not jQuery should
19792// declare themselves as anonymous modules, and avoid setting a global if an
19793// AMD loader is present. jQuery is a special case. For more information, see
19794// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
19795
19796if ( true ) {
19797	!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {
19798		return jQuery;
19799	}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
19800		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
19801}
19802
19803
19804
19805
19806var
19807
19808	// Map over jQuery in case of overwrite
19809	_jQuery = window.jQuery,
19810
19811	// Map over the $ in case of overwrite
19812	_$ = window.$;
19813
19814jQuery.noConflict = function( deep ) {
19815	if ( window.$ === jQuery ) {
19816		window.$ = _$;
19817	}
19818
19819	if ( deep && window.jQuery === jQuery ) {
19820		window.jQuery = _jQuery;
19821	}
19822
19823	return jQuery;
19824};
19825
19826// Expose jQuery and $ identifiers, even in AMD
19827// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
19828// and CommonJS for browser emulators (trac-13566)
19829if ( typeof noGlobal === "undefined" ) {
19830	window.jQuery = window.$ = jQuery;
19831}
19832
19833
19834
19835
19836return jQuery;
19837} );
19838
19839
19840/***/ }),
19841
vendor: 141,088 bytes, lines 19842-19865
19842/***/ "../FigureBaseResources/node_modules/offset-analytics/dist/offset-analytics.umd.cjs":
19843/*!******************************************************************************************!*\
19844  !*** ../FigureBaseResources/node_modules/offset-analytics/dist/offset-analytics.umd.cjs ***!
19845  \******************************************************************************************/
19846/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
19847
19848(function(q,x){ true?x(exports):0})(this,function(q){"use strict";var Pu=Object.defineProperty;var oi=Object.getOwnPropertySymbols;var Cu=Object.prototype.hasOwnProperty,Ru=Object.prototype.propertyIsEnumerable;var rn=(q,x,F)=>x in q?Pu(q,x,{enumerable:!0,configurable:!0,writable:!0,value:F}):q[x]=F,on=(q,x)=>{for(var F in x||(x={}))Cu.call(x,F)&&rn(q,F,x[F]);if(oi)for(var F of oi(x))Ru.call(x,F)&&rn(q,F,x[F]);return q};var z=(q,x,F)=>rn(q,typeof x!="symbol"?x+"":x,F);var lt=(q,x,F)=>new Promise((he,Pe)=>{var ft=ae=>{try{ee(F.next(ae))}catch(Ce){Pe(Ce)}},$e=ae=>{try{ee(F.throw(ae))}catch(Ce){Pe(Ce)}},ee=ae=>ae.done?he(ae.value):Promise.resolve(ae.value).then(ft,$e);ee((F=F.apply(q,x)).next())});function x(e,t){return!e||Array.isArray(e)||typeof e!="object"||Object.keys(t).forEach(n=>{const r=t[n];r&&n in e&&(e[r]=e[n],delete e[n])}),e}const F="https://cantina.clientdev.io/api/";function he(e,t=null){if(t===null){if(typeof window!="undefined"){const n=window.localStorage.getItem(`offset-${e}`);if(n)return JSON.parse(n)}return null}else typeof window!="undefined"&&window.localStorage.setItem(`offset-${e}`,JSON.stringify(t))}function Pe(e){return["config"].some(t=>e.startsWith(t))}function ft(e){var n,r;const t=(n=window.OFFSET)==null?void 0:n.offsetLocalCantina;return V(t)?null:typeof t=="object"&&!Array.isArray(t)&&t!==null?e in t?t[e]:null:((r=window.OFFSET)==null?void 0:r.offsetLocalCantina)+e}let $e=!1,ee="";function ae(n){return lt(this,arguments,function*(e,t={}){V(ee)&&(ee=he("session-id"),V(ee)&&(ee=window.crypto.randomUUID(),he("session-id",ee)));function r(){return lt(this,null,function*(){var c;const i=on({Accept:"application/json","Content-Type":"application/json"},(t==null?void 0:t.headers)||{}),o=ft(e),a=!V(o)&&!$e,u=a?o:F+e;if(a||(i["X-API-Key"]=(c=window.OFFSET)==null?void 0:c.apiKey,V(ee)||(i["X-Session-Id"]=ee)),a){const l=Ce(e);if(l)return se(`Using inline data for endpoint ${e}`),l}const s=yield fetch(u,on({mode:a?"no-cors":"cors",credentials:"include",headers:i},t));if(s.status===404&&a)return $e=!0,r();if(s.status===200){const l=yield s.json();if(l!=null&&!V(l.error)&&l.error==="Authentication Required")throw he("session-id",""),ee="",new Error("Authentication Required");return l!=null&&V(l.error)&&Pe(e)&&he(e,l),l}throw new Error(`Request failed with status ${s.status} for endpoint ${e}`)})}if(Pe(e)){const i=he(e);if(i)return r(),i}return yield r()})}function Ce(e){const t=document.querySelector(`[data-offset-inline="${e}"]`);if(t)try{const n=t.content?t.content.textContent:t.textContent&&t.textContent!=""?t.textContent:"{}";return JSON.parse(n)}catch(n){se(`Error parsing inline data for endpoint ${e}:`,n)}return null}function V(e){return!e||e==null||e===""}function se(...e){var n;((n=window.OFFSET)==null?void 0:n.debug)&&console.log(...e)}const an={PageView:"pageview",CompleteRegistration:"sign_up",ViewCart:"view_cart",ViewItemList:"view_item_list",ViewItem:"view_item",AddToCart:"add_to_cart",RemoveFromCart:"remove_from_cart",InitiateCheckout:"begin_checkout",Purchase:"purchase"};function ai(e,t={}){let n=t?t.items||[]:[];return Array.isArray(n)||(n=Object.values(n)),e==="ViewItem"||e==="ViewCart"?t.items=n.map(r=>(r=x(r,{id:"item_id",name:"item_name",producer:"item_brand",blends:"item_variant",country:"item_category",region:"item_category2"}),"producer"in r&&(r.item_category3=r.producer),r)):(e==="AddToCart"||e==="RemoveFromCart"||e==="InitiateCheckout"||e==="Purchase")&&(t.items=n.map(r=>(r=x(r,{id:"item_id",name:"item_name"}),r))),t}class si{constructor(t=null,n=null){this.trackingId=t,this.offsetTrackingId=n,this.hasGtag()||this.loadGtag()}trackEvent(t,n){n=ai(t,n),an[t]&&(t=an[t]),V(t)?window.dataLayer.push(n):window.gtag("event",t,n)}hasGtag(){return typeof window.gtag=="function"}loadGtag(){const t=document.createElement("script");t.src=`https://www.googletagmanager.com/gtag/js?id=${this.trackingId}`,t.async=!0,document.head.appendChild(t),window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments)},window.gtag("js",new Date),this.trackingId&&window.gtag("config",this.trackingId),this.offsetTrackingId&&window.gtag("config",this.offsetTrackingId)}}const sn={ViewItem:"ViewContent"};function ui(e,t={}){return(e==="AddToCart"||e==="InitiateCheckout"||e==="Purchase")&&(t=x(t,{items:"contents"})),t}const ci=["AddPaymentInfo","AddToCart","AddToWishlist","CompleteRegistration","Contact","CustomizeProduct","Donate","FindLocation","InitiateCheckout","Lead","Purchase","Schedule","Search","StartTrial","SubmitApplication","Subscribe","ViewContent"];class li{constructor(t=null,n=null){this.trackingId=t,this.offsetTrackingId=n,this.hasFacebookPixel()||this.loadFacebookPixel()}trackEvent(t,n){n=ui(t,n),sn[t]&&(t=sn[t]),ci.includes(t)?window.fbq("track",t,n):window.fbq("trackCustom",t,n)}hasFacebookPixel(){var n;if(typeof window.fbq=="function")return!0;const t=document.getElementsByTagName("script");for(let r=0;r<t.length;r++)if((n=t[r])!=null&&n.src.includes("connect.facebook.net"))return!0;return!1}loadFacebookPixel(){const t=document.createElement("script");t.src=`https://connect.facebook.net/en_US/sdk.js?id=${this.trackingId}`,t.async=!0,document.head.appendChild(t),window.fbq=function(){window.fbq.callMethod?window.fbq.callMethod.apply(window.fbq,arguments):window.fbq.queue.push(arguments)},window.fbq.push=window.fbq,window.fbq.loaded=!0,window.fbq.version="2.0",window.fbq.queue=[],this.trackingId&&window.fbq("init",this.trackingId),this.offsetTrackingId&&window.fbq("init",this.offsetTrackingId)}}var dt=function(e,t){return dt=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i])},dt(e,t)};function B(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");dt(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var I=function(){return I=Object.assign||function(t){for(var n,r=1,i=arguments.length;r<i;r++){n=arguments[r];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},I.apply(this,arguments)};function vt(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function w(e,t,n,r){function i(o){return o instanceof n?o:new n(function(a){a(o)})}return new(n||(n=Promise))(function(o,a){function u(l){try{c(r.next(l))}catch(f){a(f)}}function s(l){try{c(r.throw(l))}catch(f){a(f)}}function c(l){l.done?o(l.value):i(l.value).then(u,s)}c((r=r.apply(e,t||[])).next())})}function b(e,t){var n={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,a;return a={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function u(c){return function(l){return s([c,l])}}function s(c){if(r)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(n=0)),n;)try{if(r=1,i&&(o=c[0]&2?i.return:c[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,c[1])).done)return o;switch(i=0,o&&(c=[c[0]&2,o.value]),c[0]){case 0:case 1:o=c;break;case 4:return n.label++,{value:c[1],done:!1};case 5:n.label++,i=c[1],c=[0];continue;case 7:c=n.ops.pop(),n.trys.pop();continue;default:if(o=n.trys,!(o=o.length>0&&o[o.length-1])&&(c[0]===6||c[0]===2)){n=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]<o[3])){n.label=c[1];break}if(c[0]===6&&n.label<o[1]){n.label=o[1],o=c;break}if(o&&n.label<o[2]){n.label=o[2],n.ops.push(c);break}o[2]&&n.ops.pop(),n.trys.pop();continue}c=t.call(e,n)}catch(l){c=[6,l],i=0}finally{r=o=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}function $(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function O(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)o.push(i.value)}catch(u){a={error:u}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(a)throw a.error}}return o}function K(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,o;r<i;r++)(o||!(r in t))&&(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))}function we(e){return this instanceof we?(this.v=e,this):new we(e)}function fi(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=n.apply(e,t||[]),i,o=[];return i={},u("next"),u("throw"),u("return",a),i[Symbol.asyncIterator]=function(){return this},i;function a(d){return function(m){return Promise.resolve(m).then(d,f)}}function u(d,m){r[d]&&(i[d]=function(y){return new Promise(function(_,v){o.push([d,y,_,v])>1||s(d,y)})},m&&(i[d]=m(i[d])))}function s(d,m){try{c(r[d](m))}catch(y){p(o[0][3],y)}}function c(d){d.value instanceof we?Promise.resolve(d.value.v).then(l,f):p(o[0][2],d)}function l(d){s("next",d)}function f(d){s("throw",d)}function p(d,m){d(m),o.shift(),o.length&&s(o[0][0],o[0][1])}}function di(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof $=="function"?$(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(o){n[o]=e[o]&&function(a){return new Promise(function(u,s){a=e[o](a),i(u,s,a.done,a.value)})}}function i(o,a,u,s){Promise.resolve(s).then(function(c){o({value:c,done:u})},a)}}typeof SuppressedError=="function"&&SuppressedError;var vi="Event tracked successfully",hi="Unexpected error occurred",pi="Event rejected due to exceeded retry count",gi="Event skipped due to optOut config",mi="Event rejected due to missing API key",yi="Invalid API key",bi="Client not initialized",U;(function(e){e.Unknown="unknown",e.Skipped="skipped",e.Success="success",e.RateLimit="rate_limit",e.PayloadTooLarge="payload_too_large",e.Invalid="invalid",e.Failed="failed",e.Timeout="Timeout",e.SystemError="SystemError"})(U||(U={}));var _e=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=U.Unknown),{event:e,code:t,message:n}},Ie=function(e){return e?(e^Math.random()*16>>e/4).toString(16):(String(1e7)+String(-1e3)+String(-4e3)+String(-8e3)+String(-1e11)).replace(/[018]/g,Ie)},Ei=function(){function e(t){this.client=t,this.queue=[],this.applying=!1,this.plugins=[]}return e.prototype.register=function(t,n){var r,i;return w(this,void 0,void 0,function(){return b(this,function(o){switch(o.label){case 0:return this.plugins.some(function(a){return a.name===t.name})?(n.loggerProvider.warn("Plugin with name ".concat(t.name," already exists, skipping registration")),[2]):(t.name===void 0&&(t.name=Ie(),n.loggerProvider.warn(`Plugin name is undefined. 
19849      Generating a random UUID for plugin name: `.concat(t.name,`. 
19850      Set a name for the plugin to prevent it from being added multiple times.`))),t.type=(r=t.type)!==null&&r!==void 0?r:"enrichment",[4,(i=t.setup)===null||i===void 0?void 0:i.call(t,n,this.client)]);case 1:return o.sent(),this.plugins.push(t),[2]}})})},e.prototype.deregister=function(t,n){var r;return w(this,void 0,void 0,function(){var i,o;return b(this,function(a){switch(a.label){case 0:return i=this.plugins.findIndex(function(u){return u.name===t}),i===-1?(n.loggerProvider.warn("Plugin with name ".concat(t," does not exist, skipping deregistration")),[2]):(o=this.plugins[i],this.plugins.splice(i,1),[4,(r=o.teardown)===null||r===void 0?void 0:r.call(o)]);case 1:return a.sent(),[2]}})})},e.prototype.reset=function(t){this.applying=!1;var n=this.plugins;n.map(function(r){var i;return(i=r.teardown)===null||i===void 0?void 0:i.call(r)}),this.plugins=[],this.client=t},e.prototype.push=function(t){var n=this;return new Promise(function(r){n.queue.push([t,r]),n.scheduleApply(0)})},e.prototype.scheduleApply=function(t){var n=this;this.applying||(this.applying=!0,setTimeout(function(){n.apply(n.queue.shift()).then(function(){n.applying=!1,n.queue.length>0&&n.scheduleApply(0)})},t))},e.prototype.apply=function(t){return w(this,void 0,void 0,function(){var n,r,i,o,a,u,s,d,m,c,l,f,p,d,m,y,_,v,h,g,E,T;return b(this,function(S){switch(S.label){case 0:if(!t)return[2];n=O(t,1),r=n[0],i=O(t,2),o=i[1],a=this.plugins.filter(function(k){return k.type==="before"}),S.label=1;case 1:S.trys.push([1,6,7,8]),u=$(a),s=u.next(),S.label=2;case 2:return s.done?[3,5]:(d=s.value,d.execute?[4,d.execute(I({},r))]:[3,4]);case 3:if(m=S.sent(),m===null)return o({event:r,code:0,message:""}),[2];r=m,S.label=4;case 4:return s=u.next(),[3,2];case 5:return[3,8];case 6:return c=S.sent(),h={error:c},[3,8];case 7:try{s&&!s.done&&(g=u.return)&&g.call(u)}finally{if(h)throw h.error}return[7];case 8:l=this.plugins.filter(function(k){return k.type==="enrichment"||k.type===void 0}),S.label=9;case 9:S.trys.push([9,14,15,16]),f=$(l),p=f.next(),S.label=10;case 10:return p.done?[3,13]:(d=p.value,d.execute?[4,d.execute(I({},r))]:[3,12]);case 11:if(m=S.sent(),m===null)return o({event:r,code:0,message:""}),[2];r=m,S.label=12;case 12:return p=f.next(),[3,10];case 13:return[3,16];case 14:return y=S.sent(),E={error:y},[3,16];case 15:try{p&&!p.done&&(T=f.return)&&T.call(f)}finally{if(E)throw E.error}return[7];case 16:return _=this.plugins.filter(function(k){return k.type==="destination"}),v=_.map(function(k){var P=I({},r);return k.execute(P).catch(function(R){return _e(P,0,String(R))})}),Promise.all(v).then(function(k){var P=O(k,1),R=P[0],W=R||_e(r,100,"Event not tracked, no destination plugins on the instance");o(W)}),[2]}})})},e.prototype.flush=function(){return w(this,void 0,void 0,function(){var t,n,r,i=this;return b(this,function(o){switch(o.label){case 0:return t=this.queue,this.queue=[],[4,Promise.all(t.map(function(a){return i.apply(a)}))];case 1:return o.sent(),n=this.plugins.filter(function(a){return a.type==="destination"}),r=n.map(function(a){return a.flush&&a.flush()}),[4,Promise.all(r)];case 2:return o.sent(),[2]}})})},e}(),un="-",je="AMP",wi="".concat(je,"_unsent"),cn="https://api2.amplitude.com/2/httpapi",_i="https://api.eu.amplitude.com/2/httpapi",Ii="https://api2.amplitude.com/batch",Ti="https://api.eu.amplitude.com/batch",Si=1e3,ht=function(e){if(Object.keys(e).length>Si)return!1;for(var t in e){var n=e[t];if(!ln(t,n))return!1}return!0},ln=function(e,t){var n,r;if(typeof e!="string")return!1;if(Array.isArray(t)){var i=!0;try{for(var o=$(t),a=o.next();!a.done;a=o.next()){var u=a.value;if(Array.isArray(u))return!1;if(typeof u=="object")i=i&&ht(u);else if(!["number","string"].includes(typeof u))return!1;if(!i)return!1}}catch(s){n={error:s}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}}else{if(t==null)return!1;if(typeof t=="object")return ht(t);if(!["number","string","boolean"].includes(typeof t))return!1}return!0},Re=function(){function e(){this._propertySet=new Set,this._properties={}}return e.prototype.getUserProperties=function(){return I({},this._properties)},e.prototype.set=function(t,n){return this._safeSet(j.SET,t,n),this},e.prototype.setOnce=function(t,n){return this._safeSet(j.SET_ONCE,t,n),this},e.prototype.append=function(t,n){return this._safeSet(j.APPEND,t,n),this},e.prototype.prepend=function(t,n){return this._safeSet(j.PREPEND,t,n),this},e.prototype.postInsert=function(t,n){return this._safeSet(j.POSTINSERT,t,n),this},e.prototype.preInsert=function(t,n){return this._safeSet(j.PREINSERT,t,n),this},e.prototype.remove=function(t,n){return this._safeSet(j.REMOVE,t,n),this},e.prototype.add=function(t,n){return this._safeSet(j.ADD,t,n),this},e.prototype.unset=function(t){return this._safeSet(j.UNSET,t,un),this},e.prototype.clearAll=function(){return this._properties={},this._properties[j.CLEAR_ALL]=un,this},e.prototype._safeSet=function(t,n,r){if(this._validate(t,n,r)){var i=this._properties[t];return i===void 0&&(i={},this._properties[t]=i),i[n]=r,this._propertySet.add(n),!0}return!1},e.prototype._validate=function(t,n,r){return this._properties[j.CLEAR_ALL]!==void 0||this._propertySet.has(n)?!1:t===j.ADD?typeof r=="number":t!==j.UNSET&&t!==j.REMOVE?ln(n,r):!0},e}(),j;(function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"})(j||(j={}));var fn;(function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"})(fn||(fn={}));var Te;(function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"})(Te||(Te={}));var Ai=function(e,t,n){var r=typeof e=="string"?{event_type:e}:e;return I(I(I({},r),n),t&&{event_properties:t})},dn=function(e,t){var n=I(I({},t),{event_type:Te.IDENTIFY,user_properties:e.getUserProperties()});return n},ki=function(e,t,n,r){var i,o=I(I({},r),{event_type:Te.GROUP_IDENTIFY,group_properties:n.getUserProperties(),groups:(i={},i[e]=t,i)});return o},Pi=function(e,t,n){var r,i=new Re;i.set(e,t);var o=I(I({},n),{event_type:Te.IDENTIFY,user_properties:i.getUserProperties(),groups:(r={},r[e]=t,r)});return o},Ci=function(e,t){return I(I({},t),{event_type:Te.REVENUE,event_properties:e.getEventProperties()})},Y=function(e){return{promise:e||Promise.resolve()}},Ri=function(){function e(t){t===void 0&&(t="$default"),this.initializing=!1,this.isReady=!1,this.q=[],this.dispatchQ=[],this.logEvent=this.track.bind(this),this.timeline=new Ei(this),this.name=t}return e.prototype._init=function(t){return w(this,void 0,void 0,function(){return b(this,function(n){switch(n.label){case 0:return this.config=t,this.timeline.reset(this),[4,this.runQueuedFunctions("q")];case 1:return n.sent(),this.isReady=!0,[2]}})})},e.prototype.runQueuedFunctions=function(t){return w(this,void 0,void 0,function(){var n,r,i,o,a,u,s,c;return b(this,function(l){switch(l.label){case 0:n=this[t],this[t]=[],l.label=1;case 1:l.trys.push([1,8,9,10]),r=$(n),i=r.next(),l.label=2;case 2:return i.done?[3,7]:(o=i.value,a=o(),a&&"promise"in a?[4,a.promise]:[3,4]);case 3:return l.sent(),[3,6];case 4:return[4,a];case 5:l.sent(),l.label=6;case 6:return i=r.next(),[3,2];case 7:return[3,10];case 8:return u=l.sent(),s={error:u},[3,10];case 9:try{i&&!i.done&&(c=r.return)&&c.call(r)}finally{if(s)throw s.error}return[7];case 10:return this[t].length?[4,this.runQueuedFunctions(t)]:[3,12];case 11:l.sent(),l.label=12;case 12:return[2]}})})},e.prototype.track=function(t,n,r){var i=Ai(t,n,r);return Y(this.dispatch(i))},e.prototype.identify=function(t,n){var r=dn(t,n);return Y(this.dispatch(r))},e.prototype.groupIdentify=function(t,n,r,i){var o=ki(t,n,r,i);return Y(this.dispatch(o))},e.prototype.setGroup=function(t,n,r){var i=Pi(t,n,r);return Y(this.dispatch(i))},e.prototype.revenue=function(t,n){var r=Ci(t,n);return Y(this.dispatch(r))},e.prototype.add=function(t){return this.isReady?this._addPlugin(t):(this.q.push(this._addPlugin.bind(this,t)),Y())},e.prototype._addPlugin=function(t){return Y(this.timeline.register(t,this.config))},e.prototype.remove=function(t){return this.isReady?this._removePlugin(t):(this.q.push(this._removePlugin.bind(this,t)),Y())},e.prototype._removePlugin=function(t){return Y(this.timeline.deregister(t,this.config))},e.prototype.dispatchWithCallback=function(t,n){if(!this.isReady)return n(_e(t,0,bi));this.process(t).then(n)},e.prototype.dispatch=function(t){return w(this,void 0,void 0,function(){var n=this;return b(this,function(r){return this.isReady?[2,this.process(t)]:[2,new Promise(function(i){n.dispatchQ.push(n.dispatchWithCallback.bind(n,t,i))})]})})},e.prototype.process=function(t){return w(this,void 0,void 0,function(){var i,n,r,i;return b(this,function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),this.config.optOut?[2,_e(t,0,gi)]:[4,this.timeline.push(t)];case 1:return i=o.sent(),i.code===200?this.config.loggerProvider.log(i.message):i.code===100?this.config.loggerProvider.warn(i.message):this.config.loggerProvider.error(i.message),[2,i];case 2:return n=o.sent(),r=String(n),this.config.loggerProvider.error(r),i=_e(t,0,r),[2,i];case 3:return[2]}})})},e.prototype.setOptOut=function(t){if(!this.isReady){this.q.push(this._setOptOut.bind(this,!!t));return}this._setOptOut(t)},e.prototype._setOptOut=function(t){this.config.optOut=!!t},e.prototype.flush=function(){return Y(this.timeline.flush())},e}(),Oi=function(){function e(){this.productId="",this.quantity=1,this.price=0}return e.prototype.setProductId=function(t){return this.productId=t,this},e.prototype.setQuantity=function(t){return t>0&&(this.quantity=t),this},e.prototype.setPrice=function(t){return this.price=t,this},e.prototype.setRevenueType=function(t){return this.revenueType=t,this},e.prototype.setCurrency=function(t){return this.currency=t,this},e.prototype.setRevenue=function(t){return this.revenue=t,this},e.prototype.setReceipt=function(t){return this.receipt=t,this},e.prototype.setReceiptSig=function(t){return this.receiptSig=t,this},e.prototype.setEventProperties=function(t){return ht(t)&&(this.properties=t),this},e.prototype.getEventProperties=function(){var t=this.properties?I({},this.properties):{};return t[re.REVENUE_PRODUCT_ID]=this.productId,t[re.REVENUE_QUANTITY]=this.quantity,t[re.REVENUE_PRICE]=this.price,t[re.REVENUE_TYPE]=this.revenueType,t[re.REVENUE_CURRENCY]=this.currency,t[re.REVENUE]=this.revenue,t[re.RECEIPT]=this.receipt,t[re.RECEIPT_SIG]=this.receiptSig,t},e}(),re;(function(e){e.REVENUE_PRODUCT_ID="$productId",e.REVENUE_QUANTITY="$quantity",e.REVENUE_PRICE="$price",e.REVENUE_TYPE="$revenueType",e.REVENUE_CURRENCY="$currency",e.REVENUE="$revenue",e.RECEIPT="$receipt",e.RECEIPT_SIG="$receiptSig"})(re||(re={}));var Li=function(e,t){var n=Math.max(t,1);return e.reduce(function(r,i,o){var a=Math.floor(o/n);return r[a]||(r[a]=[]),r[a].push(i),r},[])},Q;(function(e){e[e.None=0]="None",e[e.Error=1]="Error",e[e.Warn=2]="Warn",e[e.Verbose=3]="Verbose",e[e.Debug=4]="Debug"})(Q||(Q={}));var Ge="Amplitude Logger ",vn=function(){function e(){this.logLevel=Q.None}return e.prototype.disable=function(){this.logLevel=Q.None},e.prototype.enable=function(t){t===void 0&&(t=Q.Warn),this.logLevel=t},e.prototype.log=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.logLevel<Q.Verbose||console.log("".concat(Ge,"[Log]: ").concat(t.join(" ")))},e.prototype.warn=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.logLevel<Q.Warn||console.warn("".concat(Ge,"[Warn]: ").concat(t.join(" ")))},e.prototype.error=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.logLevel<Q.Error||console.error("".concat(Ge,"[Error]: ").concat(t.join(" ")))},e.prototype.debug=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this.logLevel<Q.Debug||console.log("".concat(Ge,"[Debug]: ").concat(t.join(" ")))},e}(),Be=function(){return{flushMaxRetries:12,flushQueueSize:200,flushIntervalMillis:1e4,instanceName:"$default_instance",logLevel:Q.Warn,loggerProvider:new vn,offline:!1,optOut:!1,serverUrl:cn,serverZone:"US",useBatch:!1}},xi=function(){function e(t){var n,r,i,o;this._optOut=!1;var a=Be();this.apiKey=t.apiKey,this.flushIntervalMillis=(n=t.flushIntervalMillis)!==null&&n!==void 0?n:a.flushIntervalMillis,this.flushMaxRetries=t.flushMaxRetries||a.flushMaxRetries,this.flushQueueSize=t.flushQueueSize||a.flushQueueSize,this.instanceName=t.instanceName||a.instanceName,this.loggerProvider=t.loggerProvider||a.loggerProvider,this.logLevel=(r=t.logLevel)!==null&&r!==void 0?r:a.logLevel,this.minIdLength=t.minIdLength,this.plan=t.plan,this.ingestionMetadata=t.ingestionMetadata,this.offline=t.offline!==void 0?t.offline:a.offline,this.optOut=(i=t.optOut)!==null&&i!==void 0?i:a.optOut,this.serverUrl=t.serverUrl,this.serverZone=t.serverZone||a.serverZone,this.storageProvider=t.storageProvider,this.transportProvider=t.transportProvider,this.useBatch=(o=t.useBatch)!==null&&o!==void 0?o:a.useBatch,this.loggerProvider.enable(this.logLevel);var u=hn(t.serverUrl,t.serverZone,t.useBatch);this.serverZone=u.serverZone,this.serverUrl=u.serverUrl}return Object.defineProperty(e.prototype,"optOut",{get:function(){return this._optOut},set:function(t){this._optOut=t},enumerable:!1,configurable:!0}),e}(),Ui=function(e,t){return e==="EU"?t?Ti:_i:t?Ii:cn},hn=function(e,t,n){if(e===void 0&&(e=""),t===void 0&&(t=Be().serverZone),n===void 0&&(n=Be().useBatch),e)return{serverUrl:e,serverZone:void 0};var r=["US","EU"].includes(t)?t:Be().serverZone;return{serverZone:r,serverUrl:Ui(r,n)}},pn=function(){function e(){this.sdk={metrics:{histogram:{}}}}return e.prototype.recordHistogram=function(t,n){this.sdk.metrics.histogram[t]=n},e}();function Di(e){return e instanceof Error?e.message:String(e)}function Ke(e){var t="";try{"body"in e&&(t=JSON.stringify(e.body,null,2))}catch(n){}return t}var Ni=function(){function e(){this.name="amplitude",this.type="destination",this.retryTimeout=1e3,this.throttleTimeout=3e4,this.storageKey="",this.scheduleId=null,this.scheduledTimeout=0,this.flushId=null,this.queue=[]}return e.prototype.setup=function(t){var n;return w(this,void 0,void 0,function(){var r,i=this;return b(this,function(o){switch(o.label){case 0:return this.config=t,this.storageKey="".concat(wi,"_").concat(this.config.apiKey.substring(0,10)),[4,(n=this.config.storageProvider)===null||n===void 0?void 0:n.get(this.storageKey)];case 1:return r=o.sent(),r&&r.length>0&&Promise.all(r.map(function(a){return i.execute(a)})).catch(),[2,Promise.resolve(void 0)]}})})},e.prototype.execute=function(t){var n=this;return t.insert_id||(t.insert_id=Ie()),new Promise(function(r){var i={event:t,attempts:0,callback:function(o){return r(o)},timeout:0};n.queue.push(i),n.schedule(n.config.flushIntervalMillis),n.saveEvents()})},e.prototype.removeEventsExceedFlushMaxRetries=function(t){var n=this;return t.filter(function(r){return r.attempts+=1,r.attempts<n.config.flushMaxRetries?!0:(n.fulfillRequest([r],500,pi),!1)})},e.prototype.scheduleEvents=function(t){var n=this;t.forEach(function(r){n.schedule(r.timeout===0?n.config.flushIntervalMillis:r.timeout)})},e.prototype.schedule=function(t){var n=this;if(!this.config.offline&&(this.scheduleId===null||this.scheduleId&&t>this.scheduledTimeout)){this.scheduleId&&clearTimeout(this.scheduleId),this.scheduledTimeout=t,this.scheduleId=setTimeout(function(){n.queue=n.queue.map(function(r){return r.timeout=0,r}),n.flush(!0)},t);return}},e.prototype.resetSchedule=function(){this.scheduleId=null,this.scheduledTimeout=0},e.prototype.flush=function(t){return t===void 0&&(t=!1),w(this,void 0,void 0,function(){var n,r,i,o=this;return b(this,function(a){switch(a.label){case 0:return this.config.offline?(this.resetSchedule(),this.config.loggerProvider.debug("Skipping flush while offline."),[2]):this.flushId?(this.resetSchedule(),this.config.loggerProvider.debug("Skipping flush because previous flush has not resolved."),[2]):(this.flushId=this.scheduleId,this.resetSchedule(),n=[],r=[],this.queue.forEach(function(u){return u.timeout===0?n.push(u):r.push(u)}),i=Li(n,this.config.flushQueueSize),[4,i.reduce(function(u,s){return w(o,void 0,void 0,function(){return b(this,function(c){switch(c.label){case 0:return[4,u];case 1:return c.sent(),[4,this.send(s,t)];case 2:return[2,c.sent()]}})})},Promise.resolve())]);case 1:return a.sent(),this.flushId=null,this.scheduleEvents(this.queue),[2]}})})},e.prototype.send=function(t,n){return n===void 0&&(n=!0),w(this,void 0,void 0,function(){var r,i,o,a,u;return b(this,function(s){switch(s.label){case 0:if(!this.config.apiKey)return[2,this.fulfillRequest(t,400,mi)];r={api_key:this.config.apiKey,events:t.map(function(c){var l=c.event;l.extra;var f=vt(l,["extra"]);return f}),options:{min_id_length:this.config.minIdLength},client_upload_time:new Date().toISOString(),request_metadata:this.config.requestMetadata},this.config.requestMetadata=new pn,s.label=1;case 1:return s.trys.push([1,3,,4]),i=hn(this.config.serverUrl,this.config.serverZone,this.config.useBatch).serverUrl,[4,this.config.transportProvider.send(i,r)];case 2:return o=s.sent(),o===null?(this.fulfillRequest(t,0,hi),[2]):n?(this.handleResponse(o,t),[3,4]):("body"in o?this.fulfillRequest(t,o.statusCode,"".concat(o.status,": ").concat(Ke(o))):this.fulfillRequest(t,o.statusCode,o.status),[2]);case 3:return a=s.sent(),u=Di(a),this.config.loggerProvider.error(u),this.handleResponse({status:U.Failed,statusCode:0},t),[3,4];case 4:return[2]}})})},e.prototype.handleResponse=function(t,n){var r=t.status;switch(r){case U.Success:{this.handleSuccessResponse(t,n);break}case U.Invalid:{this.handleInvalidResponse(t,n);break}case U.PayloadTooLarge:{this.handlePayloadTooLargeResponse(t,n);break}case U.RateLimit:{this.handleRateLimitResponse(t,n);break}default:{this.config.loggerProvider.warn(`{code: 0, error: "Status '`.concat(r,"' provided for ").concat(n.length,' events"}')),this.handleOtherResponse(n);break}}},e.prototype.handleSuccessResponse=function(t,n){this.fulfillRequest(n,t.statusCode,vi)},e.prototype.handleInvalidResponse=function(t,n){var r=this;if(t.body.missingField||t.body.error.startsWith(yi)){this.fulfillRequest(n,t.statusCode,t.body.error);return}var i=K(K(K(K([],O(Object.values(t.body.eventsWithInvalidFields)),!1),O(Object.values(t.body.eventsWithMissingFields)),!1),O(Object.values(t.body.eventsWithInvalidIdLengths)),!1),O(t.body.silencedEvents),!1).flat(),o=new Set(i),a=n.filter(function(s,c){if(o.has(c)){r.fulfillRequest([s],t.statusCode,t.body.error);return}return!0});a.length>0&&this.config.loggerProvider.warn(Ke(t));var u=this.removeEventsExceedFlushMaxRetries(a);this.scheduleEvents(u)},e.prototype.handlePayloadTooLargeResponse=function(t,n){if(n.length===1){this.fulfillRequest(n,t.statusCode,t.body.error);return}this.config.loggerProvider.warn(Ke(t)),this.config.flushQueueSize/=2;var r=this.removeEventsExceedFlushMaxRetries(n);this.scheduleEvents(r)},e.prototype.handleRateLimitResponse=function(t,n){var r=this,i=Object.keys(t.body.exceededDailyQuotaUsers),o=Object.keys(t.body.exceededDailyQuotaDevices),a=t.body.throttledEvents,u=new Set(i),s=new Set(o),c=new Set(a),l=n.filter(function(p,d){if(p.event.user_id&&u.has(p.event.user_id)||p.event.device_id&&s.has(p.event.device_id)){r.fulfillRequest([p],t.statusCode,t.body.error);return}return c.has(d)&&(p.timeout=r.throttleTimeout),!0});l.length>0&&this.config.loggerProvider.warn(Ke(t));var f=this.removeEventsExceedFlushMaxRetries(l);this.scheduleEvents(f)},e.prototype.handleOtherResponse=function(t){var n=this,r=t.map(function(o){return o.timeout=o.attempts*n.retryTimeout,o}),i=this.removeEventsExceedFlushMaxRetries(r);this.scheduleEvents(i)},e.prototype.fulfillRequest=function(t,n,r){this.removeEvents(t),t.forEach(function(i){return i.callback(_e(i.event,n,r))})},e.prototype.saveEvents=function(){if(this.config.storageProvider){var t=this.queue.map(function(n){return n.event});this.config.storageProvider.set(this.storageKey,t)}},e.prototype.removeEvents=function(t){this.queue=this.queue.filter(function(n){return!t.some(function(r){return r.event.insert_id===n.event.insert_id})}),this.saveEvents()},e}(),Mi=function(){function e(){}return e.prototype.getApplicationContext=function(){return{versionName:this.versionName,language:Fi(),platform:"Web",os:void 0,deviceModel:void 0}},e}(),Fi=function(){return typeof navigator!="undefined"&&(navigator.languages&&navigator.languages[0]||navigator.language)||""},qi=function(){function e(){this.queue=[]}return e.prototype.logEvent=function(t){this.receiver?this.receiver(t):this.queue.length<512&&this.queue.push(t)},e.prototype.setEventReceiver=function(t){this.receiver=t,this.queue.length>0&&(this.queue.forEach(function(n){t(n)}),this.queue=[])},e}(),ue=function(){return ue=Object.assign||function(t){for(var n,r=1,i=arguments.length;r<i;r++){n=arguments[r];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},ue.apply(this,arguments)};function He(e){var t=typeof Symbol=="function"&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function gn(e,t){var n=typeof Symbol=="function"&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,o=[],a;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)o.push(i.value)}catch(u){a={error:u}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(a)throw a.error}}return o}typeof SuppressedError=="function"&&SuppressedError;var We=function(e,t){var n,r,i=["string","number","boolean","undefined"],o=typeof e,a=typeof t;if(o!==a)return!1;try{for(var u=He(i),s=u.next();!s.done;s=u.next()){var c=s.value;if(c===o)return e===t}}catch(_){n={error:_}}finally{try{s&&!s.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}if(e==null&&t==null)return!0;if(e==null||t==null||e.length!==t.length)return!1;var l=Array.isArray(e),f=Array.isArray(t);if(l!==f)return!1;if(l&&f){for(var p=0;p<e.length;p++)if(!We(e[p],t[p]))return!1}else{var d=Object.keys(e).sort(),m=Object.keys(t).sort();if(!We(d,m))return!1;var y=!0;return Object.keys(e).forEach(function(_){We(e[_],t[_])||(y=!1)}),y}return!0},Vi="$set",$i="$unset",ji="$clearAll";Object.entries||(Object.entries=function(e){for(var t=Object.keys(e),n=t.length,r=new Array(n);n--;)r[n]=[t[n],e[t[n]]];return r});var Gi=function(){function e(){this.identity={userProperties:{}},this.listeners=new Set}return e.prototype.editIdentity=function(){var t=this,n=ue({},this.identity.userProperties),r=ue(ue({},this.identity),{userProperties:n});return{setUserId:function(i){return r.userId=i,this},setDeviceId:function(i){return r.deviceId=i,this},setUserProperties:function(i){return r.userProperties=i,this},setOptOut:function(i){return r.optOut=i,this},updateUserProperties:function(i){var o,a,u,s,c,l,f=r.userProperties||{};try{for(var p=He(Object.entries(i)),d=p.next();!d.done;d=p.next()){var m=gn(d.value,2),y=m[0],_=m[1];switch(y){case Vi:try{for(var v=(u=void 0,He(Object.entries(_))),h=v.next();!h.done;h=v.next()){var g=gn(h.value,2),E=g[0],T=g[1];f[E]=T}}catch(P){u={error:P}}finally{try{h&&!h.done&&(s=v.return)&&s.call(v)}finally{if(u)throw u.error}}break;case $i:try{for(var S=(c=void 0,He(Object.keys(_))),k=S.next();!k.done;k=S.next()){var E=k.value;delete f[E]}}catch(P){c={error:P}}finally{try{k&&!k.done&&(l=S.return)&&l.call(S)}finally{if(c)throw c.error}}break;case ji:f={};break}}}catch(P){o={error:P}}finally{try{d&&!d.done&&(a=p.return)&&a.call(p)}finally{if(o)throw o.error}}return r.userProperties=f,this},commit:function(){return t.setIdentity(r),this}}},e.prototype.getIdentity=function(){return ue({},this.identity)},e.prototype.setIdentity=function(t){var n=ue({},this.identity);this.identity=ue({},t),We(n,this.identity)||this.listeners.forEach(function(r){r(t)})},e.prototype.addIdentityListener=function(t){this.listeners.add(t)},e.prototype.removeIdentityListener=function(t){this.listeners.delete(t)},e}(),Oe=typeof globalThis!="undefined"?globalThis:typeof __webpack_require__.g!="undefined"?__webpack_require__.g:self,Bi=function(){function e(){this.identityStore=new Gi,this.eventBridge=new qi,this.applicationContextProvider=new Mi}return e.getInstance=function(t){return Oe.analyticsConnectorInstances||(Oe.analyticsConnectorInstances={}),Oe.analyticsConnectorInstances[t]||(Oe.analyticsConnectorInstances[t]=new e),Oe.analyticsConnectorInstances[t]},e}(),Le=function(e){return e===void 0&&(e="$default_instance"),Bi.getInstance(e)},Ki=function(e,t){Le(t).identityStore.editIdentity().setUserId(e).commit()},Hi=function(e,t){Le(t).identityStore.editIdentity().setDeviceId(e).commit()},Wi=function(){function e(){this.name="identity",this.type="before",this.identityStore=Le().identityStore}return e.prototype.execute=function(t){return w(this,void 0,void 0,function(){var n;return b(this,function(r){return n=t.user_properties,n&&this.identityStore.editIdentity().updateUserProperties(n).commit(),[2,t]})})},e.prototype.setup=function(t){return w(this,void 0,void 0,function(){return b(this,function(n){return t.instanceName&&(this.identityStore=Le(t.instanceName).identityStore),[2]})})},e}(),ie=function(){var e="ampIntegrationContext";if(typeof globalThis!="undefined"&&typeof globalThis[e]!="undefined")return globalThis[e];if(typeof globalThis!="undefined")return globalThis;if(typeof window!="undefined")return window;if(typeof self!="undefined")return self;if(typeof __webpack_require__.g!="undefined")return __webpack_require__.g},mn=function(e,t){t===void 0&&(t=Date.now());var n=Date.now(),r=n-t;return r>e},yn=function(e,t,n){return t===void 0&&(t=""),n===void 0&&(n=10),[je,t,e.substring(0,n)].filter(Boolean).join("_")},zi=function(e){return"".concat(je.toLowerCase(),"_").concat(e.substring(0,6))},Yi=function(){var e,t,n,r;if(typeof navigator=="undefined")return"";var i=navigator.userLanguage;return(r=(n=(t=(e=navigator.languages)===null||e===void 0?void 0:e[0])!==null&&t!==void 0?t:navigator.language)!==null&&n!==void 0?n:i)!==null&&r!==void 0?r:""},ze=function(){var e,t=ie();if(!(!((e=t==null?void 0:t.location)===null||e===void 0)&&e.search))return{};var n=t.location.search.substring(1).split("&").filter(Boolean),r=n.reduce(function(i,o){var a=o.split("=",2),u=bn(a[0]),s=bn(a[1]);return s&&(i[u]=s),i},{});return r},bn=function(e){e===void 0&&(e="");try{return decodeURIComponent(e)}catch(t){return""}},Xi=function(e){var t=new Error().stack||"";return t.split(`
19851`).slice(2+e).map(function(n){return n.trim()})},D=function(e){return function(){var t=I({},e.config),n=t.loggerProvider,r=t.logLevel;return{logger:n,logLevel:r}}},Qi=function(e,t){var n,r;t=t.replace(/\[(\w+)\]/g,".$1"),t=t.replace(/^\./,"");try{for(var i=$(t.split(".")),o=i.next();!o.done;o=i.next()){var a=o.value;if(a in e)e=e[a];else return}}catch(u){n={error:u}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return e},N=function(e,t){return function(){var n,r,i={};try{for(var o=$(t),a=o.next();!a.done;a=o.next()){var u=a.value;i[u]=Qi(e,u)}}catch(s){n={error:s}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i}},M=function(e,t,n,r,i){return i===void 0&&(i=null),function(){for(var o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var u=n(),s=u.logger,c=u.logLevel;if(c&&c<Q.Debug||!c||!s)return e.apply(i,o);var l={type:"invoke public method",name:t,args:o,stacktrace:Xi(1),time:{start:new Date().toISOString()},states:{}};r&&l.states&&(l.states.before=r());var f=e.apply(i,o);return f&&f.promise?f.promise.then(function(){r&&l.states&&(l.states.after=r()),l.time&&(l.time.end=new Date().toISOString()),s.debug(JSON.stringify(l,null,2))}):(r&&l.states&&(l.states.after=r()),l.time&&(l.time.end=new Date().toISOString()),s.debug(JSON.stringify(l,null,2))),f}},pt=function(){function e(){this.memoryStorage=new Map}return e.prototype.isEnabled=function(){return w(this,void 0,void 0,function(){return b(this,function(t){return[2,!0]})})},e.prototype.get=function(t){return w(this,void 0,void 0,function(){return b(this,function(n){return[2,this.memoryStorage.get(t)]})})},e.prototype.getRaw=function(t){return w(this,void 0,void 0,function(){var n;return b(this,function(r){switch(r.label){case 0:return[4,this.get(t)];case 1:return n=r.sent(),[2,n?JSON.stringify(n):void 0]}})})},e.prototype.set=function(t,n){return w(this,void 0,void 0,function(){return b(this,function(r){return this.memoryStorage.set(t,n),[2]})})},e.prototype.remove=function(t){return w(this,void 0,void 0,function(){return b(this,function(n){return this.memoryStorage.delete(t),[2]})})},e.prototype.reset=function(){return w(this,void 0,void 0,function(){return b(this,function(t){return this.memoryStorage.clear(),[2]})})},e}(),gt=function(){function e(t){this.options=I({},t)}return e.prototype.isEnabled=function(){return w(this,void 0,void 0,function(){var t,n,r;return b(this,function(i){switch(i.label){case 0:if(!ie())return[2,!1];e.testValue=String(Date.now()),t=new e(this.options),n="AMP_TEST",i.label=1;case 1:return i.trys.push([1,4,5,7]),[4,t.set(n,e.testValue)];case 2:return i.sent(),[4,t.get(n)];case 3:return r=i.sent(),[2,r===e.testValue];case 4:return i.sent(),[2,!1];case 5:return[4,t.remove(n)];case 6:return i.sent(),[7];case 7:return[2]}})})},e.prototype.get=function(t){var n;return w(this,void 0,void 0,function(){var r,i;return b(this,function(o){switch(o.label){case 0:return[4,this.getRaw(t)];case 1:if(r=o.sent(),!r)return[2,void 0];try{return i=(n=Zi(r))!==null&&n!==void 0?n:Ji(r),i===void 0?(console.error("Amplitude Logger [Error]: Failed to decode cookie value for key: ".concat(t,", value: ").concat(r)),[2,void 0]):[2,JSON.parse(i)]}catch(a){return console.error("Amplitude Logger [Error]: Failed to parse cookie value for key: ".concat(t,", value: ").concat(r)),[2,void 0]}// removed by dead control flow
19852}})})},e.prototype.getRaw=function(t){var n,r;return w(this,void 0,void 0,function(){var i,o,a;return b(this,function(u){return i=ie(),o=(r=(n=i==null?void 0:i.document)===null||n===void 0?void 0:n.cookie.split("; "))!==null&&r!==void 0?r:[],a=o.find(function(s){return s.indexOf(t+"=")===0}),a?[2,a.substring(t.length+1)]:[2,void 0]})})},e.prototype.set=function(t,n){var r;return w(this,void 0,void 0,function(){var i,o,a,u,s,c,l;return b(this,function(f){try{i=(r=this.options.expirationDays)!==null&&r!==void 0?r:0,o=n!==null?i:-1,a=void 0,o&&(u=new Date,u.setTime(u.getTime()+o*24*60*60*1e3),a=u),s="".concat(t,"=").concat(btoa(encodeURIComponent(JSON.stringify(n)))),a&&(s+="; expires=".concat(a.toUTCString())),s+="; path=/",this.options.domain&&(s+="; domain=".concat(this.options.domain)),this.options.secure&&(s+="; Secure"),this.options.sameSite&&(s+="; SameSite=".concat(this.options.sameSite)),c=ie(),c&&(c.document.cookie=s)}catch(p){l=p instanceof Error?p.message:String(p),console.error("Amplitude Logger [Error]: Failed to set cookie for key: ".concat(t,". Error: ").concat(l))}return[2]})})},e.prototype.remove=function(t){return w(this,void 0,void 0,function(){return b(this,function(n){switch(n.label){case 0:return[4,this.set(t,null)];case 1:return n.sent(),[2]}})})},e.prototype.reset=function(){return w(this,void 0,void 0,function(){return b(this,function(t){return[2]})})},e}(),Zi=function(e){try{return decodeURIComponent(atob(e))}catch(t){return}},Ji=function(e){try{return decodeURIComponent(atob(decodeURIComponent(e)))}catch(t){return}},eo=function(e,t,n){return n===void 0&&(n=10),[je,t,e.substring(0,n)].filter(Boolean).join("_")},Ye=function(){function e(){}return e.prototype.send=function(t,n){return Promise.resolve(null)},e.prototype.buildResponse=function(t){var n,r,i,o,a,u,s,c,l,f,p,d,m,y,_,v,h,g,E,T,S,k;if(typeof t!="object")return null;var P=t.code||0,R=this.buildStatus(P);switch(R){case U.Success:return{status:R,statusCode:P,body:{eventsIngested:(n=t.events_ingested)!==null&&n!==void 0?n:0,payloadSizeBytes:(r=t.payload_size_bytes)!==null&&r!==void 0?r:0,serverUploadTime:(i=t.server_upload_time)!==null&&i!==void 0?i:0}};case U.Invalid:return{status:R,statusCode:P,body:{error:(o=t.error)!==null&&o!==void 0?o:"",missingField:(a=t.missing_field)!==null&&a!==void 0?a:"",eventsWithInvalidFields:(u=t.events_with_invalid_fields)!==null&&u!==void 0?u:{},eventsWithMissingFields:(s=t.events_with_missing_fields)!==null&&s!==void 0?s:{},eventsWithInvalidIdLengths:(c=t.events_with_invalid_id_lengths)!==null&&c!==void 0?c:{},epsThreshold:(l=t.eps_threshold)!==null&&l!==void 0?l:0,exceededDailyQuotaDevices:(f=t.exceeded_daily_quota_devices)!==null&&f!==void 0?f:{},silencedDevices:(p=t.silenced_devices)!==null&&p!==void 0?p:[],silencedEvents:(d=t.silenced_events)!==null&&d!==void 0?d:[],throttledDevices:(m=t.throttled_devices)!==null&&m!==void 0?m:{},throttledEvents:(y=t.throttled_events)!==null&&y!==void 0?y:[]}};case U.PayloadTooLarge:return{status:R,statusCode:P,body:{error:(_=t.error)!==null&&_!==void 0?_:""}};case U.RateLimit:return{status:R,statusCode:P,body:{error:(v=t.error)!==null&&v!==void 0?v:"",epsThreshold:(h=t.eps_threshold)!==null&&h!==void 0?h:0,throttledDevices:(g=t.throttled_devices)!==null&&g!==void 0?g:{},throttledUsers:(E=t.throttled_users)!==null&&E!==void 0?E:{},exceededDailyQuotaDevices:(T=t.exceeded_daily_quota_devices)!==null&&T!==void 0?T:{},exceededDailyQuotaUsers:(S=t.exceeded_daily_quota_users)!==null&&S!==void 0?S:{},throttledEvents:(k=t.throttled_events)!==null&&k!==void 0?k:[]}};case U.Timeout:default:return{status:R,statusCode:P}}},e.prototype.buildStatus=function(t){return t>=200&&t<300?U.Success:t===429?U.RateLimit:t===413?U.PayloadTooLarge:t===408?U.Timeout:t>=400&&t<500?U.Invalid:t>=500?U.Failed:U.Unknown},e}(),to=function(e){B(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.send=function(n,r){return w(this,void 0,void 0,function(){var i,o,a;return b(this,function(u){switch(u.label){case 0:if(typeof fetch=="undefined")throw new Error("FetchTransport is not supported");return i={headers:{"Content-Type":"application/json",Accept:"*/*"},body:JSON.stringify(r),method:"POST"},[4,fetch(n,i)];case 1:return o=u.sent(),[4,o.text()];case 2:a=u.sent();try{return[2,this.buildResponse(JSON.parse(a))]}catch(s){return[2,this.buildResponse({code:o.status})]}// removed by dead control flow
19853}})})},t}(Ye),no=null,ro=["a","button","input","select","textarea","label","video","audio",'[contenteditable="true" i]',"[data-amp-default-track]",".amp-default-track"],io="data-amp-track-",oo=["div","span","h1","h2","h3","h4","h5","h6"],xe=function(e,t){return typeof e=="boolean"?e:(e==null?void 0:e[t])!==!1},En=function(e){return xe(e,"attribution")},ao=function(e){return xe(e,"fileDownloads")},so=function(e){return xe(e,"formInteractions")},wn=function(e){return xe(e,"pageViews")},_n=function(e){return xe(e,"sessions")},In=function(e){return typeof e=="boolean"?e:typeof e=="object"&&(e.elementInteractions===!0||typeof e.elementInteractions=="object")},uo=function(e){if(In(e.autocapture)&&typeof e.autocapture=="object"&&typeof e.autocapture.elementInteractions=="object")return e.autocapture.elementInteractions},co=function(e){var t=function(){return!1},n=void 0,r,i=e.pageCounter,o=wn(e.defaultTracking);return o&&(t=void 0,r=void 0,e.defaultTracking&&typeof e.defaultTracking=="object"&&e.defaultTracking.pageViews&&typeof e.defaultTracking.pageViews=="object"&&("trackOn"in e.defaultTracking.pageViews&&(t=e.defaultTracking.pageViews.trackOn),"trackHistoryChanges"in e.defaultTracking.pageViews&&(n=e.defaultTracking.pageViews.trackHistoryChanges),"eventType"in e.defaultTracking.pageViews&&e.defaultTracking.pageViews.eventType&&(r=e.defaultTracking.pageViews.eventType))),{trackOn:t,trackHistoryChanges:n,eventType:r,pageCounter:i}},lo=function(e){return En(e.defaultTracking)&&e.defaultTracking&&typeof e.defaultTracking=="object"&&e.defaultTracking.attribution&&typeof e.defaultTracking.attribution=="object"?I({},e.defaultTracking.attribution):{}},mt=function(e,t){for(var n=0;n<t.length;n++){var r=t[n],i=r.name,o=r.args,a=r.resolve,u=e&&e[i];if(typeof u=="function"){var s=u.apply(e,o);typeof a=="function"&&a(s==null?void 0:s.promise)}}return e},yt=function(e){var t=e;return t&&t._q!==void 0},Tn="2.12.2",fo="amplitude-ts",vo="Web",ho="$remote",po=function(){function e(){this.name="@amplitude/plugin-context-browser",this.type="before",this.library="".concat(fo,"/").concat(Tn),typeof navigator!="undefined"&&(this.userAgent=navigator.userAgent)}return e.prototype.setup=function(t){return this.config=t,Promise.resolve(void 0)},e.prototype.execute=function(t){var n,r;return w(this,void 0,void 0,function(){var i,o,a,u;return b(this,function(s){return i=new Date().getTime(),o=(n=this.config.lastEventId)!==null&&n!==void 0?n:-1,a=(r=t.event_id)!==null&&r!==void 0?r:o+1,this.config.lastEventId=a,t.time||(this.config.lastEventTime=i),u=I(I(I(I(I(I(I(I({user_id:this.config.userId,device_id:this.config.deviceId,session_id:this.config.sessionId,time:i},this.config.appVersion&&{app_version:this.config.appVersion}),this.config.trackingOptions.platform&&{platform:vo}),this.config.trackingOptions.language&&{language:Yi()}),this.config.trackingOptions.ipAddress&&{ip:ho}),{insert_id:Ie(),partner_id:this.config.partnerId,plan:this.config.plan}),this.config.ingestionMetadata&&{ingestion_metadata:{source_name:this.config.ingestionMetadata.sourceName,source_version:this.config.ingestionMetadata.sourceVersion}}),t),{event_id:a,library:this.library,user_agent:this.userAgent}),[2,u]})})},e}(),Sn=function(){function e(t){this.storage=t}return e.prototype.isEnabled=function(){return w(this,void 0,void 0,function(){var t,n,r,i;return b(this,function(o){switch(o.label){case 0:if(!this.storage)return[2,!1];t=String(Date.now()),n=new e(this.storage),r="AMP_TEST",o.label=1;case 1:return o.trys.push([1,4,5,7]),[4,n.set(r,t)];case 2:return o.sent(),[4,n.get(r)];case 3:return i=o.sent(),[2,i===t];case 4:return o.sent(),[2,!1];case 5:return[4,n.remove(r)];case 6:return o.sent(),[7];case 7:return[2]}})})},e.prototype.get=function(t){return w(this,void 0,void 0,function(){var n;return b(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),[4,this.getRaw(t)];case 1:return n=r.sent(),n?[2,JSON.parse(n)]:[2,void 0];case 2:return r.sent(),console.error("[Amplitude] Error: Could not get value from storage"),[2,void 0];case 3:return[2]}})})},e.prototype.getRaw=function(t){var n;return w(this,void 0,void 0,function(){return b(this,function(r){return[2,((n=this.storage)===null||n===void 0?void 0:n.getItem(t))||void 0]})})},e.prototype.set=function(t,n){var r;return w(this,void 0,void 0,function(){return b(this,function(i){try{(r=this.storage)===null||r===void 0||r.setItem(t,JSON.stringify(n))}catch(o){}return[2]})})},e.prototype.remove=function(t){var n;return w(this,void 0,void 0,function(){return b(this,function(r){try{(n=this.storage)===null||n===void 0||n.removeItem(t)}catch(i){}return[2]})})},e.prototype.reset=function(){var t;return w(this,void 0,void 0,function(){return b(this,function(n){try{(t=this.storage)===null||t===void 0||t.clear()}catch(r){}return[2]})})},e}(),Xe=1e3,An=function(e){B(t,e);function t(n){var r=this,i;return r=e.call(this,(i=ie())===null||i===void 0?void 0:i.localStorage)||this,r.loggerProvider=n==null?void 0:n.loggerProvider,r}return t.prototype.set=function(n,r){var i;return w(this,void 0,void 0,function(){var o;return b(this,function(a){switch(a.label){case 0:return Array.isArray(r)&&r.length>Xe?(o=r.length-Xe,[4,e.prototype.set.call(this,n,r.slice(0,Xe))]):[3,2];case 1:return a.sent(),(i=this.loggerProvider)===null||i===void 0||i.error("Failed to save ".concat(o," events because the queue length exceeded ").concat(Xe,".")),[3,4];case 2:return[4,e.prototype.set.call(this,n,r)];case 3:a.sent(),a.label=4;case 4:return[2]}})})},t}(Sn),go=function(e){B(t,e);function t(){var n;return e.call(this,(n=ie())===null||n===void 0?void 0:n.sessionStorage)||this}return t}(Sn),mo=function(e){B(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n.state={done:4},n}return t.prototype.send=function(n,r){return w(this,void 0,void 0,function(){var i=this;return b(this,function(o){return[2,new Promise(function(a,u){typeof XMLHttpRequest=="undefined"&&u(new Error("XHRTransport is not supported."));var s=new XMLHttpRequest;s.open("POST",n,!0),s.onreadystatechange=function(){if(s.readyState===i.state.done){var c=s.responseText;try{a(i.buildResponse(JSON.parse(c)))}catch(l){a(i.buildResponse({code:s.status}))}}},s.setRequestHeader("Content-Type","application/json"),s.setRequestHeader("Accept","*/*"),s.send(JSON.stringify(r))})]})})},t}(Ye),yo=function(e){B(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.send=function(n,r){return w(this,void 0,void 0,function(){var i=this;return b(this,function(o){return[2,new Promise(function(a,u){var s=ie();if(!(s!=null&&s.navigator.sendBeacon))throw new Error("SendBeaconTransport is not supported");try{var c=JSON.stringify(r),l=s.navigator.sendBeacon(n,JSON.stringify(r));return a(l?i.buildResponse({code:200,events_ingested:r.events.length,payload_size_bytes:c.length,server_upload_time:Date.now()}):i.buildResponse({code:500}))}catch(f){u(f)}})]})})},t}(Ye),bo=function(e,t,n){return n===void 0&&(n=!0),w(void 0,void 0,void 0,function(){var r,i,o,a,u,s,c,l,f;return b(this,function(p){switch(p.label){case 0:return r=zi(e),[4,t.getRaw(r)];case 1:return i=p.sent(),i?n?[4,t.remove(r)]:[3,3]:[2,{optOut:!1}];case 2:p.sent(),p.label=3;case 3:return o=O(i.split("."),6),a=o[0],u=o[1],s=o[2],c=o[3],l=o[4],f=o[5],[2,{deviceId:a,userId:Eo(u),sessionId:bt(c),lastEventId:bt(f),lastEventTime:bt(l),optOut:!!s}]}})})},bt=function(e){var t=parseInt(e,32);if(!isNaN(t))return t},Eo=function(e){if(!(!atob||!escape||!e))try{return decodeURIComponent(escape(atob(e)))}catch(t){return}},ne="[Amplitude]",kn="".concat(ne," Form Started"),wo="".concat(ne," Form Submitted"),_o="".concat(ne," File Downloaded"),Pn="session_start",Cn="session_end",Io="".concat(ne," File Extension"),To="".concat(ne," File Name"),So="".concat(ne," Link ID"),Ao="".concat(ne," Link Text"),ko="".concat(ne," Link URL"),Et="".concat(ne," Form ID"),wt="".concat(ne," Form Name"),_t="".concat(ne," Form Destination"),Qe="cookie",Po="US",Co=function(e){B(t,e);function t(n,r,i,o,a,u,s,c,l,f,p,d,m,y,_,v,h,g,E,T,S,k,P,R,W,G,X,de,ve,ye,be,qe,Ve,ke){i===void 0&&(i=new pt),o===void 0&&(o={domain:"",expiration:365,sameSite:"Lax",secure:!1,upgrade:!0}),c===void 0&&(c=1e3),l===void 0&&(l=5),f===void 0&&(f=30),p===void 0&&(p=Qe),v===void 0&&(v=new vn),h===void 0&&(h=Q.Warn),E===void 0&&(E=!1),T===void 0&&(T=!1),P===void 0&&(P=""),R===void 0&&(R=Po),G===void 0&&(G=30*60*1e3),X===void 0&&(X=new An({loggerProvider:v})),de===void 0&&(de={ipAddress:!0,language:!0,platform:!0}),ve===void 0&&(ve="fetch"),ye===void 0&&(ye=!1),be===void 0&&(be=!1);var A=e.call(this,{apiKey:n,storageProvider:X,transportProvider:Rn(ve)})||this;return A.apiKey=n,A.appVersion=r,A.cookieOptions=o,A.defaultTracking=a,A.autocapture=u,A.flushIntervalMillis=c,A.flushMaxRetries=l,A.flushQueueSize=f,A.identityStorage=p,A.ingestionMetadata=d,A.instanceName=m,A.loggerProvider=v,A.logLevel=h,A.minIdLength=g,A.offline=E,A.partnerId=S,A.plan=k,A.serverUrl=P,A.serverZone=R,A.sessionTimeout=G,A.storageProvider=X,A.trackingOptions=de,A.transport=ve,A.useBatch=ye,A.fetchRemoteConfig=be,A.version=Tn,A._optOut=!1,A._cookieStorage=i,A.deviceId=s,A.lastEventId=y,A.lastEventTime=_,A.optOut=T,A.sessionId=W,A.pageCounter=Ve,A.userId=qe,A.debugLogsEnabled=ke,A.loggerProvider.enable(ke?Q.Debug:A.logLevel),A}return Object.defineProperty(t.prototype,"cookieStorage",{get:function(){return this._cookieStorage},set:function(n){this._cookieStorage!==n&&(this._cookieStorage=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"deviceId",{get:function(){return this._deviceId},set:function(n){this._deviceId!==n&&(this._deviceId=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"userId",{get:function(){return this._userId},set:function(n){this._userId!==n&&(this._userId=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"sessionId",{get:function(){return this._sessionId},set:function(n){this._sessionId!==n&&(this._sessionId=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"optOut",{get:function(){return this._optOut},set:function(n){this._optOut!==n&&(this._optOut=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lastEventTime",{get:function(){return this._lastEventTime},set:function(n){this._lastEventTime!==n&&(this._lastEventTime=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lastEventId",{get:function(){return this._lastEventId},set:function(n){this._lastEventId!==n&&(this._lastEventId=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"pageCounter",{get:function(){return this._pageCounter},set:function(n){this._pageCounter!==n&&(this._pageCounter=n,this.updateStorage())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"debugLogsEnabled",{set:function(n){this._debugLogsEnabled!==n&&(this._debugLogsEnabled=n,this.updateStorage())},enumerable:!1,configurable:!0}),t.prototype.updateStorage=function(){var n={deviceId:this._deviceId,userId:this._userId,sessionId:this._sessionId,optOut:this._optOut,lastEventTime:this._lastEventTime,lastEventId:this._lastEventId,pageCounter:this._pageCounter,debugLogsEnabled:this._debugLogsEnabled};this.cookieStorage.set(yn(this.apiKey),n)},t}(xi),Ro=function(e,t,n){return t===void 0&&(t={}),w(void 0,void 0,void 0,function(){var r,i,o,a,u,s,c,l,f,p,d,m,y,_,v,h,g,E,T,S,k,P,R,W,G,X,de,ve,ye,be,qe,Ve,ke,A,zt,Yt,Xt,Qt,Zt,Jt,en,tn,nn;return b(this,function(Ee){switch(Ee.label){case 0:return r=t.identityStorage||Qe,T={},r===Qe?[3,1]:(o="",[3,5]);case 1:return(k=(S=t.cookieOptions)===null||S===void 0?void 0:S.domain)!==null&&k!==void 0?(a=k,[3,4]):[3,2];case 2:return[4,Lo()];case 3:a=Ee.sent(),Ee.label=4;case 4:o=a,Ee.label=5;case 5:return i=I.apply(void 0,[(T.domain=o,T.expiration=365,T.sameSite="Lax",T.secure=!1,T.upgrade=!0,T),t.cookieOptions]),u=Oo(t.identityStorage,i),[4,bo(e,u,(R=(P=t.cookieOptions)===null||P===void 0?void 0:P.upgrade)!==null&&R!==void 0?R:!0)];case 6:return s=Ee.sent(),[4,u.get(yn(e))];case 7:return c=Ee.sent(),l=ze(),f=(ve=(de=(X=(G=(W=t.deviceId)!==null&&W!==void 0?W:l.ampDeviceId)!==null&&G!==void 0?G:l.deviceId)!==null&&X!==void 0?X:c==null?void 0:c.deviceId)!==null&&de!==void 0?de:s.deviceId)!==null&&ve!==void 0?ve:Ie(),p=(ye=c==null?void 0:c.lastEventId)!==null&&ye!==void 0?ye:s.lastEventId,d=(be=c==null?void 0:c.lastEventTime)!==null&&be!==void 0?be:s.lastEventTime,m=(Ve=(qe=t.optOut)!==null&&qe!==void 0?qe:c==null?void 0:c.optOut)!==null&&Ve!==void 0?Ve:s.optOut,y=(ke=c==null?void 0:c.sessionId)!==null&&ke!==void 0?ke:s.sessionId,_=(zt=(A=t.userId)!==null&&A!==void 0?A:c==null?void 0:c.userId)!==null&&zt!==void 0?zt:s.userId,n.previousSessionDeviceId=(Yt=c==null?void 0:c.deviceId)!==null&&Yt!==void 0?Yt:s.deviceId,n.previousSessionUserId=(Xt=c==null?void 0:c.userId)!==null&&Xt!==void 0?Xt:s.userId,v={ipAddress:(Zt=(Qt=t.trackingOptions)===null||Qt===void 0?void 0:Qt.ipAddress)!==null&&Zt!==void 0?Zt:!0,language:(en=(Jt=t.trackingOptions)===null||Jt===void 0?void 0:Jt.language)!==null&&en!==void 0?en:!0,platform:(nn=(tn=t.trackingOptions)===null||tn===void 0?void 0:tn.platform)!==null&&nn!==void 0?nn:!0},h=c==null?void 0:c.pageCounter,g=c==null?void 0:c.debugLogsEnabled,t.autocapture!==void 0&&(t.defaultTracking=t.autocapture),E=new Co(e,t.appVersion,u,i,t.defaultTracking,t.autocapture,f,t.flushIntervalMillis,t.flushMaxRetries,t.flushQueueSize,r,t.ingestionMetadata,t.instanceName,p,d,t.loggerProvider,t.logLevel,t.minIdLength,t.offline,m,t.partnerId,t.plan,t.serverUrl,t.serverZone,y,t.sessionTimeout,t.storageProvider,v,t.transport,t.useBatch,t.fetchRemoteConfig,_,h,g),[4,E.storageProvider.isEnabled()];case 8:return Ee.sent()||(E.loggerProvider.warn("Storage provider ".concat(E.storageProvider.constructor.name," is not enabled. Falling back to MemoryStorage.")),E.storageProvider=new pt),[2,E]}})})},Oo=function(e,t){switch(e===void 0&&(e=Qe),t===void 0&&(t={}),e){case"localStorage":return new An;case"sessionStorage":return new go;case"none":return new pt;case"cookie":default:return new gt(I(I({},t),{expirationDays:t.expiration}))}},Rn=function(e){return e==="xhr"?new mo:e==="beacon"?new yo:new to},Lo=function(e){return w(void 0,void 0,void 0,function(){var t,n,r,i,o,o,a,u,s,c;return b(this,function(l){switch(l.label){case 0:return[4,new gt().isEnabled()];case 1:if(!l.sent()||typeof location=="undefined"||!location.hostname)return[2,""];for(t=location.hostname,n=t.split("."),r=[],i="AMP_TLDTEST",o=n.length-2;o>=0;--o)r.push(n.slice(o).join("."));o=0,l.label=2;case 2:return o<r.length?(a=r[o],u={domain:"."+a},s=new gt(u),[4,s.set(i,1)]):[3,7];case 3:return l.sent(),[4,s.get(i)];case 4:return c=l.sent(),c?[4,s.remove(i)]:[3,6];case 5:return l.sent(),[2,"."+a];case 6:return o++,[3,2];case 7:return[2,""]}})})},On=function(){var e="ampIntegrationContext";if(typeof globalThis!="undefined"&&typeof globalThis[e]!="undefined")return globalThis[e];if(typeof globalThis!="undefined")return globalThis;if(typeof window!="undefined")return window;if(typeof self!="undefined")return self;if(typeof __webpack_require__.g!="undefined")return __webpack_require__.g},Ln=function(){var e,t=On();if(!(!((e=t==null?void 0:t.location)===null||e===void 0)&&e.search))return{};var n=t.location.search.substring(1).split("&").filter(Boolean),r=n.reduce(function(i,o){var a=o.split("=",2),u=xn(a[0]),s=xn(a[1]);return s&&(i[u]=s),i},{});return r},xn=function(e){e===void 0&&(e="");try{return decodeURIComponent(e)}catch(t){return""}},xo="utm_campaign",Uo="utm_content",Do="utm_id",No="utm_medium",Mo="utm_source",Fo="utm_term",Un="dclid",Dn="fbclid",Nn="gbraid",Mn="gclid",Fn="ko_click_id",qn="li_fat_id",Vn="msclkid",$n="rtd_cid",jn="ttclid",Gn="twclid",Bn="wbraid",Kn={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rtd_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},qo=function(){function e(){}return e.prototype.parse=function(){return w(this,void 0,void 0,function(){return b(this,function(t){return[2,I(I(I(I({},Kn),this.getUtmParam()),this.getReferrer()),this.getClickIds())]})})},e.prototype.getUtmParam=function(){var t=Ln(),n=t[xo],r=t[Uo],i=t[Do],o=t[No],a=t[Mo],u=t[Fo];return{utm_campaign:n,utm_content:r,utm_id:i,utm_medium:o,utm_source:a,utm_term:u}},e.prototype.getReferrer=function(){var t,n,r={referrer:void 0,referring_domain:void 0};try{r.referrer=document.referrer||void 0,r.referring_domain=(n=(t=r.referrer)===null||t===void 0?void 0:t.split("/")[2])!==null&&n!==void 0?n:void 0}catch(i){}return r},e.prototype.getClickIds=function(){var t,n=Ln();return t={},t[Un]=n[Un],t[Dn]=n[Dn],t[Nn]=n[Nn],t[Mn]=n[Mn],t[Fn]=n[Fn],t[qn]=n[qn],t[Vn]=n[Vn],t[$n]=n[$n],t[jn]=n[jn],t[Gn]=n[Gn],t[Bn]=n[Bn],t},e}(),Ze;(function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"})(Ze||(Ze={}));var Hn;(function(e){e.REVENUE_PRODUCT_ID="$productId",e.REVENUE_QUANTITY="$quantity",e.REVENUE_PRICE="$price",e.REVENUE_TYPE="$revenueType",e.REVENUE_CURRENCY="$currency",e.REVENUE="$revenue"})(Hn||(Hn={}));var Wn;(function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"})(Wn||(Wn={}));var Je;(function(e){e.US="US",e.EU="EU"})(Je||(Je={}));var et;(function(e){e.Unknown="unknown",e.Skipped="skipped",e.Success="success",e.RateLimit="rate_limit",e.PayloadTooLarge="payload_too_large",e.Invalid="invalid",e.Failed="failed",e.Timeout="Timeout",e.SystemError="SystemError"})(et||(et={}));var Vo=function(e){var t={};for(var n in e){var r=e[n];r&&(t[n]=r)}return t},$o="[Amplitude] Page Viewed",jo=function(e){e===void 0&&(e={});var t,n=On(),r=void 0,i,o,a=e.trackOn,u=e.trackHistoryChanges,s=e.eventType,c=s===void 0?$o:s,l=function(v){var h=v;try{h=decodeURI(v)}catch(g){r==null||r.error("Malformed URI sequence: ",g)}return h},f=function(){return w(void 0,void 0,void 0,function(){var v,h,g;return b(this,function(E){switch(E.label){case 0:return v=l(typeof location!="undefined"&&location.href||""),g={event_type:c},h=[{}],[4,Go()];case 1:return[2,(g.event_properties=I.apply(void 0,[I.apply(void 0,h.concat([E.sent()])),{"[Amplitude] Page Domain":typeof location!="undefined"&&location.hostname||"","[Amplitude] Page Location":v,"[Amplitude] Page Path":typeof location!="undefined"&&l(location.pathname)||"","[Amplitude] Page Title":typeof document!="undefined"&&document.title||"","[Amplitude] Page URL":v.split("?")[0]}]),g)]}})})},p=function(){return typeof a=="undefined"||typeof a=="function"&&a()},d=typeof location!="undefined"?location.href:null,m=function(){return w(void 0,void 0,void 0,function(){var v,h,g,E;return b(this,function(T){switch(T.label){case 0:return v=location.href,h=Ko(u,v,d||"")&&p(),d=v,h?(r==null||r.log("Tracking page view event"),t!=null?[3,1]:[3,3]):[3,4];case 1:return E=(g=t).track,[4,f()];case 2:E.apply(g,[T.sent()]),T.label=3;case 3:T.label=4;case 4:return[2]}})})},y=function(){m()},_={name:"@amplitude/plugin-page-view-tracking-browser",type:"enrichment",setup:function(v,h){return w(void 0,void 0,void 0,function(){var g,E;return b(this,function(T){switch(T.label){case 0:return t=h,o=v,r=v.loggerProvider,r.log("Installing @amplitude/plugin-page-view-tracking-browser"),n&&(n.addEventListener("popstate",y),i=n.history.pushState,n.history.pushState=new Proxy(n.history.pushState,{apply:function(S,k,P){var R=O(P,3),W=R[0],G=R[1],X=R[2];S.apply(k,[W,G,X]),m()}})),p()?(r.log("Tracking page view event"),E=(g=t).track,[4,f()]):[3,2];case 1:E.apply(g,[T.sent()]),T.label=2;case 2:return[2]}})})},execute:function(v){return w(void 0,void 0,void 0,function(){var h;return b(this,function(g){switch(g.label){case 0:return a==="attribution"&&Bo(v)?(r==null||r.log("Enriching campaign event to page view event with campaign parameters"),[4,f()]):[3,2];case 1:h=g.sent(),v.event_type=h.event_type,v.event_properties=I(I({},v.event_properties),h.event_properties),g.label=2;case 2:return o&&v.event_type===c&&(o.pageCounter=o.pageCounter?o.pageCounter+1:1,v.event_properties=I(I({},v.event_properties),{"[Amplitude] Page Counter":o.pageCounter})),[2,v]}})})},teardown:function(){return w(void 0,void 0,void 0,function(){return b(this,function(v){return n&&(n.removeEventListener("popstate",y),i&&(n.history.pushState=i)),[2]})})}};return _},Go=function(){return w(void 0,void 0,void 0,function(){var e;return b(this,function(t){switch(t.label){case 0:return e=Vo,[4,new qo().parse()];case 1:return[2,e.apply(void 0,[t.sent()])]}})})},Bo=function(e){if(e.event_type==="$identify"&&e.user_properties){var t=e.user_properties,n=t[Ze.SET]||{},r=t[Ze.UNSET]||{},i=K(K([],O(Object.keys(n)),!1),O(Object.keys(r)),!1);return Object.keys(Kn).every(function(o){return i.includes(o)})}return!1},Ko=function(e,t,n){switch(e){case"pathOnly":{if(n=="")return!0;var r=new URL(t),i=new URL(n),o=r.origin+r.pathname,a=i.origin+i.pathname;return o!==a}default:return t!==n}},Ho=function(){var e,t=[],n=function(c,l,f){c.addEventListener(l,f),t.push({element:c,type:l,handler:f})},r=function(){t.forEach(function(c){var l=c.element,f=c.type,p=c.handler;l==null||l.removeEventListener(f,p)}),t=[]},i="@amplitude/plugin-form-interaction-tracking-browser",o="enrichment",a=function(c,l){return w(void 0,void 0,void 0,function(){var f,p;return b(this,function(d){return f=function(){if(!l){c.loggerProvider.warn("Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.");return}if(typeof document!="undefined"){var m=function(_){var v=!1;n(_,"change",function(){var h,g=zn(_);v||l.track(kn,(h={},h[Et]=Se(_.id),h[wt]=Se(_.name),h[_t]=g,h)),v=!0}),n(_,"submit",function(){var h,g,E=zn(_);v||l.track(kn,(h={},h[Et]=Se(_.id),h[wt]=Se(_.name),h[_t]=E,h)),l.track(wo,(g={},g[Et]=Se(_.id),g[wt]=Se(_.name),g[_t]=E,g)),v=!1})},y=Array.from(document.getElementsByTagName("form"));y.forEach(m),typeof MutationObserver!="undefined"&&(e=new MutationObserver(function(_){_.forEach(function(v){v.addedNodes.forEach(function(h){h.nodeName==="FORM"&&m(h),"querySelectorAll"in h&&typeof h.querySelectorAll=="function"&&Array.from(h.querySelectorAll("form")).map(m)})})}),e.observe(document.body,{subtree:!0,childList:!0}))}},document.readyState==="complete"?f():(p=ie(),p?p.addEventListener("load",f):c.loggerProvider.debug("Form interaction tracking is not installed because global is undefined.")),[2]})})},u=function(c){return w(void 0,void 0,void 0,function(){return b(this,function(l){return[2,c]})})},s=function(){return w(void 0,void 0,void 0,function(){return b(this,function(c){return e==null||e.disconnect(),r(),[2]})})};return{name:i,type:o,setup:a,execute:u,teardown:s}},Se=function(e){if(typeof e=="string")return e},zn=function(e){var t=e.getAttribute("action");try{t=new URL(encodeURI(t!=null?t:""),window.location.href).href}catch(n){}return t},Wo=function(){var e,t=[],n=function(c,l,f){c.addEventListener(l,f),t.push({element:c,type:l,handler:f})},r=function(){t.forEach(function(c){var l=c.element,f=c.type,p=c.handler;l==null||l.removeEventListener(f,p)}),t=[]},i="@amplitude/plugin-file-download-tracking-browser",o="enrichment",a=function(c,l){return w(void 0,void 0,void 0,function(){var f,p;return b(this,function(d){return f=function(){if(!l){c.loggerProvider.warn("File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.");return}if(typeof document!="undefined"){var m=function(v){var h;try{h=new URL(v.href,window.location.href)}catch(T){return}var g=y.exec(h.href),E=g==null?void 0:g[1];E&&n(v,"click",function(){var T;E&&l.track(_o,(T={},T[Io]=E,T[To]=h.pathname,T[So]=v.id,T[Ao]=v.text,T[ko]=v.href,T))})},y=/\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)(\?.+)?$/,_=Array.from(document.getElementsByTagName("a"));_.forEach(m),typeof MutationObserver!="undefined"&&(e=new MutationObserver(function(v){v.forEach(function(h){h.addedNodes.forEach(function(g){g.nodeName==="A"&&m(g),"querySelectorAll"in g&&typeof g.querySelectorAll=="function"&&Array.from(g.querySelectorAll("a")).map(m)})})}),e.observe(document.body,{subtree:!0,childList:!0}))}},document.readyState==="complete"?f():(p=ie(),p?p.addEventListener("load",f):c.loggerProvider.debug("File download tracking is not installed because global is undefined.")),[2]})})},u=function(c){return w(void 0,void 0,void 0,function(){return b(this,function(l){return[2,c]})})},s=function(){return w(void 0,void 0,void 0,function(){return b(this,function(c){return e==null||e.disconnect(),r(),[2]})})};return{name:i,type:o,setup:a,execute:u,teardown:s}},Yn=!1,zo=function(e){if(!(Yn||e.defaultTracking!==void 0)){var t=`\`options.defaultTracking\` is set to undefined. This implicitly configures your Amplitude instance to track Page Views, Sessions, File Downloads, and Form Interactions. You can suppress this warning by explicitly setting a value to \`options.defaultTracking\`. The value must either be a boolean, to enable and disable all default events, or an object, for advanced configuration. For example:
19854
19855amplitude.init(<YOUR_API_KEY>, {
19856  defaultTracking: true,
19857});
19858
19859Visit https://www.docs.developers.amplitude.com/data/sdks/browser-2/#tracking-default-events for more details.`;e.loggerProvider.warn(t),Yn=!0}},Yo=function(){var e="@amplitude/plugin-network-checker-browser",t="before",n=ie(),r=[],i=function(s,c){n&&(n.addEventListener(s,c),r.push({type:s,handler:c}))},o=function(){r.forEach(function(s){var c=s.type,l=s.handler;n&&n.removeEventListener(c,l)}),r=[]},a=function(s,c){return w(void 0,void 0,void 0,function(){return b(this,function(l){return typeof navigator=="undefined"?(s.loggerProvider.debug("Network connectivity checker plugin is disabled because navigator is not available."),s.offline=!1,[2]):(s.offline=!navigator.onLine,i("online",function(){s.loggerProvider.debug("Network connectivity changed to online."),s.offline=!1,setTimeout(function(){c.flush()},s.flushIntervalMillis)}),i("offline",function(){s.loggerProvider.debug("Network connectivity changed to offline."),s.offline=!0}),[2])})})},u=function(){return w(void 0,void 0,void 0,function(){return b(this,function(s){return o(),[2]})})};return{name:e,type:t,setup:a,teardown:u}},Xo="Network error occurred, remote config fetch failed",Qo="Remote config successfully fetched",Zo="Remote config fetch rejected due to exceeded retry count",Xn="Remote config fetch rejected due to timeout after 5 seconds",Qn="Unexpected error occurred",Jo="https://sr-client-cfg.amplitude.com/config",ea="https://sr-client-cfg.stag2.amplitude.com/config",ta="https://sr-client-cfg.eu.amplitude.com/config",na=function(){function e(t){var n=t.localConfig,r=t.configKeys,i=this;this.retryTimeout=1e3,this.attempts=0,this.sessionTargetingMatch=!1,this.metrics={},this.getRemoteConfig=function(o,a,u){return w(i,void 0,void 0,function(){var s,c,l;return b(this,function(f){switch(f.label){case 0:return s=Date.now(),[4,this.fetchWithTimeout(u)];case 1:return c=f.sent(),c&&(l=c.configs&&c.configs[o],l)?(this.metrics.fetchTimeAPISuccess=Date.now()-s,[2,l[a]]):(this.metrics.fetchTimeAPIFail=Date.now()-s,[2,void 0])}})})},this.fetchWithTimeout=function(o){return w(i,void 0,void 0,function(){var a,u,s;return b(this,function(c){switch(c.label){case 0:return a=new AbortController,u=setTimeout(function(){return a.abort()},5e3),[4,this.fetchRemoteConfig(a.signal,o)];case 1:return s=c.sent(),clearTimeout(u),[2,s]}})})},this.fetchRemoteConfig=function(o,a){return w(i,void 0,void 0,function(){var u,s,c,l,f,p,d,m,y,_,v,h,g;return b(this,function(E){switch(E.label){case 0:if(a===this.lastFetchedSessionId&&this.attempts>=this.localConfig.flushMaxRetries)return[2,this.completeRequest({err:Zo})];if(o.aborted)return[2,this.completeRequest({err:Xn})];a!==this.lastFetchedSessionId&&(this.lastFetchedSessionId=a,this.attempts=0),E.label=1;case 1:E.trys.push([1,3,,4]),u=new URLSearchParams({api_key:this.localConfig.apiKey});try{for(s=$(this.configKeys),c=s.next();!c.done;c=s.next())l=c.value,u.append("config_keys",l)}catch(T){v={error:T}}finally{try{c&&!c.done&&(h=s.return)&&h.call(s)}finally{if(v)throw v.error}}return a&&u.set("session_id",String(a)),f={headers:{Accept:"*/*"},method:"GET"},p="".concat(this.getServerUrl(),"?").concat(u.toString()),this.attempts+=1,[4,fetch(p,I(I({},f),{signal:o}))];case 2:if(d=E.sent(),d===null)return[2,this.completeRequest({err:Qn})];switch(m=new Ye().buildStatus(d.status),m){case et.Success:return this.attempts=0,[2,this.parseAndStoreConfig(d)];case et.Failed:return[2,this.retryFetch(o,a)];default:return[2,this.completeRequest({err:Xo})]}case 3:return y=E.sent(),_=y,o.aborted?[2,this.completeRequest({err:Xn})]:[2,this.completeRequest({err:(g=_.message)!==null&&g!==void 0?g:Qn})];case 4:return[2]}})})},this.retryFetch=function(o,a){return w(i,void 0,void 0,function(){var u=this;return b(this,function(s){switch(s.label){case 0:return[4,new Promise(function(c){return setTimeout(c,u.attempts*u.retryTimeout)})];case 1:return s.sent(),[2,this.fetchRemoteConfig(o,a)]}})})},this.parseAndStoreConfig=function(o){return w(i,void 0,void 0,function(){var a;return b(this,function(u){switch(u.label){case 0:return[4,o.json()];case 1:return a=u.sent(),this.completeRequest({success:Qo}),[2,a]}})})},this.localConfig=n,this.configKeys=r}return e.prototype.getServerUrl=function(){return this.localConfig.serverZone===Je.STAGING?ea:this.localConfig.serverZone===Je.EU?ta:Jo},e.prototype.completeRequest=function(t){var n=t.err,r=t.success;if(n)throw new Error(n);r&&this.localConfig.loggerProvider.log(r)},e}(),ra=function(e){var t=e.localConfig,n=e.configKeys;return w(void 0,void 0,void 0,function(){return b(this,function(r){return[2,new na({localConfig:t,configKeys:n})]})})},ia=ra,oa=function(){function e(t){this.config=t,this.config.loggerProvider.debug("Local configuration before merging with remote config",JSON.stringify(this.config,null,2))}return e.prototype.initialize=function(){return w(this,void 0,void 0,function(){var t;return b(this,function(n){switch(n.label){case 0:return t=this,[4,ia({localConfig:this.config,configKeys:["analyticsSDK"]})];case 1:return t.remoteConfigFetch=n.sent(),[2]}})})},e.prototype.generateJoinedConfig=function(){var t,n,r,i;return w(this,void 0,void 0,function(){var o,a,u;return b(this,function(s){switch(s.label){case 0:return s.trys.push([0,3,,4]),a=this.remoteConfigFetch,a?[4,this.remoteConfigFetch.getRemoteConfig("analyticsSDK","browserSDK",this.config.sessionId)]:[3,2];case 1:a=s.sent(),s.label=2;case 2:return o=a,this.config.loggerProvider.debug("Remote configuration:",JSON.stringify(o,null,2)),o&&"autocapture"in o&&(typeof o.autocapture=="boolean"&&(this.config.autocapture=o.autocapture),typeof o.autocapture=="object"&&(this.config.autocapture===void 0&&(this.config.autocapture=o.autocapture),typeof this.config.autocapture=="boolean"&&(this.config.autocapture=I({attribution:this.config.autocapture,fileDownloads:this.config.autocapture,formInteractions:this.config.autocapture,pageViews:this.config.autocapture,sessions:this.config.autocapture,elementInteractions:this.config.autocapture},o.autocapture)),typeof this.config.autocapture=="object"&&(this.config.autocapture=I(I({},this.config.autocapture),o.autocapture))),this.config.defaultTracking=this.config.autocapture),this.config.loggerProvider.debug("Joined configuration: ",JSON.stringify(this.config,null,2)),(t=(i=this.config).requestMetadata)!==null&&t!==void 0||(i.requestMetadata=new pn),!((n=this.remoteConfigFetch)===null||n===void 0)&&n.metrics.fetchTimeAPISuccess&&this.config.requestMetadata.recordHistogram("remote_config_fetch_time_API_success",this.remoteConfigFetch.metrics.fetchTimeAPISuccess),!((r=this.remoteConfigFetch)===null||r===void 0)&&r.metrics.fetchTimeAPIFail&&this.config.requestMetadata.recordHistogram("remote_config_fetch_time_API_fail",this.remoteConfigFetch.metrics.fetchTimeAPIFail),[3,4];case 3:return u=s.sent(),this.config.loggerProvider.error("Failed to fetch remote configuration because of error: ",u),[3,4];case 4:return[2,this.config]}})})},e}(),aa=function(e){return w(void 0,void 0,void 0,function(){var t;return b(this,function(n){switch(n.label){case 0:return t=new oa(e),[4,t.initialize()];case 1:return n.sent(),[2,t]}})})},sa="@amplitude/plugin-autocapture-browser",It="[Amplitude] Element Clicked",ua="[Amplitude] Element Changed",ca="[Amplitude] Element ID",la="[Amplitude] Element Class",Zn="[Amplitude] Element Tag",Jn="[Amplitude] Element Text",fa="[Amplitude] Element Hierarchy",da="[Amplitude] Element Href",va="[Amplitude] Element Position Left",ha="[Amplitude] Element Position Top",pa="[Amplitude] Element Aria Label",ga="[Amplitude] Element Attributes",ma="[Amplitude] Element Parent Label",er="[Amplitude] Page URL",ya="[Amplitude] Page Title",ba="[Amplitude] Viewport Height",Ea="[Amplitude] Viewport Width",tt="https://app.amplitude.com",wa="https://app.eu.amplitude.com",_a="https://apps.stag2.amplitude.com",Ia={US:tt,EU:wa,STAGING:_a},Ta="https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz",Sa="amp-visual-tagging-selector-highlight";function L(e){return typeof e=="function"}function Tt(e){var t=function(r){Error.call(r),r.stack=new Error().stack},n=e(t);return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}var St=Tt(function(e){return function(n){e(this),this.message=n?n.length+` errors occurred during unsubscription:
19860`+n.map(function(r,i){return i+1+") "+r.toString()}).join(`
19861  `):"",this.name="UnsubscriptionError",this.errors=n}});function nt(e,t){if(e){var n=e.indexOf(t);0<=n&&e.splice(n,1)}}var Ue=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,n,r,i,o;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var u=$(a),s=u.next();!s.done;s=u.next()){var c=s.value;c.remove(this)}}catch(y){t={error:y}}finally{try{s&&!s.done&&(n=u.return)&&n.call(u)}finally{if(t)throw t.error}}else a.remove(this);var l=this.initialTeardown;if(L(l))try{l()}catch(y){o=y instanceof St?y.errors:[y]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var p=$(f),d=p.next();!d.done;d=p.next()){var m=d.value;try{rr(m)}catch(y){o=o!=null?o:[],y instanceof St?o=K(K([],O(o)),O(y.errors)):o.push(y)}}}catch(y){r={error:y}}finally{try{d&&!d.done&&(i=p.return)&&i.call(p)}finally{if(r)throw r.error}}}if(o)throw new St(o)}},e.prototype.add=function(t){var n;if(t&&t!==this)if(this.closed)rr(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(n=this._finalizers)!==null&&n!==void 0?n:[]).push(t)}},e.prototype._hasParent=function(t){var n=this._parentage;return n===t||Array.isArray(n)&&n.includes(t)},e.prototype._addParent=function(t){var n=this._parentage;this._parentage=Array.isArray(n)?(n.push(t),n):n?[n,t]:t},e.prototype._removeParent=function(t){var n=this._parentage;n===t?this._parentage=null:Array.isArray(n)&&nt(n,t)},e.prototype.remove=function(t){var n=this._finalizers;n&&nt(n,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}(),tr=Ue.EMPTY;function nr(e){return e instanceof Ue||e&&"closed"in e&&L(e.remove)&&L(e.add)&&L(e.unsubscribe)}function rr(e){L(e)?e():e.unsubscribe()}var ir={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},or={setTimeout:function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];return setTimeout.apply(void 0,K([e,t],O(n)))},clearTimeout:function(e){var t=or.delegate;return((t==null?void 0:t.clearTimeout)||clearTimeout)(e)},delegate:void 0};function ar(e){or.setTimeout(function(){throw e})}function At(){}function rt(e){e()}var kt=function(e){B(t,e);function t(n){var r=e.call(this)||this;return r.isStopped=!1,n?(r.destination=n,nr(n)&&n.add(r)):r.destination=Ca,r}return t.create=function(n,r,i){return new De(n,r,i)},t.prototype.next=function(n){this.isStopped||this._next(n)},t.prototype.error=function(n){this.isStopped||(this.isStopped=!0,this._error(n))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(n){this.destination.next(n)},t.prototype._error=function(n){try{this.destination.error(n)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t}(Ue),Aa=Function.prototype.bind;function Pt(e,t){return Aa.call(e,t)}var ka=function(){function e(t){this.partialObserver=t}return e.prototype.next=function(t){var n=this.partialObserver;if(n.next)try{n.next(t)}catch(r){it(r)}},e.prototype.error=function(t){var n=this.partialObserver;if(n.error)try{n.error(t)}catch(r){it(r)}else it(t)},e.prototype.complete=function(){var t=this.partialObserver;if(t.complete)try{t.complete()}catch(n){it(n)}},e}(),De=function(e){B(t,e);function t(n,r,i){var o=e.call(this)||this,a;if(L(n)||!n)a={next:n!=null?n:void 0,error:r!=null?r:void 0,complete:i!=null?i:void 0};else{var u;o&&ir.useDeprecatedNextContext?(u=Object.create(n),u.unsubscribe=function(){return o.unsubscribe()},a={next:n.next&&Pt(n.next,u),error:n.error&&Pt(n.error,u),complete:n.complete&&Pt(n.complete,u)}):a=n}return o.destination=new ka(a),o}return t}(kt);function it(e){ar(e)}function Pa(e){throw e}var Ca={closed:!0,next:At,error:Pa,complete:At},Ct=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}();function sr(e){return e}function Ra(e){return e.length===0?sr:e.length===1?e[0]:function(n){return e.reduce(function(r,i){return i(r)},n)}}var H=function(){function e(t){t&&(this._subscribe=t)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(t,n,r){var i=this,o=La(t)?t:new De(t,n,r);return rt(function(){var a=i,u=a.operator,s=a.source;o.add(u?u.call(o,s):s?i._subscribe(o):i._trySubscribe(o))}),o},e.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(n){t.error(n)}},e.prototype.forEach=function(t,n){var r=this;return n=ur(n),new n(function(i,o){var a=new De({next:function(u){try{t(u)}catch(s){o(s),a.unsubscribe()}},error:o,complete:i});r.subscribe(a)})},e.prototype._subscribe=function(t){var n;return(n=this.source)===null||n===void 0?void 0:n.subscribe(t)},e.prototype[Ct]=function(){return this},e.prototype.pipe=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return Ra(t)(this)},e.prototype.toPromise=function(t){var n=this;return t=ur(t),new t(function(r,i){var o;n.subscribe(function(a){return o=a},function(a){return i(a)},function(){return r(o)})})},e.create=function(t){return new e(t)},e}();function ur(e){var t;return(t=e!=null?e:ir.Promise)!==null&&t!==void 0?t:Promise}function Oa(e){return e&&L(e.next)&&L(e.error)&&L(e.complete)}function La(e){return e&&e instanceof kt||Oa(e)&&nr(e)}function xa(e){return L(e==null?void 0:e.lift)}function te(e){return function(t){if(xa(t))return t.lift(function(n){try{return e(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function Z(e,t,n,r,i){return new Ua(e,t,n,r,i)}var Ua=function(e){B(t,e);function t(n,r,i,o,a,u){var s=e.call(this,n)||this;return s.onFinalize=a,s.shouldUnsubscribe=u,s._next=r?function(c){try{r(c)}catch(l){n.error(l)}}:e.prototype._next,s._error=o?function(c){try{o(c)}catch(l){n.error(l)}finally{this.unsubscribe()}}:e.prototype._error,s._complete=i?function(){try{i()}catch(c){n.error(c)}finally{this.unsubscribe()}}:e.prototype._complete,s}return t.prototype.unsubscribe=function(){var n;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var r=this.closed;e.prototype.unsubscribe.call(this),!r&&((n=this.onFinalize)===null||n===void 0||n.call(this))}},t}(kt),Da=Tt(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),cr=function(e){B(t,e);function t(){var n=e.call(this)||this;return n.closed=!1,n.currentObservers=null,n.observers=[],n.isStopped=!1,n.hasError=!1,n.thrownError=null,n}return t.prototype.lift=function(n){var r=new lr(this,this);return r.operator=n,r},t.prototype._throwIfClosed=function(){if(this.closed)throw new Da},t.prototype.next=function(n){var r=this;rt(function(){var i,o;if(r._throwIfClosed(),!r.isStopped){r.currentObservers||(r.currentObservers=Array.from(r.observers));try{for(var a=$(r.currentObservers),u=a.next();!u.done;u=a.next()){var s=u.value;s.next(n)}}catch(c){i={error:c}}finally{try{u&&!u.done&&(o=a.return)&&o.call(a)}finally{if(i)throw i.error}}}})},t.prototype.error=function(n){var r=this;rt(function(){if(r._throwIfClosed(),!r.isStopped){r.hasError=r.isStopped=!0,r.thrownError=n;for(var i=r.observers;i.length;)i.shift().error(n)}})},t.prototype.complete=function(){var n=this;rt(function(){if(n._throwIfClosed(),!n.isStopped){n.isStopped=!0;for(var r=n.observers;r.length;)r.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){var n;return((n=this.observers)===null||n===void 0?void 0:n.length)>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(n){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,n)},t.prototype._subscribe=function(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)},t.prototype._innerSubscribe=function(n){var r=this,i=this,o=i.hasError,a=i.isStopped,u=i.observers;return o||a?tr:(this.currentObservers=null,u.push(n),new Ue(function(){r.currentObservers=null,nt(u,n)}))},t.prototype._checkFinalizedStatuses=function(n){var r=this,i=r.hasError,o=r.thrownError,a=r.isStopped;i?n.error(o):a&&n.complete()},t.prototype.asObservable=function(){var n=new H;return n.source=this,n},t.create=function(n,r){return new lr(n,r)},t}(H),lr=function(e){B(t,e);function t(n,r){var i=e.call(this)||this;return i.destination=n,i.source=r,i}return t.prototype.next=function(n){var r,i;(i=(r=this.destination)===null||r===void 0?void 0:r.next)===null||i===void 0||i.call(r,n)},t.prototype.error=function(n){var r,i;(i=(r=this.destination)===null||r===void 0?void 0:r.error)===null||i===void 0||i.call(r,n)},t.prototype.complete=function(){var n,r;(r=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||r===void 0||r.call(n)},t.prototype._subscribe=function(n){var r,i;return(i=(r=this.source)===null||r===void 0?void 0:r.subscribe(n))!==null&&i!==void 0?i:tr},t}(cr),Na={now:function(){return Date.now()},delegate:void 0},Ma=function(e){B(t,e);function t(n,r){return e.call(this)||this}return t.prototype.schedule=function(n,r){return this},t}(Ue),Rt={setInterval:function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];return setInterval.apply(void 0,K([e,t],O(n)))},clearInterval:function(e){var t=Rt.delegate;return((t==null?void 0:t.clearInterval)||clearInterval)(e)},delegate:void 0},Fa=function(e){B(t,e);function t(n,r){var i=e.call(this,n,r)||this;return i.scheduler=n,i.work=r,i.pending=!1,i}return t.prototype.schedule=function(n,r){var i;if(r===void 0&&(r=0),this.closed)return this;this.state=n;var o=this.id,a=this.scheduler;return o!=null&&(this.id=this.recycleAsyncId(a,o,r)),this.pending=!0,this.delay=r,this.id=(i=this.id)!==null&&i!==void 0?i:this.requestAsyncId(a,this.id,r),this},t.prototype.requestAsyncId=function(n,r,i){return i===void 0&&(i=0),Rt.setInterval(n.flush.bind(n,this),i)},t.prototype.recycleAsyncId=function(n,r,i){if(i===void 0&&(i=0),i!=null&&this.delay===i&&this.pending===!1)return r;r!=null&&Rt.clearInterval(r)},t.prototype.execute=function(n,r){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var i=this._execute(n,r);if(i)return i;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(n,r){var i=!1,o;try{this.work(n)}catch(a){i=!0,o=a||new Error("Scheduled action threw falsy error")}if(i)return this.unsubscribe(),o},t.prototype.unsubscribe=function(){if(!this.closed){var n=this,r=n.id,i=n.scheduler,o=i.actions;this.work=this.state=this.scheduler=null,this.pending=!1,nt(o,this),r!=null&&(this.id=this.recycleAsyncId(i,r,null)),this.delay=null,e.prototype.unsubscribe.call(this)}},t}(Ma),fr=function(){function e(t,n){n===void 0&&(n=e.now),this.schedulerActionCtor=t,this.now=n}return e.prototype.schedule=function(t,n,r){return n===void 0&&(n=0),new this.schedulerActionCtor(this,t).schedule(r,n)},e.now=Na.now,e}(),qa=function(e){B(t,e);function t(n,r){r===void 0&&(r=fr.now);var i=e.call(this,n,r)||this;return i.actions=[],i._active=!1,i}return t.prototype.flush=function(n){var r=this.actions;if(this._active){r.push(n);return}var i;this._active=!0;do if(i=n.execute(n.state,n.delay))break;while(n=r.shift());if(this._active=!1,i){for(;n=r.shift();)n.unsubscribe();throw i}},t}(fr),ot=new qa(Fa),Va=ot,Ot=new H(function(e){return e.complete()});function dr(e){return e&&L(e.schedule)}function vr(e){return e[e.length-1]}function $a(e){return dr(vr(e))?e.pop():void 0}function ja(e,t){return typeof vr(e)=="number"?e.pop():t}var Lt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function hr(e){return L(e==null?void 0:e.then)}function pr(e){return L(e[Ct])}function gr(e){return Symbol.asyncIterator&&L(e==null?void 0:e[Symbol.asyncIterator])}function mr(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ga(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var yr=Ga();function br(e){return L(e==null?void 0:e[yr])}function Er(e){return fi(this,arguments,function(){var n,r,i,o;return b(this,function(a){switch(a.label){case 0:n=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,we(n.read())];case 3:return r=a.sent(),i=r.value,o=r.done,o?[4,we(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,we(i)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return n.releaseLock(),[7];case 10:return[2]}})})}function wr(e){return L(e==null?void 0:e.getReader)}function J(e){if(e instanceof H)return e;if(e!=null){if(pr(e))return Ba(e);if(Lt(e))return Ka(e);if(hr(e))return Ha(e);if(gr(e))return _r(e);if(br(e))return Wa(e);if(wr(e))return za(e)}throw mr(e)}function Ba(e){return new H(function(t){var n=e[Ct]();if(L(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Ka(e){return new H(function(t){for(var n=0;n<e.length&&!t.closed;n++)t.next(e[n]);t.complete()})}function Ha(e){return new H(function(t){e.then(function(n){t.closed||(t.next(n),t.complete())},function(n){return t.error(n)}).then(null,ar)})}function Wa(e){return new H(function(t){var n,r;try{for(var i=$(e),o=i.next();!o.done;o=i.next()){var a=o.value;if(t.next(a),t.closed)return}}catch(u){n={error:u}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}t.complete()})}function _r(e){return new H(function(t){Ya(e,t).catch(function(n){return t.error(n)})})}function za(e){return _r(Er(e))}function Ya(e,t){var n,r,i,o;return w(this,void 0,void 0,function(){var a,u;return b(this,function(s){switch(s.label){case 0:s.trys.push([0,5,6,11]),n=di(e),s.label=1;case 1:return[4,n.next()];case 2:if(r=s.sent(),!!r.done)return[3,4];if(a=r.value,t.next(a),t.closed)return[2];s.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return u=s.sent(),i={error:u},[3,11];case 6:return s.trys.push([6,,9,10]),r&&!r.done&&(o=n.return)?[4,o.call(n)]:[3,8];case 7:s.sent(),s.label=8;case 8:return[3,10];case 9:if(i)throw i.error;return[7];case 10:return[7];case 11:return t.complete(),[2]}})})}function ce(e,t,n,r,i){r===void 0&&(r=0),i===void 0&&(i=!1);var o=t.schedule(function(){n(),i?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(o),!i)return o}function Ir(e,t){return t===void 0&&(t=0),te(function(n,r){n.subscribe(Z(r,function(i){return ce(r,e,function(){return r.next(i)},t)},function(){return ce(r,e,function(){return r.complete()},t)},function(i){return ce(r,e,function(){return r.error(i)},t)}))})}function Tr(e,t){return t===void 0&&(t=0),te(function(n,r){r.add(e.schedule(function(){return n.subscribe(r)},t))})}function Xa(e,t){return J(e).pipe(Tr(t),Ir(t))}function Qa(e,t){return J(e).pipe(Tr(t),Ir(t))}function Za(e,t){return new H(function(n){var r=0;return t.schedule(function(){r===e.length?n.complete():(n.next(e[r++]),n.closed||this.schedule())})})}function Ja(e,t){return new H(function(n){var r;return ce(n,t,function(){r=e[yr](),ce(n,t,function(){var i,o,a;try{i=r.next(),o=i.value,a=i.done}catch(u){n.error(u);return}a?n.complete():n.next(o)},0,!0)}),function(){return L(r==null?void 0:r.return)&&r.return()}})}function Sr(e,t){if(!e)throw new Error("Iterable cannot be null");return new H(function(n){ce(n,t,function(){var r=e[Symbol.asyncIterator]();ce(n,t,function(){r.next().then(function(i){i.done?n.complete():n.next(i.value)})},0,!0)})})}function es(e,t){return Sr(Er(e),t)}function ts(e,t){if(e!=null){if(pr(e))return Xa(e,t);if(Lt(e))return Za(e,t);if(hr(e))return Qa(e,t);if(gr(e))return Sr(e,t);if(br(e))return Ja(e,t);if(wr(e))return es(e,t)}throw mr(e)}function ns(e,t){return t?ts(e,t):J(e)}function Ar(e){return e instanceof Date&&!isNaN(e)}var rs=Tt(function(e){return function(n){n===void 0&&(n=null),e(this),this.message="Timeout has occurred",this.name="TimeoutError",this.info=n}});function is(e,t){var n=Ar(e)?{first:e}:typeof e=="number"?{each:e}:e,r=n.first,i=n.each,o=n.with,a=o===void 0?os:o,u=n.scheduler,s=u===void 0?ot:u,c=n.meta,l=c===void 0?null:c;if(r==null&&i==null)throw new TypeError("No timeout provided.");return te(function(f,p){var d,m,y=null,_=0,v=function(h){m=ce(p,s,function(){try{d.unsubscribe(),J(a({meta:l,lastValue:y,seen:_})).subscribe(p)}catch(g){p.error(g)}},h)};d=f.subscribe(Z(p,function(h){m==null||m.unsubscribe(),_++,p.next(y=h),i>0&&v(i)},void 0,void 0,function(){m!=null&&m.closed||m==null||m.unsubscribe(),y=null})),!_&&v(r!=null?typeof r=="number"?r:+r-s.now():i)})}function os(e){throw new rs(e)}function oe(e,t){return te(function(n,r){var i=0;n.subscribe(Z(r,function(o){r.next(e.call(t,o,i++))}))})}var as=Array.isArray;function ss(e,t){return as(t)?e.apply(void 0,K([],O(t))):e(t)}function us(e){return oe(function(t){return ss(e,t)})}function cs(e,t,n,r,i,o,a,u){var s=[],c=0,l=0,f=!1,p=function(){f&&!s.length&&!c&&t.complete()},d=function(y){return c<r?m(y):s.push(y)},m=function(y){c++;var _=!1;J(n(y,l++)).subscribe(Z(t,function(v){t.next(v)},function(){_=!0},void 0,function(){if(_)try{c--;for(var v=function(){var h=s.shift();a||m(h)};s.length&&c<r;)v();p()}catch(h){t.error(h)}}))};return e.subscribe(Z(t,d,function(){f=!0,p()})),function(){}}function at(e,t,n){return n===void 0&&(n=1/0),L(t)?at(function(r,i){return oe(function(o,a){return t(r,o,i,a)})(J(e(r,i)))},n):(typeof t=="number"&&(n=t),te(function(r,i){return cs(r,i,e,n)}))}function ls(e){return e===void 0&&(e=1/0),at(sr,e)}var fs=["addListener","removeListener"],ds=["addEventListener","removeEventListener"],vs=["on","off"];function Ne(e,t,n,r){if(L(n)&&(r=n,n=void 0),r)return Ne(e,t,n).pipe(us(r));var i=O(gs(e)?ds.map(function(u){return function(s){return e[u](t,s,n)}}):hs(e)?fs.map(kr(e,t)):ps(e)?vs.map(kr(e,t)):[],2),o=i[0],a=i[1];if(!o&&Lt(e))return at(function(u){return Ne(u,t,n)})(J(e));if(!o)throw new TypeError("Invalid event target");return new H(function(u){var s=function(){for(var c=[],l=0;l<arguments.length;l++)c[l]=arguments[l];return u.next(1<c.length?c:c[0])};return o(s),function(){return a(s)}})}function kr(e,t){return function(n){return function(r){return e[n](t,r)}}}function hs(e){return L(e.addListener)&&L(e.removeListener)}function ps(e){return L(e.on)&&L(e.off)}function gs(e){return L(e.addEventListener)&&L(e.removeEventListener)}function ms(e,t,n){n===void 0&&(n=Va);var r=-1;return t!=null&&(dr(t)?n=t:r=t),new H(function(i){var o=Ar(e)?+e-n.now():e;o<0&&(o=0);var a=0;return n.schedule(function(){i.closed||(i.next(a++),0<=r?this.schedule(void 0,r):i.complete())},o)})}function Pr(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=$a(e),r=ja(e,1/0),i=e;return i.length?i.length===1?J(i[0]):ls(r)(ns(i,n)):Ot}function le(e,t){return te(function(n,r){var i=0;n.subscribe(Z(r,function(o){return e.call(t,o,i++)&&r.next(o)}))})}function ys(e){return te(function(t,n){var r=[];return t.subscribe(Z(n,function(i){return r.push(i)},function(){n.next(r),n.complete()})),J(e).subscribe(Z(n,function(){var i=r;r=[],n.next(i)},At)),function(){r=null}})}function bs(e,t){return t===void 0&&(t=ot),te(function(n,r){var i=null,o=null,a=null,u=function(){if(i){i.unsubscribe(),i=null;var c=o;o=null,r.next(c)}};function s(){var c=a+e,l=t.now();if(l<c){i=this.schedule(void 0,c-l),r.add(i);return}u()}n.subscribe(Z(r,function(c){o=c,a=t.now(),i||(i=t.schedule(s,e),r.add(i))},function(){u(),r.complete()},void 0,function(){o=i=null}))})}function Cr(e){return e<=0?function(){return Ot}:te(function(t,n){var r=0;t.subscribe(Z(n,function(i){++r<=e&&(n.next(i),e<=r&&n.complete())}))})}function Es(e){return oe(function(){return e})}function ws(e,t){return at(function(n,r){return J(e(n,r)).pipe(Cr(1),Es(n))})}function _s(e,t){t===void 0&&(t=ot);var n=ms(e,t);return ws(function(){return n})}function Is(){return te(function(e,t){var n,r=!1;e.subscribe(Z(t,function(i){var o=n;n=i,r&&t.next([o,i]),r=!0}))})}function st(e){e===void 0&&(e={});var t=e.connector,n=t===void 0?function(){return new cr}:t,r=e.resetOnError,i=r===void 0?!0:r,o=e.resetOnComplete,a=o===void 0?!0:o,u=e.resetOnRefCountZero,s=u===void 0?!0:u;return function(c){var l,f,p,d=0,m=!1,y=!1,_=function(){f==null||f.unsubscribe(),f=void 0},v=function(){_(),l=p=void 0,m=y=!1},h=function(){var g=l;v(),g==null||g.unsubscribe()};return te(function(g,E){d++,!y&&!m&&_();var T=p=p!=null?p:n();E.add(function(){d--,d===0&&!y&&!m&&(f=xt(h,s))}),T.subscribe(E),!l&&d>0&&(l=new De({next:function(S){return T.next(S)},error:function(S){y=!0,_(),f=xt(v,i,S),T.error(S)},complete:function(){m=!0,_(),f=xt(v,a),T.complete()}}),J(g).subscribe(l))})(c)}}function xt(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];if(t===!0){e();return}if(t!==!1){var i=new De({next:function(){i.unsubscribe(),e()}});return J(t.apply(void 0,K([],O(n)))).subscribe(i)}}function Ts(e,t){return te(function(n,r){var i=null,o=0,a=!1,u=function(){return a&&!i&&r.complete()};n.subscribe(Z(r,function(s){i==null||i.unsubscribe();var c=0,l=o++;J(e(s,l)).subscribe(i=Z(r,function(f){return r.next(t?t(s,f,l,c++):f)},function(){i=null,u()}))},function(){a=!0,u()}))})}var Ss=["input","select","textarea"],Ut=function(e,t){return function(n,r){var i,o,a,u=e.pageUrlAllowlist,s=e.shouldTrackEventResolver,c=(o=(i=r==null?void 0:r.tagName)===null||i===void 0?void 0:i.toLowerCase)===null||o===void 0?void 0:o.call(i);if(!c)return!1;if(s)return s(n,r);if(!ks(window.location.href,u))return!1;var l=String(r==null?void 0:r.getAttribute("type"))||"";if(typeof l=="string")switch(l.toLowerCase()){case"hidden":return!1;case"password":return!1}if(t){var f=t.some(function(d){var m;return!!(!((m=r==null?void 0:r.matches)===null||m===void 0)&&m.call(r,d))});if(!f)return!1}switch(c){case"input":case"select":case"textarea":return n==="change"||n==="click";default:{var p=(a=window==null?void 0:window.getComputedStyle)===null||a===void 0?void 0:a.call(window,r);return p&&p.getPropertyValue("cursor")==="pointer"&&n==="click"?!0:n==="click"}}}},Rr=function(e){if(e==null)return!1;if(typeof e=="string"){var t=/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/;if(t.test((e||"").replace(/[- ]/g,"")))return!1;var n=/(^\d{3}-?\d{2}-?\d{4}$)/;if(n.test(e))return!1}return!0},As=function(e){return!!e&&e.nodeType===3},Or=function(e){var t,n,r,i=(n=(t=e==null?void 0:e.tagName)===null||t===void 0?void 0:t.toLowerCase)===null||n===void 0?void 0:n.call(t),o=e instanceof HTMLElement?((r=e.getAttribute("contenteditable"))===null||r===void 0?void 0:r.toLowerCase())==="true":!1;return!Ss.includes(i)&&!o},Dt=function(e){var t="";return Or(e)&&e.childNodes&&e.childNodes.length&&e.childNodes.forEach(function(n){var r="";As(n)?n.textContent&&(r=n.textContent):r=Dt(n),t+=r.split(/(\s+)/).filter(Rr).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}),t},ks=function(e,t){return!t||!t.length?!0:t.some(function(n){return typeof n=="string"?e===n:e.match(n)})},Ps=function(e,t){return e.getAttributeNames().reduce(function(n,r){if(r.startsWith(t)){var i=r.replace(t,""),o=e.getAttribute(r);i&&(n[i]=o||"")}return n},{})},Cs=function(e){return e==null||typeof e=="object"&&Object.keys(e).length===0||typeof e=="string"&&e.trim().length===0},Lr=function(e){return Object.keys(e).reduce(function(t,n){var r=e[n];return Cs(r)||(t[n]=r),t},{})},xr=function(e){var t=e.parentElement;if(!t)return"";var n;try{n=t.querySelector(":scope>span,h1,h2,h3,h4,h5,h6")}catch(i){n=null}if(n){var r=n.textContent||"";return Rr(r)?r:""}return xr(t)},Nt=function(e,t){return e?t.some(function(n){var r;return(r=e==null?void 0:e.matches)===null||r===void 0?void 0:r.call(e,n)})?e:Nt(e==null?void 0:e.parentElement,t):null},Rs=function(e){var t,n,r;if(!e)return{};var i=(r=(n=e==null?void 0:e.tagName)===null||n===void 0?void 0:n.toLowerCase)===null||r===void 0?void 0:r.call(n),o=(t={},t[Zn]=i,t[Jn]=Dt(e),t[er]=window.location.href.split("?")[0],t);return Lr(o)},Os=function(e){return new Promise(function(t,n){var r;try{var i=document.createElement("script");i.type="text/javascript",i.async=!0,i.src=e,i.addEventListener("load",function(){t({status:!0})},{once:!0}),i.addEventListener("error",function(){n({status:!1,message:"Failed to load the script ".concat(e)})}),(r=document.head)===null||r===void 0||r.appendChild(i)}catch(o){n(o)}})};function Ls(){return"".concat(Date.now(),"-").concat(Math.random().toString(36).substr(2,9))}var Mt=function(e){return!(e.event.target===null||!e.closestTrackedAncestor)},xs=function(){function e(t){var n=t===void 0?{}:t,r=n.origin,i=r===void 0?tt:r,o=this;this.endpoint=tt,this.requestCallbacks={},this.onSelect=function(a){o.notify({action:"element-selected",data:a})},this.onTrack=function(a,u){a==="selector-mode-changed"?o.notify({action:"track-selector-mode-changed",data:u}):a==="selector-moved"&&o.notify({action:"track-selector-moved",data:u})},this.endpoint=i}return e.prototype.notify=function(t){var n,r,i,o;(r=(n=this.logger)===null||n===void 0?void 0:n.debug)===null||r===void 0||r.call(n,"Message sent: ",JSON.stringify(t)),(o=(i=window.opener)===null||i===void 0?void 0:i.postMessage)===null||o===void 0||o.call(i,t,this.endpoint)},e.prototype.sendRequest=function(t,n,r){var i=this;r===void 0&&(r={timeout:15e3});var o=Ls(),a={id:o,action:t,args:n},u=new Promise(function(s,c){i.requestCallbacks[o]={resolve:s,reject:c},i.notify(a),(r==null?void 0:r.timeout)>0&&setTimeout(function(){c(new Error("".concat(t," timed out (id: ").concat(o,")"))),delete i.requestCallbacks[o]},r.timeout)});return u},e.prototype.handleResponse=function(t){var n;if(!this.requestCallbacks[t.id]){(n=this.logger)===null||n===void 0||n.warn("No callback found for request id: ".concat(t.id));return}this.requestCallbacks[t.id].resolve(t.responseData),delete this.requestCallbacks[t.id]},e.prototype.setup=function(t){var n=this,r=t===void 0?{}:t,i=r.logger,o=r.endpoint,a=r.isElementSelectable,u=r.cssSelectorAllowlist,s=r.actionClickAllowlist;this.logger=i,o&&this.endpoint===tt&&(this.endpoint=o);var c=null;window.addEventListener("message",function(l){var f,p,d,m,y;if((p=(f=n.logger)===null||f===void 0?void 0:f.debug)===null||p===void 0||p.call(f,"Message received: ",JSON.stringify(l)),n.endpoint===l.origin){var _=l==null?void 0:l.data,v=_==null?void 0:_.action;if(v)if("id"in _)(m=(d=n.logger)===null||d===void 0?void 0:d.debug)===null||m===void 0||m.call(d,"Received Response to previous request: ",JSON.stringify(l)),n.handleResponse(_);else if(v==="ping")n.notify({action:"pong"});else if(v==="initialize-visual-tagging-selector"){var h=_==null?void 0:_.data;Os(Ta).then(function(){var g;c=(g=window==null?void 0:window.amplitudeVisualTaggingSelector)===null||g===void 0?void 0:g.call(window,{getEventTagProps:Rs,isElementSelectable:function(E){return a?a((h==null?void 0:h.actionType)||"click",E):!0},onTrack:n.onTrack,onSelect:n.onSelect,visualHighlightClass:Sa,messenger:n,cssSelectorAllowlist:u,actionClickAllowlist:s}),n.notify({action:"selector-loaded"})}).catch(function(){var g;(g=n.logger)===null||g===void 0||g.warn("Failed to initialize visual tagging selector")})}else v==="close-visual-tagging-selector"&&((y=c==null?void 0:c.close)===null||y===void 0||y.call(c))}}),this.notify({action:"page-loaded"})},e}(),Us=["id","class","style","value","onclick","onchange","oninput","onblur","onsubmit","onfocus","onkeydown","onkeyup","onkeypress","data-reactid","data-react-checksum","data-reactroot"],Ds=["type"],Ns=["svg","path","g"],Ms=["password","hidden"],Fs=128,qs=1024;function Vs(e){var t,n,r,i,o,a;if(e===null)return null;var u=String(e.tagName).toLowerCase(),s={tag:u},c=Array.from((i=(r=e.parentElement)===null||r===void 0?void 0:r.children)!==null&&i!==void 0?i:[]);c.length&&(s.index=c.indexOf(e),s.indexOfType=c.filter(function(E){return E.tagName===e.tagName}).indexOf(e));var l=(a=(o=e.previousElementSibling)===null||o===void 0?void 0:o.tagName)===null||a===void 0?void 0:a.toLowerCase();l&&(s.prevSib=String(l));var f=e.getAttribute("id");f&&(s.id=String(f));var p=Array.from(e.classList);p.length&&(s.classes=p);var d={},m=Array.from(e.attributes),y=m.filter(function(E){return!Us.includes(E.name)}),_=!Or(e);if(!Ms.includes(String(e.getAttribute("type")))&&!Ns.includes(u))try{for(var v=$(y),h=v.next();!h.done;h=v.next()){var g=h.value;_&&!Ds.includes(g.name)||(d[g.name]=String(g.value).substring(0,Fs))}}catch(E){t={error:E}}finally{try{h&&!h.done&&(n=v.return)&&n.call(v)}finally{if(t)throw t.error}}return Object.keys(d).length&&(s.attrs=d),s}function $s(e){var t=[];if(!e)return t;t.push(e);for(var n=e.parentElement;n&&n.tagName!=="HTML";)t.push(n),n=n.parentElement;return t}var js=function(e){var t=[];if(!e)return[];var n=$s(e);return t=Gs(n.map(function(r){return Vs(r)}),qs),t};function Gs(e,t){for(var n=0,r=0;r<e.length;r++){var i=e[r];if(i===null)n+=4;else{var o=ut(i);n+=o?Array.from(o).length:4}if(n>t)return e.slice(0,r)}return e}function ut(e,t){t===void 0&&(t=!1);try{if(e==null)return t?"None":null;if(typeof e=="string")return t?(e=e.replace(/\\/g,"\\\\").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r"),e.includes('"')?"'".concat(e,"'"):e.includes("'")?'"'.concat(e.replace(/'/g,"\\'"),'"'):"'".concat(e,"'")):e;if(typeof e=="boolean")return e?"True":"False";if(Array.isArray(e)){var n=e.map(function(o){return ut(o,!0)});return"[".concat(n.join(", "),"]")}else if(typeof e=="object"){var r=Object.entries(e).filter(function(o){var a=O(o,1),u=a[0];return u!=null}).map(function(o){var a=O(o,2),u=a[0],s=a[1];return"".concat(String(ut(u,!0)),": ").concat(String(ut(s,!0)))}),i="{".concat(r.join(", "),"}");return i.includes("\\'")&&(i=i.replace(/'/g,"'").replace(/'/g,"\\'")),i}return e.toString()}catch(o){return null}}var Bs=5;function Ks(e){var t=e.amplitude,n=e.allObservables,r=e.options,i=e.shouldTrackEvent,o=n.clickObservable,a=o.pipe(Is(),le(function(l){var f=O(l,2),p=f[0],d=f[1],m=p.event.target!==d.event.target,y=Math.abs(d.event.screenX-p.event.screenX)<=20&&Math.abs(d.event.screenY-p.event.screenY)<=20;return m&&!y})),u=o.pipe(bs(r.debounceTime),oe(function(){return"timeout"})),s=Pr(a,u),c=o.pipe(_s(0),le(Mt),le(function(l){return i("click",l.closestTrackedAncestor)}),ys(s));return c.subscribe(function(l){var f,p,d=(l.length>=Bs,It);try{for(var m=$(l),y=m.next();!y.done;y=m.next()){var _=y.value;t==null||t.track(d,_.targetElementProperties)}}catch(v){f={error:v}}finally{try{y&&!y.done&&(p=m.return)&&p.call(m)}finally{if(f)throw f.error}}})}function Hs(e){var t=e.amplitude,n=e.allObservables,r=e.getEventProperties,i=e.shouldTrackEvent,o=n.changeObservable,a=o.pipe(le(Mt),le(function(u){return i("change",u.closestTrackedAncestor)}));return a.subscribe(function(u){t==null||t.track(ua,r("change",u.closestTrackedAncestor))})}function Ws(e){var t=e.amplitude,n=e.allObservables,r=e.options,i=e.getEventProperties,o=e.shouldTrackEvent,a=e.shouldTrackActionClick,u=n.clickObservable,s=n.mutationObservable,c=n.navigateObservable,l=u.pipe(le(function(m){return!o("click",m.closestTrackedAncestor)}),oe(function(m){var y=Nt(m.event.target,r.actionClickAllowlist);return m.closestTrackedAncestor=y,m.closestTrackedAncestor!==null&&(m.targetElementProperties=i(m.type,m.closestTrackedAncestor)),m}),le(Mt),le(function(m){return a("click",m.closestTrackedAncestor)})),f=[s];c&&f.push(c);var p=Pr.apply(void 0,K([],O(f),!1)),d=l.pipe(Ts(function(m){return p.pipe(Cr(1),is({first:500,with:function(){return Ot}}),oe(function(){return m}))}));return d.subscribe(function(m){t==null||t.track(It,i("click",m.closestTrackedAncestor))})}var Ae;(function(e){e.ClickObservable="clickObservable",e.ChangeObservable="changeObservable",e.NavigateObservable="navigateObservable",e.MutationObservable="mutationObservable"})(Ae||(Ae={}));function zs(e){return e.type==="click"||e.type==="change"}var Ys=function(e){var t,n,r;e===void 0&&(e={});var i=e.dataAttributePrefix,o=i===void 0?io:i,a=e.visualTaggingOptions,u=a===void 0?{enabled:!0,messenger:new xs}:a;e.cssSelectorAllowlist=(t=e.cssSelectorAllowlist)!==null&&t!==void 0?t:ro,e.actionClickAllowlist=(n=e.actionClickAllowlist)!==null&&n!==void 0?n:oo,e.debounceTime=(r=e.debounceTime)!==null&&r!==void 0?r:0;var s=sa,c="enrichment",l=[],f=function(){var v,h=Ne(document,"click",{capture:!0}).pipe(oe(function(S){return d(S,"click")}),st()),g=Ne(document,"change",{capture:!0}).pipe(oe(function(S){return d(S,"change")}),st()),E;window.navigation&&(E=Ne(window.navigation,"navigate").pipe(oe(function(S){return d(S,"navigate")}),st()));var T=new H(function(S){var k=new MutationObserver(function(P){S.next(P)});return k.observe(document.body,{childList:!0,attributes:!0,characterData:!0,subtree:!0}),function(){return k.disconnect()}}).pipe(oe(function(S){return d(S,"mutation")}),st());return v={},v[Ae.ClickObservable]=h,v[Ae.ChangeObservable]=g,v[Ae.NavigateObservable]=E,v[Ae.MutationObservable]=T,v},p=function(v,h){var g,E,T,S=(T=(E=h==null?void 0:h.tagName)===null||E===void 0?void 0:E.toLowerCase)===null||T===void 0?void 0:T.call(E),k=typeof h.getBoundingClientRect=="function"?h.getBoundingClientRect():{left:null,top:null},P=h.getAttribute("aria-label"),R=Ps(h,o),W=xr(h),G=(g={},g[ca]=h.getAttribute("id")||"",g[la]=h.getAttribute("class"),g[fa]=js(h),g[Zn]=S,g[Jn]=Dt(h),g[va]=k.left==null?null:Math.round(k.left),g[ha]=k.top==null?null:Math.round(k.top),g[pa]=P,g[ga]=R,g[ma]=W,g[er]=window.location.href.split("?")[0],g[ya]=typeof document!="undefined"&&document.title||"",g[ba]=window.innerHeight,g[Ea]=window.innerWidth,g);return S==="a"&&v==="click"&&h instanceof HTMLAnchorElement&&(G[da]=h.href),Lr(G)},d=function(v,h){var g={event:v,timestamp:Date.now(),type:h};if(zs(g)&&g.event.target!==null){var E=Nt(g.event.target,e.cssSelectorAllowlist);return E&&(g.closestTrackedAncestor=E,g.targetElementProperties=p(g.type,E)),g}return g},m=function(v,h){return w(void 0,void 0,void 0,function(){var g,E,T,S,k,P,R,W,G,X;return b(this,function(de){return typeof document=="undefined"?[2]:(g=Ut(e,e.cssSelectorAllowlist),E=Ut(e,e.actionClickAllowlist),T=f(),S=Ks({allObservables:T,options:e,amplitude:h,shouldTrackEvent:g}),l.push(S),k=Hs({allObservables:T,getEventProperties:p,amplitude:h,shouldTrackEvent:g}),l.push(k),P=Ws({allObservables:T,options:e,getEventProperties:p,amplitude:h,shouldTrackEvent:g,shouldTrackActionClick:E}),l.push(P),(G=v==null?void 0:v.loggerProvider)===null||G===void 0||G.log("".concat(s," has been successfully added.")),window.opener&&u.enabled&&(R=e.cssSelectorAllowlist,W=e.actionClickAllowlist,(X=u.messenger)===null||X===void 0||X.setup(I(I({logger:v==null?void 0:v.loggerProvider},(v==null?void 0:v.serverZone)&&{endpoint:Ia[v.serverZone]}),{isElementSelectable:Ut(e,K(K([],O(R),!1),O(W),!1)),cssSelectorAllowlist:R,actionClickAllowlist:W}))),[2])})})},y=function(v){return w(void 0,void 0,void 0,function(){return b(this,function(h){return[2,v]})})},_=function(){return w(void 0,void 0,void 0,function(){var v,h,g,E,T;return b(this,function(S){try{for(v=$(l),h=v.next();!h.done;h=v.next())g=h.value,g.unsubscribe()}catch(k){E={error:k}}finally{try{h&&!h.done&&(T=v.return)&&T.call(v)}finally{if(E)throw E.error}}return[2]})})};return{name:s,type:c,setup:m,execute:y,teardown:_}},Xs="utm_campaign",Qs="utm_content",Zs="utm_id",Js="utm_medium",eu="utm_source",tu="utm_term",Ur="dclid",Dr="fbclid",Nr="gbraid",Mr="gclid",Fr="ko_click_id",qr="li_fat_id",Vr="msclkid",$r="rtd_cid",jr="ttclid",Gr="twclid",Br="wbraid",Ft={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rtd_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},Kr=function(e){var t=e.split(".");return t.length<=2?e:t.slice(t.length-2,t.length).join(".")},nu=function(e){return Object.values(e).every(function(t){return!t})},ru=function(e,t,n,r,i){i===void 0&&(i=!0),e.referrer;var o=e.referring_domain,a=vt(e,["referrer","referring_domain"]),u=t||{};u.referrer;var s=u.referring_domain,c=vt(u,["referrer","referring_domain"]);if(iu(n.excludeReferrers,e.referring_domain))return r.debug("This is not a new campaign because ".concat(e.referring_domain," is in the exclude referrer list.")),!1;if(!i&&nu(e)&&t)return r.debug("This is not a new campaign because this is a direct traffic in the same session."),!1;var l=JSON.stringify(a)!==JSON.stringify(c),f=Kr(o||"")!==Kr(s||""),p=!t||l||f;return p?r.debug("This is a new campaign. An $identify event will be sent."):r.debug("This is not a new campaign because it's the same as the previous one."),p},iu=function(e,t){return e===void 0&&(e=[]),t===void 0&&(t=""),e.some(function(n){return n instanceof RegExp?n.test(t):n===t})},ou=function(e,t){var n=I(I({},Ft),e),r=Object.entries(n).reduce(function(i,o){var a,u=O(o,2),s=u[0],c=u[1];return i.setOnce("initial_".concat(s),(a=c!=null?c:t.initialEmptyValue)!==null&&a!==void 0?a:"EMPTY"),c?i.set(s,c):i.unset(s)},new Re);return dn(r)},au=function(e){var t=e;return t?(t.startsWith(".")&&(t=t.substring(1)),[new RegExp("".concat(t.replace(".","\\."),"$"))]):[]},su=function(){function e(){}return e.prototype.parse=function(){return w(this,void 0,void 0,function(){return b(this,function(t){return[2,I(I(I(I({},Ft),this.getUtmParam()),this.getReferrer()),this.getClickIds())]})})},e.prototype.getUtmParam=function(){var t=ze(),n=t[Xs],r=t[Qs],i=t[Zs],o=t[Js],a=t[eu],u=t[tu];return{utm_campaign:n,utm_content:r,utm_id:i,utm_medium:o,utm_source:a,utm_term:u}},e.prototype.getReferrer=function(){var t,n,r={referrer:void 0,referring_domain:void 0};try{r.referrer=document.referrer||void 0,r.referring_domain=(n=(t=r.referrer)===null||t===void 0?void 0:t.split("/")[2])!==null&&n!==void 0?n:void 0}catch(i){}return r},e.prototype.getClickIds=function(){var t,n=ze();return t={},t[Ur]=n[Ur],t[Dr]=n[Dr],t[Nr]=n[Nr],t[Mr]=n[Mr],t[Fr]=n[Fr],t[qr]=n[qr],t[Vr]=n[Vr],t[$r]=n[$r],t[jr]=n[jr],t[Gr]=n[Gr],t[Br]=n[Br],t},e}(),uu=function(){function e(t,n){var r;this.shouldTrackNewCampaign=!1,this.options=I({initialEmptyValue:"EMPTY",resetSessionOnNewCampaign:!1,excludeReferrers:au((r=n.cookieOptions)===null||r===void 0?void 0:r.domain)},t),this.storage=n.cookieStorage,this.storageKey=eo(n.apiKey,"MKTG"),this.currentCampaign=Ft,this.sessionTimeout=n.sessionTimeout,this.lastEventTime=n.lastEventTime,this.logger=n.loggerProvider,n.loggerProvider.log("Installing web attribution tracking.")}return e.prototype.init=function(){return w(this,void 0,void 0,function(){var t,n;return b(this,function(r){switch(r.label){case 0:return[4,this.fetchCampaign()];case 1:return n=O.apply(void 0,[r.sent(),2]),this.currentCampaign=n[0],this.previousCampaign=n[1],t=this.lastEventTime?mn(this.sessionTimeout,this.lastEventTime):!0,ru(this.currentCampaign,this.previousCampaign,this.options,this.logger,t)?(this.shouldTrackNewCampaign=!0,[4,this.storage.set(this.storageKey,this.currentCampaign)]):[3,3];case 2:r.sent(),r.label=3;case 3:return[2]}})})},e.prototype.fetchCampaign=function(){return w(this,void 0,void 0,function(){return b(this,function(t){switch(t.label){case 0:return[4,Promise.all([new su().parse(),this.storage.get(this.storageKey)])];case 1:return[2,t.sent()]}})})},e.prototype.generateCampaignEvent=function(t){this.shouldTrackNewCampaign=!1;var n=ou(this.currentCampaign,this.options);return t&&(n.event_id=t),n},e.prototype.shouldSetSessionIdOnNewCampaign=function(){return this.shouldTrackNewCampaign&&!!this.options.resetSessionOnNewCampaign},e}(),cu=function(e){B(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.init=function(n,r,i){n===void 0&&(n="");var o,a;return arguments.length>2?(o=r,a=i):typeof r=="string"?(o=r,a=void 0):(o=r==null?void 0:r.userId,a=r),Y(this._init(I(I({},a),{userId:o,apiKey:n})))},t.prototype._init=function(n){var r,i,o;return w(this,void 0,void 0,function(){var a,u,s,c,l,f,p=this;return b(this,function(d){switch(d.label){case 0:return this.initializing?[2]:(this.initializing=!0,[4,Ro(n.apiKey,n,this)]);case 1:return a=d.sent(),n.fetchRemoteConfig?[4,aa(a)]:[3,4];case 2:return u=d.sent(),[4,u.generateJoinedConfig()];case 3:a=d.sent(),d.label=4;case 4:return[4,e.prototype._init.call(this,a)];case 5:return d.sent(),this.logBrowserOptions(a),En(this.config.defaultTracking)?(s=lo(this.config),this.webAttribution=new uu(s,this.config),[4,this.webAttribution.init()]):[3,7];case 6:d.sent(),d.label=7;case 7:return c=ze(),l=Number.isNaN(Number(c.ampSessionId))?void 0:Number(c.ampSessionId),this.setSessionId((o=(i=(r=n.sessionId)!==null&&r!==void 0?r:l)!==null&&i!==void 0?i:this.config.sessionId)!==null&&o!==void 0?o:Date.now()),f=Le(n.instanceName),f.identityStore.setIdentity({userId:this.config.userId,deviceId:this.config.deviceId}),this.config.offline===no?[3,9]:[4,this.add(Yo()).promise];case 8:d.sent(),d.label=9;case 9:return[4,this.add(new Ni).promise];case 10:return d.sent(),[4,this.add(new po).promise];case 11:return d.sent(),[4,this.add(new Wi).promise];case 12:return d.sent(),zo(this.config),ao(this.config.defaultTracking)?(this.config.loggerProvider.debug("Adding file download tracking plugin"),[4,this.add(Wo()).promise]):[3,14];case 13:d.sent(),d.label=14;case 14:return so(this.config.defaultTracking)?(this.config.loggerProvider.debug("Adding form interaction plugin"),[4,this.add(Ho()).promise]):[3,16];case 15:d.sent(),d.label=16;case 16:return wn(this.config.defaultTracking)?(this.config.loggerProvider.debug("Adding page view tracking plugin"),[4,this.add(jo(co(this.config))).promise]):[3,18];case 17:d.sent(),d.label=18;case 18:return In(this.config.autocapture)?(this.config.loggerProvider.debug("Adding user interactions plugin (autocapture plugin)"),[4,this.add(Ys(uo(this.config))).promise]):[3,20];case 19:d.sent(),d.label=20;case 20:return this.initializing=!1,[4,this.runQueuedFunctions("dispatchQ")];case 21:return d.sent(),f.eventBridge.setEventReceiver(function(m){p.track(m.eventType,m.eventProperties)}),[2]}})})},t.prototype.getUserId=function(){var n;return(n=this.config)===null||n===void 0?void 0:n.userId},t.prototype.setUserId=function(n){if(!this.config){this.q.push(this.setUserId.bind(this,n));return}this.config.loggerProvider.debug("function setUserId: ",n),(n!==this.config.userId||n===void 0)&&(this.config.userId=n,Ki(n,this.config.instanceName))},t.prototype.getDeviceId=function(){var n;return(n=this.config)===null||n===void 0?void 0:n.deviceId},t.prototype.setDeviceId=function(n){if(!this.config){this.q.push(this.setDeviceId.bind(this,n));return}this.config.loggerProvider.debug("function setDeviceId: ",n),this.config.deviceId=n,Hi(n,this.config.instanceName)},t.prototype.reset=function(){this.setDeviceId(Ie()),this.setUserId(void 0)},t.prototype.getSessionId=function(){var n;return(n=this.config)===null||n===void 0?void 0:n.sessionId},t.prototype.setSessionId=function(n){var r,i=[];if(!this.config)return this.q.push(this.setSessionId.bind(this,n)),Y(Promise.resolve());if(n===this.config.sessionId)return Y(Promise.resolve());this.config.loggerProvider.debug("function setSessionId: ",n);var o=this.getSessionId(),a=this.config.lastEventTime,u=(r=this.config.lastEventId)!==null&&r!==void 0?r:-1;this.config.sessionId=n,this.config.lastEventTime=void 0,this.config.pageCounter=0,_n(this.config.defaultTracking)&&(o&&a&&i.push(this.track(Cn,void 0,{device_id:this.previousSessionDeviceId,event_id:++u,session_id:o,time:a+1,user_id:this.previousSessionUserId}).promise),this.config.lastEventTime=this.config.sessionId);var s=this.trackCampaignEventIfNeeded(++u,i);return _n(this.config.defaultTracking)&&i.push(this.track(Pn,void 0,{event_id:s?++u:u,session_id:this.config.sessionId,time:this.config.lastEventTime}).promise),this.previousSessionDeviceId=this.config.deviceId,this.previousSessionUserId=this.config.userId,Y(Promise.all(i))},t.prototype.extendSession=function(){if(!this.config){this.q.push(this.extendSession.bind(this));return}this.config.lastEventTime=Date.now()},t.prototype.setTransport=function(n){if(!this.config){this.q.push(this.setTransport.bind(this,n));return}this.config.transportProvider=Rn(n)},t.prototype.identify=function(n,r){if(yt(n)){var i=n._q;n._q=[],n=mt(new Re,i)}return r!=null&&r.user_id&&this.setUserId(r.user_id),r!=null&&r.device_id&&this.setDeviceId(r.device_id),e.prototype.identify.call(this,n,r)},t.prototype.groupIdentify=function(n,r,i,o){if(yt(i)){var a=i._q;i._q=[],i=mt(new Re,a)}return e.prototype.groupIdentify.call(this,n,r,i,o)},t.prototype.revenue=function(n,r){if(yt(n)){var i=n._q;n._q=[],n=mt(new Oi,i)}return e.prototype.revenue.call(this,n,r)},t.prototype.trackCampaignEventIfNeeded=function(n,r){if(!this.webAttribution||!this.webAttribution.shouldTrackNewCampaign)return!1;var i=this.webAttribution.generateCampaignEvent(n);return r?r.push(this.track(i).promise):this.track(i),this.config.loggerProvider.log("Tracking attribution."),!0},t.prototype.process=function(n){return w(this,void 0,void 0,function(){var r,i,o;return b(this,function(a){return r=Date.now(),i=mn(this.config.sessionTimeout,this.config.lastEventTime),o=this.webAttribution&&this.webAttribution.shouldSetSessionIdOnNewCampaign(),n.event_type!==Pn&&n.event_type!==Cn&&(!n.session_id||n.session_id===this.getSessionId())&&(i||o?(this.setSessionId(r),o&&this.config.loggerProvider.log("Created a new session for new campaign.")):i||this.trackCampaignEventIfNeeded()),[2,e.prototype.process.call(this,n)]})})},t.prototype.logBrowserOptions=function(n){try{var r=I(I({},n),{apiKey:n.apiKey.substring(0,10)+"********"});this.config.loggerProvider.debug("Initialized Amplitude with BrowserConfig:",JSON.stringify(r))}catch(i){this.config.loggerProvider.error("Error logging browser config",i)}},t}(Ri),qt=function(){var e=new cu;return{init:M(e.init.bind(e),"init",D(e),N(e,["config"])),add:M(e.add.bind(e),"add",D(e),N(e,["config.apiKey","timeline.plugins"])),remove:M(e.remove.bind(e),"remove",D(e),N(e,["config.apiKey","timeline.plugins"])),track:M(e.track.bind(e),"track",D(e),N(e,["config.apiKey","timeline.queue.length"])),logEvent:M(e.logEvent.bind(e),"logEvent",D(e),N(e,["config.apiKey","timeline.queue.length"])),identify:M(e.identify.bind(e),"identify",D(e),N(e,["config.apiKey","timeline.queue.length"])),groupIdentify:M(e.groupIdentify.bind(e),"groupIdentify",D(e),N(e,["config.apiKey","timeline.queue.length"])),setGroup:M(e.setGroup.bind(e),"setGroup",D(e),N(e,["config.apiKey","timeline.queue.length"])),revenue:M(e.revenue.bind(e),"revenue",D(e),N(e,["config.apiKey","timeline.queue.length"])),flush:M(e.flush.bind(e),"flush",D(e),N(e,["config.apiKey","timeline.queue.length"])),getUserId:M(e.getUserId.bind(e),"getUserId",D(e),N(e,["config","config.userId"])),setUserId:M(e.setUserId.bind(e),"setUserId",D(e),N(e,["config","config.userId"])),getDeviceId:M(e.getDeviceId.bind(e),"getDeviceId",D(e),N(e,["config","config.deviceId"])),setDeviceId:M(e.setDeviceId.bind(e),"setDeviceId",D(e),N(e,["config","config.deviceId"])),reset:M(e.reset.bind(e),"reset",D(e),N(e,["config","config.userId","config.deviceId"])),getSessionId:M(e.getSessionId.bind(e),"getSessionId",D(e),N(e,["config"])),setSessionId:M(e.setSessionId.bind(e),"setSessionId",D(e),N(e,["config"])),extendSession:M(e.extendSession.bind(e),"extendSession",D(e),N(e,["config"])),setOptOut:M(e.setOptOut.bind(e),"setOptOut",D(e),N(e,["config"])),setTransport:M(e.setTransport.bind(e),"setTransport",D(e),N(e,["config"]))}};qt();const Hr={PageView:"Page View",CompleteRegistration:"Register",ViewCart:"View Cart",ViewItemList:"View Item List",AddToCart:"Add To Cart",RemoveFromCart:"Remove From Cart",InitiateCheckout:"Initiate Checkout",Purchase:"Order Placed"};class lu{constructor(t=null,n=null){z(this,"amplitude",null);z(this,"amplitudeOffset",null);this.trackingId=t,this.offsetTrackingId=n,this.trackingId&&(this.amplitude=qt(),this.amplitude.init(this.trackingId,{autocapture:!0})),this.offsetTrackingId&&(this.amplitudeOffset=qt(),this.amplitudeOffset.init(this.offsetTrackingId,{autocapture:!0}))}trackEvent(t,n){if(!(!this.trackingId&&!this.offsetTrackingId)){if(Hr[t]&&(t=Hr[t]),t==="userId"){this.amplitude&&this.amplitude.setUserId(n||""),this.amplitudeOffset&&this.amplitudeOffset.setUserId(n||"");return}if(t==="User"){const r=new Re;r.set("Name",n.Name),r.set("Email",n.Email),this.amplitude&&this.amplitude.identify(r),this.amplitudeOffset&&this.amplitudeOffset.identify(r)}else this.amplitude&&this.amplitude.track(t,n),this.amplitudeOffset&&this.amplitudeOffset.track(t,n)}}}var Vt,fe,pe,C={};function fu(e){return Object.assign(e,{autoCapturePageviews:e.autoCapturePageviews!==!1,logging:e.logging!==!1,bindToWindow:e.bindToWindow!==!1})}function du(e){if(C.isInitialized)throw Error("plausible.init() can only be called once");if(!e||!e.domain)throw Error("plausible.init(): domain argument is required");e.endpoint||(e.endpoint="https://plausible.io/api/event"),Object.assign(C,e),C.isInitialized=!0}function Wr(e,t,n){window.fetch&&fetch(e,{method:"POST",headers:{"Content-Type":"text/plain"},keepalive:!0,body:JSON.stringify(t)}).then(function(r){n&&n.callback&&n.callback({status:r.status})}).catch(function(r){n&&n.callback&&n.callback({error:r})})}var $t=!1,zr=location.href,Yr={},jt=-1,ge=0,Me=0;function vu(){$t&&(Xr(),fe=Fe(),pe=Bt())}function hu(e){Vt=!1,zr=e.u,Yr=e.p,jt=-1,Me=0,ge=Date.now(),gu()}function pu(){Vt=!0}function Xr(){var e=Qr();if(!Vt&&(jt<pe||e>=3e3)){jt=pe;var t={n:"engagement",sd:Math.round(pe/fe*100),d:C.domain,u:zr,p:Yr,e,v:31};ge=0,Me=0,C.hashBasedRouting&&(t.h=1),Wr(C.endpoint,t)}}function Gt(){document.visibilityState==="visible"&&document.hasFocus()&&ge===0?ge=Date.now():document.visibilityState!=="hidden"&&document.hasFocus()||(Me=Qr(),ge=0,Xr())}function gu(){$t||(document.addEventListener("visibilitychange",Gt),window.addEventListener("blur",Gt),window.addEventListener("focus",Gt),$t=!0)}function Qr(){return ge?Me+(Date.now()-ge):Me}function Fe(){var e=document.body||{},t=document.documentElement||{};return Math.max(e.scrollHeight||0,e.offsetHeight||0,e.clientHeight||0,t.scrollHeight||0,t.offsetHeight||0,t.clientHeight||0)}function Bt(){var e=document.body||{},t=document.documentElement||{},n=window.innerHeight||t.clientHeight||0,r=window.scrollY||t.scrollTop||e.scrollTop||0;return fe<=n?fe:r+n}function mu(){fe=Fe(),pe=Bt(),window.addEventListener("load",function(){fe=Fe();var e=0,t=setInterval(function(){fe=Fe(),++e==15&&clearInterval(t)},200)}),document.addEventListener("scroll",function(){fe=Fe();var e=Bt();e>pe&&(pe=e)})}function me(e,t){if(!C.isInitialized)throw Error("plausible.track() can only be called after plausible.init()");var n,r=e==="pageview";if(r&&vu(),!C.captureOnLocalhost){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(location.hostname)||location.protocol==="file:")return ct(e,t,"localhost");if((window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)&&!window.__plausible)return ct(e,t)}try{if(window.localStorage.plausible_ignore==="true")return ct(e,t,"localStorage flag")}catch(a){}var i={};i.n=e,i.v=31;var o=t&&(t.u||t.url);if(i.u=o||location.href,i.d=C.domain,i.r=document.referrer||null,t&&t.props&&(i.p=t.props),t&&t.interactive===!1&&(i.i=!1),t&&t.revenue&&(i.$=t.revenue),C.customProperties){var n=C.customProperties;typeof n=="function"&&(n=C.customProperties(e)),typeof n=="object"&&(i.p=Object.assign({},n,i.p))}if(C.hashBasedRouting&&(i.h=1),typeof C.transformRequest=="function"&&!(i=C.transformRequest(i)))return ct(e,t,"transformRequest");r&&hu(i),Wr(C.endpoint,i,t)}function ct(e,t,n){n&&C.logging&&console.warn("Ignoring Event: "+n),t&&t.callback&&t.callback(),e==="pageview"&&pu()}var yu=["pdf","xlsx","docx","txt","rtf","csv","exe","key","pps","ppt","pptx","7z","pkg","rar","gz","zip","avi","mov","mp4","mpeg","wmv","midi","mp3","wav","wma","dmg"],Zr=1,Jr=3,ei=yu;function bu(e){for(;e&&(e.tagName===void 0||!ti(e)||!e.href);)e=e.parentNode;return e}function ti(e){return e&&e.tagName&&e.tagName.toLowerCase()==="a"}function ni(e){if(e.type!=="auxclick"||e.button===Zr){var t=bu(e.target),n=t&&typeof t.href=="string"&&t.href.split("?")[0];if(!Wt(t,0)){if(C.outboundLinks&&Eu(t))return Kt(e,t,{name:"Outbound Link: Click",props:{url:t.href}});if(C.fileDownloads&&wu(n))return Kt(e,t,{name:"File Download",props:{url:n}})}}}function Kt(e,t,n){var r;(r={props:n.props}).revenue=n.revenue,me(n.name,r)}function Eu(e){return e&&typeof e.href=="string"&&e.host&&e.host!==location.host}function wu(e){if(!e)return!1;var t=e.split(".").pop();return ei.some(function(n){return n===t})}function Ht(e){var t=e&&e.classList;if(t){for(var n=0;n<t.length;n++)if(t.item(n).match(/plausible-event-name(=|--)(.+)/))return!0}return!1}function Wt(e,t){return!!e&&!(t>Jr)&&(!!Ht(e)||Wt(e.parentNode,t+1))}function ri(e){var t=Ht(e)?e:e&&e.parentNode,n={name:null,props:{}};n.revenue={};var r=t&&t.classList;if(!r)return n;for(var i=0;i<r.length;i++){var o,a,u=r.item(i),s=u.match(/plausible-event-(.+)(=|--)(.+)/);s&&(o=s[1],a=s[3].replace(/\+/g," "),o.toLowerCase()=="name"?n.name=a:n.props[o]=a);var c=u.match(/plausible-revenue-(.+)(=|--)(.+)/);c&&(o=c[1],a=c[3],n.revenue[o]=a)}return n}function _u(){function e(t){if(t.type!=="auxclick"||t.button===Zr){for(var n,r,i,o=t.target,a=0;a<=Jr&&o;a++){if((n=o)&&n.tagName&&n.tagName.toLowerCase()==="form")return;ti(o)&&(r=o),Ht(o)&&(i=o),o=o.parentNode}if(i){var u=ri(i);if(r)u.props.url=r.href,Kt(t,r,u);else{var s={};s.props=u.props,s.revenue=u.revenue,me(u.name,s)}}}}document.addEventListener("click",ni),document.addEventListener("auxclick",ni),C.fileDownloads&&typeof C.fileDownloads=="object"&&Array.isArray(C.fileDownloads.fileExtensions)&&(ei=C.fileDownloads.fileExtensions),C.formSubmissions&&document.addEventListener("submit",function(t){(t.target.hasAttribute("novalidate")||t.target.checkValidity())&&(Wt(t.target,0)||me("Form: Submission"))},!0),document.addEventListener("submit",function(t){var n,r=ri(t.target);r.name&&((n={props:r.props}).revenue=r.revenue,me(r.name,n))}),document.addEventListener("click",e),document.addEventListener("auxclick",e)}function Iu(e){function t(a){(C.hashBasedRouting||!a||n!==location.pathname)&&(n=location.pathname,e("pageview"))}var n,r=function(){t(!0)};if(C.hashBasedRouting)window.addEventListener("hashchange",r);else{var i=window.history;if(i.pushState){var o=i.pushState;i.pushState=function(){o.apply(this,arguments),r()},window.addEventListener("popstate",r)}}document.visibilityState==="hidden"||document.visibilityState==="prerender"?document.addEventListener("visibilitychange",function(){n||document.visibilityState!=="visible"||t()}):t(),window.addEventListener("pageshow",function(a){a.persisted&&t()})}function Tu(e){du(fu(e||{})),mu(),C.autoCapturePageviews&&Iu(me),_u(),C.bindToWindow&&typeof window!="undefined"&&(window.plausible=me,window.plausible.s="npm",window.plausible.v=31,window.plausible.l=!0)}class Su{constructor(t=window.location.hostname,n=null){this.trackingId=t,this.offsetTrackingId=n,this.hasPlausible()||this.loadPlausible()}trackEvent(t,n){me(t,n)}hasPlausible(){var n;if(typeof window.plausible=="function")return!0;const t=document.getElementsByTagName("script");for(let r=0;r<t.length;r++)if((n=t[r])!=null&&n.src.includes("plausible.io"))return!0;return!1}loadPlausible(){const t=Array.isArray(this.trackingId)?this.trackingId.join(","):this.trackingId;Tu({domain:t||""})}}class Au{constructor(){z(this,"isReady",!1);z(this,"interval",null);z(this,"config",null);z(this,"events",{});z(this,"googleAnalytics",null);z(this,"facebookPixel",null);z(this,"amplitude",null);z(this,"plausible",null);z(this,"localStorageKey","offset-analytics-events");z(this,"offsetGoogleAnalyticsId");z(this,"offsetFacebookPixelId");z(this,"offsetAmplitudeId");var n,r,i;const t=window.localStorage.getItem(this.localStorageKey);if(t)try{this.events=JSON.parse(t)}catch(o){this.events={}}this.offsetGoogleAnalyticsId=((n=window.OFFSET)==null?void 0:n.offsetGoogleAnalyticsId)||void 0,this.offsetFacebookPixelId=((r=window.OFFSET)==null?void 0:r.offsetFacebookPixelId)||void 0,this.offsetAmplitudeId=((i=window.OFFSET)==null?void 0:i.offsetAmplitudeId)||void 0,this.getConfig(),this.interval=setInterval(()=>{this.processEvents()},100)}trackEvent(t,n,r=null){this.events[t]=[n,r],window.localStorage.setItem(this.localStorageKey,JSON.stringify(this.events)),this.isReady&&(clearInterval(this.interval),this.interval=null,this.processEvents())}processEvents(){if(this.config==null)return;const t=Object.keys(this.events);if(t.length===0)return;(!V(this.config.google_analytics_id)||!V(this.offsetGoogleAnalyticsId))&&this.googleAnalytics==null&&(se("Setting up Google Analytics"),this.googleAnalytics=new si(this.config.google_analytics_id,this.offsetGoogleAnalyticsId)),this.config.enable_facebook_pixel_tracking&&(!V(this.config.facebook_pixel_id)||!V(this.offsetFacebookPixelId))&&this.facebookPixel==null&&(se("Setting up Facebook Pixel"),this.facebookPixel=new li(this.config.facebook_pixel_id,this.offsetFacebookPixelId)),this.config.enable_amplitude&&(!V(this.config.amplitude_api_key)||!V(this.offsetAmplitudeId))&&this.amplitude==null&&(se("Setting up Amplitude"),this.amplitude=new lu(this.config.amplitude_api_key,this.offsetAmplitudeId)),!V(this.config.plausible_domains)&&this.plausible==null&&(se("Setting up Plausible"),this.plausible=new Su(this.config.plausible_domains)),this.isReady=!0;function n(r,i){var o;if(i!=null)try{if(typeof((o=window.OFFSET)==null?void 0:o.customizeAnalytics)=="function"){const a=window.OFFSET.customizeAnalytics(r);if(a===!1)return;a&&(r.event=a.event,r.data=a.data)}i(r.event,r.data)}catch(a){se("Offset Analytics",a)}}t.forEach(r=>{var a,u,s,c;const[i,o]=this.events[r];se(`Tracking event ${r}`,i),this.googleAnalytics&&(o==="google"||o==null)&&n({event:r,data:i,platform:"google"},(a=this.googleAnalytics)==null?void 0:a.trackEvent.bind(this.googleAnalytics)),this.facebookPixel&&(o==="facebook"||o==null)&&n({event:r,data:i,platform:"facebook"},(u=this.facebookPixel)==null?void 0:u.trackEvent.bind(this.facebookPixel)),this.amplitude&&(o==="amplitude"||o==null)&&n({event:r,data:i,platform:"amplitude"},(s=this.amplitude)==null?void 0:s.trackEvent.bind(this.amplitude)),this.plausible&&(o==="plausible"||o==null)&&n({event:r,data:i,platform:"plausible"},(c=this.plausible)==null?void 0:c.trackEvent.bind(this.plausible))}),setTimeout(()=>{window.localStorage.removeItem(this.localStorageKey)},200),this.events={}}getConfig(){return lt(this,null,function*(){this.config=yield ae("config"),this.config&&(this.config.enable_facebook_pixel_tracking=this.config.enable_facebook_pixel_tracking==="TRUE",this.config.enable_amplitude=this.config.enable_amplitude==="TRUE",V(this.config.google_analytics_id)&&!V(this.config.google_tag_manager_id)&&(this.config.google_analytics_id=this.config.google_tag_manager_id))})}}window.OFFSET=window.OFFSET||{},window.OFFSET.analytics=new Au;class ku extends HTMLElement{connectedCallback(){var o,a,u;let t=null;const n=(o=this.getAttribute("event"))!=null?o:"PageView",r=this.getAttribute("data"),i=this.getAttribute("platform");try{t=JSON.parse(r!=null?r:"{}"),Object.keys(t||{}).length===0&&(t=r)}catch(s){t=r}(u=(a=window.OFFSET)==null?void 0:a.analytics)==null||u.trackEvent(n,t,i)}}customElements.get("offset-analytics")||customElements.define("offset-analytics",ku);function ii(){var t;const e=document.querySelectorAll("[data-offset-analytics]");for(const n of e){const r=n.getAttribute("data-offset-analytics");let i="click",o=null;if(r!=null&&r.includes(":")){const a=r==null?void 0:r.split(":");i=a[0],o=a[1]}else{const a=(t=n.tagName)==null?void 0:t.toUpperCase();a==="A"||a==="BUTTON"?i="click":a==="INPUT"||a==="TEXTAREA"||a==="SELECT"?i="change":a==="FORM"&&(i="submit"),o=r}if(V(o)){console.error("Invalid data-offset-analytics attribute. Expected format: click:eventName",n);continue}n.setAttribute("data-offset-analytics-registered",r!=null?r:""),n.removeAttribute("data-offset-analytics"),n.addEventListener(i,()=>{var c;let a=null;const u=n.getAttribute("data-offset-analytics-data"),s=n.getAttribute("data-offset-analytics-platform");try{a=JSON.parse(u!=null?u:"{}"),Object.keys(a||{}).length===0&&(a=u)}catch(l){a=u}(c=window.OFFSET)==null||c.analytics.trackEvent(o,a,s)},!1)}}document.addEventListener("DOMContentLoaded",()=>{ii()}),q.registerEvents=ii,Object.defineProperty(q,Symbol.toStringTag,{value:"Module"})});
19862
19863
19864/***/ }),
19865
vendor: 89,010 bytes, lines 19866-22493
19866/***/ "../FigureBaseResources/node_modules/popper.js/dist/esm/popper.js":
19867/*!************************************************************************!*\
19868  !*** ../FigureBaseResources/node_modules/popper.js/dist/esm/popper.js ***!
19869  \************************************************************************/
19870/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
19871
19872"use strict";
19873__webpack_require__.r(__webpack_exports__);
19874/**!
19875 * @fileOverview Kickass library to create and place poppers near their reference elements.
19876 * @version 1.16.1
19877 * @license
19878 * Copyright (c) 2016 Federico Zivolo and contributors
19879 *
19880 * Permission is hereby granted, free of charge, to any person obtaining a copy
19881 * of this software and associated documentation files (the "Software"), to deal
19882 * in the Software without restriction, including without limitation the rights
19883 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19884 * copies of the Software, and to permit persons to whom the Software is
19885 * furnished to do so, subject to the following conditions:
19886 *
19887 * The above copyright notice and this permission notice shall be included in all
19888 * copies or substantial portions of the Software.
19889 *
19890 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19891 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19892 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19893 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19894 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19895 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19896 * SOFTWARE.
19897 */
19898var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';
19899
19900var timeoutDuration = function () {
19901  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
19902  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
19903    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
19904      return 1;
19905    }
19906  }
19907  return 0;
19908}();
19909
19910function microtaskDebounce(fn) {
19911  var called = false;
19912  return function () {
19913    if (called) {
19914      return;
19915    }
19916    called = true;
19917    window.Promise.resolve().then(function () {
19918      called = false;
19919      fn();
19920    });
19921  };
19922}
19923
19924function taskDebounce(fn) {
19925  var scheduled = false;
19926  return function () {
19927    if (!scheduled) {
19928      scheduled = true;
19929      setTimeout(function () {
19930        scheduled = false;
19931        fn();
19932      }, timeoutDuration);
19933    }
19934  };
19935}
19936
19937var supportsMicroTasks = isBrowser && window.Promise;
19938
19939/**
19940* Create a debounced version of a method, that's asynchronously deferred
19941* but called in the minimum time possible.
19942*
19943* @method
19944* @memberof Popper.Utils
19945* @argument {Function} fn
19946* @returns {Function}
19947*/
19948var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
19949
19950/**
19951 * Check if the given variable is a function
19952 * @method
19953 * @memberof Popper.Utils
19954 * @argument {Any} functionToCheck - variable to check
19955 * @returns {Boolean} answer to: is a function?
19956 */
19957function isFunction(functionToCheck) {
19958  var getType = {};
19959  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
19960}
19961
19962/**
19963 * Get CSS computed property of the given element
19964 * @method
19965 * @memberof Popper.Utils
19966 * @argument {Eement} element
19967 * @argument {String} property
19968 */
19969function getStyleComputedProperty(element, property) {
19970  if (element.nodeType !== 1) {
19971    return [];
19972  }
19973  // NOTE: 1 DOM access here
19974  var window = element.ownerDocument.defaultView;
19975  var css = window.getComputedStyle(element, null);
19976  return property ? css[property] : css;
19977}
19978
19979/**
19980 * Returns the parentNode or the host of the element
19981 * @method
19982 * @memberof Popper.Utils
19983 * @argument {Element} element
19984 * @returns {Element} parent
19985 */
19986function getParentNode(element) {
19987  if (element.nodeName === 'HTML') {
19988    return element;
19989  }
19990  return element.parentNode || element.host;
19991}
19992
19993/**
19994 * Returns the scrolling parent of the given element
19995 * @method
19996 * @memberof Popper.Utils
19997 * @argument {Element} element
19998 * @returns {Element} scroll parent
19999 */
20000function getScrollParent(element) {
20001  // Return body, `getScroll` will take care to get the correct `scrollTop` from it
20002  if (!element) {
20003    return document.body;
20004  }
20005
20006  switch (element.nodeName) {
20007    case 'HTML':
20008    case 'BODY':
20009      return element.ownerDocument.body;
20010    case '#document':
20011      return element.body;
20012  }
20013
20014  // Firefox want us to check `-x` and `-y` variations as well
20015
20016  var _getStyleComputedProp = getStyleComputedProperty(element),
20017      overflow = _getStyleComputedProp.overflow,
20018      overflowX = _getStyleComputedProp.overflowX,
20019      overflowY = _getStyleComputedProp.overflowY;
20020
20021  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
20022    return element;
20023  }
20024
20025  return getScrollParent(getParentNode(element));
20026}
20027
20028/**
20029 * Returns the reference node of the reference object, or the reference object itself.
20030 * @method
20031 * @memberof Popper.Utils
20032 * @param {Element|Object} reference - the reference element (the popper will be relative to this)
20033 * @returns {Element} parent
20034 */
20035function getReferenceNode(reference) {
20036  return reference && reference.referenceNode ? reference.referenceNode : reference;
20037}
20038
20039var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
20040var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
20041
20042/**
20043 * Determines if the browser is Internet Explorer
20044 * @method
20045 * @memberof Popper.Utils
20046 * @param {Number} version to check
20047 * @returns {Boolean} isIE
20048 */
20049function isIE(version) {
20050  if (version === 11) {
20051    return isIE11;
20052  }
20053  if (version === 10) {
20054    return isIE10;
20055  }
20056  return isIE11 || isIE10;
20057}
20058
20059/**
20060 * Returns the offset parent of the given element
20061 * @method
20062 * @memberof Popper.Utils
20063 * @argument {Element} element
20064 * @returns {Element} offset parent
20065 */
20066function getOffsetParent(element) {
20067  if (!element) {
20068    return document.documentElement;
20069  }
20070
20071  var noOffsetParent = isIE(10) ? document.body : null;
20072
20073  // NOTE: 1 DOM access here
20074  var offsetParent = element.offsetParent || null;
20075  // Skip hidden elements which don't have an offsetParent
20076  while (offsetParent === noOffsetParent && element.nextElementSibling) {
20077    offsetParent = (element = element.nextElementSibling).offsetParent;
20078  }
20079
20080  var nodeName = offsetParent && offsetParent.nodeName;
20081
20082  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
20083    return element ? element.ownerDocument.documentElement : document.documentElement;
20084  }
20085
20086  // .offsetParent will return the closest TH, TD or TABLE in case
20087  // no offsetParent is present, I hate this job...
20088  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
20089    return getOffsetParent(offsetParent);
20090  }
20091
20092  return offsetParent;
20093}
20094
20095function isOffsetContainer(element) {
20096  var nodeName = element.nodeName;
20097
20098  if (nodeName === 'BODY') {
20099    return false;
20100  }
20101  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
20102}
20103
20104/**
20105 * Finds the root node (document, shadowDOM root) of the given element
20106 * @method
20107 * @memberof Popper.Utils
20108 * @argument {Element} node
20109 * @returns {Element} root node
20110 */
20111function getRoot(node) {
20112  if (node.parentNode !== null) {
20113    return getRoot(node.parentNode);
20114  }
20115
20116  return node;
20117}
20118
20119/**
20120 * Finds the offset parent common to the two provided nodes
20121 * @method
20122 * @memberof Popper.Utils
20123 * @argument {Element} element1
20124 * @argument {Element} element2
20125 * @returns {Element} common offset parent
20126 */
20127function findCommonOffsetParent(element1, element2) {
20128  // This check is needed to avoid errors in case one of the elements isn't defined for any reason
20129  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
20130    return document.documentElement;
20131  }
20132
20133  // Here we make sure to give as "start" the element that comes first in the DOM
20134  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
20135  var start = order ? element1 : element2;
20136  var end = order ? element2 : element1;
20137
20138  // Get common ancestor container
20139  var range = document.createRange();
20140  range.setStart(start, 0);
20141  range.setEnd(end, 0);
20142  var commonAncestorContainer = range.commonAncestorContainer;
20143
20144  // Both nodes are inside #document
20145
20146  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
20147    if (isOffsetContainer(commonAncestorContainer)) {
20148      return commonAncestorContainer;
20149    }
20150
20151    return getOffsetParent(commonAncestorContainer);
20152  }
20153
20154  // one of the nodes is inside shadowDOM, find which one
20155  var element1root = getRoot(element1);
20156  if (element1root.host) {
20157    return findCommonOffsetParent(element1root.host, element2);
20158  } else {
20159    return findCommonOffsetParent(element1, getRoot(element2).host);
20160  }
20161}
20162
20163/**
20164 * Gets the scroll value of the given element in the given side (top and left)
20165 * @method
20166 * @memberof Popper.Utils
20167 * @argument {Element} element
20168 * @argument {String} side `top` or `left`
20169 * @returns {number} amount of scrolled pixels
20170 */
20171function getScroll(element) {
20172  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';
20173
20174  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
20175  var nodeName = element.nodeName;
20176
20177  if (nodeName === 'BODY' || nodeName === 'HTML') {
20178    var html = element.ownerDocument.documentElement;
20179    var scrollingElement = element.ownerDocument.scrollingElement || html;
20180    return scrollingElement[upperSide];
20181  }
20182
20183  return element[upperSide];
20184}
20185
20186/*
20187 * Sum or subtract the element scroll values (left and top) from a given rect object
20188 * @method
20189 * @memberof Popper.Utils
20190 * @param {Object} rect - Rect object you want to change
20191 * @param {HTMLElement} element - The element from the function reads the scroll values
20192 * @param {Boolean} subtract - set to true if you want to subtract the scroll values
20193 * @return {Object} rect - The modifier rect object
20194 */
20195function includeScroll(rect, element) {
20196  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
20197
20198  var scrollTop = getScroll(element, 'top');
20199  var scrollLeft = getScroll(element, 'left');
20200  var modifier = subtract ? -1 : 1;
20201  rect.top += scrollTop * modifier;
20202  rect.bottom += scrollTop * modifier;
20203  rect.left += scrollLeft * modifier;
20204  rect.right += scrollLeft * modifier;
20205  return rect;
20206}
20207
20208/*
20209 * Helper to detect borders of a given element
20210 * @method
20211 * @memberof Popper.Utils
20212 * @param {CSSStyleDeclaration} styles
20213 * Result of `getStyleComputedProperty` on the given element
20214 * @param {String} axis - `x` or `y`
20215 * @return {number} borders - The borders size of the given axis
20216 */
20217
20218function getBordersSize(styles, axis) {
20219  var sideA = axis === 'x' ? 'Left' : 'Top';
20220  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
20221
20222  return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);
20223}
20224
20225function getSize(axis, body, html, computedStyle) {
20226  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);
20227}
20228
20229function getWindowSizes(document) {
20230  var body = document.body;
20231  var html = document.documentElement;
20232  var computedStyle = isIE(10) && getComputedStyle(html);
20233
20234  return {
20235    height: getSize('Height', body, html, computedStyle),
20236    width: getSize('Width', body, html, computedStyle)
20237  };
20238}
20239
20240var classCallCheck = function (instance, Constructor) {
20241  if (!(instance instanceof Constructor)) {
20242    throw new TypeError("Cannot call a class as a function");
20243  }
20244};
20245
20246var createClass = function () {
20247  function defineProperties(target, props) {
20248    for (var i = 0; i < props.length; i++) {
20249      var descriptor = props[i];
20250      descriptor.enumerable = descriptor.enumerable || false;
20251      descriptor.configurable = true;
20252      if ("value" in descriptor) descriptor.writable = true;
20253      Object.defineProperty(target, descriptor.key, descriptor);
20254    }
20255  }
20256
20257  return function (Constructor, protoProps, staticProps) {
20258    if (protoProps) defineProperties(Constructor.prototype, protoProps);
20259    if (staticProps) defineProperties(Constructor, staticProps);
20260    return Constructor;
20261  };
20262}();
20263
20264
20265
20266
20267
20268var defineProperty = function (obj, key, value) {
20269  if (key in obj) {
20270    Object.defineProperty(obj, key, {
20271      value: value,
20272      enumerable: true,
20273      configurable: true,
20274      writable: true
20275    });
20276  } else {
20277    obj[key] = value;
20278  }
20279
20280  return obj;
20281};
20282
20283var _extends = Object.assign || function (target) {
20284  for (var i = 1; i < arguments.length; i++) {
20285    var source = arguments[i];
20286
20287    for (var key in source) {
20288      if (Object.prototype.hasOwnProperty.call(source, key)) {
20289        target[key] = source[key];
20290      }
20291    }
20292  }
20293
20294  return target;
20295};
20296
20297/**
20298 * Given element offsets, generate an output similar to getBoundingClientRect
20299 * @method
20300 * @memberof Popper.Utils
20301 * @argument {Object} offsets
20302 * @returns {Object} ClientRect like output
20303 */
20304function getClientRect(offsets) {
20305  return _extends({}, offsets, {
20306    right: offsets.left + offsets.width,
20307    bottom: offsets.top + offsets.height
20308  });
20309}
20310
20311/**
20312 * Get bounding client rect of given element
20313 * @method
20314 * @memberof Popper.Utils
20315 * @param {HTMLElement} element
20316 * @return {Object} client rect
20317 */
20318function getBoundingClientRect(element) {
20319  var rect = {};
20320
20321  // IE10 10 FIX: Please, don't ask, the element isn't
20322  // considered in DOM in some circumstances...
20323  // This isn't reproducible in IE10 compatibility mode of IE11
20324  try {
20325    if (isIE(10)) {
20326      rect = element.getBoundingClientRect();
20327      var scrollTop = getScroll(element, 'top');
20328      var scrollLeft = getScroll(element, 'left');
20329      rect.top += scrollTop;
20330      rect.left += scrollLeft;
20331      rect.bottom += scrollTop;
20332      rect.right += scrollLeft;
20333    } else {
20334      rect = element.getBoundingClientRect();
20335    }
20336  } catch (e) {}
20337
20338  var result = {
20339    left: rect.left,
20340    top: rect.top,
20341    width: rect.right - rect.left,
20342    height: rect.bottom - rect.top
20343  };
20344
20345  // subtract scrollbar size from sizes
20346  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};
20347  var width = sizes.width || element.clientWidth || result.width;
20348  var height = sizes.height || element.clientHeight || result.height;
20349
20350  var horizScrollbar = element.offsetWidth - width;
20351  var vertScrollbar = element.offsetHeight - height;
20352
20353  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
20354  // we make this check conditional for performance reasons
20355  if (horizScrollbar || vertScrollbar) {
20356    var styles = getStyleComputedProperty(element);
20357    horizScrollbar -= getBordersSize(styles, 'x');
20358    vertScrollbar -= getBordersSize(styles, 'y');
20359
20360    result.width -= horizScrollbar;
20361    result.height -= vertScrollbar;
20362  }
20363
20364  return getClientRect(result);
20365}
20366
20367function getOffsetRectRelativeToArbitraryNode(children, parent) {
20368  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
20369
20370  var isIE10 = isIE(10);
20371  var isHTML = parent.nodeName === 'HTML';
20372  var childrenRect = getBoundingClientRect(children);
20373  var parentRect = getBoundingClientRect(parent);
20374  var scrollParent = getScrollParent(children);
20375
20376  var styles = getStyleComputedProperty(parent);
20377  var borderTopWidth = parseFloat(styles.borderTopWidth);
20378  var borderLeftWidth = parseFloat(styles.borderLeftWidth);
20379
20380  // In cases where the parent is fixed, we must ignore negative scroll in offset calc
20381  if (fixedPosition && isHTML) {
20382    parentRect.top = Math.max(parentRect.top, 0);
20383    parentRect.left = Math.max(parentRect.left, 0);
20384  }
20385  var offsets = getClientRect({
20386    top: childrenRect.top - parentRect.top - borderTopWidth,
20387    left: childrenRect.left - parentRect.left - borderLeftWidth,
20388    width: childrenRect.width,
20389    height: childrenRect.height
20390  });
20391  offsets.marginTop = 0;
20392  offsets.marginLeft = 0;
20393
20394  // Subtract margins of documentElement in case it's being used as parent
20395  // we do this only on HTML because it's the only element that behaves
20396  // differently when margins are applied to it. The margins are included in
20397  // the box of the documentElement, in the other cases not.
20398  if (!isIE10 && isHTML) {
20399    var marginTop = parseFloat(styles.marginTop);
20400    var marginLeft = parseFloat(styles.marginLeft);
20401
20402    offsets.top -= borderTopWidth - marginTop;
20403    offsets.bottom -= borderTopWidth - marginTop;
20404    offsets.left -= borderLeftWidth - marginLeft;
20405    offsets.right -= borderLeftWidth - marginLeft;
20406
20407    // Attach marginTop and marginLeft because in some circumstances we may need them
20408    offsets.marginTop = marginTop;
20409    offsets.marginLeft = marginLeft;
20410  }
20411
20412  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
20413    offsets = includeScroll(offsets, parent);
20414  }
20415
20416  return offsets;
20417}
20418
20419function getViewportOffsetRectRelativeToArtbitraryNode(element) {
20420  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
20421
20422  var html = element.ownerDocument.documentElement;
20423  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
20424  var width = Math.max(html.clientWidth, window.innerWidth || 0);
20425  var height = Math.max(html.clientHeight, window.innerHeight || 0);
20426
20427  var scrollTop = !excludeScroll ? getScroll(html) : 0;
20428  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
20429
20430  var offset = {
20431    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
20432    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
20433    width: width,
20434    height: height
20435  };
20436
20437  return getClientRect(offset);
20438}
20439
20440/**
20441 * Check if the given element is fixed or is inside a fixed parent
20442 * @method
20443 * @memberof Popper.Utils
20444 * @argument {Element} element
20445 * @argument {Element} customContainer
20446 * @returns {Boolean} answer to "isFixed?"
20447 */
20448function isFixed(element) {
20449  var nodeName = element.nodeName;
20450  if (nodeName === 'BODY' || nodeName === 'HTML') {
20451    return false;
20452  }
20453  if (getStyleComputedProperty(element, 'position') === 'fixed') {
20454    return true;
20455  }
20456  var parentNode = getParentNode(element);
20457  if (!parentNode) {
20458    return false;
20459  }
20460  return isFixed(parentNode);
20461}
20462
20463/**
20464 * Finds the first parent of an element that has a transformed property defined
20465 * @method
20466 * @memberof Popper.Utils
20467 * @argument {Element} element
20468 * @returns {Element} first transformed parent or documentElement
20469 */
20470
20471function getFixedPositionOffsetParent(element) {
20472  // This check is needed to avoid errors in case one of the elements isn't defined for any reason
20473  if (!element || !element.parentElement || isIE()) {
20474    return document.documentElement;
20475  }
20476  var el = element.parentElement;
20477  while (el && getStyleComputedProperty(el, 'transform') === 'none') {
20478    el = el.parentElement;
20479  }
20480  return el || document.documentElement;
20481}
20482
20483/**
20484 * Computed the boundaries limits and return them
20485 * @method
20486 * @memberof Popper.Utils
20487 * @param {HTMLElement} popper
20488 * @param {HTMLElement} reference
20489 * @param {number} padding
20490 * @param {HTMLElement} boundariesElement - Element used to define the boundaries
20491 * @param {Boolean} fixedPosition - Is in fixed position mode
20492 * @returns {Object} Coordinates of the boundaries
20493 */
20494function getBoundaries(popper, reference, padding, boundariesElement) {
20495  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
20496
20497  // NOTE: 1 DOM access here
20498
20499  var boundaries = { top: 0, left: 0 };
20500  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));
20501
20502  // Handle viewport case
20503  if (boundariesElement === 'viewport') {
20504    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
20505  } else {
20506    // Handle other cases based on DOM element used as boundaries
20507    var boundariesNode = void 0;
20508    if (boundariesElement === 'scrollParent') {
20509      boundariesNode = getScrollParent(getParentNode(reference));
20510      if (boundariesNode.nodeName === 'BODY') {
20511        boundariesNode = popper.ownerDocument.documentElement;
20512      }
20513    } else if (boundariesElement === 'window') {
20514      boundariesNode = popper.ownerDocument.documentElement;
20515    } else {
20516      boundariesNode = boundariesElement;
20517    }
20518
20519    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
20520
20521    // In case of HTML, we need a different computation
20522    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
20523      var _getWindowSizes = getWindowSizes(popper.ownerDocument),
20524          height = _getWindowSizes.height,
20525          width = _getWindowSizes.width;
20526
20527      boundaries.top += offsets.top - offsets.marginTop;
20528      boundaries.bottom = height + offsets.top;
20529      boundaries.left += offsets.left - offsets.marginLeft;
20530      boundaries.right = width + offsets.left;
20531    } else {
20532      // for all the other DOM elements, this one is good
20533      boundaries = offsets;
20534    }
20535  }
20536
20537  // Add paddings
20538  padding = padding || 0;
20539  var isPaddingNumber = typeof padding === 'number';
20540  boundaries.left += isPaddingNumber ? padding : padding.left || 0;
20541  boundaries.top += isPaddingNumber ? padding : padding.top || 0;
20542  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;
20543  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;
20544
20545  return boundaries;
20546}
20547
20548function getArea(_ref) {
20549  var width = _ref.width,
20550      height = _ref.height;
20551
20552  return width * height;
20553}
20554
20555/**
20556 * Utility used to transform the `auto` placement to the placement with more
20557 * available space.
20558 * @method
20559 * @memberof Popper.Utils
20560 * @argument {Object} data - The data object generated by update method
20561 * @argument {Object} options - Modifiers configuration and options
20562 * @returns {Object} The data object, properly modified
20563 */
20564function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {
20565  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
20566
20567  if (placement.indexOf('auto') === -1) {
20568    return placement;
20569  }
20570
20571  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);
20572
20573  var rects = {
20574    top: {
20575      width: boundaries.width,
20576      height: refRect.top - boundaries.top
20577    },
20578    right: {
20579      width: boundaries.right - refRect.right,
20580      height: boundaries.height
20581    },
20582    bottom: {
20583      width: boundaries.width,
20584      height: boundaries.bottom - refRect.bottom
20585    },
20586    left: {
20587      width: refRect.left - boundaries.left,
20588      height: boundaries.height
20589    }
20590  };
20591
20592  var sortedAreas = Object.keys(rects).map(function (key) {
20593    return _extends({
20594      key: key
20595    }, rects[key], {
20596      area: getArea(rects[key])
20597    });
20598  }).sort(function (a, b) {
20599    return b.area - a.area;
20600  });
20601
20602  var filteredAreas = sortedAreas.filter(function (_ref2) {
20603    var width = _ref2.width,
20604        height = _ref2.height;
20605    return width >= popper.clientWidth && height >= popper.clientHeight;
20606  });
20607
20608  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
20609
20610  var variation = placement.split('-')[1];
20611
20612  return computedPlacement + (variation ? '-' + variation : '');
20613}
20614
20615/**
20616 * Get offsets to the reference element
20617 * @method
20618 * @memberof Popper.Utils
20619 * @param {Object} state
20620 * @param {Element} popper - the popper element
20621 * @param {Element} reference - the reference element (the popper will be relative to this)
20622 * @param {Element} fixedPosition - is in fixed position mode
20623 * @returns {Object} An object containing the offsets which will be applied to the popper
20624 */
20625function getReferenceOffsets(state, popper, reference) {
20626  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
20627
20628  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));
20629  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
20630}
20631
20632/**
20633 * Get the outer sizes of the given element (offset size + margins)
20634 * @method
20635 * @memberof Popper.Utils
20636 * @argument {Element} element
20637 * @returns {Object} object containing width and height properties
20638 */
20639function getOuterSizes(element) {
20640  var window = element.ownerDocument.defaultView;
20641  var styles = window.getComputedStyle(element);
20642  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);
20643  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);
20644  var result = {
20645    width: element.offsetWidth + y,
20646    height: element.offsetHeight + x
20647  };
20648  return result;
20649}
20650
20651/**
20652 * Get the opposite placement of the given one
20653 * @method
20654 * @memberof Popper.Utils
20655 * @argument {String} placement
20656 * @returns {String} flipped placement
20657 */
20658function getOppositePlacement(placement) {
20659  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
20660  return placement.replace(/left|right|bottom|top/g, function (matched) {
20661    return hash[matched];
20662  });
20663}
20664
20665/**
20666 * Get offsets to the popper
20667 * @method
20668 * @memberof Popper.Utils
20669 * @param {Object} position - CSS position the Popper will get applied
20670 * @param {HTMLElement} popper - the popper element
20671 * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
20672 * @param {String} placement - one of the valid placement options
20673 * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
20674 */
20675function getPopperOffsets(popper, referenceOffsets, placement) {
20676  placement = placement.split('-')[0];
20677
20678  // Get popper node sizes
20679  var popperRect = getOuterSizes(popper);
20680
20681  // Add position, width and height to our offsets object
20682  var popperOffsets = {
20683    width: popperRect.width,
20684    height: popperRect.height
20685  };
20686
20687  // depending by the popper placement we have to compute its offsets slightly differently
20688  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
20689  var mainSide = isHoriz ? 'top' : 'left';
20690  var secondarySide = isHoriz ? 'left' : 'top';
20691  var measurement = isHoriz ? 'height' : 'width';
20692  var secondaryMeasurement = !isHoriz ? 'height' : 'width';
20693
20694  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
20695  if (placement === secondarySide) {
20696    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
20697  } else {
20698    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
20699  }
20700
20701  return popperOffsets;
20702}
20703
20704/**
20705 * Mimics the `find` method of Array
20706 * @method
20707 * @memberof Popper.Utils
20708 * @argument {Array} arr
20709 * @argument prop
20710 * @argument value
20711 * @returns index or -1
20712 */
20713function find(arr, check) {
20714  // use native find if supported
20715  if (Array.prototype.find) {
20716    return arr.find(check);
20717  }
20718
20719  // use `filter` to obtain the same behavior of `find`
20720  return arr.filter(check)[0];
20721}
20722
20723/**
20724 * Return the index of the matching object
20725 * @method
20726 * @memberof Popper.Utils
20727 * @argument {Array} arr
20728 * @argument prop
20729 * @argument value
20730 * @returns index or -1
20731 */
20732function findIndex(arr, prop, value) {
20733  // use native findIndex if supported
20734  if (Array.prototype.findIndex) {
20735    return arr.findIndex(function (cur) {
20736      return cur[prop] === value;
20737    });
20738  }
20739
20740  // use `find` + `indexOf` if `findIndex` isn't supported
20741  var match = find(arr, function (obj) {
20742    return obj[prop] === value;
20743  });
20744  return arr.indexOf(match);
20745}
20746
20747/**
20748 * Loop trough the list of modifiers and run them in order,
20749 * each of them will then edit the data object.
20750 * @method
20751 * @memberof Popper.Utils
20752 * @param {dataObject} data
20753 * @param {Array} modifiers
20754 * @param {String} ends - Optional modifier name used as stopper
20755 * @returns {dataObject}
20756 */
20757function runModifiers(modifiers, data, ends) {
20758  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
20759
20760  modifiersToRun.forEach(function (modifier) {
20761    if (modifier['function']) {
20762      // eslint-disable-line dot-notation
20763      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
20764    }
20765    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
20766    if (modifier.enabled && isFunction(fn)) {
20767      // Add properties to offsets to make them a complete clientRect object
20768      // we do this before each modifier to make sure the previous one doesn't
20769      // mess with these values
20770      data.offsets.popper = getClientRect(data.offsets.popper);
20771      data.offsets.reference = getClientRect(data.offsets.reference);
20772
20773      data = fn(data, modifier);
20774    }
20775  });
20776
20777  return data;
20778}
20779
20780/**
20781 * Updates the position of the popper, computing the new offsets and applying
20782 * the new style.<br />
20783 * Prefer `scheduleUpdate` over `update` because of performance reasons.
20784 * @method
20785 * @memberof Popper
20786 */
20787function update() {
20788  // if popper is destroyed, don't perform any further update
20789  if (this.state.isDestroyed) {
20790    return;
20791  }
20792
20793  var data = {
20794    instance: this,
20795    styles: {},
20796    arrowStyles: {},
20797    attributes: {},
20798    flipped: false,
20799    offsets: {}
20800  };
20801
20802  // compute reference element offsets
20803  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
20804
20805  // compute auto placement, store placement inside the data object,
20806  // modifiers will be able to edit `placement` if needed
20807  // and refer to originalPlacement to know the original value
20808  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);
20809
20810  // store the computed placement inside `originalPlacement`
20811  data.originalPlacement = data.placement;
20812
20813  data.positionFixed = this.options.positionFixed;
20814
20815  // compute the popper offsets
20816  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
20817
20818  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
20819
20820  // run the modifiers
20821  data = runModifiers(this.modifiers, data);
20822
20823  // the first `update` will call `onCreate` callback
20824  // the other ones will call `onUpdate` callback
20825  if (!this.state.isCreated) {
20826    this.state.isCreated = true;
20827    this.options.onCreate(data);
20828  } else {
20829    this.options.onUpdate(data);
20830  }
20831}
20832
20833/**
20834 * Helper used to know if the given modifier is enabled.
20835 * @method
20836 * @memberof Popper.Utils
20837 * @returns {Boolean}
20838 */
20839function isModifierEnabled(modifiers, modifierName) {
20840  return modifiers.some(function (_ref) {
20841    var name = _ref.name,
20842        enabled = _ref.enabled;
20843    return enabled && name === modifierName;
20844  });
20845}
20846
20847/**
20848 * Get the prefixed supported property name
20849 * @method
20850 * @memberof Popper.Utils
20851 * @argument {String} property (camelCase)
20852 * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
20853 */
20854function getSupportedPropertyName(property) {
20855  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
20856  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
20857
20858  for (var i = 0; i < prefixes.length; i++) {
20859    var prefix = prefixes[i];
20860    var toCheck = prefix ? '' + prefix + upperProp : property;
20861    if (typeof document.body.style[toCheck] !== 'undefined') {
20862      return toCheck;
20863    }
20864  }
20865  return null;
20866}
20867
20868/**
20869 * Destroys the popper.
20870 * @method
20871 * @memberof Popper
20872 */
20873function destroy() {
20874  this.state.isDestroyed = true;
20875
20876  // touch DOM only if `applyStyle` modifier is enabled
20877  if (isModifierEnabled(this.modifiers, 'applyStyle')) {
20878    this.popper.removeAttribute('x-placement');
20879    this.popper.style.position = '';
20880    this.popper.style.top = '';
20881    this.popper.style.left = '';
20882    this.popper.style.right = '';
20883    this.popper.style.bottom = '';
20884    this.popper.style.willChange = '';
20885    this.popper.style[getSupportedPropertyName('transform')] = '';
20886  }
20887
20888  this.disableEventListeners();
20889
20890  // remove the popper if user explicitly asked for the deletion on destroy
20891  // do not use `remove` because IE11 doesn't support it
20892  if (this.options.removeOnDestroy) {
20893    this.popper.parentNode.removeChild(this.popper);
20894  }
20895  return this;
20896}
20897
20898/**
20899 * Get the window associated with the element
20900 * @argument {Element} element
20901 * @returns {Window}
20902 */
20903function getWindow(element) {
20904  var ownerDocument = element.ownerDocument;
20905  return ownerDocument ? ownerDocument.defaultView : window;
20906}
20907
20908function attachToScrollParents(scrollParent, event, callback, scrollParents) {
20909  var isBody = scrollParent.nodeName === 'BODY';
20910  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
20911  target.addEventListener(event, callback, { passive: true });
20912
20913  if (!isBody) {
20914    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
20915  }
20916  scrollParents.push(target);
20917}
20918
20919/**
20920 * Setup needed event listeners used to update the popper position
20921 * @method
20922 * @memberof Popper.Utils
20923 * @private
20924 */
20925function setupEventListeners(reference, options, state, updateBound) {
20926  // Resize event listener on window
20927  state.updateBound = updateBound;
20928  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
20929
20930  // Scroll event listener on scroll parents
20931  var scrollElement = getScrollParent(reference);
20932  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
20933  state.scrollElement = scrollElement;
20934  state.eventsEnabled = true;
20935
20936  return state;
20937}
20938
20939/**
20940 * It will add resize/scroll events and start recalculating
20941 * position of the popper element when they are triggered.
20942 * @method
20943 * @memberof Popper
20944 */
20945function enableEventListeners() {
20946  if (!this.state.eventsEnabled) {
20947    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);
20948  }
20949}
20950
20951/**
20952 * Remove event listeners used to update the popper position
20953 * @method
20954 * @memberof Popper.Utils
20955 * @private
20956 */
20957function removeEventListeners(reference, state) {
20958  // Remove resize event listener on window
20959  getWindow(reference).removeEventListener('resize', state.updateBound);
20960
20961  // Remove scroll event listener on scroll parents
20962  state.scrollParents.forEach(function (target) {
20963    target.removeEventListener('scroll', state.updateBound);
20964  });
20965
20966  // Reset state
20967  state.updateBound = null;
20968  state.scrollParents = [];
20969  state.scrollElement = null;
20970  state.eventsEnabled = false;
20971  return state;
20972}
20973
20974/**
20975 * It will remove resize/scroll events and won't recalculate popper position
20976 * when they are triggered. It also won't trigger `onUpdate` callback anymore,
20977 * unless you call `update` method manually.
20978 * @method
20979 * @memberof Popper
20980 */
20981function disableEventListeners() {
20982  if (this.state.eventsEnabled) {
20983    cancelAnimationFrame(this.scheduleUpdate);
20984    this.state = removeEventListeners(this.reference, this.state);
20985  }
20986}
20987
20988/**
20989 * Tells if a given input is a number
20990 * @method
20991 * @memberof Popper.Utils
20992 * @param {*} input to check
20993 * @return {Boolean}
20994 */
20995function isNumeric(n) {
20996  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
20997}
20998
20999/**
21000 * Set the style to the given popper
21001 * @method
21002 * @memberof Popper.Utils
21003 * @argument {Element} element - Element to apply the style to
21004 * @argument {Object} styles
21005 * Object with a list of properties and values which will be applied to the element
21006 */
21007function setStyles(element, styles) {
21008  Object.keys(styles).forEach(function (prop) {
21009    var unit = '';
21010    // add unit if the value is numeric and is one of the following
21011    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
21012      unit = 'px';
21013    }
21014    element.style[prop] = styles[prop] + unit;
21015  });
21016}
21017
21018/**
21019 * Set the attributes to the given popper
21020 * @method
21021 * @memberof Popper.Utils
21022 * @argument {Element} element - Element to apply the attributes to
21023 * @argument {Object} styles
21024 * Object with a list of properties and values which will be applied to the element
21025 */
21026function setAttributes(element, attributes) {
21027  Object.keys(attributes).forEach(function (prop) {
21028    var value = attributes[prop];
21029    if (value !== false) {
21030      element.setAttribute(prop, attributes[prop]);
21031    } else {
21032      element.removeAttribute(prop);
21033    }
21034  });
21035}
21036
21037/**
21038 * @function
21039 * @memberof Modifiers
21040 * @argument {Object} data - The data object generated by `update` method
21041 * @argument {Object} data.styles - List of style properties - values to apply to popper element
21042 * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element
21043 * @argument {Object} options - Modifiers configuration and options
21044 * @returns {Object} The same data object
21045 */
21046function applyStyle(data) {
21047  // any property present in `data.styles` will be applied to the popper,
21048  // in this way we can make the 3rd party modifiers add custom styles to it
21049  // Be aware, modifiers could override the properties defined in the previous
21050  // lines of this modifier!
21051  setStyles(data.instance.popper, data.styles);
21052
21053  // any property present in `data.attributes` will be applied to the popper,
21054  // they will be set as HTML attributes of the element
21055  setAttributes(data.instance.popper, data.attributes);
21056
21057  // if arrowElement is defined and arrowStyles has some properties
21058  if (data.arrowElement && Object.keys(data.arrowStyles).length) {
21059    setStyles(data.arrowElement, data.arrowStyles);
21060  }
21061
21062  return data;
21063}
21064
21065/**
21066 * Set the x-placement attribute before everything else because it could be used
21067 * to add margins to the popper margins needs to be calculated to get the
21068 * correct popper offsets.
21069 * @method
21070 * @memberof Popper.modifiers
21071 * @param {HTMLElement} reference - The reference element used to position the popper
21072 * @param {HTMLElement} popper - The HTML element used as popper
21073 * @param {Object} options - Popper.js options
21074 */
21075function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
21076  // compute reference element offsets
21077  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
21078
21079  // compute auto placement, store placement inside the data object,
21080  // modifiers will be able to edit `placement` if needed
21081  // and refer to originalPlacement to know the original value
21082  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);
21083
21084  popper.setAttribute('x-placement', placement);
21085
21086  // Apply `position` to popper before anything else because
21087  // without the position applied we can't guarantee correct computations
21088  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
21089
21090  return options;
21091}
21092
21093/**
21094 * @function
21095 * @memberof Popper.Utils
21096 * @argument {Object} data - The data object generated by `update` method
21097 * @argument {Boolean} shouldRound - If the offsets should be rounded at all
21098 * @returns {Object} The popper's position offsets rounded
21099 *
21100 * The tale of pixel-perfect positioning. It's still not 100% perfect, but as
21101 * good as it can be within reason.
21102 * Discussion here: https://github.com/FezVrasta/popper.js/pull/715
21103 *
21104 * Low DPI screens cause a popper to be blurry if not using full pixels (Safari
21105 * as well on High DPI screens).
21106 *
21107 * Firefox prefers no rounding for positioning and does not have blurriness on
21108 * high DPI screens.
21109 *
21110 * Only horizontal placement and left/right values need to be considered.
21111 */
21112function getRoundedOffsets(data, shouldRound) {
21113  var _data$offsets = data.offsets,
21114      popper = _data$offsets.popper,
21115      reference = _data$offsets.reference;
21116  var round = Math.round,
21117      floor = Math.floor;
21118
21119  var noRound = function noRound(v) {
21120    return v;
21121  };
21122
21123  var referenceWidth = round(reference.width);
21124  var popperWidth = round(popper.width);
21125
21126  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
21127  var isVariation = data.placement.indexOf('-') !== -1;
21128  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;
21129  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;
21130
21131  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;
21132  var verticalToInteger = !shouldRound ? noRound : round;
21133
21134  return {
21135    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),
21136    top: verticalToInteger(popper.top),
21137    bottom: verticalToInteger(popper.bottom),
21138    right: horizontalToInteger(popper.right)
21139  };
21140}
21141
21142var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);
21143
21144/**
21145 * @function
21146 * @memberof Modifiers
21147 * @argument {Object} data - The data object generated by `update` method
21148 * @argument {Object} options - Modifiers configuration and options
21149 * @returns {Object} The data object, properly modified
21150 */
21151function computeStyle(data, options) {
21152  var x = options.x,
21153      y = options.y;
21154  var popper = data.offsets.popper;
21155
21156  // Remove this legacy support in Popper.js v2
21157
21158  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {
21159    return modifier.name === 'applyStyle';
21160  }).gpuAcceleration;
21161  if (legacyGpuAccelerationOption !== undefined) {
21162    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');
21163  }
21164  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;
21165
21166  var offsetParent = getOffsetParent(data.instance.popper);
21167  var offsetParentRect = getBoundingClientRect(offsetParent);
21168
21169  // Styles
21170  var styles = {
21171    position: popper.position
21172  };
21173
21174  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);
21175
21176  var sideA = x === 'bottom' ? 'top' : 'bottom';
21177  var sideB = y === 'right' ? 'left' : 'right';
21178
21179  // if gpuAcceleration is set to `true` and transform is supported,
21180  //  we use `translate3d` to apply the position to the popper we
21181  // automatically use the supported prefixed version if needed
21182  var prefixedProperty = getSupportedPropertyName('transform');
21183
21184  // now, let's make a step back and look at this code closely (wtf?)
21185  // If the content of the popper grows once it's been positioned, it
21186  // may happen that the popper gets misplaced because of the new content
21187  // overflowing its reference element
21188  // To avoid this problem, we provide two options (x and y), which allow
21189  // the consumer to define the offset origin.
21190  // If we position a popper on top of a reference element, we can set
21191  // `x` to `top` to make the popper grow towards its top instead of
21192  // its bottom.
21193  var left = void 0,
21194      top = void 0;
21195  if (sideA === 'bottom') {
21196    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)
21197    // and not the bottom of the html element
21198    if (offsetParent.nodeName === 'HTML') {
21199      top = -offsetParent.clientHeight + offsets.bottom;
21200    } else {
21201      top = -offsetParentRect.height + offsets.bottom;
21202    }
21203  } else {
21204    top = offsets.top;
21205  }
21206  if (sideB === 'right') {
21207    if (offsetParent.nodeName === 'HTML') {
21208      left = -offsetParent.clientWidth + offsets.right;
21209    } else {
21210      left = -offsetParentRect.width + offsets.right;
21211    }
21212  } else {
21213    left = offsets.left;
21214  }
21215  if (gpuAcceleration && prefixedProperty) {
21216    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';
21217    styles[sideA] = 0;
21218    styles[sideB] = 0;
21219    styles.willChange = 'transform';
21220  } else {
21221    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties
21222    var invertTop = sideA === 'bottom' ? -1 : 1;
21223    var invertLeft = sideB === 'right' ? -1 : 1;
21224    styles[sideA] = top * invertTop;
21225    styles[sideB] = left * invertLeft;
21226    styles.willChange = sideA + ', ' + sideB;
21227  }
21228
21229  // Attributes
21230  var attributes = {
21231    'x-placement': data.placement
21232  };
21233
21234  // Update `data` attributes, styles and arrowStyles
21235  data.attributes = _extends({}, attributes, data.attributes);
21236  data.styles = _extends({}, styles, data.styles);
21237  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);
21238
21239  return data;
21240}
21241
21242/**
21243 * Helper used to know if the given modifier depends from another one.<br />
21244 * It checks if the needed modifier is listed and enabled.
21245 * @method
21246 * @memberof Popper.Utils
21247 * @param {Array} modifiers - list of modifiers
21248 * @param {String} requestingName - name of requesting modifier
21249 * @param {String} requestedName - name of requested modifier
21250 * @returns {Boolean}
21251 */
21252function isModifierRequired(modifiers, requestingName, requestedName) {
21253  var requesting = find(modifiers, function (_ref) {
21254    var name = _ref.name;
21255    return name === requestingName;
21256  });
21257
21258  var isRequired = !!requesting && modifiers.some(function (modifier) {
21259    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
21260  });
21261
21262  if (!isRequired) {
21263    var _requesting = '`' + requestingName + '`';
21264    var requested = '`' + requestedName + '`';
21265    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');
21266  }
21267  return isRequired;
21268}
21269
21270/**
21271 * @function
21272 * @memberof Modifiers
21273 * @argument {Object} data - The data object generated by update method
21274 * @argument {Object} options - Modifiers configuration and options
21275 * @returns {Object} The data object, properly modified
21276 */
21277function arrow(data, options) {
21278  var _data$offsets$arrow;
21279
21280  // arrow depends on keepTogether in order to work
21281  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
21282    return data;
21283  }
21284
21285  var arrowElement = options.element;
21286
21287  // if arrowElement is a string, suppose it's a CSS selector
21288  if (typeof arrowElement === 'string') {
21289    arrowElement = data.instance.popper.querySelector(arrowElement);
21290
21291    // if arrowElement is not found, don't run the modifier
21292    if (!arrowElement) {
21293      return data;
21294    }
21295  } else {
21296    // if the arrowElement isn't a query selector we must check that the
21297    // provided DOM node is child of its popper node
21298    if (!data.instance.popper.contains(arrowElement)) {
21299      console.warn('WARNING: `arrow.element` must be child of its popper element!');
21300      return data;
21301    }
21302  }
21303
21304  var placement = data.placement.split('-')[0];
21305  var _data$offsets = data.offsets,
21306      popper = _data$offsets.popper,
21307      reference = _data$offsets.reference;
21308
21309  var isVertical = ['left', 'right'].indexOf(placement) !== -1;
21310
21311  var len = isVertical ? 'height' : 'width';
21312  var sideCapitalized = isVertical ? 'Top' : 'Left';
21313  var side = sideCapitalized.toLowerCase();
21314  var altSide = isVertical ? 'left' : 'top';
21315  var opSide = isVertical ? 'bottom' : 'right';
21316  var arrowElementSize = getOuterSizes(arrowElement)[len];
21317
21318  //
21319  // extends keepTogether behavior making sure the popper and its
21320  // reference have enough pixels in conjunction
21321  //
21322
21323  // top/left side
21324  if (reference[opSide] - arrowElementSize < popper[side]) {
21325    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
21326  }
21327  // bottom/right side
21328  if (reference[side] + arrowElementSize > popper[opSide]) {
21329    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
21330  }
21331  data.offsets.popper = getClientRect(data.offsets.popper);
21332
21333  // compute center of the popper
21334  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
21335
21336  // Compute the sideValue using the updated popper offsets
21337  // take popper margin in account because we don't have this info available
21338  var css = getStyleComputedProperty(data.instance.popper);
21339  var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);
21340  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);
21341  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
21342
21343  // prevent arrowElement from being placed not contiguously to its popper
21344  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
21345
21346  data.arrowElement = arrowElement;
21347  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
21348
21349  return data;
21350}
21351
21352/**
21353 * Get the opposite placement variation of the given one
21354 * @method
21355 * @memberof Popper.Utils
21356 * @argument {String} placement variation
21357 * @returns {String} flipped placement variation
21358 */
21359function getOppositeVariation(variation) {
21360  if (variation === 'end') {
21361    return 'start';
21362  } else if (variation === 'start') {
21363    return 'end';
21364  }
21365  return variation;
21366}
21367
21368/**
21369 * List of accepted placements to use as values of the `placement` option.<br />
21370 * Valid placements are:
21371 * - `auto`
21372 * - `top`
21373 * - `right`
21374 * - `bottom`
21375 * - `left`
21376 *
21377 * Each placement can have a variation from this list:
21378 * - `-start`
21379 * - `-end`
21380 *
21381 * Variations are interpreted easily if you think of them as the left to right
21382 * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`
21383 * is right.<br />
21384 * Vertically (`left` and `right`), `start` is top and `end` is bottom.
21385 *
21386 * Some valid examples are:
21387 * - `top-end` (on top of reference, right aligned)
21388 * - `right-start` (on right of reference, top aligned)
21389 * - `bottom` (on bottom, centered)
21390 * - `auto-end` (on the side with more space available, alignment depends by placement)
21391 *
21392 * @static
21393 * @type {Array}
21394 * @enum {String}
21395 * @readonly
21396 * @method placements
21397 * @memberof Popper
21398 */
21399var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
21400
21401// Get rid of `auto` `auto-start` and `auto-end`
21402var validPlacements = placements.slice(3);
21403
21404/**
21405 * Given an initial placement, returns all the subsequent placements
21406 * clockwise (or counter-clockwise).
21407 *
21408 * @method
21409 * @memberof Popper.Utils
21410 * @argument {String} placement - A valid placement (it accepts variations)
21411 * @argument {Boolean} counter - Set to true to walk the placements counterclockwise
21412 * @returns {Array} placements including their variations
21413 */
21414function clockwise(placement) {
21415  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
21416
21417  var index = validPlacements.indexOf(placement);
21418  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));
21419  return counter ? arr.reverse() : arr;
21420}
21421
21422var BEHAVIORS = {
21423  FLIP: 'flip',
21424  CLOCKWISE: 'clockwise',
21425  COUNTERCLOCKWISE: 'counterclockwise'
21426};
21427
21428/**
21429 * @function
21430 * @memberof Modifiers
21431 * @argument {Object} data - The data object generated by update method
21432 * @argument {Object} options - Modifiers configuration and options
21433 * @returns {Object} The data object, properly modified
21434 */
21435function flip(data, options) {
21436  // if `inner` modifier is enabled, we can't use the `flip` modifier
21437  if (isModifierEnabled(data.instance.modifiers, 'inner')) {
21438    return data;
21439  }
21440
21441  if (data.flipped && data.placement === data.originalPlacement) {
21442    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides
21443    return data;
21444  }
21445
21446  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
21447
21448  var placement = data.placement.split('-')[0];
21449  var placementOpposite = getOppositePlacement(placement);
21450  var variation = data.placement.split('-')[1] || '';
21451
21452  var flipOrder = [];
21453
21454  switch (options.behavior) {
21455    case BEHAVIORS.FLIP:
21456      flipOrder = [placement, placementOpposite];
21457      break;
21458    case BEHAVIORS.CLOCKWISE:
21459      flipOrder = clockwise(placement);
21460      break;
21461    case BEHAVIORS.COUNTERCLOCKWISE:
21462      flipOrder = clockwise(placement, true);
21463      break;
21464    default:
21465      flipOrder = options.behavior;
21466  }
21467
21468  flipOrder.forEach(function (step, index) {
21469    if (placement !== step || flipOrder.length === index + 1) {
21470      return data;
21471    }
21472
21473    placement = data.placement.split('-')[0];
21474    placementOpposite = getOppositePlacement(placement);
21475
21476    var popperOffsets = data.offsets.popper;
21477    var refOffsets = data.offsets.reference;
21478
21479    // using floor because the reference offsets may contain decimals we are not going to consider here
21480    var floor = Math.floor;
21481    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);
21482
21483    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);
21484    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);
21485    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);
21486    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);
21487
21488    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;
21489
21490    // flip the variation if required
21491    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
21492
21493    // flips variation if reference element overflows boundaries
21494    var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);
21495
21496    // flips variation if popper content overflows boundaries
21497    var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);
21498
21499    var flippedVariation = flippedVariationByRef || flippedVariationByContent;
21500
21501    if (overlapsRef || overflowsBoundaries || flippedVariation) {
21502      // this boolean to detect any flip loop
21503      data.flipped = true;
21504
21505      if (overlapsRef || overflowsBoundaries) {
21506        placement = flipOrder[index + 1];
21507      }
21508
21509      if (flippedVariation) {
21510        variation = getOppositeVariation(variation);
21511      }
21512
21513      data.placement = placement + (variation ? '-' + variation : '');
21514
21515      // this object contains `position`, we want to preserve it along with
21516      // any additional property we may add in the future
21517      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
21518
21519      data = runModifiers(data.instance.modifiers, data, 'flip');
21520    }
21521  });
21522  return data;
21523}
21524
21525/**
21526 * @function
21527 * @memberof Modifiers
21528 * @argument {Object} data - The data object generated by update method
21529 * @argument {Object} options - Modifiers configuration and options
21530 * @returns {Object} The data object, properly modified
21531 */
21532function keepTogether(data) {
21533  var _data$offsets = data.offsets,
21534      popper = _data$offsets.popper,
21535      reference = _data$offsets.reference;
21536
21537  var placement = data.placement.split('-')[0];
21538  var floor = Math.floor;
21539  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
21540  var side = isVertical ? 'right' : 'bottom';
21541  var opSide = isVertical ? 'left' : 'top';
21542  var measurement = isVertical ? 'width' : 'height';
21543
21544  if (popper[side] < floor(reference[opSide])) {
21545    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];
21546  }
21547  if (popper[opSide] > floor(reference[side])) {
21548    data.offsets.popper[opSide] = floor(reference[side]);
21549  }
21550
21551  return data;
21552}
21553
21554/**
21555 * Converts a string containing value + unit into a px value number
21556 * @function
21557 * @memberof {modifiers~offset}
21558 * @private
21559 * @argument {String} str - Value + unit string
21560 * @argument {String} measurement - `height` or `width`
21561 * @argument {Object} popperOffsets
21562 * @argument {Object} referenceOffsets
21563 * @returns {Number|String}
21564 * Value in pixels, or original string if no values were extracted
21565 */
21566function toValue(str, measurement, popperOffsets, referenceOffsets) {
21567  // separate value from unit
21568  var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);
21569  var value = +split[1];
21570  var unit = split[2];
21571
21572  // If it's not a number it's an operator, I guess
21573  if (!value) {
21574    return str;
21575  }
21576
21577  if (unit.indexOf('%') === 0) {
21578    var element = void 0;
21579    switch (unit) {
21580      case '%p':
21581        element = popperOffsets;
21582        break;
21583      case '%':
21584      case '%r':
21585      default:
21586        element = referenceOffsets;
21587    }
21588
21589    var rect = getClientRect(element);
21590    return rect[measurement] / 100 * value;
21591  } else if (unit === 'vh' || unit === 'vw') {
21592    // if is a vh or vw, we calculate the size based on the viewport
21593    var size = void 0;
21594    if (unit === 'vh') {
21595      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
21596    } else {
21597      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
21598    }
21599    return size / 100 * value;
21600  } else {
21601    // if is an explicit pixel unit, we get rid of the unit and keep the value
21602    // if is an implicit unit, it's px, and we return just the value
21603    return value;
21604  }
21605}
21606
21607/**
21608 * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.
21609 * @function
21610 * @memberof {modifiers~offset}
21611 * @private
21612 * @argument {String} offset
21613 * @argument {Object} popperOffsets
21614 * @argument {Object} referenceOffsets
21615 * @argument {String} basePlacement
21616 * @returns {Array} a two cells array with x and y offsets in numbers
21617 */
21618function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
21619  var offsets = [0, 0];
21620
21621  // Use height if placement is left or right and index is 0 otherwise use width
21622  // in this way the first offset will use an axis and the second one
21623  // will use the other one
21624  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;
21625
21626  // Split the offset string to obtain a list of values and operands
21627  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)
21628  var fragments = offset.split(/(\+|\-)/).map(function (frag) {
21629    return frag.trim();
21630  });
21631
21632  // Detect if the offset string contains a pair of values or a single one
21633  // they could be separated by comma or space
21634  var divider = fragments.indexOf(find(fragments, function (frag) {
21635    return frag.search(/,|\s/) !== -1;
21636  }));
21637
21638  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {
21639    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');
21640  }
21641
21642  // If divider is found, we divide the list of values and operands to divide
21643  // them by ofset X and Y.
21644  var splitRegex = /\s*,\s*|\s+/;
21645  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];
21646
21647  // Convert the values with units to absolute pixels to allow our computations
21648  ops = ops.map(function (op, index) {
21649    // Most of the units rely on the orientation of the popper
21650    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';
21651    var mergeWithPrevious = false;
21652    return op
21653    // This aggregates any `+` or `-` sign that aren't considered operators
21654    // e.g.: 10 + +5 => [10, +, +5]
21655    .reduce(function (a, b) {
21656      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {
21657        a[a.length - 1] = b;
21658        mergeWithPrevious = true;
21659        return a;
21660      } else if (mergeWithPrevious) {
21661        a[a.length - 1] += b;
21662        mergeWithPrevious = false;
21663        return a;
21664      } else {
21665        return a.concat(b);
21666      }
21667    }, [])
21668    // Here we convert the string values into number values (in px)
21669    .map(function (str) {
21670      return toValue(str, measurement, popperOffsets, referenceOffsets);
21671    });
21672  });
21673
21674  // Loop trough the offsets arrays and execute the operations
21675  ops.forEach(function (op, index) {
21676    op.forEach(function (frag, index2) {
21677      if (isNumeric(frag)) {
21678        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);
21679      }
21680    });
21681  });
21682  return offsets;
21683}
21684
21685/**
21686 * @function
21687 * @memberof Modifiers
21688 * @argument {Object} data - The data object generated by update method
21689 * @argument {Object} options - Modifiers configuration and options
21690 * @argument {Number|String} options.offset=0
21691 * The offset value as described in the modifier description
21692 * @returns {Object} The data object, properly modified
21693 */
21694function offset(data, _ref) {
21695  var offset = _ref.offset;
21696  var placement = data.placement,
21697      _data$offsets = data.offsets,
21698      popper = _data$offsets.popper,
21699      reference = _data$offsets.reference;
21700
21701  var basePlacement = placement.split('-')[0];
21702
21703  var offsets = void 0;
21704  if (isNumeric(+offset)) {
21705    offsets = [+offset, 0];
21706  } else {
21707    offsets = parseOffset(offset, popper, reference, basePlacement);
21708  }
21709
21710  if (basePlacement === 'left') {
21711    popper.top += offsets[0];
21712    popper.left -= offsets[1];
21713  } else if (basePlacement === 'right') {
21714    popper.top += offsets[0];
21715    popper.left += offsets[1];
21716  } else if (basePlacement === 'top') {
21717    popper.left += offsets[0];
21718    popper.top -= offsets[1];
21719  } else if (basePlacement === 'bottom') {
21720    popper.left += offsets[0];
21721    popper.top += offsets[1];
21722  }
21723
21724  data.popper = popper;
21725  return data;
21726}
21727
21728/**
21729 * @function
21730 * @memberof Modifiers
21731 * @argument {Object} data - The data object generated by `update` method
21732 * @argument {Object} options - Modifiers configuration and options
21733 * @returns {Object} The data object, properly modified
21734 */
21735function preventOverflow(data, options) {
21736  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
21737
21738  // If offsetParent is the reference element, we really want to
21739  // go one step up and use the next offsetParent as reference to
21740  // avoid to make this modifier completely useless and look like broken
21741  if (data.instance.reference === boundariesElement) {
21742    boundariesElement = getOffsetParent(boundariesElement);
21743  }
21744
21745  // NOTE: DOM access here
21746  // resets the popper's position so that the document size can be calculated excluding
21747  // the size of the popper element itself
21748  var transformProp = getSupportedPropertyName('transform');
21749  var popperStyles = data.instance.popper.style; // assignment to help minification
21750  var top = popperStyles.top,
21751      left = popperStyles.left,
21752      transform = popperStyles[transformProp];
21753
21754  popperStyles.top = '';
21755  popperStyles.left = '';
21756  popperStyles[transformProp] = '';
21757
21758  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
21759
21760  // NOTE: DOM access here
21761  // restores the original style properties after the offsets have been computed
21762  popperStyles.top = top;
21763  popperStyles.left = left;
21764  popperStyles[transformProp] = transform;
21765
21766  options.boundaries = boundaries;
21767
21768  var order = options.priority;
21769  var popper = data.offsets.popper;
21770
21771  var check = {
21772    primary: function primary(placement) {
21773      var value = popper[placement];
21774      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
21775        value = Math.max(popper[placement], boundaries[placement]);
21776      }
21777      return defineProperty({}, placement, value);
21778    },
21779    secondary: function secondary(placement) {
21780      var mainSide = placement === 'right' ? 'left' : 'top';
21781      var value = popper[mainSide];
21782      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
21783        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
21784      }
21785      return defineProperty({}, mainSide, value);
21786    }
21787  };
21788
21789  order.forEach(function (placement) {
21790    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
21791    popper = _extends({}, popper, check[side](placement));
21792  });
21793
21794  data.offsets.popper = popper;
21795
21796  return data;
21797}
21798
21799/**
21800 * @function
21801 * @memberof Modifiers
21802 * @argument {Object} data - The data object generated by `update` method
21803 * @argument {Object} options - Modifiers configuration and options
21804 * @returns {Object} The data object, properly modified
21805 */
21806function shift(data) {
21807  var placement = data.placement;
21808  var basePlacement = placement.split('-')[0];
21809  var shiftvariation = placement.split('-')[1];
21810
21811  // if shift shiftvariation is specified, run the modifier
21812  if (shiftvariation) {
21813    var _data$offsets = data.offsets,
21814        reference = _data$offsets.reference,
21815        popper = _data$offsets.popper;
21816
21817    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
21818    var side = isVertical ? 'left' : 'top';
21819    var measurement = isVertical ? 'width' : 'height';
21820
21821    var shiftOffsets = {
21822      start: defineProperty({}, side, reference[side]),
21823      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])
21824    };
21825
21826    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
21827  }
21828
21829  return data;
21830}
21831
21832/**
21833 * @function
21834 * @memberof Modifiers
21835 * @argument {Object} data - The data object generated by update method
21836 * @argument {Object} options - Modifiers configuration and options
21837 * @returns {Object} The data object, properly modified
21838 */
21839function hide(data) {
21840  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {
21841    return data;
21842  }
21843
21844  var refRect = data.offsets.reference;
21845  var bound = find(data.instance.modifiers, function (modifier) {
21846    return modifier.name === 'preventOverflow';
21847  }).boundaries;
21848
21849  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {
21850    // Avoid unnecessary DOM access if visibility hasn't changed
21851    if (data.hide === true) {
21852      return data;
21853    }
21854
21855    data.hide = true;
21856    data.attributes['x-out-of-boundaries'] = '';
21857  } else {
21858    // Avoid unnecessary DOM access if visibility hasn't changed
21859    if (data.hide === false) {
21860      return data;
21861    }
21862
21863    data.hide = false;
21864    data.attributes['x-out-of-boundaries'] = false;
21865  }
21866
21867  return data;
21868}
21869
21870/**
21871 * @function
21872 * @memberof Modifiers
21873 * @argument {Object} data - The data object generated by `update` method
21874 * @argument {Object} options - Modifiers configuration and options
21875 * @returns {Object} The data object, properly modified
21876 */
21877function inner(data) {
21878  var placement = data.placement;
21879  var basePlacement = placement.split('-')[0];
21880  var _data$offsets = data.offsets,
21881      popper = _data$offsets.popper,
21882      reference = _data$offsets.reference;
21883
21884  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;
21885
21886  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
21887
21888  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
21889
21890  data.placement = getOppositePlacement(placement);
21891  data.offsets.popper = getClientRect(popper);
21892
21893  return data;
21894}
21895
21896/**
21897 * Modifier function, each modifier can have a function of this type assigned
21898 * to its `fn` property.<br />
21899 * These functions will be called on each update, this means that you must
21900 * make sure they are performant enough to avoid performance bottlenecks.
21901 *
21902 * @function ModifierFn
21903 * @argument {dataObject} data - The data object generated by `update` method
21904 * @argument {Object} options - Modifiers configuration and options
21905 * @returns {dataObject} The data object, properly modified
21906 */
21907
21908/**
21909 * Modifiers are plugins used to alter the behavior of your poppers.<br />
21910 * Popper.js uses a set of 9 modifiers to provide all the basic functionalities
21911 * needed by the library.
21912 *
21913 * Usually you don't want to override the `order`, `fn` and `onLoad` props.
21914 * All the other properties are configurations that could be tweaked.
21915 * @namespace modifiers
21916 */
21917var modifiers = {
21918  /**
21919   * Modifier used to shift the popper on the start or end of its reference
21920   * element.<br />
21921   * It will read the variation of the `placement` property.<br />
21922   * It can be one either `-end` or `-start`.
21923   * @memberof modifiers
21924   * @inner
21925   */
21926  shift: {
21927    /** @prop {number} order=100 - Index used to define the order of execution */
21928    order: 100,
21929    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
21930    enabled: true,
21931    /** @prop {ModifierFn} */
21932    fn: shift
21933  },
21934
21935  /**
21936   * The `offset` modifier can shift your popper on both its axis.
21937   *
21938   * It accepts the following units:
21939   * - `px` or unit-less, interpreted as pixels
21940   * - `%` or `%r`, percentage relative to the length of the reference element
21941   * - `%p`, percentage relative to the length of the popper element
21942   * - `vw`, CSS viewport width unit
21943   * - `vh`, CSS viewport height unit
21944   *
21945   * For length is intended the main axis relative to the placement of the popper.<br />
21946   * This means that if the placement is `top` or `bottom`, the length will be the
21947   * `width`. In case of `left` or `right`, it will be the `height`.
21948   *
21949   * You can provide a single value (as `Number` or `String`), or a pair of values
21950   * as `String` divided by a comma or one (or more) white spaces.<br />
21951   * The latter is a deprecated method because it leads to confusion and will be
21952   * removed in v2.<br />
21953   * Additionally, it accepts additions and subtractions between different units.
21954   * Note that multiplications and divisions aren't supported.
21955   *
21956   * Valid examples are:
21957   * ```
21958   * 10
21959   * '10%'
21960   * '10, 10'
21961   * '10%, 10'
21962   * '10 + 10%'
21963   * '10 - 5vh + 3%'
21964   * '-10px + 5vh, 5px - 6%'
21965   * ```
21966   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap
21967   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.
21968   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).
21969   *
21970   * @memberof modifiers
21971   * @inner
21972   */
21973  offset: {
21974    /** @prop {number} order=200 - Index used to define the order of execution */
21975    order: 200,
21976    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
21977    enabled: true,
21978    /** @prop {ModifierFn} */
21979    fn: offset,
21980    /** @prop {Number|String} offset=0
21981     * The offset value as described in the modifier description
21982     */
21983    offset: 0
21984  },
21985
21986  /**
21987   * Modifier used to prevent the popper from being positioned outside the boundary.
21988   *
21989   * A scenario exists where the reference itself is not within the boundaries.<br />
21990   * We can say it has "escaped the boundaries" — or just "escaped".<br />
21991   * In this case we need to decide whether the popper should either:
21992   *
21993   * - detach from the reference and remain "trapped" in the boundaries, or
21994   * - if it should ignore the boundary and "escape with its reference"
21995   *
21996   * When `escapeWithReference` is set to`true` and reference is completely
21997   * outside its boundaries, the popper will overflow (or completely leave)
21998   * the boundaries in order to remain attached to the edge of the reference.
21999   *
22000   * @memberof modifiers
22001   * @inner
22002   */
22003  preventOverflow: {
22004    /** @prop {number} order=300 - Index used to define the order of execution */
22005    order: 300,
22006    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
22007    enabled: true,
22008    /** @prop {ModifierFn} */
22009    fn: preventOverflow,
22010    /**
22011     * @prop {Array} [priority=['left','right','top','bottom']]
22012     * Popper will try to prevent overflow following these priorities by default,
22013     * then, it could overflow on the left and on top of the `boundariesElement`
22014     */
22015    priority: ['left', 'right', 'top', 'bottom'],
22016    /**
22017     * @prop {number} padding=5
22018     * Amount of pixel used to define a minimum distance between the boundaries
22019     * and the popper. This makes sure the popper always has a little padding
22020     * between the edges of its container
22021     */
22022    padding: 5,
22023    /**
22024     * @prop {String|HTMLElement} boundariesElement='scrollParent'
22025     * Boundaries used by the modifier. Can be `scrollParent`, `window`,
22026     * `viewport` or any DOM element.
22027     */
22028    boundariesElement: 'scrollParent'
22029  },
22030
22031  /**
22032   * Modifier used to make sure the reference and its popper stay near each other
22033   * without leaving any gap between the two. Especially useful when the arrow is
22034   * enabled and you want to ensure that it points to its reference element.
22035   * It cares only about the first axis. You can still have poppers with margin
22036   * between the popper and its reference element.
22037   * @memberof modifiers
22038   * @inner
22039   */
22040  keepTogether: {
22041    /** @prop {number} order=400 - Index used to define the order of execution */
22042    order: 400,
22043    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
22044    enabled: true,
22045    /** @prop {ModifierFn} */
22046    fn: keepTogether
22047  },
22048
22049  /**
22050   * This modifier is used to move the `arrowElement` of the popper to make
22051   * sure it is positioned between the reference element and its popper element.
22052   * It will read the outer size of the `arrowElement` node to detect how many
22053   * pixels of conjunction are needed.
22054   *
22055   * It has no effect if no `arrowElement` is provided.
22056   * @memberof modifiers
22057   * @inner
22058   */
22059  arrow: {
22060    /** @prop {number} order=500 - Index used to define the order of execution */
22061    order: 500,
22062    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
22063    enabled: true,
22064    /** @prop {ModifierFn} */
22065    fn: arrow,
22066    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */
22067    element: '[x-arrow]'
22068  },
22069
22070  /**
22071   * Modifier used to flip the popper's placement when it starts to overlap its
22072   * reference element.
22073   *
22074   * Requires the `preventOverflow` modifier before it in order to work.
22075   *
22076   * **NOTE:** this modifier will interrupt the current update cycle and will
22077   * restart it if it detects the need to flip the placement.
22078   * @memberof modifiers
22079   * @inner
22080   */
22081  flip: {
22082    /** @prop {number} order=600 - Index used to define the order of execution */
22083    order: 600,
22084    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
22085    enabled: true,
22086    /** @prop {ModifierFn} */
22087    fn: flip,
22088    /**
22089     * @prop {String|Array} behavior='flip'
22090     * The behavior used to change the popper's placement. It can be one of
22091     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid
22092     * placements (with optional variations)
22093     */
22094    behavior: 'flip',
22095    /**
22096     * @prop {number} padding=5
22097     * The popper will flip if it hits the edges of the `boundariesElement`
22098     */
22099    padding: 5,
22100    /**
22101     * @prop {String|HTMLElement} boundariesElement='viewport'
22102     * The element which will define the boundaries of the popper position.
22103     * The popper will never be placed outside of the defined boundaries
22104     * (except if `keepTogether` is enabled)
22105     */
22106    boundariesElement: 'viewport',
22107    /**
22108     * @prop {Boolean} flipVariations=false
22109     * The popper will switch placement variation between `-start` and `-end` when
22110     * the reference element overlaps its boundaries.
22111     *
22112     * The original placement should have a set variation.
22113     */
22114    flipVariations: false,
22115    /**
22116     * @prop {Boolean} flipVariationsByContent=false
22117     * The popper will switch placement variation between `-start` and `-end` when
22118     * the popper element overlaps its reference boundaries.
22119     *
22120     * The original placement should have a set variation.
22121     */
22122    flipVariationsByContent: false
22123  },
22124
22125  /**
22126   * Modifier used to make the popper flow toward the inner of the reference element.
22127   * By default, when this modifier is disabled, the popper will be placed outside
22128   * the reference element.
22129   * @memberof modifiers
22130   * @inner
22131   */
22132  inner: {
22133    /** @prop {number} order=700 - Index used to define the order of execution */
22134    order: 700,
22135    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */
22136    enabled: false,
22137    /** @prop {ModifierFn} */
22138    fn: inner
22139  },
22140
22141  /**
22142   * Modifier used to hide the popper when its reference element is outside of the
22143   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can
22144   * be used to hide with a CSS selector the popper when its reference is
22145   * out of boundaries.
22146   *
22147   * Requires the `preventOverflow` modifier before it in order to work.
22148   * @memberof modifiers
22149   * @inner
22150   */
22151  hide: {
22152    /** @prop {number} order=800 - Index used to define the order of execution */
22153    order: 800,
22154    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
22155    enabled: true,
22156    /** @prop {ModifierFn} */
22157    fn: hide
22158  },
22159
22160  /**
22161   * Computes the style that will be applied to the popper element to gets
22162   * properly positioned.
22163   *
22164   * Note that this modifier will not touch the DOM, it just prepares the styles
22165   * so that `applyStyle` modifier can apply it. This separation is useful
22166   * in case you need to replace `applyStyle` with a custom implementation.
22167   *
22168   * This modifier has `850` as `order` value to maintain backward compatibility
22169   * with previous versions of Popper.js. Expect the modifiers ordering method
22170   * to change in future major versions of the library.
22171   *
22172   * @memberof modifiers
22173   * @inner
22174   */
22175  computeStyle: {
22176    /** @prop {number} order=850 - Index used to define the order of execution */
22177    order: 850,
22178    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
22179    enabled: true,
22180    /** @prop {ModifierFn} */
22181    fn: computeStyle,
22182    /**
22183     * @prop {Boolean} gpuAcceleration=true
22184     * If true, it uses the CSS 3D transformation to position the popper.
22185     * Otherwise, it will use the `top` and `left` properties
22186     */
22187    gpuAcceleration: true,
22188    /**
22189     * @prop {string} [x='bottom']
22190     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.
22191     * Change this if your popper should grow in a direction different from `bottom`
22192     */
22193    x: 'bottom',
22194    /**
22195     * @prop {string} [x='left']
22196     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.
22197     * Change this if your popper should grow in a direction different from `right`
22198     */
22199    y: 'right'
22200  },
22201
22202  /**
22203   * Applies the computed styles to the popper element.
22204   *
22205   * All the DOM manipulations are limited to this modifier. This is useful in case
22206   * you want to integrate Popper.js inside a framework or view library and you
22207   * want to delegate all the DOM manipulations to it.
22208   *
22209   * Note that if you disable this modifier, you must make sure the popper element
22210   * has its position set to `absolute` before Popper.js can do its work!
22211   *
22212   * Just disable this modifier and define your own to achieve the desired effect.
22213   *
22214   * @memberof modifiers
22215   * @inner
22216   */
22217  applyStyle: {
22218    /** @prop {number} order=900 - Index used to define the order of execution */
22219    order: 900,
22220    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
22221    enabled: true,
22222    /** @prop {ModifierFn} */
22223    fn: applyStyle,
22224    /** @prop {Function} */
22225    onLoad: applyStyleOnLoad,
22226    /**
22227     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier
22228     * @prop {Boolean} gpuAcceleration=true
22229     * If true, it uses the CSS 3D transformation to position the popper.
22230     * Otherwise, it will use the `top` and `left` properties
22231     */
22232    gpuAcceleration: undefined
22233  }
22234};
22235
22236/**
22237 * The `dataObject` is an object containing all the information used by Popper.js.
22238 * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.
22239 * @name dataObject
22240 * @property {Object} data.instance The Popper.js instance
22241 * @property {String} data.placement Placement applied to popper
22242 * @property {String} data.originalPlacement Placement originally defined on init
22243 * @property {Boolean} data.flipped True if popper has been flipped by flip modifier
22244 * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper
22245 * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier
22246 * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)
22247 * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)
22248 * @property {Object} data.boundaries Offsets of the popper boundaries
22249 * @property {Object} data.offsets The measurements of popper, reference and arrow elements
22250 * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values
22251 * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values
22252 * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0
22253 */
22254
22255/**
22256 * Default options provided to Popper.js constructor.<br />
22257 * These can be overridden using the `options` argument of Popper.js.<br />
22258 * To override an option, simply pass an object with the same
22259 * structure of the `options` object, as the 3rd argument. For example:
22260 * ```
22261 * new Popper(ref, pop, {
22262 *   modifiers: {
22263 *     preventOverflow: { enabled: false }
22264 *   }
22265 * })
22266 * ```
22267 * @type {Object}
22268 * @static
22269 * @memberof Popper
22270 */
22271var Defaults = {
22272  /**
22273   * Popper's placement.
22274   * @prop {Popper.placements} placement='bottom'
22275   */
22276  placement: 'bottom',
22277
22278  /**
22279   * Set this to true if you want popper to position it self in 'fixed' mode
22280   * @prop {Boolean} positionFixed=false
22281   */
22282  positionFixed: false,
22283
22284  /**
22285   * Whether events (resize, scroll) are initially enabled.
22286   * @prop {Boolean} eventsEnabled=true
22287   */
22288  eventsEnabled: true,
22289
22290  /**
22291   * Set to true if you want to automatically remove the popper when
22292   * you call the `destroy` method.
22293   * @prop {Boolean} removeOnDestroy=false
22294   */
22295  removeOnDestroy: false,
22296
22297  /**
22298   * Callback called when the popper is created.<br />
22299   * By default, it is set to no-op.<br />
22300   * Access Popper.js instance with `data.instance`.
22301   * @prop {onCreate}
22302   */
22303  onCreate: function onCreate() {},
22304
22305  /**
22306   * Callback called when the popper is updated. This callback is not called
22307   * on the initialization/creation of the popper, but only on subsequent
22308   * updates.<br />
22309   * By default, it is set to no-op.<br />
22310   * Access Popper.js instance with `data.instance`.
22311   * @prop {onUpdate}
22312   */
22313  onUpdate: function onUpdate() {},
22314
22315  /**
22316   * List of modifiers used to modify the offsets before they are applied to the popper.
22317   * They provide most of the functionalities of Popper.js.
22318   * @prop {modifiers}
22319   */
22320  modifiers: modifiers
22321};
22322
22323/**
22324 * @callback onCreate
22325 * @param {dataObject} data
22326 */
22327
22328/**
22329 * @callback onUpdate
22330 * @param {dataObject} data
22331 */
22332
22333// Utils
22334// Methods
22335var Popper = function () {
22336  /**
22337   * Creates a new Popper.js instance.
22338   * @class Popper
22339   * @param {Element|referenceObject} reference - The reference element used to position the popper
22340   * @param {Element} popper - The HTML / XML element used as the popper
22341   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
22342   * @return {Object} instance - The generated Popper.js instance
22343   */
22344  function Popper(reference, popper) {
22345    var _this = this;
22346
22347    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
22348    classCallCheck(this, Popper);
22349
22350    this.scheduleUpdate = function () {
22351      return requestAnimationFrame(_this.update);
22352    };
22353
22354    // make update() debounced, so that it only runs at most once-per-tick
22355    this.update = debounce(this.update.bind(this));
22356
22357    // with {} we create a new object with the options inside it
22358    this.options = _extends({}, Popper.Defaults, options);
22359
22360    // init state
22361    this.state = {
22362      isDestroyed: false,
22363      isCreated: false,
22364      scrollParents: []
22365    };
22366
22367    // get reference and popper elements (allow jQuery wrappers)
22368    this.reference = reference && reference.jquery ? reference[0] : reference;
22369    this.popper = popper && popper.jquery ? popper[0] : popper;
22370
22371    // Deep merge modifiers options
22372    this.options.modifiers = {};
22373    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
22374      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
22375    });
22376
22377    // Refactoring modifiers' list (Object => Array)
22378    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
22379      return _extends({
22380        name: name
22381      }, _this.options.modifiers[name]);
22382    })
22383    // sort the modifiers by order
22384    .sort(function (a, b) {
22385      return a.order - b.order;
22386    });
22387
22388    // modifiers have the ability to execute arbitrary code when Popper.js get inited
22389    // such code is executed in the same order of its modifier
22390    // they could add new properties to their options configuration
22391    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
22392    this.modifiers.forEach(function (modifierOptions) {
22393      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
22394        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
22395      }
22396    });
22397
22398    // fire the first update to position the popper in the right place
22399    this.update();
22400
22401    var eventsEnabled = this.options.eventsEnabled;
22402    if (eventsEnabled) {
22403      // setup event listeners, they will take care of update the position in specific situations
22404      this.enableEventListeners();
22405    }
22406
22407    this.state.eventsEnabled = eventsEnabled;
22408  }
22409
22410  // We can't use class properties because they don't get listed in the
22411  // class prototype and break stuff like Sinon stubs
22412
22413
22414  createClass(Popper, [{
22415    key: 'update',
22416    value: function update$$1() {
22417      return update.call(this);
22418    }
22419  }, {
22420    key: 'destroy',
22421    value: function destroy$$1() {
22422      return destroy.call(this);
22423    }
22424  }, {
22425    key: 'enableEventListeners',
22426    value: function enableEventListeners$$1() {
22427      return enableEventListeners.call(this);
22428    }
22429  }, {
22430    key: 'disableEventListeners',
22431    value: function disableEventListeners$$1() {
22432      return disableEventListeners.call(this);
22433    }
22434
22435    /**
22436     * Schedules an update. It will run on the next UI update available.
22437     * @method scheduleUpdate
22438     * @memberof Popper
22439     */
22440
22441
22442    /**
22443     * Collection of utilities useful when writing custom modifiers.
22444     * Starting from version 1.7, this method is available only if you
22445     * include `popper-utils.js` before `popper.js`.
22446     *
22447     * **DEPRECATION**: This way to access PopperUtils is deprecated
22448     * and will be removed in v2! Use the PopperUtils module directly instead.
22449     * Due to the high instability of the methods contained in Utils, we can't
22450     * guarantee them to follow semver. Use them at your own risk!
22451     * @static
22452     * @private
22453     * @type {Object}
22454     * @deprecated since version 1.8
22455     * @member Utils
22456     * @memberof Popper
22457     */
22458
22459  }]);
22460  return Popper;
22461}();
22462
22463/**
22464 * The `referenceObject` is an object that provides an interface compatible with Popper.js
22465 * and lets you use it as replacement of a real DOM node.<br />
22466 * You can use this method to position a popper relatively to a set of coordinates
22467 * in case you don't have a DOM node to use as reference.
22468 *
22469 * ```
22470 * new Popper(referenceObject, popperNode);
22471 * ```
22472 *
22473 * NB: This feature isn't supported in Internet Explorer 10.
22474 * @name referenceObject
22475 * @property {Function} data.getBoundingClientRect
22476 * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.
22477 * @property {number} data.clientWidth
22478 * An ES6 getter that will return the width of the virtual reference element.
22479 * @property {number} data.clientHeight
22480 * An ES6 getter that will return the height of the virtual reference element.
22481 */
22482
22483
22484Popper.Utils = (typeof window !== 'undefined' ? window : __webpack_require__.g).PopperUtils;
22485Popper.placements = placements;
22486Popper.Defaults = Defaults;
22487
22488/* harmony default export */ __webpack_exports__["default"] = (Popper);
22489//# sourceMappingURL=popper.js.map
22490
22491
22492/***/ }),
22493
vendor: 24,116 bytes, lines 22494-23013
22494/***/ "../node_modules/libphonenumber-js/es6/AsYouType.js":
22495/*!**********************************************************!*\
22496  !*** ../node_modules/libphonenumber-js/es6/AsYouType.js ***!
22497  \**********************************************************/
22498/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
22499
22500"use strict";
22501__webpack_require__.r(__webpack_exports__);
22502/* harmony export */ __webpack_require__.d(__webpack_exports__, {
22503/* harmony export */   "default": function() { return /* binding */ AsYouType; }
22504/* harmony export */ });
22505/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
22506/* harmony import */ var _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PhoneNumber.js */ "../node_modules/libphonenumber-js/es6/PhoneNumber.js");
22507/* harmony import */ var _AsYouTypeState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AsYouTypeState.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeState.js");
22508/* harmony import */ var _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AsYouTypeFormatter.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js");
22509/* harmony import */ var _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AsYouTypeFormatter.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js");
22510/* harmony import */ var _AsYouTypeParser_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AsYouTypeParser.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeParser.js");
22511/* harmony import */ var _helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/getCountryByCallingCode.js */ "../node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js");
22512/* harmony import */ var _helpers_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./helpers/getCountryByNationalNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js");
22513/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./helpers/isObject.js */ "../node_modules/libphonenumber-js/es6/helpers/isObject.js");
22514function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
22515function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
22516function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
22517function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
22518function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
22519function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
22520function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
22521function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
22522function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
22523function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
22524function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
22525function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
22526
22527
22528
22529
22530
22531
22532
22533
22534var USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;
22535var AsYouType = /*#__PURE__*/function () {
22536  /**
22537   * @param {(string|object)?} [optionsOrDefaultCountry] - The default country used for parsing non-international phone numbers. Can also be an `options` object.
22538   * @param {Object} metadata
22539   */
22540  function AsYouType(optionsOrDefaultCountry, metadata) {
22541    _classCallCheck(this, AsYouType);
22542    this.metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata);
22543    var _this$getCountryAndCa = this.getCountryAndCallingCode(optionsOrDefaultCountry),
22544      _this$getCountryAndCa2 = _slicedToArray(_this$getCountryAndCa, 2),
22545      defaultCountry = _this$getCountryAndCa2[0],
22546      defaultCallingCode = _this$getCountryAndCa2[1];
22547    // `this.defaultCountry` and `this.defaultCallingCode` aren't required to be in sync.
22548    // For example, `this.defaultCountry` could be `"AR"` and `this.defaultCallingCode` could be `undefined`.
22549    // So `this.defaultCountry` and `this.defaultCallingCode` are totally independent.
22550    this.defaultCountry = defaultCountry;
22551    this.defaultCallingCode = defaultCallingCode;
22552    this.reset();
22553  }
22554  return _createClass(AsYouType, [{
22555    key: "getCountryAndCallingCode",
22556    value: function getCountryAndCallingCode(optionsOrDefaultCountry) {
22557      // Set `defaultCountry` and `defaultCallingCode` options.
22558      var defaultCountry;
22559      var defaultCallingCode;
22560      // Turns out `null` also has type "object". Weird.
22561      if (optionsOrDefaultCountry) {
22562        if ((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_8__["default"])(optionsOrDefaultCountry)) {
22563          defaultCountry = optionsOrDefaultCountry.defaultCountry;
22564          defaultCallingCode = optionsOrDefaultCountry.defaultCallingCode;
22565        } else {
22566          defaultCountry = optionsOrDefaultCountry;
22567        }
22568      }
22569      if (defaultCountry && !this.metadata.hasCountry(defaultCountry)) {
22570        defaultCountry = undefined;
22571      }
22572      if (defaultCallingCode) {
22573        /* istanbul ignore if */
22574        if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {
22575          if (this.metadata.isNonGeographicCallingCode(defaultCallingCode)) {
22576            defaultCountry = '001';
22577          }
22578        }
22579      }
22580      return [defaultCountry, defaultCallingCode];
22581    }
22582
22583    /**
22584     * Inputs "next" phone number characters.
22585     * @param  {string} text
22586     * @return {string} Formatted phone number characters that have been input so far.
22587     */
22588  }, {
22589    key: "input",
22590    value: function input(text) {
22591      var _this$parser$input = this.parser.input(text, this.state),
22592        digits = _this$parser$input.digits,
22593        justLeadingPlus = _this$parser$input.justLeadingPlus;
22594      if (justLeadingPlus) {
22595        this.formattedOutput = '+';
22596      } else if (digits) {
22597        this.determineTheCountryIfNeeded();
22598        // Match the available formats by the currently available leading digits.
22599        if (this.state.nationalSignificantNumber) {
22600          this.formatter.narrowDownMatchingFormats(this.state);
22601        }
22602        var formattedNationalNumber;
22603        if (this.metadata.hasSelectedNumberingPlan()) {
22604          formattedNationalNumber = this.formatter.format(digits, this.state);
22605        }
22606        if (formattedNationalNumber === undefined) {
22607          // See if another national (significant) number could be re-extracted.
22608          if (this.parser.reExtractNationalSignificantNumber(this.state)) {
22609            this.determineTheCountryIfNeeded();
22610            // If it could, then re-try formatting the new national (significant) number.
22611            var nationalDigits = this.state.getNationalDigits();
22612            if (nationalDigits) {
22613              formattedNationalNumber = this.formatter.format(nationalDigits, this.state);
22614            }
22615          }
22616        }
22617        this.formattedOutput = formattedNationalNumber ? this.getFullNumber(formattedNationalNumber) : this.getNonFormattedNumber();
22618      }
22619      return this.formattedOutput;
22620    }
22621  }, {
22622    key: "reset",
22623    value: function reset() {
22624      var _this = this;
22625      this.state = new _AsYouTypeState_js__WEBPACK_IMPORTED_MODULE_2__["default"]({
22626        onCountryChange: function onCountryChange(country) {
22627          // Before version `1.6.0`, the official `AsYouType` formatter API
22628          // included a `.country` property on an `AsYouType` instance.
22629          // Since that property (along with the others) have been moved to
22630          // `this.state`, `this.country` property is emulated for compatibility
22631          // with the old versions.
22632          _this.country = country;
22633        },
22634        onCallingCodeChange: function onCallingCodeChange(callingCode, country) {
22635          _this.metadata.selectNumberingPlan(country, callingCode);
22636          _this.formatter.reset(_this.metadata.numberingPlan, _this.state);
22637          _this.parser.reset(_this.metadata.numberingPlan);
22638        }
22639      });
22640      this.formatter = new _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_3__["default"]({
22641        state: this.state,
22642        metadata: this.metadata
22643      });
22644      this.parser = new _AsYouTypeParser_js__WEBPACK_IMPORTED_MODULE_5__["default"]({
22645        defaultCountry: this.defaultCountry,
22646        defaultCallingCode: this.defaultCallingCode,
22647        metadata: this.metadata,
22648        state: this.state,
22649        onNationalSignificantNumberChange: function onNationalSignificantNumberChange() {
22650          _this.determineTheCountryIfNeeded();
22651          _this.formatter.reset(_this.metadata.numberingPlan, _this.state);
22652        }
22653      });
22654      this.state.reset({
22655        country: this.defaultCountry,
22656        callingCode: this.defaultCallingCode
22657      });
22658      this.formattedOutput = '';
22659      return this;
22660    }
22661
22662    /**
22663     * Returns `true` if the phone number is being input in international format.
22664     * In other words, returns `true` if and only if the parsed phone number starts with a `"+"`.
22665     * @return {boolean}
22666     */
22667  }, {
22668    key: "isInternational",
22669    value: function isInternational() {
22670      return this.state.international;
22671    }
22672
22673    /**
22674     * Returns the "calling code" part of the phone number when it's being input
22675     * in an international format.
22676     * If no valid calling code has been entered so far, returns `undefined`.
22677     * @return {string} [callingCode]
22678     */
22679  }, {
22680    key: "getCallingCode",
22681    value: function getCallingCode() {
22682      // If the number is being input in national format and some "default calling code"
22683      // has been passed to `AsYouType` constructor, then `this.state.callingCode`
22684      // is equal to that "default calling code".
22685      //
22686      // If the number is being input in national format and no "default calling code"
22687      // has been passed to `AsYouType` constructor, then returns `undefined`,
22688      // even if a "default country" has been passed to `AsYouType` constructor.
22689      //
22690      if (this.isInternational()) {
22691        return this.state.callingCode;
22692      }
22693    }
22694
22695    // A legacy alias.
22696  }, {
22697    key: "getCountryCallingCode",
22698    value: function getCountryCallingCode() {
22699      return this.getCallingCode();
22700    }
22701
22702    /**
22703     * Returns a two-letter country code of the phone number.
22704     * Returns `undefined` for "non-geographic" phone numbering plans.
22705     * Returns `undefined` if no phone number has been input yet.
22706     * @return {string} [country]
22707     */
22708  }, {
22709    key: "getCountry",
22710    value: function getCountry() {
22711      var digits = this.state.digits;
22712      // Return `undefined` if no digits have been input yet.
22713      if (digits) {
22714        return this._getCountry();
22715      }
22716    }
22717
22718    /**
22719     * Returns a two-letter country code of the phone number.
22720     * Returns `undefined` for "non-geographic" phone numbering plans.
22721     * @return {string} [country]
22722     */
22723  }, {
22724    key: "_getCountry",
22725    value: function _getCountry() {
22726      var country = this.state.country;
22727      /* istanbul ignore if */
22728      if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {
22729        // `AsYouType.getCountry()` returns `undefined`
22730        // for "non-geographic" phone numbering plans.
22731        if (country === '001') {
22732          return;
22733        }
22734      }
22735      return country;
22736    }
22737  }, {
22738    key: "determineTheCountryIfNeeded",
22739    value: function determineTheCountryIfNeeded() {
22740      // Suppose a user enters a phone number in international format,
22741      // and there're several countries corresponding to that country calling code,
22742      // and a country has been derived from the number, and then
22743      // a user enters one more digit and the number is no longer
22744      // valid for the derived country, so the country should be re-derived
22745      // on every new digit in those cases.
22746      //
22747      // If the phone number is being input in national format,
22748      // then it could be a case when `defaultCountry` wasn't specified
22749      // when creating `AsYouType` instance, and just `defaultCallingCode` was specified,
22750      // and that "calling code" could correspond to a "non-geographic entity",
22751      // or there could be several countries corresponding to that country calling code.
22752      // In those cases, `this.country` is `undefined` and should be derived
22753      // from the number. Again, if country calling code is ambiguous, then
22754      // `this.country` should be re-derived with each new digit.
22755      //
22756      if (!this.state.country || this.isCountryCallingCodeAmbiguous()) {
22757        this.determineTheCountry();
22758      }
22759    }
22760
22761    // Prepends `+CountryCode ` in case of an international phone number
22762  }, {
22763    key: "getFullNumber",
22764    value: function getFullNumber(formattedNationalNumber) {
22765      var _this2 = this;
22766      if (this.isInternational()) {
22767        var prefix = function prefix(text) {
22768          return _this2.formatter.getInternationalPrefixBeforeCountryCallingCode(_this2.state, {
22769            spacing: text ? true : false
22770          }) + text;
22771        };
22772        var callingCode = this.state.callingCode;
22773        if (!callingCode) {
22774          return prefix("".concat(this.state.getDigitsWithoutInternationalPrefix()));
22775        }
22776        if (!formattedNationalNumber) {
22777          return prefix(callingCode);
22778        }
22779        return prefix("".concat(callingCode, " ").concat(formattedNationalNumber));
22780      }
22781      return formattedNationalNumber;
22782    }
22783  }, {
22784    key: "getNonFormattedNationalNumberWithPrefix",
22785    value: function getNonFormattedNationalNumberWithPrefix() {
22786      var _this$state = this.state,
22787        nationalSignificantNumber = _this$state.nationalSignificantNumber,
22788        prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _this$state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix,
22789        nationalPrefix = _this$state.nationalPrefix;
22790      var number = nationalSignificantNumber;
22791      var prefix = prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix || nationalPrefix;
22792      if (prefix) {
22793        number = prefix + number;
22794      }
22795      return number;
22796    }
22797  }, {
22798    key: "getNonFormattedNumber",
22799    value: function getNonFormattedNumber() {
22800      var nationalSignificantNumberIsModified = this.state.nationalSignificantNumberIsModified;
22801      return this.getFullNumber(nationalSignificantNumberIsModified ? this.state.getNationalDigits() : this.getNonFormattedNationalNumberWithPrefix());
22802    }
22803  }, {
22804    key: "getNonFormattedTemplate",
22805    value: function getNonFormattedTemplate() {
22806      var number = this.getNonFormattedNumber();
22807      if (number) {
22808        return number.replace(/[\+\d]/g, _AsYouTypeFormatter_js__WEBPACK_IMPORTED_MODULE_4__.DIGIT_PLACEHOLDER);
22809      }
22810    }
22811  }, {
22812    key: "isCountryCallingCodeAmbiguous",
22813    value: function isCountryCallingCodeAmbiguous() {
22814      var callingCode = this.state.callingCode;
22815      var countryCodes = this.metadata.getCountryCodesForCallingCode(callingCode);
22816      return countryCodes && countryCodes.length > 1;
22817    }
22818
22819    // Determines the exact country of the phone number
22820    // entered so far based on the country phone code
22821    // and the national phone number.
22822  }, {
22823    key: "determineTheCountry",
22824    value: function determineTheCountry() {
22825      this.state.setCountry((0,_helpers_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_6__["default"])(this.isInternational() ? this.state.callingCode : this.defaultCallingCode, {
22826        nationalNumber: this.state.nationalSignificantNumber,
22827        metadata: this.metadata
22828      }));
22829    }
22830
22831    /**
22832     * Returns a E.164 phone number value for the user's input.
22833     *
22834     * For example, for country `"US"` and input `"(222) 333-4444"`
22835     * it will return `"+12223334444"`.
22836     *
22837     * For international phone number input, it will also auto-correct
22838     * some minor errors such as using a national prefix when writing
22839     * an international phone number. For example, if the user inputs
22840     * `"+44 0 7400 000000"` then it will return an auto-corrected
22841     * `"+447400000000"` phone number value.
22842     *
22843     * Will return `undefined` if no digits have been input,
22844     * or when inputting a phone number in national format and no
22845     * default country or default "country calling code" have been set.
22846     *
22847     * @return {string} [value]
22848     */
22849  }, {
22850    key: "getNumberValue",
22851    value: function getNumberValue() {
22852      var _this$state2 = this.state,
22853        digits = _this$state2.digits,
22854        callingCode = _this$state2.callingCode,
22855        country = _this$state2.country,
22856        nationalSignificantNumber = _this$state2.nationalSignificantNumber;
22857
22858      // Will return `undefined` if no digits have been input.
22859      if (!digits) {
22860        return;
22861      }
22862      if (this.isInternational()) {
22863        if (callingCode) {
22864          return '+' + callingCode + nationalSignificantNumber;
22865        } else {
22866          return '+' + digits;
22867        }
22868      } else {
22869        if (country || callingCode) {
22870          var callingCode_ = country ? this.metadata.countryCallingCode() : callingCode;
22871          return '+' + callingCode_ + nationalSignificantNumber;
22872        }
22873      }
22874    }
22875
22876    /**
22877     * Returns an instance of `PhoneNumber` class.
22878     * Will return `undefined` if no national (significant) number
22879     * digits have been entered so far, or if no `defaultCountry` has been
22880     * set and the user enters a phone number not in international format.
22881     */
22882  }, {
22883    key: "getNumber",
22884    value: function getNumber() {
22885      var _this$state3 = this.state,
22886        nationalSignificantNumber = _this$state3.nationalSignificantNumber,
22887        carrierCode = _this$state3.carrierCode,
22888        callingCode = _this$state3.callingCode;
22889
22890      // `this._getCountry()` is basically same as `this.state.country`
22891      // with the only change that it return `undefined` in case of a
22892      // "non-geographic" numbering plan instead of `"001"` "internal use" value.
22893      var country = this._getCountry();
22894      if (!nationalSignificantNumber) {
22895        return;
22896      }
22897
22898      // `state.country` and `state.callingCode` aren't required to be in sync.
22899      // For example, `country` could be `"AR"` and `callingCode` could be `undefined`.
22900      // So `country` and `callingCode` are totally independent.
22901
22902      if (!country && !callingCode) {
22903        return;
22904      }
22905
22906      // By default, if `defaultCountry` parameter was passed when
22907      // creating `AsYouType` instance, `state.country` is gonna be
22908      // that `defaultCountry`, which doesn't entirely conform with
22909      // `parsePhoneNumber()`'s behavior where it attempts to determine
22910      // the country more precisely in cases when multiple countries
22911      // could correspond to the same `countryCallingCode`.
22912      // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417192969
22913      //
22914      // Because `AsYouType.getNumber()` method is supposed to be a 1:1
22915      // equivalent for `parsePhoneNumber(AsYouType.getNumberValue())`,
22916      // then it should also behave accordingly in cases of `country` ambiguity.
22917      // That's how users of this library would expect it to behave anyway.
22918      //
22919      if (country) {
22920        if (country === this.defaultCountry) {
22921          // `state.country` and `state.callingCode` aren't required to be in sync.
22922          // For example, `state.country` could be `"AR"` and `state.callingCode` could be `undefined`.
22923          // So `state.country` and `state.callingCode` are totally independent.
22924          var metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](this.metadata.metadata);
22925          metadata.selectNumberingPlan(country);
22926          var _callingCode = metadata.numberingPlan.callingCode();
22927          var ambiguousCountries = this.metadata.getCountryCodesForCallingCode(_callingCode);
22928          if (ambiguousCountries.length > 1) {
22929            var exactCountry = (0,_helpers_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_7__["default"])(nationalSignificantNumber, {
22930              countries: ambiguousCountries,
22931              metadata: this.metadata.metadata
22932            });
22933            if (exactCountry) {
22934              country = exactCountry;
22935            }
22936          }
22937        }
22938      }
22939      var phoneNumber = new _PhoneNumber_js__WEBPACK_IMPORTED_MODULE_1__["default"](country || callingCode, nationalSignificantNumber, this.metadata.metadata);
22940      if (carrierCode) {
22941        phoneNumber.carrierCode = carrierCode;
22942      }
22943      // Phone number extensions are not supported by "As You Type" formatter.
22944      return phoneNumber;
22945    }
22946
22947    /**
22948     * Returns `true` if the phone number is "possible".
22949     * Is just a shortcut for `PhoneNumber.isPossible()`.
22950     * @return {boolean}
22951     */
22952  }, {
22953    key: "isPossible",
22954    value: function isPossible() {
22955      var phoneNumber = this.getNumber();
22956      if (!phoneNumber) {
22957        return false;
22958      }
22959      return phoneNumber.isPossible();
22960    }
22961
22962    /**
22963     * Returns `true` if the phone number is "valid".
22964     * Is just a shortcut for `PhoneNumber.isValid()`.
22965     * @return {boolean}
22966     */
22967  }, {
22968    key: "isValid",
22969    value: function isValid() {
22970      var phoneNumber = this.getNumber();
22971      if (!phoneNumber) {
22972        return false;
22973      }
22974      return phoneNumber.isValid();
22975    }
22976
22977    /**
22978     * @deprecated
22979     * This method is used in `react-phone-number-input/source/input-control.js`
22980     * in versions before `3.0.16`.
22981     */
22982  }, {
22983    key: "getNationalNumber",
22984    value: function getNationalNumber() {
22985      return this.state.nationalSignificantNumber;
22986    }
22987
22988    /**
22989     * Returns the phone number characters entered by the user.
22990     * @return {string}
22991     */
22992  }, {
22993    key: "getChars",
22994    value: function getChars() {
22995      return (this.state.international ? '+' : '') + this.state.digits;
22996    }
22997
22998    /**
22999     * Returns the template for the formatted phone number.
23000     * @return {string}
23001     */
23002  }, {
23003    key: "getTemplate",
23004    value: function getTemplate() {
23005      return this.formatter.getTemplate(this.state) || this.getNonFormattedTemplate() || '';
23006    }
23007  }]);
23008}();
23009
23010//# sourceMappingURL=AsYouType.js.map
23011
23012/***/ }),
23013
vendor: 9,942 bytes, lines 23014-23238
23014/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js":
23015/*!**********************************************************************************!*\
23016  !*** ../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js ***!
23017  \**********************************************************************************/
23018/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
23019
23020"use strict";
23021__webpack_require__.r(__webpack_exports__);
23022/* harmony export */ __webpack_require__.d(__webpack_exports__, {
23023/* harmony export */   "default": function() { return /* binding */ PatternMatcher; }
23024/* harmony export */ });
23025/* harmony import */ var _AsYouTypeFormatter_PatternParser_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsYouTypeFormatter.PatternParser.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js");
23026function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
23027function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
23028function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
23029function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
23030function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
23031function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
23032function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
23033function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
23034function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
23035
23036var PatternMatcher = /*#__PURE__*/function () {
23037  function PatternMatcher(pattern) {
23038    _classCallCheck(this, PatternMatcher);
23039    this.matchTree = new _AsYouTypeFormatter_PatternParser_js__WEBPACK_IMPORTED_MODULE_0__["default"]().parse(pattern);
23040  }
23041  return _createClass(PatternMatcher, [{
23042    key: "match",
23043    value: function match(string) {
23044      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
23045        allowOverflow = _ref.allowOverflow;
23046      if (!string) {
23047        throw new Error('String is required');
23048      }
23049      var result = _match(string.split(''), this.matchTree, true);
23050      if (result && result.match) {
23051        delete result.matchedChars;
23052      }
23053      if (result && result.overflow) {
23054        if (!allowOverflow) {
23055          return;
23056        }
23057      }
23058      return result;
23059    }
23060  }]);
23061}();
23062/**
23063 * Matches `characters` against a pattern compiled into a `tree`.
23064 * @param  {string[]} characters
23065 * @param  {Tree} tree — A pattern compiled into a `tree`. See the `*.d.ts` file for the description of the `tree` structure.
23066 * @param  {boolean} last — Whether it's the last (rightmost) subtree on its level of the match tree.
23067 * @return {object} See the `*.d.ts` file for the description of the result object.
23068 */
23069
23070function _match(characters, tree, last) {
23071  // If `tree` is a string, then `tree` is a single character.
23072  // That's because when a pattern is parsed, multi-character-string parts
23073  // of a pattern are compiled into arrays of single characters.
23074  // I still wrote this piece of code for a "general" hypothetical case
23075  // when `tree` could be a string of several characters, even though
23076  // such case is not possible with the current implementation.
23077  if (typeof tree === 'string') {
23078    var characterString = characters.join('');
23079    if (tree.indexOf(characterString) === 0) {
23080      // `tree` is always a single character.
23081      // If `tree.indexOf(characterString) === 0`
23082      // then `characters.length === tree.length`.
23083      /* istanbul ignore else */
23084      if (characters.length === tree.length) {
23085        return {
23086          match: true,
23087          matchedChars: characters
23088        };
23089      }
23090      // `tree` is always a single character.
23091      // If `tree.indexOf(characterString) === 0`
23092      // then `characters.length === tree.length`.
23093      /* istanbul ignore next */
23094      return {
23095        partialMatch: true
23096        // matchedChars: characters
23097      };
23098    }
23099    if (characterString.indexOf(tree) === 0) {
23100      if (last) {
23101        // The `else` path is not possible because `tree` is always a single character.
23102        // The `else` case for `characters.length > tree.length` would be
23103        // `characters.length <= tree.length` which means `characters.length <= 1`.
23104        // `characters` array can't be empty, so that means `characters === [tree]`,
23105        // which would also mean `tree.indexOf(characterString) === 0` and that'd mean
23106        // that the `if (tree.indexOf(characterString) === 0)` condition before this
23107        // `if` condition would be entered, and returned from there, not reaching this code.
23108        /* istanbul ignore else */
23109        if (characters.length > tree.length) {
23110          return {
23111            overflow: true
23112          };
23113        }
23114      }
23115      return {
23116        match: true,
23117        matchedChars: characters.slice(0, tree.length)
23118      };
23119    }
23120    return;
23121  }
23122  if (Array.isArray(tree)) {
23123    var restCharacters = characters.slice();
23124    var i = 0;
23125    while (i < tree.length) {
23126      var subtree = tree[i];
23127      var result = _match(restCharacters, subtree, last && i === tree.length - 1);
23128      if (!result) {
23129        return;
23130      } else if (result.overflow) {
23131        return result;
23132      } else if (result.match) {
23133        // Continue with the next subtree with the rest of the characters.
23134        restCharacters = restCharacters.slice(result.matchedChars.length);
23135        if (restCharacters.length === 0) {
23136          if (i === tree.length - 1) {
23137            return {
23138              match: true,
23139              matchedChars: characters
23140            };
23141          } else {
23142            return {
23143              partialMatch: true
23144              // matchedChars: characters
23145            };
23146          }
23147        }
23148      } else {
23149        /* istanbul ignore else */
23150        if (result.partialMatch) {
23151          return {
23152            partialMatch: true
23153            // matchedChars: characters
23154          };
23155        } else {
23156          throw new Error("Unsupported match result:\n".concat(JSON.stringify(result, null, 2)));
23157        }
23158      }
23159      i++;
23160    }
23161    // If `last` then overflow has already been checked
23162    // by the last element of the `tree` array.
23163    /* istanbul ignore if */
23164    if (last) {
23165      return {
23166        overflow: true
23167      };
23168    }
23169    return {
23170      match: true,
23171      matchedChars: characters.slice(0, characters.length - restCharacters.length)
23172    };
23173  }
23174  switch (tree.op) {
23175    case '|':
23176      var partialMatch;
23177      for (var _iterator = _createForOfIteratorHelperLoose(tree.args), _step; !(_step = _iterator()).done;) {
23178        var branch = _step.value;
23179        var _result = _match(characters, branch, last);
23180        if (_result) {
23181          if (_result.overflow) {
23182            return _result;
23183          } else if (_result.match) {
23184            return {
23185              match: true,
23186              matchedChars: _result.matchedChars
23187            };
23188          } else {
23189            /* istanbul ignore else */
23190            if (_result.partialMatch) {
23191              partialMatch = true;
23192            } else {
23193              throw new Error("Unsupported match result:\n".concat(JSON.stringify(_result, null, 2)));
23194            }
23195          }
23196        }
23197      }
23198      if (partialMatch) {
23199        return {
23200          partialMatch: true
23201          // matchedChars: ...
23202        };
23203      }
23204      // Not even a partial match.
23205      return;
23206    case '[]':
23207      for (var _iterator2 = _createForOfIteratorHelperLoose(tree.args), _step2; !(_step2 = _iterator2()).done;) {
23208        var _char = _step2.value;
23209        if (characters[0] === _char) {
23210          if (characters.length === 1) {
23211            return {
23212              match: true,
23213              matchedChars: characters
23214            };
23215          }
23216          if (last) {
23217            return {
23218              overflow: true
23219            };
23220          }
23221          return {
23222            match: true,
23223            matchedChars: [_char]
23224          };
23225        }
23226      }
23227      // No character matches.
23228      return;
23229
23230    /* istanbul ignore next */
23231    default:
23232      throw new Error("Unsupported instruction tree: ".concat(tree));
23233  }
23234}
23235//# sourceMappingURL=AsYouTypeFormatter.PatternMatcher.js.map
23236
23237/***/ }),
23238
vendor: 7,520 bytes, lines 23239-23455
23239/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js":
23240/*!*********************************************************************************!*\
23241  !*** ../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js ***!
23242  \*********************************************************************************/
23243/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
23244
23245"use strict";
23246__webpack_require__.r(__webpack_exports__);
23247/* harmony export */ __webpack_require__.d(__webpack_exports__, {
23248/* harmony export */   "default": function() { return /* binding */ PatternParser; }
23249/* harmony export */ });
23250function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
23251function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
23252function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
23253function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
23254function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
23255function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
23256var PatternParser = /*#__PURE__*/function () {
23257  function PatternParser() {
23258    _classCallCheck(this, PatternParser);
23259  }
23260  return _createClass(PatternParser, [{
23261    key: "parse",
23262    value: function parse(pattern) {
23263      this.context = [{
23264        or: true,
23265        instructions: []
23266      }];
23267      this.parsePattern(pattern);
23268      if (this.context.length !== 1) {
23269        throw new Error('Non-finalized contexts left when pattern parse ended');
23270      }
23271      var _this$context$ = this.context[0],
23272        branches = _this$context$.branches,
23273        instructions = _this$context$.instructions;
23274      if (branches) {
23275        return {
23276          op: '|',
23277          args: branches.concat([expandSingleElementArray(instructions)])
23278        };
23279      }
23280
23281      /* istanbul ignore if */
23282      if (instructions.length === 0) {
23283        throw new Error('Pattern is required');
23284      }
23285      if (instructions.length === 1) {
23286        return instructions[0];
23287      }
23288      return instructions;
23289    }
23290  }, {
23291    key: "startContext",
23292    value: function startContext(context) {
23293      this.context.push(context);
23294    }
23295  }, {
23296    key: "endContext",
23297    value: function endContext() {
23298      this.context.pop();
23299    }
23300  }, {
23301    key: "getContext",
23302    value: function getContext() {
23303      return this.context[this.context.length - 1];
23304    }
23305  }, {
23306    key: "parsePattern",
23307    value: function parsePattern(pattern) {
23308      if (!pattern) {
23309        throw new Error('Pattern is required');
23310      }
23311      var match = pattern.match(OPERATOR);
23312      if (!match) {
23313        if (ILLEGAL_CHARACTER_REGEXP.test(pattern)) {
23314          throw new Error("Illegal characters found in a pattern: ".concat(pattern));
23315        }
23316        this.getContext().instructions = this.getContext().instructions.concat(pattern.split(''));
23317        return;
23318      }
23319      var operator = match[1];
23320      var before = pattern.slice(0, match.index);
23321      var rightPart = pattern.slice(match.index + operator.length);
23322      switch (operator) {
23323        case '(?:':
23324          if (before) {
23325            this.parsePattern(before);
23326          }
23327          this.startContext({
23328            or: true,
23329            instructions: [],
23330            branches: []
23331          });
23332          break;
23333        case ')':
23334          if (!this.getContext().or) {
23335            throw new Error('")" operator must be preceded by "(?:" operator');
23336          }
23337          if (before) {
23338            this.parsePattern(before);
23339          }
23340          if (this.getContext().instructions.length === 0) {
23341            throw new Error('No instructions found after "|" operator in an "or" group');
23342          }
23343          var _this$getContext = this.getContext(),
23344            branches = _this$getContext.branches;
23345          branches.push(expandSingleElementArray(this.getContext().instructions));
23346          this.endContext();
23347          this.getContext().instructions.push({
23348            op: '|',
23349            args: branches
23350          });
23351          break;
23352        case '|':
23353          if (!this.getContext().or) {
23354            throw new Error('"|" operator can only be used inside "or" groups');
23355          }
23356          if (before) {
23357            this.parsePattern(before);
23358          }
23359          // The top-level is an implicit "or" group, if required.
23360          if (!this.getContext().branches) {
23361            // `branches` are not defined only for the root implicit "or" operator.
23362            /* istanbul ignore else */
23363            if (this.context.length === 1) {
23364              this.getContext().branches = [];
23365            } else {
23366              throw new Error('"branches" not found in an "or" group context');
23367            }
23368          }
23369          this.getContext().branches.push(expandSingleElementArray(this.getContext().instructions));
23370          this.getContext().instructions = [];
23371          break;
23372        case '[':
23373          if (before) {
23374            this.parsePattern(before);
23375          }
23376          this.startContext({
23377            oneOfSet: true
23378          });
23379          break;
23380        case ']':
23381          if (!this.getContext().oneOfSet) {
23382            throw new Error('"]" operator must be preceded by "[" operator');
23383          }
23384          this.endContext();
23385          this.getContext().instructions.push({
23386            op: '[]',
23387            args: parseOneOfSet(before)
23388          });
23389          break;
23390
23391        /* istanbul ignore next */
23392        default:
23393          throw new Error("Unknown operator: ".concat(operator));
23394      }
23395      if (rightPart) {
23396        this.parsePattern(rightPart);
23397      }
23398    }
23399  }]);
23400}();
23401
23402function parseOneOfSet(pattern) {
23403  var values = [];
23404  var i = 0;
23405  while (i < pattern.length) {
23406    if (pattern[i] === '-') {
23407      if (i === 0 || i === pattern.length - 1) {
23408        throw new Error("Couldn't parse a one-of set pattern: ".concat(pattern));
23409      }
23410      var prevValue = pattern[i - 1].charCodeAt(0) + 1;
23411      var nextValue = pattern[i + 1].charCodeAt(0) - 1;
23412      var value = prevValue;
23413      while (value <= nextValue) {
23414        values.push(String.fromCharCode(value));
23415        value++;
23416      }
23417    } else {
23418      values.push(pattern[i]);
23419    }
23420    i++;
23421  }
23422  return values;
23423}
23424var ILLEGAL_CHARACTER_REGEXP = /[\(\)\[\]\?\:\|]/;
23425var OPERATOR = new RegExp(
23426// any of:
23427'(' +
23428// or operator
23429'\\|' +
23430// or
23431'|' +
23432// or group start
23433'\\(\\?\\:' +
23434// or
23435'|' +
23436// or group end
23437'\\)' +
23438// or
23439'|' +
23440// one-of set start
23441'\\[' +
23442// or
23443'|' +
23444// one-of set end
23445'\\]' + ')');
23446function expandSingleElementArray(array) {
23447  if (array.length === 1) {
23448    return array[0];
23449  }
23450  return array;
23451}
23452//# sourceMappingURL=AsYouTypeFormatter.PatternParser.js.map
23453
23454/***/ }),
23455
vendor: 7,328 bytes, lines 23456-23588
23456/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js":
23457/*!****************************************************************************!*\
23458  !*** ../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js ***!
23459  \****************************************************************************/
23460/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
23461
23462"use strict";
23463__webpack_require__.r(__webpack_exports__);
23464/* harmony export */ __webpack_require__.d(__webpack_exports__, {
23465/* harmony export */   canFormatCompleteNumber: function() { return /* binding */ canFormatCompleteNumber; },
23466/* harmony export */   "default": function() { return /* binding */ formatCompleteNumber; }
23467/* harmony export */ });
23468/* harmony import */ var _helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/checkNumberLength.js */ "../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js");
23469/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/parseDigits.js */ "../node_modules/libphonenumber-js/es6/helpers/parseDigits.js");
23470/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ "../node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js");
23471
23472
23473
23474function formatCompleteNumber(state, format, _ref) {
23475  var metadata = _ref.metadata,
23476    shouldTryNationalPrefixFormattingRule = _ref.shouldTryNationalPrefixFormattingRule,
23477    getSeparatorAfterNationalPrefix = _ref.getSeparatorAfterNationalPrefix;
23478  var matcher = new RegExp("^(?:".concat(format.pattern(), ")$"));
23479  if (matcher.test(state.nationalSignificantNumber)) {
23480    return formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, {
23481      metadata: metadata,
23482      shouldTryNationalPrefixFormattingRule: shouldTryNationalPrefixFormattingRule,
23483      getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix
23484    });
23485  }
23486}
23487function canFormatCompleteNumber(nationalSignificantNumber, country, metadata) {
23488  return (0,_helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_0__["default"])(nationalSignificantNumber, country, metadata) === 'IS_POSSIBLE';
23489}
23490function formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, _ref2) {
23491  var metadata = _ref2.metadata,
23492    shouldTryNationalPrefixFormattingRule = _ref2.shouldTryNationalPrefixFormattingRule,
23493    getSeparatorAfterNationalPrefix = _ref2.getSeparatorAfterNationalPrefix;
23494  // `format` has already been checked for `nationalPrefix` requirement.
23495
23496  var nationalSignificantNumber = state.nationalSignificantNumber,
23497    international = state.international,
23498    nationalPrefix = state.nationalPrefix,
23499    carrierCode = state.carrierCode;
23500
23501  // Format the number with using `national_prefix_formatting_rule`.
23502  // If the resulting formatted number is a valid formatted number, then return it.
23503  //
23504  // Google's AsYouType formatter is different in a way that it doesn't try
23505  // to format using the "national prefix formatting rule", and instead it
23506  // simply prepends a national prefix followed by a " " character.
23507  // This code does that too, but as a fallback.
23508  // The reason is that "national prefix formatting rule" may use parentheses,
23509  // which wouldn't be included has it used the simpler Google's way.
23510  //
23511  if (shouldTryNationalPrefixFormattingRule(format)) {
23512    var formattedNumber = formatNationalNumber(state, format, {
23513      useNationalPrefixFormattingRule: true,
23514      getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,
23515      metadata: metadata
23516    });
23517    if (formattedNumber) {
23518      return formattedNumber;
23519    }
23520  }
23521
23522  // Format the number without using `national_prefix_formatting_rule`.
23523  return formatNationalNumber(state, format, {
23524    useNationalPrefixFormattingRule: false,
23525    getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,
23526    metadata: metadata
23527  });
23528}
23529function formatNationalNumber(state, format, _ref3) {
23530  var metadata = _ref3.metadata,
23531    useNationalPrefixFormattingRule = _ref3.useNationalPrefixFormattingRule,
23532    getSeparatorAfterNationalPrefix = _ref3.getSeparatorAfterNationalPrefix;
23533  var formattedNationalNumber = (0,_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.nationalSignificantNumber, format, {
23534    carrierCode: state.carrierCode,
23535    useInternationalFormat: state.international,
23536    withNationalPrefix: useNationalPrefixFormattingRule,
23537    metadata: metadata
23538  });
23539  if (!useNationalPrefixFormattingRule) {
23540    if (state.nationalPrefix) {
23541      // If a national prefix was extracted, then just prepend it,
23542      // followed by a " " character.
23543      formattedNationalNumber = state.nationalPrefix + getSeparatorAfterNationalPrefix(format) + formattedNationalNumber;
23544    } else if (state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {
23545      formattedNationalNumber = state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix + ' ' + formattedNationalNumber;
23546    }
23547  }
23548  if (isValidFormattedNationalNumber(formattedNationalNumber, state)) {
23549    return formattedNationalNumber;
23550  }
23551}
23552
23553// Check that the formatted phone number contains exactly
23554// the same digits that have been input by the user.
23555// For example, when "0111523456789" is input for `AR` country,
23556// the extracted `this.nationalSignificantNumber` is "91123456789",
23557// which means that the national part of `this.digits` isn't simply equal to
23558// `this.nationalPrefix` + `this.nationalSignificantNumber`.
23559//
23560// Also, a `format` can add extra digits to the `this.nationalSignificantNumber`
23561// being formatted via `metadata[country].national_prefix_transform_rule`.
23562// For example, for `VI` country, it prepends `340` to the national number,
23563// and if this check hasn't been implemented, then there would be a bug
23564// when `340` "area coude" is "duplicated" during input for `VI` country:
23565// https://github.com/catamphetamine/libphonenumber-js/issues/318
23566//
23567// So, all these "gotchas" are filtered out.
23568//
23569// In the original Google's code, the comments say:
23570// "Check that we didn't remove nor add any extra digits when we matched
23571// this formatting pattern. This usually happens after we entered the last
23572// digit during AYTF. Eg: In case of MX, we swallow mobile token (1) when
23573// formatted but AYTF should retain all the number entered and not change
23574// in order to match a format (of same leading digits and length) display
23575// in that way."
23576// "If it's the same (i.e entered number and format is same), then it's
23577// safe to return this in formatted number as nothing is lost / added."
23578// Otherwise, don't use this format.
23579// https://github.com/google/libphonenumber/commit/3e7c1f04f5e7200f87fb131e6f85c6e99d60f510#diff-9149457fa9f5d608a11bb975c6ef4bc5
23580// https://github.com/google/libphonenumber/commit/3ac88c7106e7dcb553bcc794b15f19185928a1c6#diff-2dcb77e833422ee304da348b905cde0b
23581//
23582function isValidFormattedNationalNumber(formattedNationalNumber, state) {
23583  return (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_1__["default"])(formattedNationalNumber) === state.getNationalDigits();
23584}
23585//# sourceMappingURL=AsYouTypeFormatter.complete.js.map
23586
23587/***/ }),
23588
vendor: 39,744 bytes, lines 23589-24333
23589/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js":
23590/*!*******************************************************************!*\
23591  !*** ../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js ***!
23592  \*******************************************************************/
23593/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
23594
23595"use strict";
23596__webpack_require__.r(__webpack_exports__);
23597/* harmony export */ __webpack_require__.d(__webpack_exports__, {
23598/* harmony export */   DIGIT_PLACEHOLDER: function() { return /* reexport safe */ _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER; },
23599/* harmony export */   "default": function() { return /* binding */ AsYouTypeFormatter; }
23600/* harmony export */ });
23601/* harmony import */ var _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AsYouTypeFormatter.util.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js");
23602/* harmony import */ var _AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AsYouTypeFormatter.complete.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js");
23603/* harmony import */ var _AsYouTypeFormatter_PatternMatcher_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AsYouTypeFormatter.PatternMatcher.js */ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js");
23604/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/parseDigits.js */ "../node_modules/libphonenumber-js/es6/helpers/parseDigits.js");
23605/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ "../node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js");
23606/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants.js */ "../node_modules/libphonenumber-js/es6/constants.js");
23607/* harmony import */ var _helpers_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/applyInternationalSeparatorStyle.js */ "../node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js");
23608function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
23609function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
23610function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
23611function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
23612function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
23613function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
23614function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
23615function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
23616function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
23617
23618
23619
23620
23621
23622
23623
23624
23625
23626// Used in phone number format template creation.
23627// Could be any digit, I guess.
23628var DUMMY_DIGIT = '9';
23629// I don't know why is it exactly `15`
23630var LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;
23631// Create a phone number consisting only of the digit 9 that matches the
23632// `number_pattern` by applying the pattern to the "longest phone number" string.
23633var LONGEST_DUMMY_PHONE_NUMBER = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);
23634
23635// A set of characters that, if found in a national prefix formatting rules, are an indicator to
23636// us that we should separate the national prefix from the number when formatting.
23637var NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/;
23638
23639// Deprecated: Google has removed some formatting pattern related code from their repo.
23640// https://github.com/googlei18n/libphonenumber/commit/a395b4fef3caf57c4bc5f082e1152a4d2bd0ba4c
23641// "We no longer have numbers in formatting matching patterns, only \d."
23642// Because this library supports generating custom metadata
23643// some users may still be using old metadata so the relevant
23644// code seems to stay until some next major version update.
23645var SUPPORT_LEGACY_FORMATTING_PATTERNS = true;
23646
23647// A pattern that is used to match character classes in regular expressions.
23648// An example of a character class is "[1-4]".
23649var CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {
23650  return /\[([^\[\]])*\]/g;
23651};
23652
23653// Any digit in a regular expression that actually denotes a digit. For
23654// example, in the regular expression "80[0-2]\d{6,10}", the first 2 digits
23655// (8 and 0) are standalone digits, but the rest are not.
23656// Two look-aheads are needed because the number following \\d could be a
23657// two-digit number, since the phone number can be as long as 15 digits.
23658var CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {
23659  return /\d(?=[^,}][^,}])/g;
23660};
23661
23662// A regular expression that is used to determine if a `format` is
23663// suitable to be used in the "as you type formatter".
23664// A `format` is suitable when the resulting formatted number has
23665// the same digits as the user has entered.
23666//
23667// In the simplest case, that would mean that the format
23668// doesn't add any additional digits when formatting a number.
23669// Google says that it also shouldn't add "star" (`*`) characters,
23670// like it does in some Israeli formats.
23671// Such basic format would only contain "valid punctuation"
23672// and "captured group" identifiers ($1, $2, etc).
23673//
23674// An example of a format that adds additional digits:
23675//
23676// Country: `AR` (Argentina).
23677// Format:
23678// {
23679//    "pattern": "(\\d)(\\d{2})(\\d{4})(\\d{4})",
23680//    "leading_digits_patterns": ["91"],
23681//    "national_prefix_formatting_rule": "0$1",
23682//    "format": "$2 15-$3-$4",
23683//    "international_format": "$1 $2 $3-$4"
23684// }
23685//
23686// In the format above, the `format` adds `15` to the digits when formatting a number.
23687// A sidenote: this format actually is suitable because `national_prefix_for_parsing`
23688// has previously removed `15` from a national number, so re-adding `15` in `format`
23689// doesn't actually result in any extra digits added to user's input.
23690// But verifying that would be a complex procedure, so the code chooses a simpler path:
23691// it simply filters out all `format`s that contain anything but "captured group" ids.
23692//
23693// This regular expression is called `ELIGIBLE_FORMAT_PATTERN` in Google's
23694// `libphonenumber` code.
23695//
23696var NON_ALTERING_FORMAT_REG_EXP = new RegExp('[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*' +
23697// Google developers say:
23698// "We require that the first matching group is present in the
23699//  output pattern to ensure no data is lost while formatting."
23700'\\$1' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*' + '(\\$\\d[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + ']*)*' + '$');
23701
23702// This is the minimum length of the leading digits of a phone number
23703// to guarantee the first "leading digits pattern" for a phone number format
23704// to be preemptive.
23705var MIN_LEADING_DIGITS_LENGTH = 3;
23706var AsYouTypeFormatter = /*#__PURE__*/function () {
23707  function AsYouTypeFormatter(_ref) {
23708    var state = _ref.state,
23709      metadata = _ref.metadata;
23710    _classCallCheck(this, AsYouTypeFormatter);
23711    this.metadata = metadata;
23712    this.resetFormat();
23713  }
23714  return _createClass(AsYouTypeFormatter, [{
23715    key: "resetFormat",
23716    value: function resetFormat() {
23717      this.chosenFormat = undefined;
23718      this.template = undefined;
23719      this.nationalNumberTemplate = undefined;
23720      this.populatedNationalNumberTemplate = undefined;
23721      this.populatedNationalNumberTemplatePosition = -1;
23722    }
23723  }, {
23724    key: "reset",
23725    value: function reset(numberingPlan, state) {
23726      this.resetFormat();
23727      if (numberingPlan) {
23728        this.isNANP = numberingPlan.callingCode() === '1';
23729        this.matchingFormats = numberingPlan.formats();
23730        if (state.nationalSignificantNumber) {
23731          this.narrowDownMatchingFormats(state);
23732        }
23733      } else {
23734        this.isNANP = undefined;
23735        this.matchingFormats = [];
23736      }
23737    }
23738
23739    /**
23740     * Formats an updated phone number.
23741     * @param  {string} nextDigits — Additional phone number digits.
23742     * @param  {object} state — `AsYouType` state.
23743     * @return {[string]} Returns undefined if the updated phone number can't be formatted using any of the available formats.
23744     */
23745  }, {
23746    key: "format",
23747    value: function format(nextDigits, state) {
23748      var _this = this;
23749      // See if the phone number digits can be formatted as a complete phone number.
23750      // If not, use the results from `formatNationalNumberWithNextDigits()`,
23751      // which formats based on the chosen formatting pattern.
23752      //
23753      // Attempting to format complete phone number first is how it's done
23754      // in Google's `libphonenumber`, so this library just follows it.
23755      // Google's `libphonenumber` code doesn't explain in detail why does it
23756      // attempt to format digits as a complete phone number
23757      // instead of just going with a previoulsy (or newly) chosen `format`:
23758      //
23759      // "Checks to see if there is an exact pattern match for these digits.
23760      //  If so, we should use this instead of any other formatting template
23761      //  whose leadingDigitsPattern also matches the input."
23762      //
23763      if ((0,_AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__.canFormatCompleteNumber)(state.nationalSignificantNumber, state.country, this.metadata)) {
23764        for (var _iterator = _createForOfIteratorHelperLoose(this.matchingFormats), _step; !(_step = _iterator()).done;) {
23765          var _format = _step.value;
23766          var formattedCompleteNumber = (0,_AsYouTypeFormatter_complete_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state, _format, {
23767            metadata: this.metadata,
23768            shouldTryNationalPrefixFormattingRule: function shouldTryNationalPrefixFormattingRule(format) {
23769              return _this.shouldTryNationalPrefixFormattingRule(format, {
23770                international: state.international,
23771                nationalPrefix: state.nationalPrefix
23772              });
23773            },
23774            getSeparatorAfterNationalPrefix: function getSeparatorAfterNationalPrefix(format) {
23775              return _this.getSeparatorAfterNationalPrefix(format);
23776            }
23777          });
23778          if (formattedCompleteNumber) {
23779            this.resetFormat();
23780            this.chosenFormat = _format;
23781            this.setNationalNumberTemplate(formattedCompleteNumber.replace(/\d/g, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER), state);
23782            this.populatedNationalNumberTemplate = formattedCompleteNumber;
23783            // With a new formatting template, the matched position
23784            // using the old template needs to be reset.
23785            this.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER);
23786            return formattedCompleteNumber;
23787          }
23788        }
23789      }
23790      // Format the digits as a partial (incomplete) phone number
23791      // using the previously chosen formatting pattern (or a newly chosen one).
23792      return this.formatNationalNumberWithNextDigits(nextDigits, state);
23793    }
23794
23795    // Formats the next phone number digits.
23796  }, {
23797    key: "formatNationalNumberWithNextDigits",
23798    value: function formatNationalNumberWithNextDigits(nextDigits, state) {
23799      var previouslyChosenFormat = this.chosenFormat;
23800
23801      // Choose a format from the list of matching ones.
23802      var newlyChosenFormat = this.chooseFormat(state);
23803      if (newlyChosenFormat) {
23804        if (newlyChosenFormat === previouslyChosenFormat) {
23805          // If it can format the next (current) digits
23806          // using the previously chosen phone number format
23807          // then return the updated formatted number.
23808          return this.formatNextNationalNumberDigits(nextDigits);
23809        } else {
23810          // If a more appropriate phone number format
23811          // has been chosen for these "leading digits",
23812          // then re-format the national phone number part
23813          // using the newly selected format.
23814          return this.formatNextNationalNumberDigits(state.getNationalDigits());
23815        }
23816      }
23817    }
23818  }, {
23819    key: "narrowDownMatchingFormats",
23820    value: function narrowDownMatchingFormats(_ref2) {
23821      var _this2 = this;
23822      var nationalSignificantNumber = _ref2.nationalSignificantNumber,
23823        nationalPrefix = _ref2.nationalPrefix,
23824        international = _ref2.international;
23825      var leadingDigits = nationalSignificantNumber;
23826
23827      // "leading digits" pattern list starts with a
23828      // "leading digits" pattern fitting a maximum of 3 leading digits.
23829      // So, after a user inputs 3 digits of a national (significant) phone number
23830      // this national (significant) number can already be formatted.
23831      // The next "leading digits" pattern is for 4 leading digits max,
23832      // and the "leading digits" pattern after it is for 5 leading digits max, etc.
23833
23834      // This implementation is different from Google's
23835      // in that it searches for a fitting format
23836      // even if the user has entered less than
23837      // `MIN_LEADING_DIGITS_LENGTH` digits of a national number.
23838      // Because some leading digit patterns already match for a single first digit.
23839      var leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH;
23840      if (leadingDigitsPatternIndex < 0) {
23841        leadingDigitsPatternIndex = 0;
23842      }
23843      this.matchingFormats = this.matchingFormats.filter(function (format) {
23844        return _this2.formatSuits(format, international, nationalPrefix) && _this2.formatMatches(format, leadingDigits, leadingDigitsPatternIndex);
23845      });
23846
23847      // If there was a phone number format chosen
23848      // and it no longer holds given the new leading digits then reset it.
23849      // The test for this `if` condition is marked as:
23850      // "Reset a chosen format when it no longer holds given the new leading digits".
23851      // To construct a valid test case for this one can find a country
23852      // in `PhoneNumberMetadata.xml` yielding one format for 3 `<leadingDigits>`
23853      // and yielding another format for 4 `<leadingDigits>` (Australia in this case).
23854      if (this.chosenFormat && this.matchingFormats.indexOf(this.chosenFormat) === -1) {
23855        this.resetFormat();
23856      }
23857    }
23858  }, {
23859    key: "formatSuits",
23860    value: function formatSuits(format, international, nationalPrefix) {
23861      // When a prefix before a national (significant) number is
23862      // simply a national prefix, then it's parsed as `this.nationalPrefix`.
23863      // In more complex cases, a prefix before national (significant) number
23864      // could include a national prefix as well as some "capturing groups",
23865      // and in that case there's no info whether a national prefix has been parsed.
23866      // If national prefix is not used when formatting a phone number
23867      // using this format, but a national prefix has been entered by the user,
23868      // and was extracted, then discard such phone number format.
23869      // In Google's "AsYouType" formatter code, the equivalent would be this part:
23870      // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L175-L184
23871      if (nationalPrefix && !format.usesNationalPrefix() &&
23872      // !format.domesticCarrierCodeFormattingRule() &&
23873      !format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) {
23874        return false;
23875      }
23876      // If national prefix is mandatory for this phone number format
23877      // and there're no guarantees that a national prefix is present in user input
23878      // then discard this phone number format as not suitable.
23879      // In Google's "AsYouType" formatter code, the equivalent would be this part:
23880      // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L185-L193
23881      if (!international && !nationalPrefix && format.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) {
23882        return false;
23883      }
23884      return true;
23885    }
23886  }, {
23887    key: "formatMatches",
23888    value: function formatMatches(format, leadingDigits, leadingDigitsPatternIndex) {
23889      var leadingDigitsPatternsCount = format.leadingDigitsPatterns().length;
23890
23891      // If this format is not restricted to a certain
23892      // leading digits pattern then it fits.
23893      // The test case could be found by searching for "leadingDigitsPatternsCount === 0".
23894      if (leadingDigitsPatternsCount === 0) {
23895        return true;
23896      }
23897
23898      // Start narrowing down the list of possible formats based on the leading digits.
23899      // (only previously matched formats take part in the narrowing down process)
23900
23901      // `leading_digits_patterns` start with 3 digits min
23902      // and then go up from there one digit at a time.
23903      leadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1);
23904      var leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex];
23905
23906      // Google imposes a requirement on the leading digits
23907      // to be minimum 3 digits long in order to be eligible
23908      // for checking those with a leading digits pattern.
23909      //
23910      // Since `leading_digits_patterns` start with 3 digits min,
23911      // Google's original `libphonenumber` library only starts
23912      // excluding any non-matching formats only when the
23913      // national number entered so far is at least 3 digits long,
23914      // otherwise format matching would give false negatives.
23915      //
23916      // For example, when the digits entered so far are `2`
23917      // and the leading digits pattern is `21` –
23918      // it's quite obvious in this case that the format could be the one
23919      // but due to the absence of further digits it would give false negative.
23920      //
23921      // Also, `leading_digits_patterns` doesn't always correspond to a single
23922      // digits count. For example, `60|8` pattern would already match `8`
23923      // but the `60` part would require having at least two leading digits,
23924      // so the whole pattern would require inputting two digits first in order to
23925      // decide on whether it matches the input, even when the input is "80".
23926      //
23927      // This library — `libphonenumber-js` — allows filtering by `leading_digits_patterns`
23928      // even when there's only 1 or 2 digits of the national (significant) number.
23929      // To do that, it uses a non-strict pattern matcher written specifically for that.
23930      //
23931      if (leadingDigits.length < MIN_LEADING_DIGITS_LENGTH) {
23932        // Before leading digits < 3 matching was implemented:
23933        // return true
23934        //
23935        // After leading digits < 3 matching was implemented:
23936        try {
23937          return new _AsYouTypeFormatter_PatternMatcher_js__WEBPACK_IMPORTED_MODULE_2__["default"](leadingDigitsPattern).match(leadingDigits, {
23938            allowOverflow: true
23939          }) !== undefined;
23940        } catch (error) /* istanbul ignore next */{
23941          // There's a slight possibility that there could be some undiscovered bug
23942          // in the pattern matcher code. Since the "leading digits < 3 matching"
23943          // feature is not "essential" for operation, it can fall back to the old way
23944          // in case of any issues rather than halting the application's execution.
23945          console.error(error);
23946          return true;
23947        }
23948      }
23949
23950      // If at least `MIN_LEADING_DIGITS_LENGTH` digits of a national number are
23951      // available then use the usual regular expression matching.
23952      //
23953      // The whole pattern is wrapped in round brackets (`()`) because
23954      // the pattern can use "or" operator (`|`) at the top level of the pattern.
23955      //
23956      return new RegExp("^(".concat(leadingDigitsPattern, ")")).test(leadingDigits);
23957    }
23958  }, {
23959    key: "getFormatFormat",
23960    value: function getFormatFormat(format, international) {
23961      return international ? format.internationalFormat() : format.format();
23962    }
23963  }, {
23964    key: "chooseFormat",
23965    value: function chooseFormat(state) {
23966      var _this3 = this;
23967      var _loop = function _loop() {
23968          var format = _step2.value;
23969          // If this format is currently being used
23970          // and is still suitable, then stick to it.
23971          if (_this3.chosenFormat === format) {
23972            return 0; // break
23973          }
23974          // Sometimes, a formatting rule inserts additional digits in a phone number,
23975          // and "as you type" formatter can't do that: it should only use the digits
23976          // that the user has input.
23977          //
23978          // For example, in Argentina, there's a format for mobile phone numbers:
23979          //
23980          // {
23981          //    "pattern": "(\\d)(\\d{2})(\\d{4})(\\d{4})",
23982          //    "leading_digits_patterns": ["91"],
23983          //    "national_prefix_formatting_rule": "0$1",
23984          //    "format": "$2 15-$3-$4",
23985          //    "international_format": "$1 $2 $3-$4"
23986          // }
23987          //
23988          // In that format, `international_format` is used instead of `format`
23989          // because `format` inserts `15` in the formatted number,
23990          // and `AsYouType` formatter should only use the digits
23991          // the user has actually input, without adding any extra digits.
23992          // In this case, it wouldn't make a difference, because the `15`
23993          // is first stripped when applying `national_prefix_for_parsing`
23994          // and then re-added when using `format`, so in reality it doesn't
23995          // add any new digits to the number, but to detect that, the code
23996          // would have to be more complex: it would have to try formatting
23997          // the digits using the format and then see if any digits have
23998          // actually been added or removed, and then, every time a new digit
23999          // is input, it should re-check whether the chosen format doesn't
24000          // alter the digits.
24001          //
24002          // Google's code doesn't go that far, and so does this library:
24003          // it simply requires that a `format` doesn't add any additonal
24004          // digits to user's input.
24005          //
24006          // Also, people in general should move from inputting phone numbers
24007          // in national format (possibly with national prefixes)
24008          // and use international phone number format instead:
24009          // it's a logical thing in the modern age of mobile phones,
24010          // globalization and the internet.
24011          //
24012          /* istanbul ignore if */
24013          if (!NON_ALTERING_FORMAT_REG_EXP.test(_this3.getFormatFormat(format, state.international))) {
24014            return 1; // continue
24015          }
24016          if (!_this3.createTemplateForFormat(format, state)) {
24017            // Remove the format if it can't generate a template.
24018            _this3.matchingFormats = _this3.matchingFormats.filter(function (_) {
24019              return _ !== format;
24020            });
24021            return 1; // continue
24022          }
24023          _this3.chosenFormat = format;
24024          return 0; // break
24025        },
24026        _ret;
24027      // When there are multiple available formats, the formatter uses the first
24028      // format where a formatting template could be created.
24029      //
24030      // For some weird reason, `istanbul` says "else path not taken"
24031      // for the `for of` line below. Supposedly that means that
24032      // the loop doesn't ever go over the last element in the list.
24033      // That's true because there always is `this.chosenFormat`
24034      // when `this.matchingFormats` is non-empty.
24035      // And, for some weird reason, it doesn't think that the case
24036      // with empty `this.matchingFormats` qualifies for a valid "else" path.
24037      // So simply muting this `istanbul` warning.
24038      // It doesn't skip the contents of the `for of` loop,
24039      // it just skips the `for of` line.
24040      //
24041      /* istanbul ignore next */
24042      for (var _iterator2 = _createForOfIteratorHelperLoose(this.matchingFormats.slice()), _step2; !(_step2 = _iterator2()).done;) {
24043        _ret = _loop();
24044        if (_ret === 0) break;
24045        if (_ret === 1) continue;
24046      }
24047      if (!this.chosenFormat) {
24048        // No format matches the national (significant) phone number.
24049        this.resetFormat();
24050      }
24051      return this.chosenFormat;
24052    }
24053  }, {
24054    key: "createTemplateForFormat",
24055    value: function createTemplateForFormat(format, state) {
24056      // The formatter doesn't format numbers when numberPattern contains '|', e.g.
24057      // (20|3)\d{4}. In those cases we quickly return.
24058      // (Though there's no such format in current metadata)
24059      /* istanbul ignore if */
24060      if (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) {
24061        return;
24062      }
24063      // Get formatting template for this phone number format
24064      var template = this.getTemplateForFormat(format, state);
24065      // If the national number entered is too long
24066      // for any phone number format, then abort.
24067      if (template) {
24068        this.setNationalNumberTemplate(template, state);
24069        return true;
24070      }
24071    }
24072  }, {
24073    key: "getSeparatorAfterNationalPrefix",
24074    value: function getSeparatorAfterNationalPrefix(format) {
24075      // `US` metadata doesn't have a `national_prefix_formatting_rule`,
24076      // so the `if` condition below doesn't apply to `US`,
24077      // but in reality there shoudl be a separator
24078      // between a national prefix and a national (significant) number.
24079      // So `US` national prefix separator is a "special" "hardcoded" case.
24080      if (this.isNANP) {
24081        return ' ';
24082      }
24083      // If a `format` has a `national_prefix_formatting_rule`
24084      // and that rule has a separator after a national prefix,
24085      // then it means that there should be a separator
24086      // between a national prefix and a national (significant) number.
24087      if (format && format.nationalPrefixFormattingRule() && NATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) {
24088        return ' ';
24089      }
24090      // At this point, there seems to be no clear evidence that
24091      // there should be a separator between a national prefix
24092      // and a national (significant) number. So don't insert one.
24093      return '';
24094    }
24095  }, {
24096    key: "getInternationalPrefixBeforeCountryCallingCode",
24097    value: function getInternationalPrefixBeforeCountryCallingCode(_ref3, options) {
24098      var IDDPrefix = _ref3.IDDPrefix,
24099        missingPlus = _ref3.missingPlus;
24100      if (IDDPrefix) {
24101        return options && options.spacing === false ? IDDPrefix : IDDPrefix + ' ';
24102      }
24103      if (missingPlus) {
24104        return '';
24105      }
24106      return '+';
24107    }
24108  }, {
24109    key: "getTemplate",
24110    value: function getTemplate(state) {
24111      if (!this.template) {
24112        return;
24113      }
24114      // `this.template` holds the template for a "complete" phone number.
24115      // The currently entered phone number is most likely not "complete",
24116      // so trim all non-populated digits.
24117      var index = -1;
24118      var i = 0;
24119      var internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, {
24120        spacing: false
24121      }) : '';
24122      while (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) {
24123        index = this.template.indexOf(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, index + 1);
24124        i++;
24125      }
24126      return (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.cutAndStripNonPairedParens)(this.template, index + 1);
24127    }
24128  }, {
24129    key: "setNationalNumberTemplate",
24130    value: function setNationalNumberTemplate(template, state) {
24131      this.nationalNumberTemplate = template;
24132      this.populatedNationalNumberTemplate = template;
24133      // With a new formatting template, the matched position
24134      // using the old template needs to be reset.
24135      this.populatedNationalNumberTemplatePosition = -1;
24136      // For convenience, the public `.template` property
24137      // contains the whole international number
24138      // if the phone number being input is international:
24139      // 'x' for the '+' sign, 'x'es for the country phone code,
24140      // a spacebar and then the template for the formatted national number.
24141      if (state.international) {
24142        this.template = this.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\d\+]/g, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER) + (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, state.callingCode.length) + ' ' + template;
24143      } else {
24144        this.template = template;
24145      }
24146    }
24147
24148    /**
24149     * Generates formatting template for a national phone number,
24150     * optionally containing a national prefix, for a format.
24151     * @param  {Format} format
24152     * @param  {string} nationalPrefix
24153     * @return {string}
24154     */
24155  }, {
24156    key: "getTemplateForFormat",
24157    value: function getTemplateForFormat(format, _ref4) {
24158      var nationalSignificantNumber = _ref4.nationalSignificantNumber,
24159        international = _ref4.international,
24160        nationalPrefix = _ref4.nationalPrefix,
24161        prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _ref4.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;
24162      var pattern = format.pattern();
24163
24164      /* istanbul ignore else */
24165      if (SUPPORT_LEGACY_FORMATTING_PATTERNS) {
24166        pattern = pattern
24167        // Replace anything in the form of [..] with \d
24168        .replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\d')
24169        // Replace any standalone digit (not the one in `{}`) with \d
24170        .replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\d');
24171      }
24172
24173      // Generate a dummy national number (consisting of `9`s)
24174      // that fits this format's `pattern`.
24175      //
24176      // This match will always succeed,
24177      // because the "longest dummy phone number"
24178      // has enough length to accomodate any possible
24179      // national phone number format pattern.
24180      //
24181      var digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0];
24182
24183      // If the national number entered is too long
24184      // for any phone number format, then abort.
24185      if (nationalSignificantNumber.length > digits.length) {
24186        return;
24187      }
24188
24189      // Get a formatting template which can be used to efficiently format
24190      // a partial number where digits are added one by one.
24191
24192      // Below `strictPattern` is used for the
24193      // regular expression (with `^` and `$`).
24194      // This wasn't originally in Google's `libphonenumber`
24195      // and I guess they don't really need it
24196      // because they're not using "templates" to format phone numbers
24197      // but I added `strictPattern` after encountering
24198      // South Korean phone number formatting bug.
24199      //
24200      // Non-strict regular expression bug demonstration:
24201      //
24202      // this.nationalSignificantNumber : `111111111` (9 digits)
24203      //
24204      // pattern : (\d{2})(\d{3,4})(\d{4})
24205      // format : `$1 $2 $3`
24206      // digits : `9999999999` (10 digits)
24207      //
24208      // '9999999999'.replace(new RegExp(/(\d{2})(\d{3,4})(\d{4})/g), '$1 $2 $3') = "99 9999 9999"
24209      //
24210      // template : xx xxxx xxxx
24211      //
24212      // But the correct template in this case is `xx xxx xxxx`.
24213      // The template was generated incorrectly because of the
24214      // `{3,4}` variability in the `pattern`.
24215      //
24216      // The fix is, if `this.nationalSignificantNumber` has already sufficient length
24217      // to satisfy the `pattern` completely then `this.nationalSignificantNumber`
24218      // is used instead of `digits`.
24219
24220      var strictPattern = new RegExp('^' + pattern + '$');
24221      var nationalNumberDummyDigits = nationalSignificantNumber.replace(/\d/g, DUMMY_DIGIT);
24222
24223      // If `this.nationalSignificantNumber` has already sufficient length
24224      // to satisfy the `pattern` completely then use it
24225      // instead of `digits`.
24226      if (strictPattern.test(nationalNumberDummyDigits)) {
24227        digits = nationalNumberDummyDigits;
24228      }
24229      var numberFormat = this.getFormatFormat(format, international);
24230      var nationalPrefixIncludedInTemplate;
24231
24232      // If a user did input a national prefix (and that's guaranteed),
24233      // and if a `format` does have a national prefix formatting rule,
24234      // then see if that national prefix formatting rule
24235      // prepends exactly the same national prefix the user has input.
24236      // If that's the case, then use the `format` with the national prefix formatting rule.
24237      // Otherwise, use  the `format` without the national prefix formatting rule,
24238      // and prepend a national prefix manually to it.
24239      if (this.shouldTryNationalPrefixFormattingRule(format, {
24240        international: international,
24241        nationalPrefix: nationalPrefix
24242      })) {
24243        var numberFormatWithNationalPrefix = numberFormat.replace(_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_4__.FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule());
24244        // If `national_prefix_formatting_rule` of a `format` simply prepends
24245        // national prefix at the start of a national (significant) number,
24246        // then such formatting can be used with `AsYouType` formatter.
24247        // There seems to be no `else` case: everywhere in metadata,
24248        // national prefix formatting rule is national prefix + $1,
24249        // or `($1)`, in which case such format isn't even considered
24250        // when the user has input a national prefix.
24251        /* istanbul ignore else */
24252        if ((0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__["default"])(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_3__["default"])('$1')) {
24253          numberFormat = numberFormatWithNationalPrefix;
24254          nationalPrefixIncludedInTemplate = true;
24255          // Replace all digits of the national prefix in the formatting template
24256          // with `DIGIT_PLACEHOLDER`s.
24257          if (nationalPrefix) {
24258            var i = nationalPrefix.length;
24259            while (i > 0) {
24260              numberFormat = numberFormat.replace(/\d/, _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER);
24261              i--;
24262            }
24263          }
24264        }
24265      }
24266
24267      // Generate formatting template for this phone number format.
24268      var template = digits
24269      // Format the dummy phone number according to the format.
24270      .replace(new RegExp(pattern), numberFormat)
24271      // Replace each dummy digit with a DIGIT_PLACEHOLDER.
24272      .replace(new RegExp(DUMMY_DIGIT, 'g'), _AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER);
24273
24274      // If a prefix of a national (significant) number is not as simple
24275      // as just a basic national prefix, then just prepend such prefix
24276      // before the national (significant) number, optionally spacing
24277      // the two with a whitespace.
24278      if (!nationalPrefixIncludedInTemplate) {
24279        if (prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {
24280          // Prepend the prefix to the template manually.
24281          template = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix.length) + ' ' + template;
24282        } else if (nationalPrefix) {
24283          // Prepend national prefix to the template manually.
24284          template = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.repeat)(_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.DIGIT_PLACEHOLDER, nationalPrefix.length) + this.getSeparatorAfterNationalPrefix(format) + template;
24285        }
24286      }
24287      if (international) {
24288        template = (0,_helpers_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_6__["default"])(template);
24289      }
24290      return template;
24291    }
24292  }, {
24293    key: "formatNextNationalNumberDigits",
24294    value: function formatNextNationalNumberDigits(digits) {
24295      var result = (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.populateTemplateWithDigits)(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition, digits);
24296      if (!result) {
24297        // Reset the format.
24298        this.resetFormat();
24299        return;
24300      }
24301      this.populatedNationalNumberTemplate = result[0];
24302      this.populatedNationalNumberTemplatePosition = result[1];
24303
24304      // Return the formatted phone number so far.
24305      return (0,_AsYouTypeFormatter_util_js__WEBPACK_IMPORTED_MODULE_0__.cutAndStripNonPairedParens)(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1);
24306
24307      // The old way which was good for `input-format` but is not so good
24308      // for `react-phone-number-input`'s default input (`InputBasic`).
24309      // return closeNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1)
24310      // 	.replace(new RegExp(DIGIT_PLACEHOLDER, 'g'), ' ')
24311    }
24312  }, {
24313    key: "shouldTryNationalPrefixFormattingRule",
24314    value: function shouldTryNationalPrefixFormattingRule(format, _ref5) {
24315      var international = _ref5.international,
24316        nationalPrefix = _ref5.nationalPrefix;
24317      if (format.nationalPrefixFormattingRule()) {
24318        // In some countries, `national_prefix_formatting_rule` is `($1)`,
24319        // so it applies even if the user hasn't input a national prefix.
24320        // `format.usesNationalPrefix()` detects such cases.
24321        var usesNationalPrefix = format.usesNationalPrefix();
24322        if (usesNationalPrefix && nationalPrefix || !usesNationalPrefix && !international) {
24323          return true;
24324        }
24325      }
24326    }
24327  }]);
24328}();
24329
24330//# sourceMappingURL=AsYouTypeFormatter.js.map
24331
24332/***/ }),
24333
vendor: 5,830 bytes, lines 24334-24455
24334/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js":
24335/*!************************************************************************!*\
24336  !*** ../node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js ***!
24337  \************************************************************************/
24338/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
24339
24340"use strict";
24341__webpack_require__.r(__webpack_exports__);
24342/* harmony export */ __webpack_require__.d(__webpack_exports__, {
24343/* harmony export */   DIGIT_PLACEHOLDER: function() { return /* binding */ DIGIT_PLACEHOLDER; },
24344/* harmony export */   closeNonPairedParens: function() { return /* binding */ closeNonPairedParens; },
24345/* harmony export */   countOccurences: function() { return /* binding */ countOccurences; },
24346/* harmony export */   cutAndStripNonPairedParens: function() { return /* binding */ cutAndStripNonPairedParens; },
24347/* harmony export */   populateTemplateWithDigits: function() { return /* binding */ populateTemplateWithDigits; },
24348/* harmony export */   repeat: function() { return /* binding */ repeat; },
24349/* harmony export */   stripNonPairedParens: function() { return /* binding */ stripNonPairedParens; }
24350/* harmony export */ });
24351function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
24352function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
24353function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
24354// Should be the same as `DIGIT_PLACEHOLDER` in `libphonenumber-metadata-generator`.
24355var DIGIT_PLACEHOLDER = 'x'; // '\u2008' (punctuation space)
24356var DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);
24357
24358// Counts all occurences of a symbol in a string.
24359// Unicode-unsafe (because using `.split()`).
24360function countOccurences(symbol, string) {
24361  var count = 0;
24362  // Using `.split('')` to iterate through a string here
24363  // to avoid requiring `Symbol.iterator` polyfill.
24364  // `.split('')` is generally not safe for Unicode,
24365  // but in this particular case for counting brackets it is safe.
24366  // for (const character of string)
24367  for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {
24368    var character = _step.value;
24369    if (character === symbol) {
24370      count++;
24371    }
24372  }
24373  return count;
24374}
24375
24376// Repeats a string (or a symbol) N times.
24377// http://stackoverflow.com/questions/202605/repeat-string-javascript
24378function repeat(string, times) {
24379  if (times < 1) {
24380    return '';
24381  }
24382  var result = '';
24383  while (times > 1) {
24384    if (times & 1) {
24385      result += string;
24386    }
24387    times >>= 1;
24388    string += string;
24389  }
24390  return result + string;
24391}
24392function cutAndStripNonPairedParens(string, cutBeforeIndex) {
24393  if (string[cutBeforeIndex] === ')') {
24394    cutBeforeIndex++;
24395  }
24396  return stripNonPairedParens(string.slice(0, cutBeforeIndex));
24397}
24398function closeNonPairedParens(template, cut_before) {
24399  var retained_template = template.slice(0, cut_before);
24400  var opening_braces = countOccurences('(', retained_template);
24401  var closing_braces = countOccurences(')', retained_template);
24402  var dangling_braces = opening_braces - closing_braces;
24403  while (dangling_braces > 0 && cut_before < template.length) {
24404    if (template[cut_before] === ')') {
24405      dangling_braces--;
24406    }
24407    cut_before++;
24408  }
24409  return template.slice(0, cut_before);
24410}
24411function stripNonPairedParens(string) {
24412  var dangling_braces = [];
24413  var i = 0;
24414  while (i < string.length) {
24415    if (string[i] === '(') {
24416      dangling_braces.push(i);
24417    } else if (string[i] === ')') {
24418      dangling_braces.pop();
24419    }
24420    i++;
24421  }
24422  var start = 0;
24423  var cleared_string = '';
24424  dangling_braces.push(string.length);
24425  for (var _i = 0, _dangling_braces = dangling_braces; _i < _dangling_braces.length; _i++) {
24426    var index = _dangling_braces[_i];
24427    cleared_string += string.slice(start, index);
24428    start = index + 1;
24429  }
24430  return cleared_string;
24431}
24432function populateTemplateWithDigits(template, position, digits) {
24433  // Using `.split('')` to iterate through a string here
24434  // to avoid requiring `Symbol.iterator` polyfill.
24435  // `.split('')` is generally not safe for Unicode,
24436  // but in this particular case for `digits` it is safe.
24437  // for (const digit of digits)
24438  for (var _iterator2 = _createForOfIteratorHelperLoose(digits.split('')), _step2; !(_step2 = _iterator2()).done;) {
24439    var digit = _step2.value;
24440    // If there is room for more digits in current `template`,
24441    // then set the next digit in the `template`,
24442    // and return the formatted digits so far.
24443    // If more digits are entered than the current format could handle.
24444    if (template.slice(position + 1).search(DIGIT_PLACEHOLDER_MATCHER) < 0) {
24445      return;
24446    }
24447    position = template.search(DIGIT_PLACEHOLDER_MATCHER);
24448    template = template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);
24449  }
24450  return [template, position];
24451}
24452//# sourceMappingURL=AsYouTypeFormatter.util.js.map
24453
24454/***/ }),
24455
vendor: 26,990 bytes, lines 24456-24952
24456/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeParser.js":
24457/*!****************************************************************!*\
24458  !*** ../node_modules/libphonenumber-js/es6/AsYouTypeParser.js ***!
24459  \****************************************************************/
24460/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
24461
24462"use strict";
24463__webpack_require__.r(__webpack_exports__);
24464/* harmony export */ __webpack_require__.d(__webpack_exports__, {
24465/* harmony export */   "default": function() { return /* binding */ AsYouTypeParser; },
24466/* harmony export */   extractFormattedDigitsAndPlus: function() { return /* binding */ extractFormattedDigitsAndPlus; }
24467/* harmony export */ });
24468/* harmony import */ var _helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/extractCountryCallingCode.js */ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js");
24469/* harmony import */ var _helpers_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js */ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js");
24470/* harmony import */ var _helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/extractNationalNumberFromPossiblyIncompleteNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js");
24471/* harmony import */ var _helpers_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/stripIddPrefix.js */ "../node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js");
24472/* harmony import */ var _helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/parseDigits.js */ "../node_modules/libphonenumber-js/es6/helpers/parseDigits.js");
24473/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants.js */ "../node_modules/libphonenumber-js/es6/constants.js");
24474function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
24475function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
24476function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
24477function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
24478function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
24479function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
24480function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
24481function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
24482function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
24483function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
24484function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
24485function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
24486
24487
24488
24489
24490
24491
24492var VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']+';
24493var VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN = new RegExp('^' + VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART + '$', 'i');
24494var VALID_FORMATTED_PHONE_NUMBER_PART = '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.PLUS_CHARS + ']' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']*' + '|' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']+' + ')';
24495var AFTER_PHONE_NUMBER_DIGITS_END_PATTERN = new RegExp('[^' + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_5__.VALID_DIGITS + ']+' + '.*' + '$');
24496
24497// Tests whether `national_prefix_for_parsing` could match
24498// different national prefixes.
24499// Matches anything that's not a digit or a square bracket.
24500var COMPLEX_NATIONAL_PREFIX = /[^\d\[\]]/;
24501var AsYouTypeParser = /*#__PURE__*/function () {
24502  function AsYouTypeParser(_ref) {
24503    var defaultCountry = _ref.defaultCountry,
24504      defaultCallingCode = _ref.defaultCallingCode,
24505      metadata = _ref.metadata,
24506      onNationalSignificantNumberChange = _ref.onNationalSignificantNumberChange;
24507    _classCallCheck(this, AsYouTypeParser);
24508    this.defaultCountry = defaultCountry;
24509    this.defaultCallingCode = defaultCallingCode;
24510    this.metadata = metadata;
24511    this.onNationalSignificantNumberChange = onNationalSignificantNumberChange;
24512  }
24513  return _createClass(AsYouTypeParser, [{
24514    key: "input",
24515    value: function input(text, state) {
24516      var _extractFormattedDigi = extractFormattedDigitsAndPlus(text),
24517        _extractFormattedDigi2 = _slicedToArray(_extractFormattedDigi, 2),
24518        formattedDigits = _extractFormattedDigi2[0],
24519        hasPlus = _extractFormattedDigi2[1];
24520      var digits = (0,_helpers_parseDigits_js__WEBPACK_IMPORTED_MODULE_4__["default"])(formattedDigits);
24521      // Checks for a special case: just a leading `+` has been entered.
24522      var justLeadingPlus;
24523      if (hasPlus) {
24524        if (!state.digits) {
24525          state.startInternationalNumber(undefined, undefined);
24526          if (!digits) {
24527            justLeadingPlus = true;
24528          }
24529        }
24530      }
24531      if (digits) {
24532        this.inputDigits(digits, state);
24533      }
24534      return {
24535        digits: digits,
24536        justLeadingPlus: justLeadingPlus
24537      };
24538    }
24539
24540    /**
24541     * Inputs "next" phone number digits.
24542     * @param  {string} digits
24543     * @return {string} [formattedNumber] Formatted national phone number (if it can be formatted at this stage). Returning `undefined` means "don't format the national phone number at this stage".
24544     */
24545  }, {
24546    key: "inputDigits",
24547    value: function inputDigits(nextDigits, state) {
24548      var digits = state.digits;
24549      var hasReceivedThreeLeadingDigits = digits.length < 3 && digits.length + nextDigits.length >= 3;
24550
24551      // Append phone number digits.
24552      state.appendDigits(nextDigits);
24553
24554      // Attempt to extract IDD prefix:
24555      // Some users input their phone number in international format,
24556      // but in an "out-of-country" dialing format instead of using the leading `+`.
24557      // https://github.com/catamphetamine/libphonenumber-js/issues/185
24558      // Detect such numbers as soon as there're at least 3 digits.
24559      // Google's library attempts to extract IDD prefix at 3 digits,
24560      // so this library just copies that behavior.
24561      // I guess that's because the most commot IDD prefixes are
24562      // `00` (Europe) and `011` (US).
24563      // There exist really long IDD prefixes too:
24564      // for example, in Australia the default IDD prefix is `0011`,
24565      // and it could even be as long as `14880011`.
24566      // An IDD prefix is extracted here, and then every time when
24567      // there's a new digit and the number couldn't be formatted.
24568      if (hasReceivedThreeLeadingDigits) {
24569        this.extractIddPrefix(state);
24570      }
24571      if (this.isWaitingForCountryCallingCode(state)) {
24572        if (!this.extractCountryCallingCode(state)) {
24573          return;
24574        }
24575      } else {
24576        state.appendNationalSignificantNumberDigits(nextDigits);
24577      }
24578
24579      // If a phone number is being input in international format,
24580      // then it's not valid for it to have a national prefix.
24581      // Still, some people incorrectly input such numbers with a national prefix.
24582      // In such cases, only attempt to strip a national prefix if the number becomes too long.
24583      // (but that is done later, not here)
24584      if (!state.international) {
24585        if (!this.hasExtractedNationalSignificantNumber) {
24586          this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {
24587            return state.update(stateUpdate);
24588          });
24589        }
24590      }
24591    }
24592  }, {
24593    key: "isWaitingForCountryCallingCode",
24594    value: function isWaitingForCountryCallingCode(_ref2) {
24595      var international = _ref2.international,
24596        callingCode = _ref2.callingCode;
24597      return international && !callingCode;
24598    }
24599
24600    // Extracts a country calling code from a number
24601    // being entered in internatonal format.
24602  }, {
24603    key: "extractCountryCallingCode",
24604    value: function extractCountryCallingCode(state) {
24605      var _extractCountryCallin = (0,_helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_0__["default"])('+' + state.getDigitsWithoutInternationalPrefix(), state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),
24606        countryCallingCode = _extractCountryCallin.countryCallingCode,
24607        number = _extractCountryCallin.number;
24608      if (countryCallingCode) {
24609        state.setCallingCode(countryCallingCode);
24610        state.update({
24611          nationalSignificantNumber: number
24612        });
24613        return true;
24614      }
24615    }
24616  }, {
24617    key: "reset",
24618    value: function reset(numberingPlan) {
24619      if (numberingPlan) {
24620        this.hasSelectedNumberingPlan = true;
24621        var nationalPrefixForParsing = numberingPlan._nationalPrefixForParsing();
24622        this.couldPossiblyExtractAnotherNationalSignificantNumber = nationalPrefixForParsing && COMPLEX_NATIONAL_PREFIX.test(nationalPrefixForParsing);
24623      } else {
24624        this.hasSelectedNumberingPlan = undefined;
24625        this.couldPossiblyExtractAnotherNationalSignificantNumber = undefined;
24626      }
24627    }
24628
24629    /**
24630     * Extracts a national (significant) number from user input.
24631     * Google's library is different in that it only applies `national_prefix_for_parsing`
24632     * and doesn't apply `national_prefix_transform_rule` after that.
24633     * https://github.com/google/libphonenumber/blob/a3d70b0487875475e6ad659af404943211d26456/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L539
24634     * @return {boolean} [extracted]
24635     */
24636  }, {
24637    key: "extractNationalSignificantNumber",
24638    value: function extractNationalSignificantNumber(nationalDigits, setState) {
24639      if (!this.hasSelectedNumberingPlan) {
24640        return;
24641      }
24642      var _extractNationalNumbe = (0,_helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__["default"])(nationalDigits, this.metadata),
24643        nationalPrefix = _extractNationalNumbe.nationalPrefix,
24644        nationalNumber = _extractNationalNumbe.nationalNumber,
24645        carrierCode = _extractNationalNumbe.carrierCode;
24646      if (nationalNumber === nationalDigits) {
24647        return;
24648      }
24649      this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);
24650      return true;
24651    }
24652
24653    /**
24654     * In Google's code this function is called "attempt to extract longer NDD".
24655     * "Some national prefixes are a substring of others", they say.
24656     * @return {boolean} [result] — Returns `true` if extracting a national prefix produced different results from what they were.
24657     */
24658  }, {
24659    key: "extractAnotherNationalSignificantNumber",
24660    value: function extractAnotherNationalSignificantNumber(nationalDigits, prevNationalSignificantNumber, setState) {
24661      if (!this.hasExtractedNationalSignificantNumber) {
24662        return this.extractNationalSignificantNumber(nationalDigits, setState);
24663      }
24664      if (!this.couldPossiblyExtractAnotherNationalSignificantNumber) {
24665        return;
24666      }
24667      var _extractNationalNumbe2 = (0,_helpers_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_2__["default"])(nationalDigits, this.metadata),
24668        nationalPrefix = _extractNationalNumbe2.nationalPrefix,
24669        nationalNumber = _extractNationalNumbe2.nationalNumber,
24670        carrierCode = _extractNationalNumbe2.carrierCode;
24671      // If a national prefix has been extracted previously,
24672      // then it's always extracted as additional digits are added.
24673      // That's assuming `extractNationalNumberFromPossiblyIncompleteNumber()`
24674      // doesn't do anything different from what it currently does.
24675      // So, just in case, here's this check, though it doesn't occur.
24676      /* istanbul ignore if */
24677      if (nationalNumber === prevNationalSignificantNumber) {
24678        return;
24679      }
24680      this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);
24681      return true;
24682    }
24683  }, {
24684    key: "onExtractedNationalNumber",
24685    value: function onExtractedNationalNumber(nationalPrefix, carrierCode, nationalSignificantNumber, nationalDigits, setState) {
24686      // Tells if the parsed national (significant) number is present as-is in the input string.
24687      // For example, when inputting "0343515551212999" Argentinian mobile number,
24688      // the parsed national (significant) number is "93435551212999".
24689      // There, one can see how it stripped "0" national prefix and prepended a "9",
24690      // because that's how it is instructed to do in Argentina's metadata.
24691      // So in the described example, the parsed national (significant) number is not present
24692      // as-is in the input string. Instead, it's "modified" in the input string.
24693      // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule
24694      var nationalSignificantNumberIsModified = false;
24695
24696      // In some countries, a phone number could have a prefix that is not a "national prefix"
24697      // but rather some other type of "utility" prefix.
24698      // For example, when calling within Australia, one could prepend `1831` prefix to hide
24699      // caller's phone number.
24700      // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule
24701      var prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;
24702
24703      // `nationalSignificantNumber` could be empty. In that case, `.lastIndexOf()` still works correctly.
24704      var nationalSignificantNumberIndex = nationalDigits.lastIndexOf(nationalSignificantNumber);
24705
24706      // If the parsed national (significant) number is the last substring of the `nationalDigits`,
24707      // then it means that it's present as-is in the input string.
24708      // In any other case, the parsed national (significant) number is "modified" in the input string.
24709      if (nationalSignificantNumberIndex < 0 || nationalSignificantNumberIndex !== nationalDigits.length - nationalSignificantNumber.length) {
24710        nationalSignificantNumberIsModified = true;
24711      } else {
24712        var prefixBeforeNationalNumber = nationalDigits.slice(0, nationalSignificantNumberIndex);
24713        // When national (significant) number is equal to the `nationalDigits`,
24714        // this `onExtractedNationalNumber()` function simply doesn't get called.
24715        // This means that at this point, `prefixBeforeNationalNumber` is always non-empty.
24716        // Still, added this `if` check just to prevent potential silly bugs.
24717        // The `!prefixBeforeNationalNumber` case is not really testable
24718        // so this line is exluded from the code coverage.
24719        /* istanbul ignore if */
24720        if (prefixBeforeNationalNumber) {
24721          if (prefixBeforeNationalNumber !== nationalPrefix) {
24722            prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = prefixBeforeNationalNumber;
24723          }
24724        }
24725      }
24726      setState({
24727        nationalPrefix: nationalPrefix,
24728        carrierCode: carrierCode,
24729        nationalSignificantNumber: nationalSignificantNumber,
24730        nationalSignificantNumberIsModified: nationalSignificantNumberIsModified,
24731        prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix: prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix
24732      });
24733      // `onExtractedNationalNumber()` is only called when
24734      // the national (significant) number actually did change.
24735      this.hasExtractedNationalSignificantNumber = true;
24736      this.onNationalSignificantNumberChange();
24737    }
24738  }, {
24739    key: "reExtractNationalSignificantNumber",
24740    value: function reExtractNationalSignificantNumber(state) {
24741      // Attempt to extract a national prefix.
24742      //
24743      // Some people incorrectly input national prefix
24744      // in an international phone number.
24745      // For example, some people write British phone numbers as `+44(0)...`.
24746      //
24747      // Also, in some rare cases, it is valid for a national prefix
24748      // to be a part of an international phone number.
24749      // For example, mobile phone numbers in Mexico are supposed to be
24750      // dialled internationally using a `1` national prefix,
24751      // so the national prefix will be part of an international number.
24752      //
24753      // Quote from:
24754      // https://www.mexperience.com/dialing-cell-phones-in-mexico/
24755      //
24756      // "Dialing a Mexican cell phone from abroad
24757      // When you are calling a cell phone number in Mexico from outside Mexico,
24758      // it’s necessary to dial an additional “1” after Mexico’s country code
24759      // (which is “52”) and before the area code.
24760      // You also ignore the 045, and simply dial the area code and the
24761      // cell phone’s number.
24762      //
24763      // If you don’t add the “1”, you’ll receive a recorded announcement
24764      // asking you to redial using it.
24765      //
24766      // For example, if you are calling from the USA to a cell phone
24767      // in Mexico City, you would dial +52 – 1 – 55 – 1234 5678.
24768      // (Note that this is different to calling a land line in Mexico City
24769      // from abroad, where the number dialed would be +52 – 55 – 1234 5678)".
24770      //
24771      // Google's demo output:
24772      // https://libphonenumber.appspot.com/phonenumberparser?number=%2b5215512345678&country=MX
24773      //
24774      if (this.extractAnotherNationalSignificantNumber(state.getNationalDigits(), state.nationalSignificantNumber, function (stateUpdate) {
24775        return state.update(stateUpdate);
24776      })) {
24777        return true;
24778      }
24779      // If no format matches the phone number, then it could be
24780      // "a really long IDD" (quote from a comment in Google's library).
24781      // An IDD prefix is first extracted when the user has entered at least 3 digits,
24782      // and then here — every time when there's a new digit and the number
24783      // couldn't be formatted.
24784      // For example, in Australia the default IDD prefix is `0011`,
24785      // and it could even be as long as `14880011`.
24786      //
24787      // Could also check `!hasReceivedThreeLeadingDigits` here
24788      // to filter out the case when this check duplicates the one
24789      // already performed when there're 3 leading digits,
24790      // but it's not a big deal, and in most cases there
24791      // will be a suitable `format` when there're 3 leading digits.
24792      //
24793      if (this.extractIddPrefix(state)) {
24794        this.extractCallingCodeAndNationalSignificantNumber(state);
24795        return true;
24796      }
24797      // Google's AsYouType formatter supports sort of an "autocorrection" feature
24798      // when it "autocorrects" numbers that have been input for a country
24799      // with that country's calling code.
24800      // Such "autocorrection" feature looks weird, but different people have been requesting it:
24801      // https://github.com/catamphetamine/libphonenumber-js/issues/376
24802      // https://github.com/catamphetamine/libphonenumber-js/issues/375
24803      // https://github.com/catamphetamine/libphonenumber-js/issues/316
24804      if (this.fixMissingPlus(state)) {
24805        this.extractCallingCodeAndNationalSignificantNumber(state);
24806        return true;
24807      }
24808    }
24809  }, {
24810    key: "extractIddPrefix",
24811    value: function extractIddPrefix(state) {
24812      // An IDD prefix can't be present in a number written with a `+`.
24813      // Also, don't re-extract an IDD prefix if has already been extracted.
24814      var international = state.international,
24815        IDDPrefix = state.IDDPrefix,
24816        digits = state.digits,
24817        nationalSignificantNumber = state.nationalSignificantNumber;
24818      if (international || IDDPrefix) {
24819        return;
24820      }
24821      // Some users input their phone number in "out-of-country"
24822      // dialing format instead of using the leading `+`.
24823      // https://github.com/catamphetamine/libphonenumber-js/issues/185
24824      // Detect such numbers.
24825      var numberWithoutIDD = (0,_helpers_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__["default"])(digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata);
24826      if (numberWithoutIDD !== undefined && numberWithoutIDD !== digits) {
24827        // If an IDD prefix was stripped then convert the IDD-prefixed number
24828        // to international number for subsequent parsing.
24829        state.update({
24830          IDDPrefix: digits.slice(0, digits.length - numberWithoutIDD.length)
24831        });
24832        this.startInternationalNumber(state, {
24833          country: undefined,
24834          callingCode: undefined
24835        });
24836        return true;
24837      }
24838    }
24839  }, {
24840    key: "fixMissingPlus",
24841    value: function fixMissingPlus(state) {
24842      if (!state.international) {
24843        var _extractCountryCallin2 = (0,_helpers_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.digits, state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),
24844          newCallingCode = _extractCountryCallin2.countryCallingCode;
24845        if (newCallingCode) {
24846          state.update({
24847            missingPlus: true
24848          });
24849          this.startInternationalNumber(state, {
24850            country: state.country,
24851            callingCode: newCallingCode
24852          });
24853          return true;
24854        }
24855      }
24856    }
24857  }, {
24858    key: "startInternationalNumber",
24859    value: function startInternationalNumber(state, _ref3) {
24860      var country = _ref3.country,
24861        callingCode = _ref3.callingCode;
24862      state.startInternationalNumber(country, callingCode);
24863      // If a national (significant) number has been extracted before, reset it.
24864      if (state.nationalSignificantNumber) {
24865        state.resetNationalSignificantNumber();
24866        this.onNationalSignificantNumberChange();
24867        this.hasExtractedNationalSignificantNumber = undefined;
24868      }
24869    }
24870  }, {
24871    key: "extractCallingCodeAndNationalSignificantNumber",
24872    value: function extractCallingCodeAndNationalSignificantNumber(state) {
24873      if (this.extractCountryCallingCode(state)) {
24874        // `this.extractCallingCode()` is currently called when the number
24875        // couldn't be formatted during the standard procedure.
24876        // Normally, the national prefix would be re-extracted
24877        // for an international number if such number couldn't be formatted,
24878        // but since it's already not able to be formatted,
24879        // there won't be yet another retry, so also extract national prefix here.
24880        this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {
24881          return state.update(stateUpdate);
24882        });
24883      }
24884    }
24885  }]);
24886}();
24887/**
24888 * Extracts formatted phone number from text (if there's any).
24889 * @param  {string} text
24890 * @return {string} [formattedPhoneNumber]
24891 */
24892
24893function extractFormattedPhoneNumber(text) {
24894  // Attempt to extract a possible number from the string passed in.
24895  var startsAt = text.search(VALID_FORMATTED_PHONE_NUMBER_PART);
24896  if (startsAt < 0) {
24897    return;
24898  }
24899  // Trim everything to the left of the phone number.
24900  text = text.slice(startsAt);
24901  // Trim the `+`.
24902  var hasPlus;
24903  if (text[0] === '+') {
24904    hasPlus = true;
24905    text = text.slice('+'.length);
24906  }
24907  // Trim everything to the right of the phone number.
24908  text = text.replace(AFTER_PHONE_NUMBER_DIGITS_END_PATTERN, '');
24909  // Re-add the previously trimmed `+`.
24910  if (hasPlus) {
24911    text = '+' + text;
24912  }
24913  return text;
24914}
24915
24916/**
24917 * Extracts formatted phone number digits (and a `+`) from text (if there're any).
24918 * @param  {string} text
24919 * @return {any[]}
24920 */
24921function _extractFormattedDigitsAndPlus(text) {
24922  // Extract a formatted phone number part from text.
24923  var extractedNumber = extractFormattedPhoneNumber(text) || '';
24924  // Trim a `+`.
24925  if (extractedNumber[0] === '+') {
24926    return [extractedNumber.slice('+'.length), true];
24927  }
24928  return [extractedNumber];
24929}
24930
24931/**
24932 * Extracts formatted phone number digits (and a `+`) from text (if there're any).
24933 * @param  {string} text
24934 * @return {any[]}
24935 */
24936function extractFormattedDigitsAndPlus(text) {
24937  var _extractFormattedDigi3 = _extractFormattedDigitsAndPlus(text),
24938    _extractFormattedDigi4 = _slicedToArray(_extractFormattedDigi3, 2),
24939    formattedDigits = _extractFormattedDigi4[0],
24940    hasPlus = _extractFormattedDigi4[1];
24941  // If the extracted phone number part
24942  // can possibly be a part of some valid phone number
24943  // then parse phone number characters from a formatted phone number.
24944  if (!VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN.test(formattedDigits)) {
24945    formattedDigits = '';
24946  }
24947  return [formattedDigits, hasPlus];
24948}
24949//# sourceMappingURL=AsYouTypeParser.js.map
24950
24951/***/ }),
24952
vendor: 9,303 bytes, lines 24953-25100
24953/***/ "../node_modules/libphonenumber-js/es6/AsYouTypeState.js":
24954/*!***************************************************************!*\
24955  !*** ../node_modules/libphonenumber-js/es6/AsYouTypeState.js ***!
24956  \***************************************************************/
24957/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
24958
24959"use strict";
24960__webpack_require__.r(__webpack_exports__);
24961/* harmony export */ __webpack_require__.d(__webpack_exports__, {
24962/* harmony export */   "default": function() { return /* binding */ AsYouTypeState; }
24963/* harmony export */ });
24964function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
24965function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
24966function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
24967function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
24968function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
24969function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
24970// This "state" object simply holds the state of the "AsYouType" parser:
24971//
24972// * `country?: string` — The exact country of the phone number, if it could be determined.
24973//                        When inputting a phone number in "international" format, it will derive the `country` from "country calling code" and the phone number digits.
24974//                        When inputting a phone number in "national" format, it will derive the `country` from `defaultCountry` that was specified when creating the `AsYouType` formatter.
24975//                        Sidenote: If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` flag was `true`, then for "non-geographic phone numbers" `state.country` would've been "001".
24976// * `callingCode?: string` — "Country calling code" that has been extracted from the input phone number.
24977//                        When inputting a phone number in "international" format, it will extract the "country calling code" from the digits that follow the "+" character.
24978//                        When inputting a phone number in "national" format, `callingCode` will be `undefined`.
24979//                        Sidenote: `state.callingCode` is therefore independent from `state.country` and there could be situations when `state.country` is defined by `state.callingCode` is not — that would be when inputting a phone number not in "international" format.
24980// * `digits: string` — Phone number digits that have been input so far, including the "+" character, if present. In case of inputting non-arabic digits, those will be converted to arabic ones.
24981// * `international: boolean` — Whether the phone number is being input in "international" format, i.e. with a "+" character.
24982// * `missingPlus: boolean` — Whether it's a phone number in "international" format that is missing the leading "+" character for some reason — apparently, Google thinks that it's a common mistake when inputting a phone number.
24983// * `IDDPrefix?: string` — An "IDD prefix", when the phone number is being input in an "out-of-country dialing" format. https://wikitravel.org/en/International_dialling_prefix
24984// * `carrierCode?: string` — A "carrier code", if the phone number contains it. Normally, those can only be present in Colombia or Brazil, and only when calling from mobile phones to fixed-line numbers.
24985// * `nationalPrefix?: string` — "National prefix", if present in the phone number input.
24986// * `nationalSignificantNumber?: string` — National (significant) number digits that have been input so far.
24987// * `nationalSignificantNumberIsModified: boolean` — Tells if the parsed national (significant) number is present as-is in the input string. For example, when inputting "0343515551212999" Argentinian mobile number, the parsed national (significant) number is "93435551212999". There, one can see how it stripped "0" national prefix and prepended a "9", because that's how it is instructed to do in Argentina's metadata. So in the described example, the parsed national (significant) number is not present as-is in the input string. Instead, it's "modified" in the input string. https://gitlab.com/caamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule
24988// * `prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix?: string` — In some countries, a phone number could have a prefix that is not a "national prefix" but rather some other type of "utility" prefix.
24989//                                                                             For example, when calling within Australia, one could prepend `1831` prefix to hide caller's phone number.
24990//                                                                             https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule
24991//
24992var AsYouTypeState = /*#__PURE__*/function () {
24993  function AsYouTypeState(_ref) {
24994    var onCountryChange = _ref.onCountryChange,
24995      onCallingCodeChange = _ref.onCallingCodeChange;
24996    _classCallCheck(this, AsYouTypeState);
24997    this.onCountryChange = onCountryChange;
24998    this.onCallingCodeChange = onCallingCodeChange;
24999  }
25000  return _createClass(AsYouTypeState, [{
25001    key: "reset",
25002    value: function reset(_ref2) {
25003      var country = _ref2.country,
25004        callingCode = _ref2.callingCode;
25005      this.international = false;
25006      this.missingPlus = false;
25007      this.IDDPrefix = undefined;
25008      this.callingCode = undefined;
25009      this.digits = '';
25010      this.resetNationalSignificantNumber();
25011      this.initCountryAndCallingCode(country, callingCode);
25012    }
25013  }, {
25014    key: "resetNationalSignificantNumber",
25015    value: function resetNationalSignificantNumber() {
25016      this.nationalSignificantNumber = this.getNationalDigits();
25017      this.nationalSignificantNumberIsModified = false;
25018      this.nationalPrefix = undefined;
25019      this.carrierCode = undefined;
25020      this.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = undefined;
25021    }
25022  }, {
25023    key: "update",
25024    value: function update(properties) {
25025      for (var _i = 0, _Object$keys = Object.keys(properties); _i < _Object$keys.length; _i++) {
25026        var key = _Object$keys[_i];
25027        this[key] = properties[key];
25028      }
25029    }
25030  }, {
25031    key: "initCountryAndCallingCode",
25032    value: function initCountryAndCallingCode(country, callingCode) {
25033      this.setCountry(country);
25034      this.setCallingCode(callingCode);
25035    }
25036  }, {
25037    key: "setCountry",
25038    value: function setCountry(country) {
25039      this.country = country;
25040      this.onCountryChange(country);
25041    }
25042  }, {
25043    key: "setCallingCode",
25044    value: function setCallingCode(callingCode) {
25045      this.callingCode = callingCode;
25046      this.onCallingCodeChange(callingCode, this.country);
25047    }
25048  }, {
25049    key: "startInternationalNumber",
25050    value: function startInternationalNumber(country, callingCode) {
25051      // Prepend the `+` to parsed input.
25052      this.international = true;
25053      // If a default country was set then reset it
25054      // because an explicitly international phone
25055      // number is being entered.
25056      this.initCountryAndCallingCode(country, callingCode);
25057    }
25058  }, {
25059    key: "appendDigits",
25060    value: function appendDigits(nextDigits) {
25061      this.digits += nextDigits;
25062    }
25063  }, {
25064    key: "appendNationalSignificantNumberDigits",
25065    value: function appendNationalSignificantNumberDigits(nextDigits) {
25066      this.nationalSignificantNumber += nextDigits;
25067    }
25068
25069    /**
25070     * Returns the part of `this.digits` that corresponds to the national number.
25071     * Basically, all digits that have been input by the user, except for the
25072     * international prefix and the country calling code part
25073     * (if the number is an international one).
25074     * @return {string}
25075     */
25076  }, {
25077    key: "getNationalDigits",
25078    value: function getNationalDigits() {
25079      if (this.international) {
25080        return this.digits.slice((this.IDDPrefix ? this.IDDPrefix.length : 0) + (this.callingCode ? this.callingCode.length : 0));
25081      }
25082      return this.digits;
25083    }
25084  }, {
25085    key: "getDigitsWithoutInternationalPrefix",
25086    value: function getDigitsWithoutInternationalPrefix() {
25087      if (this.international) {
25088        if (this.IDDPrefix) {
25089          return this.digits.slice(this.IDDPrefix.length);
25090        }
25091      }
25092      return this.digits;
25093    }
25094  }]);
25095}();
25096
25097//# sourceMappingURL=AsYouTypeState.js.map
25098
25099/***/ }),
25100
vendor: 11,477 bytes, lines 25101-25322
25101/***/ "../node_modules/libphonenumber-js/es6/PhoneNumber.js":
25102/*!************************************************************!*\
25103  !*** ../node_modules/libphonenumber-js/es6/PhoneNumber.js ***!
25104  \************************************************************/
25105/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25106
25107"use strict";
25108__webpack_require__.r(__webpack_exports__);
25109/* harmony export */ __webpack_require__.d(__webpack_exports__, {
25110/* harmony export */   "default": function() { return /* binding */ PhoneNumber; }
25111/* harmony export */ });
25112/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
25113/* harmony import */ var _isPossible_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isPossible.js */ "../node_modules/libphonenumber-js/es6/isPossible.js");
25114/* harmony import */ var _isValid_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isValid.js */ "../node_modules/libphonenumber-js/es6/isValid.js");
25115/* harmony import */ var _helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/getNumberType.js */ "../node_modules/libphonenumber-js/es6/helpers/getNumberType.js");
25116/* harmony import */ var _helpers_getPossibleCountriesForNumber_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/getPossibleCountriesForNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js");
25117/* harmony import */ var _helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers/extractCountryCallingCode.js */ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js");
25118/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/isObject.js */ "../node_modules/libphonenumber-js/es6/helpers/isObject.js");
25119/* harmony import */ var _format_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./format.js */ "../node_modules/libphonenumber-js/es6/format.js");
25120function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
25121function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
25122function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
25123function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
25124function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
25125function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
25126function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
25127function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
25128function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
25129
25130
25131
25132
25133
25134
25135
25136
25137var USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;
25138var PhoneNumber = /*#__PURE__*/function () {
25139  /**
25140   * @param  {string} countryOrCountryCallingCode
25141   * @param  {string} nationalNumber
25142   * @param  {object} metadata — Metadata JSON
25143   * @return {PhoneNumber}
25144   */
25145  function PhoneNumber(countryOrCountryCallingCode, nationalNumber, metadata) {
25146    _classCallCheck(this, PhoneNumber);
25147    // Validate `countryOrCountryCallingCode` argument.
25148    if (!countryOrCountryCallingCode) {
25149      throw new TypeError('First argument is required');
25150    }
25151    if (typeof countryOrCountryCallingCode !== 'string') {
25152      throw new TypeError('First argument must be a string');
25153    }
25154
25155    // In case of public API use: `constructor(number, metadata)`.
25156    // Transform the arguments from `constructor(number, metadata)` to
25157    // `constructor(countryOrCountryCallingCode, nationalNumber, metadata)`.
25158    if (countryOrCountryCallingCode[0] === '+' && !nationalNumber) {
25159      throw new TypeError('`metadata` argument not passed');
25160    }
25161    if ((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__["default"])(nationalNumber) && (0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_6__["default"])(nationalNumber.countries)) {
25162      metadata = nationalNumber;
25163      var e164Number = countryOrCountryCallingCode;
25164      if (!E164_NUMBER_REGEXP.test(e164Number)) {
25165        throw new Error('Invalid `number` argument passed: must consist of a "+" followed by digits');
25166      }
25167      var _extractCountryCallin = (0,_helpers_extractCountryCallingCode_js__WEBPACK_IMPORTED_MODULE_5__["default"])(e164Number, undefined, undefined, undefined, metadata),
25168        _countryCallingCode = _extractCountryCallin.countryCallingCode,
25169        number = _extractCountryCallin.number;
25170      nationalNumber = number;
25171      countryOrCountryCallingCode = _countryCallingCode;
25172      if (!nationalNumber) {
25173        throw new Error('Invalid `number` argument passed: too short');
25174      }
25175    }
25176
25177    // Validate `nationalNumber` argument.
25178    if (!nationalNumber) {
25179      throw new TypeError('`nationalNumber` argument is required');
25180    }
25181    if (typeof nationalNumber !== 'string') {
25182      throw new TypeError('`nationalNumber` argument must be a string');
25183    }
25184
25185    // Validate `metadata` argument.
25186    (0,_metadata_js__WEBPACK_IMPORTED_MODULE_0__.validateMetadata)(metadata);
25187
25188    // Initialize properties.
25189    var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),
25190      country = _getCountryAndCountry.country,
25191      countryCallingCode = _getCountryAndCountry.countryCallingCode;
25192    this.country = country;
25193    this.countryCallingCode = countryCallingCode;
25194    this.nationalNumber = nationalNumber;
25195    this.number = '+' + this.countryCallingCode + this.nationalNumber;
25196    // Exclude `metadata` property output from `PhoneNumber.toString()`
25197    // so that it doesn't clutter the console output of Node.js.
25198    // Previously, when Node.js did `console.log(new PhoneNumber(...))`,
25199    // it would output the whole internal structure of the `metadata` object.
25200    this.getMetadata = function () {
25201      return metadata;
25202    };
25203  }
25204  return _createClass(PhoneNumber, [{
25205    key: "setExt",
25206    value: function setExt(ext) {
25207      this.ext = ext;
25208    }
25209  }, {
25210    key: "getPossibleCountries",
25211    value: function getPossibleCountries() {
25212      if (this.country) {
25213        return [this.country];
25214      }
25215      return (0,_helpers_getPossibleCountriesForNumber_js__WEBPACK_IMPORTED_MODULE_4__["default"])(this.countryCallingCode, this.nationalNumber, this.getMetadata());
25216    }
25217  }, {
25218    key: "isPossible",
25219    value: function isPossible() {
25220      return (0,_isPossible_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this, {
25221        v2: true
25222      }, this.getMetadata());
25223    }
25224  }, {
25225    key: "isValid",
25226    value: function isValid() {
25227      return (0,_isValid_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this, {
25228        v2: true
25229      }, this.getMetadata());
25230    }
25231  }, {
25232    key: "isNonGeographic",
25233    value: function isNonGeographic() {
25234      var metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](this.getMetadata());
25235      return metadata.isNonGeographicCallingCode(this.countryCallingCode);
25236    }
25237  }, {
25238    key: "isEqual",
25239    value: function isEqual(phoneNumber) {
25240      return this.number === phoneNumber.number && this.ext === phoneNumber.ext;
25241    }
25242
25243    // This function was originally meant to be an equivalent for `validatePhoneNumberLength()`,
25244    // but later it was found out that it doesn't include the possible `TOO_SHORT` result
25245    // returned from `parsePhoneNumberWithError()` in the original `validatePhoneNumberLength()`,
25246    // so eventually I simply commented out this method from the `PhoneNumber` class
25247    // and just left the `validatePhoneNumberLength()` function, even though that one would require
25248    // and additional step to also validate the actual country / calling code of the phone number.
25249    // validateLength() {
25250    // 	const metadata = new Metadata(this.getMetadata())
25251    // 	metadata.selectNumberingPlan(this.countryCallingCode)
25252    // 	const result = checkNumberLength(this.nationalNumber, metadata)
25253    // 	if (result !== 'IS_POSSIBLE') {
25254    // 		return result
25255    // 	}
25256    // }
25257  }, {
25258    key: "getType",
25259    value: function getType() {
25260      return (0,_helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_3__["default"])(this, {
25261        v2: true
25262      }, this.getMetadata());
25263    }
25264  }, {
25265    key: "format",
25266    value: function format(_format, options) {
25267      return (0,_format_js__WEBPACK_IMPORTED_MODULE_7__["default"])(this, _format, options ? _objectSpread(_objectSpread({}, options), {}, {
25268        v2: true
25269      }) : {
25270        v2: true
25271      }, this.getMetadata());
25272    }
25273  }, {
25274    key: "formatNational",
25275    value: function formatNational(options) {
25276      return this.format('NATIONAL', options);
25277    }
25278  }, {
25279    key: "formatInternational",
25280    value: function formatInternational(options) {
25281      return this.format('INTERNATIONAL', options);
25282    }
25283  }, {
25284    key: "getURI",
25285    value: function getURI(options) {
25286      return this.format('RFC3966', options);
25287    }
25288  }]);
25289}();
25290
25291var isCountryCode = function isCountryCode(value) {
25292  return /^[A-Z]{2}$/.test(value);
25293};
25294function getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {
25295  var country;
25296  var countryCallingCode;
25297  var metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadataJson);
25298  // If country code is passed then derive `countryCallingCode` from it.
25299  // Also store the country code as `.country`.
25300  if (isCountryCode(countryOrCountryCallingCode)) {
25301    country = countryOrCountryCallingCode;
25302    metadata.selectNumberingPlan(country);
25303    countryCallingCode = metadata.countryCallingCode();
25304  } else {
25305    countryCallingCode = countryOrCountryCallingCode;
25306    /* istanbul ignore if */
25307    if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {
25308      if (metadata.isNonGeographicCallingCode(countryCallingCode)) {
25309        country = '001';
25310      }
25311    }
25312  }
25313  return {
25314    country: country,
25315    countryCallingCode: countryCallingCode
25316  };
25317}
25318var E164_NUMBER_REGEXP = /^\+\d+$/;
25319//# sourceMappingURL=PhoneNumber.js.map
25320
25321/***/ }),
25322
vendor: 2,572 bytes, lines 25323-25373
25323/***/ "../node_modules/libphonenumber-js/es6/constants.js":
25324/*!**********************************************************!*\
25325  !*** ../node_modules/libphonenumber-js/es6/constants.js ***!
25326  \**********************************************************/
25327/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25328
25329"use strict";
25330__webpack_require__.r(__webpack_exports__);
25331/* harmony export */ __webpack_require__.d(__webpack_exports__, {
25332/* harmony export */   MAX_LENGTH_COUNTRY_CODE: function() { return /* binding */ MAX_LENGTH_COUNTRY_CODE; },
25333/* harmony export */   MAX_LENGTH_FOR_NSN: function() { return /* binding */ MAX_LENGTH_FOR_NSN; },
25334/* harmony export */   MIN_LENGTH_FOR_NSN: function() { return /* binding */ MIN_LENGTH_FOR_NSN; },
25335/* harmony export */   PLUS_CHARS: function() { return /* binding */ PLUS_CHARS; },
25336/* harmony export */   VALID_DIGITS: function() { return /* binding */ VALID_DIGITS; },
25337/* harmony export */   VALID_PUNCTUATION: function() { return /* binding */ VALID_PUNCTUATION; },
25338/* harmony export */   WHITESPACE: function() { return /* binding */ WHITESPACE; }
25339/* harmony export */ });
25340// The minimum length of the national significant number.
25341var MIN_LENGTH_FOR_NSN = 2;
25342
25343// The ITU says the maximum length should be 15,
25344// but one can find longer numbers in Germany.
25345var MAX_LENGTH_FOR_NSN = 17;
25346
25347// The maximum length of the country calling code.
25348var MAX_LENGTH_COUNTRY_CODE = 3;
25349
25350// Digits accepted in phone numbers
25351// (ascii, fullwidth, arabic-indic, and eastern arabic digits).
25352var VALID_DIGITS = "0-9\uFF10-\uFF19\u0660-\u0669\u06F0-\u06F9";
25353
25354// `DASHES` will be right after the opening square bracket of the "character class"
25355var DASHES = "-\u2010-\u2015\u2212\u30FC\uFF0D";
25356var SLASHES = "\uFF0F/";
25357var DOTS = "\uFF0E.";
25358var WHITESPACE = " \xA0\xAD\u200B\u2060\u3000";
25359var BRACKETS = "()\uFF08\uFF09\uFF3B\uFF3D\\[\\]";
25360// export const OPENING_BRACKETS = '(\uFF08\uFF3B\\\['
25361var TILDES = "~\u2053\u223C\uFF5E";
25362
25363// Regular expression of acceptable punctuation found in phone numbers. This
25364// excludes punctuation found as a leading character only. This consists of dash
25365// characters, white space characters, full stops, slashes, square brackets,
25366// parentheses and tildes. Full-width variants are also present.
25367var VALID_PUNCTUATION = "".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);
25368var PLUS_CHARS = "+\uFF0B";
25369// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')
25370//# sourceMappingURL=constants.js.map
25371
25372/***/ }),
25373
vendor: 10,366 bytes, lines 25374-25586
25374/***/ "../node_modules/libphonenumber-js/es6/format.js":
25375/*!*******************************************************!*\
25376  !*** ../node_modules/libphonenumber-js/es6/format.js ***!
25377  \*******************************************************/
25378/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25379
25380"use strict";
25381__webpack_require__.r(__webpack_exports__);
25382/* harmony export */ __webpack_require__.d(__webpack_exports__, {
25383/* harmony export */   chooseFormatForNumber: function() { return /* binding */ chooseFormatForNumber; },
25384/* harmony export */   "default": function() { return /* binding */ formatNumber; }
25385/* harmony export */ });
25386/* harmony import */ var _helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/matchesEntirely.js */ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js");
25387/* harmony import */ var _helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/formatNationalNumberUsingFormat.js */ "../node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js");
25388/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
25389/* harmony import */ var _helpers_getIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/getIddPrefix.js */ "../node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js");
25390/* harmony import */ var _helpers_RFC3966_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/RFC3966.js */ "../node_modules/libphonenumber-js/es6/helpers/RFC3966.js");
25391// This is a port of Google Android `libphonenumber`'s
25392// `phonenumberutil.js` of December 31th, 2018.
25393//
25394// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js
25395
25396
25397
25398
25399
25400
25401var DEFAULT_OPTIONS = {
25402  formatExtension: function formatExtension(formattedNumber, extension, metadata) {
25403    return "".concat(formattedNumber).concat(metadata.ext()).concat(extension);
25404  }
25405};
25406
25407/**
25408 * Formats a phone number.
25409 *
25410 * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata)
25411 * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata)
25412 *
25413 * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata)
25414 * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata)
25415 *
25416 * @param  {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.
25417 * @param  {string} format
25418 * @param  {object} [options]
25419 * @param  {object} metadata
25420 * @return {string}
25421 */
25422function formatNumber(input, format, options, metadata) {
25423  // Apply default options.
25424  if (options) {
25425    // Using ES6 "rest spread" syntax here didn't work with `babel`/`istanbul`
25426    // for some weird reason: this line of code would cause the code coverage
25427    // to show as not 100%. That's because `babel`/`istanbul`, for some weird reason,
25428    // apparently doesn't know how to properly exclude Babel polyfills from code coverage.
25429    //
25430    // options = { ...DEFAULT_OPTIONS, ...options }
25431    //
25432    options = merge({}, DEFAULT_OPTIONS, options);
25433  } else {
25434    options = DEFAULT_OPTIONS;
25435  }
25436  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_2__["default"](metadata);
25437  if (input.country && input.country !== '001') {
25438    // Validate `input.country`.
25439    if (!metadata.hasCountry(input.country)) {
25440      throw new Error("Unknown country: ".concat(input.country));
25441    }
25442    metadata.selectNumberingPlan(input.country);
25443  } else if (input.countryCallingCode) {
25444    metadata.selectNumberingPlan(input.countryCallingCode);
25445  } else return input.phone || '';
25446  var countryCallingCode = metadata.countryCallingCode();
25447  var nationalNumber = options.v2 ? input.nationalNumber : input.phone;
25448
25449  // This variable should have been declared inside `case`s
25450  // but Babel has a bug and it says "duplicate variable declaration".
25451  var number;
25452  switch (format) {
25453    case 'NATIONAL':
25454      // Legacy argument support.
25455      // (`{ country: ..., phone: '' }`)
25456      if (!nationalNumber) {
25457        return '';
25458      }
25459      number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);
25460      return addExtension(number, input.ext, metadata, options.formatExtension);
25461    case 'INTERNATIONAL':
25462      // Legacy argument support.
25463      // (`{ country: ..., phone: '' }`)
25464      if (!nationalNumber) {
25465        return "+".concat(countryCallingCode);
25466      }
25467      number = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options);
25468      number = "+".concat(countryCallingCode, " ").concat(number);
25469      return addExtension(number, input.ext, metadata, options.formatExtension);
25470    case 'E.164':
25471      // `E.164` doesn't define "phone number extensions".
25472      return "+".concat(countryCallingCode).concat(nationalNumber);
25473    case 'RFC3966':
25474      return (0,_helpers_RFC3966_js__WEBPACK_IMPORTED_MODULE_4__.formatRFC3966)({
25475        number: "+".concat(countryCallingCode).concat(nationalNumber),
25476        ext: input.ext
25477      });
25478
25479    // For reference, here's Google's IDD formatter:
25480    // https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546
25481    // Not saying that this IDD formatter replicates it 1:1, but it seems to work.
25482    // Who would even need to format phone numbers in IDD format anyway?
25483    case 'IDD':
25484      if (!options.fromCountry) {
25485        return;
25486        // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')
25487      }
25488      var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);
25489      return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);
25490    default:
25491      throw new Error("Unknown \"format\" argument passed to \"formatNumber()\": \"".concat(format, "\""));
25492  }
25493}
25494function formatNationalNumber(number, carrierCode, formatAs, metadata, options) {
25495  var format = chooseFormatForNumber(metadata.formats(), number);
25496  if (!format) {
25497    return number;
25498  }
25499  return (0,_helpers_formatNationalNumberUsingFormat_js__WEBPACK_IMPORTED_MODULE_1__["default"])(number, format, {
25500    useInternationalFormat: formatAs === 'INTERNATIONAL',
25501    withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,
25502    carrierCode: carrierCode,
25503    metadata: metadata
25504  });
25505}
25506function chooseFormatForNumber(availableFormats, nationalNumber) {
25507  // Using a `for ... of` loop here didn't work with `babel`/`istanbul`:
25508  // for some weird reason, it showed code coverage less than 100%.
25509  // That's because `babel`/`istanbul`, for some weird reason,
25510  // apparently doesn't know how to properly exclude Babel polyfills from code coverage.
25511  //
25512  // for (const format of availableFormats) { ... }
25513  //
25514  return pickFirstMatchingElement(availableFormats, function (format) {
25515    // Validate leading digits.
25516    // The test case for "else path" could be found by searching for
25517    // "format.leadingDigitsPatterns().length === 0".
25518    if (format.leadingDigitsPatterns().length > 0) {
25519      // The last leading_digits_pattern is used here, as it is the most detailed
25520      var lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1];
25521      // If leading digits don't match then move on to the next phone number format
25522      if (nationalNumber.search(lastLeadingDigitsPattern) !== 0) {
25523        return false;
25524      }
25525    }
25526    // Check that the national number matches the phone number format regular expression
25527    return (0,_helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_0__["default"])(nationalNumber, format.pattern());
25528  });
25529}
25530function addExtension(formattedNumber, ext, metadata, formatExtension) {
25531  return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;
25532}
25533function formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {
25534  var fromCountryCallingCode = (0,_metadata_js__WEBPACK_IMPORTED_MODULE_2__.getCountryCallingCode)(fromCountry, metadata.metadata);
25535  // When calling within the same country calling code.
25536  if (fromCountryCallingCode === countryCallingCode) {
25537    var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata);
25538    // For NANPA regions, return the national format for these regions
25539    // but prefix it with the country calling code.
25540    if (countryCallingCode === '1') {
25541      return countryCallingCode + ' ' + formattedNumber;
25542    }
25543    // If regions share a country calling code, the country calling code need
25544    // not be dialled. This also applies when dialling within a region, so this
25545    // if clause covers both these cases. Technically this is the case for
25546    // dialling from La Reunion to other overseas departments of France (French
25547    // Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover
25548    // this edge case for now and for those cases return the version including
25549    // country calling code. Details here:
25550    // http://www.petitfute.com/voyage/225-info-pratiques-reunion
25551    //
25552    return formattedNumber;
25553  }
25554  var iddPrefix = (0,_helpers_getIddPrefix_js__WEBPACK_IMPORTED_MODULE_3__["default"])(fromCountry, undefined, metadata.metadata);
25555  if (iddPrefix) {
25556    return "".concat(iddPrefix, " ").concat(countryCallingCode, " ").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));
25557  }
25558}
25559function merge() {
25560  var i = 1;
25561  for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {
25562    objects[_key] = arguments[_key];
25563  }
25564  while (i < objects.length) {
25565    if (objects[i]) {
25566      for (var key in objects[i]) {
25567        objects[0][key] = objects[i][key];
25568      }
25569    }
25570    i++;
25571  }
25572  return objects[0];
25573}
25574function pickFirstMatchingElement(elements, testFunction) {
25575  var i = 0;
25576  while (i < elements.length) {
25577    if (testFunction(elements[i])) {
25578      return elements[i];
25579    }
25580    i++;
25581  }
25582}
25583//# sourceMappingURL=format.js.map
25584
25585/***/ }),
25586
vendor: 4,585 bytes, lines 25587-25675
25587/***/ "../node_modules/libphonenumber-js/es6/helpers/RFC3966.js":
25588/*!****************************************************************!*\
25589  !*** ../node_modules/libphonenumber-js/es6/helpers/RFC3966.js ***!
25590  \****************************************************************/
25591/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25592
25593"use strict";
25594__webpack_require__.r(__webpack_exports__);
25595/* harmony export */ __webpack_require__.d(__webpack_exports__, {
25596/* harmony export */   formatRFC3966: function() { return /* binding */ formatRFC3966; },
25597/* harmony export */   parseRFC3966: function() { return /* binding */ parseRFC3966; }
25598/* harmony export */ });
25599/* harmony import */ var _isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isViablePhoneNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js");
25600function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
25601function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
25602function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
25603function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
25604function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
25605function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
25606function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
25607
25608
25609// https://www.ietf.org/rfc/rfc3966.txt
25610
25611/**
25612 * @param  {string} text - Phone URI (RFC 3966).
25613 * @return {object} `{ ?number, ?ext }`.
25614 */
25615function parseRFC3966(text) {
25616  var number;
25617  var ext;
25618
25619  // Replace "tel:" with "tel=" for parsing convenience.
25620  text = text.replace(/^tel:/, 'tel=');
25621  for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {
25622    var part = _step.value;
25623    var _part$split = part.split('='),
25624      _part$split2 = _slicedToArray(_part$split, 2),
25625      name = _part$split2[0],
25626      value = _part$split2[1];
25627    switch (name) {
25628      case 'tel':
25629        number = value;
25630        break;
25631      case 'ext':
25632        ext = value;
25633        break;
25634      case 'phone-context':
25635        // Only "country contexts" are supported.
25636        // "Domain contexts" are ignored.
25637        if (value[0] === '+') {
25638          number = value + number;
25639        }
25640        break;
25641    }
25642  }
25643
25644  // If the phone number is not viable, then abort.
25645  if (!(0,_isViablePhoneNumber_js__WEBPACK_IMPORTED_MODULE_0__["default"])(number)) {
25646    return {};
25647  }
25648  var result = {
25649    number: number
25650  };
25651  if (ext) {
25652    result.ext = ext;
25653  }
25654  return result;
25655}
25656
25657/**
25658 * @param  {object} - `{ ?number, ?extension }`.
25659 * @return {string} Phone URI (RFC 3966).
25660 */
25661function formatRFC3966(_ref) {
25662  var number = _ref.number,
25663    ext = _ref.ext;
25664  if (!number) {
25665    return '';
25666  }
25667  if (number[0] !== '+') {
25668    throw new Error("\"formatRFC3966()\" expects \"number\" to be in E.164 format.");
25669  }
25670  return "tel:".concat(number).concat(ext ? ';ext=' + ext : '');
25671}
25672//# sourceMappingURL=RFC3966.js.map
25673
25674/***/ }),
25675
vendor: 2,927 bytes, lines 25676-25726
25676/***/ "../node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js":
25677/*!*****************************************************************************************!*\
25678  !*** ../node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js ***!
25679  \*****************************************************************************************/
25680/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25681
25682"use strict";
25683__webpack_require__.r(__webpack_exports__);
25684/* harmony export */ __webpack_require__.d(__webpack_exports__, {
25685/* harmony export */   "default": function() { return /* binding */ applyInternationalSeparatorStyle; }
25686/* harmony export */ });
25687/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ "../node_modules/libphonenumber-js/es6/constants.js");
25688
25689
25690// Removes brackets and replaces dashes with spaces.
25691//
25692// E.g. "(999) 111-22-33" -> "999 111 22 33"
25693//
25694// For some reason Google's metadata contains `<intlFormat/>`s with brackets and dashes.
25695// Meanwhile, there's no single opinion about using punctuation in international phone numbers.
25696//
25697// For example, Google's `<intlFormat/>` for USA is `+1 213-373-4253`.
25698// And here's a quote from WikiPedia's "North American Numbering Plan" page:
25699// https://en.wikipedia.org/wiki/North_American_Numbering_Plan
25700//
25701// "The country calling code for all countries participating in the NANP is 1.
25702// In international format, an NANP number should be listed as +1 301 555 01 00,
25703// where 301 is an area code (Maryland)."
25704//
25705// I personally prefer the international format without any punctuation.
25706// For example, brackets are remnants of the old age, meaning that the
25707// phone number part in brackets (so called "area code") can be omitted
25708// if dialing within the same "area".
25709// And hyphens were clearly introduced for splitting local numbers into memorizable groups.
25710// For example, remembering "5553535" is difficult but "555-35-35" is much simpler.
25711// Imagine a man taking a bus from home to work and seeing an ad with a phone number.
25712// He has a couple of seconds to memorize that number until it passes by.
25713// If it were spaces instead of hyphens the man wouldn't necessarily get it,
25714// but with hyphens instead of spaces the grouping is more explicit.
25715// I personally think that hyphens introduce visual clutter,
25716// so I prefer replacing them with spaces in international numbers.
25717// In the modern age all output is done on displays where spaces are clearly distinguishable
25718// so hyphens can be safely replaced with spaces without losing any legibility.
25719//
25720function applyInternationalSeparatorStyle(formattedNumber) {
25721  return formattedNumber.replace(new RegExp("[".concat(_constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION, "]+"), 'g'), ' ').trim();
25722}
25723//# sourceMappingURL=applyInternationalSeparatorStyle.js.map
25724
25725/***/ }),
25726
vendor: 6,584 bytes, lines 25727-25855
25727/***/ "../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js":
25728/*!**************************************************************************!*\
25729  !*** ../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js ***!
25730  \**************************************************************************/
25731/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25732
25733"use strict";
25734__webpack_require__.r(__webpack_exports__);
25735/* harmony export */ __webpack_require__.d(__webpack_exports__, {
25736/* harmony export */   checkNumberLengthForType: function() { return /* binding */ checkNumberLengthForType; },
25737/* harmony export */   "default": function() { return /* binding */ checkNumberLength; }
25738/* harmony export */ });
25739/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
25740/* harmony import */ var _mergeArrays_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergeArrays.js */ "../node_modules/libphonenumber-js/es6/helpers/mergeArrays.js");
25741
25742
25743function checkNumberLength(nationalNumber, country, metadata) {
25744  return checkNumberLengthForType(nationalNumber, country, undefined, metadata);
25745}
25746
25747// Checks whether a number is possible for a certain `country` based on the number length.
25748//
25749// This function is not supported by metadata generated with ancient versions of
25750// `libphonenumber-js` (before version `1.0.18`) which didn't include "possible lengths".
25751//
25752// There was also a known issue with `checkNumberLength()` function:
25753// if a number is possible only in a certain `country` among several `countries`
25754// that share the same "country calling code", that function would check
25755// the possibility of the phone number only in the "main" `country` for the "country calling code"
25756// and would not check if it's actually be possible in the speciifc `country`.
25757//
25758// For example, "+1310xxxx" numbers are valid in Canada.
25759// However, they are not possible in the US due to being too short.
25760// Since Canada and the US share the same country calling code — "+1" —
25761// `checkNumberLength()` function used to return not "IS_POSSIBLE" for "+1310xxxx" numbers.
25762//
25763// In such cases, when using "/max" metadata, `isValid()` could output `true`
25764// but at the same time `isPossible()` could output `false`, which was contradictory.
25765//
25766// See https://issuetracker.google.com/issues/335892662 for the discusson in Google's issues.
25767//
25768// The solution suggested by Google was implemented: an optional `country` argument
25769// was added to `checkNumberLength()` function. If present, that `country` will be used
25770// to check phone number length for that specific `country` rather than the "main" country
25771// for the shared "country calling code".
25772//
25773function checkNumberLengthForType(nationalNumber, country, type, metadata) {
25774  // If the exact `country` is specified, it's no necessarily already selected in `metadata`.
25775  // Most likely, in cases when there're multiple countries corresponding to the same
25776  // "country calling code", the "main" country for that "country calling code" will be selected.
25777  if (country) {
25778    metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata.metadata);
25779    metadata.selectNumberingPlan(country);
25780  }
25781  var type_info = metadata.type(type);
25782
25783  // There should always be "<possiblePengths/>" set for every type element.
25784  // This is declared in the XML schema.
25785  // For size efficiency, where a sub-description (e.g. fixed-line)
25786  // has the same "<possiblePengths/>" as the "general description", this is missing,
25787  // so we fall back to the "general description". Where no numbers of the type
25788  // exist at all, there is one possible length (-1) which is guaranteed
25789  // not to match the length of any real phone number.
25790  var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();
25791  // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()
25792
25793  // Metadata before version `1.0.18` didn't contain `possible_lengths`.
25794  if (!possible_lengths) {
25795    return 'IS_POSSIBLE';
25796  }
25797  if (type === 'FIXED_LINE_OR_MOBILE') {
25798    // No such country in metadata.
25799    /* istanbul ignore next */
25800    if (!metadata.type('FIXED_LINE')) {
25801      // The rare case has been encountered where no fixedLine data is available
25802      // (true for some non-geographic entities), so we just check mobile.
25803      return checkNumberLengthForType(nationalNumber, country, 'MOBILE', metadata);
25804    }
25805    var mobile_type = metadata.type('MOBILE');
25806    if (mobile_type) {
25807      // Merge the mobile data in if there was any. "Concat" creates a new
25808      // array, it doesn't edit possible_lengths in place, so we don't need a copy.
25809      // Note that when adding the possible lengths from mobile, we have
25810      // to again check they aren't empty since if they are this indicates
25811      // they are the same as the general desc and should be obtained from there.
25812      possible_lengths = (0,_mergeArrays_js__WEBPACK_IMPORTED_MODULE_1__["default"])(possible_lengths, mobile_type.possibleLengths());
25813      // The current list is sorted; we need to merge in the new list and
25814      // re-sort (duplicates are okay). Sorting isn't so expensive because
25815      // the lists are very small.
25816
25817      // if (local_lengths) {
25818      // 	local_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())
25819      // } else {
25820      // 	local_lengths = mobile_type.possibleLengthsLocal()
25821      // }
25822    }
25823  }
25824  // If the type doesn't exist then return 'INVALID_LENGTH'.
25825  else if (type && !type_info) {
25826    return 'INVALID_LENGTH';
25827  }
25828  var actual_length = nationalNumber.length;
25829
25830  // In `libphonenumber-js` all "local-only" formats are dropped for simplicity.
25831  // // This is safe because there is never an overlap beween the possible lengths
25832  // // and the local-only lengths; this is checked at build time.
25833  // if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)
25834  // {
25835  // 	return 'IS_POSSIBLE_LOCAL_ONLY'
25836  // }
25837
25838  var minimum_length = possible_lengths[0];
25839  if (minimum_length === actual_length) {
25840    return 'IS_POSSIBLE';
25841  }
25842  if (minimum_length > actual_length) {
25843    return 'TOO_SHORT';
25844  }
25845  if (possible_lengths[possible_lengths.length - 1] < actual_length) {
25846    return 'TOO_LONG';
25847  }
25848
25849  // We skip the first element since we've already checked it.
25850  return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';
25851}
25852//# sourceMappingURL=checkNumberLength.js.map
25853
25854/***/ }),
25855
vendor: 6,226 bytes, lines 25856-25965
25856/***/ "../node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js":
25857/*!*****************************************************************************************!*\
25858  !*** ../node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js ***!
25859  \*****************************************************************************************/
25860/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25861
25862"use strict";
25863__webpack_require__.r(__webpack_exports__);
25864/* harmony export */ __webpack_require__.d(__webpack_exports__, {
25865/* harmony export */   "default": function() { return /* binding */ createExtensionPattern; }
25866/* harmony export */ });
25867/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants.js */ "../node_modules/libphonenumber-js/es6/constants.js");
25868
25869
25870// The RFC 3966 format for extensions.
25871var RFC3966_EXTN_PREFIX = ';ext=';
25872
25873/**
25874 * Helper method for constructing regular expressions for parsing. Creates
25875 * an expression that captures up to max_length digits.
25876 * @return {string} RegEx pattern to capture extension digits.
25877 */
25878var getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {
25879  return "([".concat(_constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS, "]{1,").concat(maxLength, "})");
25880};
25881
25882/**
25883 * Helper initialiser method to create the regular-expression pattern to match
25884 * extensions.
25885 * Copy-pasted from Google's `libphonenumber`:
25886 * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766
25887 * @return {string} RegEx pattern to capture extensions.
25888 */
25889function createExtensionPattern(purpose) {
25890  // We cap the maximum length of an extension based on the ambiguity of the way
25891  // the extension is prefixed. As per ITU, the officially allowed length for
25892  // extensions is actually 40, but we don't support this since we haven't seen real
25893  // examples and this introduces many false interpretations as the extension labels
25894  // are not standardized.
25895  /** @type {string} */
25896  var extLimitAfterExplicitLabel = '20';
25897  /** @type {string} */
25898  var extLimitAfterLikelyLabel = '15';
25899  /** @type {string} */
25900  var extLimitAfterAmbiguousChar = '9';
25901  /** @type {string} */
25902  var extLimitWhenNotSure = '6';
25903
25904  /** @type {string} */
25905  var possibleSeparatorsBetweenNumberAndExtLabel = "[ \xA0\\t,]*";
25906  // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.
25907  /** @type {string} */
25908  var possibleCharsAfterExtLabel = "[:\\.\uFF0E]?[ \xA0\\t,-]*";
25909  /** @type {string} */
25910  var optionalExtnSuffix = "#?";
25911
25912  // Here the extension is called out in more explicit way, i.e mentioning it obvious
25913  // patterns like "ext.".
25914  /** @type {string} */
25915  var explicitExtLabels = "(?:e?xt(?:ensi(?:o\u0301?|\xF3))?n?|\uFF45?\uFF58\uFF54\uFF4E?|\u0434\u043E\u0431|anexo)";
25916  // One-character symbols that can be used to indicate an extension, and less
25917  // commonly used or more ambiguous extension labels.
25918  /** @type {string} */
25919  var ambiguousExtLabels = "(?:[x\uFF58#\uFF03~\uFF5E]|int|\uFF49\uFF4E\uFF54)";
25920  // When extension is not separated clearly.
25921  /** @type {string} */
25922  var ambiguousSeparator = "[- ]+";
25923  // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching
25924  // comma as extension label may have it.
25925  /** @type {string} */
25926  var possibleSeparatorsNumberExtLabelNoComma = "[ \xA0\\t]*";
25927  // ",," is commonly used for auto dialling the extension when connected. First
25928  // comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do
25929  // not repeat it here. Semi-colon works in Iphone and Android also to pop up a
25930  // button with the extension number following.
25931  /** @type {string} */
25932  var autoDiallingAndExtLabelsFound = "(?:,{2}|;)";
25933
25934  /** @type {string} */
25935  var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);
25936  /** @type {string} */
25937  var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;
25938  /** @type {string} */
25939  var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;
25940  /** @type {string} */
25941  var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + "#";
25942
25943  /** @type {string} */
25944  var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;
25945  /** @type {string} */
25946  var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + "(?:,)+" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;
25947
25948  // The first regular expression covers RFC 3966 format, where the extension is added
25949  // using ";ext=". The second more generic where extension is mentioned with explicit
25950  // labels like "ext:". In both the above cases we allow more numbers in extension than
25951  // any other extension labels. The third one captures when single character extension
25952  // labels or less commonly used labels are used. In such cases we capture fewer
25953  // extension digits in order to reduce the chance of falsely interpreting two
25954  // numbers beside each other as a number + extension. The fourth one covers the
25955  // special case of American numbers where the extension is written with a hash
25956  // at the end, such as "- 503#". The fifth one is exclusively for extension
25957  // autodialling formats which are used when dialling and in this case we accept longer
25958  // extensions. The last one is more liberal on the number of commas that acts as
25959  // extension labels, so we have a strict cap on the number of digits in such extensions.
25960  return rfcExtn + "|" + explicitExtn + "|" + ambiguousExtn + "|" + americanStyleExtnWithSuffix + "|" + autoDiallingExtn + "|" + onlyCommasExtn;
25961}
25962//# sourceMappingURL=createExtensionPattern.js.map
25963
25964/***/ }),
25965
vendor: 7,691 bytes, lines 25966-26124
25966/***/ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js":
25967/*!**********************************************************************************!*\
25968  !*** ../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js ***!
25969  \**********************************************************************************/
25970/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25971
25972"use strict";
25973__webpack_require__.r(__webpack_exports__);
25974/* harmony export */ __webpack_require__.d(__webpack_exports__, {
25975/* harmony export */   "default": function() { return /* binding */ extractCountryCallingCode; }
25976/* harmony export */ });
25977/* harmony import */ var _stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stripIddPrefix.js */ "../node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js");
25978/* harmony import */ var _extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js */ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js");
25979/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
25980/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constants.js */ "../node_modules/libphonenumber-js/es6/constants.js");
25981
25982
25983
25984
25985
25986/**
25987 * Converts a phone number digits (possibly with a `+`)
25988 * into a calling code and the rest phone number digits.
25989 * The "rest phone number digits" could include
25990 * a national prefix, carrier code, and national
25991 * (significant) number.
25992 * @param  {string} number — Phone number digits (possibly with a `+`).
25993 * @param  {string} [country] — Country.
25994 * @param  {string} [defaultCountry] — Default country.
25995 * @param  {string} [defaultCallingCode] — Default calling code (some phone numbering plans are non-geographic).
25996 * @param  {object} metadata
25997 * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }`
25998 * @example
25999 * // Returns `{ countryCallingCode: "1", number: "2133734253" }`.
26000 * extractCountryCallingCode('2133734253', null, 'US', null, metadata)
26001 * extractCountryCallingCode('2133734253', null, null, '1', metadata)
26002 * extractCountryCallingCode('+12133734253', null, null, null, metadata)
26003 * extractCountryCallingCode('+12133734253', null, 'RU', null, metadata)
26004 */
26005function extractCountryCallingCode(number, country, defaultCountry, defaultCallingCode, metadata) {
26006  if (!number) {
26007    return {};
26008  }
26009  var isNumberWithIddPrefix;
26010
26011  // If this is not an international phone number,
26012  // then either extract an "IDD" prefix, or extract a
26013  // country calling code from a number by autocorrecting it
26014  // by prepending a leading `+` in cases when it starts
26015  // with the country calling code.
26016  // https://wikitravel.org/en/International_dialling_prefix
26017  // https://github.com/catamphetamine/libphonenumber-js/issues/376
26018  if (number[0] !== '+') {
26019    // Convert an "out-of-country" dialing phone number
26020    // to a proper international phone number.
26021    var numberWithoutIDD = (0,_stripIddPrefix_js__WEBPACK_IMPORTED_MODULE_0__["default"])(number, country || defaultCountry, defaultCallingCode, metadata);
26022    // If an IDD prefix was stripped then
26023    // convert the number to international one
26024    // for subsequent parsing.
26025    if (numberWithoutIDD && numberWithoutIDD !== number) {
26026      isNumberWithIddPrefix = true;
26027      number = '+' + numberWithoutIDD;
26028    } else {
26029      // Check to see if the number starts with the country calling code
26030      // for the default country. If so, we remove the country calling code,
26031      // and do some checks on the validity of the number before and after.
26032      // https://github.com/catamphetamine/libphonenumber-js/issues/376
26033      if (country || defaultCountry || defaultCallingCode) {
26034        var _extractCountryCallin = (0,_extractCountryCallingCodeFromInternationalNumberWithoutPlusSign_js__WEBPACK_IMPORTED_MODULE_1__["default"])(number, country, defaultCountry, defaultCallingCode, metadata),
26035          countryCallingCode = _extractCountryCallin.countryCallingCode,
26036          shorterNumber = _extractCountryCallin.number;
26037        if (countryCallingCode) {
26038          return {
26039            countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',
26040            countryCallingCode: countryCallingCode,
26041            number: shorterNumber
26042          };
26043        }
26044      }
26045      return {
26046        // No need to set it to `UNSPECIFIED`. It can be just `undefined`.
26047        // countryCallingCodeSource: 'UNSPECIFIED',
26048        number: number
26049      };
26050    }
26051  }
26052
26053  // `number` can only be international at this point.
26054
26055  // Fast abortion: country codes do not begin with a '0'
26056  if (number[1] === '0') {
26057    return {};
26058  }
26059  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_2__["default"](metadata);
26060
26061  // The thing with country phone codes
26062  // is that they are orthogonal to each other
26063  // i.e. there's no such country phone code A
26064  // for which country phone code B exists
26065  // where B starts with A.
26066  // Therefore, while scanning digits,
26067  // if a valid country code is found,
26068  // that means that it is the country code.
26069  //
26070  var i = 2;
26071  while (i - 1 <= _constants_js__WEBPACK_IMPORTED_MODULE_3__.MAX_LENGTH_COUNTRY_CODE && i <= number.length) {
26072    var _countryCallingCode = number.slice(1, i);
26073    if (metadata.hasCallingCode(_countryCallingCode)) {
26074      metadata.selectNumberingPlan(_countryCallingCode);
26075      return {
26076        countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',
26077        countryCallingCode: _countryCallingCode,
26078        number: number.slice(i)
26079      };
26080    }
26081    i++;
26082  }
26083  return {};
26084}
26085
26086// The possible values for the returned `countryCallingCodeSource` are:
26087//
26088// Copy-pasted from:
26089// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto
26090//
26091// // The source from which the country_code is derived. This is not set in the
26092// // general parsing method, but in the method that parses and keeps raw_input.
26093// // New fields could be added upon request.
26094// enum CountryCodeSource {
26095//  // Default value returned if this is not set, because the phone number was
26096//  // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will
26097//  // return false if this is the case.
26098//  UNSPECIFIED = 0;
26099//
26100//  // The country_code is derived based on a phone number with a leading "+",
26101//  // e.g. the French number "+33 1 42 68 53 00".
26102//  FROM_NUMBER_WITH_PLUS_SIGN = 1;
26103//
26104//  // The country_code is derived based on a phone number with a leading IDD,
26105//  // e.g. the French number "011 33 1 42 68 53 00", as it is dialled from US.
26106//  FROM_NUMBER_WITH_IDD = 5;
26107//
26108//  // The country_code is derived based on a phone number without a leading
26109//  // "+", e.g. the French number "33 1 42 68 53 00" when defaultCountry is
26110//  // supplied as France.
26111//  FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;
26112//
26113//  // The country_code is derived NOT based on the phone number itself, but
26114//  // from the defaultCountry parameter provided in the parsing function by the
26115//  // clients. This happens mostly for numbers written in the national format
26116//  // (without country code). For example, this would be set when parsing the
26117//  // French number "01 42 68 53 00", when defaultCountry is supplied as
26118//  // France.
26119//  FROM_DEFAULT_COUNTRY = 20;
26120// }
26121//# sourceMappingURL=extractCountryCallingCode.js.map
26122
26123/***/ }),
26124
vendor: 4,214 bytes, lines 26125-26189
26125/***/ "../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js":
26126/*!************************************************************************************************************************!*\
26127  !*** ../node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js ***!
26128  \************************************************************************************************************************/
26129/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26130
26131"use strict";
26132__webpack_require__.r(__webpack_exports__);
26133/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26134/* harmony export */   "default": function() { return /* binding */ extractCountryCallingCodeFromInternationalNumberWithoutPlusSign; }
26135/* harmony export */ });
26136/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../getCountryCallingCode.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
26137/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js");
26138/* harmony import */ var _extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./extractNationalNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js");
26139/* harmony import */ var _checkNumberLength_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./checkNumberLength.js */ "../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js");
26140
26141
26142
26143
26144
26145
26146/**
26147 * Sometimes some people incorrectly input international phone numbers
26148 * without the leading `+`. This function corrects such input.
26149 * @param  {string} number — Phone number digits.
26150 * @param  {string} [country] — Exact country of the phone number.
26151 * @param  {string} [defaultCountry]
26152 * @param  {string} [defaultCallingCode]
26153 * @param  {object} metadata
26154 * @return {object} `{ countryCallingCode: string?, number: string }`.
26155 */
26156function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata) {
26157  var countryCallingCode = country || defaultCountry ? (0,_metadata_js__WEBPACK_IMPORTED_MODULE_0__.getCountryCallingCode)(country || defaultCountry, metadata) : defaultCallingCode;
26158  if (number.indexOf(countryCallingCode) === 0) {
26159    metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata);
26160    metadata.selectNumberingPlan(country || defaultCountry, countryCallingCode);
26161    var possibleShorterNumber = number.slice(countryCallingCode.length);
26162    var _extractNationalNumbe = (0,_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__["default"])(possibleShorterNumber, country, metadata),
26163      possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;
26164    var _extractNationalNumbe2 = (0,_extractNationalNumber_js__WEBPACK_IMPORTED_MODULE_2__["default"])(number, country, metadata),
26165      nationalNumber = _extractNationalNumbe2.nationalNumber;
26166
26167    // If the number was not valid before but is valid now,
26168    // or if it was too long before, we consider the number
26169    // with the country calling code stripped to be a better result
26170    // and keep that instead.
26171    // For example, in Germany (+49), `49` is a valid area code,
26172    // so if a number starts with `49`, it could be both a valid
26173    // national German number or an international number without
26174    // a leading `+`.
26175    if (!(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumber, metadata.nationalNumberPattern()) && (0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || (0,_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_3__["default"])(nationalNumber, country, metadata) === 'TOO_LONG') {
26176      return {
26177        countryCallingCode: countryCallingCode,
26178        number: possibleShorterNumber
26179      };
26180    }
26181  }
26182  return {
26183    number: number
26184  };
26185}
26186//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map
26187
26188/***/ }),
26189
vendor: 7,540 bytes, lines 26190-26323
26190/***/ "../node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js":
26191/*!******************************************************************************!*\
26192  !*** ../node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js ***!
26193  \******************************************************************************/
26194/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26195
26196"use strict";
26197__webpack_require__.r(__webpack_exports__);
26198/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26199/* harmony export */   "default": function() { return /* binding */ extractNationalNumber; }
26200/* harmony export */ });
26201/* harmony import */ var _extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./extractNationalNumberFromPossiblyIncompleteNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js");
26202/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js");
26203/* harmony import */ var _checkNumberLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./checkNumberLength.js */ "../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js");
26204/* harmony import */ var _getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getCountryByCallingCode.js */ "../node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js");
26205
26206
26207
26208
26209
26210/**
26211 * Strips national prefix and carrier code from a complete phone number.
26212 * The difference from the non-"FromCompleteNumber" function is that
26213 * it won't extract national prefix if the resultant number is too short
26214 * to be a complete number for the selected phone numbering plan.
26215 * @param  {string} number — Complete phone number digits.
26216 * @param  {string?} country — Country, if known.
26217 * @param  {Metadata} metadata — Metadata with a phone numbering plan selected.
26218 * @return {object} `{ nationalNumber: string, carrierCode: string? }`.
26219 */
26220function extractNationalNumber(number, country, metadata) {
26221  // Parsing national prefixes and carrier codes
26222  // is only required for local phone numbers
26223  // but some people don't understand that
26224  // and sometimes write international phone numbers
26225  // with national prefixes (or maybe even carrier codes).
26226  // http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html
26227  // Google's original library forgives such mistakes
26228  // and so does this library, because it has been requested:
26229  // https://github.com/catamphetamine/libphonenumber-js/issues/127
26230  var _extractNationalNumbe = (0,_extractNationalNumberFromPossiblyIncompleteNumber_js__WEBPACK_IMPORTED_MODULE_0__["default"])(number, metadata),
26231    carrierCode = _extractNationalNumbe.carrierCode,
26232    nationalNumber = _extractNationalNumbe.nationalNumber;
26233  if (nationalNumber !== number) {
26234    if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {
26235      // Don't strip the national prefix.
26236      return {
26237        nationalNumber: number
26238      };
26239    }
26240    // Check the national (significant) number length after extracting national prefix and carrier code.
26241    // Legacy generated metadata (before `1.0.18`) didn't support the "possible lengths" feature.
26242    if (metadata.numberingPlan.possibleLengths()) {
26243      // If an exact `country` is not specified, attempt to detect it from the assumed national number.
26244      if (!country) {
26245        country = (0,_getCountryByCallingCode_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metadata.numberingPlan.callingCode(), {
26246          nationalNumber: nationalNumber,
26247          metadata: metadata
26248        });
26249      }
26250
26251      // The number remaining after stripping the national prefix and carrier code
26252      // should be long enough to have a possible length for the country.
26253      // Otherwise, don't strip the national prefix and carrier code,
26254      // since the original number could be a valid number.
26255      // This check has been copy-pasted "as is" from Google's original library:
26256      // https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250
26257      // It doesn't check for the "possibility" of the original `number`.
26258      // I guess it's fine not checking that one. It works as is anyway.
26259      if (!isPossibleIncompleteNationalNumber(nationalNumber, country, metadata)) {
26260        // Don't strip the national prefix.
26261        return {
26262          nationalNumber: number
26263        };
26264      }
26265    }
26266  }
26267  return {
26268    nationalNumber: nationalNumber,
26269    carrierCode: carrierCode
26270  };
26271}
26272
26273// In some countries, the same digit could be a national prefix
26274// or a leading digit of a valid phone number.
26275// For example, in Russia, national prefix is `8`,
26276// and also `800 555 35 35` is a valid number
26277// in which `8` is not a national prefix, but the first digit
26278// of a national (significant) number.
26279// Same's with Belarus:
26280// `82004910060` is a valid national (significant) number,
26281// but `2004910060` is not.
26282// To support such cases (to prevent the code from always stripping
26283// national prefix), a condition is imposed: a national prefix
26284// is not extracted when the original number is "viable" and the
26285// resultant number is not, a "viable" national number being the one
26286// that matches `national_number_pattern`.
26287function shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) {
26288  // The equivalent in Google's code is:
26289  // https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004
26290  if ((0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumberBefore, metadata.nationalNumberPattern()) && !(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumberAfter, metadata.nationalNumberPattern())) {
26291    return false;
26292  }
26293  // This "is possible" national number (length) check has been commented out
26294  // because it's superceded by the (effectively) same check done in the
26295  // `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`.
26296  // In other words, why run the same check twice if it could only be run once.
26297  // // Check the national (significant) number length after extracting national prefix and carrier code.
26298  // // Fixes a minor "weird behavior" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57
26299  // // (Legacy generated metadata (before `1.0.18`) didn't support the "possible lengths" feature).
26300  // if (metadata.possibleLengths()) {
26301  // 	if (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) &&
26302  // 		!isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) {
26303  // 		return false
26304  // 	}
26305  // }
26306  return true;
26307}
26308function isPossibleIncompleteNationalNumber(nationalNumber, country, metadata) {
26309  switch ((0,_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_2__["default"])(nationalNumber, country, metadata)) {
26310    case 'TOO_SHORT':
26311    case 'INVALID_LENGTH':
26312      // This library ignores "local-only" phone numbers (for simplicity).
26313      // See the readme for more info on what are "local-only" phone numbers.
26314      // case 'IS_POSSIBLE_LOCAL_ONLY':
26315      return false;
26316    default:
26317      return true;
26318  }
26319}
26320//# sourceMappingURL=extractNationalNumber.js.map
26321
26322/***/ }),
26323
vendor: 6,495 bytes, lines 26324-26439
26324/***/ "../node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js":
26325/*!**********************************************************************************************************!*\
26326  !*** ../node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js ***!
26327  \**********************************************************************************************************/
26328/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26329
26330"use strict";
26331__webpack_require__.r(__webpack_exports__);
26332/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26333/* harmony export */   "default": function() { return /* binding */ extractNationalNumberFromPossiblyIncompleteNumber; }
26334/* harmony export */ });
26335/**
26336 * Strips any national prefix (such as 0, 1) present in a
26337 * (possibly incomplete) number provided.
26338 * "Carrier codes" are only used  in Colombia and Brazil,
26339 * and only when dialing within those countries from a mobile phone to a fixed line number.
26340 * Sometimes it won't actually strip national prefix
26341 * and will instead prepend some digits to the `number`:
26342 * for example, when number `2345678` is passed with `VI` country selected,
26343 * it will return `{ number: "3402345678" }`, because `340` area code is prepended.
26344 * @param {string} number — National number digits.
26345 * @param {object} metadata — Metadata with country selected.
26346 * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.
26347 */
26348function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {
26349  if (number && metadata.numberingPlan.nationalPrefixForParsing()) {
26350    // See METADATA.md for the description of
26351    // `national_prefix_for_parsing` and `national_prefix_transform_rule`.
26352    // Attempt to parse the first digits as a national prefix.
26353    var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')');
26354    var prefixMatch = prefixPattern.exec(number);
26355    if (prefixMatch) {
26356      var nationalNumber;
26357      var carrierCode;
26358      // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule
26359      // If a `national_prefix_for_parsing` has any "capturing groups"
26360      // then it means that the national (significant) number is equal to
26361      // those "capturing groups" transformed via `national_prefix_transform_rule`,
26362      // and nothing could be said about the actual national prefix:
26363      // what is it and was it even there.
26364      // If a `national_prefix_for_parsing` doesn't have any "capturing groups",
26365      // then everything it matches is a national prefix.
26366      // To determine whether `national_prefix_for_parsing` matched any
26367      // "capturing groups", the value of the result of calling `.exec()`
26368      // is looked at, and if it has non-undefined values where there're
26369      // "capturing groups" in the regular expression, then it means
26370      // that "capturing groups" have been matched.
26371      // It's not possible to tell whether there'll be any "capturing gropus"
26372      // before the matching process, because a `national_prefix_for_parsing`
26373      // could exhibit both behaviors.
26374      var capturedGroupsCount = prefixMatch.length - 1;
26375      var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];
26376      if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {
26377        nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule());
26378        // If there's more than one captured group,
26379        // then carrier code is the second one.
26380        if (capturedGroupsCount > 1) {
26381          carrierCode = prefixMatch[1];
26382        }
26383      }
26384      // If there're no "capturing groups",
26385      // or if there're "capturing groups" but no
26386      // `national_prefix_transform_rule`,
26387      // then just strip the national prefix from the number,
26388      // and possibly a carrier code.
26389      // Seems like there could be more.
26390      else {
26391        // `prefixBeforeNationalNumber` is the whole substring matched by
26392        // the `national_prefix_for_parsing` regular expression.
26393        // There seem to be no guarantees that it's just a national prefix.
26394        // For example, if there's a carrier code, it's gonna be a
26395        // part of `prefixBeforeNationalNumber` too.
26396        var prefixBeforeNationalNumber = prefixMatch[0];
26397        nationalNumber = number.slice(prefixBeforeNationalNumber.length);
26398        // If there's at least one captured group,
26399        // then carrier code is the first one.
26400        if (hasCapturedGroups) {
26401          carrierCode = prefixMatch[1];
26402        }
26403      }
26404      // Tries to guess whether a national prefix was present in the input.
26405      // This is not something copy-pasted from Google's library:
26406      // they don't seem to have an equivalent for that.
26407      // So this isn't an "officially approved" way of doing something like that.
26408      // But since there seems no other existing method, this library uses it.
26409      var nationalPrefix;
26410      if (hasCapturedGroups) {
26411        var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);
26412        var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup);
26413        // Example: an Argentinian (AR) phone number `0111523456789`.
26414        // `prefixMatch[0]` is `01115`, and `$1` is `11`,
26415        // and the rest of the phone number is `23456789`.
26416        // The national number is transformed via `9$1` to `91123456789`.
26417        // National prefix `0` is detected being present at the start.
26418        // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {
26419        if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {
26420          nationalPrefix = metadata.numberingPlan.nationalPrefix();
26421        }
26422      } else {
26423        nationalPrefix = prefixMatch[0];
26424      }
26425      return {
26426        nationalNumber: nationalNumber,
26427        nationalPrefix: nationalPrefix,
26428        carrierCode: carrierCode
26429      };
26430    }
26431  }
26432  return {
26433    nationalNumber: number
26434  };
26435}
26436//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map
26437
26438/***/ }),
26439
vendor: 2,997 bytes, lines 26440-26488
26440/***/ "../node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js":
26441/*!****************************************************************************************!*\
26442  !*** ../node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js ***!
26443  \****************************************************************************************/
26444/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26445
26446"use strict";
26447__webpack_require__.r(__webpack_exports__);
26448/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26449/* harmony export */   FIRST_GROUP_PATTERN: function() { return /* binding */ FIRST_GROUP_PATTERN; },
26450/* harmony export */   "default": function() { return /* binding */ formatNationalNumberUsingFormat; }
26451/* harmony export */ });
26452/* harmony import */ var _applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyInternationalSeparatorStyle.js */ "../node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js");
26453
26454
26455// This was originally set to $1 but there are some countries for which the
26456// first group is not used in the national pattern (e.g. Argentina) so the $1
26457// group does not match correctly. Therefore, we use `\d`, so that the first
26458// group actually used in the pattern will be matched.
26459var FIRST_GROUP_PATTERN = /(\$\d)/;
26460function formatNationalNumberUsingFormat(number, format, _ref) {
26461  var useInternationalFormat = _ref.useInternationalFormat,
26462    withNationalPrefix = _ref.withNationalPrefix,
26463    carrierCode = _ref.carrierCode,
26464    metadata = _ref.metadata;
26465  var formattedNumber = number.replace(new RegExp(format.pattern()), useInternationalFormat ? format.internationalFormat() :
26466  // This library doesn't use `domestic_carrier_code_formatting_rule`,
26467  // because that one is only used when formatting phone numbers
26468  // for dialing from a mobile phone, and this is not a dialing library.
26469  // carrierCode && format.domesticCarrierCodeFormattingRule()
26470  // 	// First, replace the $CC in the formatting rule with the desired carrier code.
26471  // 	// Then, replace the $FG in the formatting rule with the first group
26472  // 	// and the carrier code combined in the appropriate way.
26473  // 	? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))
26474  // 	: (
26475  // 		withNationalPrefix && format.nationalPrefixFormattingRule()
26476  // 			? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())
26477  // 			: format.format()
26478  // 	)
26479  withNationalPrefix && format.nationalPrefixFormattingRule() ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) : format.format());
26480  if (useInternationalFormat) {
26481    return (0,_applyInternationalSeparatorStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(formattedNumber);
26482  }
26483  return formattedNumber;
26484}
26485//# sourceMappingURL=formatNationalNumberUsingFormat.js.map
26486
26487/***/ }),
26488
vendor: 1,943 bytes, lines 26489-26532
26489/***/ "../node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js":
26490/*!********************************************************************************!*\
26491  !*** ../node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js ***!
26492  \********************************************************************************/
26493/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26494
26495"use strict";
26496__webpack_require__.r(__webpack_exports__);
26497/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26498/* harmony export */   "default": function() { return /* binding */ getCountryByCallingCode; }
26499/* harmony export */ });
26500/* harmony import */ var _getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getCountryByNationalNumber.js */ "../node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js");
26501
26502var USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;
26503
26504// Returns the exact country for the `nationalNumber`
26505// that belongs to the specified "country calling code".
26506function getCountryByCallingCode(callingCode, _ref) {
26507  var nationalPhoneNumber = _ref.nationalNumber,
26508    metadata = _ref.metadata;
26509  /* istanbul ignore if */
26510  if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {
26511    if (metadata.isNonGeographicCallingCode(callingCode)) {
26512      return '001';
26513    }
26514  }
26515  var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);
26516  if (!possibleCountries) {
26517    return;
26518  }
26519  // If there's just one country corresponding to the country code,
26520  // then just return it, without further phone number digits validation.
26521  if (possibleCountries.length === 1) {
26522    return possibleCountries[0];
26523  }
26524  return (0,_getCountryByNationalNumber_js__WEBPACK_IMPORTED_MODULE_0__["default"])(nationalPhoneNumber, {
26525    countries: possibleCountries,
26526    metadata: metadata.metadata
26527  });
26528}
26529//# sourceMappingURL=getCountryByCallingCode.js.map
26530
26531/***/ }),
26532
vendor: 5,692 bytes, lines 26533-26627
26533/***/ "../node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js":
26534/*!***********************************************************************************!*\
26535  !*** ../node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js ***!
26536  \***********************************************************************************/
26537/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26538
26539"use strict";
26540__webpack_require__.r(__webpack_exports__);
26541/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26542/* harmony export */   "default": function() { return /* binding */ getCountryByNationalNumber; }
26543/* harmony export */ });
26544/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
26545/* harmony import */ var _getNumberType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNumberType.js */ "../node_modules/libphonenumber-js/es6/helpers/getNumberType.js");
26546function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
26547function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
26548function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
26549
26550
26551
26552// Returns the exact country that the `nationalPhoneNumber` belongs to
26553// in cases of ambiguity, i.e. when multiple countries share the same "country calling code".
26554function getCountryByNationalNumber(nationalPhoneNumber, _ref) {
26555  var countries = _ref.countries,
26556    metadata = _ref.metadata;
26557  // Re-create `metadata` because it will be selecting a `country`.
26558  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata);
26559
26560  // const matchingCountries = []
26561
26562  for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) {
26563    var country = _step.value;
26564    metadata.selectNumberingPlan(country);
26565    // "Leading digits" patterns are only defined for about 20% of all countries.
26566    // By definition, matching "leading digits" is a sufficient but not a necessary
26567    // condition for a phone number to belong to a country.
26568    // The point of "leading digits" check is that it's the fastest one to get a match.
26569    // https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits
26570    // I'd suppose that "leading digits" patterns are mutually exclusive for different countries
26571    // because of the intended use of that feature.
26572    if (metadata.leadingDigits()) {
26573      if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {
26574        return country;
26575      }
26576    }
26577    // Else perform full validation with all of those
26578    // fixed-line/mobile/etc regular expressions.
26579    else if ((0,_getNumberType_js__WEBPACK_IMPORTED_MODULE_1__["default"])({
26580      phone: nationalPhoneNumber,
26581      country: country
26582    }, undefined, metadata.metadata)) {
26583      // When multiple countries share the same "country calling code",
26584      // type patterns aren't guaranteed to be unique among them.
26585      // For example, both `US` and `CA` have the same pattern for `toll_free` numbers.
26586      // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417147572
26587      //
26588      // That means that this `if` condition could be `true` for multiple countries from the list.
26589      // Currently, it just returns the first one, which is also the "main" country for the "country calling code".
26590      // In an example with `toll_free` numbers above, `"US"` would be returned even though
26591      // it could as well be `"CA"`.
26592      //
26593      // There was also a time when this attempted to be overly smart
26594      // and kept track of all such multiple matching countries
26595      // and then picked the one that matched the `defaultCountry`, if provided.
26596      // For example, with `toll_free` numbers above, and with `defaultCountry: "CA"`,
26597      // it would've returned `"CA"` instead of `"US"`.
26598      // Later it turned out that such "overly smart" behavior turned out to be just confusing,
26599      // so this "overly smart" country detection was reverted to returning the "main" country
26600      // for the "country calling code".
26601      // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/154
26602      //
26603      return country;
26604      //
26605      // The "overly smart" behavior code:
26606      //
26607      // if (defaultCountry) {
26608      // 	if (country === defaultCountry) {
26609      // 		return country
26610      // 	} else {
26611      // 		matchingCountries.push(country)
26612      // 	}
26613      // } else {
26614      // 	return country
26615      // }
26616    }
26617  }
26618
26619  // // Return the first ("main") one of the `matchingCountries`.
26620  // if (matchingCountries.length > 0) {
26621  // 	return matchingCountries[0]
26622  // }
26623}
26624//# sourceMappingURL=getCountryByNationalNumber.js.map
26625
26626/***/ }),
26627
vendor: 1,965 bytes, lines 26628-26668
26628/***/ "../node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js":
26629/*!*********************************************************************!*\
26630  !*** ../node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js ***!
26631  \*********************************************************************/
26632/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26633
26634"use strict";
26635__webpack_require__.r(__webpack_exports__);
26636/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26637/* harmony export */   "default": function() { return /* binding */ getIddPrefix; }
26638/* harmony export */ });
26639/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
26640
26641
26642/**
26643 * Pattern that makes it easy to distinguish whether a region has a single
26644 * international dialing prefix or not. If a region has a single international
26645 * prefix (e.g. 011 in USA), it will be represented as a string that contains
26646 * a sequence of ASCII digits, and possibly a tilde, which signals waiting for
26647 * the tone. If there are multiple available international prefixes in a
26648 * region, they will be represented as a regex string that always contains one
26649 * or more characters that are not ASCII digits or a tilde.
26650 */
26651var SINGLE_IDD_PREFIX_REG_EXP = /^[\d]+(?:[~\u2053\u223C\uFF5E][\d]+)?$/;
26652
26653// For regions that have multiple IDD prefixes
26654// a preferred IDD prefix is returned.
26655function getIddPrefix(country, callingCode, metadata) {
26656  var countryMetadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata);
26657  countryMetadata.selectNumberingPlan(country, callingCode);
26658  if (countryMetadata.defaultIDDPrefix()) {
26659    return countryMetadata.defaultIDDPrefix();
26660  }
26661  if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {
26662    return countryMetadata.IDDPrefix();
26663  }
26664}
26665//# sourceMappingURL=getIddPrefix.js.map
26666
26667/***/ }),
26668
vendor: 5,693 bytes, lines 26669-26769
26669/***/ "../node_modules/libphonenumber-js/es6/helpers/getNumberType.js":
26670/*!**********************************************************************!*\
26671  !*** ../node_modules/libphonenumber-js/es6/helpers/getNumberType.js ***!
26672  \**********************************************************************/
26673/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26674
26675"use strict";
26676__webpack_require__.r(__webpack_exports__);
26677/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26678/* harmony export */   "default": function() { return /* binding */ getNumberType; },
26679/* harmony export */   isNumberTypeEqualTo: function() { return /* binding */ isNumberTypeEqualTo; }
26680/* harmony export */ });
26681/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
26682/* harmony import */ var _matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./matchesEntirely.js */ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js");
26683function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
26684function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
26685function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
26686
26687
26688var NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];
26689
26690// Finds out national phone number type (fixed line, mobile, etc)
26691function getNumberType(input, options, metadata) {
26692  // If assigning the `{}` default value is moved to the arguments above,
26693  // code coverage would decrease for some weird reason.
26694  options = options || {};
26695
26696  // When `parse()` returns an empty object — `{}` —
26697  // that means that the phone number is malformed,
26698  // so it can't possibly be valid.
26699  if (!input.country && !input.countryCallingCode) {
26700    return;
26701  }
26702  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata);
26703  metadata.selectNumberingPlan(input.country, input.countryCallingCode);
26704  var nationalNumber = options.v2 ? input.nationalNumber : input.phone;
26705
26706  // The following is copy-pasted from the original function:
26707  // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835
26708
26709  // Is this national number even valid for this country
26710  if (!(0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumber, metadata.nationalNumberPattern())) {
26711    return;
26712  }
26713
26714  // Is it fixed line number
26715  if (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {
26716    // Because duplicate regular expressions are removed
26717    // to reduce metadata size, if "mobile" pattern is ""
26718    // then it means it was removed due to being a duplicate of the fixed-line pattern.
26719    //
26720    if (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {
26721      return 'FIXED_LINE_OR_MOBILE';
26722    }
26723
26724    // `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one.
26725    // For example, for "US" country.
26726    // Old metadata (< `1.0.18`) had a specific "types" data structure
26727    // that happened to be `undefined` for `MOBILE` in that case.
26728    // Newer metadata (>= `1.0.18`) has another data structure that is
26729    // not `undefined` for `MOBILE` in that case (it's just an empty array).
26730    // So this `if` is just for backwards compatibility with old metadata.
26731    if (!metadata.type('MOBILE')) {
26732      return 'FIXED_LINE_OR_MOBILE';
26733    }
26734
26735    // Check if the number happens to qualify as both fixed line and mobile.
26736    // (no such country in the minimal metadata set)
26737    /* istanbul ignore if */
26738    if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {
26739      return 'FIXED_LINE_OR_MOBILE';
26740    }
26741    return 'FIXED_LINE';
26742  }
26743  for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {
26744    var type = _step.value;
26745    if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {
26746      return type;
26747    }
26748  }
26749}
26750function isNumberTypeEqualTo(nationalNumber, type, metadata) {
26751  type = metadata.type(type);
26752  if (!type || !type.pattern()) {
26753    return false;
26754  }
26755  // Check if any possible number lengths are present;
26756  // if so, we use them to avoid checking
26757  // the validation pattern if they don't match.
26758  // If they are absent, this means they match
26759  // the general description, which we have
26760  // already checked before a specific number type.
26761  if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) {
26762    return false;
26763  }
26764  return (0,_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumber, type.pattern());
26765}
26766//# sourceMappingURL=getNumberType.js.map
26767
26768/***/ }),
26769
vendor: 2,032 bytes, lines 26770-26812
26770/***/ "../node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js":
26771/*!**************************************************************************************!*\
26772  !*** ../node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js ***!
26773  \**************************************************************************************/
26774/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26775
26776"use strict";
26777__webpack_require__.r(__webpack_exports__);
26778/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26779/* harmony export */   "default": function() { return /* binding */ getPossibleCountriesForNumber; }
26780/* harmony export */ });
26781/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
26782
26783
26784/**
26785 * Returns a list of countries that the phone number could potentially belong to.
26786 * @param  {string} callingCode — Calling code.
26787 * @param  {string} nationalNumber — National (significant) number.
26788 * @param  {object} metadata — Metadata.
26789 * @return {string[]} A list of possible countries.
26790 */
26791function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {
26792  var _metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata);
26793  var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);
26794  if (!possibleCountries) {
26795    return [];
26796  }
26797  return possibleCountries.filter(function (country) {
26798    return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);
26799  });
26800}
26801function couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {
26802  var _metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata);
26803  _metadata.selectNumberingPlan(country);
26804  if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {
26805    return true;
26806  }
26807  return false;
26808}
26809//# sourceMappingURL=getPossibleCountriesForNumber.js.map
26810
26811/***/ }),
26812
vendor: 819 bytes, lines 26813-26831
26813/***/ "../node_modules/libphonenumber-js/es6/helpers/isObject.js":
26814/*!*****************************************************************!*\
26815  !*** ../node_modules/libphonenumber-js/es6/helpers/isObject.js ***!
26816  \*****************************************************************/
26817/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26818
26819"use strict";
26820__webpack_require__.r(__webpack_exports__);
26821/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26822/* harmony export */   "default": function() { return /* binding */ isObject; }
26823/* harmony export */ });
26824var objectConstructor = {}.constructor;
26825function isObject(object) {
26826  return object !== undefined && object !== null && object.constructor === objectConstructor;
26827}
26828//# sourceMappingURL=isObject.js.map
26829
26830/***/ }),
26831
vendor: 6,019 bytes, lines 26832-26927
26832/***/ "../node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js":
26833/*!****************************************************************************!*\
26834  !*** ../node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js ***!
26835  \****************************************************************************/
26836/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26837
26838"use strict";
26839__webpack_require__.r(__webpack_exports__);
26840/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26841/* harmony export */   VALID_PHONE_NUMBER: function() { return /* binding */ VALID_PHONE_NUMBER; },
26842/* harmony export */   VALID_PHONE_NUMBER_WITH_EXTENSION: function() { return /* binding */ VALID_PHONE_NUMBER_WITH_EXTENSION; },
26843/* harmony export */   "default": function() { return /* binding */ isViablePhoneNumber; },
26844/* harmony export */   isViablePhoneNumberStart: function() { return /* binding */ isViablePhoneNumberStart; }
26845/* harmony export */ });
26846/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ "../node_modules/libphonenumber-js/es6/constants.js");
26847/* harmony import */ var _extension_createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./extension/createExtensionPattern.js */ "../node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js");
26848
26849
26850
26851//  Regular expression of viable phone numbers. This is location independent.
26852//  Checks we have at least three leading digits, and only valid punctuation,
26853//  alpha characters and digits in the phone number. Does not include extension
26854//  data. The symbol 'x' is allowed here as valid punctuation since it is often
26855//  used as a placeholder for carrier codes, for example in Brazilian phone
26856//  numbers. We also allow multiple '+' characters at the start.
26857//
26858//  Corresponds to the following:
26859//  [digits]{minLengthNsn}|
26860//  plus_sign*
26861//  (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*
26862//
26863//  The first reg-ex is to allow short numbers (two digits long) to be parsed if
26864//  they are entered as "15" etc, but only if there is no punctuation in them.
26865//  The second expression restricts the number of digits to three or more, but
26866//  then allows them to be in international form, and to have alpha-characters
26867//  and punctuation. We split up the two reg-exes here and combine them when
26868//  creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it
26869//  with ^ and append $ to each branch.
26870//
26871//  "Note VALID_PUNCTUATION starts with a -,
26872//   so must be the first in the range" (c) Google devs.
26873//  (wtf did they mean by saying that; probably nothing)
26874//
26875var MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']{' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.MIN_LENGTH_FOR_NSN + '}';
26876//
26877// And this is the second reg-exp:
26878// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)
26879//
26880var VALID_PHONE_NUMBER = '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_CHARS + ']{0,1}' + '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + ']*' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + '){3,}' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']*';
26881
26882// This regular expression isn't present in Google's `libphonenumber`
26883// and is only used to determine whether the phone number being input
26884// is too short for it to even consider it a "valid" number.
26885// This is just a way to differentiate between a really invalid phone
26886// number like "abcde" and a valid phone number that a user has just
26887// started inputting, like "+1" or "1": both these cases would be
26888// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this
26889// library can provide a more detailed error message — whether it's
26890// really "not a number", or is it just a start of a valid phone number.
26891var VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.PLUS_CHARS + ']{0,1}' + '(?:' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_PUNCTUATION + ']*' + '[' + _constants_js__WEBPACK_IMPORTED_MODULE_0__.VALID_DIGITS + ']' + '){1,2}' + '$', 'i');
26892var VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER +
26893// Phone number extensions
26894'(?:' + (0,_extension_createExtensionPattern_js__WEBPACK_IMPORTED_MODULE_1__["default"])() + ')?';
26895
26896// The combined regular expression for valid phone numbers:
26897//
26898var VALID_PHONE_NUMBER_PATTERN = new RegExp(
26899// Either a short two-digit-only phone number
26900'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +
26901// Or a longer fully parsed phone number (min 3 characters)
26902'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i');
26903
26904// Checks to see if the string of characters could possibly be a phone number at
26905// all. At the moment, checks to see that the string begins with at least 2
26906// digits, ignoring any punctuation commonly found in phone numbers. This method
26907// does not require the number to be normalized in advance - but does assume
26908// that leading non-number symbols have been removed, such as by the method
26909// `extract_possible_number`.
26910//
26911function isViablePhoneNumber(number) {
26912  return number.length >= _constants_js__WEBPACK_IMPORTED_MODULE_0__.MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);
26913}
26914
26915// This is just a way to differentiate between a really invalid phone
26916// number like "abcde" and a valid phone number that a user has just
26917// started inputting, like "+1" or "1": both these cases would be
26918// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this
26919// library can provide a more detailed error message — whether it's
26920// really "not a number", or is it just a start of a valid phone number.
26921function isViablePhoneNumberStart(number) {
26922  return VALID_PHONE_NUMBER_START_REG_EXP.test(number);
26923}
26924//# sourceMappingURL=isViablePhoneNumber.js.map
26925
26926/***/ }),
26927
vendor: 1,116 bytes, lines 26928-26953
26928/***/ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js":
26929/*!************************************************************************!*\
26930  !*** ../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js ***!
26931  \************************************************************************/
26932/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26933
26934"use strict";
26935__webpack_require__.r(__webpack_exports__);
26936/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26937/* harmony export */   "default": function() { return /* binding */ matchesEntirely; }
26938/* harmony export */ });
26939/**
26940 * Checks whether the entire input sequence can be matched
26941 * against the regular expression.
26942 * @return {boolean}
26943 */
26944function matchesEntirely(text, regularExpressionText) {
26945  // If the assigning of the `''` default value is moved to the arguments above,
26946  // the code coverage would decrease for some weird reason.
26947  text = text || '';
26948  return new RegExp('^(?:' + regularExpressionText + ')$').test(text);
26949}
26950//# sourceMappingURL=matchesEntirely.js.map
26951
26952/***/ }),
26953
vendor: 2,344 bytes, lines 26954-26996
26954/***/ "../node_modules/libphonenumber-js/es6/helpers/mergeArrays.js":
26955/*!********************************************************************!*\
26956  !*** ../node_modules/libphonenumber-js/es6/helpers/mergeArrays.js ***!
26957  \********************************************************************/
26958/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
26959
26960"use strict";
26961__webpack_require__.r(__webpack_exports__);
26962/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26963/* harmony export */   "default": function() { return /* binding */ mergeArrays; }
26964/* harmony export */ });
26965function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
26966function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
26967function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
26968/**
26969 * Merges two arrays.
26970 * @param  {*} a
26971 * @param  {*} b
26972 * @return {*}
26973 */
26974function mergeArrays(a, b) {
26975  var merged = a.slice();
26976  for (var _iterator = _createForOfIteratorHelperLoose(b), _step; !(_step = _iterator()).done;) {
26977    var element = _step.value;
26978    if (a.indexOf(element) < 0) {
26979      merged.push(element);
26980    }
26981  }
26982  return merged.sort(function (a, b) {
26983    return a - b;
26984  });
26985
26986  // ES6 version, requires Set polyfill.
26987  // let merged = new Set(a)
26988  // for (const element of b) {
26989  // 	merged.add(i)
26990  // }
26991  // return Array.from(merged).sort((a, b) => a - b)
26992}
26993//# sourceMappingURL=mergeArrays.js.map
26994
26995/***/ }),
26996
vendor: 4,779 bytes, lines 26997-27127
26997/***/ "../node_modules/libphonenumber-js/es6/helpers/parseDigits.js":
26998/*!********************************************************************!*\
26999  !*** ../node_modules/libphonenumber-js/es6/helpers/parseDigits.js ***!
27000  \********************************************************************/
27001/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
27002
27003"use strict";
27004__webpack_require__.r(__webpack_exports__);
27005/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27006/* harmony export */   DIGITS: function() { return /* binding */ DIGITS; },
27007/* harmony export */   "default": function() { return /* binding */ parseDigits; },
27008/* harmony export */   parseDigit: function() { return /* binding */ parseDigit; }
27009/* harmony export */ });
27010function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
27011function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
27012function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
27013// These mappings map a character (key) to a specific digit that should
27014// replace it for normalization purposes. Non-European digits that
27015// may be used in phone numbers are mapped to a European equivalent.
27016//
27017// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.
27018//
27019var DIGITS = {
27020  '0': '0',
27021  '1': '1',
27022  '2': '2',
27023  '3': '3',
27024  '4': '4',
27025  '5': '5',
27026  '6': '6',
27027  '7': '7',
27028  '8': '8',
27029  '9': '9',
27030  "\uFF10": '0',
27031  // Fullwidth digit 0
27032  "\uFF11": '1',
27033  // Fullwidth digit 1
27034  "\uFF12": '2',
27035  // Fullwidth digit 2
27036  "\uFF13": '3',
27037  // Fullwidth digit 3
27038  "\uFF14": '4',
27039  // Fullwidth digit 4
27040  "\uFF15": '5',
27041  // Fullwidth digit 5
27042  "\uFF16": '6',
27043  // Fullwidth digit 6
27044  "\uFF17": '7',
27045  // Fullwidth digit 7
27046  "\uFF18": '8',
27047  // Fullwidth digit 8
27048  "\uFF19": '9',
27049  // Fullwidth digit 9
27050  "\u0660": '0',
27051  // Arabic-indic digit 0
27052  "\u0661": '1',
27053  // Arabic-indic digit 1
27054  "\u0662": '2',
27055  // Arabic-indic digit 2
27056  "\u0663": '3',
27057  // Arabic-indic digit 3
27058  "\u0664": '4',
27059  // Arabic-indic digit 4
27060  "\u0665": '5',
27061  // Arabic-indic digit 5
27062  "\u0666": '6',
27063  // Arabic-indic digit 6
27064  "\u0667": '7',
27065  // Arabic-indic digit 7
27066  "\u0668": '8',
27067  // Arabic-indic digit 8
27068  "\u0669": '9',
27069  // Arabic-indic digit 9
27070  "\u06F0": '0',
27071  // Eastern-Arabic digit 0
27072  "\u06F1": '1',
27073  // Eastern-Arabic digit 1
27074  "\u06F2": '2',
27075  // Eastern-Arabic digit 2
27076  "\u06F3": '3',
27077  // Eastern-Arabic digit 3
27078  "\u06F4": '4',
27079  // Eastern-Arabic digit 4
27080  "\u06F5": '5',
27081  // Eastern-Arabic digit 5
27082  "\u06F6": '6',
27083  // Eastern-Arabic digit 6
27084  "\u06F7": '7',
27085  // Eastern-Arabic digit 7
27086  "\u06F8": '8',
27087  // Eastern-Arabic digit 8
27088  "\u06F9": '9' // Eastern-Arabic digit 9
27089};
27090function parseDigit(character) {
27091  return DIGITS[character];
27092}
27093
27094/**
27095 * Parses phone number digits from a string.
27096 * Drops all punctuation leaving only digits.
27097 * Also converts wide-ascii and arabic-indic numerals to conventional numerals.
27098 * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.
27099 * @param  {string} string
27100 * @return {string}
27101 * @example
27102 * ```js
27103 * parseDigits('8 (800) 555')
27104 * // Outputs '8800555'.
27105 * ```
27106 */
27107function parseDigits(string) {
27108  var result = '';
27109  // Using `.split('')` here instead of normal `for ... of`
27110  // because the importing application doesn't neccessarily include an ES6 polyfill.
27111  // The `.split('')` approach discards "exotic" UTF-8 characters
27112  // (the ones consisting of four bytes) but digits
27113  // (including non-European ones) don't fall into that range
27114  // so such "exotic" characters would be discarded anyway.
27115  for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {
27116    var character = _step.value;
27117    var digit = parseDigit(character);
27118    if (digit) {
27119      result += digit;
27120    }
27121  }
27122  return result;
27123}
27124//# sourceMappingURL=parseDigits.js.map
27125
27126/***/ }),
27127
vendor: 2,096 bytes, lines 27128-27172
27128/***/ "../node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js":
27129/*!***********************************************************************!*\
27130  !*** ../node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js ***!
27131  \***********************************************************************/
27132/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
27133
27134"use strict";
27135__webpack_require__.r(__webpack_exports__);
27136/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27137/* harmony export */   "default": function() { return /* binding */ stripIddPrefix; }
27138/* harmony export */ });
27139/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
27140/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ "../node_modules/libphonenumber-js/es6/constants.js");
27141
27142
27143var CAPTURING_DIGIT_PATTERN = new RegExp('([' + _constants_js__WEBPACK_IMPORTED_MODULE_1__.VALID_DIGITS + '])');
27144function stripIddPrefix(number, country, callingCode, metadata) {
27145  if (!country) {
27146    return;
27147  }
27148  // Check if the number is IDD-prefixed.
27149  var countryMetadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata);
27150  countryMetadata.selectNumberingPlan(country, callingCode);
27151  var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());
27152  if (number.search(IDDPrefixPattern) !== 0) {
27153    return;
27154  }
27155  // Strip IDD prefix.
27156  number = number.slice(number.match(IDDPrefixPattern)[0].length);
27157  // If there're any digits after an IDD prefix,
27158  // then those digits are a country calling code.
27159  // Since no country code starts with a `0`,
27160  // the code below validates that the next digit (if present) is not `0`.
27161  var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);
27162  if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {
27163    if (matchedGroups[1] === '0') {
27164      return;
27165    }
27166  }
27167  return number;
27168}
27169//# sourceMappingURL=stripIddPrefix.js.map
27170
27171/***/ }),
27172
vendor: 4,060 bytes, lines 27173-27266
27173/***/ "../node_modules/libphonenumber-js/es6/isPossible.js":
27174/*!***********************************************************!*\
27175  !*** ../node_modules/libphonenumber-js/es6/isPossible.js ***!
27176  \***********************************************************/
27177/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
27178
27179"use strict";
27180__webpack_require__.r(__webpack_exports__);
27181/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27182/* harmony export */   "default": function() { return /* binding */ isPossiblePhoneNumber; },
27183/* harmony export */   isPossibleNumber: function() { return /* binding */ isPossibleNumber; }
27184/* harmony export */ });
27185/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
27186/* harmony import */ var _helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/checkNumberLength.js */ "../node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js");
27187
27188
27189
27190/**
27191 * Checks if a phone number is "possible" (basically just checks its length).
27192 *
27193 * isPossible(phoneNumberInstance, { ..., v2: true }, metadata)
27194 *
27195 * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)
27196 * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)
27197 *
27198 * @param  {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.
27199 * @param  {object} [options]
27200 * @param  {object} metadata
27201 * @return {string}
27202 */
27203function isPossiblePhoneNumber(input, options, metadata) {
27204  /* istanbul ignore if */
27205  if (options === undefined) {
27206    options = {};
27207  }
27208  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata);
27209  if (options.v2) {
27210    if (!input.countryCallingCode) {
27211      throw new Error('Invalid phone number object passed');
27212    }
27213    metadata.selectNumberingPlan(input.countryCallingCode);
27214  } else {
27215    if (!input.phone) {
27216      return false;
27217    }
27218    if (input.country) {
27219      if (!metadata.hasCountry(input.country)) {
27220        throw new Error("Unknown country: ".concat(input.country));
27221      }
27222      metadata.selectNumberingPlan(input.country);
27223    } else {
27224      if (!input.countryCallingCode) {
27225        throw new Error('Invalid phone number object passed');
27226      }
27227      metadata.selectNumberingPlan(input.countryCallingCode);
27228    }
27229  }
27230
27231  // Old metadata (< 1.0.18) had no "possible length" data.
27232  if (metadata.possibleLengths()) {
27233    return isPossibleNumber(input.phone || input.nationalNumber, input.country, metadata);
27234  } else {
27235    // There was a bug between `1.7.35` and `1.7.37` where "possible_lengths"
27236    // were missing for "non-geographical" numbering plans.
27237    // Just assume the number is possible in such cases:
27238    // it's unlikely that anyone generated their custom metadata
27239    // in that short period of time (one day).
27240    // This code can be removed in some future major version update.
27241    if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {
27242      // "Non-geographic entities" did't have `possibleLengths`
27243      // due to a bug in metadata generation process.
27244      return true;
27245    } else {
27246      throw new Error('Missing "possibleLengths" in metadata. Perhaps the metadata has been generated before v1.0.18.');
27247    }
27248  }
27249}
27250function isPossibleNumber(nationalNumber, country, metadata) {
27251  //, isInternational) {
27252  switch ((0,_helpers_checkNumberLength_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumber, country, metadata)) {
27253    case 'IS_POSSIBLE':
27254      return true;
27255    // This library ignores "local-only" phone numbers (for simplicity).
27256    // See the readme for more info on what are "local-only" phone numbers.
27257    // case 'IS_POSSIBLE_LOCAL_ONLY':
27258    // 	return !isInternational
27259    default:
27260      return false;
27261  }
27262}
27263//# sourceMappingURL=isPossible.js.map
27264
27265/***/ }),
27266
vendor: 3,739 bytes, lines 27267-27340
27267/***/ "../node_modules/libphonenumber-js/es6/isValid.js":
27268/*!********************************************************!*\
27269  !*** ../node_modules/libphonenumber-js/es6/isValid.js ***!
27270  \********************************************************/
27271/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
27272
27273"use strict";
27274__webpack_require__.r(__webpack_exports__);
27275/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27276/* harmony export */   "default": function() { return /* binding */ isValidNumber; }
27277/* harmony export */ });
27278/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata.js */ "../node_modules/libphonenumber-js/es6/metadata.js");
27279/* harmony import */ var _helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/matchesEntirely.js */ "../node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js");
27280/* harmony import */ var _helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/getNumberType.js */ "../node_modules/libphonenumber-js/es6/helpers/getNumberType.js");
27281
27282
27283
27284
27285/**
27286 * Checks if a given phone number is valid.
27287 *
27288 * isValid(phoneNumberInstance, { ..., v2: true }, metadata)
27289 *
27290 * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)
27291 * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)
27292 *
27293 * If the `number` is a string, it will be parsed to an object,
27294 * but only if it contains only valid phone number characters (including punctuation).
27295 * If the `number` is an object, it is used as is.
27296 *
27297 * The optional `defaultCountry` argument is the default country.
27298 * I.e. it does not restrict to just that country,
27299 * e.g. in those cases where several countries share
27300 * the same phone numbering rules (NANPA, Britain, etc).
27301 * For example, even though the number `07624 369230`
27302 * belongs to the Isle of Man ("IM" country code)
27303 * calling `isValidNumber('07624369230', 'GB', metadata)`
27304 * still returns `true` because the country is not restricted to `GB`,
27305 * it's just that `GB` is the default one for the phone numbering rules.
27306 * For restricting the country see `isValidNumberForRegion()`
27307 * though restricting a country might not be a good idea.
27308 * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion
27309 *
27310 * Examples:
27311 *
27312 * ```js
27313 * isValidNumber('+78005553535', metadata)
27314 * isValidNumber('8005553535', 'RU', metadata)
27315 * isValidNumber('88005553535', 'RU', metadata)
27316 * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)
27317 * ```
27318 */
27319function isValidNumber(input, options, metadata) {
27320  // If assigning the `{}` default value is moved to the arguments above,
27321  // code coverage would decrease for some weird reason.
27322  options = options || {};
27323  metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata);
27324  metadata.selectNumberingPlan(input.country, input.countryCallingCode);
27325
27326  // By default, countries only have type regexps when it's required for
27327  // distinguishing different countries having the same `countryCallingCode`.
27328  if (metadata.hasTypes()) {
27329    return (0,_helpers_getNumberType_js__WEBPACK_IMPORTED_MODULE_2__["default"])(input, options, metadata.metadata) !== undefined;
27330  }
27331
27332  // If there are no type regexps for this country in metadata then use
27333  // `nationalNumberPattern` as a "better than nothing" replacement.
27334  var nationalNumber = options.v2 ? input.nationalNumber : input.phone;
27335  return (0,_helpers_matchesEntirely_js__WEBPACK_IMPORTED_MODULE_1__["default"])(nationalNumber, metadata.nationalNumberPattern());
27336}
27337//# sourceMappingURL=isValid.js.map
27338
27339/***/ }),
27340
vendor: 22,969 bytes, lines 27341-27988
27341/***/ "../node_modules/libphonenumber-js/es6/metadata.js":
27342/*!*********************************************************!*\
27343  !*** ../node_modules/libphonenumber-js/es6/metadata.js ***!
27344  \*********************************************************/
27345/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
27346
27347"use strict";
27348__webpack_require__.r(__webpack_exports__);
27349/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27350/* harmony export */   "default": function() { return /* binding */ Metadata; },
27351/* harmony export */   getCountryCallingCode: function() { return /* binding */ getCountryCallingCode; },
27352/* harmony export */   getExtPrefix: function() { return /* binding */ getExtPrefix; },
27353/* harmony export */   isSupportedCountry: function() { return /* binding */ isSupportedCountry; },
27354/* harmony export */   validateMetadata: function() { return /* binding */ validateMetadata; }
27355/* harmony export */ });
27356/* harmony import */ var _tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/semver-compare.js */ "../node_modules/libphonenumber-js/es6/tools/semver-compare.js");
27357/* harmony import */ var _helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/isObject.js */ "../node_modules/libphonenumber-js/es6/helpers/isObject.js");
27358function _readOnlyError(r) { throw new TypeError('"' + r + '" is read-only'); }
27359function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
27360function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
27361function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
27362function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
27363function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
27364function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
27365
27366
27367
27368// Added "possibleLengths" and renamed
27369// "country_phone_code_to_countries" to "country_calling_codes".
27370var V2 = '1.0.18';
27371
27372// Added "idd_prefix" and "default_idd_prefix".
27373var V3 = '1.2.0';
27374
27375// Moved `001` country code to "nonGeographic" section of metadata.
27376var V4 = '1.7.35';
27377var DEFAULT_EXT_PREFIX = ' ext. ';
27378var CALLING_CODE_REG_EXP = /^\d+$/;
27379
27380/**
27381 * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md
27382 */
27383var Metadata = /*#__PURE__*/function () {
27384  function Metadata(metadata) {
27385    _classCallCheck(this, Metadata);
27386    validateMetadata(metadata);
27387    this.metadata = metadata;
27388    setVersion.call(this, metadata);
27389  }
27390  return _createClass(Metadata, [{
27391    key: "getCountries",
27392    value: function getCountries() {
27393      return Object.keys(this.metadata.countries).filter(function (_) {
27394        return _ !== '001';
27395      });
27396    }
27397  }, {
27398    key: "getCountryMetadata",
27399    value: function getCountryMetadata(countryCode) {
27400      return this.metadata.countries[countryCode];
27401    }
27402  }, {
27403    key: "nonGeographic",
27404    value: function nonGeographic() {
27405      if (this.v1 || this.v2 || this.v3) return;
27406      // `nonGeographical` was a typo.
27407      // It's present in metadata generated from `1.7.35` to `1.7.37`.
27408      // The test case could be found by searching for "nonGeographical".
27409      return this.metadata.nonGeographic || this.metadata.nonGeographical;
27410    }
27411  }, {
27412    key: "hasCountry",
27413    value: function hasCountry(country) {
27414      return this.getCountryMetadata(country) !== undefined;
27415    }
27416  }, {
27417    key: "hasCallingCode",
27418    value: function hasCallingCode(callingCode) {
27419      if (this.getCountryCodesForCallingCode(callingCode)) {
27420        return true;
27421      }
27422      if (this.nonGeographic()) {
27423        if (this.nonGeographic()[callingCode]) {
27424          return true;
27425        }
27426      } else {
27427        // A hacky workaround for old custom metadata (generated before V4).
27428        var countryCodes = this.countryCallingCodes()[callingCode];
27429        if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {
27430          return true;
27431        }
27432      }
27433    }
27434  }, {
27435    key: "isNonGeographicCallingCode",
27436    value: function isNonGeographicCallingCode(callingCode) {
27437      if (this.nonGeographic()) {
27438        return this.nonGeographic()[callingCode] ? true : false;
27439      } else {
27440        return this.getCountryCodesForCallingCode(callingCode) ? false : true;
27441      }
27442    }
27443
27444    // Deprecated.
27445  }, {
27446    key: "country",
27447    value: function country(countryCode) {
27448      return this.selectNumberingPlan(countryCode);
27449    }
27450  }, {
27451    key: "selectNumberingPlan",
27452    value: function selectNumberingPlan(countryCode, callingCode) {
27453      // Supports just passing `callingCode` as the first argument.
27454      if (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) {
27455        callingCode = countryCode;
27456        countryCode = null;
27457      }
27458      if (countryCode && countryCode !== '001') {
27459        if (!this.hasCountry(countryCode)) {
27460          throw new Error("Unknown country: ".concat(countryCode));
27461        }
27462        this.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this);
27463      } else if (callingCode) {
27464        if (!this.hasCallingCode(callingCode)) {
27465          throw new Error("Unknown calling code: ".concat(callingCode));
27466        }
27467        this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);
27468      } else {
27469        this.numberingPlan = undefined;
27470      }
27471      return this;
27472    }
27473  }, {
27474    key: "getCountryCodesForCallingCode",
27475    value: function getCountryCodesForCallingCode(callingCode) {
27476      var countryCodes = this.countryCallingCodes()[callingCode];
27477      if (countryCodes) {
27478        // Metadata before V4 included "non-geographic entity" calling codes
27479        // inside `country_calling_codes` (for example, `"881":["001"]`).
27480        // Now the semantics of `country_calling_codes` has changed:
27481        // it's specifically for "countries" now.
27482        // Older versions of custom metadata will simply skip parsing
27483        // "non-geographic entity" phone numbers with new versions
27484        // of this library: it's not considered a bug,
27485        // because such numbers are extremely rare,
27486        // and developers extremely rarely use custom metadata.
27487        if (countryCodes.length === 1 && countryCodes[0].length === 3) {
27488          return;
27489        }
27490        return countryCodes;
27491      }
27492    }
27493  }, {
27494    key: "getCountryCodeForCallingCode",
27495    value: function getCountryCodeForCallingCode(callingCode) {
27496      var countryCodes = this.getCountryCodesForCallingCode(callingCode);
27497      if (countryCodes) {
27498        return countryCodes[0];
27499      }
27500    }
27501  }, {
27502    key: "getNumberingPlanMetadata",
27503    value: function getNumberingPlanMetadata(callingCode) {
27504      var countryCode = this.getCountryCodeForCallingCode(callingCode);
27505      if (countryCode) {
27506        return this.getCountryMetadata(countryCode);
27507      }
27508      if (this.nonGeographic()) {
27509        var metadata = this.nonGeographic()[callingCode];
27510        if (metadata) {
27511          return metadata;
27512        }
27513      } else {
27514        // A hacky workaround for old custom metadata (generated before V4).
27515        // In that metadata, there was no concept of "non-geographic" metadata
27516        // so metadata for `001` country code was stored along with other countries.
27517        // The test case can be found by searching for:
27518        // "should work around `nonGeographic` metadata not existing".
27519        var countryCodes = this.countryCallingCodes()[callingCode];
27520        if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {
27521          return this.metadata.countries['001'];
27522        }
27523      }
27524    }
27525
27526    // Deprecated.
27527  }, {
27528    key: "countryCallingCode",
27529    value: function countryCallingCode() {
27530      return this.numberingPlan.callingCode();
27531    }
27532
27533    // Deprecated.
27534  }, {
27535    key: "IDDPrefix",
27536    value: function IDDPrefix() {
27537      return this.numberingPlan.IDDPrefix();
27538    }
27539
27540    // Deprecated.
27541  }, {
27542    key: "defaultIDDPrefix",
27543    value: function defaultIDDPrefix() {
27544      return this.numberingPlan.defaultIDDPrefix();
27545    }
27546
27547    // Deprecated.
27548  }, {
27549    key: "nationalNumberPattern",
27550    value: function nationalNumberPattern() {
27551      return this.numberingPlan.nationalNumberPattern();
27552    }
27553
27554    // Deprecated.
27555  }, {
27556    key: "possibleLengths",
27557    value: function possibleLengths() {
27558      return this.numberingPlan.possibleLengths();
27559    }
27560
27561    // Deprecated.
27562  }, {
27563    key: "formats",
27564    value: function formats() {
27565      return this.numberingPlan.formats();
27566    }
27567
27568    // Deprecated.
27569  }, {
27570    key: "nationalPrefixForParsing",
27571    value: function nationalPrefixForParsing() {
27572      return this.numberingPlan.nationalPrefixForParsing();
27573    }
27574
27575    // Deprecated.
27576  }, {
27577    key: "nationalPrefixTransformRule",
27578    value: function nationalPrefixTransformRule() {
27579      return this.numberingPlan.nationalPrefixTransformRule();
27580    }
27581
27582    // Deprecated.
27583  }, {
27584    key: "leadingDigits",
27585    value: function leadingDigits() {
27586      return this.numberingPlan.leadingDigits();
27587    }
27588
27589    // Deprecated.
27590  }, {
27591    key: "hasTypes",
27592    value: function hasTypes() {
27593      return this.numberingPlan.hasTypes();
27594    }
27595
27596    // Deprecated.
27597  }, {
27598    key: "type",
27599    value: function type(_type) {
27600      return this.numberingPlan.type(_type);
27601    }
27602
27603    // Deprecated.
27604  }, {
27605    key: "ext",
27606    value: function ext() {
27607      return this.numberingPlan.ext();
27608    }
27609  }, {
27610    key: "countryCallingCodes",
27611    value: function countryCallingCodes() {
27612      if (this.v1) return this.metadata.country_phone_code_to_countries;
27613      return this.metadata.country_calling_codes;
27614    }
27615
27616    // Deprecated.
27617  }, {
27618    key: "chooseCountryByCountryCallingCode",
27619    value: function chooseCountryByCountryCallingCode(callingCode) {
27620      return this.selectNumberingPlan(callingCode);
27621    }
27622  }, {
27623    key: "hasSelectedNumberingPlan",
27624    value: function hasSelectedNumberingPlan() {
27625      return this.numberingPlan !== undefined;
27626    }
27627  }]);
27628}();
27629
27630var NumberingPlan = /*#__PURE__*/function () {
27631  function NumberingPlan(metadata, globalMetadataObject) {
27632    _classCallCheck(this, NumberingPlan);
27633    this.globalMetadataObject = globalMetadataObject;
27634    this.metadata = metadata;
27635    setVersion.call(this, globalMetadataObject.metadata);
27636  }
27637  return _createClass(NumberingPlan, [{
27638    key: "callingCode",
27639    value: function callingCode() {
27640      return this.metadata[0];
27641    }
27642
27643    // Formatting information for regions which share
27644    // a country calling code is contained by only one region
27645    // for performance reasons. For example, for NANPA region
27646    // ("North American Numbering Plan Administration",
27647    //  which includes USA, Canada, Cayman Islands, Bahamas, etc)
27648    // it will be contained in the metadata for `US`.
27649  }, {
27650    key: "getDefaultCountryMetadataForRegion",
27651    value: function getDefaultCountryMetadataForRegion() {
27652      return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());
27653    }
27654
27655    // Is always present.
27656  }, {
27657    key: "IDDPrefix",
27658    value: function IDDPrefix() {
27659      if (this.v1 || this.v2) return;
27660      return this.metadata[1];
27661    }
27662
27663    // Is only present when a country supports multiple IDD prefixes.
27664  }, {
27665    key: "defaultIDDPrefix",
27666    value: function defaultIDDPrefix() {
27667      if (this.v1 || this.v2) return;
27668      return this.metadata[12];
27669    }
27670  }, {
27671    key: "nationalNumberPattern",
27672    value: function nationalNumberPattern() {
27673      if (this.v1 || this.v2) return this.metadata[1];
27674      return this.metadata[2];
27675    }
27676
27677    // "possible length" data is always present in Google's metadata.
27678  }, {
27679    key: "possibleLengths",
27680    value: function possibleLengths() {
27681      if (this.v1) return;
27682      return this.metadata[this.v2 ? 2 : 3];
27683    }
27684  }, {
27685    key: "_getFormats",
27686    value: function _getFormats(metadata) {
27687      return metadata[this.v1 ? 2 : this.v2 ? 3 : 4];
27688    }
27689
27690    // For countries of the same region (e.g. NANPA)
27691    // formats are all stored in the "main" country for that region.
27692    // E.g. "RU" and "KZ", "US" and "CA".
27693  }, {
27694    key: "formats",
27695    value: function formats() {
27696      var _this = this;
27697      var formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || [];
27698      return formats.map(function (_) {
27699        return new Format(_, _this);
27700      });
27701    }
27702  }, {
27703    key: "nationalPrefix",
27704    value: function nationalPrefix() {
27705      return this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5];
27706    }
27707  }, {
27708    key: "_getNationalPrefixFormattingRule",
27709    value: function _getNationalPrefixFormattingRule(metadata) {
27710      return metadata[this.v1 ? 4 : this.v2 ? 5 : 6];
27711    }
27712
27713    // For countries of the same region (e.g. NANPA)
27714    // national prefix formatting rule is stored in the "main" country for that region.
27715    // E.g. "RU" and "KZ", "US" and "CA".
27716  }, {
27717    key: "nationalPrefixFormattingRule",
27718    value: function nationalPrefixFormattingRule() {
27719      return this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion());
27720    }
27721  }, {
27722    key: "_nationalPrefixForParsing",
27723    value: function _nationalPrefixForParsing() {
27724      return this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7];
27725    }
27726  }, {
27727    key: "nationalPrefixForParsing",
27728    value: function nationalPrefixForParsing() {
27729      // If `national_prefix_for_parsing` is not set explicitly,
27730      // then infer it from `national_prefix` (if any)
27731      return this._nationalPrefixForParsing() || this.nationalPrefix();
27732    }
27733  }, {
27734    key: "nationalPrefixTransformRule",
27735    value: function nationalPrefixTransformRule() {
27736      return this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8];
27737    }
27738  }, {
27739    key: "_getNationalPrefixIsOptionalWhenFormatting",
27740    value: function _getNationalPrefixIsOptionalWhenFormatting() {
27741      return !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9];
27742    }
27743
27744    // For countries of the same region (e.g. NANPA)
27745    // "national prefix is optional when formatting" flag is
27746    // stored in the "main" country for that region.
27747    // E.g. "RU" and "KZ", "US" and "CA".
27748  }, {
27749    key: "nationalPrefixIsOptionalWhenFormattingInNationalFormat",
27750    value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {
27751      return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) || this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion());
27752    }
27753  }, {
27754    key: "leadingDigits",
27755    value: function leadingDigits() {
27756      return this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10];
27757    }
27758  }, {
27759    key: "types",
27760    value: function types() {
27761      return this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11];
27762    }
27763  }, {
27764    key: "hasTypes",
27765    value: function hasTypes() {
27766      // Versions 1.2.0 - 1.2.4: can be `[]`.
27767      /* istanbul ignore next */
27768      if (this.types() && this.types().length === 0) {
27769        return false;
27770      }
27771      // Versions <= 1.2.4: can be `undefined`.
27772      // Version >= 1.2.5: can be `0`.
27773      return !!this.types();
27774    }
27775  }, {
27776    key: "type",
27777    value: function type(_type2) {
27778      if (this.hasTypes() && getType(this.types(), _type2)) {
27779        return new Type(getType(this.types(), _type2), this);
27780      }
27781    }
27782  }, {
27783    key: "ext",
27784    value: function ext() {
27785      if (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;
27786      return this.metadata[13] || DEFAULT_EXT_PREFIX;
27787    }
27788  }]);
27789}();
27790var Format = /*#__PURE__*/function () {
27791  function Format(format, metadata) {
27792    _classCallCheck(this, Format);
27793    this._format = format;
27794    this.metadata = metadata;
27795  }
27796  return _createClass(Format, [{
27797    key: "pattern",
27798    value: function pattern() {
27799      return this._format[0];
27800    }
27801  }, {
27802    key: "format",
27803    value: function format() {
27804      return this._format[1];
27805    }
27806  }, {
27807    key: "leadingDigitsPatterns",
27808    value: function leadingDigitsPatterns() {
27809      return this._format[2] || [];
27810    }
27811  }, {
27812    key: "nationalPrefixFormattingRule",
27813    value: function nationalPrefixFormattingRule() {
27814      return this._format[3] || this.metadata.nationalPrefixFormattingRule();
27815    }
27816  }, {
27817    key: "nationalPrefixIsOptionalWhenFormattingInNationalFormat",
27818    value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {
27819      return !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat();
27820    }
27821  }, {
27822    key: "nationalPrefixIsMandatoryWhenFormattingInNationalFormat",
27823    value: function nationalPrefixIsMandatoryWhenFormattingInNationalFormat() {
27824      // National prefix is omitted if there's no national prefix formatting rule
27825      // set for this country, or when the national prefix formatting rule
27826      // contains no national prefix itself, or when this rule is set but
27827      // national prefix is optional for this phone number format
27828      // (and it is not enforced explicitly)
27829      return this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat();
27830    }
27831
27832    // Checks whether national prefix formatting rule contains national prefix.
27833  }, {
27834    key: "usesNationalPrefix",
27835    value: function usesNationalPrefix() {
27836      return this.nationalPrefixFormattingRule() &&
27837      // Check that national prefix formatting rule is not a "dummy" one.
27838      !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule())
27839      // In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`
27840      // when `national_prefix_formatting_rule` is not present.
27841      // So, `true` or `false` are returned explicitly here, so that
27842      // `0` number isn't returned.
27843      ? true : false;
27844    }
27845  }, {
27846    key: "internationalFormat",
27847    value: function internationalFormat() {
27848      return this._format[5] || this.format();
27849    }
27850  }]);
27851}();
27852/**
27853 * A pattern that is used to determine if the national prefix formatting rule
27854 * has the first group only, i.e., does not start with the national prefix.
27855 * Note that the pattern explicitly allows for unbalanced parentheses.
27856 */
27857var FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\(?\$1\)?$/;
27858var Type = /*#__PURE__*/function () {
27859  function Type(type, metadata) {
27860    _classCallCheck(this, Type);
27861    this.type = type;
27862    this.metadata = metadata;
27863  }
27864  return _createClass(Type, [{
27865    key: "pattern",
27866    value: function pattern() {
27867      if (this.metadata.v1) return this.type;
27868      return this.type[0];
27869    }
27870  }, {
27871    key: "possibleLengths",
27872    value: function possibleLengths() {
27873      if (this.metadata.v1) return;
27874      return this.type[1] || this.metadata.possibleLengths();
27875    }
27876  }]);
27877}();
27878function getType(types, type) {
27879  switch (type) {
27880    case 'FIXED_LINE':
27881      return types[0];
27882    case 'MOBILE':
27883      return types[1];
27884    case 'TOLL_FREE':
27885      return types[2];
27886    case 'PREMIUM_RATE':
27887      return types[3];
27888    case 'PERSONAL_NUMBER':
27889      return types[4];
27890    case 'VOICEMAIL':
27891      return types[5];
27892    case 'UAN':
27893      return types[6];
27894    case 'PAGER':
27895      return types[7];
27896    case 'VOIP':
27897      return types[8];
27898    case 'SHARED_COST':
27899      return types[9];
27900  }
27901}
27902function validateMetadata(metadata) {
27903  if (!metadata) {
27904    throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');
27905  }
27906
27907  // `country_phone_code_to_countries` was renamed to `country_calling_codes` in `1.0.18`.
27908  // For that reason, it's not used in this detection algorithm.
27909  // Instead, it detects by `countries: {}` property existence.
27910  if (!(0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metadata) || !(0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metadata.countries)) {
27911    throw new Error("[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got ".concat((0,_helpers_isObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata, "."));
27912  }
27913}
27914
27915// Babel transforms `typeof` into some "branches"
27916// so istanbul will show this as "branch not covered".
27917/* istanbul ignore next */
27918var typeOf = function typeOf(_) {
27919  return _typeof(_);
27920};
27921
27922/**
27923 * Returns extension prefix for a country.
27924 * @param  {string} country
27925 * @param  {object} metadata
27926 * @return {string?}
27927 * @example
27928 * // Returns " ext. "
27929 * getExtPrefix("US")
27930 */
27931function getExtPrefix(country, metadata) {
27932  metadata = new Metadata(metadata);
27933  if (metadata.hasCountry(country)) {
27934    return metadata.selectNumberingPlan(country).ext();
27935  }
27936  return DEFAULT_EXT_PREFIX;
27937}
27938
27939/**
27940 * Returns "country calling code" for a country.
27941 * Throws an error if the country doesn't exist or isn't supported by this library.
27942 * @param  {string} country
27943 * @param  {object} metadata
27944 * @return {string}
27945 * @example
27946 * // Returns "44"
27947 * getCountryCallingCode("GB")
27948 */
27949function getCountryCallingCode(country, metadata) {
27950  metadata = new Metadata(metadata);
27951  if (metadata.hasCountry(country)) {
27952    return metadata.selectNumberingPlan(country).countryCallingCode();
27953  }
27954  throw new Error("Unknown country: ".concat(country));
27955}
27956function isSupportedCountry(country, metadata) {
27957  // metadata = new Metadata(metadata)
27958  // return metadata.hasCountry(country)
27959  return metadata.countries.hasOwnProperty(country);
27960}
27961function setVersion(metadata) {
27962  var version = metadata.version;
27963  if (typeof version === 'number') {
27964    this.v1 = version === 1;
27965    this.v2 = version === 2;
27966    this.v3 = version === 3;
27967    this.v4 = version === 4;
27968  } else {
27969    if (!version) {
27970      this.v1 = true;
27971    } else if ((0,_tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__["default"])(version, V3) === -1) {
27972      this.v2 = true;
27973    } else if ((0,_tools_semver_compare_js__WEBPACK_IMPORTED_MODULE_0__["default"])(version, V4) === -1) {
27974      this.v3 = true;
27975    } else {
27976      this.v4 = true;
27977    }
27978  }
27979}
27980
27981// const ISO_COUNTRY_CODE = /^[A-Z]{2}$/
27982// function isCountryCode(countryCode) {
27983// 	return ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode)
27984// }
27985//# sourceMappingURL=metadata.js.map
27986
27987/***/ }),
27988
vendor: 1,635 bytes, lines 27989-28029
27989/***/ "../node_modules/libphonenumber-js/es6/tools/semver-compare.js":
27990/*!*********************************************************************!*\
27991  !*** ../node_modules/libphonenumber-js/es6/tools/semver-compare.js ***!
27992  \*********************************************************************/
27993/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
27994
27995"use strict";
27996__webpack_require__.r(__webpack_exports__);
27997/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27998/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
27999/* harmony export */ });
28000// Copy-pasted from:
28001// https://github.com/substack/semver-compare/blob/master/index.js
28002//
28003// Inlining this function because some users reported issues with
28004// importing from `semver-compare` in a browser with ES6 "native" modules.
28005//
28006// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc "tags".
28007// https://github.com/catamphetamine/libphonenumber-js/issues/381
28008/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) {
28009  a = a.split('-');
28010  b = b.split('-');
28011  var pa = a[0].split('.');
28012  var pb = b[0].split('.');
28013  for (var i = 0; i < 3; i++) {
28014    var na = Number(pa[i]);
28015    var nb = Number(pb[i]);
28016    if (na > nb) return 1;
28017    if (nb > na) return -1;
28018    if (!isNaN(na) && isNaN(nb)) return 1;
28019    if (isNaN(na) && !isNaN(nb)) return -1;
28020  }
28021  if (a[1] && b[1]) {
28022    return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;
28023  }
28024  return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;
28025}
28026//# sourceMappingURL=semver-compare.js.map
28027
28028/***/ }),
28029
vendor: 85,655 bytes, lines 28030-28044
28030/***/ "../node_modules/libphonenumber-js/metadata.min.json.js":
28031/*!**************************************************************!*\
28032  !*** ../node_modules/libphonenumber-js/metadata.min.json.js ***!
28033  \**************************************************************/
28034/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
28035
28036"use strict";
28037__webpack_require__.r(__webpack_exports__);
28038// This file is a workaround for a bug in web browsers' "native"
28039// ES6 importing system which is uncapable of importing "*.json" files.
28040// https://github.com/catamphetamine/libphonenumber-js/issues/239
28041/* harmony default export */ __webpack_exports__["default"] = ({"version":4,"country_calling_codes":{"1":["US","AG","AI","AS","BB","BM","BS","CA","DM","DO","GD","GU","JM","KN","KY","LC","MP","MS","PR","SX","TC","TT","VC","VG","VI"],"7":["RU","KZ"],"20":["EG"],"27":["ZA"],"30":["GR"],"31":["NL"],"32":["BE"],"33":["FR"],"34":["ES"],"36":["HU"],"39":["IT","VA"],"40":["RO"],"41":["CH"],"43":["AT"],"44":["GB","GG","IM","JE"],"45":["DK"],"46":["SE"],"47":["NO","SJ"],"48":["PL"],"49":["DE"],"51":["PE"],"52":["MX"],"53":["CU"],"54":["AR"],"55":["BR"],"56":["CL"],"57":["CO"],"58":["VE"],"60":["MY"],"61":["AU","CC","CX"],"62":["ID"],"63":["PH"],"64":["NZ"],"65":["SG"],"66":["TH"],"81":["JP"],"82":["KR"],"84":["VN"],"86":["CN"],"90":["TR"],"91":["IN"],"92":["PK"],"93":["AF"],"94":["LK"],"95":["MM"],"98":["IR"],"211":["SS"],"212":["MA","EH"],"213":["DZ"],"216":["TN"],"218":["LY"],"220":["GM"],"221":["SN"],"222":["MR"],"223":["ML"],"224":["GN"],"225":["CI"],"226":["BF"],"227":["NE"],"228":["TG"],"229":["BJ"],"230":["MU"],"231":["LR"],"232":["SL"],"233":["GH"],"234":["NG"],"235":["TD"],"236":["CF"],"237":["CM"],"238":["CV"],"239":["ST"],"240":["GQ"],"241":["GA"],"242":["CG"],"243":["CD"],"244":["AO"],"245":["GW"],"246":["IO"],"247":["AC"],"248":["SC"],"249":["SD"],"250":["RW"],"251":["ET"],"252":["SO"],"253":["DJ"],"254":["KE"],"255":["TZ"],"256":["UG"],"257":["BI"],"258":["MZ"],"260":["ZM"],"261":["MG"],"262":["RE","YT"],"263":["ZW"],"264":["NA"],"265":["MW"],"266":["LS"],"267":["BW"],"268":["SZ"],"269":["KM"],"290":["SH","TA"],"291":["ER"],"297":["AW"],"298":["FO"],"299":["GL"],"350":["GI"],"351":["PT"],"352":["LU"],"353":["IE"],"354":["IS"],"355":["AL"],"356":["MT"],"357":["CY"],"358":["FI","AX"],"359":["BG"],"370":["LT"],"371":["LV"],"372":["EE"],"373":["MD"],"374":["AM"],"375":["BY"],"376":["AD"],"377":["MC"],"378":["SM"],"380":["UA"],"381":["RS"],"382":["ME"],"383":["XK"],"385":["HR"],"386":["SI"],"387":["BA"],"389":["MK"],"420":["CZ"],"421":["SK"],"423":["LI"],"500":["FK"],"501":["BZ"],"502":["GT"],"503":["SV"],"504":["HN"],"505":["NI"],"506":["CR"],"507":["PA"],"508":["PM"],"509":["HT"],"590":["GP","BL","MF"],"591":["BO"],"592":["GY"],"593":["EC"],"594":["GF"],"595":["PY"],"596":["MQ"],"597":["SR"],"598":["UY"],"599":["CW","BQ"],"670":["TL"],"672":["NF"],"673":["BN"],"674":["NR"],"675":["PG"],"676":["TO"],"677":["SB"],"678":["VU"],"679":["FJ"],"680":["PW"],"681":["WF"],"682":["CK"],"683":["NU"],"685":["WS"],"686":["KI"],"687":["NC"],"688":["TV"],"689":["PF"],"690":["TK"],"691":["FM"],"692":["MH"],"850":["KP"],"852":["HK"],"853":["MO"],"855":["KH"],"856":["LA"],"880":["BD"],"886":["TW"],"960":["MV"],"961":["LB"],"962":["JO"],"963":["SY"],"964":["IQ"],"965":["KW"],"966":["SA"],"967":["YE"],"968":["OM"],"970":["PS"],"971":["AE"],"972":["IL"],"973":["BH"],"974":["QA"],"975":["BT"],"976":["MN"],"977":["NP"],"992":["TJ"],"993":["TM"],"994":["AZ"],"995":["GE"],"996":["KG"],"998":["UZ"]},"countries":{"AC":["247","00","(?:[01589]\\d|[46])\\d{4}",[5,6]],"AD":["376","00","(?:1|6\\d)\\d{7}|[135-9]\\d{5}",[6,8,9],[["(\\d{3})(\\d{3})","$1 $2",["[135-9]"]],["(\\d{4})(\\d{4})","$1 $2",["1"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]]]],"AE":["971","00","(?:[4-7]\\d|9[0-689])\\d{7}|800\\d{2,9}|[2-4679]\\d{7}",[5,6,7,8,9,10,11,12],[["(\\d{3})(\\d{2,9})","$1 $2",["60|8"]],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[236]|[479][2-8]"],"0$1"],["(\\d{3})(\\d)(\\d{5})","$1 $2 $3",["[479]"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1"]],"0"],"AF":["93","00","[2-7]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[2-7]"],"0$1"]],"0"],"AG":["1","011","(?:268|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([457]\\d{6})$|1","268$1",0,"268"],"AI":["1","011","(?:264|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2457]\\d{6})$|1","264$1",0,"264"],"AL":["355","00","(?:700\\d\\d|900)\\d{3}|8\\d{5,7}|(?:[2-5]|6\\d)\\d{7}",[6,7,8,9],[["(\\d{3})(\\d{3,4})","$1 $2",["80|9"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["4[2-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2358][2-5]|4"],"0$1"],["(\\d{3})(\\d{5})","$1 $2",["[23578]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["6"],"0$1"]],"0"],"AM":["374","00","(?:[1-489]\\d|55|60|77)\\d{6}",[8],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[89]0"],"0 $1"],["(\\d{3})(\\d{5})","$1 $2",["2|3[12]"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["1|47"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["[3-9]"],"0$1"]],"0"],"AO":["244","00","[29]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[29]"]]]],"AR":["54","00","(?:11|[89]\\d\\d)\\d{8}|[2368]\\d{9}",[10,11],[["(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])","2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)","2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]","2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]"],"0$1",1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["1"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["[23]"],"0$1",1],["(\\d)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))","9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)","9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]","9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]"],"0$1",0,"$1 $2 $3-$4"],["(\\d)(\\d{2})(\\d{4})(\\d{4})","$2 15-$3-$4",["91"],"0$1",0,"$1 $2 $3-$4"],["(\\d{3})(\\d{3})(\\d{5})","$1-$2-$3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4",["9"],"0$1",0,"$1 $2 $3-$4"]],"0",0,"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?","9$1"],"AS":["1","011","(?:[58]\\d\\d|684|900)\\d{7}",[10],0,"1",0,"([267]\\d{6})$|1","684$1",0,"684"],"AT":["43","00","1\\d{3,12}|2\\d{6,12}|43(?:(?:0\\d|5[02-9])\\d{3,9}|2\\d{4,5}|[3467]\\d{4}|8\\d{4,6}|9\\d{4,7})|5\\d{4,12}|8\\d{7,12}|9\\d{8,12}|(?:[367]\\d|4[0-24-9])\\d{4,11}",[4,5,6,7,8,9,10,11,12,13],[["(\\d)(\\d{3,12})","$1 $2",["1(?:11|[2-9])"],"0$1"],["(\\d{3})(\\d{2})","$1 $2",["517"],"0$1"],["(\\d{2})(\\d{3,5})","$1 $2",["5[079]"],"0$1"],["(\\d{3})(\\d{3,10})","$1 $2",["(?:31|4)6|51|6(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]","(?:31|4)6|51|6(?:485|5[0-3579]|[6-9])|7(?:20|32|8)|[89]"],"0$1"],["(\\d{4})(\\d{3,9})","$1 $2",["[2-467]|5[2-6]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["5"],"0$1"],["(\\d{2})(\\d{4})(\\d{4,7})","$1 $2 $3",["5"],"0$1"]],"0"],"AU":["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{7}(?:\\d(?:\\d{2})?)?|8[0-24-9]\\d{7})|[2-478]\\d{8}|1\\d{4,7}",[5,6,7,8,9,10,12],[["(\\d{2})(\\d{3,4})","$1 $2",["16"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,4})","$1 $2 $3",["16"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["14|4"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[2378]"],"(0$1)"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:30|[89])"]]],"0",0,"(183[12])|0",0,0,0,[["(?:(?:2(?:(?:[0-26-9]\\d|3[0-8]|5[0135-9])\\d|4(?:[02-9]\\d|10))|3(?:(?:[0-3589]\\d|6[1-9]|7[0-35-9])\\d|4(?:[0-578]\\d|90))|7(?:[013-57-9]\\d|2[0-8])\\d)\\d\\d|8(?:51(?:0(?:0[03-9]|[12479]\\d|3[2-9]|5[0-8]|6[1-9]|8[0-7])|1(?:[0235689]\\d|1[0-69]|4[0-589]|7[0-47-9])|2(?:0[0-79]|[18][13579]|2[14-9]|3[0-46-9]|[4-6]\\d|7[89]|9[0-4])|[34]\\d\\d)|(?:6[0-8]|[78]\\d)\\d{3}|9(?:[02-9]\\d{3}|1(?:(?:[0-58]\\d|6[0135-9])\\d|7(?:0[0-24-9]|[1-9]\\d)|9(?:[0-46-9]\\d|5[0-79])))))\\d{3}",[9]],["4(?:79[01]|83[0-389]|94[0-478])\\d{5}|4(?:[0-36]\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-37-9])\\d{6}",[9]],["180(?:0\\d{3}|2)\\d{3}",[7,10]],["190[0-26]\\d{6}",[10]],0,0,0,["163\\d{2,6}",[5,6,7,8,9]],["14(?:5(?:1[0458]|[23][458])|71\\d)\\d{4}",[9]],["13(?:00\\d{6}(?:\\d{2})?|45[0-4]\\d{3})|13\\d{4}",[6,8,10,12]]],"0011"],"AW":["297","00","(?:[25-79]\\d\\d|800)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[25-9]"]]]],"AX":["358","00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))","2\\d{4,9}|35\\d{4,5}|(?:60\\d\\d|800)\\d{4,6}|7\\d{5,11}|(?:[14]\\d|3[0-46-9]|50)\\d{4,8}",[5,6,7,8,9,10,11,12],0,"0",0,0,0,0,"18",0,"00"],"AZ":["994","00","365\\d{6}|(?:[124579]\\d|60|88)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["90"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[28]|2|365|46","1[28]|2|365[45]|46","1[28]|2|365(?:4|5[02])|46"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[13-9]"],"0$1"]],"0"],"BA":["387","00","6\\d{8}|(?:[35689]\\d|49|70)\\d{6}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["6[1-3]|[7-9]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2-$3",["[3-5]|6[56]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["6"],"0$1"]],"0"],"BB":["1","011","(?:246|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","246$1",0,"246"],"BD":["880","00","[1-469]\\d{9}|8[0-79]\\d{7,8}|[2-79]\\d{8}|[2-9]\\d{7}|[3-9]\\d{6}|[57-9]\\d{5}",[6,7,8,9,10],[["(\\d{2})(\\d{4,6})","$1-$2",["31[5-8]|[459]1"],"0$1"],["(\\d{3})(\\d{3,7})","$1-$2",["3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]"],"0$1"],["(\\d{4})(\\d{3,6})","$1-$2",["[13-9]|2[23]"],"0$1"],["(\\d)(\\d{7,8})","$1-$2",["2"],"0$1"]],"0"],"BE":["32","00","4\\d{8}|[1-9]\\d{7}",[8,9],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["(?:80|9)0"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[239]|4[23]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[15-8]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4"],"0$1"]],"0"],"BF":["226","00","(?:[025-7]\\d|44)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[024-7]"]]]],"BG":["359","00","00800\\d{7}|[2-7]\\d{6,7}|[89]\\d{6,8}|2\\d{5}",[6,7,8,9,12],[["(\\d)(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["2"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["43[1-6]|70[1-9]"],"0$1"],["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["(?:70|8)0"],"0$1"],["(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3",["43[1-7]|7"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[48]|9[08]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"0$1"]],"0"],"BH":["973","00","[136-9]\\d{7}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[13679]|8[02-4679]"]]]],"BI":["257","00","(?:[267]\\d|31)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2367]"]]]],"BJ":["229","00","(?:01\\d|[24-689])\\d{7}",[8,10],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24-689]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["0"]]]],"BL":["590","00","(?:590\\d|7090)\\d{5}|(?:69|80|9\\d)\\d{7}",[9],0,"0",0,0,0,0,0,[["590(?:2[7-9]|3[3-7]|5[12]|87)\\d{4}"],["(?:69(?:0\\d\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\d)|6(?:1[016-9]|5[0-4]|[67]\\d))|7090[0-4])\\d{4}"],["80[0-5]\\d{6}"],0,0,0,0,0,["9(?:(?:39[5-7]|76[018])\\d|475[0-6])\\d{4}"]]],"BM":["1","011","(?:441|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","441$1",0,"441"],"BN":["673","00","[2-578]\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-578]"]]]],"BO":["591","00(?:1\\d)?","8001\\d{5}|(?:[2-467]\\d|50)\\d{6}",[8,9],[["(\\d)(\\d{7})","$1 $2",["[235]|4[46]"]],["(\\d{8})","$1",["[67]"]],["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["8"]]],"0",0,"0(1\\d)?"],"BQ":["599","00","(?:[34]1|7\\d)\\d{5}",[7],0,0,0,0,0,0,"[347]"],"BR":["55","00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)","[1-467]\\d{9,10}|55[0-46-9]\\d{8}|[34]\\d{7}|55\\d{7,8}|(?:5[0-46-9]|[89]\\d)\\d{7,9}",[8,9,10,11],[["(\\d{4})(\\d{4})","$1-$2",["300|4(?:0[02]|37|86)","300|4(?:0(?:0|20)|370|864)"]],["(\\d{3})(\\d{2,3})(\\d{4})","$1 $2 $3",["(?:[358]|90)0"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]"],"($1)"],["(\\d{2})(\\d{5})(\\d{4})","$1 $2-$3",["[16][1-9]|[2-57-9]"],"($1)"]],"0",0,"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\d{10,11}))?","$2"],"BS":["1","011","(?:242|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([3-8]\\d{6})$|1","242$1",0,"242"],"BT":["975","00","[178]\\d{7}|[2-8]\\d{6}",[7,8],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[2-6]|7[246]|8[2-4]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[67]|[78]"]]]],"BW":["267","00","(?:0800|(?:[37]|800)\\d)\\d{6}|(?:[2-6]\\d|90)\\d{5}",[7,8,10],[["(\\d{2})(\\d{5})","$1 $2",["90"]],["(\\d{3})(\\d{4})","$1 $2",["[24-6]|3[15-9]"]],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[37]"]],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["0"]],["(\\d{3})(\\d{4})(\\d{3})","$1 $2 $3",["8"]]]],"BY":["375","810","(?:[12]\\d|33|44|902)\\d{7}|8(?:0[0-79]\\d{5,7}|[1-7]\\d{9})|8(?:1[0-489]|[5-79]\\d)\\d{7}|8[1-79]\\d{6,7}|8[0-79]\\d{5}|8\\d{5}",[6,7,8,9,10,11],[["(\\d{3})(\\d{3})","$1 $2",["800"],"8 $1"],["(\\d{3})(\\d{2})(\\d{2,4})","$1 $2 $3",["800"],"8 $1"],["(\\d{4})(\\d{2})(\\d{3})","$1 $2-$3",["1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])","1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])"],"8 0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["1(?:[56]|7[467])|2[1-3]"],"8 0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[1-4]"],"8 0$1"],["(\\d{3})(\\d{3,4})(\\d{4})","$1 $2 $3",["[89]"],"8 $1"]],"8",0,"0|80?",0,0,0,0,"8~10"],"BZ":["501","00","(?:0800\\d|[2-8])\\d{6}",[7,11],[["(\\d{3})(\\d{4})","$1-$2",["[2-8]"]],["(\\d)(\\d{3})(\\d{4})(\\d{3})","$1-$2-$3-$4",["0"]]]],"CA":["1","011","[2-9]\\d{9}|3\\d{6}",[7,10],0,"1",0,0,0,0,0,[["(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\d{6}",[10]],["",[10]],["8(?:00|33|44|55|66|77|88)[2-9]\\d{6}",[10]],["900[2-9]\\d{6}",[10]],["52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|(?:5(?:2[125-9]|33|44|66|77|88)|6(?:22|33))[2-9]\\d{6}",[10]],0,["310\\d{4}",[7]],0,["600[2-9]\\d{6}",[10]]]],"CC":["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}",[6,7,8,9,10,12],0,"0",0,"([59]\\d{7})$|0","8$1",0,0,[["8(?:51(?:0(?:02|31|60|89)|1(?:18|76)|223)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:[06]8|22)|4[29]8|62\\d|70[23]|959))\\d{3}",[9]],["4(?:79[01]|83[0-389]|94[0-478])\\d{5}|4(?:[0-36]\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-37-9])\\d{6}",[9]],["180(?:0\\d{3}|2)\\d{3}",[7,10]],["190[0-26]\\d{6}",[10]],0,0,0,0,["14(?:5(?:1[0458]|[23][458])|71\\d)\\d{4}",[9]],["13(?:00\\d{6}(?:\\d{2})?|45[0-4]\\d{3})|13\\d{4}",[6,8,10,12]]],"0011"],"CD":["243","00","(?:(?:[189]|5\\d)\\d|2)\\d{7}|[1-68]\\d{6}",[7,8,9,10],[["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["88"],"0$1"],["(\\d{2})(\\d{5})","$1 $2",["[1-6]"],"0$1"],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[89]"],"0$1"],["(\\d{2})(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["5"],"0$1"]],"0"],"CF":["236","00","(?:[27]\\d{3}|8776)\\d{4}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[278]"]]]],"CG":["242","00","222\\d{6}|(?:0\\d|80)\\d{7}",[9],[["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["8"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[02]"]]]],"CH":["41","00","8\\d{11}|[2-9]\\d{8}",[9,12],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8[047]|90"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-79]|81"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["8"],"0$1"]],"0"],"CI":["225","00","[02]\\d{9}",[10],[["(\\d{2})(\\d{2})(\\d)(\\d{5})","$1 $2 $3 $4",["2"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3 $4",["0"]]]],"CK":["682","00","[2-578]\\d{4}",[5],[["(\\d{2})(\\d{3})","$1 $2",["[2-578]"]]]],"CL":["56","(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0","12300\\d{6}|6\\d{9,10}|[2-9]\\d{8}",[9,10,11],[["(\\d{5})(\\d{4})","$1 $2",["219","2196"],"($1)"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["60|809"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["44"]],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2[1-36]"],"($1)"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["9(?:10|[2-9])"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[1-9])"],"($1)"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["60|8"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]],["(\\d{3})(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3 $4",["60"]]]],"CM":["237","00","[26]\\d{8}|88\\d{6,7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["88"]],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[26]|88"]]]],"CN":["86","00|1(?:[12]\\d|79)\\d\\d00","(?:(?:1[03-689]|2\\d)\\d\\d|6)\\d{8}|1\\d{10}|[126]\\d{6}(?:\\d(?:\\d{2})?)?|86\\d{5,6}|(?:[3-579]\\d|8[0-57-9])\\d{5,9}",[7,8,9,10,11,12],[["(\\d{2})(\\d{5,6})","$1 $2",["(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]","(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\d|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1","10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\d|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12","10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\d|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123","10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\d|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123"],"0$1"],["(\\d{3})(\\d{5,6})","$1 $2",["3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]","(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))[19]","85[23](?:10|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:10|9[56])","85[23](?:100|95)|(?:3(?:[157]\\d|35|49|9[1-68])|4(?:[17]\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))(?:100|9[56])"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["(?:4|80)0"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["10|2(?:[02-57-9]|1[1-9])","10|2(?:[02-57-9]|1[1-9])","10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]"],"0$1",1],["(\\d{3})(\\d{7,8})","$1 $2",["9"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["80"],"0$1",1],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["[3-578]"],"0$1",1],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["1[3-9]"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["[12]"],"0$1",1]],"0",0,"(1(?:[12]\\d|79)\\d\\d)|0",0,0,0,0,"00"],"CO":["57","00(?:4(?:[14]4|56)|[579])","(?:46|60\\d\\d)\\d{6}|(?:1\\d|[39])\\d{9}",[8,10,11],[["(\\d{4})(\\d{4})","$1 $2",["46"]],["(\\d{3})(\\d{7})","$1 $2",["6|90"],"($1)"],["(\\d{3})(\\d{7})","$1 $2",["3[0-357]|9[14]"]],["(\\d)(\\d{3})(\\d{7})","$1-$2-$3",["1"],"0$1",0,"$1 $2 $3"]],"0",0,"0([3579]|4(?:[14]4|56))?"],"CR":["506","00","(?:8\\d|90)\\d{8}|(?:[24-8]\\d{3}|3005)\\d{4}",[8,10],[["(\\d{4})(\\d{4})","$1 $2",["[2-7]|8[3-9]"]],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[89]"]]],0,0,"(19(?:0[0-2468]|1[09]|20|66|77|99))"],"CU":["53","119","(?:[2-7]|8\\d\\d)\\d{7}|[2-47]\\d{6}|[34]\\d{5}",[6,7,8,10],[["(\\d{2})(\\d{4,6})","$1 $2",["2[1-4]|[34]"],"(0$1)"],["(\\d)(\\d{6,7})","$1 $2",["7"],"(0$1)"],["(\\d)(\\d{7})","$1 $2",["[56]"],"0$1"],["(\\d{3})(\\d{7})","$1 $2",["8"],"0$1"]],"0"],"CV":["238","0","(?:[2-59]\\d\\d|800)\\d{4}",[7],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[2-589]"]]]],"CW":["599","00","(?:[34]1|60|(?:7|9\\d)\\d)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["[3467]"]],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["9[4-8]"]]],0,0,0,0,0,"[69]"],"CX":["61","001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011","1(?:[0-79]\\d{8}(?:\\d{2})?|8[0-24-9]\\d{7})|[148]\\d{8}|1\\d{5,7}",[6,7,8,9,10,12],0,"0",0,"([59]\\d{7})$|0","8$1",0,0,[["8(?:51(?:0(?:01|30|59|88)|1(?:17|46|75)|2(?:22|35))|91(?:00[6-9]|1(?:[28]1|49|78)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\d|7(?:0[01]|1[0-2])|958))\\d{3}",[9]],["4(?:79[01]|83[0-389]|94[0-478])\\d{5}|4(?:[0-36]\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-37-9])\\d{6}",[9]],["180(?:0\\d{3}|2)\\d{3}",[7,10]],["190[0-26]\\d{6}",[10]],0,0,0,0,["14(?:5(?:1[0458]|[23][458])|71\\d)\\d{4}",[9]],["13(?:00\\d{6}(?:\\d{2})?|45[0-4]\\d{3})|13\\d{4}",[6,8,10,12]]],"0011"],"CY":["357","00","(?:[279]\\d|[58]0)\\d{6}",[8],[["(\\d{2})(\\d{6})","$1 $2",["[257-9]"]]]],"CZ":["420","00","(?:[2-578]\\d|60)\\d{7}|9\\d{8,11}",[9,10,11,12],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]|9[015-7]"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{2})","$1 $2 $3 $4",["96"]],["(\\d{2})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]]]],"DE":["49","00","[2579]\\d{5,14}|49(?:[34]0|69|8\\d)\\d\\d?|49(?:37|49|60|7[089]|9\\d)\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\d{1,8}|(?:1|[368]\\d|4[0-8])\\d{3,13}|49(?:[015]\\d|2[13]|31|[46][1-8])\\d{1,9}",[4,5,6,7,8,9,10,11,12,13,14,15],[["(\\d{2})(\\d{3,13})","$1 $2",["3[02]|40|[68]9"],"0$1"],["(\\d{3})(\\d{3,12})","$1 $2",["2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1","2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1"],"0$1"],["(\\d{4})(\\d{2,11})","$1 $2",["[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]","[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["138"],"0$1"],["(\\d{5})(\\d{2,10})","$1 $2",["3"],"0$1"],["(\\d{3})(\\d{5,11})","$1 $2",["181"],"0$1"],["(\\d{3})(\\d)(\\d{4,10})","$1 $2 $3",["1(?:3|80)|9"],"0$1"],["(\\d{3})(\\d{7,8})","$1 $2",["1[67]"],"0$1"],["(\\d{3})(\\d{7,12})","$1 $2",["8"],"0$1"],["(\\d{5})(\\d{6})","$1 $2",["185","1850","18500"],"0$1"],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{4})(\\d{7})","$1 $2",["18[68]"],"0$1"],["(\\d{4})(\\d{7})","$1 $2",["15[1279]"],"0$1"],["(\\d{5})(\\d{6})","$1 $2",["15[03568]","15(?:[0568]|3[13])"],"0$1"],["(\\d{3})(\\d{8})","$1 $2",["18"],"0$1"],["(\\d{3})(\\d{2})(\\d{7,8})","$1 $2 $3",["1(?:6[023]|7)"],"0$1"],["(\\d{4})(\\d{2})(\\d{7})","$1 $2 $3",["15[279]"],"0$1"],["(\\d{3})(\\d{2})(\\d{8})","$1 $2 $3",["15"],"0$1"]],"0"],"DJ":["253","00","(?:2\\d|77)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[27]"]]]],"DK":["45","00","[2-9]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-9]"]]]],"DM":["1","011","(?:[58]\\d\\d|767|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","767$1",0,"767"],"DO":["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,0,0,0,"8001|8[024]9"],"DZ":["213","00","(?:[1-4]|[5-79]\\d|80)\\d{7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-4]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-8]"],"0$1"]],"0"],"EC":["593","00","1\\d{9,10}|(?:[2-7]|9\\d)\\d{7}",[8,9,10,11],[["(\\d)(\\d{3})(\\d{4})","$1 $2-$3",["[2-7]"],"(0$1)",0,"$1-$2-$3"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["9"],"0$1"],["(\\d{4})(\\d{3})(\\d{3,4})","$1 $2 $3",["1"]]],"0"],"EE":["372","00","8\\d{9}|[4578]\\d{7}|(?:[3-8]\\d|90)\\d{5}",[7,8,10],[["(\\d{3})(\\d{4})","$1 $2",["[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88","[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88"]],["(\\d{4})(\\d{3,4})","$1 $2",["[45]|8(?:00|[1-49])","[45]|8(?:00[1-9]|[1-49])"]],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["7"]],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["8"]]]],"EG":["20","00","[189]\\d{8,9}|[24-6]\\d{8}|[135]\\d{7}",[8,9,10],[["(\\d)(\\d{7,8})","$1 $2",["[23]"],"0$1"],["(\\d{2})(\\d{6,7})","$1 $2",["1[35]|[4-6]|8[2468]|9[235-7]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"],"0$1"],["(\\d{2})(\\d{8})","$1 $2",["1"],"0$1"]],"0"],"EH":["212","00","[5-8]\\d{8}",[9],0,"0",0,0,0,0,"528[89]"],"ER":["291","00","[178]\\d{6}",[7],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[178]"],"0$1"]],"0"],"ES":["34","00","[5-9]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[89]00"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-9]"]]]],"ET":["251","00","(?:11|[2-579]\\d)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-579]"],"0$1"]],"0"],"FI":["358","00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))","[1-35689]\\d{4}|7\\d{10,11}|(?:[124-7]\\d|3[0-46-9])\\d{8}|[1-9]\\d{5,8}",[5,6,7,8,9,10,11,12],[["(\\d{5})","$1",["20[2-59]"],"0$1"],["(\\d{3})(\\d{3,7})","$1 $2",["(?:[1-3]0|[68])0|70[07-9]"],"0$1"],["(\\d{2})(\\d{4,8})","$1 $2",["[14]|2[09]|50|7[135]"],"0$1"],["(\\d{2})(\\d{6,10})","$1 $2",["7"],"0$1"],["(\\d)(\\d{4,9})","$1 $2",["(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9"],"0$1"]],"0",0,0,0,0,"1[03-79]|[2-9]",0,"00"],"FJ":["679","0(?:0|52)","45\\d{5}|(?:0800\\d|[235-9])\\d{6}",[7,11],[["(\\d{3})(\\d{4})","$1 $2",["[235-9]|45"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["0"]]],0,0,0,0,0,0,0,"00"],"FK":["500","00","[2-7]\\d{4}",[5]],"FM":["691","00","(?:[39]\\d\\d|820)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[389]"]]]],"FO":["298","00","[2-9]\\d{5}",[6],[["(\\d{6})","$1",["[2-9]"]]],0,0,"(10(?:01|[12]0|88))"],"FR":["33","00","[1-9]\\d{8}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0 $1"],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"],"0$1"]],"0"],"GA":["241","00","(?:[067]\\d|11)\\d{6}|[2-7]\\d{6}",[7,8],[["(\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-7]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["11|[67]"],"0$1"]],0,0,"0(11\\d{6}|60\\d{6}|61\\d{6}|6[256]\\d{6}|7[467]\\d{6})","$1"],"GB":["44","00","[1-357-9]\\d{9}|[18]\\d{8}|8\\d{6}",[7,9,10],[["(\\d{3})(\\d{4})","$1 $2",["800","8001","80011","800111","8001111"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["845","8454","84546","845464"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["800"],"0$1"],["(\\d{5})(\\d{4,5})","$1 $2",["1(?:38|5[23]|69|76|94)","1(?:(?:38|69)7|5(?:24|39)|768|946)","1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)"],"0$1"],["(\\d{4})(\\d{5,6})","$1 $2",["1(?:[2-69][02-9]|[78])"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[25]|7(?:0|6[02-9])","[25]|7(?:0|6(?:[03-9]|2[356]))"],"0$1"],["(\\d{4})(\\d{6})","$1 $2",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[1389]"],"0$1"]],"0",0,"0|180020",0,0,0,[["(?:1(?:1(?:3(?:[0-58]\\d\\d|73[0-35])|4(?:(?:[0-5]\\d|70)\\d|69[7-9])|(?:(?:5[0-26-9]|[78][0-49])\\d|6(?:[0-4]\\d|50))\\d)|(?:2(?:(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\d)\\d|1(?:[0-7]\\d|8[0-3]))|(?:3(?:0\\d|1[0-8]|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[137]\\d|[28][02-57-9]|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|[16]\\d|2[024-9]|3[015689]|4[02-9]|5[03-9]|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|1\\d|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0-24578])|7(?:0[0246-9]|2\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[02-9]|9[02569])|9(?:0[02-589]|[18]\\d|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|9[2-57]))\\d)\\d)|2(?:0[013478]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\d{3})\\d{4}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[3-5])))|3(?:6(?:38[2-5]|47[23])|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[1-3]))|5(?:2(?:4(?:3[2-79]|6\\d)|76\\d)|6(?:26[06-9]|686))|6(?:06(?:4\\d|7[4-79])|295[5-7]|35[34]\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|9(?:55[0-4]|77[23]))|7(?:26(?:6[13-9]|7[0-7])|(?:442|688)\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\d|37(?:5[2-5]|8[239])|843[2-58])|9(?:0(?:0(?:6[1-8]|85)|52\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\d{3}",[9,10]],["7(?:457[0-57-9]|700[01]|911[028])\\d{5}|7(?:[1-3]\\d\\d|4(?:[0-46-9]\\d|5[0-689])|5(?:0[0-8]|[13-9]\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\d|8[02-9]|9[0-689])|8(?:[014-9]\\d|[23][0-8])|9(?:[024-9]\\d|1[02-9]|3[0-689]))\\d{6}",[10]],["80[08]\\d{7}|800\\d{6}|8001111"],["(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\d|8[2-49]))\\d{7}|845464\\d",[7,10]],["70\\d{8}",[10]],0,["(?:3[0347]|55)\\d{8}",[10]],["76(?:464|652)\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\d{6}",[10]],["56\\d{8}",[10]]],0," x"],"GD":["1","011","(?:473|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","473$1",0,"473"],"GE":["995","00","(?:[3-57]\\d\\d|800)\\d{6}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["70"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["32"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[57]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[348]"],"0$1"]],"0"],"GF":["594","00","(?:[56]94\\d|7093)\\d{5}|(?:80|9\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-7]|9[47]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[89]"],"0$1"]],"0"],"GG":["44","00","(?:1481|[357-9]\\d{3})\\d{6}|8\\d{6}(?:\\d{2})?",[7,9,10],0,"0",0,"([25-9]\\d{5})$|0|180020","1481$1",0,0,[["1481[25-9]\\d{5}",[10]],["7(?:(?:781|839)\\d|911[17])\\d{5}",[10]],["80[08]\\d{7}|800\\d{6}|8001111"],["(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\d|8[0-3]))\\d{7}|845464\\d",[7,10]],["70\\d{8}",[10]],0,["(?:3[0347]|55)\\d{8}",[10]],["76(?:464|652)\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\d{6}",[10]],["56\\d{8}",[10]]]],"GH":["233","00","(?:[235]\\d{3}|800)\\d{5}",[8,9],[["(\\d{3})(\\d{5})","$1 $2",["8"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[235]"],"0$1"]],"0"],"GI":["350","00","(?:[25]\\d|60)\\d{6}",[8],[["(\\d{3})(\\d{5})","$1 $2",["2"]]]],"GL":["299","00","(?:19|[2-689]\\d|70)\\d{4}",[6],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["19|[2-9]"]]]],"GM":["220","00","[2-9]\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-9]"]]]],"GN":["224","00","722\\d{6}|(?:3|6\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["3"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[67]"]]]],"GP":["590","00","(?:590\\d|7090)\\d{5}|(?:69|80|9\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-79]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0",0,0,0,0,0,[["590(?:0[1-68]|[14][0-24-9]|2[0-68]|3[1-9]|5[3-579]|[68][0-689]|7[08]|9\\d)\\d{4}"],["(?:69(?:0\\d\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\d)|6(?:1[016-9]|5[0-4]|[67]\\d))|7090[0-4])\\d{4}"],["80[0-5]\\d{6}"],0,0,0,0,0,["9(?:(?:39[5-7]|76[018])\\d|475[0-6])\\d{4}"]]],"GQ":["240","00","222\\d{6}|(?:3\\d|55|[89]0)\\d{7}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235]"]],["(\\d{3})(\\d{6})","$1 $2",["[89]"]]]],"GR":["30","00","5005000\\d{3}|8\\d{9,11}|(?:[269]\\d|70)\\d{8}",[10,11,12],[["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["21|7"]],["(\\d{4})(\\d{6})","$1 $2",["2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2689]"]],["(\\d{3})(\\d{3,4})(\\d{5})","$1 $2 $3",["8"]]]],"GT":["502","00","80\\d{6}|(?:1\\d{3}|[2-7])\\d{7}",[8,11],[["(\\d{4})(\\d{4})","$1 $2",["[2-8]"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]]]],"GU":["1","011","(?:[58]\\d\\d|671|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","671$1",0,"671"],"GW":["245","00","[49]\\d{8}|4\\d{6}",[7,9],[["(\\d{3})(\\d{4})","$1 $2",["40"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[49]"]]]],"GY":["592","001","(?:[2-8]\\d{3}|9008)\\d{3}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-9]"]]]],"HK":["852","00(?:30|5[09]|[126-9]?)","8[0-46-9]\\d{6,7}|9\\d{4,7}|(?:[2-7]|9\\d{3})\\d{7}",[5,6,7,8,9,11],[["(\\d{3})(\\d{2,5})","$1 $2",["900","9003"]],["(\\d{4})(\\d{4})","$1 $2",["[2-7]|8[1-4]|9(?:0[1-9]|[1-8])"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]],["(\\d{3})(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]]],0,0,0,0,0,0,0,"00"],"HN":["504","00","8\\d{10}|[237-9]\\d{7}",[8,11],[["(\\d{4})(\\d{4})","$1-$2",["[237-9]"]]]],"HR":["385","00","[2-69]\\d{8}|80\\d{5,7}|[1-79]\\d{7}|6\\d{6}",[7,8,9],[["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["6[01]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{4})(\\d{3})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["6|7[245]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["9"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-57]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"],"0$1"]],"0"],"HT":["509","00","[2-589]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[2-589]"]]]],"HU":["36","00","[235-7]\\d{8}|[1-9]\\d{7}",[8,9],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"(06 $1)"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]"],"(06 $1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"],"06 $1"]],"06"],"ID":["62","00[89]","00[1-9]\\d{9,14}|(?:[1-36]|8\\d{5})\\d{6}|00\\d{9}|[1-9]\\d{8,10}|[2-9]\\d{7}",[7,8,9,10,11,12,13,14,15,16,17],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["15"]],["(\\d{2})(\\d{5,9})","$1 $2",["2[124]|[36]1"],"(0$1)"],["(\\d{3})(\\d{5,7})","$1 $2",["800"],"0$1"],["(\\d{3})(\\d{5,8})","$1 $2",["[2-79]"],"(0$1)"],["(\\d{3})(\\d{3,4})(\\d{3})","$1-$2-$3",["8[1-35-9]"],"0$1"],["(\\d{3})(\\d{6,8})","$1 $2",["1"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["804"],"0$1"],["(\\d{3})(\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4",["80"],"0$1"],["(\\d{3})(\\d{4})(\\d{4,5})","$1-$2-$3",["8"],"0$1"]],"0"],"IE":["353","00","(?:1\\d|[2569])\\d{6,8}|4\\d{6,9}|7\\d{8}|8\\d{8,9}",[7,8,9,10],[["(\\d{2})(\\d{5})","$1 $2",["2[24-9]|47|58|6[237-9]|9[35-9]"],"(0$1)"],["(\\d{3})(\\d{5})","$1 $2",["[45]0"],"(0$1)"],["(\\d)(\\d{3,4})(\\d{4})","$1 $2 $3",["1"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2569]|4[1-69]|7[14]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["70"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["81"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[78]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["4"],"(0$1)"],["(\\d{2})(\\d)(\\d{3})(\\d{4})","$1 $2 $3 $4",["8"],"0$1"]],"0"],"IL":["972","0(?:0|1[2-9])","1\\d{6}(?:\\d{3,5})?|[57]\\d{8}|[1-489]\\d{7}",[7,8,9,10,11,12],[["(\\d{4})(\\d{3})","$1-$2",["125"]],["(\\d{4})(\\d{2})(\\d{2})","$1-$2-$3",["121"]],["(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[2-489]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[57]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1-$2-$3",["12"]],["(\\d{4})(\\d{6})","$1-$2",["159"]],["(\\d)(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3-$4",["1[7-9]"]],["(\\d{3})(\\d{1,2})(\\d{3})(\\d{4})","$1-$2 $3-$4",["15"]]],"0"],"IM":["44","00","1624\\d{6}|(?:[3578]\\d|90)\\d{8}",[10],0,"0",0,"([25-8]\\d{5})$|0|180020","1624$1",0,"74576|(?:16|7[56])24"],"IN":["91","00","(?:000800|[2-9]\\d\\d)\\d{7}|1\\d{7,12}",[8,9,10,11,12,13],[["(\\d{8})","$1",["5(?:0|2[23]|3[03]|[67]1|88)","5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)","5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)"],0,1],["(\\d{4})(\\d{4,5})","$1 $2",["180","1800"],0,1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["140"],0,1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["11|2[02]|33|4[04]|79[1-7]|80[2-46]","11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])","11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])"],"0$1",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]","1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]","1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]"],"0$1",1],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807","1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]","1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\d|7(?:1(?:[013-8]\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\d|5[0-367])|70[13-7]))[2-7]"],"0$1",1],["(\\d{5})(\\d{5})","$1 $2",["[6-9]"],"0$1",1],["(\\d{4})(\\d{2,4})(\\d{4})","$1 $2 $3",["1(?:6|8[06])","1(?:6|8[06]0)"],0,1],["(\\d{4})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["18"],0,1]],"0"],"IO":["246","00","3\\d{6}",[7],[["(\\d{3})(\\d{4})","$1 $2",["3"]]]],"IQ":["964","00","(?:1|7\\d\\d)\\d{7}|[2-6]\\d{7,8}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-6]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"]],"0"],"IR":["98","00","[1-9]\\d{9}|(?:[1-8]\\d\\d|9)\\d{3,4}",[4,5,6,7,10],[["(\\d{4,5})","$1",["96"],"0$1"],["(\\d{2})(\\d{4,5})","$1 $2",["(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["9"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[1-8]"],"0$1"]],"0"],"IS":["354","00|1(?:0(?:01|[12]0)|100)","(?:38\\d|[4-9])\\d{6}",[7,9],[["(\\d{3})(\\d{4})","$1 $2",["[4-9]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["3"]]],0,0,0,0,0,0,0,"00"],"IT":["39","00","0\\d{5,11}|1\\d{8,10}|3(?:[0-8]\\d{7,10}|9\\d{7,8})|(?:43|55|70)\\d{8}|8\\d{5}(?:\\d{2,4})?",[6,7,8,9,10,11,12],[["(\\d{2})(\\d{4,6})","$1 $2",["0[26]"]],["(\\d{3})(\\d{3,6})","$1 $2",["0[13-57-9][0159]|8(?:03|4[17]|9[2-5])","0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))"]],["(\\d{4})(\\d{2,6})","$1 $2",["0(?:[13-579][2-46-8]|8[236-8])"]],["(\\d{4})(\\d{4})","$1 $2",["894"]],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["0[26]|5"]],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["1(?:44|[679])|[378]|43"]],["(\\d{3})(\\d{3,4})(\\d{4})","$1 $2 $3",["0[13-57-9][0159]|14"]],["(\\d{2})(\\d{4})(\\d{5})","$1 $2 $3",["0[26]"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["0"]],["(\\d{3})(\\d{4})(\\d{4,5})","$1 $2 $3",["[03]"]]],0,0,0,0,0,0,[["0(?:669[0-79]\\d{1,6}|831\\d{2,8})|0(?:1(?:[0159]\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|2\\d\\d|3(?:[0159]\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|6(?:[0-57-9]\\d|6[0-8])|7(?:[0159]\\d|2[12]|3[1-7]|4[2-46]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\d|2[3-578]|3[2356]|[6-8][1-5])|9(?:[0159]\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\d{2,7}"],["3[2-9]\\d{7,8}|(?:31|43)\\d{8}",[9,10]],["80(?:0\\d{3}|3)\\d{3}",[6,9]],["(?:0878\\d{3}|89(?:2\\d|3[04]|4(?:[0-4]|[5-9]\\d\\d)|5[0-4]))\\d\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\d{6}",[6,8,9,10]],["1(?:78\\d|99)\\d{6}",[9,10]],["3[2-8]\\d{9,10}",[11,12]],0,0,["55\\d{8}",[10]],["84(?:[08]\\d{3}|[17])\\d{3}",[6,9]]]],"JE":["44","00","1534\\d{6}|(?:[3578]\\d|90)\\d{8}",[10],0,"0",0,"([0-24-8]\\d{5})$|0|180020","1534$1",0,0,[["1534[0-24-8]\\d{5}"],["7(?:(?:(?:50|82)9|937)\\d|7(?:00[378]|97\\d))\\d{5}"],["80(?:07(?:35|81)|8901)\\d{4}"],["(?:8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|90(?:066[59]|1810|71(?:07|55)))\\d{4}"],["701511\\d{4}"],0,["(?:3(?:0(?:07(?:35|81)|8901)|3\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|55\\d{4})\\d{4}"],["76(?:464|652)\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\d{6}"],["56\\d{8}"]]],"JM":["1","011","(?:[58]\\d\\d|658|900)\\d{7}",[10],0,"1",0,0,0,0,"658|876"],"JO":["962","00","(?:(?:[2689]|7\\d)\\d|32|427|53)\\d{6}",[8,9],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2356]|87"],"(0$1)"],["(\\d{3})(\\d{5,6})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["70"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[47]"],"0$1"]],"0"],"JP":["81","010","00[1-9]\\d{6,14}|[25-9]\\d{9}|(?:00|[1-9]\\d\\d)\\d{6}",[8,9,10,11,12,13,14,15,16,17],[["(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3",["(?:12|57|99)0"],"0$1"],["(\\d{4})(\\d)(\\d{4})","$1-$2-$3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])","1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]","1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["60"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["3|4(?:2[09]|7[01])|6[1-9]","3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])","1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]","1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]"],"0$1"],["(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["[14]|[289][2-9]|5[3-9]|7[2-4679]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["800"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[25-9]"],"0$1"]],"0",0,"(000[2569]\\d{4,6})$|(?:(?:003768)0?)|0","$1"],"KE":["254","000","(?:[17]\\d\\d|900)\\d{6}|(?:2|80)0\\d{6,7}|[4-6]\\d{6,8}",[7,8,9,10],[["(\\d{2})(\\d{5,7})","$1 $2",["[24-6]"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["[17]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"],"0$1"]],"0"],"KG":["996","00","8\\d{9}|[235-9]\\d{8}",[9,10],[["(\\d{4})(\\d{5})","$1 $2",["3(?:1[346]|[24-79])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235-79]|88"],"0$1"],["(\\d{3})(\\d{3})(\\d)(\\d{2,3})","$1 $2 $3 $4",["8"],"0$1"]],"0"],"KH":["855","00[14-9]","1\\d{9}|[1-9]\\d{7,8}",[8,9,10],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-9]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0"],"KI":["686","00","(?:[37]\\d|6[0-79])\\d{6}|(?:[2-48]\\d|50)\\d{3}",[5,8],0,"0"],"KM":["269","00","[3478]\\d{6}",[7],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[3478]"]]]],"KN":["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","869$1",0,"869"],"KP":["850","00|99","85\\d{6}|(?:19\\d|[2-7])\\d{7}",[8,10],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2-7]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"]],"0"],"KR":["82","00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))","00[1-9]\\d{8,11}|(?:[12]|5\\d{3})\\d{7}|[13-6]\\d{9}|(?:[1-6]\\d|80)\\d{7}|[3-6]\\d{4,5}|(?:00|7)0\\d{8}",[5,6,8,9,10,11,12,13,14],[["(\\d{2})(\\d{3,4})","$1-$2",["(?:3[1-3]|[46][1-4]|5[1-5])1"],"0$1"],["(\\d{4})(\\d{4})","$1-$2",["1"]],["(\\d)(\\d{3,4})(\\d{4})","$1-$2-$3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[36]0|8"],"0$1"],["(\\d{2})(\\d{3,4})(\\d{4})","$1-$2-$3",["[1346]|5[1-5]"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[57]"],"0$1"],["(\\d{2})(\\d{5})(\\d{4})","$1-$2-$3",["5"],"0$1"]],"0",0,"0(8(?:[1-46-8]|5\\d\\d))?"],"KW":["965","00","18\\d{5}|(?:[2569]\\d|41)\\d{6}",[7,8],[["(\\d{4})(\\d{3,4})","$1 $2",["[169]|2(?:[235]|4[1-35-9])|52"]],["(\\d{3})(\\d{5})","$1 $2",["[245]"]]]],"KY":["1","011","(?:345|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","345$1",0,"345"],"KZ":["7","810","(?:33622|8\\d{8})\\d{5}|[78]\\d{9}",[10,14],0,"8",0,0,0,0,"33622|7",0,"8~10"],"LA":["856","00","[23]\\d{9}|3\\d{8}|(?:[235-8]\\d|41)\\d{6}",[8,9,10],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2[13]|3[14]|[4-8]"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["3"],"0$1"],["(\\d{2})(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[23]"],"0$1"]],"0"],"LB":["961","00","[27-9]\\d{7}|[13-9]\\d{6}",[7,8],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-69]|7(?:[2-57]|62|8[0-6]|9[04-9])|8[02-9]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[27-9]"]]],"0"],"LC":["1","011","(?:[58]\\d\\d|758|900)\\d{7}",[10],0,"1",0,"([2-8]\\d{6})$|1","758$1",0,"758"],"LI":["423","00","[68]\\d{8}|(?:[2378]\\d|90)\\d{5}",[7,9],[["(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[2379]|8(?:0[09]|7)","[2379]|8(?:0(?:02|9)|7)"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["69"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]]],"0",0,"(1001)|0"],"LK":["94","00","[1-9]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[1-689]"],"0$1"]],"0"],"LR":["231","00","(?:[2457]\\d|33|88)\\d{7}|(?:2\\d|[4-6])\\d{6}",[7,8,9],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["4[67]|[56]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[2-578]"],"0$1"]],"0"],"LS":["266","00","(?:[256]\\d\\d|800)\\d{5}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[2568]"]]]],"LT":["370","00","(?:[3469]\\d|52|[78]0)\\d{6}",[8],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["52[0-7]"],"(0-$1)",1],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[7-9]"],"0 $1",1],["(\\d{2})(\\d{6})","$1 $2",["37|4(?:[15]|6[1-8])"],"(0-$1)",1],["(\\d{3})(\\d{5})","$1 $2",["[3-6]"],"(0-$1)",1]],"0",0,"[08]"],"LU":["352","00","35[013-9]\\d{4,8}|6\\d{8}|35\\d{2,4}|(?:[2457-9]\\d|3[0-46-9])\\d{2,9}",[4,5,6,7,8,9,10,11],[["(\\d{2})(\\d{3})","$1 $2",["2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])"]],["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])"]],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["20[2-689]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4",["2(?:[0367]|4[3-8])"]],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["80[01]|90[015]"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["20"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})","$1 $2 $3 $4 $5",["2(?:[0367]|4[3-8])"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{1,5})","$1 $2 $3 $4",["[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]"]]],0,0,"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\d)"],"LV":["371","00","(?:[268]\\d|78|90)\\d{6}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2679]|8[01]"]]]],"LY":["218","00","[2-9]\\d{8}",[9],[["(\\d{2})(\\d{7})","$1-$2",["[2-9]"],"0$1"]],"0"],"MA":["212","00","[5-8]\\d{8}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["5[45]"],"0$1"],["(\\d{4})(\\d{5})","$1-$2",["5(?:2[2-46-9]|3[3-9]|9)|8(?:0[89]|92)"],"0$1"],["(\\d{2})(\\d{7})","$1-$2",["8"],"0$1"],["(\\d{3})(\\d{6})","$1-$2",["[5-7]"],"0$1"]],"0",0,0,0,0,0,[["5(?:2(?:[0-25-79]\\d|3[1-578]|4[02-46-8]|8[0235-7])|3(?:[0-47]\\d|5[02-9]|6[02-8]|8[014-9]|9[3-9])|(?:4[067]|5[03])\\d)\\d{5}"],["(?:6(?:[0-79]\\d|8[0-247-9])|7(?:[0167]\\d|2[0-8]|5[0-5]|8[0-7]))\\d{6}"],["80[0-7]\\d{6}"],["89\\d{7}"],0,0,0,0,["(?:592(?:4[0-2]|93)|80[89]\\d\\d)\\d{4}"]]],"MC":["377","00","(?:[3489]|6\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["4"],"0$1"],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[389]"]],["(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["6"],"0$1"]],"0"],"MD":["373","00","(?:[235-7]\\d|[89]0)\\d{6}",[8],[["(\\d{3})(\\d{5})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["22|3"],"0$1"],["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["[25-7]"],"0$1"]],"0"],"ME":["382","00","(?:20|[3-79]\\d)\\d{6}|80\\d{6,7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"],"0$1"]],"0"],"MF":["590","00","(?:590\\d|7090)\\d{5}|(?:69|80|9\\d)\\d{7}",[9],0,"0",0,0,0,0,0,[["590(?:0[079]|[14]3|[27][79]|3[03-7]|5[0-268]|87)\\d{4}"],["(?:69(?:0\\d\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\d)|6(?:1[016-9]|5[0-4]|[67]\\d))|7090[0-4])\\d{4}"],["80[0-5]\\d{6}"],0,0,0,0,0,["9(?:(?:39[5-7]|76[018])\\d|475[0-6])\\d{4}"]]],"MG":["261","00","[23]\\d{8}",[9],[["(\\d{2})(\\d{2})(\\d{3})(\\d{2})","$1 $2 $3 $4",["[23]"],"0$1"]],"0",0,"([24-9]\\d{6})$|0","20$1"],"MH":["692","011","329\\d{4}|(?:[256]\\d|45)\\d{5}",[7],[["(\\d{3})(\\d{4})","$1-$2",["[2-6]"]]],"1"],"MK":["389","00","[2-578]\\d{7}",[8],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2|34[47]|4(?:[37]7|5[47]|64)"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[347]"],"0$1"],["(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["[58]"],"0$1"]],"0"],"ML":["223","00","[24-9]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24-9]"]]]],"MM":["95","00","1\\d{5,7}|95\\d{6}|(?:[4-7]|9[0-46-9])\\d{6,8}|(?:2|8\\d)\\d{5,8}",[6,7,8,9,10],[["(\\d)(\\d{2})(\\d{3})","$1 $2 $3",["16|2"],"0$1"],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]"],"0$1"],["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[12]|452|678|86","[12]|452|6788|86"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[4-7]|8[1-35]"],"0$1"],["(\\d)(\\d{3})(\\d{4,6})","$1 $2 $3",["9(?:2[0-4]|[35-9]|4[137-9])"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["92"],"0$1"],["(\\d)(\\d{5})(\\d{4})","$1 $2 $3",["9"],"0$1"]],"0"],"MN":["976","001","[12]\\d{7,9}|[5-9]\\d{7}",[8,9,10],[["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[12]1"],"0$1"],["(\\d{4})(\\d{4})","$1 $2",["[5-9]"]],["(\\d{3})(\\d{5,6})","$1 $2",["[12]2[1-3]"],"0$1"],["(\\d{4})(\\d{5,6})","$1 $2",["[12](?:27|3[2-8]|4[2-68]|5[1-4689])","[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]"],"0$1"],["(\\d{5})(\\d{4,5})","$1 $2",["[12]"],"0$1"]],"0"],"MO":["853","00","0800\\d{3}|(?:28|[68]\\d)\\d{6}",[7,8],[["(\\d{4})(\\d{3})","$1 $2",["0"]],["(\\d{4})(\\d{4})","$1 $2",["[268]"]]]],"MP":["1","011","[58]\\d{9}|(?:67|90)0\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","670$1",0,"670"],"MQ":["596","00","(?:596\\d|7091)\\d{5}|(?:69|[89]\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-79]|8(?:0[6-9]|[36])"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0"],"MR":["222","00","(?:[2-4]\\d\\d|800)\\d{5}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-48]"]]]],"MS":["1","011","(?:[58]\\d\\d|664|900)\\d{7}",[10],0,"1",0,"([34]\\d{6})$|1","664$1",0,"664"],"MT":["356","00","3550\\d{4}|(?:[2579]\\d\\d|800)\\d{5}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[2357-9]"]]]],"MU":["230","0(?:0|[24-7]0|3[03])","(?:[57]|8\\d\\d)\\d{7}|[2-468]\\d{6}",[7,8,10],[["(\\d{3})(\\d{4})","$1 $2",["[2-46]|8[013]"]],["(\\d{4})(\\d{4})","$1 $2",["[57]"]],["(\\d{5})(\\d{5})","$1 $2",["8"]]],0,0,0,0,0,0,0,"020"],"MV":["960","0(?:0|19)","(?:800|9[0-57-9]\\d)\\d{7}|[34679]\\d{6}",[7,10],[["(\\d{3})(\\d{4})","$1-$2",["[34679]"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"]]],0,0,0,0,0,0,0,"00"],"MW":["265","00","(?:[1289]\\d|31|77)\\d{7}|1\\d{6}",[7,9],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["1[2-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["2"],"0$1"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[137-9]"],"0$1"]],"0"],"MX":["52","0[09]","[2-9]\\d{9}",[10],[["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["33|5[56]|81"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2-9]"]]],0,0,0,0,0,0,0,"00"],"MY":["60","00","1\\d{8,9}|(?:3\\d|[4-9])\\d{7}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1-$2 $3",["[4-79]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1-$2 $3",["1(?:[02469]|[378][1-9]|53)|8","1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8"],"0$1"],["(\\d)(\\d{4})(\\d{4})","$1-$2 $3",["3"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3-$4",["1(?:[367]|80)"]],["(\\d{3})(\\d{3})(\\d{4})","$1-$2 $3",["15"],"0$1"],["(\\d{2})(\\d{4})(\\d{4})","$1-$2 $3",["1"],"0$1"]],"0"],"MZ":["258","00","(?:2|8\\d)\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2|8[2-79]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["8"]]]],"NA":["264","00","[68]\\d{7,8}",[8,9],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["88"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["6"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["87"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"]],"0"],"NC":["687","00","(?:050|[2-57-9]\\d\\d)\\d{3}",[6],[["(\\d{2})(\\d{2})(\\d{2})","$1.$2.$3",["[02-57-9]"]]]],"NE":["227","00","[027-9]\\d{7}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["08"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[089]|2[013]|7[0467]"]]]],"NF":["672","00","[13]\\d{5}",[6],[["(\\d{2})(\\d{4})","$1 $2",["1[0-3]"]],["(\\d)(\\d{5})","$1 $2",["[13]"]]],0,0,"([0-258]\\d{4})$","3$1"],"NG":["234","009","(?:20|9\\d)\\d{8}|[78]\\d{9,13}",[10,11,12,13,14],[["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[7-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["20[129]"],"0$1"],["(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{3})(\\d{4})(\\d{4,5})","$1 $2 $3",["[78]"],"0$1"],["(\\d{3})(\\d{5})(\\d{5,6})","$1 $2 $3",["[78]"],"0$1"]],"0"],"NI":["505","00","(?:1800|[25-8]\\d{3})\\d{4}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[125-8]"]]]],"NL":["31","00","(?:[124-7]\\d\\d|3(?:[02-9]\\d|1[0-8]))\\d{6}|8\\d{6,9}|9\\d{6,10}|1\\d{4,5}",[5,6,7,8,9,10,11],[["(\\d{3})(\\d{4,7})","$1 $2",["[89]0"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["66"],"0$1"],["(\\d)(\\d{8})","$1 $2",["6"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["1[16-8]|2[259]|3[124]|4[17-9]|5[124679]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-578]|91"],"0$1"],["(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3",["9"],"0$1"]],"0"],"NO":["47","00","(?:0|[2-9]\\d{3})\\d{4}",[5,8],[["(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3",["8"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-79]"]]],0,0,0,0,0,"[02-689]|7[0-8]"],"NP":["977","00","(?:1\\d|9)\\d{9}|[1-9]\\d{7}",[8,10,11],[["(\\d)(\\d{7})","$1-$2",["1[2-6]"],"0$1"],["(\\d{2})(\\d{6})","$1-$2",["1[01]|[2-8]|9(?:[1-59]|[67][2-6])"],"0$1"],["(\\d{3})(\\d{7})","$1-$2",["9"]]],"0"],"NR":["674","00","(?:222|444|(?:55|8\\d)\\d|666|777|999)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[24-9]"]]]],"NU":["683","00","(?:[4-7]|888\\d)\\d{3}",[4,7],[["(\\d{3})(\\d{4})","$1 $2",["8"]]]],"NZ":["64","0(?:0|161)","[1289]\\d{9}|50\\d{5}(?:\\d{2,3})?|[27-9]\\d{7,8}|(?:[34]\\d|6[0-35-9])\\d{6}|8\\d{4,6}",[5,6,7,8,9,10],[["(\\d{2})(\\d{3,8})","$1 $2",["8[1-79]"],"0$1"],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["50[036-8]|8|90","50(?:[0367]|88)|8|90"],"0$1"],["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["24|[346]|7[2-57-9]|9[2-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:10|74)|[589]"],"0$1"],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["1|2[028]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,5})","$1 $2 $3",["2(?:[169]|7[0-35-9])|7"],"0$1"]],"0",0,0,0,0,0,0,"00"],"OM":["968","00","(?:1505|[279]\\d{3}|500)\\d{4}|800\\d{5,6}",[7,8,9],[["(\\d{3})(\\d{4,6})","$1 $2",["[58]"]],["(\\d{2})(\\d{6})","$1 $2",["2"]],["(\\d{4})(\\d{4})","$1 $2",["[179]"]]]],"PA":["507","00","(?:00800|8\\d{3})\\d{6}|[68]\\d{7}|[1-57-9]\\d{6}",[7,8,10,11],[["(\\d{3})(\\d{4})","$1-$2",["[1-57-9]"]],["(\\d{4})(\\d{4})","$1-$2",["[68]"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]]]],"PE":["51","00|19(?:1[124]|77|90)00","(?:[14-8]|9\\d)\\d{7}",[8,9],[["(\\d{3})(\\d{5})","$1 $2",["80"],"(0$1)"],["(\\d)(\\d{7})","$1 $2",["1"],"(0$1)"],["(\\d{2})(\\d{6})","$1 $2",["[4-8]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["9"]]],"0",0,0,0,0,0,0,"00"," Anexo "],"PF":["689","00","4\\d{5}(?:\\d{2})?|8\\d{7,8}",[6,8,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["44"]],["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4|8[7-9]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]]]],"PG":["675","00|140[1-3]","(?:180|[78]\\d{3})\\d{4}|(?:[2-589]\\d|64)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["18|[2-69]|85"]],["(\\d{4})(\\d{4})","$1 $2",["[78]"]]],0,0,0,0,0,0,0,"00"],"PH":["63","00","(?:[2-7]|9\\d)\\d{8}|2\\d{5}|(?:1800|8)\\d{7,9}",[6,8,9,10,11,12,13],[["(\\d)(\\d{5})","$1 $2",["2"],"(0$1)"],["(\\d{4})(\\d{4,6})","$1 $2",["3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2","3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))"],"(0$1)"],["(\\d{5})(\\d{4})","$1 $2",["346|4(?:27|9[35])|883","3469|4(?:279|9(?:30|56))|8834"],"(0$1)"],["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["2"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[3-7]|8[2-8]"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"],"0$1"],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]],["(\\d{4})(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1"]]],"0"],"PK":["92","00","122\\d{6}|[24-8]\\d{10,11}|9(?:[013-9]\\d{8,10}|2(?:[01]\\d\\d|2(?:[06-8]\\d|1[01]))\\d{7})|(?:[2-8]\\d{3}|92(?:[0-7]\\d|8[1-9]))\\d{6}|[24-9]\\d{8}|[89]\\d{7}",[8,9,10,11,12],[["(\\d{3})(\\d{3})(\\d{2,7})","$1 $2 $3",["[89]0"],"0$1"],["(\\d{4})(\\d{5})","$1 $2",["1"]],["(\\d{3})(\\d{6,7})","$1 $2",["2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])","9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]"],"(0$1)"],["(\\d{2})(\\d{7,8})","$1 $2",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]"],"(0$1)"],["(\\d{5})(\\d{5})","$1 $2",["58"],"(0$1)"],["(\\d{3})(\\d{7})","$1 $2",["3"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91"],"(0$1)"],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[24-9]"],"(0$1)"]],"0"],"PL":["48","00","(?:6|8\\d\\d)\\d{7}|[1-9]\\d{6}(?:\\d{2})?|[26]\\d{5}",[6,7,8,9,10],[["(\\d{5})","$1",["19"]],["(\\d{3})(\\d{3})","$1 $2",["11|20|64"]],["(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1","(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19"]],["(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["64"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)"]],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[2-8]|[2-7]|8[1-79]|9[145]"]],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["8"]]]],"PM":["508","00","[45]\\d{5}|(?:708|8\\d\\d)\\d{6}",[6,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[45]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"],"0$1"]],"0"],"PR":["1","011","(?:[589]\\d\\d|787)\\d{7}",[10],0,"1",0,0,0,0,"787|939"],"PS":["970","00","[2489]2\\d{6}|(?:1\\d|5)\\d{8}",[8,9,10],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2489]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["5"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0"],"PT":["351","00","1693\\d{5}|(?:[26-9]\\d|30)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["2[12]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["16|[236-9]"]]]],"PW":["680","01[12]","(?:[24-8]\\d\\d|345|900)\\d{4}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[2-9]"]]]],"PY":["595","00","59\\d{4,6}|9\\d{5,10}|(?:[2-46-8]\\d|5[0-8])\\d{4,7}",[6,7,8,9,10,11],[["(\\d{3})(\\d{3,6})","$1 $2",["[2-9]0"],"0$1"],["(\\d{2})(\\d{5})","$1 $2",["[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]"],"(0$1)"],["(\\d{3})(\\d{4,5})","$1 $2",["2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["87"]],["(\\d{3})(\\d{6})","$1 $2",["9(?:[5-79]|8[1-7])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]"],"0$1"],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["9"]]],"0"],"QA":["974","00","800\\d{4}|(?:2|800)\\d{6}|(?:0080|[3-7])\\d{7}",[7,8,9,11],[["(\\d{3})(\\d{4})","$1 $2",["2[136]|8"]],["(\\d{4})(\\d{4})","$1 $2",["[3-7]"]]]],"RE":["262","00","709\\d{6}|(?:26|[689]\\d)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[26-9]"],"0$1"]],"0",0,0,0,0,0,[["26(?:2\\d\\d|3(?:0\\d|1[0-6]))\\d{4}"],["(?:69(?:2\\d\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\d{4}"],["80\\d{7}"],["89[1-37-9]\\d{6}"],0,0,0,0,["9(?:399[0-3]|479[0-6]|76(?:2[278]|3[0-37]))\\d{4}"],["8(?:1[019]|2[0156]|84|90)\\d{6}"]]],"RO":["40","00","(?:[236-8]\\d|90)\\d{7}|[23]\\d{5}",[6,9],[["(\\d{3})(\\d{3})","$1 $2",["2[3-6]","2[3-6]\\d9"],"0$1"],["(\\d{2})(\\d{4})","$1 $2",["219|31"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[23]1"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[236-9]"],"0$1"]],"0",0,0,0,0,0,0,0," int "],"RS":["381","00","38[02-9]\\d{6,9}|6\\d{7,9}|90\\d{4,8}|38\\d{5,6}|(?:7\\d\\d|800)\\d{3,9}|(?:[12]\\d|3[0-79])\\d{5,10}",[6,7,8,9,10,11,12],[["(\\d{3})(\\d{3,9})","$1 $2",["(?:2[389]|39)0|[7-9]"],"0$1"],["(\\d{2})(\\d{5,10})","$1 $2",["[1-36]"],"0$1"]],"0"],"RU":["7","810","8\\d{13}|[347-9]\\d{9}",[10,14],[["(\\d{4})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["7(?:1[0-8]|2[1-9])","7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))","7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2"],"8 ($1)",1],["(\\d{5})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["7(?:1[0-68]|2[1-9])","7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))","7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]"],"8 ($1)",1],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"8 ($1)",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[349]|8(?:[02-7]|1[1-8])"],"8 ($1)",1],["(\\d{4})(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["8"],"8 ($1)"]],"8",0,0,0,0,0,[["336(?:[013-9]\\d|2[013-9])\\d{5}|(?:3(?:0[12]|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15-7]|6[0-35-79]|7[1-37-9]))\\d{7}",[10]],["9\\d{9}",[10]],["8(?:0[04]|108\\d{3})\\d{7}"],["80[39]\\d{7}",[10]],["808\\d{7}",[10]]],"8~10"],"RW":["250","00","(?:06|[27]\\d\\d|[89]00)\\d{6}",[8,9],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["2"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[7-9]"],"0$1"]],"0"],"SA":["966","00","(?:[15]\\d|800|92)\\d{7}",[9,10],[["(\\d{4})(\\d{5})","$1 $2",["9"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["5"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]]],"0"],"SB":["677","0[01]","[6-9]\\d{6}|[1-6]\\d{4}",[5,7],[["(\\d{2})(\\d{5})","$1 $2",["6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])"]]]],"SC":["248","010|0[0-2]","(?:[2489]\\d|64)\\d{5}",[7],[["(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[246]|9[57]"]]],0,0,0,0,0,0,0,"00"],"SD":["249","00","[19]\\d{8}",[9],[["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[19]"],"0$1"]],"0"],"SE":["46","00","(?:[26]\\d\\d|9)\\d{9}|[1-9]\\d{8}|[1-689]\\d{7}|[1-4689]\\d{6}|2\\d{5}",[6,7,8,9,10,12],[["(\\d{2})(\\d{2,3})(\\d{2})","$1-$2 $3",["20"],"0$1",0,"$1 $2 $3"],["(\\d{3})(\\d{4})","$1-$2",["9(?:00|39|44|9)"],"0$1",0,"$1 $2"],["(\\d{2})(\\d{3})(\\d{2})","$1-$2 $3",["[12][136]|3[356]|4[0246]|6[03]|90[1-9]"],"0$1",0,"$1 $2 $3"],["(\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["8"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2,3})(\\d{2})","$1-$2 $3",["1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])"],"0$1",0,"$1 $2 $3"],["(\\d{3})(\\d{2,3})(\\d{3})","$1-$2 $3",["9(?:00|39|44)"],"0$1",0,"$1 $2 $3"],["(\\d{2})(\\d{2,3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]"],"0$1",0,"$1 $2 $3 $4"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4",["10|7"],"0$1",0,"$1 $2 $3 $4"],["(\\d)(\\d{3})(\\d{3})(\\d{2})","$1-$2 $3 $4",["8"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1-$2 $3 $4",["[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{2})(\\d{3})","$1-$2 $3 $4",["9"],"0$1",0,"$1 $2 $3 $4"],["(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1-$2 $3 $4 $5",["[26]"],"0$1",0,"$1 $2 $3 $4 $5"]],"0"],"SG":["65","0[0-3]\\d","(?:(?:1\\d|8)\\d\\d|7000)\\d{7}|[3689]\\d{7}",[8,10,11],[["(\\d{4})(\\d{4})","$1 $2",["[369]|8(?:0[1-9]|[1-9])"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"]],["(\\d{4})(\\d{4})(\\d{3})","$1 $2 $3",["7"]],["(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1"]]]],"SH":["290","00","(?:[256]\\d|8)\\d{3}",[4,5],0,0,0,0,0,0,"[256]"],"SI":["386","00|10(?:22|66|88|99)","[1-7]\\d{7}|8\\d{4,7}|90\\d{4,6}",[5,6,7,8],[["(\\d{2})(\\d{3,6})","$1 $2",["8[09]|9"],"0$1"],["(\\d{3})(\\d{5})","$1 $2",["59|8"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[37][01]|4[0139]|51|6"],"0$1"],["(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-57]"],"(0$1)"]],"0",0,0,0,0,0,0,"00"],"SJ":["47","00","0\\d{4}|(?:[489]\\d|79)\\d{6}",[5,8],0,0,0,0,0,0,"79"],"SK":["421","00","[2-689]\\d{8}|[2-59]\\d{6}|[2-5]\\d{5}",[6,7,9],[["(\\d)(\\d{2})(\\d{3,4})","$1 $2 $3",["21"],"0$1"],["(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["[3-5][1-8]1","[3-5][1-8]1[67]"],"0$1"],["(\\d)(\\d{3})(\\d{3})(\\d{2})","$1/$2 $3 $4",["2"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[689]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1/$2 $3 $4",["[3-5]"],"0$1"]],"0"],"SL":["232","00","(?:[237-9]\\d|66)\\d{6}",[8],[["(\\d{2})(\\d{6})","$1 $2",["[236-9]"],"(0$1)"]],"0"],"SM":["378","00","(?:0549|[5-7]\\d)\\d{6}",[8,10],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-7]"]],["(\\d{4})(\\d{6})","$1 $2",["0"]]],0,0,"([89]\\d{5})$","0549$1"],"SN":["221","00","(?:[378]\\d|93)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[379]"]]]],"SO":["252","00","[346-9]\\d{8}|[12679]\\d{7}|[1-5]\\d{6}|[1348]\\d{5}",[6,7,8,9],[["(\\d{2})(\\d{4})","$1 $2",["8[125]"]],["(\\d{6})","$1",["[134]"]],["(\\d)(\\d{6})","$1 $2",["[15]|2[0-79]|3[0-46-8]|4[0-7]"]],["(\\d)(\\d{7})","$1 $2",["(?:2|90)4|[67]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[348]|64|79|90"]],["(\\d{2})(\\d{5,7})","$1 $2",["1|28|6[0-35-9]|7[67]|9[2-9]"]]],"0"],"SR":["597","00","(?:[2-5]|[6-8]\\d|90)\\d{5}",[6,7],[["(\\d{2})(\\d{2})(\\d{2})","$1-$2-$3",["56"]],["(\\d{3})(\\d{3})","$1-$2",["[2-5]"]],["(\\d{3})(\\d{4})","$1-$2",["[6-9]"]]]],"SS":["211","00","[19]\\d{8}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[19]"],"0$1"]],"0"],"ST":["239","00","(?:22|9\\d)\\d{5}",[7],[["(\\d{3})(\\d{4})","$1 $2",["[29]"]]]],"SV":["503","00","[267]\\d{7}|(?:80\\d|900)\\d{4}(?:\\d{4})?",[7,8,11],[["(\\d{3})(\\d{4})","$1 $2",["[89]"]],["(\\d{4})(\\d{4})","$1 $2",["[267]"]],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["[89]"]]]],"SX":["1","011","7215\\d{6}|(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"(5\\d{6})$|1","721$1",0,"721"],"SY":["963","00","[1-359]\\d{8}|[1-5]\\d{7}",[8,9],[["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-4]|5[1-3]"],"0$1",1],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[59]"],"0$1",1]],"0"],"SZ":["268","00","0800\\d{4}|(?:[237]\\d|900)\\d{6}",[8,9],[["(\\d{4})(\\d{4})","$1 $2",["[0237]"]],["(\\d{5})(\\d{4})","$1 $2",["9"]]]],"TA":["290","00","8\\d{3}",[4],0,0,0,0,0,0,"8"],"TC":["1","011","(?:[58]\\d\\d|649|900)\\d{7}",[10],0,"1",0,"([2-479]\\d{6})$|1","649$1",0,"649"],"TD":["235","00|16","(?:22|30|[689]\\d|77)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[236-9]"]]],0,0,0,0,0,0,0,"00"],"TG":["228","00","[279]\\d{7}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[279]"]]]],"TH":["66","00[1-9]","(?:001800|[2-57]|[689]\\d)\\d{7}|1\\d{7,9}",[8,9,10,13],[["(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["2"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[13-9]"],"0$1"],["(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]]],"0"],"TJ":["992","810","[0-57-9]\\d{8}",[9],[["(\\d{6})(\\d)(\\d{2})","$1 $2 $3",["331","3317"]],["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["44[02-479]|[34]7"]],["(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["3(?:[1245]|3[12])"]],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[0-57-9]"]]],0,0,0,0,0,0,0,"8~10"],"TK":["690","00","[2-47]\\d{3,6}",[4,5,6,7]],"TL":["670","00","7\\d{7}|(?:[2-47]\\d|[89]0)\\d{5}",[7,8],[["(\\d{3})(\\d{4})","$1 $2",["[2-489]|70"]],["(\\d{4})(\\d{4})","$1 $2",["7"]]]],"TM":["993","810","(?:[1-6]\\d|71)\\d{6}",[8],[["(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["12"],"(8 $1)"],["(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2-$3-$4",["[1-5]"],"(8 $1)"],["(\\d{2})(\\d{6})","$1 $2",["[67]"],"8 $1"]],"8",0,0,0,0,0,0,"8~10"],"TN":["216","00","[2-57-9]\\d{7}",[8],[["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-57-9]"]]]],"TO":["676","00","(?:0800|(?:[5-8]\\d\\d|999)\\d)\\d{3}|[2-8]\\d{4}",[5,7],[["(\\d{2})(\\d{3})","$1-$2",["[2-4]|50|6[09]|7[0-24-69]|8[05]"]],["(\\d{4})(\\d{3})","$1 $2",["0"]],["(\\d{3})(\\d{4})","$1 $2",["[5-9]"]]]],"TR":["90","00","4\\d{6}|8\\d{11,12}|(?:[2-58]\\d\\d|900)\\d{7}",[7,10,12,13],[["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["512|8[01589]|90"],"0$1",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["5(?:[0-59]|61)","5(?:[0-59]|61[06])","5(?:[0-59]|61[06]1)"],"0$1",1],["(\\d{3})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[24][1-8]|3[1-9]"],"(0$1)",1],["(\\d{3})(\\d{3})(\\d{6,7})","$1 $2 $3",["80"],"0$1",1]],"0"],"TT":["1","011","(?:[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-46-8]\\d{6})$|1","868$1",0,"868"],"TV":["688","00","(?:2|7\\d\\d|90)\\d{4}",[5,6,7],[["(\\d{2})(\\d{3})","$1 $2",["2"]],["(\\d{2})(\\d{4})","$1 $2",["90"]],["(\\d{2})(\\d{5})","$1 $2",["7"]]]],"TW":["886","0(?:0[25-79]|19)","[2-689]\\d{8}|7\\d{9,10}|[2-8]\\d{7}|2\\d{6}",[7,8,9,10,11],[["(\\d{2})(\\d)(\\d{4})","$1 $2 $3",["202"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[258]0"],"0$1"],["(\\d)(\\d{3,4})(\\d{4})","$1 $2 $3",["[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]","[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[49]"],"0$1"],["(\\d{2})(\\d{4})(\\d{4,5})","$1 $2 $3",["7"],"0$1"]],"0",0,0,0,0,0,0,0,"#"],"TZ":["255","00[056]","(?:[25-8]\\d|41|90)\\d{7}",[9],[["(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[24]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["5"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[67]"],"0$1"]],"0"],"UA":["380","00","[89]\\d{9}|[3-9]\\d{8}",[9,10],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]","6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]"],"0$1"],["(\\d{4})(\\d{5})","$1 $2",["3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])","3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[3-7]|89|9[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"],"0$1"]],"0",0,0,0,0,0,0,"0~0"],"UG":["256","00[057]","800\\d{6}|(?:[29]0|[347]\\d)\\d{7}",[9],[["(\\d{4})(\\d{5})","$1 $2",["202","2024"],"0$1"],["(\\d{3})(\\d{6})","$1 $2",["[27-9]|4(?:6[45]|[7-9])"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["[34]"],"0$1"]],"0"],"US":["1","011","[2-9]\\d{9}|3\\d{6}",[10],[["(\\d{3})(\\d{4})","$1-$2",["310"],0,1],["(\\d{3})(\\d{3})(\\d{4})","($1) $2-$3",["[2-9]"],0,1,"$1-$2-$3"]],"1",0,0,0,0,0,[["3052(?:0[0-8]|[1-9]\\d)\\d{4}|(?:2742|305[3-9])\\d{6}|(?:472|983)[2-47-9]\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-2]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\d{6}"],[""],["8(?:00|33|44|55|66|77|88)[2-9]\\d{6}"],["900[2-9]\\d{6}"],["52(?:3(?:[2-46-9][02-9]\\d|5(?:[02-46-9]\\d|5[0-46-9]))|4(?:[2-478][02-9]\\d|5(?:[034]\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\d)|9(?:[05-9]\\d|2[0-5]|49)))\\d{4}|52[34][2-9]1[02-9]\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\d{6}"],0,0,0,["305209\\d{4}"]]],"UY":["598","0(?:0|1[3-9]\\d)","0004\\d{2,9}|[1249]\\d{7}|2\\d{3,4}|(?:[49]\\d|80)\\d{5}",[4,5,6,7,8,9,10,11,12,13],[["(\\d{4,5})","$1",["21"]],["(\\d{3})(\\d{3,4})","$1 $2",["0"]],["(\\d{3})(\\d{4})","$1 $2",["[49]0|8"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["9"],"0$1"],["(\\d{4})(\\d{4})","$1 $2",["[124]"]],["(\\d{3})(\\d{3})(\\d{2,4})","$1 $2 $3",["0"]],["(\\d{3})(\\d{3})(\\d{3})(\\d{2,4})","$1 $2 $3 $4",["0"]]],"0",0,0,0,0,0,0,"00"," int. "],"UZ":["998","00","(?:20|33|[5-9]\\d)\\d{7}",[9],[["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[235-9]"]]]],"VA":["39","00","0\\d{5,10}|3[0-8]\\d{7,10}|55\\d{8}|8\\d{5}(?:\\d{2,4})?|(?:1\\d|39)\\d{7,8}",[6,7,8,9,10,11,12],0,0,0,0,0,0,"06698"],"VC":["1","011","(?:[58]\\d\\d|784|900)\\d{7}",[10],0,"1",0,"([2-7]\\d{6})$|1","784$1",0,"784"],"VE":["58","00","[68]00\\d{7}|(?:[24]\\d|[59]0)\\d{8}",[10],[["(\\d{3})(\\d{7})","$1-$2",["[24-689]"],"0$1"]],"0"],"VG":["1","011","(?:284|[58]\\d\\d|900)\\d{7}",[10],0,"1",0,"([2-578]\\d{6})$|1","284$1",0,"284"],"VI":["1","011","[58]\\d{9}|(?:34|90)0\\d{7}",[10],0,"1",0,"([2-9]\\d{6})$|1","340$1",0,"340"],"VN":["84","00","[12]\\d{9}|[135-9]\\d{8}|[16]\\d{7}|[16-8]\\d{6}",[7,8,9,10],[["(\\d{2})(\\d{5})","$1 $2",["80"],"0$1",1],["(\\d{4})(\\d{4,6})","$1 $2",["1"],0,1],["(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["6"],"0$1",1],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[357-9]"],"0$1",1],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["2[48]"],"0$1",1],["(\\d{3})(\\d{4})(\\d{3})","$1 $2 $3",["2"],"0$1",1]],"0"],"VU":["678","00","[57-9]\\d{6}|(?:[238]\\d|48)\\d{3}",[5,7],[["(\\d{3})(\\d{4})","$1 $2",["[57-9]"]]]],"WF":["681","00","(?:40|72|8\\d{4})\\d{4}|[89]\\d{5}",[6,9],[["(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[47-9]"]],["(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]]]],"WS":["685","0","(?:[2-6]|8\\d{5})\\d{4}|[78]\\d{6}|[68]\\d{5}",[5,6,7,10],[["(\\d{5})","$1",["[2-5]|6[1-9]"]],["(\\d{3})(\\d{3,7})","$1 $2",["[68]"]],["(\\d{2})(\\d{5})","$1 $2",["7"]]]],"XK":["383","00","2\\d{7,8}|3\\d{7,11}|(?:4\\d\\d|[89]00)\\d{5}",[8,9,10,11,12],[["(\\d{3})(\\d{5})","$1 $2",["[89]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2-4]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["2|39"],"0$1"],["(\\d{2})(\\d{7,10})","$1 $2",["3"],"0$1"]],"0"],"YE":["967","00","(?:1|7\\d)\\d{7}|[1-7]\\d{6}",[7,8,9],[["(\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-6]|7(?:[24-6]|8[0-7])"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7"],"0$1"]],"0"],"YT":["262","00","7093\\d{5}|(?:80|9\\d)\\d{7}|(?:26|63)9\\d{6}",[9],0,"0",0,0,0,0,0,[["269(?:0[0-467]|15|5[0-4]|6\\d|[78]0)\\d{4}"],["(?:639(?:0[0-79]|1[019]|[267]\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\d{4}"],["80\\d{7}"],0,0,0,0,0,["9(?:(?:39|47)8[01]|769\\d)\\d{4}"]]],"ZA":["27","00","[1-79]\\d{8}|8\\d{4,9}",[5,6,7,8,9,10],[["(\\d{2})(\\d{3,4})","$1 $2",["8[1-4]"],"0$1"],["(\\d{2})(\\d{3})(\\d{2,3})","$1 $2 $3",["8[1-4]"],"0$1"],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["860"],"0$1"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[1-9]"],"0$1"],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8"],"0$1"]],"0"],"ZM":["260","00","800\\d{6}|(?:21|[579]\\d|63)\\d{7}",[9],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[28]"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["[579]"],"0$1"]],"0"],"ZW":["263","00","2(?:[0-57-9]\\d{6,8}|6[0-24-9]\\d{6,7})|[38]\\d{9}|[35-8]\\d{8}|[3-6]\\d{7}|[1-689]\\d{6}|[1-3569]\\d{5}|[1356]\\d{4}",[5,6,7,8,9,10],[["(\\d{3})(\\d{3,5})","$1 $2",["2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]"],"0$1"],["(\\d)(\\d{3})(\\d{2,4})","$1 $2 $3",["[49]"],"0$1"],["(\\d{3})(\\d{4})","$1 $2",["80"],"0$1"],["(\\d{2})(\\d{7})","$1 $2",["24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2","2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]"],"(0$1)"],["(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"],"0$1"],["(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)","2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)"],"0$1"],["(\\d{4})(\\d{6})","$1 $2",["8"],"0$1"],["(\\d{2})(\\d{3,5})","$1 $2",["1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]"],"0$1"],["(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["29[013-9]|39|54"],"0$1"],["(\\d{4})(\\d{3,5})","$1 $2",["(?:25|54)8","258|5483"],"0$1"]],"0"]},"nonGeographic":{"800":["800",0,"(?:00|[1-9]\\d)\\d{6}",[8],[["(\\d{4})(\\d{4})","$1 $2",["\\d"]]],0,0,0,0,0,0,[0,0,["(?:00|[1-9]\\d)\\d{6}"]]],"808":["808",0,"[1-9]\\d{7}",[8],[["(\\d{4})(\\d{4})","$1 $2",["[1-9]"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,["[1-9]\\d{7}"]]],"870":["870",0,"7\\d{11}|[235-7]\\d{8}",[9,12],[["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[235-7]"]]],0,0,0,0,0,0,[0,["(?:[356]|774[45])\\d{8}|7[6-8]\\d{7}"],0,0,0,0,0,0,["2\\d{8}",[9]]]],"878":["878",0,"10\\d{10}",[12],[["(\\d{2})(\\d{5})(\\d{5})","$1 $2 $3",["1"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,["10\\d{10}"]]],"881":["881",0,"6\\d{9}|[0-36-9]\\d{8}",[9,10],[["(\\d)(\\d{3})(\\d{5})","$1 $2 $3",["[0-37-9]"]],["(\\d)(\\d{3})(\\d{5,6})","$1 $2 $3",["6"]]],0,0,0,0,0,0,[0,["6\\d{9}|[0-36-9]\\d{8}"]]],"882":["882",0,"[13]\\d{6}(?:\\d{2,5})?|[19]\\d{7}|(?:[25]\\d\\d|4)\\d{7}(?:\\d{2})?",[7,8,9,10,11,12],[["(\\d{2})(\\d{5})","$1 $2",["16|342"]],["(\\d{2})(\\d{6})","$1 $2",["49"]],["(\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["1[36]|9"]],["(\\d{2})(\\d{4})(\\d{3})","$1 $2 $3",["3[23]"]],["(\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["16"]],["(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["10|23|3(?:[15]|4[57])|4|51"]],["(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["34"]],["(\\d{2})(\\d{4,5})(\\d{5})","$1 $2 $3",["[1-35]"]]],0,0,0,0,0,0,[0,["342\\d{4}|(?:337|49)\\d{6}|(?:3(?:2|47|7\\d{3})|50\\d{3})\\d{7}",[7,8,9,10,12]],0,0,0,["348[57]\\d{7}",[11]],0,0,["1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\d{4}|6\\d{5,10})|(?:345\\d|9[89])\\d{6}|(?:10|2(?:3|85\\d)|3(?:[15]|[69]\\d\\d)|4[15-8]|51)\\d{8}"]]],"883":["883",0,"(?:[1-4]\\d|51)\\d{6,10}",[8,9,10,11,12],[["(\\d{3})(\\d{3})(\\d{2,8})","$1 $2 $3",["[14]|2[24-689]|3[02-689]|51[24-9]"]],["(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["510"]],["(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["21"]],["(\\d{4})(\\d{4})(\\d{4})","$1 $2 $3",["51[13]"]],["(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["[235]"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,["(?:2(?:00\\d\\d|10)|(?:370[1-9]|51\\d0)\\d)\\d{7}|51(?:00\\d{5}|[24-9]0\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\d{5,9}"]]],"888":["888",0,"\\d{11}",[11],[["(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3"]],0,0,0,0,0,0,[0,0,0,0,0,0,["\\d{11}"]]],"979":["979",0,"[1359]\\d{8}",[9],[["(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[1359]"]]],0,0,0,0,0,0,[0,0,0,["[1359]\\d{8}"]]]}});
28042
28043/***/ }),
28044
vendor: 49,881 bytes, lines 28045-28082
28045/***/ "../node_modules/libphonenumber-js/min/exports/AsYouType.js":
28046/*!******************************************************************!*\
28047  !*** ../node_modules/libphonenumber-js/min/exports/AsYouType.js ***!
28048  \******************************************************************/
28049/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
28050
28051"use strict";
28052__webpack_require__.r(__webpack_exports__);
28053/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28054/* harmony export */   AsYouType: function() { return /* binding */ AsYouType; }
28055/* harmony export */ });
28056/* harmony import */ var _metadata_min_json_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../metadata.min.json.js */ "../node_modules/libphonenumber-js/metadata.min.json.js");
28057/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/index.js */ "../node_modules/libphonenumber-js/es6/AsYouType.js");
28058// Importing from a ".js" file is a workaround for Node.js "ES Modules"
28059// importing system which is even uncapable of importing "*.json" files.
28060
28061
28062
28063
28064function AsYouType(country) {
28065	return _core_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].call(this, country, _metadata_min_json_js__WEBPACK_IMPORTED_MODULE_0__["default"])
28066}
28067
28068AsYouType.prototype = Object.create(_core_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].prototype, {})
28069AsYouType.prototype.constructor = AsYouType
28070
28071/***/ }),
28072
28073/***/ "../node_modules/raw-loader/index.js!./resources/js/src/magnific.js":
28074/*!**************************************************************************!*\
28075  !*** ../node_modules/raw-loader/index.js!./resources/js/src/magnific.js ***!
28076  \**************************************************************************/
28077/***/ (function(module) {
28078
28079module.exports = "/*! Magnific Popup - v1.1.0 - 2016-02-20\n* http://dimsemenov.com/plugins/magnific-popup/\n* Copyright (c) 2016 Dmitry Semenov; */\n;(function (factory) { \nif (typeof define === 'function' && define.amd) { \n // AMD. Register as an anonymous module. \n define(['jquery'], factory); \n } else if (typeof exports === 'object') { \n // Node/CommonJS \n factory(require('jquery')); \n } else { \n // Browser globals \n factory(window.jQuery || window.Zepto); \n } \n }(function($) { \n\n/*>>core*/\n/**\n * \n * Magnific Popup Core JS file\n * \n */\n\n\n/**\n * Private static constants\n */\nvar CLOSE_EVENT = 'Close',\n\tBEFORE_CLOSE_EVENT = 'BeforeClose',\n\tAFTER_CLOSE_EVENT = 'AfterClose',\n\tBEFORE_APPEND_EVENT = 'BeforeAppend',\n\tMARKUP_PARSE_EVENT = 'MarkupParse',\n\tOPEN_EVENT = 'Open',\n\tCHANGE_EVENT = 'Change',\n\tNS = 'mfp',\n\tEVENT_NS = '.' + NS,\n\tREADY_CLASS = 'mfp-ready',\n\tREMOVING_CLASS = 'mfp-removing',\n\tPREVENT_CLOSE_CLASS = 'mfp-prevent-close';\n\n\n/**\n * Private vars \n */\n/*jshint -W079 */\nvar mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'\n\tMagnificPopup = function(){},\n\t_isJQ = !!(window.jQuery),\n\t_prevStatus,\n\t_window = $(window),\n\t_document,\n\t_prevContentType,\n\t_wrapClasses,\n\t_currPopupType;\n\n\n/**\n * Private functions\n */\nvar _mfpOn = function(name, f) {\n\t\tmfp.ev.on(NS + name + EVENT_NS, f);\n\t},\n\t_getEl = function(className, appendTo, html, raw) {\n\t\tvar el = document.createElement('div');\n\t\tel.className = 'mfp-'+className;\n\t\tif(html) {\n\t\t\tel.innerHTML = html;\n\t\t}\n\t\tif(!raw) {\n\t\t\tel = $(el);\n\t\t\tif(appendTo) {\n\t\t\t\tel.appendTo(appendTo);\n\t\t\t}\n\t\t} else if(appendTo) {\n\t\t\tappendTo.appendChild(el);\n\t\t}\n\t\treturn el;\n\t},\n\t_mfpTrigger = function(e, data) {\n\t\tmfp.ev.triggerHandler(NS + e, data);\n\n\t\tif(mfp.st.callbacks) {\n\t\t\t// converts \"mfpEventName\" to \"eventName\" callback and triggers it if it's present\n\t\t\te = e.charAt(0).toLowerCase() + e.slice(1);\n\t\t\tif(mfp.st.callbacks[e]) {\n\t\t\t\tmfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);\n\t\t\t}\n\t\t}\n\t},\n\t_getCloseBtn = function(type) {\n\t\tif(type !== _currPopupType || !mfp.currTemplate.closeBtn) {\n\t\t\tmfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );\n\t\t\t_currPopupType = type;\n\t\t}\n\t\treturn mfp.currTemplate.closeBtn;\n\t},\n\t// Initialize Magnific Popup only when called at least once\n\t_checkInstance = function() {\n\t\tif(!$.magnificPopup.instance) {\n\t\t\t/*jshint -W020 */\n\t\t\tmfp = new MagnificPopup();\n\t\t\tmfp.init();\n\t\t\t$.magnificPopup.instance = mfp;\n\t\t}\n\t},\n\t// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\n\tsupportsTransitions = function() {\n\t\tvar s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist\n\t\t\tv = ['ms','O','Moz','Webkit']; // 'v' for vendor\n\n\t\tif( s['transition'] !== undefined ) {\n\t\t\treturn true; \n\t\t}\n\t\t\t\n\t\twhile( v.length ) {\n\t\t\tif( v.pop() + 'Transition' in s ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\t\t\n\t\treturn false;\n\t};\n\n\n\n/**\n * Public functions\n */\nMagnificPopup.prototype = {\n\n\tconstructor: MagnificPopup,\n\n\t/**\n\t * Initializes Magnific Popup plugin. \n\t * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed\n\t */\n\tinit: function() {\n\t\tvar appVersion = navigator.appVersion;\n\t\tmfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;\n\t\tmfp.isAndroid = (/android/gi).test(appVersion);\n\t\tmfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);\n\t\tmfp.supportsTransition = supportsTransitions();\n\n\t\t// We disable fixed positioned lightbox on devices that don't handle it nicely.\n\t\t// If you know a better way of detecting this - let me know.\n\t\tmfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );\n\t\t_document = $(document);\n\n\t\tmfp.popupsCache = {};\n\t},\n\n\t/**\n\t * Opens popup\n\t * @param  data [description]\n\t */\n\topen: function(data) {\n\n\t\tvar i;\n\n\t\tif(data.isObj === false) { \n\t\t\t// convert jQuery collection to array to avoid conflicts later\n\t\t\tmfp.items = data.items.toArray();\n\n\t\t\tmfp.index = 0;\n\t\t\tvar items = data.items,\n\t\t\t\titem;\n\t\t\tfor(i = 0; i < items.length; i++) {\n\t\t\t\titem = items[i];\n\t\t\t\tif(item.parsed) {\n\t\t\t\t\titem = item.el[0];\n\t\t\t\t}\n\t\t\t\tif(item === data.el[0]) {\n\t\t\t\t\tmfp.index = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.items = $.isArray(data.items) ? data.items : [data.items];\n\t\t\tmfp.index = data.index || 0;\n\t\t}\n\n\t\t// if popup is already opened - we just update the content\n\t\tif(mfp.isOpen) {\n\t\t\tmfp.updateItemHTML();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tmfp.types = []; \n\t\t_wrapClasses = '';\n\t\tif(data.mainEl && data.mainEl.length) {\n\t\t\tmfp.ev = data.mainEl.eq(0);\n\t\t} else {\n\t\t\tmfp.ev = _document;\n\t\t}\n\n\t\tif(data.key) {\n\t\t\tif(!mfp.popupsCache[data.key]) {\n\t\t\t\tmfp.popupsCache[data.key] = {};\n\t\t\t}\n\t\t\tmfp.currTemplate = mfp.popupsCache[data.key];\n\t\t} else {\n\t\t\tmfp.currTemplate = {};\n\t\t}\n\n\n\n\t\tmfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); \n\t\tmfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;\n\n\t\tif(mfp.st.modal) {\n\t\t\tmfp.st.closeOnContentClick = false;\n\t\t\tmfp.st.closeOnBgClick = false;\n\t\t\tmfp.st.showCloseBtn = false;\n\t\t\tmfp.st.enableEscapeKey = false;\n\t\t}\n\t\t\n\n\t\t// Building markup\n\t\t// main containers are created only once\n\t\tif(!mfp.bgOverlay) {\n\n\t\t\t// Dark overlay\n\t\t\tmfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {\n\t\t\t\tmfp.close();\n\t\t\t});\n\n\t\t\tmfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {\n\t\t\t\tif(mfp._checkIfClose(e.target)) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmfp.container = _getEl('container', mfp.wrap);\n\t\t}\n\n\t\tmfp.contentContainer = _getEl('content');\n\t\tif(mfp.st.preloader) {\n\t\t\tmfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);\n\t\t}\n\n\n\t\t// Initializing modules\n\t\tvar modules = $.magnificPopup.modules;\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar n = modules[i];\n\t\t\tn = n.charAt(0).toUpperCase() + n.slice(1);\n\t\t\tmfp['init'+n].call(mfp);\n\t\t}\n\t\t_mfpTrigger('BeforeOpen');\n\n\n\t\tif(mfp.st.showCloseBtn) {\n\t\t\t// Close button\n\t\t\tif(!mfp.st.closeBtnInside) {\n\t\t\t\tmfp.wrap.append( _getCloseBtn() );\n\t\t\t} else {\n\t\t\t\t_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {\n\t\t\t\t\tvalues.close_replaceWith = _getCloseBtn(item.type);\n\t\t\t\t});\n\t\t\t\t_wrapClasses += ' mfp-close-btn-in';\n\t\t\t}\n\t\t}\n\n\t\tif(mfp.st.alignTop) {\n\t\t\t_wrapClasses += ' mfp-align-top';\n\t\t}\n\n\t\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css({\n\t\t\t\toverflow: mfp.st.overflowY,\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\toverflowY: mfp.st.overflowY\n\t\t\t});\n\t\t} else {\n\t\t\tmfp.wrap.css({ \n\t\t\t\ttop: _window.scrollTop(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\t\tif( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {\n\t\t\tmfp.bgOverlay.css({\n\t\t\t\theight: _document.height(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\n\t\t\n\n\t\tif(mfp.st.enableEscapeKey) {\n\t\t\t// Close on ESC key\n\t\t\t_document.on('keyup' + EVENT_NS, function(e) {\n\t\t\t\tif(e.keyCode === 27) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_window.on('resize' + EVENT_NS, function() {\n\t\t\tmfp.updateSize();\n\t\t});\n\n\n\t\tif(!mfp.st.closeOnContentClick) {\n\t\t\t_wrapClasses += ' mfp-auto-cursor';\n\t\t}\n\t\t\n\t\tif(_wrapClasses)\n\t\t\tmfp.wrap.addClass(_wrapClasses);\n\n\n\t\t// this triggers recalculation of layout, so we get it once to not to trigger twice\n\t\tvar windowHeight = mfp.wH = _window.height();\n\n\t\t\n\t\tvar windowStyles = {};\n\n\t\tif( mfp.fixedContentPos ) {\n            if(mfp._hasScrollBar(windowHeight)){\n                var s = mfp._getScrollbarSize();\n                if(s) {\n                    windowStyles.marginRight = s;\n                }\n            }\n        }\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tif(!mfp.isIE7) {\n\t\t\t\twindowStyles.overflow = 'hidden';\n\t\t\t} else {\n\t\t\t\t// ie7 double-scroll bug\n\t\t\t\t$('body, html').css('overflow', 'hidden');\n\t\t\t}\n\t\t}\n\n\t\t\n\t\t\n\t\tvar classesToadd = mfp.st.mainClass;\n\t\tif(mfp.isIE7) {\n\t\t\tclassesToadd += ' mfp-ie7';\n\t\t}\n\t\tif(classesToadd) {\n\t\t\tmfp._addClassToMFP( classesToadd );\n\t\t}\n\n\t\t// add content\n\t\tmfp.updateItemHTML();\n\n\t\t_mfpTrigger('BuildControls');\n\n\t\t// remove scrollbar, add margin e.t.c\n\t\t$('html').css(windowStyles);\n\t\t\n\t\t// add everything to DOM\n\t\tmfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );\n\n\t\t// Save last focused element\n\t\tmfp._lastFocusedEl = document.activeElement;\n\t\t\n\t\t// Wait for next cycle to allow CSS transition\n\t\tsetTimeout(function() {\n\t\t\t\n\t\t\tif(mfp.content) {\n\t\t\t\tmfp._addClassToMFP(READY_CLASS);\n\t\t\t\tmfp._setFocus();\n\t\t\t} else {\n\t\t\t\t// if content is not defined (not loaded e.t.c) we add class only for BG\n\t\t\t\tmfp.bgOverlay.addClass(READY_CLASS);\n\t\t\t}\n\t\t\t\n\t\t\t// Trap the focus in popup\n\t\t\t_document.on('focusin' + EVENT_NS, mfp._onFocusIn);\n\n\t\t}, 16);\n\n\t\tmfp.isOpen = true;\n\t\tmfp.updateSize(windowHeight);\n\t\t_mfpTrigger(OPEN_EVENT);\n\n\t\treturn data;\n\t},\n\n\t/**\n\t * Closes the popup\n\t */\n\tclose: function() {\n\t\tif(!mfp.isOpen) return;\n\t\t_mfpTrigger(BEFORE_CLOSE_EVENT);\n\n\t\tmfp.isOpen = false;\n\t\t// for CSS3 animation\n\t\tif(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition )  {\n\t\t\tmfp._addClassToMFP(REMOVING_CLASS);\n\t\t\tsetTimeout(function() {\n\t\t\t\tmfp._close();\n\t\t\t}, mfp.st.removalDelay);\n\t\t} else {\n\t\t\tmfp._close();\n\t\t}\n\t},\n\n\t/**\n\t * Helper for close() function\n\t */\n\t_close: function() {\n\t\t_mfpTrigger(CLOSE_EVENT);\n\n\t\tvar classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';\n\n\t\tmfp.bgOverlay.detach();\n\t\tmfp.wrap.detach();\n\t\tmfp.container.empty();\n\n\t\tif(mfp.st.mainClass) {\n\t\t\tclassesToRemove += mfp.st.mainClass + ' ';\n\t\t}\n\n\t\tmfp._removeClassFromMFP(classesToRemove);\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tvar windowStyles = {marginRight: ''};\n\t\t\tif(mfp.isIE7) {\n\t\t\t\t$('body, html').css('overflow', '');\n\t\t\t} else {\n\t\t\t\twindowStyles.overflow = '';\n\t\t\t}\n\t\t\t$('html').css(windowStyles);\n\t\t}\n\t\t\n\t\t_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);\n\t\tmfp.ev.off(EVENT_NS);\n\n\t\t// clean up DOM elements that aren't removed\n\t\tmfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');\n\t\tmfp.bgOverlay.attr('class', 'mfp-bg');\n\t\tmfp.container.attr('class', 'mfp-container');\n\n\t\t// remove close button from target element\n\t\tif(mfp.st.showCloseBtn &&\n\t\t(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {\n\t\t\tif(mfp.currTemplate.closeBtn)\n\t\t\t\tmfp.currTemplate.closeBtn.detach();\n\t\t}\n\n\n\t\tif(mfp.st.autoFocusLast && mfp._lastFocusedEl) {\n\t\t\t$(mfp._lastFocusedEl).focus(); // put tab focus back\n\t\t}\n\t\tmfp.currItem = null;\t\n\t\tmfp.content = null;\n\t\tmfp.currTemplate = null;\n\t\tmfp.prevHeight = 0;\n\n\t\t_mfpTrigger(AFTER_CLOSE_EVENT);\n\t},\n\t\n\tupdateSize: function(winHeight) {\n\n\t\tif(mfp.isIOS) {\n\t\t\t// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2\n\t\t\tvar zoomLevel = document.documentElement.clientWidth / window.innerWidth;\n\t\t\tvar height = window.innerHeight * zoomLevel;\n\t\t\tmfp.wrap.css('height', height);\n\t\t\tmfp.wH = height;\n\t\t} else {\n\t\t\tmfp.wH = winHeight || _window.height();\n\t\t}\n\t\t// Fixes #84: popup incorrectly positioned with position:relative on body\n\t\tif(!mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css('height', mfp.wH);\n\t\t}\n\n\t\t_mfpTrigger('Resize');\n\n\t},\n\n\t/**\n\t * Set content of popup based on current index\n\t */\n\tupdateItemHTML: function() {\n\t\tvar item = mfp.items[mfp.index];\n\n\t\t// Detach and perform modifications\n\t\tmfp.contentContainer.detach();\n\n\t\tif(mfp.content)\n\t\t\tmfp.content.detach();\n\n\t\tif(!item.parsed) {\n\t\t\titem = mfp.parseEl( mfp.index );\n\t\t}\n\n\t\tvar type = item.type;\n\n\t\t_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);\n\t\t// BeforeChange event works like so:\n\t\t// _mfpOn('BeforeChange', function(e, prevType, newType) { });\n\n\t\tmfp.currItem = item;\n\n\t\tif(!mfp.currTemplate[type]) {\n\t\t\tvar markup = mfp.st[type] ? mfp.st[type].markup : false;\n\n\t\t\t// allows to modify markup\n\t\t\t_mfpTrigger('FirstMarkupParse', markup);\n\n\t\t\tif(markup) {\n\t\t\t\tmfp.currTemplate[type] = $(markup);\n\t\t\t} else {\n\t\t\t\t// if there is no markup found we just define that template is parsed\n\t\t\t\tmfp.currTemplate[type] = true;\n\t\t\t}\n\t\t}\n\n\t\tif(_prevContentType && _prevContentType !== item.type) {\n\t\t\tmfp.container.removeClass('mfp-'+_prevContentType+'-holder');\n\t\t}\n\n\t\tvar newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);\n\t\tmfp.appendContent(newContent, type);\n\n\t\titem.preloaded = true;\n\n\t\t_mfpTrigger(CHANGE_EVENT, item);\n\t\t_prevContentType = item.type;\n\n\t\t// Append container back after its content changed\n\t\tmfp.container.prepend(mfp.contentContainer);\n\n\t\t_mfpTrigger('AfterChange');\n\t},\n\n\n\t/**\n\t * Set HTML content of popup\n\t */\n\tappendContent: function(newContent, type) {\n\t\tmfp.content = newContent;\n\n\t\tif(newContent) {\n\t\t\tif(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&\n\t\t\t\tmfp.currTemplate[type] === true) {\n\t\t\t\t// if there is no markup, we just append close button element inside\n\t\t\t\tif(!mfp.content.find('.mfp-close').length) {\n\t\t\t\t\tmfp.content.append(_getCloseBtn());\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmfp.content = newContent;\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.content = '';\n\t\t}\n\n\t\t_mfpTrigger(BEFORE_APPEND_EVENT);\n\t\tmfp.container.addClass('mfp-'+type+'-holder');\n\n\t\tmfp.contentContainer.append(mfp.content);\n\t},\n\n\n\t/**\n\t * Creates Magnific Popup data object based on given data\n\t * @param  {int} index Index of item to parse\n\t */\n\tparseEl: function(index) {\n\t\tvar item = mfp.items[index],\n\t\t\ttype;\n\n\t\tif(item.tagName) {\n\t\t\titem = { el: $(item) };\n\t\t} else {\n\t\t\ttype = item.type;\n\t\t\titem = { data: item, src: item.src };\n\t\t}\n\n\t\tif(item.el) {\n\t\t\tvar types = mfp.types;\n\n\t\t\t// check for 'mfp-TYPE' class\n\t\t\tfor(var i = 0; i < types.length; i++) {\n\t\t\t\tif( item.el.hasClass('mfp-'+types[i]) ) {\n\t\t\t\t\ttype = types[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.src = item.el.attr('data-mfp-src');\n\t\t\tif(!item.src) {\n\t\t\t\titem.src = item.el.attr('href');\n\t\t\t}\n\t\t}\n\n\t\titem.type = type || mfp.st.type || 'inline';\n\t\titem.index = index;\n\t\titem.parsed = true;\n\t\tmfp.items[index] = item;\n\t\t_mfpTrigger('ElementParse', item);\n\n\t\treturn mfp.items[index];\n\t},\n\n\n\t/**\n\t * Initializes single popup or a group of popups\n\t */\n\taddGroup: function(el, options) {\n\t\tvar eHandler = function(e) {\n\t\t\te.mfpEl = this;\n\t\t\tmfp._openClick(e, el, options);\n\t\t};\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tvar eName = 'click.magnificPopup';\n\t\toptions.mainEl = el;\n\n\t\tif(options.items) {\n\t\t\toptions.isObj = true;\n\t\t\tel.off(eName).on(eName, eHandler);\n\t\t} else {\n\t\t\toptions.isObj = false;\n\t\t\tif(options.delegate) {\n\t\t\t\tel.off(eName).on(eName, options.delegate , eHandler);\n\t\t\t} else {\n\t\t\t\toptions.items = el;\n\t\t\t\tel.off(eName).on(eName, eHandler);\n\t\t\t}\n\t\t}\n\t},\n\t_openClick: function(e, el, options) {\n\t\tvar midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;\n\n\n\t\tif(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;\n\n\t\tif(disableOn) {\n\t\t\tif($.isFunction(disableOn)) {\n\t\t\t\tif( !disableOn.call(mfp) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else { // else it's number\n\t\t\t\tif( _window.width() < disableOn ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(e.type) {\n\t\t\te.preventDefault();\n\n\t\t\t// This will prevent popup from closing if element is inside and popup is already opened\n\t\t\tif(mfp.isOpen) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}\n\n\t\toptions.el = $(e.mfpEl);\n\t\tif(options.delegate) {\n\t\t\toptions.items = el.find(options.delegate);\n\t\t}\n\t\tmfp.open(options);\n\t},\n\n\n\t/**\n\t * Updates text on preloader\n\t */\n\tupdateStatus: function(status, text) {\n\n\t\tif(mfp.preloader) {\n\t\t\tif(_prevStatus !== status) {\n\t\t\t\tmfp.container.removeClass('mfp-s-'+_prevStatus);\n\t\t\t}\n\n\t\t\tif(!text && status === 'loading') {\n\t\t\t\ttext = mfp.st.tLoading;\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tstatus: status,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t\t// allows to modify status\n\t\t\t_mfpTrigger('UpdateStatus', data);\n\n\t\t\tstatus = data.status;\n\t\t\ttext = data.text;\n\n\t\t\tmfp.preloader.html(text);\n\n\t\t\tmfp.preloader.find('a').on('click', function(e) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tmfp.container.addClass('mfp-s-'+status);\n\t\t\t_prevStatus = status;\n\t\t}\n\t},\n\n\n\t/*\n\t\t\"Private\" helpers that aren't private at all\n\t */\n\t// Check to close popup or not\n\t// \"target\" is an element that was clicked\n\t_checkIfClose: function(target) {\n\n\t\tif($(target).hasClass(PREVENT_CLOSE_CLASS)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar closeOnContent = mfp.st.closeOnContentClick;\n\t\tvar closeOnBg = mfp.st.closeOnBgClick;\n\n\t\tif(closeOnContent && closeOnBg) {\n\t\t\treturn true;\n\t\t} else {\n\n\t\t\t// We close the popup if click is on close button or on preloader. Or if there is no content.\n\t\t\tif(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// if click is outside the content\n\t\t\tif(  (target !== mfp.content[0] && !$.contains(mfp.content[0], target))  ) {\n\t\t\t\tif(closeOnBg) {\n\t\t\t\t\t// last check, if the clicked element is in DOM, (in case it's removed onclick)\n\t\t\t\t\tif( $.contains(document, target) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(closeOnContent) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t}\n\t\treturn false;\n\t},\n\t_addClassToMFP: function(cName) {\n\t\tmfp.bgOverlay.addClass(cName);\n\t\tmfp.wrap.addClass(cName);\n\t},\n\t_removeClassFromMFP: function(cName) {\n\t\tthis.bgOverlay.removeClass(cName);\n\t\tmfp.wrap.removeClass(cName);\n\t},\n\t_hasScrollBar: function(winHeight) {\n\t\treturn (  (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );\n\t},\n\t_setFocus: function() {\n\t\t(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();\n\t},\n\t_onFocusIn: function(e) {\n\t\tif( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {\n\t\t\tmfp._setFocus();\n\t\t\treturn false;\n\t\t}\n\t},\n\t_parseMarkup: function(template, values, item) {\n\t\tvar arr;\n\t\tif(item.data) {\n\t\t\tvalues = $.extend(item.data, values);\n\t\t}\n\t\t_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );\n\n\t\t$.each(values, function(key, value) {\n\t\t\tif(value === undefined || value === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tarr = key.split('_');\n\t\t\tif(arr.length > 1) {\n\t\t\t\tvar el = template.find(EVENT_NS + '-'+arr[0]);\n\n\t\t\t\tif(el.length > 0) {\n\t\t\t\t\tvar attr = arr[1];\n\t\t\t\t\tif(attr === 'replaceWith') {\n\t\t\t\t\t\tif(el[0] !== value[0]) {\n\t\t\t\t\t\t\tel.replaceWith(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(attr === 'img') {\n\t\t\t\t\t\tif(el.is('img')) {\n\t\t\t\t\t\t\tel.attr('src', value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.attr(arr[1], value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\ttemplate.find(EVENT_NS + '-'+key).html(value);\n\t\t\t}\n\t\t});\n\t},\n\n\t_getScrollbarSize: function() {\n\t\t// thx David\n\t\tif(mfp.scrollbarSize === undefined) {\n\t\t\tvar scrollDiv = document.createElement(\"div\");\n\t\t\tscrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';\n\t\t\tdocument.body.appendChild(scrollDiv);\n\t\t\tmfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t\tdocument.body.removeChild(scrollDiv);\n\t\t}\n\t\treturn mfp.scrollbarSize;\n\t}\n\n}; /* MagnificPopup core prototype end */\n\n\n\n\n/**\n * Public static functions\n */\n$.magnificPopup = {\n\tinstance: null,\n\tproto: MagnificPopup.prototype,\n\tmodules: [],\n\n\topen: function(options, index) {\n\t\t_checkInstance();\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t} else {\n\t\t\toptions = $.extend(true, {}, options);\n\t\t}\n\n\t\toptions.isObj = true;\n\t\toptions.index = index || 0;\n\t\treturn this.instance.open(options);\n\t},\n\n\tclose: function() {\n\t\treturn $.magnificPopup.instance && $.magnificPopup.instance.close();\n\t},\n\n\tregisterModule: function(name, module) {\n\t\tif(module.options) {\n\t\t\t$.magnificPopup.defaults[name] = module.options;\n\t\t}\n\t\t$.extend(this.proto, module.proto);\n\t\tthis.modules.push(name);\n\t},\n\n\tdefaults: {\n\n\t\t// Info about options is in docs:\n\t\t// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options\n\n\t\tdisableOn: 0,\n\n\t\tkey: null,\n\n\t\tmidClick: false,\n\n\t\tmainClass: '',\n\n\t\tpreloader: true,\n\n\t\tfocus: '', // CSS selector of input to focus after popup is opened\n\n\t\tcloseOnContentClick: false,\n\n\t\tcloseOnBgClick: true,\n\n\t\tcloseBtnInside: true,\n\n\t\tshowCloseBtn: true,\n\n\t\tenableEscapeKey: true,\n\n\t\tmodal: false,\n\n\t\talignTop: false,\n\n\t\tremovalDelay: 0,\n\n\t\tprependTo: null,\n\n\t\tfixedContentPos: 'auto',\n\n\t\tfixedBgPos: 'auto',\n\n\t\toverflowY: 'auto',\n\n\t\tcloseMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\">&#215;</button>',\n\n\t\ttClose: 'Close (Esc)',\n\n\t\ttLoading: 'Loading...',\n\n\t\tautoFocusLast: true\n\n\t}\n};\n\n\n\n$.fn.magnificPopup = function(options) {\n\t_checkInstance();\n\n\tvar jqEl = $(this);\n\n\t// We call some API method of first param is a string\n\tif (typeof options === \"string\" ) {\n\n\t\tif(options === 'open') {\n\t\t\tvar items,\n\t\t\t\titemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,\n\t\t\t\tindex = parseInt(arguments[1], 10) || 0;\n\n\t\t\tif(itemOpts.items) {\n\t\t\t\titems = itemOpts.items[index];\n\t\t\t} else {\n\t\t\t\titems = jqEl;\n\t\t\t\tif(itemOpts.delegate) {\n\t\t\t\t\titems = items.find(itemOpts.delegate);\n\t\t\t\t}\n\t\t\t\titems = items.eq( index );\n\t\t\t}\n\t\t\tmfp._openClick({mfpEl:items}, jqEl, itemOpts);\n\t\t} else {\n\t\t\tif(mfp.isOpen)\n\t\t\t\tmfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\n\t} else {\n\t\t// clone options obj\n\t\toptions = $.extend(true, {}, options);\n\n\t\t/*\n\t\t * As Zepto doesn't support .data() method for objects\n\t\t * and it works only in normal browsers\n\t\t * we assign \"options\" object directly to the DOM element. FTW!\n\t\t */\n\t\tif(_isJQ) {\n\t\t\tjqEl.data('magnificPopup', options);\n\t\t} else {\n\t\t\tjqEl[0].magnificPopup = options;\n\t\t}\n\n\t\tmfp.addGroup(jqEl, options);\n\n\t}\n\treturn jqEl;\n};\n\n/*>>core*/\n\n/*>>inline*/\n\nvar INLINE_NS = 'inline',\n\t_hiddenClass,\n\t_inlinePlaceholder,\n\t_lastInlineElement,\n\t_putInlineElementsBack = function() {\n\t\tif(_lastInlineElement) {\n\t\t\t_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();\n\t\t\t_lastInlineElement = null;\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(INLINE_NS, {\n\toptions: {\n\t\thiddenClass: 'hide', // will be appended with `mfp-` prefix\n\t\tmarkup: '',\n\t\ttNotFound: 'Content not found'\n\t},\n\tproto: {\n\n\t\tinitInline: function() {\n\t\t\tmfp.types.push(INLINE_NS);\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {\n\t\t\t\t_putInlineElementsBack();\n\t\t\t});\n\t\t},\n\n\t\tgetInline: function(item, template) {\n\n\t\t\t_putInlineElementsBack();\n\n\t\t\tif(item.src) {\n\t\t\t\tvar inlineSt = mfp.st.inline,\n\t\t\t\t\tel = $(item.src);\n\n\t\t\t\tif(el.length) {\n\n\t\t\t\t\t// If target element has parent - we replace it with placeholder and put it back after popup is closed\n\t\t\t\t\tvar parent = el[0].parentNode;\n\t\t\t\t\tif(parent && parent.tagName) {\n\t\t\t\t\t\tif(!_inlinePlaceholder) {\n\t\t\t\t\t\t\t_hiddenClass = inlineSt.hiddenClass;\n\t\t\t\t\t\t\t_inlinePlaceholder = _getEl(_hiddenClass);\n\t\t\t\t\t\t\t_hiddenClass = 'mfp-'+_hiddenClass;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// replace target inline element with placeholder\n\t\t\t\t\t\t_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);\n\t\t\t\t\t}\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t} else {\n\t\t\t\t\tmfp.updateStatus('error', inlineSt.tNotFound);\n\t\t\t\t\tel = $('<div>');\n\t\t\t\t}\n\n\t\t\t\titem.inlineElement = el;\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('ready');\n\t\t\tmfp._parseMarkup(template, {}, item);\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>inline*/\n\n/*>>ajax*/\nvar AJAX_NS = 'ajax',\n\t_ajaxCur,\n\t_removeAjaxCursor = function() {\n\t\tif(_ajaxCur) {\n\t\t\t$(document.body).removeClass(_ajaxCur);\n\t\t}\n\t},\n\t_destroyAjaxRequest = function() {\n\t\t_removeAjaxCursor();\n\t\tif(mfp.req) {\n\t\t\tmfp.req.abort();\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(AJAX_NS, {\n\n\toptions: {\n\t\tsettings: null,\n\t\tcursor: 'mfp-ajax-cur',\n\t\ttError: '<a href=\"%url%\">The content</a> could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitAjax: function() {\n\t\t\tmfp.types.push(AJAX_NS);\n\t\t\t_ajaxCur = mfp.st.ajax.cursor;\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);\n\t\t\t_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);\n\t\t},\n\t\tgetAjax: function(item) {\n\n\t\t\tif(_ajaxCur) {\n\t\t\t\t$(document.body).addClass(_ajaxCur);\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\n\t\t\tvar opts = $.extend({\n\t\t\t\turl: item.src,\n\t\t\t\tsuccess: function(data, textStatus, jqXHR) {\n\t\t\t\t\tvar temp = {\n\t\t\t\t\t\tdata:data,\n\t\t\t\t\t\txhr:jqXHR\n\t\t\t\t\t};\n\n\t\t\t\t\t_mfpTrigger('ParseAjax', temp);\n\n\t\t\t\t\tmfp.appendContent( $(temp.data), AJAX_NS );\n\n\t\t\t\t\titem.finished = true;\n\n\t\t\t\t\t_removeAjaxCursor();\n\n\t\t\t\t\tmfp._setFocus();\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tmfp.wrap.addClass(READY_CLASS);\n\t\t\t\t\t}, 16);\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\n\t\t\t\t\t_mfpTrigger('AjaxContentAdded');\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\t_removeAjaxCursor();\n\t\t\t\t\titem.finished = item.loadError = true;\n\t\t\t\t\tmfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));\n\t\t\t\t}\n\t\t\t}, mfp.st.ajax.settings);\n\n\t\t\tmfp.req = $.ajax(opts);\n\n\t\t\treturn '';\n\t\t}\n\t}\n});\n\n/*>>ajax*/\n\n/*>>image*/\nvar _imgInterval,\n\t_getTitle = function(item) {\n\t\tif(item.data && item.data.title !== undefined)\n\t\t\treturn item.data.title;\n\n\t\tvar src = mfp.st.image.titleSrc;\n\n\t\tif(src) {\n\t\t\tif($.isFunction(src)) {\n\t\t\t\treturn src.call(mfp, item);\n\t\t\t} else if(item.el) {\n\t\t\t\treturn item.el.attr(src) || '';\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\n$.magnificPopup.registerModule('image', {\n\n\toptions: {\n\t\tmarkup: '<div class=\"mfp-figure\">'+\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\n\t\t\t\t\t'<figure>'+\n\t\t\t\t\t\t'<div class=\"mfp-img\"></div>'+\n\t\t\t\t\t\t'<figcaption>'+\n\t\t\t\t\t\t\t'<div class=\"mfp-bottom-bar\">'+\n\t\t\t\t\t\t\t\t'<div class=\"mfp-title\"></div>'+\n\t\t\t\t\t\t\t\t'<div class=\"mfp-counter\"></div>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</figcaption>'+\n\t\t\t\t\t'</figure>'+\n\t\t\t\t'</div>',\n\t\tcursor: 'mfp-zoom-out-cur',\n\t\ttitleSrc: 'title',\n\t\tverticalFit: true,\n\t\ttError: '<a href=\"%url%\">The image</a> could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitImage: function() {\n\t\t\tvar imgSt = mfp.st.image,\n\t\t\t\tns = '.image';\n\n\t\t\tmfp.types.push('image');\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\t\t\t\tif(mfp.currItem.type === 'image' && imgSt.cursor) {\n\t\t\t\t\t$(document.body).addClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(imgSt.cursor) {\n\t\t\t\t\t$(document.body).removeClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t\t_window.off('resize' + EVENT_NS);\n\t\t\t});\n\n\t\t\t_mfpOn('Resize'+ns, mfp.resizeImage);\n\t\t\tif(mfp.isLowIE) {\n\t\t\t\t_mfpOn('AfterChange', mfp.resizeImage);\n\t\t\t}\n\t\t},\n\t\tresizeImage: function() {\n\t\t\tvar item = mfp.currItem;\n\t\t\tif(!item || !item.img) return;\n\n\t\t\tif(mfp.st.image.verticalFit) {\n\t\t\t\tvar decr = 0;\n\t\t\t\t// fix box-sizing in ie7/8\n\t\t\t\tif(mfp.isLowIE) {\n\t\t\t\t\tdecr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);\n\t\t\t\t}\n\t\t\t\titem.img.css('max-height', mfp.wH-decr);\n\t\t\t}\n\t\t},\n\t\t_onImageHasSize: function(item) {\n\t\t\tif(item.img) {\n\n\t\t\t\titem.hasSize = true;\n\n\t\t\t\tif(_imgInterval) {\n\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t}\n\n\t\t\t\titem.isCheckingImgSize = false;\n\n\t\t\t\t_mfpTrigger('ImageHasSize', item);\n\n\t\t\t\tif(item.imgHidden) {\n\t\t\t\t\tif(mfp.content)\n\t\t\t\t\t\tmfp.content.removeClass('mfp-loading');\n\n\t\t\t\t\titem.imgHidden = false;\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Function that loops until the image has size to display elements that rely on it asap\n\t\t */\n\t\tfindImageSize: function(item) {\n\n\t\t\tvar counter = 0,\n\t\t\t\timg = item.img[0],\n\t\t\t\tmfpSetInterval = function(delay) {\n\n\t\t\t\t\tif(_imgInterval) {\n\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t}\n\t\t\t\t\t// decelerating interval that checks for size of an image\n\t\t\t\t\t_imgInterval = setInterval(function() {\n\t\t\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(counter > 200) {\n\t\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\tif(counter === 3) {\n\t\t\t\t\t\t\tmfpSetInterval(10);\n\t\t\t\t\t\t} else if(counter === 40) {\n\t\t\t\t\t\t\tmfpSetInterval(50);\n\t\t\t\t\t\t} else if(counter === 100) {\n\t\t\t\t\t\t\tmfpSetInterval(500);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay);\n\t\t\t\t};\n\n\t\t\tmfpSetInterval(1);\n\t\t},\n\n\t\tgetImage: function(item, template) {\n\n\t\t\tvar guard = 0,\n\n\t\t\t\t// image load complete handler\n\t\t\t\tonLoadComplete = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\tif (item.img[0].complete) {\n\t\t\t\t\t\t\titem.img.off('.mfploader');\n\n\t\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\n\t\t\t\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\t\titem.loaded = true;\n\n\t\t\t\t\t\t\t_mfpTrigger('ImageLoadComplete');\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// if image complete check fails 200 times (20 sec), we assume that there was an error.\n\t\t\t\t\t\t\tguard++;\n\t\t\t\t\t\t\tif(guard < 200) {\n\t\t\t\t\t\t\t\tsetTimeout(onLoadComplete,100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonLoadError();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// image error handler\n\t\t\t\tonLoadError = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\titem.img.off('.mfploader');\n\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\titem.loaded = true;\n\t\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\timgSt = mfp.st.image;\n\n\n\t\t\tvar el = template.find('.mfp-img');\n\t\t\tif(el.length) {\n\t\t\t\tvar img = document.createElement('img');\n\t\t\t\timg.className = 'mfp-img';\n\t\t\t\tif(item.el && item.el.find('img').length) {\n\t\t\t\t\timg.alt = item.el.find('img').attr('alt');\n\t\t\t\t}\n\t\t\t\titem.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);\n\t\t\t\timg.src = item.src;\n\n\t\t\t\t// without clone() \"error\" event is not firing when IMG is replaced by new IMG\n\t\t\t\t// TODO: find a way to avoid such cloning\n\t\t\t\tif(el.is('img')) {\n\t\t\t\t\titem.img = item.img.clone();\n\t\t\t\t}\n\n\t\t\t\timg = item.img[0];\n\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t} else if(!img.width) {\n\t\t\t\t\titem.hasSize = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmfp._parseMarkup(template, {\n\t\t\t\ttitle: _getTitle(item),\n\t\t\t\timg_replaceWith: item.img\n\t\t\t}, item);\n\n\t\t\tmfp.resizeImage();\n\n\t\t\tif(item.hasSize) {\n\t\t\t\tif(_imgInterval) clearInterval(_imgInterval);\n\n\t\t\t\tif(item.loadError) {\n\t\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t} else {\n\t\t\t\t\ttemplate.removeClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t}\n\t\t\t\treturn template;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\t\t\titem.loading = true;\n\n\t\t\tif(!item.hasSize) {\n\t\t\t\titem.imgHidden = true;\n\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\tmfp.findImageSize(item);\n\t\t\t}\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>image*/\n\n/*>>zoom*/\nvar hasMozTransform,\n\tgetHasMozTransform = function() {\n\t\tif(hasMozTransform === undefined) {\n\t\t\thasMozTransform = document.createElement('p').style.MozTransform !== undefined;\n\t\t}\n\t\treturn hasMozTransform;\n\t};\n\n$.magnificPopup.registerModule('zoom', {\n\n\toptions: {\n\t\tenabled: false,\n\t\teasing: 'ease-in-out',\n\t\tduration: 300,\n\t\topener: function(element) {\n\t\t\treturn element.is('img') ? element : element.find('img');\n\t\t}\n\t},\n\n\tproto: {\n\n\t\tinitZoom: function() {\n\t\t\tvar zoomSt = mfp.st.zoom,\n\t\t\t\tns = '.zoom',\n\t\t\t\timage;\n\n\t\t\tif(!zoomSt.enabled || !mfp.supportsTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar duration = zoomSt.duration,\n\t\t\t\tgetElToAnimate = function(image) {\n\t\t\t\t\tvar newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),\n\t\t\t\t\t\ttransition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,\n\t\t\t\t\t\tcssObj = {\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t'-webkit-backface-visibility': 'hidden'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tt = 'transition';\n\n\t\t\t\t\tcssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;\n\n\t\t\t\t\tnewImg.css(cssObj);\n\t\t\t\t\treturn newImg;\n\t\t\t\t},\n\t\t\t\tshowMainContent = function() {\n\t\t\t\t\tmfp.content.css('visibility', 'visible');\n\t\t\t\t},\n\t\t\t\topenTimeout,\n\t\t\t\tanimatedImg;\n\n\t\t\t_mfpOn('BuildControls'+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\t// Basically, all code below does is clones existing image, puts in on top of the current one and animated it\n\n\t\t\t\t\timage = mfp._getItemToZoom();\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\tshowMainContent();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\n\t\t\t\t\topenTimeout = setTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset( true ) );\n\t\t\t\t\t\topenTimeout = setTimeout(function() {\n\n\t\t\t\t\t\t\tshowMainContent();\n\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t\t\t\timage = animatedImg = null;\n\t\t\t\t\t\t\t\t_mfpTrigger('ZoomAnimationEnded');\n\t\t\t\t\t\t\t}, 16); // avoid blink when switching images\n\n\t\t\t\t\t\t}, duration); // this timeout equals animation duration\n\n\t\t\t\t\t}, 16); // by adding this timeout we avoid short glitch at the beginning of animation\n\n\n\t\t\t\t\t// Lots of timeouts...\n\t\t\t\t}\n\t\t\t});\n\t\t\t_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\n\t\t\t\t\tmfp.st.removalDelay = duration;\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\timage = mfp._getItemToZoom();\n\t\t\t\t\t\tif(!image) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset(true) );\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\t\t\t\t\t}, 16);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\t\t\t\t\tshowMainContent();\n\t\t\t\t\tif(animatedImg) {\n\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t}\n\t\t\t\t\timage = null;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_allowZoom: function() {\n\t\t\treturn mfp.currItem.type === 'image';\n\t\t},\n\n\t\t_getItemToZoom: function() {\n\t\t\tif(mfp.currItem.hasSize) {\n\t\t\t\treturn mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Get element postion relative to viewport\n\t\t_getOffset: function(isLarge) {\n\t\t\tvar el;\n\t\t\tif(isLarge) {\n\t\t\t\tel = mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\tel = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);\n\t\t\t}\n\n\t\t\tvar offset = el.offset();\n\t\t\tvar paddingTop = parseInt(el.css('padding-top'),10);\n\t\t\tvar paddingBottom = parseInt(el.css('padding-bottom'),10);\n\t\t\toffset.top -= ( $(window).scrollTop() - paddingTop );\n\n\n\t\t\t/*\n\n\t\t\tAnimating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.\n\n\t\t\t */\n\t\t\tvar obj = {\n\t\t\t\twidth: el.width(),\n\t\t\t\t// fix Zepto height+padding issue\n\t\t\t\theight: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop\n\t\t\t};\n\n\t\t\t// I hate to do this, but there is no another option\n\t\t\tif( getHasMozTransform() ) {\n\t\t\t\tobj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';\n\t\t\t} else {\n\t\t\t\tobj.left = offset.left;\n\t\t\t\tobj.top = offset.top;\n\t\t\t}\n\t\t\treturn obj;\n\t\t}\n\n\t}\n});\n\n\n\n/*>>zoom*/\n\n/*>>iframe*/\n\nvar IFRAME_NS = 'iframe',\n\t_emptyPage = '//about:blank',\n\n\t_fixIframeBugs = function(isShowing) {\n\t\tif(mfp.currTemplate[IFRAME_NS]) {\n\t\t\tvar el = mfp.currTemplate[IFRAME_NS].find('iframe');\n\t\t\tif(el.length) {\n\t\t\t\t// reset src after the popup is closed to avoid \"video keeps playing after popup is closed\" bug\n\t\t\t\tif(!isShowing) {\n\t\t\t\t\tel[0].src = _emptyPage;\n\t\t\t\t}\n\n\t\t\t\t// IE8 black screen bug fix\n\t\t\t\tif(mfp.isIE8) {\n\t\t\t\t\tel.css('display', isShowing ? 'block' : 'none');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(IFRAME_NS, {\n\n\toptions: {\n\t\tmarkup: '<div class=\"mfp-iframe-scaler\">'+\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\n\t\t\t\t\t'<iframe class=\"mfp-iframe\" src=\"//about:blank\" frameborder=\"0\" allowfullscreen></iframe>'+\n\t\t\t\t'</div>',\n\n\t\tsrcAction: 'iframe_src',\n\n\t\t// we don't care and support only one default type of URL by default\n\t\tpatterns: {\n\t\t\tyoutube: {\n\t\t\t\tindex: 'youtube.com',\n\t\t\t\tid: 'v=',\n\t\t\t\tsrc: '//www.youtube.com/embed/%id%?autoplay=1'\n\t\t\t},\n\t\t\tvimeo: {\n\t\t\t\tindex: 'vimeo.com/',\n\t\t\t\tid: '/',\n\t\t\t\tsrc: '//player.vimeo.com/video/%id%?autoplay=1'\n\t\t\t},\n\t\t\tgmaps: {\n\t\t\t\tindex: '//maps.google.',\n\t\t\t\tsrc: '%id%&output=embed'\n\t\t\t}\n\t\t}\n\t},\n\n\tproto: {\n\t\tinitIframe: function() {\n\t\t\tmfp.types.push(IFRAME_NS);\n\n\t\t\t_mfpOn('BeforeChange', function(e, prevType, newType) {\n\t\t\t\tif(prevType !== newType) {\n\t\t\t\t\tif(prevType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(); // iframe if removed\n\t\t\t\t\t} else if(newType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(true); // iframe is showing\n\t\t\t\t\t}\n\t\t\t\t}// else {\n\t\t\t\t\t// iframe source is switched, don't do anything\n\t\t\t\t//}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {\n\t\t\t\t_fixIframeBugs();\n\t\t\t});\n\t\t},\n\n\t\tgetIframe: function(item, template) {\n\t\t\tvar embedSrc = item.src;\n\t\t\tvar iframeSt = mfp.st.iframe;\n\n\t\t\t$.each(iframeSt.patterns, function() {\n\t\t\t\tif(embedSrc.indexOf( this.index ) > -1) {\n\t\t\t\t\tif(this.id) {\n\t\t\t\t\t\tif(typeof this.id === 'string') {\n\t\t\t\t\t\t\tembedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tembedSrc = this.id.call( this, embedSrc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tembedSrc = this.src.replace('%id%', embedSrc );\n\t\t\t\t\treturn false; // break;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar dataObj = {};\n\t\t\tif(iframeSt.srcAction) {\n\t\t\t\tdataObj[iframeSt.srcAction] = embedSrc;\n\t\t\t}\n\t\t\tmfp._parseMarkup(template, dataObj, item);\n\n\t\t\tmfp.updateStatus('ready');\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n\n\n/*>>iframe*/\n\n/*>>gallery*/\n/**\n * Get looped index depending on number of slides\n */\nvar _getLoopedId = function(index) {\n\t\tvar numSlides = mfp.items.length;\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else  if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t_replaceCurrTotal = function(text, curr, total) {\n\t\treturn text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);\n\t};\n\n$.magnificPopup.registerModule('gallery', {\n\n\toptions: {\n\t\tenabled: false,\n\t\tarrowMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-arrow mfp-arrow-%dir%\"></button>',\n\t\tpreload: [0,2],\n\t\tnavigateByImgClick: true,\n\t\tarrows: true,\n\n\t\ttPrev: 'Previous (Left arrow key)',\n\t\ttNext: 'Next (Right arrow key)',\n\t\ttCounter: '%curr% of %total%'\n\t},\n\n\tproto: {\n\t\tinitGallery: function() {\n\n\t\t\tvar gSt = mfp.st.gallery,\n\t\t\t\tns = '.mfp-gallery';\n\n\t\t\tmfp.direction = true; // true - next, false - prev\n\n\t\t\tif(!gSt || !gSt.enabled ) return false;\n\n\t\t\t_wrapClasses += ' mfp-gallery';\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\n\t\t\t\tif(gSt.navigateByImgClick) {\n\t\t\t\t\tmfp.wrap.on('click'+ns, '.mfp-img', function() {\n\t\t\t\t\t\tif(mfp.items.length > 1) {\n\t\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_document.on('keydown'+ns, function(e) {\n\t\t\t\t\tif (e.keyCode === 37) {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t} else if (e.keyCode === 39) {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t_mfpOn('UpdateStatus'+ns, function(e, data) {\n\t\t\t\tif(data.text) {\n\t\t\t\t\tdata.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {\n\t\t\t\tvar l = mfp.items.length;\n\t\t\t\tvalues.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';\n\t\t\t});\n\n\t\t\t_mfpOn('BuildControls' + ns, function() {\n\t\t\t\tif(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {\n\t\t\t\t\tvar markup = gSt.arrowMarkup,\n\t\t\t\t\t\tarrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),\n\t\t\t\t\t\tarrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);\n\n\t\t\t\t\tarrowLeft.click(function() {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t});\n\t\t\t\t\tarrowRight.click(function() {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t});\n\n\t\t\t\t\tmfp.container.append(arrowLeft.add(arrowRight));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CHANGE_EVENT+ns, function() {\n\t\t\t\tif(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);\n\n\t\t\t\tmfp._preloadTimeout = setTimeout(function() {\n\t\t\t\t\tmfp.preloadNearbyImages();\n\t\t\t\t\tmfp._preloadTimeout = null;\n\t\t\t\t}, 16);\n\t\t\t});\n\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\t_document.off(ns);\n\t\t\t\tmfp.wrap.off('click'+ns);\n\t\t\t\tmfp.arrowRight = mfp.arrowLeft = null;\n\t\t\t});\n\n\t\t},\n\t\tnext: function() {\n\t\t\tmfp.direction = true;\n\t\t\tmfp.index = _getLoopedId(mfp.index + 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tprev: function() {\n\t\t\tmfp.direction = false;\n\t\t\tmfp.index = _getLoopedId(mfp.index - 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tgoTo: function(newIndex) {\n\t\t\tmfp.direction = (newIndex >= mfp.index);\n\t\t\tmfp.index = newIndex;\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tpreloadNearbyImages: function() {\n\t\t\tvar p = mfp.st.gallery.preload,\n\t\t\t\tpreloadBefore = Math.min(p[0], mfp.items.length),\n\t\t\t\tpreloadAfter = Math.min(p[1], mfp.items.length),\n\t\t\t\ti;\n\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index+i);\n\t\t\t}\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index-i);\n\t\t\t}\n\t\t},\n\t\t_preloadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\n\t\t\tif(mfp.items[index].preloaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = mfp.items[index];\n\t\t\tif(!item.parsed) {\n\t\t\t\titem = mfp.parseEl( index );\n\t\t\t}\n\n\t\t\t_mfpTrigger('LazyLoad', item);\n\n\t\t\tif(item.type === 'image') {\n\t\t\t\titem.img = $('<img class=\"mfp-img\" />').on('load.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t}).on('error.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t_mfpTrigger('LazyLoadError', item);\n\t\t\t\t}).attr('src', item.src);\n\t\t\t}\n\n\n\t\t\titem.preloaded = true;\n\t\t}\n\t}\n});\n\n/*>>gallery*/\n\n/*>>retina*/\n\nvar RETINA_NS = 'retina';\n\n$.magnificPopup.registerModule(RETINA_NS, {\n\toptions: {\n\t\treplaceSrc: function(item) {\n\t\t\treturn item.src.replace(/\\.\\w+$/, function(m) { return '@2x' + m; });\n\t\t},\n\t\tratio: 1 // Function or number.  Set to 1 to disable.\n\t},\n\tproto: {\n\t\tinitRetina: function() {\n\t\t\tif(window.devicePixelRatio > 1) {\n\n\t\t\t\tvar st = mfp.st.retina,\n\t\t\t\t\tratio = st.ratio;\n\n\t\t\t\tratio = !isNaN(ratio) ? ratio : ratio();\n\n\t\t\t\tif(ratio > 1) {\n\t\t\t\t\t_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.img.css({\n\t\t\t\t\t\t\t'max-width': item.img[0].naturalWidth / ratio,\n\t\t\t\t\t\t\t'width': '100%'\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.src = st.replaceSrc(item, ratio);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n});\n\n/*>>retina*/\n _checkInstance(); }));"
28080
28081/***/ }),
28082
vendor: 1,616 bytes, lines 28083-28129
28083/***/ "../node_modules/script-loader/addScript.js":
28084/*!**************************************************!*\
28085  !*** ../node_modules/script-loader/addScript.js ***!
28086  \**************************************************/
28087/***/ (function(module) {
28088
28089/*
28090	MIT License http://www.opensource.org/licenses/mit-license.php
28091	Author Tobias Koppers @sokra
28092*/
28093module.exports = function(src) {
28094	function log(error) {
28095		(typeof console !== "undefined")
28096		&& (console.error || console.log)("[Script Loader]", error);
28097	}
28098
28099	// Check for IE =< 8
28100	function isIE() {
28101		return typeof attachEvent !== "undefined" && typeof addEventListener === "undefined";
28102	}
28103
28104	try {
28105		if (typeof execScript !== "undefined" && isIE()) {
28106			execScript(src);
28107		} else if (typeof eval !== "undefined") {
28108			eval.call(null, src);
28109		} else {
28110			log("EvalError: No eval function available");
28111		}
28112	} catch (error) {
28113		log(error);
28114	}
28115}
28116
28117
28118/***/ }),
28119
28120/***/ "../node_modules/script-loader/index.js!./resources/js/src/magnific.js":
28121/*!*****************************************************************************!*\
28122  !*** ../node_modules/script-loader/index.js!./resources/js/src/magnific.js ***!
28123  \*****************************************************************************/
28124/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
28125
28126__webpack_require__(/*! !!../node_modules/script-loader/addScript.js */ "../node_modules/script-loader/addScript.js")(__webpack_require__(/*! !!../node_modules/raw-loader/index.js!./resources/js/src/magnific.js */ "../node_modules/raw-loader/index.js!./resources/js/src/magnific.js"))
28127
28128/***/ }),
28129
28130/***/ "./resources/css/src/stylesheet.scss":
28131/*!*******************************************!*\
28132  !*** ./resources/css/src/stylesheet.scss ***!
28133  \*******************************************/
28134/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
28135
28136"use strict";
28137__webpack_require__.r(__webpack_exports__);
28138// extracted by mini-css-extract-plugin
28139
28140
28141/***/ }),
28142
28143/***/ "./resources/js/src/material-design.js":
28144/*!*********************************************!*\
28145  !*** ./resources/js/src/material-design.js ***!
28146  \*********************************************/
28147/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
28148
28149"use strict";
28150__webpack_require__.r(__webpack_exports__);
28151/* harmony import */ var libphonenumber_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! libphonenumber-js */ "../node_modules/libphonenumber-js/min/exports/AsYouType.js");
28152/* harmony import */ var libphonenumber_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! libphonenumber-js */ "../node_modules/libphonenumber-js/es6/helpers/parseDigits.js");
28153
28154
28155const checkValue = FormInput => {
28156  const element = $(FormInput);
28157  // check if the input has any value (if we've typed into it)
28158  if (element.val()) {
28159    const inputValue = element.val();
28160    if (element.attr("type") === "tel") {
28161      const formattedNumber = new libphonenumber_js__WEBPACK_IMPORTED_MODULE_0__.AsYouType("US").input(
28162        (0,libphonenumber_js__WEBPACK_IMPORTED_MODULE_1__["default"])(inputValue.toString())
28163      );
28164      element.val(formattedNumber);
28165    }
28166    element.parent(".float-label-wrapper").addClass("has-value");
28167  } else {
28168    element.parent(".float-label-wrapper").removeClass("has-value");
28169  }
28170};
28171
28172$(document).ready(() => {
28173  // Run on page load
28174  $(".float-label").each((index, element) => checkValue(element));
28175  // Run on input exit
28176  $(".float-label")
28177    .blur(e => checkValue(e.target))
28178    .change(e => !$(e.target).hasClass("has-value") && checkValue(e.target))
28179    .keyup(e => !$(e.target).hasClass("has-value") && checkValue(e.target));
28180});
28181
28182
28183/***/ }),
28184
28185/***/ "./resources/js/src/place-autocomplete.js":
28186/*!************************************************!*\
28187  !*** ./resources/js/src/place-autocomplete.js ***!
28188  \************************************************/
28189/***/ (function() {
28190
28191// Take unique Id of inputs and retrieves sibling components
28192const getComponents = id => ({
28193  street_number: {
28194    component: `${id}`,
28195    type: "long_name"
28196  },
28197  optional_line_2: {
28198    component: `${id}-line-2`,
28199    type: "long_name"
28200  },
28201  locality: {
28202    component: `${id}-city`,
28203    type: "long_name"
28204  },
28205  postal_code: {
28206    component: `${id}-postal`,
28207    type: "short_name"
28208  },
28209  country: {
28210    component: `${id}-country`,
28211    type: "short_name"
28212  },
28213  administrative_area_level_1: {
28214    component: `${id}-state`,
28215    type: "short_name"
28216  },
28217  route: {
28218    component: `${id}`,
28219    type: "long_name"
28220  }
28221});
28222
28223$(document).ready(() => {
28224  const placesState = {};
28225
28226  const setup = function(parent) {
28227    const getKey = id => {
28228      if (parent) return parent + " #" + id;
28229
28230      return "#" + id;
28231    };
28232    const selector = parent
28233      ? parent + " input.places-autocomplete-line-1"
28234      : ".places-autocomplete-line-1";
28235    $(selector).each((i, e) => {
28236      const inputId = $(e).attr("id");
28237      const key = getKey(inputId);
28238      if (!placesState[key]) {
28239        placesState[key] = {
28240          autocomplete: null,
28241          components: getComponents(inputId)
28242        };
28243      }
28244    });
28245
28246    // Listen's to focus event for auto complete
28247    $(selector).focus(function(e) {
28248      // Get the id of current focused element
28249      const inputId = $(e.target).attr("id");
28250      // Initialize autocomplete
28251      const key = getKey(inputId);
28252      // if (!placesState[key].autocomplete) {
28253      initAutocomplete(inputId);
28254      // }
28255    });
28256
28257    function initAutocomplete(id) {
28258      // Create the autocomplete object, restricting the search predictions to
28259      // geographical location types.
28260      const key = getKey(id);
28261      placesState[key].autocomplete = new google.maps.places.Autocomplete(
28262        $(key)[0],
28263        {
28264          types: ["geocode"]
28265        }
28266      );
28267
28268      // Avoid paying for data that you don't need by restricting the set of
28269      // place fields that are returned to just the address components.
28270      placesState[key].autocomplete.setFields(["address_components"]);
28271
28272      // Get the place details from the autocomplete object.
28273      placesState[key].autocomplete.addListener("place_changed", () =>
28274        getAddress(key)
28275      );
28276    }
28277
28278    // When user chooses an address then parse returned value to consumable values
28279    function getAddress(id) {
28280      try {
28281        const { address_components } = placesState[id].autocomplete.getPlace();
28282        Object.keys(placesState[id].components).forEach(component => {
28283          const container = `.${placesState[id].components[component].component}-container`;
28284          $(container).css({ display: "block" });
28285        });
28286
28287        // Get each component of the address from the place details,
28288        // and then fill-in the corresponding field on the form.
28289        address_components.forEach(function(place) {
28290          const addressType = place.types[0];
28291          if (placesState[id].components[addressType]) {
28292            const val = place[placesState[id].components[addressType].type];
28293            const sel = `#${placesState[id].components[addressType].component}`;
28294
28295            if (addressType === "country") {
28296              const stateCode = "administrative_area_level_1";
28297              const t = `#${placesState[id].components[stateCode].component}`;
28298              const tV = address_components.find(function(v) {
28299                return v.types[0] === stateCode;
28300              });
28301              $(sel)
28302                .val(val)
28303                .trigger("change");
28304
28305              $(t)
28306                .val(tV.short_name)
28307                .trigger("change");
28308            } else if (addressType !== "route") {
28309              $(sel)
28310                .val(val)
28311                .trigger("change");
28312            } else {
28313              const previousValue = $(sel).val();
28314              $(sel)
28315                .val(previousValue.concat(" " + val))
28316                .trigger("change");
28317            }
28318          }
28319        });
28320      } catch (e) {}
28321    }
28322  };
28323
28324  $('div[id^="figureModal"]').on("show.bs.modal", function(e) {
28325    $(document).ajaxComplete(function(event, xhr, settings) {
28326      try {
28327        window.crs.init();
28328        const modal = $(e.relatedTarget).attr("data-target");
28329        setup(modal);
28330      } catch (e) {}
28331    });
28332  });
28333
28334  setup();
28335});
28336
28337
28338/***/ }),
28339
28340/***/ "./resources/js/src/theme.js":
28341/*!***********************************!*\
28342  !*** ./resources/js/src/theme.js ***!
28343  \***********************************/
28344/***/ (function() {
28345
28346var FIGURE = FIGURE || {};
28347
28348FIGURE.shippingMessage = function() {
28349	var specialMessageModal = $.cookie('specialmessage');
28350	if (specialMessageModal == 'read') {
28351		return;
28352	} else {
28353		setTimeout(function(){
28354			$('#figureMessageModal').modal();
28355		}, 3000);	
28356	}	
28357	$('#figureMessageModal').on('hide.bs.modal', function (event) {
28358		$.cookie('specialmessage', 'read', { path: '/' });
28359	});
28360	$('#figureMessageModal a').click(function() {
28361		$.cookie('specialmessage', 'read', { path: '/' });
28362	});
28363};
28364
28365FIGURE.ageGate = function() {
28366	$('.page-product-shop .figure-product-button').css('visibility','hidden');
28367	var ageGate = $.cookie('ageGate');
28368	if (ageGate == 'verified') {
28369		$('.page-product-shop .figure-product-button').css('visibility','visible');
28370		return;
28371	} else {
28372		setTimeout(function(){
28373			$('#ageGateModal').modal();
28374		}, 1000);	
28375	}	
28376	$('#ageGateModal .verifyme').click(function() {
28377		$.cookie('ageGate', 'verified', { expires: 7, path: '/' });
28378		$('.page-product-shop .figure-product-button').css('visibility','visible');
28379	});
28380}();
28381
28382FIGURE.legacyInit = function() {
28383  //loader
28384  setTimeout(function() {
28385    $("body").addClass("loaded");
28386  }, 500);
28387  //headroom
28388  $(".larkmead-header").headroom({ tolerance: 10, offset: 10 });
28389
28390  //Carousel
28391  $(".carousel").carousel({
28392    interval: false
28393  }); 
28394}();
28395
28396FIGURE.moreLink = function() {
28397  $(".more-link").focus(function(e) {
28398    $("span.more-link").on("keyup", function(e) {
28399      if (e.which !== 13) return;
28400
28401      $(".more-link .more").css({
28402        opacity: 1,
28403        height: "auto",
28404        display: "block",
28405        overflow: "visible"
28406      });
28407    });
28408  });
28409  $(".banner-message").hide();
28410  $(".close-banner-message").click(function() {
28411	  $(".banner-message").hide();
28412	  return false;
28413  });
28414}();
28415
28416FIGURE.mobileNav = function() {  
28417  //mobile nav
28418  $(".hamburger").click(function() {
28419    if ($(this).hasClass("on")) {
28420      $(this).removeClass("on");
28421      $(".mobile-nav").removeClass("visible");
28422      $("body").css("overflow", "visible");
28423    } else {
28424      $(this).addClass("on");
28425      $(".mobile-nav").addClass("visible");
28426      $("body").css("overflow", "hidden");
28427    }
28428    return false;
28429  });
28430  $(".close-nav").click(function() {
28431    $(".mobile-nav").removeClass("visible");
28432    $("body").css("overflow", "visible");
28433    $(".hamburger").removeClass("on");
28434    return false;
28435  });
28436  $(document).on("keyup", function(evt) {
28437    if (evt.keyCode == 27) {
28438      $(".mobile-nav").removeClass("visible");
28439      $("body").css("overflow", "visible");
28440      $(".hamburger").removeClass("on");
28441      return false;
28442    }
28443  });
28444}();
28445
28446FIGURE.Scroller = function() {  
28447  //Scroller
28448
28449  var hashTagActive = "";
28450  $(".show-content").click(function(event) {
28451    var dest = 0;
28452    if ($(this.hash).offset().top > $(document).height() - $(window).height()) {
28453      dest = $(document).height() - $(window).height() - 80;
28454    } else {
28455      dest = $(this.hash).offset().top - 80;
28456    }
28457    //go to destination
28458    $("html,body").animate(
28459      {
28460        scrollTop: dest
28461      },
28462      500,
28463      "swing",
28464      function() {}
28465    );
28466  });
28467
28468  var hashTagActive = "";
28469  $(".scroll").click(function(event) {
28470    var dest = 0;
28471    if ($(this.hash).offset().top > $(document).height() - $(window).height()) {
28472      dest = $(document).height() - $(window).height() - 40;
28473    } else {
28474      dest = $(this.hash).offset().top - 40;
28475    }
28476    //go to destination
28477    $("html,body").animate(
28478      {
28479        scrollTop: dest
28480      },
28481      1000,
28482      "swing",
28483      function() {}
28484    );
28485    return false;
28486  });
28487}();
28488
28489FIGURE.showContent = function() {  
28490  //Show more content
28491  $(document).on("click", ".show-content", function() {
28492    var theTarget = $(this).attr("rel");
28493    if ($(this).hasClass("expanded")) {
28494      $(theTarget).slideUp(500);
28495      $(this).removeClass("expanded");
28496      //$('body').removeClass('slider-open');
28497    } else {
28498      //$('.hidden-content').slideUp(500);
28499      //$('.show-content').removeClass('expanded');
28500      $(this).addClass("expanded");
28501      $(theTarget).slideDown(500);
28502      //$('body').addClass('slider-open');
28503    }
28504    return false;
28505  });
28506}();
28507
28508FIGURE.Magnific = function() {  
28509  //Popups
28510  $(".ajax-popup-link").magnificPopup({
28511    type: "ajax",
28512    tLoading: "",
28513    gallery: {
28514      enabled: false
28515    }
28516  });
28517  $(".popup-gallery").each(function() {
28518    $(this).magnificPopup({
28519      delegate: "a",
28520      type: "image",
28521      tLoading: "Loading image #%curr%...",
28522      mainClass: "mfp-img-mobile",
28523      gallery: {
28524        tCounter: '<span class="mfp-counter">%curr% / %total%</span>',
28525        enabled: true,
28526        navigateByImgClick: true,
28527        preload: [0, 1] // Will preload 0 - before current, and 1 after the current image
28528      },
28529      image: {
28530        verticalFit: true,
28531        tError: '<a href="%url%">The image #%curr%</a> could not be loaded.',
28532        titleSrc: function(item) {
28533          return (
28534            '<span class="caption-special">' + item.el.attr("name") + "</span>"
28535          );
28536        }
28537      }
28538    });
28539  });
28540}();
28541
28542
28543
28544/***/ })
vendor: 4,061 bytes, lines 28544-28646
28544
28545
28546/******/ 	});
28547/************************************************************************/
28548/******/ 	// The module cache
28549/******/ 	var __webpack_module_cache__ = {};
28550/******/ 	
28551/******/ 	// The require function
28552/******/ 	function __webpack_require__(moduleId) {
28553/******/ 		// Check if module is in cache
28554/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
28555/******/ 		if (cachedModule !== undefined) {
28556/******/ 			return cachedModule.exports;
28557/******/ 		}
28558/******/ 		// Create a new module (and put it into the cache)
28559/******/ 		var module = __webpack_module_cache__[moduleId] = {
28560/******/ 			// no module.id needed
28561/******/ 			// no module.loaded needed
28562/******/ 			exports: {}
28563/******/ 		};
28564/******/ 	
28565/******/ 		// Execute the module function
28566/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
28567/******/ 	
28568/******/ 		// Return the exports of the module
28569/******/ 		return module.exports;
28570/******/ 	}
28571/******/ 	
28572/************************************************************************/
28573/******/ 	/* webpack/runtime/define property getters */
28574/******/ 	!function() {
28575/******/ 		// define getter functions for harmony exports
28576/******/ 		__webpack_require__.d = function(exports, definition) {
28577/******/ 			for(var key in definition) {
28578/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
28579/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
28580/******/ 				}
28581/******/ 			}
28582/******/ 		};
28583/******/ 	}();
28584/******/ 	
28585/******/ 	/* webpack/runtime/global */
28586/******/ 	!function() {
28587/******/ 		__webpack_require__.g = (function() {
28588/******/ 			if (typeof globalThis === 'object') return globalThis;
28589/******/ 			try {
28590/******/ 				return this || new Function('return this')();
28591/******/ 			} catch (e) {
28592/******/ 				if (typeof window === 'object') return window;
28593/******/ 			}
28594/******/ 		})();
28595/******/ 	}();
28596/******/ 	
28597/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
28598/******/ 	!function() {
28599/******/ 		__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
28600/******/ 	}();
28601/******/ 	
28602/******/ 	/* webpack/runtime/make namespace object */
28603/******/ 	!function() {
28604/******/ 		// define __esModule on exports
28605/******/ 		__webpack_require__.r = function(exports) {
28606/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
28607/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
28608/******/ 			}
28609/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
28610/******/ 		};
28611/******/ 	}();
28612/******/ 	
28613/************************************************************************/
28614var __webpack_exports__ = {};
28615// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
28616!function() {
28617/*!****************************************!*\
28618  !*** ./resources/js/src/javascript.js ***!
28619  \****************************************/
28620// Include Stylesheet
28621__webpack_require__(/*! ../../css/src/stylesheet.scss */ "./resources/css/src/stylesheet.scss");
28622
28623// Include Figure Base Resources
28624__webpack_require__(/*! FigureBaseResources */ "../FigureBaseResources/FigureBaseResources.js");
28625//Magnific plugin
28626__webpack_require__(/*! script-loader!./magnific.js */ "../node_modules/script-loader/index.js!./resources/js/src/magnific.js");
28627// Custom Site Stuff
28628__webpack_require__(/*! ./theme.js */ "./resources/js/src/theme.js");
28629//require('script-loader!./grid.js');
28630//require('script-loader!./modernizr.custom.js');
28631// Google Places Autocomplete
28632__webpack_require__(/*! ./place-autocomplete.js */ "./resources/js/src/place-autocomplete.js");
28633
28634// Material Design
28635__webpack_require__(/*! ./material-design.js */ "./resources/js/src/material-design.js");
28636
28637// Load via script tag:
28638// require('script-loader!./scroller.js')
28639
28640// Expose a variable from a library:
28641// const scroller = require('expose-loader?scroller!./scroller.js')
28642
28643}();
28644/******/ })()
28645;
28646//# sourceMappingURL=javascript.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.