PageSourceSearch

https://www.icpp2023.org/sites/default/files/js/js_OsQ2MCwxPAK-tL0vmTysE8CLYyZXgR_qVMzf-WHfX2M.js

js icpp2023.org collected 2026-09-24 10:34:24 UTC 722,397 bytes, 17,119 lines download raw bytes

1/**
2 * @file
3 * Drupal Bootstrap object.
4 */
5
6/**
7 * All Drupal Bootstrap JavaScript APIs are contained in this namespace.
8 *
9 * @param {underscore} _
10 * @param {jQuery} $
11 * @param {Drupal} Drupal
12 * @param {drupalSettings} drupalSettings
13 */
14(function (_, $, Drupal, drupalSettings) {
15  'use strict';
16
17  /**
18   * @typedef Drupal.bootstrap
19   */
20  var Bootstrap = {
21    processedOnce: {},
22    settings: drupalSettings.bootstrap || {}
23  };
24
25  /**
26   * Wraps Drupal.checkPlain() to ensure value passed isn't empty.
27   *
28   * Encodes special characters in a plain-text string for display as HTML.
29   *
30   * @param {string} str
31   *   The string to be encoded.
32   *
33   * @return {string}
34   *   The encoded string.
35   *
36   * @ingroup sanitization
37   */
38  Bootstrap.checkPlain = function (str) {
39    return str && Drupal.checkPlain(str) || '';
40  };
41
42  /**
43   * Creates a jQuery plugin.
44   *
45   * @param {String} id
46   *   A jQuery plugin identifier located in $.fn.
47   * @param {Function} plugin
48   *   A constructor function used to initialize the for the jQuery plugin.
49   * @param {Boolean} [noConflict]
50   *   Flag indicating whether or not to create a ".noConflict()" helper method
51   *   for the plugin.
52   */
53  Bootstrap.createPlugin = function (id, plugin, noConflict) {
54    // Immediately return if plugin doesn't exist.
55    if ($.fn[id] !== void 0) {
56      return this.fatal('Specified jQuery plugin identifier already exists: @id. Use Drupal.bootstrap.replacePlugin() instead.', {'@id': id});
57    }
58
59    // Immediately return if plugin isn't a function.
60    if (typeof plugin !== 'function') {
61      return this.fatal('You must provide a constructor function to create a jQuery plugin "@id": @plugin', {'@id': id, '@plugin':  plugin});
62    }
63
64    // Add a ".noConflict()" helper method.
65    this.pluginNoConflict(id, plugin, noConflict);
66
67    $.fn[id] = plugin;
68  };
69
70  /**
71   * Diff object properties.
72   *
73   * @param {...Object} objects
74   *   Two or more objects. The first object will be used to return properties
75   *   values.
76   *
77   * @return {Object}
78   *   Returns the properties of the first passed object that are not present
79   *   in all other passed objects.
80   */
81  Bootstrap.diffObjects = function (objects) {
82    var args = Array.prototype.slice.call(arguments);
83    return _.pick(args[0], _.difference.apply(_, _.map(args, function (obj) {
84      return Object.keys(obj);
85    })));
86  };
87
88  /**
89   * Map of supported events by regular expression.
90   *
91   * @type {Object<Event|MouseEvent|KeyboardEvent|TouchEvent,RegExp>}
92   */
93  Bootstrap.eventMap = {
94    Event: /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
95    MouseEvent: /^(?:click|dblclick|mouse(?:down|enter|leave|up|over|move|out))$/,
96    KeyboardEvent: /^(?:key(?:down|press|up))$/,
97    TouchEvent: /^(?:touch(?:start|end|move|cancel))$/
98  };
99
100  /**
101   * Extends a jQuery Plugin.
102   *
103   * @param {String} id
104   *   A jQuery plugin identifier located in $.fn.
105   * @param {Function} callback
106   *   A constructor function used to initialize the for the jQuery plugin.
107   *
108   * @return {Function|Boolean}
109   *   The jQuery plugin constructor or FALSE if the plugin does not exist.
110   */
111  Bootstrap.extendPlugin = function (id, callback) {
112    // Immediately return if plugin doesn't exist.
113    if (typeof $.fn[id] !== 'function') {
114      return this.fatal('Specified jQuery plugin identifier does not exist: @id', {'@id':  id});
115    }
116
117    // Immediately return if callback isn't a function.
118    if (typeof callback !== 'function') {
119      return this.fatal('You must provide a callback function to extend the jQuery plugin "@id": @callback', {'@id': id, '@callback':  callback});
120    }
121
122    // Determine existing plugin constructor.
123    var constructor = $.fn[id] && $.fn[id].Constructor || $.fn[id];
124    var plugin = callback.apply(constructor, [this.settings]);
125    if (!$.isPlainObject(plugin)) {
126      return this.fatal('Returned value from callback is not a plain object that can be used to extend the jQuery plugin "@id": @obj', {'@obj':  plugin});
127    }
128
129    this.wrapPluginConstructor(constructor, plugin, true);
130
131    return $.fn[id];
132  };
133
134  Bootstrap.superWrapper = function (parent, fn) {
135    return function () {
136      var previousSuper = this.super;
137      this.super = parent;
138      var ret = fn.apply(this, arguments);
139      if (previousSuper) {
140        this.super = previousSuper;
141      }
142      else {
143        delete this.super;
144      }
145      return ret;
146    };
147  };
148
149  /**
150   * Provide a helper method for displaying when something is went wrong.
151   *
152   * @param {String} message
153   *   The message to display.
154   * @param {Object} [args]
155   *   An arguments to use in message.
156   *
157   * @return {Boolean}
158   *   Always returns FALSE.
159   */
160  Bootstrap.fatal = function (message, args) {
161    if (this.settings.dev && console.warn) {
162      for (var name in args) {
163        if (args.hasOwnProperty(name) && typeof args[name] === 'object') {
164          args[name] = JSON.stringify(args[name]);
165        }
166      }
167      Drupal.throwError(new Error(Drupal.formatString(message, args)));
168    }
169    return false;
170  };
171
172  /**
173   * Intersects object properties.
174   *
175   * @param {...Object} objects
176   *   Two or more objects. The first object will be used to return properties
177   *   values.
178   *
179   * @return {Object}
180   *   Returns the properties of first passed object that intersects with all
181   *   other passed objects.
182   */
183  Bootstrap.intersectObjects = function (objects) {
184    var args = Array.prototype.slice.call(arguments);
185    return _.pick(args[0], _.intersection.apply(_, _.map(args, function (obj) {
186      return Object.keys(obj);
187    })));
188  };
189
190  /**
191   * Normalizes an object's values.
192   *
193   * @param {Object} obj
194   *   The object to normalize.
195   *
196   * @return {Object}
197   *   The normalized object.
198   */
199  Bootstrap.normalizeObject = function (obj) {
200    if (!$.isPlainObject(obj)) {
201      return obj;
202    }
203
204    for (var k in obj) {
205      if (typeof obj[k] === 'string') {
206        if (obj[k] === 'true') {
207          obj[k] = true;
208        }
209        else if (obj[k] === 'false') {
210          obj[k] = false;
211        }
212        else if (obj[k].match(/^[\d-.]$/)) {
213          obj[k] = parseFloat(obj[k]);
214        }
215      }
216      else if ($.isPlainObject(obj[k])) {
217        obj[k] = Bootstrap.normalizeObject(obj[k]);
218      }
219    }
220
221    return obj;
222  };
223
224  /**
225   * An object based once plugin (similar to jquery.once, but without the DOM).
226   *
227   * @param {String} id
228   *   A unique identifier.
229   * @param {Function} callback
230   *   The callback to invoke if the identifier has not yet been seen.
231   *
232   * @return {Bootstrap}
233   */
234  Bootstrap.once = function (id, callback) {
235    // Immediately return if identifier has already been processed.
236    if (this.processedOnce[id]) {
237      return this;
238    }
239    callback.call(this, this.settings);
240    this.processedOnce[id] = true;
241    return this;
242  };
243
244  /**
245   * Provide jQuery UI like ability to get/set options for Bootstrap plugins.
246   *
247   * @param {string|object} key
248   *   A string value of the option to set, can be dot like to a nested key.
249   *   An object of key/value pairs.
250   * @param {*} [value]
251   *   (optional) A value to set for key.
252   *
253   * @returns {*}
254   *   - Returns nothing if key is an object or both key and value parameters
255   *   were provided to set an option.
256   *   - Returns the a value for a specific setting if key was provided.
257   *   - Returns an object of key/value pairs of all the options if no key or
258   *   value parameter was provided.
259   *
260   * @see https://github.com/jquery/jquery-ui/blob/master/ui/widget.js
261   */
262  Bootstrap.option = function (key, value) {
263    var options = $.isPlainObject(key) ? $.extend({}, key) : {};
264
265    // Get all options (clone so it doesn't reference the internal object).
266    if (arguments.length === 0) {
267      return $.extend({}, this.options);
268    }
269
270    // Get/set single option.
271    if (typeof key === "string") {
272      // Handle nested keys in dot notation.
273      // e.g., "foo.bar" => { foo: { bar: true } }
274      var parts = key.split('.');
275      key = parts.shift();
276      var obj = options;
277      if (parts.length) {
278        for (var i = 0; i < parts.length - 1; i++) {
279          obj[parts[i]] = obj[parts[i]] || {};
280          obj = obj[parts[i]];
281        }
282        key = parts.pop();
283      }
284
285      // Get.
286      if (arguments.length === 1) {
287        return obj[key] === void 0 ? null : obj[key];
288      }
289
290      // Set.
291      obj[key] = value;
292    }
293
294    // Set multiple options.
295    $.extend(true, this.options, options);
296  };
297
298  /**
299   * Adds a ".noConflict()" helper method if needed.
300   *
301   * @param {String} id
302   *   A jQuery plugin identifier located in $.fn.
303   * @param {Function} plugin
304   * @param {Function} plugin
305   *   A constructor function used to initialize the for the jQuery plugin.
306   * @param {Boolean} [noConflict]
307   *   Flag indicating whether or not to create a ".noConflict()" helper method
308   *   for the plugin.
309   */
310  Bootstrap.pluginNoConflict = function (id, plugin, noConflict) {
311    if (plugin.noConflict === void 0 && (noConflict === void 0 || noConflict)) {
312      var old = $.fn[id];
313      plugin.noConflict = function () {
314        $.fn[id] = old;
315        return this;
316      };
317    }
318  };
319
320  /**
321   * Creates a handler that relays to another event name.
322   *
323   * @param {HTMLElement|jQuery} target
324   *   A target element.
325   * @param {String} name
326   *   The name of the event to trigger.
327   * @param {Boolean} [stopPropagation=true]
328   *   Flag indicating whether to stop the propagation of the event, defaults
329   *   to true.
330   *
331   * @return {Function}
332   *   An even handler callback function.
333   */
334  Bootstrap.relayEvent = function (target, name, stopPropagation) {
335    return function (e) {
336      if (stopPropagation === void 0 || stopPropagation) {
337        e.stopPropagation();
338      }
339      var $target = $(target);
340      var parts = name.split('.').filter(Boolean);
341      var type = parts.shift();
342      e.target = $target[0];
343      e.currentTarget = $target[0];
344      e.namespace = parts.join('.');
345      e.type = type;
346      $target.trigger(e);
347    };
348  };
349
350  /**
351   * Replaces a Bootstrap jQuery plugin definition.
352   *
353   * @param {String} id
354   *   A jQuery plugin identifier located in $.fn.
355   * @param {Function} callback
356   *   A callback function that is immediately invoked and must return a
357   *   function that will be used as the plugin constructor.
358   * @param {Boolean} [noConflict]
359   *   Flag indicating whether or not to create a ".noConflict()" helper method
360   *   for the plugin.
361   */
362  Bootstrap.replacePlugin = function (id, callback, noConflict) {
363    // Immediately return if plugin doesn't exist.
364    if (typeof $.fn[id] !== 'function') {
365      return this.fatal('Specified jQuery plugin identifier does not exist: @id', {'@id':  id});
366    }
367
368    // Immediately return if callback isn't a function.
369    if (typeof callback !== 'function') {
370      return this.fatal('You must provide a valid callback function to replace a jQuery plugin: @callback', {'@callback': callback});
371    }
372
373    // Determine existing plugin constructor.
374    var constructor = $.fn[id] && $.fn[id].Constructor || $.fn[id];
375    var plugin = callback.apply(constructor, [this.settings]);
376
377    // Immediately return if plugin isn't a function.
378    if (typeof plugin !== 'function') {
379      return this.fatal('Returned value from callback is not a usable function to replace a jQuery plugin "@id": @plugin', {'@id': id, '@plugin': plugin});
380    }
381
382    this.wrapPluginConstructor(constructor, plugin);
383
384    // Add a ".noConflict()" helper method.
385    this.pluginNoConflict(id, plugin, noConflict);
386
387    $.fn[id] = plugin;
388  };
389
390  /**
391   * Simulates a native event on an element in the browser.
392   *
393   * Note: This is a fairly complete modern implementation. If things aren't
394   * working quite the way you intend (in older browsers), you may wish to use
395   * the jQuery.simulate plugin. If it's available, this method will defer to
396   * that plugin.
397   *
398   * @see https://github.com/jquery/jquery-simulate
399   *
400   * @param {HTMLElement|jQuery} element
401   *   A DOM element to dispatch event on. Note: this may be a jQuery object,
402   *   however be aware that this will trigger the same event for each element
403   *   inside the jQuery collection; use with caution.
404   * @param {String|String[]} type
405   *   The type(s) of event to simulate.
406   * @param {Object} [options]
407   *   An object of options to pass to the event constructor. Typically, if
408   *   an event is being proxied, you should just pass the original event
409   *   object here. This allows, if the browser supports it, to be a truly
410   *   simulated event.
411   *
412   * @return {Boolean}
413   *   The return value is false if event is cancelable and at least one of the
414   *   event handlers which handled this event called Event.preventDefault().
415   *   Otherwise it returns true.
416   */
417  Bootstrap.simulate = function (element, type, options) {
418    // Handle jQuery object wrappers so it triggers on each element.
419    var ret = true;
420    if (element instanceof $) {
421      element.each(function () {
422        if (!Bootstrap.simulate(this, type, options)) {
423          ret = false;
424        }
425      });
426      return ret;
427    }
428
429    if (!(element instanceof HTMLElement)) {
430      this.fatal('Passed element must be an instance of HTMLElement, got "@type" instead.', {
431        '@type': typeof element,
432      });
433    }
434
435    // Defer to the jQuery.simulate plugin, if it's available.
436    if (typeof $.simulate === 'function') {
437      new $.simulate(element, type, options);
438      return true;
439    }
440
441    var event;
442    var ctor;
443    var types = [].concat(type);
444    for (var i = 0, l = types.length; i < l; i++) {
445      type = types[i];
446      for (var name in this.eventMap) {
447        if (this.eventMap[name].test(type)) {
448          ctor = name;
449          break;
450        }
451      }
452      if (!ctor) {
453        throw new SyntaxError('Only rudimentary HTMLEvents, KeyboardEvents and MouseEvents are supported: ' + type);
454      }
455      var opts = {bubbles: true, cancelable: true};
456      if (ctor === 'KeyboardEvent' || ctor === 'MouseEvent') {
457        $.extend(opts, {ctrlKey: !1, altKey: !1, shiftKey: !1, metaKey: !1});
458      }
459      if (ctor === 'MouseEvent') {
460        $.extend(opts, {button: 0, pointerX: 0, pointerY: 0, view: window});
461      }
462      if (options) {
463        $.extend(opts, options);
464      }
465      if (typeof window[ctor] === 'function') {
466        event = new window[ctor](type, opts);
467        if (!element.dispatchEvent(event)) {
468          ret = false;
469        }
470      }
471      else if (document.createEvent) {
472        event = document.createEvent(ctor);
473        event.initEvent(type, opts.bubbles, opts.cancelable);
474        if (!element.dispatchEvent(event)) {
475          ret = false;
476        }
477      }
478      else if (typeof element.fireEvent === 'function') {
479        event = $.extend(document.createEventObject(), opts);
480        if (!element.fireEvent('on' + type, event)) {
481          ret = false;
482        }
483      }
484      else if (typeof element[type]) {
485        element[type]();
486      }
487    }
488    return ret;
489  };
490
491  /**
492   * Strips HTML and returns just text.
493   *
494   * @param {String|Element|jQuery} html
495   *   A string of HTML content, an Element DOM object or a jQuery object.
496   *
497   * @return {String}
498   *   The text without HTML tags.
499   *
500   * @todo Replace with http://locutus.io/php/strings/strip_tags/
501   */
502  Bootstrap.stripHtml = function (html) {
503    if (html instanceof $) {
504      html = html.html();
505    }
506    else if (html instanceof Element) {
507      html = html.innerHTML;
508    }
509    var tmp = document.createElement('DIV');
510    tmp.innerHTML = html;
511    return (tmp.textContent || tmp.innerText || '').replace(/^[\s\n\t]*|[\s\n\t]*$/, '');
512  };
513
514  /**
515   * Provide a helper method for displaying when something is unsupported.
516   *
517   * @param {String} type
518   *   The type of unsupported object, e.g. method or option.
519   * @param {String} name
520   *   The name of the unsupported object.
521   * @param {*} [value]
522   *   The value of the unsupported object.
523   */
524  Bootstrap.unsupported = function (type, name, value) {
525    Bootstrap.warn('Unsupported by Drupal Bootstrap: (@type) @name -> @value', {
526      '@type': type,
527      '@name': name,
528      '@value': typeof value === 'object' ? JSON.stringify(value) : value
529    });
530  };
531
532  /**
533   * Provide a helper method to display a warning.
534   *
535   * @param {String} message
536   *   The message to display.
537   * @param {Object} [args]
538   *   Arguments to use as replacements in Drupal.formatString.
539   */
540  Bootstrap.warn = function (message, args) {
541    if (this.settings.dev && console.warn) {
542      console.warn(Drupal.formatString(message, args));
543    }
544  };
545
546  /**
547   * Wraps a plugin with common functionality.
548   *
549   * @param {Function} constructor
550   *   A plugin constructor being wrapped.
551   * @param {Object|Function} plugin
552   *   The plugin being wrapped.
553   * @param {Boolean} [extend = false]
554   *   Whether to add super extensibility.
555   */
556  Bootstrap.wrapPluginConstructor = function (constructor, plugin, extend) {
557    var proto = constructor.prototype;
558
559    // Add a jQuery UI like option getter/setter method.
560    var option = this.option;
561    if (proto.option === void(0)) {
562      proto.option = function () {
563        return option.apply(this, arguments);
564      };
565    }
566
567    if (extend) {
568      // Handle prototype properties separately.
569      if (plugin.prototype !== void 0) {
570        for (var key in plugin.prototype) {
571          if (!plugin.prototype.hasOwnProperty(key)) continue;
572          var value = plugin.prototype[key];
573          if (typeof value === 'function') {
574            proto[key] = this.superWrapper(proto[key] || function () {}, value);
575          }
576          else {
577            proto[key] = $.isPlainObject(value) ? $.extend(true, {}, proto[key], value) : value;
578          }
579        }
580      }
581      delete plugin.prototype;
582
583      // Handle static properties.
584      for (key in plugin) {
585        if (!plugin.hasOwnProperty(key)) continue;
586        value = plugin[key];
587        if (typeof value === 'function') {
588          constructor[key] = this.superWrapper(constructor[key] || function () {}, value);
589        }
590        else {
591          constructor[key] = $.isPlainObject(value) ? $.extend(true, {}, constructor[key], value) : value;
592        }
593      }
594    }
595  };
596
597  // Add Bootstrap to the global Drupal object.
598  Drupal.bootstrap = Drupal.bootstrap || Bootstrap;
599
600})(window._, window.jQuery, window.Drupal, window.drupalSettings);
601;
602(function ($, _) {
603
604  /**
605   * @class Attributes
606   *
607   * Modifies attributes.
608   *
609   * @param {Object|Attributes} attributes
610   *   An object to initialize attributes with.
611   */
612  var Attributes = function (attributes) {
613    this.data = {};
614    this.data['class'] = [];
615    this.merge(attributes);
616  };
617
618  /**
619   * Renders the attributes object as a string to inject into an HTML element.
620   *
621   * @return {String}
622   *   A rendered string suitable for inclusion in HTML markup.
623   */
624  Attributes.prototype.toString = function () {
625    var output = '';
626    var name, value;
627    var checkPlain = function (str) {
628      return str && str.toString().replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;') || '';
629    };
630    var data = this.getData();
631    for (name in data) {
632      if (!data.hasOwnProperty(name)) continue;
633      value = data[name];
634      if (_.isFunction(value)) value = value();
635      if (_.isObject(value)) value = _.values(value);
636      if (_.isArray(value)) value = value.join(' ');
637      output += ' ' + checkPlain(name) + '="' + checkPlain(value) + '"';
638    }
639    return output;
640  };
641
642  /**
643   * Renders the Attributes object as a plain object.
644   *
645   * @return {Object}
646   *   A plain object suitable for inclusion in DOM elements.
647   */
648  Attributes.prototype.toPlainObject = function () {
649    var object = {};
650    var name, value;
651    var data = this.getData();
652    for (name in data) {
653      if (!data.hasOwnProperty(name)) continue;
654      value = data[name];
655      if (_.isFunction(value)) value = value();
656      if (_.isObject(value)) value = _.values(value);
657      if (_.isArray(value)) value = value.join(' ');
658      object[name] = value;
659    }
660    return object;
661  };
662
663  /**
664   * Add class(es) to the array.
665   *
666   * @param {string|Array} value
667   *   An individual class or an array of classes to add.
668   *
669   * @return {Attributes}
670   *
671   * @chainable
672   */
673  Attributes.prototype.addClass = function (value) {
674    var args = Array.prototype.slice.call(arguments);
675    this.data['class'] = this.sanitizeClasses(this.data['class'].concat(args));
676    return this;
677  };
678
679  /**
680   * Returns whether the requested attribute exists.
681   *
682   * @param {string} name
683   *   An attribute name to check.
684   *
685   * @return {boolean}
686   *   TRUE or FALSE
687   */
688  Attributes.prototype.exists = function (name) {
689    return this.data[name] !== void(0) && this.data[name] !== null;
690  };
691
692  /**
693   * Retrieve a specific attribute from the array.
694   *
695   * @param {string} name
696   *   The specific attribute to retrieve.
697   * @param {*} defaultValue
698   *   (optional) The default value to set if the attribute does not exist.
699   *
700   * @return {*}
701   *   A specific attribute value, passed by reference.
702   */
703  Attributes.prototype.get = function (name, defaultValue) {
704    if (!this.exists(name)) this.data[name] = defaultValue;
705    return this.data[name];
706  };
707
708  /**
709   * Retrieves a cloned copy of the internal attributes data object.
710   *
711   * @return {Object}
712   */
713  Attributes.prototype.getData = function () {
714    return _.extend({}, this.data);
715  };
716
717  /**
718   * Retrieves classes from the array.
719   *
720   * @return {Array}
721   *   The classes array.
722   */
723  Attributes.prototype.getClasses = function () {
724    return this.get('class', []);
725  };
726
727  /**
728   * Indicates whether a class is present in the array.
729   *
730   * @param {string|Array} className
731   *   The class(es) to search for.
732   *
733   * @return {boolean}
734   *   TRUE or FALSE
735   */
736  Attributes.prototype.hasClass = function (className) {
737    className = this.sanitizeClasses(Array.prototype.slice.call(arguments));
738    var classes = this.getClasses();
739    for (var i = 0, l = className.length; i < l; i++) {
740      // If one of the classes fails, immediately return false.
741      if (_.indexOf(classes, className[i]) === -1) {
742        return false;
743      }
744    }
745    return true;
746  };
747
748  /**
749   * Merges multiple values into the array.
750   *
751   * @param {Attributes|Node|jQuery|Object} object
752   *   An Attributes object with existing data, a Node DOM element, a jQuery
753   *   instance or a plain object where the key is the attribute name and the
754   *   value is the attribute value.
755   * @param {boolean} [recursive]
756   *   Flag determining whether or not to recursively merge key/value pairs.
757   *
758   * @return {Attributes}
759   *
760   * @chainable
761   */
762  Attributes.prototype.merge = function (object, recursive) {
763    // Immediately return if there is nothing to merge.
764    if (!object) {
765      return this;
766    }
767
768    // Get attributes from a jQuery element.
769    if (object instanceof $) {
770      object = object[0];
771    }
772
773    // Get attributes from a DOM element.
774    if (object instanceof Node) {
775      object = Array.prototype.slice.call(object.attributes).reduce(function (attributes, attribute) {
776        attributes[attribute.name] = attribute.value;
777        return attributes;
778      }, {});
779    }
780    // Get attributes from an Attributes instance.
781    else if (object instanceof Attributes) {
782      object = object.getData();
783    }
784    // Otherwise, clone the object.
785    else {
786      object = _.extend({}, object);
787    }
788
789    // By this point, there should be a valid plain object.
790    if (!$.isPlainObject(object)) {
791      setTimeout(function () {
792        throw new Error('Passed object is not supported: ' + object);
793      });
794      return this;
795    }
796
797    // Handle classes separately.
798    if (object && object['class'] !== void 0) {
799      this.addClass(object['class']);
800      delete object['class'];
801    }
802
803    if (recursive === void 0 || recursive) {
804      this.data = $.extend(true, {}, this.data, object);
805    }
806    else {
807      this.data = $.extend({}, this.data, object);
808    }
809
810    return this;
811  };
812
813  /**
814   * Removes an attribute from the array.
815   *
816   * @param {string} name
817   *   The name of the attribute to remove.
818   *
819   * @return {Attributes}
820   *
821   * @chainable
822   */
823  Attributes.prototype.remove = function (name) {
824    if (this.exists(name)) delete this.data[name];
825    return this;
826  };
827
828  /**
829   * Removes a class from the attributes array.
830   *
831   * @param {...string|Array} className
832   *   An individual class or an array of classes to remove.
833   *
834   * @return {Attributes}
835   *
836   * @chainable
837   */
838  Attributes.prototype.removeClass = function (className) {
839    var remove = this.sanitizeClasses(Array.prototype.slice.apply(arguments));
840    this.data['class'] = _.without(this.getClasses(), remove);
841    return this;
842  };
843
844  /**
845   * Replaces a class in the attributes array.
846   *
847   * @param {string} oldValue
848   *   The old class to remove.
849   * @param {string} newValue
850   *   The new class. It will not be added if the old class does not exist.
851   *
852   * @return {Attributes}
853   *
854   * @chainable
855   */
856  Attributes.prototype.replaceClass = function (oldValue, newValue) {
857    var classes = this.getClasses();
858    var i = _.indexOf(this.sanitizeClasses(oldValue), classes);
859    if (i >= 0) {
860      classes[i] = newValue;
861      this.set('class', classes);
862    }
863    return this;
864  };
865
866  /**
867   * Ensures classes are flattened into a single is an array and sanitized.
868   *
869   * @param {...String|Array} classes
870   *   The class or classes to sanitize.
871   *
872   * @return {Array}
873   *   A sanitized array of classes.
874   */
875  Attributes.prototype.sanitizeClasses = function (classes) {
876    return _.chain(Array.prototype.slice.call(arguments))
877      // Flatten in case there's a mix of strings and arrays.
878      .flatten()
879
880      // Split classes that may have been added with a space as a separator.
881      .map(function (string) {
882        return string.split(' ');
883      })
884
885      // Flatten again since it was just split into arrays.
886      .flatten()
887
888      // Filter out empty items.
889      .filter()
890
891      // Clean the class to ensure it's a valid class name.
892      .map(function (value) {
893        return Attributes.cleanClass(value);
894      })
895
896      // Ensure classes are unique.
897      .uniq()
898
899      // Retrieve the final value.
900      .value();
901  };
902
903  /**
904   * Sets an attribute on the array.
905   *
906   * @param {string} name
907   *   The name of the attribute to set.
908   * @param {*} value
909   *   The value of the attribute to set.
910   *
911   * @return {Attributes}
912   *
913   * @chainable
914   */
915  Attributes.prototype.set = function (name, value) {
916    var obj = $.isPlainObject(name) ? name : {};
917    if (typeof name === 'string') {
918      obj[name] = value;
919    }
920    return this.merge(obj);
921  };
922
923  /**
924   * Prepares a string for use as a CSS identifier (element, class, or ID name).
925   *
926   * Note: this is essentially a direct copy from
927   * \Drupal\Component\Utility\Html::cleanCssIdentifier
928   *
929   * @param {string} identifier
930   *   The identifier to clean.
931   * @param {Object} [filter]
932   *   An object of string replacements to use on the identifier.
933   *
934   * @return {string}
935   *   The cleaned identifier.
936   */
937  Attributes.cleanClass = function (identifier, filter) {
938    filter = filter || {
939      ' ': '-',
940      '_': '-',
941      '/': '-',
942      '[': '-',
943      ']': ''
944    };
945
946    identifier = identifier.toLowerCase();
947
948    if (filter['__'] === void 0) {
949      identifier = identifier.replace('__', '#DOUBLE_UNDERSCORE#');
950    }
951
952    identifier = identifier.replace(Object.keys(filter), Object.keys(filter).map(function(key) { return filter[key]; }));
953
954    if (filter['__'] === void 0) {
955      identifier = identifier.replace('#DOUBLE_UNDERSCORE#', '__');
956    }
957
958    identifier = identifier.replace(/[^\u002D\u0030-\u0039\u0041-\u005A\u005F\u0061-\u007A\u00A1-\uFFFF]/g, '');
959    identifier = identifier.replace(['/^[0-9]/', '/^(-[0-9])|^(--)/'], ['_', '__']);
960
961    return identifier;
962  };
963
964  /**
965   * Creates an Attributes instance.
966   *
967   * @param {object|Attributes} [attributes]
968   *   An object to initialize attributes with.
969   *
970   * @return {Attributes}
971   *   An Attributes instance.
972   *
973   * @constructor
974   */
975  Attributes.create = function (attributes) {
976    return new Attributes(attributes);
977  };
978
979  window.Attributes = Attributes;
980
981})(window.jQuery, window._);
982;
983/**
984 * @file
985 * Theme hooks for the Drupal Bootstrap base theme.
986 */
987(function ($, Drupal, Bootstrap, Attributes) {
988
989  /**
990   * Fallback for theming an icon if the Icon API module is not installed.
991   */
992  if (!Drupal.icon) Drupal.icon = { bundles: {} };
993  if (!Drupal.theme.icon || Drupal.theme.prototype.icon) {
994    $.extend(Drupal.theme, /** @lends Drupal.theme */ {
995      /**
996       * Renders an icon.
997       *
998       * @param {string} bundle
999       *   The bundle which the icon belongs to.
1000       * @param {string} icon
1001       *   The name of the icon to render.
1002       * @param {object|Attributes} [attributes]
1003       *   An object of attributes to also apply to the icon.
1004       *
1005       * @returns {string}
1006       */
1007      icon: function (bundle, icon, attributes) {
1008        if (!Drupal.icon.bundles[bundle]) return '';
1009        attributes = Attributes.create(attributes).addClass('icon').set('aria-hidden', 'true');
1010        icon = Drupal.icon.bundles[bundle](icon, attributes);
1011        return '<span' + attributes + '></span>';
1012      }
1013    });
1014  }
1015
1016  /**
1017   * Callback for modifying an icon in the "bootstrap" icon bundle.
1018   *
1019   * @param {string} icon
1020   *   The icon being rendered.
1021   * @param {Attributes} attributes
1022   *   Attributes object for the icon.
1023   */
1024  Drupal.icon.bundles.bootstrap = function (icon, attributes) {
1025    attributes.addClass(['glyphicon', 'glyphicon-' + icon]);
1026  };
1027
1028  /**
1029   * Add necessary theming hooks.
1030   */
1031  $.extend(Drupal.theme, /** @lends Drupal.theme */ {
1032
1033    /**
1034     * Renders a Bootstrap AJAX glyphicon throbber.
1035     *
1036     * @returns {string}
1037     */
1038    ajaxThrobber: function () {
1039      return Drupal.theme('bootstrapIcon', 'refresh', {'class': ['ajax-throbber', 'glyphicon-spin'] });
1040    },
1041
1042    /**
1043     * Renders a button element.
1044     *
1045     * @param {object|Attributes} attributes
1046     *   An object of attributes to apply to the button. If it contains one of:
1047     *   - value: The label of the button.
1048     *   - context: The context type of Bootstrap button, can be one of:
1049     *     - default
1050     *     - primary
1051     *     - success
1052     *     - info
1053     *     - warning
1054     *     - danger
1055     *     - link
1056     *
1057     * @returns {string}
1058     */
1059    button: function (attributes) {
1060      attributes = Attributes.create(attributes).addClass('btn');
1061      var context = attributes.get('context', 'default');
1062      var label = attributes.get('value', '');
1063      attributes.remove('context').remove('value');
1064      if (!attributes.hasClass(['btn-default', 'btn-primary', 'btn-success', 'btn-info', 'btn-warning', 'btn-danger', 'btn-link'])) {
1065        attributes.addClass('btn-' + Bootstrap.checkPlain(context));
1066      }
1067
1068      // Attempt to, intelligently, provide a default button "type".
1069      if (!attributes.exists('type')) {
1070        attributes.set('type', attributes.hasClass('form-submit') ? 'submit' : 'button');
1071      }
1072
1073      return '<button' + attributes + '>' + label + '</button>';
1074    },
1075
1076    /**
1077     * Alias for "button" theme hook.
1078     *
1079     * @param {object|Attributes} attributes
1080     *   An object of attributes to apply to the button.
1081     *
1082     * @see Drupal.theme.button()
1083     *
1084     * @returns {string}
1085     */
1086    btn: function (attributes) {
1087      return Drupal.theme('button', attributes);
1088    },
1089
1090    /**
1091     * Renders a button block element.
1092     *
1093     * @param {object|Attributes} attributes
1094     *   An object of attributes to apply to the button.
1095     *
1096     * @see Drupal.theme.button()
1097     *
1098     * @returns {string}
1099     */
1100    'btn-block': function (attributes) {
1101      return Drupal.theme('button', Attributes.create(attributes).addClass('btn-block'));
1102    },
1103
1104    /**
1105     * Renders a large button element.
1106     *
1107     * @param {object|Attributes} attributes
1108     *   An object of attributes to apply to the button.
1109     *
1110     * @see Drupal.theme.button()
1111     *
1112     * @returns {string}
1113     */
1114    'btn-lg': function (attributes) {
1115      return Drupal.theme('button', Attributes.create(attributes).addClass('btn-lg'));
1116    },
1117
1118    /**
1119     * Renders a small button element.
1120     *
1121     * @param {object|Attributes} attributes
1122     *   An object of attributes to apply to the button.
1123     *
1124     * @see Drupal.theme.button()
1125     *
1126     * @returns {string}
1127     */
1128    'btn-sm': function (attributes) {
1129      return Drupal.theme('button', Attributes.create(attributes).addClass('btn-sm'));
1130    },
1131
1132    /**
1133     * Renders an extra small button element.
1134     *
1135     * @param {object|Attributes} attributes
1136     *   An object of attributes to apply to the button.
1137     *
1138     * @see Drupal.theme.button()
1139     *
1140     * @returns {string}
1141     */
1142    'btn-xs': function (attributes) {
1143      return Drupal.theme('button', Attributes.create(attributes).addClass('btn-xs'));
1144    },
1145
1146    /**
1147     * Renders a glyphicon.
1148     *
1149     * @param {string} name
1150     *   The name of the glyphicon.
1151     * @param {object|Attributes} [attributes]
1152     *   An object of attributes to apply to the icon.
1153     *
1154     * @returns {string}
1155     */
1156    bootstrapIcon: function (name, attributes) {
1157      return Drupal.theme('icon', 'bootstrap', name, attributes);
1158    }
1159
1160  });
1161
1162})(window.jQuery, window.Drupal, window.Drupal.bootstrap, window.Attributes);
1163;
1164/**
1165* DO NOT EDIT THIS FILE.
1166* See the following change record for more information,
1167* https://www.drupal.org/node/2815083
1168* @preserve
1169**/
1170(function ($, Drupal) {
1171  Drupal.theme.progressBar = function (id) {
1172    return "<div id=\"".concat(id, "\" class=\"progress\" aria-live=\"polite\">") + '<div class="progress__label">&nbsp;</div>' + '<div class="progress__track"><div class="progress__bar"></div></div>' + '<div class="progress__percentage"></div>' + '<div class="progress__description">&nbsp;</div>' + '</div>';
1173  };
1174  Drupal.ProgressBar = function (id, updateCallback, method, errorCallback) {
1175    this.id = id;
1176    this.method = method || 'GET';
1177    this.updateCallback = updateCallback;
1178    this.errorCallback = errorCallback;
1179    this.element = $(Drupal.theme('progressBar', id));
1180  };
1181  $.extend(Drupal.ProgressBar.prototype, {
1182    setProgress: function setProgress(percentage, message, label) {
1183      if (percentage >= 0 && percentage <= 100) {
1184        $(this.element).find('div.progress__bar').css('width', "".concat(percentage, "%"));
1185        $(this.element).find('div.progress__percentage').html("".concat(percentage, "%"));
1186      }
1187      $('div.progress__description', this.element).html(message);
1188      $('div.progress__label', this.element).html(label);
1189      if (this.updateCallback) {
1190        this.updateCallback(percentage, message, this);
1191      }
1192    },
1193    startMonitoring: function startMonitoring(uri, delay) {
1194      this.delay = delay;
1195      this.uri = uri;
1196      this.sendPing();
1197    },
1198    stopMonitoring: function stopMonitoring() {
1199      clearTimeout(this.timer);
1200      this.uri = null;
1201    },
1202    sendPing: function sendPing() {
1203      if (this.timer) {
1204        clearTimeout(this.timer);
1205      }
1206      if (this.uri) {
1207        var pb = this;
1208        var uri = this.uri;
1209        if (uri.indexOf('?') === -1) {
1210          uri += '?';
1211        } else {
1212          uri += '&';
1213        }
1214        uri += '_format=json';
1215        $.ajax({
1216          type: this.method,
1217          url: uri,
1218          data: '',
1219          dataType: 'json',
1220          success: function success(progress) {
1221            if (progress.status === 0) {
1222              pb.displayError(progress.data);
1223              return;
1224            }
1225            pb.setProgress(progress.percentage, progress.message, progress.label);
1226            pb.timer = setTimeout(function () {
1227              pb.sendPing();
1228            }, pb.delay);
1229          },
1230          error: function error(xmlhttp) {
1231            var e = new Drupal.AjaxError(xmlhttp, pb.uri);
1232            pb.displayError("<pre>".concat(e.message, "</pre>"));
1233          }
1234        });
1235      }
1236    },
1237    displayError: function displayError(string) {
1238      var error = $('<div class="messages messages--error"></div>').html(string);
1239      $(this.element).before(error).hide();
1240      if (this.errorCallback) {
1241        this.errorCallback(this);
1242      }
1243    }
1244  });
1245})(jQuery, Drupal);;
1246/**
1247 * @file
1248 * Extends methods from core/misc/progress.js.
1249 */
1250
1251(function ($, Drupal) {
1252
1253  'use strict';
1254
1255  /**
1256   * Theme function for the progress bar.
1257   *
1258   * @param {string} id
1259   *
1260   * @return {string}
1261   *   The HTML for the progress bar.
1262   */
1263  Drupal.theme.progressBar = function (id) {
1264    return '<div class="progress-wrapper" aria-live="polite">' +
1265             '<div class="message"></div>'+
1266             '<div id ="' + id + '" class="progress progress-striped active">' +
1267               '<div class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">' +
1268                 '<span class="percentage"></span>' +
1269               '</div>' +
1270             '</div>' +
1271             '<div class="progress-label"></div>' +
1272           '</div>';
1273  };
1274
1275  $.extend(Drupal.ProgressBar.prototype, /** @lends Drupal.ProgressBar */{
1276
1277    /**
1278     * Set the percentage and status message for the progressbar.
1279     *
1280     * @param {number} percentage
1281     * @param {string} message
1282     * @param {string} label
1283     */
1284    setProgress: function (percentage, message, label) {
1285      if (percentage >= 0 && percentage <= 100) {
1286        $(this.element).find('.progress-bar').css('width', percentage + '%').attr('aria-valuenow', percentage);
1287        $(this.element).find('.percentage').html(percentage + '%');
1288      }
1289      if (message) {
1290        // Remove the unnecessary whitespace at the end of the message.
1291        message = message.replace(/<br\/>&nbsp;|\s*$/, '');
1292
1293        $('.message', this.element).html(message);
1294      }
1295      if (label) {
1296        $('.progress-label', this.element).html(label);
1297      }
1298      if (this.updateCallback) {
1299        this.updateCallback(percentage, message, this);
1300      }
1301    },
1302
1303    /**
1304     * Display errors on the page.
1305     *
1306     * @param {string} string
1307     */
1308    displayError: function (string) {
1309      var error = $('<div class="alert alert-block alert-error"><button class="close" data-dismiss="alert">&times;</button><h4>' + Drupal.t('Error message') + '</h4></div>').append(string);
1310      $(this.element).before(error).hide();
1311
1312      if (this.errorCallback) {
1313        this.errorCallback(this);
1314      }
1315    }
1316  });
1317
1318})(jQuery, Drupal);
1319;
1320/**
1321* DO NOT EDIT THIS FILE.
1322* See the following change record for more information,
1323* https://www.drupal.org/node/2815083
1324* @preserve
1325**/
1326(function ($, once) {
1327  var deprecatedMessageSuffix = "is deprecated in Drupal 9.3.0 and will be removed in Drupal 10.0.0. Use the core/once library instead. See https://www.drupal.org/node/3158256";
1328  var originalJQOnce = $.fn.once;
1329  var originalJQRemoveOnce = $.fn.removeOnce;
1330  $.fn.once = function jQueryOnce(id) {
1331    Drupal.deprecationError({
1332      message: "jQuery.once() ".concat(deprecatedMessageSuffix)
1333    });
1334    return originalJQOnce.apply(this, [id]);
1335  };
1336  $.fn.removeOnce = function jQueryRemoveOnce(id) {
1337    Drupal.deprecationError({
1338      message: "jQuery.removeOnce() ".concat(deprecatedMessageSuffix)
1339    });
1340    return originalJQRemoveOnce.apply(this, [id]);
1341  };
1342  var drupalOnce = once;
1343  function augmentedOnce(id, selector, context) {
1344    originalJQOnce.apply($(selector, context), [id]);
1345    return drupalOnce(id, selector, context);
1346  }
1347  function remove(id, selector, context) {
1348    originalJQRemoveOnce.apply($(selector, context), [id]);
1349    return drupalOnce.remove(id, selector, context);
1350  }
1351  window.once = Object.assign(augmentedOnce, drupalOnce, {
1352    remove: remove
1353  });
1354})(jQuery, once);;
1355loadjs=function(){var h=function(){},c={},u={},f={};function o(e,n){if(e){var r=f[e];if(u[e]=n,r)for(;r.length;)r[0](e,n),r.splice(0,1)}}function l(e,n){e.call&&(e={success:e}),n.length?(e.error||h)(n):(e.success||h)(e)}function d(r,t,s,i){var c,o,e=document,n=s.async,u=(s.numRetries||0)+1,f=s.before||h,l=r.replace(/[\?|#].*$/,""),a=r.replace(/^(css|img)!/,"");i=i||0,/(^css!|\.css$)/.test(l)?((o=e.createElement("link")).rel="stylesheet",o.href=a,(c="hideFocus"in o)&&o.relList&&(c=0,o.rel="preload",o.as="style")):/(^img!|\.(png|gif|jpg|svg|webp)$)/.test(l)?(o=e.createElement("img")).src=a:((o=e.createElement("script")).src=r,o.async=void 0===n||n),!(o.onload=o.onerror=o.onbeforeload=function(e){var n=e.type[0];if(c)try{o.sheet.cssText.length||(n="e")}catch(e){18!=e.code&&(n="e")}if("e"==n){if((i+=1)<u)return d(r,t,s,i)}else if("preload"==o.rel&&"style"==o.as)return o.rel="stylesheet";t(r,n,e.defaultPrevented)})!==f(r,o)&&e.head.appendChild(o)}function r(e,n,r){var t,s;if(n&&n.trim&&(t=n),s=(t?r:n)||{},t){if(t in c)throw"LoadJS";c[t]=!0}function i(n,r){!function(e,t,n){var r,s,i=(e=e.push?e:[e]).length,c=i,o=[];for(r=function(e,n,r){if("e"==n&&o.push(e),"b"==n){if(!r)return;o.push(e)}--i||t(o)},s=0;s<c;s++)d(e[s],r,n)}(e,function(e){l(s,e),n&&l({success:n,error:r},e),o(t,e)},s)}if(s.returnPromise)return new Promise(i);i()}return r.ready=function(e,n){return function(e,r){e=e.push?e:[e];var n,t,s,i=[],c=e.length,o=c;
1355for(n=function(e,n){n.length&&i.push(e),--o||r(i)};c--;)t=e[c],(s=u[t])?n(t,s):(f[t]=f[t]||[]).push(n)}(e,function(e){l(n,e)}),r},r.done=function(e){o(e,[])},r.reset=function(){c={},u={},f={}},r.isDefined=function(e){return e in c},r}();;
1356/**
1357* DO NOT EDIT THIS FILE.
1358* See the following change record for more information,
1359* https://www.drupal.org/node/2815083
1360* @preserve
1361**/
1362function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
1363function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1364function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
1365function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
1366function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
1367function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
1368(function ($, window, Drupal, drupalSettings, loadjs, _ref) {
1369  var isFocusable = _ref.isFocusable,
1370    tabbable = _ref.tabbable;
1371  Drupal.behaviors.AJAX = {
1372    attach: function attach(context, settings) {
1373      function loadAjaxBehavior(base) {
1374        var elementSettings = settings.ajax[base];
1375        if (typeof elementSettings.selector === 'undefined') {
1376          elementSettings.selector = "#".concat(base);
1377        }
1378        once('drupal-ajax', $(elementSettings.selector)).forEach(function (el) {
1379          elementSettings.element = el;
1380          elementSettings.base = base;
1381          Drupal.ajax(elementSettings);
1382        });
1383      }
1384      Object.keys(settings.ajax || {}).forEach(function (base) {
1385        return loadAjaxBehavior(base);
1386      });
1387      Drupal.ajax.bindAjaxLinks(document.body);
1388      once('ajax', '.use-ajax-submit').forEach(function (el) {
1389        var elementSettings = {};
1390        elementSettings.url = $(el.form).attr('action');
1391        elementSettings.setClick = true;
1392        elementSettings.event = 'click';
1393        elementSettings.progress = {
1394          type: 'throbber'
1395        };
1396        elementSettings.base = el.id;
1397        elementSettings.element = el;
1398        Drupal.ajax(elementSettings);
1399      });
1400    },
1401    detach: function detach(context, settings, trigger) {
1402      if (trigger === 'unload') {
1403        Drupal.ajax.expired().forEach(function (instance) {
1404          Drupal.ajax.instances[instance.instanceIndex] = null;
1405        });
1406      }
1407    }
1408  };
1409  Drupal.AjaxError = function (xmlhttp, uri, customMessage) {
1410    var statusCode;
1411    var statusText;
1412    var responseText;
1413    if (xmlhttp.status) {
1414      statusCode = "\n".concat(Drupal.t('An AJAX HTTP error occurred.'), "\n").concat(Drupal.t('HTTP Result Code: !status', {
1415        '!status': xmlhttp.status
1416      }));
1417    } else {
1418      statusCode = "\n".concat(Drupal.t('An AJAX HTTP request terminated abnormally.'));
1419    }
1420    statusCode += "\n".concat(Drupal.t('Debugging information follows.'));
1421    var pathText = "\n".concat(Drupal.t('Path: !uri', {
1422      '!uri': uri
1423    }));
1424    statusText = '';
1425    try {
1426      statusText = "\n".concat(Drupal.t('StatusText: !statusText', {
1427        '!statusText': xmlhttp.statusText.trim()
1428      }));
1429    } catch (e) {}
1430    responseText = '';
1431    try {
1432      responseText = "\n".concat(Drupal.t('ResponseText: !responseText', {
1433        '!responseText': xmlhttp.responseText.trim()
1434      }));
1435    } catch (e) {}
1436    responseText = responseText.replace(/<("[^"]*"|'[^']*'|[^'">])*>/gi, '');
1437    responseText = responseText.replace(/[\n]+\s+/g, '\n');
1438    var readyStateText = xmlhttp.status === 0 ? "\n".concat(Drupal.t('ReadyState: !readyState', {
1439      '!readyState': xmlhttp.readyState
1440    })) : '';
1441    customMessage = customMessage ? "\n".concat(Drupal.t('CustomMessage: !customMessage', {
1442      '!customMessage': customMessage
1443    })) : '';
1444    this.message = statusCode + pathText + statusText + customMessage + responseText + readyStateText;
1445    this.name = 'AjaxError';
1446  };
1447  Drupal.AjaxError.prototype = new Error();
1448  Drupal.AjaxError.prototype.constructor = Drupal.AjaxError;
1449  Drupal.ajax = function (settings) {
1450    if (arguments.length !== 1) {
1451      throw new Error('Drupal.ajax() function must be called with one configuration object only');
1452    }
1453    var base = settings.base || false;
1454    var element = settings.element || false;
1455    delete settings.base;
1456    delete settings.element;
1457    if (!settings.progress && !element) {
1458      settings.progress = false;
1459    }
1460    var ajax = new Drupal.Ajax(base, element, settings);
1461    ajax.instanceIndex = Drupal.ajax.instances.length;
1462    Drupal.ajax.instances.push(ajax);
1463    return ajax;
1464  };
1465  Drupal.ajax.instances = [];
1466  Drupal.ajax.expired = function () {
1467    return Drupal.ajax.instances.filter(function (instance) {
1468      return instance && instance.element !== false && !document.body.contains(instance.element);
1469    });
1470  };
1471  Drupal.ajax.bindAjaxLinks = function (element) {
1472    once('ajax', '.use-ajax', element).forEach(function (ajaxLink) {
1473      var $linkElement = $(ajaxLink);
1474      var elementSettings = {
1475        progress: {
1476          type: 'throbber'
1477        },
1478        dialogType: $linkElement.data('dialog-type'),
1479        dialog: $linkElement.data('dialog-options'),
1480        dialogRenderer: $linkElement.data('dialog-renderer'),
1481        base: $linkElement.attr('id'),
1482        element: ajaxLink
1483      };
1484      var href = $linkElement.attr('href');
1485      if (href) {
1486        elementSettings.url = href;
1487        elementSettings.event = 'click';
1488      }
1489      Drupal.ajax(elementSettings);
1490    });
1491  };
1492  Drupal.Ajax = function (base, element, elementSettings) {
1493    var defaults = {
1494      event: element ? 'mousedown' : null,
1495      keypress: true,
1496      selector: base ? "#".concat(base) : null,
1497      effect: 'none',
1498      speed: 'none',
1499      method: 'replaceWith',
1500      progress: {
1501        type: 'throbber',
1502        message: Drupal.t('Please wait...')
1503      },
1504      submit: {
1505        js: true
1506      }
1507    };
1508    $.extend(this, defaults, elementSettings);
1509    this.commands = new Drupal.AjaxCommands();
1510    this.instanceIndex = false;
1511    if (this.wrapper) {
1512      this.wrapper = "#".concat(this.wrapper);
1513    }
1514    this.element = element;
1515    this.element_settings = elementSettings;
1516    this.elementSettings = elementSettings;
1517    if (this.element && this.element.form) {
1518      this.$form = $(this.element.form);
1519    }
1520    if (!this.url) {
1521      var $element = $(this.element);
1522      if ($element.is('a')) {
1523        this.url = $element.attr('href');
1524      } else if (this.element && element.form) {
1525        this.url = this.$form.attr('action');
1526      }
1527    }
1528    var originalUrl = this.url;
1529    this.url = this.url.replace(/\/nojs(\/|$|\?|#)/, '/ajax$1');
1530    if (drupalSettings.ajaxTrustedUrl[originalUrl]) {
1531      drupalSettings.ajaxTrustedUrl[this.url] = true;
1532    }
1533    var ajax = this;
1534    ajax.options = {
1535      url: ajax.url,
1536      data: ajax.submit,
1537      isInProgress: function isInProgress() {
1538        return ajax.ajaxing;
1539      },
1540      beforeSerialize: function beforeSerialize(elementSettings, options) {
1541        return ajax.beforeSerialize(elementSettings, options);
1542      },
1543      beforeSubmit: function beforeSubmit(formValues, elementSettings, options) {
1544        ajax.ajaxing = true;
1545        return ajax.beforeSubmit(formValues, elementSettings, options);
1546      },
1547      beforeSend: function beforeSend(xmlhttprequest, options) {
1548        ajax.ajaxing = true;
1549        return ajax.beforeSend(xmlhttprequest, options);
1550      },
1551      success: function success(response, status, xmlhttprequest) {
1552        var _this = this;
1553        if (typeof response === 'string') {
1554          response = $.parseJSON(response);
1555        }
1556        if (response !== null && !drupalSettings.ajaxTrustedUrl[ajax.url]) {
1557          if (xmlhttprequest.getResponseHeader('X-Drupal-Ajax-Token') !== '1') {
1558            var customMessage = Drupal.t('The response failed verification so will not be processed.');
1559            return ajax.error(xmlhttprequest, ajax.url, customMessage);
1560          }
1561        }
1562        return Promise.resolve(ajax.success(response, status)).then(function () {
1563          ajax.ajaxing = false;
1564          $(document).trigger('ajaxSuccess', [xmlhttprequest, _this]);
1565          $(document).trigger('ajaxComplete', [xmlhttprequest, _this]);
1566          if (--$.active === 0) {
1567            $(document).trigger('ajaxStop');
1568          }
1569        });
1570      },
1571      error: function error(xmlhttprequest, status, _error) {
1572        ajax.ajaxing = false;
1573      },
1574      complete: function complete(xmlhttprequest, status) {
1575        if (status === 'error' || status === 'parsererror') {
1576          return ajax.error(xmlhttprequest, ajax.url);
1577        }
1578      },
1579      dataType: 'json',
1580      jsonp: false,
1581      type: 'POST'
1582    };
1583    if (elementSettings.dialog) {
1584      ajax.options.data.dialogOptions = elementSettings.dialog;
1585    }
1586    if (ajax.options.url.indexOf('?') === -1) {
1587      ajax.options.url += '?';
1588    } else {
1589      ajax.options.url += '&';
1590    }
1591    var wrapper = "drupal_".concat(elementSettings.dialogType || 'ajax');
1592    if (elementSettings.dialogRenderer) {
1593      wrapper += ".".concat(elementSettings.dialogRenderer);
1594    }
1595    ajax.options.url += "".concat(Drupal.ajax.WRAPPER_FORMAT, "=").concat(wrapper);
1596    $(ajax.element).on(elementSettings.event, function (event) {
1597      if (!drupalSettings.ajaxTrustedUrl[ajax.url] && !Drupal.url.isLocal(ajax.url)) {
1598        throw new Error(Drupal.t('The callback URL is not local and n
1598ot trusted: !url', {
1599          '!url': ajax.url
1600        }));
1601      }
1602      return ajax.eventResponse(this, event);
1603    });
1604    if (elementSettings.keypress) {
1605      $(ajax.element).on('keypress', function (event) {
1606        return ajax.keypressResponse(this, event);
1607      });
1608    }
1609    if (elementSettings.prevent) {
1610      $(ajax.element).on(elementSettings.prevent, false);
1611    }
1612  };
1613  Drupal.ajax.WRAPPER_FORMAT = '_wrapper_format';
1614  Drupal.Ajax.AJAX_REQUEST_PARAMETER = '_drupal_ajax';
1615  Drupal.Ajax.prototype.execute = function () {
1616    if (this.ajaxing) {
1617      return;
1618    }
1619    try {
1620      this.beforeSerialize(this.element, this.options);
1621      return $.ajax(this.options);
1622    } catch (e) {
1623      this.ajaxing = false;
1624      window.alert("An error occurred while attempting to process ".concat(this.options.url, ": ").concat(e.message));
1625      return $.Deferred().reject();
1626    }
1627  };
1628  Drupal.Ajax.prototype.keypressResponse = function (element, event) {
1629    var ajax = this;
1630    if (event.which === 13 || event.which === 32 && element.type !== 'text' && element.type !== 'textarea' && element.type !== 'tel' && element.type !== 'number') {
1631      event.preventDefault();
1632      event.stopPropagation();
1633      $(element).trigger(ajax.elementSettings.event);
1634    }
1635  };
1636  Drupal.Ajax.prototype.eventResponse = function (element, event) {
1637    event.preventDefault();
1638    event.stopPropagation();
1639    var ajax = this;
1640    if (ajax.ajaxing) {
1641      return;
1642    }
1643    try {
1644      if (ajax.$form) {
1645        if (ajax.setClick) {
1646          element.form.clk = element;
1647        }
1648        ajax.$form.ajaxSubmit(ajax.options);
1649      } else {
1650        ajax.beforeSerialize(ajax.element, ajax.options);
1651        $.ajax(ajax.options);
1652      }
1653    } catch (e) {
1654      ajax.ajaxing = false;
1655      window.alert("An error occurred while attempting to process ".concat(ajax.options.url, ": ").concat(e.message));
1656    }
1657  };
1658  Drupal.Ajax.prototype.beforeSerialize = function (element, options) {
1659    if (this.$form && document.body.contains(this.$form.get(0))) {
1660      var settings = this.settings || drupalSettings;
1661      Drupal.detachBehaviors(this.$form.get(0), settings, 'serialize');
1662    }
1663    options.data[Drupal.Ajax.AJAX_REQUEST_PARAMETER] = 1;
1664    var pageState = drupalSettings.ajaxPageState;
1665    options.data['ajax_page_state[theme]'] = pageState.theme;
1666    options.data['ajax_page_state[theme_token]'] = pageState.theme_token;
1667    options.data['ajax_page_state[libraries]'] = pageState.libraries;
1668  };
1669  Drupal.Ajax.prototype.beforeSubmit = function (formValues, element, options) {};
1670  Drupal.Ajax.prototype.beforeSend = function (xmlhttprequest, options) {
1671    if (this.$form) {
1672      options.extraData = options.extraData || {};
1673      options.extraData.ajax_iframe_upload = '1';
1674      var v = $.fieldValue(this.element);
1675      if (v !== null) {
1676        options.extraData[this.element.name] = v;
1677      }
1678    }
1679    $(this.element).prop('disabled', true);
1680    if (!this.progress || !this.progress.type) {
1681      return;
1682    }
1683    var progressIndicatorMethod = "setProgressIndicator".concat(this.progress.type.slice(0, 1).toUpperCase()).concat(this.progress.type.slice(1).toLowerCase());
1684    if (progressIndicatorMethod in this && typeof this[progressIndicatorMethod] === 'function') {
1685      this[progressIndicatorMethod].call(this);
1686    }
1687  };
1688  Drupal.theme.ajaxProgressThrobber = function (message) {
1689    var messageMarkup = typeof message === 'string' ? Drupal.theme('ajaxProgressMessage', message) : '';
1690    var throbber = '<div class="throbber">&nbsp;</div>';
1691    return "<div class=\"ajax-progress ajax-progress-throbber\">".concat(throbber).concat(messageMarkup, "</div>");
1692  };
1693  Drupal.theme.ajaxProgressIndicatorFullscreen = function () {
1694    return '<div class="ajax-progress ajax-progress-fullscreen">&nbsp;</div>';
1695  };
1696  Drupal.theme.ajaxProgressMessage = function (message) {
1697    return "<div class=\"message\">".concat(message, "</div>");
1698  };
1699  Drupal.theme.ajaxProgressBar = function ($element) {
1700    return $('<div class="ajax-progress ajax-progress-bar"></div>').append($element);
1701  };
1702  Drupal.Ajax.prototype.setProgressIndicatorBar = function () {
1703    var progressBar = new Drupal.ProgressBar("ajax-progress-".concat(this.element.i
1703d), $.noop, this.progress.method, $.noop);
1704    if (this.progress.message) {
1705      progressBar.setProgress(-1, this.progress.message);
1706    }
1707    if (this.progress.url) {
1708      progressBar.startMonitoring(this.progress.url, this.progress.interval || 1500);
1709    }
1710    this.progress.element = $(Drupal.theme('ajaxProgressBar', progressBar.element));
1711    this.progress.object = progressBar;
1712    $(this.element).after(this.progress.element);
1713  };
1714  Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () {
1715    this.progress.element = $(Drupal.theme('ajaxProgressThrobber', this.progress.message));
1716    $(this.element).after(this.progress.element);
1717  };
1718  Drupal.Ajax.prototype.setProgressIndicatorFullscreen = function () {
1719    this.progress.element = $(Drupal.theme('ajaxProgressIndicatorFullscreen'));
1720    $('body').append(this.progress.element);
1721  };
1722  Drupal.Ajax.prototype.commandExecutionQueue = function (response, status) {
1723    var _this2 = this;
1724    var ajaxCommands = this.commands;
1725    return Object.keys(response || {}).reduce(function (executionQueue, key) {
1726      return executionQueue.then(function () {
1727        var command = response[key].command;
1728        if (command && ajaxCommands[command]) {
1729          return ajaxCommands[command](_this2, response[key], status);
1730        }
1731      });
1732    }, Promise.resolve());
1733  };
1734  Drupal.Ajax.prototype.success = function (response, status) {
1735    var _this3 = this;
1736    if (this.progress.element) {
1737      $(this.progress.element).remove();
1738    }
1739    if (this.progress.object) {
1740      this.progress.object.stopMonitoring();
1741    }
1742    $(this.element).prop('disabled', false);
1743    var elementParents = $(this.element).parents('[data-drupal-selector]').addBack().toArray();
1744    var focusChanged = Object.keys(response || {}).some(function (key) {
1745      var _response$key = response[key],
1746        command = _response$key.command,
1747        method = _response$key.method;
1748      return command === 'focusFirst' || command === 'invoke' && method === 'focus';
1749    });
1750    return this.commandExecutionQueue(response, status).then(function () {
1751      if (!focusChanged && _this3.element && !$(_this3.element).data('disable-refocus')) {
1752        var target = false;
1753        for (var n = elementParents.length - 1; !target && n >= 0; n--) {
1754          target = document.querySelector("[data-drupal-selector=\"".concat(elementParents[n].getAttribute('data-drupal-selector'), "\"]"));
1755        }
1756        if (target) {
1757          $(target).trigger('focus');
1758        }
1759      }
1760      if (_this3.$form && document.body.contains(_this3.$form.get(0))) {
1761        var settings = _this3.settings || drupalSettings;
1762        Drupal.attachBehaviors(_this3.$form.get(0), settings);
1763      }
1764      _this3.settings = null;
1765    }).catch(function (error) {
1766      return console.error(Drupal.t('An error occurred during the execution of the Ajax response: !error', {
1767        '!error': error
1768      }));
1769    });
1770  };
1771  Drupal.Ajax.prototype.getEffect = function (response) {
1772    var type = response.effect || this.effect;
1773    var speed = response.speed || this.speed;
1774    var effect = {};
1775    if (type === 'none') {
1776      effect.showEffect = 'show';
1777      effect.hideEffect = 'hide';
1778      effect.showSpeed = '';
1779    } else if (type === 'fade') {
1780      effect.showEffect = 'fadeIn';
1781      effect.hideEffect = 'fadeOut';
1782      effect.showSpeed = speed;
1783    } else {
1784      effect.showEffect = "".concat(type, "Toggle");
1785      effect.hideEffect = "".concat(type, "Toggle");
1786      effect.showSpeed = speed;
1787    }
1788    return effect;
1789  };
1790  Drupal.Ajax.prototype.error = function (xmlhttprequest, uri, customMessage) {
1791    if (this.progress.element) {
1792      $(this.progress.element).remove();
1793    }
1794    if (this.progress.object) {
1795      this.progress.object.stopMonitoring();
1796    }
1797    $(this.wrapper).show();
1798    $(this.element).prop('disabled', false);
1799    if (this.$form && document.body.contains(this.$form.get(0))) {
1800      var settings = this.settings || drupalSettings;
1801      Drupal.attachBehaviors(this.$form.get(0), settings);
1802    }
1803    throw new Drupal.AjaxError(xmlhttprequest, uri, customMessage);
1804  };
1805  Drupal.theme.ajaxWrapperNewContent = function ($newContent, ajax, response) {
1806    return (response.effect || ajax.effect) !== 'none' && $newContent.filter(function (i) {
1807      return !($newContent[i].nodeName === '#comment' || $newContent[i].nodeName === '#text' && /^(\s|\n|\r)*$/.test($newContent[i].textContent));
1808    }).length > 1 ? Drupal.theme('ajaxWrapperMultipleRootElements', $newContent) : $newContent;
1809  };
1810  Drupal.theme.ajaxWrapperMultipleRootElements = function ($elements) {
1811    return $('<div></div>').append($elements);
1812  };
1813  Drupal.AjaxCommands = function () {};
1814  Drupal.AjaxCommands.prototype = {
1815    insert: function insert(ajax, response) {
1816      var $wrapper = response.selector ? $(response.selector) : $(ajax.wrapper);
1817      var method = response.method || ajax.method;
1818      var effect = ajax.getEffect(response);
1819      var settings = response.settings || ajax.settings || drupalSettings;
1820      var $newContent = $($.parseHTML(response.data, document, true));
1821      $newContent = Drupal.theme('ajaxWrapperNewContent', $newContent, ajax, response);
1822      switch (method) {
1823        case 'html':
1824        case 'replaceWith':
1825        case 'replaceAll':
1826        case 'empty':
1827        case 'remove':
1828          Drupal.detachBehaviors($wrapper.get(0), settings);
1829          break;
1830        default:
1831          break;
1832      }
1833      $wrapper[method]($newContent);
1834      if (effect.showEffect !== 'show') {
1835        $newContent.hide();
1836      }
1837      var $ajaxNewContent = $newContent.find('.ajax-new-content');
1838      if ($ajaxNewContent.length) {
1839        $ajaxNewContent.hide();
1840        $newContent.show();
1841        $ajaxNewContent[effect.showEffect](effect.showSpeed);
1842      } else if (effect.showEffect !== 'show') {
1843        $newContent[effect.showEffect](effect.showSpeed);
1844      }
1845      if ($newContent.parents('html').length) {
1846        $newContent.each(function (index, element) {
1847          if (element.nodeType === Node.ELEMENT_NODE) {
1848            Drupal.attachBehaviors(element, settings);
1849          }
1850        });
1851      }
1852    },
1853    remove: function remove(ajax, response, status) {
1854      var settings = response.settings || ajax.settings || drupalSettings;
1855      $(response.selector).each(function () {
1856        Drupal.detachBehaviors(this, settings);
1857      }).remove();
1858    },
1859    changed: function changed(ajax, response, status) {
1860      var $element = $(response.selector);
1861      if (!$element.hasClass('ajax-changed')) {
1862        $element.addClass('ajax-changed');
1863        if (response.asterisk) {
1864          $element.find(response.asterisk).append(" <abbr class=\"ajax-changed\" title=\"".concat(Drupal.t('Changed'), "\">*</abbr> "));
1865        }
1866      }
1867    },
1868    alert: function alert(ajax, response, status) {
1869      window.alert(response.text);
1870    },
1871    announce: function announce(ajax, response) {
1872      if (response.priority) {
1873        Drupal.announce(response.text, response.priority);
1874      } else {
1875        Drupal.announce(response.text);
1876      }
1877    },
1878    redirect: function redirect(ajax, response, status) {
1879      window.location = response.url;
1880    },
1881    css: function css(ajax, response, status) {
1882      $(response.selector).css(response.argument);
1883    },
1884    settings: function settings(ajax, response, status) {
1885      var ajaxSettings = drupalSettings.ajax;
1886      if (ajaxSettings) {
1887        Drupal.ajax.expired().forEach(function (instance) {
1888          if (instance.selector) {
1889            var selector = instance.selector.replace('#', '');
1890            if (selector in ajaxSettings) {
1891              delete ajaxSettings[selector];
1892            }
1893          }
1894        });
1895      }
1896      if (response.merge) {
1897        $.extend(true, drupalSettings, response.settings);
1898      } else {
1899        ajax.settings = response.settings;
1900      }
1901    },
1902    data: function data(ajax, response, status) {
1903      $(response.selector).data(response.name, response.value);
1904    },
1905    focusFirst: function focusFirst(ajax, response, status) {
1906      var focusChanged = false;
1907      var container = document.querySelector(response.selector);
1908      if (container) {
1909        var tabbableElements = tabbable(container);
1910        if (tabbableElements.length) {
1911          tabbableElements[0].focus();
1912          focusChanged = true;
1913        } else if (isFocusable(container)) {
1914          container.focus();
1915          focusChanged = true;
1916        }
1917      }
1918      if (ajax.hasOwnProperty('element') && !focusChanged) {
1919        ajax.element.focus();
1920      }
1921    },
1922    invoke: function invoke(ajax, response, status) {
1923      var $element = $(response.selector);
1924      $element[response.method].apply($element, _toConsumableArray(response.args));
1925    },
1926    restripe: function restripe(ajax, response, status) {
1927      $(response.selector).find('> tbody > tr:visible, > tr:visible').removeClass('odd even').filter(':even').addClass('odd').end().filter(':odd').addClass('even');
1928    },
1929    update_build_id: function update_build_id(ajax, response, status) {
1930      document.querySelectorAll("input[name=\"form_build_id\"][value=\"".concat(response.old, "\"]")).forEach(function (item) {
1931        item.value = response.new;
1932      });
1933    },
1934    add_css: function add_css(ajax, response, status) {
1935      $('head').prepend(response.data);
1936    },
1937    message: function message(ajax, response) {
1938      var messages = new Drupal.Message(document.querySelector(response.messageWrapperQuerySelector));
1939      if (response.clearPrevious) {
1940        messages.clear();
1941      }
1942      messages.add(response.message, response.messageOptions);
1943    },
1944    add_js: function add_js(ajax, response, status) {
1945      var parentEl = document.querySelector(response.selector || 'body');
1946      var settings = ajax.settings || drupalSettings;
1947      var allUniqueBundleIds = response.data.map(function (script) {
1948        var uniqueBundleId = script.src + ajax.instanceIndex;
1949        loadjs(script.src, uniqueBundleId, {
1950          async: false,
1951          before: function before(path, scriptEl) {
1952            Object.keys(script).forEach(function (attributeKey) {
1953              scriptEl.setAttribute(attributeKey, script[attributeKey]);
1954            });
1955            parentEl.appendChild(scriptEl);
1956            return false;
1957          }
1958        });
1959        return uniqueBundleId;
1960      });
1961      return new Promise(function (resolve, reject) {
1962        loadjs.ready(allUniqueBundleIds, {
1963          success: function success() {
1964            Drupal.attachBehaviors(parentEl, settings);
1965            resolve();
1966          },
1967          error: function error(depsNotFound) {
1968            var message = Drupal.t("The following files could not be loaded: @dependencies", {
1969              '@dependencies': depsNotFound.join(', ')
1970            });
1971            reject(message);
1972          }
1973        });
1974      });
1975    }
1976  };
1977  var stopEvent = function stopEvent(xhr, settings) {
1978    return xhr.getResponseHeader('X-Drupal-Ajax-Token') === '1' && settings.isInProgress && settings.isInProgress();
1979  };
1980  $.extend(true, $.event.special, {
1981    ajaxSuccess: {
1982      trigger: function trigger(event, xhr, settings) {
1983        if (stopEvent(xhr, settings)) {
1984          return false;
1985        }
1986      }
1987    },
1988    ajaxComplete: {
1989      trigger: function trigger(event, xhr, settings) {
1990        if (stopEvent(xhr, settings)) {
1991          $.active++;
1992          return false;
1993        }
1994      }
1995    }
1996  });
1997})(jQuery, window, Drupal, drupalSettings, loadjs, window.tabbable);;
1998/**
1999 * @file
2000 * Extends methods from core/misc/ajax.js.
2001 */
2002
2003(function ($, window, Drupal, drupalSettings) {
2004
2005  /**
2006   * Attempts to find the closest glyphicon progress indicator.
2007   *
2008   * @param {jQuery|Element} element
2009   *   A DOM element.
2010   *
2011   * @returns {jQuery}
2012   *   A jQuery object.
2013   */
2014  Drupal.Ajax.prototype.findGlyphicon = function (element) {
2015    return $(element).closest('.form-item').find('.ajax-progress.glyphicon')
2016  };
2017
2018  /**
2019   * Starts the spinning of the glyphicon progress indicator.
2020   *
2021   * @param {jQuery|Element} element
2022   *   A DOM element.
2023   * @param {string} [message]
2024   *   An optional message to display (tooltip) for the progress.
2025   *
2026   * @returns {jQuery}
2027   *   A jQuery object.
2028   */
2029  Drupal.Ajax.prototype.glyphiconStart = function (element, message) {
2030    var $glyphicon = this.findGlyphicon(element);
2031    if ($glyphicon[0]) {
2032      $glyphicon.addClass('glyphicon-spin');
2033
2034      // Add any message as a tooltip to the glyphicon.
2035      if ($.fn.tooltip && drupalSettings.bootstrap.tooltip_enabled) {
2036        $glyphicon
2037          .removeAttr('data-toggle')
2038          .removeAttr('data-original-title')
2039          .removeAttr('title')
2040          .tooltip('destroy')
2041        ;
2042
2043        if (message) {
2044          $glyphicon.attr('data-toggle', 'tooltip').attr('title', message).tooltip();
2045        }
2046      }
2047
2048      // Append a message for screen readers.
2049      if (message) {
2050        $glyphicon.parent().append('<div class="sr-only message">' + message + '</div>');
2051      }
2052    }
2053    return $glyphicon;
2054  };
2055
2056  /**
2057   * Stop the spinning of a glyphicon progress indicator.
2058   *
2059   * @param {jQuery|Element} element
2060   *   A DOM element.
2061   */
2062  Drupal.Ajax.prototype.glyphiconStop = function (element) {
2063    var $glyphicon = this.findGlyphicon(element);
2064    if ($glyphicon[0]) {
2065      $glyphicon.removeClass('glyphicon-spin');
2066      if ($.fn.tooltip && drupalSettings.bootstrap.tooltip_enabled) {
2067        $glyphicon
2068          .removeAttr('data-toggle')
2069          .removeAttr('data-original-title')
2070          .removeAttr('title')
2071          .tooltip('destroy')
2072        ;
2073      }
2074    }
2075  };
2076
2077  /**
2078   * Sets the throbber progress indicator.
2079   */
2080  Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () {
2081    var $element = $(this.element);
2082
2083    // Find an existing glyphicon progress indicator.
2084    var $glyphicon = this.glyphiconStart($element, this.progress.message);
2085    if ($glyphicon[0]) {
2086      this.progress.element = $glyphicon.parent();
2087      this.progress.glyphicon = true;
2088      return;
2089    }
2090
2091    // Otherwise, add a glyphicon throbber after the element.
2092    if (!this.progress.element) {
2093      this.progress.element = $(Drupal.theme('ajaxThrobber'));
2094    }
2095    if (this.progress.message) {
2096      this.progress.element.after('<div class="message">' + this.progress.message + '</div>');
2097    }
2098
2099    // If element is an input DOM element type (not :input), append after.
2100    if ($element.is('input')) {
2101      $element.after(this.progress.element);
2102    }
2103    // Otherwise append the throbber inside the element.
2104    else {
2105      $element.append(this.progress.element);
2106    }
2107  };
2108
2109
2110  /**
2111   * Handler for the form redirection completion.
2112   *
2113   * @param {Array.<Drupal.AjaxCommands~commandDefinition>} response
2114   * @param {number} status
2115   */
2116  var success = Drupal.Ajax.prototype.success;
2117  Drupal.Ajax.prototype.success = function (response, status) {
2118    if (this.progress.element) {
2119
2120      // Stop a glyphicon throbber.
2121      if (this.progress.glyphicon) {
2122        this.glyphiconStop(this.progress.element);
2123      }
2124      // Remove the progress element.
2125      else {
2126        this.progress.element.remove();
2127      }
2128
2129      // Remove any message set.
2130      this.progress.element.parent().find('.message').remove();
2131    }
2132
2133    // Invoke the original success handler.
2134    return success.apply(this, [response, status]);
2135  };
2136
2137})(jQuery, this, Drupal, drupalSettings);
2138;
2139/*!
2140  * Bootstrap v5.1.3 (https://getbootstrap.com/)
2141  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2142  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2143  */
2144(function (global, factory) {
2145  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
2146  typeof define === 'function' && define.amd ? define(factory) :
2147  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());
2148})(this, (function () { 'use strict';
2149
2150  /**
2151   * --------------------------------------------------------------------------
2152   * Bootstrap (v5.1.3): util/index.js
2153   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2154   * --------------------------------------------------------------------------
2155   */
2156  const MAX_UID = 1000000;
2157  const MILLISECONDS_MULTIPLIER = 1000;
2158  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
2159
2160  const toType = obj => {
2161    if (obj === null || obj === undefined) {
2162      return `${obj}`;
2163    }
2164
2165    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
2166  };
2167  /**
2168   * --------------------------------------------------------------------------
2169   * Public Util Api
2170   * --------------------------------------------------------------------------
2171   */
2172
2173
2174  const getUID = prefix => {
2175    do {
2176      prefix += Math.floor(Math.random() * MAX_UID);
2177    } while (document.getElementById(prefix));
2178
2179    return prefix;
2180  };
2181
2182  const getSelector = element => {
2183    let selector = element.getAttribute('data-bs-target');
2184
2185    if (!selector || selector === '#') {
2186      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
2187      // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
2188      // `document.querySelector` will rightfully complain it is invali
2188d.
2189      // See https://github.com/twbs/bootstrap/issues/32273
2190
2191      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
2192        return null;
2193      } // Just in case some CMS puts out a full URL with the anchor appended
2194
2195
2196      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
2197        hrefAttr = `#${hrefAttr.split('#')[1]}`;
2198      }
2199
2200      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
2201    }
2202
2203    return selector;
2204  };
2205
2206  const getSelectorFromElement = element => {
2207    const selector = getSelector(element);
2208
2209    if (selector) {
2210      return document.querySelector(selector) ? selector : null;
2211    }
2212
2213    return null;
2214  };
2215
2216  const getElementFromSelector = element => {
2217    const selector = getSelector(element);
2218    return selector ? document.querySelector(selector) : null;
2219  };
2220
2221  const getTransitionDurationFromElement = element => {
2222    if (!element) {
2223      return 0;
2224    } // Get transition-duration of the element
2225
2226
2227    let {
2228      transitionDuration,
2229      transitionDelay
2230    } = window.getComputedStyle(element);
2231    const floatTransitionDuration = Number.parseFloat(transitionDuration);
2232    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
2233
2234    if (!floatTransitionDuration && !floatTransitionDelay) {
2235      return 0;
2236    } // If multiple durations are defined, take the first
2237
2238
2239    transitionDuration = transitionDuration.split(',')[0];
2240    transitionDelay = transitionDelay.split(',')[0];
2241    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
2242  };
2243
2244  const triggerTransitionEnd = element => {
2245    element.dispatchEvent(new Event(TRANSITION_END));
2246  };
2247
2248  const isElement$1 = obj => {
2249    if (!obj || typeof obj !== 'object') {
2250      return false;
2251    }
2252
2253    if (typeof obj.jquery !== 'undefined') {
2254      obj = obj[0];
2255    }
2256
2257    return typeof obj.nodeType !== 'undefined';
2258  };
2259
2260  const getElement = obj => {
2261    if (isElement$1(obj)) {
2262      // it's a jQuery object or a node element
2263      return obj.jquery ? obj[0] : obj;
2264    }
2265
2266    if (typeof obj === 'string' && obj.length > 0) {
2267      return document.querySelector(obj);
2268    }
2269
2270    return null;
2271  };
2272
2273  const typeCheckConfig = (componentName, config, configTypes) => {
2274    Object.keys(configTypes).forEach(property => {
2275      const expectedTypes = configTypes[property];
2276      const value = config[property];
2277      const valueType = value && isElement$1(value) ? 'element' : toType(value);
2278
2279      if (!new RegExp(expectedTypes).test(valueType)) {
2280        throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
2281      }
2282    });
2283  };
2284
2285  const isVisible = element => {
2286    if (!isElement$1(element) || element.getClientRects().length === 0) {
2287      return false;
2288    }
2289
2290    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
2291  };
2292
2293  const isDisabled = element => {
2294    if (!element || element.nodeType !== Node.ELEMENT_NODE) {
2295      return true;
2296    }
2297
2298    if (element.classList.contains('disabled')) {
2299      return true;
2300    }
2301
2302    if (typeof element.disabled !== 'undefined') {
2303      return element.disabled;
2304    }
2305
2306    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
2307  };
2308
2309  const findShadowRoot = element => {
2310    if (!document.documentElement.attachShadow) {
2311      return null;
2312    } // Can find the shadow root otherwise it'll return the document
2313
2314
2315    if (typeof element.getRootNode === 'function') {
2316      const root = element.getRootNode();
2317      return root instanceof ShadowRoot ? root : null;
2318    }
2319
2320    if (element instanceof ShadowRoot) {
2321      return element;
2322    } // when we don't find a shadow root
2323
2324
2325    if (!element.parentNode) {
2326      return null;
2327    }
2328
2329    return findShadowRoot(element.parentNode);
2330  };
2331
2332  const noop = () => {};
2333  /**
2334   * Trick to restart an element's animation
2335   *
2336   * @param {HTMLElement} element
2337   * @return void
2338   *
2339   * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
2340   */
2341
2342
2343  const reflow = element => {
2344    // eslint-disable-next-line no-unused-expressions
2345    element.offsetHeight;
2346  };
2347
2348  const getjQuery = () => {
2349    const {
2350      jQuery
2351    } = window;
2352
2353    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
2354      return jQuery;
2355    }
2356
2357    return null;
2358  };
2359
2360  const DOMContentLoadedCallbacks = [];
2361
2362  const onDOMContentLoaded = callback => {
2363    if (document.readyState === 'loading') {
2364      // add listener on the first call when the document is in loading state
2365      if (!DOMContentLoadedCallbacks.length) {
2366        document.addEventListener('DOMContentLoaded', () => {
2367          DOMContentLoadedCallbacks.forEach(callback => callback());
2368        });
2369      }
2370
2371      DOMContentLoadedCallbacks.push(callback);
2372    } else {
2373      callback();
2374    }
2375  };
2376
2377  const isRTL = () => document.documentElement.dir === 'rtl';
2378
2379  const defineJQueryPlugin = plugin => {
2380    onDOMContentLoaded(() => {
2381      const $ = getjQuery();
2382      /* istanbul ignore if */
2383
2384      if ($) {
2385        const name = plugin.NAME;
2386        const JQUERY_NO_CONFLICT = $.fn[name];
2387        $.fn[name] = plugin.jQueryInterface;
2388        $.fn[name].Constructor = plugin;
2389
2390        $.fn[name].noConflict = () => {
2391          $.fn[name] = JQUERY_NO_CONFLICT;
2392          return plugin.jQueryInterface;
2393        };
2394      }
2395    });
2396  };
2397
2398  const execute = callback => {
2399    if (typeof callback === 'function') {
2400      callback();
2401    }
2402  };
2403
2404  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
2405    if (!waitForTransition) {
2406      execute(callback);
2407      return;
2408    }
2409
2410    const durationPadding = 5;
2411    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
2412    let called = false;
2413
2414    const handler = ({
2415      target
2416    }) => {
2417      if (target !== transitionElement) {
2418        return;
2419      }
2420
2421      called = true;
2422      transitionElement.removeEventListener(TRANSITION_END, handler);
2423      execute(callback);
2424    };
2425
2426    transitionElement.addEventListener(TRANSITION_END, handler);
2427    setTimeout(() => {
2428      if (!called) {
2429        triggerTransitionEnd(transitionElement);
2430      }
2431    }, emulatedDuration);
2432  };
2433  /**
2434   * Return the previous/next element of a list.
2435   *
2436   * @param {array} list    The list of elements
2437   * @param activeElement   The active element
2438   * @param shouldGetNext   Choose to get next or previous element
2439   * @param isCycleAllowed
2440   * @return {Element|elem} The proper element
2441   */
2442
2443
2444  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
2445    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed
2446
2447    if (index === -1) {
2448      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];
2449    }
2450
2451    const listLength = list.length;
2452    index += shouldGetNext ? 1 : -1;
2453
2454    if (isCycleAllowed) {
2455      index = (index + listLength) % listLength;
2456    }
2457
2458    return list[Math.max(0, Math.min(index, listLength - 1))];
2459  };
2460
2461  /**
2462   * --------------------------------------------------------------------------
2463   * Bootstrap (v5.1.3): dom/event-handler.js
2464   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2465   * --------------------------------------------------------------------------
2466   */
2467  /**
2468   * ------------------------------------------------------------------------
2469   * Constants
2470   * ------------------------------------------------------------------------
2471   */
2472
2473  const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
2474  const stripNameRegex = /\..*/;
2475  const stripUidRegex = /::\d+$/;
2476  const eventRegistry = {}; // Events storage
2477
2478  let uidEvent = 1;
2479  const customEvents = {
2480    mouseenter: 'mouseover',
2481    mouseleave: 'mouseout'
2482  };
2483  const customEventsRegex = /^(mouseenter|mouseleave)/i;
2484  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
2485  /**
2486   * ------------------------------------------------------------------------
2487   * Private methods
2488   * ------------------------------------------------------------------------
2489   */
2490
2491  function getUidEvent(element, uid) {
2492    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
2493  }
2494
2495  function getEvent(element) {
2496    const uid = getUidEvent(element);
2497    element.uidEvent = uid;
2498    eventRegistry[uid] = eventRegistry[uid] || {};
2499    return eventRegistry[uid];
2500  }
2501
2502  function bootstrapHandler(element, fn) {
2503    return function handler(event) {
2504      event.delegateTarget = element;
2505
2506      if (handler.oneOff) {
2507        EventHandler.off(element, event.type, fn);
2508      }
2509
2510      return fn.apply(element, [event]);
2511    };
2512  }
2513
2514  function bootstrapDelegationHandler(element, selector, fn) {
2515    return function handler(event) {
2516      const domElements = element.querySelectorAll(selector);
2517
2518      for (let {
2519        target
2520      } = event; target && target !== this; target = target.parentNode) {
2521        for (let i = domElements.length; i--;) {
2522          if (domElements[i] === target) {
2523            event.delegateTarget = target;
2524
2525            if (handler.oneOff) {
2526              EventHandler.off(element, event.type, selector, fn);
2527            }
2528
2529            return fn.apply(target, [event]);
2530          }
2531        }
2532      } // To please ESLint
2533
2534
2535      return null;
2536    };
2537  }
2538
2539  function findHandler(events, handler, delegationSelector = null) {
2540    const uidEventList = Object.keys(events);
2541
2542    for (let i = 0, len = uidEventList.length; i < len; i++) {
2543      const event = events[uidEventList[i]];
2544
2545      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
2546        return event;
2547      }
2548    }
2549
2550    return null;
2551  }
2552
2553  function normalizeParams(originalTypeEvent, handler, delegationFn) {
2554    const delegation = typeof handler === 'string';
2555    const originalHandler = delegation ? delegationFn : handler;
2556    let typeEvent = getTypeEvent(originalTypeEvent);
2557    const isNative = nativeEvents.has(typeEvent);
2558
2559    if (!isNative) {
2560      typeEvent = originalTypeEvent;
2561    }
2562
2563    return [delegation, originalHandler, typeEvent];
2564  }
2565
2566  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
2567    if (typeof originalTypeEvent !== 'string' || !element) {
2568      return;
2569    }
2570
2571    if (!handler) {
2572      handler = delegationFn;
2573      delegationFn = null;
2574    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
2575    // this prevents the handler from being dispatched the same way as mouseover or mouseout does
2576
2577
2578    if (customEventsRegex.test(originalTypeEvent)) {
2579      const wrapFn = fn => {
2580        return function (event) {
2581          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
2582            return fn.call(this, event);
2583          }
2584        };
2585      };
2586
2587      if (delegationFn) {
2588        delegationFn = wrapFn(delegationFn);
2589      } else {
2590        handler = wrapFn(handler);
2591      }
2592    }
2593
2594    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
2595    const events = getEvent(element);
2596    const handlers = events[typeEvent] || (events[typeEvent] = {});
2597    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
2598
2599    if (previousFn) {
2600      previousFn.oneOff = previousFn.oneOff && oneOff;
2601      return;
2602    }
2603
2604    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
2605    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
2606    fn.delegationSelector = delegation ? handler : null;
2607    fn.originalHandler = originalHandler;
2608    fn.oneOff = oneOff;
2609    fn.uidEvent = uid;
2610    handlers[uid] = fn;
2611    element.addEventListener(typeEvent, fn, delegation);
2612  }
2613
2614  function removeHandler(element, events, typeEvent, handler, delegationSelector) {
2615    const fn = findHandler(events[typeEvent], handler, delegationSelector);
2616
2617    if (!fn) {
2618      return;
2619    }
2620
2621    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
2622    delete events[typeEvent][fn.uidEvent];
2623  }
2624
2625  function removeNamespacedHandlers(element, events, typeEvent, namespace) {
2626    const storeElementEvent = events[typeEvent] || {};
2627    Object.keys(storeElementEvent).forEach(handlerKey => {
2628      if (handlerKey.includes(namespace)) {
2629        const event = storeElementEvent[handlerKey];
2630        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
2631      }
2632    });
2633  }
2634
2635  function getTypeEvent(event) {
2636    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
2637    event = event.replace(stripNameRegex, '');
2638    return customEvents[event] || event;
2639  }
2640
2641  const EventHandler = {
2642    on(element, event, handler, delegationFn) {
2643      addHandler(element, event, handler, delegationFn, false);
2644    },
2645
2646    one(element, event, handler, delegationFn) {
2647      addHandler(element, event, handler, delegationFn, true);
2648    },
2649
2650    off(element, originalTypeEvent, handler, delegationFn) {
2651      if (typeof originalTypeEvent !== 'string' || !element) {
2652        return;
2653      }
2654
2655      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
2656      const inNamespace = typeEvent !== originalTypeEvent;
2657      const events = getEvent(element);
2658      const isNamespace = originalTypeEvent.startsWith('.');
2659
2660      if (typeof originalHandler !== 'undefined') {
2661        // Simplest case: handler is passed, remove that listener ONLY.
2662        if (!events || !events[typeEvent]) {
2663          return;
2664        }
2665
2666        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);
2667        return;
2668      }
2669
2670      if (isNamespace) {
2671        Object.keys(events).forEach(elementEvent => {
2672          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
2673        });
2674      }
2675
2676      const storeElementEvent = events[typeEvent] || {};
2677      Object.keys(storeElementEvent).forEach(keyHandlers => {
2678        const handlerKey = keyHandlers.replace(stripUidRegex, '');
2679
2680        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
2681          const event = storeElementEvent[keyHandlers];
2682          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
2683        }
2684      });
2685    },
2686
2687    trigger(element, event, args) {
2688      if (typeof event !== 'string' || !element) {
2689        return null;
2690      }
2691
2692      const $ = getjQuery();
2693      const typeEvent = getTypeEvent(event);
2694      const inNamespace = event !== typeEvent;
2695      const isNative = nativeEvents.has(typeEvent);
2696      let jQueryEvent;
2697      let bubbles = true;
2698      let nativeDispatch = true;
2699      let defaultPrevented = false;
2700      let evt = null;
2701
2702      if (inNamespace && $) {
2703        jQueryEvent = $.Event(event, args);
2704        $(element).trigger(jQueryEvent);
2705        bubbles = !jQueryEvent.isPropagationStopped();
2706        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
2707        defaultPrevented = jQueryEvent.isDefaultPrevented();
2708      }
2709
2710      if (isNative) {
2711        evt = document.createEvent('HTMLEvents');
2712        evt.initEvent(typeEvent, bubbles, true);
2713      } else {
2714        evt = new CustomEvent(event, {
2715          bubbles,
2716          cancelable: true
2717        });
2718      } // merge custom information in our event
2719
2720
2721      if (typeof args !== 'undefined') {
2722        Object.keys(args).forEach(key => {
2723          Object.defineProperty(evt, key, {
2724            get() {
2725              return args[key];
2726            }
2727
2728          });
2729        });
2730      }
2731
2732      if (defaultPrevented) {
2733        evt.preventDefault();
2734      }
2735
2736      if (nativeDispatch) {
2737        element.dispatchEvent(evt);
2738      }
2739
2740      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {
2741        jQueryEvent.preventDefault();
2742      }
2743
2744      return evt;
2745    }
2746
2747  };
2748
2749  /**
2750   * --------------------------------------------------------------------------
2751   * Bootstrap (v5.1.3): dom/data.js
2752   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2753   * --------------------------------------------------------------------------
2754   */
2755
2756  /**
2757   * ------------------------------------------------------------------------
2758   * Constants
2759   * ------------------------------------------------------------------------
2760   */
2761  const elementMap = new Map();
2762  const Data = {
2763    set(element, key, instance) {
2764      if (!elementMap.has(element)) {
2765        elementMap.set(element, new Map());
2766      }
2767
2768      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
2769      // can be removed later when multiple key/instances are fine to be used
2770
2771      if (!instanceMap.has(key) && instanceMap.size !== 0) {
2772        // eslint-disable-next-line no-console
2773        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
2774        return;
2775      }
2776
2777      instanceMap.set(key, instance);
2778    },
2779
2780    get(element, key) {
2781      if (elementMap.has(element)) {
2782        return elementMap.get(element).get(key) || null;
2783      }
2784
2785      return null;
2786    },
2787
2788    remove(element, key) {
2789      if (!elementMap.has(element)) {
2790        return;
2791      }
2792
2793      const instanceMap = elementMap.get(element);
2794      instanceMap.delete(key); // free up element references if there are no instances left for an element
2795
2796      if (instanceMap.size === 0) {
2797        elementMap.delete(element);
2798      }
2799    }
2800
2801  };
2802
2803  /**
2804   * --------------------------------------------------------------------------
2805   * Bootstrap (v5.1.3): base-component.js
2806   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2807   * --------------------------------------------------------------------------
2808   */
2809  /**
2810   * ------------------------------------------------------------------------
2811   * Constants
2812   * ------------------------------------------------------------------------
2813   */
2814
2815  const VERSION = '5.1.3';
2816
2817  class BaseComponent {
2818    constructor(element) {
2819      element = getElement(element);
2820
2821      if (!element) {
2822        return;
2823      }
2824
2825      this._element = element;
2826      Data.set(this._element, this.constructor.DATA_KEY, this);
2827    }
2828
2829    dispose() {
2830      Data.remove(this._element, this.constructor.DATA_KEY);
2831      EventHandler.off(this._element, this.constructor.EVENT_KEY);
2832      Object.getOwnPropertyNames(this).forEach(propertyName => {
2833        this[propertyName] = null;
2834      });
2835    }
2836
2837    _queueCallback(callback, element, isAnimated = true) {
2838      executeAfterTransition(callback, element, isAnimated);
2839    }
2840    /** Static */
2841
2842
2843    static getInstance(element) {
2844      return Data.get(getElement(element), this.DATA_KEY);
2845    }
2846
2847    static getOrCreateInstance(element, config = {}) {
2848      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
2849    }
2850
2851    static get VERSION() {
2852      return VERSION;
2853    }
2854
2855    static get NAME() {
2856      throw new Error('You have to implement the static method "NAME", for each component!');
2857    }
2858
2859    static get DATA_KEY() {
2860      return `bs.${this.NAME}`;
2861    }
2862
2863    static get EVENT_KEY() {
2864      return `.${this.DATA_KEY}`;
2865    }
2866
2867  }
2868
2869  /**
2870   * --------------------------------------------------------------------------
2871   * Bootstrap (v5.1.3): util/component-functions.js
2872   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2873   * --------------------------------------------------------------------------
2874   */
2875
2876  const enableDismissTrigger = (component, method = 'hide') => {
2877    const clickEvent = `click.dismiss${component.EVENT_KEY}`;
2878    const name = component.NAME;
2879    EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
2880      if (['A', 'AREA'].includes(this.tagName)) {
2881        event.preventDefault();
2882      }
2883
2884      if (isDisabled(this)) {
2885        return;
2886      }
2887
2888      const target = getElementFromSelector(this) || this.closest(`.${name}`);
2889      const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
2890
2891      instance[method]();
2892    });
2893  };
2894
2895  /**
2896   * --------------------------------------------------------------------------
2897   * Bootstrap (v5.1.3): alert.js
2898   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2899   * --------------------------------------------------------------------------
2900   */
2901  /**
2902   * ------------------------------------------------------------------------
2903   * Constants
2904   * ------------------------------------------------------------------------
2905   */
2906
2907  const NAME$d = 'alert';
2908  const DATA_KEY$c = 'bs.alert';
2909  const EVENT_KEY$c = `.${DATA_KEY$c}`;
2910  const EVENT_CLOSE = `close${EVENT_KEY$c}`;
2911  const EVENT_CLOSED = `closed${EVENT_KEY$c}`;
2912  const CLASS_NAME_FADE$5 = 'fade';
vendor: 4,515 bytes, lines 2913-3067
2913  const CLASS_NAME_SHOW$8 = 'show';
2914  /**
2915   * ------------------------------------------------------------------------
2916   * Class Definition
2917   * ------------------------------------------------------------------------
2918   */
2919
2920  class Alert extends BaseComponent {
2921    // Getters
2922    static get NAME() {
2923      return NAME$d;
2924    } // Public
2925
2926
2927    close() {
2928      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
2929
2930      if (closeEvent.defaultPrevented) {
2931        return;
2932      }
2933
2934      this._element.classList.remove(CLASS_NAME_SHOW$8);
2935
2936      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
2937
2938      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
2939    } // Private
2940
2941
2942    _destroyElement() {
2943      this._element.remove();
2944
2945      EventHandler.trigger(this._element, EVENT_CLOSED);
2946      this.dispose();
2947    } // Static
2948
2949
2950    static jQueryInterface(config) {
2951      return this.each(function () {
2952        const data = Alert.getOrCreateInstance(this);
2953
2954        if (typeof config !== 'string') {
2955          return;
2956        }
2957
2958        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
2959          throw new TypeError(`No method named "${config}"`);
2960        }
2961
2962        data[config](this);
2963      });
2964    }
2965
2966  }
2967  /**
2968   * ------------------------------------------------------------------------
2969   * Data Api implementation
2970   * ------------------------------------------------------------------------
2971   */
2972
2973
2974  enableDismissTrigger(Alert, 'close');
2975  /**
2976   * ------------------------------------------------------------------------
2977   * jQuery
2978   * ------------------------------------------------------------------------
2979   * add .Alert to jQuery only if jQuery is present
2980   */
2981
2982  defineJQueryPlugin(Alert);
2983
2984  /**
2985   * --------------------------------------------------------------------------
2986   * Bootstrap (v5.1.3): button.js
2987   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2988   * --------------------------------------------------------------------------
2989   */
2990  /**
2991   * ------------------------------------------------------------------------
2992   * Constants
2993   * ------------------------------------------------------------------------
2994   */
2995
2996  const NAME$c = 'button';
2997  const DATA_KEY$b = 'bs.button';
2998  const EVENT_KEY$b = `.${DATA_KEY$b}`;
2999  const DATA_API_KEY$7 = '.data-api';
3000  const CLASS_NAME_ACTIVE$3 = 'active';
3001  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
3002  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`;
3003  /**
3004   * ------------------------------------------------------------------------
3005   * Class Definition
3006   * ------------------------------------------------------------------------
3007   */
3008
3009  class Button extends BaseComponent {
3010    // Getters
3011    static get NAME() {
3012      return NAME$c;
3013    } // Public
3014
3015
3016    toggle() {
3017      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
3018      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
3019    } // Static
3020
3021
3022    static jQueryInterface(config) {
3023      return this.each(function () {
3024        const data = Button.getOrCreateInstance(this);
3025
3026        if (config === 'toggle') {
3027          data[config]();
3028        }
3029      });
3030    }
3031
3032  }
3033  /**
3034   * ------------------------------------------------------------------------
3035   * Data Api implementation
3036   * ------------------------------------------------------------------------
3037   */
3038
3039
3040  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
3041    event.preventDefault();
3042    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
3043    const data = Button.getOrCreateInstance(button);
3044    data.toggle();
3045  });
3046  /**
3047   * ------------------------------------------------------------------------
3048   * jQuery
3049   * ------------------------------------------------------------------------
3050   * add .Button to jQuery only if jQuery is present
3051   */
3052
3053  defineJQueryPlugin(Button);
3054
3055  /**
3056   * --------------------------------------------------------------------------
3057   * Bootstrap (v5.1.3): dom/manipulator.js
3058   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3059   * --------------------------------------------------------------------------
3060   */
3061  function normalizeData(val) {
3062    if (val === 'true') {
3063      return true;
3064    }
3065
3066    if (val === 'false') {
3067      return false;
3068    }
3069
3070    if (val === Number(val).toString()) {
3071      return Number(val);
3072    }
3073
3074    if (val === '' || val === 'null') {
3075      return null;
3076    }
3077
3078    return val;
3079  }
3080
3081  function normalizeDataKey(key) {
3082    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
3083  }
3084
3085  const Manipulator = {
3086    setDataAttribute(element, key, value) {
3087      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
3088    },
3089
3090    removeDataAttribute(element, key) {
3091      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
3092    },
3093
3094    getDataAttributes(element) {
3095      if (!element) {
3096        return {};
3097      }
3098
3099      const attributes = {};
3100      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {
3101        let pureKey = key.replace(/^bs/, '');
3102        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
3103        attributes[pureKey] = normalizeData(element.dataset[key]);
3104      });
3105      return attributes;
3106    },
3107
3108    getDataAttribute(element, key) {
3109      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
3110    },
3111
3112    offset(element) {
3113      const rect = element.getBoundingClientRect();
3114      return {
3115        top: rect.top + window.pageYOffset,
3116        left: rect.left + window.pageXOffset
3117      };
3118    },
3119
3120    position(element) {
3121      return {
3122        top: element.offsetTop,
3123        left: element.offsetLeft
3124      };
3125    }
3126
3127  };
3128
3129  /**
3130   * --------------------------------------------------------------------------
3131   * Bootstrap (v5.1.3): dom/selector-engine.js
3132   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3133   * --------------------------------------------------------------------------
3134   */
3135  const NODE_TEXT = 3;
3136  const SelectorEngine = {
3137    find(selector, element = document.documentElement) {
3138      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
3139    },
3140
3141    findOne(selector, element = document.documentElement) {
3142      return Element.prototype.querySelector.call(element, selector);
3143    },
3144
3145    children(element, selector) {
3146      return [].concat(...element.children).filter(child => child.matches(selector));
3147    },
3148
3149    parents(element, selector) {
3150      const parents = [];
3151      let ancestor = element.parentNode;
3152
3153      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
3154        if (ancestor.matches(selector)) {
3155          parents.push(ancestor);
3156        }
3157
3158        ancestor = ancestor.parentNode;
3159      }
3160
3161      return parents;
3162    },
3163
3164    prev(element, selector) {
3165      let previous = element.previousElementSibling;
3166
3167      while (previous) {
3168        if (previous.matches(selector)) {
3169          return [previous];
3170        }
3171
3172        previous = previous.previousElementSibling;
3173      }
3174
3175      return [];
3176    },
3177
3178    next(element, selector) {
3179      let next = element.nextElementSibling;
3180
3181      while (next) {
3182        if (next.matches(selector)) {
3183          return [next];
3184        }
3185
3186        next = next.nextElementSibling;
3187      }
3188
3189      return [];
3190    },
3191
3192    focusableChildren(element) {
3193      const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', ');
3194      return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
3195    }
3196
3197  };
3198
3199  /**
3200   * --------------------------------------------------------------------------
3201   * Bootstrap (v5.1.3): carousel.js
3202   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3203   * --------------------------------------------------------------------------
3204   */
3205  /**
3206   * ------------------------------------------------------------------------
3207   * Constants
3208   * ------------------------------------------------------------------------
3209   */
3210
3211  const NAME$b = 'carousel';
3212  const DATA_KEY$a = 'bs.carousel';
3213  const EVENT_KEY$a = `.${DATA_KEY$a}`;
3214  const DATA_API_KEY$6 = '.data-api';
3215  const ARROW_LEFT_KEY = 'ArrowLeft';
3216  const ARROW_RIGHT_KEY = 'ArrowRight';
3217  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
3218
3219  const SWIPE_THRESHOLD = 40;
3220  const Default$a = {
3221    interval: 5000,
3222    keyboard: true,
3223    slide: false,
3224    pause: 'hover',
3225    wrap: true,
3226    touch: true
3227  };
3228  const DefaultType$a = {
3229    interval: '(number|boolean)',
3230    keyboard: 'boolean',
3231    slide: '(boolean|string)',
3232    pause: '(string|boolean)',
3233    wrap: 'boolean',
3234    touch: 'boolean'
3235  };
3236  const ORDER_NEXT = 'next';
3237  const ORDER_PREV = 'prev';
3238  const DIRECTION_LEFT = 'left';
3239  const DIRECTION_RIGHT = 'right';
3240  const KEY_TO_DIRECTION = {
3241    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,
3242    [ARROW_RIGHT_KEY]: DIRECTION_LEFT
3243  };
3244  const EVENT_SLIDE = `slide${EVENT_KEY$a}`;
3245  const EVENT_SLID = `slid${EVENT_KEY$a}`;
3246  const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`;
3247  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`;
3248  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`;
3249  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`;
3250  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`;
3251  const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`;
3252  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`;
3253  const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`;
3254  const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`;
3255  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`;
3256  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
3257  const CLASS_NAME_CAROUSEL = 'carousel';
3258  const CLASS_NAME_ACTIVE$2 = 'active';
3259  const CLASS_NAME_SLIDE = 'slide';
3260  const CLASS_NAME_END = 'carousel-item-end';
3261  const CLASS_NAME_START = 'carousel-item-start';
3262  const CLASS_NAME_NEXT = 'carousel-item-next';
3263  const CLASS_NAME_PREV = 'carousel-item-prev';
3264  const CLASS_NAME_POINTER_EVENT = 'pointer-event';
3265  const SELECTOR_ACTIVE$1 = '.active';
3266  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
3267  const SELECTOR_ITEM = '.carousel-item';
3268  const SELECTOR_ITEM_IMG = '.carousel-item img';
3269  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
3270  const SELECTOR_INDICATORS = '.carousel-indicators';
3271  const SELECTOR_INDICATOR = '[data-bs-target]';
3272  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
3273  const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
3274  const POINTER_TYPE_TOUCH = 'touch';
3275  const POINTER_TYPE_PEN = 'pen';
3276  /**
3277   * ------------------------------------------------------------------------
3278   * Class Definition
3279   * ------------------------------------------------------------------------
3280   */
3281
3282  class Carousel extends BaseComponent {
3283    constructor(element, config) {
3284      super(element);
3285      this._items = null;
3286      this._interval = null;
3287      this._activeElement = null;
3288      this._isPaused = false;
3289      this._isSliding = false;
3290      this.touchTimeout = null;
3291      this.touchStartX = 0;
3292      this.touchDeltaX = 0;
3293      this._config = this._getConfig(config);
3294      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
3295      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
3296      this._pointerEvent = Boolean(window.PointerEvent);
3297
3298      this._addEventListeners();
3299    } // Getters
3300
3301
3302    static get Default() {
3303      return Default$a;
3304    }
3305
3306    static get NAME() {
3307      return NAME$b;
3308    } // Public
3309
3310
3311    next() {
3312      this._slide(ORDER_NEXT);
3313    }
3314
3315    nextWhenVisible() {
3316      // Don't call next when the page isn't visible
3317      // or the carousel or its parent isn't visible
3318      if (!document.hidden && isVisible(this._element)) {
3319        this.next();
3320      }
3321    }
3322
3323    prev() {
3324      this._slide(ORDER_PREV);
3325    }
3326
3327    pause(event) {
3328      if (!event) {
3329        this._isPaused = true;
3330      }
3331
3332      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {
3333        triggerTransitionEnd(this._element);
3334        this.cycle(true);
3335      }
3336
3337      clearInterval(this._interval);
3338      this._interval = null;
3339    }
3340
3341    cycle(event) {
3342      if (!event) {
3343        this._isPaused = false;
3344      }
3345
3346      if (this._interval) {
3347        clearInterval(this._interval);
3348        this._interval = null;
3349      }
3350
3351      if (this._config && this._config.interval && !this._isPaused) {
3352        this._updateInterval();
3353
3354        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
3355      }
3356    }
3357
3358    to(index) {
3359      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
3360
3361      const activeIndex = this._getItemIndex(this._activeElement);
3362
3363      if (index > this._items.length - 1 || index < 0) {
3364        return;
3365      }
3366
3367      if (this._isSliding) {
3368        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
3369        return;
3370      }
3371
3372      if (activeIndex === index) {
3373        this.pause();
3374        this.cycle();
3375        return;
3376      }
3377
3378      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
3379
3380      this._slide(order, this._items[index]);
3381    } // Private
3382
3383
3384    _getConfig(config) {
3385      config = { ...Default$a,
3386        ...Manipulator.getDataAttributes(this._element),
3387        ...(typeof config === 'object' ? config : {})
3388      };
3389      typeCheckConfig(NAME$b, config, DefaultType$a);
3390      return config;
3391    }
3392
3393    _handleSwipe() {
3394      const absDeltax = Math.abs(this.touchDeltaX);
3395
3396      if (absDeltax <= SWIPE_THRESHOLD) {
3397        return;
3398      }
3399
3400      const direction = absDeltax / this.touchDeltaX;
3401      this.touchDeltaX = 0;
3402
3403      if (!direction) {
3404        return;
3405      }
3406
3407      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);
3408    }
3409
3410    _addEventListeners() {
3411      if (this._config.keyboard) {
3412        EventHandler.on(this._element, EVENT_KEYDOWN, event =>
3412 this._keydown(event));
3413      }
3414
3415      if (this._config.pause === 'hover') {
3416        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));
3417        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));
3418      }
3419
3420      if (this._config.touch && this._touchSupported) {
3421        this._addTouchEventListeners();
3422      }
3423    }
3424
3425    _addTouchEventListeners() {
3426      const hasPointerPenTouch = event => {
3427        return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
3428      };
3429
3430      const start = event => {
3431        if (hasPointerPenTouch(event)) {
3432          this.touchStartX = event.clientX;
3433        } else if (!this._pointerEvent) {
3434          this.touchStartX = event.touches[0].clientX;
3435        }
3436      };
3437
3438      const move = event => {
3439        // ensure swiping with one touch and not pinching
3440        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;
3441      };
3442
3443      const end = event => {
3444        if (hasPointerPenTouch(event)) {
3445          this.touchDeltaX = event.clientX - this.touchStartX;
3446        }
3447
3448        this._handleSwipe();
3449
3450        if (this._config.pause === 'hover') {
3451          // If it's a touch-enabled device, mouseenter/leave are fired as
3452          // part of the mouse compatibility events on first tap - the carousel
3453          // would stop cycling until user tapped out of it;
3454          // here, we listen for touchend, explicitly pause the carousel
3455          // (as if it's the second time we tap on it, mouseenter compat event
3456          // is NOT fired) and after a timeout (to allow for mouse compatibility
3457          // events to fire) we explicitly restart cycling
3458          this.pause();
3459
3460          if (this.touchTimeout) {
3461            clearTimeout(this.touchTimeout);
3462          }
3463
3464          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
3465        }
3466      };
3467
3468      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {
3469        EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault());
3470      });
3471
3472      if (this._pointerEvent) {
3473        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));
3474        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));
3475
3476        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
3477      } else {
3478        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));
3479        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));
3480        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));
3481      }
3482    }
3483
3484    _keydown(event) {
3485      if (/input|textarea/i.test(event.target.tagName)) {
3486        return;
3487      }
3488
3489      const direction = KEY_TO_DIRECTION[event.key];
3490
3491      if (direction) {
3492        event.preventDefault();
3493
3494        this._slide(direction);
3495      }
3496    }
3497
3498    _getItemIndex(element) {
3499      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];
3500      return this._items.indexOf(element);
3501    }
3502
3503    _getItemByOrder(order, activeElement) {
3504      const isNext = order === ORDER_NEXT;
3505      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);
3506    }
3507
3508    _triggerSlideEvent(relatedTarget, eventDirectionName) {
3509      const targetIndex = this._getItemIndex(relatedTarget);
3510
3511      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));
3512
3513      return EventHandler.trigger(this._element, EVENT_SLIDE, {
3514        relatedTarget,
3515        direction: eventDirectionName,
3516        from: fromIndex,
3517        to: targetIndex
3518      });
3519    }
3520
3521    _setActiveIndicatorElement(element) {
3522      if (this._indicatorsElement) {
3523        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);
3524        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
3525        activeIndicator.removeAttribute('aria-current');
3526        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);
3527
3528        for (let i = 0; i < indicators.length; i++) {
3529          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {
3530            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);
3531            indicators[i].setAttribute('aria-current', 'true');
3532            break;
3533          }
3534        }
3535      }
3536    }
3537
3538    _updateInterval() {
3539      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
3540
3541      if (!element) {
3542        return;
3543      }
3544
3545      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
3546
3547      if (elementInterval) {
3548        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
3549        this._config.interval = elementInterval;
3550      } else {
3551        this._config.interval = this._config.defaultInterval || this._config.interval;
3552      }
3553    }
3554
3555    _slide(directionOrOrder, element) {
3556      const order = this._directionToOrder(directionOrOrder);
3557
3558      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
3559
3560      const activeElementIndex = this._getItemIndex(activeElement);
3561
3562      const nextElement = element || this._getItemByOrder(order, activeElement);
3563
3564      const nextElementIndex = this._getItemIndex(nextElement);
3565
3566      const isCycling = Boolean(this._interval);
3567      const isNext = order === ORDER_NEXT;
3568      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
3569      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
3570
3571      const eventDirectionName = this._orderToDirection(order);
3572
3573      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {
3574        this._isSliding = false;
3575        return;
3576      }
3577
3578      if (this._isSliding) {
3579        return;
3580      }
3581
3582      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
3583
3584      if (slideEvent.defaultPrevented) {
3585        return;
3586      }
3587
3588      if (!activeElement || !nextElement) {
3589        // Some weirdness is happening, so we bail
3590        return;
3591      }
3592
3593      this._isSliding = true;
3594
3595      if (isCycling) {
3596        this.pause();
3597      }
3598
3599      this._setActiveIndicatorElement(nextElement);
3600
3601      this._activeElement = nextElement;
3602
3603      const triggerSlidEvent = () => {
3604        EventHandler.trigger(this._element, EVENT_SLID, {
3605          relatedTarget: nextElement,
3606          direction: eventDirectionName,
3607          from: activeElementIndex,
3608          to: nextElementIndex
3609        });
3610      };
3611
3612      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {
3613        nextElement.classList.add(orderClassName);
3614        reflow(nextElement);
3615        activeElement.classList.add(directionalClassName);
3616        nextElement.classList.add(directionalClassName);
3617
3618        const completeCallBack = () => {
3619          nextElement.classList.remove(directionalClassName, orderClassName);
3620          nextElement.classList.add(CLASS_NAME_ACTIVE$2);
3621          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
3622          this._isSliding = false;
3623          setTimeout(triggerSlidEvent, 0);
3624        };
3625
3626        this._queueCallback(completeCallBack, activeElement, true);
3627      } else {
3628        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);
3629        nextElement.classList.add(CLASS_NAME_ACTIVE$2);
3630        this._isSliding = false;
3631        triggerSlidEvent();
3632      }
3633
3634      if (isCycling) {
3635        this.cycle();
3636      }
3637    }
3638
3639    _directionToOrder(direction) {
3640      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {
3641        return direction;
3642      }
3643
3644      if (isRTL()) {
3645        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
3646      }
3647
3648      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
3649    }
3650
3651    _orderToDirection(order) {
3652      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {
3653        return order;
3654      }
3655
3656      if (isRTL()) {
3657        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
3658      }
3659
3660      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
3661    } // Static
3662
3663
3664    static carouselInterface(element, config) {
3665      const data = Carousel.getOrCreateInstance(element, config);
3666      let {
3667        _config
3668      } = data;
3669
3670      if (typeof config === 'object') {
3671        _config = { ..._config,
3672          ...config
3673        };
3674      }
3675
3676      const action = typeof config === 'string' ? config : _config.slide;
3677
3678      if (typeof config === 'number') {
3679        data.to(config);
3680      } else if (typeof action === 'string') {
3681        if (typeof data[action] === 'undefined') {
3682          throw new TypeError(`No method named "${action}"`);
3683        }
3684
3685        data[action]();
3686      } else if (_config.interval && _config.ride) {
3687        data.pause();
3688        data.cycle();
3689      }
3690    }
3691
3692    static jQueryInterface(config) {
3693      return this.each(function () {
3694        Carousel.carouselInterface(this, config);
3695      });
3696    }
3697
3698    static dataApiClickHandler(event) {
3699      const target = getElementFromSelector(this);
3700
3701      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
3702        return;
3703      }
3704
3705      const config = { ...Manipulator.getDataAttributes(target),
3706        ...Manipulator.getDataAttributes(this)
3707      };
3708      const slideIndex = this.getAttribute('data-bs-slide-to');
3709
3710      if (slideIndex) {
3711        config.interval = false;
3712      }
3713
3714      Carousel.carouselInterface(target, config);
3715
3716      if (slideIndex) {
3717        Carousel.getInstance(target).to(slideIndex);
3718      }
3719
3720      event.preventDefault();
3721    }
3722
3723  }
3724  /**
3725   * ------------------------------------------------------------------------
3726   * Data Api implementation
3727   * ------------------------------------------------------------------------
3728   */
3729
3730
3731  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);
3732  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
3733    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
3734
3735    for (let i = 0, len = carousels.length; i < len; i++) {
3736      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));
3737    }
3738  });
3739  /**
3740   * ------------------------------------------------------------------------
3741   * jQuery
3742   * ------------------------------------------------------------------------
3743   * add .Carousel to jQuery only if jQuery is present
3744   */
3745
3746  defineJQueryPlugin(Carousel);
3747
3748  /**
3749   * --------------------------------------------------------------------------
3750   * Bootstrap (v5.1.3): collapse.js
3751   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3752   * --------------------------------------------------------------------------
3753   */
3754  /**
3755   * ------------------------------------------------------------------------
3756   * Constants
3757   * ------------------------------------------------------------------------
3758   */
3759
3760  const NAME$a = 'collapse';
3761  const DATA_KEY$9 = 'bs.collapse';
3762  const EVENT_KEY$9 = `.${DATA_KEY$9}`;
3763  const DATA_API_KEY$5 = '.data-api';
3764  const Default$9 = {
3765    toggle: true,
3766    parent: null
3767  };
3768  const DefaultType$9 = {
3769    toggle: 'boolean',
3770    parent: '(null|element)'
3771  };
3772  const EVENT_SHOW$5 = `show${EVENT_KEY$9}`;
3773  const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`;
3774  const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`;
3775  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`;
3776  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`;
3777  const CLASS_NAME_SHOW$7 = 'show';
3778  const CLASS_NAME_COLLAPSE = 'collapse';
3779  const CLASS_NAME_COLLAPSING = 'collapsing';
3780  const CLASS_NAME_COLLAPSED = 'collapsed';
3781  const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
3782  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
3783  const WIDTH = 'width';
3784  const HEIGHT = 'height';
3785  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
3786  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
3787  /**
3788   * ------------------------------------------------------------------------
3789   * Class Definition
3790   * ------------------------------------------------------------------------
3791   */
3792
3793  class Collapse extends BaseComponent {
3794    constructor(element, config) {
3795      super(element);
3796      this._isTransitioning = false;
3797      this._config = this._getConfig(config);
3798      this._triggerArray = [];
3799      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
3800
3801      for (let i = 0, len = toggleList.length; i < len; i++) {
3802        const elem = toggleList[i];
3803        const selector = getSelectorFromElement(elem);
3804        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);
3805
3806        if (selector !== null && filterElement.length) {
3807          this._selector = selector;
3808
3809          this._triggerArray.push(elem);
3810        }
3811      }
3812
3813      this._initializeChildren();
3814
3815      if (!this._config.parent) {
3816        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
3817      }
3818
3819      if (this._config.toggle) {
3820        this.toggle();
3821      }
3822    } // Getters
3823
3824
3825    static get Default() {
3826      return Default$9;
3827    }
3828
3829    static get NAME() {
3830      return NAME$a;
3831    } // Public
3832
3833
3834    toggle() {
3835      if (this._isShown()) {
3836        this.hide();
3837      } else {
3838        this.show();
3839      }
3840    }
3841
3842    show() {
3843      if (this._isTransitioning || this._isShown()) {
3844        return;
3845      }
3846
3847      let actives = [];
3848      let activesData;
3849
3850      if (this._config.parent) {
3851        const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
3852        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth
3853      }
3854
3855      const container = SelectorEngine.findOne(this._selector);
3856
3857      if (actives.length) {
3858        const tempActiveData = actives.find(elem => container !== elem);
3859        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;
3860
3861        if (activesData && activesData._isTransitioning) {
3862          return;
3863        }
3864      }
3865
3866      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);
3867
3868      if (startEvent.defaultPrevented) {
3869        return;
3870      }
3871
3872      actives.forEach(elemActive => {
3873        if (container !== elemActive) {
3874          Collapse.getOrCreateInstance(elemActive, {
3875            toggle: false
3876          }).hide();
3877        }
3878
3879        if (!activesData) {
3880          Data.set(elemActive, DATA_KEY$9, null);
3881        }
3882      });
3883
3884      const dimension = this._getDimension();
3885
3886      this._element.classList.remove(CLASS_NAME_COLLAPSE);
3887
3888      this._element.classList.add(CLASS_NAME_COLLAPSING);
3889
3890      this._element.style[dimension] = 0;
3891
3892      this._addAriaAndCollapsedClass(this._triggerArray, true);
3893
3894      this._isTransitioning = true;
3895
3896      const complete = () => {
3897        this._isTransitioning = false;
3898
3899        this._element.classList.remove(CLASS_NAME_COLLAPSING);
3900
3901        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
3902
3903        this._element.style[dimension] = '';
3904        EventHandler.trigger(this._element, EVENT_SHOWN$5);
3905      };
3906
3907      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
3908      const scrollSize = `scroll${capitalizedDimension}`;
3909
3910      this._queueCallback(complete, this._element, true);
3911
3912      this._element.style[dimension] = `${this._element[scrollSize]}px`;
3913    }
3914
3915    hide() {
3916      if (this._isTransitioning || !this._isShown()) {
3917        return;
3918      }
3919
3920      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);
3921
3922      if (startEvent.defaultPrevented) {
3923        return;
3924      }
3925
3926      const dimension = this._getDimension();
3927
3928      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
3929      reflow(this._element);
3930
3931      this._element.classList.add(CLASS_NAME_COLLAPSING);
3932
3933      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
3934
3935      const triggerArrayLength = this._triggerArray.length;
3936
3937      for (let i = 0; i < triggerArrayLength; i++) {
3938        const trigger = this._triggerArray[i];
3939        const elem = getElementFromSelector(trigger);
3940
3941        if (elem && !this._isShown(elem)) {
3942          this._addAriaAndCollapsedClass([trigger], false);
3943        }
3944      }
3945
3946      this._isTransitioning = true;
3947
3948      const complete = () => {
3949        this._isTransitioning = false;
3950
3951        this._element.classList.remove(CLASS_NAME_COLLAPSING);
3952
3953        this._element.classList.add(CLASS_NAME_COLLAPSE);
3954
3955        EventHandler.trigger(this._element, EVENT_HIDDEN$5);
3956      };
3957
3958      this._element.style[dimension] = '';
3959
3960      this._queueCallback(complete, this._element, true);
3961    }
3962
3963    _isShown(element = this._element) {
3964      return element.classList.contains(CLASS_NAME_SHOW$7);
3965    } // Private
3966
3967
3968    _getConfig(config) {
3969      config = { ...Default$9,
3970        ...Manipulator.getDataAttributes(this._element),
3971        ...config
3972      };
3973      config.toggle = Boolean(config.toggle); // Coerce string values
3974
3975      config.parent = getElement(config.parent);
3976      typeCheckConfig(NAME$a, config, DefaultType$9);
3977      return config;
3978    }
3979
3980    _getDimension() {
3981      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
3982    }
3983
3984    _initializeChildren() {
3985      if (!this._config.parent) {
3986        return;
3987      }
3988
3989      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
3990      SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => {
3991        const selected = getElementFromSelector(element);
3992
3993        if (selected) {
3994          this._addAriaAndCollapsedClass([element], this._isShown(selected));
3995        }
3996      });
3997    }
3998
3999    _addAriaAndCollapsedClass(triggerArray, isOpen) {
4000      if (!triggerArray.length) {
4001        return;
4002      }
4003
4004      triggerArray.forEach(elem => {
4005        if (isOpen) {
4006          elem.classList.remove(CLASS_NAME_COLLAPSED);
4007        } else {
4008          elem.classList.add(CLASS_NAME_COLLAPSED);
4009        }
4010
4011        elem.setAttribute('aria-expanded', isOpen);
4012      });
4013    } // Static
4014
4015
4016    static jQueryInterface(config) {
4017      return this.each(function () {
4018        const _config = {};
4019
4020        if (typeof config === 'string' && /show|hide/.test(config)) {
4021          _config.toggle = false;
vendor: 8,678 bytes, lines 4022-4304
4022        }
4023
4024        const data = Collapse.getOrCreateInstance(this, _config);
4025
4026        if (typeof config === 'string') {
4027          if (typeof data[config] === 'undefined') {
4028            throw new TypeError(`No method named "${config}"`);
4029          }
4030
4031          data[config]();
4032        }
4033      });
4034    }
4035
4036  }
4037  /**
4038   * ------------------------------------------------------------------------
4039   * Data Api implementation
4040   * ------------------------------------------------------------------------
4041   */
4042
4043
4044  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
4045    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
4046    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
4047      event.preventDefault();
4048    }
4049
4050    const selector = getSelectorFromElement(this);
4051    const selectorElements = SelectorEngine.find(selector);
4052    selectorElements.forEach(element => {
4053      Collapse.getOrCreateInstance(element, {
4054        toggle: false
4055      }).toggle();
4056    });
4057  });
4058  /**
4059   * ------------------------------------------------------------------------
4060   * jQuery
4061   * ------------------------------------------------------------------------
4062   * add .Collapse to jQuery only if jQuery is present
4063   */
4064
4065  defineJQueryPlugin(Collapse);
4066
4067  var top = 'top';
4068  var bottom = 'bottom';
4069  var right = 'right';
4070  var left = 'left';
4071  var auto = 'auto';
4072  var basePlacements = [top, bottom, right, left];
4073  var start = 'start';
4074  var end = 'end';
4075  var clippingParents = 'clippingParents';
4076  var viewport = 'viewport';
4077  var popper = 'popper';
4078  var reference = 'reference';
4079  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
4080    return acc.concat([placement + "-" + start, placement + "-" + end]);
4081  }, []);
4082  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
4083    return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
4084  }, []); // modifiers that need to read the DOM
4085
4086  var beforeRead = 'beforeRead';
4087  var read = 'read';
4088  var afterRead = 'afterRead'; // pure-logic modifiers
4089
4090  var beforeMain = 'beforeMain';
4091  var main = 'main';
4092  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
4093
4094  var beforeWrite = 'beforeWrite';
4095  var write = 'write';
4096  var afterWrite = 'afterWrite';
4097  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
4098
4099  function getNodeName(element) {
4100    return element ? (element.nodeName || '').toLowerCase() : null;
4101  }
4102
4103  function getWindow(node) {
4104    if (node == null) {
4105      return window;
4106    }
4107
4108    if (node.toString() !== '[object Window]') {
4109      var ownerDocument = node.ownerDocument;
4110      return ownerDocument ? ownerDocument.defaultView || window : window;
4111    }
4112
4113    return node;
4114  }
4115
4116  function isElement(node) {
4117    var OwnElement = getWindow(node).Element;
4118    return node instanceof OwnElement || node instanceof Element;
4119  }
4120
4121  function isHTMLElement(node) {
4122    var OwnElement = getWindow(node).HTMLElement;
4123    return node instanceof OwnElement || node instanceof HTMLElement;
4124  }
4125
4126  function isShadowRoot(node) {
4127    // IE 11 has no ShadowRoot
4128    if (typeof ShadowRoot === 'undefined') {
4129      return false;
4130    }
4131
4132    var OwnElement = getWindow(node).ShadowRoot;
4133    return node instanceof OwnElement || node instanceof ShadowRoot;
4134  }
4135
4136  // and applies them to the HTMLElements such as popper and arrow
4137
4138  function applyStyles(_ref) {
4139    var state = _ref.state;
4140    Object.keys(state.elements).forEach(function (name) {
4141      var style = state.styles[name] || {};
4142      var attributes = state.attributes[name] || {};
4143      var element = state.elements[name]; // arrow is optional + virtual elements
4144
4145      if (!isHTMLElement(element) || !getNodeName(element)) {
4146        return;
4147      } // Flow doesn't support to extend this property, but it's the most
4148      // effective way to apply styles to an HTMLElement
4149      // $FlowFixMe[cannot-write]
4150
4151
4152      Object.assign(element.style, style);
4153      Object.keys(attributes).forEach(function (name) {
4154        var value = attributes[name];
4155
4156        if (value === false) {
4157          element.removeAttribute(name);
4158        } else {
4159          element.setAttribute(name, value === true ? '' : value);
4160        }
4161      });
4162    });
4163  }
4164
4165  function effect$2(_ref2) {
4166    var state = _ref2.state;
4167    var initialStyles = {
4168      popper: {
4169        position: state.options.strategy,
4170        left: '0',
4171        top: '0',
4172        margin: '0'
4173      },
4174      arrow: {
4175        position: 'absolute'
4176      },
4177      reference: {}
4178    };
4179    Object.assign(state.elements.popper.style, initialStyles.popper);
4180    state.styles = initialStyles;
4181
4182    if (state.elements.arrow) {
4183      Object.assign(state.elements.arrow.style, initialStyles.arrow);
4184    }
4185
4186    return function () {
4187      Object.keys(state.elements).forEach(function (name) {
4188        var element = state.elements[name];
4189        var attributes = state.attributes[name] || {};
4190        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
4191
4192        var style = styleProperties.reduce(function (style, property) {
4193          style[property] = '';
4194          return style;
4195        }, {}); // arrow is optional + virtual elements
4196
4197        if (!isHTMLElement(element) || !getNodeName(element)) {
4198          return;
4199        }
4200
4201        Object.assign(element.style, style);
4202        Object.keys(attributes).forEach(function (attribute) {
4203          element.removeAttribute(attribute);
4204        });
4205      });
4206    };
4207  } // eslint-disable-next-line import/no-unused-modules
4208
4209
4210  const applyStyles$1 = {
4211    name: 'applyStyles',
4212    enabled: true,
4213    phase: 'write',
4214    fn: applyStyles,
4215    effect: effect$2,
4216    requires: ['computeStyles']
4217  };
4218
4219  function getBasePlacement(placement) {
4220    return placement.split('-')[0];
4221  }
4222
4223  // import { isHTMLElement } from './instanceOf';
4224  function getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars
4225  includeScale) {
4226
4227    var rect = element.getBoundingClientRect();
4228    var scaleX = 1;
4229    var scaleY = 1; // FIXME:
4230    // `offsetWidth` returns an integer while `getBoundingClientRect`
4231    // returns a float. This results in `scaleX` or `scaleY` being
4232    // non-1 when it should be for elements that aren't a full pixel in
4233    // width or height.
4234    // if (isHTMLElement(element) && includeScale) {
4235    //   const offsetHeight = element.offsetHeight;
4236    //   const offsetWidth = element.offsetWidth;
4237    //   // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
4238    //   // Fallback to 1 in case both values are `0`
4239    //   if (offsetWidth > 0) {
4240    //     scaleX = rect.width / offsetWidth || 1;
4241    //   }
4242    //   if (offsetHeight > 0) {
4243    //     scaleY = rect.height / offsetHeight || 1;
4244    //   }
4245    // }
4246
4247    return {
4248      width: rect.width / scaleX,
4249      height: rect.height / scaleY,
4250      top: rect.top / scaleY,
4251      right: rect.right / scaleX,
4252      bottom: rect.bottom / scaleY,
4253      left: rect.left / scaleX,
4254      x: rect.left / scaleX,
4255      y: rect.top / scaleY
4256    };
4257  }
4258
4259  // means it doesn't take into account transforms.
4260
4261  function getLayoutRect(element) {
4262    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
4263    // Fixes https://github.com/popperjs/popper-core/issues/1223
4264
4265    var width = element.offsetWidth;
4266    var height = element.offsetHeight;
4267
4268    if (Math.abs(clientRect.width - width) <= 1) {
4269      width = clientRect.width;
4270    }
4271
4272    if (Math.abs(clientRect.height - height) <= 1) {
4273      height = clientRect.height;
4274    }
4275
4276    return {
4277      x: element.offsetLeft,
4278      y: element.offsetTop,
4279      width: width,
4280      height: height
4281    };
4282  }
4283
4284  function contains(parent, child) {
4285    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
4286
4287    if (parent.contains(child)) {
4288      return true;
4289    } // then fallback to custom implementation with Shadow DOM support
4290    else if (rootNode && isShadowRoot(rootNode)) {
4291        var next = child;
4292
4293        do {
4294          if (next && parent.isSameNode(next)) {
4295            return true;
4296          } // $FlowFixMe[prop-missing]: need a better way to handle this...
4297
4298
4299          next = next.parentNode || next.host;
4300        } while (next);
4301      } // Give up, the result is false
4302
4303
4304    return false;
vendor: 8,638 bytes, lines 4305-4561
4305  }
4306
4307  function getComputedStyle$1(element) {
4308    return getWindow(element).getComputedStyle(element);
4309  }
4310
4311  function isTableElement(element) {
4312    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
4313  }
4314
4315  function getDocumentElement(element) {
4316    // $FlowFixMe[incompatible-return]: assume body is always available
4317    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
4318    element.document) || window.document).documentElement;
4319  }
4320
4321  function getParentNode(element) {
4322    if (getNodeName(element) === 'html') {
4323      return element;
4324    }
4325
4326    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
4327      // $FlowFixMe[incompatible-return]
4328      // $FlowFixMe[prop-missing]
4329      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
4330      element.parentNode || ( // DOM Element detected
4331      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
4332      // $FlowFixMe[incompatible-call]: HTMLElement is a Node
4333      getDocumentElement(element) // fallback
4334
4335    );
4336  }
4337
4338  function getTrueOffsetParent(element) {
4339    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
4340    getComputedStyle$1(element).position === 'fixed') {
4341      return null;
4342    }
4343
4344    return element.offsetParent;
4345  } // `.offsetParent` reports `null` for fixed elements, while absolute elements
4346  // return the containing block
4347
4348
4349  function getContainingBlock(element) {
4350    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;
4351    var isIE = navigator.userAgent.indexOf('Trident') !== -1;
4352
4353    if (isIE && isHTMLElement(element)) {
4354      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
4355      var elementCss = getComputedStyle$1(element);
4356
4357      if (elementCss.position === 'fixed') {
4358        return null;
4359      }
4360    }
4361
4362    var currentNode = getParentNode(element);
4363
4364    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
4365      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that
4366      // create a containing block.
4367      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
4368
4369      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
4370        return currentNode;
4371      } else {
4372        currentNode = currentNode.parentNode;
4373      }
4374    }
4375
4376    return null;
4377  } // Gets the closest ancestor positioned element. Handles some edge cases,
4378  // such as table ancestors and cross browser bugs.
4379
4380
4381  function getOffsetParent(element) {
4382    var window = getWindow(element);
4383    var offsetParent = getTrueOffsetParent(element);
4384
4385    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {
4386      offsetParent = getTrueOffsetParent(offsetParent);
4387    }
4388
4389    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {
4390      return window;
4391    }
4392
4393    return offsetParent || getContainingBlock(element) || window;
4394  }
4395
4396  function getMainAxisFromPlacement(placement) {
4397    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
4398  }
4399
4400  var max = Math.max;
4401  var min = Math.min;
4402  var round = Math.round;
4403
4404  function within(min$1, value, max$1) {
4405    return max(min$1, min(value, max$1));
4406  }
4407
4408  function getFreshSideObject() {
4409    return {
4410      top: 0,
4411      right: 0,
4412      bottom: 0,
4413      left: 0
4414    };
4415  }
4416
4417  function mergePaddingObject(paddingObject) {
4418    return Object.assign({}, getFreshSideObject(), paddingObject);
4419  }
4420
4421  function expandToHashMap(value, keys) {
4422    return keys.reduce(function (hashMap, key) {
4423      hashMap[key] = value;
4424      return hashMap;
4425    }, {});
4426  }
4427
4428  var toPaddingObject = function toPaddingObject(padding, state) {
4429    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
4430      placement: state.placement
4431    })) : padding;
4432    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
4433  };
4434
4435  function arrow(_ref) {
4436    var _state$modifiersData$;
4437
4438    var state = _ref.state,
4439        name = _ref.name,
4440        options = _ref.options;
4441    var arrowElement = state.elements.arrow;
4442    var popperOffsets = state.modifiersData.popperOffsets;
4443    var basePlacement = getBasePlacement(state.placement);
4444    var axis = getMainAxisFromPlacement(basePlacement);
4445    var isVertical = [left, right].indexOf(basePlacement) >= 0;
4446    var len = isVertical ? 'height' : 'width';
4447
4448    if (!arrowElement || !popperOffsets) {
4449      return;
4450    }
4451
4452    var paddingObject = toPaddingObject(options.padding, state);
4453    var arrowRect = getLayoutRect(arrowElement);
4454    var minProp = axis === 'y' ? top : left;
4455    var maxProp = axis === 'y' ? bottom : right;
4456    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
4457    var startDiff = popperOffsets[axis] - state.rects.reference[axis];
4458    var arrowOffsetParent = getOffsetParent(arrowElement);
4459    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
4460    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
4461    // outside of the popper bounds
4462
4463    var min = paddingObject[minProp];
4464    var max = clientSize - arrowRect[len] - paddingObject[maxProp];
4465    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
4466    var offset = within(min, center, max); // Prevents breaking syntax highlighting...
4467
4468    var axisProp = axis;
4469    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
4470  }
4471
4472  function effect$1(_ref2) {
4473    var state = _ref2.state,
4474        options = _ref2.options;
4475    var _options$element = options.element,
4476        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
4477
4478    if (arrowElement == null) {
4479      return;
4480    } // CSS selector
4481
4482
4483    if (typeof arrowElement === 'string') {
4484      arrowElement = state.elements.popper.querySelector(arrowElement);
4485
4486      if (!arrowElement) {
4487        return;
4488      }
4489    }
4490
4491    if (!contains(state.elements.popper, arrowElement)) {
4492
4493      return;
4494    }
4495
4496    state.elements.arrow = arrowElement;
4497  } // eslint-disable-next-line import/no-unused-modules
4498
4499
4500  const arrow$1 = {
4501    name: 'arrow',
4502    enabled: true,
4503    phase: 'main',
4504    fn: arrow,
4505    effect: effect$1,
4506    requires: ['popperOffsets'],
4507    requiresIfExists: ['preventOverflow']
4508  };
4509
4510  function getVariation(placement) {
4511    return placement.split('-')[1];
4512  }
4513
4514  var unsetSides = {
4515    top: 'auto',
4516    right: 'auto',
4517    bottom: 'auto',
4518    left: 'auto'
4519  }; // Round the offsets to the nearest suitable subpixel based on the DPR.
4520  // Zooming can change the DPR, but it seems to report a value that will
4521  // cleanly divide the values into the appropriate subpixels.
4522
4523  function roundOffsetsByDPR(_ref) {
4524    var x = _ref.x,
4525        y = _ref.y;
4526    var win = window;
4527    var dpr = win.devicePixelRatio || 1;
4528    return {
4529      x: round(round(x * dpr) / dpr) || 0,
4530      y: round(round(y * dpr) / dpr) || 0
4531    };
4532  }
4533
4534  function mapToStyles(_ref2) {
4535    var _Object$assign2;
4536
4537    var popper = _ref2.popper,
4538        popperRect = _ref2.popperRect,
4539        placement = _ref2.placement,
4540        variation = _ref2.variation,
4541        offsets = _ref2.offsets,
4542        position = _ref2.position,
4543        gpuAcceleration = _ref2.gpuAcceleration,
4544        adaptive = _ref2.adaptive,
4545        roundOffsets = _ref2.roundOffsets;
4546
4547    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,
4548        _ref3$x = _ref3.x,
4549        x = _ref3$x === void 0 ? 0 : _ref3$x,
4550        _ref3$y = _ref3.y,
4551        y = _ref3$y === void 0 ? 0 : _ref3$y;
4552
4553    var hasX = offsets.hasOwnProperty('x');
4554    var hasY = offsets.hasOwnProperty('y');
4555    var sideX = left;
4556    var sideY = top;
4557    var win = window;
4558
4559    if (adaptive) {
4560      var offsetParent = getOffsetParent(popper);
4561      var heightProp = 'clientHeight';
vendor: 6,664 bytes, lines 4562-4759
4562      var widthProp = 'clientWidth';
4563
4564      if (offsetParent === getWindow(popper)) {
4565        offsetParent = getDocumentElement(popper);
4566
4567        if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') {
4568          heightProp = 'scrollHeight';
4569          widthProp = 'scrollWidth';
4570        }
4571      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
4572
4573
4574      offsetParent = offsetParent;
4575
4576      if (placement === top || (placement === left || placement === right) && variation === end) {
4577        sideY = bottom; // $FlowFixMe[prop-missing]
4578
4579        y -= offsetParent[heightProp] - popperRect.height;
4580        y *= gpuAcceleration ? 1 : -1;
4581      }
4582
4583      if (placement === left || (placement === top || placement === bottom) && variation === end) {
4584        sideX = right; // $FlowFixMe[prop-missing]
4585
4586        x -= offsetParent[widthProp] - popperRect.width;
4587        x *= gpuAcceleration ? 1 : -1;
4588      }
4589    }
4590
4591    var commonStyles = Object.assign({
4592      position: position
4593    }, adaptive && unsetSides);
4594
4595    if (gpuAcceleration) {
4596      var _Object$assign;
4597
4598      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
4599    }
4600
4601    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
4602  }
4603
4604  function computeStyles(_ref4) {
4605    var state = _ref4.state,
4606        options = _ref4.options;
4607    var _options$gpuAccelerat = options.gpuAcceleration,
4608        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
4609        _options$adaptive = options.adaptive,
4610        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
4611        _options$roundOffsets = options.roundOffsets,
4612        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
4613
4614    var commonStyles = {
4615      placement: getBasePlacement(state.placement),
4616      variation: getVariation(state.placement),
4617      popper: state.elements.popper,
4618      popperRect: state.rects.popper,
4619      gpuAcceleration: gpuAcceleration
4620    };
4621
4622    if (state.modifiersData.popperOffsets != null) {
4623      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
4624        offsets: state.modifiersData.popperOffsets,
4625        position: state.options.strategy,
4626        adaptive: adaptive,
4627        roundOffsets: roundOffsets
4628      })));
4629    }
4630
4631    if (state.modifiersData.arrow != null) {
4632      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
4633        offsets: state.modifiersData.arrow,
4634        position: 'absolute',
4635        adaptive: false,
4636        roundOffsets: roundOffsets
4637      })));
4638    }
4639
4640    state.attributes.popper = Object.assign({}, state.attributes.popper, {
4641      'data-popper-placement': state.placement
4642    });
4643  } // eslint-disable-next-line import/no-unused-modules
4644
4645
4646  const computeStyles$1 = {
4647    name: 'computeStyles',
4648    enabled: true,
4649    phase: 'beforeWrite',
4650    fn: computeStyles,
4651    data: {}
4652  };
4653
4654  var passive = {
4655    passive: true
4656  };
4657
4658  function effect(_ref) {
4659    var state = _ref.state,
4660        instance = _ref.instance,
4661        options = _ref.options;
4662    var _options$scroll = options.scroll,
4663        scroll = _options$scroll === void 0 ? true : _options$scroll,
4664        _options$resize = options.resize,
4665        resize = _options$resize === void 0 ? true : _options$resize;
4666    var window = getWindow(state.elements.popper);
4667    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
4668
4669    if (scroll) {
4670      scrollParents.forEach(function (scrollParent) {
4671        scrollParent.addEventListener('scroll', instance.update, passive);
4672      });
4673    }
4674
4675    if (resize) {
4676      window.addEventListener('resize', instance.update, passive);
4677    }
4678
4679    return function () {
4680      if (scroll) {
4681        scrollParents.forEach(function (scrollParent) {
4682          scrollParent.removeEventListener('scroll', instance.update, passive);
4683        });
4684      }
4685
4686      if (resize) {
4687        window.removeEventListener('resize', instance.update, passive);
4688      }
4689    };
4690  } // eslint-disable-next-line import/no-unused-modules
4691
4692
4693  const eventListeners = {
4694    name: 'eventListeners',
4695    enabled: true,
4696    phase: 'write',
4697    fn: function fn() {},
4698    effect: effect,
4699    data: {}
4700  };
4701
4702  var hash$1 = {
4703    left: 'right',
4704    right: 'left',
4705    bottom: 'top',
4706    top: 'bottom'
4707  };
4708  function getOppositePlacement(placement) {
4709    return placement.replace(/left|right|bottom|top/g, function (matched) {
4710      return hash$1[matched];
4711    });
4712  }
4713
4714  var hash = {
4715    start: 'end',
4716    end: 'start'
4717  };
4718  function getOppositeVariationPlacement(placement) {
4719    return placement.replace(/start|end/g, function (matched) {
4720      return hash[matched];
4721    });
4722  }
4723
4724  function getWindowScroll(node) {
4725    var win = getWindow(node);
4726    var scrollLeft = win.pageXOffset;
4727    var scrollTop = win.pageYOffset;
4728    return {
4729      scrollLeft: scrollLeft,
4730      scrollTop: scrollTop
4731    };
4732  }
4733
4734  function getWindowScrollBarX(element) {
4735    // If <html> has a CSS width greater than the viewport, then this will be
4736    // incorrect for RTL.
4737    // Popper 1 is broken in this case and never had a bug report so let's assume
4738    // it's not an issue. I don't think anyone ever specifies width on <html>
4739    // anyway.
4740    // Browsers where the left scrollbar doesn't cause an issue report `0` for
4741    // this (e.g. Edge 2019, IE11, Safari)
4742    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
4743  }
4744
4745  function getViewportRect(element) {
4746    var win = getWindow(element);
4747    var html = getDocumentElement(element);
4748    var visualViewport = win.visualViewport;
4749    var width = html.clientWidth;
4750    var height = html.clientHeight;
4751    var x = 0;
4752    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper
4753    // can be obscured underneath it.
4754    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even
4755    // if it isn't open, so if this isn't available, the popper will be detected
4756    // to overflow the bottom of the screen too early.
4757
4758    if (visualViewport) {
4759      width = visualViewport.width;
vendor: 5,377 bytes, lines 4760-4899
4760      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)
4761      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding
4762      // errors due to floating point numbers, so we need to check precision.
4763      // Safari returns a number <= 0, usually < -1 when pinch-zoomed
4764      // Feature detection fails in mobile emulation mode in Chrome.
4765      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <
4766      // 0.001
4767      // Fallback here: "Not Safari" userAgent
4768
4769      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
4770        x = visualViewport.offsetLeft;
4771        y = visualViewport.offsetTop;
4772      }
4773    }
4774
4775    return {
4776      width: width,
4777      height: height,
4778      x: x + getWindowScrollBarX(element),
4779      y: y
4780    };
4781  }
4782
4783  // of the `<html>` and `<body>` rect bounds if horizontally scrollable
4784
4785  function getDocumentRect(element) {
4786    var _element$ownerDocumen;
4787
4788    var html = getDocumentElement(element);
4789    var winScroll = getWindowScroll(element);
4790    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
4791    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
4792    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
4793    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
4794    var y = -winScroll.scrollTop;
4795
4796    if (getComputedStyle$1(body || html).direction === 'rtl') {
4797      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
4798    }
4799
4800    return {
4801      width: width,
4802      height: height,
4803      x: x,
4804      y: y
4805    };
4806  }
4807
4808  function isScrollParent(element) {
4809    // Firefox wants us to check `-x` and `-y` variations as well
4810    var _getComputedStyle = getComputedStyle$1(element),
4811        overflow = _getComputedStyle.overflow,
4812        overflowX = _getComputedStyle.overflowX,
4813        overflowY = _getComputedStyle.overflowY;
4814
4815    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
4816  }
4817
4818  function getScrollParent(node) {
4819    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
4820      // $FlowFixMe[incompatible-return]: assume body is always available
4821      return node.ownerDocument.body;
4822    }
4823
4824    if (isHTMLElement(node) && isScrollParent(node)) {
4825      return node;
4826    }
4827
4828    return getScrollParent(getParentNode(node));
4829  }
4830
4831  /*
4832  given a DOM element, return the list of all scroll parents, up the list of ancesors
4833  until we get to the top window object. This list is what we attach scroll listeners
4834  to, because if any of these parent elements scroll, we'll need to re-calculate the
4835  reference element's position.
4836  */
4837
4838  function listScrollParents(element, list) {
4839    var _element$ownerDocumen;
4840
4841    if (list === void 0) {
4842      list = [];
4843    }
4844
4845    var scrollParent = getScrollParent(element);
4846    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
4847    var win = getWindow(scrollParent);
4848    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
4849    var updatedList = list.concat(target);
4850    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
4851    updatedList.concat(listScrollParents(getParentNode(target)));
4852  }
4853
4854  function rectToClientRect(rect) {
4855    return Object.assign({}, rect, {
4856      left: rect.x,
4857      top: rect.y,
4858      right: rect.x + rect.width,
4859      bottom: rect.y + rect.height
4860    });
4861  }
4862
4863  function getInnerBoundingClientRect(element) {
4864    var rect = getBoundingClientRect(element);
4865    rect.top = rect.top + element.clientTop;
4866    rect.left = rect.left + element.clientLeft;
4867    rect.bottom = rect.top + element.clientHeight;
4868    rect.right = rect.left + element.clientWidth;
4869    rect.width = element.clientWidth;
4870    rect.height = element.clientHeight;
4871    rect.x = rect.left;
4872    rect.y = rect.top;
4873    return rect;
4874  }
4875
4876  function getClientRectFromMixedType(element, clippingParent) {
4877    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
4878  } // A "clipping parent" is an overflowable container with the characteristic of
4879  // clipping (or hiding) overflowing elements with a position different from
4880  // `initial`
4881
4882
4883  function getClippingParents(element) {
4884    var clippingParents = listScrollParents(getParentNode(element));
4885    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;
4886    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
4887
4888    if (!isElement(clipperElement)) {
4889      return [];
4890    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
4891
4892
4893    return clippingParents.filter(function (clippingParent) {
4894      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
4895    });
4896  } // Gets the maximum area that the element is visible in due to any number of
4897  // clipping parents
4898
4899
vendor: 4,216 bytes, lines 4900-5011
4900  function getClippingRect(element, boundary, rootBoundary) {
4901    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
4902    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
4903    var firstClippingParent = clippingParents[0];
4904    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
4905      var rect = getClientRectFromMixedType(element, clippingParent);
4906      accRect.top = max(rect.top, accRect.top);
4907      accRect.right = min(rect.right, accRect.right);
4908      accRect.bottom = min(rect.bottom, accRect.bottom);
4909      accRect.left = max(rect.left, accRect.left);
4910      return accRect;
4911    }, getClientRectFromMixedType(element, firstClippingParent));
4912    clippingRect.width = clippingRect.right - clippingRect.left;
4913    clippingRect.height = clippingRect.bottom - clippingRect.top;
4914    clippingRect.x = clippingRect.left;
4915    clippingRect.y = clippingRect.top;
4916    return clippingRect;
4917  }
4918
4919  function computeOffsets(_ref) {
4920    var reference = _ref.reference,
4921        element = _ref.element,
4922        placement = _ref.placement;
4923    var basePlacement = placement ? getBasePlacement(placement) : null;
4924    var variation = placement ? getVariation(placement) : null;
4925    var commonX = reference.x + reference.width / 2 - element.width / 2;
4926    var commonY = reference.y + reference.height / 2 - element.height / 2;
4927    var offsets;
4928
4929    switch (basePlacement) {
4930      case top:
4931        offsets = {
4932          x: commonX,
4933          y: reference.y - element.height
4934        };
4935        break;
4936
4937      case bottom:
4938        offsets = {
4939          x: commonX,
4940          y: reference.y + reference.height
4941        };
4942        break;
4943
4944      case right:
4945        offsets = {
4946          x: reference.x + reference.width,
4947          y: commonY
4948        };
4949        break;
4950
4951      case left:
4952        offsets = {
4953          x: reference.x - element.width,
4954          y: commonY
4955        };
4956        break;
4957
4958      default:
4959        offsets = {
4960          x: reference.x,
4961          y: reference.y
4962        };
4963    }
4964
4965    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
4966
4967    if (mainAxis != null) {
4968      var len = mainAxis === 'y' ? 'height' : 'width';
4969
4970      switch (variation) {
4971        case start:
4972          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
4973          break;
4974
4975        case end:
4976          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
4977          break;
4978      }
4979    }
4980
4981    return offsets;
4982  }
4983
4984  function detectOverflow(state, options) {
4985    if (options === void 0) {
4986      options = {};
4987    }
4988
4989    var _options = options,
4990        _options$placement = _options.placement,
4991        placement = _options$placement === void 0 ? state.placement : _options$placement,
4992        _options$boundary = _options.boundary,
4993        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
4994        _options$rootBoundary = _options.rootBoundary,
4995        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
4996        _options$elementConte = _options.elementContext,
4997        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
4998        _options$altBoundary = _options.altBoundary,
4999        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
5000        _options$padding = _options.padding,
5001        padding = _options$padding === void 0 ? 0 : _options$padding;
5002    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
5003    var altContext = elementContext === popper ? reference : popper;
5004    var popperRect = state.rects.popper;
5005    var element = state.elements[altBoundary ? altContext : elementContext];
5006    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
5007    var referenceClientRect = getBoundingClientRect(state.elements.reference);
5008    var popperOffsets = computeOffsets({
5009      reference: referenceClientRect,
5010      element: popperRect,
5011      strategy: 'absolute'
vendor: 11,222 bytes, lines 5011-5339
5011,
5012      placement: placement
5013    });
5014    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
5015    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
5016    // 0 or negative = within the clipping rect
5017
5018    var overflowOffsets = {
5019      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
5020      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
5021      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
5022      right: elementClientRect.right - clippingClientRect.right + paddingObject.right
5023    };
5024    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
5025
5026    if (elementContext === popper && offsetData) {
5027      var offset = offsetData[placement];
5028      Object.keys(overflowOffsets).forEach(function (key) {
5029        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
5030        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
5031        overflowOffsets[key] += offset[axis] * multiply;
5032      });
5033    }
5034
5035    return overflowOffsets;
5036  }
5037
5038  function computeAutoPlacement(state, options) {
5039    if (options === void 0) {
5040      options = {};
5041    }
5042
5043    var _options = options,
5044        placement = _options.placement,
5045        boundary = _options.boundary,
5046        rootBoundary = _options.rootBoundary,
5047        padding = _options.padding,
5048        flipVariations = _options.flipVariations,
5049        _options$allowedAutoP = _options.allowedAutoPlacements,
5050        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
5051    var variation = getVariation(placement);
5052    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
5053      return getVariation(placement) === variation;
5054    }) : basePlacements;
5055    var allowedPlacements = placements$1.filter(function (placement) {
5056      return allowedAutoPlacements.indexOf(placement) >= 0;
5057    });
5058
5059    if (allowedPlacements.length === 0) {
5060      allowedPlacements = placements$1;
5061    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
5062
5063
5064    var overflows = allowedPlacements.reduce(function (acc, placement) {
5065      acc[placement] = detectOverflow(state, {
5066        placement: placement,
5067        boundary: boundary,
5068        rootBoundary: rootBoundary,
5069        padding: padding
5070      })[getBasePlacement(placement)];
5071      return acc;
5072    }, {});
5073    return Object.keys(overflows).sort(function (a, b) {
5074      return overflows[a] - overflows[b];
5075    });
5076  }
5077
5078  function getExpandedFallbackPlacements(placement) {
5079    if (getBasePlacement(placement) === auto) {
5080      return [];
5081    }
5082
5083    var oppositePlacement = getOppositePlacement(placement);
5084    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
5085  }
5086
5087  function flip(_ref) {
5088    var state = _ref.state,
5089        options = _ref.options,
5090        name = _ref.name;
5091
5092    if (state.modifiersData[name]._skip) {
5093      return;
5094    }
5095
5096    var _options$mainAxis = options.mainAxis,
5097        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
5098        _options$altAxis = options.altAxis,
5099        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
5100        specifiedFallbackPlacements = options.fallbackPlacements,
5101        padding = options.padding,
5102        boundary = options.boundary,
5103        rootBoundary = options.rootBoundary,
5104        altBoundary = options.altBoundary,
5105        _options$flipVariatio = options.flipVariations,
5106        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
5107        allowedAutoPlacements = options.allowedAutoPlacements;
5108    var preferredPlacement = state.options.placement;
5109    var basePlacement = getBasePlacement(preferredPlacement);
5110    var isBasePlacement = basePlacement === preferredPlacement;
5111    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
5112    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
5113      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
5114        placement: placement,
5115        boundary: boundary,
5116        rootBoundary: rootBoundary,
5117        padding: padding,
5118        flipVariations: flipVariations,
5119        allowedAutoPlacements: allowedAutoPlacements
5120      }) : placement);
5121    }, []);
5122    var referenceRect = state.rects.reference;
5123    var popperRect = state.rects.popper;
5124    var checksMap = new Map();
5125    var makeFallbackChecks = true;
5126    var firstFittingPlacement = placements[0];
5127
5128    for (var i = 0; i < placements.length; i++) {
5129      var placement = placements[i];
5130
5131      var _basePlacement = getBasePlacement(placement);
5132
5133      var isStartVariation = getVariation(placement) === start;
5134      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
5135      var len = isVertical ? 'width' : 'height';
5136      var overflow = detectOverflow(state, {
5137        placement: placement,
5138        boundary: boundary,
5139        rootBoundary: rootBoundary,
5140        altBoundary: altBoundary,
5141        padding: padding
5142      });
5143      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
5144
5145      if (referenceRect[len] > popperRect[len]) {
5146        mainVariationSide = getOppositePlacement(mainVariationSide);
5147      }
5148
5149      var altVariationSide = getOppositePlacement(mainVariationSide);
5150      var checks = [];
5151
5152      if (checkMainAxis) {
5153        checks.push(overflow[_basePlacement] <= 0);
5154      }
5155
5156      if (checkAltAxis) {
5157        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
5158      }
5159
5160      if (checks.every(function (check) {
5161        return check;
5162      })) {
5163        firstFittingPlacement = placement;
5164        makeFallbackChecks = false;
5165        break;
5166      }
5167
5168      checksMap.set(placement, checks);
5169    }
5170
5171    if (makeFallbackChecks) {
5172      // `2` may be desired in some cases – research later
5173      var numberOfChecks = flipVariations ? 3 : 1;
5174
5175      var _loop = function _loop(_i) {
5176        var fittingPlacement = placements.find(function (placement) {
5177          var checks = checksMap.get(placement);
5178
5179          if (checks) {
5180            return checks.slice(0, _i).every(function (check) {
5181              return check;
5182            });
5183          }
5184        });
5185
5186        if (fittingPlacement) {
5187          firstFittingPlacement = fittingPlacement;
5188          return "break";
5189        }
5190      };
5191
5192      for (var _i = numberOfChecks; _i > 0; _i--) {
5193        var _ret = _loop(_i);
5194
5195        if (_ret === "break") break;
5196      }
5197    }
5198
5199    if (state.placement !== firstFittingPlacement) {
5200      state.modifiersData[name]._skip = true;
5201      state.placement = firstFittingPlacement;
5202      state.reset = true;
5203    }
5204  } // eslint-disable-next-line import/no-unused-modules
5205
5206
5207  const flip$1 = {
5208    name: 'flip',
5209    enabled: true,
5210    phase: 'main',
5211    fn: flip,
5212    requiresIfExists: ['offset'],
5213    data: {
5214      _skip: false
5215    }
5216  };
5217
5218  function getSideOffsets(overflow, rect, preventedOffsets) {
5219    if (preventedOffsets === void 0) {
5220      preventedOffsets = {
5221        x: 0,
5222        y: 0
5223      };
5224    }
5225
5226    return {
5227      top: overflow.top - rect.height - preventedOffsets.y,
5228      right: overflow.right - rect.width + preventedOffsets.x,
5229      bottom: overflow.bottom - rect.height + preventedOffsets.y,
5230      left: overflow.left - rect.width - preventedOffsets.x
5231    };
5232  }
5233
5234  function isAnySideFullyClipped(overflow) {
5235    return [top, right, bottom, left].some(function (side) {
5236      return overflow[side] >= 0;
5237    });
5238  }
5239
5240  function hide(_ref) {
5241    var state = _ref.state,
5242        name = _ref.name;
5243    var referenceRect = state.rects.reference;
5244    var popperRect = state.rects.popper;
5245    var preventedOffsets = state.modifiersData.preventOverflow;
5246    var referenceOverflow = detectOverflow(state, {
5247      elementContext: 'reference'
5248    });
5249    var popperAltOverflow = detectOverflow(state, {
5250      altBoundary: true
5251    });
5252    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
5253    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
5254    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
5255    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
5256    state.modifiersData[name] = {
5257      referenceClippingOffsets: referenceClippingOffsets,
5258      popperEscapeOffsets: popperEscapeOffsets,
5259      isReferenceHidden: isReferenceHidden,
5260      hasPopperEscaped: hasPopperEscaped
5261    };
5262    state.attributes.popper = Object.assign({}, state.attributes.popper, {
5263      'data-popper-reference-hidden': isReferenceHidden,
5264      'data-popper-escaped': hasPopperEscaped
5265    });
5266  } // eslint-disable-next-line import/no-unused-modules
5267
5268
5269  const hide$1 = {
5270    name: 'hide',
5271    enabled: true,
5272    phase: 'main',
5273    requiresIfExists: ['preventOverflow'],
5274    fn: hide
5275  };
5276
5277  function distanceAndSkiddingToXY(placement, rects, offset) {
5278    var basePlacement = getBasePlacement(placement);
5279    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
5280
5281    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
5282      placement: placement
5283    })) : offset,
5284        skidding = _ref[0],
5285        distance = _ref[1];
5286
5287    skidding = skidding || 0;
5288    distance = (distance || 0) * invertDistance;
5289    return [left, right].indexOf(basePlacement) >= 0 ? {
5290      x: distance,
5291      y: skidding
5292    } : {
5293      x: skidding,
5294      y: distance
5295    };
5296  }
5297
5298  function offset(_ref2) {
5299    var state = _ref2.state,
5300        options = _ref2.options,
5301        name = _ref2.name;
5302    var _options$offset = options.offset,
5303        offset = _options$offset === void 0 ? [0, 0] : _options$offset;
5304    var data = placements.reduce(function (acc, placement) {
5305      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
5306      return acc;
5307    }, {});
5308    var _data$state$placement = data[state.placement],
5309        x = _data$state$placement.x,
5310        y = _data$state$placement.y;
5311
5312    if (state.modifiersData.popperOffsets != null) {
5313      state.modifiersData.popperOffsets.x += x;
5314      state.modifiersData.popperOffsets.y += y;
5315    }
5316
5317    state.modifiersData[name] = data;
5318  } // eslint-disable-next-line import/no-unused-modules
5319
5320
5321  const offset$1 = {
5322    name: 'offset',
5323    enabled: true,
5324    phase: 'main',
5325    requires: ['popperOffsets'],
5326    fn: offset
5327  };
5328
5329  function popperOffsets(_ref) {
5330    var state = _ref.state,
5331        name = _ref.name;
5332    // Offsets are the actual position the popper needs to have to be
5333    // properly positioned near its reference element
5334    // This is the most basic placement, and will be adjusted by
5335    // the modifiers in the next step
5336    state.modifiersData[name] = computeOffsets({
5337      reference: state.rects.reference,
5338      element: state.rects.popper,
5339      
vendor: 7,514 bytes, lines 5339-5537
5339strategy: 'absolute',
5340      placement: state.placement
5341    });
5342  } // eslint-disable-next-line import/no-unused-modules
5343
5344
5345  const popperOffsets$1 = {
5346    name: 'popperOffsets',
5347    enabled: true,
5348    phase: 'read',
5349    fn: popperOffsets,
5350    data: {}
5351  };
5352
5353  function getAltAxis(axis) {
5354    return axis === 'x' ? 'y' : 'x';
5355  }
5356
5357  function preventOverflow(_ref) {
5358    var state = _ref.state,
5359        options = _ref.options,
5360        name = _ref.name;
5361    var _options$mainAxis = options.mainAxis,
5362        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
5363        _options$altAxis = options.altAxis,
5364        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
5365        boundary = options.boundary,
5366        rootBoundary = options.rootBoundary,
5367        altBoundary = options.altBoundary,
5368        padding = options.padding,
5369        _options$tether = options.tether,
5370        tether = _options$tether === void 0 ? true : _options$tether,
5371        _options$tetherOffset = options.tetherOffset,
5372        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
5373    var overflow = detectOverflow(state, {
5374      boundary: boundary,
5375      rootBoundary: rootBoundary,
5376      padding: padding,
5377      altBoundary: altBoundary
5378    });
5379    var basePlacement = getBasePlacement(state.placement);
5380    var variation = getVariation(state.placement);
5381    var isBasePlacement = !variation;
5382    var mainAxis = getMainAxisFromPlacement(basePlacement);
5383    var altAxis = getAltAxis(mainAxis);
5384    var popperOffsets = state.modifiersData.popperOffsets;
5385    var referenceRect = state.rects.reference;
5386    var popperRect = state.rects.popper;
5387    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
5388      placement: state.placement
5389    })) : tetherOffset;
5390    var data = {
5391      x: 0,
5392      y: 0
5393    };
5394
5395    if (!popperOffsets) {
5396      return;
5397    }
5398
5399    if (checkMainAxis || checkAltAxis) {
5400      var mainSide = mainAxis === 'y' ? top : left;
5401      var altSide = mainAxis === 'y' ? bottom : right;
5402      var len = mainAxis === 'y' ? 'height' : 'width';
5403      var offset = popperOffsets[mainAxis];
5404      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];
5405      var max$1 = popperOffsets[mainAxis] - overflow[altSide];
5406      var additive = tether ? -popperRect[len] / 2 : 0;
5407      var minLen = variation === start ? referenceRect[len] : popperRect[len];
5408      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
5409      // outside the reference bounds
5410
5411      var arrowElement = state.elements.arrow;
5412      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
5413        width: 0,
5414        height: 0
5415      };
5416      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
5417      var arrowPaddingMin = arrowPaddingObject[mainSide];
5418      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
5419      // to include its full size in the calculation. If the reference is small
5420      // and near the edge of a boundary, the popper can overflow even if the
5421      // reference is not overflowing as well (e.g. virtual elements with no
5422      // width or height)
5423
5424      var arrowLen = within(0, referenceRect[len], arrowRect[len]);
5425      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;
5426      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;
5427      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
5428      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
5429      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;
5430      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;
5431      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;
5432
5433      if (checkMainAxis) {
5434        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
5435        popperOffsets[mainAxis] = preventedOffset;
5436        data[mainAxis] = preventedOffset - offset;
5437      }
5438
5439      if (checkAltAxis) {
5440        var _mainSide = mainAxis === 'x' ? top : left;
5441
5442        var _altSide = mainAxis === 'x' ? bottom : right;
5443
5444        var _offset = popperOffsets[altAxis];
5445
5446        var _min = _offset + overflow[_mainSide];
5447
5448        var _max = _offset - overflow[_altSide];
5449
5450        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);
5451
5452        popperOffsets[altAxis] = _preventedOffset;
5453        data[altAxis] = _preventedOffset - _offset;
5454      }
5455    }
5456
5457    state.modifiersData[name] = data;
5458  } // eslint-disable-next-line import/no-unused-modules
5459
5460
5461  const preventOverflow$1 = {
5462    name: 'preventOverflow',
5463    enabled: true,
5464    phase: 'main',
5465    fn: preventOverflow,
5466    requiresIfExists: ['offset']
5467  };
5468
5469  function getHTMLElementScroll(element) {
5470    return {
5471      scrollLeft: element.scrollLeft,
5472      scrollTop: element.scrollTop
5473    };
5474  }
5475
5476  function getNodeScroll(node) {
5477    if (node === getWindow(node) || !isHTMLElement(node)) {
5478      return getWindowScroll(node);
5479    } else {
5480      return getHTMLElementScroll(node);
5481    }
5482  }
5483
5484  function isElementScaled(element) {
5485    var rect = element.getBoundingClientRect();
5486    var scaleX = rect.width / element.offsetWidth || 1;
5487    var scaleY = rect.height / element.offsetHeight || 1;
5488    return scaleX !== 1 || scaleY !== 1;
5489  } // Returns the composite rect of an element relative to its offsetParent.
5490  // Composite means it takes into account transforms as well as layout.
5491
5492
5493  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
5494    if (isFixed === void 0) {
5495      isFixed = false;
5496    }
5497
5498    var isOffsetParentAnElement = isHTMLElement(offsetParent);
5499    isHTMLElement(offsetParent) && isElementScaled(offsetParent);
5500    var documentElement = getDocumentElement(offsetParent);
5501    var rect = getBoundingClientRect(elementOrVirtualElement);
5502    var scroll = {
5503      scrollLeft: 0,
5504      scrollTop: 0
5505    };
5506    var offsets = {
5507      x: 0,
5508      y: 0
5509    };
5510
5511    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
5512      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
5513      isScrollParent(documentElement)) {
5514        scroll = getNodeScroll(offsetParent);
5515      }
5516
5517      if (isHTMLElement(offsetParent)) {
5518        offsets = getBoundingClientRect(offsetParent);
5519        offsets.x += offsetParent.clientLeft;
5520        offsets.y += offsetParent.clientTop;
5521      } else if (documentElement) {
5522        offsets.x = getWindowScrollBarX(documentElement);
5523      }
5524    }
5525
5526    return {
5527      x: rect.left + scroll.scrollLeft - offsets.x,
5528      y: rect.top + scroll.scrollTop - offsets.y,
5529      width: rect.width,
5530      height: rect.height
5531    };
5532  }
5533
5534  function order(modifiers) {
5535    var map = new Map();
5536    var visited = new Set();
5537    var result = [];
vendor: 11,066 bytes, lines 5538-5867
5538    modifiers.forEach(function (modifier) {
5539      map.set(modifier.name, modifier);
5540    }); // On visiting object, check for its dependencies and visit them recursively
5541
5542    function sort(modifier) {
5543      visited.add(modifier.name);
5544      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
5545      requires.forEach(function (dep) {
5546        if (!visited.has(dep)) {
5547          var depModifier = map.get(dep);
5548
5549          if (depModifier) {
5550            sort(depModifier);
5551          }
5552        }
5553      });
5554      result.push(modifier);
5555    }
5556
5557    modifiers.forEach(function (modifier) {
5558      if (!visited.has(modifier.name)) {
5559        // check for visited object
5560        sort(modifier);
5561      }
5562    });
5563    return result;
5564  }
5565
5566  function orderModifiers(modifiers) {
5567    // order based on dependencies
5568    var orderedModifiers = order(modifiers); // order based on phase
5569
5570    return modifierPhases.reduce(function (acc, phase) {
5571      return acc.concat(orderedModifiers.filter(function (modifier) {
5572        return modifier.phase === phase;
5573      }));
5574    }, []);
5575  }
5576
5577  function debounce(fn) {
5578    var pending;
5579    return function () {
5580      if (!pending) {
5581        pending = new Promise(function (resolve) {
5582          Promise.resolve().then(function () {
5583            pending = undefined;
5584            resolve(fn());
5585          });
5586        });
5587      }
5588
5589      return pending;
5590    };
5591  }
5592
5593  function mergeByName(modifiers) {
5594    var merged = modifiers.reduce(function (merged, current) {
5595      var existing = merged[current.name];
5596      merged[current.name] = existing ? Object.assign({}, existing, current, {
5597        options: Object.assign({}, existing.options, current.options),
5598        data: Object.assign({}, existing.data, current.data)
5599      }) : current;
5600      return merged;
5601    }, {}); // IE11 does not support Object.values
5602
5603    return Object.keys(merged).map(function (key) {
5604      return merged[key];
5605    });
5606  }
5607
5608  var DEFAULT_OPTIONS = {
5609    placement: 'bottom',
5610    modifiers: [],
5611    strategy: 'absolute'
5612  };
5613
5614  function areValidElements() {
5615    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
5616      args[_key] = arguments[_key];
5617    }
5618
5619    return !args.some(function (element) {
5620      return !(element && typeof element.getBoundingClientRect === 'function');
5621    });
5622  }
5623
5624  function popperGenerator(generatorOptions) {
5625    if (generatorOptions === void 0) {
5626      generatorOptions = {};
5627    }
5628
5629    var _generatorOptions = generatorOptions,
5630        _generatorOptions$def = _generatorOptions.defaultModifiers,
5631        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
5632        _generatorOptions$def2 = _generatorOptions.defaultOptions,
5633        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
5634    return function createPopper(reference, popper, options) {
5635      if (options === void 0) {
5636        options = defaultOptions;
5637      }
5638
5639      var state = {
5640        placement: 'bottom',
5641        orderedModifiers: [],
5642        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
5643        modifiersData: {},
5644        elements: {
5645          reference: reference,
5646          popper: popper
5647        },
5648        attributes: {},
5649        styles: {}
5650      };
5651      var effectCleanupFns = [];
5652      var isDestroyed = false;
5653      var instance = {
5654        state: state,
5655        setOptions: function setOptions(setOptionsAction) {
5656          var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
5657          cleanupModifierEffects();
5658          state.options = Object.assign({}, defaultOptions, state.options, options);
5659          state.scrollParents = {
5660            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
5661            popper: listScrollParents(popper)
5662          }; // Orders the modifiers based on their dependencies and `phase`
5663          // properties
5664
5665          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
5666
5667          state.orderedModifiers = orderedModifiers.filter(function (m) {
5668            return m.enabled;
5669          }); // Validate the provided modifiers so that the consumer will get warned
5670
5671          runModifierEffects();
5672          return instance.update();
5673        },
5674        // Sync update – it will always be executed, even if not necessary. This
5675        // is useful for low frequency updates where sync behavior simplifies the
5676        // logic.
5677        // For high frequency updates (e.g. `resize` and `scroll` events), always
5678        // prefer the async Popper#update method
5679        forceUpdate: function forceUpdate() {
5680          if (isDestroyed) {
5681            return;
5682          }
5683
5684          var _state$elements = state.elements,
5685              reference = _state$elements.reference,
5686              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
5687          // anymore
5688
5689          if (!areValidElements(reference, popper)) {
5690
5691            return;
5692          } // Store the reference and popper rects to be read by modifiers
5693
5694
5695          state.rects = {
5696            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
5697            popper: getLayoutRect(popper)
5698          }; // Modifiers have the ability to reset the current update cycle. The
5699          // most common use case for this is the `flip` modifier changing the
5700          // placement, which then needs to re-run all the modifiers, because the
5701          // logic was previously ran for the previous placement and is therefore
5702          // stale/incorrect
5703
5704          state.reset = false;
5705          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
5706          // is filled with the initial data specified by the modifier. This means
5707          // it doesn't persist and is fresh on each update.
5708          // To ensure persistent data, use `${name}#persistent`
5709
5710          state.orderedModifiers.forEach(function (modifier) {
5711            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
5712          });
5713
5714          for (var index = 0; index < state.orderedModifiers.length; index++) {
5715
5716            if (state.reset === true) {
5717              state.reset = false;
5718              index = -1;
5719              continue;
5720            }
5721
5722            var _state$orderedModifie = state.orderedModifiers[index],
5723                fn = _state$orderedModifie.fn,
5724                _state$orderedModifie2 = _state$orderedModifie.options,
5725                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
5726                name = _state$orderedModifie.name;
5727
5728            if (typeof fn === 'function') {
5729              state = fn({
5730                state: state,
5731                options: _options,
5732                name: name,
5733                instance: instance
5734              }) || state;
5735            }
5736          }
5737        },
5738        // Async and optimistically optimized update – it will not be executed if
5739        // not necessary (debounced to run at most once-per-tick)
5740        update: debounce(function () {
5741          return new Promise(function (resolve) {
5742            instance.forceUpdate();
5743            resolve(state);
5744          });
5745        }),
5746        destroy: function destroy() {
5747          cleanupModifierEffects();
5748          isDestroyed = true;
5749        }
5750      };
5751
5752      if (!areValidElements(reference, popper)) {
5753
5754        return instance;
5755      }
5756
5757      instance.setOptions(options).then(function (state) {
5758        if (!isDestroyed && options.onFirstUpdate) {
5759          options.onFirstUpdate(state);
5760        }
5761      }); // Modifiers have the ability to execute arbitrary code before the first
5762      // update cycle runs. They will be executed in the same order as the update
5763      // cycle. This is useful when a modifier adds some persistent data that
5764      // other modifiers need to use, but the modifier is run after the dependent
5765      // one.
5766
5767      function runModifierEffects() {
5768        state.orderedModifiers.forEach(function (_ref3) {
5769          var name = _ref3.name,
5770              _ref3$options = _ref3.options,
5771              options = _ref3$options === void 0 ? {} : _ref3$options,
5772              effect = _ref3.effect;
5773
5774          if (typeof effect === 'function') {
5775            var cleanupFn = effect({
5776              state: state,
5777              name: name,
5778              instance: instance,
5779              options: options
5780            });
5781
5782            var noopFn = function noopFn() {};
5783
5784            effectCleanupFns.push(cleanupFn || noopFn);
5785          }
5786        });
5787      }
5788
5789      function cleanupModifierEffects() {
5790        effectCleanupFns.forEach(function (fn) {
5791          return fn();
5792        });
5793        effectCleanupFns = [];
5794      }
5795
5796      return instance;
5797    };
5798  }
5799  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
5800
5801  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
5802  var createPopper$1 = /*#__PURE__*/popperGenerator({
5803    defaultModifiers: defaultModifiers$1
5804  }); // eslint-disable-next-line import/no-unused-modules
5805
5806  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
5807  var createPopper = /*#__PURE__*/popperGenerator({
5808    defaultModifiers: defaultModifiers
5809  }); // eslint-disable-next-line import/no-unused-modules
5810
5811  const Popper = /*#__PURE__*/Object.freeze({
5812    __proto__: null,
5813    popperGenerator,
5814    detectOverflow,
5815    createPopperBase: createPopper$2,
5816    createPopper,
5817    createPopperLite: createPopper$1,
5818    top,
5819    bottom,
5820    right,
5821    left,
5822    auto,
5823    basePlacements,
5824    start,
5825    end,
5826    clippingParents,
5827    viewport,
5828    popper,
5829    reference,
5830    variationPlacements,
5831    placements,
5832    beforeRead,
5833    read,
5834    afterRead,
5835    beforeMain,
5836    main,
5837    afterMain,
5838    beforeWrite,
5839    write,
5840    afterWrite,
5841    modifierPhases,
5842    applyStyles: applyStyles$1,
5843    arrow: arrow$1,
5844    computeStyles: computeStyles$1,
5845    eventListeners,
5846    flip: flip$1,
5847    hide: hide$1,
5848    offset: offset$1,
5849    popperOffsets: popperOffsets$1,
5850    preventOverflow: preventOverflow$1
5851  });
5852
5853  /**
5854   * --------------------------------------------------------------------------
5855   * Bootstrap (v5.1.3): dropdown.js
5856   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5857   * --------------------------------------------------------------------------
5858   */
5859  /**
5860   * ------------------------------------------------------------------------
5861   * Constants
5862   * ------------------------------------------------------------------------
5863   */
5864
5865  const NAME$9 = 'dropdown';
5866  const DATA_KEY$8 = 'bs.dropdown';
5867  const EVENT_KEY$8 = `.${DATA_KEY$8}`;
5868  const DATA_API_KEY$4 = '.data-api';
5869  const ESCAPE_KEY$2 = 'Escape';
5870  const SPACE_KEY = 'Space';
5871  const TAB_KEY$1 = 'Tab';
5872  const ARROW_UP_KEY = 'ArrowUp';
5873  const ARROW_DOWN_KEY = 'ArrowDown';
5874  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
5875
5876  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);
5877  const EVENT_HIDE$4 = `hide${EVENT_KEY$8}`;
5878  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`;
5879  const EVENT_SHOW$4 = `show${EVENT_KEY$8}`;
5880  const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`;
5881  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`;
5882  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`;
5883  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`;
5884  const CLASS_NAME_SHOW$6 = 'show';
5885  const CLASS_NAME_DROPUP = 'dropup';
5886  const CLASS_NAME_DROPEND = 'dropend';
5887  const CLASS_NAME_DROPSTART = 'dropstart';
5888  const CLASS_NAME_NAVBAR = 'navbar';
5889  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]';
5890  const SELECTOR_MENU = '.dropdown-menu';
5891  const SELECTOR_NAVBAR_NAV = '.navbar-nav';
5892  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
5893  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
5894  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
5895  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
5896  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
5897  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
5898  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
5899  const Default$8 = {
5900    offset: [0, 2],
5901    boundary: 'clippingParents',
5902    reference: 'toggle',
5903    display: 'dynamic',
5904    popperConfig: null,
5905    autoClose: true
5906  };
5907  const DefaultType$8 = {
5908    offset: '(array|string|function)',
5909    boundary: '(string|element)',
5910    reference: '(string|element|object)',
5911    display: 'string',
5912    popperConfig: '(null|object|function)',
5913    autoClose: '(boolean|string)'
5914  };
5915  /**
5916   * ------------------------------------------------------------------------
5917   * Class Definition
5918   * ------------------------------------------------------------------------
5919   */
5920
5921  class Dropdown extends BaseComponent {
5922    constructor(element, config) {
5923      super(element);
5924      this._popper = null;
5925      this._config = this._getConfig(config);
5926      this._menu = this._getMenuElement();
5927      this._inNavbar = this._detectNavbar();
5928    } // Getters
5929
5930
5931    static get Default() {
5932      return Default$8;
5933    }
5934
5935    static get DefaultType() {
5936      return DefaultType$8;
5937    }
5938
5939    static get NAME() {
5940      return NAME$9;
5941    } // Public
5942
5943
5944    toggle() {
5945      return this._isShown() ? this.hide() : this.show();
5946    }
5947
5948    show() {
5949      if (isDisabled(this._element) || this._isShown(this._menu)) {
5950        return;
5951      }
5952
5953      const relatedTarget = {
5954        relatedTarget: this._element
5955      };
5956      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);
5957
5958      if (showEvent.defaultPrevented) {
5959        return;
5960      }
5961
5962      const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar
5963
5964      if (this._inNavbar) {
5965        Manipulator.setDataAttribute(this._menu, 'popper', 'none');
5966      } else {
5967        this._createPopper(parent);
5968      } // If this is a touch-enabled device we add extra
5969      // empty mouseover listeners to the body's immediate children;
5970      // only needed because of broken event delegation on iOS
5971      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
5972
5973
5974      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
5975        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));
5976      }
5977
5978      this._element.focus();
5979
5980      this._element.setAttribute('aria-expanded', true);
5981
5982      this._menu.classList.add(CLASS_NAME_SHOW$6);
5983
5984      this._element.classList.add(CLASS_NAME_SHOW$6);
5985
5986      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);
5987    }
5988
5989    hide() {
5990      if (isDisabled(this._element) || !this._isShown(this._menu)) {
5991        return;
5992      }
5993
5994      const relatedTarget = {
5995        relatedTarget: this._element
5996      };
5997
5998      this._completeHide(relatedTarget);
5999    }
6000
6001    dispose() {
6002      if (this._popper) {
6003        this._popper.destroy();
6004      }
6005
6006      super.dispose();
6007    }
6008
6009    update() {
6010      this._inNavbar = this._detectNavbar();
6011
6012      if (this._popper) {
6013        this._popper.update();
6014      }
6015    } // Private
6016
6017
6018    _completeHide(relatedTarget) {
6019      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);
6020
6021      if (hideEvent.defaultPrevented) {
6022        return;
6023      } // If this is a touch-enabled device we remove the extra
6024      // empty mouseover listeners we added for iOS support
6025
6026
6027      if ('ontouchstart' in document.documentElement) {
6028        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));
6029      }
6030
6031      if (this._popper) {
6032        this._popper.destroy();
6033      }
6034
6035      this._menu.classList.remove(CLASS_NAME_SHOW$6);
6036
6037      this._element.classList.remove(CLASS_NAME_SHOW$6);
6038
6039      this._element.setAttribute('aria-expanded', 'false');
6040
6041      Manipulator.removeDataAttribute(this._menu, 'popper');
6042      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);
6043    }
6044
6045    _getConfig(config) {
6046      config = { ...this.constructor.Default,
6047        ...Manipulator.getDataAttributes(this._element),
6048        ...config
6049      };
6050      typeCheckConfig(NAME$9, config, this.constructor.DefaultType);
6051
6052      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
6053        // Popper virtual elements require a getBoundingClientRect method
6054        throw new TypeError(`${NAME$9.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
6055      }
6056
6057      return config;
6058    }
6059
6060    _createPopper(parent) {
6061      if (typeof Popper === 'undefined') {
6062        throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
6063      }
6064
6065      let referenceElement = this._element;
6066
6067      if (this._config.reference === 'parent') {
6068        referenceElement = parent;
6069      } else if (isElement$1(this._config.reference)) {
6070        referenceElement = getElement(this._config.reference);
6071      } else if (typeof this._config.reference === 'object') {
6072        referenceElement = this._config.reference;
6073      }
6074
6075      const popperConfig = this._getPopperConfig();
6076
6077      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
6078      this._popper = createPopper(referenceElement, this._menu, popperConfig);
6079
6080      if (isDisplayStatic) {
6081        Manipulator.setDataAttribute(this._menu, 'popper', 'static');
6082      }
6083    }
6084
6085    _isShown(element = this._element) {
6086      return element.classList.contains(CLASS_NAME_SHOW$6);
6087    }
6088
6089    _getMenuElement() {
6090      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
6091    }
6092
6093    _getPlacement() {
6094      const parentDropdown = this._element.parentNode;
6095
6096      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
6097        return PLACEMENT_RIGHT;
6098      }
6099
6100      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
6101        return PLACEMENT_LEFT;
6102      } // We need to trim the value because custom properties can also include spaces
6103
6104
6105      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
6106
6107      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
6108        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
6109      }
6110
6111      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
6112    }
6113
6114    _detectNavbar() {
6115      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;
6116    }
6117
6118    _getOffset() {
6119      const {
6120        offset
6121      } = this._config;
6122
6123      if (typeof offset === 'string') {
6124        return offset.split(',').map(val => Number.parseInt(val, 10));
6125      }
6126
6127      if (typeof offset === 'function') {
6128        return popperData => offset(popperData, this._element);
6129      }
6130
6131      return offset;
6132    }
6133
6134    _getPopperConfig() {
6135      const defaultBsPopperConfig = {
6136        placement: this._getPlacement(),
6137        modifiers: [{
6138          name: 'preventOverflow',
6139          options: {
6140            boundary: this._config.boundary
6141          }
6142        }, {
6143          name: 'offset',
6144          options: {
6145            offset: this._getOffset()
6146          }
6147        }]
6148      }; // Disable Popper if we have a static display
6149
6150      if (this._config.display === 'static') {
6151        defaultBsPopperConfig.modifiers = [{
6152          name: 'applyStyles',
6153          enabled: false
6154        }];
6155      }
6156
6157      return { ...defaultBsPopperConfig,
6158        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
6159      };
6160    }
6161
6162    _selectMenuItem({
6163      key,
6164      target
6165    }) {
6166      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);
6167
6168      if (!items.length) {
6169        return;
6170      } // if target isn't included in items (e.g. when expanding the dropdown)
6171      // allow cycling to get the last item in case key equals ARROW_UP_KEY
6172
6173
6174      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
6175    } // Static
6176
6177
6178    static jQueryInterface(config) {
6179      return this.each(function () {
6180        const data = Dropdown.getOrCreateInstance(this, config);
6181
6182        if (typeof config !== 'string') {
6183          return;
6184        }
6185
6186        if (typeof data[config] === 'undefined') {
6187          throw new TypeError(`No method named "${config}"`);
6188        }
6189
6190        data[config]();
6191      });
6192    }
6193
6194    static clearMenus(event) {
6195      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) {
6196        return;
6197      }
6198
6199      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);
6200
6201      for (let i = 0, len = toggles.length; i < len; i++) {
6202        const context = Dropdown.getInstance(toggles[i]);
6203
6204        if (!context || context._config.autoClose === false) {
6205          continue;
6206        }
6207
6208        if (!context._isShown()) {
6209          continue;
6210        }
6211
6212        const relatedTarget = {
6213          relatedTarget: context._element
6214        };
6215
6216        if (event) {
6217          const composedPath = event.composedPath();
6218          const isMenuTarget = composedPath.includes(context._menu);
6219
6220          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
6221            continue;
6222          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
6223
6224
6225          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
6226            continue;
6227          }
6228
6229          if (event.type === 'click') {
6230            relatedTarget.clickEvent = event;
6231          }
6232        }
6233
6234        context._completeHide(relatedTarget);
6235      }
6236    }
6237
6238    static getParentFromElement(element) {
6239      return getElementFromSelector(element) || element.parentNode;
6240    }
6241
6242    static dataApiKeydownHandler(event) {
6243      // If not input/textarea:
6244      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
6245      // If input/textarea:
6246      //  - If space key => not a dropdown command
6247      //  - If key is other than escape
6248      //    - If key is not up or down => not a dropdown command
6249      //    - If trigger inside the menu => not a dropdown command
6250      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {
6251        return;
6252      }
6253
6254      const isActive = this.classList.contains(CLASS_NAME_SHOW$6);
6255
6256      if (!isActive && event.key === ESCAPE_KEY$2) {
6257        return;
6258      }
6259
6260      event.preventDefault();
6261      event.stopPropagation();
6262
6263      if (isDisabled(this)) {
6264        return;
6265      }
6266
6267      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];
6268      const instance = Dropdown.getOrCreateInstance(getToggleButton);
6269
6270      if (event.key === ESCAPE_KEY$2) {
6271        instance.hide();
6272        return;
6273      }
6274
6275      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
6276        if (!isActive) {
6277          instance.show();
6278        }
6279
6280        instance._selectMenuItem(event);
6281
6282        return;
6283      }
6284
6285      if (!isActive || event.key === SPACE_KEY) {
6286        Dropdown.clearMenus();
6287      }
6288    }
6289
6290  }
6291  /**
6292   * ------------------------------------------------------------------------
6293   * Data Api implementation
6294   * ------------------------------------------------------------------------
6295   */
6296
6297
6298  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
6299  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
6300  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
6301  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
6302  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
6303    event.preventDefault();
6304    Dropdown.getOrCreateInstance(this).toggle();
6305  });
6306  /**
6307   * ------------------------------------------------------------------------
6308   * jQuery
6309   * ------------------------------------------------------------------------
6310   * add .Dropdown to jQuery only if jQuery is present
6311   */
6312
6313  defineJQueryPlugin(Dropdown);
6314
6315  /**
6316   * --------------------------------------------------------------------------
6317   * Bootstrap (v5.1.3): util/scrollBar.js
6318   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6319   * --------------------------------------------------------------------------
6320   */
6321  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
6322  const SELECTOR_STICKY_CONTENT = '.sticky-top';
6323
6324  class ScrollBarHelper {
6325    constructor() {
6326      this._element = document.body;
6327    }
6328
6329    getWidth() {
6330      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
6331      const documentWidth = document.documentElement.clientWidth;
6332      return Math.abs(window.innerWidth - documentWidth);
6333    }
6334
6335    hide() {
6336      const width = this.getWidth();
6337
6338      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width
6339
6340
6341      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width);
6341 // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
6342
6343
6344      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);
6345
6346      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);
6347    }
6348
6349    _disableOverFlow() {
6350      this._saveInitialAttribute(this._element, 'overflow');
6351
6352      this._element.style.overflow = 'hidden';
6353    }
6354
6355    _setElementAttributes(selector, styleProp, callback) {
6356      const scrollbarWidth = this.getWidth();
6357
6358      const manipulationCallBack = element => {
6359        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
6360          return;
6361        }
6362
6363        this._saveInitialAttribute(element, styleProp);
6364
6365        const calculatedValue = window.getComputedStyle(element)[styleProp];
6366        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;
6367      };
6368
6369      this._applyManipulationCallback(selector, manipulationCallBack);
6370    }
6371
6372    reset() {
6373      this._resetElementAttributes(this._element, 'overflow');
6374
6375      this._resetElementAttributes(this._element, 'paddingRight');
6376
6377      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
6378
6379      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
6380    }
6381
6382    _saveInitialAttribute(element, styleProp) {
6383      const actualValue = element.style[styleProp];
6384
6385      if (actualValue) {
6386        Manipulator.setDataAttribute(element, styleProp, actualValue);
6387      }
6388    }
6389
6390    _resetElementAttributes(selector, styleProp) {
6391      const manipulationCallBack = element => {
6392        const value = Manipulator.getDataAttribute(element, styleProp);
6393
6394        if (typeof value === 'undefined') {
6395          element.style.removeProperty(styleProp);
6396        } else {
6397          Manipulator.removeDataAttribute(element, styleProp);
6398          element.style[styleProp] = value;
6399        }
6400      };
6401
6402      this._applyManipulationCallback(selector, manipulationCallBack);
6403    }
6404
6405    _applyManipulationCallback(selector, callBack) {
6406      if (isElement$1(selector)) {
6407        callBack(selector);
6408      } else {
6409        SelectorEngine.find(selector, this._element).forEach(callBack);
6410      }
6411    }
6412
6413    isOverflowing() {
6414      return this.getWidth() > 0;
6415    }
6416
6417  }
6418
6419  /**
6420   * --------------------------------------------------------------------------
6421   * Bootstrap (v5.1.3): util/backdrop.js
6422   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6423   * --------------------------------------------------------------------------
6424   */
6425  const Default$7 = {
6426    className: 'modal-backdrop',
6427    isVisible: true,
6428    // if false, we use the backdrop helper without adding any element to the dom
6429    isAnimated: false,
6430    rootElement: 'body',
6431    // give the choice to place backdrop under different elements
6432    clickCallback: null
6433  };
6434  const DefaultType$7 = {
6435    className: 'string',
6436    isVisible: 'boolean',
6437    isAnimated: 'boolean',
6438    rootElement: '(element|string)',
6439    clickCallback: '(function|null)'
6440  };
6441  const NAME$8 = 'backdrop';
6442  const CLASS_NAME_FADE$4 = 'fade';
6443  const CLASS_NAME_SHOW$5 = 'show';
6444  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`;
6445
6446  class Backdrop {
6447    constructor(config) {
6448      this._config = this._getConfig(config);
6449      this._isAppended = false;
6450      this._element = null;
6451    }
6452
6453    show(callback) {
6454      if (!this._config.isVisible) {
6455        execute(callback);
6456        return;
6457      }
6458
6459      this._append();
6460
6461      if (this._config.isAnimated) {
6462        reflow(this._getElement());
6463      }
6464
6465      this._getElement().classList.add(CLASS_NAME_SHOW$5);
6466
6467      this._emulateAnimation(() => {
6468        execute(callback);
6469      });
6470    }
6471
6472    hide(callback) {
6473      if (!this._config.isVisible) {
6474        execute(callback);
6475        return;
6476      }
6477
6478      this._getElement().classList.remove(CLASS_NAME_SHOW$5);
6479
6480      this._emulateAnimation(() => {
6481        this.dispose();
6482        execute(callback);
6483      });
6484    } // Private
6485
6486
6487    _getElement() {
6488      if (!this._element) {
6489        const backdrop = document.createElement('div');
6490        backdrop.className = this._config.className;
6491
6492        if (this._config.isAnimated) {
6493          backdrop.classList.add(CLASS_NAME_FADE$4);
6494        }
6495
6496        this._element = backdrop;
6497      }
6498
6499      return this._element;
6500    }
6501
6502    _getConfig(config) {
6503      config = { ...Default$7,
6504        ...(typeof config === 'object' ? config : {})
6505      }; // use getElement() with the default "body" to get a fresh Element on each instantiation
6506
6507      config.rootElement = getElement(config.rootElement);
6508      typeCheckConfig(NAME$8, config, DefaultType$7);
6509      return config;
6510    }
6511
6512    _append() {
6513      if (this._isAppended) {
6514        return;
6515      }
6516
6517      this._config.rootElement.append(this._getElement());
6518
6519      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {
6520        execute(this._config.clickCallback);
6521      });
6522      this._isAppended = true;
6523    }
6524
6525    dispose() {
6526      if (!this._isAppended) {
6527        return;
6528      }
6529
6530      EventHandler.off(this._element, EVENT_MOUSEDOWN);
6531
6532      this._element.remove();
6533
6534      this._isAppended = false;
6535    }
6536
6537    _emulateAnimation(callback) {
6538      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
6539    }
6540
6541  }
6542
6543  /**
6544   * --------------------------------------------------------------------------
6545   * Bootstrap (v5.1.3): util/focustrap.js
6546   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6547   * --------------------------------------------------------------------------
6548   */
6549  const Default$6 = {
6550    trapElement: null,
6551    // The element to trap focus inside of
6552    autofocus: true
6553  };
6554  const DefaultType$6 = {
6555    trapElement: 'element',
6556    autofocus: 'boolean'
6557  };
6558  const NAME$7 = 'focustrap';
6559  const DATA_KEY$7 = 'bs.focustrap';
6560  const EVENT_KEY$7 = `.${DATA_KEY$7}`;
6561  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`;
6562  const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`;
6563  const TAB_KEY = 'Tab';
6564  const TAB_NAV_FORWARD = 'forward';
6565  const TAB_NAV_BACKWARD = 'backward';
6566
6567  class FocusTrap {
6568    constructor(config) {
6569      this._config = this._getConfig(config);
6570      this._isActive = false;
6571      this._lastTabNavDirection = null;
6572    }
6573
6574    activate() {
6575      const {
6576        trapElement,
6577        autofocus
6578      } = this._config;
6579
6580      if (this._isActive) {
6581        return;
6582      }
6583
6584      if (autofocus) {
6585        trapElement.focus();
6586      }
6587
6588      EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop
6589
6590      EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event));
6591      EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
6592      this._isActive = true;
6593    }
6594
6595    deactivate() {
6596      if (!this._isActive) {
6597        return;
6598      }
6599
6600      this._isActive = false;
6601      EventHandler.off(document, EVENT_KEY$7);
6602    } // Private
6603
6604
6605    _handleFocusin(event) {
6606      const {
6607        target
6608      } = event;
6609      const {
6610        trapElement
6611      } = this._config;
6612
6613      if (target === document || target === trapElement || trapElement.contains(target)) {
6614        return;
6615      }
6616
6617      const elements = SelectorEngine.focusableChildren(trapElement);
6618
6619      if (elements.length === 0) {
6620        trapElement.focus();
6621      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
6622        elements[elements.length - 1].focus();
6623      } else {
6624        elements[0].focus();
6625      }
6626    }
6627
6628    _handleKeydown(event) {
6629      if (event.key !== TAB_KEY) {
6630        return;
6631      }
6632
6633      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
6634    }
6635
6636    _getConfig(config) {
6637      config = { ...Default$6,
6638        ...(typeof config === 'object' ? config : {})
6639      };
6640      typeCheckConfig(NAME$7, config, DefaultType$6);
6641      return config;
6642    }
6643
6644  }
6645
6646  /**
6647   * --------------------------------------------------------------------------
6648   * Bootstrap (v5.1.3): modal.js
6649   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6650   * --------------------------------------------------------------------------
6651   */
6652  /**
6653   * ------------------------------------------------------------------------
6654   * Constants
6655   * ------------------------------------------------------------------------
6656   */
6657
6658  const NAME$6 = 'modal';
6659  const DATA_KEY$6 = 'bs.modal';
6660  const EVENT_KEY$6 = `.${DATA_KEY$6}`;
6661  const DATA_API_KEY$3 = '.data-api';
6662  const ESCAPE_KEY$1 = 'Escape';
6663  const Default$5 = {
6664    backdrop: true,
6665    keyboard: true,
6666    focus: true
6667  };
6668  const DefaultType$5 = {
6669    backdrop: '(boolean|string)',
6670    keyboard: 'boolean',
6671    focus: 'boolean'
6672  };
6673  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;
6674  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;
6675  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;
6676  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;
6677  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;
6678  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;
6679  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`;
6680  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;
6681  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;
6682  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;
6683  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
6684  const CLASS_NAME_OPEN = 'modal-open';
6685  const CLASS_NAME_FADE$3 = 'fade';
6686  const CLASS_NAME_SHOW$4 = 'show';
6687  const CLASS_NAME_STATIC = 'modal-static';
6688  const OPEN_SELECTOR$1 = '.modal.show';
6689  const SELECTOR_DIALOG = '.modal-dialog';
6690  const SELECTOR_MODAL_BODY = '.modal-body';
6691  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
6692  /**
6693   * ------------------------------------------------------------------------
6694   * Class Definition
6695   * ------------------------------------------------------------------------
6696   */
6697
6698  class Modal extends BaseComponent {
6699    constructor(element, config) {
6700      super(element);
6701      this._config = this._getConfig(config);
6702      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
6703      this._backdrop = this._initializeBackDrop();
6704      this._focustrap = this._initializeFocusTrap();
6705      this._isShown = false;
6706      this._ignoreBackdropClick = false;
6707      this._isTransitioning = false;
6708      this._scrollBar = new ScrollBarHelper();
6709    } // Getters
6710
6711
6712    static get Default() {
6713      return Default$5;
6714    }
6715
6716    static get NAME() {
6717      return NAME$6;
6718    } // Public
6719
6720
6721    toggle(relatedTarget) {
6722      return this._isShown ? this.hide() : this.show(relatedTarget);
6723    }
6724
6725    show(relatedTarget) {
6726      if (this._isShown || this._isTransitioning) {
6727        return;
6728      }
6729
6730      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
6731        relatedTarget
6732      });
6733
6734      if (showEvent.defaultPrevented) {
6735        return;
6736      }
6737
6738      this._isShown = true;
6739
6740      if (this._isAnimated()) {
6741        this._isTransitioning = true;
6742      }
6743
6744      this._scrollBar.hide();
6745
6746      document.body.classList.add(CLASS_NAME_OPEN);
6747
6748      this._adjustDialog();
6749
6750      this._setEscapeEvent();
6751
6752      this._setResizeEvent();
6753
6754      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
6755        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
6756          if (event.target === this._element) {
6757            this._ignoreBackdropClick = true;
6758          }
6759        });
6760      });
6761
6762      this._showBackdrop(() => this._showElement(relatedTarget));
6763    }
6764
6765    hide() {
6766      if (!this._isShown || this._isTransitioning) {
6767        return;
6768      }
6769
6770      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
6771
6772      if (hideEvent.defaultPrevented) {
6773        return;
6774      }
6775
6776      this._isShown = false;
6777
6778      const isAnimated = this._isAnimated();
6779
6780      if (isAnimated) {
6781        this._isTransitioning = true;
6782      }
6783
6784      this._setEscapeEvent();
6785
6786      this._setResizeEvent();
6787
6788      this._focustrap.deactivate();
6789
6790      this._element.classList.remove(CLASS_NAME_SHOW$4);
6791
6792      EventHandler.off(this._element, EVENT_CLICK_DISMISS);
6793      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
6794
6795      this._queueCallback(() => this._hideModal(), this._element, isAnimated);
6796    }
6797
6798    dispose() {
6799      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));
6800
6801      this._backdrop.dispose();
6802
6803      this._focustrap.deactivate();
6804
6805      super.dispose();
6806    }
6807
6808    handleUpdate() {
6809      this._adjustDialog();
6810    } // Private
6811
6812
6813    _initializeBackDrop() {
6814      return new Backdrop({
6815        isVisible: Boolean(this._config.backdrop),
6816        // 'static' option will be translated to true, and booleans will keep their value
6817        isAnimated: this._isAnimated()
6818      });
6819    }
6820
6821    _initializeFocusTrap() {
6822      return new FocusTrap({
6823        trapElement: this._element
6824      });
6825    }
6826
6827    _getConfig(config) {
6828      config = { ...Default$5,
6829        ...Manipulator.getDataAttributes(this._element),
6830        ...(typeof config === 'object' ? config : {})
6831      };
6832      typeCheckConfig(NAME$6, config, DefaultType$5);
6833      return config;
6834    }
6835
6836    _showElement(relatedTarget) {
6837      const isAnimated = this._isAnimated();
6838
6839      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
6840
6841      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
6842        // Don't move modal's DOM position
6843        document.body.append(this._element);
6844      }
6845
6846      this._element.style.display = 'block';
6847
6848      this._element.removeAttribute('aria-hidden');
6849
6850      this._element.setAttribute('aria-modal', true);
6851
6852      this._element.setAttribute('role', 'dialog');
6853
6854      this._element.scrollTop = 0;
6855
6856      if (modalBody) {
6857        modalBody.scrollTop = 0;
6858      }
6859
6860      if (isAnimated) {
6861        reflow(this._element);
6862      }
6863
6864      this._element.classList.add(CLASS_NAME_SHOW$4);
6865
6866      const transitionComplete = () => {
6867        if (this._config.focus) {
6868          this._focustrap.activate();
6869        }
6870
6871        this._isTransitioning = false;
6872        EventHandler.trigger(this._element, EVENT_SHOWN$3, {
6873          relatedTarget
6874        });
6875      };
6876
6877      this._queueCallback(transitionComplete, this._dialog, isAnimated);
6878    }
6879
6880    _setEscapeEvent() {
6881      if (this._isShown) {
6882        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
6883          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {
6884            event.preventDefault();
6885            this.hide();
6886          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {
6887            this._triggerBackdropTransition();
6888          }
6889        });
6890      } else {
6891        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);
6892      }
6893    }
6894
6895    _setResizeEvent() {
6896      if (this._isShown) {
6897        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());
6898      } else {
6899        EventHandler.off(window, EVENT_RESIZE);
6900      }
6901    }
6902
6903    _hideModal() {
6904      this._element.style.display = 'none';
6905
6906      this._element.setAttribute('aria-hidden', true);
6907
6908      this._element.removeAttribute('aria-modal');
6909
6910      this._element.removeAttribute('role');
6911
6912      this._isTransitioning = false;
6913
6914      this._backdrop.hide(() => {
6915        document.body.classList.remove(CLASS_NAME_OPEN);
6916
6917        this._resetAdjustments();
6918
6919        this._scrollBar.reset();
6920
6921        EventHandler.trigger(this._element, EVENT_HIDDEN$3);
6922      });
6923    }
6924
6925    _showBackdrop(callback) {
6926      EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
6927        if (this._ignoreBackdropClick) {
6928          this._ignoreBackdropClick = false;
6929          return;
6930        }
6931
6932        if (event.target !== event.currentTarget) {
6933          return;
6934        }
6935
6936        if (this._config.backdrop === true) {
6937          this.hide();
6938        } else if (this._config.backdrop === 'static') {
6939          this._triggerBackdropTransition();
6940        }
6941      });
6942
6943      this._backdrop.show(callback);
6944    }
6945
6946    _isAnimated() {
6947      return this._element.classList.contains(CLASS_NAME_FADE$3);
6948    }
6949
6950    _triggerBackdropTransition() {
6951      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
6952
6953      if (hideEvent.defaultPrevented) {
6954        return;
6955      }
6956
6957      const {
6958        classList,
6959        scrollHeight,
6960        style
6961      } = this._element;
6962      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed
6963
6964      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {
6965        return;
6966      }
6967
6968      if (!isModalOverflowing) {
6969        style.overflowY = 'hidden';
6970      }
6971
6972      classList.add(CLASS_NAME_STATIC);
6973
6974      this._queueCallback(() => {
6975        classList.remove(CLASS_NAME_STATIC);
6976
6977        if (!isModalOverflowing) {
6978          this._queueCallback(() => {
6979            style.overflowY = '';
6980          }, this._dialog);
6981        }
6982      }, this._dialog);
6983
6984      this._element.focus();
6985    } // ----------------------------------------------------------------------
6986    // the following methods are used to handle overflowing modals
6987    // ----------------------------------------------------------------------
6988
6989
6990    _adjustDialog() {
6991      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
6992
6993      const scrollbarWidth = this._scrollBar.getWidth();
6994
6995      const isBodyOverflowing = scrollbarWidth > 0;
6996
6997      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {
6998        this._element.style.paddingLeft = `${scrollbarWidth}px`;
6999      }
7000
7001      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {
7002        this._element.style.paddingRight = `${scrollbarWidth}px`;
7003      }
7004    }
7005
7006    _resetAdjustments() {
7007      this._element.style.paddingLeft = '';
7008      this._element.style.paddingRight = '';
7009    } // Static
7010
7011
7012    static jQueryInterface(config, relatedTarget) {
7013      return this.each(function () {
7014        const data = Modal.getOrCreateInstance(this, config);
7015
7016        if (typeof config !== 'string') {
7017          return;
7018        }
7019
7020        if (typeof data[config] === 'undefined') {
vendor: 4,925 bytes, lines 7021-7202
7021          throw new TypeError(`No method named "${config}"`);
7022        }
7023
7024        data[config](relatedTarget);
7025      });
7026    }
7027
7028  }
7029  /**
7030   * ------------------------------------------------------------------------
7031   * Data Api implementation
7032   * ------------------------------------------------------------------------
7033   */
7034
7035
7036  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
7037    const target = getElementFromSelector(this);
7038
7039    if (['A', 'AREA'].includes(this.tagName)) {
7040      event.preventDefault();
7041    }
7042
7043    EventHandler.one(target, EVENT_SHOW$3, showEvent => {
7044      if (showEvent.defaultPrevented) {
7045        // only register focus restorer if modal will actually get shown
7046        return;
7047      }
7048
7049      EventHandler.one(target, EVENT_HIDDEN$3, () => {
7050        if (isVisible(this)) {
7051          this.focus();
7052        }
7053      });
7054    }); // avoid conflict when clicking moddal toggler while another one is open
7055
7056    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
7057
7058    if (allReadyOpen) {
7059      Modal.getInstance(allReadyOpen).hide();
7060    }
7061
7062    const data = Modal.getOrCreateInstance(target);
7063    data.toggle(this);
7064  });
7065  enableDismissTrigger(Modal);
7066  /**
7067   * ------------------------------------------------------------------------
7068   * jQuery
7069   * ------------------------------------------------------------------------
7070   * add .Modal to jQuery only if jQuery is present
7071   */
7072
7073  defineJQueryPlugin(Modal);
7074
7075  /**
7076   * --------------------------------------------------------------------------
7077   * Bootstrap (v5.1.3): offcanvas.js
7078   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7079   * --------------------------------------------------------------------------
7080   */
7081  /**
7082   * ------------------------------------------------------------------------
7083   * Constants
7084   * ------------------------------------------------------------------------
7085   */
7086
7087  const NAME$5 = 'offcanvas';
7088  const DATA_KEY$5 = 'bs.offcanvas';
7089  const EVENT_KEY$5 = `.${DATA_KEY$5}`;
7090  const DATA_API_KEY$2 = '.data-api';
7091  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;
7092  const ESCAPE_KEY = 'Escape';
7093  const Default$4 = {
7094    backdrop: true,
7095    keyboard: true,
7096    scroll: false
7097  };
7098  const DefaultType$4 = {
7099    backdrop: 'boolean',
7100    keyboard: 'boolean',
7101    scroll: 'boolean'
7102  };
7103  const CLASS_NAME_SHOW$3 = 'show';
7104  const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
7105  const OPEN_SELECTOR = '.offcanvas.show';
7106  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;
7107  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;
7108  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;
7109  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;
7110  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;
7111  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;
7112  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
7113  /**
7114   * ------------------------------------------------------------------------
7115   * Class Definition
7116   * ------------------------------------------------------------------------
7117   */
7118
7119  class Offcanvas extends BaseComponent {
7120    constructor(element, config) {
7121      super(element);
7122      this._config = this._getConfig(config);
7123      this._isShown = false;
7124      this._backdrop = this._initializeBackDrop();
7125      this._focustrap = this._initializeFocusTrap();
7126
7127      this._addEventListeners();
7128    } // Getters
7129
7130
7131    static get NAME() {
7132      return NAME$5;
7133    }
7134
7135    static get Default() {
7136      return Default$4;
7137    } // Public
7138
7139
7140    toggle(relatedTarget) {
7141      return this._isShown ? this.hide() : this.show(relatedTarget);
7142    }
7143
7144    show(relatedTarget) {
7145      if (this._isShown) {
7146        return;
7147      }
7148
7149      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {
7150        relatedTarget
7151      });
7152
7153      if (showEvent.defaultPrevented) {
7154        return;
7155      }
7156
7157      this._isShown = true;
7158      this._element.style.visibility = 'visible';
7159
7160      this._backdrop.show();
7161
7162      if (!this._config.scroll) {
7163        new ScrollBarHelper().hide();
7164      }
7165
7166      this._element.removeAttribute('aria-hidden');
7167
7168      this._element.setAttribute('aria-modal', true);
7169
7170      this._element.setAttribute('role', 'dialog');
7171
7172      this._element.classList.add(CLASS_NAME_SHOW$3);
7173
7174      const completeCallBack = () => {
7175        if (!this._config.scroll) {
7176          this._focustrap.activate();
7177        }
7178
7179        EventHandler.trigger(this._element, EVENT_SHOWN$2, {
7180          relatedTarget
7181        });
7182      };
7183
7184      this._queueCallback(completeCallBack, this._element, true);
7185    }
7186
7187    hide() {
7188      if (!this._isShown) {
7189        return;
7190      }
7191
7192      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);
7193
7194      if (hideEvent.defaultPrevented) {
7195        return;
7196      }
7197
7198      this._focustrap.deactivate();
7199
7200      this._element.blur();
7201
7202      this._isShown = false;
7203
7204      this._element.classList.remove(CLASS_NAME_SHOW$3);
7205
7206      this._backdrop.hide();
7207
7208      const completeCallback = () => {
7209        this._element.setAttribute('aria-hidden', true);
7210
7211        this._element.removeAttribute('aria-modal');
7212
7213        this._element.removeAttribute('role');
7214
7215        this._element.style.visibility = 'hidden';
7216
7217        if (!this._config.scroll) {
7218          new ScrollBarHelper().reset();
7219        }
7220
7221        EventHandler.trigger(this._element, EVENT_HIDDEN$2);
7222      };
7223
7224      this._queueCallback(completeCallback, this._element, true);
7225    }
7226
7227    dispose() {
7228      this._backdrop.dispose();
7229
7230      this._focustrap.deactivate();
7231
7232      super.dispose();
7233    } // Private
7234
7235
7236    _getConfig(config) {
7237      config = { ...Default$4,
7238        ...Manipulator.getDataAttributes(this._element),
7239        ...(typeof config === 'object' ? config : {})
7240      };
7241      typeCheckConfig(NAME$5, config, DefaultType$4);
7242      return config;
7243    }
7244
7245    _initializeBackDrop() {
7246      return new Backdrop({
7247        className: CLASS_NAME_BACKDROP,
7248        isVisible: this._config.backdrop,
7249        isAnimated: true,
7250        rootElement: this._element.parentNode,
7251        clickCallback: () => this.hide()
7252      });
7253    }
7254
7255    _initializeFocusTrap() {
7256      return new FocusTrap({
7257        trapElement: this._element
7258      });
7259    }
7260
7261    _addEventListeners() {
7262      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
7263        if (this._config.keyboard && event.key === ESCAPE_KEY) {
7264          this.hide();
7265        }
7266      });
7267    } // Static
7268
7269
7270    static jQueryInterface(config) {
7271      return this.each(function () {
7272        const data = Offcanvas.getOrCreateInstance(this, config);
7273
7274        if (typeof config !== 'string') {
7275          return;
7276        }
7277
7278        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
7279          throw new TypeError(`No method named "${config}"`);
7280        }
7281
7282        data[config](this);
7283      });
7284    }
7285
7286  }
7287  /**
7288   * ------------------------------------------------------------------------
7289   * Data Api implementation
7290   * ------------------------------------------------------------------------
7291   */
7292
7293
7294  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
7295    const target = getElementFromSelector(this);
7296
7297    if (['A', 'AREA'].includes(this.tagName)) {
7298      event.preventDefault();
7299    }
7300
7301    if (isDisabled(this)) {
7302      return;
7303    }
7304
7305    EventHandler.one(target, EVENT_HIDDEN$2, () => {
7306      // focus on trigger when it is closed
7307      if (isVisible(this)) {
7308        this.focus();
7309      }
7310    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open
7311
7312    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
7313
7314    if (allReadyOpen && allReadyOpen !== target) {
7315      Offcanvas.getInstance(allReadyOpen).hide();
7316    }
7317
7318    const data = Offcanvas.getOrCreateInstance(target);
7319    data.toggle(this);
7320  });
7321  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));
7322  enableDismissTrigger(Offcanvas);
7323  /**
7324   * ------------------------------------------------------------------------
7325   * jQuery
7326   * ------------------------------------------------------------------------
7327   */
7328
7329  defineJQueryPlugin(Offcanvas);
7330
7331  /**
7332   * --------------------------------------------------------------------------
7333   * Bootstrap (v5.1.3): util/sanitizer.js
7334   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7335   * --------------------------------------------------------------------------
7336   */
7337  const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
7338  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
7339  /**
7340   * A pattern that recognizes a commonly useful subset of URLs that are safe.
7341   *
7342   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
7343   */
7344
7345  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
7346  /**
7347   * A pattern that matches safe data URLs. Only matches image, video and audio types.
7348   *
7349   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
7350   */
7351
7352  const 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;
7353
7354  const allowedAttribute = (attribute, allowedAttributeList) => {
7355    const attributeName = attribute.nodeName.toLowerCase();
7356
7357    if (allowedAttributeList.includes(attributeName)) {
7358      if (uriAttributes.has(attributeName)) {
7359        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
7360      }
7361
7362      return true;
7363    }
7364
7365    const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute.
7366
7367    for (let i = 0, len = regExp.length; i < len; i++) {
7368      if (regExp[i].test(attributeName)) {
7369        return true;
7370      }
7371    }
7372
7373    return false;
7374  };
7375
7376  const DefaultAllowlist = {
7377    // Global attributes allowed on any supplied element below.
7378    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
7379    a: ['target', 'href', 'title', 'rel'],
7380    area: [],
7381    b: [],
7382    br: [],
7383    col: [],
7384    code: [],
7385    div: [],
7386    em: [],
7387    hr: [],
7388    h1: [],
7389    h2: [],
7390    h3: [],
7391    h4: [],
7392    h5: [],
7393    h6: [],
7394    i: [],
7395    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
7396    li: [],
7397    ol: [],
7398    p: [],
7399    pre: [],
7400    s: [],
7401    small: [],
7402    span: [],
7403    sub: [],
7404    sup: [],
7405    strong: [],
7406    u: [],
7407    ul: []
7408  };
7409  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
7410    if (!unsafeHtml.length) {
7411      return unsafeHtml;
7412    }
7413
7414    if (sanitizeFn && typeof sanitizeFn === 'function') {
7415      return sanitizeFn(unsafeHtml);
7416    }
7417
7418    const domParser = new window.DOMParser();
7419    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
7420    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
7421
7422    for (let i = 0, len = elements.length; i < len; i++) {
7423      const element = elements[i];
7424      const elementName = element.nodeName.toLowerCase();
7425
7426      if (!Object.keys(allowList).includes(elementName)) {
7427        element.remove();
7428        continue;
7429      }
7430
7431      const attributeList = [].concat(...element.attributes);
7432      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
7433      attributeList.forEach(attribute => {
7434        if (!allowedAttribute(attribute, allowedAttributes)) {
7435          element.removeAttribute(attribute.nodeName);
7436        }
7437      });
7438    }
7439
7440    return createdDocument.body.innerHTML;
7441  }
7442
7443  /**
7444   * --------------------------------------------------------------------------
7445   * Bootstrap (v5.1.3): tooltip.js
7446   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
7447   * --------------------------------------------------------------------------
7448   */
7449  /**
7450   * ------------------------------------------------------------------------
7451   * Constants
7452   * ------------------------------------------------------------------------
7453   */
7454
7455  const NAME$4 = 'tooltip';
7456  const DATA_KEY$4 = 'bs.tooltip';
7457  const EVENT_KEY$4 = `.${DATA_KEY$4}`;
7458  const CLASS_PREFIX$1 = 'bs-tooltip';
7459  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
7460  const DefaultType$3 = {
7461    animation: 'boolean',
7462    template: 'string',
7463    title: '(string|element|function)',
7464    trigger: 'string',
7465    delay: '(number|object)',
7466    html: 'boolean',
7467    selector: '(string|boolean)',
7468    placement: '(string|function)',
7469    offset: '(array|string|function)',
7470    container: '(string|element|boolean)',
7471    fallbackPlacements: 'array',
7472    boundary: '(string|element)',
7473    customClass: '(string|function)',
7474    sanitize: 'boolean',
7475    sanitizeFn: '(null|function)',
7476    allowList: 'object',
7477    popperConfig: '(null|object|function)'
7478  };
7479  const AttachmentMap = {
7480    AUTO: 'auto',
7481    TOP: 'top',
7482    RIGHT: isRTL() ? 'left' : 'right',
7483    BOTTOM: 'bottom',
7484    LEFT: isRTL() ? 'right' : 'left'
7485  };
7486  const Default$3 = {
7487    animation: true,
7488    template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
7489    trigger: 'hover focus',
7490    title: '',
7491    delay: 0,
7492    html: false,
7493    selector: false,
7494    placement: 'top',
7495    offset: [0, 0],
7496    container: false,
7497    fallbackPlacements: ['top', 'right', 'bottom', 'left'],
7498    boundary: 'clippingParents',
7499    customClass: '',
7500    sanitize: true,
7501    sanitizeFn: null,
7502    allowList: DefaultAllowlist,
7503    popperConfig: null
7504  };
7505  const Event$2 = {
7506    HIDE: `hide${EVENT_KEY$4}`,
7507    HIDDEN: `hidden${EVENT_KEY$4}`,
7508    SHOW: `show${EVENT_KEY$4}`,
7509    SHOWN: `shown${EVENT_KEY$4}`,
7510    INSERTED: `inserted${EVENT_KEY$4}`,
7511    CLICK: `click${EVENT_KEY$4}`,
7512    FOCUSIN: `focusin${EVENT_KEY$4}`,
7513    FOCUSOUT: `focusout${EVENT_KEY$4}`,
7514    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,
7515    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`
7516  };
7517  const CLASS_NAME_FADE$2 = 'fade';
7518  const CLASS_NAME_MODAL = 'modal';
7519  const CLASS_NAME_SHOW$2 = 'show';
7520  const HOVER_STATE_SHOW = 'show';
7521  const HOVER_STATE_OUT = 'out';
7522  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
7523  const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
7524  const EVENT_MODAL_HIDE = 'hide.bs.modal';
7525  const TRIGGER_HOVER = 'hover';
7526  const TRIGGER_FOCUS = 'focus';
7527  const TRIGGER_CLICK = 'click';
7528  const TRIGGER_MANUAL = 'manual';
7529  /**
7530   * ------------------------------------------------------------------------
7531   * Class Definition
7532   * ------------------------------------------------------------------------
7533   */
7534
7535  class Tooltip extends BaseComponent {
7536    constructor(element, config) {
7537      if (typeof Popper === 'undefined') {
7538        throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
7539      }
7540
7541      super(element); // private
7542
7543      this._isEnabled = true;
7544      this._timeout = 0;
7545      this._hoverState = '';
7546      this._activeTrigger = {};
7547      this._popper = null; // Protected
7548
7549      this._config = this._getConfig(config);
7550      this.tip = null;
7551
7552      this._setListeners();
7553    } // Getters
7554
7555
7556    static get Default() {
7557      return Default$3;
7558    }
7559
7560    static get NAME() {
7561      return NAME$4;
7562    }
7563
7564    static get Event() {
7565      return Event$2;
7566    }
7567
7568    static get DefaultType() {
7569      return DefaultType$3;
7570    } // Public
7571
7572
7573    enable() {
7574      this._isEnabled = true;
7575    }
7576
7577    disable() {
7578      this._isEnabled = false;
7579    }
7580
7581    toggleEnabled() {
7582      this._isEnabled = !this._isEnabled;
7583    }
7584
7585    toggle(event) {
7586      if (!this._isEnabled) {
7587        return;
7588      }
7589
7590      if (event) {
7591        const context = this._initializeOnDelegatedTarget(event);
7592
7593        context._activeTrigger.click = !context._activeTrigger.click;
7594
7595        if (context._isWithActiveTrigger()) {
7596          context._enter(null, context);
7597        } else {
7598          context._leave(null, context);
7599        }
7600      } else {
7601        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) {
7602          this._leave(null, this);
7603
7604          return;
7605        }
7606
7607        this._enter(null, this);
7608      }
7609    }
7610
7611    dispose() {
7612      clearTimeout(this._timeout);
7613      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
7614
7615      if (this.tip) {
7616        this.tip.remove();
7617      }
7618
7619      this._disposePopper();
7620
7621      super.dispose();
7622    }
7623
7624    show() {
7625      if (this._element.style.display === 'none') {
7626        throw new Error('Please use show on visible elements');
7627      }
7628
7629      if (!(this.isWithContent() && this._isEnabled)) {
7630        return;
7631      }
7632
7633      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);
7634      const shadowRoot = findShadowRoot(this._element);
7635      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);
7636
7637      if (showEvent.defaultPrevented || !isInTheDom) {
7638        return;
7639      } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title`
7640      // This will be removed later in favor of a `setContent` method
7641
7642
7643      if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {
7644        this._disposePopper();
7645
7646        this.tip.remove();
7647        this.tip = null;
7648      }
7649
7650      const tip = this.getTipElement();
7651      const tipId = getUID(this.constructor.NAME);
7652      tip.setAttribute('id', tipId);
7653
7654      this._element.setAttribute('aria-describedby', tipId);
7655
7656      if (this._config.animation) {
7657        tip.classList.add(CLASS_NAME_FADE$2);
7658      }
7659
7660      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
7661
7662      const attachment = this._getAttachment(placement);
7663
7664      this._addAttachmentClass(attachment);
7665
7666      const {
7667        container
7668      } = this._config;
7669      Data.set(tip, this.constructor.DATA_KEY, this);
7670
7671      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
7672        container.append(tip);
7673        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);
7674      }
7675
7676      if (this._popper) {
7677        this._popper.update();
7678      } else {
7679        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));
7680      }
7681
7682      tip.classList.add(CLASS_NAME_SHOW$2);
7683
7684      const customClass = this._resolvePossibleFunction(this._config.customClass);
7685
7686      if (customClass) {
7687        tip.classList.add(...customClass.split(' '));
7688      } // If this is a touch-enabled device we add extra
7689      // empty mouseover listeners to the body's immediate children;
7690      // only needed because of broken event delegation on iOS
7691      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
7692
7693
7694      if ('ontouchstart' in document.documentElement) {
7695        [].concat(...document.body.children).forEach(element => {
7696          EventHandler.on(element, 'mouseover', noop);
7697        });
7698      }
7699
7700      const complete = () => {
7701        const prevHoverState = this._hoverState;
7702        this._hoverState = null;
7703        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);
7704
7705        if (prevHoverState === HOVER_STATE_OUT) {
7706          this._leave(null, this);
7707        }
7708      };
7709
7710      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
7711
7712      this._queueCallback(complete, this.tip, isAnimated);
7713    }
7714
7715    hide() {
7716      if (!this._popper) {
7717        return;
7718      }
7719
7720      const tip = this.getTipElement();
7721
7722      const complete = () => {
7723        if (this._isWithActiveTrigger()) {
7724          return;
7725        }
7726
7727        if (this._hoverState !== HOVER_STATE_SHOW) {
7728          tip.remove();
7729        }
7730
7731        this._cleanTipClass();
7732
7733        this._element.removeAttribute('aria-describedby');
7734
7735        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);
7736
7737        this._disposePopper();
7738      };
7739
7740      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);
7741
7742      if (hideEvent.defaultPrevented) {
7743        return;
7744      }
7745
7746      tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra
7747      // empty mouseover listeners we added for iOS support
7748
7749      if ('ontouchstart' in document.documentElement) {
7750        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));
7751      }
7752
7753      this._activeTrigger[TRIGGER_CLICK] = false;
7754      this._activeTrigger[TRIGGER_FOCUS] = false;
7755      this._activeTrigger[TRIGGER_HOVER] = false;
7756      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
7757
7758      this._queueCallback(complete, this.tip, isAnimated);
7759
7760      this._hoverState = '';
7761    }
7762
7763    update() {
7764      if (this._popper !== null) {
7765        this._popper.update();
7766      }
7767    } // Protected
7768
7769
7770    isWithContent() {
7771      return Boolean(this.getTitle());
7772    }
7773
7774    getTipElement() {
7775      if (this.tip) {
7776        return this.tip;
7777      }
7778
7779      const element = document.createElement('div');
7780      element.innerHTML = this._config.template;
7781      const tip = element.children[0];
7782      this.setContent(tip);
7783      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
7784      this.tip = tip;
7785      return this.tip;
7786    }
7787
7788    setContent(tip) {
7789      this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER);
7790    }
7791
7792    _sanitizeAndSetContent(template, content, selector) {
7793      const templateElement = SelectorEngine.findOne(selector, template);
7794
7795      if (!content && templateElement) {
7796        templateElement.remove();
7797        return;
7798      } // we use append for html objects to maintain js events
7799
7800
7801      this.setElementContent(templateElement, content);
7802    }
7803
7804    setElementContent(element, content) {
7805      if (element === null) {
7806        return;
7807      }
7808
7809      if (isElement$1(content)) {
7810        content = getElement(content); // content is a DOM node or a jQuery
7811
7812        if (this._config.html) {
7813          if (content.parentNode !== element) {
7814            element.innerHTML = '';
7815            element.append(content);
7816          }
7817        } else {
7818          element.textContent = content.textContent;
7819        }
7820
7821        return;
7822      }
7823
7824      if (this._config.html) {
7825        if (this._config.sanitize) {
7826          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);
7827        }
7828
7829        element.innerHTML = content;
7830      } else {
7831        element.textContent = content;
7832      }
7833    }
7834
7835    getTitle() {
7836      const title = this._element.getAttribute('data-bs-original-title') || this._config.title;
7837
7838      return this._resolvePossibleFunction(title);
7839    }
7840
7841    updateAttachment(attachment) {
7842      if (attachment === 'right') {
7843        return 'end';
7844      }
7845
7846      if (attachment === 'left') {
7847        return 'start';
7848      }
7849
7850      return attachment;
7851    } // Private
7852
7853
7854    _initializeOnDelegatedTarget(event, context) {
7855      return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
7856    }
7857
7858    _getOffset() {
7859      const {
7860        offset
7861      } = this._config;
7862
7863      if (typeof offset === 'string') {
7864        return offset.split(',').map(val => Number.parseInt(val, 10));
7865      }
7866
7867      if (typeof offset === 'function') {
7868        return popperData => offset(popperData, this._element);
7869      }
7870
7871      return offset;
7872    }
7873
7874    _resolvePossibleFunction(content) {
7875      return typeof content === 'function' ? content.call(this._element) : content;
7876    }
7877
7878    _getPopperConfig(attachment) {
7879      const defaultBsPopperConfig = {
7880        placement: attachment,
7881        modifiers: [{
7882          name: 'flip',
7883          options: {
7884            fallbackPlacements: this._config.fallbackPlacements
7885          }
7886        }, {
7887          name: 'offset',
7888          options: {
7889            offset: this._getOffset()
7890          }
7891        }, {
7892          name: 'preventOverflow',
7893          options: {
7894            boundary: this._config.boundary
7895          }
7896        }, {
7897          name: 'arrow',
7898          options: {
7899            element: `.${this.constructor.NAME}-arrow`
7900          }
7901        }, {
7902          name: 'onChange',
7903          enabled: true,
7904          phase: 'afterWrite',
7905          fn: data => this._handlePopperPlacementChange(data)
7906        }],
7907        onFirstUpdate: data => {
7908          if (data.options.placement !== data.placement) {
7909            this._handlePopperPlacementChange(data);
7910          }
7911        }
7912      };
7913      return { ...defaultBsPopperConfig,
7914        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
7915      };
7916    }
7917
7918    _addAttachmentClass(attachment) {
7919      this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`);
7920    }
7921
7922    _getAttachment(placement) {
7923      return AttachmentMap[placement.toUpperCase()];
7924    }
7925
7926    _setListeners() {
7927      const triggers = this._config.trigger.split(' ');
7928
7929      triggers.forEach(trigger => {
7930        if (trigger === 'click') {
7931          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));
7932        } else if (trigger !== TRIGGER_MANUAL) {
7933          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;
7934          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;
7935          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));
7936          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));
7937        }
7938      });
7939
7940      this._hideModalHandler = () => {
7941        if (this._element) {
7942          this.hide();
7943        }
7944      };
7945
7946      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
7947
7948      if (this._config.selector) {
7949        this._config = { ...this._config,
7950          trigger: 'manual',
7951          selector: ''
7952        };
7953      } else {
7954        this._fixTitle();
7955      }
7956    }
7957
7958    _fixTitle() {
7959      const title = this._element.getAttribute('title');
7960
7961      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');
7962
7963      if (title || originalTitleType !== 'string') {
7964        this._element.setAttribute('data-bs-original-title', title || '');
7965
7966        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {
7967          this._element.setAttribute('aria-label', title);
7968        }
7969
7970        this._element.setAttribute('title', '');
7971      }
7972    }
7973
7974    _enter(event, context) {
7975      context = this._initializeOnDelegatedTarget(event, context);
7976
7977      if (event) {
7978        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
7979      }
7980
7981      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) {
7982        context._hoverState = HOVER_STATE_SHOW;
7983        return;
7984      }
7985
7986      clearTimeout(context._timeout);
7987      context._hoverState = HOVER_STATE_SHOW;
7988
7989      if (!context._config.delay || !context._config.delay.show) {
7990        context.show();
7991        return;
7992      }
7993
7994      context._timeout = setTimeout(() => {
7995        if (context._hoverState === HOVER_STATE_SHOW) {
7996          context.show();
7997        }
7998      }, context._config.delay.show);
7999    }
8000
8001    _leave(event, context) {
8002      context = this._initializeOnDelegatedTarget(event, context);
8003
8004      if (event) {
8005        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
8006      }
8007
8008      if (context._isWithActiveTrigger()) {
8009        return;
8010      }
8011
8012      clearTimeout(context._timeout);
8013      context._hoverState = HOVER_STATE_OUT;
8014
8015      if (!context._config.delay || !context._config.delay.hide) {
8016        context.hide();
8017        return;
8018      }
8019
8020      context._timeout = setTimeout(() => {
8021        if (context._hoverState === HOVER_STATE_OUT) {
8022          context.hide();
8023        }
8024      }, context._config.delay.hide);
8025    }
8026
8027    _isWithActiveTrigger() {
8028      for (const trigger in this._activeTrigger) {
8029        if (this._activeTrigger[trigger]) {
8030          return true;
8031        }
8032      }
8033
8034      return false;
8035    }
8036
8037    _getConfig(config) {
8038      const dataAttributes = Manipulator.getDataAttributes(this._element);
8039      Object.keys(dataAttributes).forEach(dataAttr => {
8040        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {
8041          delete dataAttributes[dataAttr];
8042        }
8043      });
8044      config = { ...this.constructor.Default,
8045        ...dataAttributes,
8046        ...(typeof config === 'object' && config ? config : {})
8047      };
8048      config.container = config.container === false ? document.body : getElement(config.container);
8049
8050      if (typeof config.delay === 'number') {
8051        config.delay = {
8052          show: config.delay,
8053          hide: config.delay
8054        };
8055      }
8056
8057      if (typeof config.title === 'number') {
8058        config.title = config.title.toString();
8059      }
8060
8061      if (typeof config.content === 'number') {
8062        config.content = config.content.toString();
8063      }
8064
8065      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
8066
8067      if (config.sanitize) {
8068        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);
8069      }
8070
8071      return config;
8072    }
8073
8074    _getDelegateConfig() {
8075      const config = {};
8076
8077      for (const key in this._config) {
8078        if (this.constructor.Default[key] !== this._config[key]) {
8079          config[key] = this._config[key];
8080        }
8081      } // In the future can be replaced with:
8082      // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
8083      // `Object.fromEntries(keysWithDifferentValues)`
8084
8085
8086      return config;
8087    }
8088
8089    _cleanTipClass() {
8090      const tip = this.getTipElement();
8091      const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g');
8092      const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex);
8093
8094      if (tabClass !== null && tabClass.length > 0) {
8095        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
8096      }
8097    }
8098
8099    _getBasicClassPrefix() {
8100      return CLASS_PREFIX$1;
8101    }
8102
8103    _handlePopperPlacementChange(popperData) {
8104      const {
8105        state
8106      } = popperData;
8107
8108      if (!state) {
8109        return;
8110      }
8111
8112      this.tip = state.elements.popper;
8113
8114      this._cleanTipClass();
8115
8116      this._addAttachmentClass(this._getAttachment(state.placement));
8117    }
8118
8119    _disposePopper() {
8120      if (this._popper) {
8121        this._popper.destroy();
8122
8123        this._popper = null;
8124      }
8125    } // Static
8126
8127
8128    static jQueryInterface(config) {
8129      return this.each(function () {
8130        const data = Tooltip.getOrCreateInstance(this, config);
8131
8132        if (typeof config === 'string') {
8133          if (typeof data[config] === 'undefined') {
8134            throw new TypeError(`No method named "${config}"`);
8135          }
8136
8137          data[config]();
8138        }
8139      });
8140    }
8141
8142  }
8143  /**
8144   * ------------------------------------------------------------------------
8145   * jQuery
8146   * ------------------------------------------------------------------------
8147   * add .Tooltip to jQuery only if jQuery is present
8148   */
8149
8150
8151  defineJQueryPlugin(Tooltip);
8152
8153  /**
8154   * --------------------------------------------------------------------------
8155   * Bootstrap (v5.1.3): popover.js
8156   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8157   * --------------------------------------------------------------------------
8158   */
8159  /**
8160   * ------------------------------------------------------------------------
8161   * Constants
8162   * ------------------------------------------------------------------------
8163   */
8164
8165  const NAME$3 = 'popover';
8166  const DATA_KEY$3 = 'bs.popover';
8167  const EVENT_KEY$3 = `.${DATA_KEY$3}`;
8168  const CLASS_PREFIX = 'bs-popover';
8169  const Default$2 = { ...Tooltip.Default,
8170    placement: 'right',
8171    offset: [0, 8],
8172    trigger: 'click',
8173    content: '',
8174    template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
8175  };
8176  const DefaultType$2 = { ...Tooltip.DefaultType,
8177    content: '(string|element|function)'
8178  };
8179  const Event$1 = {
8180    HIDE: `hide${EVENT_KEY$3}`,
8181    HIDDEN: `hidden${EVENT_KEY$3}`,
8182    SHOW: `show${EVENT_KEY$3}`,
8183    SHOWN: `shown${EVENT_KEY$3}`,
8184    INSERTED: `inserted${EVENT_KEY$3}`,
8185    CLICK: `click${EVENT_KEY$3}`,
8186    FOCUSIN: `focusin${EVENT_KEY$3}`,
8187    FOCUSOUT: `focusout${EVENT_KEY$3}`,
8188    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,
8189    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`
8190  };
8191  const SELECTOR_TITLE = '.popover-header';
8192  const SELECTOR_CONTENT = '.popover-body';
8193  /**
8194   * ------------------------------------------------------------------------
8195   * Class Definition
8196   * ------------------------------------------------------------------------
8197   */
8198
8199  class Popover extends Tooltip {
8200    // Getters
8201    static get Default() {
8202      return Default$2;
8203    }
8204
8205    static get NAME() {
8206      return NAME$3;
8207    }
8208
8209    static get Event() {
8210      return Event$1;
8211    }
8212
8213    static get DefaultType() {
8214      return DefaultType$2;
8215    } // Overrides
8216
8217
8218    isWithContent() {
8219      return this.getTitle() || this._getContent();
8220    }
8221
8222    setContent(tip) {
8223      this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);
8224
8225      this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);
8226    } // Private
8227
8228
8229    _getContent() {
8230      return this._resolvePossibleFunction(this._config.content);
8231    }
8232
8233    _getBasicClassPrefix() {
8234      return CLASS_PREFIX;
8235    } // Static
8236
8237
8238    static jQueryInterface(config) {
8239      return this.each(function () {
8240        const data = Popover.getOrCreateInstance(this, config);
8241
8242        if (typeof config === 'string') {
8243          if (typeof data[config] === 'undefined') {
8244            throw new TypeError(`No method named "${config}"`);
8245          }
8246
8247          data[config]();
8248        }
8249      });
8250    }
8251
8252  }
8253  /**
8254   * ------------------------------------------------------------------------
8255   * jQuery
8256   * ------------------------------------------------------------------------
8257   * add .Popover to jQuery only if jQuery is present
8258   */
8259
8260
8261  defineJQueryPlugin(Popover);
8262
8263  /**
8264   * --------------------------------------------------------------------------
8265   * Bootstrap (v5.1.3): scrollspy.js
8266   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8267   * --------------------------------------------------------------------------
8268   */
8269  /**
8270   * ------------------------------------------------------------------------
8271   * Constants
8272   * ------------------------------------------------------------------------
8273   */
8274
8275  const NAME$2 = 'scrollspy';
8276  const DATA_KEY$2 = 'bs.scrollspy';
8277  const EVENT_KEY$2 = `.${DATA_KEY$2}`;
8278  const DATA_API_KEY$1 = '.data-api';
8279  const Default$1 = {
8280    offset: 10,
8281    method: 'auto',
8282    target: ''
8283  };
8284  const DefaultType$1 = {
8285    offset: 'number',
8286    method: 'string',
8287    target: '(string|element)'
8288  };
8289  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
8290  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;
8291  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;
8292  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
8293  const CLASS_NAME_ACTIVE$1 = 'active';
8294  const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
8295  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
8296  const SELECTOR_NAV_LINKS = '.nav-link';
8297  const SELECTOR_NAV_ITEMS = '.nav-item';
8298  const SELECTOR_LIST_ITEMS = '.list-group-item';
8299  const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
8300  const SELECTOR_DROPDOWN$1 = '.dropdown';
8301  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
8302  const METHOD_OFFSET = 'offset';
8303  const METHOD_POSITION = 'position';
8304  /**
8305   * ------------------------------------------------------------------------
8306   * Class Definition
8307   * ------------------------------------------------------------------------
8308   */
8309
8310  class ScrollSpy extends BaseComponent {
8311    constructor(element, config) {
8312      super(element);
8313      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
8314      this._config = this._getConfig(config);
8315      this._offsets = [];
8316      this._targets = [];
8317      this._activeTarget = null;
8318      this._scrollHeight = 0;
8319      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());
8320      this.refresh();
8321
8322      this._process();
8323    } // Getters
8324
8325
8326    static get Default() {
8327      return Default$1;
8328    }
8329
8330    static get NAME() {
8331      return NAME$2;
8332    } // Public
8333
8334
8335    refresh() {
8336      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
8337      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
8338      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
8339      this._offsets = [];
8340      this._targets = [];
8341      this._scrollHeight = this._getScrollHeight();
8342      const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target);
8343      targets.map(element => {
8344        const targetSelector = getSelectorFromElement(element);
8345        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;
8346
8347        if (target) {
8348          const targetBCR = target.getBoundingClientRect();
8349
8350          if (targetBCR.width || targetBCR.height) {
8351            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
8352          }
8353        }
8354
8355        return null;
8356      }).filter(item => item).sort((a, b) =>
8356 a[0] - b[0]).forEach(item => {
8357        this._offsets.push(item[0]);
8358
8359        this._targets.push(item[1]);
8360      });
8361    }
8362
8363    dispose() {
8364      EventHandler.off(this._scrollElement, EVENT_KEY$2);
8365      super.dispose();
8366    } // Private
8367
8368
8369    _getConfig(config) {
8370      config = { ...Default$1,
8371        ...Manipulator.getDataAttributes(this._element),
8372        ...(typeof config === 'object' && config ? config : {})
8373      };
8374      config.target = getElement(config.target) || document.documentElement;
8375      typeCheckConfig(NAME$2, config, DefaultType$1);
8376      return config;
8377    }
8378
8379    _getScrollTop() {
8380      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
8381    }
8382
8383    _getScrollHeight() {
8384      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
8385    }
8386
8387    _getOffsetHeight() {
8388      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
8389    }
8390
8391    _process() {
8392      const scrollTop = this._getScrollTop() + this._config.offset;
8393
8394      const scrollHeight = this._getScrollHeight();
8395
8396      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
8397
8398      if (this._scrollHeight !== scrollHeight) {
8399        this.refresh();
8400      }
8401
8402      if (scrollTop >= maxScroll) {
8403        const target = this._targets[this._targets.length - 1];
8404
8405        if (this._activeTarget !== target) {
8406          this._activate(target);
8407        }
8408
8409        return;
8410      }
8411
8412      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
8413        this._activeTarget = null;
8414
8415        this._clear();
8416
8417        return;
8418      }
8419
8420      for (let i = this._offsets.length; i--;) {
8421        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
8422
8423        if (isActiveTarget) {
8424          this._activate(this._targets[i]);
8425        }
8426      }
8427    }
8428
8429    _activate(target) {
8430      this._activeTarget = target;
8431
8432      this._clear();
8433
8434      const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
8435      const link = SelectorEngine.findOne(queries.join(','), this._config.target);
8436      link.classList.add(CLASS_NAME_ACTIVE$1);
8437
8438      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
8439        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);
8440      } else {
8441        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {
8442          // Set triggered links parents as active
8443          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
8444          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item
8445
8446          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
8447            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));
8448          });
8449        });
8450      }
8451
8452      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {
8453        relatedTarget: target
8454      });
8455    }
8456
8457    _clear() {
8458      SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));
8459    } // Static
8460
8461
8462    static jQueryInterface(config) {
8463      return this.each(function () {
8464        const data = ScrollSpy.getOrCreateInstance(this, config);
8465
8466        if (typeof config !== 'string') {
8467          return;
8468        }
8469
8470        if (typeof data[config] === 'undefined') {
8471          throw new TypeError(`No method named "${config}"`);
8472        }
8473
8474        data[config]();
8475      });
8476    }
8477
8478  }
8479  /**
8480   * ------------------------------------------------------------------------
8481   * Data Api implementation
8482   * ------------------------------------------------------------------------
8483   */
8484
8485
8486  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
8487    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
8488  });
8489  /**
8490   * ------------------------------------------------------------------------
8491   * jQuery
8492   * ------------------------------------------------------------------------
8493   * add .ScrollSpy to jQuery only if jQuery is present
8494   */
8495
8496  defineJQueryPlugin(ScrollSpy);
8497
8498  /**
8499   * --------------------------------------------------------------------------
8500   * Bootstrap (v5.1.3): tab.js
8501   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8502   * --------------------------------------------------------------------------
8503   */
8504  /**
8505   * ------------------------------------------------------------------------
8506   * Constants
8507   * ------------------------------------------------------------------------
8508   */
8509
8510  const NAME$1 = 'tab';
8511  const DATA_KEY$1 = 'bs.tab';
8512  const EVENT_KEY$1 = `.${DATA_KEY$1}`;
8513  const DATA_API_KEY = '.data-api';
8514  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
8515  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
8516  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
8517  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
8518  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;
8519  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
8520  const CLASS_NAME_ACTIVE = 'active';
8521  const CLASS_NAME_FADE$1 = 'fade';
8522  const CLASS_NAME_SHOW$1 = 'show';
8523  const SELECTOR_DROPDOWN = '.dropdown';
8524  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
8525  const SELECTOR_ACTIVE = '.active';
8526  const SELECTOR_ACTIVE_UL = ':scope > li > .active';
8527  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
8528  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
8529  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
8530  /**
8531   * ------------------------------------------------------------------------
8532   * Class Definition
8533   * ------------------------------------------------------------------------
8534   */
8535
8536  class Tab extends BaseComponent {
8537    // Getters
8538    static get NAME() {
8539      return NAME$1;
8540    } // Public
8541
8542
8543    show() {
8544      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
8545        return;
8546      }
8547
8548      let previous;
8549      const target = getElementFromSelector(this._element);
8550
8551      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
8552
8553      if (listElement) {
8554        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
8555        previous = SelectorEngine.find(itemSelector, listElement);
8556        previous = previous[previous.length - 1];
8557      }
8558
8559      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {
8560        relatedTarget: this._element
8561      }) : null;
8562      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {
8563        relatedTarget: previous
8564      });
8565
8566      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
8567        return;
8568      }
8569
8570      this._activate(this._element, listElement);
8571
8572      const complete = () => {
8573        EventHandler.trigger(previous, EVENT_HIDDEN$1, {
8574          relatedTarget: this._element
8575        });
8576        EventHandler.trigger(this._element, EVENT_SHOWN$1, {
8577          relatedTarget: previous
8578        });
8579      };
8580
8581      if (target) {
8582        this._activate(target, target.parentNode, complete);
8583      } else {
8584        complete();
8585      }
8586    } // Private
8587
8588
8589    _activate(element, container, callback) {
8590      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);
8591      const active = activeElements[0];
8592      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);
8593
8594      const complete = () => this._transitionComplete(element, active, callback);
8595
8596      if (active && isTransitioning) {
8597        active.classList.remove(CLASS_NAME_SHOW$1);
8598
8599        this._queueCallback(complete, element, true);
8600      } else {
8601        complete();
8602      }
8603    }
8604
8605    _transitionComplete(element, active, callback) {
8606      if (active) {
8607        active.classList.remove(CLASS_NAME_ACTIVE);
8608        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
8609
8610        if (dropdownChild) {
8611          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
8612        }
8613
8614        if (active.getAttribute('role') === 'tab') {
8615          active.setAttribute('aria-selected', false);
8616        }
8617      }
8618
8619      element.classList.add(CLASS_NAME_ACTIVE);
8620
8621      if (element.getAttribute('role') === 'tab') {
8622        element.setAttribute('aria-selected', true);
8623      }
8624
8625      reflow(element);
8626
8627      if (element.classList.contains(CLASS_NAME_FADE$1)) {
8628        element.classList.add(CLASS_NAME_SHOW$1);
8629      }
8630
8631      let parent = element.parentNode;
8632
8633      if (parent && parent.nodeName === 'LI') {
8634        parent = parent.parentNode;
8635      }
8636
8637      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
8638        const dropdownElement = element.closest(SELECTOR_DROPDOWN);
8639
8640        if (dropdownElement) {
8641          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
8642        }
8643
8644        element.setAttribute('aria-expanded', true);
8645      }
8646
8647      if (callback) {
8648        callback();
8649      }
8650    } // Static
8651
8652
8653    static jQueryInterface(config) {
8654      return this.each(function () {
8655        const data = Tab.getOrCreateInstance(this);
8656
8657        if (typeof config === 'string') {
8658          if (typeof data[config] === 'undefined') {
8659            throw new TypeError(`No method named "${config}"`);
8660          }
8661
8662          data[config]();
8663        }
8664      });
8665    }
8666
8667  }
8668  /**
8669   * ------------------------------------------------------------------------
8670   * Data Api implementation
8671   * ------------------------------------------------------------------------
8672   */
8673
8674
8675  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
8676    if (['A', 'AREA'].includes(this.tagName)) {
8677      event.preventDefault();
8678    }
8679
8680    if (isDisabled(this)) {
8681      return;
8682    }
8683
8684    const data = Tab.getOrCreateInstance(this);
8685    data.show();
8686  });
8687  /**
8688   * ------------------------------------------------------------------------
8689   * jQuery
8690   * ------------------------------------------------------------------------
8691   * add .Tab to jQuery only if jQuery is present
8692   */
8693
8694  defineJQueryPlugin(Tab);
8695
8696  /**
8697   * --------------------------------------------------------------------------
8698   * Bootstrap (v5.1.3): toast.js
8699   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8700   * --------------------------------------------------------------------------
8701   */
8702  /**
8703   * ------------------------------------------------------------------------
8704   * Constants
8705   * ------------------------------------------------------------------------
8706   */
8707
8708  const NAME = 'toast';
8709  const DATA_KEY = 'bs.toast';
8710  const EVENT_KEY = `.${DATA_KEY}`;
8711  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
8712  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
8713  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
8714  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
8715  const EVENT_HIDE = `hide${EVENT_KEY}`;
8716  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
8717  const EVENT_SHOW = `show${EVENT_KEY}`;
8718  const EVENT_SHOWN = `shown${EVENT_KEY}`;
8719  const CLASS_NAME_FADE = 'fade';
vendor: 4,599 bytes, lines 8720-8905
8720  const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
8721
8722  const CLASS_NAME_SHOW = 'show';
8723  const CLASS_NAME_SHOWING = 'showing';
8724  const DefaultType = {
8725    animation: 'boolean',
8726    autohide: 'boolean',
8727    delay: 'number'
8728  };
8729  const Default = {
8730    animation: true,
8731    autohide: true,
8732    delay: 5000
8733  };
8734  /**
8735   * ------------------------------------------------------------------------
8736   * Class Definition
8737   * ------------------------------------------------------------------------
8738   */
8739
8740  class Toast extends BaseComponent {
8741    constructor(element, config) {
8742      super(element);
8743      this._config = this._getConfig(config);
8744      this._timeout = null;
8745      this._hasMouseInteraction = false;
8746      this._hasKeyboardInteraction = false;
8747
8748      this._setListeners();
8749    } // Getters
8750
8751
8752    static get DefaultType() {
8753      return DefaultType;
8754    }
8755
8756    static get Default() {
8757      return Default;
8758    }
8759
8760    static get NAME() {
8761      return NAME;
8762    } // Public
8763
8764
8765    show() {
8766      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
8767
8768      if (showEvent.defaultPrevented) {
8769        return;
8770      }
8771
8772      this._clearTimeout();
8773
8774      if (this._config.animation) {
8775        this._element.classList.add(CLASS_NAME_FADE);
8776      }
8777
8778      const complete = () => {
8779        this._element.classList.remove(CLASS_NAME_SHOWING);
8780
8781        EventHandler.trigger(this._element, EVENT_SHOWN);
8782
8783        this._maybeScheduleHide();
8784      };
8785
8786      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
8787
8788
8789      reflow(this._element);
8790
8791      this._element.classList.add(CLASS_NAME_SHOW);
8792
8793      this._element.classList.add(CLASS_NAME_SHOWING);
8794
8795      this._queueCallback(complete, this._element, this._config.animation);
8796    }
8797
8798    hide() {
8799      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
8800        return;
8801      }
8802
8803      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
8804
8805      if (hideEvent.defaultPrevented) {
8806        return;
8807      }
8808
8809      const complete = () => {
8810        this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
8811
8812
8813        this._element.classList.remove(CLASS_NAME_SHOWING);
8814
8815        this._element.classList.remove(CLASS_NAME_SHOW);
8816
8817        EventHandler.trigger(this._element, EVENT_HIDDEN);
8818      };
8819
8820      this._element.classList.add(CLASS_NAME_SHOWING);
8821
8822      this._queueCallback(complete, this._element, this._config.animation);
8823    }
8824
8825    dispose() {
8826      this._clearTimeout();
8827
8828      if (this._element.classList.contains(CLASS_NAME_SHOW)) {
8829        this._element.classList.remove(CLASS_NAME_SHOW);
8830      }
8831
8832      super.dispose();
8833    } // Private
8834
8835
8836    _getConfig(config) {
8837      config = { ...Default,
8838        ...Manipulator.getDataAttributes(this._element),
8839        ...(typeof config === 'object' && config ? config : {})
8840      };
8841      typeCheckConfig(NAME, config, this.constructor.DefaultType);
8842      return config;
8843    }
8844
8845    _maybeScheduleHide() {
8846      if (!this._config.autohide) {
8847        return;
8848      }
8849
8850      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
8851        return;
8852      }
8853
8854      this._timeout = setTimeout(() => {
8855        this.hide();
8856      }, this._config.delay);
8857    }
8858
8859    _onInteraction(event, isInteracting) {
8860      switch (event.type) {
8861        case 'mouseover':
8862        case 'mouseout':
8863          this._hasMouseInteraction = isInteracting;
8864          break;
8865
8866        case 'focusin':
8867        case 'focusout':
8868          this._hasKeyboardInteraction = isInteracting;
8869          break;
8870      }
8871
8872      if (isInteracting) {
8873        this._clearTimeout();
8874
8875        return;
8876      }
8877
8878      const nextElement = event.relatedTarget;
8879
8880      if (this._element === nextElement || this._element.contains(nextElement)) {
8881        return;
8882      }
8883
8884      this._maybeScheduleHide();
8885    }
8886
8887    _setListeners() {
8888      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
8889      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
8890      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
8891      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
8892    }
8893
8894    _clearTimeout() {
8895      clearTimeout(this._timeout);
8896      this._timeout = null;
8897    } // Static
8898
8899
8900    static jQueryInterface(config) {
8901      return this.each(function () {
8902        const data = Toast.getOrCreateInstance(this, config);
8903
8904        if (typeof config === 'string') {
8905          if (typeof data[config] === 'undefined') {
8906            throw new TypeError(`No method named "${config}"`);
8907          }
8908
8909          data[config](this);
8910        }
8911      });
8912    }
8913
8914  }
8915
8916  enableDismissTrigger(Toast);
8917  /**
8918   * ------------------------------------------------------------------------
8919   * jQuery
8920   * ------------------------------------------------------------------------
8921   * add .Toast to jQuery only if jQuery is present
8922   */
8923
8924  defineJQueryPlugin(Toast);
8925
8926  /**
8927   * --------------------------------------------------------------------------
8928   * Bootstrap (v5.1.3): index.umd.js
8929   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
8930   * --------------------------------------------------------------------------
8931   */
8932  const index_umd = {
8933    Alert,
8934    Button,
8935    Carousel,
8936    Collapse,
8937    Dropdown,
8938    Modal,
8939    Offcanvas,
8940    Popover,
8941    ScrollSpy,
8942    Tab,
8943    Toast,
8944    Tooltip
8945  };
8946
8947  return index_umd;
8948
8949}));
8950
8951;
8952!function r(i,o,a){function s(t,e){if(!o[t]){if(!i[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(u)return u(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}n=o[t]={exports:{}},i[t][0].call(n.exports,function(e){return s(i[t][1][e]||e)},n,n.exports,r,i,o,a)}return o[t].exports}for(var u="function"==typeof require&&require,e=0;e<a.length;e++)s(a[e]);return s}({1:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("jquery"))&&e.__esModule?e:{default:e};n.default={init:function(){(0,r.default)(".accordeon-title").click(function(){(0,r.default)(this).hasClass("active")?((0,r.default)(this).removeClass("active"),(0,r.default)(this).next(".accordeon-content").slideUp(300)):((0,r.default)(".accordeon-title").removeClass("active"),(0,r.default)(this).addClass("active"),(0,r.default)(".accordeon-content").slideUp(300),(0,r.default)(this).next().slideDown(300))})}}},{jquery:8}],2:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("jquery"))&&e.__esModule?e:{default:e};n.default={init:function(){(0,r.default)(".tab-content #views-row--1").addClass("active"),(0,r.default)(".menu--satellite-events li.first").addClass("active"),(0,r.default)(".menu--satellite-events li a").attr("data-toggle","tab"),(0,r.default)(".tab-content .tab-pane").each(function(){var e=(0,r.default)(this).find("article h2 span").text().toLowerCase().replace(":","").split(" ").slice(0,3).join("-");(0,r.default)(this).attr("id",e)}),(0,r.default)(".menu--satellite-events li").each(function(){var e=(0,r.default)(this).find("a").text().toLowerCase().replace(":","").split(" ").slice(0,3).join("-");(0,r.default)(this).find("a").attr("href","#"+e)}),(0,r.default)(".pills-pink ul li a").click(function(){(0,r.default)("html,body").animate({scrollTop:(0,r.default)(".main-container").offset().top},"slow")})}}},{jquery:8}],3:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("jquery"))&&e.__esModule?e:{default:e};n.default={init:function(){(0,r.default)(".keynotes-sessions .see-part a").each(function(){(0,r.default)(this).on("click",function(e){e.preventDefault();var e=(0,r.default)(this).closest("section").attr("id"),e=(0,r.default)(".keynotes-sessions div").find("section#"+e),t=(0,r.default)(e).find(".see-part"),e=(0,r.default)(e).find("div .bottom-part");(0,r.default)(t).addClass("hide",{duration:500}),(0,r.default)(e).removeClass("hide",{duration:500})})})}}},{jquery:8}],4:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=o(e("jquery")),i=o(e("./iframeResizer.min"));function o(e){return e&&e.__esModule?e:{default:e}}var a={init:function(){(0,r.default)("body").hasClass("page-node-type-programme")&&(a.programmeIframe("https://interactive-programme.europa-organisation.com/icpp2023/programme_cs_with_glance.php"),setTimeout(function(){(0,i.default)({log:!1,checkOrigin:!1,autoResize:!1,minHeight:2700,warningTimeout:0,initCallback:function(t){(0,r.default)(window).scroll(function(){var e=(0,r.default)(window).scrollTop();t.iFrameResizer.sendMessage('{"top": '+e+"}")})}},"#iframeProgramme")},100))},programmeIframe:function(e){var t=new URLSearchParams(window.location.search).toString(),t=(t&&(e+="?"+t),document.getElementById("iframeProgramme").src=e,document.getElementsByClassName("iframe-wrapper")[0]);document.getElementsByClassName("downloads")[0].append(t)}};n.default=a},{"./iframeResizer.min":5,jquery:8}],5:[function(m,e,y){"use strict";function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function x(e,t,n){"addEventListener"in window?e.addEventListener(t,n,!1):"attachEvent"in window&&e.attachEvent("on"+t,n)}function W(e,t,n){"removeEventListener"in window?e.removeEventListener(t,n,!1):"detachEvent"in window&&e.detachEvent("on"+t,n)}function v(e){return R+"["+(t="Host page: "+(e=e),t=window.top!==window.self?window.parentIFrame&&window.parentIFrame.getId?window.parentIFrame.getId()+": "+e:"Nested host page: "+e:t)+"]";var t}function n(e){return I[e]?I[e].log:p}function w(e,t){r("log",e,t,n(e))}function T(e,t){r("info",e,t,n(e))}function C(e,t){r("warn",e,t,!0)}function r(e,t,n,r){!0===r&&"object"==c(window.console)&&console[e](v(t),n)}function b(e){function t(){n("Height"),n("Width"),q(function(){N(g),j(m),u("resizedCallback",g)},g,"init")}function n(e){var t=Number(I[m]["max"+e]),n=Number(I[m]["min"+e]),e=e.toLowerCase(),r=Number(g[e]);w(m,"Checking "+e+" is in range "+n+"-"+t),r<n&&(r=n,w(m,"Set "+e+" to min value")),t<r&&(r=t,w(m,"Set "+e+" to max value")),g[e]=""+r}function r(e){return h.substr(h.indexOf(":")+H+e)}function i(n,r){L(function(){var e,t;M("Send Page Info","pageInfo:"+(e=document.body.getBoundingClientRect(),t=g.iframe.getBoundingClientRect(),JSON.stringify({iframeHeight:t.height,iframeWidth:t.width,clientHeight:Math.max(document.documentElement.clientHeight,window.innerHeight||0),clientWidth:Math.max(document.documentElement.clientWidth,window.innerWidth||0),offsetTop:parseInt(t.top-e.top,10),offsetLeft:parseInt(t.left-e.left,10),scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset})),n,r)},32)}function o(e){e=e.getBoundingClientRect();return S(m),{x:Math.floor(Number(e.left)+Number(F.x)),y:Math.floor(Number(e.top)+Number(F.y))}}function a(e){var t=e?o(g.iframe):{x:0,y:0},n={x:Number(g.width)+t.x,y:Number(g.height)+t.y};w(m,"Reposition requested from iFrame (offset x:"+t.x+" y:"+t.y+")"),window.top!==window.self?window.parentIFrame?window.parentIFrame["scrollTo"+(e?"Offset":"")](n.x,n.y):C(m,"Unable to scroll to requested position, window.parentIFrame not found"):(F=n,s(),w(m,"--"))}function s(){!1!==u("scrollCallback",F)?j(m):A()}function u(e,t){return k(m,e,t)}var l,c,f,d,p,h=e.data,g={},m=null;if("[iFrameResizerChild]Ready"===h)for(var y in I)M("iFrame requested init",O(y),document.getElementById(y),y);else if(R===(""+h).substr(0,P)&&h.substr(P).split(":")[0]in I){if(p=h.substr(P).split(":"),g={iframe:I[p[0]].iframe,id:p[0],height:p[1],width:p[2],type:p[3]},m=g.id,I[m].loaded=!0,(p=g.type in{true:1,false:1,undefined:1})&&w(m,"Ignoring init message from meta parent page"),!p&&(d=!0,I[p=m]||(d=!1,C(g.type+" No settings for "+p+". Message was: "+h)),d)&&(w(m,"Received: "+h),p=!0,null===g.iframe&&(C(m,"IFrame ("+g.id+") not found"),p=!1),p&&function(){var r=e.origin,i=I[m].checkOrigin;if(i&&""+r!="null"&&!function(){if(i.constructor!==Array)return e=I[m].remoteHost,w(m,"Checking connection is from: "+e),r===e;var e,t=0,n=!1;for(w(m,"Checking connection is from allowed list of origins: "+i);t<i.length;t++)if(i[t]===r){n=!0;break}return n}())throw new Error("Unexpected message received from: "+r+" for "+g.iframe.id+". Message was: "+e.data+". This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.");return 1}())){switch(I[m].firstRun&&(I[m].firstRun=!1),g.type){case"close"
8952:E(g.iframe);break;case"message":f=r(6),w(m,"MessageCallback passed: {iframe: "+g.iframe.id+", message: "+f+"}"),u("messageCallback",{iframe:g.iframe,message:JSON.parse(f)}),w(m,"--");break;case"scrollTo":a(!1);break;case"scrollToOffset":a(!0);break;case"pageInfo":i(I[m].iframe,m),c=m,v("Add ",x),I[c].stopPageInfo=b;break;case"pageInfoStop":I[m]&&I[m].stopPageInfo&&(I[m].stopPageInfo(),delete I[m].stopPageInfo);break;case"inPageLink":f=(f=r(9)).split("#")[1]||"",l=decodeURIComponent(f),(l=document.getElementById(l)||document.getElementsByName(l)[0])?(l=o(l),w(m,"Moving to in page link (#"+f+") at x: "+l.x+" y: "+l.y),F={x:l.x,y:l.y},s(),w(m,"--")):window.top!==window.self?window.parentIFrame?window.parentIFrame.moveToAnchor(f):w(m,"In page link #"+f+" not found and window.parentIFrame not found"):w(m,"In page link #"+f+" not found");break;case"reset":D(g);break;case"init":t(),u("initCallback",g.iframe);break;default:t()}function v(t,n){function r(){I[c]?i(I[c].iframe,c):b()}["scroll","resize"].forEach(function(e){w(c,t+e+" listener for sendPageInfo"),n(window,e,r)})}function b(){v("Remove ",W)}}}else T(m,"Ignored: "+h)}function k(e,t,n){var r=null,i=null;if(I[e]){if("function"!=typeof(r=I[e][t]))throw new TypeError(t+" on iFrame["+e+"] is not a function");i=r(n)}return i}function E(e){var t=e.id;w(t,"Removing iFrame: "+t),e.parentNode&&e.parentNode.removeChild(e),k(t,"closedCallback",t),w(t,"--"),delete I[t]}function S(e){null===F&&w(e,"Get page position: "+(F={x:window.pageXOffset!==f?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==f?window.pageYOffset:document.documentElement.scrollTop}).x+","+F.y)}function j(e){null!==F&&(window.scrollTo(F.x,F.y),w(e,"Set page position: "+F.x+","+F.y),A())}function A(){F=null}function D(e){w(e.id,"Size reset requested by "+("init"===e.type?"host page":"iFrame")),S(e.id),q(function(){N(e),M("reset","reset",e.iframe,e.id)},e,"reset")}function N(i){function n(e){{var t;!u&&"0"===i[e]&&(u=!0,w(o,"Hidden iFrame detected, creating visibility listener"),e=window.MutationObserver||window.WebKitMutationObserver)&&(t=document.querySelector("body"),new e(r).observe(t,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}))}function n(){for(var e in I)!function(t){function e(e){return"0px"===I[t].iframe.style[e]}null!==I[t].iframe.offsetParent&&(e("height")||e("width"))&&M("Visibility change","resize",I[t].iframe,t)}(e)}function r(e){w("window","Mutation observed: "+e[0].target+" "+e[0].type),L(n,16)}}function e(e){var t;t=e,i.iframe.style[t]=i[t]+"px",w(i.id,"IFrame ("+o+") "+t+" set to "+i[t]+"px"),n(e)}var o=i.iframe.id;I[o]&&(I[o].sizeHeight&&e("height"),I[o].sizeWidth)&&e("width")}function q(e,t,n){n!==t.type&&l?(w(t.id,"Requesting animation frame"),l(e)):e()}function M(e,t,n,r,i){var o,a=!1;r=r||n.id,I[r]&&(n&&"contentWindow"in n&&null!==n.contentWindow?(o=I[r].targetOrigin,w(r,"["+e+"] Sending msg to iframe["+r+"] ("+t+") targetOrigin: "+o),n.contentWindow.postMessage(R+t,o)):C(r,"["+e+"] IFrame("+r+") not found"),i)&&I[r].warningTimeout&&(I[r].msgTimeout=setTimeout(function(){!I[r]||I[r].loaded||a||(a=!0,C(r,"IFrame has not responded within "+I[r].warningTimeout/1e3+" seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ingored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning."))},I[r].warningTimeout))}function O(e){return e+":"+I[e].bodyMarginV1+":"+I[e].sizeWidth+":"+I[e].log+":"+I[e].interval+":"+I[e].enablePublicMethods+":"+I[e].autoResize+":"+I[e].bodyMargin+":"+I[e].heightCalculationMethod+":"+I[e].bodyBackground+":"+I[e].bodyPadding+":"+I[e].tolerance+":"+I[e].inPageLinks+":"+I[e].resizeFrom+":"+I[e].widthCalculationMethod}function o(n,e){t=n.id,""===t&&(n.id=(o=e&&e.id||g.id+d++,null!==document.getElementById(o)&&(o+=d++),t=o),p=(e||{}).log,w(t,"Added missing iframe ID: "+t+" ("+n.src+")"));var t,r,i=t;if(i in I&&"iFrameResizer"in n)C(i,"Ignored iFrame, already setup.");else{var o=e;if(o=o||{},I[i]={firstRun:!0,iframe:n,remoteHost:n.src.split("/").slice(0,3).join("/")},"object"!=c(o))throw new TypeError("Options is not an object");var a,s=o;for(a in g)g.hasOwnProperty(a)&&(I[i][a]=(s.hasOwnProperty(a)?s:g)[a]);switch(I[i].targetOrigin=!0!==I[i].checkOrigin||""===(o=I[i].remoteHost)||"file://"===o?"*":o,w(i,"IFrame scrolling "+(I[i].scrolling?"enabled":"disabled")+" for "+i),n.style.overflow=!1===I[i].scrolling?"hidden":"auto",I[i].scrolling){case!0:n.scrolling="yes";break;case!1:n.scrolling="no";break;default:n.scrolling=I[i].scrolling}l("Height"),l("Width"),u("maxHeight"),u("minHeight"),u("maxWidth"),u("minWidth"),"number"!=typeof I[i].bodyMargin&&"0"!==I[i].bodyMargin||(I[i].bodyMarginV1=I[i].bodyMargin,I[i].bodyMargin=I[i].bodyMargin+"px"),r=O(i),x(n,"load",function(){var e,t;M("iFrame.onload",r,n,f,!0),e=I[i].firstRun,t=I[i].heightCalculationMethod in z,!e&&t&&D({iframe:n,height:0,width:0,type:"init"})}),M("init",r,n,f,!0),Function.prototype.bind&&(I[i].iframe.iFrameResizer={close:E.bind(null,I[i].iframe),resize:M.bind(null,"Window resize","resize",I[i].iframe),moveToAnchor:function(e){M("Move to anchor","moveToAnchor:"+e,I[i].iframe,i)},sendMessage:function(e){M("Send Message","message:"+(e=JSON.stringify(e)),I[i].iframe,i)}})}function u(e){1/0!==I[i][e]&&0!==I[i][e]&&(n.style[e]=I[i][e]+"px",w(i,"Set "+e+" = "+I[i][e]+"px"))}function l(e){if(I[i]["min"+e]>I[i]["max"+e])throw new Error("Value for min"+e+" can not be greater than max"+e)}}
8952function L(e,t){null===h&&(h=setTimeout(function(){h=null,e()},t))}function a(e){w("window","Trigger event: "+e),L(function(){t("Window "+e,"resize")},16)}function s(){"hidden"!==document.visibilityState&&(w("document","Trigger event: Visiblity change"),L(function(){t("Tab Visable","resize")},16))}function t(e,t){for(var n in I)r=n,"parent"===I[r].resizeFrom&&I[r].autoResize&&!I[r].firstRun&&M(e,t,document.getElementById(n),n);var r}function i(){function r(e,t){if(t){if(!t.tagName)throw new TypeError("Object is not a valid DOM element");if("IFRAME"!==t.tagName.toUpperCase())throw new TypeError("Expected <IFRAME> tag, found <"+t.tagName+">");o(t,e),i.push(t)}}for(var i,e=["moz","webkit","o","ms"],t=0;t<e.length&&!l;t+=1)l=window[e[t]+"RequestAnimationFrame"];return l||w("setup","RequestAnimationFrame not supported"),x(window,"message",b),x(window,"resize",function(){a("resize")}),x(document,"visibilitychange",s),x(document,"-webkit-visibilitychange",s),x(window,"focusin",function(){a("focus")}),x(window,"focus",function(){a("focus")}),function(e,t){switch(i=[],(n=e)&&n.enablePublicMethods&&C("enablePublicMethods option has been removed, public methods are now always available in the iFrame"),c(t)){case"undefined":case"string":Array.prototype.forEach.call(document.querySelectorAll(t||"iframe"),r.bind(f,e));break;case"object":r(e,t);break;default:throw new TypeError("Unexpected data type ("+c(t)+")")}var n;return i}}function _(e){e.fn?e.fn.iFrameResize||(e.fn.iFrameResize=function(n){return this.filter("iframe").each(function(e,t){o(t,n)}).end()}):T("","Unable to bind to jQuery, it is not fully loaded.")}var f,d,p,u,H,R,P,F,l,z,I,h,g;"undefined"!=typeof window&&(d=0,u=p=!1,H="message".length,P=(R="[iFrameSizer]").length,F=null,l=window.requestAnimationFrame,g={autoResize:!(h=null),bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:!0,inPageLinks:!"Host Page",enablePublicMethods:!0,heightCalculationMethod:"bodyOffset",id:"iFrameResizer",interval:32,log:!(I={}),maxHeight:1/0,maxWidth:1/0,minHeight:0,minWidth:0,resizeFrom:"parent",scrolling:!(z={max:1,scroll:1,bodyScroll:1,documentElementScroll:1}),sizeHeight:!0,sizeWidth:!1,warningTimeout:5e3,tolerance:0,widthCalculationMethod:"scroll",closedCallback:function(){},initCallback:function(){},messageCallback:function(){C("MessageCallback function not defined")},resizedCallback:function(){},scrollCallback:function(){return!0}},window.jQuery&&_(window.jQuery),"function"==typeof define&&define.amd?define([],i):"object"==(void 0===e?"undefined":c(e))&&"object"==c(e.exports)?e.exports=i():window.iFrameResize=window.iFrameResize||i())},{}],6:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("jquery"))&&e.__esModule?e:{default:e};n.default={init:function(){var e=(0,r.default)(window).width();e<1100?((0,r.default)("header nav").hide(0),(0,r.default)(".menu-burger").click(function(){(0,r.default)(this).toggleClass("open"),(0,r.default)("header nav").slideToggle(300)})):1100<e&&(0,r.default)("header nav").show(0)}}},{jquery:8}],7:[function(e,t,n){"use strict";var r,i=c(e("jquery")),o=c(e("./libs/menuMobile")),a=c(e("./libs/accordeon")),s=c(e("./libs/animHome")),u=c(e("./libs/animProgramme")),l=c(e("./libs/animKeynotes"));function c(e){return e&&e.__esModule?e:{default:e}}e=Drupal,r=i.default,e.behaviors.themedtechforum={attach:function(e,t){window.screenSize=r(window).width(),e==document&&(o.default.init(),s.default.init(),u.default.init(),a.default.init(),l.default.init(),r(window).resize(function(){o.default.init()}))}}},{"./libs/accordeon":1,"./libs/animHome":2,"./libs/animKeynotes":3,"./libs/animProgramme":4,"./libs/menuMobile":6,jquery:8}],8:[function(e,n,t){!function(e,t){"use strict";"object"==typeof n&&"object"==typeof n.exports?n.exports=e.document?t(e,!0):function(e){if(e.document)return t(e);throw new Error("jQuery requires a window with a document")}:t(e)}("undefined"!=typeof window?window:this,function(w,R){"use strict";function v(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item}function P(e){return null!=e&&e===e.window}
vendor: 25,508 bytes, line 8952
8952var t=[],F=Object.getPrototypeOf,s=t.slice,I=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},W=t.push,b=t.indexOf,_={},z=_.toString,B=_.hasOwnProperty,$=B.toString,U=$.call(Object),g={},T=w.document,X={type:!0,src:!0,nonce:!0,noModule:!0};function V(e,t,n){var r,i,o=(n=n||T).createElement("script");if(o.text=e,t)for(r in X)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function Y(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?_[z.call(e)]||"object":typeof e}var G=/HTML$/i,C=function(e,t){return new C.fn.init(e,t)};function Q(e){var t=!!e&&"length"in e&&e.length,n=Y(e);return!v(e)&&!P(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function x(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}C.fn=C.prototype={jquery:"3.7.0",constructor:C,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){e=C.merge(this.constructor(),e);return e.prevObject=this,e},each:function(e){return C.each(this,e)},map:function(n){return this.pushStack(C.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(C.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(C.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,e=+e+(e<0?t:0);return this.pushStack(0<=e&&e<t?[this[e]]:[])},end:function(){return this.prevObject||this.constructor()},push:W,sort:t.sort,splice:t.splice},C.extend=C.fn.extend=function(){var e,t,n,r,i,o=arguments[0]||{},a=1,s=arguments.length,u=!1;for("boolean"==typeof o&&(u=o,o=arguments[a]||{},a++),"object"==typeof o||v(o)||(o={}),a===s&&(o=this,a--);a<s;a++)if(null!=(e=arguments[a]))for(t in e)n=e[t],"__proto__"!==t&&o!==n&&(u&&n&&(C.isPlainObject(n)||(r=Array.isArray(n)))?(i=o[t],i=r&&!Array.isArray(i)?[]:r||C.isPlainObject(i)?i:{},r=!1,o[t]=C.extend(u,i,n)):void 0!==n&&(o[t]=n));return o},C.extend({expando:"jQuery"+("3.7.0"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){return!(!e||"[object Object]"!==z.call(e)||(e=F(e))&&("function"!=typeof(e=B.call(e,"constructor")&&e.constructor)||$.call(e)!==U))},isEmptyObject:function(e){for(var t in e)return!1;return!0},globalEval:function(e,t,n){V(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(Q(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i)return e.textContent;if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=C.text(t);return n},makeArray:function(e,t){t=t||[];return null!=e&&(Q(Object(e))?C.merge(t,"string"==typeof e?[e]:e):W.call(t,e)),t},inArray:function(e,t,n){return null==t?-1:b.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,e=e&&(e.ownerDocument||e).documentElement;return!G.test(t||e&&e.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!=a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(Q(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return I(a)},guid:1,support:g}),"function"==typeof Symbol&&(C.fn[Symbol.iterator]=t[Symbol.iterator]),C.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){_["[object "+t+"]"]=t.toLowerCase()});var J=t.pop,K=t.sort,Z=t.splice,n="[\\x20\\t\\r\\n\\f]",ee=new RegExp("^"+n+"+|((?:^|[^\\\\])(?:\\\\.)*)"+n+"+$","g"),te=(C.contains=function(e,t){t=t&&t.parentNode;return e===t||!(!t||1!==t.nodeType||!(e.contains?e.contains(t):e.compareDocumentPosition&&16&e.compareDocumentPosition(t)))},/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g);function ne(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}C.escapeSelector=function(e){return(e+"").replace(te,ne)};var re,k,ie,oe,ae,E,se,S,d,ue,r=T,le=W,j=le,A=C.expando,D=0,ce=0,fe=Ne(),de=Ne(),pe=Ne(),he=Ne(),ge=function(e,t){return e===t&&(ae=!0),0},me="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",e="(?:\\\\[\\da-fA-F]{1,6}"+n+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",i="\\["+n+"*("+e+")(?:"+n+"*([*^$|!~]?=)"+n+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+e+"))|)"+n+"*\\]",o=":("+e+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+i+")*)|.*)\\)|)",ye=new RegExp(n+"+","g"),ve=new RegExp("^"+n+"*,"+n+"*"),be=new RegExp("^"+n+"*([>+~]|"+n+")"+n+"*"),xe=new RegExp(n+"|>"),we=new RegExp(o),Te=new RegExp("^"+e+"$"),Ce={ID:new RegExp("^#("+e+")"),CLASS:new RegExp("^\\.("+e+")"),TAG:new RegExp("^("+e+"|[*])"),ATTR:new RegExp("^"+i),PSEUDO:new RegExp("^"+o),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+n+"*(even|odd|(([+-]|)(\\d*)n|)"+n+"*(?:([+-]|)"+n+"*(\\d+)|))"+n+"*\\)|)","i"),bool:new RegExp("^(?:"+me+")$","i"),needsContext:new RegExp("^"+n+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+n+"*((?:-\\d)?\\d*)"+n+"*\\)|)(?=[^-]|$)","i")},ke=/^(?:input|select|textarea|button)$/i,Ee=/^h\d$/i,Se=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,je=/[+~]/,f=new RegExp("\\\\[\\da-fA-F]{1,6}"+n+"?|\\\\([^\\r\\n\\f])","g"),p=function(e,t){e="0x"+e.slice(1)-65536;return t||(e<0?String.fromCharCode(65536+e):String.fromCharCode(e>>10|55296,1023&e|56320))},Ae=function(){He()},De=Ie(function(e){return!0===e.disabled&&x(e,"fieldset")},{dir:"parentNode",next:"legend"});try{j.apply(t=s.call(r.childNodes),r.childNodes),t[r.childNodes.length].nodeType}catch(e){j={apply:function(e,t){le.apply(e,s.call(t))},call:function(e){le.apply(e,s.call(arguments,1))}}}function N(t,e,n,r){var i,o,a,s,u,l,c=e&&e.ownerDocument,f=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==f&&9!==f&&11!==f)return n;if(!r&&(He(e),e=e||E,S)){if(11!==f&&(s=Se.exec(t)))if(i=s[1]){if(9===f){if(!(l=e.getElementById(i)))return n;if(l.id===i)return j.call(n,l),n}else if(c&&(l=c.getElementById(i))&&N.contains(e,l)&&l.id===i)return j.call(n,l),n}else{if(s[2])return j.apply(n,e.getElementsByTagName(t)),n;if((i=s[3])&&e.getElementsByClassName)return j.apply(n,e.getElementsByClassName(i)),n}if(!(he[t+" "]||d&&d.test(t))){if(l=t,c=e,1===f&&(xe.test(t)||be.test(t))){for((c=je.test(t)&&Le(e.parentNode)||e)==e&&g.scope||((a=e.getAttribute("id"))?a=C.escapeSelector(a):e.setAttribute("id",a=A)),o=(u=Pe(t)).length;o--;)u[o]=(a?"#"+a:":scope")+" "+Fe(u[o]);l=u.join(",")}try{return j.apply(n,c.querySelectorAll(l)),n}catch(e){he(t,!0)}finally{a===A&&e.removeAttribute("id")}}}return Ue(t.replace(ee,"$1"),e,n,r)}function Ne(){var n=[];function r(e,t){return n.push(e+" ")>k.cacheLength&&delete r[n.shift()],r[e+" "]=t}return r}function u(e){return e[A]=!0,e}function qe(e){var t=E.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t)}}function Me(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&De(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function Oe(a){return u(function(o){return o=+o,u(function(e,t){for(var n,r=a([],e.length,o),i=r.length;i--;)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function Le(e){return e&&void 0!==e.getElementsByTagName&&e}function He(e){var e=e?e.ownerDocument||e:r;return e!=E&&9===e.nodeType&&e.documentElement&&(se=(E=e).documentElement,S=!C.isXMLDoc(E),ue=se.matches||se.webkitMatchesSelector||se.msMatchesSelector,r!=E&&(e=E.defaultView)&&e.top!==e&&e.addEventListener("unload",Ae),g.getById=qe(function(e){return se.appendChild(e).id=C.expando,!E.getElementsByName||!E.getElementsByName(C.expando).length}),g.disconnectedMatch=qe(function(e){return ue.call(e,"*")}),g.scope=qe(function(){return E.querySelectorAll(":scope")}),g.cssHas=qe(function(){try{E.querySelector(":has(*,:jqfake)")}catch(e){return 1}}),g.getById?(k.filter.ID=function(e){var t=e.replace(f,p);return function(e){return e.getAttribute("id")===t}},k.find.ID=function(e,t){if(void 0!==t.getElementById&&S)return(t=t.getElementById(e))?[t]:[]}):(k.filter.ID=function(e){var t=e.replace(f,p);return function(e){e=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return e&&e.value===t}},k.find.ID=function(e,t){if(void 0!==t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),k.find.TAG=function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},k.find.CLASS=function(e,t){if(void 0!==t.getElementsByClassName&&S)return t.getElementsByClassName(e)},d=[],qe(function(e){var t;se.appendChild(e).innerHTML="<a id='"+A+"' href='' disabled='disabled'></a><select id='"+A+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+n+"*(?:value|"+me+")"),e.querySelectorAll("[id~="+A+"-]").length||d.push("~="),e.querySelectorAll("a#"+A+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=E.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),se.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=E.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+n+"*name"+n+"*="+n+"*(?:''|\"\")")}),g.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),ge=function(e,t){var n;return e===t?(ae=!0,0):(n=!e.compareDocumentPosition-!t.compareDocumentPosition)||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!g.sortDetached&&t.compareDocumentPosition(e)===n?e===E||e.ownerDocument==r&&N.contains(r,e)?-1:t===E||t.ownerDocument==r&&N.contains(r,t)?1:oe?b.call(oe,e)-b.call(oe,t):0:4&n?-1:1)}),E}for(re in N.matches=function(e,t){return N(e,null,null,t)},N.matchesSelector=function(e,t){if(He(e),S&&!he[t+" "]&&(!d||!d.test(t)))try{var n=ue.call(e,t);if(n||g.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){he(t,!0)}return 0<N(t,E,null,[e]).length},N.contains=function(e,t){return(e.ownerDocument||e)!=E&&He(e),C.contains(e,t)},N.attr=function(e,t){(e.ownerDocument||e)!=E&&He(e);var n=k.attrHandle[t.toLowerCase()],n=n&&B.call(k.attrHandle,t.toLowerCase())?n(e,t,!S):void 0;return void 0!==n?n:e.getAttribute(t)},N.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},C.uniqueSort=function(e){var t,n=[],r=0,i=0;if(ae=!g.sortStable,oe=!g.sortStable&&s.call(e,0),K.call(e,ge),ae){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)Z.call(e,n[r],1)}return oe=null,e},C.fn.uniqueSort=function(){return this.pushStack(C.uniqueSort(s.apply(this)))},(k=C.expr={cacheLength:50,createPseudo:u,match:Ce,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(f,p),e[3]=(e[3]||e[4]||e[5]||"").replace(f,p),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||N.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&N.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Ce.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&we.test(n)&&(t=(t=Pe(n,!0))&&n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(f,p).toLowerCase();return"*"===e?function(){return!0}:function(e){return x(e,t)}},CLASS:function(e){var t=fe[e+" "];return t||(t=new RegExp("(^|"+n+")"+e+"("+n+"|$)"))&&fe(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(e){e=N.attr(e,t);return null==e?"!="===n:!n||(e+="","="===n?e===r:"!="===n?e!==r:"^="===n?r&&0===e.indexOf(r):"*="===n?r&&-1<e.indexOf(r):"$="===n?r&&e.slice(-r.length)===r:"~="===n?-1<(" "+e.replace(ye," ")+" ").indexOf(r):"|="===n&&(e===r||e.slice(0,r.length+1)===r+"-"))}},CHILD:function(p,e,t,h,g){var m="nth"!==p.slice(0,3),y="last"!==p.slice(-4),v="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=m!=y?"nextSibling":"previousSibling",l=e.parentNode,c=v&&e.nodeName.toLowerCase(),f=!n&&!v,d=!1;if(l){if(m){for(;u;){for(o=e;o=o[u];)if(v?x(o,c):1===o.nodeType)return!1;s=u="only"===p&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){for(d=(a=(r=(i=l[A]||(l[A]={}))[p]||[])[0]===D&&r[1])&&r[2],o=a&&l.childNodes[a];o=++a&&o&&o[u]||(d=a=0,s.pop());)if(1===o.nodeType&&++d&&o===e){i[p]=[D,a,d];break}}else if(!1===(d=f?a=(r=(i=e[A]||(e[A]={}))[p]||[])[0]===D&&r[1]:d))for(;(o=++a&&o&&o[u]||(d=a=0,s.pop()))&&((v?!x(o,c):1!==o.nodeType)||!++d||(f&&((i=o[A]||(o[A]={}))[p]=[D,d]),o!==e)););return(d-=g)===h||d%h==0&&0<=d/h}}},PSEUDO:function(e,o){var t,a=k.pseudos[e]||k.setFilters[e.toLowerCase()]||N.error("unsupported pseudo: "+e);return a[A]?a(o):1<a.length?(t=[e,e,"",o],k.setFilters.hasOwnProperty(e.toLowerCase())?u(function(e,t){for(var n,r=a(e,o),i=r.length;i--;)e[n=b.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:u(function(e){var r=[],i=[],s=$e(e.replace(ee,"$1"));return s[A]?u(function(e,t,n,r){for(var i,o=s(e,null,r,[]),a=e.length;a--;)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:u(function(t){return function(e){return 0<N(t,e).length}}),contains:u(function(t){return t=t.replace(f,p),function(e){return-1<(e.textContent||C.text(e)).indexOf(t)}}),lang:u(function(n){return Te.test(n||"")||N.error("unsupported lang: "+n),n=n.replace(f,p).toLowerCase(),function(e){var t;do{if(t=S?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=w.location&&w.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===se},focus:function(e){return e===function(){try{return E.activeElement}catch(e){}}()&&E.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:Me(!1),disabled:Me(!0),checked:function(e){return x(e,"input")&&!!e.checked||x(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!k.pseudos.empty(e)},header:function(e){return Ee.test(e.nodeName)},input:function(e){return ke.test(e.nodeName)},button:function(e){return x(e,"input")&&"button"===e.type||x(e,"button")},text:function(e){return x(e,"input")&&"text"===e.type&&(null==(e=e.getAttribute("type"))||"text"===e.toLowerCase())},first:Oe(function(){return[0]}),last:Oe(function(e,t){return[t-1]}),eq:Oe(function(e,t,n){return[n<0?n+t:n]}),even:Oe(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:Oe(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:Oe(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:Oe(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=k.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})k.pseudos[re]=function(t){return function(e){return x(e,"input")&&e.type===t}}(re);for(re in{submit:!0,reset:!0})k.pseudos[re]=function(t){return function(e){return(x(e,"input")||x(e,"button"))&&e.type===t}}(re);function Re(){}function Pe(e,t){var n,r,i,o,a,s,u,l=de[e+" "];if(l)return t?0:l.slice(0);for(a=e,s=[],u=k.preFilter;a;){for(o in n&&!(r=ve.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=be.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ee," ")}),a=a.slice(n.length)),k.filter)!(r=Ce[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?N.error(e):de(e,s).slice(0)}function Fe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function Ie(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=ce++;return e.first?function(e,t,n){for(;e=e[s];)if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[D,f];if(n){for(;e=e[s];)if((1===e.nodeType||c)&&a(e,t,n))return!0}else for(;e=e[s];)if(1===e.nodeType||c)if(i=e[A]||(e[A]={}),u&&x(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===D&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function We(i){return 1<i.length?function(e,t,n){for(var r=i.length;r--;)if(!i[r](e,t,n))return!1;return!0}:i[0]}function _e(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)!(o=e[s])||n&&!n(o,r,i)||(a.push(o),l&&t.push(s));return a}function ze(p,h,g,m,y,e){return m&&!m[A]&&(m=ze(m)),y&&!y[A]&&(y=ze(y,e)),u(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)N(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),d=!p||!e&&h?f:_e(f,u,p,n,r);if(g?g(d,s=y||(e?p:c||m)?[]:t,n,r):s=d,m)for(i=_e(s,l),m(i,[],n,r),o=i.length;o--;)(a=i[o])&&(s[l[o]]=!(d[l[o]]=a));if(e){if(y||p){if(y){for(i=[],o=s.length;o--;)(a=s[o])&&i.push(d[o]=a);y(null,s=[],i,r)}for(o=s.length;o--;)(a=s[o])&&-1<(i=y?b.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=_e(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):j.apply(t,s)})}function Be(m,y){function e(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],d=ie,p=e||b&&k.find.TAG("*",i),h=D+=null==d?1:Math.random()||.1,g=p.length;for(i&&(ie=t==E||t||i);l!==g&&null!=(o=p[l]);l++){if(b&&o){for(a=0,t||o.ownerDocument==E||(He(o),n=!S);s=m[a++];)if(s(o,t||E,n)){j.call(r,o);break}i&&(D=h)}v&&((o=!s&&o)&&u--,e)&&c.push(o)}if(u+=l,v&&l!==u){for(a=0;s=y[a++];)s(c,f,t,n);if(e){if(0<u)for(;l--;)c[l]||f[l]||(f[l]=J.call(r));f=_e(f)}j.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&C.uniqueSort(r)}return i&&(D=h,ie=d),c}var v=0<y.length,b=0<m.length;return v?u(e):e}function $e(e,t){var n,r=[],i=[],o=pe[e+" "];if(!o){for(n=(t=t||Pe(e)).length;n--;)((o=function e(t){for(var r,n,i,o=t.length,a=k.relative[t[0].type],s=a||k.relative[" "],u=a?1:0,l=Ie(function(e){return e===r},s,!0),c=Ie(function(e){return-1<b.call(r,e)},s,!0),f=[function(e,t,n){return e=!a&&(n||t!=ie)||((r=t).nodeType?l:c)(e,t,n),r=null,e}];u<o;u++)if(n=k.relative[t[u].type])f=[Ie(We(f),n)];else{if((n=k.filter[t[u].type].apply(null,t[u].matches))[A]){for(i=++u;i<o&&!k.relative[t[i].type];i++);return ze(1<u&&We(f),1<u&&Fe(t.slice(0,u-1).concat({value:" "===t[u-2].type?"*":""})).replace(ee,"$1"),n,u<i&&e(t.slice(u,i)),i<o&&e(t=t.slice(i)),i<o&&Fe(t))}f.push(n)}return We(f)}(t[n]))[A]?r:i).push(o);(o=pe(e,Be(i,r))).selector=e}return o}function Ue(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Pe(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&S&&k.relative[o[1].type]){if(!(t=(k.find.ID(a.matches[0].replace(f,p),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=Ce.needsContext.test(e)?0:o.length;i--&&(a=o[i],!k.relative[s=a.type]);)if((u=k.find[s])&&(r=u(a.matches[0].replace(f,p),je.test(o[0].type)&&Le(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&Fe(o))break;return j.apply(n,r),n}}return(l||$e(e,c))(r,t,!S,n,!t||je.test(e)&&Le(t.parentNode)||t),n}Re.prototype=k.filters=k.pseudos,k.setFilters=new Re,g.sortStable=A.split("").sort(ge).join("")===A,He(),g.sortDetached=qe(function(e){return 1&e.compareDocumentPosition(E.createElement("fieldset"))}),C.find=N,C.expr[":"]=C.expr.pseudos,C.unique=C.uniqueSort,N.compile=$e,N.select=Ue,N.setDocument=He,N.escape=C.escapeSelector,N.getText=C.text,N.isXML=C.isXMLDoc,N.selectors=C.expr,N.support=C.support,N.uniqueSort=C.uniqueSort;function Xe(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&C(e).is(n))break;r.push(e)}return r}function Ve(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}var Ye=C.expr.match.needsContext,Ge=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Qe(e,n,r){return v(n)?C.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?C.grep(e,function(e){return e===n!==r}):"string"!=typeof n?C.grep(e,function(e){return-1<b.call(n,e)!==r}):C.filter(n,e,r)}C.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?C.find.matchesSelector(r,e)?[r]:[]:C.find.matches(e,C.grep(t,function(e){return 1===e.nodeType}))},C.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(C(e).filter(function(){for(t=0;t<r;t++)if(C.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)C.find(e,i[t],n);return 1<r?C.uniqueSort(n):n},filter:function(e){return this.pushStack(Qe(this,e||[],!1))},not:function(e){return this.pushStack(Qe(this,e||[],!0))},is:function(e){return!!Qe(this,"string"==typeof e&&Ye.test(e)?C(e):e||[],!1).length}});var Je,Ke=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Ze=((C.fn.init=function(e,t,n){if(e){if(n=n||Je,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(C):C.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:Ke.exec(e))||!r[1]&&t)return(!t||t.jquery?t||n:this.constructor(t)).find(e);if(r[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:T,!0)),Ge.test(r[1])&&C.isPlainObject(t))for(var r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r])}else(n=T.getElementById(r[2]))&&(this[0]=n,this.length=1)}return this}).prototype=C.fn,Je=C(T),/^(?:parents|prev(?:Until|All))/),et={children:!0,contents:!0,next:!0,prev:!0};function tt(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.fn.extend({has:function(e){var t=C(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(C.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&C(e);if(!Ye.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&C.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?C.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?b.call(C(e),this[0]):b.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(C.uniqueSort(C.merge(this.get(),C(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),C.each({parent:function(e){e=e.parentNode;return e&&11!==e.nodeType?e:null},parents:function(e){return Xe(e,"parentNode")},parentsUntil:function(e,t,n){return Xe(e,"parentNode",n)},next:function(e){return tt(e,"nextSibling")},prev:function(e){return tt(e,"previousSibling")},nextAll:function(e){return Xe(e,"nextSibling")},prevAll:function(e){return Xe(e,"previousSibling")},nextUntil:function(e,t,n){return Xe(e,"nextSibling",n)},prevUntil:function(e,t,n){return Xe(e,"previousSibling",n)},siblings:function(e){return Ve((e.parentNode||{}).firstChild,e)},children:function(e){return Ve(e.firstChild)},contents:function(e){return null!=e.contentDocument&&F(e.contentDocument)?e.contentDocument:(x(e,"template")&&(e=e.content||e),C.merge([],e.childNodes))}},function(r,i){C.fn[r]=function(e,t){var n=C.map(this,i,e);return(t="Until"!==r.slice(-5)?e:t)&&"string"==typeof t&&(n=C.filter(t,n)),1<this.length&&(et[r]||C.uniqueSort(n),Ze.test(r))&&n.reverse(),this.pushStack(n)}});var q=/[^\x20\t\r\n\f]+/g;function nt(e){return e}function rt(e){throw e}function it(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}C.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},C.each(e.match(q)||[],function(e,t){n[t]=!0}),n):C.extend({},r);function i(){for(s=s||r.once,a=o=!0;l.length;c=-1)for(t=l.shift();++c<u.length;)!1===u[c].apply(t[0],t[1])&&r.stopOnFalse&&(c=u.length,t=!1);r.memory||(t=!1),o=!1,s&&(u=t?[]:"")}var o,t,a,s,u=[],l=[],c=-1,f={add:function(){return u&&(t&&!o&&(c=u.length-1,l.push(t)),function n(e){C.each(e,function(e,t){v(t)?r.unique&&f.has(t)||u.push(t):t&&t.length&&"string"!==Y(t)&&n(t)})}(arguments),t)&&!o&&i(),this},remove:function(){return C.each(arguments,function(e,t){for(var n;-1<(n=C.inArray(t,u,n));)u.splice(n,1),n<=c&&c--}),this},has:function(e){return e?-1<C.inArray(e,u):0<u.length},empty:function(){return u=u&&[],this},disable:function(){return s=l=[],u=t="",this},disabled:function(){return!u},lock:function(){return s=l=[],t||o||(u=t=""),this},locked:function(){return!!s},fireWith:function(e,t){return s||(t=[e,(t=t||[]).slice?t.slice():t],l.push(t),o)||i(),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!a}};return f},C.extend({Deferred:function(e){var o=[["notify","progress",C.Callbacks("memory"),C.Callbacks("memory"),2],["resolve","done",C.
vendor: 5,087 bytes, line 8952
8952Callbacks("once memory"),C.Callbacks("once memory"),0,"resolved"],["reject","fail",C.Callbacks("once memory"),C.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var i=arguments;return C.Deferred(function(r){C.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){function e(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,nt,s),l(u,o,rt,s)):(u++,t.call(e,l(u,o,nt,s),l(u,o,rt,s),l(u,o,nt,o.notifyWith))):(a!==nt&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}}var n=this,r=arguments,t=s?e:function(){try{e()}catch(e){C.Deferred.exceptionHook&&C.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==rt&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(C.Deferred.getErrorHook?t.error=C.Deferred.getErrorHook():C.Deferred.getStackHook&&(t.error=C.Deferred.getStackHook()),w.setTimeout(t))}}return C.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:nt,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:nt)),o[2][3].add(l(0,e,v(n)?n:rt))}).promise()},promise:function(e){return null!=e?C.extend(e,a):a}},s={};return C.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){function t(t){return function(e){i[t]=this,o[t]=1<arguments.length?s.call(arguments):e,--n||a.resolveWith(i,o)}}var n=arguments.length,r=n,i=Array(r),o=s.call(arguments),a=C.Deferred();if(n<=1&&(it(e,a.done(t(r)).resolve,a.reject,!n),"pending"===a.state()||v(o[r]&&o[r].then)))return a.then();for(;r--;)it(o[r],t(r),a.reject);return a.promise()}});var ot=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/,at=(C.Deferred.exceptionHook=function(e,t){w.console&&w.console.warn&&e&&ot.test(e.name)&&w.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},C.readyException=function(e){w.setTimeout(function(){throw e})},C.Deferred());function st(){T.removeEventListener("DOMContentLoaded",st),w.removeEventListener("load",st),C.ready()}C.fn.ready=function(e){return at.then(e).catch(function(e){C.readyException(e)}),this},C.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--C.readyWait:C.isReady)||(C.isReady=!0)!==e&&0<--C.readyWait||at.resolveWith(T,[C])}}),C.ready.then=at.then,"complete"===T.readyState||"loading"!==T.readyState&&!T.documentElement.doScroll?w.setTimeout(C.ready):(T.addEventListener("DOMContentLoaded",st),w.addEventListener("load",st));function c(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===Y(n))for(s in i=!0,n)c(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),t=l?a?(t.call(e,r),null):(l=t,function(e,t,n){return l.call(C(e),n)}):t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o}var ut=/^-ms-/,lt=/-([a-z])/g;function ct(e,t){return t.toUpperCase()}function M(e){return e.replace(ut,"ms-").replace(lt,ct)}function ft(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType}function dt(){this.expando=C.expando+dt.uid++}dt.uid=1,dt.prototype={cache:function(e){var t=e[this.expando];return t||(t={},ft(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[M(t)]=n;else for(r in t)i[M(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][M(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(M):(t=M(t))in r?[t]:t.match(q)||[]).length;for(;n--;)delete r[t[n]]}void 0!==t&&!C.isEmptyObject(r)||(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){e=e[this.expando];return void 0!==e&&!C.isEmptyObject(e)}};var y=new dt,l=new dt,pt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ht=/[A-Z]/g;function gt(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ht,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:pt.test(i)?JSON.parse(i):i)}catch(e){}l.set(e,t,n)}else n=void 0;return n}C.extend({hasData:function(e){return l.hasData(e)||y.hasData(e)},data:function(e,t,n){return l.access(e,t,n)},removeData:function(e,t){l.remove(e,t)},_data:function(e,t,n){return y.access(e,t,n)},_removeData:function(e,t){y.remove(e,t)}}),C.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;
vendor: 54,710 bytes, line 8952
8952if(void 0!==n)return"object"==typeof n?this.each(function(){l.set(this,n)}):c(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=l.get(o,n))||void 0!==(t=gt(o,n))?t:void 0;this.each(function(){l.set(this,n,e)})},null,e,1<arguments.length,null,!0);if(this.length&&(i=l.get(o),1===o.nodeType)&&!y.get(o,"hasDataAttrs")){for(t=a.length;t--;)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=M(r.slice(5)),gt(o,r,i[r]));y.set(o,"hasDataAttrs",!0)}return i},removeData:function(e){return this.each(function(){l.remove(this,e)})}}),C.extend({queue:function(e,t,n){var r;if(e)return r=y.get(e,t=(t||"fx")+"queue"),n&&(!r||Array.isArray(n)?r=y.access(e,t,C.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=C.queue(e,t),r=n.length,i=n.shift(),o=C._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){C.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return y.get(e,n)||y.access(e,n,{empty:C.Callbacks("once memory").add(function(){y.remove(e,[t+"queue",n])})})}}),C.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?C.queue(this[0],t):void 0===n?this:this.each(function(){var e=C.queue(this,t,n);C._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&C.dequeue(this,t)})},dequeue:function(e){return this.each(function(){C.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){function n(){--i||o.resolveWith(a,[a])}var r,i=1,o=C.Deferred(),a=this,s=this.length;for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";s--;)(r=y.get(a[s],e+"queueHooks"))&&r.empty&&(i++,r.empty.add(n));return n(),o.promise(t)}});function mt(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&bt(e)&&"none"===C.css(e,"display")}var e=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,yt=new RegExp("^(?:([+-])=|)("+e+")([a-z%]*)$","i"),h=["Top","Right","Bottom","Left"],vt=T.documentElement,bt=function(e){return C.contains(e.ownerDocument,e)},xt={composed:!0};vt.getRootNode&&(bt=function(e){return C.contains(e.ownerDocument,e)||e.getRootNode(xt)===e.ownerDocument});function wt(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return C.css(e,t,"")},u=s(),l=n&&n[3]||(C.cssNumber[t]?"":"px"),c=e.nodeType&&(C.cssNumber[t]||"px"!==l&&+u)&&yt.exec(C.css(e,t));if(c&&c[3]!==l){for(l=l||c[3],c=+(u/=2)||1;a--;)C.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;C.style(e,t,(c*=2)+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r)&&(r.unit=l,r.start=c,r.end=i),i}var Tt={};function Ct(e,t){for(var n,r,i,o,a,s=[],u=0,l=e.length;u<l;u++)(r=e[u]).style&&(n=r.style.display,t?("none"===n&&(s[u]=y.get(r,"display")||null,s[u]||(r.style.display="")),""===r.style.display&&mt(r)&&(s[u]=(a=o=void 0,o=(i=r).ownerDocument,i=i.nodeName,(a=Tt[i])||(o=o.body.appendChild(o.createElement(i)),a=C.css(o,"display"),o.parentNode.removeChild(o),Tt[i]=a="none"===a?"block":a),a))):"none"!==n&&(s[u]="none",y.set(r,"display",n)));for(u=0;u<l;u++)null!=s[u]&&(e[u].style.display=s[u]);return e}C.fn.extend({show:function(){return Ct(this,!0)},hide:function(){return Ct(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){mt(this)?C(this).show():C(this).hide()})}});var kt=/^(?:checkbox|radio)$/i,Et=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,St=/^$|^module$|\/(?:java|ecma)script/i,m=(i=T.createDocumentFragment().appendChild(T.createElement("div")),(o=T.createElement("input")).setAttribute("type","radio"),o.setAttribute("checked","checked"),o.setAttribute("name","t"),i.appendChild(o),g.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,i.innerHTML="<textarea>x</textarea>",g.noCloneChecked=!!i.cloneNode(!0).lastChild.defaultValue,i.innerHTML="<option></option>",g.option=!!i.lastChild,{thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]});function O(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&x(e,t)?C.merge([e],n):n}function jt(e,t){for(var n=0,r=e.length;n<r;n++)y.set(e[n],"globalEval",!t||y.get(t[n],"globalEval"))}m.tbody=m.tfoot=m.colgroup=m.caption=m.thead,m.th=m.td,g.option||(m.optgroup=m.option=[1,"<select multiple='multiple'>","</select>"]);var At=/<|&#?\w+;/;function Dt(e,t,n,r,i){for(var o,a,s,u,l,c=t.createDocumentFragment(),f=[],d=0,p=e.length;d<p;d++)if((o=e[d])||0===o)if("object"===Y(o))C.merge(f,o.nodeType?[o]:o);else if(At.test(o)){for(a=a||c.appendChild(t.createElement("div")),s=(Et.exec(o)||["",""])[1].toLowerCase(),s=m[s]||m._default,a.innerHTML=s[1]+C.htmlPrefilter(o)+s[2],l=s[0];l--;)a=a.lastChild;C.merge(f,a.childNodes),(a=c.firstChild).textContent=""}else f.push(t.createTextNode(o));for(c.textContent="",d=0;o=f[d++];)if(r&&-1<C.inArray(o,r))i&&i.push(o);else if(u=bt(o),a=O(c.appendChild(o),"script"),u&&jt(a),n)for(l=0;o=a[l++];)St.test(o.type||"")&&n.push(o);return c}var Nt=/^([^.]*)(?:\.(.+)|)/;function qt(){return!0}function Mt(){return!1}function Ot(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ot(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Mt;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return C().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=C.guid++)),e.each(function(){C.event.add(this,t,i,r,n)})}function Lt(e,r,t){t?(y.set(e,r,!1),C.event.add(e,r,{namespace:!1,handler:function(e){var t,n=y.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(C.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=s.call(arguments),y.set(this,r,n),this[r](),t=y.get(this,r),y.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(y.set(this,r,C.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=qt)}})):void 0===y.get(e,r)&&C.event.add(e,r,qt)}C.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,d,p,h=y.get(t);if(ft(t))for(n.handler&&(n=(o=n).handler,i=o.selector),i&&C.find.matchesSelector(vt,i),n.guid||(n.guid=C.guid++),s=(s=h.events)||(h.events=Object.create(null)),a=(a=h.handle)||(h.handle=function(e){return void 0!==C&&C.event.triggered!==e.type?C.event.dispatch.apply(t,arguments):void 0}),u=(e=(e||"").match(q)||[""]).length;u--;)f=p=(d=Nt.exec(e[u])||[])[1],d=(d[2]||"").split(".").sort(),f&&(l=C.event.special[f]||{},f=(i?l.delegateType:l.bindType)||f,l=C.event.special[f]||{},p=C.extend({type:f,origType:p,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&C.expr.match.needsContext.test(i),namespace:d.join(".")},o),(c=s[f])||((c=s[f]=[]).delegateCount=0,l.setup&&!1!==l.setup.call(t,r,d,a))||t.addEventListener&&t.addEventListener(f,a),l.add&&(l.add.call(t,p),p.handler.guid||(p.handler.guid=n.guid)),i?c.splice(c.delegateCount++,0,p):c.push(p),C.event.global[f]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,m=y.hasData(e)&&y.get(e);if(m&&(u=m.events)){for(l=(t=(t||"").match(q)||[""]).length;l--;)if(p=g=(s=Nt.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),p){for(f=C.event.special[p]||{},d=u[p=(r?f.delegateType:f.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;o--;)c=d[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(e,c));a&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,h,m.handle)||C.removeEvent(e,p,m.handle),delete u[p])}else for(p in u)C.event.remove(e,p+t[l],n,r,!0);C.isEmptyObject(u)&&y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a=new Array(arguments.length),s=C.event.fix(e),e=(y.get(this,"events")||Object.create(null))[s.type]||[],u=C.event.special[s.type]||{};for(a[0]=s,t=1;t<arguments.length;t++)a[t]=arguments[t];if(s.delegateTarget=this,!u.preDispatch||!1!==u.preDispatch.call(this,s)){for(o=C.event.handlers.call(this,s,e),t=0;(r=o[t++])&&!s.isPropagationStopped();)for(s.currentTarget=r.elem,n=0;(i=r.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!1!==i.namespace&&!s.rnamespace.test(i.namespace)||(s.handleObj=i,s.data=i.data,void 0!==(i=((C.event.special[i.origType]||{}).handle||i.handler).apply(r.elem,a))&&!1===(s.result=i)&&(s.preventDefault(),s.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<C(i,this).index(l):C.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(C.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[C.expando]?e:new C.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){e=this||e;return kt.test(e.type)&&e.click&&x(e,"input")&&Lt(e,"click",!0),!1},trigger:function(e){e=this||e;return kt.test(e.type)&&e.click&&x(e,"input")&&Lt(e,"click"),!0},_default:function(e){e=e.target;return kt.test(e.type)&&e.click&&x(e,"input")&&y.get(e,"click")||x(e,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},C.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},C.Event=function(e,t){if(!(this instanceof C.Event))return new C.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?qt:Mt,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&C.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[C.expando]=!0},C.Event.prototype={constructor:C.Event,isDefaultPrevented:Mt,isPropagationStopped:Mt,isImmediatePropagationStopped:Mt,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=qt,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=qt,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=qt,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},C.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},C.event.addProp),C.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){var t,n;T.documentMode?(t=y.get(this,"handle"),(n=C.event.fix(e)).type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)):C.event.simulate(i,e.target,C.event.fix(e))}C.event.special[r]={setup:function(){var e;if(Lt(this,r,!0),!T.documentMode)return!1;(e=y.get(this,i))||this.addEventListener(i,o),y.set(this,i,(e||0)+1)},trigger:function(){return Lt(this,r),!0},teardown:function(){var e;if(!T.documentMode)return!1;(e=y.get(this,i)-1)?y.set(this,i,e):(this.removeEventListener(i,o),y.remove(this,i))},_default:function(e){return y.get(e.target,r)},delegateType:i},C.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=T.documentMode?this:e,n=y.get(t,i);n||(T.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),y.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=T.documentMode?this:e,n=y.get(t,i)-1;n?y.set(t,i,n):(T.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),y.remove(t,i))}}}),C.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){C.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||C.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),C.fn.extend({on:function(e,t,n,r){return Ot(this,e,t,n,r)},one:function(e,t,n,r){return Ot(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)r=e.handleObj,C(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler);else{if("object"!=typeof e)return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Mt),this.each(function(){C.event.remove(this,e,n,t)});for(i in e)this.off(i,t,e[i])}return this}});var Ht=/<script|<style|<link/i,Rt=/checked\s*(?:[^=]|=\s*.checked.)/i,Pt=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Ft(e,t){return x(e,"table")&&x(11!==t.nodeType?t:t.firstChild,"tr")&&C(e).children("tbody")[0]||e}function It(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Wt(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function _t(e,t){var n,r,i,o;if(1===t.nodeType){if(y.hasData(e)&&(o=y.get(e).events))for(i in y.remove(t,"handle events"),o)for(n=0,r=o[i].length;n<r;n++)C.event.add(t,i,o[i][n]);l.hasData(e)&&(e=l.access(e),e=C.extend({},e),l.set(t,e))}}function zt(n,r,i,o){r=I(r);var e,t,a,s,u,l,c=0,f=n.length,d=f-1,p=r[0],h=v(p);if(h||1<f&&"string"==typeof p&&!g.checkClone&&Rt.test(p))return n.each(function(e){var t=n.eq(e);h&&(r[0]=p.call(this,e,t.html())),zt(t,r,i,o)});if(f&&(t=(e=Dt(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=C.map(O(e,"script"),It)).length;c<f;c++)u=e,c!==d&&(u=C.clone(u,!0,!0),s)&&C.merge(a,O(u,"script")),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,C.map(a,Wt),c=0;c<s;c++)u=a[c],St.test(u.type||"")&&!y.access(u,"globalEval")&&C.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?C._evalUrl&&!u.noModule&&C._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):V(u.textContent.replace(Pt,""),u,l))}return n}function Bt(e,t,n){for(var r,i=t?C.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||C.cleanData(O(r)),r.parentNode&&(n&&bt(r)&&jt(O(r,"script")),r.parentNode.removeChild(r));return e}C.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=bt(e);if(!(g.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||C.isXMLDoc(e)))for(a=O(c),r=0,i=(o=O(e)).length;r<i;r++)s=o[r],u=a[r],l=void 0,"input"===(l=u.nodeName.toLowerCase())&&kt.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||O(e),a=a||O(c),r=0,i=o.length;r<i;r++)_t(o[r],a[r]);else _t(e,c);return 0<(a=O(c,"script")).length&&jt(a,!f&&O(e,"script")),c},cleanData:function(e){for(var t,n,r,i=C.event.special,o=0;void 0!==(n=e[o]);o++)if(ft(n)){if(t=n[y.expando]){if(t.events)for(r in t.events)i[r]?C.event.remove(n,r):C.removeEvent(n,r,t.handle);n[y.expando]=void 0}n[l.expando]&&(n[l.expando]=void 0)}}}),C.fn.extend({detach:function(e){return Bt(this,e,!0)},remove:function(e){return Bt(this,e)},text:function(e){return c(this,function(e){return void 0===e?C.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return zt(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ft(this,e).appendChild(e)})},prepend:function(){return zt(this,arguments,function(e){var t;1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(t=Ft(this,e)).insertBefore(e,t.firstChild)})},before:function(){return zt(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return zt(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(C.cleanData(O(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return C.clone(this,e,t)})},html:function(e){return c(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ht.test(e)&&!m[(Et.exec(e)||["",""])[1].toLowerCase()]){e=C.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(C.cleanData(O(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return zt(this,arguments,function(e){var t=this.parentNode;C.inArray(this,n)<0&&(C.cleanData(O(this)),t)&&t.replaceChild(e,this)},n)}}),C.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){C.fn[e]=function(e){for(var t,n=[],r=C(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),C(r[o])[a](t),W.apply(n,t.get());return this.pushStack(n)}});function $t(e){var t=e.ownerDocument.defaultView;return(t=t&&t.opener?t:w).getComputedStyle(e)}function Ut(e,t,n){var r,i={};for(r in t)i[r]=e.style[r],e.style[r]=t[r];for(r in n=n.call(e),t)e.style[r]=i[r];return n}var Xt,Vt,Yt,Gt,Qt,Jt,Kt,a,Zt=new RegExp("^("+e+")(?!px)[a-z%]+$","i"),en=/^--/,tn=new RegExp(h.join("|"),"i");function nn(){var e;a&&(Kt.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",a.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",vt.appendChild(Kt).appendChild(a),e=w.getComputedStyle(a),Xt="1%"!==e.top,Jt=12===rn(e.marginLeft),a.style.right="60%",Gt=36===rn(e.right),Vt=36===rn(e.width),a.style.position="absolute",Yt=12===rn(a.offsetWidth/3),vt.removeChild(Kt),a=null)}function rn(e){return Math.round(parseFloat(e))}function on(e,t,n){var r,i=en.test(t),o=e.style;return(n=n||$t(e))&&(r=n.getPropertyValue(t)||n[t],""!==(r=i?r&&(r.replace(ee,"$1")||void 0):r)||bt(e)||(r=C.style(e,t)),!g.pixelBoxStyles())&&Zt.test(r)&&tn.test(t)&&(i=o.width,e=o.minWidth,t=o.maxWidth,o.minWidth=o.maxWidth=o.width=r,r=n.width,o.width=i,o.minWidth=e,o.maxWidth=t),void 0!==r?r+"":r}function an(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}Kt=T.createElement("div"),(a=T.createElement("div")).style&&(a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",g.clearCloneStyle="content-box"===a.style.backgroundClip,C.extend(g,{boxSizingReliable:function(){return nn(),Vt},pixelBoxStyles:function(){return nn(),Gt},pixelPosition:function(){return nn(),Xt},reliableMarginLeft:function(){return nn(),Jt},scrollboxSize:function(){return nn(),Yt},reliableTrDimensions:function(){var e,t,n;return null==Qt&&(e=T.createElement("table"),t=T.createElement("tr"),n=T.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",vt.appendChild(e).appendChild(t).appendChild(n),n=w.getComputedStyle(t),Qt=parseInt(n.height,10)+parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10)===t.offsetHeight,vt.removeChild(e)),Qt}}));var sn=["Webkit","Moz","ms"],un=T.createElement("div").style,ln={};function cn(e){var t=C.cssProps[e]||ln[e];return t||(e in un?e:ln[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=sn.length;n--;)if((e=sn[n]+t)in un)return e}(e)||e)}var fn=/^(none|table(?!-c[ea]).+)/,dn={position:"absolute",visibility:"hidden",display:"block"},pn={letterSpacing:"0",fontWeight:"400"};function hn(e,t,n){var r=yt.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function gn(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=C.css(e,n+h[a],!0,i)),r?("content"===n&&(u-=C.css(e,"padding"+h[a],!0,i)),"margin"!==n&&(u-=C.css(e,"border"+h[a]+"Width",!0,i))):(u+=C.css(e,"padding"+h[a],!0,i),"padding"!==n?u+=C.css(e,"border"+h[a]+"Width",!0,i):s+=C.css(e,"border"+h[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function mn(e,t,n){var r=$t(e),i=(!g.boxSizingReliable()||n)&&"border-box"===C.css(e,"boxSizing",!1,r),o=i,a=on(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Zt.test(a)){if(!n)return a;a="auto"}return(!g.boxSizingReliable()&&i||!g.reliableTrDimensions()&&x(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===C.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===C.css(e,"boxSizing",!1,r),o=s in e)&&(a=e[s]),(a=parseFloat(a)||0)+gn(e,t,n||(i?"border":"content"),o,r,a)+"px"}function L(e,t,n,r,i){return new L.prototype.init(e,t,n,r,i)}C.extend({cssHooks:{opacity:{get:function(e,t){if(t)return""===(t=on(e,"opacity"))?"1":t}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=M(t),u=en.test(t),l=e.style;if(u||(t=cn(s)),a=C.cssHooks[t]||C.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=yt.exec(n))&&i[1]&&(n=wt(e,t,i),o="number"),null==n||n!=n||("number"!==o||u||(n+=i&&i[3]||(C.cssNumber[s]?"":"px")),g.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r)))||(u?l.setProperty(t,n):l[t]=n)}},css:function(e,t,n,r){var i,o=M(t);return en.test(t)||(t=cn(o)),"normal"===(i=void 0===(i=(o=C.cssHooks[t]||C.cssHooks[o])&&"get"in o?o.get(e,!0,n):i)?on(e,t,r):i)&&t in pn&&(i=pn[t]),(""===n||n)&&(o=parseFloat(i),!0===n||isFinite(o))?o||0:i}}),C.each(["height","width"],function(e,a){C.cssHooks[a]={get:function(e,t,n){if(t)return!fn.test(C.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?mn(e,a,n):Ut(e,dn,function(){return mn(e,a,n)})},set:function(e,t,n){var r=$t(e),i=!g.scrollboxSize()&&"absolute"===r.position,o=(i||n)&&"border-box"===C.css(e,"boxSizing",!1,r),n=n?gn(e,a,n,o,r):0;return o&&i&&(n-=Math.ceil(e["offset"+a[0].toUpperCase()+a.slice(1)]-parseFloat(r[a])-gn(e,a,"border",!1,r)-.5)),n&&(o=yt.exec(t))&&"px"!==(o[3]||"px")&&(e.style[a]=t,t=C.css(e,a)),hn(0,t,n)}}}),C.cssHooks.marginLeft=an(g.reliableMarginLeft,function(e,t){if(t)return(parseFloat(on(e,"marginLeft"))||e.getBoundingClientRect().left-Ut(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),C.each({margin:"",padding:"",border:"Width"},function(i,o){C.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+h[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(C.cssHooks[i+o].set=hn)}),C.fn.extend({css:function(e,t){return c(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$t(e),i=t.length;a<i;a++)o[t[a]]=C.css(e,t[a],!1,r);return o}return void 0!==n?C.style(e,t,n):C.css(e,t)},e,t,1<arguments.length)}}),((C.Tween=L).prototype={constructor:L,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||C.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(C.cssNumber[n]?"":"px")},cur:function(){var e=L.propHooks[this.prop];return(e&&e.get?e:L.propHooks._default).get(this)},run:function(e){var t,n=L.propHooks[this.prop];return this.options.duration?this.pos=t=C.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),(n&&n.set?n:L.propHooks._default).set(this),this}}).init.prototype=L.prototype,(L.propHooks={_default:{get:function(e){return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(e=C.css(e.elem,e.prop,""))&&"auto"!==e?e:0},set:function(e){C.fx.step[e.prop]?C.fx.step[e.prop](e):1!==e.elem.nodeType||!C.cssHooks[e.prop]&&null==e.elem.style[cn(e.prop)]?e.elem[e.prop]=e.now:C.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=L.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},C.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},C.fx=L.prototype.init,C.fx.step={};var yn,vn,bn=/^(?:toggle|show|hide)$/,xn=/queueHooks$/;function wn(){vn&&(!1===T.hidden&&w.requestAnimationFrame?w.requestAnimationFrame(wn):w.setTimeout(wn,C.fx.interval),C.fx.tick())}function Tn(){return w.setTimeout(function(){yn=void 0}),yn=Date.now()}function Cn(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=h[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function kn(e,t,n){for(var r,i=(H.tweeners[t]||[]).concat(H.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function H(i,e,t){var n,o,r,a,s,u,l,c=0,f=H.prefilters.length,d=C.Deferred().always(function(){delete p.elem}),p=function(){if(!o){for(var e=yn||Tn(),e=Math.max(0,h.startTime+h.duration-e),t=1-(e/h.duration||0),n=0,r=h.tweens.length;n<r;n++)h.tweens[n].run(t);if(d.notifyWith(i,[h,t,e]),t<1&&r)return e;r||d.notifyWith(i,[h,1,0]),d.resolveWith(i,[h])}return!1},h=d.promise({elem:i,props:C.extend({},e),opts:C.extend(!0,{specialEasing:{},easing:C.easing._default},t),originalProperties:e,originalOptions:t,startTime:yn||Tn(),duration:t.duration,tweens:[],createTween:function(e,t){t=C.Tween(i,h.opts,e,t,h.opts.specialEasing[e]||h.opts.easing);return h.tweens.push(t),t},stop:function(e){var t=0,n=e?h.tweens.length:0;if(!o){for(o=!0;t<n;t++)h.tweens[t].run(1);e?(d.notifyWith(i,[h,1,0]),d.resolveWith(i,[h,e])):d.rejectWith(i,[h,e])}return this}}),g=h.props,m=g,y=h.opts.specialEasing;for(r in m)if(s=y[a=M(r)],u=m[r],Array.isArray(u)&&(s=u[1],u=m[r]=u[0]),r!==a&&(m[a]=u,delete m[r]),(l=C.cssHooks[a])&&"expand"in l)for(r in u=l.expand(u),delete m[a],u)r in m||(m[r]=u[r],y[r]=s);else y[a]=s;for(;c<f;c++)if(n=H.prefilters[c].call(h,i,g,h.opts))return v(n.stop)&&(C._queueHooks(h.elem,h.opts.queue).stop=n.stop.bind(n)),n;return C.map(g,kn,h),v(h.opts.start)&&h.opts.start.call(i,h),h.progress(h.opts.progress).done(h.opts.done,h.opts.complete).fail(h.opts.fail).always(h.opts.always),C.fx.timer(C.extend(p,{elem:i,anim:h,queue:h.opts.queue})),h}C.Animation=C.extend(H,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return wt(n.elem,e,yt.exec(t),n),n}]},tweener:function(e,t){for(var n,r=0,i=(e=v(e)?(t=e,["*"]):e.match(q)).length;r<i;r++)n=e[r],H.tweeners[n]=H.tweeners[n]||[],H.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c="width"in t||"height"in t,f=this,d={},p=e.style,h=e.nodeType&&mt(e),g=y.get(e,"fxshow");for(r in n.queue||(null==(a=C._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,f.always(function(){f.always(function(){a.unqueued--,C.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],bn.test(i)){if(delete t[r],o=o||"toggle"===i,i===(h?"hide":"show")){if("show"!==i||!g||void 0===g[r])continue;h=!0}d[r]=g&&g[r]||C.style(e,r)}if((u=!C.isEmptyObject(t))||!C.isEmptyObject(d))for(r in c&&1===e.nodeType&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],null==(l=g&&g.display)&&(l=y.get(e,"display")),"none"===(c=C.css(e,"display"))&&(l?c=l:(Ct([e],!0),l=e.style.display||l,c=C.css(e,"display"),Ct([e]))),"inline"===c||"inline-block"===c&&null!=l)&&"none"===C.css(e,"float")&&(u||(f.done(function(){p.display=l}),null==l&&(c=p.display,l="none"===c?"":c)),p.display="inline-block"),n.overflow&&(p.overflow="hidden",f.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]})),u=!1,d)u||(g?"hidden"in g&&(h=g.hidden):g=y.access(e,"fxshow",{display:l}),o&&(g.hidden=!h),h&&Ct([e],!0),f.done(function(){for(r in h||Ct([e]),y.remove(e,"fxshow"),d)C.style(e,r,d[r])})),u=kn(h?g[r]:0,r,f),r in g||(g[r]=u.start,h&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?H.prefilters.unshift(e):H.prefilters.push(e)}}),C.speed=function(e,t,n){var r=e&&"object"==typeof e?C.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return C.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in C.fx.speeds?r.duration=C.fx.speeds[r.duration]:r.duration=C.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&C.dequeue(this,r.queue)},r},C.fn.extend({fadeTo:function(e,t,n,r){return this.filter(mt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){function i(){var e=H(this,C.extend({},t),a);(o||y.get(this,"finish"))&&e.stop(!0)}var o=C.isEmptyObject(t),a=C.speed(e,n,r);return i.finish=i,o||!1===a.queue?this.each(i):this.queue(a.queue,i)},stop:function(i,e,o){function a(e){var t=e.stop;delete e.stop,t(o)}return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=C.timers,r=y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&xn.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||C.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=C.timers,o=n?n.length:0;for(t.finish=!0,C.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),C.each(["toggle","show","hide"],function(e,r){var i=C.fn[r];C.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(Cn(r,!0),e,t,n)}}),C.each({slideDown:Cn("show"),slideUp:Cn("hide"),slideToggle:Cn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){C.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),C.timers=[],C.fx.tick=function(){var e,t=0,n=C.timers;for(yn=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||C.fx.stop(),yn=void 0},C.fx.timer=function(e){C.timers.push(e),C.fx.start()},C.fx.interval=13,C.fx.start=function(){vn||(vn=!0,wn())},C.fx.stop=function(){vn=null},C.fx.speeds={slow:600,fast:200,_default:400},C.fn.delay=function(r,e){return r=C.fx&&C.fx.speeds[r]||r,this.queue(e=e||"fx",function(e,t){var n=w.setTimeout(e,r);t.stop=function(){w.clearTimeout(n)}})},o=T.createElement("input"),i=T.createElement("select").appendChild(T.createElement("option")),o.type="checkbox",g.checkOn=""!==o.value,g.optSelected=i.selected,(o=T.createElement("input")).value="t",o.type="radio",g.radioValue="t"===o.value;var En,Sn=C.expr.attrHandle,jn=(C.fn.extend({attr:function(e,t){return c(this,C.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){C.removeAttr(this,e)})}}),C.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?C.prop(e,t,n):(1===o&&C.isXMLDoc(e)||(i=C.attrHooks[t.toLowerCase()]||(C.expr.match.bool.test(t)?En:void 0)),void 0!==n?null===n?void C.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):!(i&&"get"in i&&null!==(r=i.get(e,t)))&&null==(r=C.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){var n;if(!g.radioValue&&"radio"===t&&x(e,"input"))return n=e.value,e.setAttribute("type",t),n&&(e.value=n),t}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(q);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),En={set:function(e,t,n){return!1===t?C.removeAttr(e,n):e.setAttribute(n,n),n}},C.each(C.expr.match.bool.source.match(/\w+/g),function(e,t){var a=Sn[t]||C.find.attr;Sn[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=Sn[o],Sn[o]=r,r=null!=a(e,t,n)?o:null,Sn[o]=i),r}}),/^(?:input|select|textarea|button)$/i),An=/^(?:a|area)$/i;function Dn(e){return(e.match(q)||[]).join(" ")}function Nn(e){return e.getAttribute&&e.getAttribute("class")||""}function qn(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(q)||[]}C.fn.extend({prop:function(e,t){return c(this,C.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[C.propFix[e]||e]})}}),C.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&C.isXMLDoc(e)||(t=C.propFix[t]||t,i=C.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=C.find.attr(e,"tabindex");return t?parseInt(t,10):jn.test(e.nodeName)||An.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(C.propHooks.selected={get:function(e){e=e.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(e){e=e.parentNode;e&&(e.selectedIndex,e.parentNode)&&e.parentNode.selectedIndex}}),C.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){C.propFix[this.toLowerCase()]=this}),C.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){C(this).addClass(t.call(this,e,Nn(this)))}):(e=qn(t)).length?this.each(function(){if(r=Nn(this),n=1===this.nodeType&&" "+Dn(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Dn(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){C(this).removeClass(t.call(this,e,Nn(this)))}):arguments.length?(e=qn(t)).length?this.each(function(){if(r=Nn(this),n=1===this.nodeType&&" "+Dn(r)+" "){for(o=0;o<e.length;o++)for(i=e[o];-1<n.indexOf(" "+i+" ");)n=n.replace(" "+i+" "," ");a=Dn(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"==a||Array.isArray(t);return v(t)?this.each(function(e){C(this).toggleClass(t.call(this,e,Nn(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=qn(t),this.each(function(){if(s)for(o=C(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!=a||((r=Nn(this))&&y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",!r&&!1!==t&&y.get(this,"__className__")||""))}))},hasClass:function(e){for(var t,n=0,r=" "+e+" ";t=this[n++];)if(1===t.nodeType&&-1<(" "+Dn(Nn(t))+" ").indexOf(r))return!0;return!1}});function Mn(e){e.stopPropagation()}var On=/\r/g,Ln=(C.fn.extend({val:function(t){var n,e,r,i=this[0];return arguments.length?(r=v(t),this.each(function(e){1!==this.nodeType||(null==(e=r?t.call(this,e,C(this).val()):t)?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=C.map(e,function(e){return null==e?"":e+""})),(n=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()])&&"set"in n&&void 0!==n.set(this,e,"value"))||(this.value=e)})):i?(n=C.valHooks[i.type]||C.valHooks[i.nodeName.toLowerCase()])&&"get"in n&&void 0!==(e=n.get(i,"value"))?e:"string"==typeof(e=i.value)?e.replace(On,""):null==e?"":e:void 0}}),C.extend({valHooks:{option:{get:function(e){var t=C.find.attr(e,"value");return null!=t?t:Dn(C.text(e))}},select:{get:function(e){for(var t,n=e.options,r=e.selectedIndex,i="select-one"===e.type,o=i?null:[],a=i?r+1:n.length,s=r<0?a:i?r:0;s<a;s++)if(((t=n[s]).selected||s===r)&&!t.disabled&&(!t.parentNode.disabled||!x(t.parentNode,"optgroup"))){if(t=C(t).val(),i)return t;o.push(t)}return o},set:function(e,t){for(var n,r,i=e.options,o=C.makeArray(t),a=i.length;a--;)((r=i[a]).selected=-1<C.inArray(C.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),C.each(["radio","checkbox"],function(){C.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<C.inArray(C(e).val(),t)}},g.checkOn||(C.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),w.location),Hn={guid:Date.now()},Rn=/\?/,Pn=(C.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new w.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||C.error("Invalid XML: "+(n?C.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t},/^(?:focusinfocus|focusoutblur)$/),Fn=(C.extend(C.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f=[n||T],d=B.call(e,"type")?e.type:e,p=B.call(e,"namespace")?e.namespace.split("."):[],h=c=o=n=n||T;if(3!==n.nodeType&&8!==n.nodeType&&!Pn.test(d+C.event.triggered)&&(-1<d.indexOf(".")&&(d=(p=d.split(".")).shift(),p.sort()),s=d.indexOf(":")<0&&"on"+d,(e=e[C.expando]?e:new C.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=p.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:C.makeArray(t,[e]),l=C.event.special[d]||{},r||!l.trigger||!1!==l.trigger.apply(n,t))){if(!r&&!l.noBubble&&!P(n)){for(a=l.delegateType||d,Pn.test(a+d)||(h=h.parentNode);h;h=h.parentNode)f.push(h),o=h;o===(n.ownerDocument||T)&&f.push(o.defaultView||o.parentWindow||w)}for(i=0;(h=f[i++])&&!e.isPropagationStopped();)c=h,e.type=1<i?a:l.bindType||d,(u=(y.get(h,"events")||Object.create(null))[e.type]&&y.get(h,"handle"))&&u.apply(h,t),(u=s&&h[s])&&u.apply&&ft(h)&&(e.result=u.apply(h,t),!1===e.result)&&e.preventDefault();return e.type=d,r||e.isDefaultPrevented()||l._default&&!1!==l._default.apply(f.pop(),t)||!ft(n)||s&&v(n[d])&&!P(n)&&((o=n[s])&&(n[s]=null),C.event.triggered=d,e.isPropagationStopped()&&c.addEventListener(d,Mn),n[d](),e.isPropagationStopped()&&c.removeEventListener(d,Mn),C.event.triggered=void 0,o)&&(n[s]=o),e.result}},simulate:function(e,t,n){n=C.extend(new C.Event,n,{type:e,isSimulated:!0});C.event.trigger(n,null,t)}}),C.fn.extend({trigger:function(e,t){return this.each(function(){C.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return C.event.trigger(e,t,n,!0)}}),/\[\]$/),In=/\r?\n/g,Wn=/^(?:submit|button|image|reset|file)$/i,_n=/^(?:input|select|textarea|keygen)/i;C.param=function(e,t){function n(e,t){t=v(t)?t():t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==t?"":t)}var r,i=[];if(null==e)return"";if(Array.isArray(e)||e.jquery&&!C.isPlainObject(e))C.each(e,function(){n(this.name,this.value)});else for(r in e)!function n(r,e,i,o){if(Array.isArray(e))C.each(e,function(e,t){i||Fn.test(r)?o(r,t):n(r+"["+("object"==typeof t&&null!=t?e:"")+"]",t,i,o)});else if(i||"object"!==Y(e))o(r,e);else for(var t in e)n(r+"["+t+"]",e[t],i,o)}(r,e[r],t,n);return i.join("&")},C.fn.extend({serialize:function(){return C.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=C.prop(this,"elements");return e?C.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!C(this).is(":disabled")&&_n.test(this.nodeName)&&!Wn.test(e)&&(this.checked||!kt.test(e))}).map(function(e,t){var n=C(this).val();return null==n?null:Array.isArray(n)?C.map(n,function(e){return{name:t.name,value:e.replace(In,"\r\n")}}):{name:t.name,value:n.replace(In,"\r\n")}}).get()}});var zn=/%20/g,Bn=/#.*$/,$n=/([?&])_=[^&]*/,Un=/^(.*?):[ \t]*([^\r\n]*)$/gm,Xn=/^(?:GET|HEAD)$/,Vn=/^\/\//,Yn={},Gn={},Qn="*/".concat("*"),Jn=T.createElement("a");function Kn(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(q)||[];if(v(t))for(;n=i[r++];)"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Zn(t,r,i,o){var a={},s=t===Gn;function u(e){var n;return a[e]=!0,C.each(t[e]||[],function(e,t){t=t(r,i,o);return"string"!=typeof t||s||a[t]?s?!(n=t):void 0:(r.dataTypes.unshift(t),u(t),!1)}),n}return u(r.dataTypes[0])||!a["*"]&&u("*")}function er(e,t){var n,r,i=C.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r=r||{})[n]=t[n]);return r&&C.extend(!0,e,r),e}Jn.href=Ln.href,C.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ln.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Ln.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":C.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?er(er(e,C.ajaxSettings),t):er(C.ajaxSettings,e)},ajaxPrefilter:Kn(Yn),ajaxTransport:Kn(Gn),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0);var u,l,c,n,f,d,p,r,h=C.ajaxSetup({},t=t||{}),g=h.context||h,m=h.context&&(g.nodeType||g.jquery)?C(g):C.event,y=C.Deferred(),v=C.Callbacks("once memory"),b=h.statusCode||{},i={},o={},a="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(d){if(!n)for(n={};t=Un.exec(c);)n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return d?c:null},setRequestHeader:function(e,t){return null==d&&(e=o[e.toLowerCase()]=o[e.toLowerCase()]||e,i[e]=t),this},overrideMimeType:function(e){return null==d&&(h.mimeType=e),this},statusCode:function(e){if(e)if(d)x.always(e[x.status]);else for(var t in e)b[t]=[b[t],e[t]];return this},abort:function(e){e=e||a;return u&&u.abort(e),s(0,e),this}};if(y.promise(x),h.url=((e||h.url||Ln.href)+"").replace(Vn,Ln.protocol+"//"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(q)||[""],null==h.crossDomain){e=T.createElement("a");try{e.href=h.url,e.href=e.href,h.crossDomain=Jn.protocol+"//"+Jn.host!=e.protocol+"//"+e.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=C.param(h.data,h.traditional)),Zn(Yn,h,t,x),!d){for(r in(p=C.event&&h.global)&&0==C.active++&&C.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Xn.test(h.type),l=h.url.replace(Bn,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(zn,"+")):(e=h.url.slice(l.length),h.data&&(h.processData||"string"==typeof h.data)&&(l+=(Rn.test(l)?"&":"?")+h.data,delete h.data),!1===h.cache&&(l=l.replace($n,"$1"),e=(Rn.test(l)?"&":"?")+"_="+Hn.guid+++e),h.url=l+e),h.ifModified&&(C.lastModified[l]&&x.setRequestHeader("If-Modified-Since",C.lastModified[l]),C.etag[l])&&x.setRequestHeader("If-None-Match",C.etag[l]),(h.data&&h.hasContent&&!1!==h.contentType||t.contentType)&&x.setRequestHeader("Content-Type",h.contentType),x.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Qn+"; q=0.01":""):h.accepts["*"]),h.headers)x.setRequestHeader(r,h.headers[r]);if(h.beforeSend&&(!1===h.beforeSend.call(g,x,h)||d))return x.abort();if(a="abort",v.add(h.complete),x.done(h.success),x.fail(h.error),u=Zn(Gn,h,t,x)){if(x.readyState=1,p&&m.trigger("ajaxSend",[x,h]),d)return x;h.async&&0<h.timeout&&(f=w.setTimeout(function(){x.abort("timeout")},h.timeout));try{d=!1,u.send(i,s)}catch(e){if(d)throw e;s(-1,e)}}else s(-1,"No Transport")}return x;function s(e,t,n,r){var i,o,a,s=t;d||(d=!0,f&&w.clearTimeout(f),u=void 0,c=r||"",x.readyState=0<e?4:0,r=200<=e&&e<300||304===e,n&&(a=function(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a=a||i}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(h,x,n)),!r&&-1<C.inArray("script",h.dataTypes)&&C.inArray("json",h.dataTypes)<0&&(h.converters["text script"]=function(){}),a=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(h,a,x,r),r?(h.ifModified&&((n=x.getResponseHeader("Last-Modified"))&&(C.lastModified[l]=n),n=x.getResponseHeader("etag"))&&(C.etag[l]=n),204===e||"HEAD"===h.type?s="nocontent":304===e?s="notmodified":(s=a.state,i=a.data,r=!(o=a.error))):(o=s,!e&&s||(s="error",e<0&&(e=0))),x.status=e,x.statusText=(t||s)+"",r?y.resolveWith(g,[i,s,x]):y.rejectWith(g,[x,s,o]),x.statusCode(b),b=void 0,p&&m.trigger(r?"ajaxSuccess":"ajaxError",[x,h,r?i:o]),v.fireWith(g,[x,s]),p&&(m.trigger("ajaxComplete",[x,h]),--C.active||C.event.trigger("ajaxStop")))}},getJSON:function(e,t,n){return C.get(e,t,n,"json")},getScript:function(e,t){return C.get(e,void 0,t,"script")}}),C.each(["get","post"],function(e,i){C[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),C.ajax(C.extend({url:e,type:i,dataType:r,data:t,success:n},C.isPlainObject(e)&&e))}}),C.ajaxPrefilter(function(e){for(var t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),C._evalUrl=function(e,t,n){return C.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){C.globalEval(e,t,n)}})},C.fn.extend({wrapAll:function(e){return this[0]&&(v(e)&&(e=e.call(this[0])),e=C(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){C(this).wrapInner(n.call(this,e))}):this.each(function(){var e=C(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){C(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){C(this).replaceWith(this.childNodes)}),this}}),C.expr.pseudos.hidden=function(e){return!C.expr.pseudos.visible(e)},C.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},C.ajaxSettings.xhr=function(){try{return new w.XMLHttpRequest}catch(e){}};var tr={0:200,1223:204},nr=C.ajaxSettings.xhr(),rr=(g.cors=!!nr&&"withCredentials"in nr,g.ajax=nr=!!nr,C.ajaxTransport(function(i){var o,a;if(g.cors||nr&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(tr[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&w.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),C.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),C.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return C.globalEval(e),e}}}),C.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),C.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=C("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),T.head.appendChild(r[0])},abort:function(){i&&i()}}}),[]),ir=/(=)\?(?=&|$)|\?\?/,or=(C.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=rr.pop()||C.expando+"_"+Hn.guid++;return this[e]=!0,e}}),C.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(ir.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&ir.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(ir,"$1"+r):!1!==e.jsonp&&(e.url+=(Rn.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||C.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=w[r],w[r]=function(){o=arguments},n.always(function(){void 0===i?C(w).removeProp(r):w[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,rr.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),g.createHTMLDocument=((e=T.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===e.childNodes.length),C.parseHTML=function(e,t,n){var r;return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(g.createHTMLDocument?((r=(t=T.implementation.createHTMLDocument("")).createElement("base")).href=T.location.href,t.head.appendChild(r)):t=T),r=!n&&[],(n=Ge.exec(e))?[t.createElement(n[1])]:(n=Dt([e],t,r),r&&r.length&&C(r).remove(),C.merge([],n.childNodes)))},C.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Dn(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&C.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?C("<div>").append(C.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},C.expr.pseudos.animated=function(t){return C.grep(C.timers,function(e){return t===e.elem}).length},C.offset={setOffset:function(e,t,n){var r,i,o,a,s=C.css(e,"position"),u=C(e),l={};"static"===s&&(e.style.position="relative"),o=u.offset(),r=C.css(e,"top"),a=C.css(e,"left"),s=("absolute"===s||"fixed"===s)&&-1<(r+a).indexOf("auto")?(i=(s=u.position()).top,s.left):(i=parseFloat(r)||0,parseFloat(a)||0),null!=(t=v(t)?t.call(e,n,C.extend({},o)):t).top&&(l.top=t.top-o.top+i),null!=t.left&&(l.left=t.left-o.left+s),"using"in t?t.using.call(e,l):u.css(l)}},C.fn.extend({offset:function(t){var e,n;return arguments.length?void 0===t?this:this.each(function(e){C.offset.setOffset(this,t,e)}):(n=this[0])?n.getClientRects().length?(e=n.getBoundingClientRect(),n=n.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===C.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===C.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=C(e).offset()).top+=C.css(e,"borderTopWidth",!0),i.left+=C.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-C.css(r,"marginTop",!0),left:t.left-i.left-C.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===C.css(e,"position");)e=e.offsetParent;return e||vt})}}),C.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;C.fn[t]=function(e){return c(this,function(e,t,n){var r;if(P(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),C.each(["top","left"],function(e,n){C.cssHooks[n]=an(g.pixelPosition,function(e,t){if(t)return t=on(e,n),Zt.test(t)?C(e).position()[n]+"px":t})}),C.each({Height:"height",Width:"width"},function(a,s){C.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){C.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return c(this,function(e,t,n){var r;return P(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?C.css(e,t,i):C.style(e,t,n,i)},s,n?e:void 0,n)}})}),C.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){C.fn[t]=function(e){return this.on(t,e)}}),C.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),C.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){C.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g),ar=(C.proxy=function(e,t){var n,r;if("string"==typeof t&&(r=e[t],t=e,e=r),v(e))return n=s.call(arguments,2),(r=function(){return e.apply(t||this,n.concat(s.call(arguments)))}).guid=e.guid=e.guid||C.guid++,r},C.holdReady=function(e){e?C.readyWait++:C.ready(!0)},C.isArray=Array.isArray,C.parseJSON=JSON.parse,C.nodeName=x,C.isFunction=v,C.isWindow=P,C.camel
8952Case=M,C.type=Y,C.now=Date.now,C.isNumeric=function(e){var t=C.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},C.trim=function(e){return null==e?"":(e+"").replace(or,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return C}),w.jQuery),sr=w.$;return C.noConflict=function(e){return w.$===C&&(w.$=sr),e&&w.jQuery===C&&(w.jQuery=ar),C},void 0===R&&(w.jQuery=w.$=C),C})},{}]},{},[7]);;
8953/*jslint browser: true, evil: true */
8954
8955var scripts = document.getElementsByTagName('script'),
8956    path = scripts[scripts.length - 1].src.split('?')[0],
8957    tarteaucitronForceCDN = (tarteaucitronForceCDN === undefined) ? '' : tarteaucitronForceCDN,
8958    cdn = (tarteaucitronForceCDN === '') ? path.split('/').slice(0, -1).join('/') + '/' : tarteaucitronForceCDN,
8959    alreadyLaunch = (alreadyLaunch === undefined) ? 0 : alreadyLaunch,
8960    tarteaucitronForceLanguage = (tarteaucitronForceLanguage === undefined) ? '' : tarteaucitronForceLanguage,
8961    tarteaucitronForceExpire = (tarteaucitronForceExpire === undefined) ? '' : tarteaucitronForceExpire,
8962    tarteaucitronCustomText = (tarteaucitronCustomText === undefined) ? '' : tarteaucitronCustomText,
8963    // tarteaucitronExpireInDay: true for day(s) value - false for hour(s) value
8964    tarteaucitronExpireInDay = (tarteaucitronExpireInDay === undefined || typeof tarteaucitronExpireInDay !== "boolean") ? true : tarteaucitronExpireInDay,
8965    timeExpire = 31536000000,
8966    tarteaucitronProLoadServices,
8967    tarteaucitronNoAdBlocker = false;
8968
8969
8970
8971var tarteaucitron = {
8972    "version": 20220322,
8973    "cdn": cdn,
8974    "user": {},
8975    "lang": {},
8976    "services": {},
8977    "added": [],
8978    "idprocessed": [],
8979    "state": [],
8980    "launch": [],
8981    "parameters": {},
8982    "isAjax": false,
8983    "reloadThePage": false,
8984    "events": {
8985        "init": function () {},
8986        "load": function () {},
8987    },
8988    "init": function (params) {
8989        "use strict";
8990        var origOpen;
8991
8992        tarteaucitron.parameters = params;
8993        if (alreadyLaunch === 0) {
8994            alreadyLaunch = 1;
8995            if (window.addEventListener) {
8996                window.addEventListener("load", function () {
8997                    tarteaucitron.initEvents.loadEvent(false);
8998                }, false);
8999                window.addEventListener("scroll", function () {
9000                    tarteaucitron.initEvents.scrollEvent();
9001                }, false);
9002
9003                window.addEventListener("keydown", function (evt) {
9004                    tarteaucitron.initEvents.keydownEvent(false, evt);
9005                }, false);
9006                window.addEventListener("hashchange", function () {
9007                    tarteaucitron.initEvents.hashchangeEvent();
9008                }, false);
9009                window.addEventListener("resize", function () {
9010                    tarteaucitron.initEvents.resizeEvent();
9011                }, false);
9012            } else {
9013                window.attachEvent("onload", function () {
9014                    tarteaucitron.initEvents.loadEvent(true);
9015                });
vendor: 5,716 bytes, lines 9015-9148
9015
9016                window.attachEvent("onscroll", function () {
9017                    tarteaucitron.initEvents.scrollEvent();
9018                });
9019                window.attachEvent("onkeydown", function (evt) {
9020                    tarteaucitron.initEvents.keydownEvent(true, evt);
9021
9022                });
9023                window.attachEvent("onhashchange", function () {
9024                    tarteaucitron.initEvents.hashchangeEvent();
9025                });
9026                window.attachEvent("onresize", function () {
9027                    tarteaucitron.initEvents.resizeEvent();
9028                });
9029            }
9030
9031            if (typeof XMLHttpRequest !== 'undefined') {
9032                origOpen = XMLHttpRequest.prototype.open;
9033                XMLHttpRequest.prototype.open = function () {
9034
9035                    if (window.addEventListener) {
9036                        this.addEventListener("load", function () {
9037                            if (typeof tarteaucitronProLoadServices === 'function') {
9038                                tarteaucitronProLoadServices();
9039                            }
9040                        }, false);
9041                    } else if (typeof this.attachEvent !== 'undefined') {
9042                        this.attachEvent("onload", function () {
9043                            if (typeof tarteaucitronProLoadServices === 'function') {
9044                                tarteaucitronProLoadServices();
9045                            }
9046                        });
9047                    } else {
9048                        if (typeof tarteaucitronProLoadServices === 'function') {
9049                            setTimeout(tarteaucitronProLoadServices, 1000);
9050                        }
9051                    }
9052
9053                    try {
9054                        origOpen.apply(this, arguments);
9055                    } catch (err) {}
9056                };
9057            }
9058        }
9059
9060        if(tarteaucitron.events.init) {
9061            tarteaucitron.events.init();
9062        }
9063    },
9064    "initEvents": {
9065        "loadEvent": function (isOldBrowser) {
9066            tarteaucitron.load();
9067            tarteaucitron.fallback(['tarteaucitronOpenPanel'], function (elem) {
9068                if (isOldBrowser) {
9069                    elem.attachEvent("onclick", function (event) {
9070                        tarteaucitron.userInterface.openPanel();
9071                        event.preventDefault();
9072                    });
9073                } else {
9074                    elem.addEventListener("click", function (event) {
9075                        tarteaucitron.userInterface.openPanel();
9076                        event.preventDefault();
9077                    }, false);
9078                }
9079            }, true);
9080        },
9081        "keydownEvent": function (isOldBrowser, evt) {
9082            if (evt.keyCode === 27) {
9083                tarteaucitron.userInterface.closePanel();
9084            }
9085
9086            if (isOldBrowser) {
9087                if ( evt.keyCode === 9 && focusableEls.indexOf(evt.target) >= 0) {
9088                    if ( evt.shiftKey ) /* shift + tab */ {
9089                        if (document.activeElement === firstFocusableEl) {
9090                            lastFocusableEl.focus();
9091                            evt.preventDefault();
9092                        }
9093                    } else /* tab */ {
9094                        if (document.activeElement === lastFocusableEl) {
9095                            firstFocusableEl.focus();
9096                            evt.preventDefault();
9097                        }
9098                    }
9099                }
9100            }
9101        },
9102        "hashchangeEvent": function () {
9103            if (document.location.hash === tarteaucitron.hashtag && tarteaucitron.hashtag !== '') {
9104                tarteaucitron.userInterface.openPanel();
9105            }
9106        },
9107        "resizeEvent": function () {
9108            var tacElem = document.getElementById('tarteaucitron');
9109            var tacCookieContainer = document.getElementById('tarteaucitronCookiesListContainer');
9110
9111            if (tacElem && tacElem.style.display === 'block') {
9112                tarteaucitron.userInterface.jsSizing('main');
9113            }
9114
9115            if (tacCookieContainer && tacCookieContainer.style.display === 'block') {
9116                tarteaucitron.userInterface.jsSizing('cookie');
9117            }
9118        },
9119        "scrollEvent": function () {
9120            var scrollPos = window.pageYOffset || document.documentElement.scrollTop;
9121            var heightPosition;
9122            var tacPercentage = document.getElementById('tarteaucitronPercentage');
9123            var tacAlertBig = document.getElementById('tarteaucitronAlertBig');
9124
9125            if (tacAlertBig && !tarteaucitron.highPrivacy) {
9126                if (tacAlertBig.style.display === 'block') {
9127                    heightPosition = tacAlertBig.offsetHeight + 'px';
9128
9129                    if (scrollPos > (screen.height * 2)) {
9130                        tarteaucitron.userInterface.respondAll(true);
9131                    } else if (scrollPos > (screen.height / 2)) {
9132                        document.getElementById('tarteaucitronDisclaimerAlert').innerHTML = '<strong>' + tarteaucitron.lang.alertBigScroll + '</strong> ' + tarteaucitron.lang.alertBig;
9133                    }
9134
9135                    if (tacPercentage) {
9136                        if (tarteaucitron.orientation === 'top') {
9137                            tacPercentage.style.top = heightPosition;
9138                        } else {
9139                            tacPercentage.style.bottom = heightPosition;
9140                        }
9141                        tacPercentage.style.width = ((100 / (screen.height * 2)) * scrollPos) + '%';
9142                    }
9143                }
9144            }
9145        },
9146    },
9147    "load": function () {
9148        "use strict";
9149        var cdn = tarteaucitron.cdn,
9150            language = tarteaucitron.getLanguage(),
9151            useJSDelivrMinifiedJS = (cdn.indexOf('cdn.jsdelivr.net') >= 0),
9152            pathToLang = cdn + 'lang/tarteaucitron.' + language + (useJSDelivrMinifiedJS ? '.min' : '') + '.js?v=' + tarteaucitron.version,
9153            pathToServices = cdn + 'tarteaucitron.services' + (useJSDelivrMinifiedJS ? '.min' : '') + '.js?v=' + tarteaucitron.version,
9154            linkElement = document.createElement('link'),
9155            defaults = {
9156                "adblocker": false,
9157                "hashtag": '#tarteaucitron',
9158                "cookieName": 'tarteaucitron',
9159                "highPrivacy": true,
9160                "orientation": "middle",
9161                "bodyPosition": "bottom",
9162                "removeCredit": false,
9163                "showAlertSmall": false,
9164                "showIcon": true,
9165                "iconPosition": "BottomRight",
9166                "cookieslist": false,
9167                "handleBrowserDNTRequest": false,
9168                "DenyAllCta": true,
9169                "AcceptAllCta" : true,
9170                "moreInfoLink": true,
9171                "privacyUrl": "",
9172                "useExternalCss": false,
9173                "useExternalJs": false,
9174                "mandatory": true,
9175                "mandatoryCta": true,
9176                "closePopup": false,
9177                "groupServices": false,
9178                "serviceDefaultState": 'wait',
9179            },
9180            params = tarteaucitron.parameters;
9181
9182        // Don't show the middle bar if we are on the privacy policy or more page
9183        if (((tarteaucitron.parameters.readmoreLink !== undefined && window.location.href == tarteaucitron.parameters.readmoreLink) || window.location.href == tarteaucitron.parameters.privacyUrl) && tarteaucitron.parameters.orientation == "middle") {
9184            tarteaucitron.parameters.orientation = "bottom";
9185        }
9186
9187        // Step -1
9188        if (typeof tarteaucitronCustomPremium !== 'undefined') {
9189            tarteaucitronCustomPremium();
9190        }
9191
9192        // Step 0: get params
9193        if (params !== undefined) {
9194
9195            for (var k in defaults) {
9196                if(!tarteaucitron.parameters.hasOwnProperty(k)) {
9197                    tarteaucitron.parameters[k] = defaults[k];
9198                }
9199            }
9200        }
9201
9202        // global
9203        tarteaucitron.orientation = tarteaucitron.parameters.orientation;
9204        tarteaucitron.hashtag = tarteaucitron.parameters.hashtag;
9205        tarteaucitron.highPrivacy = tarteaucitron.parameters.highPrivacy;
9206        tarteaucitron.handleBrowserDNTRequest = tarteaucitron.parameters.handleBrowserDNTRequest;
9207        tarteaucitron.customCloserId = tarteaucitron.parameters.customCloserId;
9208
9209        // Step 1: load css
9210        if ( !tarteaucitron.parameters.useExternalCss ) {
9211            linkElement.rel = 'stylesheet';
9212            linkElement.type = 'text/css';
9213            linkElement.href = cdn + 'css/tarteaucitron' + (useJSDelivrMinifiedJS ? '.min' : '') + '.css?v=' + tarteaucitron.version;
9214            document.getElementsByTagName('head')[0].appendChild(linkElement);
9215        }
9216        // Step 2: load language and services
9217        tarteaucitron.addInternalScript(pathToLang, '', function () {
9218
9219          if(tarteaucitronCustomText !== ''){
9220            tarteaucitron.lang = tarteaucitron.AddOrUpdate(tarteaucitron.lang, tarteaucitronCustomText);
9221          }
9222            tarteaucitron.addInternalScript(pathToServices, '', function () {
9223
9224                // css for the middle bar TODO: add it on the css file
9225                if (tarteaucitron.orientation === 'middle') {
9226                    var customThemeMiddle = document.createElement('style'),
9227                        cssRuleMiddle = 'div#tarteaucitronRoot.tarteaucitronBeforeVisible:before {content: \'\';position: fixed;width: 100%;height: 100%;background: white;top: 0;left: 0;z-index: 999;opacity: 0.5;}div#tarteaucitronAlertBig:before {content: \'' + tarteaucitron.lang.middleBarHead + '\';font-size: 35px;}body #tarteaucitronRoot div#tarteaucitronAlertBig {width: 60%;min-width: 285px;height: auto;margin: auto;left: 50%;top: 50%;transform: translate(-50%, -50%);box-shadow: 0 0 9000px #000;border-radius: 20px;padding: 35px 25px;}
9227span#tarteaucitronDisclaimerAlert {padding: 0 30px;}#tarteaucitronRoot span#tarteaucitronDisclaimerAlert {margin: 10px 0 30px;display: block;text-align: center;font-size: 21px;}@media screen and (max-width: 900px) {div#tarteaucitronAlertBig button {margin: 0 auto 10px!important;display: block!important;}}';
9228
9229                    customThemeMiddle.type = 'text/css';
9230                    if (customThemeMiddle.styleSheet) {
9231                        customThemeMiddle.styleSheet.cssText = cssRuleMiddle;
9232                    } else {
9233                        customThemeMiddle.appendChild(document.createTextNode(cssRuleMiddle));
9234                    }
9235                    document.getElementsByTagName('head')[0].appendChild(customThemeMiddle);
9236                }
9237
9238                // css for the popup bar TODO: add it on the css file
9239                if (tarteaucitron.orientation === 'popup') {
9240                    var customThemePopup = document.createElement('style'),
9241                        cssRulePopup = 'div#tarteaucitronAlertBig:before {content: \'' + tarteaucitron.lang.middleBarHead + '\';font-size: 22px;}body #tarteaucitronRoot div#tarteaucitronAlertBig {bottom: 0;top: auto!important;left: 8px!important;right: auto!important;transform: initial!important;border-radius: 5px 5px 0 0!important;max-width: 250px!important;width: Calc(100% - 16px)!important;min-width: 0!important;padding: 25px 0;}span#tarteaucitronDisclaimerAlert {padding: 0 30px;font-size: 15px!important;}#tarteaucitronRoot span#tarteaucitronDisclaimerAlert {margin: 10px 0 30px;display: block;text-align: center;font-size: 21px;}div#tarteaucitronAlertBig button {margin: 0 auto 10px!important;display: block!important;width: Calc(100% - 60px);box-sizing: border-box;}';
9242
9243                    customThemePopup.type = 'text/css';
9244                    if (customThemePopup.styleSheet) {
9245                        customThemePopup.styleSheet.cssText = cssRulePopup;
9246                    } else {
9247                        customThemePopup.appendChild(document.createTextNode(cssRulePopup));
9248                    }
9249                    document.getElementsByTagName('head')[0].appendChild(customThemePopup);
9250                }
9251
9252                var body = document.body,
9253                    div = document.createElement('div'),
9254                    html = '',
9255                    index,
9256                    orientation = 'Top',
9257                    cat = ['ads', 'analytic', 'api', 'comment', 'social', 'support', 'video', 'other'],
9258                    i;
9259
9260                cat = cat.sort(function (a, b) {
9261                    if (tarteaucitron.lang[a].title > tarteaucitron.lang[b].title) { return 1; }
9262                    if (tarteaucitron.lang[a].title < tarteaucitron.lang[b].title) { return -1; }
9263                    return 0;
9264                });
9265
9266                // Step 3: prepare the html
9267                html += '<div role="heading" aria-level="1" id="tac_title" class="tac_visually-hidden">' + tarteaucitron.lang.title + '</div>';
9268                html += '<div id="tarteaucitronPremium"></div>';
9269                if (tarteaucitron.reloadThePage) {
9270                    html += '<button type="button" id="tarteaucitronBack" aria-label="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')" title="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')"></button>';
9271                } else {
9272                    html += '<button type="button" id="tarteaucitronBack" aria-label="' + tarteaucitron.lang.close + '" title="' + tarteaucitron.lang.close + '"></button>';
9273                }
9274                html += '<div id="tarteaucitron" role="dialog" aria-modal="true" aria-labelledby="dialogTitle" tabindex="-1">';
9275                if (tarteaucitron.reloadThePage) {
9276                    html += '   <button type="button" id="tarteaucitronClosePanel" aria-label="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')" title="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')">';
9277                } else {
9278                    html += '   <button type="button" id="tarteaucitronClosePanel">';
9279                }
9280                html += '       ' + tarteaucitron.lang.close;
9281                html += '   </button>';
9282                html += '   <div id="tarteaucitronServices">';
9283                html += '      <div class="tarteaucitronLine tarteaucitronMainLine" id="tarteaucitronMainLineOffset">';
vendor: 11,410 bytes, lines 9284-9425
9284                html += '         <span class="tarteaucitronH1" role="heading" aria-level="1" id="dialogTitle">'+ tarteaucitron.lang.title + '</span>';
9285                html += '         <div id="tarteaucitronInfo">';
9286                html += '         ' + tarteaucitron.lang.disclaimer;
9287                if (tarteaucitron.parameters.privacyUrl !== "") {
9288                    html += '   <br/><br/>';
9289                    html += '   <button type="button" id="tarteaucitronPrivacyUrlDialog" role="link">';
9290                    html += '       ' + tarteaucitron.lang.privacyUrl;
9291                    html += '   </button>';
9292                }
9293                html += '         </div>';
9294                html += '         <div class="tarteaucitronName">';
9295                html += '            <span class="tarteaucitronH2" role="heading" aria-level="2">' + tarteaucitron.lang.all + '</span>';
9296                html += '         </div>';
9297                html += '         <div class="tarteaucitronAsk" id="tarteaucitronScrollbarAdjust">';
9298                html += '            <button type="button" id="tarteaucitronAllAllowed" class="tarteaucitronAllow">';
9299                html += '               <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.allowAll;
9300                html += '            </button> ';
9301                html += '            <button type="button" id="tarteaucitronAllDenied" class="tarteaucitronDeny">';
9302                html += '               <span class="tarteaucitronCross" aria-hidden="true"></span> ' + tarteaucitron.lang.denyAll;
9303                html += '            </button>';
9304                html += '         </div>';
9305                html += '      </div>';
9306                html += '      <div class="tarteaucitronBorder">';
9307                html += '         <div class="clear"></div><ul>';
9308
9309
9310                if (tarteaucitron.parameters.mandatory == true) {
9311                   html += '<li id="tarteaucitronServicesTitle_mandatory">';
9312                   html += '<div class="tarteaucitronTitle">';
9313                   html += '   <button type="button" tabindex="-1"><span class="tarteaucitronPlus" aria-hidden="true"></span> ' + tarteaucitron.lang.mandatoryTitle + '</button>';
9314                   html += '</div>';
9315                   html += '<ul id="tarteaucitronServices_mandatory">';
9316                   html += '<li class="tarteaucitronLine">';
9317                   html += '   <div class="tarteaucitronName">';
9318                   html += '       <span class="tarteaucitronH3" role="heading" aria-level="3">' + tarteaucitron.lang.mandatoryText + '</span>';
9319                   html += '       <span class="tarteaucitronListCookies" aria-hidden="true"></span><br/>';
9320                   html += '   </div>';
9321                   if (tarteaucitron.parameters.mandatoryCta == true) {
9322                       html += '   <div class="tarteaucitronAsk">';
9323                       html += '       <button type="button" class="tarteaucitronAllow" tabindex="-1" disabled>';
9324                       html += '           <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.allow;
9325                       html += '       </button> ';
9326                       html += '       <button type="button" class="tarteaucitronDeny" style="visibility:hidden" tabindex="-1">';
9327                       html += '           <span class="tarteaucitronCross" aria-hidden="true"></span> ' + tarteaucitron.lang.deny;
9328                       html += '       </button> ';
9329                       html += '   </div>';
9330                   }
9331                   html += '</li>';
9332                   html += '</ul></li>';
9333                }
9334
9335                for (i = 0; i < cat.length; i += 1) {
9336                    html += '         <li id="tarteaucitronServicesTitle_' + cat[i] + '" class="tarteaucitronHidden">';
9337                    html += '            <div class="tarteaucitronTitle" role="heading" aria-level="2">';
9338                    html += '               <button type="button" class="catToggleBtn" aria-expanded="false" data-cat="tarteaucitronDetails' + cat[i] + '"><span class="tarteaucitronPlus" aria-hidden="true"></span> ' + tarteaucitron.lang[cat[i]].title + '</button>';
9339                    html += '            </div>';
9340                    html += '            <div id="tarteaucitronDetails' + cat[i] + '" class="tarteaucitronDetails tarteaucitronInfoBox">';
9341                    html += '               ' + tarteaucitron.lang[cat[i]].details;
9342                    html += '            </div>';
9343                    html += '         <ul id="tarteaucitronServices_' + cat[i] + '"></ul></li>';
9344                }
9345                html += '             <li id="tarteaucitronNoServicesTitle" class="tarteaucitronLine">' + tarteaucitron.lang.noServices + '</li>';
9346                html += '         </ul>';
9347                html += '         <div class="tarteaucitronHidden tarteaucitron-spacer-20" id="tarteaucitronScrollbarChild"></div>';
9348                if (tarteaucitron.parameters.removeCredit === false) {
9349                    html += '     <a class="tarteaucitronSelfLink" href="https://tarteaucitron.io/" rel="nofollow noreferrer noopener" target="_blank" title="tarteaucitron ' + tarteaucitron.lang.newWindow + '"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHcAAAAeCAYAAAAWwoEYAAADl0lEQVRoge1Y0W3bQAx9CjKARlC+9GVUmqDJBHEmiDyB6wkcTxBngtgTxJ0gzgQW4C/9aYOmE6g4lTQo+k6y3Rb94QOERNQd+cjj8XiGwWAwGAwGg8FgMBgMBoPB8F8RNRXe+whEKe7c36ZCAeCRxC9Rig2PUd8kPgAsoxSfQ3YAzAA8D/HwYYCb05kBKKO0teFkmbC1jlKsAnq/Abjn+QBqAIsoRS30ttwG/HNz1wH/XIxWTicLdvtW7xTAGEAMtP685CNsBTe2d/BLydfXAG57SEnMAST0zgYZSUCPk02bCvkJduIzuJzDLfPolbY+tLKmar+/8+IRePy4qdpE03qHuH8fipFb4N2+XdA3AJ/0vaQxt7s9FvkIS2XvtqnwM0rxpOQfbnE5G2LhTCmUO2fHIngOmcv+KG3HafDchB6ntwjYqenR2PqC7sOZ3E7FXHB0vqxoFyUyLh7OEH7LOGouvhhN3eIBeKXv0n5MsufdHqXcwYR5U2EbpV35lSspVPJmQj4TcgRK7jTg5IzmPUhhwM5a2WHUFCx+NgiDucmgh7idikLovHFlL0pxQ9xzX+IIP9Y6FrJsqhjlQpZRAkFVDCjZfcCHt6bqJDmuh5ylCWx0RVnk3oumaknqTH5sqrY0fBWyULaHUIgAgxb46MxV3DbieAhxOxUxjSuljig9lMQ/Bcfoi9BTEv9aLORSndVxYOH525sUDC6u2gWxcNzBNRxPanyh3ktKinOgy3WoxPbtUM0t6RkbQnzBnFPgi9GCOEubY9UffIryz9iKRe8s/FUfEWosJJGxagp85bpUO3VywQ46lOtAWfNxKwa4JXQ+628+bpxYGXXMzp5rXH401VEyXwIdowXFaKWSMFHvMTVmGnc+P3oXV2QOiBCfgex8QtcQCbcQE/H+eoHzrkFo1KM7zVO4jVVj5s6lRiWF7zyXyfRMc97J3tzj87mYqZ7E2YjzUct9GUi4tjHLR8dVkBLjQcuHFleWvQfRNEhFR7uX7pkctOwvZXsft7sAtyldEUIN2UTeLxnEfxKYswzdi88BdbZ8hifUoSMftQvP+muRwN6+Q3DeqqRExP9QmTtcheiHh0Ot1x2i2km1bP9pbufw5zZdyWsOrh7vQae5OZWbsMv30pi7cd/CKj3coPEVaCP4Zhx4eQWhOZ1Y9MTXGyP8/iGjEyfa1T4fO/4Lea9vBoPBYDAYDAaDwWAwGAwGwz8GgF8siXCCbrSRhgAAAABJRU5ErkJggg==" alt="tarteaucitron.io" /></a>';
9350                }
9351                html += '       </div>';
9352                html += '   </div>';
9353                html += '</div>';
9354
9355                if (tarteaucitron.parameters.orientation === 'bottom') {
9356                    orientation = 'Bottom';
9357                }
9358
9359                if (tarteaucitron.parameters.highPrivacy && !tarteaucitron.parameters.AcceptAllCta) {
9360                    html += '<div tabindex="-1" id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + '">';
9361                    //html += '<div class="tarteaucitronAlertBigWrapper">';
9362                    html += '   <span id="tarteaucitronDisclaimerAlert">';
9363                    html += '       ' + tarteaucitron.lang.alertBigPrivacy;
9364                    html += '   </span>';
9365                    //html += '   <span class="tarteaucitronAlertBigBtnWrapper">';
9366                    html += '   <button type="button" id="tarteaucitronPersonalize" aria-label="' + tarteaucitron.lang.personalize + ' ' + tarteaucitron.lang.modalWindow + '" title="' + tarteaucitron.lang.personalize + ' ' + tarteaucitron.lang.modalWindow + '">';
9367                    html += '       ' + tarteaucitron.lang.personalize;
9368                    html += '   </button>';
9369
9370                    if (tarteaucitron.parameters.privacyUrl !== "") {
9371                        html += '   <button role="link" type="button" id="tarteaucitronPrivacyUrl">';
9372                        html += '       ' + tarteaucitron.lang.privacyUrl;
9373                        html += '   </button>';
9374                    }
9375
9376                    //html += '   </span>';
9377                    //html += '</div>';
9378                    html += '</div>';
9379                } else {
9380                    html += '<div tabindex="-1" id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + '">';
9381                    //html += '<div class="tarteaucitronAlertBigWrapper">';
9382                    html += '   <span id="tarteaucitronDisclaimerAlert">';
9383
9384                    if (tarteaucitron.parameters.highPrivacy) {
9385                        html += '       ' + tarteaucitron.lang.alertBigPrivacy;
9386                    } else {
9387                        html += '       ' + tarteaucitron.lang.alertBigClick + ' ' + tarteaucitron.lang.alertBig;
9388                    }
9389
9390                    html += '   </span>';
9391                    //html += '   <span class="tarteaucitronAlertBigBtnWrapper">';
9392                    html += '   <button type="button" class="tarteaucitronCTAButton tarteaucitronAllow" id="tarteaucitronPersonalize2">';
9393                    html += '       <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.acceptAll;
9394                    html += '   </button>';
9395
9396
9397                    if (tarteaucitron.parameters.DenyAllCta) {
9398                        if (tarteaucitron.reloadThePage) {
9399                                    html += '   <button type="button" class="tarteaucitronCTAButton tarteaucitronDeny" id="tarteaucitronAllDenied2" aria-label="' + tarteaucitron.lang.denyAll + ' (' + tarteaucitron.lang.reload + ')" title="' + tarteaucitron.lang.denyAll + ' (' + tarteaucitron.lang.reload + ')">';
9400                        } else {
9401                                    html += '   <button type="button" class="tarteaucitronCTAButton tarteaucitronDeny" id="tarteaucitronAllDenied2">';
9402                        }
9403                                    html += '       <span class="tarteaucitronCross" aria-hidden="true"></span> ' + tarteaucitron.lang.denyAll;
9404                                    html += '   </button>';
9405                                    //html += '   <br/><br/>';
9406                    }
9407
9408                    html += '   <button type="button" id="tarteaucitronCloseAlert" aria-label="' + tarteaucitron.lang.personalize + ' ' + tarteaucitron.lang.modalWindow + '" title="' + tarteaucitron.lang.personalize + ' ' + tarteaucitron.lang.modalWindow + '">';
9409                    html += '       ' + tarteaucitron.lang.personalize;
9410                    html += '   </button>';
9411
9412                    if (tarteaucitron.parameters.privacyUrl !== "") {
9413                        html += '   <button type="button" id="tarteaucitronPrivacyUrl" role="link">';
9414                        html += '       ' + tarteaucitron.lang.privacyUrl;
9415                        html += '   </button>';
9416                    }
9417
9418                    //html += '   </span>';
9419                    //html += '</div>';
9420                    html += '</div>';
9421                    html += '<div id="tarteaucitronPercentage"></div>';
9422                }
9423
9424                if (tarteaucitron.parameters.showIcon === true) {
9425                    html += '<div id="tarteaucitronIcon" class="tarteaucitronIcon' + tarteaucitron.parameters.iconPosition + '" style="display: block
vendor: 4,897 bytes, lines 9425-9453
9425">';
9426                    html += '   <button type="button" id="tarteaucitronManager" aria-label="' + tarteaucitron.lang.icon + ' ' + tarteaucitron.lang.modalWindow + '" title="' + tarteaucitron.lang.icon + ' ' + tarteaucitron.lang.modalWindow + '">';
9427                    html += '       <img src="' + (tarteaucitron.parameters.iconSrc ? tarteaucitron.parameters.iconSrc : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAGA0lEQVRoge1a207bWBRdBtJwLYZhKDMVmlSK1LxNkPo+ZH6g8B6p5AuALwC+APoFoVLeoT8whPeRSt+CZKmZVu3AiIsRlEtCktGyjy8xzuXYhvahS0JJHJ/4rLP3XnuffcAPfGdQ7mM6jRLSAF4BxqsbewB2lRS2o35mpEQaJcwCyANIdLi1DGBNSWEzqmdHRqRRwjqAJclhtExOSUEP+/xIiDRKhhUWfL7ShTtBuJnqcw+/z4Ql0xNmMEwSSz4kuNIzSgpjSsqYJP/GeE185wYJroedRyiLNEpGLLzzrHSuk+83SgbxvOcyyRaDziWsRVZkSRDinpzPbwVGWIucuohsKynMS47fAQyls/BMSRmKJo3AFhG5wm2N1wF+Zs3zebbFfR0RxrXcJHQlgH+LMW616pR/WiIMEXfW3mtzXyeEGWsjKot8c4TOI98L+iKaR5PS6IUk88RLAO9F8UjrbYoYMOosNavpfmODIiwRXRR/G3ohaWVo1RU/c30jV8ab2mV8qVGzHWBOLyTLZiWs5Rolg/C3ySOi0tXP/k4aEwOwSBKPJs7Rp16ABJTe+p1xVX0It/owqqdDEMRoqd3RFxqDPh20Ig6VEPVC0i5RSCD+6wl6HlW7GksSlUMV11/GrUs5NasFLusDE9ELSVphXemtJwaT/8JyIRvxNNCfBmIiNdR04LII3DSrbe0yjqvyJF/ppptqVlt+MCLCEh/oOkPPP6N38Mb5cnQBGFsEqmXg5j3QMwoMzwGnr4HYbybBq13gZAOom/FO63zdf2qQArCsZrUN2TlJy69eSDKYV+6Q4MpP75ivHzPA53ngaBW4eGuSOt0A/lsGPmXMz0+3TFJcTfFbPfFbfnwlhON+iQhlWmA82CQ4ocQ7c6KcfL3DHuls0yT6Sx4YnLXJDCQOIRRv5yGIJBgP8Sdisj2qubpc5UGJmo+W49ifVmzL8HcpGhQPvZCUKiCliIhEN0tr2OCqHuSA8gwQ/92MkU7gxEmeVqGrTTgpxPXbUrtGWYus0I9thRIraagRQUIDf7Qn4yZhKRiFQIyhfMfUr3yblokVWSJ6k8xSnc7eNN/RjowfCYiFoDUFer1S3gW6JiJ8Nt30EMbEhU+vzSIztuRYjRLsR8IHLjlf7HZ+MrWWEXxNmbvapt4jGSqZRYSkGUetSNTPzHsui5YMQ2ajJUNks6mw4wT54Ok2ShnzzIPCUGshzawCRKy5FqvrTZe0RWzQGvw79m67XZjKmxJrLsICjtZa55gxXy+6F4sYsEtxTqhXdRTLC8ulSDaWoCLsolfN+8YUhOsJV709H7Cudr0LlVEtzqBcN+shEyThdR941OnAbF8pirKJqXyupTRTtQSReiVmXW1j7oBErB0d9xM2WEd5J9ZKYtuR4WKwwBSoORbpGrJ5ZI9lt71irJmGX1px0JYE26uNErawr2zfIcP4OHEKXm66PA3wjpCNEfpJunI4muifPjKvsFCkGjExTq63yxMJsZNMYF/J4HmDC5A3Yq36jy0ClePHVhwuu/b1HSFlEfHD5ZtD1bEK44Qu1mWys6tbWmZyPWckzlPTGiRw/XHCuk+q4Rek+mVrVL/UppwrdDEGNV2kpyuhccgc5Oxm9vWnn+19vJrVpLor0kTUrGacMplb1CfOFyTD4o9uNrHqr2Z+ZMSp1c2XcVSORnh9Q81q3k599ETgkNnjg0nGzi10K7rX+bZpHbrblPcY5A4Zxk2xcjzCvTpd9027Aa0QtouyyrKFRR6D/04DwkFGvHPXM3Qda/Jb4nPgI7hQLVM1q5HIBt2MzQNa57Z1DiiLAGa5Mi+O4Sz3Mpp6laPHO6InII3ITnX1QtI+EOX+m9ZxleOZ/j9PiuKoLi3aqXPuEoSye/Vhkm+LalbLtHhMS0R6zu7aZ3vP2jOjL7QVv4McxhcDnZIelAQibGIbULOapf3PuE1Vs9qeaOTdkVKr00gCQiw4NlBzDvf1Lxx+uP5r3Dgv5KQZRzWn+GRwz8jmDS8itUg7iB6vLuJCF5Uty4A9mVKkFR6MiJDachST/oHvHgD+B4SoUIitpF05AAAAAElFTkSuQmCC') + '" alt="' + tarteaucitron.lang.icon + ' ' + tarteaucitron.lang.modalWindow + '" title="' + tarteaucitron.lang.icon + ' ' + tarteaucitron.lang.modalWindow + '">';
9428                    html += '   </button>';
9429                    html += '</div>';
9430                }
9431
9432                if (tarteaucitron.parameters.showAlertSmall === true) {
9433                    html += '<div id="tarteaucitronAlertSmall" class="tarteaucitronAlertSmall' + orientation + '">';
9434                    html += '   <button type="button" id="tarteaucitronManager" aria-label="' + tarteaucitron.lang.alertSmall + ' ' + tarteaucitron.lang.modalWindow + '" title="' + tarteaucitron.lang.alertSmall + ' ' + tarteaucitron.lang.modalWindow + '">';
9435                    html += '       ' + tarteaucitron.lang.alertSmall;
9436                    html += '       <span id="tarteaucitronDot">';
9437                    html += '           <span id="tarteaucitronDotGreen"></span>';
9438                    html += '           <span id="tarteaucitronDotYellow"></span>';
9439                    html += '           <span id="tarteaucitronDotRed"></span>';
9440                    html += '       </span>';
9441                    if (tarteaucitron.parameters.cookieslist === true) {
9442                        html += '   </button><!-- @whitespace';
9443                        html += '   --><button type="button" id="tarteaucitronCookiesNumber" aria-expanded="false" aria-controls="tarteaucitronCookiesListContainer">0</button>';
9444                        html += '   <div id="tarteaucitronCookiesListContainer">';
9445                        if (tarteaucitron.reloadThePage) {
9446                            html += '       <button type="button" id="tarteaucitronClosePanelCookie" aria-label="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')" title="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')">';
9447                        } else {
9448                            html += '       <button type="button" id="tarteaucitronClosePanelCookie">';
9449                        }
9450                        html += '           ' + tarteaucitron.lang.close;
9451                        html += '       </button>';
9452                        html += '       <div class="tarteaucitronCookiesListMain" id="tarteaucitronCookiesTitle">';
9453                        html += '            <span class="tarteaucitronH2" role="heading" aria-level="
vendor: 12,634 bytes, lines 9453-9657
94532" id="tarteaucitronCookiesNumberBis">0 cookie</span>';
9454                        html += '       </div>';
9455                        html += '       <div id="tarteaucitronCookiesList"></div>';
9456                        html += '    </div>';
9457                    } else {
9458                        html += '   </div>';
9459                    }
9460                    html += '</div>';
9461                }
9462
9463                tarteaucitron.addInternalScript(tarteaucitron.cdn + 'advertising' + (useJSDelivrMinifiedJS ? '.min' : '') + '.js?v=' + tarteaucitron.version, '', function () {
9464                    if (tarteaucitronNoAdBlocker === true || tarteaucitron.parameters.adblocker === false) {
9465
9466                        // create a wrapper container at the same level than tarteaucitron so we can add an aria-hidden when tarteaucitron is opened
9467                        /*var wrapper = document.createElement('div');
9468                        wrapper.id = "tarteaucitronContentWrapper";
9469
9470                        while (document.body.firstChild)
9471                        {
9472                            wrapper.appendChild(document.body.firstChild);
9473                        }
9474
9475                        // Append the wrapper to the body
9476                        document.body.appendChild(wrapper);*/
9477
9478                        div.id = 'tarteaucitronRoot';
9479                        if (tarteaucitron.parameters.bodyPosition === 'top') {
9480                            // Prepend tarteaucitron: #tarteaucitronRoot first-child of the body for better accessibility
9481                            var bodyFirstChild = body.firstChild;
9482                            body.insertBefore(div, bodyFirstChild);
9483                        }
9484                        else {
9485                            // Append tarteaucitron: #tarteaucitronRoot last-child of the body
9486                            body.appendChild(div, body);
9487                        }
9488
9489                        div.setAttribute('data-nosnippet', 'true');
9490                        div.setAttribute('lang', language);
9491                        div.setAttribute('role', 'region');
9492                        div.setAttribute('aria-labelledby', 'tac_title');
9493
9494                        div.innerHTML = html;
9495
9496                        //ie compatibility
9497                        var tacRootAvailableEvent;
9498                        if(typeof(Event) === 'function') {
9499                            tacRootAvailableEvent = new Event("tac.root_available");
9500                        }else if (typeof(document.createEvent) === 'function'){
9501                            tacRootAvailableEvent = document.createEvent('Event');
9502                            tacRootAvailableEvent.initEvent("tac.root_available", true, true);
9503                        }
9504                        //end ie compatibility
9505
9506                        if (typeof(window.dispatchEvent) === 'function') {window.dispatchEvent(tacRootAvailableEvent);}
9507
9508                        if (tarteaucitron.job !== undefined) {
9509                            tarteaucitron.job = tarteaucitron.cleanArray(tarteaucitron.job);
9510                            for (index = 0; index < tarteaucitron.job.length; index += 1) {
9511                                tarteaucitron.addService(tarteaucitron.job[index]);
9512                            }
9513                        } else {
9514                            tarteaucitron.job = [];
9515                        }
9516
9517                        if (tarteaucitron.job.length === 0) {
9518                            tarteaucitron.userInterface.closeAlert();
9519                        }
9520
9521                        tarteaucitron.isAjax = true;
9522
9523                        tarteaucitron.job.push = function (id) {
9524
9525                            // ie <9 hack
9526                            if (typeof tarteaucitron.job.indexOf === 'undefined') {
9527                                tarteaucitron.job.indexOf = function (obj, start) {
9528                                    var i,
9529                                        j = this.length;
9530                                    for (i = (start || 0); i < j; i += 1) {
9531                                        if (this[i] === obj) { return i; }
9532                                    }
9533                                    return -1;
9534                                };
9535                            }
9536
9537                            if (tarteaucitron.job.indexOf(id) === -1) {
9538                                Array.prototype.push.call(this, id);
9539                            }
9540                            tarteaucitron.launch[id] = false;
9541                            tarteaucitron.addService(id);
9542                        };
9543
9544                        if (document.location.hash === tarteaucitron.hashtag && tarteaucitron.hashtag !== '') {
9545                            tarteaucitron.userInterface.openPanel();
9546                        }
9547
9548                        tarteaucitron.cookie.number();
9549                        setInterval(tarteaucitron.cookie.number, 60000);
9550                    }
9551                }, tarteaucitron.parameters.adblocker);
9552
9553                if (tarteaucitron.parameters.adblocker === true) {
9554                    setTimeout(function () {
9555                        if (tarteaucitronNoAdBlocker === false) {
9556                            html = '<div id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + ' tarteaucitron-display-block" role="alert" aria-live="polite">';
9557                            html += '   <p id="tarteaucitronDisclaimerAlert">';
9558                            html += '       ' + tarteaucitron.lang.adblock + '<br/>';
9559                            html += '       <strong>' + tarteaucitron.lang.adblock_call + '</strong>';
9560                            html += '   </p>';
9561                            html += '   <button type="button" class="tarteaucitronCTAButton" id="tarteaucitronCTAButton">';
9562                            html += '       ' + tarteaucitron.lang.reload;
9563                            html += '   </button>';
9564                            html += '</div>';
9565                            html += '<div role="heading" aria-level="1" id="tac_title" class="tac_visually-hidden">' + tarteaucitron.lang.title + '</div>';
9566                            html += '<div id="tarteaucitronPremium"></div>';
9567
9568                            div.id = 'tarteaucitronRoot';
9569                            if (tarteaucitron.parameters.bodyPosition === 'top') {
9570                                // Prepend tarteaucitron: #tarteaucitronRoot first-child of the body for better accessibility
9571                                var bodyFirstChild = body.firstChild;
9572                                body.insertBefore(div, bodyFirstChild);
9573                            }
9574                            else {
9575                                // Append tarteaucitron: #tarteaucitronRoot last-child of the body
9576                                body.appendChild(div, body);
9577                            }
9578
9579                            div.setAttribute('data-nosnippet', 'true');
9580                            div.setAttribute('lang', language);
9581                            div.setAttribute('role', 'region');
9582                            div.setAttribute('aria-labelledby', 'tac_title');
9583
9584                            div.innerHTML = html;
9585                        }
9586                    }, 1500);
9587                }
9588                if(tarteaucitron.parameters.closePopup === true){
9589                    setTimeout(function() {
9590                        var closeElement = document.getElementById('tarteaucitronAlertBig'),
9591                            closeSpan = document.createElement('span');
9592                        if (closeElement) {
9593                            closeSpan.textContent = 'X';
9594                            closeSpan.setAttribute('id', "tarteaucitronCloseCross");
9595                            closeElement.insertBefore(closeSpan, closeElement.firstElementChild);
9596                        }
9597                    }, 100);
9598                }
9599
9600
9601                if(tarteaucitron.parameters.groupServices === true) {
9602                    var tac_group_style = document.createElement('style');
9603                    tac_group_style.innerHTML = '.tarteaucitronTitle{display:none}';
9604                    document.head.appendChild(tac_group_style);
9605                    var cats = document.querySelectorAll('[id^="tarteaucitronServicesTitle_"]')
9606                    Array.prototype.forEach.call(cats, function(item) {
9607                        var cat = item.getAttribute('id').replace(/^(tarteaucitronServicesTitle_)/, "");
9608                        if (cat !== "mandatory") {
9609                            var html = '';
9610                            html += '<li  class="tarteaucitronLine">';
9611                            html += '   <div class="tarteaucitronName">';
9612                            html += '       <span class="tarteaucitronH3" role="heading" aria-level="2">'+tarteaucitron.lang[cat].title+'</span>';
9613                            html += '       <span>'+tarteaucitron.lang[cat].details+'</span>';
9614                            html += '   <button type="button" aria-expanded="false" class="tarteaucitron-toggle-group" id="tarteaucitron-toggle-group-'+cat+'">'+tarteaucitron.lang.alertSmall+' ('+document.getElementById("tarteaucitronServices_"+cat).childElementCount+')</button>';
9615                            html += '   </div>';
9616                            html += '   <div class="tarteaucitronAsk" id="tarteaucitron-group-'+cat+'">';
9617                            html += '       <button type="button" aria-label="' + tarteaucitron.lang.allow + ' ' + tarteaucitron.lang[cat].title + '" class="tarteaucitronAllow" id="tarteaucitron-accept-group-'+cat+'">';
9618                            html += '           <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.allow;
9619                            html += '       </button> ';
9620                            html += '       <button type="button" aria-label="' + tarteaucitron.lang.deny + ' ' + tarteaucitron.lang[cat].title + '" class="tarteaucitronDeny" id="tarteaucitron-reject-group-'+cat+'">';
9621                            html += '           <span class="tarteaucitronCross" aria-hidden="true"></span> ' + tarteaucitron.lang.deny;
9622                            html += '       </button>';
9623                            html += '   </div>';
9624                            html += '</li>';
9625                            var ul = document.createElement('ul');
9626                            ul.innerHTML = html;
9627                            item.insertBefore(ul, item.querySelector('#tarteaucitronServices_'+cat+''));
9628                            document.querySelector('#tarteaucitronServices_' + cat).style.display = 'none';
9629                            tarteaucitron.addClickEventToId("tarteaucitron-toggle-group-" + cat, function () {
9630                                tarteaucitron.userInterface.toggle('tarteaucitronServices_' + cat);
9631                               if (document.getElementById('tarteaucitronServices_' + cat).style.display == 'block') {
9632                                    tarteaucitron.userInterface.addClass('tarteaucitronServicesTitle_' + cat, 'tarteaucitronIsExpanded');
9633                                    document.getElementById('tarteaucitron-toggle-group-'+cat).setAttribute('aria-expanded', 'true');
9634                                } else {
9635                                    tarteaucitron.userInterface.removeClass('tarteaucitronServicesTitle_' + cat, 'tarteaucitronIsExpanded');
9636                                    document.getElementById('tarteaucitron-toggle-group-'+cat).setAttribute('aria-expanded', 'false');
9637                                }
9638                            });
9639                            tarteaucitron.addClickEventToId("tarteaucitron-accept-group-" + cat, function () {
9640                                tarteaucitron.userInterface.respondAll(true, cat);
9641                            });
9642                            tarteaucitron.addClickEventToId("tarteaucitron-reject-group-" + cat, function () {
9643                                tarteaucitron.userInterface.respondAll(false, cat);
9644                            });
9645                        }
9646                    });
9647                }
9648                tarteaucitron.userInterface.color("", true);
9649
9650                // add a little timeout to be sure everything is accessible
9651                setTimeout(function () {
9652
9653                    // Setup events
9654                    tarteaucitron.addClickEventToId("tarteaucitronCloseCross", function () {
9655                        tarteaucitron.userInterface.closeAlert();
9656                    });
9657                    tarteaucitron.addClickEventToId("tarteaucitronPersonalize", function () {
9658                        tarteaucitron.userInterface.openPanel();
9659                    });
9660                    tarteaucitron.addClickEventToId("tarteaucitronPersonalize2", function () {
9661                        tarteaucitron.userInterface.respondAll(true);
9662                    });
9663                    tarteaucitron.addClickEventToId("tarteaucitronManager", function () {
9664                        tarteaucitron.userInterface.openPanel();
9665                    });
9666                    tarteaucitron.addClickEventToId("tarteaucitronBack", function () {
9667                        tarteaucitron.userInterface.closePanel();
9668                    });
9669                    tarteaucitron.addClickEventToId("tarteaucitronClosePanel", function () {
9670                        tarteaucitron.userInterface.closePanel();
9671                    });
9672                    tarteaucitron.addClickEventToId("tarteaucitronClosePanelCookie", function () {
9673                        tarteaucitron.userInterface.closePanel();
9674                    });
9675                    tarteaucitron.addClickEventToId("tarteaucitronPrivacyUrl", function () {
9676                        document.location = tarteaucitron.parameters.privacyUrl;
9677                    });
9678                    tarteaucitron.addClickEventToId("tarteaucitronPrivacyUrlDialog", function () {
9679                        document.location = tarteaucitron.parameters.privacyUrl;
9680                    });
9681                    tarteaucitron.addClickEventToId("tarteaucitronCookiesNumber", function () {
9682                        tarteaucitron.userInterface.toggleCookiesList();
9683                    });
9684                    tarteaucitron.addClickEventToId("tarteaucitronAllAllowed", function () {
9685                        tarteaucitron.userInterface.respondAll(true);
9686                    });
9687                    tarteaucitron.addClickEventToId("tarteaucitronAllDenied", function () {
9688                        tarteaucitron.userInterface.respondAll(false);
9689                    });
9690                    tarteaucitron.addClickEventToId("tarteaucitronAllDenied2", function () {
9691                        tarteaucitron.userInterface.respondAll(false, '', true);
9692                        if (tarteaucitron.reloadThePage === true) {
9693                            window.location.reload();
9694                        }
9695                    });
9696                    tarteaucitron.addClickEventToId("tarteaucitronCloseAlert", function () {
vendor: 37,127 bytes, lines 9697-10432
9697                        tarteaucitron.userInterface.openPanel();
9698                    });
9699                    tarteaucitron.addClickEventToId("tarteaucitronCTAButton", function () {
9700                        location.reload();
9701                    });
9702                    var toggleBtns = document.getElementsByClassName("catToggleBtn"), i;
9703                    for (i = 0; i < toggleBtns.length; i++) {
9704                        toggleBtns[i].dataset.index = i;
9705                        tarteaucitron.addClickEventToElement(toggleBtns[i], function () {
9706                            tarteaucitron.userInterface.toggle('tarteaucitronDetails' + cat[this.dataset.index], 'tarteaucitronInfoBox');
9707                            if (document.getElementById('tarteaucitronDetails' + cat[this.dataset.index]).style.display === 'block') {
9708                                this.setAttribute('aria-expanded', 'true');
9709                            } else {
9710                                this.setAttribute('aria-expanded', 'false');
9711                            }
9712                            return false;
9713                        });
9714                    }
9715
9716                    var allowBtns = document.getElementsByClassName("tarteaucitronAllow");
9717                    for (i = 0; i < allowBtns.length; i++) {
9718                        tarteaucitron.addClickEventToElement(allowBtns[i], function () {
9719                            tarteaucitron.userInterface.respond(this, true);
9720                        });
9721                    }
9722                    var denyBtns = document.getElementsByClassName("tarteaucitronDeny");
9723                    for (i = 0; i < denyBtns.length; i++) {
9724                        tarteaucitron.addClickEventToElement(denyBtns[i], function () {
9725                            tarteaucitron.userInterface.respond(this, false);
9726                        });
9727                    }
9728                    if(tarteaucitron.events.load) {
9729                        tarteaucitron.events.load();
9730                    }
9731                }, 500);
9732
9733            });
9734        });
9735    },
9736    "addService": function (serviceId) {
9737        "use strict";
9738        var html = '',
9739            s = tarteaucitron.services,
9740            service = s[serviceId],
9741            cookie = tarteaucitron.cookie.read(),
9742            hostname = document.location.hostname,
9743            hostRef = document.referrer.split('/')[2],
9744            isNavigating = (hostRef === hostname && window.location.href !== tarteaucitron.parameters.privacyUrl),
9745            isAutostart = (!service.needConsent),
9746            isWaiting = (cookie.indexOf(service.key + '=wait') >= 0),
9747            isDenied = (cookie.indexOf(service.key + '=false') >= 0),
9748            isAllowed = ((cookie.indexOf(service.key + '=true') >= 0) || (!service.needConsent && cookie.indexOf(service.key + '=false') < 0)),
9749            isResponded = (cookie.indexOf(service.key + '=false') >= 0 || cookie.indexOf(service.key + '=true') >= 0),
9750            isDNTRequested = (navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1" || window.doNotTrack === "1"),
9751            currentStatus = (isAllowed) ? tarteaucitron.lang.allowed : tarteaucitron.lang.disallowed,
9752            state = (undefined !== service.defaultState) ? service.defaultState :
9753                    (undefined !== tarteaucitron.parameters.serviceDefaultState ? tarteaucitron.parameters.serviceDefaultState : 'wait');
9754
9755
9756        if (tarteaucitron.added[service.key] !== true) {
9757            tarteaucitron.added[service.key] = true;
9758
9759            html += '<li id="' + service.key + 'Line" class="tarteaucitronLine">';
9760            html += '   <div class="tarteaucitronName">';
9761            html += '       <span class="tarteaucitronH3" role="heading" aria-level="3">' + service.name + '</span>';
9762            html += '       <span class="tacCurrentStatus" id="tacCurrentStatus' + service.key + '">'+currentStatus+'</span>';
9763            html += '       <span class="tarteaucitronReadmoreSeparator"> - </span>';
9764            html += '       <span id="tacCL' + service.key + '" class="tarteaucitronListCookies">';
9765            if (drupalSettings.tacjs.services[service.key] !== undefined) {
9766                html += drupalSettings.tacjs.services[service.key].readMore;
9767            }
9768            html += '</span><br/>';
9769            if (tarteaucitron.parameters.moreInfoLink == true) {
9770
9771                var link = 'https://tarteaucitron.io/service/' + service.key + '/';
9772                if (service.readmoreLink !== undefined && service.readmoreLink !== '') {
9773                    link = service.readmoreLink;
9774                }
9775                if (tarteaucitron.parameters.readmoreLink !== undefined && tarteaucitron.parameters.readmoreLink !== '') {
9776                    link = tarteaucitron.parameters.readmoreLink;
9777                }
9778                html += '       <a href="' + link + '" target="_blank" rel="noreferrer noopener nofollow" title="' + tarteaucitron.lang.more + ' : ' + tarteaucitron.lang.cookieDetail + ' ' + service.name + ' ' + tarteaucitron.lang.ourSite + ' ' + tarteaucitron.lang.newWindow +'" class="tarteaucitronReadmoreInfo">';
9779                html += '           ' + tarteaucitron.lang.more;
9780                html += '       </a>';
9781                html += '       <span class="tarteaucitronReadmoreSeparator"> - </span>';
9782                html += '       <a href="' + service.uri + '" target="_blank" rel="noreferrer noopener" title="' + tarteaucitron.lang.source + ' ' + service.name + ' ' + tarteaucitron.lang.newWindow + '" class="tarteaucitronReadmoreOfficial">';
9783                html += '           ' + tarteaucitron.lang.source;
9784                html += '       </a>';
9785            }
9786
9787            html += '   </div>';
9788            html += '   <div class="tarteaucitronAsk">';
9789            html += '       <button type="button" aria-label="' + tarteaucitron.lang.allow + ' ' + service.name + '" id="' + service.key + 'Allowed" class="tarteaucitronAllow">';
9790            html += '           <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.allow;
9791            html += '       </button> ';
9792            html += '       <button type="button" aria-label="' + tarteaucitron.lang.deny + ' ' + service.name + '" id="' + service.key + 'Denied" class="tarteaucitronDeny">';
9793            html += '           <span class="tarteaucitronCross" aria-hidden="true"></span> ' + tarteaucitron.lang.deny;
9794            html += '       </button>';
9795            html += '   </div>';
9796            html += '</li>';
9797
9798            tarteaucitron.userInterface.css('tarteaucitronServicesTitle_' + service.type, 'display', 'block');
9799
9800            if (document.getElementById('tarteaucitronServices_' + service.type) !== null) {
9801                document.getElementById('tarteaucitronServices_' + service.type).innerHTML += html;
9802            }
9803
9804            tarteaucitron.userInterface.css('tarteaucitronNoServicesTitle', 'display', 'none');
9805
9806            tarteaucitron.userInterface.order(service.type);
9807
9808            tarteaucitron.addClickEventToId(service.key + 'Allowed', function () {
9809                tarteaucitron.userInterface.respond(this, true);
9810            });
9811
9812            tarteaucitron.addClickEventToId(service.key + 'Denied', function () {
9813                tarteaucitron.userInterface.respond(this, false);
9814            });
9815        }
9816
9817        tarteaucitron.pro('!' + service.key + '=' + isAllowed);
9818
9819        // allow by default for non EU
9820        if (isResponded === false && tarteaucitron.user.bypass === true) {
9821            isAllowed = true;
9822            tarteaucitron.cookie.create(service.key, true);
9823        }
9824
9825        if ((!isResponded && (isAutostart || (isNavigating && isWaiting)) && !tarteaucitron.highPrivacy) || isAllowed) {
9826            if (!isAllowed || (!service.needConsent && cookie.indexOf(service.key + '=false') < 0)) {
9827                tarteaucitron.cookie.create(service.key, true);
9828            }
9829            if (tarteaucitron.launch[service.key] !== true) {
9830                tarteaucitron.launch[service.key] = true;
9831                if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + service.key + "_") < 0) { service.js(); }
9832                tarteaucitron.sendEvent(service.key + '_loaded');
9833            }
9834            tarteaucitron.state[service.key] = true;
9835            tarteaucitron.userInterface.color(service.key, true);
9836        } else if (isDenied) {
9837            if (typeof service.fallback === 'function') {
9838                if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + service.key + "_") < 0) { service.fallback(); }
9839            }
9840            tarteaucitron.state[service.key] = false;
9841            tarteaucitron.userInterface.color(service.key, false);
9842        } else if (!isResponded && isDNTRequested && tarteaucitron.handleBrowserDNTRequest) {
9843            tarteaucitron.cookie.create(service.key, 'false');
9844            if (typeof service.fallback === 'function') {
9845                if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + service.key + "_") < 0) { service.fallback(); }
9846            }
9847            tarteaucitron.state[service.key] = false;
9848            tarteaucitron.userInterface.color(service.key, false);
9849        } else if (!isResponded) {
9850            tarteaucitron.cookie.create(service.key, state);
9851            if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + service.key + "_") < 0) {
9852                if(true === state && typeof service.js === 'function') {
9853                    service.js();
9854                } else if (typeof service.fallback === 'function') {
9855                    service.fallback();
9856                }
9857            }
9858
9859            tarteaucitron.userInterface.color(service.key, state);
9860
9861            if( 'wait' === state ) {
9862                tarteaucitron.userInterface.openAlert();
9863            }
9864        }
9865
9866        tarteaucitron.cookie.checkCount(service.key);
9867        tarteaucitron.sendEvent(service.key + '_added')
9868    },
9869    "sendEvent" : function(event_key) {
9870        if(event_key !== undefined) {
9871            //ie compatibility
9872            var send_event_item;
9873            if(typeof(Event) === 'function') {
9874                send_event_item = new Event(event_key);
9875            }else if (typeof(document.createEvent) === 'function'){
9876                send_event_item = document.createEvent('Event');
9877                send_event_item.initEvent(event_key, true, true);
9878            }
9879            //end ie compatibility
9880
9881            document.dispatchEvent(send_event_item);
9882        }
9883    },
9884    "cleanArray": function cleanArray(arr) {
9885        "use strict";
9886        var i,
9887            len = arr.length,
9888            out = [],
9889            obj = {},
9890            s = tarteaucitron.services;
9891
9892        for (i = 0; i < len; i += 1) {
9893            if (!obj[arr[i]]) {
9894                obj[arr[i]] = {};
9895                if (tarteaucitron.services[arr[i]] !== undefined) {
9896                    out.push(arr[i]);
9897                }
9898            }
9899        }
9900
9901        out = out.sort(function (a, b) {
9902            if (s[a].type + s[a].key > s[b].type + s[b].key) { return 1; }
9903            if (s[a].type + s[a].key < s[b].type + s[b].key) { return -1; }
9904            return 0;
9905        });
9906
9907        return out;
9908    },
9909    "userInterface": {
9910        "css": function (id, property, value) {
9911            "use strict";
9912            if (document.getElementById(id) !== null) {
9913
9914                if (property == "display" && value == "none" && (id == "tarteaucitron" || id == "tarteaucitronBack" || id == "tarteaucitronAlertBig")) {
9915                    document.getElementById(id).style["opacity"] = "0";
9916
9917                    setTimeout(function() {document.getElementById(id).style[property] = value;}, 200);
9918                } else {
9919
9920                    document.getElementById(id).style[property] = value;
9921
9922                    if (property == "display" && value == "block" && (id == "tarteaucitron" || id == "tarteaucitronAlertBig")) {
9923                        document.getElementById(id).style["opacity"] = "0";
9924                        setTimeout(function() {document.getElementById(id).style["opacity"] = "1";}, 1);
9925                    }
9926
9927                    if (property == "display" && value == "block" && id == "tarteaucitronBack") {
9928                        document.getElementById(id).style["opacity"] = "0";
9929                        setTimeout(function() {document.getElementById(id).style["opacity"] = "0.7";}, 1);
9930                    }
9931                }
9932            }
9933        },
9934        "addClass": function (id, className) {
9935            "use strict";
9936            if (document.getElementById(id) !== null && document.getElementById(id).classList !== undefined) {
9937                document.getElementById(id).classList.add(className);
9938            }
9939        },
9940        "removeClass": function (id, className) {
9941            "use strict";
9942            if (document.getElementById(id) !== null && document.getElementById(id).classList !== undefined) {
9943                document.getElementById(id).classList.remove(className);
9944            }
9945        },
9946        "respondAll": function (status, type, allowSafeAnalytics) {
9947            "use strict";
9948            var s = tarteaucitron.services,
9949                service,
9950                key,
9951                index = 0;
9952
9953            for (index = 0; index < tarteaucitron.job.length; index += 1) {
9954
9955                if (typeof type !== 'undefined' && type !== '' && s[tarteaucitron.job[index]].type !== type) {
9956                    continue;
9957                }
9958
9959                if (allowSafeAnalytics && typeof s[tarteaucitron.job[index]].safeanalytic !== "undefined" && s[tarteaucitron.job[index]].safeanalytic === true) {
9960                    continue;
9961                }
9962
9963                service = s[tarteaucitron.job[index]];
9964                key = service.key;
9965                if (tarteaucitron.state[key] !== status) {
9966                    if (status === false && tarteaucitron.launch[key] === true) {
9967                        tarteaucitron.reloadThePage = true;
9968                        if (tarteaucitron.checkIfExist('tarteaucitronClosePanel')) {
9969                            var ariaCloseValue = document.getElementById('tarteaucitronClosePanel').textContent.trim() + ' (' + tarteaucitron.lang.reload + ')';
9970                            document.getElementById('tarteaucitronClosePanel').setAttribute("aria-label", ariaCloseValue);
9971                            document.getElementById('tarteaucitronClosePanel').setAttribute("title", ariaCloseValue);
9972                        }
9973                    }
9974                    if (tarteaucitron.launch[key] !== true && status === true) {
9975
9976                        tarteaucitron.pro('!' + key + '=engage');
9977
9978                        tarteaucitron.launch[key] = true;
9979                        if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + key + "_") < 0) { tarteaucitron.services[key].js(); }
9980                        tarteaucitron.sendEvent(key + '_loaded');
9981                    }
9982                    var itemStatusElem = document.getElementById('tacCurrentStatus'+key);
9983                    if(status == true){
9984                        itemStatusElem.innerHTML = tarteaucitron.lang.allowed;
9985                        tarteaucitron.sendEvent(key + '_allowed');
9986                    }else{
9987                        itemStatusElem.innerHTML = tarteaucitron.lang.disallowed;
9988                        tarteaucitron.sendEvent(key + '_disallowed');
9989                    }
9990                    tarteaucitron.state[key] = status;
9991                    tarteaucitron.cookie.create(key, status);
9992                    tarteaucitron.userInterface.color(key, status);
9993                }
9994            }
9995        },
9996        "respond": function (el, status) {
9997            "use strict";
9998            if (el.id === '') {
9999                return;
10000            }
10001            var key = el.id.replace(new RegExp("(Eng[0-9]+|Allow|Deni)ed", "g"), '');
10002
10003            if (key.substring(0, 13) === 'tarteaucitron' || key === '') {return;}
10004
10005            // return if same state
10006            if (tarteaucitron.state[key] === status) {
10007                return;
10008            }
10009
10010            if (status === false && tarteaucitron.launch[key] === true) {
10011                tarteaucitron.reloadThePage = true;
10012                if (tarteaucitron.checkIfExist('tarteaucitronClosePanel')) {
10013                    var ariaCloseValue = document.getElementById('tarteaucitronClosePanel').textContent.trim() + ' (' + tarteaucitron.lang.reload + ')';
10014                    document.getElementById('tarteaucitronClosePanel').setAttribute("aria-label", ariaCloseValue);
10015                    document.getElementById('tarteaucitronClosePanel').setAttribute("title", ariaCloseValue);
10016                }
10017            }
10018
10019            // if not already launched... launch the service
10020            if (status === true) {
10021                if (tarteaucitron.launch[key] !== true) {
10022
10023                    tarteaucitron.pro('!' + key + '=engage');
10024
10025                    tarteaucitron.launch[key] = true;
10026                    if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + key + "_") < 0) { tarteaucitron.services[key].js(); }
10027                    tarteaucitron.sendEvent(key + '_loaded');
10028                }
10029            }
10030            var itemStatusElem = document.getElementById('tacCurrentStatus'+key);
10031            if(status == true){
10032                itemStatusElem.innerHTML = tarteaucitron.lang.allowed;
10033                tarteaucitron.sendEvent(key + '_allowed');
10034            }else{
10035                itemStatusElem.innerHTML = tarteaucitron.lang.disallowed;
10036                tarteaucitron.sendEvent(key + '_disallowed');
10037            }
10038            tarteaucitron.state[key] = status;
10039            tarteaucitron.cookie.create(key, status);
10040            tarteaucitron.userInterface.color(key, status);
10041        },
10042        "color": function (key, status) {
10043            "use strict";
10044            var c = 'tarteaucitron',
10045                nbDenied = 0,
10046                nbPending = 0,
10047                nbAllowed = 0,
10048                sum = tarteaucitron.job.length,
10049                index,
10050                s = tarteaucitron.services;
10051
10052            if (key !== "") {
10053
10054            if (status === true) {
10055                tarteaucitron.userInterface.addClass(key + 'Line', 'tarteaucitronIsAllowed');
10056                tarteaucitron.userInterface.removeClass(key + 'Line', 'tarteaucitronIsDenied');
10057                document.getElementById(key + 'Allowed').setAttribute('aria-pressed', 'true');
10058                document.getElementById(key + 'Denied').setAttribute('aria-pressed', 'false');
10059            } else if (status === false) {
10060                tarteaucitron.userInterface.removeClass(key + 'Line', 'tarteaucitronIsAllowed');
10061                tarteaucitron.userInterface.addClass(key + 'Line', 'tarteaucitronIsDenied');
10062                document.getElementById(key + 'Allowed').setAttribute('aria-pressed', 'false');
10063                document.getElementById(key + 'Denied').setAttribute('aria-pressed', 'true');
10064            } else {
10065                document.getElementById(key + 'Allowed').setAttribute('aria-pressed', 'false');
10066                document.getElementById(key + 'Denied').setAttribute('aria-pressed', 'false');
10067            }
10068
10069            // check if all services are allowed
10070            var sumToRemove = 0;
10071            for (index = 0; index < sum; index += 1) {
10072
10073                if (typeof s[tarteaucitron.job[index]].safeanalytic !== "undefined" && s[tarteaucitron.job[index]].safeanalytic === true) {
10074                    sumToRemove += 1;
10075                    continue;
10076                }
10077
10078                if (tarteaucitron.state[tarteaucitron.job[index]] === false) {
10079                    nbDenied += 1;
10080                } else if (tarteaucitron.state[tarteaucitron.job[index]] === undefined) {
10081                    nbPending += 1;
10082                } else if (tarteaucitron.state[tarteaucitron.job[index]] === true) {
10083                    nbAllowed += 1;
10084                }
10085            }
10086            sum -= sumToRemove;
10087
10088            tarteaucitron.userInterface.css(c + 'DotGreen', 'width', ((100 / sum) * nbAllowed) + '%');
10089            tarteaucitron.userInterface.css(c + 'DotYellow', 'width', ((100 / sum) * nbPending) + '%');
10090            tarteaucitron.userInterface.css(c + 'DotRed', 'width', ((100 / sum) * nbDenied) + '%');
10091
10092            if (nbDenied === 0 && nbPending === 0) {
10093                tarteaucitron.userInterface.removeClass(c + 'AllDenied', c + 'IsSelected');
10094                tarteaucitron.userInterface.addClass(c + 'AllAllowed', c + 'IsSelected');
10095
10096                tarteaucitron.userInterface.addClass(c + 'MainLineOffset', c + 'IsAllowed');
10097                tarteaucitron.userInterface.removeClass(c + 'MainLineOffset', c + 'IsDenied');
10098
10099                document.getElementById(c + 'AllDenied').setAttribute('aria-pressed', 'false');
10100                document.getElementById(c + 'AllAllowed').setAttribute('aria-pressed', 'true');
10101
10102            } else if (nbAllowed === 0 && nbPending === 0) {
10103                tarteaucitron.userInterface.removeClass(c + 'AllAllowed', c + 'IsSelected');
10104                tarteaucitron.userInterface.addClass(c + 'AllDenied', c + 'IsSelected');
10105
10106                tarteaucitron.userInterface.removeClass(c + 'MainLineOffset', c + 'IsAllowed');
10107                tarteaucitron.userInterface.addClass(c + 'MainLineOffset', c + 'IsDenied');
10108
10109                document.getElementById(c + 'AllDenied').setAttribute('aria-pressed', 'true');
10110                document.getElementById(c + 'AllAllowed').setAttribute('aria-pressed', 'false');
10111
10112            } else {
10113                tarteaucitron.userInterface.removeClass(c + 'AllAllowed', c + 'IsSelected');
10114                tarteaucitron.userInterface.removeClass(c + 'AllDenied', c + 'IsSelected');
10115
10116                tarteaucitron.userInterface.removeClass(c + 'MainLineOffset', c + 'IsAllowed');
10117                tarteaucitron.userInterface.removeClass(c + 'MainLineOffset', c + 'IsDenied');
10118
10119                document.getElementById(c + 'AllDenied').setAttribute('aria-pressed', 'false');
10120                document.getElementById(c + 'AllAllowed').setAttribute('aria-pressed', 'false');
10121            }
10122
10123            // close the alert if all service have been reviewed
10124            if (nbPending === 0) {
10125                tarteaucitron.userInterface.closeAlert();
10126            }
10127
10128            if (tarteaucitron.services[key].cookies.length > 0 && status === false) {
10129                tarteaucitron.cookie.purge(tarteaucitron.services[key].cookies);
10130            }
10131
10132            if (status === true) {
10133                if (document.getElementById('tacCL' + key) !== null) {
10134                    if (drupalSettings.tacjs.services[key] !== undefined && drupalSettings.tacjs.services[key].readMore !== '' ) {
10135                        document.getElementById('tacCL' + key).innerHTML = drupalSettings.tacjs.services[key].readMore;
10136                    } else {
10137                        document.getElementById('tacCL' + key).innerHTML = '...';
10138                    }
10139                }
10140                setTimeout(function () {
10141                    tarteaucitron.cookie.checkCount(key);
10142                }, 2500);
10143            } else {
10144                tarteaucitron.cookie.checkCount(key);
10145            }
10146
10147            }
10148
10149	    // groups
10150            var cats = document.querySelectorAll('[id^="tarteaucitronServicesTitle_"]')
10151            Array.prototype.forEach.call(cats, function(item) {
10152                var cat = item.getAttribute('id').replace(/^(tarteaucitronServicesTitle_)/, ""),
10153                    total = document.getElementById("tarteaucitronServices_"+cat).childElementCount;
10154                var doc = document.getElementById("tarteaucitronServices_"+cat),
10155                    groupdenied = 0,
10156                    groupallowed = 0;
10157                for (var ii = 0; ii < doc.children.length; ii++) {
10158                    if (doc.children[ii].className == "tarteaucitronLine tarteaucitronIsDenied") {
10159                        groupdenied++;
10160                    }
10161                    if (doc.children[ii].className == "tarteaucitronLine tarteaucitronIsAllowed") {
10162                        groupallowed++;
10163                    }
10164                }
10165                if (total === groupallowed) {
10166                    tarteaucitron.userInterface.removeClass('tarteaucitron-group-'+cat, 'tarteaucitronIsDenied');
10167                    tarteaucitron.userInterface.addClass('tarteaucitron-group-'+cat, 'tarteaucitronIsAllowed');
10168
10169                    if (document.getElementById('tarteaucitron-reject-group-'+cat)) {
10170                        document.getElementById('tarteaucitron-reject-group-'+cat).setAttribute('aria-pressed', 'false');
10171                        document.getElementById('tarteaucitron-accept-group-'+cat).setAttribute('aria-pressed', 'true');
10172                    }
10173                }
10174                if (total === groupdenied) {
10175                    tarteaucitron.userInterface.addClass('tarteaucitron-group-'+cat, 'tarteaucitronIsDenied');
10176                    tarteaucitron.userInterface.removeClass('tarteaucitron-group-'+cat, 'tarteaucitronIsAllowed');
10177
10178                    if (document.getElementById('tarteaucitron-reject-group-'+cat)) {
10179                        document.getElementById('tarteaucitron-reject-group-'+cat).setAttribute('aria-pressed', 'true');
10180                        document.getElementById('tarteaucitron-accept-group-'+cat).setAttribute('aria-pressed', 'false');
10181                    }
10182                }
10183                if (total !== groupdenied && total !== groupallowed) {
10184                    tarteaucitron.userInterface.removeClass('tarteaucitron-group-'+cat, 'tarteaucitronIsDenied');
10185                    tarteaucitron.userInterface.removeClass('tarteaucitron-group-'+cat, 'tarteaucitronIsAllowed');
10186
10187                    if (document.getElementById('tarteaucitron-reject-group-'+cat)) {
10188                        document.getElementById('tarteaucitron-reject-group-'+cat).setAttribute('aria-pressed', 'false');
10189                        document.getElementById('tarteaucitron-accept-group-'+cat).setAttribute('aria-pressed', 'false');
10190                    }
10191                }
10192                groupdenied = 0;
10193                groupallowed = 0;
10194            });
10195
10196        },
10197        "openPanel": function () {
10198            "use strict";
10199
10200            tarteaucitron.userInterface.css('tarteaucitron', 'display', 'block');
10201            tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'block');
10202            tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'display', 'none');
10203
10204            document.getElementById('tarteaucitronClosePanel').focus();
10205            if (document.getElementsByTagName('body')[0].classList !== undefined) {
10206                document.getElementsByTagName('body')[0].classList.add('tarteaucitron-modal-open');
10207            }
10208            tarteaucitron.userInterface.focusTrap();
10209            tarteaucitron.userInterface.jsSizing('main');
10210
10211            //ie compatibility
10212            var tacOpenPanelEvent;
10213            if(typeof(Event) === 'function') {
10214                tacOpenPanelEvent = new Event("tac.open_panel");
10215            }else if (typeof(document.createEvent) === 'function'){
10216                tacOpenPanelEvent = document.createEvent('Event');
10217                tacOpenPanelEvent.initEvent("tac.open_panel", true, true);
10218            }
10219            //end ie compatibility
10220
10221            if (typeof(window.dispatchEvent) === 'function') {window.dispatchEvent(tacOpenPanelEvent);}
10222        },
10223        "closePanel": function () {
10224            "use strict";
10225
10226            if (document.location.hash === tarteaucitron.hashtag) {
10227                if (window.history) {
10228                    window.history.replaceState('', document.title, window.location.pathname + window.location.search);
10229                } else {
10230                    document.location.hash = '';
10231                }
10232            }
10233            if (tarteaucitron.checkIfExist('tarteaucitron')) {
10234                // accessibility: manage focus on close panel
10235                if (tarteaucitron.checkIfExist('tarteaucitronCloseAlert')) {
10236                    document.getElementById('tarteaucitronCloseAlert').focus();
10237                } else if (tarteaucitron.checkIfExist('tarteaucitronManager')) {
10238                    document.getElementById('tarteaucitronManager').focus();
10239                } else if (tarteaucitron.customCloserId && tarteaucitron.checkIfExist(tarteaucitron.customCloserId)) {
10240                    document.getElementById(tarteaucitron.customCloserId).focus();
10241                }
10242                tarteaucitron.userInterface.css('tarteaucitron', 'display', 'none');
10243            }
10244
10245            if (tarteaucitron.checkIfExist('tarteaucitronCookiesListContainer') && tarteaucitron.checkIfExist('tarteaucitronCookiesNumber')) {
10246                // accessibility: manage focus on close cookies list
10247                document.getElementById('tarteaucitronCookiesNumber').focus();
10248                document.getElementById('tarteaucitronCookiesNumber').setAttribute("aria-expanded", "false");
10249                tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'display', 'none');
10250            }
10251
10252            tarteaucitron.fallback(['tarteaucitronInfoBox'], function (elem) {
10253                elem.style.display = 'none';
10254            }, true);
10255
10256            if (tarteaucitron.reloadThePage === true) {
10257                window.location.reload();
10258            } else {
10259                tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'none');
10260            }
10261            if (document.getElementsByTagName('body')[0].classList !== undefined) {
10262                document.getElementsByTagName('body')[0].classList.remove('tarteaucitron-modal-open');
10263            }
10264
10265            //ie compatibility
10266            var tacClosePanelEvent;
10267            if(typeof(Event) === 'function') {
10268                tacClosePanelEvent = new Event("tac.close_panel");
10269            }else if (typeof(document.createEvent) === 'function'){
10270                tacClosePanelEvent = document.createEvent('Event');
10271                tacClosePanelEvent.initEvent("tac.close_panel", true, true);
10272            }
10273            //end ie compatibility
10274
10275            if (typeof(window.dispatchEvent) === 'function') {window.dispatchEvent(tacClosePanelEvent);}
10276        },
10277        "focusTrap": function() {
10278            "use strict";
10279
10280            var focusableEls,
10281                firstFocusableEl,
10282                lastFocusableEl,
10283                filtered;
10284
10285            focusableEls = document.getElementById('tarteaucitron').querySelectorAll('a[href], button');
10286            filtered = [];
10287
10288            // get only visible items
10289            for (var i = 0, max = focusableEls.length; i < max; i++) {
10290                if (focusableEls[i].offsetHeight > 0) {
10291                   filtered.push(focusableEls[i]);
10292                }
10293            }
10294
10295            firstFocusableEl = filtered[0];
10296            lastFocusableEl = filtered[filtered.length - 1];
10297
10298            //loop focus inside tarteaucitron
10299            document.getElementById('tarteaucitron').addEventListener("keydown", function (evt) {
10300
10301                if ( evt.key === 'Tab' || evt.keyCode === 9 ) {
10302
10303                    if ( evt.shiftKey ) /* shift + tab */ {
10304                        if (document.activeElement === firstFocusableEl) {
10305                            lastFocusableEl.focus();
10306                            evt.preventDefault();
10307                        }
10308                    } else /* tab */ {
10309                        if (document.activeElement === lastFocusableEl) {
10310                            firstFocusableEl.focus();
10311                            evt.preventDefault();
10312                        }
10313                    }
10314                }
10315            })
10316        },
10317        "openAlert": function () {
10318            "use strict";
10319            var c = 'tarteaucitron';
10320            tarteaucitron.userInterface.css(c + 'Percentage', 'display', 'block');
10321            tarteaucitron.userInterface.css(c + 'AlertSmall', 'display', 'none');
10322            tarteaucitron.userInterface.css(c + 'Icon', 'display', 'none');
10323            tarteaucitron.userInterface.css(c + 'AlertBig',   'display', 'block');
10324            tarteaucitron.userInterface.addClass(c + 'Root',   'tarteaucitronBeforeVisible');
10325
10326            //ie compatibility
10327            var tacOpenAlertEvent;
10328            if(typeof(Event) === 'function') {
10329                tacOpenAlertEvent = new Event("tac.open_alert");
10330            }else if (typeof(document.createEvent) === 'function'){
10331                tacOpenAlertEvent = document.createEvent('Event');
10332                tacOpenAlertEvent.initEvent("tac.open_alert", true, true);
10333            }
10334            //end ie compatibility
10335
10336            if (document.getElementById('tarteaucitronAlertBig') !== null) {
10337                document.getElementById('tarteaucitronAlertBig').focus();
10338            }
10339
10340            if (typeof(window.dispatchEvent) === 'function') {window.dispatchEvent(tacOpenAlertEvent);}
10341        },
10342        "closeAlert": function () {
10343            "use strict";
10344            var c = 'tarteaucitron';
10345            tarteaucitron.userInterface.css(c + 'Percentage', 'display', 'none');
10346            tarteaucitron.userInterface.css(c + 'AlertSmall', 'display', 'block');
10347            tarteaucitron.userInterface.css(c + 'Icon', 'display', 'block');
10348            tarteaucitron.userInterface.css(c + 'AlertBig',   'display', 'none');
10349            tarteaucitron.userInterface.removeClass(c + 'Root',   'tarteaucitronBeforeVisible');
10350            tarteaucitron.userInterface.jsSizing('box');
10351
10352            //ie compatibility
10353            var tacCloseAlertEvent;
10354            if(typeof(Event) === 'function') {
10355                tacCloseAlertEvent = new Event("tac.close_alert");
10356            }else if (typeof(document.createEvent) === 'function'){
10357                tacCloseAlertEvent = document.createEvent('Event');
10358                tacCloseAlertEvent.initEvent("tac.close_alert", true, true);
10359            }
10360            //end ie compatibility
10361
10362            if (typeof(window.dispatchEvent) === 'function') {window.dispatchEvent(tacCloseAlertEvent);}
10363        },
10364        "toggleCookiesList": function () {
10365            "use strict";
10366            var div = document.getElementById('tarteaucitronCookiesListContainer'),
10367                togglediv = document.getElementById('tarteaucitronCookiesNumber');
10368
10369            if (div === null) {
10370                return;
10371            }
10372
10373            if (div.style.display !== 'block') {
10374                tarteaucitron.cookie.number();
10375                div.style.display = 'block';
10376                togglediv.setAttribute("aria-expanded", "true");
10377                tarteaucitron.userInterface.jsSizing('cookie');
10378                tarteaucitron.userInterface.css('tarteaucitron', 'display', 'none');
10379                tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'block');
10380                tarteaucitron.fallback(['tarteaucitronInfoBox'], function (elem) {
10381                    elem.style.display = 'none';
10382                }, true);
10383            } else {
10384                div.style.display = 'none';
10385                togglediv.setAttribute("aria-expanded", "false");
10386                tarteaucitron.userInterface.css('tarteaucitron', 'display', 'none');
10387                tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'none');
10388            }
10389        },
10390        "toggle": function (id, closeClass) {
10391            "use strict";
10392            var div = document.getElementById(id);
10393
10394            if (div === null) {
10395                return;
10396            }
10397
10398            if (closeClass !== undefined) {
10399                tarteaucitron.fallback([closeClass], function (elem) {
10400                    if (elem.id !== id) {
10401                        elem.style.display = 'none';
10402                    }
10403                }, true);
10404            }
10405
10406            if (div.style.display !== 'block') {
10407                div.style.display = 'block';
10408            } else {
10409                div.style.display = 'none';
10410            }
10411        },
10412        "order": function (id) {
10413            "use strict";
10414            var main = document.getElementById('tarteaucitronServices_' + id),
10415                allDivs,
10416                store = [],
10417                i;
10418
10419            if (main === null) {
10420                return;
10421            }
10422
10423            allDivs = main.childNodes;
10424
10425            if (typeof Array.prototype.map === 'function' && typeof Enumerable === 'undefined') {
10426                Array.prototype.map.call(main.children, Object).sort(function (a, b) {
10427                //var mainChildren = Array.from(main.children);
10428                //mainChildren.sort(function (a, b) {
10429                    if (tarteaucitron.services[a.id.replace(/Line/g, '')].name > tarteaucitron.services[b.id.replace(/Line/g, '')].name) { return 1; }
10430                    if (tarteaucitron.services[a.id.replace(/Line/g, '')].name < tarteaucitron.services[b.id.replace(/Line/g, '')].name) { return -1; }
10431                    return 0;
10432                }
10432).forEach(function (element) {
10433                    main.appendChild(element);
10434                });
10435            }
10436        },
10437        "jsSizing": function (type) {
10438            "use strict";
10439            var scrollbarMarginRight = 10,
10440                scrollbarWidthParent,
10441                scrollbarWidthChild,
10442                servicesHeight,
10443                e = window,
10444                a = 'inner',
10445                windowInnerHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
10446                mainTop,
10447                mainHeight,
10448                closeButtonHeight,
10449                headerHeight,
10450                cookiesListHeight,
10451                cookiesCloseHeight,
10452                cookiesTitleHeight,
10453                paddingBox,
10454                alertSmallHeight,
10455                cookiesNumberHeight;
10456
10457            if (type === 'box') {
10458                if (document.getElementById('tarteaucitronAlertSmall') !== null && document.getElementById('tarteaucitronCookiesNumber') !== null) {
10459
10460                    // reset
10461                    tarteaucitron.userInterface.css('tarteaucitronCookiesNumber', 'padding', '0px 10px');
10462
10463                    // calculate
10464                    alertSmallHeight = document.getElementById('tarteaucitronAlertSmall').offsetHeight;
10465                    cookiesNumberHeight = document.getElementById('tarteaucitronCookiesNumber').offsetHeight;
10466                    paddingBox = (alertSmallHeight - cookiesNumberHeight) / 2;
10467
10468                    // apply
10469                    tarteaucitron.userInterface.css('tarteaucitronCookiesNumber', 'padding', paddingBox + 'px 10px');
10470                }
10471            } else if (type === 'main') {
10472
10473                // get the real window width for media query
10474                if (window.innerWidth === undefined) {
10475                    a = 'client';
10476                    e = document.documentElement || document.body;
10477                }
10478
10479                // height of the services list container
10480                if (document.getElementById('tarteaucitron') !== null && document.getElementById('tarteaucitronClosePanel') !== null && document.getElementById('tarteaucitronMainLineOffset') !== null) {
10481
10482                    // reset
10483                    tarteaucitron.userInterface.css('tarteaucitronServices', 'height', 'auto');
10484
10485                    // calculate
10486                    mainHeight = document.getElementById('tarteaucitron').offsetHeight;
10487                    closeButtonHeight = document.getElementById('tarteaucitronClosePanel').offsetHeight;
10488
10489                    // apply
10490                    servicesHeight = (mainHeight - closeButtonHeight + 2);
10491                    tarteaucitron.userInterface.css('tarteaucitronServices', 'height', servicesHeight + 'px');
10492                    tarteaucitron.userInterface.css('tarteaucitronServices', 'overflow-x', 'auto');
10493                }
10494
10495                // align the main allow/deny button depending on scrollbar width
10496                if (document.getElementById('tarteaucitronServices') !== null && document.getElementById('tarteaucitronScrollbarChild') !== null) {
10497
10498                    // media query
10499                    if (e[a + 'Width'] <= 479) {
10500                        //tarteaucitron.userInterface.css('tarteaucitronScrollbarAdjust', 'marginLeft', '11px');
10501                    } else if (e[a + 'Width'] <= 767) {
10502                        scrollbarMarginRight = 12;
10503                    }
10504
10505                    scrollbarWidthParent = document.getElementById('tarteaucitronServices').offsetWidth;
10506                    scrollbarWidthChild = document.getElementById('tarteaucitronScrollbarChild').offsetWidth;
10507                    //tarteaucitron.userInterface.css('tarteaucitronScrollbarAdjust', 'marginRight', ((scrollbarWidthParent - scrollbarWidthChild) + scrollbarMarginRight) + 'px');
10508                }
10509
10510                // center the main panel
10511                if (document.getElementById('tarteaucitron') !== null) {
10512
10513                    // media query
10514                    if (e[a + 'Width'] <= 767) {
10515                        mainTop = 0;
10516                    } else {
10517                        mainTop = ((windowInnerHeight - document.getElementById('tarteaucitron').offsetHeight) / 2) - 21;
10518                    }
10519
10520                    if (document.getElementById('tarteaucitronMainLineOffset') !== null) {
10521                        if (document.getElementById('tarteaucitron').offsetHeight < (windowInnerHeight / 2)) {
10522                            mainTop -= document.getElementById('tarteaucitronMainLineOffset').offsetHeight;
10523                        }
10524                    }
10525
10526                    // correct
10527                    if (mainTop < 0) {
10528                        mainTop = 0;
10529                    }
10530
10531                    // apply
10532                    tarteaucitron.userInterface.css('tarteaucitron', 'top', mainTop + 'px');
10533                }
10534
10535
10536            } else if (type === 'cookie') {
10537
10538                // put cookies list at bottom
10539                if (document.getElementById('tarteaucitronAlertSmall') !== null) {
10540                    tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'bottom', (document.getElementById('tarteaucitronAlertSmall').offsetHeight) + 'px');
10541                }
10542
10543                // height of cookies list
10544                if (document.getElementById('tarteaucitronCookiesListContainer') !== null) {
10545
10546                    // reset
10547                    tarteaucitron.userInterface.css('tarteaucitronCookiesList', 'height', 'auto');
10548
10549                    // calculate
10550                    cookiesListHeight = document.getElementById('tarteaucitronCookiesListContainer').offsetHeight;
10551                    cookiesCloseHeight = document.getElementById('tarteaucitronClosePanelCookie').offsetHeight;
10552                    cookiesTitleHeight = document.getElementById('tarteaucitronCookiesTitle').offsetHeight;
10553
10554                    // apply
10555                    tarteaucitron.userInterface.css('tarteaucitronCookiesList', 'height', (cookie
vendor: 15,212 bytes, lines 10555-10894
10555sListHeight - cookiesCloseHeight - cookiesTitleHeight - 2) + 'px');
10556                }
10557            }
10558        }
10559    },
10560    "cookie": {
10561        "owner": {},
10562        "create": function (key, status) {
10563            "use strict";
10564
10565            if (tarteaucitronForceExpire !== '') {
10566                // The number of day(s)/hour(s) can't be higher than 1 year
10567                if ((tarteaucitronExpireInDay && tarteaucitronForceExpire < 365) || (!tarteaucitronExpireInDay && tarteaucitronForceExpire < 8760)) {
10568                    if (tarteaucitronExpireInDay) {
10569                        // Multiplication to tranform the number of days to milliseconds
10570                        timeExpire = tarteaucitronForceExpire * 86400000;
10571                    } else {
10572                        // Multiplication to tranform the number of hours to milliseconds
10573                        timeExpire = tarteaucitronForceExpire * 3600000;
10574                    }
10575                }
10576            }
10577
10578            var d = new Date(),
10579                time = d.getTime(),
10580                expireTime = time + timeExpire, // 365 days
10581                regex = new RegExp("!" + key + "=(wait|true|false)", "g"),
10582                cookie = tarteaucitron.cookie.read().replace(regex, ""),
10583                value = tarteaucitron.parameters.cookieName + '=' + cookie + '!' + key + '=' + status,
10584                domain = (tarteaucitron.parameters.cookieDomain !== undefined && tarteaucitron.parameters.cookieDomain !== '') ? '; domain=' + tarteaucitron.parameters.cookieDomain : '',
10585                secure = location.protocol === 'https:' ? '; Secure' : '';
10586
10587            d.setTime(expireTime);
10588            document.cookie = value + '; expires=' + d.toGMTString() + '; path=/' + domain + secure + '; samesite=lax';
10589        },
10590        "read": function () {
10591            "use strict";
10592            var nameEQ = tarteaucitron.parameters.cookieName + "=",
10593                ca = document.cookie.split(';'),
10594                i,
10595                c;
10596
10597            for (i = 0; i < ca.length; i += 1) {
10598                c = ca[i];
10599                while (c.charAt(0) === ' ') {
10600                    c = c.substring(1, c.length);
10601                }
10602                if (c.indexOf(nameEQ) === 0) {
10603                    return c.substring(nameEQ.length, c.length);
10604                }
10605            }
10606            return '';
10607        },
10608        "purge": function (arr) {
10609            "use strict";
10610            var i;
10611
10612            for (i = 0; i < arr.length; i += 1) {
10613
10614                var rgxpCookie = new RegExp("^(.*;)?\\s*" + arr[i] + "\\s*=\\s*[^;]+(.*)?$");
10615                if (document.cookie.match(rgxpCookie)) {
10616                    document.cookie = arr[i] + '=; expires=Thu, 01 Jan 2000 00:00:00 GMT; path=/;';
10617                    document.cookie = arr[i] + '=; expires=Thu, 01 Jan 2000 00:00:00 GMT; path=/; domain=.' + location.hostname + ';';
10618                    document.cookie = arr[i] + '=; expires=Thu, 01 Jan 2000 00:00:00 GMT; path=/; domain=.' + location.hostname.split('.').slice(-2).join('.') + ';';
10619                }
10620            }
10621        },
10622        "checkCount": function (key) {
10623            "use strict";
10624            var arr = tarteaucitron.services[key].cookies,
10625                nb = arr.length,
10626                nbCurrent = 0,
10627                html = '',
10628                i,
10629                status = document.cookie.indexOf(key + '=true');
10630
10631            if (status >= 0 && nb === 0) {
10632                html += tarteaucitron.lang.useNoCookie;
10633            } else if (status >= 0) {
10634                for (i = 0; i < nb; i += 1) {
10635                    if (document.cookie.indexOf(arr[i] + '=') !== -1) {
10636                        nbCurrent += 1;
10637                        if (tarteaucitron.cookie.owner[arr[i]] === undefined) {
10638                            tarteaucitron.cookie.owner[arr[i]] = [];
10639                        }
10640                        if (tarteaucitron.cookie.crossIndexOf(tarteaucitron.cookie.owner[arr[i]], tarteaucitron.services[key].name) === false) {
10641                            tarteaucitron.cookie.owner[arr[i]].push(tarteaucitron.services[key].name);
10642                        }
10643                    }
10644                }
10645
10646                if (nbCurrent > 0) {
10647                    html += tarteaucitron.lang.useCookieCurrent + ' ' + nbCurrent + ' cookie';
10648                    if (nbCurrent > 1) {
10649                        html += 's';
10650                    }
10651                    html += '.';
10652                } else {
10653                    html += tarteaucitron.lang.useNoCookie;
10654                }
10655            } else if (nb === 0) {
10656                html = tarteaucitron.lang.noCookie;
10657            } else {
10658                html += tarteaucitron.lang.useCookie + ' ' + nb + ' cookie';
10659                if (nb > 1) {
10660                    html += 's';
10661                }
10662                html += '.';
10663            }
10664
10665            if (document.getElementById('tacCL' + key) !== null) {
10666                if (drupalSettings.tacjs.services[key] !== undefined && drupalSettings.tacjs.services[key].readMore !== '' ) {
10667                    document.getElementById('tacCL' + key).innerHTML = drupalSettings.tacjs.services[key].readMore + '<br>' + html;
10668                } else {
10669                    document.getElementById('tacCL' + key).innerHTML = html;
10670                }
10671            }
10672        },
10673        "crossIndexOf": function (arr, match) {
10674            "use strict";
10675            var i;
10676            for (i = 0; i < arr.length; i += 1) {
10677                if (arr[i] === match) {
10678                    return true;
10679                }
10680            }
10681            return false;
10682        },
10683        "number": function () {
10684            "use strict";
10685            var cookies = document.cookie.split(';'),
10686                nb = (document.cookie !== '') ? cookies.length : 0,
10687                html = '',
10688                i,
10689                name,
10690                namea,
10691                nameb,
10692                c,
10693                d,
10694                s = (nb > 1) ? 's' : '',
10695                savedname,
10696                regex = /^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i,
10697                regexedDomain = (tarteaucitron.cdn.match(regex) !== null) ? tarteaucitron.cdn.match(regex)[1] : tarteaucitron.cdn,
10698                host = (tarteaucitron.domain !== undefined) ? tarteaucitron.domain : regexedDomain;
10699
10700            cookies = cookies.sort(function (a, b) {
10701                namea = a.split('=', 1).toString().replace(/ /g, '');
10702                nameb = b.split('=', 1).toString().replace(/ /g, '');
10703                c = (tarteaucitron.cookie.owner[namea] !== undefined) ? tarteaucitron.cookie.owner[namea] : '0';
10704                d = (tarteaucitron.cookie.owner[nameb] !== undefined) ? tarteaucitron.cookie.owner[nameb] : '0';
10705                if (c + a > d + b) { return 1; }
10706                if (c + a < d + b) { return -1; }
10707                return 0;
10708            });
10709
10710            if (document.cookie !== '') {
10711                for (i = 0; i < nb; i += 1) {
10712                    name = cookies[i].split('=', 1).toString().replace(/ /g, '');
10713                    if (tarteaucitron.cookie.owner[name] !== undefined && tarteaucitron.cookie.owner[name].join(' // ') !== savedname) {
10714                        savedname = tarteaucitron.cookie.owner[name].join(' // ');
10715                        html += '<div class="tarteaucitronHidden">';
10716                        html += '     <span class="tarteaucitronTitle tarteaucitronH3" role="heading" aria-level="3">';
10717                        html += '        ' + tarteaucitron.cookie.owner[name].join(' // ');
10718                        html += '    </span>';
10719                        html += '</div><ul class="cookie-list">';
10720                    } else if (tarteaucitron.cookie.owner[name] === undefined && host !== savedname) {
10721                        savedname = host;
10722                        html += '<div class="tarteaucitronHidden">';
10723                        html += '     <span class="tarteaucitronTitle tarteaucitronH3" role="heading" aria-level="3">';
10724                        html += '        ' + host;
10725                        html += '    </span>';
10726                        html += '</div><ul class="cookie-list">';
10727                    }
10728                    html += '<li class="tarteaucitronCookiesListMain">';
10729                    html += '    <div class="tarteaucitronCookiesListLeft"><button type="button" class="purgeBtn" data-cookie="' + tarteaucitron.fixSelfXSS(cookies[i].split('=', 1)) + '"><strong>&times;</strong></button> <strong>' + tarteaucitron.fixSelfXSS(name) + '</strong>';
10730                    html += '    </div>';
10731                    html += '    <div class="tarteaucitronCookiesListRight">' + tarteaucitron.fixSelfXSS(cookies[i].split('=').slice(1).join('=')) + '</div>';
10732                    html += '</li>';
10733                }
10734                html += '</ul>';
10735            } else {
10736                html += '<div class="tarteaucitronCookiesListMain">';
10737                html += '    <div class="tarteaucitronCookiesListLeft"><strong>-</strong></div>';
10738                html += '    <div class="tarteaucitronCookiesListRight"></div>';
10739                html += '</div>';
10740            }
10741
10742            html += '<div class="tarteaucitronHidden tarteaucitron-spacer-20"></div>';
10743
10744            if (document.getElementById('tarteaucitronCookiesList') !== null) {
10745                document.getElementById('tarteaucitronCookiesList').innerHTML = html;
10746            }
10747
10748            if (document.getElementById('tarteaucitronCookiesNumber') !== null) {
10749                document.getElementById('tarteaucitronCookiesNumber').innerHTML = nb;
10750                document.getElementById('tarteaucitronCookiesNumber').setAttribute("aria-label", nb + ' cookie' + s + " - " + tarteaucitron.lang.toggleInfoBox);
10751                document.getElementById('tarteaucitronCookiesNumber').setAttribute("title", nb + ' cookie' + s + " - " + tarteaucitron.lang.toggleInfoBox);
10752            }
10753
10754            if (document.getElementById('tarteaucitronCookiesNumberBis') !== null) {
10755                document.getElementById('tarteaucitronCookiesNumberBis').innerHTML = nb + ' cookie' + s;
10756            }
10757
10758            var purgeBtns = document.getElementsByClassName("purgeBtn");
10759            for (i = 0; i < purgeBtns.length; i++) {
10760                tarteaucitron.addClickEventToElement(purgeBtns[i], function () {
10761                    tarteaucitron.cookie.purge([this.dataset.cookie]);
10762                    tarteaucitron.cookie.number();
10763                    tarteaucitron.userInterface.jsSizing('cookie');
10764                    return false;
10765                });
10766            }
10767
10768            for (i = 0; i < tarteaucitron.job.length; i += 1) {
10769                tarteaucitron.cookie.checkCount(tarteaucitron.job[i]);
10770            }
10771        }
10772    },
10773    "fixSelfXSS": function(html) {
10774        return html.toString().replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
10775    },
10776    "getLanguage": function () {
10777        "use strict";
10778
10779        var availableLanguages = 'ar,bg,ca,cn,cs,da,de,et,el,en,es,fi,fr,hu,it,ja,lt,lv,nl,no,oc,pl,pt,ro,ru,se,sk,sv,tr,uk,vi,zh',
10780            defaultLanguage = 'en';
10781
10782        if (tarteaucitronForceLanguage !== '') {
10783            if (availableLanguages.indexOf(tarteaucitronForceLanguage) !== -1) {
10784                return tarteaucitronForceLanguage;
10785            }
10786        }
10787
10788        // get the html lang
10789        if (availableLanguages.indexOf(document.documentElement.getAttribute("lang")) !== -1) {
10790            return document.documentElement.getAttribute("lang");
10791        }
10792
10793        if (!navigator) { return defaultLanguage; }
10794
10795        var lang = navigator.language || navigator.browserLanguage ||
10796                navigator.systemLanguage || navigator.userLang || null,
10797            userLanguage = lang ? lang.substr(0, 2) : null;
10798
10799        if (availableLanguages.indexOf(userLanguage) !== -1) {
10800            return userLanguage;
10801        }
10802
10803        return defaultLanguage;
10804    },
10805    "getLocale": function () {
10806        "use strict";
10807        if (!navigator) { return 'en_US'; }
10808
10809        var lang = navigator.language || navigator.browserLanguage ||
10810                navigator.systemLanguage || navigator.userLang || null,
10811            userLanguage = lang ? lang.substr(0, 2) : null;
10812
10813        if (userLanguage === 'fr') {
10814            return 'fr_FR';
10815        } else if (userLanguage === 'en') {
10816            return 'en_US';
10817        } else if (userLanguage === 'de') {
10818            return 'de_DE';
10819        } else if (userLanguage === 'es') {
10820            return 'es_ES';
10821        } else if (userLanguage === 'it') {
10822            return 'it_IT';
10823        } else if (userLanguage === 'pt') {
10824            return 'pt_PT';
10825        } else if (userLanguage === 'nl') {
10826            return 'nl_NL';
10827        } else if (userLanguage === 'el') {
10828            return 'el_EL';
10829        } else {
10830            return 'en_US';
10831        }
10832    },
10833    "addScript": function (url, id, callback, execute, attrName, attrVal, internal) {
10834        "use strict";
10835        var script,
10836            done = false;
10837
10838        if (execute === false) {
10839            if (typeof callback === 'function') {
10840                callback();
10841            }
10842        } else {
10843            script = document.createElement('script');
10844            script.id = (id !== undefined) ? id : '';
10845            script.async = true;
10846            script.src = url;
10847
10848            if (attrName !== undefined && attrVal !== undefined) {
10849                script.setAttribute(attrName, attrVal);
10850            }
10851
10852            if (typeof callback === 'function') {
10853                if ( !tarteaucitron.parameters.useExternalJs || !internal ) {
10854                    script.onreadystatechange = script.onload = function () {
10855                        var state = script.readyState;
10856                        if (!done && (!state || /loaded|complete/.test(state))) {
10857                            done = true;
10858                            callback();
10859                        }
10860                    };
10861                } else {
10862                    callback();
10863                }
10864            }
10865
10866            if ( !tarteaucitron.parameters.useExternalJs || !internal ) {
10867                document.getElementsByTagName('head')[0].appendChild(script);
10868            }
10869        }
10870    },
10871    "addInternalScript": function (url, id, callback, execute, attrName, attrVal) {
10872        tarteaucitron.addScript(url, id, callback, execute, attrName, attrVal, true);
10873    },
10874    "checkIfExist": function (elemId) {
10875        "use strict";
10876        return document.getElementById(elemId) !== null && document.getElementById(elemId).offsetWidth !== 0 && document.getElementById(elemId).offsetHeight !== 0;
10877    },
10878    "makeAsync": {
10879        "antiGhost": 0,
10880        "buffer": '',
10881        "init": function (url, id) {
10882            "use strict";
10883            var savedWrite = document.write,
10884                savedWriteln = document.writeln;
10885
10886            document.write = function (content) {
10887                tarteaucitron.makeAsync.buffer += content;
10888            };
10889            document.writeln = function (content) {
10890                tarteaucitron.makeAsync.buffer += content.concat("\n");
10891            };
10892
10893            setTimeout(function () {
10894                document.write = savedWrite;
10895                document.writeln = savedWriteln;
10896            }, 20000);
10897
10898            tarteaucitron.makeAsync.getAndParse(url, id);
10899        },
10900        "getAndParse": function (url, id) {
10901            "use strict";
10902            if (tarteaucitron.makeAsync.antiGhost > 9) {
10903                tarteaucitron.makeAsync.antiGhost = 0;
10904                return;
10905            }
10906            tarteaucitron.makeAsync.antiGhost += 1;
10907            tarteaucitron.addInternalScript(url, '', function () {
10908                if (document.getElementById(id) !== null) {
10909                    document.getElementById(id).innerHTML += "<span class='tarteaucitron-display-none'>&nbsp;</span>" + tarteaucitron.makeAsync.buffer;
10910                    tarteaucitron.makeAsync.buffer = '';
10911                    tarteaucitron.makeAsync.execJS(id);
10912                }
10913            });
10914        },
10915        "execJS": function (id) {
10916            /* not strict because third party scripts may have errors */
10917            var i,
10918                scripts,
10919                childId,
10920                type;
10921
10922            if (document.getElementById(id) === null) {
10923                return;
10924            }
10925
10926            scripts = document.getElementById(id).getElementsByTagName('script');
10927            for (i = 0; i < scripts.length; i += 1) {
10928                type = (scripts[i].getAttribute('type') !== null) ? scripts[i].getAttribute('type') : '';
10929                if (type === '') {
10930                    type = (scripts[i].getAttribute('language') !== null) ? scripts[i].getAttribute('language') : '';
10931                }
10932                if (scripts[i].getAttribute('src') !== null && scripts[i].getAttribute('src') !== '') {
10933                    childId = id + Math.floor(Math.random() * 99999999999);
10934                    document.getElementById(id).innerHTML += '<div id="' + childId + '"></div>';
10935                    tarteaucitron.makeAsync.getAndParse(scripts[i].getAttribute('src'), childId);
10936                } else if (type.indexOf('javascript') !== -1 || type === '') {
10937                    eval(scripts[i].innerHTML);
10938                }
10939            }
10940        }
10941    },
10942    "fallback": function (matchClass, content, noInner) {
10943        "use strict";
10944        var elems = document.getElementsByTagName('*'),
10945            i,
10946            index = 0;
10947
10948        for (i in elems) {
10949            if (elems[i] !== undefined) {
10950                for (index = 0; index < matchClass.length; index += 1) {
10951                    if ((' ' + elems[i].className + ' ')
10952                            .indexOf(' ' + matchClass[index] + ' ') > -1) {
10953                        if (typeof content === 'function') {
10954                            if (noInner === true) {
10955                                content(elems[i]);
10956                            } else {
10957                                elems[i].innerHTML = content(elems[i]);
10958                            }
10959                        } else {
10960                            elems[i].innerHTML = content;
10961                        }
10962                    }
10963                }
10964            }
10965        }
10966    },
10967    "engage": function (id) {
10968        "use strict";
10969        var html = '',
10970            r = Math.floor(Math.random() * 100000),
10971            engage = tarteaucitron.services[id].name + ' ' + tarteaucitron.lang.fallback;
10972
10973        if (tarteaucitron.lang['engage-' + id] !== undefined) {
10974            engage = tarteaucitron.lang['engage-' + id];
10975        }
10976
10977        html += '<div class="tac_activate tac_activate_' + id + '">';
10978        html += '   <div class="tac_float">';
10979        html += '      ' + engage;
10980        html += '      <button type="button" class="tarteaucitronAllow" id="Eng' + r + 'ed' + id + '">';
10981        html += '          <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.allow;
10982        html += '       </button>';
10983        html += '   </div>';
10984        html += '</div>';
10985
10986        return html;
10987    },
10988    "extend": function (a, b) {
10989        "use strict";
10990        var prop;
10991        for (prop in b) {
10992            if (b.hasOwnProperty(prop)) {
10993                a[prop] = b[prop];
10994            }
10995        }
10996    },
10997    "proTemp": '',
10998    "proTimer": function () {
10999        "use strict";
11000        setTimeout(tarteaucitron.proPing, 500);
11001    },
11002    "pro": function (list) {
11003        "use strict";
11004        tarteaucitron.proTemp += list;
11005        clearTimeout(tarteaucitron.proTimer);
11006        tarteaucitron.proTimer = setTimeout(tarteaucitron.proPing, 500);
11007    },
11008    "proPing": function () {
11009        "use strict";
11010        if (tarteaucitron.uuid !== '' && tarteaucitron.uuid !== undefined && tarteaucitron.proTemp !== '' && tarteaucitronStatsEnabled) {
11011            var div = document.getElementById('tarteaucitronPremium'),
11012                timestamp = new Date().getTime(),
11013                url = 'https://tarteaucitron.io/log/?';
11014
11015            if (div === null) {
11016                return;
11017            }
11018
11019            url += 'account=' + tarteaucitron.uuid + '&';
11020            url += 'domain=' + tarteaucitron.domain + '&';
11021            url += 'status=' + encodeURIComponent(tarteaucitron.proTemp) + '&';
11022            url += '_time=' + timestamp;
11023
11024            div.innerHTML = '<img src="' + url + '" class="tarteaucitron-display-none" alt="" />';
11025
11026            tarteaucitron.proTemp = '';
11027        }
11028
11029        tarteaucitron.cookie.number();
11030    },
11031    "AddOrUpdate" : function(source, custom){
11032        /**
11033         Utility function to Add or update the fields of obj1 with the ones in obj2
11034         */
11035        for(var key in custom){
11036            if(custom[key] instanceof Object){
11037                source[key] = tarteaucitron.AddOrUpdate(source[key], custom[key]);
11038            }else{
11039                source[key] = custom[key];
11040            }
11041        }
11042        return source;
11043    },
11044    "getElemWidth": function(elem) {
11045        return elem.getAttribute('width') || elem.clientWidth;
11046    },
11047    "getElemHeight": function(elem) {
11048        return elem.getAttribute('height') || elem.clientHeight;
11049    },
11050    "getElemAttr": function (elem, attr) {
11051        return elem.getAttribute('data-' + attr) || elem.getAttribute(attr);
11052    },
11053    "addClickEventToId": function (elemId, func) {
11054        tarteaucitron.addClickEventToElement(document.getElementById(elemId), func);
11055    },
11056    "addClickEventToElement": function (e, func) {
11057        if (e) {
11058            if (e.addEventListener) {
11059                e.addEventListener("click", func);
11060            } else {
11061                e.attachEvent("onclick", func);
11062            }
11063        }
11064    },
11065    "triggerJobsAfterAjaxCall": function() {
11066        tarteaucitron.job.forEach(function(e) { tarteaucitron.job.push(e) });
11067        var i;
11068        var allowBtns = document.getElementsByClassName("tarteaucitronAllow");
11069        for (i = 0; i < allowBtns.length; i++) {
11070            tarteaucitron.addClickEventToElement(allowBtns[i], function () {
11071                tarteaucitron.userInterface.respond(this, true);
11072            });
11073        }
11074        var denyBtns = document.getElementsByClassName("tarteaucitronDeny");
11075        for (i = 0; i < denyBtns.length; i++) {
11076            tarteaucitron.addClickEventToElement(denyBtns[i], function () {
11077                tarteaucitron.userInterface.respond(this, false);
11078            });
11079        }
11080    }
11081};
11082;
11083/*global tarteaucitron, ga, Shareaholic, stLight, clicky, top, google, Typekit, FB, ferankReady, IN, stButtons, twttr, PCWidget*/
11084/*jslint regexp: true, nomen: true*/
11085
11086// generic iframe
11087tarteaucitron.services.iframe = {
vendor: 4,769 bytes, lines 11088-11229
11088    "key": "iframe",
11089    "type": "other",
11090    "name": "Web content",
11091    "uri": "",
11092    "needConsent": true,
11093    "cookies": [],
11094    "js": function () {
11095        "use strict";
11096        tarteaucitron.fallback(['tac_iframe'], function (x) {
11097            var frame_title = (tarteaucitron.getElemAttr(x,"title")) ? tarteaucitron.fixSelfXSS(tarteaucitron.getElemAttr(x,"title")) : '',
11098                width = tarteaucitron.getElemAttr(x,"width"),
11099                height = tarteaucitron.getElemAttr(x,"height"),
11100                allowfullscreen = tarteaucitron.getElemAttr(x,"allowfullscreen"),
11101                url = tarteaucitron.getElemAttr(x,"url");
11102
11103            return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="no" allowtransparency' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
11104        });
11105    },
11106    "fallback": function () {
11107        "use strict";
11108        var id = 'iframe';
11109        tarteaucitron.fallback(['tac_iframe'], function (elem) {
11110            elem.style.width = tarteaucitron.getElemAttr(elem,'width') + 'px';
11111            elem.style.height = tarteaucitron.getElemAttr(elem,'height') + 'px';
11112            return tarteaucitron.engage(id);
11113        });
11114    }
11115};
11116
11117// kwanko
11118tarteaucitron.services.kwanko = {
11119    "key": "kwanko",
11120    "type": "ads",
11121    "name": "Kwanko",
11122    "uri": "https://www.kwanko.com/fr/rgpd/politique-gestion-donnees/",
11123    "needConsent": true,
11124    "cookies": [],
11125    "js": function () {
11126        "use strict";
11127        tarteaucitron.fallback(['tac_kwanko'], function (x) {
11128            var mclic = x.getAttribute("data-mclic");
11129
11130            return '<img src="https://action.metaffiliation.com/trk.php?mclic=' + mclic + '" width="1" height="1" border="0" />';
11131        });
11132    },
11133    "fallback": function () {
11134        "use strict";
11135        var id = 'kwanko';
11136        tarteaucitron.fallback(['tac_kwanko'], function (elem) {
11137            return tarteaucitron.engage(id);
11138        });
11139    }
11140};
11141
11142// leadforensics
11143tarteaucitron.services.leadforensics = {
11144    "key": "leadforensics",
11145    "type": "ads",
11146    "name": "Lead Forensics",
11147    "uri": "https://www.leadforensics.com/cookie-policy/",
11148    "needConsent": true,
11149    "cookies": ['ifuuid'],
11150    "js": function () {
11151        "use strict";
11152        if (tarteaucitron.user.leadforensicsId === undefined) {
11153            return;
11154        }
11155
11156        tarteaucitron.addScript('https://secure.team8save.com/js/sc/'+ tarteaucitron.user.leadforensicsId +'.js');
11157    }
11158};
11159
11160// ubib
11161tarteaucitron.services.ubib = {
11162    "key": "ubib",
11163    "type": "support",
11164    "name": "Ubib Chatbot",
11165    "uri": "https://ubib.libanswers.com/",
11166    "needConsent": true,
11167    "cookies": [],
11168    "js": function () {
11169        "use strict";
11170
11171        if (tarteaucitron.user.ubibId === undefined || tarteaucitron.user.ubibHash === undefined) {
11172            return;
11173        }
11174
11175        tarteaucitron.addScript('https://' + tarteaucitron.user.ubibId + '.libanswers.com/load_chat.php?hash=' + tarteaucitron.user.ubibHash);
11176    }
11177};
11178
11179// wysistathightrack
11180tarteaucitron.services.wysistathightrack = {
11181    "key": "wysistathightrack",
11182    "type": "analytic",
11183    "name": "Wysistat (privacy by design)",
11184    "uri": "https://www.wysistat.net/webanalytics/exemption-cnil/",
11185    "needConsent": false,
11186    "cookies": ['wysistat'],
11187    "js": function () {
11188        "use strict";
11189
11190        if (tarteaucitron.user.wysistatNom === undefined) {
11191            return;
11192        }
11193
11194        window._wsq = window._wsq || [];
11195        window._wsq.push(['_setNom', tarteaucitron.user.wysistatNom]);
11196        window._wsq.push(['_wysistat']);
11197
11198        tarteaucitron.addScript('https://www.wysistat.com/ws.jsa');
11199    }
11200};
11201
11202// robofabrica
11203tarteaucitron.services.robofabrica = {
11204    "key": "robofabrica",
11205    "type": "support",
11206    "name": "Robo Fabrica Chatbot",
11207    "uri": "https://robofabrica.tech/charte-vie-privee/",
11208    "needConsent": true,
11209    "cookies": [],
11210    "js": function () {
11211        "use strict";
11212
11213        if (tarteaucitron.user.robofabricaUuid === undefined) {
11214            return;
11215        }
11216
11217        tarteaucitron.addScript('https://app.robofabrica.tech/widget/script', 'inceptive-cw-script', function() {
11218
11219            document.getElementById('inceptive-cw-script').setAttribute('unique-url', tarteaucitron.user.robofabricaUuid);
11220            document.getElementById('inceptive-cw-script').setAttribute('label', 'start');
11221            document.getElementById('inceptive-cw-script').setAttribute('launch-btn-id', 'inceptive-cw-launch');
11222            document.getElementById('inceptive-cw-script').setAttribute('chat-server-url', 'https://app.robofabrica.tech:443');
11223
11224        });
11225    }
11226};
11227
11228// trustpilot
11229tarteaucitron.services.trustpilot = {
11230    "key": "trustpilot",
11231    "type": "other",
11232    "name": "Trustpilot",
11233    "uri": "https://fr.legal.trustpilot.com/for-reviewers/end-user-privacy-terms",
11234    "needConsent": true,
11235    "cookies": [],
11236    "js": function () {
11237        "use strict";
11238        tarteaucitron.fallback(['trustpilot-widget'], '');
11239        tarteaucitron.addScript('https://widget.trustpilot.com/bootstrap/v5/tp.widget.sync.bootstrap.min.js');
11240    },
11241    "fallback": function () {
11242        "use strict";
11243        var id = 'trustpilot';
11244        tarteaucitron.fallback(['trustpilot-widget'], function (elem) {
11245            elem.style.width = elem.getAttribute('data-style-width');
11246            elem.style.height = elem.getAttribute('data-style-height');
11247            return tarteaucitron.engage(id);
11248        });
11249    }
11250};
11251
11252// snapchat
11253tarteaucitron.services.snapchat = {
11254    "key": "snapchat",
11255    "type": "analytic",
11256    "name": "Snapchat",
11257    "uri": "https://snap.com/fr-FR/privacy/privacy-policy",
11258    "needConsent": true,
11259    "cookies": [],
11260    "js": function () {
11261        "use strict";
11262
11263        if (tarteaucitron.user.snapchatId === undefined || tarteaucitron.user.snapchatEmail === undefined) {
11264            return;
11265        }
11266
11267	var a = window.snaptr = function() {
11268		a.handleRequest ? a.handleRequest.apply(a, arguments) : a.queue.push(arguments)
11269	};
11270	a.queue = [];
11271        window.snaptr('init', tarteaucitron.user.snapchatId, {
11272	    'user_email': tarteaucitron.user.snapchatEmail
11273        });
11274        window.snaptr('track', 'PAGE_VIEW');
11275
11276        tarteaucitron.addScript('https://sc-static.net/scevent.min.js');
11277
11278	if (typeof tarteaucitron.user.snapchatMore === 'function') {
11279            tarteaucitron.user.snapchatMore();
11280        }
11281    }
11282};
11283
11284// antvoice
11285tarteaucitron.services.antvoice = {
11286    "key": "antvoice",
11287    "type": "ads",
11288    "name": "antvoice",
11289    "uri": "https://www.antvoice.com/fr/privacy-policy/",
11290    "needConsent": true,
11291    "cookies": ['antvoice'],
11292    "js": function () {
11293        "use strict";
11294
11295        if (tarteaucitron.user.antvoiceId === undefined) {
11296            return;
11297        }
11298
11299        window.avDataLayer = window.avDataLayer || [];
11300        window.avtag = window.avtag || function(_cmd,_p) {
11301            window.avDataLayer.push({cmd:_cmd,p:_p});
11302        }
11303        window.avtag('setConsent', {consent:true});
11304        window.avtag('init', {id: tarteaucitron.user.antvoiceId});
11305
11306        tarteaucitron.addScript('https://static.avads.net/avtag.min.js');
11307    }
11308};
11309
11310// plausible
11311tarteaucitron.services.plausible = {
11312    "key": "plausible",
11313    "type": "analytic",
11314    "name": "Plausible",
11315    "uri": "https://plausible.io/privacy",
11316    "needConsent": false,
11317    "cookies": [],
11318    "js": function () {
11319        "use strict";
11320
11321        if (tarteaucitron.user.plausibleDomain === undefined) {
11322            return;
11323        }
11324
11325        tarteaucitron.addScript('https://plausible.io/js/script.js', '', '', '', 'data-domain', tarteaucitron.user.plausibleDomain);
11326    }
11327};
11328
11329// videas
11330tarteaucitron.services.videas = {
11331    "key": "videas",
11332    "type": "video",
11333    "name": "Videas",
11334    "uri": "https://videas.fr/fr/legal",
11335    "needConsent": true,
11336    "cookies": [],
11337    "js": function () {
11338        "use strict";
11339        tarteaucitron.fallback(['tac_videas'], function (x) {
11340            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Videas iframe'),
11341                width = x.getAttribute("width"),
11342                height = x.getAttribute("height"),
11343                id = x.getAttribute("data-id"),
11344                allowfullscreen = x.getAttribute("allowfullscreen");
11345
11346            return '<iframe title="' + frame_title + '" src="https://app.videas.fr/embed/' + id + '/" width="' + width + '" height="' + height + '" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
11347        });
11348    },
11349    "fallback": function () {
11350        "use strict";
11351        var id = 'videas';
11352        tarteaucitron.fallback(['tac_videas'], function (elem) {
11353            elem.style.width = elem.getAttribute('width') + 'px';
11354            elem.style.height = elem.getAttribute('height') + 'px';
11355            return tarteaucitron.engage(id);
11356        });
11357    }
11358};
11359
11360// myfeelback
11361tarteaucitron.services.myfeelback = {
vendor: 14,209 bytes, lines 11362-11753
11362    "key": "myfeelback",
11363    "type": "api",
11364    "name": "MyFeelBack (Skeepers)",
11365    "uri": "https://help.myfeelback.com/fr/quels-sont-les-cookies-d%C3%A9pos%C3%A9s-par-un-dispositif-de-collecte-myfeelback",
11366    "needConsent": true,
11367    "cookies": [],
11368    "js": function () {
11369        "use strict";
11370        if (tarteaucitron.user.myfeelbackId === undefined) {
11371            return;
11372        }
11373
11374        window._Mfb_useCookie = true;
11375        window._Mfb_ud = {
11376            var1: undefined,
11377            var2: undefined,
11378            varN: undefined,
11379            _context: {
11380                lang: undefined,
11381                privacyMode: false,
11382                _page: {
11383                    url: location.pathname,
11384                    storageDuration: 30
11385                }
11386            }
11387        };
11388        tarteaucitron.addScript('https://actorssl-5637.kxcdn.com/actor/'+tarteaucitron.user.myfeelbackId+'/action', 'MFBActor');
11389    }
11390};
11391
11392// arcio
11393tarteaucitron.services.arcio = {
11394    "key": "arcio",
11395    "type": "api",
11396    "name": "Arc.io",
11397    "uri": "https://arc.io/about",
11398    "needConsent": true,
11399    "cookies": [],
11400    "js": function () {
11401        "use strict";
11402        if (tarteaucitron.user.arcId === undefined) {
11403            return;
11404        }
11405
11406        tarteaucitron.addScript('https://arc.io/widget.min.js#'+tarteaucitron.user.arcId);
11407    }
11408};
11409
11410// doubleclick
11411tarteaucitron.services.doubleclick = {
11412    "key": "doubleclick",
11413    "type": "ads",
11414    "name": "DoubleClick",
11415    "uri": "https://support.google.com/admanager/answer/2839090",
11416    "needConsent": true,
11417    "cookies": [],
11418    "js": function () {
11419        "use strict";
11420        tarteaucitron.fallback(['doubleclick_container'], function (x) {
11421            var id1 = tarteaucitron.getElemAttr(x, "data-id1"),
11422                id2 = tarteaucitron.getElemAttr(x, "data-id2"),
11423                type = tarteaucitron.getElemAttr(x, "data-type"),
11424                cat = tarteaucitron.getElemAttr(x, "data-cat"),
11425                item = tarteaucitron.getElemAttr(x, "data-item"),
11426                quantity = tarteaucitron.getElemAttr(x, "data-quantity"),
11427                price = tarteaucitron.getElemAttr(x, "data-price"),
11428                postage = tarteaucitron.getElemAttr(x, "data-postage"),
11429                seller = tarteaucitron.getElemAttr(x, "data-seller"),
11430                gdpr = tarteaucitron.getElemAttr(x, "data-gdpr"),
11431                gdpr_consent = tarteaucitron.getElemAttr(x, "data-gdpr-consent"),
11432                ord = tarteaucitron.getElemAttr(x, "data-ord"),
11433                num = tarteaucitron.getElemAttr(x, "data-num");
11434
11435            return '<iframe src="https://'+id1+'.fls.doubleclick.net/activityi;src='+id2+';type='+type+';cat='+cat+';item='+item+';quantity='+quantity+';price='+price+';postage='+postage+';seller='+seller+';gdpr='+gdpr+';gdpr_consent='+gdpr_consent+';num='+num+';ord='+ord+'?" width="1" height="1" frameborder="0" style="display:none"></iframe>';
11436        });
11437    }
11438};
11439
11440// userpilot
11441tarteaucitron.services.userpilot = {
11442    "key": "userpilot",
11443    "type": "analytic",
11444    "name": "UserPilot",
11445    "uri": "https://userpilot.com/privacy-policy",
11446    "needConsent": true,
11447    "cookies": [],
11448    "js": function () {
11449        "use strict";
11450        if (tarteaucitron.user.userpilotToken === undefined) {
11451            return;
11452        }
11453
11454        window.userpilotSettings = {token: tarteaucitron.user.userpilotToken};
11455        tarteaucitron.addScript('https://js.userpilot.io/sdk/latest.js');
11456    }
11457};
11458
11459tarteaucitron.services.piwikpro = {
11460    "key": "piwikpro",
11461    "type": "analytic",
11462    "name": "Piwik Pro",
11463    "uri": "https://piwik.pro/privacy-policy/",
11464    "needConsent": true,
11465    "cookies": ['_pk_ref', '_pk_cvar', '_pk_id', '_pk_ses', '_pk_hsr', 'piwik_ignore', '_pk_uid'],
11466    "js": function () {
11467        "use strict";
11468        if (tarteaucitron.user.piwikProId === undefined) {
11469            return;
11470        }
11471
11472        window['dataLayer'] = window['dataLayer'] || [], window['dataLayer'].push({
11473            start: (new Date).getTime(),
11474            event: "stg.start"
11475        });
11476
11477        function stgCreateCookie(a, b, c) {
11478           var d = "";
11479           if (c) {
11480              var e = new Date;
11481              e.setTime(e.getTime() + 24 * c * 60 * 60 * 1e3), d = "; expires=" + e.toUTCString()
11482           }
11483           document.cookie = a + "=" + b + d + "; path=/"
11484        }
11485
11486        var isStgDebug = (window.location.href.match("stg_debug") || document.cookie.match("stg_debug")) && !window.location.href.match("stg_disable_debug");
11487        stgCreateCookie("stg_debug", isStgDebug ? 1 : "", isStgDebug ? 14 : -1);
11488        var qP = [];
11489
11490        var qPString = qP.length > 0 ? ("?" + qP.join("&")) : "";
11491        tarteaucitron.addScript('https://carsatse.containers.piwik.pro/'+tarteaucitron.user.piwikProId+'.js'+qPString);
11492
11493        ! function(a, n, i) {
11494           a[n] = a[n] || {};
11495           for (var c = 0; c < i.length; c++) ! function(i) {
11496              a[n][i] = a[n][i] || {}, a[n][i].api = a[n][i].api || function() {
11497                 var a = [].slice.call(arguments, 0);
11498                 "string" == typeof a[0] && window['dataLayer'].push({
11499                    event: n + "." + i + ":" + a[0],
11500                    parameters: [].slice.call(arguments, 1)
11501                 })
11502              }
11503           }(i[c])
11504        }(window, "ppms", ["tm", "cm"]);
11505    }
11506};
11507
11508// pinterestpixel
11509tarteaucitron.services.pinterestpixel = {
11510    "key": "pinterestpixel",
11511    "type": "ads",
11512    "name": "Pinterest Pixel",
11513    "uri": "https://help.pinterest.com/fr/business/article/track-conversions-with-pinterest-tag",
11514    "needConsent": true,
11515    "cookies": ['_pinterest_sess', '_pinterest_ct', '_pinterest_ct_mw', '_pinterest_ct_rt', '_epik', '_derived_epik', '_pin_unauth', '_pinterest_ct_ua'],
11516    "js": function () {
11517        "use strict";
11518
11519        if (tarteaucitron.user.pinterestpixelId === undefined) {
11520            return;
11521        }
11522
11523        if (!window.pintrk) {
11524            window.pintrk = function () {
11525                window.pintrk.queue.push(Array.prototype.slice.call(arguments));
11526            };
11527
11528            var n = window.pintrk;
11529            n.queue = [];
11530            n.version = "3.0";
11531
11532            tarteaucitron.addScript('https://s.pinimg.com/ct/core.js', '', function () {
11533                window.pintrk('load', tarteaucitron.user.pinterestpixelId);
11534                window.pintrk('page');
11535            });
11536        }
11537    }
11538};
11539
11540// elfsight
11541tarteaucitron.services.elfsight = {
11542    "key": "elfsight",
11543    "type": "support",
11544    "name": "Elfsight",
11545    "uri": "https://elfsight.com/privacy-policy/",
11546    "needConsent": true,
11547    "cookies": ['__cfduid', '_p_hfp_client_id', 'session_id'],
11548    "js": function () {
11549        "use strict";
11550
11551        tarteaucitron.addScript('https://apps.elfsight.com/p/platform.js');
11552    }
11553};
11554
11555// plezi
11556tarteaucitron.services.plezi = {
11557    "key": "plezi",
11558    "type": "analytic",
11559    "name": "Plezi",
11560    "uri": "https://www.plezi.co/fr/mentions-legales/",
11561    "needConsent": true,
11562    "cookies": [],
11563    "js": function () {
11564        "use strict";
11565
11566        if (tarteaucitron.user.pleziTenant === undefined || tarteaucitron.user.pleziTw === undefined) {
11567            return;
11568        }
11569
11570        tarteaucitron.addScript('https://app.plezi.co/scripts/ossleads_analytics.js?tenant=' + tarteaucitron.user.pleziTenant + '&tw=' + tarteaucitron.user.pleziTw);
11571    }
11572};
11573
11574
11575// smartsupp
11576tarteaucitron.services.smartsupp = {
11577    "key": "smartsupp",
11578    "type": "support",
11579    "name": "Smartsupp",
11580    "uri": "https://www.smartsupp.com/help/privacy/",
11581    "needConsent": true,
11582    "cookies": ['ssupp.vid', 'ssupp.visits', 'AWSALB', 'AWSALBCORS'],
11583    "js": function () {
11584        "use strict";
11585
11586        if (tarteaucitron.user.smartsuppKey === undefined) {
11587            return;
11588        }
11589
11590        window._smartsupp = window._smartsupp || {};
11591        window._smartsupp.key = tarteaucitron.user.smartsuppKey;
11592        window.smartsupp = function () {
11593            window.smartsupp._.push(arguments)
11594        };
11595        window.smartsupp._ = [];
11596
11597        tarteaucitron.addScript('https://www.smartsuppchat.com/loader.js');
11598    }
11599};
11600
11601
11602
11603// sharpspring
11604tarteaucitron.services.sharpspring = {
11605    "key": "sharpspring",
11606    "type": "analytic",
11607    "name": "SharpSpring",
11608    "uri": "https://sharpspring.com/legal/sharpspring-cookie-policy/",
11609    "needConsent": true,
11610    "cookies": ['koitk', '__ss', '__ss_tk', '__ss_referrer'],
11611    "js": function () {
11612        "use strict";
11613
11614        if (tarteaucitron.user.ssId === undefined || tarteaucitron.user.ssAccount === undefined) {
11615            return;
11616        }
11617
11618        window._ss = window._ss || [];
11619        window._ss.push(['_setDomain', 'https://' + tarteaucitron.user.ssId + '.marketingautomation.services/net']);
11620        window._ss.push(['_setAccount', tarteaucitron.user.ssAccount]);
11621        window._ss.push(['_trackPageView']);
11622
11623        window._pa = window._pa || {};
11624
11625        tarteaucitron.addScript('https://' + tarteaucitron.user.ssId + '.marketingautomation.services/client/ss.js');
11626    }
11627};
11628
11629// pardot
11630tarteaucitron.services.pardot = {
11631    "key": "pardot",
11632    "type": "analytic",
11633    "name": "Pardot",
11634    "uri": "https://www.salesforce.com/company/privacy/full_privacy/",
11635    "needConsent": true,
11636    "cookies": ['visitor_id'],
11637    "js": function () {
11638        "use strict";
11639        if (tarteaucitron.user.piAId === undefined || tarteaucitron.user.piCId === undefined) {
11640            return;
11641        }
11642
11643        window.piAId = tarteaucitron.user.piAId;
11644        window.piCId = tarteaucitron.user.piCId;
11645        window.piHostname = 'pi.pardot.com';
11646
11647        tarteaucitron.addScript('https://pi.pardot.com/pd.js');
11648    }
11649};
11650
11651// Open Web Analytics
11652tarteaucitron.services.openwebanalytics = {
11653    "key": "openwebanalytics",
11654    "type": "analytic",
11655    "name": "Open Web Analytics",
11656    "uri": "",
11657    "needConsent": true,
11658    "cookies": [],
11659    "js": function () {
11660        "use strict";
11661
11662        if (tarteaucitron.user.openwebanalyticsId === undefined || tarteaucitron.user.openwebanalyticsHost === undefined) {
11663            return;
11664        }
11665
11666        window.owa_baseUrl = tarteaucitron.user.openwebanalyticsHost;
11667        window.owa_cmds = window.owa_cmds || [];
11668        window.owa_cmds.push(['setSiteId', tarteaucitron.user.openwebanalyticsId]);
11669        window.owa_cmds.push(['trackPageView']);
11670        window.owa_cmds.push(['trackClicks']);
11671
11672        tarteaucitron.addScript(window.owa_baseUrl + 'modules/base/js/owa.tracker-combined-min.js');
11673    }
11674};
11675
11676// xandr universal pixel
11677// https://docs.xandr.com/bundle/invest_invest-standard/page/topics/universal-pixel-overview.html
11678tarteaucitron.services.xandr = {
11679    "key": "xandr",
11680    "type": "ads",
11681    "name": "Xandr (Universal)",
11682    "uri": "https://www.xandr.com/privacy/cookie-policy/",
11683    "needConsent": true,
11684    "cookies": ['uuid2', 'uids', 'sess', 'icu', 'anj', 'usersync'],
11685    "js": function () {
11686        "use strict";
11687        if (tarteaucitron.user.xandrId === undefined) {
11688            return;
11689        }
11690
11691        if (!window.pixie) {
11692            var n = window.pixie = function (e, i, a) {
11693                n.actionQueue.push({
11694                    action: e,
11695                    actionValue: i,
11696                    params: a
11697                })
11698            };
11699            n.actionQueue = [];
11700        }
11701
11702        tarteaucitron.addScript('https://acdn.adnxs.com/dmp/up/pixie.js', '', function () {
11703            window.pixie('init', tarteaucitron.user.xandrId);
11704            window.pixie('event', 'PageView');
11705        });
11706    }
11707};
11708
11709// xandr segment
11710// https://docs.xandr.com/bundle/invest_invest-standard/page/topics/segment-pixels-advanced.html
11711tarteaucitron.services.xandrsegment = {
11712    "key": "xandrsegment",
11713    "type": "ads",
11714    "name": "Xandr (Segment)",
11715    "uri": "https://www.xandr.com/privacy/cookie-policy/",
11716    "needConsent": true,
11717    "cookies": ['uuid2', 'uids', 'sess', 'icu', 'anj', 'usersync'],
11718    "js": function () {
11719        "use strict";
11720        var uniqIds = [],
11721            i,
11722            uri;
11723
11724        tarteaucitron.fallback(['xandrsegment-canvas'], function (x) {
11725            var uniqId = '_' + Math.random().toString(36).substr(2, 9);
11726            uniqIds.push(uniqId);
11727            return '<div id="' + uniqId + '" xandrsegmentAdd="' + x.getAttribute('xandrsegmentAdd') + '" xandrsegmentAddCode="' + x.getAttribute('xandrsegmentAddCode') + '" xandrsegmentRemove="' + x.getAttribute('xandrsegmentRemove') + '" xandrsegmentRemoveCode="' + x.getAttribute('xandrsegmentRemoveCode') + '" xandrsegmentMember="' + x.getAttribute('xandrsegmentMember') + '" xandrsegmentRedir="' + x.getAttribute('xandrsegmentRedir') + '" xandrsegmentValue="' + x.getAttribute('xandrsegmentValue') + '" xandrsegmentOther="' + x.getAttribute('xandrsegmentOther') + '"></div>';
11728        });
11729
11730        for (i = 0; i < uniqIds.length; i += 1) {
11731            uri = '//ib.adnxs.com/seg?t=2&';
11732            uri += 'add=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentAdd') + '&';
11733            uri += 'add_code=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentAddCode') + '&';
11734            uri += 'remove=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentRemove') + '&';
11735            uri += 'remove_code=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentRemoveCode') + '&';
11736            uri += 'member=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentMember') + '&';
11737            uri += 'redir=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentRedir') + '&';
11738            uri += 'value=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentValue') + '&';
11739            uri += 'other=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentOther');
11740
11741            document.getElementById(uniqIds[i]).innerHTML = '<img src=\'' + uri + '\' width=\'1\' height=\'1\' />';
11742        }
11743    },
11744    "fallback": function () {
11745        "use strict";
11746        var id = 'xandrsegment';
11747        tarteaucitron.fallback(['xandrsegment-canvas'], tarteaucitron.engage(id));
11748    }
11749};
11750
11751// xandr conversion
11752// https://docs.xandr.com/bundle/invest_invest-standard/page/topics/working-with-conversion-pixels.html
11753tarteaucitron.services.xandrconversion = {
11754    "key": "xandrconversion",
11755    "type": "ads",
11756    "name": "Xandr (Conversion)",
11757    "uri": "https://www.xandr.com/privacy/cookie-policy/",
11758    "needConsent": true,
11759    "cookies": ['uuid2', 'uids', 'sess', 'icu', 'anj', 'usersync'],
11760    "js": function () {
11761        "use strict";
11762        var uniqIds = [],
11763            i,
11764            uri;
11765
11766        tarteaucitron.fallback(['xandrconversion-canvas'], function (x) {
11767            var uniqId = '_' + Math.random().toString(36).substr(2, 9);
11768            uniqIds.push(uniqId);
11769            return '<div id="' + uniqId + '" xandrconversionId="' + x.getAttribute('xandrconversionId') + '" xandrconversionSeg="' + x.getAttribute('xandrconversionSeg') + '" xandrconversionOrderId="' + x.getAttribute('xandrconversionOrderId') + '" xandrconversionValue="' + x.getAttribute('xandrconversionValue') + '" xandrconversionRedir="' + x.getAttribute('xandrconversionRedir') + '" xandrconversionOther="' + x.getAttribute('xandrconversionOther') + '"></div>';
11770        });
11771
11772        for (i = 0; i < uniqIds.length; i += 1) {
11773            uri = '//ib.adnxs.com/px?t=2&';
11774            uri += 'id=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionId') + '&';
11775            uri += 'seg=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionSeg') + '&';
11776            uri += 'order_id=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionOrderId') + '&';
11777            uri += 'value=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionValue') + '&';
11778            uri += 'redir=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionRedir') + '&';
11779            uri += 'other=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionOther');
11780
11781            document.getElementById(uniqIds[i]).innerHTML = '<img src=\'' + uri + '\' width=\'1\' height=\'1\' />';
11782        }
11783    },
11784    "fallback": function () {
11785        "use strict";
11786        var id = 'xandrconversion';
11787        tarteaucitron.fallback(['xandrconversion-canvas'], tarteaucitron.engage(id));
11788    }
11789};
11790
11791// helloasso
11792tarteaucitron.services.helloasso = {
11793    "key": "helloasso",
11794    "type": "api",
11795    "name": "HelloAsso",
11796    "uri": "https://www.helloasso.com/confidentialite",
11797    "needConsent": true,
11798    "cookies": [],
11799    "js": function () {
11800        "use strict";
11801        tarteaucitron.fallback(['tac_helloasso'], function (x) {
11802            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'HelloAsso iframe'),
11803                width = x.getAttribute("width"),
11804                height = x.getAttribute("height"),
11805                url = x.getAttribute("data-url"),
11806                allowfullscreen = x.getAttribute("allowfullscreen");
11807
11808            return '<iframe title="' + frame_title + '" id="haWidget" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="auto" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
11809        });
11810    },
11811    "fallback": function () {
11812        "use strict";
11813        var id = 'helloasso';
11814        tarteaucitron.fallback(['tac_helloasso'], function (elem) {
11815            elem.style.width = elem.getAttribute('width') + 'px';
11816            elem.style.height = elem.getAttribute('height') + 'px';
11817            return tarteaucitron.engage(id);
11818        });
11819    }
11820};
11821
11822// podcloud
11823tarteaucitron.services.podcloud = {
11824    "key": "podcloud",
11825    "type": "video",
11826    "name": "podCloud",
11827    "uri": "https://podcloud.fr/privacy",
11828    "needConsent": true,
11829    "cookies": [],
11830    "js": function () {
11831        "use strict";
11832        tarteaucitron.fallback(['tac_podcloud'], function (x) {
11833            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'podCloud iframe'),
11834                width = x.getAttribute("width"),
11835                height = x.getAttribute("height"),
11836                url = x.getAttribute("data-url"),
11837                allowfullscreen = x.getAttribute("allowfullscreen");
11838
11839            return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="auto" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
11840        });
11841    },
11842    "fallback": function () {
11843        "use strict";
11844        var id = 'podcloud';
11845        tarteaucitron.fallback(['tac_podcloud'], function (elem) {
11846            elem.style.width = elem.getAttribute('width') + 'px';
11847            elem.style.height = elem.getAttribute('height') + 'px';
11848            return tarteaucitron.engage(id);
11849        });
11850    }
11851};
11852
11853// facebookpost
11854tarteaucitron.services.facebookpost = {
vendor: 8,205 bytes, lines 11855-12056
11855    "key": "facebookpost",
11856    "type": "social",
11857    "name": "Facebook (post)",
11858    "uri": "https://www.facebook.com/policy.php",
11859    "needConsent": true,
11860    "cookies": [],
11861    "js": function () {
11862        "use strict";
11863        tarteaucitron.fallback(['tac_facebookpost'], function (x) {
11864            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Facebook iframe'),
11865                width = x.getAttribute("width"),
11866                height = x.getAttribute("height"),
11867                url = x.getAttribute("data-url"),
11868                appId = x.getAttribute("data-appid"),
11869                allowfullscreen = x.getAttribute("allowfullscreen"),
11870                showText = x.getAttribute("data-show-text");
11871
11872            return '<iframe title="' + frame_title + '" src="https://www.facebook.com/plugins/post.php?href=' + encodeURIComponent(url) + '&amp;width=' + width + '&amp;show_text=false&amp;appId=' + appId + '&amp;show_text=' + showText + '&amp;height=' + height + '" width="' + width + '" height="' + height + '" scrolling="auto" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
11873        });
11874    },
11875    "fallback": function () {
11876        "use strict";
11877        var id = 'facebookpost';
11878        tarteaucitron.fallback(['tac_facebookpost'], function (elem) {
11879            elem.style.width = elem.getAttribute('width') + 'px';
11880            elem.style.height = elem.getAttribute('height') + 'px';
11881            return tarteaucitron.engage(id);
11882        });
11883    }
11884};
11885
11886// amplitude
11887tarteaucitron.services.amplitude = {
11888    "key": "amplitude",
11889    "type": "analytic",
11890    "name": "Amplitude",
11891    "uri": "https://amplitude.com/privacy",
11892    "needConsent": true,
11893    "cookies": [],
11894    "js": function () {
11895        "use strict";
11896        if (tarteaucitron.user.amplitude === undefined) {
11897            return;
11898        }
11899        tarteaucitron.addScript('https://cdn.amplitude.com/libs/amplitude-5.8.0-min.gz.js', '', function () {
11900
11901            window.amplitude = {
11902                _q: [],
11903                _iq: {}
11904            };
11905            function s(e, t) { e.prototype[t] = function () { this._q.push([t].concat(Array.prototype.slice.call(arguments, 0))); return this } }
11906            var o = function () { this._q = []; return this };
11907            var a = ["add", "append", "clearAll", "prepend", "set", "setOnce", "unset"];
11908            for (var u = 0; u < a.length; u++) { s(o, a[u]) }
11909            amplitude.Identify = o;
11910            var c = function () { this._q = []; return this };
11911            var l = ["setProductId", "setQuantity", "setPrice", "setRevenueType", "setEventProperties"];
11912            for (var p = 0; p < l.length; p++) { s(c, l[p]) }
11913            amplitude.Revenue = c;
11914            var d = ["init", "logEvent", "logRevenue", "setUserId", "setUserProperties", "setOptOut", "setVersionName", "setDomain", "setDeviceId", "enableTracking", "setGlobalUserProperties", "identify", "clearUserProperties", "setGroup", "logRevenueV2", "regenerateDeviceId", "groupIdentify", "onInit", "logEventWithTimestamp", "logEventWithGroups", "setSessionId", "resetSessionId"];
11915            function v(e) { function t(t) { e[t] = function () { e._q.push([t].concat(Array.prototype.slice.call(arguments, 0))) } } for (var n = 0; n < d.length; n++) { t(d[n]) } }
11916            v(amplitude);
11917            amplitude.getInstance = function (e) { e = (!e || e.length === 0 ? "$default_instance" : e).toLowerCase(); if (!amplitude._iq.hasOwnProperty(e)) { amplitude._iq[e] = { _q: [] }; v(amplitude._iq[e]) } return amplitude._iq[e] };
11918
11919            amplitude.getInstance().init(tarteaucitron.user.amplitude);
11920        });
11921    }
11922};
11923
11924// abtasty
11925tarteaucitron.services.abtasty = {
11926    "key": "abtasty",
11927    "type": "api",
11928    "name": "ABTasty",
11929    "uri": "https://www.abtasty.com/terms-of-use/",
11930    "needConsent": true,
11931    "cookies": ['ABTasty', 'ABTastySession'],
11932    "js": function () {
11933        "use strict";
11934        if (tarteaucitron.user.abtastyID === undefined) {
11935            return;
11936        }
11937        tarteaucitron.addScript('//try.abtasty.com/' + tarteaucitron.user.abtastyID + '.js');
11938    }
11939};
11940
11941
11942// yandex metrica
11943tarteaucitron.services.metrica = {
11944    "key": "metrica",
11945    "type": "analytic",
11946    "name": "Yandex Metrica",
11947    "uri": "https://yandex.com/legal/confidential/",
11948    "needConsent": true,
11949    "cookies": ['_ym_metrika_enabled', '_ym_isad', '_ym_uid', '_ym_d', 'yabs-sid', '_ym_debug', '_ym_mp2_substs', '_ym_hostIndex', '_ym_mp2_track', 'yandexuid', 'usst'],
11950    "js": function () {
11951        "use strict";
11952        if (tarteaucitron.user.yandexmetrica === undefined) {
11953            return;
11954        }
11955        tarteaucitron.addScript('https://mc.yandex.ru/metrika/tag.js', '', function () {
11956
11957            (function (m, e, t, r, i, k, a) {
11958                m[i] = m[i] || function () { (m[i].a = m[i].a || []).push(arguments) };
11959                m[i].l = 1 * new Date(); k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a)
11960            })
11961                (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
11962
11963            ym(tarteaucitron.user.yandexmetrica, "init", {
11964                clickmap: true,
11965                trackLinks: true,
11966                accurateTrackBounce: true,
11967                webvisor: true,
11968                ecommerce: "dataLayer"
11969            });
11970        });
11971    }
11972};
11973
11974// addthis
11975tarteaucitron.services.addthis = {
11976    "key": "addthis",
11977    "type": "social",
11978    "name": "AddThis",
11979    "uri": "https://www.addthis.com/privacy/privacy-policy#publisher-visitors",
11980    "needConsent": true,
11981    "cookies": ['__atuvc', '__atuvs'],
11982    "js": function () {
11983        "use strict";
11984        if (tarteaucitron.user.addthisPubId === undefined) {
11985            return;
11986        }
11987        if (tarteaucitron.isAjax === true) {
11988            window.addthis = null;
11989            window._adr = null;
11990            window._atc = null;
11991            window._atd = null;
11992            window._ate = null;
11993            window._atr = null;
11994            window._atw = null;
11995        }
11996        tarteaucitron.fallback(['addthis_inline_share_toolbox'], '');
11997        tarteaucitron.addScript('//s7.addthis.com/js/300/addthis_widget.js#pubid=' + tarteaucitron.user.addthisPubId);
11998    },
11999    "fallback": function () {
12000        "use strict";
12001        var id = 'addthis';
12002        tarteaucitron.fallback(['addthis_inline_share_toolbox'], tarteaucitron.engage(id));
12003    }
12004};
12005
12006// addtoanyfeed
12007tarteaucitron.services.addtoanyfeed = {
12008    "key": "addtoanyfeed",
12009    "type": "social",
12010    "name": "AddToAny (feed)",
12011    "uri": "https://www.addtoany.com/privacy",
12012    "needConsent": true,
12013    "cookies": [],
12014    "js": function () {
12015        "use strict";
12016        if (tarteaucitron.user.addtoanyfeedUri === undefined) {
12017            return;
12018        }
12019        tarteaucitron.user.addtoanyfeedSubscribeLink = 'https://www.addtoany.com/subscribe?linkurl=' + tarteaucitron.user.addtoanyfeedUri;
12020        window.a2a_config = window.a2a_config || {};
12021        window.a2a_config.linkurl = tarteaucitron.user.addtoanyfeedUri;
12022        tarteaucitron.addScript('//static.addtoany.com/menu/feed.js');
12023    },
12024    "fallback": function () {
12025        "use strict";
12026        tarteaucitron.user.addtoanyfeedSubscribeLink = 'https://www.addtoany.com/subscribe?linkurl=' + tarteaucitron.user.addtoanyfeedUri;
12027    }
12028};
12029
12030// addtoanyshare
12031tarteaucitron.services.addtoanyshare = {
12032    "key": "addtoanyshare",
12033    "type": "social",
12034    "name": "AddToAny (share)",
12035    "uri": "https://www.addtoany.com/privacy",
12036    "needConsent": true,
12037    "cookies": [],
12038    "js": function () {
12039        "use strict";
12040        tarteaucitron.fallback(['tac_addtoanyshare'], function (elem) {
12041            elem.remove();
12042        }, true);
12043        tarteaucitron.addScript('//static.addtoany.com/menu/page.js');
12044    },
12045    "fallback": function () {
12046        "use strict";
12047        var id = 'addtoanyshare';
12048        tarteaucitron.fallback(['tac_addtoanyshare'], tarteaucitron.engage(id));
12049    }
12050};
12051
12052// aduptech ads
12053tarteaucitron.services.aduptech_ads = {
12054    "key": "aduptech_ads",
12055    "type": "ads",
12056    "name": "Ad Up Technology (ads)",
12057    "uri": "https://www.adup-tech.com/datenschutz",
12058    "needConsent": true,
12059    "cookies": [],
12060    "js": function () {
12061        "use strict";
12062
12063        var IDENTIFIER = "aduptech_ads",
12064            API_URL = "https://s.d.adup-tech.com/jsapi";
12065
12066        var elements = document.getElementsByClassName(IDENTIFIER);
12067        if (!elements || elements.length === 0) {
12068            return;
12069        }
12070
12071        tarteaucitron.fallback([IDENTIFIER], "");
12072
12073        tarteaucitron.addScript(API_URL, "", function () {
12074            for (var i = 0; i < elements.length; i++) {
12075                var element = elements[i];
12076
12077                if (!element.getAttribute("id")) {
12078                    element.setAttribute("id", IDENTIFIER + Math.random().toString(36).substr(2, 9));
12079                }
12080
12081                window.uAd.embed(element.getAttribute("id"), {
12082                    placementKey: element.getAttribute("placementKey"),
12083                    responsive: Boolean(element.getAttribute("responsive")),
12084                    lazy: Boolean(element.getAttribute("lazy")),
12085                    adtest: Boolean(element.getAttribute("test")),
12086                    query: element.getAttribute("query") || "",
12087                    minCpc: element.getAttribute("minCpc") || "",
12088                    pageUrl: element.getAttribute("pageUrl") || "",
12089                    skip: element.getAttribute("skip") || ""
12090                });
12091            }
12092        });
12093
12094    },
12095    "fallback": function () {
12096        "use strict";
12097        tarteaucitron.fallback(["aduptech_ads"], tarteaucitron.engage("aduptech_ads"));
12098    }
12099};
12100
12101// aduptech conversion
12102tarteaucitron.services.aduptech_conversion = {
12103    "key": "aduptech_conversion",
12104    "type": "ads",
12105    "name": "Ad Up Technology (conversion)",
12106    "uri": "https://www.adup-tech.com/datenschutz",
12107    "needConsent": true,
12108    "cookies": [],
12109    "js": function () {
12110        "use strict";
12111
12112        var IDENTIFIER = "aduptech_conversion",
12113            CONVERSION_PIXEL_BASE_URL = "https://d.adup-tech.com/campaign/conversion";
12114
12115        var elements = document.getElementsByClassName(IDENTIFIER);
12116        if (!elements || elements.length === 0) {
12117            return;
12118        }
12119
12120        tarteaucitron.fallback([IDENTIFIER], "");
12121
12122        for (var i = 0; i < elements.length; i++) {
12123            var element = elements[i];
12124
12125            if (!element.getAttribute("advertiserId") || !element.getAttribute("conversionCode")) {
12126                continue;
12127            }
12128
12129            var url = CONVERSION_PIXEL_BASE_URL +
12130                "/" + encodeURIComponent(element.getAttribute("advertiserId")) +
12131                "?t=" + encodeURIComponent(element.getAttribute("conversionCode"));
12132
12133            if (element.getAttribute("price")) {
12134                url += "&price=" + encodeURIComponent(element.getAttribute("price"));
12135            }
12136
12137            if (element.getAttribute("quantity")) {
12138                url += "&quantity=" + encodeURIComponent(element.getAttribute("quantity"));
12139            }
12140
12141            if (element.getAttribute("total")) {
12142                url += "&total=" + encodeURIComponent(element.getAttribute("total"));
12143            }
12144
12145            if (element.getAttribute("orderId")) {
12146                url += "&order_id=" + encodeURIComponent(element.getAttribute("orderId"));
12147            }
12148
12149            if (element.getAttribute("itemNumber")) {
12150                url += "&item_number=" + encodeURIComponent(element.getAttribute("itemNumber"));
12151            }
12152
12153            if (element.getAttribute("description")) {
12154                url += "&description=" + encodeURIComponent(element.getAttribute("description"));
12155            }
12156
12157            (new Image()).src = url;
12158        }
12159    }
12160};
12161
12162// aduptech retargeting
12163tarteaucitron.services.aduptech_retargeting = {
12164    "key": "aduptech_retargeting",
12165    "type": "ads",
12166    "name": "Ad Up Technology (retargeting)",
12167    "uri": "https://www.adup-tech.com/datenschutz",
12168    "needConsent": true,
12169    "cookies": [],
12170    "js": function () {
12171        "use strict";
12172
12173        var IDENTIFIER = "aduptech_retargeting",
12174            API_URL = "https://s.d.adup-tech.com/services/retargeting.js";
12175
12176        var elements = document.getElementsByClassName(IDENTIFIER);
12177        if (!elements || elements.length === 0) {
12178            return;
12179        }
12180
12181        tarteaucitron.fallback([IDENTIFIER], "");
12182
12183        window.AdUpRetargeting = function (api) {
12184            for (var i = 0; i < elements.length; i++) {
12185                var element = elements[i];
12186
12187                api.init();
12188
12189                api.setAccount(element.getAttribute("account"));
12190
12191                if (element.getAttribute("email")) {
12192                    api.setEmail(element.getAttribute("email"));
12193                } else if (element.getAttribute("hashedEmail")) {
12194                    api.setHashedEmail(element.getAttribute("hashedEmail"));
12195                }
12196
12197                if (element.getAttribute("product")) {
12198                    try {
12199                        api.setProduct(JSON.parse(element.getAttribute("product")));
12200                    } catch (e) {
12201                        api.setProduct(element.getAttribute("product"));
12202                    }
12203                }
12204
12205                if (element.getAttribute("transaction")) {
12206                    try {
12207                        api.setTransaction(JSON.parse(element.getAttribute("transaction")));
12208                    } catch (e) {
12209                        api.setTransaction(element.getAttribute("transaction"));
12210                    }
12211                }
12212
12213                if (element.getAttribute("demarkUser")) {
12214                    api.setDemarkUser();
12215                } else if (element.getAttribute("demarkProducts")) {
12216                    api.setDemarkProducts();
12217                }
12218
12219                if (element.getAttribute("conversionCode")) {
12220                    api.setConversionCode(element.getAttribute("conversionCode"));
12221                }
12222
12223                if (element.getAttribute("device")) {
12224                    var setter = "set" + element.getAttribute("device").charAt(0).toUpperCase() + element.getAttribute("device").slice(1);
12225                    if (typeof api[setter] === 'function') {
12226                        api[setter]();
12227                    }
12228                }
12229
12230                if (element.getAttribute("track")) {
12231                    var tracker = "track" + element.getAttribute("track").charAt(0).toUpperCase() + element.getAttribute("track").slice(1);
12232                    if (typeof api[tracker] === "function") {
12233                        api[tracker]();
12234                    } else {
12235                        api.trackHomepage();
12236                    }
12237                }
12238            };
12239        };
12240
12241        tarteaucitron.addScript(API_URL);
12242    }
12243};
12244
12245// alexa
12246tarteaucitron.services.alexa = {
12247    "key": "alexa",
12248    "type": "analytic",
12249    "name": "Alexa",
12250    "uri": "https://www.alexa.com/help/privacy",
12251    "needConsent": true,
12252    "cookies": ['__asc', '__auc'],
12253    "js": function () {
12254        "use strict";
12255        if (tarteaucitron.user.alexaAccountID === undefined) {
12256            return;
12257        }
12258        window._atrk_opts = {
12259            atrk_acct: tarteaucitron.user.alexaAccountID,
12260            domain: window.location.hostname.match(/[^\.]*\.[^.]*$/)[0],
12261            dynamic: true
12262        };
12263        tarteaucitron.addScript('https://d31qbv1cthcecs.cloudfront.net/atrk.js');
12264    }
12265};
12266
12267// amazon
12268tarteaucitron.services.amazon = {
12269    "key": "amazon",
12270    "type": "ads",
12271    "name": "Amazon",
12272    "uri": "https://www.amazon.com/gp/help/customer/display.html/ref=help_search_1-1?ie=UTF8&nodeId=201909010&qid=1544617177&sr=1-1",
12273    "needConsent": true,
12274    "cookies": [],
12275    "js": function () {
12276        "use strict";
12277        tarteaucitron.fallback(['amazon_product'], function (x) {
12278            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Amazon iframe'),
12279                amazonId = x.getAttribute("amazonid"),
12280                productId = x.getAttribute("productid"),
12281                url = '//ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=' + tarteaucitron.getLanguage().toUpperCase() + '&source=ss&ref=ss_til&ad_type=product_link&tracking_id=' + amazonId + '&marketplace=amazon&region=' + tarteaucitron.getLanguage().toUpperCase() + '&placement=' + productId + '&asins=' + productId + '&show_border=true&link_opens_in_new_window=true',
12282                iframe = '<iframe title="' + frame_title + '" style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" src="' + url + '"></iframe>';
12283
12284            return iframe;
12285        });
12286    },
12287    "fallback": function () {
12288        "use strict";
12289        var id = 'amazon';
12290        tarteaucitron.fallback(['amazon_product'], tarteaucitron.engage(id));
12291    }
12292};
12293
12294// calameo
12295tarteaucitron.services.calameo = {
12296    "key": "calameo",
12297    "type": "video",
12298    "name": "Calameo",
12299    "uri": "https://fr.calameo.com/privacy",
12300    "needConsent": true,
12301    "cookies": [],
12302    "js": function () {
12303        "use strict";
12304        tarteaucitron.fallback(['calameo-canvas'], function (x) {
12305            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Calameo iframe'),
12306                id = x.getAttribute("data-id"),
12307                width = x.getAttribute("width"),
12308                height = x.getAttribute("height"),
12309                url = '//v.calameo.com/?bkcode=' + id,
12310                allowfullscreen = x.getAttribute("allowfullscreen");
12311
12312            return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="no" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
12313        });
12314    },
12315    "fallback": function () {
12316        "use strict";
12317        var id = 'calameo';
12318        tarteaucitron.fallback(['calameo-canvas'], function (elem) {
12319            elem.style.width = elem.getAttribute('width') + 'px';
12320            elem.style.height = elem.getAttribute('height') + 'px';
12321            return tarteaucitron.engage(id);
12322        });
12323    }
12324};
12325
12326// clicky
12327tarteaucitron.services.clicky = {
vendor: 8,642 bytes, lines 12328-12564
12328    "key": "clicky",
12329    "type": "analytic",
12330    "name": "Clicky",
12331    "uri": "https://clicky.com/terms",
12332    "needConsent": true,
12333    "cookies": ['_jsuid', '_eventqueue', '_referrer_og', '_utm_og', '_first_pageview', 'clicky_olark', 'no_trackyy_' + tarteaucitron.user.clickyId, 'unpoco_' + tarteaucitron.user.clickyId, 'heatmaps_g2g_' + tarteaucitron.user.clickyId],
12334    "js": function () {
12335        "use strict";
12336        if (tarteaucitron.user.clickyId === undefined) {
12337            return;
12338        }
12339        tarteaucitron.addScript('//static.getclicky.com/js', '', function () {
12340            if (typeof clicky.init === 'function') {
12341                clicky.init(tarteaucitron.user.clickyId);
12342            }
12343            if (typeof tarteaucitron.user.clickyMore === 'function') {
12344                tarteaucitron.user.clickyMore();
12345            }
12346        });
12347    }
12348};
12349
12350// clicmanager
12351tarteaucitron.services.clicmanager = {
12352    "key": "clicmanager",
12353    "type": "ads",
12354    "name": "Clicmanager",
12355    "uri": "http://www.clicmanager.fr/infos_legales.php",
12356    "needConsent": true,
12357    "cookies": [],
12358    "js": function () {
12359        "use strict";
12360        var uniqIds = [],
12361            i,
12362            uri;
12363
12364        tarteaucitron.fallback(['clicmanager-canvas'], function (x) {
12365            var uniqId = '_' + Math.random().toString(36).substr(2, 9);
12366            uniqIds.push(uniqId);
12367            return '<div id="' + uniqId + '" c="' + x.getAttribute('c') + '" s="' + x.getAttribute('s') + '" t="' + x.getAttribute('t') + '"></div>';
12368        });
12369
12370        for (i = 0; i < uniqIds.length; i += 1) {
12371            uri = '//ads.clicmanager.fr/exe.php?';
12372            uri += 'c=' + document.getElementById(uniqIds[i]).getAttribute('c') + '&';
12373            uri += 's=' + document.getElementById(uniqIds[i]).getAttribute('s') + '&';
12374            uri += 't=' + document.getElementById(uniqIds[i]).getAttribute('t');
12375
12376            tarteaucitron.makeAsync.init(uri, uniqIds[i]);
12377        }
12378    },
12379    "fallback": function () {
12380        "use strict";
12381        var id = 'clicmanager';
12382        tarteaucitron.fallback(['clicmanager-canvas'], tarteaucitron.engage(id));
12383    }
12384};
12385
12386// compteur
12387tarteaucitron.services.compteur = {
12388    "key": "compteur",
12389    "type": "analytic",
12390    "name": "Compteur.fr",
12391    "uri": "https://www.compteur.fr/help_privacy_policy.htm",
12392    "needConsent": true,
12393    "cookies": [],
12394    "js": function () {
12395        "use strict";
12396        if (tarteaucitron.user.compteurID === undefined) {
12397            return;
12398        }
12399        tarteaucitron.addScript('https://server2.compteur.fr/log7.js', '', function () { wtslog7(tarteaucitron.user.compteurID, 1); });
12400    }
12401};
12402
12403// contentsquare
12404tarteaucitron.services.contentsquare = {
12405    "key": "contentsquare",
12406    "type": "api",
12407    "name": "ContentSquare",
12408    "uri": "https://docs.contentsquare.com/uxa-en/#collected-data",
12409    "needConsent": true,
12410    "cookies": ['_cs_id', '_cs_s', '_cs_vars', '_cs_ex', '_cs_c', '_cs_optout'],
12411    "js": function () {
12412        "use strict";
12413        if (tarteaucitron.user.contentsquareID === undefined) {
12414            return;
12415        }
12416        tarteaucitron.addScript('//t.contentsquare.net/uxa/' + tarteaucitron.user.contentsquareID + '.js');
12417    }
12418};
12419
12420// crazyegg
12421tarteaucitron.services.crazyegg = {
12422    "key": "crazyegg",
12423    "type": "analytic",
12424    "name": "Crazy Egg",
12425    "uri": "https://www.crazyegg.com/privacy",
12426    "needConsent": true,
12427    "cookies": [],
12428    "js": function () {
12429        "use strict";
12430
12431        if (tarteaucitron.user.crazyeggId === undefined) {
12432            return;
12433        }
12434
12435        tarteaucitron.addScript('//script.crazyegg.com/pages/scripts/' + tarteaucitron.user.crazyeggId.substr(0, 4) + '/' + tarteaucitron.user.crazyeggId.substr(4, 4) + '.js');
12436    }
12437};
12438
12439// clarity
12440tarteaucitron.services.clarity = {
12441    "key": "clarity",
12442    "type": "analytic",
12443    "name": "Clarity",
12444    "uri": "https://clarity.microsoft.com/",
12445    "needConsent": true,
12446    "cookies": [],
12447    "js": function () {
12448        "use strict";
12449
12450        window["clarity"] = window["clarity"] || function () { (window["clarity"].q = window["clarity"].q || []).push(arguments) };
12451
12452        tarteaucitron.addScript('https://www.clarity.ms/tag/' + tarteaucitron.user.clarity);
12453    }
12454};
12455
12456// criteo
12457tarteaucitron.services.criteo = {
12458    "key": "criteo",
12459    "type": "ads",
12460    "name": "Criteo",
12461    "uri": "http://www.criteo.com/privacy/",
12462    "needConsent": true,
12463    "cookies": [],
12464    "js": function () {
12465        "use strict";
12466        document.MAX_ct0 = '';
12467        var uniqIds = [],
12468            i,
12469            uri;
12470
12471        tarteaucitron.fallback(['criteo-canvas'], function (x) {
12472            var uniqId = '_' + Math.random().toString(36).substr(2, 9);
12473            uniqIds.push(uniqId);
12474            return '<div id="' + uniqId + '" zoneid="' + x.getAttribute('zoneid') + '"></div>';
12475        });
12476
12477        for (i = 0; i < uniqIds.length; i += 1) {
12478            uri = '//cas.criteo.com/delivery/ajs.php?';
12479            uri += 'zoneid=' + document.getElementById(uniqIds[i]).getAttribute('zoneid');
12480            uri += '&nodis=1&cb=' + Math.floor(Math.random() * 99999999999);
12481            uri += '&loc=' + encodeURI(window.location);
12482            uri += (document.MAX_used !== ',') ? '&exclude=' + document.MAX_used : '';
12483            uri += (document.charset !== undefined ? '&charset=' + document.charset : '');
12484            uri += (document.characterSet !== undefined ? '&charset=' + document.characterSet : '');
12485            uri += (document.referrer !== undefined) ? '&referer=' + encodeURI(document.referrer) : '';
12486            uri += (document.context !== undefined) ? '&context=' + encodeURI(document.context) : '';
12487            uri += ((document.MAX_ct0 !== undefined) && (document.MAX_ct0.substring(0, 4) === 'http')) ? '&ct0=' + encodeURI(document.MAX_ct0) : '';
12488            uri += (document.mmm_fo !== undefined) ? '&mmm_fo=1' : '';
12489
12490            tarteaucitron.makeAsync.init(uri, uniqIds[i]);
12491        }
12492    },
12493    "fallback": function () {
12494        "use strict";
12495        var id = 'criteo';
12496        tarteaucitron.fallback(['criteo-canvas'], tarteaucitron.engage(id));
12497    }
12498};
12499
12500// criteo onetag
12501tarteaucitron.services.criteoonetag = {
12502    "key": "criteoonetag",
12503    "type": "ads",
12504    "name": "Criteo OneTag",
12505    "uri": "https://www.criteo.com/privacy/",
12506    "needConsent": true,
12507    "cookies": ['uid', 'tk', 'uid3pd'],
12508    "js": function() {
12509        "use strict";
12510        if (tarteaucitron.user.criteoonetagAccount === undefined) return;
12511
12512        window.criteo_q = window.criteo_q || [];
12513        window.criteo_q.push({
12514            event: "setAccount",
12515            account: tarteaucitron.user.criteoonetagAccount
12516        })
12517
12518        tarteaucitron.addScript('//static.criteo.net/js/ld/ld.js', '', function() {
12519            if (typeof tarteaucitron.user.criteoonetagMore === 'function') {
12520                tarteaucitron.user.criteoonetagMore();
12521            }
12522        });
12523    }
12524};
12525
12526// artetv
12527tarteaucitron.services.artetv = {
12528    "key": "artetv",
12529    "type": "video",
12530    "name": "Arte.tv",
12531    "uri": "https://www.arte.tv/sites/fr/corporate/donnees-personnelles/",
12532    "needConsent": true,
12533    "cookies": [],
12534    "js": function () {
12535        "use strict";
12536        tarteaucitron.fallback(['artetv_player'], function (x) {
12537            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Arte.tv iframe'),
12538                video_json = x.getAttribute("json"),
12539                video_width = x.getAttribute("width"),
12540                video_height = x.getAttribute("height"),
12541                video_frame,
12542                video_allowfullscreen = x.getAttribute("allowfullscreen");
12543
12544            if (video_json === undefined) {
12545                return "";
12546            }
12547
12548            video_frame = '<iframe title="' + frame_title + '" style="transition-duration: 0; transition-property: no; margin: 0 auto; position: relative; display: block; background-color: #000000;" src="https://www.arte.tv/player/v5/index.php?json_url=' + video_json + '" width="' + video_width + '" height="' + video_height + '" scrolling="no" ' + (video_allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
12549            return video_frame;
12550        });
12551    },
12552    "fallback": function () {
12553        "use strict";
12554        var id = 'artetv';
12555        tarteaucitron.fallback(['artetv_player'], function (elem) {
12556            elem.style.width = elem.getAttribute('width') + 'px';
12557            elem.style.height = elem.getAttribute('height') + 'px';
12558            return tarteaucitron.engage(id);
12559        });
12560    }
12561};
12562
12563// dailymotion
12564tarteaucitron.services.dailymotion = {
12565    "key": "dailymotion",
12566    "type": "video",
12567    "name": "Dailymotion",
12568    "uri": "https://www.dailymotion.com/legal/privacy",
12569    "needConsent": true,
12570    "cookies": ['ts', 'dmvk', 'hist', 'v1st', 's_vi'],
12571    "js": function () {
12572        "use strict";
12573        tarteaucitron.fallback(['dailymotion_player'], function (x) {
12574            var frame_title = tarteaucitron.fixSelfXSS(tarteaucitron.getElemAttr(x, "title") || 'Dailymotion iframe'),
12575                video_id = tarteaucitron.getElemAttr(x, "videoID"),
12576                video_width = tarteaucitron.getElemAttr(x, "width"),
12577                frame_width = 'width=',
12578                video_height = tarteaucitron.getElemAttr(x, "height"),
12579                frame_height = 'height=',
12580                video_frame,
12581                embed_type = tarteaucitron.getElemAttr(x, "embedType"),
12582                allowfullscreen = tarteaucitron.getElemAttr(x, "allowfullscreen"),
12583                showinfo = tarteaucitron.getElemAttr(x, "showinfo"),
12584                autoplay = tarteaucitron.getElemAttr(x, "autoplay"),
12585                api = tarteaucitron.getElemAttr(x, "api"),
12586                params = 'info=' + showinfo + '&autoPlay=' + autoplay + '&api=' + api;
12587
12588            if (video_id === undefined) {
12589                return "";
12590            }
12591            if (video_width !== undefined) {
12592                frame_width += '"' + video_width + '" ';
12593            } else {
12594                frame_width += '"" ';
12595            }
12596            if (video_height !== undefined) {
12597                frame_height += '"' + video_height + '" ';
12598            } else {
12599                frame_height += '"" ';
12600            }
12601            if (embed_type === undefined || !['video', 'playlist'].includes(embed_type)) {
12602                embed_type = "video";
12603            }
12604            video_frame = '<iframe title="' + frame_title + '" src="//www.dailymotion.com/embed/' + embed_type + '/' + video_id + '?' + params + '" ' + frame_width + frame_height + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
12605            return video_frame;
12606        });
12607    },
12608    "fallback": function () {
12609        "use strict";
12610        var id = 'dailymotion';
12611        tarteaucitron.fallback(['dailymotion_player'], function (elem) {
12612            elem.style.width = elem.getAttribute('width') + 'px';
12613            elem.style.height = elem.getAttribute('height') + 'px';
12614            return tarteaucitron.engage(id);
12615        });
12616    }
12617};
12618
12619// dating affiliation
12620tarteaucitron.services.datingaffiliation = {
12621    "key": "datingaffiliation",
12622    "type": "ads",
12623    "name": "Dating Affiliation",
12624    "uri": "http://www.dating-affiliation.com/conditions-generales.php",
12625    "needConsent": true,
12626    "cookies": [],
12627    "js": function () {
12628        "use strict";
12629        tarteaucitron.fallback(['datingaffiliation-canvas'], function (x) {
12630            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Dating Affiliation iframe'),
12631                comfrom = x.getAttribute("data-comfrom"),
12632                r = x.getAttribute("data-r"),
12633                p = x.getAttribute("data-p"),
12634                cf0 = x.getAttribute("data-cf0"),
12635                langue = x.getAttribute("data-langue"),
12636                forward_affiliate = x.getAttribute("data-forwardAffiliate"),
12637                cf2 = x.getAttribute("data-cf2"),
12638                cfsa2 = x.getAttribute("data-cfsa2"),
12639                width = x.getAttribute("width"),
12640                height = x.getAttribute("height"),
12641                url = 'http://www.tools-affil2.com/rotaban/ban.php?' + comfrom;
12642
12643            return '<iframe title="' + frame_title + '" src="' + url + '&r=' + r + '&p=' + p + '&cf0=' + cf0 + '&langue=' + langue + '&forward_affiliate=' + forward_affiliate + '&cf2=' + cf2 + '&cfsa2=' + cfsa2 + '" width="' + width + '" height="' + height + '" marginheight="0" marginwidth="0" scrolling="no"></iframe>';
12644        });
12645    },
12646    "fallback": function () {
12647        "use strict";
12648        var id = 'datingaffiliation';
12649        tarteaucitron.fallback(['datingaffiliation-canvas'], function (elem) {
12650            elem.style.width = elem.getAttribute('width') + 'px';
12651            elem.style.height = elem.getAttribute('height') + 'px';
12652            return tarteaucitron.engage(id);
12653        });
12654    }
12655};
12656
12657// dating affiliation popup
12658tarteaucitron.services.datingaffiliationpopup = {
12659    "key": "datingaffiliationpopup",
12660    "type": "ads",
12661    "name": "Dating Affiliation (Pop Up)",
12662    "uri": "http://www.dating-affiliation.com/conditions-generales.php",
12663    "needConsent": true,
12664    "cookies": ['__utma', '__utmb', '__utmc', '__utmt_Tools', '__utmv', '__utmz', '_ga', '_gat', '_gat_UA-65072040-17', '__da-pu-xflirt-ID-pc-o169'],
12665    "js": function () {
12666        "use strict";
12667        var uniqIds = [],
12668            i,
12669            uri;
12670
12671        tarteaucitron.fallback(['datingaffiliationpopup-canvas'], function (x) {
12672            var uniqId = '_' + Math.random().toString(36).substr(2, 9);
12673            uniqIds.push(uniqId);
12674            return '<div id="' + uniqId + '" uri="' + x.getAttribute('uri') + '" comfrom="' + x.getAttribute('comfrom') + '" promo="' + x.getAttribute('promo') + '" productid="' + x.getAttribute('productid') + '" submitconfig="' + x.getAttribute('submitconfig') + '" ur="' + x.getAttribute('ur') + '" brand="' + x.getAttribute('brand') + '" lang="' + x.getAttribute('lang') + '" cf0="' + x.getAttribute('cf0') + '" cf2="' + x.getAttribute('cf2') + '" subid1="' + x.getAttribute('subid1') + '" cfsa2="' + x.getAttribute('cfsa2') + '" subid2="' + x.getAttribute('subid2') + '" nicheid="' + x.getAttribute('nicheid') + '" degreid="' + x.getAttribute('degreid') + '" bt="' + x.getAttribute('bt') + '" vis="' + x.getAttribute('vis') + '" hid="' + x.getAttribute('hid') + '" snd="' + x.getAttribute('snd') + '" aabd="' + x.getAttribute('aabd') + '" aabs="' + x.getAttribute('aabs') + '"></div>';
12675        });
12676
12677        for (i = 0; i < uniqIds.length; i += 1) {
12678            uri = 'http://www.promotools.biz/da/popunder/script.php?';
12679            uri += 'comfrom=' + document.getElementById(uniqIds[i]).getAttribute('comfrom') + '&';
12680            uri += 'promo=' + document.getElementById(uniqIds[i]).getAttribute('promo') + '&';
12681            uri += 'product_id=' + document.getElementById(uniqIds[i]).getAttribute('productid') + '&';
12682            uri += 'submitconfig=' + document.getElementById(uniqIds[i]).getAttribute('submitconfig') + '&';
12683            uri += 'ur=' + document.getElementById(uniqIds[i]).getAttribute('ur') + '&';
12684            uri += 'brand=' + document.getElementById(uniqIds[i]).getAttribute('brand') + '&';
12685            uri += 'lang=' + document.getElementById(uniqIds[i]).getAttribute('lang') + '&';
12686            uri += 'cf0=' + document.getElementById(uniqIds[i]).getAttribute('cf0') + '&';
12687            uri += 'cf2=' + document.getElementById(uniqIds[i]).getAttribute('cf2') + '&';
12688            uri += 'subid1=' + document.getElementById(uniqIds[i]).getAttribute('subid1') + '&';
12689            uri += 'cfsa2=' + document.getElementById(uniqIds[i]).getAttribute('cfsa2') + '&';
12690            uri += 'subid2=' + document.getElementById(uniqIds[i]).getAttribute('subid2') + '&';
12691            uri += 'nicheId=' + document.getElementById(uniqIds[i]).getAttribute('nicheid') + '&';
12692            uri += 'degreId=' + document.getElementById(uniqIds[i]).getAttribute('degreid') + '&';
12693            uri += 'bt=' + document.getElementById(uniqIds[i]).getAttribute('bt') + '&';
12694            uri += 'vis=' + document.getElementById(uniqIds[i]).getAttribute('vis') + '&';
12695            uri += 'hid=' + document.getElementById(uniqIds[i]).getAttribute('hid') + '&';
12696            uri += 'snd=' + document.getElementById(uniqIds[i]).getAttribute('snd') + '&';
12697            uri += 'aabd=' + document.getElementById(uniqIds[i]).getAttribute('aabd') + '&';
12698            uri += 'aabs=' + document.getElementById(uniqIds[i]).getAttribute('aabs');
12699
12700            tarteaucitron.makeAsync.init(uri, uniqIds[i]);
12701        }
12702    },
12703    "fallback": function () {
12704        "use strict";
12705        var id = 'datingaffiliationpopup';
12706        tarteaucitron.fallback(['datingaffiliationpopup-canvas'], tarteaucitron.engage(id));
12707    }
12708};
12709
12710// deezer
12711tarteaucitron.services.deezer = {
12712    "key": "deezer",
12713    "type": "video",
12714    "name": "Deezer",
12715    "uri": "https://www.deezer.com/legal/personal-datas",
12716    "needConsent": true,
12717    "cookies": [],
12718    "js": function () {
12719        "use strict";
12720        tarteaucitron.fallback(['deezer_player'], function (x) {
12721            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Deezer iframe'),
12722                deezer_id = x.getAttribute("deezerID"),
12723                deezer_width = x.getAttribute("width"),
12724                frame_width = 'width=',
12725                deezer_height = x.getAttribute("height"),
12726                frame_height = 'height=',
12727                deezer_frame,
12728                embed_theme = x.getAttribute("theme"),
12729                embed_type = x.getAttribute("embedType"),
12730                radius = x.getAttribute("radius"),
12731                tracklist = x.getAttribute("tracklist"),
12732                allowfullscreen = x.getAttribute("allowfullscreen"),
12733                params;
12734
12735            if (deezer_id === undefined) {
12736                return "";
12737            }
12738            if (deezer_width !== undefined) {
12739                frame_width += '"' + deezer_width + '" ';
12740            } else {
12741                frame_width += '"" ';
12742            }
12743            if (deezer_height !== undefined) {
12744                frame_height += '"' + deezer_height + '" ';
12745            } else {
12746                frame_height += '"" ';
12747            }
12748            if (embed_theme === undefined || !['auto', 'light', 'dark'].includes(embed_theme)) {
12749                embed_theme = "auto";
12750            }
12751            if (embed_type === undefined || !['album', 'track', 'playlist'].includes(embed_type)) {
12752                embed_type = "album";
12753            }
12754            if (radius === undefined || !['true', 'false'].includes(radius)) {
12755                radius = "true";
12756            }
12757            if (tracklist === undefined || !['true', 'false'].includes(tracklist)) {
12758                tracklist = "true";
12759            }
12760            params = 'tracklist=' + tracklist + '&radius=' + radiu
vendor: 26,749 bytes, lines 12760-13532
12760s;
12761            deezer_frame = '<iframe title="' + frame_title + '" src="//widget.deezer.com/widget/' + embed_theme + '/' + embed_type + '/' + deezer_id + '?' + params + '" ' + frame_width + frame_height + ' ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
12762            return deezer_frame;
12763        });
12764    },
12765    "fallback": function () {
12766        "use strict";
12767        var id = 'deezer';
12768        tarteaucitron.fallback(['deezer_player'], function (elem) {
12769            elem.style.width = elem.getAttribute('width') + 'px';
12770            elem.style.height = elem.getAttribute('height') + 'px';
12771            return tarteaucitron.engage(id);
12772        });
12773    }
12774};
12775
12776// leadforensics
12777tarteaucitron.services.leadforensics = {
12778    "key": "leadforensics",
12779    "type": "analytic",
12780    "name": "LeadForensics",
12781    "uri": "https://www.leadforensics.com/privacy-policy/",
12782    "needConsent": true,
12783    "cookies": ['trackalyzer'],
12784    "js": function () {
12785        "use strict";
12786        if (tarteaucitron.user.leadforensicsSf14gv === undefined ||
12787            tarteaucitron.user.leadforensicsIidentifier === undefined) {
12788            return;
12789        }
12790
12791        window.sf14gv = tarteaucitron.user.leadforensicsSf14gv;
12792
12793        (function () {
12794            var sf14g = document.createElement('script'); sf14g.async = true;
12795            sf14g.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 't.sf14g.com/sf14g.js';
12796            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(sf14g, s);
12797        })();
12798
12799        tarteaucitron.addScript('//secure.leadforensics.com/js/' + tarteaucitron.user.leadforensicsIidentifier + '.js');
12800    }
12801};
12802
12803// disqus
12804tarteaucitron.services.disqus = {
12805    "key": "disqus",
12806    "type": "comment",
12807    "name": "Disqus",
12808    "uri": "https://help.disqus.com/customer/portal/articles/466259-privacy-policy",
12809    "needConsent": true,
12810    "cookies": [],
12811    "js": function () {
12812        "use strict";
12813        if (tarteaucitron.user.disqusShortname === undefined) {
12814            return;
12815        }
12816        tarteaucitron.addScript('//' + tarteaucitron.user.disqusShortname + '.disqus.com/embed.js');
12817        tarteaucitron.addScript('//' + tarteaucitron.user.disqusShortname + '.disqus.com/count.js');
12818    },
12819    "fallback": function () {
12820        "use strict";
12821        var id = 'disqus';
12822
12823        if (document.getElementById('disqus_thread')) {
12824            document.getElementById('disqus_thread').innerHTML = tarteaucitron.engage(id);
12825        }
12826    }
12827};
12828
12829// ekomi
12830tarteaucitron.services.ekomi = {
12831    "key": "ekomi",
12832    "type": "social",
12833    "name": "eKomi",
12834    "uri": "http://www.ekomi-us.com/us/privacy/",
12835    "needConsent": true,
12836    "cookies": [],
12837    "js": function () {
12838        "use strict";
12839        if (tarteaucitron.user.ekomiCertId === undefined) {
12840            return;
12841        }
12842        window.eKomiIntegrationConfig = [
12843            { certId: tarteaucitron.user.ekomiCertId }
12844        ];
12845        tarteaucitron.addScript('//connect.ekomi.de/integration_1410173009/' + tarteaucitron.user.ekomiCertId + '.js');
12846    }
12847};
12848
12849// etracker
12850tarteaucitron.services.etracker = {
12851    "key": "etracker",
12852    "type": "analytic",
12853    "name": "eTracker",
12854    "uri": "https://www.etracker.com/en/data-protection.html",
12855    "needConsent": true,
12856    "cookies": [],
12857    "js": function () {
12858        "use strict";
12859        if (tarteaucitron.user.etracker === undefined) {
12860            return;
12861        }
12862
12863        tarteaucitron.addScript('//static.etracker.com/code/e.js', '_etLoader', function () { }, true, "data-secure-code", tarteaucitron.user.etracker);
12864    }
12865};
12866
12867// facebook
12868tarteaucitron.services.facebook = {
12869    "key": "facebook",
12870    "type": "social",
12871    "name": "Facebook",
12872    "uri": "https://www.facebook.com/policy.php",
12873    "needConsent": true,
12874    "cookies": ['xs', 'sb', 'fr', 'datr', 'dpr', 'c_user'],
12875    "js": function () {
12876        "use strict";
12877        tarteaucitron.fallback(['fb-post', 'fb-follow', 'fb-activity', 'fb-send', 'fb-share-button', 'fb-like', 'fb-video'], '');
12878        tarteaucitron.addScript('//connect.facebook.net/' + tarteaucitron.getLocale() + '/sdk.js#xfbml=1&version=v2.0', 'facebook-jssdk');
12879        if (tarteaucitron.isAjax === true) {
12880            if (typeof FB !== "undefined") {
12881                FB.XFBML.parse();
12882            }
12883        }
12884    },
12885    "fallback": function () {
12886        "use strict";
12887        var id = 'facebook';
12888        tarteaucitron.fallback(['fb-post', 'fb-follow', 'fb-activity', 'fb-send', 'fb-share-button', 'fb-like', 'fb-video'], tarteaucitron.engage(id));
12889    }
12890};
12891
12892// facebooklikebox
12893tarteaucitron.services.facebooklikebox = {
12894    "key": "facebooklikebox",
12895    "type": "social",
12896    "name": "Facebook (like box)",
12897    "uri": "https://www.facebook.com/policy.php",
12898    "needConsent": true,
12899    "cookies": [],
12900    "js": function () {
12901        "use strict";
12902        tarteaucitron.fallback(['fb-like-box', 'fb-page'], '');
12903        tarteaucitron.addScript('//connect.facebook.net/' + tarteaucitron.getLocale() + '/sdk.js#xfbml=1&version=v2.3', 'facebook-jssdk');
12904        if (tarteaucitron.isAjax === true) {
12905            if (typeof FB !== "undefined") {
12906                FB.XFBML.parse();
12907            }
12908        }
12909    },
12910    "fallback": function () {
12911        "use strict";
12912        var id = 'facebooklikebox';
12913        tarteaucitron.fallback(['fb-like-box', 'fb-page'], tarteaucitron.engage(id));
12914    }
12915};
12916
12917// facebookcomment
12918tarteaucitron.services.facebookcomment = {
12919    "key": "facebookcomment",
12920    "type": "comment",
12921    "name": "Facebook (commentaire)",
12922    "uri": "https://www.facebook.com/policy.php",
12923    "needConsent": true,
12924    "cookies": [],
12925    "js": function () {
12926        "use strict";
12927        tarteaucitron.fallback(['fb-comments'], '');
12928        tarteaucitron.addScript('//connect.facebook.net/' + tarteaucitron.getLocale() + '/sdk.js#xfbml=1&version=v2.0', 'facebook-jssdk');
12929        if (tarteaucitron.isAjax === true) {
12930            if (typeof FB !== "undefined") {
12931                FB.XFBML.parse();
12932            }
12933        }
12934    },
12935    "fallback": function () {
12936        "use strict";
12937        var id = 'facebookcomment';
12938        tarteaucitron.fallback(['fb-comments'], tarteaucitron.engage(id));
12939    }
12940};
12941
12942// ferank
12943tarteaucitron.services.ferank = {
12944    "key": "ferank",
12945    "type": "analytic",
12946    "name": "FERank",
12947    "uri": "https://www.ferank.fr/respect-vie-privee/#mesureaudience",
12948    "needConsent": false,
12949    "cookies": [],
12950    "js": function () {
12951        "use strict";
12952        tarteaucitron.addScript('//static.ferank.fr/pixel.js', '', function () {
12953            if (typeof tarteaucitron.user.ferankMore === 'function') {
12954                tarteaucitron.user.ferankMore();
12955            }
12956        });
12957    }
12958};
12959
12960// pingdom
12961tarteaucitron.services.pingdom = {
12962    "key": "pingdom",
12963    "type": "api",
12964    "name": "Pingdom",
12965    "uri": "https://www.solarwinds.com/general-data-protection-regulation-cloud",
12966    "needConsent": true,
12967    "cookies": [],
12968    "js": function () {
12969        "use strict";
12970
12971        if (tarteaucitron.user.pingdomId === undefined) {
12972            return;
12973        }
12974
12975        window._prum = [['id', tarteaucitron.user.pingdomId], ['mark', 'firstbyte', (new Date()).getTime()]];
12976
12977        tarteaucitron.addScript('https://rum-static.pingdom.net/prum.min.js');
12978    }
12979};
12980
12981
12982// simpleanalytics
12983tarteaucitron.services.simpleanalytics = {
12984    "key": "simpleanalytics",
12985    "type": "analytic",
12986    "name": "Simple Analytics",
12987    "uri": "https://docs.simpleanalytics.com/what-we-collect",
12988    "needConsent": false,
12989    "cookies": [],
12990    "js": function () {
12991        "use strict";
12992        tarteaucitron.addScript('https://scripts.simpleanalyticscdn.com/latest.js');
12993    }
12994};
12995
12996// stonly
12997tarteaucitron.services.stonly = {
12998    "key": "stonly",
12999    "type": "api",
13000    "name": "Stonly",
13001    "uri": "https://stonly.com/privacy",
13002    "needConsent": true,
13003    "cookies": [],
13004    "js": function () {
13005        "use strict";
13006        if (tarteaucitron.user.stonlyId === undefined) {
13007            return;
13008        }
13009
13010        window.STONLY_WID = tarteaucitron.user.stonlyId;
13011        window.StonlyWidget || ((window.w = window.StonlyWidget = function () {
13012            window.w._api ? window.w._api.apply(window.w, arguments) : window.w.queue.push(arguments)
13013        }).queue = []);
13014
13015        tarteaucitron.addScript('https://stonly.com/js/widget/v2/stonly-widget.js?v=' + Date.now());
13016    }
13017};
13018
13019// stripe
13020/*tarteaucitron.services.stripe = {
13021    "key": "stripe",
13022    "type": "api",
13023    "name": "Stripe",
13024    "uri": "https://stripe.com/cookies-policy/legal",
13025    "needConsent": true,
13026    "cookies": [],
13027    "js": function () {
13028        "use strict";
13029        tarteaucitron.addScript('https://js.stripe.com/v3/');
13030    }
13031};*/
13032
13033// ferank pub
13034tarteaucitron.services.ferankpub = {
13035    "key": "ferankpub",
13036    "type": "ads",
13037    "name": "FERank (pub)",
13038    "uri": "https://www.ferank.fr/respect-vie-privee/#regiepublicitaire",
13039    "needConsent": false,
13040    "cookies": [],
13041    "js": function () {
13042        "use strict";
13043        tarteaucitron.addScript('//static.ferank.fr/publicite.async.js');
13044        if (tarteaucitron.isAjax === true) {
13045            if (typeof ferankReady === 'function') {
13046                ferankReady();
13047            }
13048        }
13049    },
13050    "fallback": function () {
13051        "use strict";
13052        var id = 'ferankpub';
13053        tarteaucitron.fallback(['ferank-publicite'], tarteaucitron.engage(id));
13054    }
13055};
13056
13057// get+
13058tarteaucitron.services.getplus = {
13059    "key": "getplus",
13060    "type": "analytic",
13061    "name": "Get+",
13062    "uri": "http://www.getplus.fr/Conditions-generales-de-vente_a226.html",
13063    "needConsent": true,
13064    "cookies": ['_first_pageview', '_jsuid', 'no_trackyy_' + tarteaucitron.user.getplusId, '_eventqueue'],
13065    "js": function () {
13066        "use strict";
13067        if (tarteaucitron.user.getplusId === undefined) {
13068            return;
13069        }
13070
13071        window.webleads_site_ids = window.webleads_site_ids || [];
13072        window.webleads_site_ids.push(tarteaucitron.user.getplusId);
13073        tarteaucitron.addScript('//stats.webleads-tracker.com/js');
13074    }
13075};
13076
13077// google+
13078tarteaucitron.services.gplus = {
13079    "key": "gplus",
13080    "type": "social",
13081    "name": "Google+",
13082    "uri": "https://policies.google.com/privacy",
13083    "needConsent": true,
13084    "cookies": [],
13085    "js": function () {
13086        "use strict";
13087        tarteaucitron.addScript('https://apis.google.com/js/platform.js');
13088    },
13089    "fallback": function () {
13090        "use strict";
13091        var id = 'gplus';
13092        tarteaucitron.fallback(['g-plus', 'g-plusone'], tarteaucitron.engage(id));
13093    }
13094};
13095
13096// google+ badge
13097tarteaucitron.services.gplusbadge = {
13098    "key": "gplusbadge",
13099    "type": "social",
13100    "name": "Google+ (badge)",
13101    "uri": "https://policies.google.com/privacy",
13102    "needConsent": true,
13103    "cookies": [],
13104    "js": function () {
13105        "use strict";
13106        tarteaucitron.addScript('https://apis.google.com/js/platform.js');
13107    },
13108    "fallback": function () {
13109        "use strict";
13110        var id = 'gplusbadge';
13111        tarteaucitron.fallback(['g-page', 'g-person'], tarteaucitron.engage(id));
13112    }
13113};
13114
13115// google adsense
13116tarteaucitron.services.adsense = {
13117    "key": "adsense",
13118    "type": "ads",
13119    "name": "Google Adsense",
13120    "uri": "https://adssettings.google.com/",
13121    "needConsent": true,
13122    "readmoreLink": "https://policies.google.com/technologies/partner-sites",
13123    "cookies": ['__gads'],
13124    "js": function () {
13125        "use strict";
13126        tarteaucitron.fallback(['adsbygoogle'], '');
13127        tarteaucitron.addScript('https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js');
13128    },
13129    "fallback": function () {
13130        "use strict";
13131        var id = 'adsense';
13132        tarteaucitron.fallback(['adsbygoogle'], tarteaucitron.engage(id));
13133    }
13134};
13135
13136
13137// google adsense automatic
13138tarteaucitron.services.adsenseauto = {
13139    "key": "adsenseauto",
13140    "type": "ads",
13141    "name": "Google Adsense Automatic",
13142    "uri": "https://adssettings.google.com/",
13143    "needConsent": true,
13144    "readmoreLink": "https://policies.google.com/technologies/partner-sites",
13145    "cookies": ['__gads'],
13146    "js": function () {
13147        "use strict";
13148
13149        if (tarteaucitron.user.adsensecapub === undefined) {
13150            return;
13151        }
13152        tarteaucitron.addScript('https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=' + tarteaucitron.user.adsensecapub, '', '', '', 'crossorigin', 'anonymous');
13153    }
13154};
13155
13156// Google Adsense Search
13157tarteaucitron.services.adsensesearch = {
13158    "key": "adsensesearch",
13159    "type": "ads",
13160    "name": "Google Adsense Search",
13161    "uri": "https://adssettings.google.com/",
13162    "needConsent": true,
13163    "readmoreLink": "https://policies.google.com/technologies/partner-sites",
13164    "cookies": ['__gads'],
13165    "js": function () {
13166        "use strict";
13167        tarteaucitron.addScript('https://www.google.com/adsense/search/ads.js');
13168    },
13169    "fallback": function () {
13170        "use strict";
13171        var id = 'adsensesearch';
13172        tarteaucitron.fallback(['afscontainer1'], tarteaucitron.engage(id));
13173    }
13174};
13175
13176// google partners badge
13177tarteaucitron.services.googlepartners = {
13178    "key": "googlepartners",
13179    "type": "ads",
13180    "name": "Google Partners Badge",
13181    "uri": "https://adssettings.google.com/",
13182    "needConsent": true,
13183    "cookies": [],
13184    "js": function () {
13185        "use strict";
13186        tarteaucitron.addScript('https://apis.google.com/js/platform.js');
13187    },
13188    "fallback": function () {
13189        "use strict";
13190        var id = 'googlepartners';
13191        tarteaucitron.fallback(['g-partnersbadge'], tarteaucitron.engage(id));
13192    }
13193};
13194
13195// google adsense search (form)
13196tarteaucitron.services.adsensesearchform = {
13197    "key": "adsensesearchform",
13198    "type": "ads",
13199    "name": "Google Adsense Search (form)",
13200    "uri": "https://adssettings.google.com/",
13201    "needConsent": true,
13202    "cookies": [],
13203    "js": function () {
13204        "use strict";
13205        tarteaucitron.addScript('//www.google.com/coop/cse/brand?form=cse-search-box&lang=' + tarteaucitron.getLanguage());
13206    }
13207};
13208
13209// google adsense search (result)
13210tarteaucitron.services.adsensesearchresult = {
13211    "key": "adsensesearchresult",
13212    "type": "ads",
13213    "name": "Google Adsense Search (result)",
13214    "uri": "https://adssettings.google.com/",
13215    "needConsent": true,
13216    "cookies": [],
13217    "js": function () {
13218        "use strict";
13219        if (tarteaucitron.user.adsensesearchresultCx === undefined) {
13220            return;
13221        }
13222        tarteaucitron.addScript('//www.google.com/cse/cse.js?cx=' + tarteaucitron.user.adsensesearchresultCx);
13223    },
13224    "fallback": function () {
13225        "use strict";
13226        var id = 'adsensesearchresult';
13227
13228        if (document.getElementById('gcse_searchresults')) {
13229            document.getElementById('gcse_searchresults').innerHTML = tarteaucitron.engage(id);
13230        }
13231    }
13232};
13233
13234// googleadwordsconversion
13235tarteaucitron.services.googleadwordsconversion = {
13236    "key": "googleadwordsconversion",
13237    "type": "ads",
13238    "name": "Google Adwords (conversion)",
13239    "uri": "https://www.google.com/settings/ads",
13240    "needConsent": true,
13241    "cookies": [],
13242    "js": function () {
13243        "use strict";
13244        if (tarteaucitron.user.adwordsconversionId === undefined) {
13245            return;
13246        }
13247
13248        tarteaucitron.addScript('//www.googleadservices.com/pagead/conversion_async.js', '', function () {
13249            window.google_trackConversion({
13250                google_conversion_id: tarteaucitron.user.adwordsconversionId,
13251                google_conversion_label: tarteaucitron.user.adwordsconversionLabel,
13252                google_conversion_language: tarteaucitron.user.adwordsconversionLanguage,
13253                google_conversion_format: tarteaucitron.user.adwordsconversionFormat,
13254                google_conversion_color: tarteaucitron.user.adwordsconversionColor,
13255                google_conversion_value: tarteaucitron.user.adwordsconversionValue,
13256                google_conversion_currency: tarteaucitron.user.adwordsconversionCurrency,
13257                google_custom_params: {
13258                    parameter1: tarteaucitron.user.adwordsconversionCustom1,
13259                    parameter2: tarteaucitron.user.adwordsconversionCustom2
13260                }
13261            });
13262        });
13263    }
13264};
13265
13266// googleadwordsremarketing
13267tarteaucitron.services.googleadwordsremarketing = {
13268    "key": "googleadwordsremarketing",
13269    "type": "ads",
13270    "name": "Google Adwords (remarketing)",
13271    "uri": "https://www.google.com/settings/ads",
13272    "needConsent": true,
13273    "cookies": [],
13274    "js": function () {
13275        "use strict";
13276        if (tarteaucitron.user.adwordsremarketingId === undefined) {
13277            return;
13278        }
13279
13280        tarteaucitron.addScript('//www.googleadservices.com/pagead/conversion_async.js', '', function () {
13281            window.google_trackConversion({
13282                google_conversion_id: tarteaucitron.user.adwordsremarketingId,
13283                google_remarketing_only: true
13284            });
13285        });
13286    }
13287};
13288
13289// google analytics (old)
13290tarteaucitron.services.gajs = {
13291    "key": "gajs",
13292    "type": "analytic",
13293    "name": "Google Analytics (ga.js)",
13294    "uri": "https://policies.google.com/privacy",
13295    "needConsent": true,
13296    "cookies": (function () {
13297        var googleIdentifier = tarteaucitron.user.gajsUa,
13298            tagUaCookie = '_gat_gtag_' + googleIdentifier,
13299            tagGCookie = '_ga_' + googleIdentifier;
13300
13301        tagUaCookie = tagUaCookie.replace(/-/g, '_');
13302        tagGCookie = tagGCookie.replace(/G-/g, '');
13303
13304        return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au'];
13305    })(),
13306    "js": function () {
13307        "use strict";
13308        window._gaq = window._gaq || [];
13309        window._gaq.push(['_setAccount', tarteaucitron.user.gajsUa]);
13310        if (timeExpire !== undefined) {
13311            _gaq.push(['_setVisitorCookieTimeout', timeExpire]);
13312        }
13313
13314        if (tarteaucitron.user.gajsAnonymizeIp) {
13315            window._gaq.push(['_gat._anonymizeIp']);
13316        }
13317
13318        if (tarteaucitron.user.gajsPageView) {
13319            window._gaq.push(['_trackPageview, ' + tarteaucitron.user.gajsPageView]);
13320        } else {
13321            window._gaq.push(['_trackPageview']);
13322        }
13323
13324        tarteaucitron.addScript('//www.google-analytics.com/ga.js', '', function () {
13325            if (typeof tarteaucitron.user.gajsMore === 'function') {
13326                tarteaucitron.user.gajsMore();
13327            }
13328        });
13329    }
13330};
13331
13332// google analytics
13333tarteaucitron.services.analytics = {
13334    "key": "analytics",
13335    "type": "analytic",
13336    "name": "Google Analytics (universal)",
13337    "uri": "https://policies.google.com/privacy",
13338    "needConsent": true,
13339    "cookies": (function () {
13340        var googleIdentifier = tarteaucitron.user.analyticsUa,
13341            tagUaCookie = '_gat_gtag_' + googleIdentifier,
13342            tagGCookie = '_ga_' + googleIdentifier;
13343
13344        tagUaCookie = tagUaCookie.replace(/-/g, '_');
13345        tagGCookie = tagGCookie.replace(/G-/g, '');
13346
13347        return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au'];
13348    })(),
13349    "js": function () {
13350        "use strict";
13351        window.GoogleAnalyticsObject = 'ga';
13352        window.ga = window.ga || function () {
13353            window.ga.q = window.ga.q || [];
13354            window.ga.q.push(arguments);
13355        };
13356        window.ga.l = new Date();
13357        tarteaucitron.addScript('https://www.google-analytics.com/analytics.js', '', function () {
13358            var uaCreate = { 'cookieExpires': (timeExpire !== undefined) ? timeExpire : 34128000 };
13359            tarteaucitron.extend(uaCreate, tarteaucitron.user.analyticsUaCreate || {});
13360            ga('create', tarteaucitron.user.analyticsUa, uaCreate);
13361
13362            if (tarteaucitron.user.analyticsAnonymizeIp) {
13363                ga('set', 'anonymizeIp', true);
13364            }
13365
13366            if (typeof tarteaucitron.user.analyticsPrepare === 'function') {
13367                tarteaucitron.user.analyticsPrepare();
13368            }
13369
13370            if (tarteaucitron.user.analyticsPageView) {
13371                ga('send', 'pageview', tarteaucitron.user.analyticsPageView);
13372            } else {
13373                ga('send', 'pageview');
13374            }
13375
13376            if (typeof tarteaucitron.user.analyticsMore === 'function') {
13377                tarteaucitron.user.analyticsMore();
13378            }
13379        });
13380    }
13381};
13382
13383// google ads
13384tarteaucitron.services.googleads = {
13385    "key": "googleads",
13386    "type": "ads",
13387    "name": "Google Ads",
13388    "uri": "https://policies.google.com/privacy",
13389    "needConsent": true,
13390    "cookies": (function () {
13391        var googleIdentifier = tarteaucitron.user.googleadsId,
13392            tagUaCookie = '_gat_gtag_' + googleIdentifier,
13393            tagGCookie = '_ga_' + googleIdentifier;
13394
13395        tagUaCookie = tagUaCookie.replace(/-/g, '_');
13396        tagGCookie = tagGCookie.replace(/G-/g, '');
13397
13398        return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au'];
13399    })(),
13400    "js": function () {
13401        "use strict";
13402        window.dataLayer = window.dataLayer || [];
13403        tarteaucitron.addScript('https://www.googletagmanager.com/gtag/js?id=' + tarteaucitron.user.googleadsId, '', function () {
13404            window.gtag = function gtag() { dataLayer.push(arguments); }
13405            gtag('js', new Date());
13406            var additional_config_info = (timeExpire !== undefined) ? {'anonymize_ip': true, 'cookie_expires': timeExpire / 1000} : {'anonymize_ip': true};
13407
13408            gtag('config', tarteaucitron.user.googleadsId, additional_config_info);
13409
13410            if (typeof tarteaucitron.user.googleadsMore === 'function') {
13411                tarteaucitron.user.googleadsMore();
13412            }
13413        });
13414    }
13415};
13416
13417// google analytics
13418tarteaucitron.services.gtag = {
13419    "key": "gtag",
13420    "type": "analytic",
13421    "name": "Google Analytics (GA4)",
13422    "uri": "https://policies.google.com/privacy",
13423    "needConsent": true,
13424    "cookies": (function () {
13425        var googleIdentifier = tarteaucitron.user.gtagUa,
13426            tagUaCookie = '_gat_gtag_' + googleIdentifier,
13427            tagGCookie = '_ga_' + googleIdentifier;
13428
13429        tagUaCookie = tagUaCookie.replace(/-/g, '_');
13430        tagGCookie = tagGCookie.replace(/G-/g, '');
13431
13432        return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au'];
13433    })(),
13434    "js": function () {
13435        "use strict";
13436        window.dataLayer = window.dataLayer || [];
13437        tarteaucitron.addScript('https://www.googletagmanager.com/gtag/js?id=' + tarteaucitron.user.gtagUa, '', function () {
13438            window.gtag = function gtag() { dataLayer.push(arguments); }
13439            gtag('js', new Date());
13440            var additional_config_info = (timeExpire !== undefined) ? {'anonymize_ip': true, 'cookie_expires': timeExpire / 1000} : {'anonymize_ip': true};
13441
13442            if (tarteaucitron.user.gtagCrossdomain) {
13443                /**
13444                 * https://support.google.com/analytics/answer/7476333?hl=en
13445                 * https://developers.google.com/analytics/devguides/collection/gtagjs/cross-domain
13446                 */
13447                gtag('config', tarteaucitron.user.gtagUa, additional_config_info, { linker: { domains: tarteaucitron.user.gtagCrossdomain, } });
13448            } else {
13449                gtag('config', tarteaucitron.user.gtagUa, additional_config_info);
13450            }
13451
13452            if (typeof tarteaucitron.user.gtagMore === 'function') {
13453                tarteaucitron.user.gtagMore();
13454            }
13455        });
13456    }
13457};
13458
13459tarteaucitron.services.firebase = {
13460    "key": "firebase",
13461    "type": "analytic",
13462    "name": "Firebase",
13463    "uri": "https://firebase.google.com/support/privacy",
13464    "needConsent": true,
13465    "cookies": (function () {
13466        var googleIdentifier = tarteaucitron.user.firebaseMeasurementId,
13467            tagGCookie = '_ga_' + googleIdentifier;
13468
13469        tagGCookie = tagGCookie.replace(/G-/g, '');
13470
13471        return ['_ga', tagGCookie];
13472    })(),
13473    "js": function () {
13474        "use strict";
13475
13476        if (tarteaucitron.user.firebaseApiKey === undefined) {
13477            return;
13478        }
13479
13480        tarteaucitron.addScript('https://www.gstatic.com/firebasejs/8.6.2/firebase-app.js', '', function () {
13481            tarteaucitron.addScript('https://www.gstatic.com/firebasejs/8.6.2/firebase-analytics.js', '', function () {
13482
13483                var firebaseConfig = {
13484                    apiKey: tarteaucitron.user.firebaseApiKey,
13485                    authDomain: tarteaucitron.user.firebaseAuthDomain,
13486                    databaseURL: tarteaucitron.user.firebaseDatabaseUrl,
13487                    projectId: tarteaucitron.user.firebaseProjectId,
13488                    storageBucket: tarteaucitron.user.firebaseStorageBucket,
13489                    appId: tarteaucitron.user.firebaseAppId,
13490                    measurementId: tarteaucitron.user.firebaseMeasurementId,
13491                };
13492                firebase.initializeApp(firebaseConfig);
13493                firebase.analytics();
13494            });
13495        });
13496    }
13497};
13498
13499// genially
13500tarteaucitron.services.genially = {
13501    "key": "genially",
13502    "type": "api",
13503    "name": "genially",
13504    "uri": "https://www.genial.ly/cookies",
13505    "needConsent": true,
13506    "cookies": ['_gat', '_ga', '_gid'],
13507    "js": function () {
13508        "use strict";
13509
13510        tarteaucitron.fallback(['tac_genially'], function (x) {
13511            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'genially iframe'),
13512                width = x.getAttribute("width"),
13513                height = x.getAttribute("height"),
13514                geniallyid = x.getAttribute("geniallyid"),
13515                allowfullscreen = x.getAttribute("allowfullscreen");
13516
13517            return '<div style="position: relative; padding-bottom: 109.00%; padding-top: 0; height: 0;"><iframe style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" title="' + frame_title + '" src="https://view.genial.ly/' + geniallyid + '" width="' + width + '" height="' + height + '" scrolling="auto" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe></div>';
13518        });
13519    },
13520    "fallback": function () {
13521        "use strict";
13522        var id = 'genially';
13523        tarteaucitron.fallback(['tac_genially'], function (elem) {
13524            elem.style.width = elem.getAttribute('width') + 'px';
13525            elem.style.height = elem.getAttribute('height') + 'px';
13526            return tarteaucitron.engage(id);
13527        });
13528    }
13529};
13530
13531// google maps
13532tarteaucitron.services.googlemaps = {
13533    "key": "googlemaps",
13534    "type": "api",
13535    "name": "Google Maps",
13536    "uri": "https://policies.google.com/privacy",
13537    "needConsent": true,
13538    "cookies": [],
13539    "js": function () {
13540        "use strict";
13541        var mapOptions,
13542            map,
13543            uniqIds = [],
13544            i;
13545
13546        if (tarteaucitron.user.mapscallback === undefined) {
13547            tarteaucitron.user.mapscallback = 'tac_googlemaps_callback';
13548        }
13549
13550        // Add Google Maps libraries if any (https://developers.google.com/maps/documentation/javascript/libraries)
13551        var googleMapsLibraries = '';
13552        if (tarteaucitron.user.googlemapsLibraries) {
13553            googleMapsLibraries = '&libraries=' + tarteaucitron.user.googlemapsLibraries;
13554        }
13555
13556        tarteaucitron.addScript('//maps.googleapis.com/maps/api/js?v=3.exp&key=' + tarteaucitron.user.googlemapsKey + '&callback=' + tarteaucitron.user.mapscallback + googleMapsLibraries);
13557
13558        window.tac_googlemaps_callback = function () {
13559            tarteaucitron.fallback(['googlemaps-canvas'], function (x) {
13560                var uniqId = '_' + Math.random().toString(36).substr(2, 9);
13561                uniqIds.push(uniqId);
13562                return '<div id="' + uniqId + '" zoom="' + x.getAttribute('zoom') + '" latitude="' + x.getAttribute('latitude') + '" longitude="' + x.getAttribute('longitude') + '" style="width:' + x.offsetWidth + 'px;height:' + x.offsetHeight + 'px"></div>';
13563            });
13564
13565            var i;
13566            for (i = 0; i < uniqIds.length; i += 1) {
13567                mapOptions = {
13568                    zoom: parseInt(document.getElementById(uniqIds[i]).getAttribute('zoom'), 10),
13569                    center: new google.maps.LatLng(parseFloat(document.getElementById(uniqIds[i]).getAttribute('latitude'), 10), parseFloat(document.getElementById(uniqIds[i]).getAttribute('longitude'), 10))
13570                };
13571                map = new google.maps.Map(document.getElementById(uniqIds[i]), mapOptions);
13572                new google.maps.Marker({ position: { lat: parseFloat(document.getElementById(uniqIds[i]).getAttribute('latitude'), 10), lng: parseFloat(document.getElementById(uniqIds[i]).getAttribute('longitude'), 10) }, map: map });
13573            }
13574        };
13575    },
13576    "fallback": function () {
13577        "use strict";
13578        var id = 'googlemaps';
13579        tarteaucitron.fallback(['googlemaps-canvas'], tarteaucitron.engage(id));
13580    }
13581};
13582
13583// googlemaps search
13584tarteaucitron.services.googlemapssearch = {
13585    "key": "googlemapssearch",
13586    "type": "api",
13587    "name": "Google Maps Search API",
13588    "uri": "https://policies.google.com/privacy",
13589    "needConsent": true,
13590    "cookies": ['nid'],
13591    "js": function () {
13592        "use strict";
13593        tarteaucitron.fallback(['googlemapssearch'], function (x) {
13594            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Google search iframe'),
13595                width = x.getAttribute("width"),
13596                height = x.getAttribute("height"),
13597                // url = x.getAttribute("data-url");
13598                query = escape(x.getAttribute("data-search")),
13599                key = x.getAttribute("data-api-key");
13600
13601            return '<iframe title="' + frame_title + '" width="' + width + '" height="' + height + '" style="border:0" src="https://www.google.com/maps/embed/v1/place?q=' + query + '&key=' + key + '" allowfullscreen></iframe> '
13602        });
13603    },
13604    "fallback": function () {
13605        "use strict";
13606        var id = 'googlemapssearch';
13607        tarteaucitron.fallback(['googlemapssearch'], function (elem) {
13608            elem.style.width = elem.getAttribute('width') + 'px';
13609            elem.style.height = elem.getAttribute('height') + 'px';
13610            return tarteaucitron.engage(id);
13611        });
13612    }
13613};
13614
13615// googlemaps embed iframe
13616tarteaucitron.services.googlemapsembed = {
13617    "key": "googlemapsembed",
13618    "type": "api",
13619    "name": "Google Maps Embed",
13620    "uri": "https://policies.google.com/privacy",
13621    "needConsent": true,
13622    "cookies": ['apisid', 'hsid', 'nid', 'sapisid', 'sid', 'sidcc', 'ssid', '1p_jar'],
13623    "js": function () {
13624        "use strict";
13625        tarteaucitron.fallback(['googlemapsembed'], function (x) {
13626            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Google maps iframe'),
13627                width = tarteaucitron.getElemWidth(x),
13628                height = tarteaucitron.getElemHeight(x),
13629                url = x.getAttribute("data-url");
13630
13631            return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="no" allowtransparency allowfullscreen></iframe>';
13632        });
13633    },
13634    "fallback": function () {
13635        "use strict";
13636        var id = 'googlemapsembed';
13637        tarteaucitron.fallback(['googlemapsembed'], function (elem) {
13638            elem.style.width = tarteaucitron.getElemWidth(elem) + 'px';
13639            elem.style.height = tarteaucitron.getElemHeight(elem) + 'px';
13640            return tarteaucitron.engage(id);
13641        });
13642    }
13643};
13644
13645
13646// openstreetmap embed iframe
13647tarteaucitron.services.openstreetmap = {
13648    "key": "openstreetmap",
13649    "type": "api",
13650    "name": "Openstreetmap Embed",
13651    "uri": "https://wiki.osmfoundation.org/wiki/Privacy_Policy#Cookies",
13652    "needConsent": true,
13653    "cookies": ['apisid', 'hsid', 'nid', 'sapisid', 'sid', 'sidcc', 'ssid', '1p_jar'],
13654    "js": function () {
13655        "use strict";
13656        tarteaucitron.fallback(['openstreetmap'], function (x) {
13657            var width = tarteaucitron.getElemWidth(x),
13658                height = tarteaucitron.getElemHeight(x),
13659                url = x.getAttribute("data-url");
13660
13661            return '<iframe src="' + url + '" width="' + width + '" height="' + height + '" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" allowfullscreen></iframe>';
13662        });
13663    },
13664    "fallback": function () {
13665        "use strict";
13666        var id = 'openstreetmap';
13667        tarteaucitron.fallback(['openstreetmap'], function (elem) {
13668            elem.style.width = tarteaucitron.getElemWidth(elem) + 'px';
13669            elem.style.height = tarteaucitron.getElemHeight(elem) + 'px';
13670            return tarteaucitron.engage(id);
13671        });
13672    }
13673};
13674
13675// geoportail embed iframe
13676tarteaucitron.services.geoportail = {
13677    "key": "geoportail",
13678    "type": "api",
13679    "name": "Geoportail maps Embed",
13680    "uri": "https://www.ign.fr/institut/gestion-des-cookies",
13681    "needConsent": true,
13682    "cookies": ['apisid', 'hsid', 'nid', 'sapisid', 'sid', 'sidcc', 'ssid', '1p_jar'],
13683    "js": function () {
13684        "use strict";
13685        tarteaucitron.fallback(['geoportail'], function (x) {
13686            var width = tarteaucitron.getElemWidth(x),
13687                height = tarteaucitron.getElemHeight(x),
13688                url = x.getAttribute("data-url");
13689
13690            return '<iframe src="' + url + '" width="' + width + '" height="' + height + '" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" sandbox="allow-forms allow-scripts allow-same-origin" allowfullscreen></iframe>';
13691        });
13692    },
13693    "fallback": function () {
13694        "use strict";
13695        var id = 'geoportail';
13696        tarteaucitron.fallback(['geoportail'], function (elem) {
13697            elem.style.width = tarteaucitron.getElemWidth(elem) + 'px';
13698            elem.style.height = tarteaucitron.getElemHeight(elem) + 'px';
13699            return tarteaucitron.engage(id);
13700        });
13701    }
13702};
13703
13704
13705// google tag manager
13706tarteaucitron.services.googletagmanager = {
13707    "key": "googletagmanager",
13708    "type": "api",
13709    "name": "Google Tag Manager",
13710    "uri": "https://policies.google.com/privacy",
13711    "needConsent": true,
13712    "cookies": ['_ga', '_gat', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '__gads', '_drt_', 'FLC', 'exchange_uid', 'id', 'fc', 'rrs', 'rds', 'rv', 'uid', 'UIDR', 'UID', 'clid', 'ipinfo', 'acs'],
13713    "js": function () {
13714        "use strict";
13715        if (tarteaucitron.user.googletagmanagerId === undefined) {
13716            return;
13717        }
13718        window.dataLayer = window.dataLayer || [];
13719        window.dataLayer.push({
13720            'gtm.start': new Date().getTime(),
13721            event: 'gtm.js'
13722        });
13723        tarteaucitron.addScript('https://www.googletagmanager.com/gtm.js?id=' + tarteaucitron.user.googletagmanagerId);
13724    }
13725};
13726
13727// google tag manager multiple
13728tarteaucitron.services.multiplegoogletagmanager = {
13729    "key": "multiplegoogletagmanager",
13730    "type": "api",
13731    "name": "Google Tag Manager",
13732    "uri": "https://policies.google.com/privacy",
13733    "needConsent": true,
13734    "cookies": ['_ga', '_gat', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '__gads', '_drt_', 'FLC', 'exchange_uid', 'id', 'fc', 'rrs', 'rds', 'rv', 'uid', 'UIDR', 'UID', 'clid', 'ipinfo', 'acs'],
13735    "js": function () {
13736        "use strict";
13737        if (tarteaucitron.user.multiplegoogletagmanagerId === undefined) {
13738            return;
13739        }
13740        window.dataLayer = window.dataLayer || [];
13741        window.dataLayer.push({
13742            'gtm.start': new Date().getTime(),
13743            event: 'gtm.js'
13744        });
13745
13746        tarteaucitron.user.multiplegoogletagmanagerId.forEach(function (id) {
13747            tarteaucitron.addScript('https://www.googletagmanager.com/gtm.js?id=' + id);
13748        });
13749
13750    }
13751};
13752
13753// google webfonts
13754tarteaucitron.services.googlefonts = {
13755    "key": "googlefonts",
13756    "type": "api",
13757    "name": "Google Webfonts",
13758    "uri": "https://policies.google.com/privacy",
13759    "needConsent": true,
13760    "cookies": [],
13761    "js": function () {
13762        "use strict";
13763        if (tarteaucitron.user.googleFonts === undefined) {
13764            return;
13765        }
13766        tarteaucitron.addScript('//ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js', '', function () {
13767            WebFont.load({
13768                google: {
13769                    families: tarteaucitron.user.googleFonts
13770                }
13771            });
13772        });
13773    }
13774};
13775
13776// hubspot
13777tarteaucitron.services.hubspot = {
13778    "key": "hubspot",
13779    "type": "analytic",
13780    "name": "Hubspot",
13781    "uri": "https://legal.hubspot.com/privacy-policy",
13782    "needConsent": true,
13783    "cookies": ['hubspotutk', 'fr', '__hstc', '__hssrc', '__hssc', '__cfduid'],
13784    "js": function () {
13785        "use strict";
13786        tarteaucitron.addScript('//js.hs-scripts.com/' + tarteaucitron.user.hubspotId + '.js', 'hs-script-loader');
13787    }
13788};
13789
13790// instagram
13791tarteaucitron.services.instagram = {
13792    "key": "instagram",
13793    "type": "social",
13794    "name": "Instagram",
13795    "uri": "https://www.instagram.com/legal/privacy/",
13796    "needConsent": true,
13797    "cookies": ['shbts', 'sessionid', 'csrftoken', 'rur', 'shbid', 'mid', 'ds_usr_id', 'ig_did', 'ig_cb', 'datr'],
13798    "js": function () {
13799        "use strict";
13800        tarteaucitron.fallback(['instagram_post'], function (x) {
13801            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Instagram iframe'),
13802                post_id = x.getAttribute('postId'),
13803                post_permalink = x.getAttribute('data-instgrm-permalink'),
13804                embed_width = x.getAttribute('width'),
13805                embed_height = x.getAttribute('height'),
13806                frame_width,
13807                frame_height,
13808                post_frame;
13809
13810            if (post_permalink != null) {
13811                tarteaucitron.addScript('//www.instagram.com/embed.js', 'instagram-embed');
13812
13813                return '';
13814            }
13815
13816            if (post_id === undefined) {
13817                return "";
13818            }
13819
13820            if (embed_width !== undefined) {
13821                frame_width = 'width="' + embed_width + '" ';
13822            } else {
13823                frame_width = '"" ';
13824            }
13825            if (embed_height !== undefined) {
13826                frame_height = 'height="' + embed_height + '" ';
13827            } else {
13828                frame_height = '"" ';
13829            }
13830
13831            post_frame = '<iframe title="' + frame_title + '" src="//www.instagram.com/' + post_id + '/embed" ' + frame_width + frame_height + '></iframe>';
13832
13833            return post_frame;
13834        });
13835    },
13836    "fallback": function () {
13837        "use strict";
13838        var id = 'instagram';
13839        tarteaucitron.fallback(['instagram_post'], function (elem) {
13840            elem.style.width = elem.getAttribute('width') + 'px';
13841            elem.style.height = elem.getAttribute('height') + 'px';
13842            return tarteaucitron.engage(id);
13843        });
13844    }
13845};
13846
13847// jsapi
13848tarteaucitron.services.jsapi = {
13849    "key": "jsapi",
13850    "type": "api",
13851    "name": "Google jsapi",
13852    "uri": "https://policies.google.com/privacy",
13853    "needConsent": true,
13854    "cookies": [],
13855    "js": function () {
13856        "use strict";
13857        tarteaucitron.addScript('//www.google.com/jsapi');
13858    }
13859};
13860
13861// twitterwidgetsapi
13862tarteaucitron.services.twitterwidgetsapi = {
13863    "key": "twitterwidgetsapi",
13864    "type": "api",
13865    "name": "Twitter Widgets API",
13866    "uri": "https://support.twitter.com/articles/20170514",
13867    "needConsent": true,
13868    "cookies": [],
13869    "js": function () {
13870        "use strict";
13871        tarteaucitron.fallback(['tacTwitterAPI'], '');
13872        tarteaucitron.addScript('//platform.twitter.com/widgets.js', 'twitter-wjs');
13873    },
13874    "fallback": function () {
13875        "use strict";
13876        var id = 'twitterwidgetsapi';
13877        tarteaucitron.fallback(['tacTwitterAPI'], tarteaucitron.engage(id));
13878    }
13879};
13880
13881// recaptcha
13882tarteaucitron.services.recaptcha = {
13883    "key": "recaptcha",
13884    "type": "api",
13885    "name": "reCAPTCHA",
13886    "uri": "https://policies.google.com/privacy",
13887    "needConsent": true,
13888    "cookies": ['nid'],
13889    "js": function () {
13890        "use strict";
13891        window.tacRecaptchaOnLoad = tarteaucitron.user.recaptchaOnLoad || function () { };
13892        tarteaucitron.fallback(['g-recaptcha'], '');
13893
13894        if (tarteaucitron.user.recaptchaapi === undefined) {
13895            tarteaucitron.addScript('https://www.google.com/recaptcha/api.js?onload=tacRecaptchaOnLoad');
13896        } else {
13897            tarteaucitron.addScript('https://www.google.com/recaptcha/api.js?onload=tacRecaptchaOnLoad&render=' + tarteaucitron.user.recaptchaapi);
13898        }
13899
13900    },
13901    "fallback": function () {
13902        "use strict";
13903        var id = 'recaptcha';
13904        tarteaucitron.fallback(['g-recaptcha'], tarteaucitron.engage(id));
13905    }
13906};
13907
13908// linkedin
13909tarteaucitron.services.linkedin = {
vendor: 5,096 bytes, lines 13910-14063
13910    "key": "linkedin",
13911    "type": "social",
13912    "name": "Linkedin",
13913    "uri": "https://www.linkedin.com/legal/cookie_policy",
13914    "needConsent": true,
13915    "cookies": [],
13916    "js": function () {
13917        "use strict";
13918        tarteaucitron.fallback(['tacLinkedin'], '');
13919        tarteaucitron.addScript('//platform.linkedin.com/in.js');
13920        if (tarteaucitron.isAjax === true) {
13921            if (typeof IN !== "undefined") {
13922                IN.parse();
13923            }
13924        }
13925    },
13926    "fallback": function () {
13927        "use strict";
13928        var id = 'linkedin';
13929        tarteaucitron.fallback(['tacLinkedin'], tarteaucitron.engage(id));
13930    }
13931};
13932
13933// mautic
13934tarteaucitron.services.mautic = {
13935    "key": "mautic",
13936    "type": "analytic",
13937    "name": "Mautic",
13938    "uri": "https://www.mautic.org/privacy-policy/",
13939    "needConsent": true,
13940    "cookies": ['mtc_id', 'mtc_sid'],
13941    "js": function () {
13942        "use strict";
13943        if (tarteaucitron.user.mauticurl === undefined) {
13944            return;
13945        }
13946
13947        window.MauticTrackingObject = 'mt';
13948        window.mt = window.mt || function () {
13949            window.mt.q = window.mt.q || [];
13950            window.mt.q.push(arguments);
13951        };
13952
13953        tarteaucitron.addScript(tarteaucitron.user.mauticurl, '', function () {
13954            mt('send', 'pageview');
13955        });
13956    }
13957};
13958
13959// microsoftcampaignanalytics
13960tarteaucitron.services.microsoftcampaignanalytics = {
13961    "key": "microsoftcampaignanalytics",
13962    "type": "analytic",
13963    "name": "Microsoft Campaign Analytics",
13964    "uri": "https://privacy.microsoft.com/privacystatement/",
13965    "needConsent": true,
13966    "cookies": [],
13967    "js": function () {
13968        "use strict";
13969        if (tarteaucitron.user.microsoftcampaignanalyticsUUID === undefined) {
13970            return;
13971        }
13972
13973        tarteaucitron.addScript('//flex.atdmt.com/mstag/site/' + tarteaucitron.user.microsoftcampaignanalyticsUUID + '/mstag.js', 'mstag_tops', function () {
13974            window.mstag = { loadTag: function () { }, time: (new Date()).getTime() };
13975            window.mstag.loadTag("analytics", { dedup: "1", domainId: tarteaucitron.user.microsoftcampaignanalyticsdomainId, type: "1", actionid: tarteaucitron.user.microsoftcampaignanalyticsactionId });
13976        });
13977    }
13978};
13979
13980// onesignal
13981tarteaucitron.services.onesignal = {
13982    "key": "onesignal",
13983    "type": "api",
13984    "name": "OneSignal",
13985    "uri": "https://onesignal.com/privacy_policy",
13986    "needConsent": true,
13987    "cookies": [],
13988    "js": function () {
13989        "use strict";
13990        if (tarteaucitron.user.onesignalAppId === undefined) {
13991            return;
13992        }
13993        window.OneSignal = window.OneSignal || [];
13994
13995        window.OneSignal.push(function () {
13996            window.OneSignal.init({
13997                appId: tarteaucitron.user.onesignalAppId,
13998            });
13999        });
14000
14001        tarteaucitron.addScript('https://cdn.onesignal.com/sdks/OneSignalSDK.js');
14002    }
14003};
14004
14005// pinterest
14006tarteaucitron.services.pinterest = {
14007    "key": "pinterest",
14008    "type": "social",
14009    "name": "Pinterest",
14010    "uri": "https://about.pinterest.com/privacy-policy",
14011    "needConsent": true,
14012    "cookies": [],
14013    "js": function () {
14014        "use strict";
14015        tarteaucitron.fallback(['tacPinterest'], '');
14016        tarteaucitron.addScript('//assets.pinterest.com/js/pinit.js');
14017    },
14018    "fallback": function () {
14019        "use strict";
14020        var id = 'pinterest';
14021        tarteaucitron.fallback(['tacPinterest'], tarteaucitron.engage(id));
14022    }
14023};
14024
14025// prelinker
14026tarteaucitron.services.prelinker = {
14027    "key": "prelinker",
14028    "type": "ads",
14029    "name": "Prelinker",
14030    "uri": "http://www.prelinker.com/index/index/cgu/",
14031    "needConsent": true,
14032    "cookies": ['_sp_id.32f5', '_sp_ses.32f5'],
14033    "js": function () {
14034        "use strict";
14035        var uniqIds = [],
14036            i,
14037            uri;
14038
14039        tarteaucitron.fallback(['prelinker-canvas'], function (x) {
14040            var uniqId = '_' + Math.random().toString(36).substr(2, 9);
14041            uniqIds.push(uniqId);
14042            return '<div id="' + uniqId + '" siteId="' + x.getAttribute('siteId') + '" bannerId="' + x.getAttribute('bannerId') + '" defaultLanguage="' + x.getAttribute('defaultLanguage') + '" tracker="' + x.getAttribute('tracker') + '"></div>';
14043        });
14044
14045        for (i = 0; i < uniqIds.length; i += 1) {
14046            uri = 'http://promo.easy-dating.org/banner/index?';
14047            uri += 'site_id=' + document.getElementById(uniqIds[i]).getAttribute('siteId') + '&';
14048            uri += 'banner_id=' + document.getElementById(uniqIds[i]).getAttribute('bannerId') + '&';
14049            uri += 'default_language=' + document.getElementById(uniqIds[i]).getAttribute('defaultLanguage') + '&';
14050            uri += 'tr4ck=' + document.getElementById(uniqIds[i]).getAttribute('trackrt');
14051
14052            tarteaucitron.makeAsync.init(uri, uniqIds[i]);
14053        }
14054    },
14055    "fallback": function () {
14056        "use strict";
14057        var id = 'prelinker';
14058        tarteaucitron.fallback(['prelinker-canvas'], tarteaucitron.engage(id));
14059    }
14060};
14061
14062// prezi
14063tarteaucitron.services.prezi = {
14064    "key": "prezi",
14065    "type": "video",
14066    "name": "Prezi",
14067    "uri": "https://prezi.com/privacy-policy/",
14068    "needConsent": true,
14069    "cookies": [],
14070    "js": function () {
14071        "use strict";
14072        tarteaucitron.fallback(['prezi-canvas'], function (x) {
14073            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Prezi iframe'),
14074                id = x.getAttribute("data-id"),
14075                width = x.getAttribute("width"),
14076                height = x.getAttribute("height"),
14077                url = 'https://prezi.com/embed/' + id + '/?bgcolor=ffffff&amp;lock_to_path=0&amp;autoplay=0&amp;autohide_ctrls=0';
14078
14079            return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="no" allowtransparency allowfullscreen></iframe>';
14080        });
14081    },
14082    "fallback": function () {
14083        "use strict";
14084        var id = 'prezi';
14085        tarteaucitron.fallback(['prezi-canvas'], function (elem) {
14086            elem.style.width = elem.getAttribute('width') + 'px';
14087            elem.style.height = elem.getAttribute('height') + 'px';
14088            return tarteaucitron.engage(id);
14089        });
14090    }
14091};
14092
14093// pubdirecte
14094tarteaucitron.services.pubdirecte = {
14095    "key": "pubdirecte",
14096    "type": "ads",
14097    "name": "Pubdirecte",
14098    "uri": "http://pubdirecte.com/contact.php",
14099    "needConsent": true,
14100    "cookies": [],
14101    "js": function () {
14102        "use strict";
14103        var uniqIds = [],
14104            i,
14105            uri;
14106
14107        tarteaucitron.fallback(['pubdirecte-canvas'], function (x) {
14108            var uniqId = '_' + Math.random().toString(36).substr(2, 9);
14109            uniqIds.push(uniqId);
14110            return '<div id="' + uniqId + '" pid="' + x.getAttribute('pid') + '" ref="' + x.getAttribute('ref') + '"></div>';
14111        });
14112
14113        for (i = 0; i < uniqIds.length; i += 1) {
14114            uri = '//www.pubdirecte.com/script/banniere.php?';
14115            uri += 'id=' + document.getElementById(uniqIds[i]).getAttribute('pid') + '&';
14116            uri += 'ref=' + document.getElementById(uniqIds[i]).getAttribute('ref');
14117
14118            tarteaucitron.makeAsync.init(uri, uniqIds[i]);
14119        }
14120    },
14121    "fallback": function () {
14122        "use strict";
14123        var id = 'pubdirecte';
14124        tarteaucitron.fallback(['pubdirecte-canvas'], tarteaucitron.engage(id));
14125    }
14126};
14127
14128// purechat
14129tarteaucitron.services.purechat = {
14130    "key": "purechat",
14131    "type": "support",
14132    "name": "PureChat",
14133    "uri": "https://www.purechat.com/privacy",
14134    "needConsent": true,
14135    "cookies": [],
14136    "js": function () {
14137        "use strict";
14138        if (tarteaucitron.user.purechatId === undefined) {
14139            return;
14140        }
14141
14142        tarteaucitron.addScript('//app.purechat.com/VisitorWidget/WidgetScript', '', function () {
14143            try {
14144                window.w = new PCWidget({ c: tarteaucitron.user.purechatId, f: true });
14145            } catch (e) { }
14146        });
14147    }
14148};
14149
14150// Intercom
14151tarteaucitron.services.intercomChat = {
14152    "key": "intercomChat",
14153    "type": "support",
14154    "name": "Intercom",
14155    "uri": "https://www.intercom.com/",
14156    "needConsent": true,
14157    "cookies": [
14158        "intercom-id-" + tarteaucitron.user.intercomKey,
14159        "intercom-session-" + tarteaucitron.user.intercomKey,
14160    ],
14161    "readmoreLink": "https://www.intercom.com/legal/privacy",
14162    "js": function () {
14163        window.intercomSettings = {
14164            app_id: tarteaucitron.user.intercomKey,
14165        };
14166
14167        var w = window;
14168        var ic = w.Intercom;
14169        if (typeof ic === "function") {
14170            ic("reattach_activator");
14171            ic("update", w.intercomSettings);
14172        } else {
14173            var i = function () {
14174                i.c(arguments);
14175            };
14176            i.q = [];
14177            i.c = function (args) {
14178                i.q.push(args);
14179            };
14180            w.Intercom = i;
14181            tarteaucitron.addScript(
14182                "https://widget.intercom.io/widget/" + tarteaucitron.user.intercomKey,
14183                "",
14184                function () {
14185                    // Execute callback if function `intercomChatEnable`
14186                    // is defined
14187                    if (typeof intercomChatEnable === 'function') {
14188                        intercomChatEnable()
14189                    }
14190                }
14191            );
14192        }
14193    },
14194    "fallback": function () {
14195        "use strict";
14196        var id = "intercomChat";
14197        tarteaucitron.fallback(
14198            ["intercom-chat"],
14199            function () {
14200                // Execute callback if function `intercomChatDisable`
14201                // is defined
14202                if (typeof intercomChatDisable === 'function') {
14203                    intercomChatDisable()
14204                }
14205                return tarteaucitron.engage(id)
14206            }
14207        );
14208    },
14209};
14210
14211// rumbletalk
14212tarteaucitron.services.rumbletalk = {
14213    "key": "rumbletalk",
14214    "type": "social",
14215    "name": "RumbleTalk",
14216    "needConsent": true,
14217    "cookies": ['AWSALB'],
14218    "js": function () {
14219        "use strict";
14220        if (tarteaucitron.user.rumbletalkid === undefined) {
14221            return;
14222        }
14223
14224        tarteaucitron.addScript('https://rumbletalk.com/client/?' + tarteaucitron.user.rumbletalkid);
14225
14226        tarteaucitron.fallback(['rumbletalk'], function (x) {
14227            var width = tarteaucitron.getElemWidth(x),
14228                height = tarteaucitron.getElemHeight(x),
14229                id = x.getAttribute("data-id");
14230
14231            return '<div style="height: ' + height + 'px; width: ' + width + 'px;"><div id="' + id + '"></div></div>';
14232        });
14233    },
14234    "fallback": function () {
14235        "use strict";
14236        var id = 'rumbletalk';
14237        tarteaucitron.fallback(['rumbletalk'], function (elem) {
14238            elem.style.width = tarteaucitron.getElemWidth(elem) + 'px';
14239            elem.style.height = tarteaucitron.getElemHeight(elem) + 'px';
14240
14241            return tarteaucitron.engage(id);
14242        });
14243    }
14244};
14245
14246// shareaholic
14247tarteaucitron.services.shareaholic = {
14248    "key": "shareaholic",
14249    "type": "social",
14250    "name": "Shareaholic",
14251    "uri": "https://shareaholic.com/privacy/choices",
14252    "needConsent": true,
14253    "cookies": ['__utma', '__utmb', '__utmc', '__utmz', '__utmt_Shareaholic%20Pageviews'],
14254    "js": function () {
14255        "use strict";
14256        if (tarteaucitron.user.shareaholicSiteId === undefined) {
14257            return;
14258        }
14259
14260        tarteaucitron.fallback(['shareaholic-canvas'], '');
14261        tarteaucitron.addScript('//dsms0mj1bbhn4.cloudfront.net/assets/pub/shareaholic.js', '', function () {
14262            try {
14263                Shareaholic.init(tarteaucitron.user.shareaholicSiteId);
14264            } catch (e) { }
14265        });
14266    },
14267    "fallback": function () {
14268        "use strict";
14269        var id = 'shareaholic';
14270        tarteaucitron.fallback(['shareaholic-canvas'], tarteaucitron.engage(id));
14271    }
14272};
14273
14274// shareasale
14275tarteaucitron.services.shareasale = {
14276    "key": "shareasale",
14277    "type": "ads",
14278    "name": "ShareASale",
14279    "uri": "https://www.shareasale.com/PrivacyPolicy.pdf",
14280    "needConsent": true,
14281    "cookies": [],
14282    "js": function () {
14283        "use strict";
14284        var uniqIds = [],
14285            i,
14286            uri;
14287
14288        tarteaucitron.fallback(['shareasale-canvas'], function (x) {
14289            var uniqId = '_' + Math.random().toString(36).substr(2, 9);
14290            uniqIds.push(uniqId);
14291            return '<div id="' + uniqId + '" amount="' + x.getAttribute('amount') + '" tracking="' + x.getAttribute('tracking') + '" transtype="' + x.getAttribute('transtype') + '" persale="' + x.getAttribute('persale') + '" perlead="' + x.getAttribute('perlead') + '" perhit="' + x.getAttribute('perhit') + '" merchantID="' + x.getAttribute('merchantID') + '"></div>';
14292        });
14293
14294        for (i = 0; i < uniqIds.length; i += 1) {
14295            uri = 'https://shareasale.com/sale.cfm?';
14296            uri += 'amount=' + document.getElementById(uniqIds[i]).getAttribute('amount') + '&';
14297            uri += 'tracking=' + document.getElementById(uniqIds[i]).getAttribute('tracking') + '&';
14298            uri += 'transtype=' + document.getElementById(uniqIds[i]).getAttribute('transtype') + '&';
14299            uri += 'persale=' + document.getElementById(uniqIds[i]).getAttribute('persale') + '&';
14300            uri += 'perlead=' + document.getElementById(uniqIds[i]).getAttribute('perlead') + '&';
14301            uri += 'perhit=' + document.getElementById(uniqIds[i]).getAttribute('perhit') + '&';
14302            uri += 'merchantID=' + document.getElementById(uniqIds[i]).getAttribute('merchantID');
14303
14304            document.getElementById(uniqIds[i]).innerHTML = '<img src=\'' + uri + '\' width=\'1\' height=\'1\' />';
14305        }
14306    },
14307    "fallback": function () {
14308        "use strict";
14309        var id = 'shareasale';
14310        tarteaucitron.fallback(['shareasale-canvas'], tarteaucitron.engage(id));
14311    }
14312};
14313
14314// sharethis
14315tarteaucitron.services.sharethis = {
14316    "key": "sharethis",
14317    "type": "social",
14318    "name": "ShareThis",
14319    "uri": "http://www.sharethis.com/legal/privacy/",
14320    "needConsent": true,
14321    "cookies": ['__unam'],
14322    "js": function () {
14323        "use strict";
14324        if (tarteaucitron.user.sharethisPublisher === undefined) {
14325            return;
14326        }
14327        var switchTo5x = true,
14328            uri = ('https:' === document.location.protocol ? 'https://ws' : 'http://w') + '.sharethis.com/button/buttons.js';
14329
14330        tarteaucitron.fallback(['tacSharethis'], '');
14331        tarteaucitron.addScript(uri, '', function () {
14332            stLight.options({ publisher: tarteaucitron.user.sharethisPublisher, doNotHash: false, doNotCopy: false, hashAddressBar: false });
14333        });
14334
14335        if (tarteaucitron.isAjax === true) {
14336            if (typeof stButtons !== "undefined") {
14337                stButtons.locateElements();
14338            }
14339        }
14340    },
14341    "fallback": function () {
14342        "use strict";
14343        var id = 'sharethis';
14344        tarteaucitron.fallback(['tacSharethis'], tarteaucitron.engage(id));
14345    }
14346};
14347
14348// slideshare
14349tarteaucitron.services.slideshare = {
14350    "key": "slideshare",
14351    "type": "video",
14352    "name": "SlideShare",
14353    "uri": "https://www.linkedin.com/legal/privacy-policy",
14354    "needConsent": true,
14355    "cookies": [],
14356    "js": function () {
14357        "use strict";
14358        tarteaucitron.fallback(['slideshare-canvas'], function (x) {
14359            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Slideshare iframe'),
14360                id = x.getAttribute("data-id"),
14361                width = x.getAttribute("width"),
14362                height = x.getAttribute("height"),
14363                url = '//www.slideshare.net/slideshow/embed_code/' + id;
14364
14365            return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="no" allowtransparency allowfullscreen></iframe>';
14366        });
14367    },
14368    "fallback": function () {
14369        "use strict";
14370        var id = 'slideshare';
14371        tarteaucitron.fallback(['slideshare-canvas'], function (elem) {
14372            elem.style.width = elem.getAttribute('width') + 'px';
14373            elem.style.height = elem.getAttribute('height') + 'px';
14374            return tarteaucitron.engage(id);
14375        });
14376    }
14377};
14378
14379// soundcloud
14380tarteaucitron.services.soundcloud = {
14381    key: 'soundcloud',
14382    type: 'video',
14383    name: 'SoundCloud',
14384    needConsent: true,
14385    cookies: ['sc_anonymous_id', 'sclocale'],
14386    js: function () {
14387        "use strict";
14388        tarteaucitron.fallback(['soundcloud_player'], function (x) {
14389            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Soundcloud iframe'),
14390                player_height = x.getAttribute('data-height'),
14391                frame_height = 'height="' + player_height + '" ',
14392                playable_id = x.getAttribute('data-playable-id'),
14393                playable_type = x.getAttribute('data-playable-type'),
14394                playable_url = x.getAttribute('data-playable-url'),
14395                color = x.getAttribute('data-color'),
14396                autoplay = x.getAttribute('data-auto-play'),
14397                hideRelated = x.getAttribute('data-hide-related'),
14398                showComments = x.getAttribute('data-show-comments'),
14399                showUser = x.getAttribute('data-show-user'),
14400                showReposts = x.getAttribute('data-show-reposts'),
14401                showTeaser = x.getAttribute('data-show-teaser'),
14402                visual = x.getAttribute('data-visual'),
14403                artwork = x.getAttribute('data-artwork');
14404
14405            var allowAutoplay = autoplay === 'true' ? 'allow="autoplay"' : '';
14406
14407            if (playable_id === undefined && playable_url === undefined) {
14408                return "";
14409            }
14410
14411            // Allow to embed from API results (playable_type + playable_id)
14412            var qs = '?url=https%3A//api.soundcloud.com/' + playable_type + '/' + playable_id;
14413            // Or from raw URL from Soundcloud website
14414            if (playable_url && playable_url.length > 0) qs = '?url=' + escape(playable_url);
14415
14416            if (hideRelated && hideRelated.length > 0) qs += '&hide_related=' + hideRelated;
14417            if (color && color.length > 0) qs += '&color=' + color.replace('#', '%23');
14418            if (autoplay && autoplay.length > 0) qs += '&auto_play=' + autoplay;
14419            if (showComments && showComments.length > 0) qs += '&show_comments=' + showComments;
14420            if (hideRelated && hideRelated.length > 0) qs += '&hide_related=' + hideRelated;
14421            if (showUser && showUser.length > 0) qs += '&show_user=' + showUser;
14422            if (showReposts && showReposts.length > 0) qs += '&show_reposts=' + showReposts;
14423            if (showTeaser && showTeaser.length > 0) qs += '&show_teaser=' + showTeaser;
14424            if (visual && visual.length > 0) qs += '&visual=' + visual;
14425            if (artwork && artwork.length >
14425 0) qs += '&show_artwork=' + artwork;
14426
14427            return '<iframe title="' + frame_title + '" width="100%" ' + frame_height + ' scrolling="no" ' + allowAutoplay + ' src="https://w.soundcloud.com/player/' + qs + '"></iframe>';
14428        });
14429    },
14430    fallback: function () {
14431        "use strict";
14432        tarteaucitron.fallback(['soundcloud_player'], function (elem) {
14433            elem.style.height = elem.getAttribute('data-height') + 'px';
14434            return tarteaucitron.engage('soundcloud');
14435        });
14436    }
14437};
14438
14439// spotify
14440tarteaucitron.services.spotify = {
14441    "key": "spotify",
14442    "type": "video",
14443    "name": "Spotify",
14444    "uri": "https://www.spotify.com/us/legal/privacy-policy/",
14445    "needConsent": true,
14446    "cookies": ['sp_landing', '_ga', 'sp_ab', 'sp_landingref', 'sp_t', 'sp_usid', 'OptanonConsent', 'sp_m', 'spot'],
14447    "js": function () {
14448        "use strict";
14449        tarteaucitron.fallback(['spotify_player'], function (x) {
14450            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Spotify iframe'),
14451                spotify_id = x.getAttribute("spotifyID"),
14452                spotify_width = x.getAttribute("width"),
14453                frame_width = 'width=',
14454                spotify_height = x.getAttribute("height"),
14455                frame_height = 'height=',
14456                spotify_frame;
14457
14458            if (spotify_id === undefined) {
14459                return "";
14460            }
14461            if (spotify_width !== undefined) {
14462                frame_width += '"' + spotify_width + '" ';
14463            } else {
14464                frame_width += '"" ';
14465            }
14466            if (spotify_height !== undefined) {
14467                frame_height += '"' + spotify_height + '" ';
14468            } else {
14469                frame_height += '"" ';
14470            }
14471            spotify_frame = '<iframe title="' + frame_title + '" src="//open.spotify.com/embed/' + spotify_id + '" ' + frame_width + frame_height + ' allowfullscreen></iframe>';
14472            return spotify_frame;
14473        });
14474    },
14475    "fallback": function () {
14476        "use strict";
14477        var id = 'spotify';
14478        tarteaucitron.fallback(['spotify_player'], function (elem) {
14479            elem.style.width = elem.getAttribute('width') + 'px';
14480            elem.style.height = elem.getAttribute('height') + 'px';
14481            return tarteaucitron.engage(id);
14482        });
14483    }
14484};
14485
14486// statcounter
14487tarteaucitron.services.statcounter = {
14488    "key": "statcounter",
14489    "type": "analytic",
14490    "name": "StatCounter",
14491    "uri": "https://fr.statcounter.com/about/legal/#privacy",
14492    "needConsent": true,
14493    "cookies": ['sc_is_visitor_unique'],
14494    "js": function () {
14495        "use strict";
14496        var uniqIds = [],
14497            i,
14498            uri = '//statcounter.com/counter/counter.js';
14499
14500        tarteaucitron.fallback(['statcounter-canvas'], function (x) {
14501            var uniqId = '_' + Math.random().toString(36).substr(2, 9);
14502            uniqIds.push(uniqId);
14503            return '<div id="' + uniqId + '"></div>';
14504        });
14505
14506        for (i = 0; i < uniqIds.length; i += 1) {
14507            tarteaucitron.makeAsync.init(uri, uniqIds[i]);
14508        }
14509    },
14510    "fallback": function () {
14511        "use strict";
14512        var id = 'statcounter';
14513        tarteaucitron.fallback(['statcounter-canvas'], tarteaucitron.engage(id));
14514    }
14515};
14516
14517// timelinejs
14518tarteaucitron.services.timelinejs = {
14519    "key": "timelinejs",
14520    "type": "api",
14521    "name": "Timeline JS",
14522    "uri": "http://timeline.knightlab.com/#help",
14523    "needConsent": true,
14524    "cookies": [],
14525    "js": function () {
14526        "use strict";
14527        tarteaucitron.fallback(['timelinejs-canvas'], function (x) {
14528            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Twitter iframe'),
14529                spreadsheet_id = x.getAttribute("spreadsheet_id"),
14530                width = x.getAttribute("width"),
14531                height = x.getAttribute("height"),
14532                lang = x.getAttribute("lang_2_letter"),
14533                font = x.getAttribute("font"),
14534                map = x.getAttribute("map"),
14535                start_at_end = x.getAttribute("start_at_end"),
14536                hash_bookmark = x.getAttribute("hash_bookmark"),
14537                start_at_slide = x.getAttribute("start_at_slide"),
14538                start_zoom = x.getAttribute("start_zoom"),
14539                url = '//cdn.knightlab.com/libs/timeline/latest/embed/index.html?source=' + spreadsheet_id + '&font=' + font + '&maptype=' + map + '&lang=' + lang + '&start_at_end=' + start_at_end + '&hash_bookmark=' + hash_bookmark + '&start_at_slide=' + start_at_slide + '&start_zoom_adjust=' + start_zoom + '&height=' + height;
14540
14541            return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" allowtransparency allowfullscreen></iframe>';
14542        });
14543    },
14544    "fallback": function () {
14545        "use strict";
14546        var id = 'timelinejs';
14547        tarteaucitron.fallback(['timelinejs-canvas'], function (elem) {
14548            elem.style.width = elem.getAttribute('width') + 'px';
14549            elem.style.height = elem.getAttribute('height') + 'px';
14550            return tarteaucitron.engage(id);
14551        });
14552    }
14553};
14554
14555// tagcommander
14556tarteaucitron.services.tagcommander = {
vendor: 4,367 bytes, lines 14557-14692
14557    "key": "tagcommander",
14558    "type": "api",
14559    "name": "TagCommander",
14560    "uri": "https://www.commandersact.com/en/privacy/",
14561    "needConsent": true,
14562    "cookies": [],
14563    "js": function () {
14564        "use strict";
14565        if (tarteaucitron.user.tagcommanderid === undefined) {
14566            return;
14567        }
14568        tarteaucitron.addScript('https://cdn.tagcommander.com/' + tarteaucitron.user.tagcommanderid + '.js');
14569    }
14570};
14571
14572// typekit
14573tarteaucitron.services.typekit = {
14574    "key": "typekit",
14575    "type": "api",
14576    "name": "Typekit (adobe)",
14577    "uri": "https://www.adobe.com/privacy.html",
14578    "needConsent": true,
14579    "cookies": [],
14580    "js": function () {
14581        "use strict";
14582        if (tarteaucitron.user.typekitId === undefined) {
14583            return;
14584        }
14585        tarteaucitron.addScript('//use.typekit.net/' + tarteaucitron.user.typekitId + '.js', '', function () {
14586            try {
14587                Typekit.load();
14588            } catch (e) { }
14589        });
14590    }
14591};
14592
14593// twenga
14594tarteaucitron.services.twenga = {
14595    "key": "twenga",
14596    "type": "ads",
14597    "name": "Twenga",
14598    "uri": "http://www.twenga.com/privacy.php",
14599    "needConsent": true,
14600    "cookies": [],
14601    "js": function () {
14602        "use strict";
14603
14604        if (tarteaucitron.user.twengaId === undefined || tarteaucitron.user.twengaLocale === undefined) {
14605            return;
14606        }
14607
14608        tarteaucitron.addScript('//tracker.twenga.' + tarteaucitron.user.twengaLocale + '/st/tracker_' + tarteaucitron.user.twengaId + '.js');
14609    }
14610};
14611
14612// twitter
14613tarteaucitron.services.twitter = {
14614    "key": "twitter",
14615    "type": "social",
14616    "name": "Twitter",
14617    "uri": "https://support.twitter.com/articles/20170514",
14618    "needConsent": true,
14619    "cookies": [],
14620    "js": function () {
14621        "use strict";
14622        tarteaucitron.fallback(['tacTwitter'], '');
14623        tarteaucitron.addScript('//platform.twitter.com/widgets.js', 'twitter-wjs');
14624    },
14625    "fallback": function () {
14626        "use strict";
14627        var id = 'twitter';
14628        tarteaucitron.fallback(['tacTwitter'], tarteaucitron.engage(id));
14629    }
14630};
14631
14632// twitter embed
14633tarteaucitron.services.twitterembed = {
14634    "key": "twitterembed",
14635    "type": "social",
14636    "name": "Twitter (cards)",
14637    "uri": "https://support.twitter.com/articles/20170514",
14638    "needConsent": true,
14639    "cookies": [],
14640    "js": function () {
14641        "use strict";
14642        var uniqIds = [],
14643            i,
14644            e,
14645            html;
14646
14647        tarteaucitron.fallback(['twitterembed-canvas'], function (x) {
14648            var uniqId = '_' + Math.random().toString(36).substr(2, 9);
14649            uniqIds.push(uniqId);
14650            html = '<div id="' + uniqId + '" ';
14651            html += 'tweetid="' + x.getAttribute('tweetid') + '" ';
14652            html += 'theme="' + x.getAttribute('theme') + '" ';
14653            html += 'cards="' + x.getAttribute('cards') + '" ';
14654            html += 'conversation="' + x.getAttribute('conversation') + '" ';
14655            html += 'data-width="' + x.getAttribute('data-width') + '" ';
14656            html += 'data-align="' + x.getAttribute('data-align') + '" ';
14657            html += '></div>';
14658            return html;
14659        });
14660
14661        tarteaucitron.addScript('//platform.twitter.com/widgets.js', 'twitter-wjs', function () {
14662            var i;
14663            for (i = 0; i < uniqIds.length; i += 1) {
14664                e = document.getElementById(uniqIds[i]);
14665                twttr.widgets.createTweet(
14666                    e.getAttribute('tweetid'),
14667                    e,
14668                    {
14669                        theme: e.getAttribute('theme'),
14670                        cards: e.getAttribute('cards'),
14671                        conversation: e.getAttribute('conversation'),
14672                        lang: tarteaucitron.getLanguage(),
14673                        dnt: true,
14674                        width: e.getAttribute('data-width'),
14675                        align: e.getAttribute('data-align')
14676                    }
14677                );
14678            }
14679        });
14680    },
14681    "fallback": function () {
14682        "use strict";
14683        var id = 'twitterembed';
14684        tarteaucitron.fallback(['twitterembed-canvas'], function (elem) {
14685            elem.style.width = elem.getAttribute('data-width') + 'px';
14686            return tarteaucitron.engage(id);
14687        });
14688    }
14689};
14690
14691// twitter timeline
14692tarteaucitron.services.twittertimeline = {
14693    "key": "twittertimeline",
14694    "type": "social",
14695    "name": "Twitter (timelines)",
14696    "uri": "https://support.twitter.com/articles/20170514",
14697    "needConsent": true,
14698    "cookies": [],
14699    "js": function () {
14700        "use strict";
14701        tarteaucitron.fallback(['tacTwitterTimelines'], '');
14702        tarteaucitron.addScript('//platform.twitter.com/widgets.js', 'twitter-wjs');
14703    },
14704    "fallback": function () {
14705        "use strict";
14706        var id = 'twittertimeline';
14707        tarteaucitron.fallback(['tacTwitterTimelines'], tarteaucitron.engage(id));
14708    }
14709};
14710
14711// twitter universal website tag
14712tarteaucitron.services.twitteruwt = {
14713    "key": "twitteruwt",
14714    "type": "analytic",
14715    "name": "Twitter Universal Website Tag",
14716    "uri": "https://business.twitter.com/en/help/campaign-measurement-and-analytics/conversion-tracking-for-websites.html",
14717    "needConsent": true,
14718    "cookies": [],
14719    "js": function () {
14720        "use strict";
14721
14722        window.twq = function () {
14723            window.twq.exe ? window.twq.exe.apply(window.twq, arguments) : window.twq.queue.push(arguments);
14724        }
14725        window.twq.version = '1.1';
14726        window.twq.queue = [];
14727
14728        tarteaucitron.addScript('https://static.ads-twitter.com/uwt.js', '', function () {
14729            window.twq('init', tarteaucitron.user.twitteruwtId);
14730            window.twq('track', 'PageView');
14731        });
14732    }
14733};
14734
14735// user voice
14736tarteaucitron.services.uservoice = {
14737    "key": "uservoice",
14738    "type": "support",
14739    "name": "UserVoice",
14740    "uri": "https://www.uservoice.com/privacy/",
14741    "needConsent": true,
14742    "cookies": [],
14743    "js": function () {
14744        "use strict";
14745        if (tarteaucitron.user.userVoiceApi === undefined) {
14746            return;
14747        }
14748        tarteaucitron.addScript('//widget.uservoice.com/' + tarteaucitron.user.userVoiceApi + '.js');
14749    }
14750};
14751
14752// vimeo
14753tarteaucitron.services.vimeo = {
14754    "key": "vimeo",
14755    "type": "video",
14756    "name": "Vimeo",
14757    "uri": "https://vimeo.com/privacy",
14758    "needConsent": true,
14759    "cookies": ['__utmt_player', '__utma', '__utmb', '__utmc', '__utmv', 'vuid', '__utmz', 'player'],
14760    "js": function () {
14761        "use strict";
14762        tarteaucitron.fallback(['vimeo_player'], function (x) {
14763            var frame_title = tarteaucitron.fixSelfXSS(tarteaucitron.getElemAttr(x, "title") || 'Vimeo iframe'),
14764                video_width = tarteaucitron.getElemAttr(x, "width"),
14765                frame_width = 'width=',
14766                video_height = tarteaucitron.getElemAttr(x, "height"),
14767                frame_height = 'height=',
14768
14769                video_id = tarteaucitron.getElemAttr(x, "videoID"),
14770                video_hash = tarteaucitron.getElemAttr(x, "data-hash") || '',
14771                video_allowfullscreen = tarteaucitron.getElemAttr(x, "data-allowfullscreen"),
14772
14773                video_qs = "",
14774                attrs = ["title", "byline", "portrait", "loop", "autoplay", "autopause", "background", "color", "controls", "maxheight", "maxwidth", "muted", "playsinline", "speed", "transparent"],
14775                params = attrs.filter(function (a) {
14776                    return tarteaucitron.getElemAttr(x, a) !== null;
14777                }).map(function (a) {
14778                    return a + "=" + tarteaucitron.getElemAttr(x, a);
14779                }),
14780
14781                video_frame;
14782
14783            if (video_id === undefined) {
14784                return "";
14785            }
14786
14787            // query params
14788            if (video_hash.length > 0) {
14789                params.push("h=" + video_hash);
14790            }
14791            if (params.length > 0) {
14792                video_qs = "?" + params.join("&");
14793            }
14794
14795            // attributes
14796            if (video_width !== undefined) {
14797                frame_width += '"' + video_width + '" ';
14798            } else {
14799                frame_width += '"" ';
14800            }
14801            if (video_height !== undefined) {
14802                frame_height += '"' + video_height + '" ';
14803            } else {
14804                frame_height += '"" ';
14805            }
14806
14807          //video_frame = '<iframe title="' + frame_title + '" src="//player.vimeo.com/video/' + video_id + video_qs + '" ' + frame_width + frame_height + (video_allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
14808          video_frame = '<iframe title="' + frame_title + '" src="//playeo.europa-organisation.com/iframe/index/video/' + video_id + video_qs + '/from/GRCI/autoplay/non" ' + frame_width + frame_height + (video_allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
14809
14810            return video_frame;
14811        });
14812    },
14813    "fallback": function () {
14814        "use strict";
14815        var id = 'vimeo';
14816        tarteaucitron.fallback(['vimeo_player'], function (elem) {
14817            elem.style.width = elem.getAttribute('width') + 'px';
14818            elem.style.height = elem.getAttribute('height') + 'px';
14819            return tarteaucitron.engage(id);
14820        });
14821    }
14822};
14823
14824// visualrevenue
14825tarteaucitron.services.visualrevenue = {
vendor: 15,233 bytes, lines 14826-15250
14826    "key": "visualrevenue",
14827    "type": "analytic",
14828    "name": "VisualRevenue",
14829    "uri": "http://www.outbrain.com/legal/privacy-713/",
14830    "needConsent": true,
14831    "cookies": ['__vrf', '__vrm', '__vrl', '__vry', '__vru', '__vrid', '__vrz'],
14832    "js": function () {
14833        "use strict";
14834        if (tarteaucitron.user.visualrevenueId === undefined) {
14835            return;
14836        }
14837        window._vrq = window._vrq || [];
14838        window._vrq.push(['id', tarteaucitron.user.visualrevenueId]);
14839        window._vrq.push(['automate', true]);
14840        window._vrq.push(['track', function () { }]);
14841        tarteaucitron.addScript('http://a.visualrevenue.com/vrs.js');
14842    }
14843};
14844
14845// verizon dot tag
14846tarteaucitron.services.verizondottag = {
14847    "key": "verizondottag",
14848    "type": "analytic",
14849    "name": "Verizon Dot Tag",
14850    "uri": "https://developer.verizonmedia.com/native/guide/audience-management/dottags/",
14851    "needConsent": true,
14852    "cookies": [],
14853    "js": function () {
14854        "use strict";
14855
14856        window.dotq = window.dotq || [];
14857        window.dotq.push({
14858            'projectId': tarteaucitron.user.verizondottagProjectId,
14859            'properties': { 'pixelId': tarteaucitron.user.verizondottagPixelId }
14860        });
14861
14862        tarteaucitron.addScript('https://s.yimg.com/wi/ytc.js', '', function () {
14863            //const items = window.dotq;
14864            window.dotq = [];
14865            window.dotq.push = function (item) {
14866                YAHOO.ywa.I13N.fireBeacon([item])
14867            };
14868            YAHOO.ywa.I13N.fireBeacon(items)
14869        });
14870    }
14871};
14872
14873// vshop
14874tarteaucitron.services.vshop = {
14875    "key": "vshop",
14876    "type": "ads",
14877    "name": "vShop",
14878    "uri": "http://vshop.fr/privacy-policy",
14879    "needConsent": true,
14880    "cookies": [],
14881    "js": function () {
14882        "use strict";
14883        tarteaucitron.fallback(['vcashW'], '');
14884        tarteaucitron.addScript('//vshop.fr/js/w.js');
14885    },
14886    "fallback": function () {
14887        "use strict";
14888        var id = 'vshop';
14889        tarteaucitron.fallback(['vcashW'], tarteaucitron.engage(id));
14890    }
14891};
14892
14893// wysistat
14894tarteaucitron.services.wysistat = {
14895    "key": "wysistat",
14896    "type": "analytic",
14897    "name": "Wysistat",
14898    "uri": "http://wysistat.net/contact/",
14899    "needConsent": true,
14900    "cookies": ['Wysistat'],
14901    "js": function () {
14902        "use strict";
14903        if (tarteaucitron.user.wysistat === undefined) {
14904            return;
14905        }
14906        tarteaucitron.addScript('//www.wysistat.com/statistique.js', '', function () {
14907            window.stat(tarteaucitron.user.wysistat.cli, tarteaucitron.user.wysistat.frm, tarteaucitron.user.wysistat.prm, tarteaucitron.user.wysistat.ce, tarteaucitron.user.wysistat.page, tarteaucitron.user.wysistat.roi, tarteaucitron.user.wysistat.prof, tarteaucitron.user.wysistat.cpt);
14908        });
14909    }
14910};
14911
14912// xiti
14913tarteaucitron.services.xiti = {
14914    "key": "xiti",
14915    "type": "analytic",
14916    "name": "Xiti",
14917    "uri": "https://www.atinternet.com/rgpd-et-vie-privee/",
14918    "needConsent": true,
14919    "cookies": [],
14920    "js": function () {
14921        "use strict";
14922        if (tarteaucitron.user.xitiId === undefined) {
14923            return;
14924        }
14925        var Xt_param = 's=' + tarteaucitron.user.xitiId + '&p=',
14926            Xt_r,
14927            Xt_h,
14928            Xt_i,
14929            Xt_s,
14930            div = document.createElement('div');
14931        try {
14932            Xt_r = top.document.referrer;
14933        } catch (e) {
14934            Xt_r = document.referrer;
14935        }
14936        Xt_h = new Date();
14937        Xt_i = '<img style="display:none" border="0" alt="" ';
14938        Xt_i += 'src="http://logv3.xiti.com/hit.xiti?' + Xt_param;
14939        Xt_i += '&hl=' + Xt_h.getHours() + 'x' + Xt_h.getMinutes() + 'x' + Xt_h.getSeconds();
14940        if (parseFloat(navigator.appVersion) >= 4) {
14941            Xt_s = screen;
14942            Xt_i += '&r=' + Xt_s.width + 'x' + Xt_s.height + 'x' + Xt_s.pixelDepth + 'x' + Xt_s.colorDepth;
14943        }
14944
14945        div.innerHTML = Xt_i + '&ref=' + Xt_r.replace(/[<>"]/g, '').replace(/&/g, '$') + '" title="Internet Audience">';
14946        document.getElementsByTagName('body')[0].appendChild(div.firstChild);
14947
14948        if (typeof tarteaucitron.user.xitiMore === 'function') {
14949            tarteaucitron.user.xitiMore();
14950        }
14951    }
14952};
14953
14954// AT Internet
14955tarteaucitron.services.atinternet = {
14956    "key": "atinternet",
14957    "type": "analytic",
14958    "name": "AT Internet (privacy by design)",
14959    "uri": "https://www.atinternet.com/rgpd-et-vie-privee/",
14960    "needConsent": true,
14961    "safeanalytic": false,
14962    "cookies": ['atidvisitor', 'atreman', 'atredir', 'atsession'],
14963    "js": function () {
14964        "use strict";
14965        if (tarteaucitron.user.atLibUrl === undefined) {
14966            return;
14967        }
14968
14969        if (tarteaucitron.user.atinternetAlreadyLoaded !== undefined) {
14970            return;
14971        }
14972
14973        tarteaucitron.addScript(tarteaucitron.user.atLibUrl, '', function () {
14974
14975            window.tag = new ATInternet.Tracker.Tag();
14976
14977            if (typeof window.tag.privacy !== 'undefined') {
14978                window.tag.privacy.setVisitorOptin();
14979            }
14980
14981            if (typeof tarteaucitron.user.atMore === 'function') {
14982                tarteaucitron.user.atMore();
14983            }
14984
14985            if (tarteaucitron.user.atinternetSendData !== false) {
14986                window.tag.page.send();
14987            }
14988        });
14989    },
14990    "fallback": function () {
14991        "use strict";
14992        if (tarteaucitron.user.atLibUrl === undefined) {
14993            return;
14994        }
14995
14996        if (tarteaucitron.user.atNoFallback === true) {
14997            return;
14998        }
14999
15000        tarteaucitron.user.atinternetAlreadyLoaded = true;
15001
15002        tarteaucitron.addScript(tarteaucitron.user.atLibUrl, '', function () {
15003
15004            window.tag = new ATInternet.Tracker.Tag();
15005
15006            if (typeof window.tag.privacy !== 'undefined') {
15007
15008                var visitorMode = window.tag.privacy.getVisitorMode();
15009                if (visitorMode !== null && visitorMode.name !== undefined && visitorMode.name == "optout") {
15010                    window.tag.privacy.setVisitorOptout();
15011                } else {
15012                    window.tag.privacy.setVisitorMode('cnil', 'exempt');
15013                }
15014            }
15015
15016            if (typeof tarteaucitron.user.atMore === 'function') {
15017                tarteaucitron.user.atMore();
15018            }
15019
15020            if (tarteaucitron.user.atinternetSendData !== false) {
15021                window.tag.page.send();
15022            }
15023        });
15024    }
15025};
15026
15027// AT Internet
15028tarteaucitron.services.atinternethightrack = {
15029    "key": "atinternethightrack",
15030    "type": "analytic",
15031    "name": "AT Internet",
15032    "uri": "https://www.atinternet.com/rgpd-et-vie-privee/",
15033    "needConsent": true,
15034    "cookies": ['atidvisitor', 'atreman', 'atredir', 'atsession'],
15035    "js": function () {
15036        "use strict";
15037        if (tarteaucitron.user.atLibUrl === undefined) {
15038            return;
15039        }
15040
15041        tarteaucitron.addScript(tarteaucitron.user.atLibUrl, '', function () {
15042
15043            var tag = new ATInternet.Tracker.Tag();
15044
15045            if (typeof tarteaucitron.user.atMore === 'function') {
15046                tarteaucitron.user.atMore();
15047            }
15048        })
15049    }
15050};
15051
15052// youtube
15053tarteaucitron.services.youtube = {
15054    "key": "youtube",
15055    "type": "video",
15056    "name": "YouTube",
15057    "uri": "https://policies.google.com/privacy",
15058    "needConsent": true,
15059    "cookies": ['VISITOR_INFO1_LIVE', 'YSC', 'PREF', 'GEUP'],
15060    "js": function () {
15061        "use strict";
15062        tarteaucitron.fallback(['youtube_player'], function (x) {
15063            var frame_title = tarteaucitron.fixSelfXSS(tarteaucitron.getElemAttr(x, "title") || 'Youtube iframe'),
15064                video_id = tarteaucitron.getElemAttr(x, "videoID"),
15065                srcdoc = tarteaucitron.getElemAttr(x, "srcdoc"),
15066                loading = tarteaucitron.getElemAttr(x, "loading"),
15067                video_width = tarteaucitron.getElemAttr(x, "width"),
15068                frame_width = 'width=',
15069                video_height = tarteaucitron.getElemAttr(x, "height"),
15070                frame_height = 'height=',
15071                video_frame,
15072                allowfullscreen = tarteaucitron.getElemAttr(x, "allowfullscreen"),
15073                attrs = ["theme", "rel", "controls", "showinfo", "autoplay", "mute", "start", "loop", "enablejsapi"],
15074                params = attrs.filter(function (a) {
15075                    return tarteaucitron.getElemAttr(x, a) !== null;
15076                }).map(function (a) {
15077                    return a + "=" + tarteaucitron.getElemAttr(x, a);
15078               }).join("&");
15079
15080            if(tarteaucitron.getElemAttr(x, "loop") == 1) {
15081               params = params + "&playlist=" + video_id;
15082            }
15083
15084            if (video_id === undefined) {
15085                return "";
15086            }
15087            if (video_width !== undefined) {
15088                frame_width += '"' + video_width + '" ';
15089            } else {
15090                frame_width += '"" ';
15091            }
15092            if (video_height !== undefined) {
15093                frame_height += '"' + video_height + '" ';
15094            } else {
15095                frame_height += '"" ';
15096            }
15097
15098            if (srcdoc !== undefined && srcdoc !== null && srcdoc !== "") {
15099                srcdoc = 'srcdoc="' + srcdoc + '" ';
15100            } else {
15101                srcdoc = '';
15102            }
15103
15104            if (loading !== undefined && loading !== null && loading !== "") {
15105                loading = 'loading ';
15106            } else {
15107                loading = '';
15108            }
15109
15110            video_frame = '<iframe title="' + frame_title + '" type="text/html" ' + frame_width + frame_height + ' src="//www.youtube-nocookie.com/embed/' + video_id + '?' + params + '"' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + ' ' + srcdoc + ' ' + loading + '></iframe>';
15111            return video_frame;
15112        });
15113    },
15114    "fallback": function () {
15115        "use strict";
15116        var id = 'youtube';
15117        tarteaucitron.fallback(['youtube_player'], function (elem) {
15118            elem.style.width = elem.getAttribute('width') + 'px';
15119            elem.style.height = elem.getAttribute('height') + 'px';
15120            return tarteaucitron.engage(id);
15121        });
15122    }
15123};
15124
15125// youtube playlist
15126tarteaucitron.services.youtubeplaylist = {
15127    "key": "youtubeplaylist",
15128    "type": "video",
15129    "name": "YouTube (playlist)",
15130    "uri": "https://policies.google.com/privacy",
15131    "needConsent": true,
15132    "cookies": ['VISITOR_INFO1_LIVE', 'YSC', 'PREF', 'GEUP'],
15133    "js": function () {
15134        "use strict";
15135        tarteaucitron.fallback(['youtube_playlist_player'], function (x) {
15136            var frame_title = tarteaucitron.fixSelfXSS(tarteaucitron.getElemAttr(x, "title") || 'Youtube iframe'),
15137                playlist_id = tarteaucitron.getElemAttr(x, "playlistID"),
15138                video_width = tarteaucitron.getElemAttr(x, "width"),
15139                frame_width = 'width=',
15140                video_height = tarteaucitron.getElemAttr(x, "height"),
15141                frame_height = 'height=',
15142                video_frame,
15143                allowfullscreen = tarteaucitron.getElemAttr(x, "allowfullscreen"),
15144                params = 'theme=' + tarteaucitron.getElemAttr(x, "theme") + '&rel=' + tarteaucitron.getElemAttr(x, "rel") + '&controls=' + tarteaucitron.getElemAttr(x, "controls") + '&showinfo=' + tarteaucitron.getElemAttr(x, "showinfo") + '&autoplay=' + tarteaucitron.getElemAttr(x, "autoplay") + '&mute=' + tarteaucitron.getElemAttr(x, "mute");
15145
15146            if (playlist_id === undefined) {
15147                return "";
15148            }
15149            if (video_width !== undefined) {
15150                frame_width += '"' + video_width + '" ';
15151            } else {
15152                frame_width += '"" ';
15153            }
15154            if (video_height !== undefined) {
15155                frame_height += '"' + video_height + '" ';
15156            } else {
15157                frame_height += '"" ';
15158            }
15159            video_frame = '<iframe title="' + frame_title + '" type="text/html" ' + frame_width + frame_height + ' src="//www.youtube-nocookie.com/embed/videoseries?list=' + playlist_id + '&' + params + '"' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
15160            return video_frame;
15161        });
15162    },
15163    "fallback": function () {
15164        "use strict";
15165        var id = 'youtubeplaylist';
15166        tarteaucitron.fallback(['youtube_playlist_player'], function (elem) {
15167            elem.style.width = elem.getAttribute('width') + 'px';
15168            elem.style.height = elem.getAttribute('height') + 'px';
15169            return tarteaucitron.engage(id);
15170        });
15171    }
15172};
15173
15174// zopim
15175tarteaucitron.services.zopim = {
15176    "key": "zopim",
15177    "type": "support",
15178    "name": "Zopim",
15179    "uri": "https://www.zopim.com/privacy",
15180    "needConsent": true,
15181    "cookies": ['__zlcid', '__zprivacy'],
15182    "js": function () {
15183        "use strict";
15184        if (tarteaucitron.user.zopimID === undefined) {
15185            return;
15186        }
15187        tarteaucitron.addScript('//v2.zopim.com/?' + tarteaucitron.user.zopimID);
15188    }
15189};
15190
15191// kameleoon
15192tarteaucitron.services.kameleoon = {
15193    "key": "kameleoon",
15194    "type": "analytic",
15195    "name": "Kameleoon",
15196    "uri": "https://www.kameleoon.com/fr/compliance/rgpd",
15197    "needConsent": true,
15198    "cookies": [],
15199    "js": function () {
15200        "use strict";
15201        if (tarteaucitron.user.kameleoon !== undefined) {
15202            tarteaucitron.addScript("https://" + tarteaucitron.user.kameleoon + ".kameleoon.eu/kameleoon.js");
15203        }
15204    }
15205};
15206
15207// linkedin insight
15208tarteaucitron.services.linkedininsighttag = {
15209    "key": "linkedininsighttag",
15210    "type": "ads",
15211    "name": "Linkedin Insight",
15212    "uri": "https://www.linkedin.com/legal/cookie_policy",
15213    "needConsent": true,
15214    "cookies": [],
15215    "js": function () {
15216        "use strict";
15217        if (tarteaucitron.user.linkedininsighttag !== undefined) {
15218            window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
15219            window._linkedin_data_partner_ids.push(tarteaucitron.user.linkedininsighttag);
15220        }
15221
15222        tarteaucitron.addScript('https://snap.licdn.com/li.lms-analytics/insight.min.js');
15223    }
15224};
15225
15226// xiti smartTag
15227tarteaucitron.services.xiti_smarttag = {
15228    "key": "xiti_smarttag",
15229    "type": "analytic",
15230    "name": "Xiti (SmartTag)",
15231    "uri": "https://www.atinternet.com/rgpd-et-vie-privee/",
15232    "needConsent": true,
15233    "cookies": ["atidvisitor", "atreman", "atredir", "atsession", "attvtreman", "attvtsession"],
15234    "js": function () {
15235        "use strict";
15236        if (tarteaucitron.user.xiti_smarttagLocalPath !== undefined) {
15237            tarteaucitron.addScript(tarteaucitron.user.xiti_smarttagLocalPath, 'smarttag', null, null, "onload", "addTracker();");
15238        } else {
15239            var xitiSmarttagId = tarteaucitron.user.xiti_smarttagSiteId;
15240            if (xitiSmarttagId === undefined) {
15241                return;
15242            }
15243
15244            tarteaucitron.addScript('//tag.aticdn.net/' + xitiSmarttagId + '/smarttag.js', 'smarttag', null, null, "onload", "addTracker();");
15245        }
15246    }
15247};
15248
15249// facebook pixel
15250tarteaucitron.services.facebookpixel = {
15251    "key": "facebookpixel",
15252    "type": "ads",
15253    "name": "Facebook Pixel",
15254    "uri": "https://www.facebook.com/policy.php",
15255    "needConsent": true,
15256    "cookies": ['datr', 'fr', 'reg_ext_ref', 'reg_fb_gate', 'reg_fb_ref', 'sb', 'wd', 'x-src', '_fbp'],
15257    "js": function () {
15258        "use strict";
15259        var n;
15260        if (window.fbq) return;
15261        n = window.fbq = function () { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments) };
15262        if (!window._fbq) window._fbq = n;
15263        n.push = n;
15264        n.loaded = !0;
15265        n.version = '2.0';
15266        n.queue = [];
15267        tarteaucitron.addScript('https://connect.facebook.net/en_US/fbevents.js');
15268        fbq('init', tarteaucitron.user.facebookpixelId);
15269        fbq('track', 'PageView');
15270
15271        if (typeof tarteaucitron.user.facebookpixelMore === 'function') {
15272            tarteaucitron.user.facebookpixelMore();
15273        }
15274    }
15275};
15276
15277//Issuu
15278tarteaucitron.services.issuu = {
15279    "key": "issuu",
15280    "type": "other",
15281    "name": "Issuu",
15282    "uri": "https://issuu.com/legal/privacy",
15283    "needConsent": true,
15284    "cookies": ['__qca', 'iutk', 'mc'],
15285    "js": function () {
15286        "use strict";
15287        tarteaucitron.fallback(['issuu_player'], function (x) {
15288            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Issuu iframe'),
15289                issuu_id = x.getAttribute("issuuID"),
15290                issuu_width = x.getAttribute("width"),
15291                frame_width = 'width=',
15292                issuu_height = x.getAttribute("height"),
15293                frame_height = 'height=',
15294                issuu_frame,
15295                issuu_embed;
15296
15297            if (issuu_id === undefined) {
15298                return "";
15299            }
15300            if (issuu_width !== undefined) {
15301                frame_width += '"' + issuu_width + '" ';
15302            } else {
15303                frame_width += '"" ';
15304            }
15305            if (issuu_height !== undefined) {
15306                frame_height += '"' + issuu_height + '" ';
15307            } else {
15308                frame_height += '"" ';
15309            }
15310
15311
15312            if (issuu_id.match(/\d+\/\d+/)) { issuu_embed = '#' + issuu_id; } else if (issuu_id.match(/d=(.*)&u=(.*)/)) { issuu_embed = '?' + issuu_id; }
15313
15314
15315            issuu_frame = '<iframe title="' + frame_title + '" type="text/html" ' + frame_width + frame_height + ' src="//e.issuu.com/embed.html' + issuu_embed + '"></iframe>';
15316
15317            return issuu_frame;
15318        });
15319    },
15320    "fallback": function () {
15321        "use strict";
15322        var id = 'issuu';
15323        tarteaucitron.fallback(['issuu_player'], function (elem) {
15324            elem.style.width = elem.getAttribute('width') + 'px';
15325            elem.style.height = elem.getAttribute('height') + 'px';
15326            return tarteaucitron.engage(id);
15327        });
15328    }
15329};
15330
15331// webmecanik
15332tarteaucitron.services.webmecanik = {
15333    "key": "webmecanik",
15334    "type": "analytic",
15335    "name": "Webmecanik",
15336    "uri": "https://webmecanik.com/tos",
15337    "needConsent": true,
15338    "cookies": ['mtc_id', 'mtc_sid'],
15339    "js": function () {
15340        "use strict";
15341        if (tarteaucitron.user.webmecanikurl === undefined) {
15342            return;
15343        }
15344
15345        window.MauticTrackingObject = 'mt';
15346        window.mt = window.mt || function () {
15347            window.mt.q = window.mt.q || [];
15348            window.mt.q.push(arguments);
15349        };
15350
15351        tarteaucitron.addScript(tarteaucitron.user.webmecanikurl, '', function () {
15352            mt('send', 'pageview');
15353        });
15354    }
15355};
15356
15357// google analytics multiple
15358tarteaucitron.services.multiplegtag = {
15359    "key": "multiplegtag",
15360    "type": "analytic",
15361    "name": "Google Analytics (gtag.js)",
15362    "uri": "https://support.google.com/analytics/answer/6004245",
15363    "needConsent": true,
15364    "cookies": (function () {
15365
15366        var cookies = ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '_gcl_au'];
15367
15368        if (tarteaucitron.user.multiplegtagUa !== undefined) {
15369            tarteaucitron.user.multiplegtagUa.forEach(function (ua) {
15370                cookies.push('_gat_gtag_' + ua.replace(/-/g, '_'));
15371                cookies.push('_ga_' + ua.replace(/G-/g, ''));
15372            });
15373        }
15374
15375        return cookies;
15376    })(),
15377    "js": function () {
15378        "use strict";
15379        window.dataLayer = window.dataLayer || [];
15380
15381        if (tarteaucitron.user.multiplegtagUa !== undefined) {
vendor: 14,025 bytes, lines 15382-15743
15382            tarteaucitron.user.multiplegtagUa.forEach(function (ua) {
15383                tarteaucitron.addScript('https://www.googletagmanager.com/gtag/js?id=' + ua, '', function () {
15384                    window.gtag = function gtag() { dataLayer.push(arguments); }
15385                    gtag('js', new Date());
15386                    var additional_config_info = (timeExpire !== undefined) ? {'anonymize_ip': true, 'cookie_expires': timeExpire / 1000} : {'anonymize_ip': true};
15387                    gtag('config', ua, additional_config_info);
15388                });
15389            });
15390        }
15391    }
15392};
15393
15394// Koban
15395tarteaucitron.services.koban = {
15396    "key": "koban",
15397    "type": "analytic",
15398    "name": "Koban",
15399    "uri": "https://koban.cloud/tos",
15400    "needConsent": true,
15401    "cookies": ['kbntrk'],
15402    "js": function () {
15403        "use strict";
15404        if (tarteaucitron.user.kobanurl === undefined) {
15405            return;
15406        }
15407        if (tarteaucitron.user.kobanapi === undefined) {
15408            return;
15409        }
15410        window.KobanObject = 'kb';
15411        window.kb = window.kb || function () {
15412            window.kb.q = window.kb.q || [];
15413            window.kb.q.push(arguments);
15414        };
15415        window.kb.l = new Date();
15416        kb('reg', tarteaucitron.user.kobanapi);
15417        tarteaucitron.addScript(tarteaucitron.user.kobanurl, '', function () {
15418        });
15419    }
15420};
15421
15422// matomo
15423
15424/*
15425    1. Set the following variable before the initialization :
15426
15427    tarteaucitron.user.matomoId = YOUR_SITE_ID_FROM_MATOMO;
15428    tarteaucitron.user.matomoHost = "YOUR_MATOMO_URL"; //eg: https://stat.mydomain.com/
15429
15430    2. Push the service :
15431
15432    (tarteaucitron.job = tarteaucitron.job || []).push('matomo');  // (or 'matomocloud' for cloud version)
15433
15434    3. HTML
15435    You don't need to add any html code, if the service is authorized, the javascript is added. otherwise no.
15436 */
15437tarteaucitron.services.matomo = {
15438    "key": "matomo",
15439    "type": "analytic",
15440    "name": "Matomo (privacy by design)",
15441    "uri": "https://matomo.org/faq/general/faq_146/",
15442    "needConsent": false,
15443    "cookies": ['_pk_ref', '_pk_cvar', '_pk_id', '_pk_ses', '_pk_hsr', 'piwik_ignore', '_pk_uid'],
15444    "js": function () {
15445        "use strict";
15446        if (tarteaucitron.user.matomoId === undefined) {
15447            return;
15448        }
15449
15450        window._paq = window._paq || [];
15451        window._paq.push(["setSiteId", tarteaucitron.user.matomoId]);
15452        window._paq.push(["setTrackerUrl", tarteaucitron.user.matomoHost + "piwik.php"]);
15453        window._paq.push(["setDoNotTrack", 1]);
15454        window._paq.push(["trackPageView"]);
15455        window._paq.push(["setIgnoreClasses", ["no-tracking", "colorbox"]]);
15456        window._paq.push(["enableLinkTracking"]);
15457        window._paq.push([function () {
15458            var self = this;
15459            function getOriginalVisitorCookieTimeout() {
15460                var now = new Date(),
15461                    nowTs = Math.round(now.getTime() / 1000),
15462                    visitorInfo = self.getVisitorInfo();
15463                var createTs = parseInt(visitorInfo[2]);
15464                var cookieTimeout = 33696000; // 13 mois en secondes
15465                var originalTimeout = createTs + cookieTimeout - nowTs;
15466                return originalTimeout;
15467            }
15468            this.setVisitorCookieTimeout(getOriginalVisitorCookieTimeout());
15469        }]);
15470
15471        tarteaucitron.addScript(tarteaucitron.user.matomoHost + 'piwik.js', '', '', true, 'defer', true);
15472
15473        // waiting for piwik to be ready to check first party cookies
15474        var interval = setInterval(function () {
15475            if (typeof Piwik === 'undefined') return
15476
15477            clearInterval(interval)
15478
15479            // make piwik/matomo cookie accessible by getting tracker
15480            Piwik.getTracker();
15481
15482            // looping throught cookies
15483            var theCookies = document.cookie.split(';');
15484            for (var i = 1; i <= theCookies.length; i++) {
15485                var cookie = theCookies[i - 1].split('=');
15486                var cookieName = cookie[0].trim();
15487
15488                // if cookie starts like a piwik one, register it
15489                if (cookieName.indexOf('_pk_') === 0) {
15490                    tarteaucitron.services.matomo.cookies.push(cookieName);
15491                }
15492            }
15493        }, 100)
15494    }
15495};
15496
15497
15498tarteaucitron.services.matomohightrack = {
15499    "key": "matomohightrack",
15500    "type": "analytic",
15501    "name": "Matomo",
15502    "uri": "https://matomo.org/faq/general/faq_146/",
15503    "needConsent": false,
15504    "cookies": ['_pk_ref', '_pk_cvar', '_pk_id', '_pk_ses', '_pk_hsr', 'piwik_ignore', '_pk_uid'],
15505    "js": function () {
15506        "use strict";
15507        if (tarteaucitron.user.matomoId === undefined) {
15508            return;
15509        }
15510
15511        window._paq = window._paq || [];
15512        window._paq.push(["setSiteId", tarteaucitron.user.matomoId]);
15513        window._paq.push(["setTrackerUrl", tarteaucitron.user.matomoHost + "piwik.php"]);
15514        window._paq.push(["trackPageView"]);
15515        window._paq.push(["setIgnoreClasses", ["no-tracking", "colorbox"]]);
15516        window._paq.push(["enableLinkTracking"]);
15517        window._paq.push([function () {
15518            var self = this;
15519        }]);
15520
15521        tarteaucitron.addScript(tarteaucitron.user.matomoHost + 'piwik.js', '', '', true, 'defer', true);
15522
15523        // waiting for piwik to be ready to check first party cookies
15524        var interval = setInterval(function () {
15525            if (typeof Piwik === 'undefined') return
15526
15527            clearInterval(interval)
15528            Piwik.getTracker();
15529
15530            var theCookies = document.cookie.split(';');
15531            for (var i = 1; i <= theCookies.length; i++) {
15532                var cookie = theCookies[i - 1].split('=');
15533                var cookieName = cookie[0].trim();
15534
15535                if (cookieName.indexOf('_pk_') === 0) {
15536                    tarteaucitron.services.matomo.cookies.push(cookieName);
15537                }
15538            }
15539        }, 100)
15540    }
15541};
15542
15543
15544tarteaucitron.services.matomocloud = {
15545    "key": "matomocloud",
15546    "type": "analytic",
15547    "name": "Matomo Cloud (privacy by design)",
15548    "uri": "https://matomo.org/faq/general/faq_146/",
15549    "needConsent": false,
15550    "cookies": ['_pk_ref', '_pk_cvar', '_pk_id', '_pk_ses', '_pk_hsr', 'mtm_consent', 'matomo_ignore', 'matomo_sessid'],
15551    "js": function () {
15552        "use strict";
15553        if (tarteaucitron.user.matomoId === undefined) {
15554            return;
15555        }
15556
15557        window._paq = window._paq || [];
15558        window._paq.push(["setSiteId", tarteaucitron.user.matomoId]);
15559        window._paq.push(["setTrackerUrl", tarteaucitron.user.matomoHost + "matomo.php"]);
15560        window._paq.push(["setDoNotTrack", 1]);
15561        window._paq.push(["trackPageView"]);
15562        window._paq.push(["setIgnoreClasses", ["no-tracking", "colorbox"]]);
15563        window._paq.push(["enableLinkTracking"]);
15564        window._paq.push([function () {
15565            var self = this;
15566            function getOriginalVisitorCookieTimeout() {
15567                var now = new Date(),
15568                    nowTs = Math.round(now.getTime() / 1000),
15569                    visitorInfo = self.getVisitorInfo();
15570                var createTs = parseInt(visitorInfo[2]);
15571                var cookieTimeout = 33696000; // 13 mois en secondes
15572                var originalTimeout = createTs + cookieTimeout - nowTs;
15573                return originalTimeout;
15574            }
15575            this.setVisitorCookieTimeout(getOriginalVisitorCookieTimeout());
15576        }]);
15577
15578        if (tarteaucitron.user.matomoCustomJSPath === undefined) {
15579            tarteaucitron.addScript('https://cdn.matomo.cloud/matomo.js', '', '', true, 'defer', true);
15580        } else {
15581            tarteaucitron.addScript(tarteaucitron.user.matomoCustomJSPath, '', '', true, 'defer', true);
15582        }
15583
15584        // waiting for Matomo to be ready to check first party cookies
15585        var interval = setInterval(function () {
15586            if (typeof Matomo === 'undefined') return
15587
15588            clearInterval(interval)
15589
15590            // make Matomo cookie accessible by getting tracker
15591            Matomo.getTracker();
15592
15593            // looping through cookies
15594            var theCookies = document.cookie.split(';');
15595            for (var i = 1; i <= theCookies.length; i++) {
15596                var cookie = theCookies[i - 1].split('=');
15597                var cookieName = cookie[0].trim();
15598
15599                // if cookie starts like a matomo one, register it
15600                if (cookieName.indexOf('_pk_') === 0) {
15601                    tarteaucitron.services.matomo.cookies.push(cookieName);
15602                }
15603            }
15604        }, 100)
15605    }
15606};
15607
15608// matomotm
15609tarteaucitron.services.matomotm = {
15610    "key": "matomotm",
15611    "type": "api",
15612    "name": "Matomo Tag Manager",
15613    "uri": "https://matomo.org/privacy/",
15614    "needConsent": true,
15615    "cookies": [],
15616    "js": function () {
15617        "use strict";
15618        if (tarteaucitron.user.matomotmUrl === undefined) {
15619            return;
15620        }
15621
15622        var _mtm = window._mtm = window._mtm || [];
15623        _mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'});
15624
15625        tarteaucitron.addScript(tarteaucitron.user.matomotmUrl);
15626    }
15627};
15628
15629
15630// Hotjar
15631/*
15632   1. Set the following variable before the initialization :
15633    tarteaucitron.user.hotjarId = YOUR_WEBSITE_ID;
15634   tarteaucitron.user.HotjarSv = XXXX; // Can be found in your website tracking code as "hjvs=XXXX"
15635    2. Push the service :
15636    (tarteaucitron.job = tarteaucitron.job || []).push('hotjar');
15637    3. HTML
15638   You don't need to add any html code, if the service is autorized, the javascript is added. otherwise no.
15639 */
15640tarteaucitron.services.hotjar = {
15641    "key": "hotjar",
15642    "type": "analytic",
15643    "name": "Hotjar",
15644    "uri": "https://help.hotjar.com/hc/en-us/categories/115001323967-About-Hotjar",
15645    "needConsent": true,
15646    "cookies": ["hjClosedSurveyInvites", "_hjDonePolls", "_hjMinimizedPolls", "_hjDoneTestersWidgets", "_hjMinimizedTestersWidgets", "_hjDoneSurveys", "_hjIncludedInSample", "_hjShownFeedbackMessage", "_hjAbsoluteSessionInProgress", "_hjIncludeInPageviewSample", "_hjid"],
15647    "js": function () {
15648        "use strict";
15649        if (tarteaucitron.user.hotjarId === undefined || tarteaucitron.user.HotjarSv === undefined) {
15650            return;
15651        }
15652        window.hj = window.hj || function () {
15653            (window.hj.q = window.hj.q || []).push(arguments)
15654        };
15655        window._hjSettings = {
15656            hjid: tarteaucitron.user.hotjarId,
15657            hjsv: tarteaucitron.user.HotjarSv
15658        };
15659        var uri = 'https://static.hotjar.com/c/hotjar-';
15660        var extension = '.js?sv=';
15661        tarteaucitron.addScript(uri + window._hjSettings.hjid + extension + window._hjSettings.hjsv);
15662    }
15663};
15664
15665// bing ads universal event tracking
15666tarteaucitron.services.bingads = {
15667    'key': 'bingads',
15668    'type': 'ads',
15669    'name': 'Bing Ads Universal Event Tracking',
15670    'uri': 'https://advertise.bingads.microsoft.com/en-us/resources/policies/personalized-ads',
15671    'needConsent': true,
15672    'cookies': ['_uetmsclkid', '_uetvid', '_uetsid'],
15673    'js': function () {
15674        'use strict';
15675        //var u = tarteaucitron.user.bingadsTag || 'uetq';
15676        window.uetq = window.uetq || [];
15677
15678        tarteaucitron.addScript('https://bat.bing.com/bat.js', '', function () {
15679            var bingadsCreate = { ti: tarteaucitron.user.bingadsID };
15680
15681            if ('bingadsStoreCookies' in tarteaucitron.user) {
15682                bingadsCreate['storeConvTrackCookies'] = tarteaucitron.user.bingadsStoreCookies;
15683            }
15684
15685            bingadsCreate.q = window.uetq;
15686            window.uetq = new UET(bingadsCreate);
15687            window.uetq.push('pageLoad');
15688
15689            if (typeof tarteaucitron.user.bingadsMore === 'function') {
15690                tarteaucitron.user.bingadsMore();
15691            }
15692        });
15693    }
15694};
15695
15696//Matterport
15697tarteaucitron.services.matterport = {
15698    "key": "matterport",
15699    "type": "other",
15700    "name": "Matterport",
15701    "uri": "https://matterport.com/es/legal/privacy-policy/",
15702    "needConsent": true,
15703    "cookies": ['__cfduid', 'ajs_anonymous_id', 'ajs_group_id', 'ajs_user_id'],
15704    "js": function () {
15705        "use strict";
15706        tarteaucitron.fallback(['matterport'], function (x) {
15707            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Matterport iframe'),
15708                matterport_id = x.getAttribute("matterportID"),
15709                matterport_width = x.getAttribute("width"),
15710                frame_width = 'width=',
15711                matterport_height = x.getAttribute("height"),
15712                frame_height = 'height=',
15713                matterport_parameters = x.getAttribute("parameters"),
15714                matterport_allowfullscreen = x.getAttribute('allowfullscreen'),
15715                matterport_frame;
15716
15717            if (matterport_id === undefined) {
15718                return "";
15719            }
15720            if (matterport_width !== undefined) {
15721                frame_width += '"' + matterport_width + '" ';
15722            } else {
15723                frame_width += '"" ';
15724            }
15725            if (matterport_height !== undefined) {
15726                frame_height += '"' + matterport_height + '" ';
15727            } else {
15728                frame_height += '"" ';
15729            }
15730            if (matterport_parameters === undefined) {
15731                return "";
15732            }
15733
15734            matterport_frame = '<iframe title="' + frame_title + '" type="text/html" ' + frame_width + frame_height + ' src="https://my.matterport.com/show/?m=' + matterport_id + '&utm_source=hit-content' + matterport_parameters + '"' + (matterport_allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
15735            return matterport_frame;
15736        });
15737    },
15738    "fallback": function () {
15739        "use strict";
15740        var id = 'matterport';
15741        tarteaucitron.fallback(['matterport'], function (elem) {
15742            elem.style.width = elem.getAttribute('width') + 'px';
15743            elem.style.height = elem.getAttribute('height') + 'px'
vendor: 4,453 bytes, lines 15743-15889
15743;
15744            return tarteaucitron.engage(id);
15745        });
15746    }
15747};
15748
15749// Adform
15750tarteaucitron.services.adform = {
15751    "key": "adform",
15752    "type": "ads",
15753    "name": "Adform",
15754    "uri": "https://site.adform.com/privacy-center/overview/",
15755    "needConsent": true,
15756    "cookies": [],
15757    "js": function () {
15758        "use strict";
15759
15760        if (tarteaucitron.user.adformpm === undefined || tarteaucitron.user.adformpagename === undefined) {
15761            return;
15762        }
15763
15764        window._adftrack = {
15765            pm: tarteaucitron.user.adformpm,
15766            divider: encodeURIComponent('|'),
15767            pagename: encodeURIComponent(tarteaucitron.user.adformpagename)
15768        };
15769
15770        tarteaucitron.addScript("https://track.adform.net/serving/scripts/trackpoint/async/");
15771    }
15772};
15773
15774// Active Campaign
15775tarteaucitron.services.activecampaign = {
15776    "key": "activecampaign",
15777    "type": "ads",
15778    "name": "Active Campaign",
15779    "uri": "https://www.activecampaign.com/privacy-policy/",
15780    "needConsent": true,
15781    "cookies": [],
15782    "js": function () {
15783        "use strict";
15784        if (tarteaucitron.user.actid === undefined) {
15785            return;
15786        }
15787
15788        window.trackcmp_email = '';
15789
15790        tarteaucitron.addScript('https://trackcmp.net/visit?actid=' + tarteaucitron.user.actid + '&e=' + encodeURIComponent(trackcmp_email) + '&r=' + encodeURIComponent(document.referrer) + '&u=' + encodeURIComponent(window.location.href));
15791    }
15792};
15793
15794// tawk.to
15795tarteaucitron.services.tawkto = {
15796    "key": "tawkto",
15797    "type": "support",
15798    "name": "Tawk.to chat",
15799    "uri": "https://www.tawk.to/data-protection/",
15800    "needConsent": true,
15801    "cookies": [],
15802    "js": function () {
15803        "use strict";
15804        if (tarteaucitron.user.tawktoId === undefined) {
15805            return;
15806        }
15807
15808        tarteaucitron.user.tawktoWidgetId = tarteaucitron.user.tawktoWidgetId || 'default';
15809
15810        window.Tawk_API = window.Tawk_API || {};
15811        window.Tawk_LoadStart = new Date();
15812
15813        tarteaucitron.addScript('https://embed.tawk.to/' + tarteaucitron.user.tawktoId + '/' + tarteaucitron.user.tawktoWidgetId);
15814    }
15815
15816};
15817
15818// getquanty
15819tarteaucitron.services.getquanty = {
15820    "key": "getquanty",
15821    "type": "analytic",
15822    "name": "GetQuanty",
15823    "uri": "https://www.getquanty.com/mentions-legales/",
15824    "needConsent": true,
15825    "cookies": ['_first_pageview', 'eqy_sessionid', 'eqy_siteid', 'cluid', 'eqy_company', 'cluid', 'gq_utm', '_jsuid'],
15826    "js": function () {
15827        "use strict";
15828        if (tarteaucitron.user.getguanty === undefined) {
15829            return;
15830        }
15831
15832        if (tarteaucitron.user.getquantyAlreadyLoaded !== undefined) {
15833            return;
15834        }
15835
15836        tarteaucitron.addScript('https://get.smart-data-systems.com/gq?site_id=' + tarteaucitron.user.getguanty + '&consent=1');
15837    },
15838    "fallback": function () {
15839        "use strict";
15840        if (tarteaucitron.user.getguanty === undefined) {
15841            return;
15842        }
15843
15844        tarteaucitron.user.getquantyAlreadyLoaded = true;
15845
15846        tarteaucitron.addScript('https://get.smart-data-systems.com/gq?site_id=' + tarteaucitron.user.getguanty + '&notrack=1');
15847    }
15848};
15849
15850// emolytics
15851tarteaucitron.services.emolytics = {
15852    "key": "emolytics",
15853    "type": "analytic",
15854    "name": "Emolytics",
15855    "uri": "https://www.emolytics.com/main/privacy-policy.php",
15856    "needConsent": true,
15857    "cookies": ['__hssc', '__hssrc', '__hstc', '_ga', '_gid', 'hubspotutk', 'lang', 'incap_ses_', 'nlbi_', 'visid_incap_'],
15858    "js": function () {
15859        "use strict";
15860        if (tarteaucitron.user.emolyticsID === undefined) {
15861            return;
15862        }
15863        var scriptEmolytics = document.createElement('script');
15864        scriptEmolytics.text = 'var getsmily_id="' + tarteaucitron.user.emolyticsID + '";';
15865        document.getElementsByTagName('body')[0].appendChild(scriptEmolytics);
15866        tarteaucitron.addScript('https://cdn.emolytics.com/script/emolytics-widget.js')
15867    }
15868};
15869
15870// youtubeapi
15871tarteaucitron.services.youtubeapi = {
15872    "key": "youtubeapi",
15873    "type": "video",
15874    "name": "Youtube (Js API)",
15875    "uri": "https://policies.google.com/privacy",
15876    "needConsent": true,
15877    "cookies": [],
15878    "js": function () {
15879        "use strict";
15880        tarteaucitron.addScript('https://www.youtube.com/player_api');
15881    }
15882};
15883
15884// Facil'ITI
15885tarteaucitron.services.faciliti = {
15886    "key": "faciliti",
15887    "type": "other",
15888    "name": "Facil'ITI",
15889    "uri": "https://w
vendor: 5,956 bytes, lines 15889-16042
15889s.facil-iti.com/mentions-legales.html",
15890    "needConsent": true,
15891    "cookies": ['FACIL_ITI_LS'],
15892    "js": function () {
15893        "use strict";
15894        if (tarteaucitron.user.facilitiID === undefined) {
15895            return;
15896        }
15897
15898        (function (w, d, s, f) {
15899            w[f] = w[f] || { conf: function () { (w[f].data = w[f].data || []).push(arguments); } };
15900            var l = d.createElement(s), e = d.getElementsByTagName(s)[0];
15901            l.async = 1; l.src = 'https://ws.facil-iti.com/tag/faciliti-tag.min.js'; e.parentNode.insertBefore(l, e);
15902        }(window, document, 'script', 'FACIL_ITI'));
15903        FACIL_ITI.conf('userId', tarteaucitron.user.facilitiID);
15904    }
15905};
15906
15907// userlike
15908tarteaucitron.services.userlike = {
15909    "key": "userlike",
15910    "type": "support",
15911    "name": "Userlike",
15912    "uri": "https://www.userlike.com/en/terms#privacy-policy",
15913    "needConsent": true,
15914    "cookies": ['uslk_s', 'uslk_e'],
15915    "js": function () {
15916        "use strict";
15917        if (tarteaucitron.user.userlikeKey === undefined) {
15918            return;
15919        }
15920        tarteaucitron.addScript('//userlike-cdn-widgets.s3-eu-west-1.amazonaws.com/' + tarteaucitron.user.userlikeKey);
15921    }
15922};
15923
15924// adobeanalytics
15925tarteaucitron.services.adobeanalytics = {
15926    "key": "adobeanalytics",
15927    "type": "analytic",
15928    "name": "Adobe Analytics",
15929    "uri": "https://www.adobe.com/privacy/policy.html",
15930    "needConsent": true,
15931    "cookies": ['s_ecid', 's_cc', 's_sq', 's_vi', 's_fid'],
15932    "js": function () {
15933        "use strict";
15934        if (tarteaucitron.user.adobeanalyticskey === undefined) {
15935            return;
15936        }
15937        tarteaucitron.addScript('//assets.adobedtm.com/launch-' + tarteaucitron.user.adobeanalyticskey + '.min.js');
15938    }
15939};
15940
15941// woopra customer journey analytics
15942tarteaucitron.services.woopra = {
15943    'key': 'woopra',
15944    'type': 'analytic',
15945    'name': 'Woopra Customer Journey Analytics',
15946    'uri': 'https://www.woopra.com/privacy',
15947    'needConsent': true,
15948    'cookies': ['wooTracker', 'intercom-session-erbfalba', 'intercom-id-erbfalba'],
15949    'js': function () {
15950        'use strict';
15951        //var w = tarteaucitron.user.woopraDomain;
15952        //window[w] = window[w] || [];
15953
15954        (function () {
15955            var t, i, e, n = window, o = document, a = arguments, s = "script", r = ["config", "track", "identify", "visit", "push", "call", "trackForm", "trackClick"], c = function () { var t, i = this; for (i._e = [], t = 0; r.length > t; t++)(function (t) { i[t] = function () { return i._e.push([t].concat(Array.prototype.slice.call(arguments, 0))), i } })(r[t]) }; for (n._w = n._w || {}, t = 0; a.length > t; t++)n._w[a[t]] = n[a[t]] = n[a[t]] || new c; i = o.createElement(s), i.async = 1, i.src = "//static.woopra.com/js/w.js", e = o.getElementsByTagName(s)[0], e.parentNode.insertBefore(i, e)
15956        })("woopra");
15957
15958        woopra.config({
15959            domain: tarteaucitron.user.woopraDomain
15960        });
15961        woopra.track();
15962    }
15963};
15964
15965// ausha
15966tarteaucitron.services.ausha = {
15967    key: "ausha",
15968    type: "video",
15969    name: "Ausha",
15970    uri: "https://www.ausha.co/protection-personal-data/",
15971    needConsent: true,
15972    cookies: [],
15973    js: function () {
15974        "use strict";
15975        tarteaucitron.fallback(['ausha_player'], function (x) {
15976            var player_height = x.getAttribute('data-height'),
15977                podcast_id = x.getAttribute('data-podcast-id'),
15978                player_id = x.getAttribute('data-player-id'),
15979                playlist = x.getAttribute('data-playlist'),
15980                useshowid = x.getAttribute('data-useshowid'),
15981                color = x.getAttribute('data-color');
15982
15983            if (podcast_id === undefined) {
15984                return "";
15985            }
15986
15987            var src = 'https://player.ausha.co/index.html?podcastId=' + podcast_id + '&v=3';
15988
15989            if (useshowid == "1") {
15990                src = 'https://player.ausha.co/index.html?showId=' + podcast_id + '&v=3';
15991            }
15992
15993            if (playlist && playlist.length > 0) src += '&playlist=' + playlist;
15994            if (color && color.length > 0) src += '&color=' + color.replace('#', '%23');
15995            if (player_id && player_id.length > 0) src += '&playerId=' + player_id;
15996
15997            return '<iframe id="' + player_id + '" loading="lazy" width="100%" height="' + player_height + '" scrolling="no" frameborder="no" src="' + src + '"></iframe>';
15998        });
15999
16000        tarteaucitron.addScript('//player.ausha.co/ausha-player.js', 'ausha-player');
16001    },
16002    fallback: function () {
16003        "use strict";
16004        tarteaucitron.fallback(['ausha_player'], function (elem) {
16005            elem.style.height = elem.getAttribute('data-height') + 'px';
16006            return tarteaucitron.engage('ausha');
16007        });
16008    }
16009};
16010
16011// visiblee
16012tarteaucitron.services.visiblee = {
16013    key: "visiblee",
16014    type: "analytic",
16015    name: "Visiblee",
16016    uri: "http://confidentiality.visiblee.io/fr/confidentialite",
16017    needConsent: true,
16018    cookies: ["visitor_v2", tarteaucitron.user.visibleedomain, "check", "campaign_ref_" + tarteaucitron.user.visibleedomain, "reload_" + tarteaucitron.user.visibleedomain],
16019    js: function () {
16020        "use strict";
16021
16022        if (tarteaucitron.user.visibleeclientid === undefined) {
16023            return;
16024        }
16025        tarteaucitron.addScript('//www.link-page.info/tracking_' + tarteaucitron.user.visibleeclientid + '.js', 'visiblee');
16026    }
16027};
16028
16029// bandcamp
16030tarteaucitron.services.bandcamp = {
16031    key: "bandcamp",
16032    type: "video",
16033    name: "Bandcamp",
16034    uri: "https://bandcamp.com",
16035    readmoreLink: "https://bandcamp.com/privacy",
16036    needConsent: true,
16037    cookies: ['client_id', 'BACKENDID', '_comm_playlist'],
16038    js: function () {
16039        "use strict";
16040        tarteaucitron.fallback(['bandcamp_player'], function (x) {
16041            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Bandcamp iframe'),
16042                album_id = x.getAttribute("albumID"),
16043                bandcamp_width = x.getAttribute("width"),
16044                frame_width = 'width=',
16045                bandcamp_height = x.getAttribute("height"),
16046                frame_height = 'height=',
16047                attrs = ["size", "bgcol", "linkcol", "artwork", "minimal", "tracklist", "package", "transparent"],
16048                params = attrs.filter(function (a) {
16049                    return x.getAttribute(a) !== null;
16050                }).map(function (a) {
16051                    if (a && a.length > 0) return a + "=" + x.getAttribute(a);
16052                }).join("/");
16053
16054            if (album_id === null) {
16055                return "";
16056            }
16057
16058            if (bandcamp_width !== null || bandcamp_width !== "") {
16059                frame_width += '"' + bandcamp_width + '" ';
16060            } else {
16061                frame_width += '"" ';
16062            }
16063            if (bandcamp_height !== null || bandcamp_height !== "") {
16064                frame_height += '"' + bandcamp_height + '" ';
16065            } else {
16066                frame_height += '"" ';
16067            }
16068
16069            var src = 'https://bandcamp.com/EmbeddedPlayer/album=' + album_id + '/' + params;
16070
16071            return '<iframe title="' + frame_title + '"' + frame_width + frame_height + 'src="' + src + '" frameborder="0" allowfullscreen seamless></iframe>';
16072        });
16073    },
16074    fallback: function () {
16075        "use strict";
16076        tarteaucitron.fallback(['bandcamp_player'], function (elem) {
16077            elem.style.width = elem.getAttribute('width');
16078            elem.style.height = elem.getAttribute('height');
16079            return tarteaucitron.engage('bandcamp');
16080        });
16081    }
16082};
16083
16084// Discord Widget
16085tarteaucitron.services.discord = {
16086    "key": "discord",
16087    "type": "social",
16088    "name": "Discord (Server Widget)",
16089    "needConsent": true,
16090    "cookies": ["__cfruid", "__dcfduid", "_ga", "_gcl_au", "OptanonConsent", "locale", "_gid"],
16091    "uri": "https://discord.com/privacy",
16092    "js": function () {
16093        "use strict";
16094        tarteaucitron.fallback(['discord_widget'], function (x) {
16095            var id = x.getAttribute("guildID"),
16096                width = x.getAttribute("width"),
16097                height = x.getAttribute("height")
16098            var widgetURL = "https://discord.com/widget?id=" + id;
16099            return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"" + widgetURL + "\"></iframe>";
16100        });
16101    },
16102    "fallback": function () {
16103        "use strict";
16104        var id = 'discord';
16105        tarteaucitron.fallback(['discord_widget'], function (elem) {
16106            elem.style.width = elem.getAttribute('width') + 'px';
16107            elem.style.height = elem.getAttribute('height') + 'px';
16108            return tarteaucitron.engage(id);
16109        });
16110    }
16111};
16112
16113// Google Maps
16114tarteaucitron.services.maps_noapi = {
16115    "key": "maps_noapi",
16116    "type": "other",
16117    "name": "Google Maps",
16118    "needConsent": true,
16119    "cookies": ["NID", "OGPC", "1P_JAR", "CONSENT"],
16120    "uri": "https://policies.google.com/privacy",
16121    "js": function () {
16122        "use strict";
16123        tarteaucitron.fallback(['googlemaps_embed'], function (x) {
16124            var id = x.getAttribute("id"),
16125                width = x.getAttribute("width"),
16126                height = x.getAttribute("height")
16127            var widgetURL = "https://google.com/maps/embed?pb=" + id;
16128            return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"" + widgetURL + "\" style=\"border:0;\" allowfullscreen=\"\" loading=\"lazy\"></iframe>";
16129        });
16130    },
16131    "fallback": function () {
16132        "use strict";
16133        var id = 'maps_noapi';
16134        tarteaucitron.fallback(['googlemaps_embed'], function (elem) {
16135            elem.style.width = elem.getAttribute('width') + 'px';
16136            elem.style.height = elem.getAttribute('height') + 'px';
16137            return tarteaucitron.engage(id);
16138        });
16139    }
16140};
16141
16142// hCaptcha
16143tarteaucitron.services.hcaptcha = {
16144    "key": "hcaptcha",
16145    "type": "other",
16146    "name": "hCaptcha",
16147    "needConsent": true,
16148    "cookies": [],
16149    "uri": "https://www.hcaptcha.com/privacy",
16150    "js": function () {
16151        "use strict";
16152        tarteaucitron.fallback(["h-captcha"], '');
16153        tarteaucitron.addScript("https://hcaptcha.com/1/api.js", "hcaptcha")
16154    },
16155    "fallback": function () {
16156        "use strict";
16157        var id = "hcaptcha";
16158        tarteaucitron.fallback(["h-captcha"], tarteaucitron.engage(id));
16159    }
16160};
16161
16162// France Culture
16163tarteaucitron.services.fculture = {
16164    "key": "fculture",
16165    "type": "video",
16166    "name": "France Culture",
16167    "needConsent": true,
16168    "cookies": ["_gid", "didomi_token", "outbrain_cid_fetch", "xtvrn", "xtant", "YSC", "ABTasty", "xtan", "ABTastySession", "xtidc", "_ga", "VISITOR_INFO1_LIVE", "euconsent-v2", "v1st", "dmvk", "ts", "VISITOR_INFO1_LIVE", "YSC"],
16169    "uri": "https://www.radiofrance.com/politique-d-utilisation-des-cookies-sur-les-sites-internet-du-groupe-radio-france",
16170    "js": function () {
16171        "use strict";
16172        tarteaucitron.fallback(['fculture_embed'], function (x) {
16173            var id = x.getAttribute('id'),
16174                width = x.getAttribute('width'),
16175                height = x.getAttribute('height');
16176            return "<iframe src=\"https://www.franceculture.fr/player/export-reecouter?content=" + id + "\" height=\"" + height + "\" width=\"" + width + "\"></iframe>"
16177        });
16178    },
16179    "fallback": function () {
16180        "use strict";
16181        var id = "fculture";
16182        tarteaucitron.fallback(["fculture_embed"], tarteaucitron.engage(id));
16183    }
16184};
16185
16186// Acast
16187tarteaucitron.services.acast = {
16188    "key": "acast",
16189    "type": "video",
16190    "name": "Acast",
16191    "needConsent": true,
16192    "cookies": ["intercom-id-ayi0335i", "intercom-session-ayi0335i"],
16193    "uri": "https://www.acast.com/en/privacy",
16194    "js": function () {
16195        "use strict";
16196        tarteaucitron.fallback(['acast_embed'], function (x) {
16197            var id = x.getAttribute('id1'),
16198                id2 = x.getAttribute('id2'),
16199                width = x.getAttribute('width'),
16200                height = x.getAttribute('height'),
16201                seek = x.getAttribute('seek');
16202            var widgetURL = "https://embed.acast.com/" + id + "/" + id2 + "?seek=" + seek;
16203            return "<iframe title=\"Embed Player\" width=\"" + width + "\" height=\"" + height + "\" src=\"" + widgetURL + "\" scrolling=\"no\" frameBorder=\"0\" style=\"border: none; overflow: hidden;\"></iframe>";
16204        });
16205    },
16206    "fallback": function () {
16207        "use strict";
16208        var id = "acast";
16209        tarteaucitron.fallback(["acast_embed"], tarteaucitron.engage(id));
16210    }
16211};
16212
16213// Mixcloud
16214tarteaucitron.services.mixcloud = {
16215    "key": "mixcloud",
16216    "type": "video",
16217    "name": "Mixcloud",
16218    "needConsent": true,
16219    "cookies": ["UID", "_gat", "__stripe_mid", "_gid", "_ga", "c", "csrftoken", "__stripe_sid", "mx_t"],
16220    "uri": "https://www.mixcloud.com/privacy/",
16221    "js": function () {
16222        "use strict";
16223        tarteaucitron.fallback(['mixcloud_embed'], function (x) {
16224            var id = x.getAttribute('id'),
16225                hidecover = x.getAttribute('hidecover'),
16226                mini = x.getAttribute('mini'),
16227                light = x.getAttribute('light'),
16228                width = x.getAttribute('width'),
16229                height = x.getAttribute('height');
16230            return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"https://www.mixcloud.com/widget/iframe/?hide_cover=" + hidecover + "&mini=" + mini + "&light=" + light + "&feed=" + id + "\" frameborder=\"0\" ></iframe>";
16231        });
16232    },
16233    "fallback": function () {
16234        "use strict";
16235        var id = "mixcloud";
16236        tarteaucitron.fallback(["mixcloud_embed"], tarteaucitron.engage(id));
16237    }
16238};
16239
16240// Google Agenda
16241tarteaucitron.services.gagenda = {
16242    "key": "gagenda",
16243    "type": "other",
16244    "name": "Google Agenda",
16245    "needConsent": true,
16246    "cookies": ["CONSENT", "NID"],
16247    "uri": "https://policies.google.com/privacy",
16248    "js": function () {
16249        "use strict";
16250        tarteaucitron.fallback(['gagenda_embed'], function (x) {
16251            var calendar_data = x.getAttribute('data'),
16252                width = x.getAttribute('width'),
16253                height = x.getAttribute('height');
16254            return "<iframe loarding=\"lazy\" width=\"" + width + "\" height=\"" + height + "\" src=\"https://www.google.com/calendar/embed?" + calendar_data + "\" frameborder=\"0\" scrolling=\"no\" style=\"border-width:0\"></iframe>";
16255        });
16256    },
16257    "fallback": function () {
16258        "use strict";
16259        var id = "gagenda";
16260        tarteaucitron.fallback(["gagenda_embed"], tarteaucitron.engage(id));
16261    }
16262};
16263
16264// Google Docs
16265tarteaucitron.services.gdocs = {
vendor: 4,303 bytes, lines 16266-16384
16266    "key": "gdocs",
16267    "type": "other",
16268    "name": "Google Docs",
16269    "needConsent": true,
16270    "cookies": ["CONSENT", "NID"],
16271    "uri": "https://policies.google.com/privacy",
16272    "js": function () {
16273        "use strict";
16274        tarteaucitron.fallback(['gdocs_embed'], function (x) {
16275            var id = x.getAttribute('id'),
16276                width = x.getAttribute('width'),
16277                height = x.getAttribute('height');
16278            return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"https://docs.google.com/document/d/e/" + id + "/pub?embedded=true\"></iframe>";
16279        });
16280    },
16281    "fallback": function () {
16282        "use strict";
16283        var id = "gdocs";
16284        tarteaucitron.fallback(["gdocs_embed"], tarteaucitron.engage(id));
16285    }
16286};
16287
16288// Google Sheets
16289tarteaucitron.services.gsheets = {
16290    "key": "gsheets",
16291    "type": "other",
16292    "name": "Google Sheets",
16293    "needConsent": true,
16294    "cookies": ["CONSENT", "NID"],
16295    "uri": "https://policies.google.com/privacy",
16296    "js": function () {
16297        "use strict";
16298        tarteaucitron.fallback(['gsheets_embed'], function (x) {
16299            var id = x.getAttribute('id'),
16300                width = x.getAttribute('width'),
16301                height = x.getAttribute('height'),
16302                headers = x.getAttribute('headers');
16303            return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"https://docs.google.com/spreadsheets/d/e/" + id + "/pubhtml?widget=true&amp;headers=" + headers + "\"></iframe>";
16304        });
16305    },
16306    "fallback": function () {
16307        "use strict";
16308        var id = "gsheets";
16309        tarteaucitron.fallback(["gsheets_embed"], tarteaucitron.engage(id));
16310    }
16311};
16312
16313// Google Slides
16314tarteaucitron.services.gslides = {
16315    "key": "gslides",
16316    "type": "other",
16317    "name": "Google Slides",
16318    "needConsent": true,
16319    "cookies": ["CONSENT", "NID"],
16320    "uri": "https://policies.google.com/privacy",
16321    "js": function () {
16322        "use strict";
16323        tarteaucitron.fallback(['gslides_embed'], function (x) {
16324            var id = x.getAttribute('id'),
16325                width = x.getAttribute('width'),
16326                height = x.getAttribute('height'),
16327                autostart = x.getAttribute('autostart'),
16328                loop = x.getAttribute('loop'),
16329                delay = x.getAttribute('delay');
16330            return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"https://docs.google.com/presentation/d/e/" + id + "/embed?start=" + autostart + "&loop=" + loop + "&delayms=" + delay + "\" frameborder=\"0\" allowfullscreen=\"true\" mozallowfullscreen=\"true\" webkitallowfullscreen=\"true\"></iframe>";
16331        });
16332    },
16333    "fallback": function () {
16334        "use strict";
16335        var id = "gslides";
16336        tarteaucitron.fallback(["gslides_embed"], tarteaucitron.engage(id));
16337    }
16338};
16339
16340// Google Forms
16341tarteaucitron.services.gforms = {
16342    "key": "gforms",
16343    "type": "other",
16344    "name": "Google Forms",
16345    "needConsent": true,
16346    "cookies": ["CONSENT", "NID"],
16347    "uri": "https://policies.google.com/privacy",
16348    "js": function () {
16349        "use strict";
16350        tarteaucitron.fallback(['gforms_embed'], function (x) {
16351            var id = x.getAttribute('id'),
16352                width = x.getAttribute('width'),
16353                height = x.getAttribute('height');
16354            return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"https://docs.google.com/forms/d/e/" + id + "/viewform?embedded=true\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\"></iframe>";
16355        });
16356    },
16357    "fallback": function () {
16358        "use strict";
16359        var id = "gforms";
16360        tarteaucitron.fallback(['gforms_embed'], tarteaucitron.engage(id));
16361    }
16362};
16363
16364// Google Optimize
16365tarteaucitron.services.goptimize = {
16366    "key": "goptimize",
16367    "type": "other",
16368    "name": "Google Optimize",
16369    "needConsent": true,
16370    "cookies": ["CONSENT", "NID"],
16371    "uri": "https://policies.google.com/privacy",
16372    "js": function () {
16373        "use strict";
16374
16375        if (tarteaucitron.user.goptimize === undefined) {
16376            return;
16377        }
16378
16379        tarteaucitron.addScript('https://www.googleoptimize.com/optimize.js?id=' + tarteaucitron.user.goptimize);
16380    }
16381};
16382
16383// Marketo munchkin
16384tarteaucitron.services.marketomunchkin = {
16385    "key": "marketomunchkin",
16386    "type": "api",
16387    "name": "Marketo munchkin",
16388    "uri": "https://documents.marketo.com/legal/cookies",
16389    "needConsent": true,
16390    "cookies": ['OptAnon', '_mkto_trk'],
16391    "js": function () {
16392        "use strict";
16393        if (tarteaucitron.user.marketomunchkinkey === undefined) {
16394            return;
16395        }
16396        var didInit = false;
16397        function initMunchkin() {
16398            if (didInit === false) {
16399                didInit = true;
16400                Munchkin.init(tarteaucitron.user.marketomunchkinkey);
16401            }
16402        }
16403        var s = document.createElement('script');
16404        s.type = 'text/javascript';
16405        s.async = true;
16406        s.src = '//munchkin.marketo.net/munchkin.js';
16407        s.onreadystatechange = function () {
16408            if (this.readyState == 'complete' || this.readyState == 'loaded') {
16409                initMunchkin();
16410            }
16411        };
16412        s.onload = initMunchkin;
16413        document.getElementsByTagName('head')[0].appendChild(s);
16414    }
16415};
16416
16417// outbrain
16418tarteaucitron.services.outbrain = {
16419    "key": "outbrain",
16420    "type": "ads",
16421    "name": "Outbrain",
16422    "uri": "https://www.outbrain.com/fr/advertisers/guidelines/",
16423    "needConsent": true,
16424    "cookies": [],
16425    "js": function () {
16426        "use strict";
16427
16428        tarteaucitron.addScript('https://widgets.outbrain.com/outbrain.js');
16429    }
16430};
16431
16432// affilae
16433tarteaucitron.services.affilae = {
16434    "key": "affilae",
16435    "type": "ads",
16436    "name": "Affilae",
16437    "uri": "https://affilae.com/en/privacy-cookie-policy/",
16438    "needConsent": true,
16439    "cookies": [],
16440    "js": function () {
16441        "use strict";
16442
16443        if (tarteaucitron.user.affilae === undefined) {
16444           return;
16445        }
16446
16447        window._ae = { "pid": tarteaucitron.user.affilae };
16448
16449        tarteaucitron.addScript('https://static.affilae.com/ae-v3.5.js');
16450    }
16451};
16452
16453// Canal-U.tv
16454tarteaucitron.services.canalu = {
16455    "key": "canalu",
16456    "type": "video",
16457    "name": "Canal-U.tv",
16458    "uri": "https://www.canal-u.tv/conditions-generales-utilisations",
16459    "needConsent": true,
16460    "cookies": [],
16461    "js": function () {
16462        "use strict";
16463        tarteaucitron.fallback(['canalu_player'], function (x) {
16464            var video_title = tarteaucitron.fixSelfXSS(x.getAttribute("videoTitle")),
16465                frame_url = 'https://www.canal-u.tv/embed/' + video_title;
16466
16467            return '<div style="position:relative;padding-bottom:56.25%;padding-top:10px;height:0;overflow:hidden;">' +
16468                   '<iframe src="' + frame_url + '?width=100%&amp;height=100%" ' +
16469                        'style="position:absolute;top:0;left:0;width:100%;height: 100%;" ' +
16470                        'frameborder="0" ' +
16471                        'allowfullscreen ' +
16472                        'scrolling="no">' +
16473                   '</iframe>' +
16474                   '</div>';
16475        });
16476    },
16477    "fallback": function () {
16478        "use strict";
16479        tarteaucitron.fallback(['canalu_player'], function (elem) {
16480            return tarteaucitron.engage('canalu');
16481        });
16482    }
16483};
16484
16485// WebTV Normandie Université
16486tarteaucitron.services.webtvnu = {
16487    "key": "webtvnu",
16488    "type": "video",
16489    "name": "WebTV Normandie Université",
16490    "uri": "https://docs.google.com/document/d/1tpVclj4QBoAq1meSZgYrpNECwp7dbmb_IhICY3sTl9c/edit",
16491    "needConsent": true,
16492    "cookies": [],
16493    "js": function () {
16494        "use strict";
16495        tarteaucitron.fallback(['webtvnu_player'], function (x) {
16496            var frame_url = 'https://webtv.normandie-univ.fr/permalink/' + x.getAttribute("videoID") + '/iframe/',
16497                width = x.getAttribute("width"),
16498                height = x.getAttribute("height");
16499
16500            return '<iframe width="' + width + '" height="' + height + '" src="' + frame_url + '" allowfullscreen="allowfullscreen" allow="autoplay"></iframe>';
16501        });
16502    },
16503    "fallback": function () {
16504        "use strict";
16505        tarteaucitron.fallback(['webtvnu_player'], function (elem) {
16506            return tarteaucitron.engage('webtvnu');
16507        });
16508    }
16509};
16510
16511// studizz
16512tarteaucitron.services.studizz = {
16513    "key": "studizz",
16514    "type": "other",
16515    "name": "Studizz Chatbot",
16516    "uri": "https://group.studizz.fr/",
16517    "needConsent": true,
16518    "cookies": [],
16519    "js": function () {
16520        "use strict";
16521
16522        if (tarteaucitron.user.studizzToken === undefined) {
16523            return;
16524        }
16525
16526        tarteaucitron.addScript('https://webchat.studizz.fr/webchat.js?token=' + tarteaucitron.user.studizzToken);
16527    }
16528};
16529
16530// meteofrance
16531tarteaucitron.services.meteofrance = {
16532    "key": "meteofrance",
16533    "type": "api",
16534    "name": "Météo France",
16535    "uri": "https://meteofrance.com/politique-de-confidentialite",
16536    "needConsent": true,
16537    "cookies": [],
16538    "js": function () {
16539        "use strict";
16540        tarteaucitron.fallback(['tac_meteofrance'], function (x) {
16541            var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Météo France iframe'),
16542                width = x.getAttribute("width"),
16543                height = x.getAttribute("height"),
16544                insee = x.getAttribute("data-insee"),
16545                allowfullscreen = x.getAttribute("allowfullscreen");
16546
16547            return '<iframe title="' + frame_title + '" src="https://meteofrance.com/widget/prevision/' + insee + '" width="' + width + '" height="' + height + '" scrolling="auto" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>';
16548        });
16549    },
16550    "fallback": function () {
16551        "use strict";
16552        var id = 'meteofrance';
16553        tarteaucitron.fallback(['tac_meteofrance'], function (elem) {
16554            elem.style.width = elem.getAttribute('width') + 'px';
16555            elem.style.height = elem.getAttribute('height') + 'px';
16556            return tarteaucitron.engage(id);
16557        });
16558    }
16559};
16560
16561// m6meteo
16562tarteaucitron.services.m6meteo = {
16563    "key": "m6meteo",
16564    "type": "api",
16565    "name": "M6 Météo",
16566    "uri": "https://gdpr.m6tech.net/charte-confidentialite-m6-web-meteocity.pdf",
16567    "needConsent": true,
16568    "cookies": [],
16569    "js": function () {
16570        "use strict";
16571        tarteaucitron.fallback(['tac_m6meteo'], function (x) {
16572            var id = x.getAttribute("data-id");
16573
16574            tarteaucitron.addScript('https://www.meteocity.com/widget/js/'+id);
16575
16576            return '<div id="cont_'+id+'"><div id="spa_'+id+'"><a id="a_'+id+'" href="#"></a> ©<a target="_top" href="https://www.meteocity.com">M6météo</a></div></div>';
16577        });
16578    },
16579    "fallback": function () {
16580        "use strict";
16581        var id = 'm6meteo';
16582        tarteaucitron.fallback(['tac_m6meteo'], function (elem) {
16583
16584            return tarteaucitron.engage(id);
16585        });
16586    }
16587};
16588
16589// mtcaptcha
16590tarteaucitron.services.mtcaptcha = {
16591    "key": "mtcaptcha",
16592    "type": "api",
16593    "name": "MTcaptcha",
16594    "uri": "https://www.mtcaptcha.com",
16595    "readmoreLink": "https://www.mtcaptcha.com/faq-cookie-declaration",
16596    "needConsent": true,
16597    "cookies": ['mtv1Pulse','mtv1ConfSum','mtv1Pong'],
16598
16599    "js": function () {
16600
16601        window.mtcaptchaConfig = {
16602            "sitekey": tarteaucitron.user.mtcaptchaSitekey
16603        };
16604
16605        tarteaucitron.addScript('https://service.mtcaptcha.com/mtcv1/client/mtcaptcha.min.js');
16606        tarteaucitron.addScript('https://service2.mtcaptcha.com/mtcv1/client/mtcaptcha2.min.js');
16607    }
16608};
16609
16610// Internet Archive / https://archive.org
16611tarteaucitron.services.archive = {
16612    "key": "archive",
16613    "type": "video",
16614    "name": "Internet Archive",
16615    "uri": "https://archive.org/about/terms.php",
16616    "needConsent": true,
16617    "cookies": ['abtest-identifier','donation-identifier'],
16618    "js": function () {
16619        "use strict";
16620        tarteaucitron.fallback(['archive_player'], function (x) {
16621            var video_id = tarteaucitron.getElemAttr(x, "data-videoID"),
16622                video_width = tarteaucitron.getElemAttr(x, "data-width"),
16623                frame_width = 'width=',
16624                video_height = tarteaucitron.getElemAttr(x, "data-height"),
16625                frame_height = 'height=',
16626                video_frame;
16627
16628            if (video_id === undefined) {
16629                return "";
16630            }
16631            if (video_width !== undefined) {
16632                frame_width += '"' + video_width + '" ';
16633            } else {
16634                frame_width += '"" ';
16635            }
16636            if (video_height !== undefined) {
16637                frame_height += '"' + video_height + '" ';
16638            } else {
16639                frame_height += '"" ';
16640            }
16641            video_frame = '<iframe src="https://archive.org/embed/' + video_id + '" ' + frame_width + frame_height + ' frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen></iframe>';
16642            return video_frame;
16643        });
16644    },
16645    "fallback": function () {
16646        "use strict";
16647        var id = 'archive';
16648        tarteaucitron.fallback(['archive_player'], function (elem) {
16649            elem.style.width = elem.getAttribute('data-width') + 'px';
16650            elem.style.height = elem.getAttribute('data-height') + 'px';
16651            return tarteaucitron.engage(id);
16652        });
16653    }
16654};
16655
16656// Gallica
16657tarteaucitron.services.gallica = {
vendor: 4,160 bytes, lines 16658-16792
16658    "key": "gallica",
16659    "type": "other",
16660    "name": "Gallica",
16661    "uri": "https://gallica.bnf.fr/edit/und/conditions-dutilisation-des-contenus-de-gallica",
16662    "needConsent": true,
16663    "cookies": ['dtCookie', 'dtLatC', 'dtPC', 'dtSa', 'rxVisitor', 'rxvt', 'xtvrn'],
16664    "js": function () {
16665        "use strict";
16666        tarteaucitron.fallback(['gallica_player'], function (x) {
16667            var src = tarteaucitron.getElemAttr(x, "data-src"),
16668                style = tarteaucitron.getElemAttr(x, "data-style"),
16669                frame;
16670            if (src === undefined) {
16671                return "";
16672            }
16673            frame = '<iframe style="'+ style + '" src="' + src + '"></iframe>';
16674            return frame;
16675        });
16676    },
16677    "fallback": function () {
16678        "use strict";
16679        var id = 'gallica';
16680        tarteaucitron.fallback(['gallica_player'], function (elem) {
16681            elem.style = elem.getAttribute('data-style');
16682            return tarteaucitron.engage(id);
16683        });
16684    }
16685};
16686
16687// crisp
16688tarteaucitron.services.crisp = {
16689    "key": "crisp",
16690    "type": "other",
16691    "name": "Crisp Chat",
16692    "uri": "https://help.crisp.chat/en/article/crisp-chatbox-cookie-ip-policy-1147xor/",
16693    "needConsent": false,
16694    "cookies": ['crisp-client', '__cfduid'],
16695    "js": function () {
16696        "use strict";
16697
16698        if (tarteaucitron.user.crispID === undefined) {
16699            return;
16700        }
16701
16702        window.$crisp = [];
16703        window.CRISP_WEBSITE_ID = tarteaucitron.user.crispID;
16704
16705        tarteaucitron.addScript('https://client.crisp.chat/l.js');
16706    }
16707};
16708
16709// microanalytics
16710tarteaucitron.services.microanalytics = {
16711    "key": "microanalytics",
16712    "type": "analytic",
16713    "name": "MicroAnalytic",
16714    "uri": "https://microanalytics.io/page/privacy",
16715    "needConsent": false,
16716    "cookies": [],
16717    "js": function () {
16718        "use strict";
16719
16720        if (tarteaucitron.user.microanalyticsID === undefined) {
16721            return;
16722        }
16723
16724        tarteaucitron.addScript('https://microanalytics.io/js/script.js', tarteaucitron.user.microanalyticsID, undefined, true, "data-host", "https://microanalytics.io");
16725    }
16726};
16727
16728// facebookcustomerchat
16729tarteaucitron.services.facebookcustomerchat = {
16730    "key": "facebookcustomerchat",
16731    "type": "social",
16732    "name": "Facebook (Customer Chat)",
16733    "uri": "https://www.facebook.com/policies/cookies/",
16734    "needConsent": true,
16735    "cookies": ['act','c_user','datr','dpr','presence','sb','wd','xs','/tr'],
16736    "js": function () {
16737        "use strict";
16738
16739        if (tarteaucitron.user.facebookChatID === undefined) {
16740            return;
16741        }
16742
16743        tarteaucitron.fallback(['fb-customerchat'], '');
16744	window.fbAsyncInit=function(){FB.init({appId:tarteaucitron.user.facebookChatID,autoLogAppEvents:!0,xfbml:!0,version:"v3.0"})};
16745	tarteaucitron.addScript('https://connect.facebook.net/' + tarteaucitron.getLocale() + '/sdk/xfbml.customerchat.js', 'facebook-jssdk');
16746    },
16747    "fallback": function () {
16748        "use strict";
16749        var id = 'facebookcustomerchat';
16750        tarteaucitron.fallback(['fb-customerchat'], tarteaucitron.engage(id));
16751    }
16752};
16753
16754// weborama
16755tarteaucitron.services.weborama = {
16756    "key": "weborama",
16757    "type": "analytic",
16758    "name": "Weborama",
16759    "uri": "https://weborama.com/faq-cnil-avril-2021/",
16760    "needConsent": true,
16761    "cookies": [],
16762    "js": function () {
16763        "use strict";
16764        tarteaucitron.addScript('https://cstatic.weborama.fr/js/advertiserv2/adperf_conversion.js');
16765    }
16766};
16767
16768// tiktok
16769tarteaucitron.services.tiktok = {
16770    "key": "tiktok",
16771    "type": "analytic",
16772    "name": "Tiktok",
16773    "uri": "https://www.tiktok.com/legal/tiktok-website-cookies-policy",
16774    "needConsent": true,
16775    "cookies": [],
16776    "js": function () {
16777        "use strict";
16778
16779        if (tarteaucitron.user.tiktokId === undefined) {
16780            return;
16781        }
16782
16783        tarteaucitron.addScript('https://analytics.tiktok.com/i18n/pixel/sdk.js?sdkid=' + tarteaucitron.user.tiktokId);
16784
16785	if (typeof tarteaucitron.user.tiktokMore === 'function') {
16786            tarteaucitron.user.tiktokMore();
16787        }
16788    }
16789};
16790
16791// Klaviyo
16792tarteaucitron.services.klaviyo = {
16793    "key": "klaviyo",
16794    "type": "ads",
16795    "name": "Klaviyo",
16796    "uri": "https://help.klaviyo.com/hc/en-us/articles/360034666712-About-Cookies-in-Klaviyo",
16797    "needConsent": true,
16798    "cookies": ['__kla_id'],
16799    "js": function () {
16800        "use strict";
16801        if (tarteaucitron.user.klaviyoCompanyId === undefined) {
16802            return;
16803        }
16804        tarteaucitron.addScript('//static.klaviyo.com/onsite/js/klaviyo.js?company_id=' + tarteaucitron.user.klaviyoCompanyId);
16805    }
16806};
16807;
16808tarteaucitron.lang={middleBarHead:"☝ 🍪",adblock:"Hello! This site is transparent and lets you choose the 3rd party services you want to allow.",adblock_call:"Please disable your adblocker to start customizing.",reload:"Refresh the page",alertBigScroll:"By continuing to scroll,",alertBigClick:"If you continue to browse this website,",alertBig:"you are allowing all third-party services",alertBigPrivacy:"This site uses cookies and gives you control over what you want to activate",alertSmall:"Manage services",personalize:"Personalize",acceptAll:"OK, accept all",close:"Close",privacyUrl:"Privacy policy",all:"Preference for all services",info:"Protecting your privacy",disclaimer:"By allowing these third party services, you accept their cookies and the use of tracking technologies necessary for their proper functioning.",allow:"Allow",deny:"Deny",noCookie:"This service does not use cookie.",useCookie:"This service can install",useCookieCurrent:"This service has installed",useNoCookie:"This service has not installed any cookie.",more:"Read more",source:"View the official website",credit:"Cookies manager by tarteaucitron.js",noServices:"This website does not use any cookie requiring your consent.",toggleInfoBox:"Show/hide informations about cookie storage",title:"Cookies management panel",cookieDetail:"Cookie detail for",ourSite:"on our site",modalWindow:"(modal window)",newWindow:"(new window)",allowAll:"Allow all cookies",denyAll:"Deny all cookies",icon:"Cookies",fallback:"is disabled.",allowed:"allowed",disallowed:"disallowed",ads:{title:"Advertising network",details:"Ad networks can generate revenue by selling advertising space on the site."},analytic:{title:"Audience measurement",details:"The audience measurement services used to generate useful statistics attendance to improve the site."},social:{title:"Social networks",details:"Social networks can improve the usability of the site and help to promote it via the shares."},video:{title:"Videos",details:"Video sharing services help to add rich media on the site and increase its visibility."},comment:{title:"Comments",details:"Comments managers facilitate the filing of comments and fight against spam."},support:{title:"Support",details:"Support services allow you to get in touch with the site team and help to improve it."},api:{title:"APIs",details:"APIs are used to load scripts: geolocation, search engines, translations, ..."},other:{title:"Other",details:"Services to display web content."},mandatoryTitle:"Mandatory cookies",mandatoryText:"This site uses cookies necessary for its proper functioning which cannot be deactivated."};;
16809/**
16810 * @file
16811 * Init tarteaucitron.js script.
16812 */
16813
16814(function (Drupal, drupalSettings, tarteaucitron) {
16815  /**
16816   * Init tarteaucitron.js script.
16817   *
16818   * @type {Drupal~behavior}
16819   *
16820   * @prop {Drupal~behaviorAttach} attach
16821   *   Attaches the script.
16822   */
16823  Drupal.behaviors.tacjs = {
16824    attach: function attach() {
16825      if (window.alreadyLaunch) return;
16826
16827      // Set base URL for TacJS Log
16828      tarteaucitron.baseUrl = drupalSettings.path.baseUrl;
16829
16830      // Add custom texts to tarteaucitron.
16831      tarteaucitronCustomText = drupalSettings.tacjs.texts;
16832
16833      // Add users identification to tarteaucitron.
16834      // Undefined user causes javascript errors #3326860 #3323411.
16835      tarteaucitron.user = drupalSettings.tacjs.user || {};
16836
16837      // Set expiration time in day(s)
16838      if (drupalSettings.tacjs.expire) {
16839        window.tarteaucitronExpireInDay = true;
16840        window.tarteaucitronForceExpire = drupalSettings.tacjs.expire;
16841      }
16842
16843      // Workaround for #3120915: convert multiplegtagUa into a Array
16844      // See https://www.drupal.org/project/tacjs/issues/3120915
16845      if (tarteaucitron.user.multiplegtagUa) {
16846        tarteaucitron.user.multiplegtagUa =
16847          tarteaucitron.user.multiplegtagUa.split(", ");
16848      }
16849
16850      // Workaround for #3204238: convert googleFonts into a Array
16851      // See https://www.drupal.org/project/tacjs/issues/3204238
16852      if (tarteaucitron.user.googleFonts) {
16853        tarteaucitron.user.googleFonts =
16854          tarteaucitron.user.googleFonts.split(", ");
16855      }
16856
16857      // Add enabled services to tarteaucitron services.
16858      Object.keys(drupalSettings.tacjs.services)
16859        .filter(function (service) {
16860          // Filter enabled services.
16861          return drupalSettings.tacjs.services[service].status;
16862        })
16863        .forEach(function (service) {
16864          var s = drupalSettings.tacjs.services[service],
16865            lang = drupalSettings.path.currentLanguage,
16866            slanguages = s.languages,
16867            needConsent = s.needConsent,
16868            languages = [];
16869
16870          // Check service
16871          if (!tarteaucitron.services[service]) return;
16872
16873          // Check service languages
16874          if (slanguages) {
16875            Object.keys(slanguages)
16876              .filter(function (language) {
16877                return slanguages[language];
16878              })
16879              .forEach(function (language) {
16880                languages.push(language);
16881              });
16882          }
16883
16884          // Check languages
16885          if (languages.length !== 0 && !languages.includes(lang)) return;
16886
16887          // Set consent
16888          if (needConsent !== undefined) {
16889            tarteaucitron.services[service].needConsent = needConsent;
16890          }
16891
16892          (tarteaucitron.job = tarteaucitron.job || []).push(service);
16893        });
16894
16895      // Initiate tarteaucitron
16896      tarteaucitron.init(drupalSettings.tacjs.dialog);
16897
16898      // Window onload event sometimes occurs before tacjs init is called.
16899      if (document.readyState === 'complete') {
16900        // Ressources fully loaded, load event already fired, force call.
16901        tarteaucitron.initEvents.loadEvent(!window.addEventListener);
16902      }
16903    },
16904  };
16905})(Drupal, drupalSettings, tarteaucitron);
16906;
16907/**
16908 * @file
16909 * Bootstrap Popovers.
16910 */
16911
16912var Drupal = Drupal || {};
16913
16914(function ($, Drupal, Bootstrap) {
16915  "use strict";
16916
16917  var $document = $(document);
16918
16919  /**
16920   * Extend the Bootstrap Popover plugin constructor class.
16921   */
16922  Bootstrap.extendPlugin('popover', function (settings) {
16923    return {
16924      DEFAULTS: {
16925        animation: !!settings.popover_animation,
16926        autoClose: !!settings.popover_auto_close,
16927        enabled: settings.popover_enabled,
16928        html: !!settings.popover_html,
16929        placement: settings.popover_placement,
16930        selector: settings.popover_selector,
16931        trigger: settings.popover_trigger,
16932        title: settings.popover_title,
16933        content: settings.popover_content,
16934        delay: parseInt(settings.popover_delay, 10),
16935        container: settings.popover_container
16936      }
16937    };
16938  });
16939
16940  /**
16941   * Bootstrap Popovers.
16942   *
16943   * @todo This should really be properly delegated if selector option is set.
16944   */
16945  Drupal.behaviors.bootstrapPopovers = {
16946    $activePopover: null,
16947    attach: function (context) {
16948      // Immediately return if popovers are not available.
16949      if (!$.fn.popover || !$.fn.popover.Constructor.DEFAULTS.enabled) {
16950        return;
16951      }
16952
16953      var _this = this;
16954
16955      $document
16956        .on('show.bs.popover', '[data-toggle=popover]', function () {
16957          var $trigger = $(this);
16958          var popover = $trigger.data('bs.popover');
16959
16960          // Only keep track of clicked triggers that we're manually handling.
16961          if (popover.options.originalTrigger === 'click') {
16962            if (_this.$activePopover && _this.getOption('autoClose') && !_this.$activePopover.is($trigger)) {
16963              _this.$activePopover.popover('hide');
16964            }
16965            _this.$activePopover = $trigger;
16966          }
16967        })
16968        // Unfortunately, :focusable is only made available when using jQuery
16969        // UI. While this would be the most semantic pseudo selector to use
16970        // here, jQuery UI may not always be loaded. Instead, just use :visible
16971        // here as this just needs some sort of selector here. This activates
16972        // delegate binding to elements in jQuery so it can work it's bubbling
16973        // focus magic since elements don't really propagate their focus events.
16974        // @see https://www.drupal.org/project/bootstrap/issues/3013236
16975        .on('focus.bs.popover', ':visible', function (e) {
16976          var $target = $(e.target);
16977          if (_this.$activePopover && _this.getOption('autoClose') && !_this.$activePopover.is($target) && !$target.closest('.popover.in')[0]) {
16978            _this.$activePopover.popover('hide');
16979            _this.$activePopover = null;
16980          }
16981        })
16982        .on('click.bs.popover', function (e) {
16983          var $target = $(e.target);
16984          if (_this.$activePopover && _this.getOption('autoClose') && !$target.is('[data-toggle=popover]') && !$target.closest('.popover.in')[0]) {
16985            _this.$activePopover.popover('hide');
16986            _this.$activePopover = null;
16987          }
16988        })
16989        .on('keyup.bs.popover', function (e) {
16990          if (_this.$activePopover && _this.getOption('autoClose') && e.which === 27) {
16991            _this.$activePopover.popover('hide');
16992            _this.$activePopover = null;
16993          }
16994        })
16995      ;
16996
16997      var elements = $(context).find('[data-toggle=popover]').toArray();
16998      for (var i = 0; i < elements.length; i++) {
16999        var $element = $(elements[i]);
17000        var options = $.extend({}, $.fn.popover.Constructor.DEFAULTS, $element.data());
17001
17002        // Store the original trigger.
17003        options.originalTrigger = options.trigger;
17004
17005        // If the trigger is "click", then we'll handle it manually here.
17006        if (options.trigger === 'click') {
17007          options.trigger = 'manual';
17008        }
17009
17010        // Retrieve content from a target element.
17011        var target = options.target || $element.is('a[href^="#"]') && $element.attr('href');
17012        var $target = $document.find(target).clone();
17013        if (!options.content && $target[0]) {
17014          $target.removeClass('visually-hidden hidden').removeAttr('aria-hidden');
17015          options.content = $target.wrap('<div/>').parent()[options.html ? 'html' : 'text']() || '';
17016        }
17017
17018        // Initialize the popover.
17019        $element.popover(options);
17020
17021        // Handle clicks manually.
17022        if (options.originalTrigger === 'click') {
17023          // To ensure the element is bound multiple times, remove any
17024          // previously set event handler before adding another one.
17025          $element
17026            .off('click.drupal.bootstrap.popover')
17027            .on('click.drupal.bootstrap.popover', function (e) {
17028              $(this).popover('toggle');
17029              e.preventDefault();
17030              e.stopPropagation();
17031            })
17032          ;
17033        }
17034      }
17035    },
17036    detach: function (context) {
17037      // Immediately return if popovers are not available.
17038      if (!$.fn.popover || !$.fn.popover.Constructor.DEFAULTS.enabled) {
17039        return;
17040      }
17041
17042      // Destroy all popovers.
17043      $(context).find('[data-toggle="popover"]')
17044        .off('click.drupal.bootstrap.popover')
17045        .popover('destroy')
17046      ;
17047    },
17048    getOption: function(name, defaultValue, element) {
17049      var $element = element ? $(element) : this.$activePopover;
17050      var options = $.extend(true, {}, $.fn.popover.Constructor.DEFAULTS, ($element && $element.data('bs.popover') || {}).options);
17051      if (options[name] !== void 0) {
17052        return options[name];
17053      }
17054      return defaultValue !== void 0 ? defaultValue : void 0;
17055    }
17056  };
17057
17058})(window.jQuery, window.Drupal, window.Drupal.bootstrap);
17059;
17060/**
17061 * @file
17062 * Bootstrap Tooltips.
17063 */
17064
17065var Drupal = Drupal || {};
17066
17067(function ($, Drupal, Bootstrap) {
17068  "use strict";
17069
17070  /**
17071   * Extend the Bootstrap Tooltip plugin constructor class.
17072   */
17073  Bootstrap.extendPlugin('tooltip', function (settings) {
17074    return {
17075      DEFAULTS: {
17076        animation: !!settings.tooltip_animation,
17077        enabled: settings.tooltip_enabled,
17078        html: !!settings.tooltip_html,
17079        placement: settings.tooltip_placement,
17080        selector: settings.tooltip_selector,
17081        trigger: settings.tooltip_trigger,
17082        delay: parseInt(settings.tooltip_delay, 10),
17083        container: settings.tooltip_container
17084      }
17085    };
17086  });
17087
17088  /**
17089   * Bootstrap Tooltips.
17090   *
17091   * @todo This should really be properly delegated if selector option is set.
17092   */
17093  Drupal.behaviors.bootstrapTooltips = {
17094    attach: function (context) {
17095      // Immediately return if tooltips are not available.
17096      if (!$.fn.tooltip || !$.fn.tooltip.Constructor.DEFAULTS.enabled) {
17097        return;
17098      }
17099
17100      var elements = $(context).find('[data-toggle="tooltip"]').toArray();
17101      for (var i = 0; i < elements.length; i++) {
17102        var $element = $(elements[i]);
17103        var options = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, $element.data());
17104        $element.tooltip(options);
17105      }
17106    },
17107    detach: function (context) {
17108      // Immediately return if tooltips are not available.
17109      if (!$.fn.tooltip || !$.fn.tooltip.Constructor.DEFAULTS.enabled) {
17110        return;
17111      }
17112
17113      // Destroy all tooltips.
17114      $(context).find('[data-toggle="tooltip"]').tooltip('destroy');
17115    }
17116  };
17117
17118})(window.jQuery, window.Drupal, window.Drupal.bootstrap);
17119;

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.