PageSourceSearch

https://cilicia.ru/bitrix/js/main/core/core.js?1648548666564150

js cilicia.ru collected 2026-09-30 04:53:43 UTC 564,150 bytes, 21,986 lines download raw bytes

1;(function() {
2
3	if (typeof window.BX === 'function')
4	{
5		return;
6	}
7
8/**
9 * Babel external helpers
10 * (c) 2018 Babel
11 * @license MIT
12 */
13(function (global) {
14  var babelHelpers = global.babelHelpers = {};
15
16  function _typeof(obj) {
17    if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
18      babelHelpers.typeof = _typeof = function (obj) {
19        return typeof obj;
20      };
21    } else {
22      babelHelpers.typeof = _typeof = function (obj) {
23        return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
24      };
25    }
26
27    return _typeof(obj);
28  }
29
30  babelHelpers.typeof = _typeof;
31  var REACT_ELEMENT_TYPE;
32
33  function _createRawReactElement(type, props, key, children) {
34    if (!REACT_ELEMENT_TYPE) {
35      REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7;
36    }
37
38    var defaultProps = type && type.defaultProps;
39    var childrenLength = arguments.length - 3;
40
41    if (!props && childrenLength !== 0) {
42      props = {
43        children: void 0
44      };
45    }
46
47    if (props && defaultProps) {
48      for (var propName in defaultProps) {
49        if (props[propName] === void 0) {
50          props[propName] = defaultProps[propName];
51        }
52      }
53    } else if (!props) {
54      props = defaultProps || {};
55    }
56
57    if (childrenLength === 1) {
58      props.children = children;
59    } else if (childrenLength > 1) {
60      var childArray = new Array(childrenLength);
61
62      for (var i = 0; i < childrenLength; i++) {
63        childArray[i] = arguments[i + 3];
64      }
65
66      props.children = childArray;
67    }
68
69    return {
70      $$typeof: REACT_ELEMENT_TYPE,
71      type: type,
72      key: key === undefined ? null : '' + key,
73      ref: null,
74      props: props,
75      _owner: null
76    };
77  }
78
79  babelHelpers.jsx = _createRawReactElement;
80
81  function _asyncIterator(iterable) {
82    var method;
83
84    if (typeof Symbol === "function") {
85      if (Symbol.asyncIterator) {
86        method = iterable[Symbol.asyncIterator];
87        if (method != null) return method.call(iterable);
88      }
89
90      if (Symbol.iterator) {
91        method = iterable[Symbol.iterator];
92        if (method != null) return method.call(iterable);
93      }
94    }
95
96    throw new TypeError("Object is not async iterable");
97  }
98
99  babelHelpers.asyncIterator = _asyncIterator;
100
101  function _AwaitValue(value) {
102    this.wrapped = value;
103  }
104
105  babelHelpers.AwaitValue = _AwaitValue;
106
107  function AsyncGenerator(gen) {
108    var front, back;
109
110    function send(key, arg) {
111      return new Promise(function (resolve, reject) {
112        var request = {
113          key: key,
114          arg: arg,
115          resolve: resolve,
116          reject: reject,
117          next: null
118        };
119
120        if (back) {
121          back = back.next = request;
122        } else {
123          front = back = request;
124          resume(key, arg);
125        }
126      });
127    }
128
129    function resume(key, arg) {
130      try {
131        var result = gen[key](arg);
132        var value = result.value;
133        var wrappedAwait = value instanceof babelHelpers.AwaitValue;
134        Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {
135          if (wrappedAwait) {
136            resume("next", arg);
137            return;
138          }
139
140          settle(result.done ? "return" : "normal", arg);
141        }, function (err) {
142          resume("throw", err);
143        });
144      } catch (err) {
145        settle("throw", err);
146      }
147    }
148
149    function settle(type, value) {
150      switch (type) {
151        case "return":
152          front.resolve({
153            value: value,
154            done: true
155          });
156          break;
157
158        case "throw":
159          front.reject(value);
160          break;
161
162        default:
163          front.resolve({
164            value: value,
165            done: false
166          });
167          break;
168      }
169
170      front = front.next;
171
172      if (front) {
173        resume(front.key, front.arg);
174      } else {
175        back = null;
176      }
177    }
178
179    this._invoke = send;
180
181    if (typeof gen.return !== "function") {
182      this.return = undefined;
183    }
184  }
185
186  if (typeof Symbol === "function" && Symbol.asyncIterator) {
187    AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
188      return this;
189    };
190  }
191
192  AsyncGenerator.prototype.next = function (arg) {
193    return this._invoke("next", arg);
194  };
195
196  AsyncGenerator.prototype.throw = function (arg) {
197    return this._invoke("throw", arg);
198  };
199
200  AsyncGenerator.prototype.return = function (arg) {
201    return this._invoke("return", arg);
202  };
203
204  babelHelpers.AsyncGenerator = AsyncGenerator;
205
206  function _wrapAsyncGenerator(fn) {
207    return function () {
208      return new babelHelpers.AsyncGenerator(fn.apply(this, arguments));
209    };
210  }
211
212  babelHelpers.wrapAsyncGenerator = _wrapAsyncGenerator;
213
214  function _awaitAsyncGenerator(value) {
215    return new babelHelpers.AwaitValue(value);
216  }
217
218  babelHelpers.awaitAsyncGenerator = _awaitAsyncGenerator;
219
220  function _asyncGeneratorDelegate(inner, awaitWrap) {
221    var iter = {},
222        waiting = false;
223
224    function pump(key, value) {
225      waiting = true;
226      value = new Promise(function (resolve) {
227        resolve(inner[key](value));
228      });
229      return {
230        done: false,
231        value: awaitWrap(value)
232      };
233    }
234
235    ;
236
237    if (typeof Symbol === "function" && Symbol.iterator) {
238      iter[Symbol.iterator] = function () {
239        return this;
240      };
241    }
242
243    iter.next = function (value) {
244      if (waiting) {
245        waiting = false;
246        return value;
247      }
248
249      return pump("next", value);
250    };
251
252    if (typeof inner.throw === "function") {
253      iter.throw = function (value) {
254        if (waiting) {
255          waiting = false;
256          throw value;
257        }
258
259        return pump("throw", value);
260      };
261    }
262
263    if (typeof inner.return === "function") {
264      iter.return = function (value) {
265        return pump("return", value);
266      };
267    }
268
269    return iter;
270  }
271
272  babelHelpers.asyncGeneratorDelegate = _asyncGeneratorDelegate;
273
274  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
275    try {
276      var info = gen[key](arg);
277      var value = info.value;
278    } catch (error) {
279      reject(error);
280      return;
281    }
282
283    if (info.done) {
284      resolve(value);
285    } else {
286      Promise.resolve(value).then(_next, _throw);
287    }
288  }
289
290  function _asyncToGenerator(fn) {
291    return function () {
292      var self = this,
293          args = arguments;
294      return new Promise(function (resolve, reject) {
295        var gen = fn.apply(self, args);
296
297        function _next(value) {
298          asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
299        }
300
301        function _throw(err) {
302          asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
303        }
304
305        _next(undefined);
306      });
307    };
308  }
309
310  babelHelpers.asyncToGenerator = _asyncToGenerator;
311
312  function _classCallCheck(instance, Constructor) {
313    if (!(instance instanceof Constructor)) {
314      throw new TypeError("Cannot call a class as a function");
315    }
316  }
317
318  babelHelpers.classCallCheck = _classCallCheck;
319
320  function _defineProperties(target, props) {
321    for (var i = 0; i < props.length; i++) {
322      var descriptor = props[i];
323      descriptor.enumerable = descriptor.enumerable || false;
324      descriptor.configurable = true;
325      if ("value" in descriptor) descriptor.writable = true;
326      Object.defineProperty(target, descriptor.key, descriptor);
327    }
328  }
329
330  function _createClass(Constructor, protoProps, staticProps) {
331    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
332    if (staticProps) _defineProperties(Constructor, staticProps);
333    return Constructor;
334  }
335
336  babelHelpers.createClass = _createClass;
337
338  function _defineEnumerableProperties(obj, descs) {
339    for (var key in descs) {
340      var desc = descs[key];
341      desc.configurable = desc.enumerable = true;
342      if ("value" in desc) desc.writable = true;
343      Object.defineProperty(obj, key, desc);
344    }
345
346    if (Object.getOwnPropertySymbols) {
347      var objectSymbols = Object.getOwnPropertySymbols(descs);
348
349      for (var i = 0; i < objectSymbols.length; i++) {
350        var sym = objectSymbols[i];
351        var desc = descs[sym];
352        desc.configurable = desc.enumerable = true;
353        if ("value" in desc) desc.writable = true;
354        Object.defineProperty(obj, sym, desc);
355      }
356    }
357
358    return obj;
359  }
360
361  babelHelpers.defineEnumerableProperties = _defineEnumerableProperties;
362
363  function _defaults(obj, defaults) {
364    var keys = Object.getOwnPropertyNames(defaults);
365
366    for (var i = 0; i < keys.length; i++) {
367      var key = keys[i];
368      var value = Object.getOwnPropertyDescriptor(defaults, key);
369
370      if (value && value.configurable && obj[key] === undefined) {
371        Object.defineProperty(obj, key, value);
372      }
373    }
374
375    return obj;
376  }
377
378  babelHelpers.defaults = _defaults;
379
380  function _defineProperty(obj, key, value) {
381    if (key in obj) {
382      Object.defineProperty(obj, key, {
383        value: value,
384        enumerable: true,
385        configurable: true,
386        writable: true
387      });
388    } else {
389      obj[key] = value;
390    }
391
392    return obj;
393  }
394
395  babelHelpers.defineProperty = _defineProperty;
396
397  function _extends() {
398    babelHelpers.extends = _extends = Object.assign || function (target) {
399      for (var i = 1; i < arguments.length; i++) {
400        var source = arguments[i];
401
402        for (var key in source) {
403          if (Object.prototype.hasOwnProperty.call(source, key)) {
404            target[key] = source[key];
405          }
406        }
407      }
408
409      return target;
410    };
411
412    return _extends.apply(this, arguments);
413  }
414
415  babelHelpers.extends = _extends;
416
417  function _objectSpread(target) {
418    for (var i = 1; i < arguments.length; i++) {
419      var source = arguments[i] != null ? arguments[i] : {};
420      var ownKeys = Object.keys(source);
421
422      if (typeof Object.getOwnPropertySymbols === 'function') {
423        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
424          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
425        }));
426      }
427
428      ownKeys.forEach(function (key) {
429        babelHelpers.defineProperty(target, key, source[key]);
430      });
431    }
432
433    return target;
434  }
435
436  babelHelpers.objectSpread = _objectSpread;
437
438  function _inherits(subClass, superClass) {
439    if (typeof superClass !== "function" && superClass !== null) {
440      throw new TypeError("Super expression must either be null or a function");
441    }
442
443    subClass.prototype = Object.create(superClass && superClass.prototype, {
444      constructor: {
445        value: subClass,
446        writable: true,
447        configurable: true
448      }
449    });
450    if (superClass) babelHelpers.setPrototypeOf(subClass, superClass);
451  }
452
453  babelHelpers.inherits = _inherits;
454
455  function _inheritsLoose(subClass, superClass) {
456    subClass.prototype = Object.create(superClass.prototype);
457    subClass.prototype.constructor = subClass;
458    subClass.__proto__ = superClass;
459  }
460
461  babelHelpers.inheritsLoose = _inheritsLoose;
462
463  function _getPrototypeOf(o) {
464    babelHelpers.getPrototypeOf = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
465      return o.__proto__ || Object.getPrototypeOf(o);
466    };
467    return _getPrototypeOf(o);
468  }
469
470  babelHelpers.getPrototypeOf = _getPrototypeOf;
471
472  function _setPrototypeOf(o, p) {
473    babelHelpers.setPrototypeOf = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
474      o.__proto__ = p;
475      return o;
476    };
477
478    return _setPrototypeOf(o, p);
479  }
480
481  babelHelpers.setPrototypeOf = _setPrototypeOf;
482
483  function isNativeReflectConstruct() {
484    if (typeof Reflect === "undefined" || !Reflect.construct) return false;
485    if (Reflect.construct.sham) return false;
486    if (typeof Proxy === "function") return true;
487
488    try {
489      Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
490      return true;
491    } catch (e) {
492      return false;
493    }
494  }
495
496  function _construct(Parent, args, Class) {
497    if (isNativeReflectConstruct()) {
498      babelHelpers.construct = _construct = Reflect.construct;
499    } else {
500      babelHelpers.construct = _construct = function _construct(Parent, args, Class) {
501        var a = [null];
502        a.push.apply(a, args);
503        var Constructor = Function.bind.apply(Parent, a);
504        var instance = new Constructor();
505        if (Class) babelHelpers.setPrototypeOf(instance, Class.prototype);
506        return instance;
507      };
508    }
509
510    return _construct.apply(null, arguments);
511  }
512
513  babelHelpers.construct = _construct;
514
515  function _isNativeFunction(fn) {
516    return Function.toString.call(fn).indexOf("[native code]") !== -1;
517  }
518
519  babelHelpers.isNativeFunction = _isNativeFunction;
520
521  function _wrapNativeSuper(Class) {
522    var _cache = typeof Map === "function" ? new Map() : undefined;
523
524    babelHelpers.wrapNativeSuper = _wrapNativeSuper = function _wrapNativeSuper(Class) {
525      if (Class === null || !babelHelpers.isNativeFunction(Class)) return Class;
526
527      if (typeof Class !== "function") {
528        throw new TypeError("Super expression must either be null or a function");
529      }
530
531      if (typeof _cache !== "undefined") {
532        if (_cache.has(Class)) return _cache.get(Class);
533
534        _cache.set(Class, Wrapper);
535      }
536
537      function Wrapper() {
538        return babelHelpers.construct(Class, arguments, babelHelpers.getPrototypeOf(this).constructor);
539      }
540
541      Wrapper.prototype = Object.create(Class.prototype, {
542        constructor: {
543          value: Wrapper,
544          enumerable: false,
545          writable: true,
546          configurable: true
547        }
548      });
549      return babelHelpers.setPrototypeOf(Wrapper, Class);
550    };
551
552    return _wrapNativeSuper(Class);
553  }
554
555  babelHelpers.wrapNativeSuper = _wrapNativeSuper;
556
557  function _instanceof(left, right) {
558    if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
559      return right[Symbol.hasInstance](left);
560    } else {
561      return left instanceof right;
562    }
563  }
564
565  babelHelpers.instanceof = _instanceof;
566
567  function _interopRequireDefault(obj) {
568    return obj && obj.__esModule ? obj : {
569      default: obj
570    };
571  }
572
573  babelHelpers.interopRequireDefault = _interopRequireDefault;
574
575  function _interopRequireWildcard(obj) {
576    if (obj && obj.__esModule) {
577      return obj;
578    } else {
579      var newObj = {};
580
581      if (obj != null) {
582        for (var key in obj) {
583          if (Object.prototype.hasOwnProperty.call(obj, key)) {
584            var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
585
586            if (desc.get || desc.set) {
587              Object.defineProperty(newObj, key, desc);
588            } else {
589              newObj[key] = obj[key];
590            }
591          }
592        }
593      }
594
595      newObj.default = obj;
596      return newObj;
597    }
598  }
599
600  babelHelpers.interopRequireWildcard = _interopRequireWildcard;
601
602  function _newArrowCheck(innerThis, boundThis) {
603    if (innerThis !== boundThis) {
604      throw new TypeError("Cannot instantiate an arrow function");
605    }
606  }
607
608  babelHelpers.newArrowCheck = _newArrowCheck;
609
610  function _objectDestructuringEmpty(obj) {
611    if (obj == null) throw new TypeError("Cannot destructure undefined");
612  }
613
614  babelHelpers.objectDestructuringEmpty = _objectDestructuringEmpty;
615
616  function _objectWithoutPropertiesLoose(source, excluded) {
617    if (source == null) return {};
618    var target = {};
619    var sourceKeys = Object.keys(source);
620    var key, i;
621
622    for (i = 0; i < sourceKeys.length; i++) {
623      key = sourceKeys[i];
624      if (excluded.indexOf(key) >= 0) continue;
625      target[key] = source[key];
626    }
627
628    return target;
629  }
630
631  babelHelpers.objectWithoutPropertiesLoose = _objectWithoutPropertiesLoose;
632
633  function _objectWithoutProperties(source, excluded) {
634    if (source == null) return {};
635    var target = babelHelpers.objectWithoutPropertiesLoose(source, excluded);
636    var key, i;
637
638    if (Object.getOwnPropertySymbols) {
639      var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
640
641      for (i = 0; i < sourceSymbolKeys.length; i++) {
642        key = sourceSymbolKeys[i];
643        if (excluded.indexOf(key) >= 0) continue;
644        if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
645        target[key] = source[key];
646      }
647    }
648
649    return target;
650  }
651
652  babelHelpers.objectWithoutProperties = _objectWithoutProperties;
653
654  function _assertThisInitialized(self) {
655    if (self === void 0) {
656      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
657    }
658
659    return self;
660  }
661
662  babelHelpers.assertThisInitialized = _assertThisInitialized;
663
664  function _possibleConstructorReturn(self, call) {
665    if (call && (typeof call === "object" || typeof call === "function")) {
666      return call;
667    }
668
669    return babelHelpers.assertThisInitialized(self);
670  }
671
672  babelHelpers.possibleConstructorReturn = _possibleConstructorReturn;
673
674  function _superPropBase(object, property) {
675    while (!Object.prototype.hasOwnProperty.call(object, property)) {
676      object = babelHelpers.getPrototypeOf(object);
677      if (object === null) break;
678    }
679
680    return object;
681  }
682
683  babelHelpers.superPropBase = _superPropBase;
684
685  function _get(target, property, receiver) {
686    if (typeof Reflect !== "undefined" && Reflect.get) {
687      babelHelpers.get = _get = Reflect.get;
688    } else {
689      babelHelpers.get = _get = function _get(target, property, receiver) {
690        var base = babelHelpers.superPropBase(target, property);
691        if (!base) return;
692        var desc = Object.getOwnPropertyDescriptor(base, property);
693
694        if (desc.get) {
695          return desc.get.call(receiver);
696        }
697
698        return desc.value;
699      };
700    }
701
702    return _get(target, property, receiver || target);
703  }
704
705  babelHelpers.get = _get;
706
707  function set(target, property, value, receiver) {
708    if (typeof Reflect !== "undefined" && Reflect.set) {
709      set = Reflect.set;
710    } else {
711      set = function set(target, property, value, receiver) {
712        var base = babelHelpers.superPropBase(target, property);
713        var desc;
714
715        if (base) {
716          desc = Object.getOwnPropertyDescriptor(base, property);
717
718          if (desc.set) {
719            desc.set.call(receiver, value);
720            return true;
721          } else if (!desc.writable) {
722            return false;
723          }
724        }
725
726        desc = Object.getOwnPropertyDescriptor(receiver, property);
727
728        if (desc) {
729          if (!desc.writable) {
730            return false;
731          }
732
733          desc.value = value;
734          Object.defineProperty(receiver, property, desc);
735        } else {
736          babelHelpers.defineProperty(receiver, property, value);
737        }
738
739        return true;
740      };
741    }
742
743    return set(target, property, value, receiver);
744  }
745
746  function _set(target, property, value, receiver, isStrict) {
747    var s = set(target, property, value, receiver || target);
748
749    if (!s && isStrict) {
750      throw new Error('failed to set property');
751    }
752
753    return value;
754  }
755
756  babelHelpers.set = _set;
757
758  function _taggedTemplateLiteral(strings, raw) {
759    if (!raw) {
760      raw = strings.slice(0);
761    }
762
763    return Object.freeze(Object.defineProperties(strings, {
764      raw: {
765        value: Object.freeze(raw)
766      }
767    }));
768  }
769
770  babelHelpers.taggedTemplateLiteral = _taggedTemplateLiteral;
771
772  function _taggedTemplateLiteralLoose(strings, raw) {
773    if (!raw) {
774      raw = strings.slice(0);
775    }
776
777    strings.raw = raw;
778    return strings;
779  }
780
781  babelHelpers.taggedTemplateLiteralLoose = _taggedTemplateLiteralLoose;
782
783  function _temporalRef(val, name) {
784    if (val === babelHelpers.temporalUndefined) {
785      throw new ReferenceError(name + " is not defined - temporal dead zone");
786    } else {
787      return val;
788    }
789  }
790
791  babelHelpers.temporalRef = _temporalRef;
792
793  function _readOnlyError(name) {
794    throw new Error("\"" + name + "\" is read-only");
795  }
796
797  babelHelpers.readOnlyError = _readOnlyError;
798
799  function _classNameTDZError(name) {
800    throw new Error("Class \"" + name + "\" cannot be referenced in computed property keys.");
801  }
802
803  babelHelpers.classNameTDZError = _classNameTDZError;
804  babelHelpers.temporalUndefined = {};
805
806  function _slicedToArray(arr, i) {
807    return babelHelpers.arrayWithHoles(arr) || babelHelpers.iterableToArrayLimit(arr, i) || babelHelpers.nonIterableRest();
808  }
809
810  babelHelpers.slicedToArray = _slicedToArray;
811
812  function _slicedToArrayLoose(arr, i) {
813    return babelHelpers.arrayWithHoles(arr) || babelHelpers.iterableToArrayLimitLoose(arr, i) || babelHelpers.nonIterableRest();
814  }
815
816  babelHelpers.slicedToArrayLoose = _slicedToArrayLoose;
817
818  function _toArray(arr) {
819    return babelHelpers.arrayWithHoles(arr) || babelHelpers.iterableToArray(arr) || babelHelpers.nonIterableRest();
820  }
821
822  babelHelpers.toArray = _toArray;
823
824  function _toConsumableArray(arr) {
825    return babelHelpers.arrayWithoutHoles(arr) || babelHelpers.iterableToArray(arr) || babelHelpers.nonIterableSpread();
826  }
827
828  babelHelpers.toConsumableArray = _toConsumableArray;
829
830  function _arrayWithoutHoles(arr) {
831    if (Array.isArray(arr)) {
832      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
833
834      return arr2;
835    }
836  }
837
838  babelHelpers.arrayWithoutHoles = _arrayWithoutHoles;
839
840  function _arrayWithHoles(arr) {
841    if (Array.isArray(arr)) return arr;
842  }
843
844  babelHelpers.arrayWithHoles = _arrayWithHoles;
845
846  function _iterableToArray(iter) {
847    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
848  }
849
850  babelHelpers.iterableToArray = _iterableToArray;
851
852  function _iterableToArrayLimit(arr, i) {
853    var _arr = [];
854    var _n = true;
855    var _d = false;
856    var _e = undefined;
857
858    try {
859      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
860        _arr.push(_s.value);
861
862        if (i && _arr.length === i) break;
863      }
864    } catch (err) {
865      _d = true;
866      _e = err;
867    } finally {
868      try {
869        if (!_n && _i["return"] != null) _i["return"]();
870      } finally {
871        if (_d) throw _e;
872      }
873    }
874
875    return _arr;
876  }
877
878  babelHelpers.iterableToArrayLimit = _iterableToArrayLimit;
879
880  function _iterableToArrayLimitLoose(arr, i) {
881    var _arr = [];
882
883    for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {
884      _arr.push(_step.value);
885
886      if (i && _arr.length === i) break;
887    }
888
889    return _arr;
890  }
891
892  babelHelpers.iterableToArrayLimitLoose = _iterableToArrayLimitLoose;
893
894  function _nonIterableSpread() {
895    throw new TypeError("Invalid attempt to spread non-iterable instance");
896  }
897
898  babelHelpers.nonIterableSpread = _nonIterableSpread;
899
900  function _nonIterableRest() {
901    throw new TypeError("Invalid attempt to destructure non-iterable instance");
902  }
903
904  babelHelpers.nonIterableRest = _nonIterableRest;
905
906  function _skipFirstGeneratorNext(fn) {
907    return function () {
908      var it = fn.apply(this, arguments);
909      it.next();
910      return it;
911    };
912  }
913
914  babelHelpers.skipFirstGeneratorNext = _skipFirstGeneratorNext;
915
916  function _toPropertyKey(key) {
917    if (typeof key === "symbol") {
918      return key;
919    } else {
920      return String(key);
921    }
922  }
923
924  babelHelpers.toPropertyKey = _toPropertyKey;
925
926  function _initializerWarningHelper(descriptor, context) {
927    throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and set to use loose mode. ' + 'To use proposal-class-properties in spec mode with decorators, wait for ' + 'the next major version of decorators in stage 2.');
928  }
929
930  babelHelpers.initializerWarningHelper = _initializerWarningHelper;
931
932  function _initializerDefineProperty(target, property, descriptor, context) {
933    if (!descriptor) return;
934    Object.defineProperty(target, property, {
935      enumerable: descriptor.enumerable,
936      configurable: descriptor.configurable,
937      writable: descriptor.writable,
938      value: descriptor.initializer ? descriptor.initializer.call(context) : void 0
939    });
940  }
941
942  babelHelpers.initializerDefineProperty = _initializerDefineProperty;
943
944  function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
945    var desc = {};
946    Object['ke' + 'ys'](descriptor).forEach(function (key) {
947      desc[key] = descriptor[key];
948    });
949    desc.enumerable = !!desc.enumerable;
950    desc.configurable = !!desc.configurable;
951
952    if ('value' in desc || desc.initializer) {
953      desc.writable = true;
954    }
955
956    desc = decorators.slice().reverse().reduce(function (desc, decorator) {
957      return decorator(target, property, desc) || desc;
958    }, desc);
959
960    if (context && desc.initializer !== void 0) {
961      desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
962      desc.initializer = undefined;
963    }
964
965    if (desc.initializer === void 0) {
966      Object['define' + 'Property'](target, property, desc);
967      desc = null;
968    }
969
970    return desc;
971  }
972
973  babelHelpers.applyDecoratedDescriptor = _applyDecoratedDescriptor;
974  var id = 0;
975
976  function _classPrivateFieldKey(name) {
977    return "__private_" + id++ + "_" + name;
978  }
979
980  babelHelpers.classPrivateFieldLooseKey = _classPrivateFieldKey;
981
982  function _classPrivateFieldBase(receiver, privateKey) {
983    if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
984      throw new TypeError("attempted to use private field on non-instance");
985    }
986
987    return receiver;
988  }
989
990  babelHelpers.classPrivateFieldLooseBase = _classPrivateFieldBase;
991
992  function _classPrivateFieldGet(receiver, privateMap) {
993    if (!privateMap.has(receiver)) {
994      throw new TypeError("attempted to get private field on non-instance");
995    }
996
997    return privateMap.get(receiver).value;
998  }
999
1000  babelHelpers.classPrivateFieldGet = _classPrivateFieldGet;
1001
1002  function _classPrivateFieldSet(receiver, privateMap, value) {
1003    if (!privateMap.has(receiver)) {
1004      throw new TypeError("attempted to set private field on non-instance");
1005    }
1006
1007    var descriptor = privateMap.get(receiver);
1008
1009    if (!descriptor.writable) {
1010      throw new TypeError("attempted to set read only private field");
1011    }
1012
1013    descriptor.value = value;
1014    return value;
1015  }
1016
1017  babelHelpers.classPrivateFieldSet = _classPrivateFieldSet;
1018})(typeof global === "undefined" ? window : global);
1019
1020/**
1021 * Copyright (c) 2014-present, Facebook, Inc.
1022 *
1023 * This source code is licensed under the MIT license found in the
1024 * LICENSE file in the root directory of this source tree.
1025 */
1026
1027!(function(global) {
1028	"use strict";
1029
1030	var Op = Object.prototype;
1031	var hasOwn = Op.hasOwnProperty;
1032	var undefined; // More compressible than void 0.
1033	var $Symbol = typeof Symbol === "function" ? Symbol : {};
1034	var iteratorSymbol = $Symbol.iterator || "@@iterator";
1035	var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
1036	var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
1037
1038	// Define the runtime globally (as expected by generated code) as either
1039	// module.exports (if we're in a module) or a new, empty object.
1040	var runtime = global.regeneratorRuntime = {};
1041
1042	function wrap(innerFn, outerFn, self, tryLocsList) {
1043		// If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
1044		var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
1045		var generator = Object.create(protoGenerator.prototype);
1046		var context = new Context(tryLocsList || []);
1047
1048		// The ._invoke method unifies the implementations of the .next,
1049		// .throw, and .return methods.
1050		generator._invoke = makeInvokeMethod(innerFn, self, context);
1051
1052		return generator;
1053	}
1054	runtime.wrap = wrap;
1055
1056	// Try/catch helper to minimize deoptimizations. Returns a completion
1057	// record like context.tryEntries[i].completion. This interface could
vendor: 10,591 bytes, lines 1058-1351
1058	// have been (and was previously) designed to take a closure to be
1059	// invoked without arguments, but in all the cases we care about we
1060	// already have an existing method we want to call, so there's no need
1061	// to create a new function object. We can even get away with assuming
1062	// the method takes exactly one argument, since that happens to be true
1063	// in every case, so we don't have to touch the arguments object. The
1064	// only additional allocation required is the completion record, which
1065	// has a stable shape and so hopefully should be cheap to allocate.
1066	function tryCatch(fn, obj, arg) {
1067		try {
1068			return { type: "normal", arg: fn.call(obj, arg) };
1069		} catch (err) {
1070			return { type: "throw", arg: err };
1071		}
1072	}
1073
1074	var GenStateSuspendedStart = "suspendedStart";
1075	var GenStateSuspendedYield = "suspendedYield";
1076	var GenStateExecuting = "executing";
1077	var GenStateCompleted = "completed";
1078
1079	// Returning this object from the innerFn has the same effect as
1080	// breaking out of the dispatch switch statement.
1081	var ContinueSentinel = {};
1082
1083	// Dummy constructor functions that we use as the .constructor and
1084	// .constructor.prototype properties for functions that return Generator
1085	// objects. For full spec compliance, you may wish to configure your
1086	// minifier not to mangle the names of these two functions.
1087	function Generator() {}
1088	function GeneratorFunction() {}
1089	function GeneratorFunctionPrototype() {}
1090
1091	// This is a polyfill for %IteratorPrototype% for environments that
1092	// don't natively support it.
1093	var IteratorPrototype = {};
1094	IteratorPrototype[iteratorSymbol] = function () {
1095		return this;
1096	};
1097
1098	var getProto = Object.getPrototypeOf;
1099	var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
1100	if (NativeIteratorPrototype &&
1101		NativeIteratorPrototype !== Op &&
1102		hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
1103		// This environment has a native %IteratorPrototype%; use it instead
1104		// of the polyfill.
1105		IteratorPrototype = NativeIteratorPrototype;
1106	}
1107
1108	var Gp = GeneratorFunctionPrototype.prototype =
1109		Generator.prototype = Object.create(IteratorPrototype);
1110	GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
1111	GeneratorFunctionPrototype.constructor = GeneratorFunction;
1112	GeneratorFunctionPrototype[toStringTagSymbol] =
1113		GeneratorFunction.displayName = "GeneratorFunction";
1114
1115	// Helper for defining the .next, .throw, and .return methods of the
1116	// Iterator interface in terms of a single ._invoke method.
1117	function defineIteratorMethods(prototype) {
1118		["next", "throw", "return"].forEach(function(method) {
1119			prototype[method] = function(arg) {
1120				return this._invoke(method, arg);
1121			};
1122		});
1123	}
1124
1125	runtime.isGeneratorFunction = function(genFun) {
1126		var ctor = typeof genFun === "function" && genFun.constructor;
1127		return ctor
1128			? ctor === GeneratorFunction ||
1129			// For the native GeneratorFunction constructor, the best we can
1130			// do is to check its .name property.
1131			(ctor.displayName || ctor.name) === "GeneratorFunction"
1132			: false;
1133	};
1134
1135	runtime.mark = function(genFun) {
1136		if (Object.setPrototypeOf) {
1137			Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
1138		} else {
1139			genFun.__proto__ = GeneratorFunctionPrototype;
1140			if (!(toStringTagSymbol in genFun)) {
1141				genFun[toStringTagSymbol] = "GeneratorFunction";
1142			}
1143		}
1144		genFun.prototype = Object.create(Gp);
1145		return genFun;
1146	};
1147
1148	// Within the body of any async function, `await x` is transformed to
1149	// `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
1150	// `hasOwn.call(value, "__await")` to determine if the yielded value is
1151	// meant to be awaited.
1152	runtime.awrap = function(arg) {
1153		return { __await: arg };
1154	};
1155
1156	function AsyncIterator(generator) {
1157		function invoke(method, arg, resolve, reject) {
1158			var record = tryCatch(generator[method], generator, arg);
1159			if (record.type === "throw") {
1160				reject(record.arg);
1161			} else {
1162				var result = record.arg;
1163				var value = result.value;
1164				if (value &&
1165					typeof value === "object" &&
1166					hasOwn.call(value, "__await")) {
1167					return Promise.resolve(value.__await).then(function(value) {
1168						invoke("next", value, resolve, reject);
1169					}, function(err) {
1170						invoke("throw", err, resolve, reject);
1171					});
1172				}
1173
1174				return Promise.resolve(value).then(function(unwrapped) {
1175					// When a yielded Promise is resolved, its final value becomes
1176					// the .value of the Promise<{value,done}> result for the
1177					// current iteration. If the Promise is rejected, however, the
1178					// result for this iteration will be rejected with the same
1179					// reason. Note that rejections of yielded Promises are not
1180					// thrown back into the generator function, as is the case
1181					// when an awaited Promise is rejected. This difference in
1182					// behavior between yield and await is important, because it
1183					// allows the consumer to decide what to do with the yielded
1184					// rejection (swallow it and continue, manually .throw it back
1185					// into the generator, abandon iteration, whatever). With
1186					// await, by contrast, there is no opportunity to examine the
1187					// rejection reason outside the generator function, so the
1188					// only option is to throw it from the await expression, and
1189					// let the generator function handle the exception.
1190					result.value = unwrapped;
1191					resolve(result);
1192				}, reject);
1193			}
1194		}
1195
1196		var previousPromise;
1197
1198		function enqueue(method, arg) {
1199			function callInvokeWithMethodAndArg() {
1200				return new Promise(function(resolve, reject) {
1201					invoke(method, arg, resolve, reject);
1202				});
1203			}
1204
1205			return previousPromise =
1206				// If enqueue has been called before, then we want to wait until
1207				// all previous Promises have been resolved before calling invoke,
1208				// so that results are always delivered in the correct order. If
1209				// enqueue has not been called before, then it is important to
1210				// call invoke immediately, without waiting on a callback to fire,
1211				// so that the async generator function has the opportunity to do
1212				// any necessary setup in a predictable way. This predictability
1213				// is why the Promise constructor synchronously invokes its
1214				// executor callback, and why async functions synchronously
1215				// execute code before the first await. Since we implement simple
1216				// async functions in terms of async generators, it is especially
1217				// important to get this right, even though it requires care.
1218				previousPromise ? previousPromise.then(
1219					callInvokeWithMethodAndArg,
1220					// Avoid propagating failures to Promises returned by later
1221					// invocations of the iterator.
1222					callInvokeWithMethodAndArg
1223				) : callInvokeWithMethodAndArg();
1224		}
1225
1226		// Define the unified helper method that is used to implement .next,
1227		// .throw, and .return (see defineIteratorMethods).
1228		this._invoke = enqueue;
1229	}
1230
1231	defineIteratorMethods(AsyncIterator.prototype);
1232	AsyncIterator.prototype[asyncIteratorSymbol] = function () {
1233		return this;
1234	};
1235	runtime.AsyncIterator = AsyncIterator;
1236
1237	// Note that simple async functions are implemented on top of
1238	// AsyncIterator objects; they just return a Promise for the value of
1239	// the final result produced by the iterator.
1240	runtime.async = function(innerFn, outerFn, self, tryLocsList) {
1241		var iter = new AsyncIterator(
1242			wrap(innerFn, outerFn, self, tryLocsList)
1243		);
1244
1245		return runtime.isGeneratorFunction(outerFn)
1246			? iter // If outerFn is a generator, return the full iterator.
1247			: iter.next().then(function(result) {
1248				return result.done ? result.value : iter.next();
1249			});
1250	};
1251
1252	function makeInvokeMethod(innerFn, self, context) {
1253		var state = GenStateSuspendedStart;
1254
1255		return function invoke(method, arg) {
1256			if (state === GenStateExecuting) {
1257				throw new Error("Generator is already running");
1258			}
1259
1260			if (state === GenStateCompleted) {
1261				if (method === "throw") {
1262					throw arg;
1263				}
1264
1265				// Be forgiving, per 25.3.3.3.3 of the spec:
1266				// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
1267				return doneResult();
1268			}
1269
1270			context.method = method;
1271			context.arg = arg;
1272
1273			while (true) {
1274				var delegate = context.delegate;
1275				if (delegate) {
1276					var delegateResult = maybeInvokeDelegate(delegate, context);
1277					if (delegateResult) {
1278						if (delegateResult === ContinueSentinel) continue;
1279						return delegateResult;
1280					}
1281				}
1282
1283				if (context.method === "next") {
1284					// Setting context._sent for legacy support of Babel's
1285					// function.sent implementation.
1286					context.sent = context._sent = context.arg;
1287
1288				} else if (context.method === "throw") {
1289					if (state === GenStateSuspendedStart) {
1290						state = GenStateCompleted;
1291						throw context.arg;
1292					}
1293
1294					context.dispatchException(context.arg);
1295
1296				} else if (context.method === "return") {
1297					context.abrupt("return", context.arg);
1298				}
1299
1300				state = GenStateExecuting;
1301
1302				var record = tryCatch(innerFn, self, context);
1303				if (record.type === "normal") {
1304					// If an exception is thrown from innerFn, we leave state ===
1305					// GenStateExecuting and loop back for another invocation.
1306					state = context.done
1307						? GenStateCompleted
1308						: GenStateSuspendedYield;
1309
1310					if (record.arg === ContinueSentinel) {
1311						continue;
1312					}
1313
1314					return {
1315						value: record.arg,
1316						done: context.done
1317					};
1318
1319				} else if (record.type === "throw") {
1320					state = GenStateCompleted;
1321					// Dispatch the exception by looping back around to the
1322					// context.dispatchException(context.arg) call above.
1323					context.method = "throw";
1324					context.arg = record.arg;
1325				}
1326			}
1327		};
1328	}
1329
1330	// Call delegate.iterator[context.method](context.arg) and handle the
1331	// result, either by returning a { value, done } result from the
1332	// delegate iterator, or by modifying context.method and context.arg,
1333	// setting context.delegate to null, and returning the ContinueSentinel.
1334	function maybeInvokeDelegate(delegate, context) {
1335		var method = delegate.iterator[context.method];
1336		if (method === undefined) {
1337			// A .throw or .return when the delegate iterator has no .throw
1338			// method always terminates the yield* loop.
1339			context.delegate = null;
1340
1341			if (context.method === "throw") {
1342				if (delegate.iterator.return) {
1343					// If the delegate iterator has a return method, give it a
1344					// chance to clean up.
1345					context.method = "return";
1346					context.arg = undefined;
1347					maybeInvokeDelegate(delegate, context);
1348
1349					if (context.method === "throw") {
1350						// If maybeInvokeDelegate(context) changed context.method from
1351						// "return" to "throw", let that override the TypeError below.
vendor: 4,172 bytes, lines 1352-1505
1352						return ContinueSentinel;
1353					}
1354				}
1355
1356				context.method = "throw";
1357				context.arg = new TypeError(
1358					"The iterator does not provide a 'throw' method");
1359			}
1360
1361			return ContinueSentinel;
1362		}
1363
1364		var record = tryCatch(method, delegate.iterator, context.arg);
1365
1366		if (record.type === "throw") {
1367			context.method = "throw";
1368			context.arg = record.arg;
1369			context.delegate = null;
1370			return ContinueSentinel;
1371		}
1372
1373		var info = record.arg;
1374
1375		if (! info) {
1376			context.method = "throw";
1377			context.arg = new TypeError("iterator result is not an object");
1378			context.delegate = null;
1379			return ContinueSentinel;
1380		}
1381
1382		if (info.done) {
1383			// Assign the result of the finished delegate to the temporary
1384			// variable specified by delegate.resultName (see delegateYield).
1385			context[delegate.resultName] = info.value;
1386
1387			// Resume execution at the desired location (see delegateYield).
1388			context.next = delegate.nextLoc;
1389
1390			// If context.method was "throw" but the delegate handled the
1391			// exception, let the outer generator proceed normally. If
1392			// context.method was "next", forget context.arg since it has been
1393			// "consumed" by the delegate iterator. If context.method was
1394			// "return", allow the original .return call to continue in the
1395			// outer generator.
1396			if (context.method !== "return") {
1397				context.method = "next";
1398				context.arg = undefined;
1399			}
1400
1401		} else {
1402			// Re-yield the result returned by the delegate method.
1403			return info;
1404		}
1405
1406		// The delegate iterator is finished, so forget it and continue with
1407		// the outer generator.
1408		context.delegate = null;
1409		return ContinueSentinel;
1410	}
1411
1412	// Define Generator.prototype.{next,throw,return} in terms of the
1413	// unified ._invoke helper method.
1414	defineIteratorMethods(Gp);
1415
1416	Gp[toStringTagSymbol] = "Generator";
1417
1418	// A Generator should always return itself as the iterator object when the
1419	// @@iterator function is called on it. Some browsers' implementations of the
1420	// iterator prototype chain incorrectly implement this, causing the Generator
1421	// object to not be returned from this call. This ensures that doesn't happen.
1422	// See https://github.com/facebook/regenerator/issues/274 for more details.
1423	Gp[iteratorSymbol] = function() {
1424		return this;
1425	};
1426
1427	Gp.toString = function() {
1428		return "[object Generator]";
1429	};
1430
1431	function pushTryEntry(locs) {
1432		var entry = { tryLoc: locs[0] };
1433
1434		if (1 in locs) {
1435			entry.catchLoc = locs[1];
1436		}
1437
1438		if (2 in locs) {
1439			entry.finallyLoc = locs[2];
1440			entry.afterLoc = locs[3];
1441		}
1442
1443		this.tryEntries.push(entry);
1444	}
1445
1446	function resetTryEntry(entry) {
1447		var record = entry.completion || {};
1448		record.type = "normal";
1449		delete record.arg;
1450		entry.completion = record;
1451	}
1452
1453	function Context(tryLocsList) {
1454		// The root entry object (effectively a try statement without a catch
1455		// or a finally block) gives us a place to store values thrown from
1456		// locations where there is no enclosing try statement.
1457		this.tryEntries = [{ tryLoc: "root" }];
1458		tryLocsList.forEach(pushTryEntry, this);
1459		this.reset(true);
1460	}
1461
1462	runtime.keys = function(object) {
1463		var keys = [];
1464		for (var key in object) {
1465			keys.push(key);
1466		}
1467		keys.reverse();
1468
1469		// Rather than returning an object with a next method, we keep
1470		// things simple and return the next function itself.
1471		return function next() {
1472			while (keys.length) {
1473				var key = keys.pop();
1474				if (key in object) {
1475					next.value = key;
1476					next.done = false;
1477					return next;
1478				}
1479			}
1480
1481			// To avoid creating an additional object, we just hang the .value
1482			// and .done properties off the next function object itself. This
1483			// also ensures that the minifier will not anonymize the function.
1484			next.done = true;
1485			return next;
1486		};
1487	};
1488
1489	function values(iterable) {
1490		if (iterable) {
1491			var iteratorMethod = iterable[iteratorSymbol];
1492			if (iteratorMethod) {
1493				return iteratorMethod.call(iterable);
1494			}
1495
1496			if (typeof iterable.next === "function") {
1497				return iterable;
1498			}
1499
1500			if (!isNaN(iterable.length)) {
1501				var i = -1, next = function next() {
1502					while (++i < iterable.length) {
1503						if (hasOwn.call(iterable, i)) {
1504							next.value = iterable[i];
1505							next.done = false;
vendor: 10,304 bytes, lines 1506-1901
1506							return next;
1507						}
1508					}
1509
1510					next.value = undefined;
1511					next.done = true;
1512
1513					return next;
1514				};
1515
1516				return next.next = next;
1517			}
1518		}
1519
1520		// Return an iterator with no values.
1521		return { next: doneResult };
1522	}
1523	runtime.values = values;
1524
1525	function doneResult() {
1526		return { value: undefined, done: true };
1527	}
1528
1529	Context.prototype = {
1530		constructor: Context,
1531
1532		reset: function(skipTempReset) {
1533			this.prev = 0;
1534			this.next = 0;
1535			// Resetting context._sent for legacy support of Babel's
1536			// function.sent implementation.
1537			this.sent = this._sent = undefined;
1538			this.done = false;
1539			this.delegate = null;
1540
1541			this.method = "next";
1542			this.arg = undefined;
1543
1544			this.tryEntries.forEach(resetTryEntry);
1545
1546			if (!skipTempReset) {
1547				for (var name in this) {
1548					// Not sure about the optimal order of these conditions:
1549					if (name.charAt(0) === "t" &&
1550						hasOwn.call(this, name) &&
1551						!isNaN(+name.slice(1))) {
1552						this[name] = undefined;
1553					}
1554				}
1555			}
1556		},
1557
1558		stop: function() {
1559			this.done = true;
1560
1561			var rootEntry = this.tryEntries[0];
1562			var rootRecord = rootEntry.completion;
1563			if (rootRecord.type === "throw") {
1564				throw rootRecord.arg;
1565			}
1566
1567			return this.rval;
1568		},
1569
1570		dispatchException: function(exception) {
1571			if (this.done) {
1572				throw exception;
1573			}
1574
1575			var context = this;
1576			function handle(loc, caught) {
1577				record.type = "throw";
1578				record.arg = exception;
1579				context.next = loc;
1580
1581				if (caught) {
1582					// If the dispatched exception was caught by a catch block,
1583					// then let that catch block handle the exception normally.
1584					context.method = "next";
1585					context.arg = undefined;
1586				}
1587
1588				return !! caught;
1589			}
1590
1591			for (var i = this.tryEntries.length - 1; i >= 0; --i) {
1592				var entry = this.tryEntries[i];
1593				var record = entry.completion;
1594
1595				if (entry.tryLoc === "root") {
1596					// Exception thrown outside of any try block that could handle
1597					// it, so set the completion value of the entire function to
1598					// throw the exception.
1599					return handle("end");
1600				}
1601
1602				if (entry.tryLoc <= this.prev) {
1603					var hasCatch = hasOwn.call(entry, "catchLoc");
1604					var hasFinally = hasOwn.call(entry, "finallyLoc");
1605
1606					if (hasCatch && hasFinally) {
1607						if (this.prev < entry.catchLoc) {
1608							return handle(entry.catchLoc, true);
1609						} else if (this.prev < entry.finallyLoc) {
1610							return handle(entry.finallyLoc);
1611						}
1612
1613					} else if (hasCatch) {
1614						if (this.prev < entry.catchLoc) {
1615							return handle(entry.catchLoc, true);
1616						}
1617
1618					} else if (hasFinally) {
1619						if (this.prev < entry.finallyLoc) {
1620							return handle(entry.finallyLoc);
1621						}
1622
1623					} else {
1624						throw new Error("try statement without catch or finally");
1625					}
1626				}
1627			}
1628		},
1629
1630		abrupt: function(type, arg) {
1631			for (var i = this.tryEntries.length - 1; i >= 0; --i) {
1632				var entry = this.tryEntries[i];
1633				if (entry.tryLoc <= this.prev &&
1634					hasOwn.call(entry, "finallyLoc") &&
1635					this.prev < entry.finallyLoc) {
1636					var finallyEntry = entry;
1637					break;
1638				}
1639			}
1640
1641			if (finallyEntry &&
1642				(type === "break" ||
1643					type === "continue") &&
1644				finallyEntry.tryLoc <= arg &&
1645				arg <= finallyEntry.finallyLoc) {
1646				// Ignore the finally entry if control is not jumping to a
1647				// location outside the try/catch block.
1648				finallyEntry = null;
1649			}
1650
1651			var record = finallyEntry ? finallyEntry.completion : {};
1652			record.type = type;
1653			record.arg = arg;
1654
1655			if (finallyEntry) {
1656				this.method = "next";
1657				this.next = finallyEntry.finallyLoc;
1658				return ContinueSentinel;
1659			}
1660
1661			return this.complete(record);
1662		},
1663
1664		complete: function(record, afterLoc) {
1665			if (record.type === "throw") {
1666				throw record.arg;
1667			}
1668
1669			if (record.type === "break" ||
1670				record.type === "continue") {
1671				this.next = record.arg;
1672			} else if (record.type === "return") {
1673				this.rval = this.arg = record.arg;
1674				this.method = "return";
1675				this.next = "end";
1676			} else if (record.type === "normal" && afterLoc) {
1677				this.next = afterLoc;
1678			}
1679
1680			return ContinueSentinel;
1681		},
1682
1683		finish: function(finallyLoc) {
1684			for (var i = this.tryEntries.length - 1; i >= 0; --i) {
1685				var entry = this.tryEntries[i];
1686				if (entry.finallyLoc === finallyLoc) {
1687					this.complete(entry.completion, entry.afterLoc);
1688					resetTryEntry(entry);
1689					return ContinueSentinel;
1690				}
1691			}
1692		},
1693
1694		"catch": function(tryLoc) {
1695			for (var i = this.tryEntries.length - 1; i >= 0; --i) {
1696				var entry = this.tryEntries[i];
1697				if (entry.tryLoc === tryLoc) {
1698					var record = entry.completion;
1699					if (record.type === "throw") {
1700						var thrown = record.arg;
1701						resetTryEntry(entry);
1702					}
1703					return thrown;
1704				}
1705			}
1706
1707			// The context.catch method must only be called with a location
1708			// argument that corresponds to a known catch block.
1709			throw new Error("illegal catch attempt");
1710		},
1711
1712		delegateYield: function(iterable, resultName, nextLoc) {
1713			this.delegate = {
1714				iterator: values(iterable),
1715				resultName: resultName,
1716				nextLoc: nextLoc
1717			};
1718
1719			if (this.method === "next") {
1720				// Deliberately forget the last sent value so that we don't
1721				// accidentally pass it on to the delegate.
1722				this.arg = undefined;
1723			}
1724
1725			return ContinueSentinel;
1726		}
1727	};
1728})(
1729	// In sloppy mode, unbound `this` refers to the global object, fallback to
1730	// Function constructor if we're in global strict mode. That is sadly a form
1731	// of indirect eval which violates Content Security Policy.
1732	(function() { return this })() || Function("return this")()
1733);
1734
1735(function (exports) {
1736	'use strict';
1737
1738	function createCommonjsModule(fn, module) {
1739	  return module = {
1740	    exports: {}
1741	  }, fn(module, module.exports), module.exports;
1742	}
1743
1744	var _global = createCommonjsModule(function (module) {
1745	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
1746	var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self // eslint-disable-next-line no-new-func
1747	: Function('return this')();
1748	if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
1749	});
1750
1751	var hasOwnProperty = {}.hasOwnProperty;
1752
1753	var _has = function (it, key) {
1754	  return hasOwnProperty.call(it, key);
1755	};
1756
1757	var _fails = function (exec) {
1758	  try {
1759	    return !!exec();
1760	  } catch (e) {
1761	    return true;
1762	  }
1763	};
1764
1765	// Thank's IE8 for his funny defineProperty
1766	var _descriptors = !_fails(function () {
1767	  return Object.defineProperty({}, 'a', {
1768	    get: function get() {
1769	      return 7;
1770	    }
1771	  }).a != 7;
1772	});
1773
1774	var _core = createCommonjsModule(function (module) {
1775	var core = module.exports = {
1776	  version: '2.6.3'
1777	};
1778	if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
1779	});
1780	var _core_1 = _core.version;
1781
1782	var _isObject = function (it) {
1783	  return babelHelpers.typeof(it) === 'object' ? it !== null : typeof it === 'function';
1784	};
1785
1786	var _anObject = function (it) {
1787	  if (!_isObject(it)) throw TypeError(it + ' is not an object!');
1788	  return it;
1789	};
1790
1791	var document$1 = _global.document; // typeof document.createElement is 'object' in old IE
1792
1793
1794	var is = _isObject(document$1) && _isObject(document$1.createElement);
1795
1796	var _domCreate = function (it) {
1797	  return is ? document$1.createElement(it) : {};
1798	};
1799
1800	var _ie8DomDefine = !_descriptors && !_fails(function () {
1801	  return Object.defineProperty(_domCreate('div'), 'a', {
1802	    get: function get() {
1803	      return 7;
1804	    }
1805	  }).a != 7;
1806	});
1807
1808	// 7.1.1 ToPrimitive(input [, PreferredType])
1809	 // instead of the ES6 spec version, we didn't implement @@toPrimitive case
1810	// and the second argument - flag - preferred type is a string
1811
1812
1813	var _toPrimitive = function (it, S) {
1814	  if (!_isObject(it)) return it;
1815	  var fn, val;
1816	  if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
1817	  if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;
1818	  if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
1819	  throw TypeError("Can't convert object to primitive value");
1820	};
1821
1822	var dP = Object.defineProperty;
1823	var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
1824	  _anObject(O);
1825	  P = _toPrimitive(P, true);
1826	  _anObject(Attributes);
1827	  if (_ie8DomDefine) try {
1828	    return dP(O, P, Attributes);
1829	  } catch (e) {
1830	    /* empty */
1831	  }
1832	  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
1833	  if ('value' in Attributes) O[P] = Attributes.value;
1834	  return O;
1835	};
1836
1837	var _objectDp = {
1838		f: f
1839	};
1840
1841	var _propertyDesc = function (bitmap, value) {
1842	  return {
1843	    enumerable: !(bitmap & 1),
1844	    configurable: !(bitmap & 2),
1845	    writable: !(bitmap & 4),
1846	    value: value
1847	  };
1848	};
1849
1850	var _hide = _descriptors ? function (object, key, value) {
1851	  return _objectDp.f(object, key, _propertyDesc(1, value));
1852	} : function (object, key, value) {
1853	  object[key] = value;
1854	  return object;
1855	};
1856
1857	var id = 0;
1858	var px = Math.random();
1859
1860	var _uid = function (key) {
1861	  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
1862	};
1863
1864	var _redefine = createCommonjsModule(function (module) {
1865	var SRC = _uid('src');
1866
1867	var TO_STRING = 'toString';
1868	var $toString = Function[TO_STRING];
1869	var TPL = ('' + $toString).split(TO_STRING);
1870
1871	_core.inspectSource = function (it) {
1872	  return $toString.call(it);
1873	};
1874
1875	(module.exports = function (O, key, val, safe) {
1876	  var isFunction = typeof val == 'function';
1877	  if (isFunction) _has(val, 'name') || _hide(val, 'name', key);
1878	  if (O[key] === val) return;
1879	  if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
1880
1881	  if (O === _global) {
1882	    O[key] = val;
1883	  } else if (!safe) {
1884	    delete O[key];
1885	    _hide(O, key, val);
1886	  } else if (O[key]) {
1887	    O[key] = val;
1888	  } else {
1889	    _hide(O, key, val);
1890	  } // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
1891
1892	})(Function.prototype, TO_STRING, function toString() {
1893	  return typeof this == 'function' && this[SRC] || $toString.call(this);
1894	});
1895	});
1896
1897	var _aFunction = function (it) {
1898	  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
1899	  return it;
1900	};
1901
vendor: 4,977 bytes, lines 1902-2111
1902	// optional / simple context binding
1903
1904
1905	var _ctx = function (fn, that, length) {
1906	  _aFunction(fn);
1907	  if (that === undefined) return fn;
1908
1909	  switch (length) {
1910	    case 1:
1911	      return function (a) {
1912	        return fn.call(that, a);
1913	      };
1914
1915	    case 2:
1916	      return function (a, b) {
1917	        return fn.call(that, a, b);
1918	      };
1919
1920	    case 3:
1921	      return function (a, b, c) {
1922	        return fn.call(that, a, b, c);
1923	      };
1924	  }
1925
1926	  return function ()
1927	  /* ...args */
1928	  {
1929	    return fn.apply(that, arguments);
1930	  };
1931	};
1932
1933	var PROTOTYPE = 'prototype';
1934
1935	var $export = function $export(type, name, source) {
1936	  var IS_FORCED = type & $export.F;
1937	  var IS_GLOBAL = type & $export.G;
1938	  var IS_STATIC = type & $export.S;
1939	  var IS_PROTO = type & $export.P;
1940	  var IS_BIND = type & $export.B;
1941	  var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];
1942	  var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});
1943	  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
1944	  var key, own, out, exp;
1945	  if (IS_GLOBAL) source = name;
1946
1947	  for (key in source) {
1948	    // contains in native
1949	    own = !IS_FORCED && target && target[key] !== undefined; // export native or passed
1950
1951	    out = (own ? target : source)[key]; // bind timers to global for call from export context
1952
1953	    exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out; // extend global
1954
1955	    if (target) _redefine(target, key, out, type & $export.U); // export
1956
1957	    if (exports[key] != out) _hide(exports, key, exp);
1958	    if (IS_PROTO && expProto[key] != out) expProto[key] = out;
1959	  }
1960	};
1961
1962	$export.F = 1; // forced
1963
1964	$export.G = 2; // global
1965
1966	$export.S = 4; // static
1967
1968	$export.P = 8; // proto
1969
1970	$export.B = 16; // bind
1971
1972	$export.W = 32; // wrap
1973
1974	$export.U = 64; // safe
1975
1976	$export.R = 128; // real proto method for `library`
1977
1978	var _export = $export;
1979
1980	var _meta = createCommonjsModule(function (module) {
1981	var META = _uid('meta');
1982
1983
1984
1985
1986
1987	var setDesc = _objectDp.f;
1988
1989	var id = 0;
1990
1991	var isExtensible = Object.isExtensible || function () {
1992	  return true;
1993	};
1994
1995	var FREEZE = !_fails(function () {
1996	  return isExtensible(Object.preventExtensions({}));
1997	});
1998
1999	var setMeta = function setMeta(it) {
2000	  setDesc(it, META, {
2001	    value: {
2002	      i: 'O' + ++id,
2003	      // object ID
2004	      w: {} // weak collections IDs
2005
2006	    }
2007	  });
2008	};
2009
2010	var fastKey = function fastKey(it, create) {
2011	  // return primitive with prefix
2012	  if (!_isObject(it)) return babelHelpers.typeof(it) == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
2013
2014	  if (!_has(it, META)) {
2015	    // can't set metadata to uncaught frozen object
2016	    if (!isExtensible(it)) return 'F'; // not necessary to add metadata
2017
2018	    if (!create) return 'E'; // add missing metadata
2019
2020	    setMeta(it); // return object ID
2021	  }
2022
2023	  return it[META].i;
2024	};
2025
2026	var getWeak = function getWeak(it, create) {
2027	  if (!_has(it, META)) {
2028	    // can't set metadata to uncaught frozen object
2029	    if (!isExtensible(it)) return true; // not necessary to add metadata
2030
2031	    if (!create) return false; // add missing metadata
2032
2033	    setMeta(it); // return hash weak collections IDs
2034	  }
2035
2036	  return it[META].w;
2037	}; // add metadata on freeze-family methods calling
2038
2039
2040	var onFreeze = function onFreeze(it) {
2041	  if (FREEZE && meta.NEED && isExtensible(it) && !_has(it, META)) setMeta(it);
2042	  return it;
2043	};
2044
2045	var meta = module.exports = {
2046	  KEY: META,
2047	  NEED: false,
2048	  fastKey: fastKey,
2049	  getWeak: getWeak,
2050	  onFreeze: onFreeze
2051	};
2052	});
2053	var _meta_1 = _meta.KEY;
2054	var _meta_2 = _meta.NEED;
2055	var _meta_3 = _meta.fastKey;
2056	var _meta_4 = _meta.getWeak;
2057	var _meta_5 = _meta.onFreeze;
2058
2059	var _library = false;
2060
2061	var _shared = createCommonjsModule(function (module) {
2062	var SHARED = '__core-js_shared__';
2063	var store = _global[SHARED] || (_global[SHARED] = {});
2064	(module.exports = function (key, value) {
2065	  return store[key] || (store[key] = value !== undefined ? value : {});
2066	})('versions', []).push({
2067	  version: _core.version,
2068	  mode: _library ? 'pure' : 'global',
2069	  copyright: '(c) 2019 Denis Pushkarev (zloirock.ru)'
2070	});
2071	});
2072
2073	var _wks = createCommonjsModule(function (module) {
2074	var store = _shared('wks');
2075
2076
2077
2078	var _Symbol = _global.Symbol;
2079
2080	var USE_SYMBOL = typeof _Symbol == 'function';
2081
2082	var $exports = module.exports = function (name) {
2083	  return store[name] || (store[name] = USE_SYMBOL && _Symbol[name] || (USE_SYMBOL ? _Symbol : _uid)('Symbol.' + name));
2084	};
2085
2086	$exports.store = store;
2087	});
2088
2089	var def = _objectDp.f;
2090
2091
2092
2093	var TAG = _wks('toStringTag');
2094
2095	var _setToStringTag = function (it, tag, stat) {
2096	  if (it && !_has(it = stat ? it : it.prototype, TAG)) def(it, TAG, {
2097	    configurable: true,
2098	    value: tag
2099	  });
2100	};
2101
2102	var f$1 = _wks;
2103
2104	var _wksExt = {
2105		f: f$1
2106	};
2107
2108	var defineProperty = _objectDp.f;
2109
2110	var _wksDefine = function (name) {
2111	  var $Symbol = _core.Symbol || (_core.Symbol = _library ? {}
vendor: 2,295 bytes, lines 2111-2204
2111 : _global.Symbol || {});
2112	  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, {
2113	    value: _wksExt.f(name)
2114	  });
2115	};
2116
2117	var toString = {}.toString;
2118
2119	var _cof = function (it) {
2120	  return toString.call(it).slice(8, -1);
2121	};
2122
2123	// fallback for non-array-like ES3 and non-enumerable old V8 strings
2124	 // eslint-disable-next-line no-prototype-builtins
2125
2126
2127	var _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
2128	  return _cof(it) == 'String' ? it.split('') : Object(it);
2129	};
2130
2131	// 7.2.1 RequireObjectCoercible(argument)
2132	var _defined = function (it) {
2133	  if (it == undefined) throw TypeError("Can't call method on  " + it);
2134	  return it;
2135	};
2136
2137	// to indexed object, toObject with fallback for non-array-like ES3 strings
2138
2139
2140
2141
2142	var _toIobject = function (it) {
2143	  return _iobject(_defined(it));
2144	};
2145
2146	// 7.1.4 ToInteger
2147	var ceil = Math.ceil;
2148	var floor = Math.floor;
2149
2150	var _toInteger = function (it) {
2151	  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
2152	};
2153
2154	// 7.1.15 ToLength
2155
2156
2157	var min = Math.min;
2158
2159	var _toLength = function (it) {
2160	  return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
2161	};
2162
2163	var max = Math.max;
2164	var min$1 = Math.min;
2165
2166	var _toAbsoluteIndex = function (index, length) {
2167	  index = _toInteger(index);
2168	  return index < 0 ? max(index + length, 0) : min$1(index, length);
2169	};
2170
2171	// false -> Array#indexOf
2172	// true  -> Array#includes
2173
2174
2175
2176
2177
2178
2179	var _arrayIncludes = function (IS_INCLUDES) {
2180	  return function ($this, el, fromIndex) {
2181	    var O = _toIobject($this);
2182	    var length = _toLength(O.length);
2183	    var index = _toAbsoluteIndex(fromIndex, length);
2184	    var value; // Array#includes uses SameValueZero equality algorithm
2185	    // eslint-disable-next-line no-self-compare
2186
2187	    if (IS_INCLUDES && el != el) while (length > index) {
2188	      value = O[index++]; // eslint-disable-next-line no-self-compare
2189
2190	      if (value != value) return true; // Array#indexOf ignores holes, Array#includes - not
2191	    } else for (; length > index; index++) {
2192	      if (IS_INCLUDES || index in O) {
2193	        if (O[index] === el) return IS_INCLUDES || index || 0;
2194	      }
2195	    }
2196	    return !IS_INCLUDES && -1;
2197	  };
2198	};
2199
2200	var shared = _shared('keys');
2201
2202
2203
2204	var _sharedKey = function (key) {
2205	  return shared[key] || (shared[key] = _uid(key));
2206	};
2207
2208	var arrayIndexOf = _arrayIncludes(false);
2209
2210	var IE_PROTO = _sharedKey('IE_PROTO');
2211
2212	var _objectKeysInternal = function (object, names) {
2213	  var O = _toIobject(object);
2214	  var i = 0;
2215	  var result = [];
2216	  var key;
2217
2218	  for (key in O) {
2219	    if (key != IE_PROTO) _has(O, key) && result.push(key);
2220	  } // Don't enum bug & hidden keys
2221
2222
2223	  while (names.length > i) {
2224	    if (_has(O, key = names[i++])) {
2225	      ~arrayIndexOf(result, key) || result.push(key);
2226	    }
2227	  }
2228
2229	  return result;
2230	};
2231
2232	// IE 8- don't enum bug keys
2233	var _enumBugKeys = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(',');
2234
2235	// 19.1.2.14 / 15.2.3.14 Object.keys(O)
2236
2237
2238
2239
2240	var _objectKeys = Object.keys || function keys(O) {
2241	  return _objectKeysInternal(O, _enumBugKeys);
2242	};
2243
2244	var f$2 = Object.getOwnPropertySymbols;
2245
2246	var _objectGops = {
2247		f: f$2
2248	};
2249
2250	var f$3 = {}.propertyIsEnumerable;
2251
2252	var _objectPie = {
2253		f: f$3
2254	};
2255
2256	// all enumerable object keys, includes symbols
2257
2258
2259
2260
2261
2262
2263	var _enumKeys = function (it) {
2264	  var result = _objectKeys(it);
2265	  var getSymbols = _objectGops.f;
2266
2267	  if (getSymbols) {
2268	    var symbols = getSymbols(it);
2269	    var isEnum = _objectPie.f;
2270	    var i = 0;
2271	    var key;
2272
2273	    while (symbols.length > i) {
2274	      if (isEnum.call(it, key = symbols[i++])) result.push(key);
2275	    }
2276	  }
2277
2278	  return result;
2279	};
2280
2281	// 7.2.2 IsArray(argument)
2282
2283
2284	var _isArray = Array.isArray || function isArray(arg) {
2285	  return _cof(arg) == 'Array';
2286	};
2287
2288	var _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {
2289	  _anObject(O);
2290	  var keys = _objectKeys(Properties);
2291	  var length = keys.length;
2292	  var i = 0;
2293	  var P;
2294
2295	  while (length > i) {
2296	    _objectDp.f(O, P = keys[i++], Properties[P]);
2297	  }
2298
2299	  return O;
2300	};
2301
2302	var document$2 = _global.document;
2303
2304	var _html = document$2 && document$2.documentElement;
2305
2306	// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
2307
2308
2309
2310
2311
2312
2313	var IE_PROTO$1 = _sharedKey('IE_PROTO');
2314
2315	var Empty = function Empty() {
2316	  /* empty */
2317	};
2318
2319	var PROTOTYPE$1 = 'prototype'; // Create object with fake `null` prototype: use iframe Object with cleared prototype
2320
2321	var _createDict = function createDict() {
2322	  // Thrash, waste and sodomy: IE GC bug
2323	  var iframe = _domCreate('iframe');
2324
2325	  var i = _enumBugKeys.length;
2326	  var lt = '<';
2327	  var gt = '>';
2328	  var iframeDocument;
2329	  iframe.style.display = 'none';
2330
2331	  _html.appendChild(iframe);
2332
2333	  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
2334	  // createDict = iframe.contentWindow.Object;
2335	  // html.removeChild(iframe);
2336
2337	  iframeDocument = iframe.contentWindow.document;
2338	  iframeDocument.open();
2339	  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
2340	  iframeDocument.close();
2341	  _createDict = iframeDocument.F;
2342
2343	  while (i--) {
2344	    delete _createDict[PROTOTYPE$1][_enumBugKeys[i]];
2345	  }
2346
2347	  return _createDict();
2348	};
2349
2350	var _objectCreate = Object.create || function create(O, Properties) {
2351	  var result;
2352
2353	  if (O !== null) {
2354	    Empty[PROTOTYPE$1] = _anObject(O);
2355	    result = new Empty();
2356	    Empty[PROTOTYPE$1] = null; // add "__proto__" for Object.getPrototypeOf polyfill
2357
2358	    result[IE_PROTO$1] = O;
2359	  } else result = _createDict();
2360
2361	  return Properties === undefined ? result : _objectDps(result, Properties);
2362	};
2363
2364	// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
2365
2366
2367	var hiddenKeys = _enumBugKeys.concat('length', 'prototype');
2368
2369	var f$4 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
2370	  return _objectKeysInternal(O, hiddenKeys);
2371	};
2372
2373	var _objectGopn = {
2374		f: f$4
2375	};
2376
2377	// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
2378
2379
2380	var gOPN = _objectGopn.f;
2381
2382	var toString$1 = {}.toString;
2383	var windowNames = (typeof window === "undefined" ? "undefined" : babelHelpers.typeof(window)) == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [];
2384
2385	var getWindowNames = function getWindowNames(it) {
2386	  try {
2387	    return gOPN(it);
2388	  } catch (e) {
2389	    return windowNames.slice();
2390	  }
2391	};
2392
2393	var f$5 = function getOwnPropertyNames(it) {
2394	  return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(_toIobject(it));
2395	};
2396
2397	var _objectGopnExt = {
2398		f: f$5
2399	};
2400
2401	var gOPD = Object.getOwnPropertyDescriptor;
2402	var f$6 = _descriptors ? gOPD : function getOwnPropertyDescriptor(O, P) {
2403	  O = _toIobject(O);
2404	  P = _toPrimitive(P, true);
2405	  if (_ie8DomDefine) try {
2406	    return gOPD(O, P);
2407	  } catch (e) {
2408	    /* empty */
2409	  }
2410	  if (_has(O, P)) return _propertyDesc(!_objectPie.f.call(O, P), O[P]);
2411	};
2412
2413	var _objectGopd = {
2414		f: f$6
2415	};
2416
2417	var META = _meta.KEY;
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457	var gOPD$1 = _objectGopd.f;
2458	var dP$1 = _objectDp.f;
2459	var gOPN$1 = _objectGopnExt.f;
2460	var $Symbol = _global.Symbol;
2461	var $JSON = _global.JSON;
2462
2463	var _stringify = $JSON && $JSON.stringify;
2464
2465	var PROTOTYPE$2 = 'prototype';
2466	var HIDDEN = _wks('_hidden');
2467	var TO_PRIMITIVE = _wks('toPrimitive');
2468	var isEnum = {}.propertyIsEnumerable;
2469	var SymbolRegistry = _shared('symbol-registry');
2470	var AllSymbols = _shared('symbols');
vendor: 4,817 bytes, lines 2471-2626
2471	var OPSymbols = _shared('op-symbols');
2472	var ObjectProto = Object[PROTOTYPE$2];
2473	var USE_NATIVE = typeof $Symbol == 'function';
2474	var QObject = _global.QObject; // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
2475
2476	var setter = !QObject || !QObject[PROTOTYPE$2] || !QObject[PROTOTYPE$2].findChild; // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
2477
2478	var setSymbolDesc = _descriptors && _fails(function () {
2479	  return _objectCreate(dP$1({}, 'a', {
2480	    get: function get() {
2481	      return dP$1(this, 'a', {
2482	        value: 7
2483	      }).a;
2484	    }
2485	  })).a != 7;
2486	}) ? function (it, key, D) {
2487	  var protoDesc = gOPD$1(ObjectProto, key);
2488	  if (protoDesc) delete ObjectProto[key];
2489	  dP$1(it, key, D);
2490	  if (protoDesc && it !== ObjectProto) dP$1(ObjectProto, key, protoDesc);
2491	} : dP$1;
2492
2493	var wrap = function wrap(tag) {
2494	  var sym = AllSymbols[tag] = _objectCreate($Symbol[PROTOTYPE$2]);
2495
2496	  sym._k = tag;
2497	  return sym;
2498	};
2499
2500	var isSymbol = USE_NATIVE && babelHelpers.typeof($Symbol.iterator) == 'symbol' ? function (it) {
2501	  return babelHelpers.typeof(it) == 'symbol';
2502	} : function (it) {
2503	  return it instanceof $Symbol;
2504	};
2505
2506	var $defineProperty = function defineProperty(it, key, D) {
2507	  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
2508	  _anObject(it);
2509	  key = _toPrimitive(key, true);
2510	  _anObject(D);
2511
2512	  if (_has(AllSymbols, key)) {
2513	    if (!D.enumerable) {
2514	      if (!_has(it, HIDDEN)) dP$1(it, HIDDEN, _propertyDesc(1, {}));
2515	      it[HIDDEN][key] = true;
2516	    } else {
2517	      if (_has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
2518	      D = _objectCreate(D, {
2519	        enumerable: _propertyDesc(0, false)
2520	      });
2521	    }
2522
2523	    return setSymbolDesc(it, key, D);
2524	  }
2525
2526	  return dP$1(it, key, D);
2527	};
2528
2529	var $defineProperties = function defineProperties(it, P) {
2530	  _anObject(it);
2531	  var keys = _enumKeys(P = _toIobject(P));
2532	  var i = 0;
2533	  var l = keys.length;
2534	  var key;
2535
2536	  while (l > i) {
2537	    $defineProperty(it, key = keys[i++], P[key]);
2538	  }
2539
2540	  return it;
2541	};
2542
2543	var $create = function create(it, P) {
2544	  return P === undefined ? _objectCreate(it) : $defineProperties(_objectCreate(it), P);
2545	};
2546
2547	var $propertyIsEnumerable = function propertyIsEnumerable(key) {
2548	  var E = isEnum.call(this, key = _toPrimitive(key, true));
2549	  if (this === ObjectProto && _has(AllSymbols, key) && !_has(OPSymbols, key)) return false;
2550	  return E || !_has(this, key) || !_has(AllSymbols, key) || _has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
2551	};
2552
2553	var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
2554	  it = _toIobject(it);
2555	  key = _toPrimitive(key, true);
2556	  if (it === ObjectProto && _has(AllSymbols, key) && !_has(OPSymbols, key)) return;
2557	  var D = gOPD$1(it, key);
2558	  if (D && _has(AllSymbols, key) && !(_has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
2559	  return D;
2560	};
2561
2562	var $getOwnPropertyNames = function getOwnPropertyNames(it) {
2563	  var names = gOPN$1(_toIobject(it));
2564	  var result = [];
2565	  var i = 0;
2566	  var key;
2567
2568	  while (names.length > i) {
2569	    if (!_has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
2570	  }
2571
2572	  return result;
2573	};
2574
2575	var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
2576	  var IS_OP = it === ObjectProto;
2577	  var names = gOPN$1(IS_OP ? OPSymbols : _toIobject(it));
2578	  var result = [];
2579	  var i = 0;
2580	  var key;
2581
2582	  while (names.length > i) {
2583	    if (_has(AllSymbols, key = names[i++]) && (IS_OP ? _has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
2584	  }
2585
2586	  return result;
2587	}; // 19.4.1.1 Symbol([description])
2588
2589
2590	if (!USE_NATIVE) {
2591	  $Symbol = function _Symbol() {
2592	    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
2593	    var tag = _uid(arguments.length > 0 ? arguments[0] : undefined);
2594
2595	    var $set = function $set(value) {
2596	      if (this === ObjectProto) $set.call(OPSymbols, value);
2597	      if (_has(this, HIDDEN) && _has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
2598	      setSymbolDesc(this, tag, _propertyDesc(1, value));
2599	    };
2600
2601	    if (_descriptors && setter) setSymbolDesc(ObjectProto, tag, {
2602	      configurable: true,
2603	      set: $set
2604	    });
2605	    return wrap(tag);
2606	  };
2607
2608	  _redefine($Symbol[PROTOTYPE$2], 'toString', function toString() {
2609	    return this._k;
2610	  });
2611	  _objectGopd.f = $getOwnPropertyDescriptor;
2612	  _objectDp.f = $defineProperty;
2613	  _objectGopn.f = _objectGopnExt.f = $getOwnPropertyNames;
2614	  _objectPie.f = $propertyIsEnumerable;
2615	  _objectGops.f = $getOwnPropertySymbols;
2616
2617	  if (_descriptors && !_library) {
2618	    _redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
2619	  }
2620
2621	  _wksExt.f = function (name) {
2622	    return wrap(_wks(name));
2623	  };
2624	}
2625
2626	_export(_export.G + _export.W + _export.F * !USE_NATIVE, {
2627	  Symbol: $Symbol
2628	});
2629
2630	for (var es6Symbols = // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
2631	'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'.split(','), j = 0; es6Symbols.length > j;) {
2632	  _wks(es6Symbols[j++]);
2633	}
2634
2635	for (var wellKnownSymbols = _objectKeys(_wks.store), k = 0; wellKnownSymbols.length > k;) {
2636	  _wksDefine(wellKnownSymbols[k++]);
2637	}
2638
2639	_export(_export.S + _export.F * !USE_NATIVE, 'Symbol', {
2640	  // 19.4.2.1 Symbol.for(key)
2641	  'for': function _for(key) {
2642	    return _has(SymbolRegistry, key += '') ? SymbolRegistry[key] : SymbolRegistry[key] = $Symbol(key);
2643	  },
2644	  // 19.4.2.5 Symbol.keyFor(sym)
2645	  keyFor: function keyFor(sym) {
2646	    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
2647
2648	    for (var key in SymbolRegistry) {
2649	      if (SymbolRegistry[key] === sym) return key;
2650	    }
2651	  },
2652	  useSetter: function useSetter() {
2653	    setter = true;
2654	  },
2655	  useSimple: function useSimple() {
2656	    setter = false;
2657	  }
2658	});
2659	_export(_export.S + _export.F * !USE_NATIVE, 'Object', {
2660	  // 19.1.2.2 Object.create(O [, Properties])
2661	  create: $create,
2662	  // 19.1.2.4 Object.defineProperty(O, P, Attributes)
2663	  defineProperty: $defineProperty,
2664	  // 19.1.2.3 Object.defineProperties(O, Properties)
2665	  defineProperties: $defineProperties,
2666	  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
2667	  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
2668	  // 19.1.2.7 Object.getOwnPropertyNames(O)
2669	  getOwnPropertyNames: $getOwnPropertyNames,
2670	  // 19.1.2.8 Object.getOwnPropertySymbols(O)
2671	  getOwnPropertySymbols: $getOwnPropertySymbols
2672	}); // 24.3.2 JSON.stringify(value [, replacer [, space]])
2673
2674	$JSON && _export(_export.S + _export.F * (!USE_NATIVE || _fails(function () {
2675	  var S = $Symbol(); // MS Edge converts symbol values to JSON as {}
2676	  // WebKit converts symbol values to JSON as null
2677	  // V8 throws on boxed symbols
2678
2679	  return _stringify([S]) != '[null]' || _stringify({
2680	    a: S
2681	  }) != '{}' || _stringify(Object(S)) != '{}';
2682	})), 'JSON', {
2683	  stringify: function stringify(it) {
2684	    var args = [it];
2685	    var i = 1;
2686	    var replacer, $replacer;
2687
2688	    while (arguments.length > i) {
2689	      args.push(arguments[i++]);
2690	    }
2691
2692	    $replacer = replacer = args[1];
2693	    if (!_isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
2694
2695	    if (!_isArray(replacer)) replacer = function replacer(key, value) {
2696	      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
2697	      if (!isSymbol(value)) return value;
2698	    };
2699	    args[1] = replacer;
2700	    return _stringify.apply($JSON, args);
2701	  }
2702	}); // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
2703
2704	$Symbol[PROTOTYPE$2][TO_PRIMITIVE] || _hide($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf); // 19.4.3.5 Symbol.prototype[@@toStringTag]
2705
2706	_setToStringTag($Symbol, 'Symbol'); // 20.2.1.9 Math[@@toStringTag]
2707
2708	_setToStringTag(Math, 'Math', true); // 24.3.3 JSON[@@toStringTag]
2709
2710	_setToStringTag(_global.JSON, 'JSON', true);
2711
2712	// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
2713
2714
2715	_export(_export.S, 'Object', {
2716	  create: _objectCreate
2717	});
2718
2719	// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
2720
2721
2722	_export(_export.S + _export.F * !_descriptors, 'Object', {
2723	  defineProperty: _objectDp.f
2724	});
2725
2726	// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)
2727
2728
2729	_export(_export.S + _export.F * !_descriptors, 'Object', {
2730	  defineProperties: _objectDps
2731	});
2732
2733	// most Object methods by ES6 should accept primitives
2734
2735
2736
2737
2738
2739
2740	var _objectSap = function (KEY, exec) {
2741	  var fn = (_core.Object || {})[KEY] || Object[KEY];
2742	  var exp = {};
2743	  exp[KEY] = exec(fn);
2744	  _export(_export.S + _export.F * _fails(function () {
2745	    fn(1);
2746	  }), 'Object', exp);
2747	};
2748
2749	// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
2750
2751
2752	var $getOwnPropertyDescriptor$1 = _objectGopd.f;
2753
2754	_objectSap('getOwnPropertyDescriptor', function () {
2755	  return function getOwnPropertyDescriptor(it, key) {
2756	    return $getOwnPropertyDescriptor$1(_toIobject(it), key);
2757	  };
2758	});
2759
2760	// 7.1.13 ToObject(argument)
2761
2762
2763	var _toObject = function (it) {
2764	  return Object(_defined(it));
2765	};
2766
2767	// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
2768
2769
2770
2771
2772	var IE_PROTO$2 = _sharedKey('IE_PROTO');
2773
2774	var ObjectProto$1 = Object.prototype;
2775
2776	var _objectGpo = Object.getPrototypeOf || function (O) {
2777	  O = _toObject(O);
2778	  if (_has(O, IE_PROTO$2)) return O[IE_PROTO$2];
2779
2780	  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
2781	    return O.constructor.prototype;
2782	  }
2783
2784	  return O instanceof Object ? ObjectProto$1 : null;
2785	};
2786
2787	// 19.1.2.9 Object.getPrototypeOf(O)
2788
2789
2790
2791
2792	_objectSap('getPrototypeOf', function () {
2793	  return function getPrototypeOf(it) {
2794	    return _objectGpo(_toObject(it));
2795	  };
2796	});
2797
vendor: 37,188 bytes, lines 2798-4260
2798	// 19.1.2.14 Object.keys(O)
2799
2800
2801
2802
2803	_objectSap('keys', function () {
2804	  return function keys(it) {
2805	    return _objectKeys(_toObject(it));
2806	  };
2807	});
2808
2809	// 19.1.2.7 Object.getOwnPropertyNames(O)
2810	_objectSap('getOwnPropertyNames', function () {
2811	  return _objectGopnExt.f;
2812	});
2813
2814	// 19.1.2.5 Object.freeze(O)
2815
2816
2817	var meta = _meta.onFreeze;
2818
2819	_objectSap('freeze', function ($freeze) {
2820	  return function freeze(it) {
2821	    return $freeze && _isObject(it) ? $freeze(meta(it)) : it;
2822	  };
2823	});
2824
2825	// 19.1.2.17 Object.seal(O)
2826
2827
2828	var meta$1 = _meta.onFreeze;
2829
2830	_objectSap('seal', function ($seal) {
2831	  return function seal(it) {
2832	    return $seal && _isObject(it) ? $seal(meta$1(it)) : it;
2833	  };
2834	});
2835
2836	// 19.1.2.15 Object.preventExtensions(O)
2837
2838
2839	var meta$2 = _meta.onFreeze;
2840
2841	_objectSap('preventExtensions', function ($preventExtensions) {
2842	  return function preventExtensions(it) {
2843	    return $preventExtensions && _isObject(it) ? $preventExtensions(meta$2(it)) : it;
2844	  };
2845	});
2846
2847	// 19.1.2.12 Object.isFrozen(O)
2848
2849
2850	_objectSap('isFrozen', function ($isFrozen) {
2851	  return function isFrozen(it) {
2852	    return _isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
2853	  };
2854	});
2855
2856	// 19.1.2.13 Object.isSealed(O)
2857
2858
2859	_objectSap('isSealed', function ($isSealed) {
2860	  return function isSealed(it) {
2861	    return _isObject(it) ? $isSealed ? $isSealed(it) : false : true;
2862	  };
2863	});
2864
2865	// 19.1.2.11 Object.isExtensible(O)
2866
2867
2868	_objectSap('isExtensible', function ($isExtensible) {
2869	  return function isExtensible(it) {
2870	    return _isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
2871	  };
2872	});
2873
2874	var $assign = Object.assign; // should work with symbols and should have deterministic property order (V8 bug)
2875
2876	var _objectAssign = !$assign || _fails(function () {
2877	  var A = {};
2878	  var B = {}; // eslint-disable-next-line no-undef
2879
2880	  var S = Symbol();
2881	  var K = 'abcdefghijklmnopqrst';
2882	  A[S] = 7;
2883	  K.split('').forEach(function (k) {
2884	    B[k] = k;
2885	  });
2886	  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
2887	}) ? function assign(target, source) {
2888	  // eslint-disable-line no-unused-vars
2889	  var T = _toObject(target);
2890	  var aLen = arguments.length;
2891	  var index = 1;
2892	  var getSymbols = _objectGops.f;
2893	  var isEnum = _objectPie.f;
2894
2895	  while (aLen > index) {
2896	    var S = _iobject(arguments[index++]);
2897	    var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : _objectKeys(S);
2898	    var length = keys.length;
2899	    var j = 0;
2900	    var key;
2901
2902	    while (length > j) {
2903	      if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
2904	    }
2905	  }
2906
2907	  return T;
2908	} : $assign;
2909
2910	// 19.1.3.1 Object.assign(target, source)
2911
2912
2913	_export(_export.S + _export.F, 'Object', {
2914	  assign: _objectAssign
2915	});
2916
2917	// 7.2.9 SameValue(x, y)
2918	var _sameValue = Object.is || function is(x, y) {
2919	  // eslint-disable-next-line no-self-compare
2920	  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
2921	};
2922
2923	// 19.1.3.10 Object.is(value1, value2)
2924
2925
2926	_export(_export.S, 'Object', {
2927	  is: _sameValue
2928	});
2929
2930	// Works with __proto__ only. Old v8 can't work with null proto objects.
2931
2932	/* eslint-disable no-proto */
2933
2934
2935
2936
2937	var check = function check(O, proto) {
2938	  _anObject(O);
2939	  if (!_isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
2940	};
2941
2942	var _setProto = {
2943	  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
2944	  function (test, buggy, set) {
2945	    try {
2946	      set = _ctx(Function.call, _objectGopd.f(Object.prototype, '__proto__').set, 2);
2947	      set(test, []);
2948	      buggy = !(test instanceof Array);
2949	    } catch (e) {
2950	      buggy = true;
2951	    }
2952
2953	    return function setPrototypeOf(O, proto) {
2954	      check(O, proto);
2955	      if (buggy) O.__proto__ = proto;else set(O, proto);
2956	      return O;
2957	    };
2958	  }({}, false) : undefined),
2959	  check: check
2960	};
2961
2962	// 19.1.3.19 Object.setPrototypeOf(O, proto)
2963
2964
2965	_export(_export.S, 'Object', {
2966	  setPrototypeOf: _setProto.set
2967	});
2968
2969	// getting tag from 19.1.3.6 Object.prototype.toString()
2970
2971
2972	var TAG$1 = _wks('toStringTag'); // ES3 wrong here
2973
2974
2975	var ARG = _cof(function () {
2976	  return arguments;
2977	}()) == 'Arguments'; // fallback for IE11 Script Access Denied error
2978
2979	var tryGet = function tryGet(it, key) {
2980	  try {
2981	    return it[key];
2982	  } catch (e) {
2983	    /* empty */
2984	  }
2985	};
2986
2987	var _classof = function (it) {
2988	  var O, T, B;
2989	  return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case
2990	  : typeof (T = tryGet(O = Object(it), TAG$1)) == 'string' ? T // builtinTag case
2991	  : ARG ? _cof(O) // ES3 arguments fallback
2992	  : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
2993	};
2994
2995	var test = {};
2996	test[_wks('toStringTag')] = 'z';
2997
2998	if (test + '' != '[object z]') {
2999	  _redefine(Object.prototype, 'toString', function toString() {
3000	    return '[object ' + _classof(this) + ']';
3001	  }, true);
3002	}
3003
3004	// fast apply, http://jsperf.lnkit.com/fast-apply/5
3005	var _invoke = function (fn, args, that) {
3006	  var un = that === undefined;
3007
3008	  switch (args.length) {
3009	    case 0:
3010	      return un ? fn() : fn.call(that);
3011
3012	    case 1:
3013	      return un ? fn(args[0]) : fn.call(that, args[0]);
3014
3015	    case 2:
3016	      return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]);
3017
3018	    case 3:
3019	      return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]);
3020
3021	    case 4:
3022	      return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]);
3023	  }
3024
3025	  return fn.apply(that, args);
3026	};
3027
3028	var arraySlice = [].slice;
3029	var factories = {};
3030
3031	var construct = function construct(F, len, args) {
3032	  if (!(len in factories)) {
3033	    for (var n = [], i = 0; i < len; i++) {
3034	      n[i] = 'a[' + i + ']';
3035	    } // eslint-disable-next-line no-new-func
3036
3037
3038	    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');
3039	  }
3040
3041	  return factories[len](F, args);
3042	};
3043
3044	var _bind = Function.bind || function bind(that
3045	/* , ...args */
3046	) {
3047	  var fn = _aFunction(this);
3048	  var partArgs = arraySlice.call(arguments, 1);
3049
3050	  var bound = function bound()
3051	  /* args... */
3052	  {
3053	    var args = partArgs.concat(arraySlice.call(arguments));
3054	    return this instanceof bound ? construct(fn, args.length, args) : _invoke(fn, args, that);
3055	  };
3056
3057	  if (_isObject(fn.prototype)) bound.prototype = fn.prototype;
3058	  return bound;
3059	};
3060
3061	// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)
3062
3063
3064	_export(_export.P, 'Function', {
3065	  bind: _bind
3066	});
3067
3068	var dP$2 = _objectDp.f;
3069
3070	var FProto = Function.prototype;
3071	var nameRE = /^\s*function ([^ (]*)/;
3072	var NAME = 'name'; // 19.2.4.2 name
3073
3074	NAME in FProto || _descriptors && dP$2(FProto, NAME, {
3075	  configurable: true,
3076	  get: function get() {
3077	    try {
3078	      return ('' + this).match(nameRE)[1];
3079	    } catch (e) {
3080	      return '';
3081	    }
3082	  }
3083	});
3084
3085	var HAS_INSTANCE = _wks('hasInstance');
3086
3087	var FunctionProto = Function.prototype; // 19.2.3.6 Function.prototype[@@hasInstance](V)
3088
3089	if (!(HAS_INSTANCE in FunctionProto)) _objectDp.f(FunctionProto, HAS_INSTANCE, {
3090	  value: function value(O) {
3091	    if (typeof this != 'function' || !_isObject(O)) return false;
3092	    if (!_isObject(this.prototype)) return O instanceof this; // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:
3093
3094	    while (O = _objectGpo(O)) {
3095	      if (this.prototype === O) return true;
3096	    }
3097
3098	    return false;
3099	  }
3100	});
3101
3102	var _stringWs = "\t\n\x0B\f\r \xA0\u1680\u180E\u2000\u2001\u2002\u2003" + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF";
3103
3104	var space = '[' + _stringWs + ']';
3105	var non = "\u200B\x85";
3106	var ltrim = RegExp('^' + space + space + '*');
3107	var rtrim = RegExp(space + space + '*$');
3108
3109	var exporter = function exporter(KEY, exec, ALIAS) {
3110	  var exp = {};
3111	  var FORCE = _fails(function () {
3112	    return !!_stringWs[KEY]() || non[KEY]() != non;
3113	  });
3114	  var fn = exp[KEY] = FORCE ? exec(trim) : _stringWs[KEY];
3115	  if (ALIAS) exp[ALIAS] = fn;
3116	  _export(_export.P + _export.F * FORCE, 'String', exp);
3117	}; // 1 -> String#trimLeft
3118	// 2 -> String#trimRight
3119	// 3 -> String#trim
3120
3121
3122	var trim = exporter.trim = function (string, TYPE) {
3123	  string = String(_defined(string));
3124	  if (TYPE & 1) string = string.replace(ltrim, '');
3125	  if (TYPE & 2) string = string.replace(rtrim, '');
3126	  return string;
3127	};
3128
3129	var _stringTrim = exporter;
3130
3131	var $parseInt = _global.parseInt;
3132
3133	var $trim = _stringTrim.trim;
3134
3135
3136
3137	var hex = /^[-+]?0[xX]/;
3138	var _parseInt = $parseInt(_stringWs + '08') !== 8 || $parseInt(_stringWs + '0x16') !== 22 ? function parseInt(str, radix) {
3139	  var string = $trim(String(str), 3);
3140	  return $parseInt(string, radix >>> 0 || (hex.test(string) ? 16 : 10));
3141	} : $parseInt;
3142
3143	// 18.2.5 parseInt(string, radix)
3144
3145
3146	_export(_export.G + _export.F * (parseInt != _parseInt), {
3147	  parseInt: _parseInt
3148	});
3149
3150	var $parseFloat = _global.parseFloat;
3151
3152	var $trim$1 = _stringTrim.trim;
3153
3154	var _parseFloat = 1 / $parseFloat(_stringWs + '-0') !== -Infinity ? function parseFloat(str) {
3155	  var string = $trim$1(String(str), 3);
3156	  var result = $parseFloat(string);
3157	  return result === 0 && string.charAt(0) == '-' ? -0 : result;
3158	} : $parseFloat;
3159
3160	// 18.2.4 parseFloat(string)
3161
3162
3163	_export(_export.G + _export.F * (parseFloat != _parseFloat), {
3164	  parseFloat: _parseFloat
3165	});
3166
3167	var setPrototypeOf = _setProto.set;
3168
3169	var _inheritIfRequired = function (that, target, C) {
3170	  var S = target.constructor;
3171	  var P;
3172
3173	  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && _isObject(P) && setPrototypeOf) {
3174	    setPrototypeOf(that, P);
3175	  }
3176
3177	  return that;
3178	};
3179
3180	var gOPN$2 = _objectGopn.f;
3181
3182	var gOPD$2 = _objectGopd.f;
3183
3184	var dP$3 = _objectDp.f;
3185
3186	var $trim$2 = _stringTrim.trim;
3187
3188	var NUMBER = 'Number';
3189	var $Number = _global[NUMBER];
3190	var Base = $Number;
3191	var proto = $Number.prototype; // Opera ~12 has broken Object#toString
3192
3193	var BROKEN_COF = _cof(_objectCreate(proto)) == NUMBER;
3194	var TRIM = 'trim' in String.prototype; // 7.1.3 ToNumber(argument)
3195
3196	var toNumber = function toNumber(argument) {
3197	  var it = _toPrimitive(argument, false);
3198
3199	  if (typeof it == 'string' && it.length > 2) {
3200	    it = TRIM ? it.trim() : $trim$2(it, 3);
3201	    var first = it.charCodeAt(0);
3202	    var third, radix, maxCode;
3203
3204	    if (first === 43 || first === 45) {
3205	      third = it.charCodeAt(2);
3206	      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
3207	    } else if (first === 48) {
3208	      switch (it.charCodeAt(1)) {
3209	        case 66:
3210	        case 98:
3211	          radix = 2;
3212	          maxCode = 49;
3213	          break;
3214	        // fast equal /^0b[01]+$/i
3215
3216	        case 79:
3217	        case 111:
3218	          radix = 8;
3219	          maxCode = 55;
3220	          break;
3221	        // fast equal /^0o[0-7]+$/i
3222
3223	        default:
3224	          return +it;
3225	      }
3226
3227	      for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {
3228	        code = digits.charCodeAt(i); // parseInt parses a string to a first unavailable symbol
3229	        // but ToNumber should return NaN if a string contains unavailable symbols
3230
3231	        if (code < 48 || code > maxCode) return NaN;
3232	      }
3233
3234	      return parseInt(digits, radix);
3235	    }
3236	  }
3237
3238	  return +it;
3239	};
3240
3241	if (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {
3242	  $Number = function Number(value) {
3243	    var it = arguments.length < 1 ? 0 : value;
3244	    var that = this;
3245	    return that instanceof $Number // check on 1..constructor(foo) case
3246	    && (BROKEN_COF ? _fails(function () {
3247	      proto.valueOf.call(that);
3248	    }) : _cof(that) != NUMBER) ? _inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);
3249	  };
3250
3251	  for (var keys = _descriptors ? gOPN$2(Base) : ( // ES3:
3252	  'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + // ES6 (in case, if modules with ES6 Number statics required before):
3253	  'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger').split(','), j$1 = 0, key; keys.length > j$1; j$1++) {
3254	    if (_has(Base, key = keys[j$1]) && !_has($Number, key)) {
3255	      dP$3($Number, key, gOPD$2(Base, key));
3256	    }
3257	  }
3258
3259	  $Number.prototype = proto;
3260	  proto.constructor = $Number;
3261
3262	  _redefine(_global, NUMBER, $Number);
3263	}
3264
3265	var _aNumberValue = function (it, msg) {
3266	  if (typeof it != 'number' && _cof(it) != 'Number') throw TypeError(msg);
3267	  return +it;
3268	};
3269
3270	var _stringRepeat = function repeat(count) {
3271	  var str = String(_defined(this));
3272	  var res = '';
3273	  var n = _toInteger(count);
3274	  if (n < 0 || n == Infinity) throw RangeError("Count can't be negative");
3275
3276	  for (; n > 0; (n >>>= 1) && (str += str)) {
3277	    if (n & 1) res += str;
3278	  }
3279
3280	  return res;
3281	};
3282
3283	var $toFixed = 1.0.toFixed;
3284	var floor$1 = Math.floor;
3285	var data = [0, 0, 0, 0, 0, 0];
3286	var ERROR = 'Number.toFixed: incorrect invocation!';
3287	var ZERO = '0';
3288
3289	var multiply = function multiply(n, c) {
3290	  var i = -1;
3291	  var c2 = c;
3292
3293	  while (++i < 6) {
3294	    c2 += n * data[i];
3295	    data[i] = c2 % 1e7;
3296	    c2 = floor$1(c2 / 1e7);
3297	  }
3298	};
3299
3300	var divide = function divide(n) {
3301	  var i = 6;
3302	  var c = 0;
3303
3304	  while (--i >= 0) {
3305	    c += data[i];
3306	    data[i] = floor$1(c / n);
3307	    c = c % n * 1e7;
3308	  }
3309	};
3310
3311	var numToString = function numToString() {
3312	  var i = 6;
3313	  var s = '';
3314
3315	  while (--i >= 0) {
3316	    if (s !== '' || i === 0 || data[i] !== 0) {
3317	      var t = String(data[i]);
3318	      s = s === '' ? t : s + _stringRepeat.call(ZERO, 7 - t.length) + t;
3319	    }
3320	  }
3321
3322	  return s;
3323	};
3324
3325	var pow = function pow(x, n, acc) {
3326	  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
3327	};
3328
3329	var log = function log(x) {
3330	  var n = 0;
3331	  var x2 = x;
3332
3333	  while (x2 >= 4096) {
3334	    n += 12;
3335	    x2 /= 4096;
3336	  }
3337
3338	  while (x2 >= 2) {
3339	    n += 1;
3340	    x2 /= 2;
3341	  }
3342
3343	  return n;
3344	};
3345
3346	_export(_export.P + _export.F * (!!$toFixed && (0.00008.toFixed(3) !== '0.000' || 0.9.toFixed(0) !== '1' || 1.255.toFixed(2) !== '1.25' || 1000000000000000128.0.toFixed(0) !== '1000000000000000128') || !_fails(function () {
3347	  // V8 ~ Android 4.3-
3348	  $toFixed.call({});
3349	})), 'Number', {
3350	  toFixed: function toFixed(fractionDigits) {
3351	    var x = _aNumberValue(this, ERROR);
3352	    var f = _toInteger(fractionDigits);
3353	    var s = '';
3354	    var m = ZERO;
3355	    var e, z, j, k;
3356	    if (f < 0 || f > 20) throw RangeError(ERROR); // eslint-disable-next-line no-self-compare
3357
3358	    if (x != x) return 'NaN';
3359	    if (x <= -1e21 || x >= 1e21) return String(x);
3360
3361	    if (x < 0) {
3362	      s = '-';
3363	      x = -x;
3364	    }
3365
3366	    if (x > 1e-21) {
3367	      e = log(x * pow(2, 69, 1)) - 69;
3368	      z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);
3369	      z *= 0x10000000000000;
3370	      e = 52 - e;
3371
3372	      if (e > 0) {
3373	        multiply(0, z);
3374	        j = f;
3375
3376	        while (j >= 7) {
3377	          multiply(1e7, 0);
3378	          j -= 7;
3379	        }
3380
3381	        multiply(pow(10, j, 1), 0);
3382	        j = e - 1;
3383
3384	        while (j >= 23) {
3385	          divide(1 << 23);
3386	          j -= 23;
3387	        }
3388
3389	        divide(1 << j);
3390	        multiply(1, 1);
3391	        divide(2);
3392	        m = numToString();
3393	      } else {
3394	        multiply(0, z);
3395	        multiply(1 << -e, 0);
3396	        m = numToString() + _stringRepeat.call(ZERO, f);
3397	      }
3398	    }
3399
3400	    if (f > 0) {
3401	      k = m.length;
3402	      m = s + (k <= f ? '0.' + _stringRepeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));
3403	    } else {
3404	      m = s + m;
3405	    }
3406
3407	    return m;
3408	  }
3409	});
3410
3411	var $toPrecision = 1.0.toPrecision;
3412	_export(_export.P + _export.F * (_fails(function () {
3413	  // IE7-
3414	  return $toPrecision.call(1, undefined) !== '1';
3415	}) || !_fails(function () {
3416	  // V8 ~ Android 4.3-
3417	  $toPrecision.call({});
3418	})), 'Number', {
3419	  toPrecision: function toPrecision(precision) {
3420	    var that = _aNumberValue(this, 'Number#toPrecision: incorrect invocation!');
3421	    return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);
3422	  }
3423	});
3424
3425	// 20.1.2.1 Number.EPSILON
3426
3427
3428	_export(_export.S, 'Number', {
3429	  EPSILON: Math.pow(2, -52)
3430	});
3431
3432	// 20.1.2.2 Number.isFinite(number)
3433
3434
3435	var _isFinite = _global.isFinite;
3436
3437	_export(_export.S, 'Number', {
3438	  isFinite: function isFinite(it) {
3439	    return typeof it == 'number' && _isFinite(it);
3440	  }
3441	});
3442
3443	// 20.1.2.3 Number.isInteger(number)
3444
3445
3446	var floor$2 = Math.floor;
3447
3448	var _isInteger = function isInteger(it) {
3449	  return !_isObject(it) && isFinite(it) && floor$2(it) === it;
3450	};
3451
3452	// 20.1.2.3 Number.isInteger(number)
3453
3454
3455	_export(_export.S, 'Number', {
3456	  isInteger: _isInteger
3457	});
3458
3459	// 20.1.2.4 Number.isNaN(number)
3460
3461
3462	_export(_export.S, 'Number', {
3463	  isNaN: function isNaN(number) {
3464	    // eslint-disable-next-line no-self-compare
3465	    return number != number;
3466	  }
3467	});
3468
3469	// 20.1.2.5 Number.isSafeInteger(number)
3470
3471
3472
3473
3474	var abs = Math.abs;
3475	_export(_export.S, 'Number', {
3476	  isSafeInteger: function isSafeInteger(number) {
3477	    return _isInteger(number) && abs(number) <= 0x1fffffffffffff;
3478	  }
3479	});
3480
3481	// 20.1.2.6 Number.MAX_SAFE_INTEGER
3482
3483
3484	_export(_export.S, 'Number', {
3485	  MAX_SAFE_INTEGER: 0x1fffffffffffff
3486	});
3487
3488	// 20.1.2.10 Number.MIN_SAFE_INTEGER
3489
3490
3491	_export(_export.S, 'Number', {
3492	  MIN_SAFE_INTEGER: -0x1fffffffffffff
3493	});
3494
3495	// 20.1.2.12 Number.parseFloat(string)
3496
3497
3498	_export(_export.S + _export.F * (Number.parseFloat != _parseFloat), 'Number', {
3499	  parseFloat: _parseFloat
3500	});
3501
3502	// 20.1.2.13 Number.parseInt(string, radix)
3503
3504
3505	_export(_export.S + _export.F * (Number.parseInt != _parseInt), 'Number', {
3506	  parseInt: _parseInt
3507	});
3508
3509	// 20.2.2.20 Math.log1p(x)
3510	var _mathLog1p = Math.log1p || function log1p(x) {
3511	  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
3512	};
3513
3514	// 20.2.2.3 Math.acosh(x)
3515
3516
3517
3518
3519	var sqrt = Math.sqrt;
3520	var $acosh = Math.acosh;
3521	_export(_export.S + _export.F * !($acosh // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
3522	&& Math.floor($acosh(Number.MAX_VALUE)) == 710 // Tor Browser bug: Math.acosh(Infinity) -> NaN
3523	&& $acosh(Infinity) == Infinity), 'Math', {
3524	  acosh: function acosh(x) {
3525	    return (x = +x) < 1 ? NaN : x > 94906265.62425156 ? Math.log(x) + Math.LN2 : _mathLog1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
3526	  }
3527	});
3528
3529	// 20.2.2.5 Math.asinh(x)
3530
3531
3532	var $asinh = Math.asinh;
3533
3534	function asinh(x) {
3535	  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));
3536	} // Tor Browser bug: Math.asinh(0) -> -0
3537
3538
3539	_export(_export.S + _export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {
3540	  asinh: asinh
3541	});
3542
3543	// 20.2.2.7 Math.atanh(x)
3544
3545
3546	var $atanh = Math.atanh; // Tor Browser bug: Math.atanh(-0) -> 0
3547
3548	_export(_export.S + _export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
3549	  atanh: function atanh(x) {
3550	    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
3551	  }
3552	});
3553
3554	// 20.2.2.28 Math.sign(x)
3555	var _mathSign = Math.sign || function sign(x) {
3556	  // eslint-disable-next-line no-self-compare
3557	  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
3558	};
3559
3560	// 20.2.2.9 Math.cbrt(x)
3561
3562
3563
3564
3565	_export(_export.S, 'Math', {
3566	  cbrt: function cbrt(x) {
3567	    return _mathSign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
3568	  }
3569	});
3570
3571	// 20.2.2.11 Math.clz32(x)
3572
3573
3574	_export(_export.S, 'Math', {
3575	  clz32: function clz32(x) {
3576	    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
3577	  }
3578	});
3579
3580	// 20.2.2.12 Math.cosh(x)
3581
3582
3583	var exp = Math.exp;
3584	_export(_export.S, 'Math', {
3585	  cosh: function cosh(x) {
3586	    return (exp(x = +x) + exp(-x)) / 2;
3587	  }
3588	});
3589
3590	// 20.2.2.14 Math.expm1(x)
3591	var $expm1 = Math.expm1;
3592	var _mathExpm1 = !$expm1 // Old FF bug
3593	|| $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 // Tor Browser bug
3594	|| $expm1(-2e-17) != -2e-17 ? function expm1(x) {
3595	  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
3596	} : $expm1;
3597
3598	// 20.2.2.14 Math.expm1(x)
3599
3600
3601
3602
3603	_export(_export.S + _export.F * (_mathExpm1 != Math.expm1), 'Math', {
3604	  expm1: _mathExpm1
3605	});
3606
3607	// 20.2.2.16 Math.fround(x)
3608
3609
3610	var pow$1 = Math.pow;
3611	var EPSILON = pow$1(2, -52);
3612	var EPSILON32 = pow$1(2, -23);
3613	var MAX32 = pow$1(2, 127) * (2 - EPSILON32);
3614	var MIN32 = pow$1(2, -126);
3615
3616	var roundTiesToEven = function roundTiesToEven(n) {
3617	  return n + 1 / EPSILON - 1 / EPSILON;
3618	};
3619
3620	var _mathFround = Math.fround || function fround(x) {
3621	  var $abs = Math.abs(x);
3622	  var $sign = _mathSign(x);
3623	  var a, result;
3624	  if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
3625	  a = (1 + EPSILON32 / EPSILON) * $abs;
3626	  result = a - (a - $abs); // eslint-disable-next-line no-self-compare
3627
3628	  if (result > MAX32 || result != result) return $sign * Infinity;
3629	  return $sign * result;
3630	};
3631
3632	// 20.2.2.16 Math.fround(x)
3633
3634
3635	_export(_export.S, 'Math', {
3636	  fround: _mathFround
3637	});
3638
3639	// 20.2.2.17 Math.hypot([value1[, value2[, ... ]]])
3640
3641
3642	var abs$1 = Math.abs;
3643	_export(_export.S, 'Math', {
3644	  hypot: function hypot(value1, value2) {
3645	    // eslint-disable-line no-unused-vars
3646	    var sum = 0;
3647	    var i = 0;
3648	    var aLen = arguments.length;
3649	    var larg = 0;
3650	    var arg, div;
3651
3652	    while (i < aLen) {
3653	      arg = abs$1(arguments[i++]);
3654
3655	      if (larg < arg) {
3656	        div = larg / arg;
3657	        sum = sum * div * div + 1;
3658	        larg = arg;
3659	      } else if (arg > 0) {
3660	        div = arg / larg;
3661	        sum += div * div;
3662	      } else sum += arg;
3663	    }
3664
3665	    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);
3666	  }
3667	});
3668
3669	// 20.2.2.18 Math.imul(x, y)
3670
3671
3672	var $imul = Math.imul; // some WebKit versions fails with big numbers, some has wrong arity
3673
3674	_export(_export.S + _export.F * _fails(function () {
3675	  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
3676	}), 'Math', {
3677	  imul: function imul(x, y) {
3678	    var UINT16 = 0xffff;
3679	    var xn = +x;
3680	    var yn = +y;
3681	    var xl = UINT16 & xn;
3682	    var yl = UINT16 & yn;
3683	    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
3684	  }
3685	});
3686
3687	// 20.2.2.21 Math.log10(x)
3688
3689
3690	_export(_export.S, 'Math', {
3691	  log10: function log10(x) {
3692	    return Math.log(x) * Math.LOG10E;
3693	  }
3694	});
3695
3696	// 20.2.2.20 Math.log1p(x)
3697
3698
3699	_export(_export.S, 'Math', {
3700	  log1p: _mathLog1p
3701	});
3702
3703	// 20.2.2.22 Math.log2(x)
3704
3705
3706	_export(_export.S, 'Math', {
3707	  log2: function log2(x) {
3708	    return Math.log(x) / Math.LN2;
3709	  }
3710	});
3711
3712	// 20.2.2.28 Math.sign(x)
3713
3714
3715	_export(_export.S, 'Math', {
3716	  sign: _mathSign
3717	});
3718
3719	// 20.2.2.30 Math.sinh(x)
3720
3721
3722
3723
3724	var exp$1 = Math.exp; // V8 near Chromium 38 has a problem with very small numbers
3725
3726	_export(_export.S + _export.F * _fails(function () {
3727	  return !Math.sinh(-2e-17) != -2e-17;
3728	}), 'Math', {
3729	  sinh: function sinh(x) {
3730	    return Math.abs(x = +x) < 1 ? (_mathExpm1(x) - _mathExpm1(-x)) / 2 : (exp$1(x - 1) - exp$1(-x - 1)) * (Math.E / 2);
3731	  }
3732	});
3733
3734	// 20.2.2.33 Math.tanh(x)
3735
3736
3737
3738
3739	var exp$2 = Math.exp;
3740	_export(_export.S, 'Math', {
3741	  tanh: function tanh(x) {
3742	    var a = _mathExpm1(x = +x);
3743	    var b = _mathExpm1(-x);
3744	    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp$2(x) + exp$2(-x));
3745	  }
3746	});
3747
3748	// 20.2.2.34 Math.trunc(x)
3749
3750
3751	_export(_export.S, 'Math', {
3752	  trunc: function trunc(it) {
3753	    return (it > 0 ? Math.floor : Math.ceil)(it);
3754	  }
3755	});
3756
3757	var fromCharCode = String.fromCharCode;
3758	var $fromCodePoint = String.fromCodePoint; // length should be 1, old FF problem
3759
3760	_export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
3761	  // 21.1.2.2 String.fromCodePoint(...codePoints)
3762	  fromCodePoint: function fromCodePoint(x) {
3763	    // eslint-disable-line no-unused-vars
3764	    var res = [];
3765	    var aLen = arguments.length;
3766	    var i = 0;
3767	    var code;
3768
3769	    while (aLen > i) {
3770	      code = +arguments[i++];
3771	      if (_toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
3772	      res.push(code < 0x10000 ? fromCharCode(code) : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00));
3773	    }
3774
3775	    return res.join('');
3776	  }
3777	});
3778
3779	_export(_export.S, 'String', {
3780	  // 21.1.2.4 String.raw(callSite, ...substitutions)
3781	  raw: function raw(callSite) {
3782	    var tpl = _toIobject(callSite.raw);
3783	    var len = _toLength(tpl.length);
3784	    var aLen = arguments.length;
3785	    var res = [];
3786	    var i = 0;
3787
3788	    while (len > i) {
3789	      res.push(String(tpl[i++]));
3790	      if (i < aLen) res.push(String(arguments[i]));
3791	    }
3792
3793	    return res.join('');
3794	  }
3795	});
3796
3797	_stringTrim('trim', function ($trim) {
3798	  return function trim() {
3799	    return $trim(this, 3);
3800	  };
3801	});
3802
3803	// true  -> String#at
3804	// false -> String#codePointAt
3805
3806
3807	var _stringAt = function (TO_STRING) {
3808	  return function (that, pos) {
3809	    var s = String(_defined(that));
3810	    var i = _toInteger(pos);
3811	    var l = s.length;
3812	    var a, b;
3813	    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
3814	    a = s.charCodeAt(i);
3815	    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
3816	  };
3817	};
3818
3819	var _iterators = {};
3820
3821	var IteratorPrototype = {}; // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
3822
3823	_hide(IteratorPrototype, _wks('iterator'), function () {
3824	  return this;
3825	});
3826
3827	var _iterCreate = function (Constructor, NAME, next) {
3828	  Constructor.prototype = _objectCreate(IteratorPrototype, {
3829	    next: _propertyDesc(1, next)
3830	  });
3831	  _setToStringTag(Constructor, NAME + ' Iterator');
3832	};
3833
3834	var ITERATOR = _wks('iterator');
3835
3836	var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
3837
3838	var FF_ITERATOR = '@@iterator';
3839	var KEYS = 'keys';
3840	var VALUES = 'values';
3841
3842	var returnThis = function returnThis() {
3843	  return this;
3844	};
3845
3846	var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
3847	  _iterCreate(Constructor, NAME, next);
3848
3849	  var getMethod = function getMethod(kind) {
3850	    if (!BUGGY && kind in proto) return proto[kind];
3851
3852	    switch (kind) {
3853	      case KEYS:
3854	        return function keys() {
3855	          return new Constructor(this, kind);
3856	        };
3857
3858	      case VALUES:
3859	        return function values() {
3860	          return new Constructor(this, kind);
3861	        };
3862	    }
3863
3864	    return function entries() {
3865	      return new Constructor(this, kind);
3866	    };
3867	  };
3868
3869	  var TAG = NAME + ' Iterator';
3870	  var DEF_VALUES = DEFAULT == VALUES;
3871	  var VALUES_BUG = false;
3872	  var proto = Base.prototype;
3873	  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
3874	  var $default = $native || getMethod(DEFAULT);
3875	  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
3876	  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
3877	  var methods, key, IteratorPrototype; // Fix native
3878
3879	  if ($anyNative) {
3880	    IteratorPrototype = _objectGpo($anyNative.call(new Base()));
3881
3882	    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
3883	      // Set @@toStringTag to native iterators
3884	      _setToStringTag(IteratorPrototype, TAG, true); // fix for some old engines
3885
3886	      if (typeof IteratorPrototype[ITERATOR] != 'function') _hide(IteratorPrototype, ITERATOR, returnThis);
3887	    }
3888	  } // fix Array#{values, @@iterator}.name in V8 / FF
3889
3890
3891	  if (DEF_VALUES && $native && $native.name !== VALUES) {
3892	    VALUES_BUG = true;
3893
3894	    $default = function values() {
3895	      return $native.call(this);
3896	    };
3897	  } // Define iterator
3898
3899
3900	  if (BUGGY || VALUES_BUG || !proto[ITERATOR]) {
3901	    _hide(proto, ITERATOR, $default);
3902	  } // Plug for library
3903
3904
3905	  _iterators[NAME] = $default;
3906	  _iterators[TAG] = returnThis;
3907
3908	  if (DEFAULT) {
3909	    methods = {
3910	      values: DEF_VALUES ? $default : getMethod(VALUES),
3911	      keys: IS_SET ? $default : getMethod(KEYS),
3912	      entries: $entries
3913	    };
3914	    if (FORCED) for (key in methods) {
3915	      if (!(key in proto)) _redefine(proto, key, methods[key]);
3916	    } else _export(_export.P + _export.F * (BUGGY || VALUES_BUG), NAME, methods);
3917	  }
3918
3919	  return methods;
3920	};
3921
3922	var $at = _stringAt(true); // 21.1.3.27 String.prototype[@@iterator]()
3923
3924
3925	_iterDefine(String, 'String', function (iterated) {
3926	  this._t = String(iterated); // target
3927
3928	  this._i = 0; // next index
3929	  // 21.1.5.2.1 %StringIteratorPrototype%.next()
3930	}, function () {
3931	  var O = this._t;
3932	  var index = this._i;
3933	  var point;
3934	  if (index >= O.length) return {
3935	    value: undefined,
3936	    done: true
3937	  };
3938	  point = $at(O, index);
3939	  this._i += point.length;
3940	  return {
3941	    value: point,
3942	    done: false
3943	  };
3944	});
3945
3946	var $at$1 = _stringAt(false);
3947
3948	_export(_export.P, 'String', {
3949	  // 21.1.3.3 String.prototype.codePointAt(pos)
3950	  codePointAt: function codePointAt(pos) {
3951	    return $at$1(this, pos);
3952	  }
3953	});
3954
3955	// 7.2.8 IsRegExp(argument)
3956
3957
3958
3959
3960	var MATCH = _wks('match');
3961
3962	var _isRegexp = function (it) {
3963	  var isRegExp;
3964	  return _isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : _cof(it) == 'RegExp');
3965	};
3966
3967	// helper for String#{startsWith, endsWith, includes}
3968
3969
3970
3971
3972	var _stringContext = function (that, searchString, NAME) {
3973	  if (_isRegexp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
3974	  return String(_defined(that));
3975	};
3976
3977	var MATCH$1 = _wks('match');
3978
3979	var _failsIsRegexp = function (KEY) {
3980	  var re = /./;
3981
3982	  try {
3983	    '/./'[KEY](re);
3984	  } catch (e) {
3985	    try {
3986	      re[MATCH$1] = false;
3987	      return !'/./'[KEY](re);
3988	    } catch (f) {
3989	      /* empty */
3990	    }
3991	  }
3992
3993	  return true;
3994	};
3995
3996	var ENDS_WITH = 'endsWith';
3997	var $endsWith = ''[ENDS_WITH];
3998	_export(_export.P + _export.F * _failsIsRegexp(ENDS_WITH), 'String', {
3999	  endsWith: function endsWith(searchString
4000	  /* , endPosition = @length */
4001	  ) {
4002	    var that = _stringContext(this, searchString, ENDS_WITH);
4003	    var endPosition = arguments.length > 1 ? arguments[1] : undefined;
4004	    var len = _toLength(that.length);
4005	    var end = endPosition === undefined ? len : Math.min(_toLength(endPosition), len);
4006	    var search = String(searchString);
4007	    return $endsWith ? $endsWith.call(that, search, end) : that.slice(end - search.length, end) === search;
4008	  }
4009	});
4010
4011	var INCLUDES = 'includes';
4012	_export(_export.P + _export.F * _failsIsRegexp(INCLUDES), 'String', {
4013	  includes: function includes(searchString
4014	  /* , position = 0 */
4015	  ) {
4016	    return !!~_stringContext(this, searchString, INCLUDES).indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
4017	  }
4018	});
4019
4020	_export(_export.P, 'String', {
4021	  // 21.1.3.13 String.prototype.repeat(count)
4022	  repeat: _stringRepeat
4023	});
4024
4025	var STARTS_WITH = 'startsWith';
4026	var $startsWith = ''[STARTS_WITH];
4027	_export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {
4028	  startsWith: function startsWith(searchString
4029	  /* , position = 0 */
4030	  ) {
4031	    var that = _stringContext(this, searchString, STARTS_WITH);
4032	    var index = _toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
4033	    var search = String(searchString);
4034	    return $startsWith ? $startsWith.call(that, search, index) : that.slice(index, index + search.length) === search;
4035	  }
4036	});
4037
4038	var quot = /"/g; // B.2.3.2.1 CreateHTML(string, tag, attribute, value)
4039
4040	var createHTML = function createHTML(string, tag, attribute, value) {
4041	  var S = String(_defined(string));
4042	  var p1 = '<' + tag;
4043	  if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
4044	  return p1 + '>' + S + '</' + tag + '>';
4045	};
4046
4047	var _stringHtml = function (NAME, exec) {
4048	  var O = {};
4049	  O[NAME] = exec(createHTML);
4050	  _export(_export.P + _export.F * _fails(function () {
4051	    var test = ''[NAME]('"');
4052	    return test !== test.toLowerCase() || test.split('"').length > 3;
4053	  }), 'String', O);
4054	};
4055
4056	_stringHtml('anchor', function (createHTML) {
4057	  return function anchor(name) {
4058	    return createHTML(this, 'a', 'name', name);
4059	  };
4060	});
4061
4062	_stringHtml('big', function (createHTML) {
4063	  return function big() {
4064	    return createHTML(this, 'big', '', '');
4065	  };
4066	});
4067
4068	_stringHtml('blink', function (createHTML) {
4069	  return function blink() {
4070	    return createHTML(this, 'blink', '', '');
4071	  };
4072	});
4073
4074	_stringHtml('bold', function (createHTML) {
4075	  return function bold() {
4076	    return createHTML(this, 'b', '', '');
4077	  };
4078	});
4079
4080	_stringHtml('fixed', function (createHTML) {
4081	  return function fixed() {
4082	    return createHTML(this, 'tt', '', '');
4083	  };
4084	});
4085
4086	_stringHtml('fontcolor', function (createHTML) {
4087	  return function fontcolor(color) {
4088	    return createHTML(this, 'font', 'color', color);
4089	  };
4090	});
4091
4092	_stringHtml('fontsize', function (createHTML) {
4093	  return function fontsize(size) {
4094	    return createHTML(this, 'font', 'size', size);
4095	  };
4096	});
4097
4098	_stringHtml('italics', function (createHTML) {
4099	  return function italics() {
4100	    return createHTML(this, 'i', '', '');
4101	  };
4102	});
4103
4104	_stringHtml('link', function (createHTML) {
4105	  return function link(url) {
4106	    return createHTML(this, 'a', 'href', url);
4107	  };
4108	});
4109
4110	_stringHtml('small', function (createHTML) {
4111	  return function small() {
4112	    return createHTML(this, 'small', '', '');
4113	  };
4114	});
4115
4116	_stringHtml('strike', function (createHTML) {
4117	  return function strike() {
4118	    return createHTML(this, 'strike', '', '');
4119	  };
4120	});
4121
4122	_stringHtml('sub', function (createHTML) {
4123	  return function sub() {
4124	    return createHTML(this, 'sub', '', '');
4125	  };
4126	});
4127
4128	_stringHtml('sup', function (createHTML) {
4129	  return function sup() {
4130	    return createHTML(this, 'sup', '', '');
4131	  };
4132	});
4133
4134	// 20.3.3.1 / 15.9.4.4 Date.now()
4135
4136
4137	_export(_export.S, 'Date', {
4138	  now: function now() {
4139	    return new Date().getTime();
4140	  }
4141	});
4142
4143	_export(_export.P + _export.F * _fails(function () {
4144	  return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({
4145	    toISOString: function toISOString() {
4146	      return 1;
4147	    }
4148	  }) !== 1;
4149	}), 'Date', {
4150	  // eslint-disable-next-line no-unused-vars
4151	  toJSON: function toJSON(key) {
4152	    var O = _toObject(this);
4153	    var pv = _toPrimitive(O);
4154	    return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();
4155	  }
4156	});
4157
4158	var getTime = Date.prototype.getTime;
4159	var $toISOString = Date.prototype.toISOString;
4160
4161	var lz = function lz(num) {
4162	  return num > 9 ? num : '0' + num;
4163	}; // PhantomJS / old WebKit has a broken implementations
4164
4165
4166	var _dateToIsoString = _fails(function () {
4167	  return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';
4168	}) || !_fails(function () {
4169	  $toISOString.call(new Date(NaN));
4170	}) ? function toISOString() {
4171	  if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');
4172	  var d = this;
4173	  var y = d.getUTCFullYear();
4174	  var m = d.getUTCMilliseconds();
4175	  var s = y < 0 ? '-' : y > 9999 ? '+' : '';
4176	  return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) + '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) + 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) + ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';
4177	} : $toISOString;
4178
4179	// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
4180
4181
4182	 // PhantomJS / old WebKit has a broken implementations
4183
4184
4185	_export(_export.P + _export.F * (Date.prototype.toISOString !== _dateToIsoString), 'Date', {
4186	  toISOString: _dateToIsoString
4187	});
4188
4189	var DateProto = Date.prototype;
4190	var INVALID_DATE = 'Invalid Date';
4191	var TO_STRING = 'toString';
4192	var $toString = DateProto[TO_STRING];
4193	var getTime$1 = DateProto.getTime;
4194
4195	if (new Date(NaN) + '' != INVALID_DATE) {
4196	  _redefine(DateProto, TO_STRING, function toString() {
4197	    var value = getTime$1.call(this); // eslint-disable-next-line no-self-compare
4198
4199	    return value === value ? $toString.call(this) : INVALID_DATE;
4200	  });
4201	}
4202
4203	var NUMBER$1 = 'number';
4204
4205	var _dateToPrimitive = function (hint) {
4206	  if (hint !== 'string' && hint !== NUMBER$1 && hint !== 'default') throw TypeError('Incorrect hint');
4207	  return _toPrimitive(_anObject(this), hint != NUMBER$1);
4208	};
4209
4210	var TO_PRIMITIVE$1 = _wks('toPrimitive');
4211
4212	var proto$1 = Date.prototype;
4213	if (!(TO_PRIMITIVE$1 in proto$1)) _hide(proto$1, TO_PRIMITIVE$1, _dateToPrimitive);
4214
4215	// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)
4216
4217
4218	_export(_export.S, 'Array', {
4219	  isArray: _isArray
4220	});
4221
4222	// call something on iterator step with safe closing on error
4223
4224
4225	var _iterCall = function (iterator, fn, value, entries) {
4226	  try {
4227	    return entries ? fn(_anObject(value)[0], value[1]) : fn(value); // 7.4.6 IteratorClose(iterator, completion)
4228	  } catch (e) {
4229	    var ret = iterator['return'];
4230	    if (ret !== undefined) _anObject(ret.call(iterator));
4231	    throw e;
4232	  }
4233	};
4234
4235	// check on default Array iterator
4236
4237
4238	var ITERATOR$1 = _wks('iterator');
4239
4240	var ArrayProto = Array.prototype;
4241
4242	var _isArrayIter = function (it) {
4243	  return it !== undefined && (_iterators.Array === it || ArrayProto[ITERATOR$1] === it);
4244	};
4245
4246	var _createProperty = function (object, index, value) {
4247	  if (index in object) _objectDp.f(object, index, _propertyDesc(0, value));else object[index] = value;
4248	};
4249
4250	var ITERATOR$2 = _wks('iterator');
4251
4252
4253
4254	var core_getIteratorMethod = _core.getIteratorMethod = function (it) {
4255	  if (it != undefined) return it[ITERATOR$2] || it['@@iterator'] || _iterators[_classof(it)];
4256	};
4257
4258	var ITERATOR$3 = _wks('iterator');
4259
4260	var SAFE_CLOSING = false;
vendor: 12,581 bytes, lines 4261-4727
4261
4262	try {
4263	  var riter = [7][ITERATOR$3]();
4264
4265	  riter['return'] = function () {
4266	    SAFE_CLOSING = true;
4267	  }; // eslint-disable-next-line no-throw-literal
4268	} catch (e) {
4269	  /* empty */
4270	}
4271
4272	var _iterDetect = function (exec, skipClosing) {
4273	  if (!skipClosing && !SAFE_CLOSING) return false;
4274	  var safe = false;
4275
4276	  try {
4277	    var arr = [7];
4278	    var iter = arr[ITERATOR$3]();
4279
4280	    iter.next = function () {
4281	      return {
4282	        done: safe = true
4283	      };
4284	    };
4285
4286	    arr[ITERATOR$3] = function () {
4287	      return iter;
4288	    };
4289
4290	    exec(arr);
4291	  } catch (e) {
4292	    /* empty */
4293	  }
4294
4295	  return safe;
4296	};
4297
4298	_export(_export.S + _export.F * !_iterDetect(function (iter) {
4299	}), 'Array', {
4300	  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
4301	  from: function from(arrayLike
4302	  /* , mapfn = undefined, thisArg = undefined */
4303	  ) {
4304	    var O = _toObject(arrayLike);
4305	    var C = typeof this == 'function' ? this : Array;
4306	    var aLen = arguments.length;
4307	    var mapfn = aLen > 1 ? arguments[1] : undefined;
4308	    var mapping = mapfn !== undefined;
4309	    var index = 0;
4310	    var iterFn = core_getIteratorMethod(O);
4311	    var length, result, step, iterator;
4312	    if (mapping) mapfn = _ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); // if object isn't iterable or it's array with default iterator - use simple case
4313
4314	    if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) {
4315	      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
4316	        _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value);
4317	      }
4318	    } else {
4319	      length = _toLength(O.length);
4320
4321	      for (result = new C(length); length > index; index++) {
4322	        _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
4323	      }
4324	    }
4325
4326	    result.length = index;
4327	    return result;
4328	  }
4329	});
4330
4331	// WebKit Array.of isn't generic
4332
4333
4334	_export(_export.S + _export.F * _fails(function () {
4335	  function F() {
4336	    /* empty */
4337	  }
4338
4339	  return !(Array.of.call(F) instanceof F);
4340	}), 'Array', {
4341	  // 22.1.2.3 Array.of( ...items)
4342	  of: function of()
4343	  /* ...args */
4344	  {
4345	    var index = 0;
4346	    var aLen = arguments.length;
4347	    var result = new (typeof this == 'function' ? this : Array)(aLen);
4348
4349	    while (aLen > index) {
4350	      _createProperty(result, index, arguments[index++]);
4351	    }
4352
4353	    result.length = aLen;
4354	    return result;
4355	  }
4356	});
4357
4358	var _strictMethod = function (method, arg) {
4359	  return !!method && _fails(function () {
4360	    // eslint-disable-next-line no-useless-call
4361	    arg ? method.call(null, function () {
4362	      /* empty */
4363	    }, 1) : method.call(null);
4364	  });
4365	};
4366
4367	var arrayJoin = [].join; // fallback for not array-like strings
4368
4369	_export(_export.P + _export.F * (_iobject != Object || !_strictMethod(arrayJoin)), 'Array', {
4370	  join: function join(separator) {
4371	    return arrayJoin.call(_toIobject(this), separator === undefined ? ',' : separator);
4372	  }
4373	});
4374
4375	var arraySlice$1 = [].slice; // fallback for not array-like ES3 strings and DOM objects
4376
4377	_export(_export.P + _export.F * _fails(function () {
4378	  if (_html) arraySlice$1.call(_html);
4379	}), 'Array', {
4380	  slice: function slice(begin, end) {
4381	    var len = _toLength(this.length);
4382	    var klass = _cof(this);
4383	    end = end === undefined ? len : end;
4384	    if (klass == 'Array') return arraySlice$1.call(this, begin, end);
4385	    var start = _toAbsoluteIndex(begin, len);
4386	    var upTo = _toAbsoluteIndex(end, len);
4387	    var size = _toLength(upTo - start);
4388	    var cloned = new Array(size);
4389	    var i = 0;
4390
4391	    for (; i < size; i++) {
4392	      cloned[i] = klass == 'String' ? this.charAt(start + i) : this[start + i];
4393	    }
4394
4395	    return cloned;
4396	  }
4397	});
4398
4399	var $sort = [].sort;
4400	var test$1 = [1, 2, 3];
4401	_export(_export.P + _export.F * (_fails(function () {
4402	  // IE8-
4403	  test$1.sort(undefined);
4404	}) || !_fails(function () {
4405	  // V8 bug
4406	  test$1.sort(null); // Old WebKit
4407	}) || !_strictMethod($sort)), 'Array', {
4408	  // 22.1.3.25 Array.prototype.sort(comparefn)
4409	  sort: function sort(comparefn) {
4410	    return comparefn === undefined ? $sort.call(_toObject(this)) : $sort.call(_toObject(this), _aFunction(comparefn));
4411	  }
4412	});
4413
4414	var SPECIES = _wks('species');
4415
4416	var _arraySpeciesConstructor = function (original) {
4417	  var C;
4418
4419	  if (_isArray(original)) {
4420	    C = original.constructor; // cross-realm fallback
4421
4422	    if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;
4423
4424	    if (_isObject(C)) {
4425	      C = C[SPECIES];
4426	      if (C === null) C = undefined;
4427	    }
4428	  }
4429
4430	  return C === undefined ? Array : C;
4431	};
4432
4433	// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
4434
4435
4436	var _arraySpeciesCreate = function (original, length) {
4437	  return new (_arraySpeciesConstructor(original))(length);
4438	};
4439
4440	// 0 -> Array#forEach
4441	// 1 -> Array#map
4442	// 2 -> Array#filter
4443	// 3 -> Array#some
4444	// 4 -> Array#every
4445	// 5 -> Array#find
4446	// 6 -> Array#findIndex
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457	var _arrayMethods = function (TYPE, $create) {
4458	  var IS_MAP = TYPE == 1;
4459	  var IS_FILTER = TYPE == 2;
4460	  var IS_SOME = TYPE == 3;
4461	  var IS_EVERY = TYPE == 4;
4462	  var IS_FIND_INDEX = TYPE == 6;
4463	  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
4464	  var create = $create || _arraySpeciesCreate;
4465	  return function ($this, callbackfn, that) {
4466	    var O = _toObject($this);
4467	    var self = _iobject(O);
4468	    var f = _ctx(callbackfn, that, 3);
4469	    var length = _toLength(self.length);
4470	    var index = 0;
4471	    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
4472	    var val, res;
4473
4474	    for (; length > index; index++) {
4475	      if (NO_HOLES || index in self) {
4476	        val = self[index];
4477	        res = f(val, index, O);
4478
4479	        if (TYPE) {
4480	          if (IS_MAP) result[index] = res; // map
4481	          else if (res) switch (TYPE) {
4482	              case 3:
4483	                return true;
4484	              // some
4485
4486	              case 5:
4487	                return val;
4488	              // find
4489
4490	              case 6:
4491	                return index;
4492	              // findIndex
4493
4494	              case 2:
4495	                result.push(val);
4496	              // filter
4497	            } else if (IS_EVERY) return false; // every
4498	        }
4499	      }
4500	    }
4501
4502	    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
4503	  };
4504	};
4505
4506	var $forEach = _arrayMethods(0);
4507
4508	var STRICT = _strictMethod([].forEach, true);
4509
4510	_export(_export.P + _export.F * !STRICT, 'Array', {
4511	  // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])
4512	  forEach: function forEach(callbackfn
4513	  /* , thisArg */
4514	  ) {
4515	    return $forEach(this, callbackfn, arguments[1]);
4516	  }
4517	});
4518
4519	var $map = _arrayMethods(1);
4520
4521	_export(_export.P + _export.F * !_strictMethod([].map, true), 'Array', {
4522	  // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])
4523	  map: function map(callbackfn
4524	  /* , thisArg */
4525	  ) {
4526	    return $map(this, callbackfn, arguments[1]);
4527	  }
4528	});
4529
4530	var $filter = _arrayMethods(2);
4531
4532	_export(_export.P + _export.F * !_strictMethod([].filter, true), 'Array', {
4533	  // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])
4534	  filter: function filter(callbackfn
4535	  /* , thisArg */
4536	  ) {
4537	    return $filter(this, callbackfn, arguments[1]);
4538	  }
4539	});
4540
4541	var $some = _arrayMethods(3);
4542
4543	_export(_export.P + _export.F * !_strictMethod([].some, true), 'Array', {
4544	  // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])
4545	  some: function some(callbackfn
4546	  /* , thisArg */
4547	  ) {
4548	    return $some(this, callbackfn, arguments[1]);
4549	  }
4550	});
4551
4552	var $every = _arrayMethods(4);
4553
4554	_export(_export.P + _export.F * !_strictMethod([].every, true), 'Array', {
4555	  // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])
4556	  every: function every(callbackfn
4557	  /* , thisArg */
4558	  ) {
4559	    return $every(this, callbackfn, arguments[1]);
4560	  }
4561	});
4562
4563	var _arrayReduce = function (that, callbackfn, aLen, memo, isRight) {
4564	  _aFunction(callbackfn);
4565	  var O = _toObject(that);
4566	  var self = _iobject(O);
4567	  var length = _toLength(O.length);
4568	  var index = isRight ? length - 1 : 0;
4569	  var i = isRight ? -1 : 1;
4570	  if (aLen < 2) for (;;) {
4571	    if (index in self) {
4572	      memo = self[index];
4573	      index += i;
4574	      break;
4575	    }
4576
4577	    index += i;
4578
4579	    if (isRight ? index < 0 : length <= index) {
4580	      throw TypeError('Reduce of empty array with no initial value');
4581	    }
4582	  }
4583
4584	  for (; isRight ? index >= 0 : length > index; index += i) {
4585	    if (index in self) {
4586	      memo = callbackfn(memo, self[index], index, O);
4587	    }
4588	  }
4589
4590	  return memo;
4591	};
4592
4593	_export(_export.P + _export.F * !_strictMethod([].reduce, true), 'Array', {
4594	  // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])
4595	  reduce: function reduce(callbackfn
4596	  /* , initialValue */
4597	  ) {
4598	    return _arrayReduce(this, callbackfn, arguments.length, arguments[1], false);
4599	  }
4600	});
4601
4602	_export(_export.P + _export.F * !_strictMethod([].reduceRight, true), 'Array', {
4603	  // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])
4604	  reduceRight: function reduceRight(callbackfn
4605	  /* , initialValue */
4606	  ) {
4607	    return _arrayReduce(this, callbackfn, arguments.length, arguments[1], true);
4608	  }
4609	});
4610
4611	var $indexOf = _arrayIncludes(false);
4612
4613	var $native = [].indexOf;
4614	var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;
4615	_export(_export.P + _export.F * (NEGATIVE_ZERO || !_strictMethod($native)), 'Array', {
4616	  // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])
4617	  indexOf: function indexOf(searchElement
4618	  /* , fromIndex = 0 */
4619	  ) {
4620	    return NEGATIVE_ZERO // convert -0 to +0
4621	    ? $native.apply(this, arguments) || 0 : $indexOf(this, searchElement, arguments[1]);
4622	  }
4623	});
4624
4625	var $native$1 = [].lastIndexOf;
4626	var NEGATIVE_ZERO$1 = !!$native$1 && 1 / [1].lastIndexOf(1, -0) < 0;
4627	_export(_export.P + _export.F * (NEGATIVE_ZERO$1 || !_strictMethod($native$1)), 'Array', {
4628	  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])
4629	  lastIndexOf: function lastIndexOf(searchElement
4630	  /* , fromIndex = @[*-1] */
4631	  ) {
4632	    // convert -0 to +0
4633	    if (NEGATIVE_ZERO$1) return $native$1.apply(this, arguments) || 0;
4634	    var O = _toIobject(this);
4635	    var length = _toLength(O.length);
4636	    var index = length - 1;
4637	    if (arguments.length > 1) index = Math.min(index, _toInteger(arguments[1]));
4638	    if (index < 0) index = length + index;
4639
4640	    for (; index >= 0; index--) {
4641	      if (index in O) if (O[index] === searchElement) return index || 0;
4642	    }
4643
4644	    return -1;
4645	  }
4646	});
4647
4648	var _arrayCopyWithin = [].copyWithin || function copyWithin(target
4649	/* = 0 */
4650	, start
4651	/* = 0, end = @length */
4652	) {
4653	  var O = _toObject(this);
4654	  var len = _toLength(O.length);
4655	  var to = _toAbsoluteIndex(target, len);
4656	  var from = _toAbsoluteIndex(start, len);
4657	  var end = arguments.length > 2 ? arguments[2] : undefined;
4658	  var count = Math.min((end === undefined ? len : _toAbsoluteIndex(end, len)) - from, len - to);
4659	  var inc = 1;
4660
4661	  if (from < to && to < from + count) {
4662	    inc = -1;
4663	    from += count - 1;
4664	    to += count - 1;
4665	  }
4666
4667	  while (count-- > 0) {
4668	    if (from in O) O[to] = O[from];else delete O[to];
4669	    to += inc;
4670	    from += inc;
4671	  }
4672
4673	  return O;
4674	};
4675
4676	// 22.1.3.31 Array.prototype[@@unscopables]
4677	var UNSCOPABLES = _wks('unscopables');
4678
4679	var ArrayProto$1 = Array.prototype;
4680	if (ArrayProto$1[UNSCOPABLES] == undefined) _hide(ArrayProto$1, UNSCOPABLES, {});
4681
4682	var _addToUnscopables = function (key) {
4683	  ArrayProto$1[UNSCOPABLES][key] = true;
4684	};
4685
4686	// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
4687
4688
4689	_export(_export.P, 'Array', {
4690	  copyWithin: _arrayCopyWithin
4691	});
4692
4693	_addToUnscopables('copyWithin');
4694
4695	var _arrayFill = function fill(value
4696	/* , start = 0, end = @length */
4697	) {
4698	  var O = _toObject(this);
4699	  var length = _toLength(O.length);
4700	  var aLen = arguments.length;
4701	  var index = _toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);
4702	  var end = aLen > 2 ? arguments[2] : undefined;
4703	  var endPos = end === undefined ? length : _toAbsoluteIndex(end, length);
4704
4705	  while (endPos > index) {
4706	    O[index++] = value;
4707	  }
4708
4709	  return O;
4710	};
4711
4712	// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
4713
4714
4715	_export(_export.P, 'Array', {
4716	  fill: _arrayFill
4717	});
4718
4719	_addToUnscopables('fill');
4720
4721	var $find = _arrayMethods(5);
4722
4723	var KEY = 'find';
4724	var forced = true; // Shouldn't skip holes
4725
4726	if (KEY in []) Array(1)[KEY](function () {
4727	  forced = false;
vendor: 14,207 bytes, lines 4728-5201
4728	});
4729	_export(_export.P + _export.F * forced, 'Array', {
4730	  find: function find(callbackfn
4731	  /* , that = undefined */
4732	  ) {
4733	    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
4734	  }
4735	});
4736
4737	_addToUnscopables(KEY);
4738
4739	var $find$1 = _arrayMethods(6);
4740
4741	var KEY$1 = 'findIndex';
4742	var forced$1 = true; // Shouldn't skip holes
4743
4744	if (KEY$1 in []) Array(1)[KEY$1](function () {
4745	  forced$1 = false;
4746	});
4747	_export(_export.P + _export.F * forced$1, 'Array', {
4748	  findIndex: function findIndex(callbackfn
4749	  /* , that = undefined */
4750	  ) {
4751	    return $find$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
4752	  }
4753	});
4754
4755	_addToUnscopables(KEY$1);
4756
4757	var SPECIES$1 = _wks('species');
4758
4759	var _setSpecies = function (KEY) {
4760	  var C = _global[KEY];
4761	  if (_descriptors && C && !C[SPECIES$1]) _objectDp.f(C, SPECIES$1, {
4762	    configurable: true,
4763	    get: function get() {
4764	      return this;
4765	    }
4766	  });
4767	};
4768
4769	_setSpecies('Array');
4770
4771	var _iterStep = function (done, value) {
4772	  return {
4773	    value: value,
4774	    done: !!done
4775	  };
4776	};
4777
4778	// 22.1.3.4 Array.prototype.entries()
4779	// 22.1.3.13 Array.prototype.keys()
4780	// 22.1.3.29 Array.prototype.values()
4781	// 22.1.3.30 Array.prototype[@@iterator]()
4782
4783
4784	var es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) {
4785	  this._t = _toIobject(iterated); // target
4786
4787	  this._i = 0; // next index
4788
4789	  this._k = kind; // kind
4790	  // 22.1.5.2.1 %ArrayIteratorPrototype%.next()
4791	}, function () {
4792	  var O = this._t;
4793	  var kind = this._k;
4794	  var index = this._i++;
4795
4796	  if (!O || index >= O.length) {
4797	    this._t = undefined;
4798	    return _iterStep(1);
4799	  }
4800
4801	  if (kind == 'keys') return _iterStep(0, index);
4802	  if (kind == 'values') return _iterStep(0, O[index]);
4803	  return _iterStep(0, [index, O[index]]);
4804	}, 'values'); // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
4805
4806	_iterators.Arguments = _iterators.Array;
4807	_addToUnscopables('keys');
4808	_addToUnscopables('values');
4809	_addToUnscopables('entries');
4810
4811	var _flags = function () {
4812	  var that = _anObject(this);
4813	  var result = '';
4814	  if (that.global) result += 'g';
4815	  if (that.ignoreCase) result += 'i';
4816	  if (that.multiline) result += 'm';
4817	  if (that.unicode) result += 'u';
4818	  if (that.sticky) result += 'y';
4819	  return result;
4820	};
4821
4822	var dP$4 = _objectDp.f;
4823
4824	var gOPN$3 = _objectGopn.f;
4825
4826
4827
4828
4829
4830	var $RegExp = _global.RegExp;
4831	var Base$1 = $RegExp;
4832	var proto$2 = $RegExp.prototype;
4833	var re1 = /a/g;
4834	var re2 = /a/g; // "new" creates a new object, old webkit buggy here
4835
4836	var CORRECT_NEW = new $RegExp(re1) !== re1;
4837
4838	if (_descriptors && (!CORRECT_NEW || _fails(function () {
4839	  re2[_wks('match')] = false; // RegExp constructor can alter flags and IsRegExp works correct with @@match
4840
4841	  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';
4842	}))) {
4843	  $RegExp = function RegExp(p, f) {
4844	    var tiRE = this instanceof $RegExp;
4845	    var piRE = _isRegexp(p);
4846	    var fiU = f === undefined;
4847	    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p : _inheritIfRequired(CORRECT_NEW ? new Base$1(piRE && !fiU ? p.source : p, f) : Base$1((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? _flags.call(p) : f), tiRE ? this : proto$2, $RegExp);
4848	  };
4849
4850	  var proxy = function proxy(key) {
4851	    key in $RegExp || dP$4($RegExp, key, {
4852	      configurable: true,
4853	      get: function get() {
4854	        return Base$1[key];
4855	      },
4856	      set: function set(it) {
4857	        Base$1[key] = it;
4858	      }
4859	    });
4860	  };
4861
4862	  for (var keys$1 = gOPN$3(Base$1), i = 0; keys$1.length > i;) {
4863	    proxy(keys$1[i++]);
4864	  }
4865
4866	  proto$2.constructor = $RegExp;
4867	  $RegExp.prototype = proto$2;
4868
4869	  _redefine(_global, 'RegExp', $RegExp);
4870	}
4871
4872	_setSpecies('RegExp');
4873
4874	var nativeExec = RegExp.prototype.exec; // This always refers to the native implementation, because the
4875	// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
4876	// which loads this file before patching the method.
4877
4878	var nativeReplace = String.prototype.replace;
4879	var patchedExec = nativeExec;
4880	var LAST_INDEX = 'lastIndex';
4881
4882	var UPDATES_LAST_INDEX_WRONG = function () {
4883	  var re1 = /a/,
4884	      re2 = /b*/g;
4885	  nativeExec.call(re1, 'a');
4886	  nativeExec.call(re2, 'a');
4887	  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;
4888	}(); // nonparticipating capturing group, copied from es5-shim's String#split patch.
4889
4890
4891	var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
4892	var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;
4893
4894	if (PATCH) {
4895	  patchedExec = function exec(str) {
4896	    var re = this;
4897	    var lastIndex, reCopy, match, i;
4898
4899	    if (NPCG_INCLUDED) {
4900	      reCopy = new RegExp('^' + re.source + '$(?!\\s)', _flags.call(re));
4901	    }
4902
4903	    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];
4904	    match = nativeExec.call(re, str);
4905
4906	    if (UPDATES_LAST_INDEX_WRONG && match) {
4907	      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;
4908	    }
4909
4910	    if (NPCG_INCLUDED && match && match.length > 1) {
4911	      // Fix browsers whose `exec` methods don't consistently return `undefined`
4912	      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
4913	      // eslint-disable-next-line no-loop-func
4914	      nativeReplace.call(match[0], reCopy, function () {
4915	        for (i = 1; i < arguments.length - 2; i++) {
4916	          if (arguments[i] === undefined) match[i] = undefined;
4917	        }
4918	      });
4919	    }
4920
4921	    return match;
4922	  };
4923	}
4924
4925	var _regexpExec = patchedExec;
4926
4927	_export({
4928	  target: 'RegExp',
4929	  proto: true,
4930	  forced: _regexpExec !== /./.exec
4931	}, {
4932	  exec: _regexpExec
4933	});
4934
4935	// 21.2.5.3 get RegExp.prototype.flags()
4936	if (_descriptors && /./g.flags != 'g') _objectDp.f(RegExp.prototype, 'flags', {
4937	  configurable: true,
4938	  get: _flags
4939	});
4940
4941	var TO_STRING$1 = 'toString';
4942	var $toString$1 = /./[TO_STRING$1];
4943
4944	var define = function define(fn) {
4945	  _redefine(RegExp.prototype, TO_STRING$1, fn, true);
4946	}; // 21.2.5.14 RegExp.prototype.toString()
4947
4948
4949	if (_fails(function () {
4950	  return $toString$1.call({
4951	    source: 'a',
4952	    flags: 'b'
4953	  }) != '/a/b';
4954	})) {
4955	  define(function toString() {
4956	    var R = _anObject(this);
4957	    return '/'.concat(R.source, '/', 'flags' in R ? R.flags : !_descriptors && R instanceof RegExp ? _flags.call(R) : undefined);
4958	  }); // FF44- RegExp#toString has a wrong name
4959	} else if ($toString$1.name != TO_STRING$1) {
4960	  define(function toString() {
4961	    return $toString$1.call(this);
4962	  });
4963	}
4964
4965	var at = _stringAt(true); // `AdvanceStringIndex` abstract operation
4966	// https://tc39.github.io/ecma262/#sec-advancestringindex
4967
4968
4969	var _advanceStringIndex = function (S, index, unicode) {
4970	  return index + (unicode ? at(S, index).length : 1);
4971	};
4972
4973	var builtinExec = RegExp.prototype.exec; // `RegExpExec` abstract operation
4974	// https://tc39.github.io/ecma262/#sec-regexpexec
4975
4976	var _regexpExecAbstract = function (R, S) {
4977	  var exec = R.exec;
4978
4979	  if (typeof exec === 'function') {
4980	    var result = exec.call(R, S);
4981
4982	    if (babelHelpers.typeof(result) !== 'object') {
4983	      throw new TypeError('RegExp exec method returned something other than an Object or null');
4984	    }
4985
4986	    return result;
4987	  }
4988
4989	  if (_classof(R) !== 'RegExp') {
4990	    throw new TypeError('RegExp#exec called on incompatible receiver');
4991	  }
4992
4993	  return builtinExec.call(R, S);
4994	};
4995
4996	var SPECIES$2 = _wks('species');
4997	var REPLACE_SUPPORTS_NAMED_GROUPS = !_fails(function () {
4998	  // #replace needs built-in support for named groups.
4999	  // #match works fine because it just return the exec results, even if it has
5000	  // a "grops" property.
5001	  var re = /./;
5002
5003	  re.exec = function () {
5004	    var result = [];
5005	    result.groups = {
5006	      a: '7'
5007	    };
5008	    return result;
5009	  };
5010
5011	  return ''.replace(re, '$<a>') !== '7';
5012	});
5013
5014	var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = function () {
5015	  // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
5016	  var re = /(?:)/;
5017	  var originalExec = re.exec;
5018
5019	  re.exec = function () {
5020	    return originalExec.apply(this, arguments);
5021	  };
5022
5023	  var result = 'ab'.split(re);
5024	  return result.length === 2 && result[0] === 'a' && result[1] === 'b';
5025	}();
5026
5027	var _fixReWks = function (KEY, length, exec) {
5028	  var SYMBOL = _wks(KEY);
5029	  var DELEGATES_TO_SYMBOL = !_fails(function () {
5030	    // String methods call symbol-named RegEp methods
5031	    var O = {};
5032
5033	    O[SYMBOL] = function () {
5034	      return 7;
5035	    };
5036
5037	    return ''[KEY](O) != 7;
5038	  });
5039	  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !_fails(function () {
5040	    // Symbol-named RegExp methods call .exec
5041	    var execCalled = false;
5042	    var re = /a/;
5043
5044	    re.exec = function () {
5045	      execCalled = true;
5046	      return null;
5047	    };
5048
5049	    if (KEY === 'split') {
5050	      // RegExp[@@split] doesn't call the regex's exec method, but first creates
5051	      // a new one. We need to return the patched regex when creating the new one.
5052	      re.constructor = {};
5053
5054	      re.constructor[SPECIES$2] = function () {
5055	        return re;
5056	      };
5057	    }
5058
5059	    re[SYMBOL]('');
5060	    return !execCalled;
5061	  }) : undefined;
5062
5063	  if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS || KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) {
5064	    var nativeRegExpMethod = /./[SYMBOL];
5065	    var fns = exec(_defined, SYMBOL, ''[KEY], function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {
5066	      if (regexp.exec === _regexpExec) {
5067	        if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
5068	          // The native String method already delegates to @@method (this
5069	          // polyfilled function), leasing to infinite recursion.
5070	          // We avoid it by directly calling the native @@method method.
5071	          return {
5072	            done: true,
5073	            value: nativeRegExpMethod.call(regexp, str, arg2)
5074	          };
5075	        }
5076
5077	        return {
5078	          done: true,
5079	          value: nativeMethod.call(str, regexp, arg2)
5080	        };
5081	      }
5082
5083	      return {
5084	        done: false
5085	      };
5086	    });
5087	    var strfn = fns[0];
5088	    var rxfn = fns[1];
5089	    _redefine(String.prototype, KEY, strfn);
5090	    _hide(RegExp.prototype, SYMBOL, length == 2 // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
5091	    // 21.2.5.11 RegExp.prototype[@@split](string, limit)
5092	    ? function (string, arg) {
5093	      return rxfn.call(string, this, arg);
5094	    } // 21.2.5.6 RegExp.prototype[@@match](string)
5095	    // 21.2.5.9 RegExp.prototype[@@search](string)
5096	    : function (string) {
5097	      return rxfn.call(string, this);
5098	    });
5099	  }
5100	};
5101
5102	// @@match logic
5103
5104
5105	_fixReWks('match', 1, function (defined, MATCH, $match, maybeCallNative) {
5106	  return [// `String.prototype.match` method
5107	  // https://tc39.github.io/ecma262/#sec-string.prototype.match
5108	  function match(regexp) {
5109	    var O = defined(this);
5110	    var fn = regexp == undefined ? undefined : regexp[MATCH];
5111	    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
5112	  }, // `RegExp.prototype[@@match]` method
5113	  // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match
5114	  function (regexp) {
5115	    var res = maybeCallNative($match, regexp, this);
5116	    if (res.done) return res.value;
5117	    var rx = _anObject(regexp);
5118	    var S = String(this);
5119	    if (!rx.global) return _regexpExecAbstract(rx, S);
5120	    var fullUnicode = rx.unicode;
5121	    rx.lastIndex = 0;
5122	    var A = [];
5123	    var n = 0;
5124	    var result;
5125
5126	    while ((result = _regexpExecAbstract(rx, S)) !== null) {
5127	      var matchStr = String(result[0]);
5128	      A[n] = matchStr;
5129	      if (matchStr === '') rx.lastIndex = _advanceStringIndex(S, _toLength(rx.lastIndex), fullUnicode);
5130	      n++;
5131	    }
5132
5133	    return n === 0 ? null : A;
5134	  }];
5135	});
5136
5137	var max$1 = Math.max;
5138	var min$2 = Math.min;
5139	var floor$3 = Math.floor;
5140	var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g;
5141	var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g;
5142
5143	var maybeToString = function maybeToString(it) {
5144	  return it === undefined ? it : String(it);
5145	}; // @@replace logic
5146
5147
5148	_fixReWks('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {
5149	  return [// `String.prototype.replace` method
5150	  // https://tc39.github.io/ecma262/#sec-string.prototype.replace
5151	  function replace(searchValue, replaceValue) {
5152	    var O = defined(this);
5153	    var fn = searchValue == undefined ? undefined : searchValue[REPLACE];
5154	    return fn !== undefined ? fn.call(searchValue, O, replaceValue) : $replace.call(String(O), searchValue, replaceValue);
5155	  }, // `RegExp.prototype[@@replace]` method
5156	  // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace
5157	  function (regexp, replaceValue) {
5158	    var res = maybeCallNative($replace, regexp, this, replaceValue);
5159	    if (res.done) return res.value;
5160	    var rx = _anObject(regexp);
5161	    var S = String(this);
5162	    var functionalReplace = typeof replaceValue === 'function';
5163	    if (!functionalReplace) replaceValue = String(replaceValue);
5164	    var global = rx.global;
5165
5166	    if (global) {
5167	      var fullUnicode = rx.unicode;
5168	      rx.lastIndex = 0;
5169	    }
5170
5171	    var results = [];
5172
5173	    while (true) {
5174	      var result = _regexpExecAbstract(rx, S);
5175	      if (result === null) break;
5176	      results.push(result);
5177	      if (!global) break;
5178	      var matchStr = String(result[0]);
5179	      if (matchStr === '') rx.lastIndex = _advanceStringIndex(S, _toLength(rx.lastIndex), fullUnicode);
5180	    }
5181
5182	    var accumulatedResult = '';
5183	    var nextSourcePosition = 0;
5184
5185	    for (var i = 0; i < results.length; i++) {
5186	      result = results[i];
5187	      var matched = String(result[0]);
5188	      var position = max$1(min$2(_toInteger(result.index), S.length), 0);
5189	      var captures = []; // NOTE: This is equivalent to
5190	      //   captures = result.slice(1).map(maybeToString)
5191	      // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
5192	      // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
5193	      // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
5194
5195	      for (var j = 1; j < result.length; j++) {
5196	        captures.push(maybeToString(result[j]));
5197	      }
5198
5199	      var namedCaptures = result.groups;
5200
5201	      if (functionalReplace) {
vendor: 6,187 bytes, lines 5202-5369
5202	        var replacerArgs = [matched].concat(captures, position, S);
5203	        if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
5204	        var replacement = String(replaceValue.apply(undefined, replacerArgs));
5205	      } else {
5206	        replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
5207	      }
5208
5209	      if (position >= nextSourcePosition) {
5210	        accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
5211	        nextSourcePosition = position + matched.length;
5212	      }
5213	    }
5214
5215	    return accumulatedResult + S.slice(nextSourcePosition);
5216	  }]; // https://tc39.github.io/ecma262/#sec-getsubstitution
5217
5218	  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {
5219	    var tailPos = position + matched.length;
5220	    var m = captures.length;
5221	    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
5222
5223	    if (namedCaptures !== undefined) {
5224	      namedCaptures = _toObject(namedCaptures);
5225	      symbols = SUBSTITUTION_SYMBOLS;
5226	    }
5227
5228	    return $replace.call(replacement, symbols, function (match, ch) {
5229	      var capture;
5230
5231	      switch (ch.charAt(0)) {
5232	        case '$':
5233	          return '$';
5234
5235	        case '&':
5236	          return matched;
5237
5238	        case '`':
5239	          return str.slice(0, position);
5240
5241	        case "'":
5242	          return str.slice(tailPos);
5243
5244	        case '<':
5245	          capture = namedCaptures[ch.slice(1, -1)];
5246	          break;
5247
5248	        default:
5249	          // \d\d?
5250	          var n = +ch;
5251	          if (n === 0) return match;
5252
5253	          if (n > m) {
5254	            var f = floor$3(n / 10);
5255	            if (f === 0) return match;
5256	            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
5257	            return match;
5258	          }
5259
5260	          capture = captures[n - 1];
5261	      }
5262
5263	      return capture === undefined ? '' : capture;
5264	    });
5265	  }
5266	});
5267
5268	// @@search logic
5269
5270
5271	_fixReWks('search', 1, function (defined, SEARCH, $search, maybeCallNative) {
5272	  return [// `String.prototype.search` method
5273	  // https://tc39.github.io/ecma262/#sec-string.prototype.search
5274	  function search(regexp) {
5275	    var O = defined(this);
5276	    var fn = regexp == undefined ? undefined : regexp[SEARCH];
5277	    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
5278	  }, // `RegExp.prototype[@@search]` method
5279	  // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search
5280	  function (regexp) {
5281	    var res = maybeCallNative($search, regexp, this);
5282	    if (res.done) return res.value;
5283	    var rx = _anObject(regexp);
5284	    var S = String(this);
5285	    var previousLastIndex = rx.lastIndex;
5286	    if (!_sameValue(previousLastIndex, 0)) rx.lastIndex = 0;
5287	    var result = _regexpExecAbstract(rx, S);
5288	    if (!_sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;
5289	    return result === null ? -1 : result.index;
5290	  }];
5291	});
5292
5293	// 7.3.20 SpeciesConstructor(O, defaultConstructor)
5294
5295
5296
5297
5298	var SPECIES$3 = _wks('species');
5299
5300	var _speciesConstructor = function (O, D) {
5301	  var C = _anObject(O).constructor;
5302	  var S;
5303	  return C === undefined || (S = _anObject(C)[SPECIES$3]) == undefined ? D : _aFunction(S);
5304	};
5305
5306	var $min = Math.min;
5307	var $push = [].push;
5308	var $SPLIT = 'split';
5309	var LENGTH = 'length';
5310	var LAST_INDEX$1 = 'lastIndex';
5311	var MAX_UINT32 = 0xffffffff; // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError
5312
5313	var SUPPORTS_Y = !_fails(function () {
5314	}); // @@split logic
5315
5316	_fixReWks('split', 2, function (defined, SPLIT, $split, maybeCallNative) {
5317	  var internalSplit;
5318
5319	  if ('abbc'[$SPLIT](/(b)*/)[1] == 'c' || 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 || 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 || '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 || '.'[$SPLIT](/()()/)[LENGTH] > 1 || ''[$SPLIT](/.?/)[LENGTH]) {
5320	    // based on es5-shim implementation, need to rework it
5321	    internalSplit = function internalSplit(separator, limit) {
5322	      var string = String(this);
5323	      if (separator === undefined && limit === 0) return []; // If `separator` is not a regex, use native split
5324
5325	      if (!_isRegexp(separator)) return $split.call(string, separator, limit);
5326	      var output = [];
5327	      var flags = (separator.ignoreCase ? 'i' : '') + (separator.multiline ? 'm' : '') + (separator.unicode ? 'u' : '') + (separator.sticky ? 'y' : '');
5328	      var lastLastIndex = 0;
5329	      var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0; // Make `global` and avoid `lastIndex` issues by working with a copy
5330
5331	      var separatorCopy = new RegExp(separator.source, flags + 'g');
5332	      var match, lastIndex, lastLength;
5333
5334	      while (match = _regexpExec.call(separatorCopy, string)) {
5335	        lastIndex = separatorCopy[LAST_INDEX$1];
5336
5337	        if (lastIndex > lastLastIndex) {
5338	          output.push(string.slice(lastLastIndex, match.index));
5339	          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));
5340	          lastLength = match[0][LENGTH];
5341	          lastLastIndex = lastIndex;
5342	          if (output[LENGTH] >= splitLimit) break;
5343	        }
5344
5345	        if (separatorCopy[LAST_INDEX$1] === match.index) separatorCopy[LAST_INDEX$1]++; // Avoid an infinite loop
5346	      }
5347
5348	      if (lastLastIndex === string[LENGTH]) {
5349	        if (lastLength || !separatorCopy.test('')) output.push('');
5350	      } else output.push(string.slice(lastLastIndex));
5351
5352	      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;
5353	    }; // Chakra, V8
5354
5355	  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {
5356	    internalSplit = function internalSplit(separator, limit) {
5357	      return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);
5358	    };
5359	  } else {
5360	    internalSplit = $split;
5361	  }
5362
5363	  return [// `String.prototype.split` method
5364	  // https://tc39.github.io/ecma262/#sec-string.prototype.split
5365	  function split(separator, limit) {
5366	    var O = defined(this);
5367	    var splitter = separator == undefined ? undefined : separator[SPLIT];
5368	    return splitter !== undefined ? splitter.call(separator, O, limit) : internalSplit.call(String(O), separator, limit);
5369	  }
vendor: 70,404 bytes, lines 5369-7869
5369, // `RegExp.prototype[@@split]` method
5370	  // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split
5371	  //
5372	  // NOTE: This cannot be properly polyfilled in engines that don't support
5373	  // the 'y' flag.
5374	  function (regexp, limit) {
5375	    var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);
5376	    if (res.done) return res.value;
5377	    var rx = _anObject(regexp);
5378	    var S = String(this);
5379	    var C = _speciesConstructor(rx, RegExp);
5380	    var unicodeMatching = rx.unicode;
5381	    var flags = (rx.ignoreCase ? 'i' : '') + (rx.multiline ? 'm' : '') + (rx.unicode ? 'u' : '') + (SUPPORTS_Y ? 'y' : 'g'); // ^(? + rx + ) is needed, in combination with some S slicing, to
5382	    // simulate the 'y' flag.
5383
5384	    var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);
5385	    var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
5386	    if (lim === 0) return [];
5387	    if (S.length === 0) return _regexpExecAbstract(splitter, S) === null ? [S] : [];
5388	    var p = 0;
5389	    var q = 0;
5390	    var A = [];
5391
5392	    while (q < S.length) {
5393	      splitter.lastIndex = SUPPORTS_Y ? q : 0;
5394	      var z = _regexpExecAbstract(splitter, SUPPORTS_Y ? S : S.slice(q));
5395	      var e;
5396
5397	      if (z === null || (e = $min(_toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p) {
5398	        q = _advanceStringIndex(S, q, unicodeMatching);
5399	      } else {
5400	        A.push(S.slice(p, q));
5401	        if (A.length === lim) return A;
5402
5403	        for (var i = 1; i <= z.length - 1; i++) {
5404	          A.push(z[i]);
5405	          if (A.length === lim) return A;
5406	        }
5407
5408	        q = p = e;
5409	      }
5410	    }
5411
5412	    A.push(S.slice(p));
5413	    return A;
5414	  }];
5415	});
5416
5417	var _anInstance = function (it, Constructor, name, forbiddenField) {
5418	  if (!(it instanceof Constructor) || forbiddenField !== undefined && forbiddenField in it) {
5419	    throw TypeError(name + ': incorrect invocation!');
5420	  }
5421
5422	  return it;
5423	};
5424
5425	var _forOf = createCommonjsModule(function (module) {
5426	var BREAK = {};
5427	var RETURN = {};
5428
5429	var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
5430	  var iterFn = ITERATOR ? function () {
5431	    return iterable;
5432	  } : core_getIteratorMethod(iterable);
5433	  var f = _ctx(fn, that, entries ? 2 : 1);
5434	  var index = 0;
5435	  var length, step, iterator, result;
5436	  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); // fast case for arrays with default iterator
5437
5438	  if (_isArrayIter(iterFn)) for (length = _toLength(iterable.length); length > index; index++) {
5439	    result = entries ? f(_anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
5440	    if (result === BREAK || result === RETURN) return result;
5441	  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
5442	    result = _iterCall(iterator, f, step.value, entries);
5443	    if (result === BREAK || result === RETURN) return result;
5444	  }
5445	};
5446
5447	exports.BREAK = BREAK;
5448	exports.RETURN = RETURN;
5449	});
5450
5451	var process = _global.process;
5452	var setTask = _global.setImmediate;
5453	var clearTask = _global.clearImmediate;
5454	var MessageChannel = _global.MessageChannel;
5455	var Dispatch = _global.Dispatch;
5456	var counter = 0;
5457	var queue = {};
5458	var ONREADYSTATECHANGE = 'onreadystatechange';
5459	var defer, channel, port;
5460
5461	var run = function run() {
5462	  var id = +this; // eslint-disable-next-line no-prototype-builtins
5463
5464	  if (queue.hasOwnProperty(id)) {
5465	    var fn = queue[id];
5466	    delete queue[id];
5467	    fn();
5468	  }
5469	};
5470
5471	var listener = function listener(event) {
5472	  run.call(event.data);
5473	}; // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
5474
5475
5476	if (!setTask || !clearTask) {
5477	  setTask = function setImmediate(fn) {
5478	    var args = [];
5479	    var i = 1;
5480
5481	    while (arguments.length > i) {
5482	      args.push(arguments[i++]);
5483	    }
5484
5485	    queue[++counter] = function () {
5486	      // eslint-disable-next-line no-new-func
5487	      _invoke(typeof fn == 'function' ? fn : Function(fn), args);
5488	    };
5489
5490	    defer(counter);
5491	    return counter;
5492	  };
5493
5494	  clearTask = function clearImmediate(id) {
5495	    delete queue[id];
5496	  }; // Node.js 0.8-
5497
5498
5499	  if (_cof(process) == 'process') {
5500	    defer = function defer(id) {
5501	      process.nextTick(_ctx(run, id, 1));
5502	    }; // Sphere (JS game engine) Dispatch API
5503
5504	  } else if (Dispatch && Dispatch.now) {
5505	    defer = function defer(id) {
5506	      Dispatch.now(_ctx(run, id, 1));
5507	    }; // Browsers with MessageChannel, includes WebWorkers
5508
5509	  } else if (MessageChannel) {
5510	    channel = new MessageChannel();
5511	    port = channel.port2;
5512	    channel.port1.onmessage = listener;
5513	    defer = _ctx(port.postMessage, port, 1); // Browsers with postMessage, skip WebWorkers
5514	    // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
5515	  } else if (_global.addEventListener && typeof postMessage == 'function' && !_global.importScripts) {
5516	    defer = function defer(id) {
5517	      _global.postMessage(id + '', '*');
5518	    };
5519
5520	    _global.addEventListener('message', listener, false); // IE8-
5521	  } else if (ONREADYSTATECHANGE in _domCreate('script')) {
5522	    defer = function defer(id) {
5523	      _html.appendChild(_domCreate('script'))[ONREADYSTATECHANGE] = function () {
5524	        _html.removeChild(this);
5525	        run.call(id);
5526	      };
5527	    }; // Rest old browsers
5528
5529	  } else {
5530	    defer = function defer(id) {
5531	      setTimeout(_ctx(run, id, 1), 0);
5532	    };
5533	  }
5534	}
5535
5536	var _task = {
5537	  set: setTask,
5538	  clear: clearTask
5539	};
5540
5541	var macrotask = _task.set;
5542
5543	var Observer = _global.MutationObserver || _global.WebKitMutationObserver;
5544	var process$1 = _global.process;
5545	var Promise = _global.Promise;
5546	var isNode = _cof(process$1) == 'process';
5547
5548	var _microtask = function () {
5549	  var head, last, notify;
5550
5551	  var flush = function flush() {
5552	    var parent, fn;
5553	    if (isNode && (parent = process$1.domain)) parent.exit();
5554
5555	    while (head) {
5556	      fn = head.fn;
5557	      head = head.next;
5558
5559	      try {
5560	        fn();
5561	      } catch (e) {
5562	        if (head) notify();else last = undefined;
5563	        throw e;
5564	      }
5565	    }
5566
5567	    last = undefined;
5568	    if (parent) parent.enter();
5569	  }; // Node.js
5570
5571
5572	  if (isNode) {
5573	    notify = function notify() {
5574	      process$1.nextTick(flush);
5575	    }; // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
5576
5577	  } else if (Observer && !(_global.navigator && _global.navigator.standalone)) {
5578	    var toggle = true;
5579	    var node = document.createTextNode('');
5580	    new Observer(flush).observe(node, {
5581	      characterData: true
5582	    }); // eslint-disable-line no-new
5583
5584	    notify = function notify() {
5585	      node.data = toggle = !toggle;
5586	    }; // environments with maybe non-completely correct, but existent Promise
5587
5588	  } else if (Promise && Promise.resolve) {
5589	    // Promise.resolve without an argument throws an error in LG WebOS 2
5590	    var promise = Promise.resolve(undefined);
5591
5592	    notify = function notify() {
5593	      promise.then(flush);
5594	    }; // for other environments - macrotask based on:
5595	    // - setImmediate
5596	    // - MessageChannel
5597	    // - window.postMessag
5598	    // - onreadystatechange
5599	    // - setTimeout
5600
5601	  } else {
5602	    notify = function notify() {
5603	      // strange IE + webpack dev server bug - use .call(global)
5604	      macrotask.call(_global, flush);
5605	    };
5606	  }
5607
5608	  return function (fn) {
5609	    var task = {
5610	      fn: fn,
5611	      next: undefined
5612	    };
5613	    if (last) last.next = task;
5614
5615	    if (!head) {
5616	      head = task;
5617	      notify();
5618	    }
5619
5620	    last = task;
5621	  };
5622	};
5623
5624	function PromiseCapability(C) {
5625	  var resolve, reject;
5626	  this.promise = new C(function ($$resolve, $$reject) {
5627	    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
5628	    resolve = $$resolve;
5629	    reject = $$reject;
5630	  });
5631	  this.resolve = _aFunction(resolve);
5632	  this.reject = _aFunction(reject);
5633	}
5634
5635	var f$7 = function (C) {
5636	  return new PromiseCapability(C);
5637	};
5638
5639	var _newPromiseCapability = {
5640		f: f$7
5641	};
5642
5643	var _perform = function (exec) {
5644	  try {
5645	    return {
5646	      e: false,
5647	      v: exec()
5648	    };
5649	  } catch (e) {
5650	    return {
5651	      e: true,
5652	      v: e
5653	    };
5654	  }
5655	};
5656
5657	var navigator = _global.navigator;
5658	var _userAgent = navigator && navigator.userAgent || '';
5659
5660	var _promiseResolve = function (C, x) {
5661	  _anObject(C);
5662	  if (_isObject(x) && x.constructor === C) return x;
5663	  var promiseCapability = _newPromiseCapability.f(C);
5664	  var resolve = promiseCapability.resolve;
5665	  resolve(x);
5666	  return promiseCapability.promise;
5667	};
5668
5669	var _redefineAll = function (target, src, safe) {
5670	  for (var key in src) {
5671	    _redefine(target, key, src[key], safe);
5672	  }
5673
5674	  return target;
5675	};
5676
5677	var task = _task.set;
5678
5679	var microtask = _microtask();
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689	var PROMISE = 'Promise';
5690	var TypeError$1 = _global.TypeError;
5691	var process$2 = _global.process;
5692	var versions = process$2 && process$2.versions;
5693	var v8 = versions && versions.v8 || '';
5694	var $Promise = _global[PROMISE];
5695	var isNode$1 = _classof(process$2) == 'process';
5696
5697	var empty = function empty() {
5698	  /* empty */
5699	};
5700
5701	var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;
5702	var newPromiseCapability = newGenericPromiseCapability = _newPromiseCapability.f;
5703	var USE_NATIVE$1 = !!function () {
5704	  try {
5705	    // correct subclassing with @@species support
5706	    var promise = $Promise.resolve(1);
5707
5708	    var FakePromise = (promise.constructor = {})[_wks('species')] = function (exec) {
5709	      exec(empty, empty);
5710	    }; // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
5711
5712
5713	    return (isNode$1 || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
5714	    // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
5715	    // we can't detect it synchronously, so just check versions
5716	    && v8.indexOf('6.6') !== 0 && _userAgent.indexOf('Chrome/66') === -1;
5717	  } catch (e) {
5718	    /* empty */
5719	  }
5720	}(); // helpers
5721
5722	var isThenable = function isThenable(it) {
5723	  var then;
5724	  return _isObject(it) && typeof (then = it.then) == 'function' ? then : false;
5725	};
5726
5727	var notify = function notify(promise, isReject) {
5728	  if (promise._n) return;
5729	  promise._n = true;
5730	  var chain = promise._c;
5731	  microtask(function () {
5732	    var value = promise._v;
5733	    var ok = promise._s == 1;
5734	    var i = 0;
5735
5736	    var run = function run(reaction) {
5737	      var handler = ok ? reaction.ok : reaction.fail;
5738	      var resolve = reaction.resolve;
5739	      var reject = reaction.reject;
5740	      var domain = reaction.domain;
5741	      var result, then, exited;
5742
5743	      try {
5744	        if (handler) {
5745	          if (!ok) {
5746	            if (promise._h == 2) onHandleUnhandled(promise);
5747	            promise._h = 1;
5748	          }
5749
5750	          if (handler === true) result = value;else {
5751	            if (domain) domain.enter();
5752	            result = handler(value); // may throw
5753
5754	            if (domain) {
5755	              domain.exit();
5756	              exited = true;
5757	            }
5758	          }
5759
5760	          if (result === reaction.promise) {
5761	            reject(TypeError$1('Promise-chain cycle'));
5762	          } else if (then = isThenable(result)) {
5763	            then.call(result, resolve, reject);
5764	          } else resolve(result);
5765	        } else reject(value);
5766	      } catch (e) {
5767	        if (domain && !exited) domain.exit();
5768	        reject(e);
5769	      }
5770	    };
5771
5772	    while (chain.length > i) {
5773	      run(chain[i++]);
5774	    } // variable length - can't use forEach
5775
5776
5777	    promise._c = [];
5778	    promise._n = false;
5779	    if (isReject && !promise._h) onUnhandled(promise);
5780	  });
5781	};
5782
5783	var onUnhandled = function onUnhandled(promise) {
5784	  task.call(_global, function () {
5785	    var value = promise._v;
5786	    var unhandled = isUnhandled(promise);
5787	    var result, handler, console;
5788
5789	    if (unhandled) {
5790	      result = _perform(function () {
5791	        if (isNode$1) {
5792	          process$2.emit('unhandledRejection', value, promise);
5793	        } else if (handler = _global.onunhandledrejection) {
5794	          handler({
5795	            promise: promise,
5796	            reason: value
5797	          });
5798	        } else if ((console = _global.console) && console.error) {
5799	          console.error('Unhandled promise rejection', value);
5800	        }
5801	      }); // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
5802
5803	      promise._h = isNode$1 || isUnhandled(promise) ? 2 : 1;
5804	    }
5805
5806	    promise._a = undefined;
5807	    if (unhandled && result.e) throw result.v;
5808	  });
5809	};
5810
5811	var isUnhandled = function isUnhandled(promise) {
5812	  return promise._h !== 1 && (promise._a || promise._c).length === 0;
5813	};
5814
5815	var onHandleUnhandled = function onHandleUnhandled(promise) {
5816	  task.call(_global, function () {
5817	    var handler;
5818
5819	    if (isNode$1) {
5820	      process$2.emit('rejectionHandled', promise);
5821	    } else if (handler = _global.onrejectionhandled) {
5822	      handler({
5823	        promise: promise,
5824	        reason: promise._v
5825	      });
5826	    }
5827	  });
5828	};
5829
5830	var $reject = function $reject(value) {
5831	  var promise = this;
5832	  if (promise._d) return;
5833	  promise._d = true;
5834	  promise = promise._w || promise; // unwrap
5835
5836	  promise._v = value;
5837	  promise._s = 2;
5838	  if (!promise._a) promise._a = promise._c.slice();
5839	  notify(promise, true);
5840	};
5841
5842	var $resolve = function $resolve(value) {
5843	  var promise = this;
5844	  var then;
5845	  if (promise._d) return;
5846	  promise._d = true;
5847	  promise = promise._w || promise; // unwrap
5848
5849	  try {
5850	    if (promise === value) throw TypeError$1("Promise can't be resolved itself");
5851
5852	    if (then = isThenable(value)) {
5853	      microtask(function () {
5854	        var wrapper = {
5855	          _w: promise,
5856	          _d: false
5857	        }; // wrap
5858
5859	        try {
5860	          then.call(value, _ctx($resolve, wrapper, 1), _ctx($reject, wrapper, 1));
5861	        } catch (e) {
5862	          $reject.call(wrapper, e);
5863	        }
5864	      });
5865	    } else {
5866	      promise._v = value;
5867	      promise._s = 1;
5868	      notify(promise, false);
5869	    }
5870	  } catch (e) {
5871	    $reject.call({
5872	      _w: promise,
5873	      _d: false
5874	    }, e); // wrap
5875	  }
5876	}; // constructor polyfill
5877
5878
5879	if (!USE_NATIVE$1) {
5880	  // 25.4.3.1 Promise(executor)
5881	  $Promise = function Promise(executor) {
5882	    _anInstance(this, $Promise, PROMISE, '_h');
5883	    _aFunction(executor);
5884	    Internal.call(this);
5885
5886	    try {
5887	      executor(_ctx($resolve, this, 1), _ctx($reject, this, 1));
5888	    } catch (err) {
5889	      $reject.call(this, err);
5890	    }
5891	  }; // eslint-disable-next-line no-unused-vars
5892
5893
5894	  Internal = function Promise(executor) {
5895	    this._c = []; // <- awaiting reactions
5896
5897	    this._a = undefined; // <- checked in isUnhandled reactions
5898
5899	    this._s = 0; // <- state
5900
5901	    this._d = false; // <- done
5902
5903	    this._v = undefined; // <- value
5904
5905	    this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
5906
5907	    this._n = false; // <- notify
5908	  };
5909
5910	  Internal.prototype = _redefineAll($Promise.prototype, {
5911	    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
5912	    then: function then(onFulfilled, onRejected) {
5913	      var reaction = newPromiseCapability(_speciesConstructor(this, $Promise));
5914	      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
5915	      reaction.fail = typeof onRejected == 'function' && onRejected;
5916	      reaction.domain = isNode$1 ? process$2.domain : undefined;
5917
5918	      this._c.push(reaction);
5919
5920	      if (this._a) this._a.push(reaction);
5921	      if (this._s) notify(this, false);
5922	      return reaction.promise;
5923	    },
5924	    // 25.4.5.1 Promise.prototype.catch(onRejected)
5925	    'catch': function _catch(onRejected) {
5926	      return this.then(undefined, onRejected);
5927	    }
5928	  });
5929
5930	  OwnPromiseCapability = function OwnPromiseCapability() {
5931	    var promise = new Internal();
5932	    this.promise = promise;
5933	    this.resolve = _ctx($resolve, promise, 1);
5934	    this.reject = _ctx($reject, promise, 1);
5935	  };
5936
5937	  _newPromiseCapability.f = newPromiseCapability = function newPromiseCapability(C) {
5938	    return C === $Promise || C === Wrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C);
5939	  };
5940	}
5941
5942	_export(_export.G + _export.W + _export.F * !USE_NATIVE$1, {
5943	  Promise: $Promise
5944	});
5945
5946	_setToStringTag($Promise, PROMISE);
5947
5948	_setSpecies(PROMISE);
5949
5950	Wrapper = _core[PROMISE]; // statics
5951
5952	_export(_export.S + _export.F * !USE_NATIVE$1, PROMISE, {
5953	  // 25.4.4.5 Promise.reject(r)
5954	  reject: function reject(r) {
5955	    var capability = newPromiseCapability(this);
5956	    var $$reject = capability.reject;
5957	    $$reject(r);
5958	    return capability.promise;
5959	  }
5960	});
5961	_export(_export.S + _export.F * (_library || !USE_NATIVE$1), PROMISE, {
5962	  // 25.4.4.6 Promise.resolve(x)
5963	  resolve: function resolve(x) {
5964	    return _promiseResolve(_library && this === Wrapper ? $Promise : this, x);
5965	  }
5966	});
5967	_export(_export.S + _export.F * !(USE_NATIVE$1 && _iterDetect(function (iter) {
5968	  $Promise.all(iter)['catch'](empty);
5969	})), PROMISE, {
5970	  // 25.4.4.1 Promise.all(iterable)
5971	  all: function all(iterable) {
5972	    var C = this;
5973	    var capability = newPromiseCapability(C);
5974	    var resolve = capability.resolve;
5975	    var reject = capability.reject;
5976	    var result = _perform(function () {
5977	      var values = [];
5978	      var index = 0;
5979	      var remaining = 1;
5980	      _forOf(iterable, false, function (promise) {
5981	        var $index = index++;
5982	        var alreadyCalled = false;
5983	        values.push(undefined);
5984	        remaining++;
5985	        C.resolve(promise).then(function (value) {
5986	          if (alreadyCalled) return;
5987	          alreadyCalled = true;
5988	          values[$index] = value;
5989	          --remaining || resolve(values);
5990	        }, reject);
5991	      });
5992	      --remaining || resolve(values);
5993	    });
5994	    if (result.e) reject(result.v);
5995	    return capability.promise;
5996	  },
5997	  // 25.4.4.4 Promise.race(iterable)
5998	  race: function race(iterable) {
5999	    var C = this;
6000	    var capability = newPromiseCapability(C);
6001	    var reject = capability.reject;
6002	    var result = _perform(function () {
6003	      _forOf(iterable, false, function (promise) {
6004	        C.resolve(promise).then(capability.resolve, reject);
6005	      });
6006	    });
6007	    if (result.e) reject(result.v);
6008	    return capability.promise;
6009	  }
6010	});
6011
6012	var _validateCollection = function (it, TYPE) {
6013	  if (!_isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
6014	  return it;
6015	};
6016
6017	var dP$5 = _objectDp.f;
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037	var fastKey = _meta.fastKey;
6038
6039
6040
6041	var SIZE = _descriptors ? '_s' : 'size';
6042
6043	var getEntry = function getEntry(that, key) {
6044	  // fast case
6045	  var index = fastKey(key);
6046	  var entry;
6047	  if (index !== 'F') return that._i[index]; // frozen object case
6048
6049	  for (entry = that._f; entry; entry = entry.n) {
6050	    if (entry.k == key) return entry;
6051	  }
6052	};
6053
6054	var _collectionStrong = {
6055	  getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) {
6056	    var C = wrapper(function (that, iterable) {
6057	      _anInstance(that, C, NAME, '_i');
6058	      that._t = NAME; // collection type
6059
6060	      that._i = _objectCreate(null); // index
6061
6062	      that._f = undefined; // first entry
6063
6064	      that._l = undefined; // last entry
6065
6066	      that[SIZE] = 0; // size
6067
6068	      if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
6069	    });
6070	    _redefineAll(C.prototype, {
6071	      // 23.1.3.1 Map.prototype.clear()
6072	      // 23.2.3.2 Set.prototype.clear()
6073	      clear: function clear() {
6074	        for (var that = _validateCollection(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
6075	          entry.r = true;
6076	          if (entry.p) entry.p = entry.p.n = undefined;
6077	          delete data[entry.i];
6078	        }
6079
6080	        that._f = that._l = undefined;
6081	        that[SIZE] = 0;
6082	      },
6083	      // 23.1.3.3 Map.prototype.delete(key)
6084	      // 23.2.3.4 Set.prototype.delete(value)
6085	      'delete': function _delete(key) {
6086	        var that = _validateCollection(this, NAME);
6087	        var entry = getEntry(that, key);
6088
6089	        if (entry) {
6090	          var next = entry.n;
6091	          var prev = entry.p;
6092	          delete that._i[entry.i];
6093	          entry.r = true;
6094	          if (prev) prev.n = next;
6095	          if (next) next.p = prev;
6096	          if (that._f == entry) that._f = next;
6097	          if (that._l == entry) that._l = prev;
6098	          that[SIZE]--;
6099	        }
6100
6101	        return !!entry;
6102	      },
6103	      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
6104	      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
6105	      forEach: function forEach(callbackfn
6106	      /* , that = undefined */
6107	      ) {
6108	        _validateCollection(this, NAME);
6109	        var f = _ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
6110	        var entry;
6111
6112	        while (entry = entry ? entry.n : this._f) {
6113	          f(entry.v, entry.k, this); // revert to the last existing entry
6114
6115	          while (entry && entry.r) {
6116	            entry = entry.p;
6117	          }
6118	        }
6119	      },
6120	      // 23.1.3.7 Map.prototype.has(key)
6121	      // 23.2.3.7 Set.prototype.has(value)
6122	      has: function has(key) {
6123	        return !!getEntry(_validateCollection(this, NAME), key);
6124	      }
6125	    });
6126	    if (_descriptors) dP$5(C.prototype, 'size', {
6127	      get: function get() {
6128	        return _validateCollection(this, NAME)[SIZE];
6129	      }
6130	    });
6131	    return C;
6132	  },
6133	  def: function def(that, key, value) {
6134	    var entry = getEntry(that, key);
6135	    var prev, index; // change existing entry
6136
6137	    if (entry) {
6138	      entry.v = value; // create new entry
6139	    } else {
6140	      that._l = entry = {
6141	        i: index = fastKey(key, true),
6142	        // <- index
6143	        k: key,
6144	        // <- key
6145	        v: value,
6146	        // <- value
6147	        p: prev = that._l,
6148	        // <- previous entry
6149	        n: undefined,
6150	        // <- next entry
6151	        r: false // <- removed
6152
6153	      };
6154	      if (!that._f) that._f = entry;
6155	      if (prev) prev.n = entry;
6156	      that[SIZE]++; // add to index
6157
6158	      if (index !== 'F') that._i[index] = entry;
6159	    }
6160
6161	    return that;
6162	  },
6163	  getEntry: getEntry,
6164	  setStrong: function setStrong(C, NAME, IS_MAP) {
6165	    // add .keys, .values, .entries, [@@iterator]
6166	    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
6167	    _iterDefine(C, NAME, function (iterated, kind) {
6168	      this._t = _validateCollection(iterated, NAME); // target
6169
6170	      this._k = kind; // kind
6171
6172	      this._l = undefined; // previous
6173	    }, function () {
6174	      var that = this;
6175	      var kind = that._k;
6176	      var entry = that._l; // revert to the last existing entry
6177
6178	      while (entry && entry.r) {
6179	        entry = entry.p;
6180	      } // get next entry
6181
6182
6183	      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {
6184	        // or finish the iteration
6185	        that._t = undefined;
6186	        return _iterStep(1);
6187	      } // return step by kind
6188
6189
6190	      if (kind == 'keys') return _iterStep(0, entry.k);
6191	      if (kind == 'values') return _iterStep(0, entry.v);
6192	      return _iterStep(0, [entry.k, entry.v]);
6193	    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); // add [@@species], 23.1.2.2, 23.2.2.2
6194
6195	    _setSpecies(NAME);
6196	  }
6197	};
6198
6199	var _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
6200	  var Base = _global[NAME];
6201	  var C = Base;
6202	  var ADDER = IS_MAP ? 'set' : 'add';
6203	  var proto = C && C.prototype;
6204	  var O = {};
6205
6206	  var fixMethod = function fixMethod(KEY) {
6207	    var fn = proto[KEY];
6208	    _redefine(proto, KEY, KEY == 'delete' ? function (a) {
6209	      return IS_WEAK && !_isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
6210	    } : KEY == 'has' ? function has(a) {
6211	      return IS_WEAK && !_isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
6212	    } : KEY == 'get' ? function get(a) {
6213	      return IS_WEAK && !_isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
6214	    } : KEY == 'add' ? function add(a) {
6215	      fn.call(this, a === 0 ? 0 : a);
6216	      return this;
6217	    } : function set(a, b) {
6218	      fn.call(this, a === 0 ? 0 : a, b);
6219	      return this;
6220	    });
6221	  };
6222
6223	  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !_fails(function () {
6224	    new C().entries().next();
6225	  }))) {
6226	    // create collection constructor
6227	    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
6228	    _redefineAll(C.prototype, methods);
6229	    _meta.NEED = true;
6230	  } else {
6231	    var instance = new C(); // early implementations not supports chaining
6232
6233	    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false
6234
6235	    var THROWS_ON_PRIMITIVES = _fails(function () {
6236	      instance.has(1);
6237	    }); // most early implementations doesn't supports iterables, most modern - not close it correctly
6238
6239	    var ACCEPT_ITERABLES = _iterDetect(function (iter) {
6240	      new C(iter);
6241	    }); // eslint-disable-line no-new
6242	    // for early implementations -0 and +0 not the same
6243
6244	    var BUGGY_ZERO = !IS_WEAK && _fails(function () {
6245	      // V8 ~ Chromium 42- fails only with 5+ elements
6246	      var $instance = new C();
6247	      var index = 5;
6248
6249	      while (index--) {
6250	        $instance[ADDER](index, index);
6251	      }
6252
6253	      return !$instance.has(-0);
6254	    });
6255
6256	    if (!ACCEPT_ITERABLES) {
6257	      C = wrapper(function (target, iterable) {
6258	        _anInstance(target, C, NAME);
6259	        var that = _inheritIfRequired(new Base(), target, C);
6260	        if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
6261	        return that;
6262	      });
6263	      C.prototype = proto;
6264	      proto.constructor = C;
6265	    }
6266
6267	    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
6268	      fixMethod('delete');
6269	      fixMethod('has');
6270	      IS_MAP && fixMethod('get');
6271	    }
6272
6273	    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); // weak collections should not contains .clear method
6274
6275	    if (IS_WEAK && proto.clear) delete proto.clear;
6276	  }
6277
6278	  _setToStringTag(C, NAME);
6279	  O[NAME] = C;
6280	  _export(_export.G + _export.W + _export.F * (C != Base), O);
6281	  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
6282	  return C;
6283	};
6284
6285	var MAP = 'Map'; // 23.1 Map Objects
6286
6287	var es6_map = _collection(MAP, function (get) {
6288	  return function Map() {
6289	    return get(this, arguments.length > 0 ? arguments[0] : undefined);
6290	  };
6291	}, {
6292	  // 23.1.3.6 Map.prototype.get(key)
6293	  get: function get(key) {
6294	    var entry = _collectionStrong.getEntry(_validateCollection(this, MAP), key);
6295	    return entry && entry.v;
6296	  },
6297	  // 23.1.3.9 Map.prototype.set(key, value)
6298	  set: function set(key, value) {
6299	    return _collectionStrong.def(_validateCollection(this, MAP), key === 0 ? 0 : key, value);
6300	  }
6301	}, _collectionStrong, true);
6302
6303	var SET = 'Set'; // 23.2 Set Objects
6304
6305	var es6_set = _collection(SET, function (get) {
6306	  return function Set() {
6307	    return get(this, arguments.length > 0 ? arguments[0] : undefined);
6308	  };
6309	}, {
6310	  // 23.2.3.1 Set.prototype.add(value)
6311	  add: function add(value) {
6312	    return _collectionStrong.def(_validateCollection(this, SET), value = value === 0 ? 0 : value, value);
6313	  }
6314	}, _collectionStrong);
6315
6316	var getWeak = _meta.getWeak;
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332	var arrayFind = _arrayMethods(5);
6333	var arrayFindIndex = _arrayMethods(6);
6334	var id$1 = 0; // fallback for uncaught frozen keys
6335
6336	var uncaughtFrozenStore = function uncaughtFrozenStore(that) {
6337	  return that._l || (that._l = new UncaughtFrozenStore());
6338	};
6339
6340	var UncaughtFrozenStore = function UncaughtFrozenStore() {
6341	  this.a = [];
6342	};
6343
6344	var findUncaughtFrozen = function findUncaughtFrozen(store, key) {
6345	  return arrayFind(store.a, function (it) {
6346	    return it[0] === key;
6347	  });
6348	};
6349
6350	UncaughtFrozenStore.prototype = {
6351	  get: function get(key) {
6352	    var entry = findUncaughtFrozen(this, key);
6353	    if (entry) return entry[1];
6354	  },
6355	  has: function has(key) {
6356	    return !!findUncaughtFrozen(this, key);
6357	  },
6358	  set: function set(key, value) {
6359	    var entry = findUncaughtFrozen(this, key);
6360	    if (entry) entry[1] = value;else this.a.push([key, value]);
6361	  },
6362	  'delete': function _delete(key) {
6363	    var index = arrayFindIndex(this.a, function (it) {
6364	      return it[0] === key;
6365	    });
6366	    if (~index) this.a.splice(index, 1);
6367	    return !!~index;
6368	  }
6369	};
6370	var _collectionWeak = {
6371	  getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) {
6372	    var C = wrapper(function (that, iterable) {
6373	      _anInstance(that, C, NAME, '_i');
6374	      that._t = NAME; // collection type
6375
6376	      that._i = id$1++; // collection id
6377
6378	      that._l = undefined; // leak store for uncaught frozen objects
6379
6380	      if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
6381	    });
6382	    _redefineAll(C.prototype, {
6383	      // 23.3.3.2 WeakMap.prototype.delete(key)
6384	      // 23.4.3.3 WeakSet.prototype.delete(value)
6385	      'delete': function _delete(key) {
6386	        if (!_isObject(key)) return false;
6387	        var data = getWeak(key);
6388	        if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME))['delete'](key);
6389	        return data && _has(data, this._i) && delete data[this._i];
6390	      },
6391	      // 23.3.3.4 WeakMap.prototype.has(key)
6392	      // 23.4.3.4 WeakSet.prototype.has(value)
6393	      has: function has(key) {
6394	        if (!_isObject(key)) return false;
6395	        var data = getWeak(key);
6396	        if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME)).has(key);
6397	        return data && _has(data, this._i);
6398	      }
6399	    });
6400	    return C;
6401	  },
6402	  def: function def(that, key, value) {
6403	    var data = getWeak(_anObject(key), true);
6404	    if (data === true) uncaughtFrozenStore(that).set(key, value);else data[that._i] = value;
6405	    return that;
6406	  },
6407	  ufstore: uncaughtFrozenStore
6408	};
6409
6410	var es6_weakMap = createCommonjsModule(function (module) {
6411
6412	var each = _arrayMethods(0);
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428	var WEAK_MAP = 'WeakMap';
6429	var getWeak = _meta.getWeak;
6430	var isExtensible = Object.isExtensible;
6431	var uncaughtFrozenStore = _collectionWeak.ufstore;
6432	var tmp = {};
6433	var InternalMap;
6434
6435	var wrapper = function wrapper(get) {
6436	  return function WeakMap() {
6437	    return get(this, arguments.length > 0 ? arguments[0] : undefined);
6438	  };
6439	};
6440
6441	var methods = {
6442	  // 23.3.3.3 WeakMap.prototype.get(key)
6443	  get: function get(key) {
6444	    if (_isObject(key)) {
6445	      var data = getWeak(key);
6446	      if (data === true) return uncaughtFrozenStore(_validateCollection(this, WEAK_MAP)).get(key);
6447	      return data ? data[this._i] : undefined;
6448	    }
6449	  },
6450	  // 23.3.3.5 WeakMap.prototype.set(key, value)
6451	  set: function set(key, value) {
6452	    return _collectionWeak.def(_validateCollection(this, WEAK_MAP), key, value);
6453	  }
6454	}; // 23.3 WeakMap Objects
6455
6456	var $WeakMap = module.exports = _collection(WEAK_MAP, wrapper, methods, _collectionWeak, true, true); // IE11 WeakMap frozen keys fix
6457
6458
6459	if (_fails(function () {
6460	  return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7;
6461	})) {
6462	  InternalMap = _collectionWeak.getConstructor(wrapper, WEAK_MAP);
6463	  _objectAssign(InternalMap.prototype, methods);
6464	  _meta.NEED = true;
6465	  each(['delete', 'has', 'get', 'set'], function (key) {
6466	    var proto = $WeakMap.prototype;
6467	    var method = proto[key];
6468	    _redefine(proto, key, function (a, b) {
6469	      // store frozen objects on internal weakmap shim
6470	      if (_isObject(a) && !isExtensible(a)) {
6471	        if (!this._f) this._f = new InternalMap();
6472
6473	        var result = this._f[key](a, b);
6474
6475	        return key == 'set' ? this : result; // store all the rest on native weakmap
6476	      }
6477
6478	      return method.call(this, a, b);
6479	    });
6480	  });
6481	}
6482	});
6483
6484	var WEAK_SET = 'WeakSet'; // 23.4 WeakSet Objects
6485
6486	_collection(WEAK_SET, function (get) {
6487	  return function WeakSet() {
6488	    return get(this, arguments.length > 0 ? arguments[0] : undefined);
6489	  };
6490	}, {
6491	  // 23.4.3.1 WeakSet.prototype.add(value)
6492	  add: function add(value) {
6493	    return _collectionWeak.def(_validateCollection(this, WEAK_SET), value, true);
6494	  }
6495	}, _collectionWeak, false, true);
6496
6497	var TYPED = _uid('typed_array');
6498	var VIEW = _uid('view');
6499	var ABV = !!(_global.ArrayBuffer && _global.DataView);
6500	var CONSTR = ABV;
6501	var i$1 = 0;
6502	var l = 9;
6503	var Typed;
6504	var TypedArrayConstructors = 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'.split(',');
6505
6506	while (i$1 < l) {
6507	  if (Typed = _global[TypedArrayConstructors[i$1++]]) {
6508	    _hide(Typed.prototype, TYPED, true);
6509	    _hide(Typed.prototype, VIEW, true);
6510	  } else CONSTR = false;
6511	}
6512
6513	var _typed = {
6514	  ABV: ABV,
6515	  CONSTR: CONSTR,
6516	  TYPED: TYPED,
6517	  VIEW: VIEW
6518	};
6519
6520	// https://tc39.github.io/ecma262/#sec-toindex
6521
6522
6523
6524
6525	var _toIndex = function (it) {
6526	  if (it === undefined) return 0;
6527	  var number = _toInteger(it);
6528	  var length = _toLength(number);
6529	  if (number !== length) throw RangeError('Wrong length!');
6530	  return length;
6531	};
6532
6533	var _typedBuffer = createCommonjsModule(function (module, exports) {
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557	var gOPN = _objectGopn.f;
6558
6559	var dP = _objectDp.f;
6560
6561
6562
6563
6564
6565	var ARRAY_BUFFER = 'ArrayBuffer';
6566	var DATA_VIEW = 'DataView';
6567	var PROTOTYPE = 'prototype';
6568	var WRONG_LENGTH = 'Wrong length!';
6569	var WRONG_INDEX = 'Wrong index!';
6570	var $ArrayBuffer = _global[ARRAY_BUFFER];
6571	var $DataView = _global[DATA_VIEW];
6572	var Math = _global.Math;
6573	var RangeError = _global.RangeError; // eslint-disable-next-line no-shadow-restricted-names
6574
6575	var Infinity = _global.Infinity;
6576	var BaseBuffer = $ArrayBuffer;
6577	var abs = Math.abs;
6578	var pow = Math.pow;
6579	var floor = Math.floor;
6580	var log = Math.log;
6581	var LN2 = Math.LN2;
6582	var BUFFER = 'buffer';
6583	var BYTE_LENGTH = 'byteLength';
6584	var BYTE_OFFSET = 'byteOffset';
6585	var $BUFFER = _descriptors ? '_b' : BUFFER;
6586	var $LENGTH = _descriptors ? '_l' : BYTE_LENGTH;
6587	var $OFFSET = _descriptors ? '_o' : BYTE_OFFSET; // IEEE754 conversions based on https://github.com/feross/ieee754
6588
6589	function packIEEE754(value, mLen, nBytes) {
6590	  var buffer = new Array(nBytes);
6591	  var eLen = nBytes * 8 - mLen - 1;
6592	  var eMax = (1 << eLen) - 1;
6593	  var eBias = eMax >> 1;
6594	  var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;
6595	  var i = 0;
6596	  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
6597	  var e, m, c;
6598	  value = abs(value); // eslint-disable-next-line no-self-compare
6599
6600	  if (value != value || value === Infinity) {
6601	    // eslint-disable-next-line no-self-compare
6602	    m = value != value ? 1 : 0;
6603	    e = eMax;
6604	  } else {
6605	    e = floor(log(value) / LN2);
6606
6607	    if (value * (c = pow(2, -e)) < 1) {
6608	      e--;
6609	      c *= 2;
6610	    }
6611
6612	    if (e + eBias >= 1) {
6613	      value += rt / c;
6614	    } else {
6615	      value += rt * pow(2, 1 - eBias);
6616	    }
6617
6618	    if (value * c >= 2) {
6619	      e++;
6620	      c /= 2;
6621	    }
6622
6623	    if (e + eBias >= eMax) {
6624	      m = 0;
6625	      e = eMax;
6626	    } else if (e + eBias >= 1) {
6627	      m = (value * c - 1) * pow(2, mLen);
6628	      e = e + eBias;
6629	    } else {
6630	      m = value * pow(2, eBias - 1) * pow(2, mLen);
6631	      e = 0;
6632	    }
6633	  }
6634
6635	  for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8) {
6636	  }
6637
6638	  e = e << mLen | m;
6639	  eLen += mLen;
6640
6641	  for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8) {
6642	  }
6643
6644	  buffer[--i] |= s * 128;
6645	  return buffer;
6646	}
6647
6648	function unpackIEEE754(buffer, mLen, nBytes) {
6649	  var eLen = nBytes * 8 - mLen - 1;
6650	  var eMax = (1 << eLen) - 1;
6651	  var eBias = eMax >> 1;
6652	  var nBits = eLen - 7;
6653	  var i = nBytes - 1;
6654	  var s = buffer[i--];
6655	  var e = s & 127;
6656	  var m;
6657	  s >>= 7;
6658
6659	  for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8) {
6660	  }
6661
6662	  m = e & (1 << -nBits) - 1;
6663	  e >>= -nBits;
6664	  nBits += mLen;
6665
6666	  for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8) {
6667	  }
6668
6669	  if (e === 0) {
6670	    e = 1 - eBias;
6671	  } else if (e === eMax) {
6672	    return m ? NaN : s ? -Infinity : Infinity;
6673	  } else {
6674	    m = m + pow(2, mLen);
6675	    e = e - eBias;
6676	  }
6677
6678	  return (s ? -1 : 1) * m * pow(2, e - mLen);
6679	}
6680
6681	function unpackI32(bytes) {
6682	  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
6683	}
6684
6685	function packI8(it) {
6686	  return [it & 0xff];
6687	}
6688
6689	function packI16(it) {
6690	  return [it & 0xff, it >> 8 & 0xff];
6691	}
6692
6693	function packI32(it) {
6694	  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];
6695	}
6696
6697	function packF64(it) {
6698	  return packIEEE754(it, 52, 8);
6699	}
6700
6701	function packF32(it) {
6702	  return packIEEE754(it, 23, 4);
6703	}
6704
6705	function addGetter(C, key, internal) {
6706	  dP(C[PROTOTYPE], key, {
6707	    get: function get() {
6708	      return this[internal];
6709	    }
6710	  });
6711	}
6712
6713	function get(view, bytes, index, isLittleEndian) {
6714	  var numIndex = +index;
6715	  var intIndex = _toIndex(numIndex);
6716	  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
6717	  var store = view[$BUFFER]._b;
6718	  var start = intIndex + view[$OFFSET];
6719	  var pack = store.slice(start, start + bytes);
6720	  return isLittleEndian ? pack : pack.reverse();
6721	}
6722
6723	function set(view, bytes, index, conversion, value, isLittleEndian) {
6724	  var numIndex = +index;
6725	  var intIndex = _toIndex(numIndex);
6726	  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
6727	  var store = view[$BUFFER]._b;
6728	  var start = intIndex + view[$OFFSET];
6729	  var pack = conversion(+value);
6730
6731	  for (var i = 0; i < bytes; i++) {
6732	    store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
6733	  }
6734	}
6735
6736	if (!_typed.ABV) {
6737	  $ArrayBuffer = function ArrayBuffer(length) {
6738	    _anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
6739	    var byteLength = _toIndex(length);
6740	    this._b = _arrayFill.call(new Array(byteLength), 0);
6741	    this[$LENGTH] = byteLength;
6742	  };
6743
6744	  $DataView = function DataView(buffer, byteOffset, byteLength) {
6745	    _anInstance(this, $DataView, DATA_VIEW);
6746	    _anInstance(buffer, $ArrayBuffer, DATA_VIEW);
6747	    var bufferLength = buffer[$LENGTH];
6748	    var offset = _toInteger(byteOffset);
6749	    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');
6750	    byteLength = byteLength === undefined ? bufferLength - offset : _toLength(byteLength);
6751	    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
6752	    this[$BUFFER] = buffer;
6753	    this[$OFFSET] = offset;
6754	    this[$LENGTH] = byteLength;
6755	  };
6756
6757	  if (_descriptors) {
6758	    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
6759	    addGetter($DataView, BUFFER, '_b');
6760	    addGetter($DataView, BYTE_LENGTH, '_l');
6761	    addGetter($DataView, BYTE_OFFSET, '_o');
6762	  }
6763
6764	  _redefineAll($DataView[PROTOTYPE], {
6765	    getInt8: function getInt8(byteOffset) {
6766	      return get(this, 1, byteOffset)[0] << 24 >> 24;
6767	    },
6768	    getUint8: function getUint8(byteOffset) {
6769	      return get(this, 1, byteOffset)[0];
6770	    },
6771	    getInt16: function getInt16(byteOffset
6772	    /* , littleEndian */
6773	    ) {
6774	      var bytes = get(this, 2, byteOffset, arguments[1]);
6775	      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
6776	    },
6777	    getUint16: function getUint16(byteOffset
6778	    /* , littleEndian */
6779	    ) {
6780	      var bytes = get(this, 2, byteOffset, arguments[1]);
6781	      return bytes[1] << 8 | bytes[0];
6782	    },
6783	    getInt32: function getInt32(byteOffset
6784	    /* , littleEndian */
6785	    ) {
6786	      return unpackI32(get(this, 4, byteOffset, arguments[1]));
6787	    },
6788	    getUint32: function getUint32(byteOffset
6789	    /* , littleEndian */
6790	    ) {
6791	      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;
6792	    },
6793	    getFloat32: function getFloat32(byteOffset
6794	    /* , littleEndian */
6795	    ) {
6796	      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);
6797	    },
6798	    getFloat64: function getFloat64(byteOffset
6799	    /* , littleEndian */
6800	    ) {
6801	      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);
6802	    },
6803	    setInt8: function setInt8(byteOffset, value) {
6804	      set(this, 1, byteOffset, packI8, value);
6805	    },
6806	    setUint8: function setUint8(byteOffset, value) {
6807	      set(this, 1, byteOffset, packI8, value);
6808	    },
6809	    setInt16: function setInt16(byteOffset, value
6810	    /* , littleEndian */
6811	    ) {
6812	      set(this, 2, byteOffset, packI16, value, arguments[2]);
6813	    },
6814	    setUint16: function setUint16(byteOffset, value
6815	    /* , littleEndian */
6816	    ) {
6817	      set(this, 2, byteOffset, packI16, value, arguments[2]);
6818	    },
6819	    setInt32: function setInt32(byteOffset, value
6820	    /* , littleEndian */
6821	    ) {
6822	      set(this, 4, byteOffset, packI32, value, arguments[2]);
6823	    },
6824	    setUint32: function setUint32(byteOffset, value
6825	    /* , littleEndian */
6826	    ) {
6827	      set(this, 4, byteOffset, packI32, value, arguments[2]);
6828	    },
6829	    setFloat32: function setFloat32(byteOffset, value
6830	    /* , littleEndian */
6831	    ) {
6832	      set(this, 4, byteOffset, packF32, value, arguments[2]);
6833	    },
6834	    setFloat64: function setFloat64(byteOffset, value
6835	    /* , littleEndian */
6836	    ) {
6837	      set(this, 8, byteOffset, packF64, value, arguments[2]);
6838	    }
6839	  });
6840	} else {
6841	  if (!_fails(function () {
6842	    $ArrayBuffer(1);
6843	  }) || !_fails(function () {
6844	    new $ArrayBuffer(-1); // eslint-disable-line no-new
6845	  }) || _fails(function () {
6846	    new $ArrayBuffer(); // eslint-disable-line no-new
6847
6848	    new $ArrayBuffer(1.5); // eslint-disable-line no-new
6849
6850	    new $ArrayBuffer(NaN); // eslint-disable-line no-new
6851
6852	    return $ArrayBuffer.name != ARRAY_BUFFER;
6853	  })) {
6854	    $ArrayBuffer = function ArrayBuffer(length) {
6855	      _anInstance(this, $ArrayBuffer);
6856	      return new BaseBuffer(_toIndex(length));
6857	    };
6858
6859	    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
6860
6861	    for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {
6862	      if (!((key = keys[j++]) in $ArrayBuffer)) _hide($ArrayBuffer, key, BaseBuffer[key]);
6863	    }
6864
6865	    ArrayBufferProto.constructor = $ArrayBuffer;
6866	  } // iOS Safari 7.x bug
6867
6868
6869	  var view = new $DataView(new $ArrayBuffer(2));
6870	  var $setInt8 = $DataView[PROTOTYPE].setInt8;
6871	  view.setInt8(0, 2147483648);
6872	  view.setInt8(1, 2147483649);
6873	  if (view.getInt8(0) || !view.getInt8(1)) _redefineAll($DataView[PROTOTYPE], {
6874	    setInt8: function setInt8(byteOffset, value) {
6875	      $setInt8.call(this, byteOffset, value << 24 >> 24);
6876	    },
6877	    setUint8: function setUint8(byteOffset, value) {
6878	      $setInt8.call(this, byteOffset, value << 24 >> 24);
6879	    }
6880	  }, true);
6881	}
6882
6883	_setToStringTag($ArrayBuffer, ARRAY_BUFFER);
6884	_setToStringTag($DataView, DATA_VIEW);
6885	_hide($DataView[PROTOTYPE], _typed.VIEW, true);
6886	exports[ARRAY_BUFFER] = $ArrayBuffer;
6887	exports[DATA_VIEW] = $DataView;
6888	});
6889
6890	var ArrayBuffer = _global.ArrayBuffer;
6891
6892
6893
6894	var $ArrayBuffer = _typedBuffer.ArrayBuffer;
6895	var $DataView = _typedBuffer.DataView;
6896	var $isView = _typed.ABV && ArrayBuffer.isView;
6897	var $slice = $ArrayBuffer.prototype.slice;
6898	var VIEW$1 = _typed.VIEW;
6899	var ARRAY_BUFFER = 'ArrayBuffer';
6900	_export(_export.G + _export.W + _export.F * (ArrayBuffer !== $ArrayBuffer), {
6901	  ArrayBuffer: $ArrayBuffer
6902	});
6903	_export(_export.S + _export.F * !_typed.CONSTR, ARRAY_BUFFER, {
6904	  // 24.1.3.1 ArrayBuffer.isView(arg)
6905	  isView: function isView(it) {
6906	    return $isView && $isView(it) || _isObject(it) && VIEW$1 in it;
6907	  }
6908	});
6909	_export(_export.P + _export.U + _export.F * _fails(function () {
6910	  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
6911	}), ARRAY_BUFFER, {
6912	  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
6913	  slice: function slice(start, end) {
6914	    if ($slice !== undefined && end === undefined) return $slice.call(_anObject(this), start); // FF fix
6915
6916	    var len = _anObject(this).byteLength;
6917	    var first = _toAbsoluteIndex(start, len);
6918	    var fin = _toAbsoluteIndex(end === undefined ? len : end, len);
6919	    var result = new (_speciesConstructor(this, $ArrayBuffer))(_toLength(fin - first));
6920	    var viewS = new $DataView(this);
6921	    var viewT = new $DataView(result);
6922	    var index = 0;
6923
6924	    while (first < fin) {
6925	      viewT.setUint8(index++, viewS.getUint8(first++));
6926	    }
6927
6928	    return result;
6929	  }
6930	});
6931
6932	_setSpecies(ARRAY_BUFFER);
6933
6934	_export(_export.G + _export.W + _export.F * !_typed.ABV, {
6935	  DataView: _typedBuffer.DataView
6936	});
6937
6938	var _typedArray = createCommonjsModule(function (module) {
6939
6940	if (_descriptors) {
6941
6942	  var global = _global;
6943
6944	  var fails = _fails;
6945
6946	  var $export = _export;
6947
6948	  var $typed = _typed;
6949
6950	  var $buffer = _typedBuffer;
6951
6952	  var ctx = _ctx;
6953
6954	  var anInstance = _anInstance;
6955
6956	  var propertyDesc = _propertyDesc;
6957
6958	  var hide = _hide;
6959
6960	  var redefineAll = _redefineAll;
6961
6962	  var toInteger = _toInteger;
6963
6964	  var toLength = _toLength;
6965
6966	  var toIndex = _toIndex;
6967
6968	  var toAbsoluteIndex = _toAbsoluteIndex;
6969
6970	  var toPrimitive = _toPrimitive;
6971
6972	  var has = _has;
6973
6974	  var classof = _classof;
6975
6976	  var isObject = _isObject;
6977
6978	  var toObject = _toObject;
6979
6980	  var isArrayIter = _isArrayIter;
6981
6982	  var create = _objectCreate;
6983
6984	  var getPrototypeOf = _objectGpo;
6985
6986	  var gOPN = _objectGopn.f;
6987
6988	  var getIterFn = core_getIteratorMethod;
6989
6990	  var uid = _uid;
6991
6992	  var wks = _wks;
6993
6994	  var createArrayMethod = _arrayMethods;
6995
6996	  var createArrayIncludes = _arrayIncludes;
6997
6998	  var speciesConstructor = _speciesConstructor;
6999
7000	  var ArrayIterators = es6_array_iterator;
7001
7002	  var Iterators = _iterators;
7003
7004	  var $iterDetect = _iterDetect;
7005
7006	  var setSpecies = _setSpecies;
7007
7008	  var arrayFill = _arrayFill;
7009
7010	  var arrayCopyWithin = _arrayCopyWithin;
7011
7012	  var $DP = _objectDp;
7013
7014	  var $GOPD = _objectGopd;
7015
7016	  var dP = $DP.f;
7017	  var gOPD = $GOPD.f;
7018	  var RangeError = global.RangeError;
7019	  var TypeError = global.TypeError;
7020	  var Uint8Array = global.Uint8Array;
7021	  var ARRAY_BUFFER = 'ArrayBuffer';
7022	  var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;
7023	  var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
7024	  var PROTOTYPE = 'prototype';
7025	  var ArrayProto = Array[PROTOTYPE];
7026	  var $ArrayBuffer = $buffer.ArrayBuffer;
7027	  var $DataView = $buffer.DataView;
7028	  var arrayForEach = createArrayMethod(0);
7029	  var arrayFilter = createArrayMethod(2);
7030	  var arraySome = createArrayMethod(3);
7031	  var arrayEvery = createArrayMethod(4);
7032	  var arrayFind = createArrayMethod(5);
7033	  var arrayFindIndex = createArrayMethod(6);
7034	  var arrayIncludes = createArrayIncludes(true);
7035	  var arrayIndexOf = createArrayIncludes(false);
7036	  var arrayValues = ArrayIterators.values;
7037	  var arrayKeys = ArrayIterators.keys;
7038	  var arrayEntries = ArrayIterators.entries;
7039	  var arrayLastIndexOf = ArrayProto.lastIndexOf;
7040	  var arrayReduce = ArrayProto.reduce;
7041	  var arrayReduceRight = ArrayProto.reduceRight;
7042	  var arrayJoin = ArrayProto.join;
7043	  var arraySort = ArrayProto.sort;
7044	  var arraySlice = ArrayProto.slice;
7045	  var arrayToString = ArrayProto.toString;
7046	  var arrayToLocaleString = ArrayProto.toLocaleString;
7047	  var ITERATOR = wks('iterator');
7048	  var TAG = wks('toStringTag');
7049	  var TYPED_CONSTRUCTOR = uid('typed_constructor');
7050	  var DEF_CONSTRUCTOR = uid('def_constructor');
7051	  var ALL_CONSTRUCTORS = $typed.CONSTR;
7052	  var TYPED_ARRAY = $typed.TYPED;
7053	  var VIEW = $typed.VIEW;
7054	  var WRONG_LENGTH = 'Wrong length!';
7055	  var $map = createArrayMethod(1, function (O, length) {
7056	    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
7057	  });
7058	  var LITTLE_ENDIAN = fails(function () {
7059	    // eslint-disable-next-line no-undef
7060	    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
7061	  });
7062	  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {
7063	    new Uint8Array(1).set({});
7064	  });
7065
7066	  var toOffset = function toOffset(it, BYTES) {
7067	    var offset = toInteger(it);
7068	    if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');
7069	    return offset;
7070	  };
7071
7072	  var validate = function validate(it) {
7073	    if (isObject(it) && TYPED_ARRAY in it) return it;
7074	    throw TypeError(it + ' is not a typed array!');
7075	  };
7076
7077	  var allocate = function allocate(C, length) {
7078	    if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {
7079	      throw TypeError('It is not a typed array constructor!');
7080	    }
7081
7082	    return new C(length);
7083	  };
7084
7085	  var speciesFromList = function speciesFromList(O, list) {
7086	    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
7087	  };
7088
7089	  var fromList = function fromList(C, list) {
7090	    var index = 0;
7091	    var length = list.length;
7092	    var result = allocate(C, length);
7093
7094	    while (length > index) {
7095	      result[index] = list[index++];
7096	    }
7097
7098	    return result;
7099	  };
7100
7101	  var addGetter = function addGetter(it, key, internal) {
7102	    dP(it, key, {
7103	      get: function get() {
7104	        return this._d[internal];
7105	      }
7106	    });
7107	  };
7108
7109	  var $from = function from(source
7110	  /* , mapfn, thisArg */
7111	  ) {
7112	    var O = toObject(source);
7113	    var aLen = arguments.length;
7114	    var mapfn = aLen > 1 ? arguments[1] : undefined;
7115	    var mapping = mapfn !== undefined;
7116	    var iterFn = getIterFn(O);
7117	    var i, length, values, result, step, iterator;
7118
7119	    if (iterFn != undefined && !isArrayIter(iterFn)) {
7120	      for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {
7121	        values.push(step.value);
7122	      }
7123
7124	      O = values;
7125	    }
7126
7127	    if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);
7128
7129	    for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {
7130	      result[i] = mapping ? mapfn(O[i], i) : O[i];
7131	    }
7132
7133	    return result;
7134	  };
7135
7136	  var $of = function of()
7137	  /* ...items */
7138	  {
7139	    var index = 0;
7140	    var length = arguments.length;
7141	    var result = allocate(this, length);
7142
7143	    while (length > index) {
7144	      result[index] = arguments[index++];
7145	    }
7146
7147	    return result;
7148	  }; // iOS Safari 6.x fails here
7149
7150
7151	  var TO_LOCALE_BUG = !!Uint8Array && fails(function () {
7152	    arrayToLocaleString.call(new Uint8Array(1));
7153	  });
7154
7155	  var $toLocaleString = function toLocaleString() {
7156	    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);
7157	  };
7158
7159	  var proto = {
7160	    copyWithin: function copyWithin(target, start
7161	    /* , end */
7162	    ) {
7163	      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
7164	    },
7165	    every: function every(callbackfn
7166	    /* , thisArg */
7167	    ) {
7168	      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
7169	    },
7170	    fill: function fill(value
7171	    /* , start, end */
7172	    ) {
7173	      // eslint-disable-line no-unused-vars
7174	      return arrayFill.apply(validate(this), arguments);
7175	    },
7176	    filter: function filter(callbackfn
7177	    /* , thisArg */
7178	    ) {
7179	      return speciesFromList(this, arrayFilter(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined));
7180	    },
7181	    find: function find(predicate
7182	    /* , thisArg */
7183	    ) {
7184	      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
7185	    },
7186	    findIndex: function findIndex(predicate
7187	    /* , thisArg */
7188	    ) {
7189	      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
7190	    },
7191	    forEach: function forEach(callbackfn
7192	    /* , thisArg */
7193	    ) {
7194	      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
7195	    },
7196	    indexOf: function indexOf(searchElement
7197	    /* , fromIndex */
7198	    ) {
7199	      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
7200	    },
7201	    includes: function includes(searchElement
7202	    /* , fromIndex */
7203	    ) {
7204	      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
7205	    },
7206	    join: function join(separator) {
7207	      // eslint-disable-line no-unused-vars
7208	      return arrayJoin.apply(validate(this), arguments);
7209	    },
7210	    lastIndexOf: function lastIndexOf(searchElement
7211	    /* , fromIndex */
7212	    ) {
7213	      // eslint-disable-line no-unused-vars
7214	      return arrayLastIndexOf.apply(validate(this), arguments);
7215	    },
7216	    map: function map(mapfn
7217	    /* , thisArg */
7218	    ) {
7219	      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);
7220	    },
7221	    reduce: function reduce(callbackfn
7222	    /* , initialValue */
7223	    ) {
7224	      // eslint-disable-line no-unused-vars
7225	      return arrayReduce.apply(validate(this), arguments);
7226	    },
7227	    reduceRight: function reduceRight(callbackfn
7228	    /* , initialValue */
7229	    ) {
7230	      // eslint-disable-line no-unused-vars
7231	      return arrayReduceRight.apply(validate(this), arguments);
7232	    },
7233	    reverse: function reverse() {
7234	      var that = this;
7235	      var length = validate(that).length;
7236	      var middle = Math.floor(length / 2);
7237	      var index = 0;
7238	      var value;
7239
7240	      while (index < middle) {
7241	        value = that[index];
7242	        that[index++] = that[--length];
7243	        that[length] = value;
7244	      }
7245
7246	      return that;
7247	    },
7248	    some: function some(callbackfn
7249	    /* , thisArg */
7250	    ) {
7251	      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
7252	    },
7253	    sort: function sort(comparefn) {
7254	      return arraySort.call(validate(this), comparefn);
7255	    },
7256	    subarray: function subarray(begin, end) {
7257	      var O = validate(this);
7258	      var length = O.length;
7259	      var $begin = toAbsoluteIndex(begin, length);
7260	      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(O.buffer, O.byteOffset + $begin * O.BYTES_PER_ELEMENT, toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin));
7261	    }
7262	  };
7263
7264	  var $slice = function slice(start, end) {
7265	    return speciesFromList(this, arraySlice.call(validate(this), start, end));
7266	  };
7267
7268	  var $set = function set(arrayLike
7269	  /* , offset */
7270	  ) {
7271	    validate(this);
7272	    var offset = toOffset(arguments[1], 1);
7273	    var length = this.length;
7274	    var src = toObject(arrayLike);
7275	    var len = toLength(src.length);
7276	    var index = 0;
7277	    if (len + offset > length) throw RangeError(WRONG_LENGTH);
7278
7279	    while (index < len) {
7280	      this[offset + index] = src[index++];
7281	    }
7282	  };
7283
7284	  var $iterators = {
7285	    entries: function entries() {
7286	      return arrayEntries.call(validate(this));
7287	    },
7288	    keys: function keys() {
7289	      return arrayKeys.call(validate(this));
7290	    },
7291	    values: function values() {
7292	      return arrayValues.call(validate(this));
7293	    }
7294	  };
7295
7296	  var isTAIndex = function isTAIndex(target, key) {
7297	    return isObject(target) && target[TYPED_ARRAY] && babelHelpers.typeof(key) != 'symbol' && key in target && String(+key) == String(key);
7298	  };
7299
7300	  var $getDesc = function getOwnPropertyDescriptor(target, key) {
7301	    return isTAIndex(target, key = toPrimitive(key, true)) ? propertyDesc(2, target[key]) : gOPD(target, key);
7302	  };
7303
7304	  var $setDesc = function defineProperty(target, key, desc) {
7305	    if (isTAIndex(target, key = toPrimitive(key, true)) && isObject(desc) && has(desc, 'value') && !has(desc, 'get') && !has(desc, 'set') // TODO: add validation descriptor w/o calling accessors
7306	    && !desc.configurable && (!has(desc, 'writable') || desc.writable) && (!has(desc, 'enumerable') || desc.enumerable)) {
7307	      target[key] = desc.value;
7308	      return target;
7309	    }
7310
7311	    return dP(target, key, desc);
7312	  };
7313
7314	  if (!ALL_CONSTRUCTORS) {
7315	    $GOPD.f = $getDesc;
7316	    $DP.f = $setDesc;
7317	  }
7318
7319	  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {
7320	    getOwnPropertyDescriptor: $getDesc,
7321	    defineProperty: $setDesc
7322	  });
7323
7324	  if (fails(function () {
7325	    arrayToString.call({});
7326	  })) {
7327	    arrayToString = arrayToLocaleString = function toString() {
7328	      return arrayJoin.call(this);
7329	    };
7330	  }
7331
7332	  var $TypedArrayPrototype$ = redefineAll({}, proto);
7333	  redefineAll($TypedArrayPrototype$, $iterators);
7334	  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
7335	  redefineAll($TypedArrayPrototype$, {
7336	    slice: $slice,
7337	    set: $set,
7338	    constructor: function constructor() {
7339	      /* noop */
7340	    },
7341	    toString: arrayToString,
7342	    toLocaleString: $toLocaleString
7343	  });
7344	  addGetter($TypedArrayPrototype$, 'buffer', 'b');
7345	  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');
7346	  addGetter($TypedArrayPrototype$, 'byteLength', 'l');
7347	  addGetter($TypedArrayPrototype$, 'length', 'e');
7348	  dP($TypedArrayPrototype$, TAG, {
7349	    get: function get() {
7350	      return this[TYPED_ARRAY];
7351	    }
7352	  }); // eslint-disable-next-line max-statements
7353
7354	  module.exports = function (KEY, BYTES, wrapper, CLAMPED) {
7355	    CLAMPED = !!CLAMPED;
7356	    var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';
7357	    var GETTER = 'get' + KEY;
7358	    var SETTER = 'set' + KEY;
7359	    var TypedArray = global[NAME];
7360	    var Base = TypedArray || {};
7361	    var TAC = TypedArray && getPrototypeOf(TypedArray);
7362	    var FORCED = !TypedArray || !$typed.ABV;
7363	    var O = {};
7364	    var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];
7365
7366	    var getter = function getter(that, index) {
7367	      var data = that._d;
7368	      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);
7369	    };
7370
7371	    var setter = function setter(that, index, value) {
7372	      var data = that._d;
7373	      if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;
7374	      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);
7375	    };
7376
7377	    var addElement = function addElement(that, index) {
7378	      dP(that, index, {
7379	        get: function get() {
7380	          return getter(this, index);
7381	        },
7382	        set: function set(value) {
7383	          return setter(this, index, value);
7384	        },
7385	        enumerable: true
7386	      });
7387	    };
7388
7389	    if (FORCED) {
7390	      TypedArray = wrapper(function (that, data, $offset, $length) {
7391	        anInstance(that, TypedArray, NAME, '_d');
7392	        var index = 0;
7393	        var offset = 0;
7394	        var buffer, byteLength, length, klass;
7395
7396	        if (!isObject(data)) {
7397	          length = toIndex(data);
7398	          byteLength = length * BYTES;
7399	          buffer = new $ArrayBuffer(byteLength);
7400	        } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
7401	          buffer = data;
7402	          offset = toOffset($offset, BYTES);
7403	          var $len = data.byteLength;
7404
7405	          if ($length === undefined) {
7406	            if ($len % BYTES) throw RangeError(WRONG_LENGTH);
7407	            byteLength = $len - offset;
7408	            if (byteLength < 0) throw RangeError(WRONG_LENGTH);
7409	          } else {
7410	            byteLength = toLength($length) * BYTES;
7411	            if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);
7412	          }
7413
7414	          length = byteLength / BYTES;
7415	        } else if (TYPED_ARRAY in data) {
7416	          return fromList(TypedArray, data);
7417	        } else {
7418	          return $from.call(TypedArray, data);
7419	        }
7420
7421	        hide(that, '_d', {
7422	          b: buffer,
7423	          o: offset,
7424	          l: byteLength,
7425	          e: length,
7426	          v: new $DataView(buffer)
7427	        });
7428
7429	        while (index < length) {
7430	          addElement(that, index++);
7431	        }
7432	      });
7433	      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
7434	      hide(TypedArrayPrototype, 'constructor', TypedArray);
7435	    } else if (!fails(function () {
7436	      TypedArray(1);
7437	    }) || !fails(function () {
7438	      new TypedArray(-1); // eslint-disable-line no-new
7439	    }) || !$iterDetect(function (iter) {
7440	      new TypedArray(); // eslint-disable-line no-new
7441
7442	      new TypedArray(null); // eslint-disable-line no-new
7443
7444	      new TypedArray(1.5); // eslint-disable-line no-new
7445
7446	      new TypedArray(iter); // eslint-disable-line no-new
7447	    }, true)) {
7448	      TypedArray = wrapper(function (that, data, $offset, $length) {
7449	        anInstance(that, TypedArray, NAME);
7450	        var klass; // `ws` module bug, temporarily remove validation length for Uint8Array
7451	        // https://github.com/websockets/ws/pull/645
7452
7453	        if (!isObject(data)) return new Base(toIndex(data));
7454
7455	        if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
7456	          return $length !== undefined ? new Base(data, toOffset($offset, BYTES), $length) : $offset !== undefined ? new Base(data, toOffset($offset, BYTES)) : new Base(data);
7457	        }
7458
7459	        if (TYPED_ARRAY in data) return fromList(TypedArray, data);
7460	        return $from.call(TypedArray, data);
7461	      });
7462	      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {
7463	        if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);
7464	      });
7465	      TypedArray[PROTOTYPE] = TypedArrayPrototype;
7466	      TypedArrayPrototype.constructor = TypedArray;
7467	    }
7468
7469	    var $nativeIterator = TypedArrayPrototype[ITERATOR];
7470	    var CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);
7471	    var $iterator = $iterators.values;
7472	    hide(TypedArray, TYPED_CONSTRUCTOR, true);
7473	    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
7474	    hide(TypedArrayPrototype, VIEW, true);
7475	    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
7476
7477	    if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {
7478	      dP(TypedArrayPrototype, TAG, {
7479	        get: function get() {
7480	          return NAME;
7481	        }
7482	      });
7483	    }
7484
7485	    O[NAME] = TypedArray;
7486	    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);
7487	    $export($export.S, NAME, {
7488	      BYTES_PER_ELEMENT: BYTES
7489	    });
7490	    $export($export.S + $export.F * fails(function () {
7491	      Base.of.call(TypedArray, 1);
7492	    }), NAME, {
7493	      from: $from,
7494	      of: $of
7495	    });
7496	    if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
7497	    $export($export.P, NAME, proto);
7498	    setSpecies(NAME);
7499	    $export($export.P + $export.F * FORCED_SET, NAME, {
7500	      set: $set
7501	    });
7502	    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
7503	    if (TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
7504	    $export($export.P + $export.F * fails(function () {
7505	      new TypedArray(1).slice();
7506	    }), NAME, {
7507	      slice: $slice
7508	    });
7509	    $export($export.P + $export.F * (fails(function () {
7510	      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();
7511	    }) || !fails(function () {
7512	      TypedArrayPrototype.toLocaleString.call([1, 2]);
7513	    })), NAME, {
7514	      toLocaleString: $toLocaleString
7515	    });
7516	    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
7517	    if (!CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);
7518	  };
7519	} else module.exports = function () {
7520	  /* empty */
7521	};
7522	});
7523
7524	_typedArray('Int8', 1, function (init) {
7525	  return function Int8Array(data, byteOffset, length) {
7526	    return init(this, data, byteOffset, length);
7527	  };
7528	});
7529
7530	_typedArray('Uint8', 1, function (init) {
7531	  return function Uint8Array(data, byteOffset, length) {
7532	    return init(this, data, byteOffset, length);
7533	  };
7534	});
7535
7536	_typedArray('Uint8', 1, function (init) {
7537	  return function Uint8ClampedArray(data, byteOffset, length) {
7538	    return init(this, data, byteOffset, length);
7539	  };
7540	}, true);
7541
7542	_typedArray('Int16', 2, function (init) {
7543	  return function Int16Array(data, byteOffset, length) {
7544	    return init(this, data, byteOffset, length);
7545	  };
7546	});
7547
7548	_typedArray('Uint16', 2, function (init) {
7549	  return function Uint16Array(data, byteOffset, length) {
7550	    return init(this, data, byteOffset, length);
7551	  };
7552	});
7553
7554	_typedArray('Int32', 4, function (init) {
7555	  return function Int32Array(data, byteOffset, length) {
7556	    return init(this, data, byteOffset, length);
7557	  };
7558	});
7559
7560	_typedArray('Uint32', 4, function (init) {
7561	  return function Uint32Array(data, byteOffset, length) {
7562	    return init(this, data, byteOffset, length);
7563	  };
7564	});
7565
7566	_typedArray('Float32', 4, function (init) {
7567	  return function Float32Array(data, byteOffset, length) {
7568	    return init(this, data, byteOffset, length);
7569	  };
7570	});
7571
7572	_typedArray('Float64', 8, function (init) {
7573	  return function Float64Array(data, byteOffset, length) {
7574	    return init(this, data, byteOffset, length);
7575	  };
7576	});
7577
7578	// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
7579
7580
7581
7582
7583
7584
7585	var rApply = (_global.Reflect || {}).apply;
7586	var fApply = Function.apply; // MS Edge argumentsList argument is optional
7587
7588	_export(_export.S + _export.F * !_fails(function () {
7589	  rApply(function () {
7590	    /* empty */
7591	  });
7592	}), 'Reflect', {
7593	  apply: function apply(target, thisArgument, argumentsList) {
7594	    var T = _aFunction(target);
7595	    var L = _anObject(argumentsList);
7596	    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);
7597	  }
7598	});
7599
7600	// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615	var rConstruct = (_global.Reflect || {}).construct; // MS Edge supports only 2 arguments and argumentsList argument is optional
7616	// FF Nightly sets third argument as `new.target`, but does not create `this` from it
7617
7618	var NEW_TARGET_BUG = _fails(function () {
7619	  function F() {
7620	    /* empty */
7621	  }
7622
7623	  return !(rConstruct(function () {
7624	    /* empty */
7625	  }, [], F) instanceof F);
7626	});
7627	var ARGS_BUG = !_fails(function () {
7628	  rConstruct(function () {
7629	    /* empty */
7630	  });
7631	});
7632	_export(_export.S + _export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
7633	  construct: function construct(Target, args
7634	  /* , newTarget */
7635	  ) {
7636	    _aFunction(Target);
7637	    _anObject(args);
7638	    var newTarget = arguments.length < 3 ? Target : _aFunction(arguments[2]);
7639	    if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);
7640
7641	    if (Target == newTarget) {
7642	      // w/o altered newTarget, optimization for 0-4 arguments
7643	      switch (args.length) {
7644	        case 0:
7645	          return new Target();
7646
7647	        case 1:
7648	          return new Target(args[0]);
7649
7650	        case 2:
7651	          return new Target(args[0], args[1]);
7652
7653	        case 3:
7654	          return new Target(args[0], args[1], args[2]);
7655
7656	        case 4:
7657	          return new Target(args[0], args[1], args[2], args[3]);
7658	      } // w/o altered newTarget, lot of arguments case
7659
7660
7661	      var $args = [null];
7662	      $args.push.apply($args, args);
7663	      return new (_bind.apply(Target, $args))();
7664	    } // with altered newTarget, not support built-in constructors
7665
7666
7667	    var proto = newTarget.prototype;
7668	    var instance = _objectCreate(_isObject(proto) ? proto : Object.prototype);
7669	    var result = Function.apply.call(Target, instance, args);
7670	    return _isObject(result) ? result : instance;
7671	  }
7672	});
7673
7674	// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)
7675
7676
7677
7678
7679
7680
7681	 // MS Edge has broken Reflect.defineProperty - throwing instead of returning false
7682
7683
7684	_export(_export.S + _export.F * _fails(function () {
7685	  // eslint-disable-next-line no-undef
7686	  Reflect.defineProperty(_objectDp.f({}, 1, {
7687	    value: 1
7688	  }), 1, {
7689	    value: 2
7690	  });
7691	}), 'Reflect', {
7692	  defineProperty: function defineProperty(target, propertyKey, attributes) {
7693	    _anObject(target);
7694	    propertyKey = _toPrimitive(propertyKey, true);
7695	    _anObject(attributes);
7696
7697	    try {
7698	      _objectDp.f(target, propertyKey, attributes);
7699	      return true;
7700	    } catch (e) {
7701	      return false;
7702	    }
7703	  }
7704	});
7705
7706	// 26.1.4 Reflect.deleteProperty(target, propertyKey)
7707
7708
7709	var gOPD$3 = _objectGopd.f;
7710
7711
7712
7713	_export(_export.S, 'Reflect', {
7714	  deleteProperty: function deleteProperty(target, propertyKey) {
7715	    var desc = gOPD$3(_anObject(target), propertyKey);
7716	    return desc && !desc.configurable ? false : delete target[propertyKey];
7717	  }
7718	});
7719
7720	var Enumerate = function Enumerate(iterated) {
7721	  this._t = _anObject(iterated); // target
7722
7723	  this._i = 0; // next index
7724
7725	  var keys = this._k = []; // keys
7726
7727	  var key;
7728
7729	  for (key in iterated) {
7730	    keys.push(key);
7731	  }
7732	};
7733
7734	_iterCreate(Enumerate, 'Object', function () {
7735	  var that = this;
7736	  var keys = that._k;
7737	  var key;
7738
7739	  do {
7740	    if (that._i >= keys.length) return {
7741	      value: undefined,
7742	      done: true
7743	    };
7744	  } while (!((key = keys[that._i++]) in that._t));
7745
7746	  return {
7747	    value: key,
7748	    done: false
7749	  };
7750	});
7751
7752	_export(_export.S, 'Reflect', {
7753	  enumerate: function enumerate(target) {
7754	    return new Enumerate(target);
7755	  }
7756	});
7757
7758	// 26.1.6 Reflect.get(target, propertyKey [, receiver])
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771	function get(target, propertyKey
7772	/* , receiver */
7773	) {
7774	  var receiver = arguments.length < 3 ? target : arguments[2];
7775	  var desc, proto;
7776	  if (_anObject(target) === receiver) return target[propertyKey];
7777	  if (desc = _objectGopd.f(target, propertyKey)) return _has(desc, 'value') ? desc.value : desc.get !== undefined ? desc.get.call(receiver) : undefined;
7778	  if (_isObject(proto = _objectGpo(target))) return get(proto, propertyKey, receiver);
7779	}
7780
7781	_export(_export.S, 'Reflect', {
7782	  get: get
7783	});
7784
7785	// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
7786
7787
7788
7789
7790
7791
7792	_export(_export.S, 'Reflect', {
7793	  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {
7794	    return _objectGopd.f(_anObject(target), propertyKey);
7795	  }
7796	});
7797
7798	// 26.1.8 Reflect.getPrototypeOf(target)
7799
7800
7801
7802
7803
7804
7805	_export(_export.S, 'Reflect', {
7806	  getPrototypeOf: function getPrototypeOf(target) {
7807	    return _objectGpo(_anObject(target));
7808	  }
7809	});
7810
7811	// 26.1.9 Reflect.has(target, propertyKey)
7812
7813
7814	_export(_export.S, 'Reflect', {
7815	  has: function has(target, propertyKey) {
7816	    return propertyKey in target;
7817	  }
7818	});
7819
7820	// 26.1.10 Reflect.isExtensible(target)
7821
7822
7823
7824
7825	var $isExtensible = Object.isExtensible;
7826	_export(_export.S, 'Reflect', {
7827	  isExtensible: function isExtensible(target) {
7828	    _anObject(target);
7829	    return $isExtensible ? $isExtensible(target) : true;
7830	  }
7831	});
7832
7833	// all object keys, includes non-enumerable and symbols
7834
7835
7836
7837
7838
7839
7840	var Reflect$1 = _global.Reflect;
7841
7842	var _ownKeys = Reflect$1 && Reflect$1.ownKeys || function ownKeys(it) {
7843	  var keys = _objectGopn.f(_anObject(it));
7844	  var getSymbols = _objectGops.f;
7845	  return getSymbols ? keys.concat(getSymbols(it)) : keys;
7846	};
7847
7848	// 26.1.11 Reflect.ownKeys(target)
7849
7850
7851	_export(_export.S, 'Reflect', {
7852	  ownKeys: _ownKeys
7853	});
7854
7855	// 26.1.12 Reflect.preventExtensions(target)
7856
7857
7858
7859
7860	var $preventExtensions = Object.preventExtensions;
7861	_export(_export.S, 'Reflect', {
7862	  preventExtensions: function preventExtensions(target) {
7863	    _anObject(target);
7864
7865	    try {
7866	      if ($preventExtensions) $preventExtensions(target);
7867	      return true;
7868	    } catch (e) {
7869	      return false;
vendor: 17,344 bytes, lines 7870-8568
7870	    }
7871	  }
7872	});
7873
7874	// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891	function set(target, propertyKey, V
7892	/* , receiver */
7893	) {
7894	  var receiver = arguments.length < 4 ? target : arguments[3];
7895	  var ownDesc = _objectGopd.f(_anObject(target), propertyKey);
7896	  var existingDescriptor, proto;
7897
7898	  if (!ownDesc) {
7899	    if (_isObject(proto = _objectGpo(target))) {
7900	      return set(proto, propertyKey, V, receiver);
7901	    }
7902
7903	    ownDesc = _propertyDesc(0);
7904	  }
7905
7906	  if (_has(ownDesc, 'value')) {
7907	    if (ownDesc.writable === false || !_isObject(receiver)) return false;
7908
7909	    if (existingDescriptor = _objectGopd.f(receiver, propertyKey)) {
7910	      if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;
7911	      existingDescriptor.value = V;
7912	      _objectDp.f(receiver, propertyKey, existingDescriptor);
7913	    } else _objectDp.f(receiver, propertyKey, _propertyDesc(0, V));
7914
7915	    return true;
7916	  }
7917
7918	  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
7919	}
7920
7921	_export(_export.S, 'Reflect', {
7922	  set: set
7923	});
7924
7925	// 26.1.14 Reflect.setPrototypeOf(target, proto)
7926
7927
7928
7929
7930	if (_setProto) _export(_export.S, 'Reflect', {
7931	  setPrototypeOf: function setPrototypeOf(target, proto) {
7932	    _setProto.check(target, proto);
7933
7934	    try {
7935	      _setProto.set(target, proto);
7936	      return true;
7937	    } catch (e) {
7938	      return false;
7939	    }
7940	  }
7941	});
7942
7943	var $includes = _arrayIncludes(true);
7944
7945	_export(_export.P, 'Array', {
7946	  includes: function includes(el
7947	  /* , fromIndex = 0 */
7948	  ) {
7949	    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
7950	  }
7951	});
7952
7953	_addToUnscopables('includes');
7954
7955	var IS_CONCAT_SPREADABLE = _wks('isConcatSpreadable');
7956
7957	function flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {
7958	  var targetIndex = start;
7959	  var sourceIndex = 0;
7960	  var mapFn = mapper ? _ctx(mapper, thisArg, 3) : false;
7961	  var element, spreadable;
7962
7963	  while (sourceIndex < sourceLen) {
7964	    if (sourceIndex in source) {
7965	      element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];
7966	      spreadable = false;
7967
7968	      if (_isObject(element)) {
7969	        spreadable = element[IS_CONCAT_SPREADABLE];
7970	        spreadable = spreadable !== undefined ? !!spreadable : _isArray(element);
7971	      }
7972
7973	      if (spreadable && depth > 0) {
7974	        targetIndex = flattenIntoArray(target, original, element, _toLength(element.length), targetIndex, depth - 1) - 1;
7975	      } else {
7976	        if (targetIndex >= 0x1fffffffffffff) throw TypeError();
7977	        target[targetIndex] = element;
7978	      }
7979
7980	      targetIndex++;
7981	    }
7982
7983	    sourceIndex++;
7984	  }
7985
7986	  return targetIndex;
7987	}
7988
7989	var _flattenIntoArray = flattenIntoArray;
7990
7991	_export(_export.P, 'Array', {
7992	  flatMap: function flatMap(callbackfn
7993	  /* , thisArg */
7994	  ) {
7995	    var O = _toObject(this);
7996	    var sourceLen, A;
7997	    _aFunction(callbackfn);
7998	    sourceLen = _toLength(O.length);
7999	    A = _arraySpeciesCreate(O, 0);
8000	    _flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);
8001	    return A;
8002	  }
8003	});
8004
8005	_addToUnscopables('flatMap');
8006
8007	_export(_export.P, 'Array', {
8008	  flatten: function flatten()
8009	  /* depthArg = 1 */
8010	  {
8011	    var depthArg = arguments[0];
8012	    var O = _toObject(this);
8013	    var sourceLen = _toLength(O.length);
8014	    var A = _arraySpeciesCreate(O, 0);
8015	    _flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : _toInteger(depthArg));
8016	    return A;
8017	  }
8018	});
8019
8020	_addToUnscopables('flatten');
8021
8022	var $at$2 = _stringAt(true);
8023
8024	_export(_export.P, 'String', {
8025	  at: function at(pos) {
8026	    return $at$2(this, pos);
8027	  }
8028	});
8029
8030	// https://github.com/tc39/proposal-string-pad-start-end
8031
8032
8033
8034
8035
8036
8037	var _stringPad = function (that, maxLength, fillString, left) {
8038	  var S = String(_defined(that));
8039	  var stringLength = S.length;
8040	  var fillStr = fillString === undefined ? ' ' : String(fillString);
8041	  var intMaxLength = _toLength(maxLength);
8042	  if (intMaxLength <= stringLength || fillStr == '') return S;
8043	  var fillLen = intMaxLength - stringLength;
8044	  var stringFiller = _stringRepeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
8045	  if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
8046	  return left ? stringFiller + S : S + stringFiller;
8047	};
8048
8049	// https://github.com/zloirock/core-js/issues/280
8050
8051
8052	_export(_export.P + _export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(_userAgent), 'String', {
8053	  padStart: function padStart(maxLength
8054	  /* , fillString = ' ' */
8055	  ) {
8056	    return _stringPad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
8057	  }
8058	});
8059
8060	// https://github.com/zloirock/core-js/issues/280
8061
8062
8063	_export(_export.P + _export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(_userAgent), 'String', {
8064	  padEnd: function padEnd(maxLength
8065	  /* , fillString = ' ' */
8066	  ) {
8067	    return _stringPad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
8068	  }
8069	});
8070
8071	_stringTrim('trimLeft', function ($trim) {
8072	  return function trimLeft() {
8073	    return $trim(this, 1);
8074	  };
8075	}, 'trimStart');
8076
8077	_stringTrim('trimRight', function ($trim) {
8078	  return function trimRight() {
8079	    return $trim(this, 2);
8080	  };
8081	}, 'trimEnd');
8082
8083	var RegExpProto = RegExp.prototype;
8084
8085	var $RegExpStringIterator = function $RegExpStringIterator(regexp, string) {
8086	  this._r = regexp;
8087	  this._s = string;
8088	};
8089
8090	_iterCreate($RegExpStringIterator, 'RegExp String', function next() {
8091	  var match = this._r.exec(this._s);
8092
8093	  return {
8094	    value: match,
8095	    done: match === null
8096	  };
8097	});
8098
8099	_export(_export.P, 'String', {
8100	  matchAll: function matchAll(regexp) {
8101	    _defined(this);
8102	    if (!_isRegexp(regexp)) throw TypeError(regexp + ' is not a regexp!');
8103	    var S = String(this);
8104	    var flags = 'flags' in RegExpProto ? String(regexp.flags) : _flags.call(regexp);
8105	    var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);
8106	    rx.lastIndex = _toLength(regexp.lastIndex);
8107	    return new $RegExpStringIterator(rx, S);
8108	  }
8109	});
8110
8111	_wksDefine('asyncIterator');
8112
8113	_wksDefine('observable');
8114
8115	// https://github.com/tc39/proposal-object-getownpropertydescriptors
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126	_export(_export.S, 'Object', {
8127	  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
8128	    var O = _toIobject(object);
8129	    var getDesc = _objectGopd.f;
8130	    var keys = _ownKeys(O);
8131	    var result = {};
8132	    var i = 0;
8133	    var key, desc;
8134
8135	    while (keys.length > i) {
8136	      desc = getDesc(O, key = keys[i++]);
8137	      if (desc !== undefined) _createProperty(result, key, desc);
8138	    }
8139
8140	    return result;
8141	  }
8142	});
8143
8144	var isEnum$1 = _objectPie.f;
8145
8146	var _objectToArray = function (isEntries) {
8147	  return function (it) {
8148	    var O = _toIobject(it);
8149	    var keys = _objectKeys(O);
8150	    var length = keys.length;
8151	    var i = 0;
8152	    var result = [];
8153	    var key;
8154
8155	    while (length > i) {
8156	      if (isEnum$1.call(O, key = keys[i++])) {
8157	        result.push(isEntries ? [key, O[key]] : O[key]);
8158	      }
8159	    }
8160
8161	    return result;
8162	  };
8163	};
8164
8165	// https://github.com/tc39/proposal-object-values-entries
8166
8167
8168	var $values = _objectToArray(false);
8169
8170	_export(_export.S, 'Object', {
8171	  values: function values(it) {
8172	    return $values(it);
8173	  }
8174	});
8175
8176	// https://github.com/tc39/proposal-object-values-entries
8177
8178
8179	var $entries = _objectToArray(true);
8180
8181	_export(_export.S, 'Object', {
8182	  entries: function entries(it) {
8183	    return $entries(it);
8184	  }
8185	});
8186
8187	var _objectForcedPam = !_fails(function () {
8188	  var K = Math.random(); // In FF throws only define methods
8189	  // eslint-disable-next-line no-undef, no-useless-call
8190
8191	  __defineSetter__.call(null, K, function () {
8192	    /* empty */
8193	  });
8194
8195	  delete _global[K];
8196	});
8197
8198	// B.2.2.2 Object.prototype.__defineGetter__(P, getter)
8199
8200
8201	_descriptors && _export(_export.P + _objectForcedPam, 'Object', {
8202	  __defineGetter__: function __defineGetter__(P, getter) {
8203	    _objectDp.f(_toObject(this), P, {
8204	      get: _aFunction(getter),
8205	      enumerable: true,
8206	      configurable: true
8207	    });
8208	  }
8209	});
8210
8211	// B.2.2.3 Object.prototype.__defineSetter__(P, setter)
8212
8213
8214	_descriptors && _export(_export.P + _objectForcedPam, 'Object', {
8215	  __defineSetter__: function __defineSetter__(P, setter) {
8216	    _objectDp.f(_toObject(this), P, {
8217	      set: _aFunction(setter),
8218	      enumerable: true,
8219	      configurable: true
8220	    });
8221	  }
8222	});
8223
8224	var getOwnPropertyDescriptor = _objectGopd.f; // B.2.2.4 Object.prototype.__lookupGetter__(P)
8225
8226
8227	_descriptors && _export(_export.P + _objectForcedPam, 'Object', {
8228	  __lookupGetter__: function __lookupGetter__(P) {
8229	    var O = _toObject(this);
8230	    var K = _toPrimitive(P, true);
8231	    var D;
8232
8233	    do {
8234	      if (D = getOwnPropertyDescriptor(O, K)) return D.get;
8235	    } while (O = _objectGpo(O));
8236	  }
8237	});
8238
8239	var getOwnPropertyDescriptor$1 = _objectGopd.f; // B.2.2.5 Object.prototype.__lookupSetter__(P)
8240
8241
8242	_descriptors && _export(_export.P + _objectForcedPam, 'Object', {
8243	  __lookupSetter__: function __lookupSetter__(P) {
8244	    var O = _toObject(this);
8245	    var K = _toPrimitive(P, true);
8246	    var D;
8247
8248	    do {
8249	      if (D = getOwnPropertyDescriptor$1(O, K)) return D.set;
8250	    } while (O = _objectGpo(O));
8251	  }
8252	});
8253
8254	var _arrayFromIterable = function (iter, ITERATOR) {
8255	  var result = [];
8256	  _forOf(iter, false, result.push, result, ITERATOR);
8257	  return result;
8258	};
8259
8260	// https://github.com/DavidBruant/Map-Set.prototype.toJSON
8261
8262
8263
8264
8265	var _collectionToJson = function (NAME) {
8266	  return function toJSON() {
8267	    if (_classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic");
8268	    return _arrayFromIterable(this);
8269	  };
8270	};
8271
8272	// https://github.com/DavidBruant/Map-Set.prototype.toJSON
8273
8274
8275	_export(_export.P + _export.R, 'Map', {
8276	  toJSON: _collectionToJson('Map')
8277	});
8278
8279	// https://github.com/DavidBruant/Map-Set.prototype.toJSON
8280
8281
8282	_export(_export.P + _export.R, 'Set', {
8283	  toJSON: _collectionToJson('Set')
8284	});
8285
8286	var _setCollectionOf = function (COLLECTION) {
8287	  _export(_export.S, COLLECTION, {
8288	    of: function of() {
8289	      var length = arguments.length;
8290	      var A = new Array(length);
8291
8292	      while (length--) {
8293	        A[length] = arguments[length];
8294	      }
8295
8296	      return new this(A);
8297	    }
8298	  });
8299	};
8300
8301	// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of
8302	_setCollectionOf('Map');
8303
8304	// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of
8305	_setCollectionOf('Set');
8306
8307	// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of
8308	_setCollectionOf('WeakMap');
8309
8310	// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of
8311	_setCollectionOf('WeakSet');
8312
8313	var _setCollectionFrom = function (COLLECTION) {
8314	  _export(_export.S, COLLECTION, {
8315	    from: function from(source
8316	    /* , mapFn, thisArg */
8317	    ) {
8318	      var mapFn = arguments[1];
8319	      var mapping, A, n, cb;
8320	      _aFunction(this);
8321	      mapping = mapFn !== undefined;
8322	      if (mapping) _aFunction(mapFn);
8323	      if (source == undefined) return new this();
8324	      A = [];
8325
8326	      if (mapping) {
8327	        n = 0;
8328	        cb = _ctx(mapFn, arguments[2], 2);
8329	        _forOf(source, false, function (nextItem) {
8330	          A.push(cb(nextItem, n++));
8331	        });
8332	      } else {
8333	        _forOf(source, false, A.push, A);
8334	      }
8335
8336	      return new this(A);
8337	    }
8338	  });
8339	};
8340
8341	// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from
8342	_setCollectionFrom('Map');
8343
8344	// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from
8345	_setCollectionFrom('Set');
8346
8347	// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from
8348	_setCollectionFrom('WeakMap');
8349
8350	// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from
8351	_setCollectionFrom('WeakSet');
8352
8353	// https://github.com/tc39/proposal-global
8354
8355
8356	_export(_export.G, {
8357	  global: _global
8358	});
8359
8360	// https://github.com/tc39/proposal-global
8361
8362
8363	_export(_export.S, 'System', {
8364	  global: _global
8365	});
8366
8367	// https://github.com/ljharb/proposal-is-error
8368
8369
8370
8371
8372	_export(_export.S, 'Error', {
8373	  isError: function isError(it) {
8374	    return _cof(it) === 'Error';
8375	  }
8376	});
8377
8378	// https://rwaldron.github.io/proposal-math-extensions/
8379
8380
8381	_export(_export.S, 'Math', {
8382	  clamp: function clamp(x, lower, upper) {
8383	    return Math.min(upper, Math.max(lower, x));
8384	  }
8385	});
8386
8387	// https://rwaldron.github.io/proposal-math-extensions/
8388
8389
8390	_export(_export.S, 'Math', {
8391	  DEG_PER_RAD: Math.PI / 180
8392	});
8393
8394	// https://rwaldron.github.io/proposal-math-extensions/
8395
8396
8397	var RAD_PER_DEG = 180 / Math.PI;
8398	_export(_export.S, 'Math', {
8399	  degrees: function degrees(radians) {
8400	    return radians * RAD_PER_DEG;
8401	  }
8402	});
8403
8404	// https://rwaldron.github.io/proposal-math-extensions/
8405	var _mathScale = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {
8406	  if (arguments.length === 0 // eslint-disable-next-line no-self-compare
8407	  || x != x // eslint-disable-next-line no-self-compare
8408	  || inLow != inLow // eslint-disable-next-line no-self-compare
8409	  || inHigh != inHigh // eslint-disable-next-line no-self-compare
8410	  || outLow != outLow // eslint-disable-next-line no-self-compare
8411	  || outHigh != outHigh) return NaN;
8412	  if (x === Infinity || x === -Infinity) return x;
8413	  return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;
8414	};
8415
8416	// https://rwaldron.github.io/proposal-math-extensions/
8417
8418
8419
8420
8421
8422
8423	_export(_export.S, 'Math', {
8424	  fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {
8425	    return _mathFround(_mathScale(x, inLow, inHigh, outLow, outHigh));
8426	  }
8427	});
8428
8429	// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
8430
8431
8432	_export(_export.S, 'Math', {
8433	  iaddh: function iaddh(x0, x1, y0, y1) {
8434	    var $x0 = x0 >>> 0;
8435	    var $x1 = x1 >>> 0;
8436	    var $y0 = y0 >>> 0;
8437	    return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;
8438	  }
8439	});
8440
8441	// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
8442
8443
8444	_export(_export.S, 'Math', {
8445	  isubh: function isubh(x0, x1, y0, y1) {
8446	    var $x0 = x0 >>> 0;
8447	    var $x1 = x1 >>> 0;
8448	    var $y0 = y0 >>> 0;
8449	    return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;
8450	  }
8451	});
8452
8453	// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
8454
8455
8456	_export(_export.S, 'Math', {
8457	  imulh: function imulh(u, v) {
8458	    var UINT16 = 0xffff;
8459	    var $u = +u;
8460	    var $v = +v;
8461	    var u0 = $u & UINT16;
8462	    var v0 = $v & UINT16;
8463	    var u1 = $u >> 16;
8464	    var v1 = $v >> 16;
8465	    var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
8466	    return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);
8467	  }
8468	});
8469
8470	// https://rwaldron.github.io/proposal-math-extensions/
8471
8472
8473	_export(_export.S, 'Math', {
8474	  RAD_PER_DEG: 180 / Math.PI
8475	});
8476
8477	// https://rwaldron.github.io/proposal-math-extensions/
8478
8479
8480	var DEG_PER_RAD = Math.PI / 180;
8481	_export(_export.S, 'Math', {
8482	  radians: function radians(degrees) {
8483	    return degrees * DEG_PER_RAD;
8484	  }
8485	});
8486
8487	// https://rwaldron.github.io/proposal-math-extensions/
8488
8489
8490	_export(_export.S, 'Math', {
8491	  scale: _mathScale
8492	});
8493
8494	// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
8495
8496
8497	_export(_export.S, 'Math', {
8498	  umulh: function umulh(u, v) {
8499	    var UINT16 = 0xffff;
8500	    var $u = +u;
8501	    var $v = +v;
8502	    var u0 = $u & UINT16;
8503	    var v0 = $v & UINT16;
8504	    var u1 = $u >>> 16;
8505	    var v1 = $v >>> 16;
8506	    var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
8507	    return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);
8508	  }
8509	});
8510
8511	// http://jfbastien.github.io/papers/Math.signbit.html
8512
8513
8514	_export(_export.S, 'Math', {
8515	  signbit: function signbit(x) {
8516	    // eslint-disable-next-line no-self-compare
8517	    return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;
8518	  }
8519	});
8520
8521	_export(_export.S, 'Promise', {
8522	  'try': function _try(callbackfn) {
8523	    var promiseCapability = _newPromiseCapability.f(this);
8524	    var result = _perform(callbackfn);
8525	    (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);
8526	    return promiseCapability.promise;
8527	  }
8528	});
8529
8530	var shared$1 = _shared('metadata');
8531
8532	var store = shared$1.store || (shared$1.store = new (es6_weakMap)());
8533
8534	var getOrCreateMetadataMap = function getOrCreateMetadataMap(target, targetKey, create) {
8535	  var targetMetadata = store.get(target);
8536
8537	  if (!targetMetadata) {
8538	    if (!create) return undefined;
8539	    store.set(target, targetMetadata = new es6_map());
8540	  }
8541
8542	  var keyMetadata = targetMetadata.get(targetKey);
8543
8544	  if (!keyMetadata) {
8545	    if (!create) return undefined;
8546	    targetMetadata.set(targetKey, keyMetadata = new es6_map());
8547	  }
8548
8549	  return keyMetadata;
8550	};
8551
8552	var ordinaryHasOwnMetadata = function ordinaryHasOwnMetadata(MetadataKey, O, P) {
8553	  var metadataMap = getOrCreateMetadataMap(O, P, false);
8554	  return metadataMap === undefined ? false : metadataMap.has(MetadataKey);
8555	};
8556
8557	var ordinaryGetOwnMetadata = function ordinaryGetOwnMetadata(MetadataKey, O, P) {
8558	  var metadataMap = getOrCreateMetadataMap(O, P, false);
8559	  return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);
8560	};
8561
8562	var ordinaryDefineOwnMetadata = function ordinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {
8563	  getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);
8564	};
8565
8566	var ordinaryOwnMetadataKeys = function ordinaryOwnMetadataKeys(target, targetKey) {
8567	  var metadataMap = getOrCreateMetadataMap(target, targetKey, false);
8568	  var keys = [];
vendor: 13,228 bytes, lines 8569-9049
8569	  if (metadataMap) metadataMap.forEach(function (_, key) {
8570	    keys.push(key);
8571	  });
8572	  return keys;
8573	};
8574
8575	var toMetaKey = function toMetaKey(it) {
8576	  return it === undefined || babelHelpers.typeof(it) == 'symbol' ? it : String(it);
8577	};
8578
8579	var exp$3 = function exp(O) {
8580	  _export(_export.S, 'Reflect', O);
8581	};
8582
8583	var _metadata = {
8584	  store: store,
8585	  map: getOrCreateMetadataMap,
8586	  has: ordinaryHasOwnMetadata,
8587	  get: ordinaryGetOwnMetadata,
8588	  set: ordinaryDefineOwnMetadata,
8589	  keys: ordinaryOwnMetadataKeys,
8590	  key: toMetaKey,
8591	  exp: exp$3
8592	};
8593
8594	var toMetaKey$1 = _metadata.key;
8595	var ordinaryDefineOwnMetadata$1 = _metadata.set;
8596	_metadata.exp({
8597	  defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {
8598	    ordinaryDefineOwnMetadata$1(metadataKey, metadataValue, _anObject(target), toMetaKey$1(targetKey));
8599	  }
8600	});
8601
8602	var toMetaKey$2 = _metadata.key;
8603	var getOrCreateMetadataMap$1 = _metadata.map;
8604	var store$1 = _metadata.store;
8605	_metadata.exp({
8606	  deleteMetadata: function deleteMetadata(metadataKey, target
8607	  /* , targetKey */
8608	  ) {
8609	    var targetKey = arguments.length < 3 ? undefined : toMetaKey$2(arguments[2]);
8610	    var metadataMap = getOrCreateMetadataMap$1(_anObject(target), targetKey, false);
8611	    if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;
8612	    if (metadataMap.size) return true;
8613	    var targetMetadata = store$1.get(target);
8614	    targetMetadata['delete'](targetKey);
8615	    return !!targetMetadata.size || store$1['delete'](target);
8616	  }
8617	});
8618
8619	var ordinaryHasOwnMetadata$1 = _metadata.has;
8620	var ordinaryGetOwnMetadata$1 = _metadata.get;
8621	var toMetaKey$3 = _metadata.key;
8622
8623	var ordinaryGetMetadata = function ordinaryGetMetadata(MetadataKey, O, P) {
8624	  var hasOwn = ordinaryHasOwnMetadata$1(MetadataKey, O, P);
8625	  if (hasOwn) return ordinaryGetOwnMetadata$1(MetadataKey, O, P);
8626	  var parent = _objectGpo(O);
8627	  return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;
8628	};
8629
8630	_metadata.exp({
8631	  getMetadata: function getMetadata(metadataKey, target
8632	  /* , targetKey */
8633	  ) {
8634	    return ordinaryGetMetadata(metadataKey, _anObject(target), arguments.length < 3 ? undefined : toMetaKey$3(arguments[2]));
8635	  }
8636	});
8637
8638	var ordinaryOwnMetadataKeys$1 = _metadata.keys;
8639	var toMetaKey$4 = _metadata.key;
8640
8641	var ordinaryMetadataKeys = function ordinaryMetadataKeys(O, P) {
8642	  var oKeys = ordinaryOwnMetadataKeys$1(O, P);
8643	  var parent = _objectGpo(O);
8644	  if (parent === null) return oKeys;
8645	  var pKeys = ordinaryMetadataKeys(parent, P);
8646	  return pKeys.length ? oKeys.length ? _arrayFromIterable(new es6_set(oKeys.concat(pKeys))) : pKeys : oKeys;
8647	};
8648
8649	_metadata.exp({
8650	  getMetadataKeys: function getMetadataKeys(target
8651	  /* , targetKey */
8652	  ) {
8653	    return ordinaryMetadataKeys(_anObject(target), arguments.length < 2 ? undefined : toMetaKey$4(arguments[1]));
8654	  }
8655	});
8656
8657	var ordinaryGetOwnMetadata$2 = _metadata.get;
8658	var toMetaKey$5 = _metadata.key;
8659	_metadata.exp({
8660	  getOwnMetadata: function getOwnMetadata(metadataKey, target
8661	  /* , targetKey */
8662	  ) {
8663	    return ordinaryGetOwnMetadata$2(metadataKey, _anObject(target), arguments.length < 3 ? undefined : toMetaKey$5(arguments[2]));
8664	  }
8665	});
8666
8667	var ordinaryOwnMetadataKeys$2 = _metadata.keys;
8668	var toMetaKey$6 = _metadata.key;
8669	_metadata.exp({
8670	  getOwnMetadataKeys: function getOwnMetadataKeys(target
8671	  /* , targetKey */
8672	  ) {
8673	    return ordinaryOwnMetadataKeys$2(_anObject(target), arguments.length < 2 ? undefined : toMetaKey$6(arguments[1]));
8674	  }
8675	});
8676
8677	var ordinaryHasOwnMetadata$2 = _metadata.has;
8678	var toMetaKey$7 = _metadata.key;
8679
8680	var ordinaryHasMetadata = function ordinaryHasMetadata(MetadataKey, O, P) {
8681	  var hasOwn = ordinaryHasOwnMetadata$2(MetadataKey, O, P);
8682	  if (hasOwn) return true;
8683	  var parent = _objectGpo(O);
8684	  return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;
8685	};
8686
8687	_metadata.exp({
8688	  hasMetadata: function hasMetadata(metadataKey, target
8689	  /* , targetKey */
8690	  ) {
8691	    return ordinaryHasMetadata(metadataKey, _anObject(target), arguments.length < 3 ? undefined : toMetaKey$7(arguments[2]));
8692	  }
8693	});
8694
8695	var ordinaryHasOwnMetadata$3 = _metadata.has;
8696	var toMetaKey$8 = _metadata.key;
8697	_metadata.exp({
8698	  hasOwnMetadata: function hasOwnMetadata(metadataKey, target
8699	  /* , targetKey */
8700	  ) {
8701	    return ordinaryHasOwnMetadata$3(metadataKey, _anObject(target), arguments.length < 3 ? undefined : toMetaKey$8(arguments[2]));
8702	  }
8703	});
8704
8705	var toMetaKey$9 = _metadata.key;
8706	var ordinaryDefineOwnMetadata$2 = _metadata.set;
8707	_metadata.exp({
8708	  metadata: function metadata(metadataKey, metadataValue) {
8709	    return function decorator(target, targetKey) {
8710	      ordinaryDefineOwnMetadata$2(metadataKey, metadataValue, (targetKey !== undefined ? _anObject : _aFunction)(target), toMetaKey$9(targetKey));
8711	    };
8712	  }
8713	});
8714
8715	// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask
8716
8717
8718	var microtask$1 = _microtask();
8719
8720	var process$3 = _global.process;
8721
8722	var isNode$2 = _cof(process$3) == 'process';
8723	_export(_export.G, {
8724	  asap: function asap(fn) {
8725	    var domain = isNode$2 && process$3.domain;
8726	    microtask$1(domain ? domain.bind(fn) : fn);
8727	  }
8728	});
8729
8730	var microtask$2 = _microtask();
8731
8732	var OBSERVABLE = _wks('observable');
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746	var RETURN = _forOf.RETURN;
8747
8748	var getMethod = function getMethod(fn) {
8749	  return fn == null ? undefined : _aFunction(fn);
8750	};
8751
8752	var cleanupSubscription = function cleanupSubscription(subscription) {
8753	  var cleanup = subscription._c;
8754
8755	  if (cleanup) {
8756	    subscription._c = undefined;
8757	    cleanup();
8758	  }
8759	};
8760
8761	var subscriptionClosed = function subscriptionClosed(subscription) {
8762	  return subscription._o === undefined;
8763	};
8764
8765	var closeSubscription = function closeSubscription(subscription) {
8766	  if (!subscriptionClosed(subscription)) {
8767	    subscription._o = undefined;
8768	    cleanupSubscription(subscription);
8769	  }
8770	};
8771
8772	var Subscription = function Subscription(observer, subscriber) {
8773	  _anObject(observer);
8774	  this._c = undefined;
8775	  this._o = observer;
8776	  observer = new SubscriptionObserver(this);
8777
8778	  try {
8779	    var cleanup = subscriber(observer);
8780	    var subscription = cleanup;
8781
8782	    if (cleanup != null) {
8783	      if (typeof cleanup.unsubscribe === 'function') cleanup = function cleanup() {
8784	        subscription.unsubscribe();
8785	      };else _aFunction(cleanup);
8786	      this._c = cleanup;
8787	    }
8788	  } catch (e) {
8789	    observer.error(e);
8790	    return;
8791	  }
8792
8793	  if (subscriptionClosed(this)) cleanupSubscription(this);
8794	};
8795
8796	Subscription.prototype = _redefineAll({}, {
8797	  unsubscribe: function unsubscribe() {
8798	    closeSubscription(this);
8799	  }
8800	});
8801
8802	var SubscriptionObserver = function SubscriptionObserver(subscription) {
8803	  this._s = subscription;
8804	};
8805
8806	SubscriptionObserver.prototype = _redefineAll({}, {
8807	  next: function next(value) {
8808	    var subscription = this._s;
8809
8810	    if (!subscriptionClosed(subscription)) {
8811	      var observer = subscription._o;
8812
8813	      try {
8814	        var m = getMethod(observer.next);
8815	        if (m) return m.call(observer, value);
8816	      } catch (e) {
8817	        try {
8818	          closeSubscription(subscription);
8819	        } finally {
8820	          throw e;
8821	        }
8822	      }
8823	    }
8824	  },
8825	  error: function error(value) {
8826	    var subscription = this._s;
8827	    if (subscriptionClosed(subscription)) throw value;
8828	    var observer = subscription._o;
8829	    subscription._o = undefined;
8830
8831	    try {
8832	      var m = getMethod(observer.error);
8833	      if (!m) throw value;
8834	      value = m.call(observer, value);
8835	    } catch (e) {
8836	      try {
8837	        cleanupSubscription(subscription);
8838	      } finally {
8839	        throw e;
8840	      }
8841	    }
8842
8843	    cleanupSubscription(subscription);
8844	    return value;
8845	  },
8846	  complete: function complete(value) {
8847	    var subscription = this._s;
8848
8849	    if (!subscriptionClosed(subscription)) {
8850	      var observer = subscription._o;
8851	      subscription._o = undefined;
8852
8853	      try {
8854	        var m = getMethod(observer.complete);
8855	        value = m ? m.call(observer, value) : undefined;
8856	      } catch (e) {
8857	        try {
8858	          cleanupSubscription(subscription);
8859	        } finally {
8860	          throw e;
8861	        }
8862	      }
8863
8864	      cleanupSubscription(subscription);
8865	      return value;
8866	    }
8867	  }
8868	});
8869
8870	var $Observable = function Observable(subscriber) {
8871	  _anInstance(this, $Observable, 'Observable', '_f')._f = _aFunction(subscriber);
8872	};
8873
8874	_redefineAll($Observable.prototype, {
8875	  subscribe: function subscribe(observer) {
8876	    return new Subscription(observer, this._f);
8877	  },
8878	  forEach: function forEach(fn) {
8879	    var that = this;
8880	    return new (_core.Promise || _global.Promise)(function (resolve, reject) {
8881	      _aFunction(fn);
8882	      var subscription = that.subscribe({
8883	        next: function next(value) {
8884	          try {
8885	            return fn(value);
8886	          } catch (e) {
8887	            reject(e);
8888	            subscription.unsubscribe();
8889	          }
8890	        },
8891	        error: reject,
8892	        complete: resolve
8893	      });
8894	    });
8895	  }
8896	});
8897	_redefineAll($Observable, {
8898	  from: function from(x) {
8899	    var C = typeof this === 'function' ? this : $Observable;
8900	    var method = getMethod(_anObject(x)[OBSERVABLE]);
8901
8902	    if (method) {
8903	      var observable = _anObject(method.call(x));
8904	      return observable.constructor === C ? observable : new C(function (observer) {
8905	        return observable.subscribe(observer);
8906	      });
8907	    }
8908
8909	    return new C(function (observer) {
8910	      var done = false;
8911	      microtask$2(function () {
8912	        if (!done) {
8913	          try {
8914	            if (_forOf(x, false, function (it) {
8915	              observer.next(it);
8916	              if (done) return RETURN;
8917	            }) === RETURN) return;
8918	          } catch (e) {
8919	            if (done) throw e;
8920	            observer.error(e);
8921	            return;
8922	          }
8923
8924	          observer.complete();
8925	        }
8926	      });
8927	      return function () {
8928	        done = true;
8929	      };
8930	    });
8931	  },
8932	  of: function of() {
8933	    for (var i = 0, l = arguments.length, items = new Array(l); i < l;) {
8934	      items[i] = arguments[i++];
8935	    }
8936
8937	    return new (typeof this === 'function' ? this : $Observable)(function (observer) {
8938	      var done = false;
8939	      microtask$2(function () {
8940	        if (!done) {
8941	          for (var j = 0; j < items.length; ++j) {
8942	            observer.next(items[j]);
8943	            if (done) return;
8944	          }
8945
8946	          observer.complete();
8947	        }
8948	      });
8949	      return function () {
8950	        done = true;
8951	      };
8952	    });
8953	  }
8954	});
8955	_hide($Observable.prototype, OBSERVABLE, function () {
8956	  return this;
8957	});
8958	_export(_export.G, {
8959	  Observable: $Observable
8960	});
8961
8962	_setSpecies('Observable');
8963
8964	// ie9- setTimeout & setInterval additional parameters fix
8965
8966
8967
8968
8969
8970
8971	var slice = [].slice;
8972	var MSIE = /MSIE .\./.test(_userAgent); // <- dirty ie9- check
8973
8974	var wrap$1 = function wrap(set) {
8975	  return function (fn, time
8976	  /* , ...args */
8977	  ) {
8978	    var boundArgs = arguments.length > 2;
8979	    var args = boundArgs ? slice.call(arguments, 2) : false;
8980	    return set(boundArgs ? function () {
8981	      // eslint-disable-next-line no-new-func
8982	      (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);
8983	    } : fn, time);
8984	  };
8985	};
8986
8987	_export(_export.G + _export.B + _export.F * MSIE, {
8988	  setTimeout: wrap$1(_global.setTimeout),
8989	  setInterval: wrap$1(_global.setInterval)
8990	});
8991
8992	_export(_export.G + _export.B, {
8993	  setImmediate: _task.set,
8994	  clearImmediate: _task.clear
8995	});
8996
8997	var ITERATOR$4 = _wks('iterator');
8998	var TO_STRING_TAG = _wks('toStringTag');
8999	var ArrayValues = _iterators.Array;
9000	var DOMIterables = {
9001	  CSSRuleList: true,
9002	  // TODO: Not spec compliant, should be false.
9003	  CSSStyleDeclaration: false,
9004	  CSSValueList: false,
9005	  ClientRectList: false,
9006	  DOMRectList: false,
9007	  DOMStringList: false,
9008	  DOMTokenList: true,
9009	  DataTransferItemList: false,
9010	  FileList: false,
9011	  HTMLAllCollection: false,
9012	  HTMLCollection: false,
9013	  HTMLFormElement: false,
9014	  HTMLSelectElement: false,
9015	  MediaList: true,
9016	  // TODO: Not spec compliant, should be false.
9017	  MimeTypeArray: false,
9018	  NamedNodeMap: false,
9019	  NodeList: true,
9020	  PaintRequestList: false,
9021	  Plugin: false,
9022	  PluginArray: false,
9023	  SVGLengthList: false,
9024	  SVGNumberList: false,
9025	  SVGPathSegList: false,
9026	  SVGPointList: false,
9027	  SVGStringList: false,
9028	  SVGTransformList: false,
9029	  SourceBufferList: false,
9030	  StyleSheetList: true,
9031	  // TODO: Not spec compliant, should be false.
9032	  TextTrackCueList: false,
9033	  TextTrackList: false,
9034	  TouchList: false
9035	};
9036
9037	for (var collections = _objectKeys(DOMIterables), i$2 = 0; i$2 < collections.length; i$2++) {
9038	  var NAME$1 = collections[i$2];
9039	  var explicit = DOMIterables[NAME$1];
9040	  var Collection = _global[NAME$1];
9041	  var proto$3 = Collection && Collection.prototype;
9042	  var key$1;
9043
9044	  if (proto$3) {
9045	    if (!proto$3[ITERATOR$4]) _hide(proto$3, ITERATOR$4, ArrayValues);
9046	    if (!proto$3[TO_STRING_TAG]) _hide(proto$3, TO_STRING_TAG, NAME$1);
9047	    _iterators[NAME$1] = ArrayValues;
9048	    if (explicit) for (key$1 in es6_array_iterator) {
9049	      if (!proto$3[key$1]) _redefine(proto$3, key$1, es6_array_iterator[key$
90491], true);
9050	    }
9051	  }
9052	}
9053
9054	if (window._main_core_polyfill) {
9055	  console.warn('main.core.polyfill is loaded more than once on this page');
9056	}
9057
9058	window._main_core_polyfill = true;
9059
9060}((this.window = this.window || {})));
9061
9062
9063
9064/**
9065 * Element.prototype.matches polyfill
9066 */
9067;(function(element) {
9068	'use strict';
9069
9070	if (!element.matches && element.matchesSelector)
9071	{
9072		element.matches = element.matchesSelector;
9073	}
9074
9075	if (!element.matches)
9076	{
9077		element.matches = function(selector) {
9078			var matches = document.querySelectorAll(selector);
9079			var self = this;
9080
9081			return Array.prototype.some.call(matches, function(e) {
9082				return e === self;
9083			});
9084		};
9085	}
9086
9087})(Element.prototype);
9088
9089;(function() {
9090	'use strict';
9091
9092	if (!Element.prototype.closest)
9093	{
9094		/**
9095		 * Finds closest parent element by selector
9096		 * @param {string} selector
9097		 * @return {HTMLElement|Element|Node}
9098		 */
9099		Object.defineProperty(Element.prototype, 'closest', {
9100			enumerable: false,
9101			value: function(selector) {
9102				var node = this;
9103
9104				while (node)
9105				{
9106					if (node.matches(selector))
9107					{
9108						return node;
9109					}
9110
9111					node = node.parentElement;
9112				}
9113
9114				return null;
9115			},
9116		});
9117	}
9118})();
9119
9120(function (exports) {
9121	'use strict';
9122
9123	if (!window.DOMRect || typeof DOMRect.prototype.toJSON !== 'function' || typeof DOMRect.fromRect !== 'function') {
9124	  window.DOMRect =
9125	  /*#__PURE__*/
9126	  function () {
9127	    function DOMRect(x, y, width, height) {
9128	      babelHelpers.classCallCheck(this, DOMRect);
9129	      this.x = x || 0;
9130	      this.y = y || 0;
9131	      this.width = width || 0;
9132	      this.height = height || 0;
9133	    }
9134
9135	    babelHelpers.createClass(DOMRect, [{
9136	      key: "toJSON",
9137	      value: function toJSON() {
9138	        return {
9139	          top: this.top,
9140	          left: this.left,
9141	          right: this.right,
9142	          bottom: this.bottom,
9143	          width: this.width,
9144	          height: this.height,
9145	          x: this.x,
9146	          y: this.y
9147	        };
9148	      }
9149	    }, {
9150	      key: "top",
9151	      get: function get() {
9152	        return this.y;
9153	      }
9154	    }, {
9155	      key: "left",
9156	      get: function get() {
9157	        return this.x;
9158	      }
9159	    }, {
9160	      key: "right",
9161	      get: function get() {
9162	        return this.x + this.width;
9163	      }
9164	    }, {
9165	      key: "bottom",
9166	      get: function get() {
9167	        return this.y + this.height;
9168	      }
9169	    }], [{
9170	      key: "fromRect",
9171	      value: function fromRect(otherRect) {
9172	        return new DOMRect(otherRect.x, otherRect.y, otherRect.width, otherRect.height);
9173	      }
9174	    }]);
9175	    return DOMRect;
9176	  }();
9177	}
9178
9179}((this.window = this.window || {})));
9180
9181
9182
9183
9184(function (exports) {
9185	'use strict';
9186
9187	var bxTmp = window.BX;
9188
9189	window.BX = function (node) {
9190	  if (window.BX.type.isNotEmptyString(node)) {
9191	    return document.getElementById(node);
9192	  }
9193
9194	  if (window.BX.type.isDomNode(node)) {
9195	    return node;
9196	  }
9197
9198	  if (window.BX.type.isFunction(node)) {
9199	    return window.BX.ready(node);
9200	  }
9201
9202	  return null;
9203	};
9204
9205	if (bxTmp) {
9206	  Object.keys(bxTmp).forEach(function (key) {
9207	    window.BX[key] = bxTmp[key];
9208	  });
9209	}
9210
9211	exports = window.BX;
9212
9213	/**
9214	 * Gets object.toString result
9215	 * @param value
9216	 * @return {string}
9217	 */
9218	function getTag(value) {
9219	  return Object.prototype.toString.call(value);
9220	}
9221
9222	var objectCtorString = Function.prototype.toString.call(Object);
9223	/**
9224	 * @memberOf BX
9225	 */
9226
9227	var Type = /*#__PURE__*/function () {
9228	  function Type() {
9229	    babelHelpers.classCallCheck(this, Type);
9230	  }
9231
9232	  babelHelpers.createClass(Type, null, [{
9233	    key: "isString",
9234
9235	    /**
9236	     * Checks that value is string
9237	     * @param value
9238	     * @return {boolean}
9239	     */
9240	    value: function isString(value) {
9241	      return typeof value === 'string';
9242	    }
9243	    /**
9244	     * Returns true if a value is not empty string
9245	     * @param value
9246	     * @returns {boolean}
9247	     */
9248
9249	  }, {
9250	    key: "isStringFilled",
9251	    value: function isStringFilled(value) {
9252	      return this.isString(value) && value !== '';
9253	    }
9254	    /**
9255	     * Checks that value is function
9256	     * @param value
9257	     * @return {boolean}
9258	     */
9259
9260	  }, {
9261	    key: "isFunction",
9262	    value: function isFunction(value) {
9263	      return typeof value === 'function';
9264	    }
9265	    /**
9266	     * Checks that value is object
9267	     * @param value
9268	     * @return {boolean}
9269	     */
9270
9271	  }, {
9272	    key: "isObject",
9273	    value: function isObject(value) {
9274	      return !!value && (babelHelpers.typeof(value) === 'object' || typeof value === 'function');
9275	    }
9276	    /**
9277	     * Checks that value is object like
9278	     * @param value
9279	     * @return {boolean}
9280	     */
9281
9282	  }, {
9283	    key: "isObjectLike",
9284	    value: function isObjectLike(value) {
9285	      return !!value && babelHelpers.typeof(value) === 'object';
9286	    }
9287	    /**
9288	     * Checks that value is plain object
9289	     * @param value
9290	     * @return {boolean}
9291	     */
9292
9293	  }, {
9294	    key: "isPlainObject",
9295	    value: function isPlainObject(value) {
9296	      if (!Type.isObjectLike(value) || getTag(value) !== '[object Object]') {
9297	        return false;
9298	      }
9299
9300	      var proto = Object.getPrototypeOf(value);
9301
9302	      if (proto === null) {
9303	        return true;
9304	      }
9305
9306	      var ctor = proto.hasOwnProperty('constructor') && proto.constructor;
9307	      return typeof ctor === 'function' && Function.prototype.toString.call(ctor) === objectCtorString;
9308	    }
9309	    /**
9310	     * Checks that value is boolean
9311	     * @param value
9312	     * @return {boolean}
9313	     */
9314
9315	  }, {
9316	    key: "isBoolean",
9317	    value: function isBoolean(value) {
9318	      return value === true || value === false;
9319	    }
9320	    /**
9321	     * Checks that value is number
9322	     * @param value
9323	     * @return {boolean}
9324	     */
9325
9326	  }, {
9327	    key: "isNumber",
9328	    value: function isNumber(value) {
9329	      return !Number.isNaN(value) && typeof value === 'number';
9330	    }
9331	    /**
9332	     * Checks that value is integer
9333	     * @param value
9334	     * @return {boolean}
9335	     */
9336
9337	  }, {
9338	    key: "isInteger",
9339	    value: function isInteger(value) {
9340	      return Type.isNumber(value) && value % 1 === 0;
9341	    }
9342	    /**
9343	     * Checks that value is float
9344	     * @param value
9345	     * @return {boolean}
9346	     */
9347
9348	  }, {
9349	    key: "isFloat",
9350	    value: function isFloat(value) {
9351	      return Type.isNumber(value) && !Type.isInteger(value);
9352	    }
9353	    /**
9354	     * Checks that value is nil
9355	     * @param value
9356	     * @return {boolean}
9357	     */
9358
9359	  }, {
9360	    key: "isNil",
9361	    value: function isNil(value) {
9362	      return value === null || value === undefined;
9363	    }
9364	    /**
9365	     * Checks that value is array
9366	     * @param value
9367	     * @return {boolean}
9368	     */
9369
9370	  }, {
9371	    key: "isArray",
9372	    value: function isArray(value) {
9373	      return !Type.isNil(value) && Array.isArray(value);
9374	    }
9375	    /**
9376	     * Returns true if a value is an array and it has at least one element
9377	     * @param value
9378	     * @returns {boolean}
9379	     */
9380
9381	  }, {
9382	    key: "isArrayFilled",
9383	    value: function isArrayFilled(value) {
9384	      return this.isArray(value) && value.length > 0;
9385	    }
9386	    /**
9387	     * Checks that value is array like
9388	     * @param value
9389	     * @return {boolean}
9390	     */
9391
9392	  }, {
9393	    key: "isArrayLike",
9394	    value: function isArrayLike(value) {
9395	      return !Type.isNil(value) && !Type.isFunction(value) && value.length > -1 && value.length <= Number.MAX_SAFE_INTEGER;
9396	    }
9397	    /**
9398	     * Checks that value is Date
9399	     * @param value
9400	     * @return {boolean}
9401	     */
9402
9403	  }, {
9404	    key: "isDate",
9405	    value: function isDate(value) {
9406	      return Type.isObjectLike(value) && getTag(value) === '[object Date]';
9407	    }
9408	    /**
9409	     * Checks that is DOM node
9410	     * @param value
9411	     * @return {boolean}
9412	     */
9413
9414	  }, {
9415	    key: "isDomNode",
9416	    value: function isDomNode(value) {
9417	      return Type.isObjectLike(value) && !Type.isPlainObject(value) && 'nodeType' in value;
9418	    }
9419	    /**
9420	     * Checks that value is element node
9421	     * @param value
9422	     * @return {boolean}
9423	     */
9424
9425	  }, {
9426	    key: "isElementNode",
9427	    value: function isElementNode(value) {
9428	      return Type.isDomNode(value) && value.nodeType === Node.ELEMENT_NODE;
9429	    }
9430	    /**
9431	     * Checks that value is text node
9432	     * @param value
9433	     * @return {boolean}
9434	     */
9435
9436	  }, {
9437	    key: "isTextNode",
9438	    value: function isTextNode(value) {
9439	      return Type.isDomNode(value) && value.nodeType === Node.TEXT_NODE;
9440	    }
9441	    /**
9442	     * Checks that value is Map
9443	     * @param value
9444	     * @return {boolean}
9445	     */
9446
9447	  }, {
9448	    key: "isMap",
9449	    value: function isMap(value) {
9450	      return Type.isObjectLike(value) && getTag(value) === '[object Map]';
9451	    }
9452	    /**
9453	     * Checks that value is Set
9454	     * @param value
9455	     * @return {boolean}
9456	     */
9457
9458	  }, {
9459	    key: "isSet",
9460	    value: function isSet(value) {
9461	      return Type.isObjectLike(value) && getTag(value) === '[object Set]';
9462	    }
9463	    /**
9464	     * Checks that value is WeakMap
9465	     * @param value
9466	     * @return {boolean}
9467	     */
9468
9469	  }, {
9470	    key: "isWeakMap",
9471	    value: function isWeakMap(value) {
9472	      return Type.isObjectLike(value) && getTag(value) === '[object WeakMap]';
9473	    }
9474	    /**
9475	     * Checks that value is WeakSet
9476	     * @param value
9477	     * @return {boolean}
9478	     */
9479
9480	  }, {
9481	    key: "isWeakSet",
9482	    value: function isWeakSet(value) {
9483	      return Type.isObjectLike(value) && getTag(value) === '[object WeakSet]';
9484	    }
9485	    /**
9486	     * Checks that value is prototype
9487	     * @param value
9488	     * @return {boolean}
9489	     */
9490
9491	  }, {
9492	    key: "isPrototype",
9493	    value: function isPrototype(value) {
9494	      return (typeof (value && value.constructor) === 'function' && value.constructor.prototype || Object.prototype) === value;
9495	    }
9496	    /**
9497	     * Checks that value is regexp
9498	     * @param value
9499	     * @return {boolean}
9500	     */
9501
9502	  }, {
9503	    key: "isRegExp",
9504	    value: function isRegExp(value) {
9505	      return Type.isObjectLike(value) && getTag(value) === '[object RegExp]';
9506	    }
9507	    /**
9508	     * Checks that value is null
9509	     * @param value
9510	     * @return {boolean}
9511	     */
9512
9513	  }, {
9514	    key: "isNull",
9515	    value: function isNull(value) {
9516	      return value === null;
9517	    }
9518	    /**
9519	     * Checks that value is undefined
9520	     * @param value
9521	     * @return {boolean}
9522	     */
9523
9524	  }, {
9525	    key: "isUndefined",
9526	    value: function isUndefined(value) {
9527	      return typeof value === 'undefined';
9528	    }
9529	    /**
9530	     * Checks that value is ArrayBuffer
9531	     * @param value
9532	     * @return {boolean}
9533	     */
9534
9535	  }, {
9536	    key: "isArrayBuffer",
9537	    value: function isArrayBuffer(value) {
9538	      return Type.isObjectLike(value) && getTag(value) === '[object ArrayBuffer]';
9539	    }
9540	    /**
9541	     * Checks that value is typed array
9542	     * @param value
9543	     * @return {boolean}
9544	     */
9545
9546	  }, {
9547	    key: "isTypedArray",
9548	    value: function isTypedArray(value) {
9549	      var regExpTypedTag = /^\[object (?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)]$/;
9550	      return Type.isObjectLike(value) && regExpTypedTag.test(getTag(value));
9551	    }
9552	    /**
9553	     * Checks that value is Blob
9554	     * @param value
9555	     * @return {boolean}
9556	     */
9557
9558	  }, {
9559	    key: "isBlob",
9560	    value: function isBlob(value) {
9561	      return Type.isObjectLike(value) && Type.isNumber(value.size) && Type.isString(value.type) && Type.isFunction(value.slice);
9562	    }
9563	    /**
9564	     * Checks that value is File
9565	     * @param value
9566	     * @return {boolean}
9567	     */
9568
9569	  }, {
9570	    key: "isFile",
9571	    value: function isFile(value) {
9572	      return Type.isBlob(value) && Type.isObjectLike(value.lastModifiedDate) && Type.isNumber(value.lastModified) && Type.isString(value.name);
9573	    }
9574	    /**
9575	     * Checks that value is FormData
9576	     * @param value
9577	     * @return {boolean}
9578	     */
9579
9580	  }, {
9581	    key: "isFormData",
9582	    value: function isFormData(value) {
9583	      return value instanceof FormData;
9584	    }
9585	  }]);
9586	  return Type;
9587	}();
9588
9589	/**
9590	 * @memberOf BX
9591	 */
9592
9593	var Reflection = /*#__PURE__*/function () {
9594	  function Reflection() {
9595	    babelHelpers.classCallCheck(this, Reflection);
9596	  }
9597
9598	  babelHelpers.createClass(Reflection, null, [{
9599	    key: "getClass",
9600
9601	    /**
9602	     * Gets link to function by function name
9603	     * @param className
9604	     * @return {?Function}
9605	     */
9606	    value: function getClass(className) {
9607	      if (Type.isString(className) && !!className) {
9608	        var classFn = null;
9609	        var currentNamespace = window;
9610	        var namespaces = className.split('.');
9611
9612	        for (var i = 0; i < namespaces.length; i += 1) {
9613	          var namespace = namespaces[i];
9614
9615	          if (!currentNamespace[namespace]) {
9616	            return null;
9617	          }
9618
9619	          currentNamespace = currentNamespace[namespace];
9620	          classFn = currentNamespace;
9621	        }
9622
9623	        return classFn;
9624	      }
9625
9626	      if (Type.isFunction(className)) {
9627	        return className;
9628	      }
9629
9630	      return null;
9631	    }
9632	    /**
9633	     * Creates a namespace or returns a link to a previously created one
9634	     * @param {String} namespaceName
9635	     * @return {Object<string, any> | Function | null}
9636	     */
9637
9638	  }, {
9639	    key: "namespace",
9640	    value: function namespace(namespaceName) {
9641	      var parts = namespaceName.split('.');
9642	      var parent = window.BX;
9643
9644	      if (parts[0] === 'BX') {
9645	        parts = parts.slice(1);
9646	      }
9647
9648	      for (var i = 0; i < parts.length; i += 1) {
9649	        if (Type.isUndefined(parent[parts[i]])) {
9650	          parent[parts[i]] = {};
9651	        }
9652
9653	        parent = parent[parts[i]];
9654	      }
9655
9656	      return parent;
9657	    }
9658	  }]);
9659	  return Reflection;
9660	}();
9661
9662	var reEscape = /[&<>'"]/g;
9663	var reUnescape = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;
9664	var escapeEntities = {
9665	  '&': '&amp;',
9666	  '<': '&lt;',
9667	  '>': '&gt;',
9668	  "'": '&#39;',
9669	  '"': '&quot;'
9670	};
9671	var unescapeEntities = {
9672	  '&amp;': '&',
9673	  '&#38;': '&',
9674	  '&lt;': '<',
9675	  '&#60;': '<',
9676	  '&gt;': '>',
9677	  '&#62;': '>',
9678	  '&apos;': "'",
9679	  '&#39;': "'",
9680	  '&quot;': '"',
9681	  '&#34;': '"'
9682	};
9683	/**
9684	 * @memberOf BX
9685	 */
9686
9687	var Text = /*#__PURE__*/function () {
9688	  function Text() {
9689	    babelHelpers.classCallCheck(this, Text);
9690	  }
9691
9692	  babelHelpers.createClass(Text, null, [{
9693	    key: "encode",
9694
9695	    /**
9696	     * Encodes all unsafe entities
9697	     * @param {string} value
9698	     * @return {string}
9699	     */
9700	    value: function encode(value) {
9701	      if (Type.isString(value)) {
9702	        return value.replace(reEscape, function (item) {
9703	          return escapeEntities[item];
9704	        });
9705	      }
9706
9707	      return value;
9708	    }
9709	    /**
9710	     * Decodes all encoded entities
9711	     * @param {string} value
9712	     * @return {string}
9713	     */
9714
9715	  }, {
9716	    key: "decode",
9717	    value: function decode(value) {
9718	      if (Type.isString(value)) {
9719	        return value.replace(reUnescape, function (item) {
9720	          return unescapeEntities[item];
9721	        });
9722	      }
9723
9724	      return value;
9725	    }
9726	  }, {
9727	    key: "getRandom",
9728	    value: function getRandom() {
9729	      var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8;
9730	      // eslint-disable-next-line
9731	      return babelHelpers.toConsumableArray(Array(length)).map(function () {
9732	        return (~~(Math.random() * 36)).toString(36);
9733	      }).join('');
9734	    }
9735	  }, {
9736	    key: "toNumber",
9737	    value: function toNumber(value) {
9738	      var parsedValue = Number.parseFloat(value);
9739
9740	      if (Type.isNumber(parsedValue)) {
9741	        return parsedValue;
9742	      }
9743
9744	      return 0;
9745	    }
9746	  }, {
9747	    key: "toInteger",
9748	    value: function toInteger(value) {
9749	      return Text.toNumber(Number.parseInt(value, 10));
9750	    }
9751	  }, {
9752	    key: "toBoolean",
9753	    value: function toBoolean(value) {
9754	      var trueValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
9755	      var transformedValue = Type.isString(value) ? value.toLowerCase() : value;
9756	      return ['true', 'y', '1', 1, true].concat(babelHelpers.toConsumableArray(trueValues)).includes(transformedValue);
9757	    }
9758	  }, {
9759	    key: "toCamelCase",
9760	    value: function toCamelCase(str) {
9761	      if (!Type.isStringFilled(str)) {
9762	        return str;
9763	      }
9764
9765	      var regex = /[-_\s]+(.)?/g;
9766
9767	      if (!regex.test(str)) {
9768	        return str.match(/^[A-Z]+$/) ? str.toLowerCase() : str[0].toLowerCase() + str.slice(1);
9769	      }
9770
9771	      str = str.toLowerCase();
9772	      str = str.replace(regex, function (match, letter) {
9773	        return letter ? letter.toUpperCase() : '';
9774	      });
9775	      return str[0].toLowerCase() + str.substr(1);
9776	    }
9777	  }, {
9778	    key: "toPascalCase",
9779	    value: function toPascalCase(str) {
9780	      if (!Type.isStringFilled(str)) {
9781	        return str;
9782	      }
9783
9784	      return this.capitalize(this.toCamelCase(str));
9785	    }
9786	  }, {
9787	    key: "toKebabCase",
9788	    value: function toKebabCase(str) {
9789	      if (!Type.isStringFilled(str)) {
9790	        return str;
9791	      }
9792
9793	      var matches = str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g);
9794
9795	      if (!matches) {
9796	        return str;
9797	      }
9798
9799	      return matches.map(function (x) {
9800	        return x.toLowerCase();
9801	      }).join('-');
9802	    }
9803	  }, {
9804	    key: "capitalize",
9805	    value: function capitalize(str) {
9806	      if (!Type.isStringFilled(str)) {
9807	        return str;
9808	      }
9809
9810	      return str[0].toUpperCase() + str.substr(1);
9811	    }
9812	  }]);
9813	  return Text;
9814	}();
9815
9816	var aliases = {
9817	  mousewheel: ['DOMMouseScroll'],
9818	  bxchange: ['change', 'cut', 'paste', 'drop', 'keyup'],
9819	  animationend: ['animationend', 'oAnimationEnd', 'webkitAnimationEnd', 'MSAnimationEnd'],
9820	  transitionend: ['webkitTransitionEnd', 'otransitionend', 'oTransitionEnd', 'msTransitionEnd', 'transitionend'],
9821	  fullscreenchange: ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'],
9822	  fullscreenerror: ['fullscreenerror', 'webkitfullscreenerror', 'mozfullscreenerror', 'MSFullscreenError']
9823	};
9824
9825	var Registry = /*#__PURE__*/function () {
9826	  function Registry() {
9827	    babelHelpers.classCallCheck(this, Registry);
9828	    babelHelpers.defineProperty(this, "registry", new WeakMap());
9829	  }
9830
9831	  babelHelpers.createClass(Registry, [{
9832	    key: "set",
9833	    value: function set(target, event, listener) {
9834	      var events = this.get(target);
9835
9836	      if (!Type.isSet(events[event])) {
9837	        events[event] = new Set();
9838	      }
9839
9840	      events[event].add(listener);
9841	      this.registry.set(target, events);
9842	    }
9843	  }, {
9844	    key: "get",
9845	    value: function get(target) {
9846	      return this.registry.get(target) || {};
9847	    }
9848	  }, {
9849	    key: "has",
9850	    value: function has(target, event, listener) {
9851	      if (event && listener) {
9852	        return this.registry.has(target) && this.registry.get(target)[event].has(listener);
9853	      }
9854
9855	      return this.registry.has(target);
9856	    }
9857	  }, {
9858	    key: "delete",
9859	    value: function _delete(target, event, listener) {
9860	      if (!Type.isDomNode(target)) {
9861	        return;
9862	      }
9863
9864	      if (Type.isString(event) && Type.isFunction(listener)) {
9865	        var events = this.registry.get(target);
9866
9867	        if (Type.isPlainObject(events) && Type.isSet(events[event])) {
9868	          events[event].delete(listener);
9869	        }
9870
9871	        return;
9872	      }
9873
9874	      if (Type.isString(event)) {
9875	        var _events = this.registry.get(target);
9876
9877	        if (Type.isPlainObject(_events) && Type.isSet(_events[event])
9877) {
9878	          _events[event] = new Set();
9879	        }
9880
9881	        return;
9882	      }
9883
9884	      this.registry.delete(target);
9885	    }
9886	  }]);
9887	  return Registry;
9888	}();
9889	var registry = new Registry();
9890
9891	function isOptionSupported(name) {
9892	  var isSupported = false;
9893
9894	  try {
9895	    var options = Object.defineProperty({}, name, {
9896	      get: function get() {
9897	        isSupported = true;
9898	        return undefined;
9899	      }
9900	    });
9901	    window.addEventListener('test', null, options);
9902	  } // eslint-disable-next-line
9903	  catch (err) {}
9904
9905	  return isSupported;
9906	}
9907
9908	function fetchSupportedListenerOptions(options) {
9909	  if (!Type.isPlainObject(options)) {
9910	    return options;
9911	  }
9912
9913	  return Object.keys(options).reduce(function (acc, name) {
9914	    if (isOptionSupported(name)) {
9915	      acc[name] = options[name];
9916	    }
9917
9918	    return acc;
9919	  }, {});
9920	}
9921
9922	function bind(target, eventName, handler, options) {
9923	  if (!Type.isObject(target) || !Type.isFunction(target.addEventListener)) {
9924	    return;
9925	  }
9926
9927	  var listenerOptions = fetchSupportedListenerOptions(options);
9928
9929	  if (eventName in aliases) {
9930	    aliases[eventName].forEach(function (key) {
9931	      target.addEventListener(key, handler, listenerOptions);
9932	      registry.set(target, eventName, handler);
9933	    });
9934	    return;
9935	  }
9936
9937	  target.addEventListener(eventName, handler, listenerOptions);
9938	  registry.set(target, eventName, handler);
9939	}
9940
9941	function unbind(target, eventName, handler, options) {
9942	  if (!Type.isObject(target) || !Type.isFunction(target.removeEventListener)) {
9943	    return;
9944	  }
9945
9946	  var listenerOptions = fetchSupportedListenerOptions(options);
9947
9948	  if (eventName in aliases) {
9949	    aliases[eventName].forEach(function (key) {
9950	      target.removeEventListener(key, handler, listenerOptions);
9951	      registry.delete(target, key, handler);
9952	    });
9953	    return;
9954	  }
9955
9956	  target.removeEventListener(eventName, handler, listenerOptions);
9957	  registry.delete(target, eventName, handler);
9958	}
9959
9960	function unbindAll(target, eventName) {
9961	  var events = registry.get(target);
9962	  Object.keys(events).forEach(function (currentEvent) {
9963	    events[currentEvent].forEach(function (handler) {
9964	      if (!Type.isString(eventName) || eventName === currentEvent) {
9965	        unbind(target, currentEvent, handler);
9966	      }
9967	    });
9968	  });
9969	}
9970
9971	function bindOnce(target, eventName, handler, options) {
9972	  var once = function once() {
9973	    unbind(target, eventName, once, options);
9974	    handler.apply(void 0, arguments);
9975	  };
9976
9977	  bind(target, eventName, once, options);
9978	}
9979
9980	var debugState = true;
9981	function enableDebug() {
9982	  debugState = true;
9983	}
9984	function disableDebug() {
9985	  debugState = false;
9986	}
9987	function isDebugEnabled() {
9988	  return debugState;
9989	}
9990	function debug() {
9991	  if (isDebugEnabled() && Type.isObject(window.console)) {
9992	    if (Type.isFunction(window.console.log)) {
9993	      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
9994	        args[_key] = arguments[_key];
9995	      }
9996
9997	      window.console.log('BX.debug: ', args.length > 0 ? args : args[0]);
9998
9999	      if (args[0] instanceof Error && args[0].stack) {
10000	        window.console.log('BX.debug error stack trace', args[0].stack);
10001	      }
10002	    }
10003
10004	    if (Type.isFunction(window.console.trace)) {
10005	      // eslint-disable-next-line
10006	      console.trace();
10007	    }
10008	  }
10009	}
10010
10011	function fetchExtensionSettings(html) {
10012	  if (Type.isStringFilled(html)) {
10013	    var scripts = html.match(/<script type="extension\/settings" \b[^>]*>([\s\S]*?)<\/script>/g);
10014
10015	    if (Type.isArrayFilled(scripts)) {
10016	      return scripts.map(function (script) {
10017	        var _script$match = script.match(/data-extension="(.[a-z0-9_.-]+)"/),
10018	            _script$match2 = babelHelpers.slicedToArray(_script$match, 2),
10019	            extension = _script$match2[1];
10020
10021	        return {
10022	          extension: extension,
10023	          script: script
10024	        };
10025	      });
10026	    }
10027	  }
10028
10029	  return [];
10030	}
10031
10032	var Extension = /*#__PURE__*/function () {
10033	  function Extension(options) {
10034	    babelHelpers.classCallCheck(this, Extension);
10035	    this.config = options.config || {};
10036	    this.name = options.extension;
10037	    this.state = 'scheduled'; // eslint-disable-next-line
10038
10039	    var result = BX.processHTML(options.html || '');
10040	    this.inlineScripts = result.SCRIPT.reduce(inlineScripts, []);
10041	    this.externalScripts = result.SCRIPT.reduce(externalScripts, []);
10042	    this.externalStyles = result.STYLE.reduce(externalStyles, []);
10043	    this.settingsScripts = fetchExtensionSettings(result.HTML);
10044	  }
10045
10046	  babelHelpers.createClass(Extension, [{
10047	    key: "load",
10048	    value: function load() {
10049	      var _this = this;
10050
10051	      if (this.state === 'error') {
10052	        this.loadPromise = this.loadPromise || Promise.resolve(this);
10053	        console.warn('Extension', this.name, 'not found');
10054	      }
10055
10056	      if (!this.loadPromise && this.state) {
10057	        this.state = 'load';
10058	        this.settingsScripts.forEach(function (entry) {
10059	          var isLoaded = !!document.querySelector("script[data-extension=\"".concat(entry.extension, "\"]"));
10060
10061	          if (!isLoaded) {
10062	            document.body.insertAdjacentHTML('beforeend', entry.script);
10063	          }
10064	        });
10065	        this.inlineScripts.forEach(BX.evalGlobal);
10066	        this.loadPromise = Promise.all([loadAll(this.externalScripts), loadAll(this.externalStyles)]).then(function () {
10067	          _this.state = 'loaded';
10068
10069	          if (Type.isPlainObject(_this.config) && _this.config.namespace) {
10070	            return Reflection.getClass(_this.config.namespace);
10071	          }
10072
10073	          return window;
10074	        });
10075	      }
10076
10077	      return this.loadPromise;
10078	    }
10079	  }]);
10080	  return Extension;
10081	}();
10082
10083	var initialized = {};
10084	var ajaxController = 'main.bitrix.main.controller.loadext.getextensions';
10085
10086	function makeIterable(value) {
10087	  return Type.isArray(value) ? value : [value];
10088	}
10089	function isInitialized(extension) {
10090	  return extension in initialized;
10091	}
10092	function getInitialized(extension) {
10093	  return initialized[extension];
10094	}
10095	function isAllInitialized(extensions) {
10096	  return extensions.every(isInitialized);
10097	}
10098	function loadExtensions(extensions) {
10099	  return Promise.all(extensions.map(function (item) {
10100	    return item.load();
10101	  }));
10102	}
10103	function mergeExports(exports) {
10104	  return exports.reduce(function (acc, currentExports) {
10105	    if (Type.isObject(currentExports)) {
10106	      return babelHelpers.objectSpread({}, currentExports);
10107	    }
10108
10109	    return currentExports;
10110	  }, {});
10111	}
10112	function inlineScripts(acc, item) {
10113	  if (item.isInternal) {
10114	    acc.push(item.JS);
10115	  }
10116
10117	  return acc;
10118	}
10119	function externalScripts(acc, item) {
10120	  if (!item.isInternal) {
10121	    acc.push(item.JS);
10122	  }
10123
10124	  return acc;
10125	}
10126	function externalStyles(acc, item) {
10127	  if (Type.isString(item) && item !== '') {
10128	    acc.push(item);
10129	  }
10130
10131	  return acc;
10132	}
10133	function request(options) {
10134	  return new Promise(function (resolve) {
10135	    // eslint-disable-next-line
10136	    BX.ajax.runAction(ajaxController, {
10137	      data: options
10138	    }).then(resolve);
10139	  });
10140	}
10141	function prepareExtensions(response) {
10142	  if (response.status !== 'success') {
10143	    response.errors.map(console.warn);
10144	    return [];
10145	  }
10146
10147	  return response.data.map(function (item) {
10148	    var initializedExtension = getInitialized(item.extension);
10149
10150	    if (initializedExtension) {
10151	      return initializedExtension;
10152	    }
10153
10154	    initialized[item.extension] = new Extension(item);
10155	    return initialized[item.extension];
10156	  });
10157	}
10158	function loadAll(items) {
10159	  var itemsList = makeIterable(items);
10160
10161	  if (!itemsList.length) {
10162	    return Promise.resolve();
10163	  }
10164
10165	  return new Promise(function (resolve) {
10166	    // eslint-disable-next-line
10167	    BX.load(itemsList, resolve);
10168	  });
10169	}
10170
10171	/**
10172	 * Loads extensions asynchronously
10173	 * @param {string|Array<string>} extension
10174	 * @return {Promise<Array<Extension>>}
10175	 */
10176	function loadExtension(extension) {
10177	  var extensions = makeIterable(extension);
10178	  var isAllInitialized$$1 = isAllInitialized(extensions);
10179
10180	  if (isAllInitialized$$1) {
10181	    var initializedExtensions = extensions.map(getInitialized);
10182	    return loadExtensions(initializedExtensions).then(mergeExports);
10183	  }
10184
10185	  return request({
10186	    extension: extensions
10187	  }).then(prepareExtensions).then(loadExtensions).then(mergeExports);
10188	}
10189
10190	var cloneableTags = ['[object Object]', '[object Array]', '[object RegExp]', '[object Arguments]', '[object Date]', '[object Error]', '[object Map]', '[object Set]', '[object ArrayBuffer]', '[object DataView]', '[object Float32Array]', '[object Float64Array]', '[object Int8Array]', '[object Int16Array]', '[object Int32Array]', '[object Uint8Array]', '[object Uint16Array]', '[object Uint32Array]', '[object Uint8ClampedArray]'];
10191
10192	function isCloneable(value) {
10193	  var isCloneableValue = Type.isObjectLike(value) && cloneableTags.includes(getTag(value));
10194	  return isCloneableValue || Type.isDomNode(value);
10195	}
10196
10197	function internalClone(value, map) {
10198	  if (map.has(value)) {
10199	    return map.get(value);
10200	  }
10201
10202	  if (isCloneable(value)) {
10203	    if (Type.isArray(value)) {
10204	      var cloned = Array.from(value);
10205	      map.set(value, cloned);
10206	      value.forEach(function (item, index) {
10207	        cloned[index] = internalClone(item, map);
10208	      });
10209	      return map.get(value);
10210	    }
10211
10212	    if (Type.isDomNode(value)) {
10213	      return value.cloneNode(true);
10214	    }
10215
10216	    if (Type.isMap(value)) {
10217	      var _result = new Map();
10218
10219	      map.set(value, _result);
10220	      value.forEach(function (item, key) {
10221	        _result.set(internalClone(key, map), internalClone(item, map));
10222	      });
10223	      return _result;
10224	    }
10225
10226	    if (Type.isSet(value)) {
10227	      var _result2 = new Set();
10228
10229	      map.set(value, _result2);
10230	      value.forEach(function (item) {
10231	        _result2.add(internalClone(item, map));
10232	      });
10233	      return _result2;
10234	    }
10235
10236	    if (Type.isDate(value)) {
10237	      return new Date(value);
10238	    }
10239
10240	    if (Type.isRegExp(value)) {
10241	      var regExpFlags = /\w*$/;
10242	      var flags = regExpFlags.exec(value);
10243
10244	      var _result3 = new RegExp(value.source);
10245
10246	      if (flags && Type.isArray(flags)) {
10247	        _result3 = new RegExp(value.source, flags[0]);
10248	      }
10249
10250	      _result3.lastIndex = value.lastIndex;
10251	      return _result3;
10252	    }
10253
10254	    var proto = Object.getPrototypeOf(value);
10255	    var result = Object.assign(Object.create(proto), value);
10256	    map.set(value, result);
10257	    Object.keys(value).forEach(function (key) {
10258	      result[key] = internalClone(value[key], map);
10259	    });
10260	    return result;
10261	  }
10262
10263	  return value;
10264	}
10265	/**
10266	 * Clones any cloneable object
10267	 * @param value
10268	 * @return {*}
10269	 */
10270
10271	function clone(value) {
10272	  return internalClone(value, new WeakMap());
10273	}
10274
10275	function merge(current, target) {
10276	  return Object.entries(target).reduce(function (acc, _ref) {
10277	    var _ref2 = babelHelpers.slicedToArray(_ref, 2),
10278	        key = _ref2[0],
10279	        value = _ref2[1];
10280
10281	    if (!Type.isDomNode(acc[key]) && Type.isObjectLike(acc[key]) && Type.isObjectLike(value)) {
10282	      acc[key] = merge(acc[key], value);
10283	      return acc;
10284	    }
10285
10286	    acc[key] = value;
10287	    return acc;
10288	  }, current);
10289	}
10290
10291	function createComparator(fields) {
10292	  var orders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
10293	  return function (a, b) {
10294	    var field = fields[0];
10295	    var order = orders[0] || 'asc';
10296
10297	    if (Type.isUndefined(field)) {
10298	      return 0;
10299	    }
10300
10301	    var valueA = a[field];
10302	    var valueB = b[field];
10303
10304	    if (Type.isString(valueA) && Type.isString(valueB)) {
10305	      valueA = valueA.toLowerCase();
10306	      valueB = valueB.toLowerCase();
10307	    }
10308
10309	    if (valueA < valueB) {
10310	      return order === 'asc' ? -1 : 1;
10311	    }
10312
10313	    if (valueA > valueB) {
10314	      return order === 'asc' ? 1 : -1;
10315	    }
10316
10317	    return createComparator(fields.slice(1), orders.slice(1))(a, b);
10318	  };
10319	}
10320
10321	/**
10322	 * @memberOf BX
10323	 */
10324
10325	var Runtime = /*#__PURE__*/function () {
10326	  function Runtime() {
10327	    babelHelpers.classCallCheck(this, Runtime);
10328	  }
10329
10330	  babelHelpers.createClass(Runtime, null, [{
10331	    key: "debounce",
10332	    value: function debounce(func) {
10333	      var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
10334	      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
10335	      var timeoutId;
10336	      return function debounced() {
10337	        var _this = this;
10338
10339	        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
10340	          args[_key] = arguments[_key];
10341	        }
10342
10343	        if (Type.isNumber(timeoutId)) {
10344	          clearTimeout(timeoutId);
10345	        }
10346
10347	        timeoutId = setTimeout(function () {
10348	          func.apply(context || _this, args);
10349	        }, wait);
10350	      };
10351	    }
10352	  }, {
10353	    key: "throttle",
10354	    value: function throttle(func) {
10355	      var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
10356	      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
10357	      var timer = 0;
10358	      var invoke;
10359	      return function wrapper() {
10360	        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
10361	          args[_key2] = arguments[_key2];
10362	        }
10363
10364	        invoke = true;
10365
10366	        if (!timer) {
10367	          var q = function q() {
10368	            if (invoke) {
10369	              func.apply(context || this, args);
10370	              invoke = false;
10371	              timer = setTimeout(q, wait);
10372	            } else {
10373	              timer = null;
10374	            }
10375	          };
10376
10377	          q();
10378	        }
10379	      };
10380	    }
10381	  }, {
10382	    key: "html",
10383	    value: function html(node, _html) {
10384	      var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
10385
10386	      if (Type.isNil(_html) && Type.isDomNode(node)) {
10387	        return node.innerHTML;
10388	      } // eslint-disable-next-line
10389
10390
10391	      var parsedHtml = BX.processHTML(_html);
10392	      var externalCss = parsedHtml.STYLE.reduce(externalStyles, []);
10393	      var externalJs = parsedHtml.SCRIPT.reduce(externalScripts, []);
10394	      var inlineJs = parsedHtml.SCRIPT.reduce(inlineScripts, []);
10395
10396	      if (Type.isDomNode(node)) {
10397	        if (params.htmlFirst || !externalJs.length && !externalCss.length) {
10398	          if (params.useAdjacentHTML) {
10399	            node.insertAdjacentHTML('beforeend', parsedHtml.HTML);
10400	          } else {
10401	            node.innerHTML = parsedHtml.HTML;
10402	          }
10403	        }
10404	      }
10405
10406	      return Promise.all([loadAll(externalJs), loadAll(externalCss)]).then(function () {
10407	        if (Type.isDomNode(node) && (externalJs.length > 0 || externalCss.length > 0)) {
10408	          if (params.useAdjacentHTML) {
10409	            node.insertAdjacentHTML('beforeend', parsedHtml.HTML);
10410	          } else {
10411	            node.innerHTML = parsedHtml.HTML;
10412	          }
10413	        } // eslint-disable-next-line
10414
10415
10416	        inlineJs.forEach(function (script) {
10417	          return BX.evalGlobal(script);
10418	        });
10419
10420	        if (Type.isFunction(params.callback)) {
10421	          params.callback();
10422	        }
10423	      });
10424	    }
10425	    /**
10426	     * Merges objects or arrays
10427	     * @param targets
10428	     * @return {any}
10429	     */
10430
10431	  }, {
10432	    key: "merge",
10433	    value: function merge$$1() {
10434	      for (var _len3 = arguments.length, targets = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
10435	        targets[_key3] = arguments[_key3];
10436	      }
10437
10438	      if (Type.isArray(targets[0])) {
10439	        targets.unshift([]);
10440	      } else if (Type.isObject(targets[0])) {
10441	        targets.unshift({});
10442	      }
10443
10444	      return targets.reduce(function (acc, item) {
10445	        return merge(acc, item);
10446	      }, targets[0]);
10447	    }
10448	  }, {
10449	    key: "orderBy",
10450	    value: function orderBy(collection) {
10451	      var fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
10452	      var orders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
10453	      var comparator = createComparator(fields, orders);
10454	      return Object.values(collection).sort(comparator);
10455	    }
10456	  }, {
10457	    key: "destroy",
10458	    value: function destroy(target) {
10459	      var errorMessage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Object is destroyed';
10460
10461	      if (Type.isObject(target)) {
10462	        var onPropertyAccess = function onPropertyAccess() {
10463	          throw new Error(errorMessage);
10464	        };
10465
10466	        var ownProperties = Object.keys(target);
10467
10468	        var prototypeProperties = function () {
10469	          var targetPrototype = Object.getPrototypeOf(target);
10470
10471	          if (Type.isObject(targetPrototype)) {
10472	            return Object.getOwnPropertyNames(targetPrototype);
10473	          }
10474
10475	          return [];
10476	        }();
10477
10478	        var uniquePropertiesList = babelHelpers.toConsumableArray(new Set([].concat(babelHelpers.toConsumableArray(ownProperties), babelHelpers.toConsumableArray(prototypeProperties))));
10479	        uniquePropertiesList.filter(function (name) {
10480	          var descriptor = Object.getOwnPropertyDescriptor(target, name);
10481	          return !/__(.+)__/.test(name) && (!Type.isObject(descriptor) || descriptor.configurable === true);
10482	        }
10482).forEach(function (name) {
10483	          Object.defineProperty(target, name, {
10484	            get: onPropertyAccess,
10485	            set: onPropertyAccess,
10486	            configurable: false
10487	          });
10488	        });
10489	        Object.setPrototypeOf(target, null);
10490	      }
10491	    }
10492	  }]);
10493	  return Runtime;
10494	}();
10495
10496	babelHelpers.defineProperty(Runtime, "debug", debug);
10497	babelHelpers.defineProperty(Runtime, "loadExtension", loadExtension);
10498	babelHelpers.defineProperty(Runtime, "clone", clone);
10499
10500	var _isError = Symbol.for('BX.BaseError.isError');
10501	/**
10502	 * @memberOf BX
10503	 */
10504
10505
10506	var BaseError = /*#__PURE__*/function () {
10507	  function BaseError(message, code, customData) {
10508	    babelHelpers.classCallCheck(this, BaseError);
10509	    this[_isError] = true;
10510	    this.message = '';
10511	    this.code = null;
10512	    this.customData = null;
10513	    this.setMessage(message);
10514	    this.setCode(code);
10515	    this.setCustomData(customData);
10516	  }
10517	  /**
10518	   * Returns a brief description of the error
10519	   * @returns {string}
10520	   */
10521
10522
10523	  babelHelpers.createClass(BaseError, [{
10524	    key: "getMessage",
10525	    value: function getMessage() {
10526	      return this.message;
10527	    }
10528	    /**
10529	     * Sets a message of the error
10530	     * @param {string} message
10531	     * @returns {this}
10532	     */
10533
10534	  }, {
10535	    key: "setMessage",
10536	    value: function setMessage(message) {
10537	      if (Type.isString(message)) {
10538	        this.message = message;
10539	      }
10540
10541	      return this;
10542	    }
10543	    /**
10544	     * Returns a code of the error
10545	     * @returns {?string}
10546	     */
10547
10548	  }, {
10549	    key: "getCode",
10550	    value: function getCode() {
10551	      return this.code;
10552	    }
10553	    /**
10554	     * Sets a code of the error
10555	     * @param {string} code
10556	     * @returns {this}
10557	     */
10558
10559	  }, {
10560	    key: "setCode",
10561	    value: function setCode(code) {
10562	      if (Type.isStringFilled(code) || code === null) {
10563	        this.code = code;
10564	      }
10565
10566	      return this;
10567	    }
10568	    /**
10569	     * Returns custom data of the error
10570	     * @returns {null|*}
10571	     */
10572
10573	  }, {
10574	    key: "getCustomData",
10575	    value: function getCustomData() {
10576	      return this.customData;
10577	    }
10578	    /**
10579	     * Sets custom data of the error
10580	     * @returns {this}
10581	     */
10582
10583	  }, {
10584	    key: "setCustomData",
10585	    value: function setCustomData(customData) {
10586	      if (!Type.isUndefined(customData)) {
10587	        this.customData = customData;
10588	      }
10589
10590	      return this;
10591	    }
10592	  }, {
10593	    key: "toString",
10594	    value: function toString() {
10595	      var code = this.getCode();
10596	      var message = this.getMessage();
10597
10598	      if (!Type.isStringFilled(code) && !Type.isStringFilled(message)) {
10599	        return '';
10600	      } else if (!Type.isStringFilled(code)) {
10601	        return "Error: ".concat(message);
10602	      } else if (!Type.isStringFilled(message)) {
10603	        return code;
10604	      } else {
10605	        return "".concat(code, ": ").concat(message);
10606	      }
10607	    }
10608	    /**
10609	     * Returns true if the object is an instance of BaseError
10610	     * @param error
10611	     * @returns {boolean}
10612	     */
10613
10614	  }], [{
10615	    key: "isError",
10616	    value: function isError(error) {
10617	      return Type.isObject(error) && error[_isError] === true;
10618	    }
10619	  }]);
10620	  return BaseError;
10621	}();
10622
10623	/**
10624	 * Implements base event object interface
10625	 */
10626
10627	var BaseEvent = /*#__PURE__*/function () {
10628	  function BaseEvent() {
10629	    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
10630	      data: {}
10631	    };
10632	    babelHelpers.classCallCheck(this, BaseEvent);
10633	    this.type = '';
10634	    this.data = null;
10635	    this.target = null;
10636	    this.compatData = null;
10637	    this.defaultPrevented = false;
10638	    this.immediatePropagationStopped = false;
10639	    this.errors = [];
10640	    this.setData(options.data);
10641	    this.setCompatData(options.compatData);
10642	  }
10643
10644	  babelHelpers.createClass(BaseEvent, [{
10645	    key: "getType",
10646
10647	    /**
10648	     * Returns the name of the event
10649	     * @returns {string}
10650	     */
10651	    value: function getType() {
10652	      return this.type;
10653	    }
10654	    /**
10655	     *
10656	     * @param {string} type
10657	     */
10658
10659	  }, {
10660	    key: "setType",
10661	    value: function setType(type) {
10662	      if (Type.isStringFilled(type)) {
10663	        this.type = type;
10664	      }
10665
10666	      return this;
10667	    }
10668	    /**
10669	     * Returns an event data
10670	     */
10671
10672	  }, {
10673	    key: "getData",
10674	    value: function getData() {
10675	      return this.data;
10676	    }
10677	    /**
10678	     * Sets an event data
10679	     * @param data
10680	     */
10681
10682	  }, {
10683	    key: "setData",
10684	    value: function setData(data) {
10685	      if (!Type.isUndefined(data)) {
10686	        this.data = data;
10687	      }
10688
10689	      return this;
10690	    }
10691	    /**
10692	     * Returns arguments for BX.addCustomEvent handlers (deprecated).
10693	     * @returns {array | null}
10694	     */
10695
10696	  }, {
10697	    key: "getCompatData",
10698	    value: function getCompatData() {
10699	      return this.compatData;
10700	    }
10701	    /**
10702	     * Sets arguments for BX.addCustomEvent handlers (deprecated)
10703	     * @param data
10704	     */
10705
10706	  }, {
10707	    key: "setCompatData",
10708	    value: function setCompatData(data) {
10709	      if (Type.isArrayLike(data)) {
10710	        this.compatData = data;
10711	      }
10712
10713	      return this;
10714	    }
10715	    /**
10716	     * Sets a event target
10717	     * @param target
10718	     */
10719
10720	  }, {
10721	    key: "setTarget",
10722	    value: function setTarget(target) {
10723	      this.target = target;
10724	      return this;
10725	    }
10726	    /**
10727	     * Returns a event target
10728	     */
10729
10730	  }, {
10731	    key: "getTarget",
10732	    value: function getTarget() {
10733	      return this.target;
10734	    }
10735	    /**
10736	     * Returns an array of event errors
10737	     * @returns {[]}
10738	     */
10739
10740	  }, {
10741	    key: "getErrors",
10742	    value: function getErrors() {
10743	      return this.errors;
10744	    }
10745	    /**
10746	     * Adds an error of the event.
10747	     * Event listeners can prevent emitter's default action and set the reason of this behavior.
10748	     * @param error
10749	     */
10750
10751	  }, {
10752	    key: "setError",
10753	    value: function setError(error) {
10754	      if (BaseError.isError(error)) {
10755	        this.errors.push(error);
10756	      }
10757	    }
10758	    /**
10759	     * Prevents default action
10760	     */
10761
10762	  }, {
10763	    key: "preventDefault",
10764	    value: function preventDefault() {
10765	      this.defaultPrevented = true;
10766	    }
10767	    /**
10768	     * Checks that is default action prevented
10769	     * @return {boolean}
10770	     */
10771
10772	  }, {
10773	    key: "isDefaultPrevented",
10774	    value: function isDefaultPrevented() {
10775	      return this.defaultPrevented;
10776	    }
10777	    /**
10778	     * Stops event immediate propagation
10779	     */
10780
10781	  }, {
10782	    key: "stopImmediatePropagation",
10783	    value: function stopImmediatePropagation() {
10784	      this.immediatePropagationStopped = true;
10785	    }
10786	    /**
10787	     * Checks that is immediate propagation stopped
10788	     * @return {boolean}
10789	     */
10790
10791	  }, {
10792	    key: "isImmediatePropagationStopped",
10793	    value: function isImmediatePropagationStopped() {
10794	      return this.immediatePropagationStopped;
10795	    }
10796	  }], [{
10797	    key: "create",
10798	    value: function create(options) {
10799	      return new this(options);
10800	    }
10801	  }]);
10802	  return BaseEvent;
10803	}();
10804
10805	var EventStore = /*#__PURE__*/function () {
10806	  function EventStore() {
10807	    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
10808	    babelHelpers.classCallCheck(this, EventStore);
10809	    this.defaultMaxListeners = Type.isNumber(options.defaultMaxListeners) ? options.defaultMaxListeners : 10;
10810	    this.eventStore = new WeakMap();
10811	  }
10812
10813	  babelHelpers.createClass(EventStore, [{
10814	    key: "add",
10815	    value: function add(target) {
10816	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
10817	      var record = this.getRecordScheme();
10818
10819	      if (Type.isNumber(options.maxListeners)) {
10820	        record.maxListeners = options.maxListeners;
10821	      }
10822
10823	      this.eventStore.set(target, record);
10824	      return record;
10825	    }
10826	  }, {
10827	    key: "get",
10828	    value: function get(target) {
10829	      return this.eventStore.get(target);
10830	    }
10831	  }, {
10832	    key: "getOrAdd",
10833	    value: function getOrAdd(target) {
10834	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
10835	      return this.get(target) || this.add(target, options);
10836	    }
10837	  }, {
10838	    key: "delete",
10839	    value: function _delete(context) {
10840	      this.eventStore.delete(context);
10841	    }
10842	  }, {
10843	    key: "getRecordScheme",
10844	    value: function getRecordScheme() {
10845	      return {
10846	        eventsMap: new Map(),
10847	        onceMap: new Map(),
10848	        maxListeners: this.getDefaultMaxListeners(),
10849	        eventsMaxListeners: new Map()
10850	      };
10851	    }
10852	  }, {
10853	    key: "getDefaultMaxListeners",
10854	    value: function getDefaultMaxListeners() {
10855	      return this.defaultMaxListeners;
10856	    }
10857	  }]);
10858	  return EventStore;
10859	}();
10860
10861	var WarningStore = /*#__PURE__*/function () {
10862	  function WarningStore() {
10863	    babelHelpers.classCallCheck(this, WarningStore);
10864	    this.warnings = new Map();
10865	    this.printDelayed = Runtime.debounce(this.print.bind(this), 500);
10866	  }
10867
10868	  babelHelpers.createClass(WarningStore, [{
10869	    key: "add",
10870	    value: function add(target, eventName, listeners) {
10871	      var contextWarnings = this.warnings.get(target);
10872
10873	      if (!contextWarnings) {
10874	        contextWarnings = Object.create(null);
10875	        this.warnings.set(target, contextWarnings);
10876	      }
10877
10878	      if (!contextWarnings[eventName]) {
10879	        contextWarnings[eventName] = {};
10880	      }
10881
10882	      contextWarnings[eventName].size = listeners.size;
10883
10884	      if (!Type.isArray(contextWarnings[eventName].errors)) {
10885	        contextWarnings[eventName].errors = [];
10886	      }
10887
10888	      contextWarnings[eventName].errors.push(new Error());
10889	    }
10890	  }, {
10891	    key: "print",
10892	    value: function print() {
10893	      this.warnings.forEach(function (warnings) {
10894	        for (var eventName in warnings) {
10895	          console.groupCollapsed('Possible BX.Event.EventEmitter memory leak detected. ' + warnings[eventName].size + ' "' + eventName + '" listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.');
10896	          console.dir(warnings[eventName].errors);
10897	          console.groupEnd();
10898	        }
10899	      });
10900	      this.clear();
10901	    }
10902	  }, {
10903	    key: "clear",
10904	    value: function clear() {
10905	      this.warnings.clear();
10906	    }
10907	  }, {
10908	    key: "printDelayed",
10909	    value: function printDelayed() {}
10910	  }]);
10911	  return WarningStore;
10912	}();
10913
10914	var eventStore = new EventStore({
10915	  defaultMaxListeners: 10
10916	});
10917	var warningStore = new WarningStore();
10918	var aliasStore = new Map();
10919	var globalTarget = {
10920	  GLOBAL_TARGET: 'GLOBAL_TARGET' // this key only for debugging purposes
10921
10922	};
10923	eventStore.add(globalTarget, {
10924	  maxListeners: 25
10925	});
10926	var isEmitterProperty = Symbol.for('BX.Event.EventEmitter.isEmitter');
10927	var namespaceProperty = Symbol('namespaceProperty');
10928	var targetProperty = Symbol('targetProperty');
10929
10930	var EventEmitter = /*#__PURE__*/function () {
10931	  /** @private */
10932	  function EventEmitter() {
10933	    var _this = this;
10934
10935	    babelHelpers.classCallCheck(this, EventEmitter);
10936	    this[targetProperty] = null;
10937	    this[namespaceProperty] = null;
10938	    this[isEmitterProperty] = true;
10939	    var target = this;
10940
10941	    if (Object.getPrototypeOf(this) === EventEmitter.prototype && arguments.length > 0) //new EventEmitter(obj) case
10942	      {
10943	        if (!Type.isObject(arguments.length <= 0 ? undefined : arguments[0])) {
10944	          throw new TypeError("The \"target\" argument must be an object.");
10945	        }
10946
10947	        target = arguments.length <= 0 ? undefined : arguments[0];
10948	        this.setEventNamespace(arguments.length <= 1 ? undefined : arguments[1]);
10949	      }
10950
10951	    this[targetProperty] = target;
10952	    setTimeout(function () {
10953	      if (_this.getEventNamespace() === null) {
10954	        console.warn('The instance of BX.Event.EventEmitter is supposed to have an event namespace. ' + 'Use emitter.setEventNamespace() to make events more unique.');
10955	      }
10956	    }, 500);
10957	  }
10958	  /**
10959	   * Makes a target observable
10960	   * @param {object} target
10961	   * @param {string} namespace
10962	   */
10963
10964
10965	  babelHelpers.createClass(EventEmitter, [{
10966	    key: "setEventNamespace",
10967	    value: function setEventNamespace(namespace) {
10968	      if (Type.isStringFilled(namespace)) {
10969	        this[namespaceProperty] = namespace;
10970	      }
10971	    }
10972	  }, {
10973	    key: "getEventNamespace",
10974	    value: function getEventNamespace() {
10975	      return this[namespaceProperty];
10976	    }
10977	    /**
10978	     * Subscribes listener on specified global event
10979	     * @param {object} target
10980	     * @param {string} eventName
10981	     * @param {Function<BaseEvent>} listener
10982	     * @param {object} options
10983	     */
10984
10985	  }, {
10986	    key: "subscribe",
10987
10988	    /**
10989	     * Subscribes a listener on a specified event
10990	     * @param {string} eventName
10991	     * @param {Function<BaseEvent>} listener
10992	     * @return {this}
10993	     */
10994	    value: function subscribe(eventName, listener) {
10995	      EventEmitter.subscribe(this, eventName, listener);
10996	      return this;
10997	    }
10998	    /**
10999	     *
11000	     * @param {object} options
11001	     * @param {object} [aliases]
11002	     * @param {boolean} [compatMode=false]
11003	     */
11004
11005	  }, {
11006	    key: "subscribeFromOptions",
11007	    value: function subscribeFromOptions(options, aliases, compatMode) {
11008	      var _this2 = this;
11009
11010	      if (!Type.isPlainObject(options)) {
11011	        return;
11012	      }
11013
11014	      aliases = Type.isPlainObject(aliases) ? EventEmitter.normalizeAliases(aliases) : {};
11015	      Object.keys(options).forEach(function (eventName) {
11016	        var listener = options[eventName];
11017
11018	        if (!Type.isFunction(listener)) {
11019	          throw new TypeError("The \"listener\" argument must be of type Function. Received type ".concat(babelHelpers.typeof(listener), "."));
11020	        }
11021
11022	        eventName = EventEmitter.normalizeEventName(eventName);
11023
11024	        if (aliases[eventName]) {
11025	          var actualName = aliases[eventName].eventName;
11026	          EventEmitter.subscribe(_this2, actualName, listener, {
11027	            compatMode: compatMode !== false
11028	          });
11029	        } else {
11030	          EventEmitter.subscribe(_this2, eventName, listener, {
11031	            compatMode: compatMode === true
11032	          });
11033	        }
11034	      });
11035	    }
11036	    /**
11037	     * Subscribes a listener that is called at
11038	     * most once for a specified event.
11039	     * @param {object} target
11040	     * @param {string} eventName
11041	     * @param {Function<BaseEvent>} listener
11042	     */
11043
11044	  }, {
11045	    key: "subscribeOnce",
11046
11047	    /**
11048	     * Subscribes a listener that is called at most once for a specified event.
11049	     * @param {string} eventName
11050	     * @param {Function<BaseEvent>} listener
11051	     * @return {this}
11052	     */
11053	    value: function subscribeOnce(eventName, listener) {
11054	      EventEmitter.subscribeOnce(this, eventName, listener);
11055	      return this;
11056	    }
11057	    /**
11058	     * Unsubscribes an event listener
11059	     * @param {object} target
11060	     * @param {string} eventName
11061	     * @param {Function<BaseEvent>} listener
11062	     * @param options
11063	     */
11064
11065	  }, {
11066	    key: "unsubscribe",
11067
11068	    /**
11069	     * Unsubscribes an event listener
11070	     * @param {string} eventName
11071	     * @param {Function<BaseEvent>} listener
11072	     * @return {this}
11073	     */
11074	    value: function unsubscribe(eventName, listener) {
11075	      EventEmitter.unsubscribe(this, eventName, listener);
11076	      return this;
11077	    }
11078	    /**
11079	     * Unsubscribes all event listeners
11080	     * @param {object} target
11081	     * @param {string} eventName
11082	     * @param options
11083	     */
11084
11085	  }, {
11086	    key: "unsubscribeAll",
11087
11088	    /**
11089	     * Unsubscribes all event listeners
11090	     * @param {string} [eventName]
11091	     */
11092	    value: function unsubscribeAll(eventName) {
11093	      EventEmitter.unsubscribeAll(this, eventName);
11094	    }
11095	    /**
11096	     *
11097	     * @param {object} target
11098	     * @param {string} eventName
11099	     * @param {BaseEvent | any} event
11100	     * @param {object} options
11101	     * @returns {Array}
11102	     */
11103
11104	  }, {
11105	    key: "emit",
11106
11107	    /**
11108	     * Emits specified event with specified event object
11109	     * @param {string} eventName
11110	     * @param {BaseEvent | any} event
11111	     * @return {this}
11112	     */
11113	    value: function emit(eventName, event) {
11114	      EventEmitter.emit(this, eventName, event);
11115	      return this;
11116	    }
11117	    /**
11118	     * Emits global event and returns a promise that is resolved when
11119	     * all promise returned from event handlers are resolved,
11120	     * or rejected when at least one of the returned promise is rejected.
11121	     * Importantly. You can return any value from synchronous handlers, not just promise
11122	     * @param {object} target
11123	     * @param {string} eventName
11124	     * @param {BaseEvent | any} event
11125	     * @return {Promise<Array>}
11126	     */
11127
11128	  }, {
11129	    key: "emitAsync",
11130
11131	    /**
11132	     * Emits event and returns a promise that is resolved when
11133	     * all promise returned from event handlers are resolved,
11134	     * or rejected when at least one of the returned promise is rejected.
11135	     * Importantly. You can return any value from synchronous handlers, not just promise
11136	     * @param {string} eventName
11137	     * @param {BaseEvent|any} event
11138	     * @return {Promise<Array>}
11139	     */
11140	    value: function emitAsync(eventName, event) {
11141	      return EventEmitter.emitAsync(this, eventName, event);
11142	    }
11143	    /**
11144	     * @private
11145	     * @param {object} target
11146	     * @param {string} eventName
11147	     * @param {BaseEvent|any} event
11148	     * @returns {BaseEvent}
11149	     */
11150
11151	  }, {
11152	    key: "setMaxListeners",
11153
11154	    /**
11155	     * Sets max events listeners count
11156	     * this.setMaxListeners(10) - sets the default value for all events
11157	     * this.setMaxListeners("onClose", 10) sets the value for onClose event
11158	     * @return {this}
11159	     * @param args
11160	     */
11161	    value: function setMaxListeners() {
11162	      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
11163	        args[_key] = arguments[_key];
11164	      }
11165
11166	      EventEmitter.setMaxListeners.apply(EventEmitter, [this].concat(args));
11167	      return this;
11168	    }
11169	    /**
11170	     * Returns max event listeners count
11171	     * @param {object} target
11172	     * @param {string} [eventName]
11173	     * @returns {number}
11174	     */
11175
11176	  }, {
11177	    key: "getMaxListeners",
11178
11179	    /**
11180	     * Returns max event listeners count
11181	     * @param {string} [eventName]
11182	     * @returns {number}
11183	     */
11184	    value: function getMaxListeners(eventName) {
11185	      return EventEmitter.getMaxListeners(this, eventName);
11186	    }
11187	    /**
11188	     * Adds or subtracts max listeners count
11189	     * Event.EventEmitter.addMaxListeners() - adds one max listener for all events of global target
11190	     * Event.EventEmitter.addMaxListeners(3) - adds three max listeners for all events of global target
11191	     * Event.EventEmitter.addMaxListeners(-1) - subtracts one max listener for all events of global target
11192	     * Event.EventEmitter.addMaxListeners('onClose') - adds one max listener for onClose event of global target
11193	     * Event.EventEmitter.addMaxListeners('onClose', 2) - adds two max listeners for onClose event of global target
11194	     * Event.EventEmitter.addMaxListeners('onClose', -1) - subtracts one max listener for onClose event of global target
11195	     *
11196	     * Event.EventEmitter.addMaxListeners(obj) - adds one max listener for all events of 'obj' target
11197	     * Event.EventEmitter.addMaxListeners(obj, 3) - adds three max listeners for all events of 'obj' target
11198	     * Event.EventEmitter.addMaxListeners(obj, -1) - subtracts one max listener for all events of 'obj' target
11199	     * Event.EventEmitter.addMaxListeners(obj, 'onClose') - adds one max listener for onClose event of 'obj' target
11200	     * Event.EventEmitter.addMaxListeners(obj, 'onClose', 2) - adds two max listeners for onClose event of 'obj' target
11201	     * Event.EventEmitter.addMaxListeners(obj, 'onClose', -1) - subtracts one max listener for onClose event of 'obj' target
11202	     * @param args
11203	     * @returns {number}
11204	     */
11205
11206	  }, {
11207	    key: "incrementMaxListeners",
11208
11209	    /**
11210	     * Increases max listeners count
11211	     * this.incrementMaxListeners() - adds one max listener for all events
11212	     * this.incrementMaxListeners(3) - adds three max listeners for all events
11213	     * this.incrementMaxListeners('onClose') - adds one max listener for onClose event
11214	     * this.incrementMaxListeners('onClose', 2) - adds two max listeners for onClose event
11215	     */
11216	    value: function incrementMaxListeners() {
11217	      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
11218	        args[_key2] = arguments[_key2];
11219	      }
11220
11221	      return EventEmitter.incrementMaxListeners.apply(EventEmitter, [this].concat(args));
11222	    }
11223	    /**
11224	     * Decreases max listeners count
11225	     *
11226	     * Event.EventEmitter.decrementMaxListeners() - subtracts one max listener for all events of global target
11227	     * Event.EventEmitter.decrementMaxListeners(3) - subtracts three max listeners for all events of global target
11228	     * Event.EventEmitter.decrementMaxListeners('onClose') - subtracts one max listener for onClose event of global target
11229	     * Event.EventEmitter.decrementMaxListeners('onClose', 2) - subtracts two max listeners for onClose event of global target
11230	     *
11231	     * Event.EventEmitter.decrementMaxListeners(obj) - subtracts one max listener for all events of 'obj' target
11232	     * Event.EventEmitter.decrementMaxListeners(obj, 3) - subtracts three max listeners for all events of 'obj' target
11233	     * Event.EventEmitter.decrementMaxListeners(obj, 'onClose') - subtracts one max listener for onClose event of 'obj' target
11234	     * Event.EventEmitter.decrementMaxListeners(obj, 'onClose', 2) - subtracts two max listeners for onClose event of 'obj' target
11235	     */
11236
11237	  }, {
11238	    key: "decrementMaxListeners",
11239
11240	    /**
11241	     * Increases max listeners count
11242	     * this.decrementMaxListeners() - subtracts one max listener for all events
11243	     * this.decrementMaxListeners(3) - subtracts three max listeners for all events
11244	     * this.decrementMaxListeners('onClose') - subtracts one max listener for onClose event
11245	     * this.decrementMaxListeners('onClose', 2) - subtracts two max listeners for onClose event
11246	     */
11247	    value: function decrementMaxListeners() {
11248	      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
11249	        args[_key3] = arguments[_key3];
11250	      }
11251
11252	      return EventEmitter.decrementMaxListeners.apply(EventEmitter, [this].concat(args));
11253	    }
11254	    /**
11255	     * @private
11256	     * @param {Array} args
11257	     * @returns Array
11258	     */
11259
11260	  }, {
11261	    key: "getListeners",
11262
11263	    /**
11264	     * Gets listeners list for specified event
11265	     * @param {string} eventName
11266	     */
11267	    value: function getListeners(eventName) {
11268	      return EventEmitter.getListeners(this, eventName);
11269	    }
11270	    /**
11271	     * Returns a full event name with namespace
11272	     * @param {string} eventName
11273	     * @returns {string}
11274	     */
11275
11276	  }, {
11277	    key: "getFullEventName",
11278	    value: function getFullEventName(eventName) {
11279	      if (!Type.isStringFilled(eventName)) {
11280	        throw new TypeError("The \"eventName\" argument must be a string.");
11281	      }
11282
11283	      return EventEmitter.makeFullEventName(this.getEventNamespace(), eventName);
11284	    }
11285	    /**
11286	     * Registers aliases (old event names for BX.onCustomEvent)
11287	     * @param aliases
11288	     */
11289
11290	  }], [{
11291	    key: "makeObservable",
11292	    value: function makeObservable(target, namespace) {
11293	      if (!Type.isObject(target)) {
11294	        throw new TypeError('The "target" argument must be an object.');
11295	      }
11296
11297	      if (!Type.isStringFilled(namespace)) {
11298	        throw new TypeError('The "namespace" must be an non-empty string.');
11299	      }
11300
11301	      if (EventEmitter.isEventEmitter(target)) {
11302	        throw new TypeError('The "target" is an event emitter already.');
11303	      }
11304
11305	      var targetProto = Object.getPrototypeOf(target);
11306	      var emitter = new EventEmitter();
11307	      emitter.setEventNamespace(namespace);
11308	      Object.setPrototypeOf(emitter, targetProto);
11309	      Object.setPrototypeOf(target, emitter);
11310	      Object.getOwnPropertyNames(EventEmitter.prototype).forEach(function (method) {
11311	        if (['constructor'].includes(method)) {
11312	          return;
11313	        }
11314
11315	        emitter[method] = function () {
11316	          for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
11317	            args[_key4] = arguments[_key4];
11318	          }
11319
11320	          return EventEmitter.prototype[method].apply(target, args);
11321	        };
11322	      });
11323	    }
11324	  }, {
11325	    key: "subscribe",
11326	    value: function subscribe(target, eventName, listener, options) {
11327	      if (Type.isString(target)) {
11328	        options = listener;
11329	        listener = eventName;
11330	        eventName = target;
11331	        target = this.GLOBAL_TARGET;
11332	      }
11333
11334	      if (!Type.isObject(target)) {
11335	        throw new TypeError("The \"target\" argument must be an object.");
11336	      }
11337
11338	      eventName = this.normalizeEventName(eventName);
11339
11340	      if (!Type.isStringFilled(eventName)) {
11341	        throw new TypeError("The \"eventName\" argument must be a string.");
11342	      }
11343
11344	      if (!Type.isFunction(listener)) {
11345	        throw new TypeError("The \"listener\" argument must be of type Function. Received type ".concat(babelHelpers.typeof(listener), "."));
11346	      }
11347
11348	      options = Type.isPlainObject(options) ? options : {};
11349	      var fullEventName = this.resolveEventName(eventName, target, options.useGlobalNaming === true);
11350
11351	      var _eventStore$getOrAdd = eventStore.getOrAdd(target),
11352	          eventsMap = _eventStore$getOrAdd.eventsMap,
11353	          onceMap = _eventStore$getOrAdd.onceMap;
11354
11355	      var onceListeners = onceMap.get(fullEventName);
11356	      var listeners = eventsMap.get(fullEventName);
11357
11358	      if (listeners && listeners.has(listener) || onceListeners && onceListeners.has(listener)) {
11359	        console.error("You cannot subscribe the same \"".concat(fullEventName, "\" event listener twice."));
11360	      } else {
11361	        if (listeners) {
11362	          listeners.set(listener, {
11363	            listener: listener,
11364	            options: options,
11365	            sort: this.getNextSequenceValue()
11366	          });
11367	        } else {
11368	          listeners = new Map([[listener, {
11369	            listener: listener,
11370	            options: options,
11371	            sort: this.getNextSequenceValue()
11372	          }]]);
11373	          eventsMap.set(fullEventName, listeners);
11374	        }
11375	      }
11376
11377	      var maxListeners = this.getMaxListeners(target, eventName);
11378
11379	      if (listeners.size > maxListeners) {
11380	        warningStore.add(target, fullEventName, listeners);
11381	        warningStore.printDelayed();
11382	      }
11383	    }
11384	  }, {
11385	    key: "subscribeOnce",
11386	    value: function subscribeOnce(target, eventName, listener) {
11387	      var _this3 = this;
11388
11389	      if (Type.isString(target)) {
11390	        listener = eventName;
11391	        eventName = target;
11392	        target = this.GLOBAL_TARGET;
11393	      }
11394
11395	      if (!Type.isObject(target)) {
11396	        throw new TypeError("The \"target\" argument must be an object.");
11397	      }
11398
11399	      eventName = this.normalizeEventName(eventName);
11400
11401	      if (!Type.isStringFilled(eventName)) {
11402	        throw new TypeError("The \"eventName\" argument must be a string.");
11403	      }
11404
11405	      if (!Type.isFunction(listener)) {
11406	        throw new TypeError("The \"listener\" argument must be of type Function. Received type ".concat(babelHelpers.typeof(listener), "."));
11407	      }
11408
11409	      var fullEventName = this.resolveEventName(eventName, target);
11410
11411	      var _eventStore$getOrAdd2 = eventStore.getOrAdd(target),
11412	          eventsMap = _eventStore$getOrAdd2.eventsMap,
11413	          onceMap = _eventStore$getOrAdd2.onceMap;
11414
11415	      var listeners = eventsMap.get(fullEventName);
11416	      var onceListeners = onceMap.get(fullEventName);
11417
11418	      if (listeners && listeners.has(listener) || onceListeners && onceListeners.has(listener)) {
11419	        console.error("You cannot subscribe the same \"".concat(fullEventName, "\" event listener twice."));
11420	      } else {
11421	        var once = function once() {
11422	          _this3.unsubscribe(target, eventName, once);
11423
11424	          onceListeners.delete(listener);
11425	          listener.apply(void 0, arguments);
11426	        };
11427
11428	        if (onceListeners) {
11429	          onceListeners.set(listener, once);
11430	        } else {
11431	          onceListeners = new Map([[listener, once]]);
11432	          onceMap.set(fullEventName, onceListeners);
11433	        }
11434
11435	        this.subscribe(target, eventName, once);
11436	      }
11437	    }
11438	  }, {
11439	    key: "unsubscribe",
11440	    value: function unsubscribe(target, eventName, listener, options) {
11441	      if (Type.isString(target)) {
11442	        listener = eventName;
11443	        eventName = target;
11444	        target = this.GLOBAL_TARGET;
11445	      }
11446
11447	      eventName = this.normalizeEventName(eventName);
11448
11449	      if (!Type.isStringFilled(eventName)) {
11450	        throw new TypeError("The \"eventName\" argument must be a string.");
11451	      }
11452
11453	      if (!Type.isFunction(listener)) {
11454	        throw new TypeError("The \"listener\" argument must be of type Function. Received type ".concat(typeof event === "undefined" ? "undefined" : babelHelpers.typeof(event), "."));
11455	      }
11456
11457	      options = Type.isPlainObject(options) ? options : {};
11458	      var fullEventName = this.resolveEventName(eventName, target, options.useGlobalNaming === true);
11459	      var targetInfo = eventStore.get(target);
11460	      var listeners = targetInfo && targetInfo.eventsMap.get(fullEventName);
11461	      var onceListeners = targetInfo && targetInfo.onceMap.get(fullEventName);
11462
11463	      if (listeners) {
11464	        listeners.delete(listener);
11465	      }
11466
11467	      if (onceListeners) {
11468	        var once = onceListeners.get(listener);
11469
11470	        if (once) {
11471	          onceListeners.delete(listener);
11472	          listeners.delete(once);
11473	        }
11474	      }
11475	    }
11476	  }, {
11477	    key: "unsubscribeAll",
11478	    value: function unsubscribeAll(target, eventName, options) {
11479	      if (Type.isString(target)) {
11480	        eventName = target;
11481	        target = this.GLOBAL_TARGET;
11482	      }
11483
11484	      if (Type.isStringFilled(eventName)) {
11485	        var targetInfo = eventStore.get(target);
11486
11487	        if (targetInfo) {
11488	          options = Type.isPlainObject(options) ? options : {};
11489	          var fullEventName = this.resolveEventName(eventName, target, options.useGlobalNaming === true);
11490	          targetInfo.eventsMap.delete(fullEventName);
11491	          targetInfo.onceMap.delete(fullEventName);
11492	        }
11493	      } else if (Type.isNil(eventName)) {
11494	        if (target === this.GLOBAL_TARGET) {
11495	          console.error('You cannot unsubscribe all global listeners.');
11496	        } else {
11497	          eventStore.delete(target);
11498	        }
11499	      }
11500	    }
11501	  }, {
11502	    key: "emit",
11503	    value: function emit(target, eventName, event, options) {
11504	      if (Type.isString(target)) {
11505	        options = event;
11506	        event = eventName;
11507	        eventName = target;
11508	        target = this.GLOBAL_TARGET;
11509	      }
11510
11511	      if (!Type.isObject(target)) {
11512	        throw new TypeError("The \"target\" argument must be an object.");
11513	      }
11514
11515	      eventName = this.normalizeEventName(eventName);
11516
11517	      if (!Type.isStringFilled(eventName)) {
11518	        throw new TypeError("The \"eventName\" argument must be a string.");
11519	      }
11520
11521	      options = Type.isPlainObject(options) ? options : {};
11522	      var fullEventName = this.resolveEventName(eventName, target, options.useGlobalNaming === true);
11523	      var globalEvents = eventStore.get(this.GLOBAL_TARGET);
11524	      var globalListeners = globalEvents && globalEvents.eventsMap.get(fullEventName) || new Map();
11525	      var targetListeners = new Set();
11526
11527	      if (target !== this.GLOBAL_TARGET) {
11528	        var targetEvents = eventStore.get(target);
11529	        targetListeners = targetEvents && targetEvents.eventsMap.get(fullEventName) || new Map();
11530	      }
11531
11532	      var listeners = [].concat(babelHelpers.toConsumableArray(globalListeners.values()), babelHelpers.toConsumableArray(targetListeners.values()));
11533	      listeners.sort(function (a, b) {
11534	        return a.sort - b.sort;
11535	      });
11536	      var preparedEvent = this.prepareEvent(target, fullEventName, event);
11537	      var result = [];
11538
11539	      for (var i = 0; i < listeners.length; i++) {
11540	        if (preparedEvent.isImmediatePropagationStopped()) {
11541	          break;
11542	        }
11543
11544	        var _listeners$i = listeners[i],
11545	            listener = _listeners$i.listener,
11546	            listenerOptions = _listeners$i.options; //A previous listener could remove a current listener.
11547
11548	        if (globalListeners.has(listener) || targetListeners.has(listener)) {
11549	          var listenerResult = void 0;
11550
11551	          if (listenerOptions.compatMode) {
11552	            var params = [];
11553	            var compatData = preparedEvent.getCompatData();
11554
11555	            if (compatData !== null) {
11556	              params = options.cloneData === true ? Runtime.clone(compatData) : compatData;
11557	            } else {
11558	              params = [preparedEvent];
11559	            }
11560
11561	            var context = Type.isUndefined(options.thisArg) ? target : options.thisArg;
11562	            listenerResult = listener.apply(context, params);
11563	          } else {
11564	            listenerResult = Type.isUndefined(options.thisArg) ? listener(preparedEvent) : listener.call(options.thisArg, preparedEvent);
11565	          }
11566
11567	          result.push(listenerResult);
11568	        }
11569	      }
11570
11571	      return result;
11572	    }
11573	  }, {
11574	    key: "emitAsync",
11575	    value: function emitAsync(target, eventName, event) {
11576	      if (Type.isString(target)) {
11577	        event = eventName;
11578	        eventName = target;
11579	        target = this.GLOBAL_TARGET;
11580	      }
11581
11582	      return Promise.all(this.emit(target, eventName, event));
11583	    }
11584	  }, {
11585	    key: "prepareEvent",
11586	    value: function prepareEvent(target, eventName, event) {
11587	      var preparedEvent = event;
11588
11589	      if (!(event instanceof BaseEvent)) {
11590	        preparedEvent = new BaseEvent();
11591	        preparedEvent.setData(event);
11592	      }
11593
11594	      preparedEvent.setTarget(this.isEventEmitter(target) ? target[targetProperty] : target);
11595	      preparedEvent.setType(eventName);
11596	      return preparedEvent;
11597	    }
11598	    /**
11599	     * @private
11600	     * @returns {number}
11601	     */
11602
11603	  }, {
11604	    key: "getNextSequenceValue",
11605	    value: function getNextSequenceValue() {
11606	      return this.sequenceValue++;
11607	    }
11608	    /**
11609	     * Sets max global events listeners count
11610	     * Event.EventEmitter.setMaxListeners(10) - sets the default value for all events (global target)
11611	     * Event.EventEmitter.setMaxListeners("onClose", 10) - sets the value for onClose event (global target)
11612	     * Event.EventEmitter.setMaxListeners(obj, 10) - sets the default value for all events (obj target)
11613	     * Event.EventEmitter.setMaxListeners(obj, "onClose", 10); - sets the value for onClose event (obj target)
11614	     * @return {void}
11615	     * @param args
11616	     */
11617
11618	  }, {
11619	    key: "setMaxListeners",
11620	    value: function setMaxListeners() {
11621	      var target = this.GLOBAL_TARGET;
11622	      var eventName = null;
11623	      var count = undefined;
11624
11625	      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
11626	        args[_key5] = arguments[_key5];
11627	      }
11628
11629	      if (args.length === 1) {
11630	        count = args[0];
11631	      } else if (args.length === 2) {
11632	        if (Type.isString(args[0])) {
11633	          eventName = args[0];
11634	          count = args[1];
11635	        } else {
11636	          target = args[0];
11637	          count = args[1];
11638	        }
11639	      } else if (args.length >= 3) {
11640	        target = args[0];
11641	        eventName = args[1];
11642	        count = args[2];
11643	      }
11644
11645	      if (!Type.isObject(target)) {
11646	        throw new TypeError("The \"target\" argument must be an object.");
11647	      }
11648
11649	      if (eventName !== null && !Type.isStringFilled(eventName)) {
11650	        throw new TypeError("The \"eventName\" argument must be a string.");
11651	      }
11652
11653	      if (!Type.isNumber(count) || count < 0) {
11654	        throw new TypeError("The value of \"count\" is out of range. It must be a non-negative number. Received ".concat(count, "."));
11655	      }
11656
11657	      var targetInfo = eventStore.getOrAdd(target);
11658
11659	      if (Type.isStringFilled(eventName)) {
11660	        var fullEventName = this.resolveEventName(eventName, target);
11661	        targetInfo.eventsMaxListeners.set(fullEventName, count);
11662	      } else {
11663	        targetInfo.maxListeners = count;
11664	      }
11665	    }
11666	  }, {
11667	    key: "getMaxListeners",
11668	    value: function getMaxListeners(target, eventName) {
11669	      if (Type.isString(target)) {
11670	        eventName = target;
11671	        target = this.GLOBAL_TARGET;
11672	      } else if (Type.isNil(target)) {
11673	        target = this.GLOBAL_TARGET;
11674	      }
11675
11676	      if (!Type.isObject(target)) {
11677	        throw new TypeError("The \"target\" argument must be an object.");
11678	      }
11679
11680	      var targetInfo = eventStore.get(target);
11681
11682	      if (targetInfo) {
11683	        var maxListeners = targetInfo.maxListeners;
11684
11685	        if (Type.isStringFilled(eventName)) {
11686	          var fullEventName = this.resolveEventName(eventName, target);
11687	          maxListeners = targetInfo.eventsMaxListeners.get(fullEventName) || maxListeners;
11688	        }
11689
11690	        return maxListeners;
11691	      }
11692
11693	      return this.DEFAULT_MAX_LISTENERS;
11694	    }
11695	  }, {
11696	    key: "addMaxListeners",
11697	    value: function addMaxListeners() {
11698	      var _this$destructMaxList = this.destructMaxListenersArgs.apply(this, arguments),
11699	          _this$destructMaxList2 = babelHelpers.slicedToArray(_this$destructMaxList, 3),
11700	          target = _this$destructMaxList2[0],
11701	          eventName = _this$destructMaxList2[1],
11702	          increment = _this$destructMaxList2[2];
11703
11704	      var maxListeners = Math.max(this.getMaxListeners(target, eventName) + increment, 0);
11705
11706	      if (Type.isStringFilled(eventName)) {
11707	        EventEmitter.setMaxListeners(target, eventName, maxListeners);
11708	      } else {
11709	        EventEmitter.setMaxListeners(target, maxListeners);
11710	      }
11711
11712	      return maxListeners;
11713	    }
11714	    /**
11715	     * Increases max listeners count
11716	     *
11717	     * Event.EventEmitter.incrementMaxListeners() - adds one max listener for all events of global target
11718	     * Event.EventEmitter.incrementMaxListeners(3) - adds three max listeners for all events of global target
11719	     * Event.EventEmitter.incrementMaxListeners('onClose') - adds one max listener for onClose event of global target
11720	     * Event.EventEmitter.incrementMaxListeners('onClose', 2) - adds two max listeners for onClose event of global target
11721	     *
11722	     * Event.EventEmitter.incrementMaxListeners(obj) - adds one max listener for all events of 'obj' target
11723	     * Event.EventEmitter.incrementMaxListeners(obj, 3) - adds three max listeners for all events of 'obj' target
11724	     * Event.EventEmitter.incrementMaxListeners(obj, 'onClose') - adds one max listener for onClose event of 'obj' target
11725	     * Event.EventEmitter.incrementMaxListeners(obj, 'onClose', 2) - adds two max listeners for onClose event of 'obj' target
11726	     */
11727
11728	  }, {
11729	    key: "incrementMaxListeners",
11730	    value: function incrementMaxListeners() {
11731	      var _this$destructMaxList3 = this.destructMaxListenersArgs.apply(this, arguments),
11732	          _this$destructMaxList4 = babelHelpers.slicedToArray(_this$destructMaxList3, 3),
11733	          target = _this$destructMaxList4[0],
11734	          eventName = _this$destructMaxList4[1],
11735	          increment = _this$destructMaxList4[2];
11736
11737	      return this.addMaxListeners(target, eventName, Math.abs(increment));
11738	    }
11739	  }, {
11740	    key: "decrementMaxListeners",
11741	    value: function decrementMaxListeners() {
11742	      var _this$destructMaxList5 = this.destructMaxListenersArgs.apply(this, arguments),
11743	          _this$destructMaxList6 = babelHelpers.slicedToArray(_this$destructMaxList5, 3),
11744	          target = _this$destructMaxList6[0],
11745	          eventName = _this$destructMaxList6[1],
11746	          increment = _this$destructMaxList6[2];
11747
11748	      return this.addMaxListeners(target, eventName, -Math.abs(increment));
11749	    }
11750	  }, {
11751	    key: "destructMaxListenersArgs",
11752	    value: function destructMaxListenersArgs() {
11753	      var eventName = null;
11754	      var increment = 1;
11755	      var target = this.GLOBAL_TARGET;
11756
11757	      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
11758	        args[_key6] = arguments[_key6];
11759	      }
11760
11761	      if (args.length === 1) {
11762	        if (Type.isNumber(args[0])) {
11763	          increment = args[0];
11764	        } else if (Type.isString(args[0])) {
11765	          eventName = args[0];
11766	        } else {
11767	          target = args[0];
11768	        }
11769	      } else if (args.length === 2) {
11770	        if (Type.isString(args[0])) {
11771	          eventName = args[0];
11772	          increment = args[1];
11773	        } else if (Type.isString(args[1])) {
11774	          target = args[0];
11775	          eventName = args[1];
11776	        } else {
11777	          target = args[0];
11778	          increment = args[1];
11779	        }
11780	      } else if (args.length >= 3) {
11781	        target = args[0];
11782	        eventName = args[1];
11783	        increment = args[2];
11784	      }
11785
11786	      if (!Type.isObject(target)) {
11787	        throw new TypeError("The \"target\" argument must be an object.");
11788	      }
11789
11790	      if (eventName !== null && !Type.isStringFilled(eventName)) {
11791	        throw new TypeError("The \"eventName\" argument must be a string.");
11792	      }
11793
11794	      if (!Type.isNumber(increment)) {
11795	        throw new TypeError("The value of \"increment\" must be a number.");
11796	      }
11797
11798	      return [target, eventName, increment];
11799	    }
11800	    /**
11801	     * Gets listeners list for a specified event
11802	     * @param {object} target
11803	     * @param {string} eventName
11804	     */
11805
11806	  }, {
11807	    key: "getListeners",
11808	    value: function getListeners(target, eventName) {
11809	      if (Type.isString(target)) {
11810	        eventName = target;
11811	        target = this.GLOBAL_TARGET;
11812	      }
11813
11814	      if (!Type.isObject(target)) {
11815	        throw new TypeError("The \"target\" argument must be an object.");
11816	      }
11817
11818	      eventName = this.normalizeEventName(eventName);
11819
11820	      if (!Type.isStringFilled(eventName)) {
11821	        throw new TypeError("The \"eventName\" argument must be a string.");
11822	      }
11823
11824	      var targetInfo = eventStore.get(target);
11825
11826	      if (!targetInfo) {
11827	        return new Map();
11828	      }
11829
11830	      var fullEventName = this.resolveEventName(eventName, target);
11831	      return targetInfo.eventsMap.get(fullEventName) || new Map();
11832	    }
11833	  }, {
11834	    key: "registerAliases",
11835	    value: function registerAliases(aliases) {
11836	      aliases = this.normalizeAliases(aliases);
11837	      Object.keys(aliases).forEach(function (alias) {
11838	        aliasStore.set(alias, {
11839	          eventName: aliases[alias].eventName,
11840	          namespace: aliases[alias].namespace
11841	        });
11842	      });
11843	      EventEmitter.mergeEventAliases(aliases);
11844	    }
11845	    /**
11846	     * @private
11847	     * @param aliases
11848	     */
11849
11850	  }, {
11851	    key: "normalizeAliases",
11852	    value: function normalizeAliases(aliases) {
11853	      if (!Type.isPlainObject(aliases)) {
11854	        throw new TypeError("The \"aliases\" argument must be an object.");
11855	      }
11856
11857	      var result = Object.create(null);
11858
11859	      for (var _alias in aliases) {
11860	        if (!Type.isStringFilled(_alias)) {
11861	          throw new TypeError("The alias must be an non-empty string.");
11862	        }
11863
11864	        var options = aliases[_alias];
11865
11866	        if (!options || !Type.isStringFilled(options.eventName) || !Type.isStringFilled(options.namespace)) {
11867	          throw new TypeError("The alias options must set the \"eventName\" and the \"namespace\".");
11868	        }
11869
11870	        _alias = this.normalizeEventName(_alias);
11871	        result[_alias] = {
11872	          eventName: options.eventName,
11873	          namespace: options.namespace
11874	        };
11875	      }
11876
11877	      return result;
11878	    }
11879	    /**
11880	     * @private
11881	     */
11882
11883	  }, {
11884	    key: "mergeEventAliases",
11885	    value: function mergeEventAliases(aliases) {
11886	      var _this4 = this;
11887
11888	      var globalEvents = eventStore.get(this.GLOBAL_TARGET);
11889
11890	      if (!globalEvents) {
11891	        return;
11892	      }
11893
11894	      Object.keys(aliases).forEach(function (alias) {
11895	        var options = aliases[alias];
11896	        alias = _this4.normalizeEventName(alias);
11897
11898	        var fullEventName = _this4.makeFullEventName(options.namespace, options.eventName);
11899
11900	        var aliasListeners = globalEvents.eventsMap.get(alias);
11901
11902	        if (aliasListeners) {
11903	          var listeners = globalEvents.eventsMap.get(fullEventName) || new Map();
11904	          globalEvents.eventsMap.set(fullEventName, new Map([].concat(babelHelpers.toConsumableArray(listeners), babelHelpers.toConsumableArray(aliasListeners))));
11905	          globalEvents.eventsMap.delete(alias);
11906	        }
11907
11908	        var aliasOnceListeners = globalEvents.onceMap.get(alias);
11909
11910	        if (aliasOnceListeners) {
11911	          var onceListeners = globalEvents.onceMap.get(fullEventName) || new Map();
11912	          globalEvents.onceMap.set(fullEventName, new Map([].concat(babelHelpers.toConsumableArray(onceListeners), babelHelpers.toConsumableArray(aliasOnceListeners))));
11913	          globalEvents.onceMap.delete(alias);
11914	        }
11915
11916	        var aliasMaxListeners = globalEvents.eventsMaxListeners.get(alias);
11917
11918	        if (aliasMaxListeners) {
11919	          var eventMaxListeners = globalEvents.eventsMaxListeners.get(fullEventName) || 0;
11920	          globalEvents.eventsMaxListeners.set(fullEventName, Math.max(eventMaxListeners, aliasMaxListeners));
11921	          globalEvents.eventsMaxListeners.delete(alias);
11922	        }
11923	      });
11924	    }
11925	    /**
11926	     * Returns true if the target is an instance of Event.EventEmitter
11927	     * @param {object} target
11928	     * @returns {boolean}
11929	     */
11930
11931	  }, {
11932	    key: "isEventEmitter",
11933	    value: function isEventEmitter(target) {
11934	      return Type.isObject(target) && target[isEmitterProperty] === true;
11935	    }
11936	    /**
11937	     * @private
11938	     * @param {string} eventName
11939	     * @returns {string}
11940	     */
11941
11942	  }, {
11943	    key: "normalizeEventName",
11944	    value: function normalizeEventName(eventName) {
11945	      if (!Type.isStringFilled(eventName)) {
11946	        return '';
11947	      }
11948
11949	      return eventName.toLowerCase();
11950	    }
11951	    /**
11952	     * @private
11953	     * @param eventName
11954	     * @param target
11955	     * @param useGlobalNaming
11956	     * @returns {string}
11957	     */
11958
11959	  }, {
11960	    key: "resolveEventName",
11961	    value: function resolveEventName(eventName, target) {
11962	      var useGlobalNaming = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
11963	      eventName = this.normalizeEventName(eventName);
11964
11965	      if (!Type.isStringFilled(eventName)) {
11966	        return '';
11967	      }
11968
11969	      if (this.isEventEmitter(target) && useGlobalNaming !== true) {
11970	        if (target.getEventNamespace() !== null && eventName.includes('.')) {
11971	          console.warn("Possible the wrong event name \"".concat(eventName, "\"."));
11972	        }
11973
11974	        eventName = target.getFullEventName(eventName);
11975	      } else if (aliasStore.has(eventName)) {
11976	        var _aliasStore$get = aliasStore.get(eventName),
11977	            namespace = _aliasStore$get.namespace,
11978	            actualEventName = _aliasStore$get.eventName;
11979
11980	        eventName = this.makeFullEventName(namespace, actualEventName);
11981	      }
11982
11983	      return eventName;
11984	    }
11985	    /**
11986	     * @private
11987	     * @param {string} namespace
11988	     * @param {string} eventName
11989	     * @returns {string}
11990	     */
11991
11992	  }, {
11993	    key: "makeFullEventName",
11994	    value: function makeFullEventName(namespace, eventName) {
11995	      var fullName = Type.isStringFilled(namespace) ? "".concat(namespace, ":").concat(eventName) : eventName;
11996	      return Type.isStringFilled(fullName) ? fullName.toLowerCase() : '';
11997	    }
11998	  }]);
11999	  return EventEmitter;
12000	}();
12001
12002	babelHelpers.defineProperty(EventEmitter, "GLOBAL_TARGET", globalTarget);
12003	babelHelpers.defineProperty(EventEmitter, "DEFAULT_MAX_LISTENERS", eventStore.getDefaultMaxListeners());
12004	babelHelpers.defineProperty(EventEmitter, "sequenceValue", 1);
12005
12006	var stack = [];
12007	/**
12008	 * For compatibility only
12009	 * @type {boolean}
12010	 */
12011	// eslint-disable-next-line
12012
12013	exports.isReady = false;
12014	function ready(handler) {
12015	  switch (document.readyState) {
12016	    case 'loading':
12017	      stack.push(handler);
12018	      break;
12019
12020	    case 'interactive':
12021	    case 'complete':
12022	      if (Type.isFunction(handler)) {
12023	        handler();
12024	      }
12025
12026	      exports.isReady = true;
12027	      break;
12028
12029	    default:
12030	      break;
12031	  }
12032	}
12033	document.addEventListener('readystatechange', function () {
12034	  if (!exports.isReady) {
12035	    stack.forEach(ready);
12036	    stack = [];
12037	  }
12038	});
12039
12040	/**
12041	 * @memberOf BX
12042	 */
12043
12044	var Event = function Event() {
12045	  babelHelpers.classCallCheck(this, Event);
12046	};
12047
12048	babelHelpers.defineProperty(Event, "bind", bind);
12049	babelHelpers.defineProperty(Event, "bindOnce", bindOnce);
12050	babelHelpers.defineProperty(Event, "unbind", unbind);
12051	babelHelpers.defineProperty(Event, "unbindAll", unbindAll);
12052	babelHelpers.defineProperty(Event, "ready", ready);
12053	babelHelpers.defineProperty(Event, "EventEmitter", EventEmitter);
12054	babelHelpers.defineProperty(Event, "BaseEvent", BaseEvent);
12055
12056	function encodeAttributeValue(value) {
12057	  if (Type.isPlainObject(value) || Type.isArray(value)) {
12058	    return JSON.stringify(value);
12059	  }
12060
12061	  return Text.encode(Text.decode(value));
12062	}
12063
12064	function decodeAttributeValue(value) {
12065	  if (Type.isString(value)) {
12066	    var decodedValue = Text.decode(value);
12067	    var result;
12068
12069	    try {
12070	      result = JSON.parse(decodedValue);
12071	    } catch (e) {
12072	      result = decodedValue;
12073	    }
12074
12075	    if (result === decodedValue) {
12076	      if (/^[\d.]+[.]?\d+$/.test(result)) {
12077	        return Number(result);
12078	      }
12079	    }
12080
12081	    if (result === 'true' || result === 'false') {
12082	      return Boolean(result);
12083	    }
12084
12085	    return result;
12086	  }
12087
12088	  return value;
12089	}
12090
12091	function getPageScroll() {
12092	  var _document = document,
12093	      documentElement = _document.documentElement,
12094	      body = _document.body;
12095	  var scrollTop = Math.max(window.pageYOffset || 0, documentElement ? documentElement.scrollTop : 0, body ? body.scrollTop : 0);
12096	  var scrollLeft = Math.max(window.pageXOffset || 0, documentElement ? documentElement.scrollLeft : 0, body ? body.scrollLeft : 0);
12097	  return {
12098	    scrollTop: scrollTop,
12099	    scrollLeft: scrollLeft
12100	  };
12101	}
12102
12103	/**
12104	 * @memberOf BX
12105	 */
12106
12107	var Dom = /*#__PURE__*/function () {
12108	  function Dom() {
12109	    babelHelpers.classCallCheck(this, Dom);
12110	  }
12111
12112	  babelHelpers.createClass(Dom, null, [{
12113	    key: "replace",
12114
12115	    /**
12116	     * Replaces old html element to new html element
12117	     * @param oldElement
12118	     * @param newElement
12119	     */
12120	    value: function replace(oldElement, newElement) {
12121	      if (Type.isDomNode(oldElement) && Type.isDomNode(newElement)) {
12122	        if (Type.isDomNode(oldElement.parentNode)) {
12123	          oldElement.parentNode.replaceChild(newElement, oldElement);
12124	        }
12125	      }
12126	    }
12127	    /**
12128	     * Removes element
12129	     * @param element
12130	     */
12131
12132	  }, {
12133	    key: "remove",
12134	    value: function remove(element) {
12135	      if (Type.isDomNode(element) && Type.isDomNode(element.parentNode)) {
12136	        element.parentNode.removeChild(element);
12137	      }
12138	    }
12139	    /**
12140	     * Cleans element
12141	     * @param element
12142	     */
12143
12144	  }, {
12145	    key: "clean",
12146	    value: function clean(element) {
12147	      if (Type.isDomNode(element)) {
12148	        while (element.childNodes.length > 0) {
12149	          element.removeChild(element.firstChild);
12150	        }
12151
12152	        return;
12153	      }
12154
12155	      if (Type.isString(element)) {
12156	        Dom.clean(document.getElementById(element));
12157	      }
12158	    }
12159	    /**
12160	     * Inserts element before target element
12161	     * @param current
12162	     * @param target
12163	     */
12164
12165	  }, {
12166	    key: "insertBefore",
12167	    value: function insertBefore(current, target) {
12168	      if (Type.isDomNode(current) && Type.isDomNode(target)) {
12169	        if (Type.isDomNode(target.parentNode)) {
12170	          target.parentNode.insertBefore(current, target);
12171	        }
12172	      }
12173	    }
12174	    /**
12175	     * Inserts element after target element
12176	     * @param current
12177	     * @param target
12178	     */
12179
12180	  }, {
12181	    key: "insertAfter",
12182	    value: function insertAfter(current, target) {
12183	      if (Type.isDomNode(current) && Type.isDomNode(target)) {
12184	        if (Type.isDomNode(target.parentNode)) {
12185	          var parent = target.parentNode;
12186
12187	          if (Type.isDomNode(target.nextSibling)) {
12188	            parent.insertBefore(current, target.nextSibling);
12189	            return;
12190	          }
12191
12192	          parent.appendChild(current);
12193	        }
12194	      }
12195	    }
12196	    /**
12197	     * Appends element to target element
12198	     * @param current
12199	     * @param target
12200	     */
12201
12202	  }, {
12203	    key: "append",
12204	    value: function append(current, target) {
12205	      if (Type.isDomNode(current) && Type.isDomNode(target)) {
12206	        target.appendChild(current);
12207	      }
12208	    }
12209	    /**
12210	     * Prepends element to target element
12211	     * @param current
12212	     * @param target
12213	     */
12214
12215	  }, {
12216	    key: "prepend",
12217	    value: function prepend(current, target) {
12218	      if (Type.isDomNode(current) && Type.isDomNode(target)) {
12219	        if (Type.isDomNode(target.firstChild)) {
12220	          target.insertBefore(current, target.firstChild);
12221	          return;
12222	        }
12223
12224	        Dom.append(current, target);
12225	      }
12226	    }
12227	    /**
12228	     * Checks that element contains class name or class names
12229	     * @param element
12230	     * @param className
12231	     * @return {Boolean}
12232	     */
12233
12234	  }, {
12235	    key: "hasClass",
12236	    value: function hasClass(element, className) {
12237	      if (Type.isElementNode(element)) {
12238	        if (Type.isString(className)) {
12239	          var preparedClassName = className.trim();
12240
12241	          if (preparedClassName.length > 0) {
12242	            if (preparedClassName.includes(' ')) {
12243	              return preparedClassName.split(' ').every(function (name) {
12244	                return Dom.hasClass(element, name);
12245	              });
12246	            }
12247
12248	            if ('classList' in element) {
12249	              return element.classList.contains(preparedClassName);
12250	            }
12251
12252	            if (Type.isObject(element.className) && Type.isString(element.className.baseVal)) {
12253	              return element.getAttribute('class').split(' ').some(function (name) {
12254	                return name === preparedClassName;
12255	              });
12256	            }
12257	          }
12258	        }
12259
12260	        if (Type.isArray(className) && className.length > 0) {
12261	          return className.every(function (name) {
12262	            return Dom.hasClass(element, name);
12263	          });
12264	        }
12265	      }
12266
12267	      return false;
12268	    }
12269	    /**
12270	     * Adds class name
12271	     * @param element
12272	     * @param className
12273	     */
12274
12275	  }, {
12276	    key: "addClass",
12277	    value: function addClass(element, className) {
12278	      if (Type.isElementNode(element)) {
12279	        if (Type.isString(className)) {
12280	          var preparedClassName = className.trim();
12281
12282	          if (preparedClassName.length > 0) {
12283	            if (preparedClassName.includes(' ')) {
12284	              Dom.addClass(element, preparedClassName.split(' '));
12285	              return;
12286	            }
12287
12288	            if ('classList' in element) {
12289	              element.classList.add(preparedClassName);
12290	              return;
12291	            }
12292
12293	            if (Type.isObject(element.className) && Type.isString(element.className.baseVal)) {
12294	              if (element.className.baseVal === '') {
12295	                element.className.baseVal = preparedClassName;
12296	                return;
12297	              }
12298
12299	              var names = element.className.baseVal.split(' ');
12300
12301	              if (!names.includes(preparedClassName)) {
12302	                names.push(preparedClassName);
12303	                element.className.baseVal = names.join(' ').trim();
12304	                return;
12305	              }
12306	            }
12307
12308	            return;
12309	          }
12310	        }
12311
12312	        if (Type.isArray(className)) {
12313	          className.forEach(function (name) {
12314	            return Dom.addClass(element, name);
12315	          });
12316	        }
12317	      }
12318	    }
12319	    /**
12320	     * Removes class name
12321	     * @param element
12322	     * @param className
12323	     */
12324
12325	  }, {
12326	    key: "removeClass",
12327	    value: function removeClass(element, className) {
12328	      if (Type.isElementNode(element)) {
12329	        if (Type.isString(className)) {
12330	          var preparedClassName = className.trim();
12331
12332	          if (preparedClassName.length > 0) {
12333	            if (preparedClassName.includes(' ')) {
12334	              Dom.removeClass(element, preparedClassName.split(' '));
12335	              return;
12336	            }
12337
12338	            if ('classList' in element) {
12339	              element.classList.remove(preparedClassName);
12340	              return;
12341	            }
12342
12343	            if (Type.isObject(element.className) && Type.isString(element.className.baseVal)) {
12344	              var names = element.className.baseVal.split(' ').filter(function (name) {
12345	                return name !== preparedClassName;
12346	              });
12347	              element.className.baseVal = names.join(' ');
12348	              return;
12349	            }
12350	          }
12351	        }
12352
12353	        if (Type.isArray(className)) {
12354	          className.forEach(function (name) {
12355	            return Dom.removeClass(element, name);
12356	          });
12357	        }
12358	      }
12359	    }
12360	    /**
12361	     * Toggles class name
12362	     * @param element
12363	     * @param className
12364	     */
12365
12366	  }, {
12367	    key: "toggleClass",
12368	    value: function toggleClass(element, className) {
12369	      if (Type.isElementNode(element)) {
12370	        if (Type.isString(className)) {
12371	          var preparedClassName = className.trim();
12372
12373	          if (preparedClassName.length > 0) {
12374	            if (preparedClassName.includes(' ')) {
12375	              Dom.toggleClass(element, preparedClassName.split(' '));
12376	              return;
12377	            }
12378
12379	            element.classList.toggle(preparedClassName);
12380	            return;
12381	          }
12382	        }
12383
12384	        if (Type.isArray(className)) {
12385	          className.forEach(function (name) {
12386	            return Dom.toggleClass(element, name);
12387	          });
12388	        }
12389	      }
12390	    }
12391	    /**
12392	     * Styles element
12393	     */
12394
12395	  }, {
12396	    key: "style",
12397	    value: function style(element, prop, value) {
12398	      if (Type.isElementNode(element)) {
12399	        if (Type.isNull(prop)) {
12400	          element.removeAttribute('style');
12401	          return element;
12402	        }
12403
12404	        if (Type.isPlainObject(prop)) {
12405	          Object.entries(prop).forEach(function (item) {
12406	            var _item = babelHelpers.slicedToArray(item, 2),
12407	                currentKey = _item[0],
12408	                currentValue = _item[1];
12409
12410	            Dom.style(element, currentKey, currentValue);
12411	          });
12412	          return element;
12413	        }
12414
12415	        if (Type.isString(prop)) {
12416	          if (Type.isUndefined(value) && element.nodeType !== Node.DOCUMENT_NODE) {
12417	            var computedStyle = getComputedStyle(element);
12418
12419	            if (prop in computedStyle) {
12420	              return computedStyle[prop];
12421	            }
12422
12423	            return computedStyle.getPropertyValue(prop);
12424	          }
12425
12426	          if (Type.isNull(value) || value === '' || value === 'null') {
12427	            // eslint-disable-next-line
12428	            element.style[prop] = '';
12429	            return element;
12430	          }
12431
12432	          if (Type.isString(value) || Type.isNumber(value)) {
12433	            // eslint-disable-next-line
12434	            element.style[prop] = value;
12435	            return element;
12436	          }
12437	        }
12438	      }
12439
12440	      return null;
12441	    }
12442	    /**
12443	     * Adjusts element
12444	     * @param target
12445	     * @param data
12446	     * @return {*}
12447	     */
12448
12449	  }, {
12450	    key: "adjust",
12451	    value: function adjust(target) {
12452	      var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
12453
12454	      if (!target.nodeType) {
12455	        return null;
12456	      }
12457
12458	      var element = target;
12459
12460	      if (target.nodeType === Node.DOCUMENT_NODE) {
12461	        element = target.body;
12462	      }
12463
12464	      if (Type.isPlainObject(data)) {
12465	        if (Type.isPlainObject(data.attrs)) {
12466	          Object.keys(data.attrs).forEach(function (key) {
12467	            if (key === 'class' || key.toLowerCase() === 'classname') {
12468	              element.className = data.attrs[key];
12469	              return;
12470	            } // eslint-disable-next-line
12471
12472
12473	            if (data.attrs[key] == '') {
12474	              element.removeAttribute(key);
12475	              return;
12476	            }
12477
12478	            element.setAttribute(key, data.attrs[key]);
12479	          });
12480	        }
12481
12482	        if (Type.isPlainObject(data.style)) {
12483	          Dom.style(element, data.style);
12484	        }
12485
12486	        if (Type.isPlainObject(data.props)) {
12487	          Object.keys(data.props).forEach(function (key) {
12488	            element[key] = data.props[key];
12489	          });
12490	        }
12491
12492	        if (Type.isPlainObject(data.events)) {
12493	          Object.keys(data.events).forEach(function (key) {
12494	            Event.bind(element, key, data.events[key]);
12495	          });
12496	        }
12497
12498	        if (Type.isPlainObject(data.dataset)) {
12499	          Object.keys(data.dataset).forEach(function (key) {
12500	            element.dataset[key] = data.dataset[key];
12501	          });
12502	        }
12503
12504	        if (Type.isString(data.children)) {
12505	          data.children = [data.children];
12506	        }
12507
12508	        if (Type.isArray(data.children) && data.children.length > 0) {
12509	          data.children.forEach(function (item) {
12510	            if (Type.isDomNode(item)) {
12511	              Dom.append(item, element);
12512	            }
12513
12514	            if (Type.isString(item)) {
12515	              element.innerHTML += item;
12516	            }
12517	          });
12518	          return element;
12519	        }
12520
12521	        if ('text' in data && !Type.isNil(data.text)) {
12522	          element.innerText = data.text;
12523	          return element;
12524	        }
12525
12526	        if ('html' in data && !Type.isNil(data.html)) {
12527	          element.innerHTML = data.html;
12528	        }
12529	      }
12530
12531	      return element;
12532	    }
12533	    /**
12534	     * Creates element
12535	     * @param tag
12536	     * @param data
12537	     * @param context
12538	     * @return {HTMLElement|HTMLBodyElement}
12539	     */
12540
12541	  }, {
12542	    key: "create",
12543	    value: function create(tag) {
12544	      var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
12545	      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document;
12546	      var tagName = tag;
12547	      var options = data;
12548
12549	      if (Type.isObjectLike(tag)) {
12550	        options = tag;
12551	        tagName = tag.tag;
12552	      }
12553
12554	      return Dom.adjust(context.createElement(tagName), options);
12555	    }
12556	    /**
12557	     * Shows element
12558	     * @param element
12559	     */
12560
12561	  }, {
12562	    key: "show",
12563	    value: function show(element) {
12564	      if (Type.isDomNode(element)) {
12565	        // eslint-disable-next-line
12566	        element.hidden = false;
12567	      }
12568	    }
12569	    /**
12570	     * Hides element
12571	     * @param element
12572	     */
12573
12574	  }, {
12575	    key: "hide",
12576	    value: function hide(element) {
12577	      if (Type.isDomNode(element)) {
12578	        // eslint-disable-next-line
12579	        element.hidden = true;
12580	      }
12581	    }
12582	    /**
12583	     * Checks that element is shown
12584	     * @param element
12585	     * @return {*|boolean}
12586	     */
12587
12588	  }, {
12589	    key: "isShown",
12590	    value: function isShown(element) {
12591	      return Type.isDomNode(element) && !element.hidden && element.style.getPropertyValue('display') !== 'none';
12592	    }
12593	    /**
12594	     * Toggles element visibility
12595	     * @param element
12596	     */
12597
12598	  }, {
12599	    key: "toggle",
12600	    value: function toggle(element) {
12601	      if (Type.isDomNode(element)) {
12602	        if (Dom.isShown(element)) {
12603	          Dom.hide(element);
12604	        } else {
12605	          Dom.show(element);
12606	        }
12607	      }
12608	    }
12609	    /**
12610	     * Gets element position relative page
12611	     * @param {HTMLElement} element
12612	     * @return {DOMRect}
12613	     */
12614
12615	  }, {
12616	    key: "getPosition",
12617	    value: function getPosition(element) {
12618	      if (Type.isDomNode(element)) {
12619	        var elementRect = element.getBoundingClientRect();
12620
12621	        var _getPageScroll = getPageScroll(),
12622	            scrollLeft = _getPageScroll.scrollLeft,
12623	            scrollTop = _getPageScroll.scrollTop;
12624
12625	        return new DOMRect(elementRect.left + scrollLeft, elementRect.top + scrollTop, elementRect.width, elementRect.height);
12626	      }
12627
12628	      return new DOMRect();
12629	    }
12630	    /**
12631	     * Gets element position relative specified element position
12632	     * @param {HTMLElement} element
12633	     * @param {HTMLElement} relationElement
12634	     * @return {DOMRect}
12635	     */
12636
12637	  }, {
12638	    key: "getRelativePosition",
12639	    value: function getRelativePosition(element, relationElement) {
12640	      if (Type.isDomNode(element) && Type.isDomNode(relationElement)) {
12641	        var elementPosition = Dom.getPosition(element);
12642	        var relationElementPosition = Dom.getPosition(relationElement);
12643	        return new DOMRect(elementPosition.left - relationElementPosition.left, elementPosition.top - relationElementPosition.top, elementPosition.width, elementPosition.height);
12644	      }
12645
12646	      return new DOMRect();
12647	    }
12648	  }, {
12649	    key: "attr",
12650	    value: function attr(element, _attr, value) {
12651	      if (Type.isElementNode(element)) {
12652	        if (Type.isString(_attr)) {
12653	          if (!Type.isNil(value)) {
12654	            return element.setAttribute(_attr, encodeAttributeValue(value));
12655	          }
12656
12657	          if (Type.isNull(value)) {
12658	            return element.removeAttribute(_attr);
12659	          }
12660
12661	          return decodeAttributeValue(element.getAttribute(_attr));
12662	        }
12663
12664	        if (Type.isPlainObject(_attr)) {
12665	          return Object.entries(_attr).forEach(function (_ref) {
12666	            var _ref2 = babelHelpers.slicedToArray(_ref, 2),
12667	                attrKey = _ref2[0],
12668	                attrValue = _ref2[1];
12669
12670	            Dom.attr(element, attrKey, attrValue);
12671	          });
12672	        }
12673	      }
12674
12675	      return null;
12676	    }
12677	  }]);
12678	  return Dom;
12679	}();
12680
12681	var UA = navigator.userAgent.toLowerCase();
12682	/**
12683	 * @memberOf BX
12684	 */
12685
12686	var Browser = /*#__PURE__*/function () {
12687	  function Browser() {
12688	    babelHelpers.classCallCheck(this, Browser);
12689	  }
12690
12691	  babelHelpers.createClass(Browser, null, [{
12692	    key: "isOpera",
12693	    value: function isOpera() {
12694	      return UA.includes('opera');
12695	    }
12696	  }, {
12697	    key: "isIE",
12698	    value: function isIE() {
12699	      return 'attachEvent' in document && !Browser.isOpera();
12700	    }
12701	  }, {
12702	    key: "isIE6",
12703	    value: function isIE6() {
12704	      return UA.includes('msie 6');
12705	    }
12706	  }, {
12707	    key: "isIE7",
12708	    value: function isIE7() {
12709	      return UA.includes('msie 7');
12710	    }
12711	  }, {
12712	    key: "isIE8",
12713	    value: function isIE8() {
12714	      return UA.includes('msie 8');
12715	    }
12716	  }, {
12717	    key: "isIE9",
12718	    value: function isIE9() {
12719	      return 'documentMode' in document && document.documentMode >= 9;
12720	    }
12721	  }, {
12722	    key: "isIE10",
12723	    value: function isIE10() {
12724	      return 'documentMode' in document && document.documentMode >= 10;
12725	    }
12726	  }, {
12727	    key: "isSafari",
12728	    value: function isSafari() {
12729	      return UA.includes('webkit');
12730	    }
12731	  }, {
12732	    key: "isFirefox",
12733	    value: function isFirefox() {
12734	      return UA.includes('firefox');
12735	    }
12736	  }, {
12737	    key: "isChrome",
12738	    value: function isChrome() {
12739	      return UA.includes('chrome');
12740	    }
12741	  }, {
12742	    key: "detectIEVersion",
12743	    value: function detectIEVersion() {
12744	      if (Browser.isOpera() || Browser.isSafari() || Browser.isFirefox() || Browser.isChrome()) {
12745	        return -1;
12746	      }
12747
12748	      var rv = -1;
12749
12750	      if (!!window.MSStream && !window.ActiveXObject && 'ActiveXObject' in window) {
12751	        rv = 11;
12752	      } else if (Browser.isIE10()) {
12753	        rv = 10;
12754	      } else if (Browser.isIE9()) {
12755	        rv = 9;
12756	      } else if (Browser.isIE()) {
12757	        rv = 8;
12758	      }
12759
12760	      if (rv === -1 || rv === 8) {
12761	        if (navigator.appName === 'Microsoft Internet Explorer') {
12762	          var re = new RegExp('MSIE ([0-9]+[.0-9]*)');
12763	          var res = navigator.userAgent.match(re);
12764
12765	          if (Type.isArrayLike(res) && res.length > 0) {
12766	            rv = parseFloat(res[1]);
12767	          }
12768	        }
12769
12770	        if (navigator.appName === 'Netscape') {
12771	          // Alternative check for IE 11
12772	          rv = 11;
12773
12774	          var _re = new RegExp('Trident/.*rv:([0-9]+[.0-9]*)');
12775
12776	          if (_re.exec(navigator.userAgent) != null) {
12777	            var _res = navigator.userAgent.match(_re);
12778
12779	            if (Type.isArrayLike(_res) && _res.length > 0) {
12780	              rv = parseFloat(_res[1]);
12781	            }
12782	          }
12783	        }
12784	      }
12785
12786	      return rv;
12787	    }
12788	  }, {
12789	    key: "isIE11",
12790	    value: function isIE11() {
12791	      return Browser.detectIEVersion() >= 11;
12792	    }
12793	  }, {
12794	    key: "isMac",
12795	    value: function isMac() {
12796	      return UA.includes('macintosh');
12797	    }
12798	  }, {
12799	    key: "isWin",
12800	    value: function isWin() {
12801	      return UA.includes('windows');
12802	    }
12803	  }, {
12804	    key: "isLinux",
12805	    value: function isLinux() {
12806	      return UA.includes('linux') && !Browser.isAndroid();
12807	    }
12808	  }, {
12809	    key: "isAndroid",
12810	    value: function isAndroid() {
12811	      return UA.includes('android');
12812	    }
12813	  }, {
12814	    key: "isIPad",
12815	    value: function isIPad() {
12816	      return UA.includes('ipad;');
12817	    }
12818	  }, {
12819	    key: "isIPhone",
12820	    value: function isIPhone() {
12821	      return UA.includes('iphone;');
12822	    }
12823	  }, {
12824	    key: "isIOS",
12825	    value: function isIOS() {
12826	      return Browser.isIPad() || Browser.isIPhone();
12827	    }
12828	  }, {
12829	    key: "isMobile",
12830	    value: function isMobile() {
12831	      return Browser.isIPhone() || Browser.isIPad() || Browser.isAndroid() || UA.includes('mobile') || UA.includes('touch');
12832	    }
12833	  }, {
12834	    key: "isRetina",
12835	    value: function isRetina() {
12836	      return window.devicePixelRatio && window.devicePixelRatio >= 2;
12837	    }
12838	  }, {
12839	    key: "isDoctype",
12840	    value: function isDoctype(target) {
12841	      var doc = target || document;
12842
12843	      if (doc.compatMode) {
12844	        return doc.compatMode === 'CSS1Compat';
12845	      }
12846
12847	      return doc.documentElement && doc.documentElement.clientHeight;
12848	    }
12849	  }, {
12850	    key: "isLocalStorageSupported",
12851	    value: function isLocalStorageSupported() {
12852	      try {
12853	        localStorage.setItem('test', 'test');
12854	        localStorage.removeItem('test');
12855	        return true;
12856	      } catch (e) {
12857	        return false;
12858	      }
12859	    }
12860	  }, {
12861	    key: "addGlobalClass",
12862	    value: function addGlobalClass() {
12863	      var globalClass = 'bx-core';
12864
12865	      if (Dom.hasClass(document.documentElement, globalClass)) {
12866	        return;
12867	      }
12868
12869	      if (Browser.isIOS()) {
12870	        globalClass += ' bx-ios';
12871	      } else if (Browser.isMac()) {
12872	        globalClass += ' bx-mac';
12873	      } else if (Browser.isAndroid()) {
12874	        globalClass += ' bx-android';
12875	      }
12876
12877	      globalClass += Browser.isMobile() ? ' bx-touch' : ' bx-no-touch';
12878	      globalClass += Browser.isRetina() ? ' bx-retina' : ' bx-no-retina';
12879	      var ieVersion = -1;
12880
12881	      if (/AppleWebKit/.test(navigator.userAgent)) {
12882	        globalClass += ' bx-chrome';
12883	      } else if (Browser.detectIEVersion() > 0) {
12884	        ieVersion = Browser.detectIEVersion();
12885	        globalClass += " bx-ie bx-ie".concat(ieVersion);
12886
12887	        if (ieVersion > 7 && ieVersion < 10 && !Browser.isDoctype()) {
12888	          globalClass += ' bx-quirks';
12889	        }
12890	      } else if (/Opera/.test(navigator.userAgent)) {
12891	        globalClass += ' bx-opera';
12892	      } else if (/Gecko/.test(navigator.userAgent)) {
12893	        globalClass += ' bx-firefox';
12894	      }
12895
12896	      Dom.addClass(document.documentElement, globalClass);
12897	    }
12898	  }, {
12899	    key: "detectAndroidVersion",
12900	    value: function detectAndroidVersion() {
12901	      var re = new RegExp('Android ([0-9]+[.0-9]*)');
12902
12903	      if (re.exec(navigator.userAgent) != null) {
12904	        var res = navigator.userAgent.match(re);
12905
12906	        if (Type.isArrayLike(res) && res.length > 0) {
12907	          return parseFloat(res[1]);
12908	        }
12909	      }
12910
12911	      return 0;
12912	    }
12913	  }, {
12914	    key: "isPropertySupported",
12915	    value: function isPropertySupported(jsProperty, returnCSSName) {
12916	      if (jsProperty === '') {
12917	        return false;
12918	      }
12919
12920	      function getCssName(propertyName) {
12921	        return propertyName.replace(/([A-Z])/g, function () {
12922	          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
12923	            args[_key] = arguments[_key];
12924	          }
12925
12926	          return "-".concat(args[1].toLowerCase());
12927	        });
12928	      }
12929
12930	      function getJsName(cssName) {
12931	        var reg = /(\\-([a-z]))/g;
12932
12933	        if (reg.test(cssName)) {
12934	          return cssName.replace(reg, function () {
12935	            for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
12936	              args[_key2] = arguments[_key2];
12937	            }
12938
12939	            return args[2].toUpperCase();
12940	          });
12941	        }
12942
12943	        return cssName;
12944	      }
12945
12946	      var property = jsProperty.includes('-') ? getJsName(jsProperty) : jsProperty;
12947	      var bReturnCSSName = !!returnCSSName;
12948	      var ucProperty = property.charAt(0).toUpperCase() + property.slice(1);
12949	      var props = ['Webkit', 'Moz', 'O', 'ms'].join("".concat(ucProperty, " "));
12950	      var properties = "".concat(property, " ").concat(props, " ").concat(ucProperty).split(' ');
12951	      var obj = document.body || document.documentElement;
12952
12953	      for (var i = 0; i < properties.length; i += 1) {
12954	        var prop = properties[i];
12955
12956	        if (obj && 'style' in obj && prop in obj.style) {
12957	          var lowerProp = prop.substr(0, prop.length - property.length).toLowerCase();
12958	          var prefix = prop === property ? '' : "-".concat(lowerProp, "-");
12959	          return bReturnCSSName ? prefix + getCssName(property) : prop;
12960	        }
12961	      }
12962
12963	      return false;
12964	    }
12965	  }, {
12966	    key: "addGlobalFeatures",
12967	    value: function addGlobalFeatures(features) {
12968	      if (!Type.isArray(features)) {
12969	        return;
12970	      }
12971
12972	      var classNames = [];
12973
12974	      for (var i = 0; i < features.length; i += 1) {
12975	        var support = !!Browser.isPropertySupported(features[i]);
12976	        classNames.push("bx-".concat(support ? '' : 'no-').concat(features[i].toLowerCase()));
12977	      }
12978
12979	      Dom.addClass(document.documentElement, classNames.join(' '));
12980	    }
12981	  }]);
12982	  return Browser;
12983	}();
12984
12985	var Cookie = /*#__PURE__*/function () {
12986	  function Cookie() {
12987	    babelHelpers.classCallCheck(this, Cookie);
12988	  }
12989
12990	  babelHelpers.createClass(Cookie, null, [{
12991	    key: "getList",
12992
12993	    /**
12994	     * Gets cookies list for current domain
12995	     * @return {object}
12996	     */
12997	    value: function getList() {
12998	      return document.cookie.split(';').map(function (item) {
12999	        return item.split('=');
13000	      }).map(function (item) {
13001	        return item.map(function (subItem) {
13002	          return subItem.trim();
13003	        });
13004	      }).reduce(function (acc, item) {
13005	        var _item = babelHelpers.slicedToArray(item, 2),
13006	            key = _item[0],
13007	            value = _item[1];
13008
13009	        acc[decodeURIComponent(key)] = decodeURIComponent(value);
13010	        return acc;
13011	      }, {});
13012	    }
13013	    /**
13014	     * Gets cookie value
13015	     * @param {string} name
13016	     * @return {*}
13017	     */
13018
13019	  }, {
13020	    key: "get",
13021	    value: function get(name) {
13022	      var cookiesList = Cookie.getList();
13023
13024	      if (name in cookiesList) {
13025	        return cookiesList[name];
13026	      }
13027
13028	      return undefined;
13029	    }
13030	    /**
13031	     * Sets cookie
13032	     * @param {string} name
13033	     * @param {*} value
13034	     * @param {object} [options]
13035	     */
13036
13037	  }, {
13038	    key: "set",
13039	    value: function set(name, value) {
13040	      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
13041	      var attributes = babelHelpers.objectSpread({
13042	        expires: ''
13043	      }, options);
13044
13045	      if (Type.isNumber(attributes.expires)) {
13046	        var now = +new Date();
13047	        var days = attributes.expires;
13048	        var dayInMs = 864e+5;
13049	        attributes.expires = new Date(now + days * dayInMs);
13050	      }
13051
13052	      if (Type.isDate(attributes.expires)) {
13053	        attributes.expires = attributes.expires.toUTCString();
13054	      }
13055
13056	      var safeName = decodeURIComponent(String(name)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[()]/g, escape);
13057	      var safeValue = encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
13058	      var stringifiedAttributes = Object.keys(attributes).reduce(function (acc, key) {
13059	        var attributeValue = attributes[key];
13060
13061	        if (!attributeValue) {
13062	          return acc;
13063	        }
13064
13065	        if (attributeValue === true) {
13066	          return "".concat(acc, "; ").concat(key);
13067	        }
13068	        /**
13069	         * Considers RFC 6265 section 5.2:
13070	         * ...
13071	         * 3. If the remaining unparsed-attributes contains a %x3B (';')
13072	         * character:
13073	         * Consume the characters of the unparsed-attributes up to,
13074	         * not including, the first %x3B (';') character.
13075	         */
13076
13077
13078	        return "".concat(acc, "; ").concat(key, "=").concat(attributeValue.split(';')[0]);
13079	      }, '');
13080	      document.cookie = "".concat(safeName, "=").concat(safeValue).concat(stringifiedAttributes);
13081	    }
13082	    /**
13083	     * Removes cookie
13084	     * @param {string} name
13085	     * @param {object} [options]
13086	     */
13087
13088	  }, {
13089	    key: "remove",
13090	    value: function remove(name) {
13091	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
13092	      Cookie.set(name, '', babelHelpers.objectSpread({}, options, {
13093	        expires: -1
13094	      }));
13095	    }
13096	  }]);
13097	  return Cookie;
13098	}();
13099
13100	function objectToFormData(source) {
13101	  var formData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new FormData();
13102	  var pre = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
13103
13104	  if (Type.isUndefined(source)) {
13105	    return formData;
13106	  }
13107
13108	  if (Type.isNull(source)) {
13109	    formData.append(pre, '');
13110	  } else if (Type.isArray(source)) {
13111	    if (!source.length) {
13112	      var _key = "".concat(pre, "[]");
13113
13114	      formData.append(_key, '');
13115	    } else {
13116	      source.forEach(function (value, index) {
13117	        var key = "".concat(pre, "[").concat(index, "]");
13118	        objectToFormData(value, formData, key);
13119	      });
13120	    }
13121	  } else if (Type.isDate(source)) {
13122	    formData.append(pre, source.toISOString());
13123	  } else if (Type.isObject(source) && !Type.isFile(source) && !Type.isBlob(source)) {
13124	    Object.keys(source).forEach(function (property) {
13125	      var value = source[property];
13126	      var preparedProperty = property;
13127
13128	      if (Type.isArray(value)) {
13129	        while (property.length > 2 && property.lastIndexOf('[]') === property.length - 2) {
13130	          preparedProperty = property.substring(0, property.length - 2);
13131	        }
13132	      }
13133
13134	      var key = pre ? "".concat(pre, "[").concat(preparedProperty, "]") : preparedProperty;
13135	      objectToFormData(value, formData, key);
13136	    });
13137	  } else {
13138	    formData.append(pre, source);
13139	  }
13140
13141	  return formData;
13142	}
13143
13144	var Data = /*#__PURE__*/function () {
13145	  function Data() {
13146	    babelHelpers.classCallCheck(this, Data);
13147	  }
13148
13149	  babelHelpers.createClass(Data, null, [{
13150	    key: "convertObjectToFormData",
13151
13152	    /**
13153	     * Converts object to FormData
13154	     * @param source
13155	     * @return {FormData}
13156	     */
13157	    value: function convertObjectToFormData(source) {
13158	      return objectToFormData(source);
13159	    }
13160	  }]);
13161	  return Data;
13162	}();
13163
13164	/**
13165	 * @memberOf BX
13166	 */
13167
13168	var Http = function Http() {
13169	  babelHelpers.classCallCheck(this, Http);
13170	};
13171
13172	babelHelpers.defineProperty(Http, "Cookie", Cookie);
13173	babelHelpers.defineProperty(Http, "Data", Data);
13174
13175	function message(value) {
13176	  if (Type.isString(value)) {
13177	    if (Type.isNil(message[value])) {
13178	      // eslint-disable-next-line
13179	      EventEmitter.emit('onBXMessageNotFound', new BaseEvent({
13180	        compatData: [value]
13181	      }));
13182
13183	      if (Type.isNil(message[value])) {
13184	        Runtime.debug("message undefined: ".concat(value));
13185	        message[value] = '';
13186	      }
13187	    }
13188	  }
13189
13190	  if (Type.isPlainObject(value)) {
13191	    Object.keys(value).forEach(function (key) {
13192	      message[key] = value[key];
13193	    });
13194	  }
13195
13196	  return message[value];
13197	}
13198
13199	if (!Type.isNil(window.BX) && Type.isFunction(window.BX.message)) {
13200	  Object.keys(window.BX.message).forEach(function (key) {
13201	    message(babelHelpers.defineProperty({}, key, window.BX.message[key]));
13202	  });
13203	}
13204
13205	/**
13206	 * Implements interface for works with language messages
13207	 * @memberOf BX
13208	 */
13209
13210	var Loc = /*#__PURE__*/function () {
13211	  function Loc() {
13212	    babelHelpers.classCallCheck(this, Loc);
13213	  }
13214
13215	  babelHelpers.createClass(Loc, null, [{
13216	    key: "getMessage",
13217
13218	    /**
13219	     * Gets message by id
13220	     * @param {string} messageId
13221	     * @return {?string}
13222	     */
13223	    value: function getMessage(messageId) {
13224	      return message(messageId);
13225	    }
13226	    /**
13227	     * Sets message or messages
13228	     * @param {string | Object<string, string>} id
13229	     * @param {string} [value]
13230	     */
13231
13232	  }, {
13233	    key: "setMessage",
13234	    value: function setMessage(id, value) {
13235	      if (Type.isString(id) && Type.isString(value)) {
13236	        message(babelHelpers.defineProperty({}, id, value));
13237	      }
13238
13239	      if (Type.isObject(id)) {
13240	        message(id);
13241	      }
13242	    }
13243	  }]);
13244	  return Loc;
13245	}();
13246
13247	var handlers = new Map();
13248	var children = new Map();
13249
13250	var getUid = function () {
13251	  var incremental = 0;
13252	  return function () {
13253	    incremental += 1;
13254	    return incremental;
13255	  };
13256	}();
13257
13258	function bindAll(element, handlersMap) {
13259	  handlersMap.forEach(function (handler, key) {
13260	    var currentElement = element.querySelector("[".concat(key, "]"));
13261
13262	    if (currentElement) {
13263	      currentElement.removeAttribute(key);
13264	      var event = key.replace(/-(.*)/, '');
13265	      Event.bind(currentElement, event, handler);
13266	      handlers.delete(key);
13267	    }
13268	  });
13269	}
13270
13271	function replaceChild(element, childrenMap) {
13272	  childrenMap.forEach(function (item, id) {
13273	    var currentElement = element.getElementById(id);
13274
13275	    if (currentElement) {
13276	      Dom.replace(currentElement, item);
13277	      children.delete(id);
13278	    }
13279	  });
13280	}
13281
13282	function render(sections) {
13283	  var eventAttrRe = /[ |\t]on(\w+)="$/;
13284	  var uselessSymbolsRe = /[\r\n\t]/g;
13285
13286	  for (var _len = arguments.length, substitutions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
13287	    substitutions[_key - 1] = arguments[_key];
13288	  }
13289
13290	  var html = substitutions.reduce(function (acc, item, index) {
13291	    var preparedAcc = acc; // Process event handlers
13292
13293	    var matches = acc.match(eventAttrRe);
13294
13295	    if (matches && Type.isFunction(item)) {
13296	      var eventName = matches[1].replace(/=['|"]/, '');
13297	      var attrName = "".concat(eventName, "-").concat(getUid());
13298	      var attribute = "".concat(attrName, "=\"");
13299	      preparedAcc = preparedAcc.replace(eventAttrRe, " ".concat(attribute));
13300	      handlers.set(attrName, item);
13301	      preparedAcc += sections[index + 1].replace(uselessSymbolsRe, ' ').replace(/  +/g, ' ');
13302	      return preparedAcc;
13303	    } // Process element
13304
13305
13306	    if (Type.isDomNode(item)) {
13307	      var childKey = "tmp___".concat(getUid());
13308	      children.set(childKey, item);
13309	      preparedAcc += "<span id=\"".concat(childKey, "\"> </span>");
13310	      preparedAcc += sections[index + 1];
13311	      return preparedAcc;
13312	    } // Process array
13313
13314
13315	    if (Type.isArray(item)) {
13316	      babelHelpers.toConsumableArray(item).forEach(function (currentElement) {
13317	        if (Type.isDomNode(currentElement)) {
13318	          var _childKey = "tmp___".concat(getUid());
13319
13320	          children.set(_childKey, currentElement);
13321	          preparedAcc += "<span id=\"".concat(_childKey, "\"> </span>");
13322	        }
13323	      });
13324	      preparedAcc += sections[index + 1];
13325	      return preparedAcc;
13326	    }
13327
13328	    return preparedAcc + item + sections[index + 1];
13329	  }, sections[0]);
13330	  var lowercaseHtml = html.trim().toLowerCase();
13331
13332	  if (lowercaseHtml.startsWith('<!doctype') || lowercaseHtml.startsWith('<html')) {
13333	    var doc = document.implementation.createHTMLDocument('');
13334	    doc.documentElement.innerHTML = html;
13335	    replaceChild(doc, children);
13336	    bindAll(doc, handlers);
13337	    handlers.clear();
13338	    return doc;
13339	  }
13340
13341	  var parser = new DOMParser();
13342	  var parsedDocument = parser.parseFromString(html, 'text/html');
13343	  replaceChild(parsedDocument, children);
13344	  bindAll(parsedDocument, handlers);
13345
13346	  if (parsedDocument.head.children.length && parsedDocument.body.children.length) {
13347	    return parsedDocument;
13348	  }
13349
13350	  if (parsedDocument.body.children.length === 1) {
13351	    var _parsedDocument$body$ = babelHelpers.slicedToArray(parsedDocument.body.children, 1),
13352	        el = _parsedDocument$body$[0];
13353
13354	    Dom.remove(el);
13355	    return el;
13356	  }
13357
13358	  if (parsedDocument.body.children.length > 1) {
13359	    return babelHelpers.toConsumableArray(parsedDocument.body.children).map(function (item) {
13360	      Dom.remove(item);
13361	      return item;
13362	    });
13363	  }
13364
13365	  if (parsedDocument.body.children.length === 0) {
13366	    if (parsedDocument.head.children.length === 1) {
13367	      var _parsedDocument$head$ = babelHelpers.slicedToArray(parsedDocument.head.children, 1),
13368	          _el = _parsedDocument$head$[0];
13369
13370	      Dom.remove(_el);
13371	      return _el;
13372	    }
13373
13374	    if (parsedDocument.head.children.length > 1) {
13375	      return babelHelpers.toConsumableArray(parsedDocument.head.children).map(function (item) {
13376	        Dom.remove(item);
13377	        return item;
13378	      });
13379	    }
13380	  }
13381
13382	  return false;
13383	}
13384
13385	function parseProps(sections) {
13386	  for (var _len = arguments.length, substitutions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
13387	    substitutions[_key - 1] = arguments[_key];
13388	  }
13389
13390	  return substitutions.reduce(function (acc, item, index) {
13391	    var nextSectionIndex = index + 1;
13392
13393	    if (!Type.isPlainObject(item) && !Type.isArray(item)) {
13394	      return acc + item + sections[nextSectionIndex];
13395	    }
13396
13397	    return "".concat(acc, "__s").concat(index).concat(sections[nextSectionIndex]);
13398	  }, sections[0]).replace(/[\r\t]/gm, '').split(';\n').map(function (item) {
13399	    return item.replace(/\n/, '');
13400	  }).reduce(function (acc, item) {
13401	    if (item !== '') {
13402	      var matches = item.match(/^[\w-. ]+:/);
13403	      var splitted = item.split(/^[\w-. ]+:/);
13404
13405	      var _key2 = matches[0].replace(':', '').trim();
13406
13407	      var value = splitted[1].trim();
13408	      var substitutionPlaceholderExp = /^__s\d+/;
13409
13410	      if (substitutionPlaceholderExp.test(value)) {
13411	        acc[_key2] = substitutions[value.replace('__s', '')];
13412	        return acc;
13413	      }
13414
13415	      acc[_key2] = value;
13416	    }
13417
13418	    return acc;
13419	  }, {});
13420	}
13421	/**
13422	 * @memberOf BX
13423	 */
13424
13425
13426	var Tag = /*#__PURE__*/function () {
13427	  function Tag() {
13428	    babelHelpers.classCallCheck(this, Tag);
13429	  }
13430
13431	  babelHelpers.createClass(Tag, null, [{
13432	    key: "safe",
13433
13434	    /**
13435	     * Encodes all substitutions
13436	     * @param sections
13437	     * @param substitutions
13438	     * @return {string}
13439	     */
13440	    value: function safe(sections) {
13441	      for (var _len2 = arguments.length, substitutions = new Array(_len2 > 1 ? _len2 - 1 : 0), _key3 = 1; _key3 < _len2; _key3++) {
13442	        substitutions[_key3 - 1] = arguments[_key3];
13443	      }
13444
13445	      return substitutions.reduce(function (acc, item, index) {
13446	        return acc + Text.encode(item) + sections[index + 1];
13447	      }, sections[0]);
13448	    }
13449	    /**
13450	     * Decodes all substitutions
13451	     * @param sections
13452	     * @param substitutions
13453	     * @return {string}
13454	     */
13455
13456	  }, {
13457	    key: "unsafe",
13458	    value: function unsafe(sections) {
13459	      for (var _len3 = arguments.length, substitutions = new Array(_len3 > 1 ? _len3 - 1 : 0), _key4 = 1; _key4 < _len3; _key4++) {
13460	        substitutions[_key4 - 1] = arguments[_key4];
13461	      }
13462
13463	      return substitutions.reduce(function (acc, item, index) {
13464	        return acc + Text.decode(item) + sections[index + 1];
13465	      }, sections[0]);
13466	    }
13467	    /**
13468	     * Adds styles to specified element
13469	     * @param {HTMLElement} element
13470	     * @return {Function}
13471	     */
13472
13473	  }, {
13474	    key: "style",
13475	    value: function style(element) {
13476	      if (!Type.isDomNode(element)) {
13477	        throw new Error('element is not HTMLElement');
13478	      }
13479
13480	      return function styleTagHandler() {
13481	        Dom.style(element, parseProps.apply(void 0, arguments));
13482	      };
13483	    }
13484	    /**
13485	     * Replace all messages identifiers to real messages
13486	     * @param sections
13487	     * @param substitutions
13488	     * @return {string}
13489	     */
13490
13491	  }, {
13492	    key: "message",
13493	    value: function message(sections) {
13494	      for (var _len4 = arguments.length, substitutions = new Array(_len4 > 1 ? _len4 - 1 : 0), _key5 = 1; _key5 < _len4; _key5++) {
13495	        substitutions[_key5 - 1] = arguments[_key5];
13496	      }
13497
13498	      return substitutions.reduce(function (acc, item, index) {
13499	        return acc + Loc.getMessage(item) + sections[index + 1];
13500	      }, sections[0]);
13501	    }
13502	  }, {
13503	    key: "attrs",
13504
13505	    /**
13506	     * Adds attributes to specified element
13507	     * @param element
13508	     * @return {Function}
13509	     */
13510	    value: function attrs(element) {
13511	      if (!Type.isDomNode(element)) {
13512	        throw new Error('element is not HTMLElement');
13513	      }
13514
13515	      return function attrsTagHandler() {
13516	        Dom.attr(element, parseProps.apply(void 0, arguments));
13517	      };
13518	    }
13519	  }]);
13520	  return Tag;
13521	}();
13522
13523	babelHelpers.defineProperty(Tag, "render", render);
13524	babelHelpers.defineProperty(Tag, "attr", Tag.attrs);
13525
13526	function getParser(format) {
13527	  switch (format) {
13528	    case 'index':
13529	      return function (sourceKey, value, accumulator) {
13530	        var result = /\[(\w*)\]$/.exec(sourceKey);
13531	        var key = sourceKey.replace(/\[\w*\]$/, '');
13532
13533	        if (Type.isNil(result)) {
13534	          accumulator[key] = value;
13535	          return;
13536	        }
13537
13538	        if (Type.isUndefined(accumulator[key])) {
13539	          accumulator[key] = {};
13540	        }
13541
13542	        accumulator[key][result[1]] = value;
13543	      };
13544
13545	    case 'bracket':
13546	      return function (sourceKey, value, accumulator) {
13547	        var result = /(\[\])$/.exec(sourceKey);
13548	        var key = sourceKey.replace(/\[\]$/, '');
13549
13550	        if (Type.isNil(result)) {
13551	          accumulator[key] = value;
13552	          return;
13553	        }
13554
13555	        if (Type.isUndefined(accumulator[key])) {
13556	          accumulator[key] = [value];
13557	          return;
13558	        }
13559
13560	        accumulator[key] = [].concat(accumulator[key], value);
13561	      };
13562
13563	    default:
13564	      return function (sourceKey, value, accumulator) {
13565	        var key = sourceKey.replace(/\[\]$/, '');
13566	        accumulator[key] = value;
13567	      };
13568	  }
13569	}
13570
13571	function getKeyFormat(key) {
13572	  if (/^\w+\[([\w]+)\]$/.test(key)) {
13573	    return 'index';
13574	  }
13575
13576	  if (/^\w+\[\]$/.test(key)) {
13577	    return 'bracket';
13578	  }
13579
13580	  return 'default';
13581	}
13582
13583	function parseQuery(input) {
13584	  if (!Type.isString(input)) {
13585	    return {};
13586	  }
13587
13588	  var url = input.trim().replace(/^[?#&]/, '');
13589
13590	  if (!url) {
13591	    return {};
13592	  }
13593
13594	  return url.split('&').reduce(function (acc, param) {
13595	    var _param$replace$split = param.replace(/\+/g, ' ').split('='),
13596	        _param$replace$split2 = babelHelpers.slicedToArray(_param$replace$split, 2),
13597	        key = _param$replace$split2[0],
13598	        value = _param$replace$split2[1];
13599
13600	    var keyFormat = getKeyFormat(key);
13601	    var formatter = getParser(keyFormat);
13602	    formatter(key, value, acc);
13603	    return acc;
13604	  }, {});
13605	}
13606
13607	var urlExp = /^((\w+):)?(\/\/((\w+)?(:(\w+))?@)?([^\/\?:]+)(:(\d+))?)?(\/?([^\/\?#][^\?#]*)?)?(\?([^#]+))?(#(\w*))?/;
13608	function parseUrl(url) {
13609	  var result = url.match(urlExp);
13610
13611	  if (Type.isArray(result)) {
13612	    var queryParams = parseQuery(result[14]);
13613	    return {
13614	      useShort: /^\/\//.test(url),
13615	      href: result[0] || '',
13616	      schema: result[2] || '',
13617	      host: result[8] || '',
13618	      port: result[10] || '',
13619	      path: result[11] || '',
13620	      query: result[14] || '',
13621	      queryParams: queryParams,
13622	      hash: result[16] || '',
13623	      username: result[5] || '',
13624	      password: result[7] || '',
13625	      origin: result[8] || ''
13626	    };
13627	  }
13628
13629	  return {};
13630	}
13631
13632	function buildQueryString() {
13633	  var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13634	  var queryString = Object.keys(params).reduce(function (acc, key) {
13635	    if (Type.isArray(params[key])) {
13636	      params[key].forEach(function (paramValue) {
13637	        acc.push("".concat(key, "[]=").concat(paramValue));
13638	      }, '');
13639	    }
13640
13641	    if (Type.isPlainObject(params[key])) {
13642	      Object.keys(params[key]).forEach(function (paramIndex) {
13643	        acc.push("".concat(key, "[").concat(paramIndex, "]=").concat(params[key][paramIndex]));
13644	      }, '');
13645	    }
13646
13647	    if (!Type.isObject(params[key]) && !Type.isArray(params[key])) {
13648	      acc.push("".concat(key, "=").concat(params[key]));
13649	    }
13650
13651	    return acc;
13652	  }, []).join('&');
13653
13654	  if (queryString.length > 0) {
13655	    return "?".concat(queryString);
13656	  }
13657
13658	  return queryString;
13659	}
13660
13661	function prepareParamValue(value) {
13662	  if (Type.isArray(value)) {
13663	    return value.map(function (item) {
13664	      return String(item);
13665	    });
13666	  }
13667
13668	  if (Type.isPlainObject(value)) {
13669	    return babelHelpers.objectSpread({}, value);
13670	  }
13671
13672	  return String(value);
13673	}
13674
13675	var map = new WeakMap();
13676	/**
13677	 * Implements interface for works with URI
13678	 * @memberOf BX
13679	 */
13680
13681	var Uri = /*#__PURE__*/function () {
13682	  babelHelpers.createClass(Uri, null, [{
13683	    key: "addParam",
13684	    value: function addParam(url) {
13685	      var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
13686	      return new Uri(url).setQueryParams(params).toString();
13687	    }
13688	  }, {
13689	    key: "removeParam",
13690	    value: function removeParam(url, params) {
13691	      var _Uri;
13692
13693	      var removableParams = Type.isArray(params) ? params : [params];
13694	      return (_Uri = new Uri(url)).removeQueryParam.apply(_Uri, babelHelpers.toConsumableArray(removableParams)).toString();
13695	    }
13696	  }]);
13697
13698	  function Uri() {
13699	    var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
13700	    babelHelpers.classCallCheck(this, Uri);
13701	    map.set(this, parseUrl(url));
13702	  }
13703	  /**
13704	   * Gets schema
13705	   * @return {?string}
13706	   */
13707
13708
13709	  babelHelpers.createClass(Uri, [{
13710	    key: "getSchema",
13711	    value: function getSchema() {
13712	      return map.get(this).schema;
13713	    }
13714	    /**
13715	     * Sets schema
13716	     * @param {string} schema
13717	     * @return {Uri}
13718	     */
13719
13720	  }, {
13721	    key: "setSchema",
13722	    value: function setSchema(schema) {
13723	      map.get(this).schema = String(schema);
13724	      return this;
13725	    }
13726	    /**
13727	     * Gets host
13728	     * @return {?string}
13729	     */
13730
13731	  }, {
13732	    key: "getHost",
13733	    value: function getHost() {
13734	      return map.get(this).host;
13735	    }
13736	    /**
13737	     * Sets host
13738	     * @param {string} host
13739	     * @return {Uri}
13740	     */
13741
13742	  }, {
13743	    key: "setHost",
13744	    value: function setHost(host) {
13745	      map.get(this).host = String(host);
13746	      return this;
13747	    }
13748	    /**
13749	     * Gets port
13750	     * @return {?string}
13751	     */
13752
13753	  }, {
13754	    key: "getPort",
13755	    value: function getPort() {
13756	      return map.get(this).port;
13757	    }
13758	    /**
13759	     * Sets port
13760	     * @param {String | Number} port
13761	     * @return {Uri}
13762	     */
13763
13764	  }, {
13765	    key: "setPort",
13766	    value: function setPort(port) {
13767	      map.get(this).port = String(port);
13768	      return this;
13769	    }
13770	    /**
13771	     * Gets path
13772	     * @return {?string}
13773	     */
13774
13775	  }, {
13776	    key: "getPath",
13777	    value: function getPath() {
13778	      return map.get(this).path;
13779	    }
13780	    /**
13781	     * Sets path
13782	     * @param {string} path
13783	     * @return {Uri}
13784	     */
13785
13786	  }, {
13787	    key: "setPath",
13788	    value: function setPath(path) {
13789	      if (!/^\//.test(path)) {
13790	        map.get(this).path = "/".concat(String(path));
13791	        return this;
13792	      }
13793
13794	      map.get(this).path = String(path);
13795	      return this;
13796	    }
13797	    /**
13798	     * Gets query
13799	     * @return {?string}
13800	     */
13801
13802	  }, {
13803	    key: "getQuery",
13804	    value: function getQuery() {
13805	      return buildQueryString(map.get(this).queryParams);
13806	    }
13807	    /**
13808	     * Gets query param value by name
13809	     * @param {string} key
13810	     * @return {?string}
13811	     */
13812
13813	  }, {
13814	    key: "getQueryParam",
13815	    value: function getQueryParam(key) {
13816	      var params = this.getQueryParams();
13817
13818	      if (key in params) {
13819	        return params[key];
13820	      }
13821
13822	      return null;
13823	    }
13824	    /**
13825	     * Sets query param
13826	     * @param {string} key
13827	     * @param [value]
13828	     * @return {Uri}
13829	     */
13830
13831	  }, {
13832	    key: "setQueryParam",
13833	    value: function setQueryParam(key) {
13834	      var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
13835	      map.get(this).queryParams[key] = prepareParamValue(value);
13836	      return this;
13837	    }
13838	    /**
13839	     * Gets query params
13840	     * @return {Object<string, any>}
13841	     */
13842
13843	  }, {
13844	    key: "getQueryParams",
13845	    value: function getQueryParams() {
13846	      return babelHelpers.objectSpread({}, map.get(this).queryParams);
13847	    }
13848	    /**
13849	     * Sets query params
13850	     * @param {Object<string, any>} params
13851	     * @return {Uri}
13852	     */
13853
13854	  }, {
13855	    key: "setQueryParams",
13856	    value: function setQueryParams() {
13857	      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13858	      var currentParams = this.getQueryParams();
13859	      var newParams = babelHelpers.objectSpread({}, currentParams, params);
13860	      Object.keys(newParams).forEach(function (key) {
13861	        newParams[key] = prepareParamValue(newParams[key]);
13862	      });
13863	      map.get(this).queryParams = newParams;
13864	      return this;
13865	    }
13866	    /**
13867	     * Removes query params by name
13868	     * @param keys
13869	     * @return {Uri}
13870	     */
13871
13872	  }, {
13873	    key: "removeQueryParam",
13874	    value: function removeQueryParam() {
13875	      var currentParams = babelHelpers.objectSpread({}, map.get(this).queryParams);
13876
13877	      for (var _len = arguments.length, keys = new Array(_len), _key = 0; _key < _len; _key++) {
13878	        keys[_key] = arguments[_key];
13879	      }
13880
13881	      keys.forEach(function (key) {
13882	        if (key in currentParams) {
13883	          delete currentParams[key];
13884	        }
13885	      });
13886	      map.get(this).queryParams = currentParams;
13887	      return this;
13888	    }
13889	    /**
13890	     * Gets fragment
13891	     * @return {?string}
13892	     */
13893
13894	  }, {
13895	    key: "getFragment",
13896	    value: function getFragment() {
13897	      return map.get(this).hash;
13898	    }
13899	    /**
13900	     * Sets fragment
13901	     * @param {string} hash
13902	     * @return {Uri}
13903	     */
13904
13905	  }, {
13906	    key: "setFragment",
13907	    value: function setFragment(hash) {
13908	      map.get(this).hash = String(hash);
13909	      return this;
13910	    }
13911	    /**
13912	     * Serializes URI
13913	     * @return {Object}
13914	     */
13915
13916	  }, {
13917	    key: "serialize",
13918	    value: function serialize() {
13919	      var serialized = babelHelpers.objectSpread({}, map.get(this));
13920	      serialized.href = this.toString();
13921	      return serialized;
13922	    }
13923	    /**
13924	     * Gets URI string
13925	     * @return {string}
13926	     */
13927
13928	  }, {
13929	    key: "toString",
13930	    value: function toString() {
13931	      var data = babelHelpers.objectSpread({}, map.get(this));
13932	      var protocol = data.schema ? "".concat(data.schema, "://") : '';
13933
13934	      if (data.useShort) {
13935	        protocol = '//';
13936	      }
13937
13938	      var port = function () {
13939	        if (Type.isString(data.port) && !['', '80'].includes(data.port)) {
13940	          return ":".concat(data.port);
13941	        }
13942
13943	        return '';
13944	      }();
13945
13946	      var host = this.getHost();
13947	      var path = this.getPath();
13948	      var query = buildQueryString(data.queryParams);
13949	      var hash = data.hash ? "#".concat(data.hash) : '';
13950	      return "".concat(host ? protocol : '').concat(host).concat(host ? port : '').concat(path).concat(query).concat(hash);
13951	    }
13952	  }]);
13953	  return Uri;
13954	}();
13955
13956	/**
13957	 * @memberOf BX
13958	 */
13959	var Validation = /*#__PURE__*/function () {
13960	  function Validation() {
13961	    babelHelpers.classCallCheck(this, Validation);
13962	  }
13963
13964	  babelHelpers.createClass(Validation, null, [{
13965	    key: "isEmail",
13966
13967	    /**
13968	     * Checks that value is valid email
13969	     * @param value
13970	     * @return {boolean}
13971	     */
13972	    value: function isEmail(value) {
13973	      var exp = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
13974	      return exp.test(String(value).toLowerCase());
13975	    }
13976	  }]);
13977	  return Validation;
13978	}();
13979
13980	var BaseCache = /*#__PURE__*/function () {
13981	  function BaseCache() {
13982	    babelHelpers.classCallCheck(this, BaseCache);
13983	    babelHelpers.defineProperty(this, "storage", new Map());
13984	  }
13985
13986	  babelHelpers.createClass(BaseCache, [{
13987	    key: "get",
13988
13989	    /**
13990	     * Gets cached value or default value
13991	     */
13992	    value: function get(key, defaultValue) {
13993	      if (!this.storage.has(key)) {
13994	        if (Type.isFunction(defaultValue)) {
13995	          return defaultValue();
13996	        }
13997
13998	        if (!Type.isUndefined(defaultValue)) {
13999	          return defaultValue;
14000	        }
14001	      }
14002
14003	      return this.storage.get(key);
14004	    }
14005	    /**
14006	     * Sets cache entry
14007	     */
14008
14009	  }, {
14010	    key: "set",
14011	    value: function set(key, value) {
14012	      this.storage.set(key, value);
14013	    }
14014	    /**
14015	     * Deletes cache entry
14016	     */
14017
14018	  }, {
14019	    key: "delete",
14020	    value: function _delete(key) {
14021	      this.storage.delete(key);
14022	    }
14023	    /**
14024	     * Checks that storage contains entry with specified key
14025	     */
14026
14027	  }, {
14028	    key: "has",
14029	    value: function has(key) {
14030	      return this.storage.has(key);
14031	    }
14032	    /**
14033	     * Gets cached value if exists,
14034	     */
14035
14036	  }, {
14037	    key: "remember",
14038	    value: function remember(key, defaultValue) {
14039	      if (!this.storage.has(key)) {
14040	        if (Type.isFunction(defaultValue)) {
14041	          this.storage.set(key, defaultValue());
14042	        } else if (!Type.isUndefined(defaultValue)) {
14043	          this.storage.set(key, defaultValue);
14044	        }
14045	      }
14046
14047	      return this.storage.get(key);
14048	    }
14049	    /**
14050	     * Gets storage size
14051	     */
14052
14053	  }, {
14054	    key: "size",
14055	    value: function size() {
14056	      return this.storage.size;
14057	    }
14058	    /**
14059	     * Gets storage keys
14060	     */
14061
14062	  }, {
14063	    key: "keys",
14064	    value: function keys() {
14065	      return babelHelpers.toConsumableArray(this.storage.keys());
14066	    }
14067	    /**
14068	     * Gets storage values
14069	     */
14070
14071	  }, {
14072	    key: "values",
14073	    value: function values() {
14074	      return babelHelpers.toConsumableArray(this.storage.values());
14075	    }
14076	  }]);
14077	  return BaseCache;
14078	}();
14079
14080	var MemoryCache = /*#__PURE__*/function (_BaseCache) {
14081	  babelHelpers.inherits(MemoryCache, _BaseCache);
14082
14083	  function MemoryCache() {
14084	    var _babelHelpers$getProt;
14085
14086	    var _this;
14087
14088	    babelHelpers.classCallCheck(this, MemoryCache);
14089
14090	    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
14091	      args[_key] = arguments[_key];
14092	    }
14093
14094	    _this = babelHelpers.possibleConstructorReturn(this, (_babelHelpers$getProt = babelHelpers.getPrototypeOf(MemoryCache)).call.apply(_babelHelpers$getProt, [this].concat(args)));
14095	    babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "storage", new Map());
14096	    return _this;
14097	  }
14098
14099	  return MemoryCache;
14100	}(BaseCache);
14101
14102	var LsStorage = /*#__PURE__*/function () {
14103	  function LsStorage() {
14104	    babelHelpers.classCallCheck(this, LsStorage);
14105	    babelHelpers.defineProperty(this, "stackKey", 'BX.Cache.Storage.LsStorage.stack');
14106	    babelHelpers.defineProperty(this, "stack", null);
14107	  }
14108
14109	  babelHelpers.createClass(LsStorage, [{
14110	    key: "getStack",
14111
14112	    /**
14113	     * @private
14114	     */
14115	    value: function getStack() {
14116	      if (Type.isPlainObject(this.stack)) {
14117	        return this.stack;
14118	      }
14119
14120	      var stack = localStorage.getItem(this.stackKey);
14121
14122	      if (Type.isString(stack) && stack !== '') {
14123	        var parsedStack = JSON.parse(stack);
14124
14125	        if (Type.isPlainObject(parsedStack)) {
14126	          this.stack = parsedStack;
14127	          return this.stack;
14128	        }
14129	      }
14130
14131	      this.stack = {};
14132	      return this.stack;
14133	    }
14134	    /**
14135	     * @private
14136	     */
14137
14138	  }, {
14139	    key: "saveStack",
14140	    value: function saveStack() {
14141	      if (Type.isPlainObject(this.stack)) {
14142	        var preparedStack = JSON.stringify(this.stack);
14143	        localStorage.setItem(this.stackKey, preparedStack);
14144	      }
14145	    }
14146	  }, {
14147	    key: "get",
14148	    value: function get(key) {
14149	      var stack = this.getStack();
14150	      return stack[key];
14151	    }
14152	  }, {
14153	    key: "set",
14154	    value: function set(key, value) {
14155	      var stack = this.getStack();
14156	      stack[key] = value;
14157	      this.saveStack();
14158	    }
14159	  }, {
14160	    key: "delete",
14161	    value: function _delete(key) {
14162	      var stack = this.getStack();
14163
14164	      if (key in stack) {
14165	        delete stack[key];
14166	      }
14167	    }
14168	  }, {
14169	    key: "has",
14170	    value: function has(key) {
14171	      var stack = this.getStack();
14172	      return key in stack;
14173	    }
14174	  }, {
14175	    key: "keys",
14176	    value: function keys() {
14177	      var stack = this.getStack();
14178	      return Object.keys(stack);
14179	    }
14180	  }, {
14181	    key: "values",
14182	    value: function values() {
14183	      var stack = this.getStack();
14184	      return Object.values(stack);
14185	    }
14186	  }, {
14187	    key: "size",
14188	    get: function get() {
14189	      var stack = this.getStack();
14190	      return Object.keys(stack).length;
14191	    }
14192	  }]);
14193	  return LsStorage;
14194	}();
14195
14196	var LocalStorageCache = /*#__PURE__*/function (_BaseCache) {
14197	  babelHelpers.inherits(LocalStorageCache, _BaseCache);
14198
14199	  function LocalStorageCache() {
14200	    var _babelHelpers$getProt;
14201
14202	    var _this;
14203
14204	    babelHelpers.classCallCheck(this, LocalStorageCache);
14205
14206	    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
14207	      args[_key] = arguments[_key];
14208	    }
14209
14210	    _this = babelHelpers.possibleConstructorReturn(this, (_babelHelpers$getProt = babelHelpers.getPrototypeOf(LocalStorageCache)).call.apply(_babelHelpers$getProt, [this].concat(args)));
14211	    babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "storage", new LsStorage());
14212	    return _this;
14213	  }
14214
14215	  return LocalStorageCache;
14216	}(BaseCache);
14217
14218	/**
14219	 * @memberOf BX
14220	 */
14221
14222	var Cache = function Cache() {
14223	  babelHelpers.classCallCheck(this, Cache);
14224	};
14225
14226	babelHelpers.defineProperty(Cache, "MemoryCache", MemoryCache);
14227	babelHelpers.defineProperty(Cache, "LocalStorageCache", LocalStorageCache);
14228
14229	function convertPath(path) {
14230	  if (Type.isStringFilled(path)) {
14231	    return path.split('.').reduce(function (acc, item) {
14232	      item.split(/\[['"]?(.+?)['"]?\]/g).forEach(function (key) {
14233	        if (Type.isStringFilled(key)) {
14234	          acc.push(key);
14235	        }
14236	      });
14237	      return acc;
14238	    }, []);
14239	  }
14240
14241	  return [];
14242	}
14243
14244	var SettingsCollection = /*#__PURE__*/function () {
14245	  function SettingsCollection() {
14246	    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
14247	    babelHelpers.classCallCheck(this, SettingsCollection);
14248
14249	    if (Type.isPlainObject(options)) {
14250	      Object.assign(this, options);
14251	    }
14252	  }
14253
14254	  babelHelpers.createClass(SettingsCollection, [{
14255	    key: "get",
14256	    value: function get(path) {
14257	      var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
14258	      var convertedPath = convertPath(path);
14259	      return convertedPath.reduce(function (acc, key) {
14260	        if (!Type.isNil(acc) && acc !== defaultValue) {
14261	          if (!Type.isUndefined(acc[key])) {
14262	            return acc[key];
14263	          }
14264
14265	          return defaultValue;
14266	        }
14267
14268	        return acc;
14269	      }, this);
14270	    }
14271	  }]);
14272	  return SettingsCollection;
14273	}();
14274
14275	function deepFreeze(target) {
14276	  if (Type.isObject(target)) {
14277	    Object.values(target).forEach(function (value) {
14278	      deepFreeze(value);
14279	    });
14280	    return Object.freeze(target);
14281	  }
14282
14283	  return target;
14284	}
14285
14286	var settingsStorage = new Map();
14287
14288	var Extension$1 = /*#__PURE__*/function () {
14289	  function Extension() {
14290	    babelHelpers.classCallCheck(this, Extension);
14291	  }
14292
14293	  babelHelpers.createClass(Extension, null, [{
14294	    key: "getSettings",
14295	    value: function getSettings(extensionName) {
14296	      if (Type.isStringFilled(extensionName)) {
14297	        if (settingsStorage.has(extensionName)) {
14298	          return settingsStorage.get(extensionName);
14299	        }
14300
14301	        var settingsScriptNode = document.querySelector("script[data-extension=\"".concat(extensionName, "\"]"));
14302
14303	        if (Type.isDomNode(settingsScriptNode)) {
14304	          var decodedSettings = function () {
14305	            try {
14306	              return new SettingsCollection(JSON.parse(settingsScriptNode.innerHTML));
14307	            } catch (error) {
14308	              return new SettingsCollection();
14309	            }
14310	          }();
14311
14312	          var frozenSettings = deepFreeze(decodedSettings);
14313	          settingsStorage.set(extensionName, frozenSettings);
14314	          return frozenSettings;
14315	        }
14316	      }
14317
14318	      return deepFreeze(new SettingsCollection());
14319	    }
14320	  }]);
14321	  return Extension;
14322	}();
14323
14324	var _Symbol$iterator;
14325
14326	function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
14327
14328	var _searchIndexToInsert = new WeakSet();
14329
14330	_Symbol$iterator = Symbol.iterator;
14331
14332	var OrderedArray = /*#__PURE__*/function () {
14333	  function OrderedArray() {
14334	    var comparator = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
14335	    babelHelpers.classCallCheck(this, OrderedArray);
14336
14337	    _searchIndexToInsert.add(this);
14338
14339	    babelHelpers.defineProperty(this, "comparator", null);
14340	    babelHelpers.defineProperty(this, "items", []);
14341	    this.comparator = Type.isFunction(comparator) ? comparator : null;
14342	  }
14343
14344	  babelHelpers.createClass(OrderedArray, [{
14345	    key: "add",
14346	    value: function add(item) {
14347	      var index = -1;
14348
14349	      if (this.comparator) {
14350	        index = _classPrivateMethodGet(this, _searchIndexToInsert, _searchIndexToInsert2).call(this, item);
14351	        this.items.splice(index, 0, item);
14352	      } else {
14353	        this.items.push(item);
14354	      }
14355
14356	      return index;
14357	    }
14358	  }, {
14359	    key: "has",
14360	    value: function has(item) {
14361	      return this.items.includes(item);
14362	    }
14363	  }, {
14364	    key: "getIndex",
14365	    value: function getIndex(item) {
14366	      return this.items.indexOf(item);
14367	    }
14368	  }, {
14369	    key: "getByIndex",
14370	    value: function getByIndex(index) {
14371	      if (Type.isNumber(index) && index >= 0) {
14372	        var item = this.items[index];
14373	        return Type.isUndefined(item) ? null : item;
14374	      }
14375
14376	      return null;
14377	    }
14378	  }, {
14379	    key: "getFirst",
14380	    value: function getFirst() {
14381	      var first = this.items[0];
14382	      return Type.isUndefined(first) ? null : first;
14383	    }
14384	  }, {
14385	    key: "getLast",
14386	    value: function getLast() {
14387	      var last = this.items[this.count() - 1];
14388	      return Type.isUndefined(last) ? null : last;
14389	    }
14390	  }, {
14391	    key: "count",
14392	    value: function count() {
14393	      return this.items.length;
14394	    }
14395	  }, {
14396	    key: "delete",
14397	    value: function _delete(item) {
14398	      var index = this.getIndex(item);
14399
14400	      if (index !== -1) {
14401	        this.items.splice(index, 1);
14402	        return true;
14403	      }
14404
14405	      return false;
14406	    }
14407	  }, {
14408	    key: "clear",
14409	    value: function clear() {
14410	      this.items = [];
14411	    }
14412	  }, {
14413	    key: _Symbol$iterator,
14414	    value: function value() {
14415	      return this.items[Symbol.iterator]();
14416	    }
14417	  }, {
14418	    key: "forEach",
14419	    value: function forEach(callbackfn, thisArg) {
14420	      return this.items.forEach(callbackfn, thisArg);
14421	    }
14422	  }, {
14423	    key: "getAll",
14424	    value: function getAll() {
14425	      return this.items;
14426	    }
14427	  }, {
14428	    key: "getComparator",
14429	    value: function getComparator() {
14430	      return this.comparator;
14431	    }
14432	  }, {
14433	    key: "sort",
14434	    value: function sort() {
14435	      var _this = this;
14436
14437	      var comparator = this.getComparator();
14438
14439	      if (comparator === null) {
14440	        return;
14441	      }
14442	      /*
14443	      Simple implementation
14444	      this.items.sort((item1, item2) => {
14445	      	return comparator(item1, item2);
14446	      });
14447	      */
14448	      // For stable sorting https://v8.dev/features/stable-sort
14449
14450
14451	      var length = this.items.length;
14452	      var indexes = new Array(length);
14453
14454	      for (var i = 0; i < length; i++) {
14455	        indexes[i] = i;
14456	      } // If the comparator returns zero, use the original indexes
14457
14458
14459	      indexes.sort(function (index1, index2) {
14460	        return comparator(_this.items[index1], _this.items[index2]) || index1 - index2;
14461	      });
14462
14463	      for (var _i = 0; _i < length; _i++) {
14464	        indexes[_i] = this.items[indexes[_i]];
14465	      }
14466
14467	      for (var _i2 = 0; _i2 < length; _i2++) {
14468	        this.items[_i2] = indexes[_i2];
14469	      }
14470	    }
14471	  }]);
14472	  return OrderedArray;
14473	}();
14474
14475	var _searchIndexToInsert2 = function _searchIndexToInsert2(value) {
14476	  var low = 0;
14477	  var high = this.items.length;
14478
14479	  while (low < high) {
14480	    var mid = Math.floor((low + high) / 2);
14481
14482	    if (this.comparator(this.items[mid], value) >= 0) {
14483	      high = mid;
14484	    } else {
14485	      low = mid + 1;
14486	    }
14487	  }
14488
14489	  return low;
14490	};
14491
14492	var ZIndexComponent = /*#__PURE__*/function (_EventEmitter) {
14493	  babelHelpers.inherits(ZIndexComponent, _EventEmitter);
14494
14495	  function ZIndexComponent(element) {
14496	    var _this;
14497
14498	    var componentOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14499	    babelHelpers.classCallCheck(this, ZIndexComponent);
14500	    _this = babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(ZIndexComponent).call(this));
14501	    babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "sort", 0);
14502	    babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "alwaysOnTop", false);
14503	    babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "zIndex", 0);
14504	    babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "element", null);
14505	    babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "overlay", null);
14506	    babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "overlayGap", -5);
14507	    babelHelpers.defineProperty(babelHelpers.assertThisInitialized(_this), "stack", null);
14508
14509	    _this.setEventNamespace('BX.Main.ZIndexManager.Component');
14510
14511	    if (!Type.isElementNode(element)) {
14512	      throw new Error('ZIndexManager.Component: The argument \'element\' must be a DOM element.');
14513	    }
14514
14515	    _this.element = element;
14516	    var options = Type.isPlainObject(componentOptions) ? componentOptions : {};
14517
14518	    _this.setAlwaysOnTop(options.alwaysOnTop);
14519
14520	    _this.setOverlay(options.overlay);
14521
14522	    _this.setOverlayGap(options.overlayGap);
14523
14524	    _this.subscribeFromOptions(options.events);
14525
14526	    return _this;
14527	  }
14528
14529	  babelHelpers.createClass(ZIndexComponent, [{
14530	    key: "getSort",
14531	    value: function getSort() {
14532	      return this.sort;
14533	    }
14534	    /**
14535	     * @internal
14536	     * @param sort
14537	     */
14538
14539	  }, {
14540	    key: "setSort",
14541	    value: function setSort(sort) {
14542	      if (Type.isNumber(sort)) {
14543	        this.sort = sort;
14544	      }
14545	    }
14546	    /**
14547	     * @internal
14548	     * @param stack
14549	     */
14550
14551	  }, {
14552	    key: "setStack",
14553	    value: function setStack(stack) {
14554	      this.stack = stack;
14555	    }
14556	  }, {
14557	    key: "getStack",
14558	    value: function getStack() {
14559	      return this.stack;
14560	    }
14561	  }, {
14562	    key: "getZIndex",
14563	    value: function getZIndex() {
14564	      return this.zIndex;
14565	    }
14566	    /**
14567	     * @internal
14568	     */
14569
14570	  }, {
14571	    key: "setZIndex",
14572	    value: function setZIndex(zIndex) {
14573	      var changed = this.getZIndex() !== zIndex;
14574	      this.getElement().style.setProperty('z-index', zIndex, 'important');
14575	      this.zIndex = zIndex;
14576
14577	      if (this.getOverlay() !== null) {
14578	        this.getOverlay().style.setProperty('z-index', zIndex + this.getOverlayGap(), 'important');
14579	      }
14580
14581	      if (changed) {
14582	        this.emit('onZIndexChange', {
14583	          component: this
14584	        });
14585	      }
14586	    }
14587	  }, {
14588	    key: "getAlwaysOnTop",
14589	    value: function getAlwaysOnTop() {
14590	      return this.alwaysOnTop;
14591	    }
14592	  }, {
14593	    key: "setAlwaysOnTop",
14594	    value: function setAlwaysOnTop(value) {
14595	      if (Type.isNumber(value) || Type.isBoolean(value)) {
14596	        this.alwaysOnTop = value;
14597	      }
14598	    }
14599	  }, {
14600	    key: "getElement",
14601	    value: function getElement() {
14602	      return this.element;
14603	    }
14604	  }, {
14605	    key: "setOverlay",
14606	    value: function setOverlay(overlay, gap) {
14607	      if (Type.isElementNode(overlay) || overlay === null) {
14608	        this.overlay = overlay;
14609	        this.setOverlayGap(gap);
14610
14611	        if (this.getStack()) {
14612	          this.getStack().sort();
14613	        }
14614	      }
14615	    }
14616	  }, {
14617	    key: "getOverlay",
14618	    value: function getOverlay() {
14619	      return this.overlay;
14620	    }
14621	  }, {
14622	    key: "setOverlayGap",
14623	    value: function setOverlayGap(gap) {
14624	      if (Type.isNumber(gap)) {
14625	        this.overlayGap = gap;
14626	      }
14627	    }
14628	  }, {
14629	    key: "getOverlayGap",
14630	    value: function getOverlayGap() {
14631	      return this.overlayGap;
14632	    }
14633	  }]);
14634	  return ZIndexComponent;
14635	}(EventEmitter);
14636
14637	var ZIndexStack = /*#__PURE__*/function () {
14638	  function ZIndexStack(container) {
14639	    babelHelpers.classCallCheck(this, ZIndexStack);
14640	    babelHelpers.defineProperty(this, "container", null);
14641	    babelHelpers.defineProperty(this, "components", null);
14642	    babelHelpers.defineProperty(this, "elements", new WeakMap());
14643	    babelHelpers.defineProperty(this, "baseIndex", 1000);
14644	    babelHelpers.defineProperty(this, "baseStep", 50);
14645	    babelHelpers.defineProperty(this, "sortCount", 0);
14646
14647	    if (!Type.isDomNode(container)) {
14648	      throw new Error('ZIndexManager.Stack: The \'container\' argument must be a DOM element.');
14649	    }
14650
14651	    this.container = container;
14652
14653	    var comparator = function comparator(componentA, componentB) {
14654	      var result = (componentA.getAlwaysOnTop() || 0) - (componentB.getAlwaysOnTop() || 0);
14655
14656	      if (!result) {
14657	        result = componentA.getSort() - componentB.getSort();
14658	      }
14659
14660	      return result;
14661	    };
14662
14663	    this.components = new OrderedArray(comparator);
14664	  }
14665
14666	  babelHelpers.createClass(ZIndexStack, [{
14667	    key: "getBaseIndex",
14668	    value: function getBaseIndex() {
14669	      return this.baseIndex;
14670	    }
14671	  }, {
14672	    key: "setBaseIndex",
14673	    value: function setBaseIndex(index) {
14674	      if (Type.isNumber(index) && index >= 0) {
14675	        this.baseIndex = index;
14676	        this.sort();
14677	      }
14678	    }
14679	  }, {
14680	    key: "setBaseStep",
14681	    value: function setBaseStep(step) {
14682	      if (Type.isNumber(step) && step > 0) {
14683	        this.baseStep = step;
14684	        this.sort();
14685	      }
14686	    }
14687	  }, {
14688	    key: "getBaseStep",
14689	    value: function getBaseStep() {
14690	      return this.baseStep;
14691	    }
14692	  }, {
14693	    key: "register",
14694	    value: function register(element) {
14695	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14696
14697	      if (this.getComponent(element)) {
14698	        console.warn('ZIndexManager: You cannot register the element twice.', element);
14699	        return this.getComponent(element);
14700	      }
14701
14702	      var component = new ZIndexComponent(element, options);
14703	      component.setStack(this);
14704	      component.setSort(++this.sortCount);
14705	      this.elements.set(element, component);
14706	      this.components.add(component);
14707	      this.sort();
14708	      return component;
14709	    }
14710	  }, {
14711	    key: "unregister",
14712	    value: function unregister(element) {
14713	      var component = this.elements.get(element);
14714	      this.components.delete(component);
14715	      this.elements.delete(element);
14716	      this.sort();
14717	    }
14718	  }, {
14719	    key: "getComponent",
14720	    value: function getComponent(element) {
14721	      return this.elements.get(element) || null;
14722	    }
14723	  }, {
14724	    key: "getComponents",
14725	    value: function getComponents() {
14726	      return this.components.getAll();
14727	    }
14728	  }, {
14729	    key: "getMaxZIndex",
14730	    value: function getMaxZIndex() {
14731	      var last = this.components.getLast();
14732	      return last ? last.getZIndex() : this.baseIndex;
14733	    }
14734	  }, {
14735	    key: "sort",
14736	    value: function sort() {
14737	      var _this = this;
14738
14739	      this.components.sort();
14740	      var zIndex = this.baseIndex;
14741	      this.components.forEach(function (component) {
14742	        component.setZIndex(zIndex);
14743	        zIndex += _this.baseStep;
14744	      });
14745	    }
14746	  }, {
14747	    key: "bringToFront",
14748	    value: function bringToFront(element) {
14749	      var component = this.getComponent(element);
14750
14751	      if (!component) {
14752	        console.error('ZIndexManager: element was not found in the stack.', element);
14753	        return null;
14754	      }
14755
14756	      component.setSort(++this.sortCount);
14757	      this.sort();
14758	      return component;
14759	    }
14760	  }]);
14761	  return ZIndexStack;
14762	}();
14763
14764	function _classStaticPrivateMethodGet(receiver, classConstructor, method) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } return method; }
14765
14766	/**
14767	 * @memberof BX
14768	 */
14769	var ZIndexManager = /*#__PURE__*/function () {
14770	  function ZIndexManager() {
14771	    babelHelpers.classCallCheck(this, ZIndexManager);
14772	  }
14773
14774	  babelHelpers.createClass(ZIndexManager, null, [{
14775	    key: "register",
14776	    value: function register(element) {
14777	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14778
14779	      var parentNode = _classStaticPrivateMethodGet(this, ZIndexManager, _getParentNode).call(this, element);
14780
14781	      if (!parentNode) {
14782	        return null;
14783	      }
14784
14785	      var stack = this.getOrAddStack(parentNode);
14786	      return stack.register(element, options);
14787	    }
14788	  }, {
14789	    key: "unregister",
14790	    value: function unregister(element) {
14791	      var parentNode = _classStaticPrivateMethodGet(this, ZIndexManager, _getParentNode).call(this, element);
14792
14793	      var stack = this.getStack(parentNode);
14794
14795	      if (stack) {
14796	        stack.unregister(element);
14797	      }
14798	    }
14799	  }, {
14800	    key: "addStack",
14801	    value: function addStack(container) {
14802	      var stack = new ZIndexStack(container);
14803	      this.stacks.set(container, stack);
14804	      return stack;
14805	    }
14806	  }, {
14807	    key: "getStack",
14808	    value: function getStack(container) {
14809	      return this.stacks.get(container) || null;
14810	    }
14811	  }, {
14812	    key: "getOrAddStack",
14813	    value: function getOrAddStack(container) {
14814	      return this.getStack(container) || this.addStack(container);
14815	    }
14816	  }, {
14817	    key: "getComponent",
14818	    value: function getComponent(element) {
14819	      var parentNode = _classStaticPrivateMethodGet(this, ZIndexManager, _getParentNode).call(this, element);
14820
14821	      if (!parentNode) {
14822	        return null;
14823	      }
14824
14825	      var stack = this.getStack(parentNode);
14826	      return stack ? stack.getComponent(element) : null;
14827	    }
14828	  }, {
14829	    key: "bringToFront",
14830	    value: function bringToFront(element) {
14831	      var parentNode = _classStaticPrivateMethodGet(this, ZIndexManager, _getParentNode).call(this, element);
14832
14833	      var stack = this.getStack(parentNode);
14834
14835	      if (stack) {
14836	        return stack.bringToFront(element);
14837	      }
14838
14839	      return null;
14840	    }
14841	  }]);
14842	  return ZIndexManager;
14843	}();
14844
14845	var _getParentNode = function _getParentNode(element) {
14846	  if (!Type.isElementNode(element)) {
14847	    console.error('ZIndexManager: The argument \'element\' must be a DOM element.', element);
14848	    return null;
14849	  } else if (!Type.isElementNode(element.parentNode)) {
14850	    console.error('ZIndexManager: The \'element\' doesn\'t have a parent node.', element);
14851	    return null;
14852	  }
14853
14854	  return element.parentNode;
14855	};
14856
14857	babelHelpers.defineProperty(ZIndexManager, "stacks", new WeakMap());
14858
14859	var collections = {
14860	  OrderedArray: OrderedArray
14861	};
14862
14863	function getElement(element) {
14864	  if (Type.isString(element)) {
14865	    return document.getElementById(element);
14866	  }
14867
14868	  return element;
14869	}
14870
14871	function getWindow(element) {
14872	  if (Type.isElementNode(element)) {
14873	    return element.ownerDocument.parentWindow || element.ownerDocument.defaultView || window;
14874	  }
14875
14876	  if (Type.isDomNode(element)) {
14877	    return element.parentWindow || element.defaultView || window;
14878	  }
14879
14880	  return window;
14881	}
14882
14883	/* eslint-disable prefer-rest-params */
14884
14885	var getClass = Reflection.getClass,
14886	    namespace = Reflection.namespace;
14887	var message$1 = message;
14888	/**
14889	 * @memberOf BX
14890	 */
14891
14892	var replace = Dom.replace,
14893	    remove = Dom.remove,
14894	    clean = Dom.clean,
14895	    insertBefore = Dom.insertBefore,
14896	    insertAfter = Dom.insertAfter,
14897	    append = Dom.append,
14898	    prepend = Dom.prepend,
14899	    style = Dom.style,
14900	    adjust = Dom.adjust,
14901	    create = Dom.create,
14902	    isShown = Dom.isShown;
14903	var addClass = function addClass() {
14904	  Dom.addClass.apply(Dom, babelHelpers.toConsumableArray(Runtime.merge([], Array.from(arguments), [getElement(arguments[0])])));
14905	};
14906	var removeClass = function removeClass() {
14907	  Dom.removeClass.apply(Dom, babelHelpers.toConsumableArray(Runtime.merge(Array.from(arguments), [getElement(arguments[0])])));
14908	};
14909	var hasClass = function hasClass() {
14910	  return Dom.hasClass.apply(Dom, babelHelpers.toConsumableArray(Runtime.merge(Array.from(arguments), [getElement(arguments[0])])));
14911	};
14912	var toggleClass = function toggleClass() {
14913	  Dom.toggleClass.apply(Dom, babelHelpers.toConsumableArray(Runtime.merge(Array.from(arguments), [getElement(arguments[0])])));
14914	};
14915	var cleanNode = function cleanNode(element) {
14916	  var removeElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
14917	  var currentElement = getElement(element);
14918
14919	  if (Type.isDomNode(currentElement)) {
14920	    Dom.clean(currentElement);
14921
14922	    if (removeElement) {
14923	      Dom.remove(currentElement);
14924	      return currentElement;
14925	    }
14926	  }
14927
14928	  return currentElement;
14929	};
14930	var getCookie = Http.Cookie.get;
14931	var setCookie = function setCookie(name, value) {
14932	  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
14933	  var attributes = babelHelpers.objectSpread({}, options);
14934
14935	  if (Type.isNumber(attributes.expires)) {
14936	    attributes.expires /= 3600 * 24;
14937	  }
14938
14939	  Http.Cookie.set(name, value, attributes);
14940	};
14941	var bind$1 = Event.bind,
14942	    unbind$1 = Event.unbind,
14943	    unbindAll$1 = Event.unbindAll,
14944	    bindOnce$1 = Event.bindOnce,
14945	    ready$1 = Event.ready;
14946	var debugEnableFlag = debugState,
14947	    debugStatus = isDebugEnabled,
14948	    debug$1 = debug;
14949	var debugEnable = function debugEnable(value) {
14950	  if (value) {
14951	    enableDebug();
14952	  } else {
14953	    disableDebug();
14954	  }
14955	};
14956	var clone$1 = Runtime.clone,
14957	    loadExt = Runtime.loadExtension,
14958	    debounce = Runtime.debounce,
14959	    throttle = Runtime.throttle,
14960	    html = Runtime.html; // BX.type
14961	var type = babelHelpers.objectSpread({}, Object.getOwnPropertyNames(Type).filter(function (key) {
14962	  return !['name', 'length', 'prototype', 'caller', 'arguments'].includes(key);
14963	}).reduce(function (acc, key) {
14964	  acc[key] = Type[key];
14965	  return acc;
14966	}, {}), {
14967	  isNotEmptyString: function isNotEmptyString(value) {
14968	    return Type.isString(value) && value !== '';
14969	  },
14970	  isNotEmptyObject: function isNotEmptyObject(value) {
14971	    return Type.isObjectLike(value) && Object.keys(value).length > 0;
14972	  },
14973	  isMapKey: Type.isObject,
14974	  stringToInt: function stringToInt(value) {
14975	    var parsed = parseInt(value);
14976	    return !Number.isNaN(parsed) ? parsed : 0;
14977	  }
14978	}); // BX.browser
14979
14980	var browser = {
14981	  IsOpera: Browser.isOpera,
14982	  IsIE: Browser.isIE,
14983	  IsIE6: Browser.isIE6,
14984	  IsIE7: Browser.isIE7,
14985	  IsIE8: Browser.isIE8,
14986	  IsIE9: Browser.isIE9,
14987	  IsIE10: Browser.isIE10,
14988	  IsIE11: Browser.isIE11,
14989	  IsSafari: Browser.isSafari,
14990	  IsFirefox: Browser.isFirefox,
14991	  IsChrome: Browser.isChrome,
14992	  DetectIeVersion: Browser.detectIEVersion,
14993	  IsMac: Browser.isMac,
14994	  IsAndroid: Browser.isAndroid,
14995	  isIPad: Browser.isIPad,
14996	  isIPhone: Browser.isIPhone,
14997	  IsIOS: Browser.isIOS,
14998	  IsMobile: Browser.isMobile,
14999	  isRetina: Browser.isRetina,
15000	  IsDoctype: Browser.isDoctype,
15001	  SupportLocalStorage: Browser.isLocalStorageSupported,
15002	  addGlobalClass: Browser.addGlobalClass,
15003	  DetectAndroidVersion: Browser.detectAndroidVersion,
15004	  isPropertySupported: Browser.isPropertySupported,
15005	  addGlobalFeatures: Browser.addGlobalFeatures
15006	}; // eslint-disable-next-line
15007
15008	var ajax = window.BX ? window.BX.ajax : function () {};
15009	function GetWindowScrollSize() {
15010	  var doc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
15011	  return {
15012	    scrollWidth: doc.documentElement.scrollWidth,
15013	    scrollHeight: doc.documentElement.scrollHeight
15014	  };
15015	}
15016	function GetWindowScrollPos() {
15017	  var doc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
15018	  var win = getWindow(doc);
15019	  return {
15020	    scrollLeft: win.pageXOffset,
15021	    scrollTop: win.pageYOffset
15022	  };
15023	}
15024	function GetWindowInnerSize() {
15025	  var doc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
15026	  var win = getWindow(doc);
15027	  return {
15028	    innerWidth: win.innerWidth,
15029	    innerHeight: win.innerHeight
15030	  };
15031	}
15032	function GetWindowSize() {
15033	  var doc = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
15034	  return babelHelpers.objectSpread({}, GetWindowInnerSize(doc), GetWindowScrollPos(doc), GetWindowScrollSize(doc));
15035	}
15036	function GetContext(node) {
15037	  return getWindow(node);
15038	}
15039	function pos(element) {
15040	  var relative = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
15041
15042	  if (!element) {
15043	    return new DOMRect().toJSON();
15044	  }
15045
15046	  if (element.ownerDocument === document && !relative) {
15047	    var clientRect = element.getBoundingClientRect();
15048	    var root = document.documentElement;
15049	    var _document = document,
15050	        body = _document.body;
15051	    return {
15052	      top: Math.round(clientRect.top + (root.scrollTop || body.scrollTop)),
15053	      left: Math.round(clientRect.left + (root.scrollLeft || body.scrollLeft)),
15054	      width: Math.round(clientRect.right - clientRect.left),
15055	      height: Math.round(clientRect.bottom - clientRect.top),
15056	      right: Math.round(clientRect.right + (root.scrollLeft || body.scrollLeft)),
15057	      bottom: Math.round(clientRect.bottom + (root.scrollTop || body.scrollTop))
15058	    };
15059	  }
15060
15061	  var x = 0;
15062	  var y = 0;
15063	  var w = element.offsetWidth;
15064	  var h = element.offsetHeight;
15065	  var first = true; // eslint-disable-next-line no-param-reassign
15066
15067	  for (; element != null; element = element.offsetParent) {
15068	    if (!first && relative && BX.is_relative(element)) {
15069	      break;
15070	    }
15071
15072	    x += element.offsetLeft;
15073	    y += element.offsetTop;
15074
15075	    if (first) {
15076	      first = false; // eslint-disable-next-line no-continue
15077
15078	      continue;
15079	    }
15080
15081	    x += Text.toNumber(Dom.style(element, 'border-left-width'));
15082	    y += Text.toNumber(Dom.style(element, 'border-top-width'));
15083	  }
15084
15085	  return new DOMRect(x, y, w, h).toJSON();
15086	}
15087	function addCustomEvent(eventObject, eventName, eventHandler) {
15088	  if (Type.isString(eventObject)) {
15089	    eventHandler = eventName;
15090	    eventName = eventObject;
15091	    eventObject = EventEmitter.GLOBAL_TARGET;
15092	  }
15093
15094	  if (eventObject === window) {
15095	    eventObject = EventEmitter.GLOBAL_TARGET;
15096	  }
15097
15098	  if (!Type.isObject(eventObject)) {
15099	    console.error('The "eventObject" argument must be an object. Received type ' + babelHelpers.typeof(eventObject) + '.');
15100	    return;
15101	  }
15102
15103	  if (!Type.isStringFilled(eventName)) {
15104	    console.error('The "eventName" argument must be a string.');
15105	    return;
15106	  }
15107
15108	  if (!Type.isFunction(eventHandler)) {
15109	    console.error('The "eventHandler" argument must be a function. Received type ' + babelHelpers.typeof(eventHandler) + '.');
15110	    return;
15111	  }
15112
15113	  eventName = eventName.toLowerCase();
15114	  EventEmitter.subscribe(eventObject, eventName, eventHandler, {
15115	    compatMode: true,
15116	    useGlobalNaming: true
15117	  });
15118	}
15119	function onCustomEvent(eventObject, eventName, eventParams, secureParams) {
15120	  if (Type.isString(eventObject)) {
15121	    secureParams = eventParams;
15122	    eventParams = eventName;
15123	    eventName = eventObject;
15124	    eventObject = EventEmitter.GLOBAL_TARGET;
15125	  }
15126
15127	  if (!Type.isObject(eventObject) || eventObject === window) {
15128	    eventObject = EventEmitter.GLOBAL_TARGET;
15129	  }
15130
15131	  if (!eventParams) {
15132	    eventParams = [];
15133	  }
15134
15135	  eventName = eventName.toLowerCase();
15136	  var event = new BaseEvent();
15137	  event.setData(eventParams);
15138	  event.setCompatData(eventParams);
15139	  EventEmitter.emit(eventObject, eventName, event, {
15140	    cloneData: secureParams === true,
15141	    useGlobalNaming: true
15142	  });
15143	}
15144	function removeCustomEvent(eventObject, eventName, eventHandler) {
15145	  if (Type.isString(eventObject)) {
15146	    eventHandler = eventName;
15147	    eventName = eventObject;
15148	    eventObject = EventEmitter.GLOBAL_TARGET;
15149	  }
15150
15151	  if (!Type.isFunction(eventHandler)) {
15152	    console.error('The "eventHandler" argument must be a function. Received type ' + babelHelpers.typeof(eventHandler) + '.');
15153	    return;
15154	  }
15155
15156	  if (eventObject === window) {
15157	    eventObject = EventEmitter.GLOBAL_TARGET;
15158	  }
15159
15160	  eventName = eventName.toLowerCase();
15161	  EventEmitter.unsubscribe(eventObject, eventName, eventHandler, {
15162	    useGlobalNaming: true
15163	  });
15164	}
15165	function removeAllCustomEvents(eventObject, eventName) {
15166	  if (Type.isString(eventObject)) {
15167	    eventName = eventObject;
15168	    eventObject = EventEmitter.GLOBAL_TARGET;
15169	  }
15170
15171	  if (eventObject === window) {
15172	    eventObject = EventEmitter.GLOBAL_TARGET;
15173	  }
15174
15175	  eventName = eventName.toLowerCase();
15176	  EventEmitter.unsubscribeAll(eventObject, eventName, {
15177	    useGlobalNaming: true
15178	  });
15179	}
15180
15181	if (global && global.window && global.window.BX) {
15182	  Object.assign(global.window.BX, exports);
15183	}
15184
15185	exports.Type = Type;
15186	exports.Reflection = Reflection;
15187	exports.Text = Text;
15188	exports.Dom = Dom;
15189	exports.Browser = Browser;
15190	exports.Event = Event;
15191	exports.Http = Http;
15192	exports.Runtime = Runtime;
15193	exports.Loc = Loc;
15194	exports.Tag = Tag;
15195	exports.Uri = Uri;
15196	exports.Validation = Validation;
15197	exports.Cache = Cache;
15198	exports.BaseError = BaseError;
15199	exports.Extension = Extension$1;
15200	exports.ZIndexManager = ZIndexManager;
15201	exports.Collections = collections;
15202	exports.getClass = getClass;
15203	exports.namespace = namespace;
15204	exports.message = message$1;
15205	exports.replace = replace;
15206	exports.remove = remove;
15207	exports.clean = clean;
15208	exports.insertBefore = insertBefore;
15209	exports.insertAfter = insertAfter;
15210	exports.append = append;
15211	exports.prepend = prepend;
15212	exports.style = style;
15213	exports.adjust = adjust;
15214	exports.create = create;
15215	exports.isShown = isShown;
15216	exports.addClass = addClass;
15217	exports.removeClass = removeClass;
15218	exports.hasClass = hasClass;
15219	exports.toggleClass = toggleClass;
15220	exports.cleanNode = cleanNode;
15221	exports.getCookie = getCookie;
15222	exports.setCookie = setCookie;
15223	exports.bind = bind$1;
15224	exports.unbind = unbind$1;
15225	exports.unbindAll = unbindAll$1;
15226	exports.bindOnce = bindOnce$1;
15227	exports.ready = ready$1;
15228	exports.debugEnableFlag = debugEnableFlag;
15229	exports.debugStatus = debugStatus;
15230	exports.debug = debug$1;
15231	exports.debugEnable = debugEnable;
15232	exports.clone = clone$1;
15233	exports.loadExt = loadExt;
15234	exports.debounce = debounce;
15235	exports.throttle = throttle;
15236	exports.html = html;
15237	exports.type = type;
15238	exports.browser = browser;
15239	exports.ajax = ajax;
15240	exports.GetWindowScrollSize = GetWindowScrollSize;
15241	exports.GetWindowScrollPos = GetWindowScrollPos;
15242	exports.GetWindowInnerSize = GetWindowInnerSize;
15243	exports.GetWindowSize = GetWindowSize;
15244	exports.GetContext = GetContext;
15245	exports.pos = pos;
15246	exports.addCustomEvent = addCustomEvent;
15247	exports.onCustomEvent = onCustomEvent;
15248	exports.removeCustomEvent = removeCustomEvent;
15249	exports.removeAllCustomEvents = removeAllCustomEvents;
15250
15251}((this.BX = this.BX || {})));
15252
15253
15254
15255(function(BX) {
15256	/* list of registered proxy functions */
15257	var proxyList = new WeakMap();
15258	var deferList = new WeakMap();
15259
15260	/* List of denied event handlers */
15261	var deniedEvents = [];
15262
15263	/* list of registered custom events */
15264	var customEvents = new WeakMap();
15265	var customEventsCnt = 0;
15266
15267	/* list of external garbage collectors */
15268	var garbageCollectors = [];
15269
15270	/* list of loaded CSS files */
15271	var cssList = [];
15272	var cssInit = false;
15273
15274	/* list of loaded JS files */
15275	var jsList = [];
15276	var jsInit = false;
15277
15278	var eventTypes = {
15279		click: 'MouseEvent',
15280		dblclick: 'MouseEvent',
15281		mousedown: 'MouseEvent',
15282		mousemove: 'MouseEvent',
15283		mouseout: 'MouseEvent',
15284		mouseover: 'MouseEvent',
15285		mouseup: 'MouseEvent',
15286		focus: 'MouseEvent',
15287		blur: 'MouseEvent'
15288	};
15289
15290	var lastWait = [];
15291
15292	var CHECK_FORM_ELEMENTS = {tagName: /^INPUT|SELECT|TEXTAREA|BUTTON$/i};
15293
15294	var PRELOADING = 1;
15295	var PRELOADED = 2;
15296	var LOADING = 3;
15297	var LOADED = 4;
15298	var assets = {};
15299	var isAsync = null;
15300
15301	BX.MSLEFT = 1;
15302	BX.MSMIDDLE = 2;
15303	BX.MSRIGHT = 4;
15304
15305	BX.AM_PM_UPPER = 1;
15306	BX.AM_PM_LOWER = 2;
15307	BX.AM_PM_NONE = false;
15308
15309	BX.ext = function(ob)
15310	{
15311		for (var i in ob)
15312		{
15313			if(ob.hasOwnProperty(i))
15314			{
15315				this[i] = ob[i];
15316			}
15317		}
15318	};
15319
15320	var r = {
15321		script: /<script([^>]*)>/ig,
15322		script_end: /<\/script>/ig,
15323		script_src: /src=["\']([^"\']+)["\']/i,
15324		script_type: /type=["\']([^"\']+)["\']/i,
15325		space: /\s+/,
15326		ltrim: /^[\s\r\n]+/g,
15327		rtrim: /[\s\r\n]+$/g,
15328		style: /<link.*?(rel="stylesheet"|type="text\/css")[^>]*>/i,
15329		style_href: /href=["\']([^"\']+)["\']/i
15330	};
15331
15332	BX.processHTML = function(data, scriptsRunFirst)
15333	{
15334		var matchScript, matchStyle, matchSrc, matchHref, matchType, scripts = [], styles = [];
15335		var textIndexes = [];
15336		var lastIndex = r.script.lastIndex = r.script_end.lastIndex = 0;
15337
15338		while ((matchScript = r.script.exec(data)) !== null)
15339		{
15340			r.script_end.lastIndex = r.script.lastIndex;
15341			var matchScriptEnd = r.script_end.exec(data);
15342			if (matchScriptEnd === null)
15343			{
15344				break;
15345			}
15346
15347			// skip script tags of special types
15348			var skipTag = false;
15349			if ((matchType = matchScript[1].match(r.script_type)) !== null)
15350			{
15351				if(
15352					matchType[1] == 'text/html'
15353					|| matchType[1] == 'text/template'
15354					|| matchType[1] == 'extension/settings'
15355				)
15356				{
15357					skipTag = true;
15358				}
15359			}
15360
15361			if(skipTag)
15362			{
15363				textIndexes.push([lastIndex, r.script_end.lastIndex - lastIndex]);
15364			}
15365			else
15366			{
15367				textIndexes.push([lastIndex, matchScript.index - lastIndex]);
15368
15369				var bRunFirst = scriptsRunFirst || (matchScript[1].indexOf('bxrunfirst') != '-1');
15370
15371				if ((matchSrc = matchScript[1].match(r.script_src)) !== null)
15372				{
15373					scripts.push({"bRunFirst": bRunFirst, "isInternal": false, "JS": matchSrc[1]});
15374				}
15375				else
15376				{
15377					var start = matchScript.index + matchScript[0].length;
15378					var js = data.substr(start, matchScriptEnd.index-start);
15379
15380					scripts.push({"bRunFirst": bRunFirst, "isInternal": true, "JS": js});
15381				}
15382			}
15383
15384			lastIndex = matchScriptEnd.index + 9;
15385			r.script.lastIndex = lastIndex;
15386		}
15387
15388		textIndexes.push([lastIndex, lastIndex === 0 ? data.length : data.length - lastIndex]);
15389		var pureData = "";
15390		for (var i = 0, length = textIndexes.length; i < length; i++)
15391		{
15392			if (BX.type.isString(data) && BX.type.isFunction(data.substr))
15393			{
15394				pureData += data.substr(textIndexes[i][0], textIndexes[i][1]);
15395			}
15396		}
15397
15398		while ((matchStyle = pureData.match(r.style)) !== null)
15399		{
15400			if ((matchHref = matchStyle[0].match(r.style_href)) !== null && matchStyle[0].indexOf('media="') < 0)
15401			{
15402				styles.push(matchHref[1]);
15403			}
15404
15405			pureData = pureData.replace(matchStyle[0], '');
15406		}
15407
15408		return {'HTML': pureData, 'SCRIPT': scripts, 'STYLE': styles};
15409	};
15410
15411	/* OO emulation utility */
15412	BX.extend = function(child, parent)
15413	{
15414		var f = function() {};
15415		f.prototype = parent.prototype;
15416
15417		child.prototype = new f();
15418		child.prototype.constructor = child;
15419
15420		child.superclass = parent.prototype;
15421		child.prototype.superclass = parent.prototype;
15422		if(parent.prototype.constructor == Object.prototype.constructor)
15423		{
15424			parent.prototype.constructor = parent;
15425		}
15426	};
15427
15428	BX.is_subclass_of = function(ob, parent_class)
15429	{
15430		if (ob instanceof parent_class)
15431			return true;
15432
15433		if (parent_class.superclass)
15434			return BX.is_subclass_of(ob, parent_class.superclass);
15435
15436		return false;
15437	};
15438
15439	BX.clearNodeCache = function()
15440	{
15441		return false;
15442	};
15443
15444	BX.bitrix_sessid = function() {return BX.message("bitrix_sessid"); };
15445
15446	/**
15447	 * Creates document fragment with child nodes.
15448	 *
15449	 * @param {Node[]} nodes
15450	 * @return {DocumentFragment}
15451	 */
15452	BX.createFragment = function(nodes)
15453	{
15454		var fragment = document.createDocumentFragment();
15455
15456		if(!BX.type.isArray(nodes))
15457		{
15458			return fragment;
15459		}
15460		for(var i = 0; i < nodes.length; i++)
15461		{
15462			fragment.appendChild(nodes[i]);
15463		}
15464
15465		return fragment;
15466	};
15467
15468	/**
15469	 * @deprecated
15470	 * @use BX.style
15471	 * @param element
15472	 * @param opacity
15473	 */
15474	BX.setOpacity = function(element, opacity)
15475	{
15476		var opacityValue = parseFloat(opacity);
15477
15478		if (!isNaN(opacityValue) && BX.type.isDomNode(element))
15479		{
15480			opacityValue = opacityValue < 1 ? opacityValue : opacityValue / 100;
15481			BX.style(element, 'opacity', opacityValue);
15482		}
15483	};
15484
15485	/**
15486	 * @deprecated
15487	 * @param el
15488	 * @return {*}
15489	 */
15490	BX.hoverEvents = function(el)
15491	{
15492		if (el)
15493			return BX.adjust(el, {events: BX.hoverEvents()});
15494		else
15495			return {mouseover: BX.hoverEventsHover, mouseout: BX.hoverEventsHout};
15496	};
15497
15498	/**
15499	 * @deprecated
15500	 */
15501	BX.hoverEventsHover = function(){BX.addClass(this,'bx-hover');this.BXHOVER=true;};
15502	/**
15503	 * @deprecated
15504	 */
15505	BX.hoverEventsHout = function(){BX.removeClass(this,'bx-hover');this.BXHOVER=false;};
15506
15507	/**
15508	 * @deprecated
15509	 */
15510	BX.focusEvents = function(el)
15511	{
15512		if (el)
15513			return BX.adjust(el, {events: BX.focusEvents()});
15514		else
15515			return {mouseover: BX.focusEventsFocus, mouseout: BX.focusEventsBlur};
15516	};
15517
15518	/**
15519	 * @deprecated
15520	 */
15521	BX.focusEventsFocus = function(){BX.addClass(this,'bx-focus');this.BXFOCUS=true;};
15522	/**
15523	 * @deprecated
15524	 */
15525	BX.focusEventsBlur = function(){BX.removeClass(this,'bx-focus');this.BXFOCUS=false;};
15526
15527	BX.setUnselectable = function(node)
15528	{
15529		BX.style(node, {
15530			'userSelect': 'none',
15531			'MozUserSelect': 'none',
15532			'WebkitUserSelect': 'none',
15533			'KhtmlUserSelect': 'none',
15534		});
15535		node.setAttribute('unSelectable', 'on');
15536	};
15537
15538	BX.setSelectable = function(node)
15539	{
15540		BX.style(node, {
15541			'userSelect': null,
15542			'MozUserSelect': null,
15543			'WebkitUserSelect': null,
15544			'KhtmlUserSelect': null,
15545		});
15546		node.removeAttribute('unSelectable');
15547	};
15548
15549	BX.styleIEPropertyName = function(name)
15550	{
15551		if (name == 'float')
15552			name = BX.browser.IsIE() ? 'styleFloat' : 'cssFloat';
15553		else
15554		{
15555			var res = BX.browser.isPropertySupported(name);
15556			if (res)
15557			{
15558				name = res;
15559			}
15560			else
15561			{
15562				var reg = /(\-([a-z]){1})/g;
15563				if (reg.test(name))
15564				{
15565					name = name.replace(reg, function () {return arguments[2].toUpperCase();});
15566				}
15567			}
15568		}
15569		return name;
15570	};
15571
15572	BX.focus = function(el)
15573	{
15574		try
15575		{
15576			el.focus();
15577			return true;
15578		}
15579		catch (e)
15580		{
15581			return false;
15582		}
15583	};
15584
15585	BX.firstChild = function(el)
15586	{
15587		return BX.type.isDomNode(el) ? el.firstElementChild : null;
15588	};
15589
15590	BX.lastChild = function(el)
15591	{
15592		return BX.type.isDomNode(el) ? el.lastElementChild : null;
15593	};
15594
15595	BX.previousSibling = function(el)
15596	{
15597		return BX.type.isDomNode(el) ? el.previousElementSibling : null;
15598	};
15599
15600	BX.nextSibling = function(el)
15601	{
15602		return BX.type.isDomNode(el) ? el.nextElementSibling : null;
15603	};
15604
15605	/*
15606		params: {
15607			obj : html node
15608			className : className value
15609			recursive : used only for older browsers to optimize the tree traversal, in new browsers the search is always recursively, default - true
15610		}
15611
15612		Search all nodes with className
15613	*/
15614	/**
15615	 * @deprecated
15616	 * @use .querySelectorAll
15617	 * @param obj
15618	 * @param className
15619	 * @param recursive
15620	 * @return {*}
15621	 */
15622	BX.findChildrenByClassName = function(obj, className, recursive)
15623	{
15624		if(!obj || !obj.childNodes) return null;
15625
15626		var result = [];
15627		if (typeof(obj.getElementsByClassName) == 'undefined')
15628		{
15629			recursive = recursive !== false;
15630			result = BX.findChildren(obj, {className : className}, recursive);
15631		}
15632		else
15633		{
15634			var col = obj.getElementsByClassName(className);
15635			for (i=0,l=col.length;i<l;i++)
15636			{
15637				result[i] = col[i];
15638			}
15639		}
15640		return result;
15641	};
15642
15643	/*
15644		params: {
15645			obj : html node
15646			className : className value
15647			recursive : used only for older browsers to optimize the tree traversal, in new browsers the search is always recursively, default - true
15648		}
15649
15650		Search first node with className
15651	*/
15652	/**
15653	 * @deprecated
15654	 * @use .querySelector
15655	 * @param obj
15656	 * @param className
15657	 * @param recursive
15658	 * @return {*}
15659	 */
15660	BX.findChildByClassName = function(obj, className, recursive)
15661	{
15662		if(!obj || !obj.childNodes) return null;
15663
15664		var result = null;
15665		if (typeof(obj.getElementsByClassName) == 'undefined')
15666		{
15667			recursive = recursive !== false;
15668			result = BX.findChild(obj, {className : className}, recursive);
15669		}
15670		else
15671		{
15672			var col = obj.getElementsByClassName(className);
15673			if (col && typeof(col[0]) != 'undefined')
15674			{
15675				result = col[0];
15676			}
15677			else
15678			{
15679				result = null;
15680			}
15681		}
15682		return result;
15683	};
15684
15685	/*
15686		params: {
15687			tagName|tag : 'tagName',
15688			className|class : 'className',
15689			attribute : {attribute : value, attribute : value} | attribute | [attribute, attribute....],
15690			property : {prop: value, prop: value} | prop | [prop, prop]
15691		}
15692
15693		all values can be RegExps or strings
15694	*/
15695	/**
15696	 * @deprecated
15697	 * @use .querySelectorAll
15698	 * @param obj
15699	 * @param params
15700	 * @param recursive
15701	 * @return {*|Node}
15702	 */
15703	BX.findChildren = function(obj, params, recursive)
15704	{
15705		return BX.findChild(obj, params, recursive, true);
15706	};
15707
15708	/**
15709	 * @deprecated
15710	 * @use .querySelectorAll
15711	 * @param obj
15712	 * @param params
15713	 * @param recursive
15714	 * @param get_all
15715	 * @return {*}
15716	 */
15717	BX.findChild = function(obj, params, recursive, get_all)
15718	{
15719		if(!obj || !obj.childNodes) return null;
15720
15721		recursive = !!recursive; get_all = !!get_all;
15722
15723		var n = obj.childNodes.length, result = [];
15724
15725		for (var j=0; j<n; j++)
15726		{
15727			var child = obj.childNodes[j];
15728
15729			if (_checkNode(child, params))
15730			{
15731				if (get_all)
15732					result.push(child);
15733				else
15734					return child;
15735			}
15736
15737			if(recursive == true)
15738			{
15739				var res = BX.findChild(child, params, recursive, get_all);
15740				if (res)
15741				{
15742					if (get_all)
15743						result = BX.util.array_merge(result, res);
15744					else
15745						return res;
15746				}
15747			}
15748		}
15749
15750		if (get_all || result.length > 0)
15751			return result;
15752		else
15753			return null;
15754	};
15755
15756	/**
15757	 * @deprecated
15758	 * @use .closest()
15759	 * @param obj
15760	 * @param params
15761	 * @param maxParent
15762	 * @return {*}
15763	 */
15764	BX.findParent = function(obj, params, maxParent)
15765	{
15766		if(!obj)
15767			return null;
15768
15769		var o = obj;
15770		while(o.parentNode)
15771		{
15772			var parent = o.parentNode;
15773
15774			if (_checkNode(parent, params))
15775				return parent;
15776
15777			o = parent;
15778
15779			if (!!maxParent &&
15780				(BX.type.isFunction(maxParent)
15781					|| typeof maxParent == 'object'))
15782			{
15783				if (BX.type.isElementNode(maxParent))
15784				{
15785					if (o == maxParent)
15786						break;
15787				}
15788				else
15789				{
15790					if (_checkNode(o, maxParent))
15791						break;
15792				}
15793			}
15794		}
15795		return null;
15796	};
15797
15798	/**
15799	 * @deprecated
15800	 * @use .querySelector
15801	 * @param obj
15802	 * @param params
15803	 * @return {*}
15804	 */
15805	BX.findNextSibling = function(obj, params)
15806	{
15807		if(!obj)
15808			return null;
15809		var o = obj;
15810		while(o.nextSibling)
15811		{
15812			var sibling = o.nextSibling;
15813			if (_checkNode(sibling, params))
15814				return sibling;
15815			o = sibling;
15816		}
15817		return null;
15818	};
15819
15820	/**
15821	 * @deprecated
15822	 * @use .querySelector
15823	 * @param obj
15824	 * @param params
15825	 * @return {*}
15826	 */
15827	BX.findPreviousSibling = function(obj, params)
15828	{
15829		if(!obj)
15830			return null;
15831
15832		var o = obj;
15833		while(o.previousSibling)
15834		{
15835			var sibling = o.previousSibling;
15836			if(_checkNode(sibling, params))
15837				return sibling;
15838			o = sibling;
15839		}
15840		return null;
15841	};
15842
15843	BX.checkNode = function(obj, params)
15844	{
15845		return _checkNode(obj, params);
15846	};
15847
15848	/**
15849	 * @deprecated
15850	 * @use .querySelectorAll
15851	 * @param form
15852	 * @return {Array}
15853	 */
15854	BX.findFormElements = function(form)
15855	{
15856		if (BX.type.isString(form))
15857			form = document.forms[form]||BX(form);
15858
15859		var res = [];
15860
15861		if (BX.type.isElementNode(form))
15862		{
15863			if (form.tagName.toUpperCase() == 'FORM')
15864			{
15865				res = form.elements;
15866			}
15867			else
15868			{
15869				res = BX.findChildren(form, CHECK_FORM_ELEMENTS, true);
15870			}
15871		}
15872
15873		return res;
15874	};
15875
15876	/**
15877	 * @deprecated
15878	 * @use .contains()
15879	 * @param whichNode
15880	 * @param forNode
15881	 * @return {boolean}
15882	 */
15883	BX.isParentForNode = function(whichNode, forNode)
15884	{
15885		if (BX.type.isDomNode(whichNode) && BX.type.isDomNode(forNode))
15886		{
15887			return whichNode.contains(forNode);
15888		}
15889
15890		return false;
15891	};
15892
15893	BX.getCaretPosition = function(node)
15894	{
15895		var pos = 0;
15896
15897		if(node.selectionStart || node.selectionStart == 0)
15898		{
15899			pos = node.selectionStart;
15900		}
15901		else if(document.selection)
15902		{
15903			node.focus();
15904			var selection = document.selection.createRange();
15905			selection.moveStart('character', -node.value.length);
15906			pos = selection.text.length;
15907		}
15908
15909		return (pos);
15910	};
15911
15912	BX.setCaretPosition = function(node, pos)
15913	{
15914		if(!BX.isNodeInDom(node) || BX.isNodeHidden(node) || node.disabled)
15915		{
15916			return;
15917		}
15918
15919		if(node.setSelectionRange)
15920		{
15921			node.focus();
15922			node.setSelectionRange(pos, pos);
15923		}
15924		else if(node.createTextRange)
15925		{
15926			var range = node.createTextRange();
15927			range.collapse(true);
15928			range.moveEnd('character', pos);
15929			range.moveStart('character', pos);
15930			range.select();
15931		}
15932	};
15933
15934	// access private. use BX.mergeEx instead.
15935	// todo: refactor BX.merge, make it work through BX.mergeEx
15936	BX.merge = function(){
15937		var arg = Array.prototype.slice.call(arguments);
15938
15939		if(arg.length < 2)
15940			return {};
15941
15942		var result = arg.shift();
15943
15944		for(var i = 0; i < arg.length; i++)
15945		{
15946			for(var k in arg[i]){
15947
15948				if(typeof arg[i] == 'undefined' || arg[i] == null)
15949					continue;
15950
15951				if(arg[i].hasOwnProperty(k)){
15952
15953					if(typeof arg[i][k] == 'undefined' || arg[i][k] == null)
15954						continue;
15955
15956					if(typeof arg[i][k] == 'object' && !BX.type.isDomNode(arg[i][k]) && (typeof arg[i][k]['isUIWidget'] == 'undefined')){
15957
15958						// go deeper
15959
15960						var isArray = 'length' in arg[i][k];
15961
15962						if(typeof result[k] != 'object')
15963							result[k] = isArray ? [] : {};
15964
15965						if(isArray)
15966							BX.util.array_merge(result[k], arg[i][k]);
15967						else
15968							BX.merge(result[k], arg[i][k]);
15969
15970					}else
15971						result[k] = arg[i][k];
15972				}
15973			}
15974		}
15975
15976		return result;
15977	};
15978
15979	BX.mergeEx = function()
15980	{
15981		var arg = Array.prototype.slice.call(arguments);
15982		if(arg.length < 2)
15983		{
15984			return {};
15985		}
15986
15987		var result = arg.shift();
15988		for (var i = 0; i < arg.length; i++)
15989		{
15990			for (var k in arg[i])
15991			{
15992				if (typeof arg[i] == "undefined" || arg[i] == null || !arg[i].hasOwnProperty(k))
15993				{
15994					continue;
15995				}
15996
15997				if (BX.type.isPlainObject(arg[i][k]) && BX.type.isPlainObject(result[k]))
15998				{
15999					BX.mergeEx(result[k], arg[i][k]);
16000				}
16001				else
16002				{
16003					result[k] = BX.type.isPlainObject(arg[i][k]) ? BX.clone(arg[i][k]) : arg[i][k];
16004				}
16005			}
16006		}
16007
16008		return result;
16009	};
16010
16011	BX.getEventButton = function(e)
16012	{
16013		e = e || window.event;
16014
16015		var flags = 0;
16016
16017		if (typeof e.which != 'undefined')
16018		{
16019			switch (e.which)
16020			{
16021				case 1: flags = flags|BX.MSLEFT; break;
16022				case 2: flags = flags|BX.MSMIDDLE; break;
16023				case 3: flags = flags|BX.MSRIGHT; break;
16024			}
16025		}
16026		else if (typeof e.button != 'undefined')
16027		{
16028			flags = event.button;
16029		}
16030
16031		return flags || BX.MSLEFT;
16032	};
16033
16034	var captured_events = null, _bind = null;
16035	BX.CaptureEvents = function(el_c, evname_c)
16036	{
16037		if (_bind)
16038			return;
16039
16040		_bind = BX.bind;
16041		captured_events = [];
16042
16043		BX.bind = function(el, evname, func)
16044		{
16045			if (el === el_c && evname === evname_c)
16046				captured_events.push(func);
16047
16048			_bind.apply(this, arguments);
16049		}
16050	};
16051
16052	BX.CaptureEventsGet = function()
16053	{
16054		if (_bind)
16055		{
16056			BX.bind = _bind;
16057
16058			var captured = captured_events;
16059
16060			_bind = null;
16061			captured_events = null;
16062			return captured;
16063		}
16064		return null;
16065	};
16066
16067	// Don't even try to use it for submit event!
16068	BX.fireEvent = function(ob,ev)
16069	{
16070		var result = false, e = null;
16071		if (BX.type.isDomNode(ob))
16072		{
16073			result = true;
16074			if (document.createEventObject)
16075			{
16076				// IE
16077				if (eventTypes[ev] != 'MouseEvent')
16078				{
16079					e = document.createEventObject();
16080					e.type = ev;
16081					result = ob.fireEvent('on' + ev, e);
16082				}
16083
16084				if (ob[ev])
16085				{
16086					ob[ev]();
16087				}
16088			}
16089			else
16090			{
16091				// non-IE
16092				e = null;
16093
16094				switch (eventTypes[ev])
16095				{
16096					case 'MouseEvent':
16097						e = document.createEvent('MouseEvent');
16098						try
16099						{
16100							e.initMouseEvent(ev, true, true, top, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, null);
16101						}
16102						catch (initException)
16103						{
16104							e.initMouseEvent(ev, true, true, window, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, null);
16105						}
16106
16107					break;
16108					default:
16109						e = document.createEvent('Event');
16110						e.initEvent(ev, true, true);
16111				}
16112
16113				result = ob.dispatchEvent(e);
16114			}
16115		}
16116
16117		return result;
16118	};
16119
16120	BX.getWheelData = function(e)
16121	{
16122		e = e || window.event;
16123		e.wheelData = e.detail ? e.detail * -1 : e.wheelDelta / 40;
16124		return e.wheelData;
16125	};
16126
16127	BX.proxy_context = null;
16128
16129	BX.delegate = function (func, thisObject)
16130	{
16131		if (!func || !thisObject)
16132			return func;
16133
16134		return function() {
16135			var cur = BX.proxy_context;
16136			BX.proxy_context = this;
16137			var res = func.apply(thisObject, arguments);
16138			BX.proxy_context = cur;
16139			return res;
16140		}
16141	};
16142
16143	BX.delegateLater = function (func_name, thisObject, contextObject)
16144	{
16145		return function()
16146		{
16147			if (thisObject[func_name])
16148			{
16149				var cur = BX.proxy_context;
16150				BX.proxy_context = this;
16151				var res = thisObject[func_name].apply(contextObject||thisObject, arguments);
16152				BX.proxy_context = cur;
16153				return res;
16154			}
16155			return null;
16156		}
16157	};
16158
16159	BX.proxy = function(func, thisObject)
16160	{
16161		return getObjectDelegate(func, thisObject, proxyList);
16162	};
16163
16164	BX.defer = function(func, thisObject)
16165	{
16166		if (!!thisObject)
16167			return BX.defer_proxy(func, thisObject);
16168		else
16169			return function() {
16170				var arg = arguments;
16171				setTimeout(function(){func.apply(this,arg)}, 10);
16172			};
16173	};
16174
16175	BX.defer_proxy = function(func, thisObject)
16176	{
16177		return getObjectDelegate(func, thisObject, deferList, BX.defer);
16178	};
16179
16180	/**
16181	 *
16182	 * @private
16183	 */
16184	function getObjectDelegate(func, thisObject, collection, decorator)
16185	{
16186		if (!BX.type.isFunction(func) || !BX.type.isMapKey(thisObject))
16187		{
16188			return func;
16189		}
16190
16191		var objectDelegates = collection.get(thisObject);
16192		if (!objectDelegates)
16193		{
16194			objectDelegates = new WeakMap();
16195			collection.set(thisObject, objectDelegates);
16196		}
16197
16198		var delegate = objectDelegates.get(func);
16199		if (!delegate)
16200		{
16201			delegate = decorator ? decorator(BX.delegate(func, thisObject)) : BX.delegate(func, thisObject);
16202			objectDelegates.set(func, delegate);
16203		}
16204
16205		return delegate;
16206	}
16207
16208	BX.once = function(el, evname, func)
16209	{
16210		var fn = function()
16211		{
16212			BX.unbind(el, evname, fn);
16213			func.apply(this, arguments);
16214		};
16215
16216		return fn;
16217	};
16218
16219	BX.bindDelegate = function (elem, eventName, isTarget, handler)
16220	{
16221		var h = BX.delegateEvent(isTarget, handler);
16222		BX.bind(elem, eventName, h);
16223		return h;
16224	};
16225
16226	BX.delegateEvent = function(isTarget, handler)
16227	{
16228		return function(e)
16229		{
16230			e = e || window.event;
16231			var target = e.target || e.srcElement;
16232
16233			while (target != this)
16234			{
16235				if (_checkNode(target, isTarget))
16236				{
16237					return handler.call(target, e);
16238				}
16239				if (target && target.parentNode)
16240					target = target.parentNode;
16241				else
16242					break;
16243			}
16244			return null;
16245		}
16246	};
16247
16248	BX.False = function() {return false;};
16249	BX.DoNothing = function() {};
16250
16251	// TODO: also check event handlers set via BX.bind()
16252	BX.denyEvent = function(el, ev)
16253	{
16254		deniedEvents.push([el, ev, el['on' + ev]]);
16255		el['on' + ev] = BX.DoNothing;
16256	};
16257
16258	BX.allowEvent = function(el, ev)
16259	{
16260		for(var i=0, len=deniedEvents.length; i<len; i++)
16261		{
16262			if (deniedEvents[i][0] == el && deniedEvents[i][1] == ev)
16263			{
16264				el['on' + ev] = deniedEvents[i][2];
16265				BX.util.deleteFromArray(deniedEvents, i);
16266				return;
16267			}
16268		}
16269	};
16270
16271	BX.fixEventPageXY = function(event)
16272	{
16273		BX.fixEventPageX(event);
16274		BX.fixEventPageY(event);
16275		return event;
16276	};
16277
16278	BX.fixEventPageX = function(event)
16279	{
16280		if (event.pageX == null && event.clientX != null)
16281		{
16282			event.pageX =
16283				event.clientX +
16284				(document.documentElement && document.documentElement.scrollLeft || document.body && document.body.scrollLeft || 0) -
16285				(document.documentElement.clientLeft || 0);
16286		}
16287
16288		return event;
16289	};
16290
16291	BX.fixEventPageY = function(event)
16292	{
16293		if (event.pageY == null && event.clientY != null)
16294		{
16295			event.pageY =
16296				event.clientY +
16297				(document.documentElement && document.documentElement.scrollTop || document.body && document.body.scrollTop || 0) -
16298				(document.documentElement.clientTop || 0);
16299		}
16300
16301		return event;
16302	};
16303
16304	/**
16305	 * @deprecated
16306	 * @see e.preventDefault()
16307	 */
16308	BX.PreventDefault = function(e)
16309	{
16310		if(!e) e = window.event;
16311		if(e.stopPropagation)
16312		{
16313			e.preventDefault();
16314			e.stopPropagation();
16315		}
16316		else
16317		{
16318			e.cancelBubble = true;
16319			e.returnValue = false;
16320		}
16321		return false;
16322	};
16323
16324	/**
16325	 * @deprecated
16326	 * @see e.preventDefault();
16327	 *
16328	 * @param e
16329	 * @return {boolean}
16330	 */
16331	BX.eventReturnFalse = function(e)
16332	{
16333		e=e||window.event;
16334		if (e && e.preventDefault) e.preventDefault();
16335		else e.returnValue = false;
16336		return false;
16337	};
16338
16339	/**
16340	 * @deprecated
16341	 * @see e.stopPropagation()
16342	 * @param e
16343	 */
16344	BX.eventCancelBubble = function(e)
16345	{
16346		e=e||window.event;
16347		if(e && e.stopPropagation)
16348			e.stopPropagation();
16349		else
16350			e.cancelBubble = true;
16351	};
16352
16353	BX.bindDebouncedChange = function(node, fn, fnInstant, timeout, ctx)
16354	{
16355		ctx = ctx || window;
16356		timeout = timeout || 300;
16357
16358		var dataTag = 'bx-dc-previous-value';
16359		BX.data(node, dataTag, node.value);
16360
16361		var act = function(fn, val){
16362
16363			var pVal = BX.data(node, dataTag);
16364
16365			if(typeof pVal == 'undefined' || pVal != val){
16366				if(typeof ctx != 'object')
16367					fn(val);
16368				else
16369					fn.apply(ctx, [val]);
16370			}
16371		};
16372
16373		var actD = BX.debounce(function(){
16374			var val = node.value;
16375			act(fn, val);
16376			BX.data(node, dataTag, val);
16377		}, timeout);
16378
16379		BX.bind(node, 'keyup', actD);
16380		BX.bind(node, 'change', actD);
16381		BX.bind(node, 'input', actD);
16382
16383		if(BX.type.isFunction(fnInstant)){
16384
16385			var actI = function(){
16386				act(fnInstant, node.value);
16387			};
16388
16389			BX.bind(node, 'keyup', actI);
16390			BX.bind(node, 'change', actI);
16391			BX.bind(node, 'input', actI);
16392		}
16393	};
16394
16395	BX.parseJSON = function(data, context)
16396	{
16397		var result = null;
16398		if (BX.type.isNotEmptyString(data))
16399		{
16400			try {
16401				if (data.indexOf("\n") >= 0)
16402					eval('result = ' + data);
16403				else
16404					result = (new Function("return " + data))();
16405			} catch(e) {
16406				BX.onCustomEvent(context, 'onParseJSONFailure', [data, context])
16407			}
16408		}
16409		else if(BX.type.isPlainObject(data))
16410		{
16411			return data;
16412		}
16413
16414		return result;
16415	};
16416
16417	BX.submit = function(obForm, action_name, action_value, onAfterSubmit)
16418	{
16419		action_name = action_name || 'save';
16420		if (!obForm['BXFormSubmit_' + action_name])
16421		{
16422			obForm['BXFormSubmit_' + action_name] = obForm.appendChild(BX.create('INPUT', {
16423				'props': {
16424					'type': 'submit',
16425					'name': action_name,
16426					'value': action_value || 'Y'
16427				},
16428				'style': {
16429					'display': 'none'
16430				}
16431			}));
16432		}
16433
16434		if (obForm.sessid)
16435			obForm.sessid.value = BX.bitrix_sessid();
16436
16437		setTimeout(BX.delegate(function() {BX.fireEvent(this, 'click'); if (onAfterSubmit) onAfterSubmit();}, obForm['BXFormSubmit_' + action_name]), 10);
16438	};
16439
16440	BX.show = function(ob, displayType)
16441	{
16442		if (ob.BXDISPLAY || !_checkDisplay(ob, displayType))
16443		{
16444			ob.style.display = ob.BXDISPLAY;
16445		}
16446	};
16447
16448	BX.hide = function(ob, displayType)
16449	{
16450		if (!ob.BXDISPLAY)
16451			_checkDisplay(ob, displayType);
16452
16453		ob.style.display = 'none';
16454	};
16455
16456	BX.toggle = function(ob, values)
16457	{
16458		if (!values && BX.type.isElementNode(ob))
16459		{
16460			var bShow = true;
16461			if (ob.BXDISPLAY)
16462				bShow = !_checkDisplay(ob);
16463			else
16464				bShow = ob.style.display == 'none';
16465
16466			if (bShow)
16467				BX.show(ob);
16468			else
16469				BX.hide(ob);
16470		}
16471		else if (BX.type.isArray(values))
16472		{
16473			for (var i=0,len=values.length; i<len; i++)
16474			{
16475				if (ob == values[i])
16476				{
16477					ob = values[i==len-1 ? 0 : i+1];
16478					break;
16479				}
16480			}
16481			if (i==len)
16482				ob = values[0];
16483		}
16484
16485		return ob;
16486	};
16487
16488	function _checkDisplay(ob, displayType)
16489	{
16490		if (typeof displayType != 'undefined')
16491			ob.BXDISPLAY = displayType;
16492
16493		var d = ob.style.display || BX.style(ob, 'display');
16494		if (d != 'none')
16495		{
16496			ob.BXDISPLAY = ob.BXDISPLAY || d;
16497			return true;
16498		}
16499		else
16500		{
16501			ob.BXDISPLAY = ob.BXDISPLAY || 'block';
16502			return false;
16503		}
16504	}
16505
16506	/* some useful util functions */
16507
16508	BX.util = {
16509		/**
16510		 * @deprecated
16511		 * @use [].filter(value => !BX.Type.isNil(value))
16512		 * @param ar
16513		 * @return {*}
16514		 */
16515		array_values: function(ar)
16516		{
16517			if (!BX.type.isArray(ar))
16518				return BX.util._array_values_ob(ar);
16519			var arv = [];
16520			for(var i=0,l=ar.length;i<l;i++)
16521				if (ar[i] !== null && typeof ar[i] != 'undefined')
16522					arv.push(ar[i]);
16523			return arv;
16524		},
16525
16526		/**
16527		 * @deprecated
16528		 * @use Object.values([]).filter(value => !BX.Type.isNil(value))
16529		 * @param ar
16530		 * @return {Array}
16531		 * @private
16532		 */
16533		_array_values_ob: function(ar)
16534		{
16535			var arv = [];
16536			for(var i in ar)
16537				if (ar[i] !== null && typeof ar[i] != 'undefined')
16538					arv.push(ar[i]);
16539			return arv;
16540		},
16541
16542		/**
16543		 * @deprecated
16544		 * @use
16545		 * @param ar
16546		 * @return {*}
16547		 */
16548		array_keys: function(ar)
16549		{
16550			if (!BX.type.isArray(ar))
16551				return BX.util._array_keys_ob(ar);
16552			var arv = [];
16553			for(var i=0,l=ar.length;i<l;i++)
16554				if (ar[i] !== null && typeof ar[i] != 'undefined')
16555					arv.push(i);
16556			return arv;
16557		},
16558
16559		_array_keys_ob: function(ar)
16560		{
16561			var arv = [];
16562			for(var i in ar)
16563				if (ar[i] !== null && typeof ar[i] != 'undefined')
16564					arv.push(i);
16565			return arv;
16566		},
16567
16568		object_keys: function(obj)
16569		{
16570			var arv = [];
16571			for(var k in obj)
16572			{
16573				if(obj.hasOwnProperty(k))
16574				{
16575					arv.push(k);
16576				}
16577			}
16578			return arv;
16579		},
16580
16581		/**
16582		 * @deprecated
16583		 * @use firstArr.concat(secondArr);
16584		 * @param first
16585		 * @param second
16586		 * @return {*[]}
16587		 */
16588		array_merge: function(first, second)
16589		{
16590			if (!BX.type.isArray(first)) first = [];
16591			if (!BX.type.isArray(second)) second = [];
16592
16593			var i = first.length, j = 0;
16594
16595			if (typeof second.length === "number")
16596			{
16597				for (var l = second.length; j < l; j++)
16598				{
16599					first[i++] = second[j];
16600				}
16601			}
16602			else
16603			{
16604				while (second[j] !== undefined)
16605				{
16606					first[i++] = second[j++];
16607				}
16608			}
16609
16610			first.length = i;
16611
16612			return first;
16613		},
16614
16615		array_flip: function (object)
16616		{
16617			var newObject = {};
16618
16619			for (var key in object)
16620			{
16621				newObject[object[key]] = key;
16622			}
16623
16624			return newObject;
16625		},
16626
16627		array_diff: function(ar1, ar2, hash)
16628		{
16629			hash = BX.type.isFunction(hash) ? hash : null;
16630			var i, length, v, h, map = {}, result = [];
16631			for(i = 0, length = ar2.length; i < length; i++)
16632			{
16633				v = ar2[i];
16634				h = hash ? hash(v) : v;
16635				map[h] = true;
16636			}
16637
16638			for(i = 0, length = ar1.length; i < length; i++)
16639			{
16640				v = ar1[i];
16641				h = hash ? hash(v) : v;
16642				if(typeof(map[h]) === "undefined")
16643				{
16644					result.push(v);
16645				}
16646			}
16647			return result;
16648		},
16649
16650		/**
16651		 * @deprecated
16652		 * @use Set
16653		 */
16654		array_unique: function(ar)
16655		{
16656			var i=0,j,len=ar.length;
16657			if(len<2) return ar;
16658
16659			for (; i<len-1;i++)
16660			{
16661				for (j=i+1; j<len;j++)
16662				{
16663					if (ar[i]==ar[j])
16664					{
16665						ar.splice(j--,1); len--;
16666					}
16667				}
16668			}
16669
16670			return ar;
16671		},
16672
16673		/**
16674		 * @deprecated
16675		 * @use myArr.includes(needle)
16676		 */
16677		in_array: function(needle, haystack)
16678		{
16679			for(var i=0; i<haystack.length; i++)
16680			{
16681				if(haystack[i] == needle)
16682					return true;
16683			}
16684			return false;
16685		},
16686
16687		/**
16688		 * @deprecated
16689		 * @use myArr.findIndex(item => item === needle);
16690		 */
16691		array_search: function(needle, haystack)
16692		{
16693			for(var i=0; i<haystack.length; i++)
16694			{
16695				if(haystack[i] == needle)
16696					return i;
16697			}
16698			return -1;
16699		},
16700
16701		object_search_key: function(needle, haystack)
16702		{
16703			if (typeof haystack[needle] != 'undefined')
16704				return haystack[needle];
16705
16706			for(var i in haystack)
16707			{
16708				if (typeof haystack[i] == "object")
16709				{
16710					var result = BX.util.object_search_key(needle, haystack[i]);
16711					if (result !== false)
16712						return result;
16713				}
16714			}
16715			return false;
16716		},
16717
16718		trim: function(s)
16719		{
16720			if (BX.type.isString(s))
16721			{
16722				return s.trim();
16723			}
16724
16725			return s;
16726		},
16727
16728		urlencode: function(s){return encodeURIComponent(s);},
16729
16730		// it may also be useful. via sVD.
16731		deleteFromArray: function(ar, ind) {return ar.slice(0, ind).concat(ar.slice(ind + 1));},
16732		insertIntoArray: function(ar, ind, el) {return ar.slice(0, ind).concat([el]).concat(ar.slice(ind));},
16733
16734		htmlspecialchars: function(str)
16735		{
16736			return BX.Text.encode(str);
16737		},
16738
16739		htmlspecialcharsback: function(str)
16740		{
16741			return BX.Text.decode(str);
16742		},
16743
16744		// Quote regular expression characters plus an optional character
16745		preg_quote: function(str, delimiter)
16746		{
16747			if(!str.replace)
16748				return str;
16749			return str.replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
16750		},
16751
16752		jsencode: function(str)
16753		{
16754			if (!str || !str.replace)
16755				return str;
16756
16757			var escapes =
16758				[
16759					{ c: "\\\\", r: "\\\\" }, // should be first
16760					{ c: "\\t", r: "\\t" },
16761					{ c: "\\n", r: "\\n" },
16762					{ c: "\\r", r: "\\r" },
16763					{ c: "\"", r: "\\\"" },
16764					{ c: "'", r: "\\'" },
16765					{ c: "<", r: "\\x3C" },
16766					{ c: ">", r: "\\x3E" },
16767					{ c: "\\u2028", r: "\\u2028" },
16768					{ c: "\\u2029", r: "\\u2029" }
16769				];
16770			for (var i = 0; i < escapes.length; i++)
16771				str = str.replace(new RegExp(escapes[i].c, 'g'), escapes[i].r);
16772			return str;
16773		},
16774
16775		getCssName: function(jsName)
16776		{
16777			if (!BX.type.isNotEmptyString(jsName))
16778			{
16779				return "";
16780			}
16781
16782			return jsName.replace(/[A-Z]/g, function(match) {
16783				return "-" + match.toLowerCase();
16784			});
16785		},
16786
16787		getJsName: function(cssName)
16788		{
16789			var regex = /\-([a-z]){1}/g;
16790			if (regex.test(cssName))
16791			{
16792				return cssName.replace(regex, function(match, letter) {
16793					return letter.toUpperCase();
16794				});
16795			}
16796
16797			return cssName;
16798		},
16799
16800		nl2br: function(str)
16801		{
16802			if (!str || !str.replace)
16803				return str;
16804
16805			return str.replace(/([^>])\n/g, '$1<br/>');
16806		},
16807
16808		/**
16809		 * @deprecated
16810		 * @use .padStart() / .padEnd()
16811		 * @param input
16812		 * @param pad_length
16813		 * @param pad_string
16814		 * @param pad_type
16815		 * @return {*}
16816		 */
16817		str_pad: function(input, pad_length, pad_string, pad_type)
16818		{
16819			pad_string = pad_string || ' ';
16820			pad_type = pad_type || 'right';
16821			input = input.toString();
16822
16823			if (pad_type === 'left')
16824			{
16825				return BX.util.str_pad_left(input, pad_length, pad_string);
16826			}
16827
16828			return BX.util.str_pad_right(input, pad_length, pad_string);
16829		},
16830
16831		str_pad_left: function(input, pad_length, pad_string)
16832		{
16833			return input.toString().padStart(pad_length, pad_string);
16834		},
16835
16836		str_pad_right: function(input, pad_length, pad_string)
16837		{
16838			return input.toString().padEnd(pad_length, pad_string);
16839		},
16840
16841		strip_tags: function(str)
16842		{
16843			return str.split(/<[^>]+>/g).join('');
16844		},
16845
16846		strip_php_tags: function(str)
16847		{
16848			return str.replace(/<\?(.|[\r\n])*?\?>/g, '');
16849		},
16850
16851		popup: function(url, width, height)
16852		{
16853			var w, h;
16854			if(BX.browser.IsOpera())
16855			{
16856				w = document.body.offsetWidth;
16857				h = document.body.offsetHeight;
16858			}
16859			else
16860			{
16861				w = screen.width;
16862				h = screen.height;
16863			}
16864			return window.open(url, '', 'status=no,scrollbars=yes,resizable=yes,width='+width+',height='+height+',top='+Math.floor((h - height)/2-14)+',left='+Math.floor((w - width)/2-5));
16865		},
16866
16867		shuffle: function(array)
16868		{
16869			var temporaryValue, randomIndex;
16870			var currentIndex = array.length;
16871
16872			while (0 !== currentIndex)
16873			{
16874				randomIndex = Math.floor(Math.random() * currentIndex);
16875				currentIndex -= 1;
16876
16877				temporaryValue = array[currentIndex];
16878				array[currentIndex] = array[randomIndex];
16879				array[randomIndex] = temporaryValue;
16880			}
16881
16882			return array;
16883		},
16884
16885		// BX.util.objectSort(object, sortBy, sortDir) - Sort object by property
16886		// function params: 1 - object for sort, 2 - sort by property, 3 - sort direction (asc/desc)
16887		// return: sort array [[objectElement], [objectElement]] in sortDir direction
16888
16889		// example: BX.util.objectSort({'L1': {'name': 'Last'}, 'F1': {'name': 'First'}}, 'name', 'asc');
16890		// return: [{'name' : 'First'}, {'name' : 'Last'}]
16891		objectSort: function(object, sortBy, sortDir)
16892		{
16893			sortDir = sortDir == 'asc'? 'asc': 'desc';
16894
16895			var arItems = [], i;
16896			for (i in object)
16897			{
16898				if (object.hasOwnProperty(i) && object[i][sortBy])
16899				{
16900					arItems.push([i, object[i][sortBy]]);
16901				}
16902			}
16903
16904			if (sortDir == 'asc')
16905			{
16906				arItems.sort(function(i, ii) {
16907					var s1, s2;
16908					if (BX.type.isDate(i[1]))
16909					{
16910						s1 = i[1].getTime();
16911					}
16912					else if (!isNaN(i[1]))
16913					{
16914						s1 = parseInt(i[1]);
16915					}
16916					else
16917					{
16918						s1 = i[1].toString().toLowerCase();
16919					}
16920
16921					if (BX.type.isDate(ii[1]))
16922					{
16923						s2 = ii[1].getTime();
16924					}
16925					else if (!isNaN(ii[1]))
16926					{
16927						s2 = parseInt(ii[1]);
16928					}
16929					else
16930					{
16931						s2 = ii[1].toString().toLowerCase();
16932					}
16933
16934					if (s1 > s2)
16935						return 1;
16936					else if (s1 < s2)
16937						return -1;
16938					else
16939						return 0;
16940				});
16941			}
16942			else
16943			{
16944				arItems.sort(function(i, ii) {
16945					var s1, s2;
16946					if (BX.type.isDate(i[1]))
16947					{
16948						s1 = i[1].getTime();
16949					}
16950					else if (!isNaN(i[1]))
16951					{
16952						s1 = parseInt(i[1]);
16953					}
16954					else
16955					{
16956						s1 = i[1].toString().toLowerCase();
16957					}
16958
16959					if (BX.type.isDate(ii[1]))
16960					{
16961						s2 = ii[1].getTime();
16962					}
16963					else if (!isNaN(ii[1]))
16964					{
16965						s2 = parseInt(ii[1]);
16966					}
16967					else
16968					{
16969						s2 = ii[1].toString().toLowerCase();
16970					}
16971
16972					if (s1 < s2)
16973						return 1;
16974					else if (s1 > s2)
16975						return -1;
16976					else
16977						return 0;
16978				});
16979			}
16980
16981			var arReturnArray = Array();
16982			for (i = 0; i < arItems.length; i++)
16983			{
16984				arReturnArray.push(object[arItems[i][0]]);
16985			}
16986
16987			return arReturnArray;
16988		},
16989
16990		objectMerge: function()
16991		{
16992			return BX.mergeEx.apply(window, arguments);
16993		},
16994
16995		objectClone : function(object)
16996		{
16997			return BX.clone(object, true);
16998		},
16999
17000		// #fdf9e5 => {r=253, g=249, b=229}
17001		hex2rgb: function(color)
17002		{
17003			var rgb = color.replace(/[# ]/g,"").replace(/^(.)(.)(.)$/,'$1$1$2$2$3$3').match(/.{2}/g);
17004			for (var i=0;  i<3; i++)
17005			{
17006				rgb[i] = parseInt(rgb[i], 16);
17007			}
17008			return {'r':rgb[0],'g':rgb[1],'b':rgb[2]};
17009		},
17010
17011		/**
17012		 * @deprecated
17013		 * @use BX.Uri
17014		 * @param url
17015		 * @param param
17016		 * @return {string}
17017		 */
17018		remove_url_param: function(url, param)
17019		{
17020			return BX.Uri.removeParam(url, param);
17021		},
17022
17023		/*
17024		{'param1': 'value1', 'param2': 'value2'}
17025		 */
17026		/**
17027		 * @deprecated
17028		 * @use BX.Uri
17029		 * @param url
17030		 * @param params
17031		 * @return {string}
17032		 */
17033		add_url_param: function(url, params)
17034		{
17035			var preparedParams = Object.entries(params).reduce(function(acc, item) {
17036				acc[item[0]] = BX.type.isArray(item[1]) ? item[1].join() : item[1];
17037				return acc;
17038			}, {});
17039
17040			return BX.Uri.addParam(url, preparedParams);
17041		},
17042
17043		/*
17044	{'param1': 'value1', 'param2': 'value2'}
17045	 */
17046		buildQueryString: function(params)
17047		{
17048			var result = '';
17049			for (var key in params)
17050			{
17051				var value = params[key];
17052				if(BX.type.isArray(value))
17053				{
17054					value.forEach(function(valueElement, index)
17055					{
17056						result += encodeURIComponent(key + "[" + index + "]") + "=" + encodeURIComponent(valueElement) + "&";
17057					});
17058				}
17059				else
17060				{
17061					result += encodeURIComponent(key) + "=" + encodeURIComponent(value) + "&";
17062				}
17063			}
17064
17065			if(result.length > 0)
17066			{
17067				result = result.substr(0, result.length - 1);
17068			}
17069			return result;
17070		},
17071
17072		even: function(digit)
17073		{
17074			return (parseInt(digit) % 2 == 0);
17075		},
17076
17077		hashCode: function(str)
17078		{
17079			if(!BX.type.isNotEmptyString(str))
17080			{
17081				return 0;
17082			}
17083
17084			var hash = 0;
17085			for (var i = 0; i < str.length; i++)
17086			{
17087				var c = str.charCodeAt(i);
17088				hash = ((hash << 5) - hash) + c;
17089				hash = hash & hash;
17090			}
17091			return hash;
17092		},
17093
17094		getRandomString: function (length)
17095		{
17096			return BX.Text.getRandom(length);
17097		},
17098
17099		number_format: function(number, decimals, dec_point, thousands_sep)
17100		{
17101			var i, j, kw, kd, km, sign = '';
17102			decimals = Math.abs(decimals);
17103			if (isNaN(decimals) || decimals < 0)
17104			{
17105				decimals = 2;
17106			}
17107			dec_point = dec_point || ',';
17108			if (typeof thousands_sep === 'undefined')
17109				thousands_sep = '.';
17110
17111			number = (+number || 0).toFixed(decimals);
17112			if (number < 0)
17113			{
17114				sign = '-';
17115				number = -number;
17116			}
17117
17118			i = parseInt(number, 10) + '';
17119			j = (i.length > 3 ? i.length % 3 : 0);
17120
17121			km = (j ? i.substr(0, j) + thousands_sep : '');
17122			kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep);
17123			kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, '0').slice(2) : '');
17124
17125			return sign + km + kw + kd;
17126		},
17127
17128		getExtension: function (url)
17129		{
17130			url = url || "";
17131			var items = url.split("?")[0].split(".");
17132			return items[items.length-1].toLowerCase();
17133		},
17134		addObjectToForm: function(object, form, prefix)
17135		{
17136			if(!BX.type.isString(prefix))
17137			{
17138				prefix = "";
17139			}
17140
17141			for(var key in object)
17142			{
17143				if(!object.hasOwnProperty(key))
17144				{
17145					continue;
17146				}
17147
17148				var value = object[key];
17149				var name = prefix !== "" ? (prefix + "[" + key + "]") : key;
17150				if(BX.type.isArray(value))
17151				{
17152					var obj = {};
17153					for(var i = 0; i < value.length; i++)
17154					{
17155						obj[i] = value[i];
17156					}
17157
17158					BX.util.addObjectToForm(obj, form, name);
17159				}
17160				else if(BX.type.isPlainObject(value))
17161				{
17162					BX.util.addObjectToForm(value, form, name);
17163				}
17164				else
17165				{
17166					value = BX.type.isFunction(value.toString) ? value.toString() : "";
17167					if(value !== "")
17168					{
17169						form.appendChild(BX.create("INPUT", { attrs: { type: "hidden", name: name, value: value } }));
17170					}
17171				}
17172			}
17173		},
17174
17175		observe: function(object, enable)
17176		{
17177			console.error('BX.util.observe: function is no longer supported by browser.');
17178			return false;
17179		},
17180
17181		escapeRegExp: function(str)
17182		{
17183			return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
17184		}
17185	};
17186
17187	BX.validation = {
17188		checkIfEmail: function(s)
17189		{
17190			var atom = "[=a-z0-9_+~'!$&*^`|#%/?{}-]";
17191			return (new RegExp('^\\s*'+atom+'+(\\.'+atom+'+)*@([a-z0-9-]+\\.)+[a-z0-9-]{2,20}\\s*$', 'i')).test(s);
17192		},
17193		checkIfPhone: function(s)
17194		{
17195			var regexp = new RegExp(
17196				typeof(BX.PhoneNumber) === "undefined"
17197					? BX.PhoneNumber.getValidNumberPattern()
17198					: '^\\s*\\+?\s*[0-9(-)\\s]+\\s*$',
17199				'i'
17200			);
17201			return regexp.test(s);
17202		}
17203	};
17204
17205	BX.prop =
17206		{
17207			get: function(object, key, defaultValue)
17208			{
17209				return object && object.hasOwnProperty(key) ? object[key] : defaultValue;
17210			},
17211			getObject: function(object, key, defaultValue)
17212			{
17213				return object && BX.type.isPlainObject(object[key]) ? object[key] : defaultValue;
17214			},
17215			getElementNode: function(object, key, defaultValue)
17216			{
17217				return object && BX.type.isElementNode(object[key]) ? object[key] : defaultValue;
17218			},
17219			getArray: function(object, key, defaultValue)
17220			{
17221				return object && BX.type.isArray(object[key]) ? object[key] : defaultValue;
17222			},
17223			getFunction: function(object, key, defaultValue)
17224			{
17225				return object && BX.type.isFunction(object[key]) ? object[key] : defaultValue;
17226			},
17227			getNumber: function(object, key, defaultValue)
17228			{
17229				if(!(object && object.hasOwnProperty(key)))
17230				{
17231					return defaultValue;
17232				}
17233
17234				var value = object[key];
17235				if(BX.type.isNumber(value))
17236				{
17237					return value;
17238				}
17239
17240				value = parseFloat(value);
17241				return !isNaN(value) ? value : defaultValue;
17242			},
17243			getInteger: function(object, key, defaultValue)
17244			{
17245				if(!(object && object.hasOwnProperty(key)))
17246				{
17247					return defaultValue;
17248				}
17249
17250				var value = object[key];
17251				if(BX.type.isNumber(value))
17252				{
17253					return value;
17254				}
17255
17256				value = parseInt(value);
17257				return !isNaN(value) ? value : defaultValue;
17258			},
17259			getBoolean: function(object, key, defaultValue)
17260			{
17261				if(!(object && object.hasOwnProperty(key)))
17262				{
17263					return defaultValue;
17264				}
17265
17266				var value = object[key];
17267				return (BX.type.isBoolean(value)
17268						? value
17269						: (BX.type.isString(value) ? (value.toLowerCase() === "true") : !!value)
17270				);
17271			},
17272			getString: function(object, key, defaultValue)
17273			{
17274				if(!(object && object.hasOwnProperty(key)))
17275				{
17276					return defaultValue;
17277				}
17278
17279				var value = object[key];
17280				return BX.type.isString(value) ? value : (value ? value.toString() : '');
17281			},
17282			extractDate: function(datetime)
17283			{
17284				if(!BX.type.isDate(datetime))
17285				{
17286					datetime = new Date();
17287				}
17288
17289				datetime.setHours(0);
17290				datetime.setMinutes(0);
17291				datetime.setSeconds(0);
17292				datetime.setMilliseconds(0);
17293
17294				return datetime;
17295			}
17296		};
17297
17298	BX.isNodeInDom = function(node, doc)
17299	{
17300		return node === (doc || document) ? true :
17301			(node.parentNode ? BX.isNodeInDom(node.parentNode) : false);
17302	};
17303
17304	BX.isNodeHidden = function(node)
17305	{
17306		if (node === document)
17307			return false;
17308		else if (BX.style(node, 'display') == 'none')
17309			return true;
17310		else
17311			return (node.parentNode ? BX.isNodeHidden(node.parentNode) : true);
17312	};
17313
17314	BX.evalPack = function(code)
17315	{
17316		while (code.length > 0)
17317		{
17318			var c = code.shift();
17319
17320			if (c.TYPE == 'SCRIPT_EXT' || c.TYPE == 'SCRIPT_SRC')
17321			{
17322				BX.loadScript(c.DATA, function() {BX.evalPack(code)});
17323				return;
17324			}
17325			else if (c.TYPE == 'SCRIPT')
17326			{
17327				BX.evalGlobal(c.DATA);
17328			}
17329		}
17330	};
17331
17332	BX.evalGlobal = function(data)
17333	{
17334		if (data)
17335		{
17336			var head = document.getElementsByTagName("head")[0] || document.documentElement,
17337				script = document.createElement("script");
17338
17339			script.type = "text/javascript";
17340
17341			if (!BX.browser.IsIE())
17342			{
17343				script.appendChild(document.createTextNode(data));
17344			}
17345			else
17346			{
17347				script.text = data;
17348			}
17349
17350			head.insertBefore(script, head.firstChild);
17351			head.removeChild(script);
17352		}
17353	};
17354
17355	BX.garbage = function(call, thisObject)
17356	{
17357		garbageCollectors.push({callback: call, context: thisObject});
17358	};
17359
17360	BX.GetDocElement = function (pDoc)
17361	{
17362		pDoc = pDoc || document;
17363		return (BX.browser.IsDoctype(pDoc) ? pDoc.documentElement : pDoc.body);
17364	};
17365
17366	BX.scrollTop = function(node, val){
17367		if(typeof val != 'undefined'){
17368
17369			if(node == window){
17370				throw new Error('scrollTop() for window is not implemented');
17371			}else
17372				node.scrollTop = parseInt(val);
17373
17374		}else{
17375
17376			if(node == window)
17377				return BX.GetWindowScrollPos().scrollTop;
17378
17379			return node.scrollTop;
17380		}
17381	};
17382
17383	BX.scrollLeft = function(node, val){
17384		if(typeof val != 'undefined'){
17385
17386			if(node == window){
17387				throw new Error('scrollLeft() for window is not implemented');
17388			}else
17389				node.scrollLeft = parseInt(val);
17390
17391		}else{
17392
17393			if(node == window)
17394				return BX.GetWindowScrollPos().scrollLeft;
17395
17396			return node.scrollLeft;
17397		}
17398	};
17399
17400	BX.hide_object = function(ob)
17401	{
17402		ob = BX(ob);
17403		ob.style.position = 'absolute';
17404		ob.style.top = '-1000px';
17405		ob.style.left = '-1000px';
17406		ob.style.height = '10px';
17407		ob.style.width = '10px';
17408	};
17409
17410	BX.is_relative = function(el)
17411	{
17412		var p = BX.style(el, 'position');
17413		return p == 'relative' || p == 'absolute';
17414	};
17415
17416	BX.is_float = function(el)
17417	{
17418		var p = BX.style(el, 'float');
17419		return p == 'right' || p == 'left';
17420	};
17421
17422	BX.is_fixed = function(el)
17423	{
17424		var p = BX.style(el, 'position');
17425		return p == 'fixed';
17426	};
17427
17428	BX.width = function(node, val){
17429		if(typeof val != 'undefined')
17430			BX.style(node, 'width', parseInt(val)+'px');
17431		else{
17432
17433			if(node == window)
17434				return window.innerWidth;
17435
17436			//return parseInt(BX.style(node, 'width'));
17437			return BX.pos(node).width;
17438		}
17439	};
17440
17441	BX.height = function(node, val){
17442		if(typeof val != 'undefined')
17443			BX.style(node, 'height', parseInt(val)+'px');
17444		else{
17445
17446			if(node == window)
17447				return window.innerHeight;
17448
17449			//return parseInt(BX.style(node, 'height'));
17450			return BX.pos(node).height;
17451		}
17452	};
17453
17454	BX.align = function(pos, w, h, type)
17455	{
17456		if (type)
17457			type = type.toLowerCase();
17458		else
17459			type = '';
17460
17461		var pDoc = document;
17462		if (BX.type.isElementNode(pos))
17463		{
17464			pDoc = pos.ownerDocument;
17465			pos = BX.pos(pos);
17466		}
17467
17468		var x = pos["left"], y = pos["bottom"];
17469
17470		var scroll = BX.GetWindowScrollPos(pDoc);
17471		var size = BX.GetWindowInnerSize(pDoc);
17472
17473		if((size.innerWidth + scroll.scrollLeft) - (pos["left"] + w) < 0)
17474		{
17475			if(pos["right"] - w >= 0 )
17476				x = pos["right"] - w;
17477			else
17478				x = scroll.scrollLeft;
17479		}
17480
17481		if(((size.innerHeight + scroll.scrollTop) - (pos["bottom"] + h) < 0) || ~type.indexOf('top'))
17482		{
17483			if(pos["top"] - h >= 0 || ~type.indexOf('top'))
17484				y = pos["top"] - h;
17485			else
17486				y = scroll.scrollTop;
17487		}
17488
17489		return {'left':x, 'top':y};
17490	};
17491
17492	BX.scrollToNode = function(node)
17493	{
17494		var obNode = BX(node);
17495
17496		if (obNode.scrollIntoView)
17497			obNode.scrollIntoView(true);
17498		else
17499		{
17500			var arNodePos = BX.pos(obNode);
17501			window.scrollTo(arNodePos.left, arNodePos.top);
17502		}
17503	};
17504
17505	/* non-xhr loadings */
17506	BX.showWait = function(node, msg)
17507	{
17508		node = BX(node) || document.body || document.documentElement;
17509		msg = msg || BX.message('JS_CORE_LOADING');
17510
17511		var container_id = node.id || Math.random();
17512
17513		var obMsg = node.bxmsg = document.body.appendChild(BX.create('DIV', {
17514			props: {
17515				id: 'wait_' + container_id
17516			},
17517			style: {
17518				background: 'url("/bitrix/js/main/core/images/wait.gif") no-repeat scroll 10px center #fcf7d1',
17519				border: '1px solid #E1B52D',
17520				color: 'black',
17521				fontFamily: 'Verdana,Arial,sans-serif',
17522				fontSize: '11px',
17523				padding: '10px 30px 10px 37px',
17524				position: 'absolute',
17525				textAlign:'center'
17526			},
17527			text: msg
17528		}));
17529
17530		BX.ZIndexManager.register(obMsg);
17531		BX.ZIndexManager.bringToFront(obMsg);
17532
17533		setTimeout(BX.delegate(_adjustWait, node), 10);
17534
17535		lastWait[lastWait.length] = obMsg;
17536		return obMsg;
17537	};
17538
17539	BX.closeWait = function(node, obMsg)
17540	{
17541		if(node && !obMsg)
17542			obMsg = node.bxmsg;
17543		if(node && !obMsg && BX.hasClass(node, 'bx-core-waitwindow'))
17544			obMsg = node;
17545		if(node && !obMsg)
17546			obMsg = BX('wait_' + node.id);
17547		if(!obMsg)
17548			obMsg = lastWait.pop();
17549
17550		if (obMsg && obMsg.parentNode)
17551		{
17552			for (var i=0,len=lastWait.length;i<len;i++)
17553			{
17554				if (obMsg == lastWait[i])
17555				{
17556					lastWait = BX.util.deleteFromArray(lastWait, i);
17557					break;
17558				}
17559			}
17560
17561			BX.ZIndexManager.unregister(obMsg);
17562			obMsg.parentNode.removeChild(obMsg);
17563			if (node) node.bxmsg = null;
17564			BX.cleanNode(obMsg, true);
17565		}
17566	};
17567
17568	BX.setJSList = function(scripts)
17569	{
17570		if (BX.type.isArray(scripts))
17571		{
17572			scripts = scripts.map(function(script) {
17573				return normalizeUrl(script)
17574			});
17575
17576			jsList = jsList.concat(scripts);
17577		}
17578	};
17579
17580	BX.getJSList = function()
17581	{
17582		initJsList();
17583		return jsList;
17584	};
17585
17586	BX.setCSSList = function(cssFiles)
17587	{
17588		if (BX.type.isArray(cssFiles))
17589		{
17590			cssFiles = cssFiles.map(function(cssFile) {
17591				return normalizeUrl(cssFile);
17592			});
17593
17594			cssList = cssList.concat(cssFiles);
17595		}
17596	};
17597
17598	BX.getCSSList = function()
17599	{
17600		initCssList();
17601		return cssList;
17602	};
17603
17604	BX.getJSPath = function(js)
17605	{
17606		return js.replace(/^(http[s]*:)*\/\/[^\/]+/i, '');
17607	};
17608
17609	BX.getCSSPath = function(css)
17610	{
17611		return css.replace(/^(http[s]*:)*\/\/[^\/]+/i, '');
17612	};
17613
17614	BX.getCDNPath = function(path)
17615	{
17616		return path;
17617	};
17618
17619	BX.loadScript = function(script, callback, doc)
17620	{
17621		if (BX.type.isString(script))
17622		{
17623			script = [script];
17624		}
17625
17626		return BX.load(script, callback, doc);
17627	};
17628
17629	BX.loadCSS = function(css, doc, win)
17630	{
17631		if (BX.type.isString(css))
17632		{
17633			css = [css];
17634		}
17635
17636		if (BX.type.isArray(css))
17637		{
17638			css = css.map(function(url) {
17639				return { url: url, ext: "css" }
17640			});
17641
17642			BX.load(css, null, doc);
17643		}
17644	};
17645
17646	BX.load = function(items, callback, doc)
17647	{
17648		if (!BX.isReady)
17649		{
17650			var _args = arguments;
17651			BX.ready(function() {
17652				BX.load.apply(this, _args);
17653			});
17654			return null;
17655		}
17656
17657		doc = doc || document;
17658		if (isAsync === null)
17659		{
17660			isAsync = "async" in doc.createElement("script") || "MozAppearance" in doc.documentElement.style || window.opera;
17661		}
17662
17663		return isAsync ? loadAsync(items, callback, doc) : loadAsyncEmulation(items, callback, doc);
17664	};
17665
17666	BX.convert =
17667		{
17668			toNumber: function(value)
17669			{
17670				if(BX.type.isNumber(value))
17671				{
17672					return value;
17673				}
17674
17675				value = Number(value);
17676				return !isNaN(value) ? value : 0;
17677			},
17678			nodeListToArray: function(nodes)
17679			{
17680				try
17681				{
17682					return (Array.prototype.slice.call(nodes, 0));
17683				}
17684				catch (ex)
17685				{
17686					var ary = [];
17687					for(var i = 0, l = nodes.length; i < l; i++)
17688					{
17689						ary.push(nodes[i]);
17690					}
17691					return ary;
17692				}
17693			}
17694		};
17695
17696	function loadAsync(items, callback, doc)
17697	{
17698		if (!BX.type.isArray(items))
17699		{
17700			return;
17701		}
17702
17703		function allLoaded(items)
17704		{
17705			items = items || assets;
17706			for (var name in items)
17707			{
17708				if (items.hasOwnProperty(name) && items[name].state !== LOADED)
17709				{
17710					return false;
17711				}
17712			}
17713
17714			return true;
17715		}
17716
17717		if (!BX.type.isFunction(callback))
17718		{
17719			callback = null;
17720		}
17721
17722		var itemSet = {}, item, i;
17723		for (i = 0; i < items.length; i++)
17724		{
17725			item = items[i];
17726			item = getAsset(item);
17727			itemSet[item.name] = item;
17728		}
17729
17730		var callbackWasCalled = false;
17731		if (items.length > 0)
17732		{
17733			for (i = 0; i < items.length; i++)
17734			{
17735				item = items[i];
17736				item = getAsset(item);
17737				load(item, function () {
17738					if (allLoaded(itemSet))
17739					{
17740						if (!callbackWasCalled)
17741						{
17742							callback && callback();
17743							callbackWasCalled = true;
17744						}
17745
17746					}
17747				}, doc);
17748			}
17749		}
17750		else
17751		{
17752			if (typeof callback === 'function')
17753			{
17754				callback();
17755				callbackWasCalled = true;
17756			}
17757		}
17758	}
17759
17760	function loadAsyncEmulation(items, callback, doc)
17761	{
17762		function onPreload(asset)
17763		{
17764			asset.state = PRELOADED;
17765			if (BX.type.isArray(asset.onpreload) && asset.onpreload)
17766			{
17767				for (var i = 0; i < asset.onpreload.length; i++)
17768				{
17769					asset.onpreload[i].call();
17770				}
17771			}
17772		}
17773
17774		function preLoad(asset)
17775		{
17776			if (asset.state === undefined)
17777			{
17778				asset.state = PRELOADING;
17779				asset.onpreload = [];
17780
17781				loadAsset(
17782					{ url: asset.url, type: "cache", ext: asset.ext},
17783					function () { onPreload(asset); },
17784					doc
17785				);
17786			}
17787		}
17788
17789		if (!BX.type.isArray(items))
17790		{
17791			return;
17792		}
17793
17794		if (!BX.type.isFunction(callback))
17795		{
17796			callback = null;
17797		}
17798
17799		var rest = [].slice.call(items, 1);
17800		for (var i = 0; i < rest.length; i++)
17801		{
17802			preLoad(getAsset(rest[i]));
17803		}
17804
17805		load(getAsset(items[0]), items.length === 1 ? callback : function () {
17806			loadAsyncEmulation.apply(null, [rest, callback, doc]);
17807		}, doc);
17808	}
17809
17810	function load(asset, callback, doc)
17811	{
17812		callback = callback || BX.DoNothing;
17813
17814		if (asset.state === LOADED)
17815		{
17816			callback();
17817			return;
17818		}
17819
17820		if (asset.state === PRELOADING)
17821		{
17822			asset.onpreload.push(function () {
17823				load(asset, callback, doc);
17824			});
17825			return;
17826		}
17827
17828		asset.state = LOADING;
17829
17830		loadAsset(
17831			asset,
17832			function () {
17833				asset.state = LOADED;
17834				callback();
17835			},
17836			doc
17837		);
17838	}
17839
17840	function loadAsset(asset, callback, doc)
17841	{
17842		callback = callback || BX.DoNothing;
17843
17844		function error(event)
17845		{
17846			ele.onload = ele.onreadystatechange = ele.onerror = null;
17847			callback();
17848		}
17849
17850		function process(event)
17851		{
17852			event = event || window.event;
17853			if (event.type === "load" || (/loaded|complete/.test(ele.readyState) && (!doc.documentMode || doc.documentMode < 9)))
17854			{
17855				window.clearTimeout(asset.errorTimeout);
17856				window.clearTimeout(asset.cssTimeout);
17857				ele.onload = ele.onreadystatechange = ele.onerror = null;
17858				callback();
17859			}
17860		}
17861
17862		function isCssLoaded()
17863		{
17864			if (asset.state !== LOADED && asset.cssRetries <= 20)
17865			{
17866				for (var i = 0, l = doc.styleSheets.length; i < l; i++)
17867				{
17868					if (doc.styleSheets[i].href === ele.href)
17869					{
17870						process({"type": "load"});
17871						return;
17872					}
17873				}
17874
17875				asset.cssRetries++;
17876				asset.cssTimeout = window.setTimeout(isCssLoaded, 250);
17877			}
17878		}
17879
17880		var ele;
17881		var ext = BX.type.isNotEmptyString(asset.ext) ? asset.ext : BX.util.getExtension(asset.url);
17882
17883		if (ext === "css")
17884		{
17885			ele = doc.createElement("link");
17886			ele.type = "text/" + (asset.type || "css");
17887			ele.rel = "stylesheet";
17888			ele.href = asset.url;
17889
17890			asset.cssRetries = 0;
17891			asset.cssTimeout = window.setTimeout(isCssLoaded, 500);
17892		}
17893		else
17894		{
17895			ele = doc.createElement("script");
17896			ele.type = "text/" + (asset.type || "javascript");
17897			ele.src = asset.url;
17898		}
17899
17900		ele.onload = ele.onreadystatechange = process;
17901		ele.onerror = error;
17902
17903		ele.async = false;
17904		ele.defer = false;
17905
17906		asset.errorTimeout = window.setTimeout(function () {
17907			error({type: "timeout"});
17908		}, 7000);
17909
17910		if (ext === "css")
17911		{
17912			cssList.push(normalizeMinUrl(normalizeUrl(asset.url)));
17913		}
17914		else
17915		{
17916			jsList.push(normalizeMinUrl(normalizeUrl(asset.url)));
17917		}
17918
17919		var templateLink = null;
17920		var head = doc.head || doc.getElementsByTagName("head")[0];
17921		if (ext === "css" && (templateLink = getTemplateLink(head)) !== null)
17922		{
17923			templateLink.parentNode.insertBefore(ele, templateLink);
17924		}
17925		else
17926		{
17927			head.insertBefore(ele, head.lastChild);
17928		}
17929	}
17930
17931	function getAsset(item)
17932	{
17933		var asset = {};
17934		if (typeof item === "object")
17935		{
17936			asset = item;
17937			asset.name = asset.name ? asset.name : BX.util.hashCode(item.url);
17938		}
17939		else
17940		{
17941			asset = { name: BX.util.hashCode(item), url : item };
17942		}
17943
17944		var ext = BX.type.isNotEmptyString(asset.ext) ? asset.ext : BX.util.getExtension(asset.url);
17945		if ((ext === "css" && isCssLoaded(asset.url)) || isScriptLoaded(asset.url))
17946		{
17947			asset.state = LOADED;
17948		}
17949
17950		var existing = assets[asset.name];
17951		if (existing && existing.url === asset.url)
17952		{
17953			return existing;
17954		}
17955
17956		assets[asset.name] = asset;
17957		return asset;
17958	}
17959
17960	function normalizeUrl(url)
17961	{
17962		if (!BX.type.isNotEmptyString(url))
17963		{
17964			return "";
17965		}
17966
17967		url = BX.getJSPath(url);
17968		url = url.replace(/\?[0-9]*$/, "");
17969
17970		return url;
17971	}
17972
17973	function normalizeMinUrl(url)
17974	{
17975		if (!BX.type.isNotEmptyString(url))
17976		{
17977			return "";
17978		}
17979
17980		var minPos = url.indexOf(".min");
17981		return minPos >= 0 ? url.substr(0, minPos) + url.substr(minPos + 4) : url;
17982	}
17983
17984	function isCssLoaded(fileSrc)
17985	{
17986		initCssList();
17987
17988		fileSrc = normalizeUrl(fileSrc);
17989		var fileSrcMin = normalizeMinUrl(fileSrc);
17990
17991		return (fileSrc !== fileSrcMin && BX.util.in_array(fileSrcMin, cssList)) || BX.util.in_array(fileSrc, cssList);
17992	}
17993
17994	function initCssList()
17995	{
17996		if(!cssInit)
17997		{
17998			var linksCol = document.getElementsByTagName('link');
17999
18000			if(!!linksCol && linksCol.length > 0)
18001			{
18002				for(var i = 0; i < linksCol.length; i++)
18003				{
18004					var href = linksCol[i].getAttribute('href');
18005					if (BX.type.isNotEmptyString(href))
18006					{
18007						href = normalizeMinUrl(normalizeUrl(href));
18008						cssList.push(href);
18009					}
18010				}
18011			}
18012			cssInit = true;
18013		}
18014	}
18015
18016	function getTemplateLink(head)
18017	{
18018		var findLink = function(tag)
18019		{
18020			var links = head.getElementsByTagName(tag);
18021			for (var i = 0, length = links.length; i < length; i++)
18022			{
18023				var templateStyle = links[i].getAttribute("data-template-style");
18024				if (BX.type.isNotEmptyString(templateStyle) && templateStyle == "true")
18025				{
18026					return links[i];
18027				}
18028			}
18029
18030			return null;
18031		};
18032
18033		var link = findLink("link");
18034		if (link === null)
18035		{
18036			link = findLink("style");
18037		}
18038
18039		return link;
18040	}
18041
18042	function isScriptLoaded(fileSrc)
18043	{
18044		initJsList();
18045
18046		fileSrc = normalizeUrl(fileSrc);
18047		var fileSrcMin = normalizeMinUrl(fileSrc);
18048
18049		return (fileSrc !== fileSrcMin && BX.util.in_array(fileSrcMin, jsList)) || BX.util.in_array(fileSrc, jsList);
18050	}
18051
18052	function initJsList()
18053	{
18054		if(!jsInit)
18055		{
18056			var scriptCol = document.getElementsByTagName('script');
18057
18058			if(!!scriptCol && scriptCol.length > 0)
18059			{
18060				for(var i=0; i<scriptCol.length; i++)
18061				{
18062					var src = scriptCol[i].getAttribute('src');
18063
18064					if (BX.type.isNotEmptyString(src))
18065					{
18066						src = normalizeMinUrl(normalizeUrl(src));
18067						jsList.push(src);
18068					}
18069				}
18070			}
18071			jsInit = true;
18072		}
18073	}
18074
18075	function reloadInternal(back_url, bAddClearCache)
18076	{
18077		if (back_url === true)
18078		{
18079			bAddClearCache = true;
18080			back_url = null;
18081		}
18082
18083		var topWindow = BX.PageObject.getRootWindow();
18084		var new_href = back_url || topWindow.location.href;
18085
18086		var hashpos = new_href.indexOf('#'), hash = '';
18087
18088		if (hashpos != -1)
18089		{
18090			hash = new_href.substr(hashpos);
18091			new_href = new_href.substr(0, hashpos);
18092		}
18093
18094		if (bAddClearCache && new_href.indexOf('clear_cache=Y') < 0)
18095			new_href += (new_href.indexOf('?') == -1 ? '?' : '&') + 'clear_cache=Y';
18096
18097		if (hash)
18098		{
18099			// hack for clearing cache in ajax mode components with history emulation
18100			if (bAddClearCache && (hash.substr(0, 5) == 'view/' || hash.substr(0, 6) == '#view/') && hash.indexOf('clear_cache%3DY') < 0)
18101				hash += (hash.indexOf('%3F') == -1 ? '%3F' : '%26') + 'clear_cache%3DY';
18102
18103			new_href = new_href.replace(/(\?|\&)_r=[\d]*/, '');
18104			new_href += (new_href.indexOf('?') == -1 ? '?' : '&') + '_r='+Math.round(Math.random()*10000) + hash;
18105		}
18106
18107		topWindow.location.href = new_href;
18108	}
18109
18110	BX.reload = function(back_url, bAddClearCache)
18111	{
18112		if (window !== window.top)
18113		{
18114			BX.Runtime
18115				.loadExtension('main.pageobject')
18116				.then(function() {
18117					reloadInternal(back_url, bAddClearCache);
18118				});
18119		}
18120		else
18121		{
18122			reloadInternal(back_url, bAddClearCache);
18123		}
18124	};
18125
18126	BX.clearCache = function()
18127	{
18128		BX.showWait();
18129		BX.reload(true);
18130	};
18131
18132	BX.template = function(tpl, callback, bKillTpl)
18133	{
18134		BX.ready(function() {
18135			_processTpl(BX(tpl), callback, bKillTpl);
18136		});
18137	};
18138
18139	BX.isAmPmMode = function(returnConst)
18140	{
18141		if (returnConst === true)
18142		{
18143			return BX.message.AMPM_MODE;
18144		}
18145		return BX.message.AMPM_MODE !== false;
18146	};
18147
18148	BX.formatDate = function(date, format)
18149	{
18150		date = date || new Date();
18151
18152		var bTime = date.getHours() || date.getMinutes() || date.getSeconds(),
18153			str = !!format
18154				? format :
18155				(bTime ? BX.message('FORMAT_DATETIME') : BX.message('FORMAT_DATE')
18156				);
18157
18158		return str.replace(/YYYY/ig, date.getFullYear())
18159			.replace(/MMMM/ig, BX.util.str_pad_left((date.getMonth()+1).toString(), 2, '0'))
18160			.replace(/MM/ig, BX.util.str_pad_left((date.getMonth()+1).toString(), 2, '0'))
18161			.replace(/DD/ig, BX.util.str_pad_left(date.getDate().toString(), 2, '0'))
18162			.replace(/HH/ig, BX.util.str_pad_left(date.getHours().toString(), 2, '0'))
18163			.replace(/MI/ig, BX.util.str_pad_left(date.getMinutes().toString(), 2, '0'))
18164			.replace(/SS/ig, BX.util.str_pad_left(date.getSeconds().toString(), 2, '0'));
18165	};
18166	BX.formatName = function(user, template, login)
18167	{
18168		user = user || {};
18169		template = (template || '');
18170		var replacement = {
18171			TITLE : (user["TITLE"] || ''),
18172			NAME : (user["NAME"] || ''),
18173			LAST_NAME : (user["LAST_NAME"] || ''),
18174			SECOND_NAME : (user["SECOND_NAME"] || ''),
18175			LOGIN : (user["LOGIN"] || ''),
18176			NAME_SHORT : user["NAME"] ? user["NAME"].substr(0, 1) + '.' : '',
18177			LAST_NAME_SHORT : user["LAST_NAME"] ? user["LAST_NAME"].substr(0, 1) + '.' : '',
18178			SECOND_NAME_SHORT : user["SECOND_NAME"] ? user["SECOND_NAME"].substr(0, 1) + '.' : '',
18179			EMAIL : (user["EMAIL"] || ''),
18180			ID : (user["ID"] || ''),
18181			NOBR : "",
18182			'/NOBR' : ""
18183		}, result = template;
18184		for (var ii in replacement)
18185		{
18186			if (replacement.hasOwnProperty(ii))
18187			{
18188				result = result.replace("#" + ii+ "#", replacement[ii])
18189			}
18190		}
18191		result = result.replace(/([\s]+)/gi, " ").trim();
18192		if (result == "")
18193		{
18194			result = (login == "Y" ? replacement["LOGIN"] : "");
18195			result = (result == "" ? "Noname" : result);
18196		}
18197		return result;
18198	};
18199
18200	BX.getNumMonth = function(month)
18201	{
18202		var wordMonthCut = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
18203		var wordMonth = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];
18204
18205		var q = month.toUpperCase();
18206		for (i = 1; i <= 12; i++)
18207		{
18208			if (q == BX.message('MON_'+i).toUpperCase() || q == BX.message('MONTH_'+i).toUpperCase() || q == wordMonthCut[i-1].toUpperCase() || q == wordMonth[i-1].toUpperCase())
18209			{
18210				return i;
18211			}
18212		}
18213		return month;
18214	};
18215
18216	BX.parseDate = function(str, bUTC, formatDate, formatDatetime)
18217	{
18218		if (BX.type.isNotEmptyString(str))
18219		{
18220			if (!formatDate)
18221				formatDate = BX.message('FORMAT_DATE');
18222			if (!formatDatetime)
18223				formatDatetime = BX.message('FORMAT_DATETIME');
18224
18225			var regMonths = '';
18226			for (i = 1; i <= 12; i++)
18227			{
18228				regMonths = regMonths + '|' + BX.message('MON_'+i);
18229			}
18230
18231			var expr = new RegExp('([0-9]+|[a-z]+' + regMonths + ')', 'ig');
18232			var aDate = str.match(expr),
18233				aFormat = formatDate.match(/(DD|MI|MMMM|MM|M|YYYY)/ig),
18234				i, cnt,
18235				aDateArgs=[], aFormatArgs=[],
18236				aResult={};
18237
18238			if (!aDate)
18239				return null;
18240
18241			if(aDate.length > aFormat.length)
18242			{
18243				aFormat = formatDatetime.match(/(DD|MI|MMMM|MM|M|YYYY|HH|H|SS|TT|T|GG|G)/ig);
18244			}
18245
18246			for(i = 0, cnt = aDate.length; i < cnt; i++)
18247			{
18248				if(BX.util.trim(aDate[i]) != '')
18249				{
18250					aDateArgs[aDateArgs.length] = aDate[i];
18251				}
18252			}
18253
18254			for(i = 0, cnt = aFormat.length; i < cnt; i++)
18255			{
18256				if(BX.util.trim(aFormat[i]) != '')
18257				{
18258					aFormatArgs[aFormatArgs.length] = aFormat[i];
18259				}
18260			}
18261
18262
18263			var m = BX.util.array_search('MMMM', aFormatArgs);
18264			if (m > 0)
18265			{
18266				aDateArgs[m] = BX.getNumMonth(aDateArgs[m]);
18267				aFormatArgs[m] = "MM";
18268			}
18269			else
18270			{
18271				m = BX.util.array_search('M', aFormatArgs);
18272				if (m > 0)
18273				{
18274					aDateArgs[m] = BX.getNumMonth(aDateArgs[m]);
18275					aFormatArgs[m] = "MM";
18276				}
18277			}
18278
18279			for(i = 0, cnt = aFormatArgs.length; i < cnt; i++)
18280			{
18281				var k = aFormatArgs[i].toUpperCase();
18282				aResult[k] = k == 'T' || k == 'TT' ? aDateArgs[i] : parseInt(aDateArgs[i], 10);
18283			}
18284
18285			if(aResult['DD'] > 0 && aResult['MM'] > 0 && aResult['YYYY'] > 0)
18286			{
18287				var d = new Date();
18288
18289				if(bUTC)
18290				{
18291					d.setUTCDate(1);
18292					d.setUTCFullYear(aResult['YYYY']);
18293					d.setUTCMonth(aResult['MM'] - 1);
18294					d.setUTCDate(aResult['DD']);
18295					d.setUTCHours(0, 0, 0, 0);
18296				}
18297				else
18298				{
18299					d.setDate(1);
18300					d.setFullYear(aResult['YYYY']);
18301					d.setMonth(aResult['MM'] - 1);
18302					d.setDate(aResult['DD']);
18303					d.setHours(0, 0, 0, 0);
18304				}
18305
18306				if(
18307					(!isNaN(aResult['HH']) || !isNaN(aResult['GG']) || !isNaN(aResult['H']) || !isNaN(aResult['G']))
18308					&& !isNaN(aResult['MI'])
18309				)
18310				{
18311					if (!isNaN(aResult['H']) || !isNaN(aResult['G']))
18312					{
18313						var bPM = (aResult['T']||aResult['TT']||'am').toUpperCase()=='PM';
18314						var h = parseInt(aResult['H']||aResult['G']||0, 10);
18315						if(bPM)
18316						{
18317							aResult['HH'] = h + (h == 12 ? 0 : 12);
18318						}
18319						else
18320						{
18321							aResult['HH'] = h < 12 ? h : 0;
18322						}
18323					}
18324					else
18325					{
18326						aResult['HH'] = parseInt(aResult['HH']||aResult['GG']||0, 10);
18327					}
18328
18329					if (isNaN(aResult['SS']))
18330						aResult['SS'] = 0;
18331
18332					if(bUTC)
18333					{
18334						d.setUTCHours(aResult['HH'], aResult['MI'], aResult['SS']);
18335					}
18336					else
18337					{
18338						d.setHours(aResult['HH'], aResult['MI'], aResult['SS']);
18339					}
18340				}
18341
18342				return d;
18343			}
18344		}
18345
18346		return null;
18347	};
18348
18349	BX.selectUtils =
18350		{
18351			addNewOption: function(oSelect, opt_value, opt_name, do_sort, check_unique)
18352			{
18353				oSelect = BX(oSelect);
18354				if(oSelect)
18355				{
18356					var n = oSelect.length;
18357					if(check_unique !== false)
18358					{
18359						for(var i=0;i<n;i++)
18360						{
18361							if(oSelect[i].value==opt_value)
18362							{
18363								return;
18364							}
18365						}
18366					}
18367
18368					oSelect.options[n] = new Option(opt_name, opt_value, false, false);
18369				}
18370
18371				if(do_sort === true)
18372				{
18373					this.sortSelect(oSelect);
18374				}
18375			},
18376
18377			deleteOption: function(oSelect, opt_value)
18378			{
18379				oSelect = BX(oSelect);
18380				if(oSelect)
18381				{
18382					for(var i=0;i<oSelect.length;i++)
18383					{
18384						if(oSelect[i].value==opt_value)
18385						{
18386							oSelect.remove(i);
18387							break;
18388						}
18389					}
18390				}
18391			},
18392
18393			deleteSelectedOptions: function(oSelect)
18394			{
18395				oSelect = BX(oSelect);
18396				if(oSelect)
18397				{
18398					var i=0;
18399					while(i<oSelect.length)
18400					{
18401						if(oSelect[i].selected)
18402						{
18403							oSelect[i].selected=false;
18404							oSelect.remove(i);
18405						}
18406						else
18407						{
18408							i++;
18409						}
18410					}
18411				}
18412			},
18413
18414			deleteAllOptions: function(oSelect)
18415			{
18416				oSelect = BX(oSelect);
18417				if(oSelect)
18418				{
18419					for(var i=oSelect.length-1; i>=0; i--)
18420					{
18421						oSelect.remove(i);
18422					}
18423				}
18424			},
18425
18426			optionCompare: function(record1, record2)
18427			{
18428				var value1 = record1.optText.toLowerCase();
18429				var value2 = record2.optText.toLowerCase();
18430				if (value1 > value2) return(1);
18431				if (value1 < value2) return(-1);
18432				return(0);
18433			},
18434
18435			sortSelect: function(oSelect)
18436			{
18437				oSelect = BX(oSelect);
18438				if(oSelect)
18439				{
18440					var myOptions = [];
18441					var n = oSelect.options.length;
18442					var i;
18443					for (i=0;i<n;i++)
18444					{
18445						myOptions[i] = {
18446							optText:oSelect[i].text,
18447							optValue:oSelect[i].value
18448						};
18449					}
18450					myOptions.sort(this.optionCompare);
18451					oSelect.length=0;
18452					n = myOptions.length;
18453					for(i=0;i<n;i++)
18454					{
18455						oSelect[i] = new Option(myOptions[i].optText, myOptions[i].optValue, false, false);
18456					}
18457				}
18458			},
18459
18460			selectAllOptions: function(oSelect)
18461			{
18462				oSelect = BX(oSelect);
18463				if(oSelect)
18464				{
18465					var n = oSelect.length;
18466					for(var i=0;i<n;i++)
18467					{
18468						oSelect[i].selected=true;
18469					}
18470				}
18471			},
18472
18473			selectOption: function(oSelect, opt_value)
18474			{
18475				oSelect = BX(oSelect);
18476				if(oSelect)
18477				{
18478					var n = oSelect.length;
18479					for(var i=0;i<n;i++)
18480					{
18481						oSelect[i].selected = (oSelect[i].value == opt_value);
18482					}
18483				}
18484			},
18485
18486			addSelectedOptions: function(oSelect, to_select_id, check_unique, do_sort)
18487			{
18488				oSelect = BX(oSelect);
18489				if(!oSelect)
18490					return;
18491				var n = oSelect.length;
18492				for(var i=0; i<n; i++)
18493					if(oSelect[i].selected)
18494						this.addNewOption(to_select_id, oSelect[i].value, oSelect[i].text, do_sort, check_unique);
18495			},
18496
18497			moveOptionsUp: function(oSelect)
18498			{
18499				oSelect = BX(oSelect);
18500				if(!oSelect)
18501					return;
18502				var n = oSelect.length;
18503				for(var i=0; i<n; i++)
18504				{
18505					if(oSelect[i].selected && i>0 && oSelect[i-1].selected == false)
18506					{
18507						var option = new Option(oSelect[i].text, oSelect[i].value);
18508						oSelect[i] = new Option(oSelect[i-1].text, oSelect[i-1].value);
18509						oSelect[i].selected = false;
18510						oSelect[i-1] = option;
18511						oSelect[i-1].selected = true;
18512					}
18513				}
18514			},
18515
18516			moveOptionsDown: function(oSelect)
18517			{
18518				oSelect = BX(oSelect);
18519				if(!oSelect)
18520					return;
18521				var n = oSelect.length;
18522				for(var i=n-1; i>=0; i--)
18523				{
18524					if(oSelect[i].selected && i<n-1 && oSelect[i+1].selected == false)
18525					{
18526						var option = new Option(oSelect[i].text, oSelect[i].value);
18527						oSelect[i] = new Option(oSelect[i+1].text, oSelect[i+1].value);
18528						oSelect[i].selected = false;
18529						oSelect[i+1] = option;
18530						oSelect[i+1].selected = true;
18531					}
18532				}
18533			}
18534		};
18535
18536	BX.getEventTarget = function(e)
18537	{
18538		if(e.target)
18539		{
18540			return e.target;
18541		}
18542		else if(e.srcElement)
18543		{
18544			return e.srcElement;
18545		}
18546		return null;
18547	};
18548
18549	/******* HINT ***************/
18550// if function has 2 params - the 2nd one is hint html. otherwise hint_html is third and hint_title - 2nd;
18551// '<div onmouseover="BX.hint(this, 'This is &lt;b&gt;Hint&lt;/b&gt;')"'>;
18552// BX.hint(el, 'This is <b>Hint</b>') - this won't work, use constructor
18553	BX.hint = function(el, hint_title, hint_html, hint_id)
18554	{
18555		if (null == hint_html)
18556		{
18557			hint_html = hint_title;
18558			hint_title = '';
18559		}
18560
18561		if (null == el.BXHINT)
18562		{
18563			el.BXHINT = new BX.CHint({
18564				parent: el, hint: hint_html, title: hint_title, id: hint_id
18565			});
18566			el.BXHINT.Show();
18567		}
18568	};
18569
18570	BX.hint_replace = function(el, hint_title, hint_html)
18571	{
18572		if (null == hint_html)
18573		{
18574			hint_html = hint_title;
18575			hint_title = '';
18576		}
18577
18578		if (!el || !el.parentNode || !hint_html)
18579			return null;
18580
18581		var obHint = new BX.CHint({
18582			hint: hint_html,
18583			title: hint_title
18584		});
18585
18586		obHint.CreateParent();
18587
18588		el.parentNode.insertBefore(obHint.PARENT, el);
18589		el.parentNode.removeChild(el);
18590
18591		obHint.PARENT.style.marginLeft = '5px';
18592
18593		return el;
18594	};
18595
18596	BX.CHint = function(params)
18597	{
18598		this.PARENT = BX(params.parent);
18599
18600		this.HINT = params.hint;
18601		this.HINT_TITLE = params.title;
18602
18603		this.PARAMS = {};
18604		for (var i in this.defaultSettings)
18605		{
18606			if (null == params[i])
18607				this.PARAMS[i] = this.defaultSettings[i];
18608			else
18609				this.PARAMS[i] = params[i];
18610		}
18611
18612		if (null != params.id)
18613			this.ID = params.id;
18614
18615		this.timer = null;
18616		this.bInited = false;
18617		this.msover = true;
18618
18619		if (this.PARAMS.showOnce)
18620		{
18621			this.__show();
18622			this.msover = false;
18623			this.timer = setTimeout(BX.proxy(this.__hide, this), this.PARAMS.hide_timeout);
18624		}
18625		else if (this.PARENT)
18626		{
18627			BX.bind(this.PARENT, 'mouseover', BX.proxy(this.Show, this));
18628			BX.bind(this.PARENT, 'mouseout', BX.proxy(this.Hide, this));
18629		}
18630	};
18631
18632	BX.CHint.openHints = new Set();
18633
18634	BX.CHint.globalDisabled = false;
18635
18636	BX.CHint.handleMenuOpen = function() {
18637		BX.CHint.globalDisabled = true;
18638
18639		BX.CHint.openHints.forEach(function(hint) {
18640			hint.__hide_immediately();
18641		});
18642	};
18643
18644	BX.CHint.handleMenuClose = function() {
18645		BX.CHint.globalDisabled = false;
18646	};
18647
18648	BX.addCustomEvent('onMenuOpen', BX.CHint.handleMenuOpen);
18649	BX.addCustomEvent('onMenuClose', BX.CHint.handleMenuClose);
18650
18651	BX.CHint.prototype.defaultSettings = {
18652		show_timeout: 1000,
18653		hide_timeout: 500,
18654		dx: 2,
18655		showOnce: false,
18656		preventHide: true,
18657		min_width: 250
18658	};
18659
18660	BX.CHint.prototype.CreateParent = function(element, params)
18661	{
18662		if (this.PARENT)
18663		{
18664			BX.unbind(this.PARENT, 'mouseover', BX.proxy(this.Show, this));
18665			BX.unbind(this.PARENT, 'mouseout', BX.proxy(this.Hide, this));
18666		}
18667
18668		if (!params) params = {};
18669		var type = 'icon';
18670
18671		if (params.type && (params.type == "link" || params.type == "icon"))
18672			type = params.type;
18673
18674		if (element)
18675			type = "element";
18676
18677		if (type == "icon")
18678		{
18679			element = BX.create('IMG', {
18680				props: {
18681					src: params.iconSrc
18682						? params.iconSrc
18683						: "/bitrix/js/main/core/images/hint.gif"
18684				}
18685			});
18686		}
18687		else if (type == "link")
18688		{
18689			element = BX.create("A", {
18690				props: {href: 'javascript:void(0)'},
18691				html: '[?]'
18692			});
18693		}
18694
18695		this.PARENT = element;
18696
18697		BX.bind(this.PARENT, 'mouseover', BX.proxy(this.Show, this));
18698		BX.bind(this.PARENT, 'mouseout', BX.proxy(this.Hide, this));
18699
18700		return this.PARENT;
18701	};
18702
18703	BX.CHint.prototype.Show = function()
18704	{
18705		this.msover = true;
18706
18707		if (null != this.timer)
18708			clearTimeout(this.timer);
18709
18710		this.timer = setTimeout(BX.proxy(this.__show, this), this.PARAMS.show_timeout);
18711	};
18712
18713	BX.CHint.prototype.Hide = function()
18714	{
18715		this.msover = false;
18716
18717		if (null != this.timer)
18718			clearTimeout(this.timer);
18719
18720		this.timer = setTimeout(BX.proxy(this.__hide, this), this.PARAMS.hide_timeout);
18721	};
18722
18723	BX.CHint.prototype.__show = function()
18724	{
18725		if (!this.msover || this.disabled || BX.CHint.globalDisabled) return;
18726		if (!this.bInited) this.Init();
18727
18728		if (this.prepareAdjustPos())
18729		{
18730			this.DIV.style.display = 'block';
18731			BX.ZIndexManager.bringToFront(this.DIV);
18732
18733			this.adjustPos();
18734
18735			BX.CHint.openHints.add(this);
18736
18737			BX.bind(window, 'scroll', BX.proxy(this.__onscroll, this));
18738
18739			if (this.PARAMS.showOnce)
18740			{
18741				this.timer = setTimeout(BX.proxy(this.__hide, this), this.PARAMS.hide_timeout);
18742			}
18743		}
18744	};
18745
18746	BX.CHint.prototype.__onscroll = function()
18747	{
18748		if (!BX.admin || !BX.admin.panel || !BX.admin.panel.isFixed()) return;
18749
18750		if (this.scrollTimer) clearTimeout(this.scrollTimer);
18751
18752		this.DIV.style.display = 'none';
18753		this.scrollTimer = setTimeout(BX.proxy(this.Reopen, this), this.PARAMS.show_timeout);
18754	};
18755
18756	BX.CHint.prototype.Reopen = function()
18757	{
18758		if (null != this.timer) clearTimeout(this.timer);
18759		this.timer = setTimeout(BX.proxy(this.__show, this), 50);
18760	};
18761
18762	BX.CHint.prototype.__hide = function()
18763	{
18764		if (this.msover) return;
18765		if (!this.bInited) return;
18766
18767		BX.unbind(window, 'scroll', BX.proxy(this.Reopen, this));
18768
18769		BX.CHint.openHints.delete(this);
18770
18771		if (this.PARAMS.showOnce)
18772		{
18773			this.Destroy();
18774		}
18775		else
18776		{
18777			this.DIV.style.display = 'none';
18778		}
18779	};
18780
18781	BX.CHint.prototype.__hide_immediately = function()
18782	{
18783		this.msover = false;
18784		this.__hide();
18785	};
18786
18787	BX.CHint.prototype.Init = function()
18788	{
18789		this.DIV = document.body.appendChild(BX.create('DIV', {
18790			props: {className: 'bx-panel-tooltip'},
18791			style: {display: 'none'},
18792			children: [
18793				BX.create('DIV', {
18794					props: {className: 'bx-panel-tooltip-top-border'},
18795					html: '<div class="bx-panel-tooltip-corner bx-panel-tooltip-left-corner"></div><div class="bx-panel-tooltip-border"></div><div class="bx-panel-tooltip-corner bx-panel-tooltip-right-corner"></div>'
18796				}),
18797				(this.CONTENT = BX.create('DIV', {
18798					props: {className: 'bx-panel-tooltip-content'},
18799					children: [
18800						BX.create('DIV', {
18801							props: {className: 'bx-panel-tooltip-underlay'},
18802							children: [
18803								BX.create('DIV', {props: {className: 'bx-panel-tooltip-underlay-bg'}})
18804							]
18805						})
18806					]
18807				})),
18808
18809				BX.create('DIV', {
18810					props: {className: 'bx-panel-tooltip-bottom-border'},
18811					html: '<div class="bx-panel-tooltip-corner bx-panel-tooltip-left-corner"></div><div class="bx-panel-tooltip-border"></div><div class="bx-panel-tooltip-corner bx-panel-tooltip-right-corner"></div>'
18812				})
18813			]
18814		}));
18815
18816		BX.ZIndexManager.register(this.DIV);
18817
18818		if (this.ID)
18819		{
18820			this.CONTENT.insertBefore(BX.create('A', {
18821				attrs: {href: 'javascript:void(0)'},
18822				props: {className: 'bx-panel-tooltip-close'},
18823				events: {click: BX.delegate(this.Close, this)}
18824			}), this.CONTENT.firstChild);
18825		}
18826
18827		if (this.HINT_TITLE)
18828		{
18829			this.CONTENT.appendChild(
18830				BX.create('DIV', {
18831					props: {className: 'bx-panel-tooltip-title'},
18832					text: this.HINT_TITLE
18833				})
18834			);
18835		}
18836
18837		if (this.HINT)
18838		{
18839			this.CONTENT_TEXT = this.CONTENT.appendChild(BX.create('DIV', {props: {className: 'bx-panel-tooltip-text'}})).appendChild(BX.create('SPAN', {html: this.HINT}));
18840		}
18841
18842		if (this.PARAMS.preventHide)
18843		{
18844			BX.bind(this.DIV, 'mouseout', BX.proxy(this.Hide, this));
18845			BX.bind(this.DIV, 'mouseover', BX.proxy(this.Show, this));
18846		}
18847
18848		this.bInited = true;
18849	};
18850
18851	BX.CHint.prototype.setContent = function(content)
18852	{
18853		this.HINT = content;
18854
18855		if (this.CONTENT_TEXT)
18856			this.CONTENT_TEXT.innerHTML = this.HINT;
18857		else
18858			this.CONTENT_TEXT = this.CONTENT.appendChild(BX.create('DIV', {props: {className: 'bx-panel-tooltip-text'}})).appendChild(BX.create('SPAN', {html: this.HINT}));
18859	};
18860
18861	BX.CHint.prototype.prepareAdjustPos = function()
18862	{
18863		this._wnd = {scrollPos: BX.GetWindowScrollPos(),scrollSize:BX.GetWindowScrollSize()};
18864		return BX.style(this.PARENT, 'display') != 'none';
18865	};
18866
18867	BX.CHint.prototype.getAdjustPos = function()
18868	{
18869		var res = {}, pos = BX.pos(this.PARENT), min_top = 0;
18870
18871		res.top = pos.bottom + this.PARAMS.dx;
18872
18873		if (BX.admin && BX.admin.panel.DIV)
18874		{
18875			min_top = BX.admin.panel.DIV.offsetHeight + this.PARAMS.dx;
18876
18877			if (BX.admin.panel.isFixed())
18878			{
18879				min_top += this._wnd.scrollPos.scrollTop;
18880			}
18881		}
18882
18883		if (res.top < min_top)
18884			res.top = min_top;
18885		else
18886		{
18887			if (res.top + this.DIV.offsetHeight > this._wnd.scrollSize.scrollHeight)
18888				res.top = pos.top - this.PARAMS.dx - this.DIV.offsetHeight;
18889		}
18890
18891		res.left = pos.left;
18892		if (pos.left < this.PARAMS.dx)
18893			pos.left = this.PARAMS.dx;
18894		else
18895		{
18896			var floatWidth = this.DIV.offsetWidth;
18897
18898			var max_left = this._wnd.scrollSize.scrollWidth - floatWidth - this.PARAMS.dx;
18899
18900			if (res.left > max_left)
18901				res.left = max_left;
18902		}
18903
18904		return res;
18905	};
18906
18907	BX.CHint.prototype.adjustWidth = function()
18908	{
18909		if (this.bWidthAdjusted) return;
18910
18911		var w = this.DIV.offsetWidth, h = this.DIV.offsetHeight;
18912
18913		if (w > this.PARAMS.min_width)
18914			w = Math.round(Math.sqrt(1.618*w*h));
18915
18916		if (w < this.PARAMS.min_width)
18917			w = this.PARAMS.min_width;
18918
18919		this.DIV.style.width = w + "px";
18920
18921		if (this._adjustWidthInt)
18922			clearInterval(this._adjustWidthInt);
18923		this._adjustWidthInt = setInterval(BX.delegate(this._adjustWidthInterval, this), 5);
18924
18925		this.bWidthAdjusted = true;
18926	};
18927
18928	BX.CHint.prototype._adjustWidthInterval = function()
18929	{
18930		if (!this.DIV || this.DIV.style.display == 'none')
18931			clearInterval(this._adjustWidthInt);
18932
18933		var
18934			dW = 20,
18935			maxWidth = 1500,
18936			w = this.DIV.offsetWidth,
18937			w1 = this.CONTENT_TEXT.offsetWidth;
18938
18939		if (w > 0 && w1 > 0 && w - w1 < dW && w < maxWidth)
18940		{
18941			this.DIV.style.width = (w + dW) + "px";
18942			return;
18943		}
18944
18945		clearInterval(this._adjustWidthInt);
18946	};
18947
18948	BX.CHint.prototype.adjustPos = function()
18949	{
18950		this.adjustWidth();
18951
18952		var pos = this.getAdjustPos();
18953
18954		this.DIV.style.top = pos.top + 'px';
18955		this.DIV.style.left = pos.left + 'px';
18956	};
18957
18958	BX.CHint.prototype.Close = function()
18959	{
18960		if (this.ID && BX.WindowManager)
18961			BX.WindowManager.saveWindowOptions(this.ID, {display: 'off'});
18962		this.__hide_immediately();
18963		this.Destroy();
18964	};
18965
18966	BX.CHint.prototype.Destroy = function()
18967	{
18968		if (this.PARENT)
18969		{
18970			BX.unbind(this.PARENT, 'mouseover', BX.proxy(this.Show, this));
18971			BX.unbind(this.PARENT, 'mouseout', BX.proxy(this.Hide, this));
18972		}
18973
18974		if (this.DIV)
18975		{
18976			BX.unbind(this.DIV, 'mouseover', BX.proxy(this.Show, this));
18977			BX.unbind(this.DIV, 'mouseout', BX.proxy(this.Hide, this));
18978
18979			BX.ZIndexManager.unregister(this.DIV);
18980
18981			BX.cleanNode(this.DIV, true);
18982		}
18983	};
18984
18985	BX.CHint.prototype.enable = function(){this.disabled = false;};
18986	BX.CHint.prototype.disable = function(){this.__hide_immediately(); this.disabled = true;};
18987
18988
18989	function _adjustWait()
18990	{
18991		if (!this.bxmsg) return;
18992
18993		var arContainerPos = BX.pos(this),
18994			div_top = arContainerPos.top;
18995
18996		if (div_top < BX.GetDocElement().scrollTop)
18997			div_top = BX.GetDocElement().scrollTop + 5;
18998
18999		this.bxmsg.style.top = (div_top + 5) + 'px';
19000
19001		if (this == BX.GetDocElement())
19002		{
19003			this.bxmsg.style.right = '5px';
19004		}
19005		else
19006		{
19007			this.bxmsg.style.left = (arContainerPos.right - this.bxmsg.offsetWidth - 5) + 'px';
19008		}
19009	}
19010
19011	function _processTpl(tplNode, cb, bKillTpl)
19012	{
19013		if (tplNode)
19014		{
19015			if (bKillTpl)
19016				tplNode.parentNode.removeChild(tplNode);
19017
19018			var res = {}, nodes = BX.findChildren(tplNode, {attribute: 'data-role'}, true);
19019
19020			for (var i = 0, l = nodes.length; i < l; i++)
19021			{
19022				res[nodes[i].getAttribute('data-role')] = nodes[i];
19023			}
19024
19025			cb.apply(tplNode, [res]);
19026		}
19027	}
19028
19029	function _checkNode(obj, params)
19030	{
19031		params = params || {};
19032
19033		if (BX.type.isFunction(params))
19034			return params.call(window, obj);
19035
19036		if (!params.allowTextNodes && !BX.type.isElementNode(obj))
19037			return false;
19038		var i,j,len;
19039		for (i in params)
19040		{
19041			if(params.hasOwnProperty(i))
19042			{
19043				switch(i)
19044				{
19045					case 'tag':
19046					case 'tagName':
19047						if (BX.type.isString(params[i]))
19048						{
19049							if (obj.tagName.toUpperCase() != params[i].toUpperCase())
19050								return false;
19051						}
19052						else if (params[i] instanceof RegExp)
19053						{
19054							if (!params[i].test(obj.tagName))
19055								return false;
19056						}
19057						break;
19058
19059					case 'class':
19060					case 'className':
19061						if (BX.type.isString(params[i]))
19062						{
19063							if (!BX.hasClass(obj, params[i]))
19064								return false;
19065						}
19066						else if (params[i] instanceof RegExp)
19067						{
19068							if (!BX.type.isString(obj.className) || !params[i].test(obj.className))
19069								return false;
19070						}
19071						break;
19072
19073					case 'attr':
19074					case 'attrs':
19075					case 'attribute':
19076						if (BX.type.isString(params[i]))
19077						{
19078							if (!obj.getAttribute(params[i]))
19079								return false;
19080						}
19081						else if (BX.type.isArray(params[i]))
19082						{
19083							for (j = 0, len = params[i].length; j < len; j++)
19084							{
19085								if (params[i] && !obj.getAttribute(params[i]))
19086									return false;
19087							}
19088						}
19089						else
19090						{
19091							for (j in params[i])
19092							{
19093								if(params[i].hasOwnProperty(j))
19094								{
19095									var q = obj.getAttribute(j);
19096									if (params[i][j] instanceof RegExp)
19097									{
19098										if (!BX.type.isString(q) || !params[i][j].test(q))
19099										{
19100											return false;
19101										}
19102									}
19103									else
19104									{
19105										if (q != '' + params[i][j])
19106										{
19107											return false;
19108										}
19109									}
19110								}
19111							}
19112						}
19113						break;
19114
19115					case 'property':
19116					case 'props':
19117						if (BX.type.isString(params[i]))
19118						{
19119							if (!obj[params[i]])
19120								return false;
19121						}
19122						else if (BX.type.isArray(params[i]))
19123						{
19124							for (j = 0, len = params[i].length; j < len; j++)
19125							{
19126								if (params[i] && !obj[params[i]])
19127									return false;
19128							}
19129						}
19130						else
19131						{
19132							for (j in params[i])
19133							{
19134								if (BX.type.isString(params[i][j]))
19135								{
19136									if (obj[j] != params[i][j])
19137										return false;
19138								}
19139								else if (params[i][j] instanceof RegExp)
19140								{
19141									if (!BX.type.isString(obj[j]) || !params[i][j].test(obj[j]))
19142										return false;
19143								}
19144							}
19145						}
19146						break;
19147
19148					case 'callback':
19149						return params[i](obj);
19150				}
19151			}
19152		}
19153
19154		return true;
19155	}
19156
19157	/* garbage collector */
19158	function Trash()
19159	{
19160		var i,len;
19161
19162		for (i = 0, len = garbageCollectors.length; i<len; i++)
19163		{
19164			try {
19165				garbageCollectors[i].callback.apply(garbageCollectors[i].context || window);
19166				delete garbageCollectors[i];
19167				garbageCollectors[i] = null;
19168			} catch (e) {}
19169		}
19170	}
19171
19172	if(window.attachEvent) // IE
19173		window.attachEvent("onunload", Trash);
19174	else if(window.addEventListener) // Gecko / W3C
19175		window.addEventListener('unload', Trash, false);
19176	else
19177		window.onunload = Trash;
19178	/* \garbage collector */
19179
19180// set empty ready handler
19181	BX(BX.DoNothing);
19182	window.BX = BX;
19183
19184	BX.browser.addGlobalClass();
19185
19186	/* data storage */
19187	BX.data = function(node, key, value)
19188	{
19189		if(typeof node == 'undefined')
19190			return undefined;
19191
19192		if(typeof key == 'undefined')
19193			return undefined;
19194
19195		if(typeof value != 'undefined')
19196		{
19197			// write to manager
19198			dataStorage.set(node, key, value);
19199		}
19200		else
19201		{
19202			var data;
19203
19204			// from manager
19205			if((data = dataStorage.get(node, key)) != undefined)
19206			{
19207				return data;
19208			}
19209			else
19210			{
19211				// from attribute data-*
19212				if('getAttribute' in node)
19213				{
19214					data = node.getAttribute('data-'+key.toString());
19215					if(data === null)
19216					{
19217						return undefined;
19218					}
19219					return data;
19220				}
19221			}
19222
19223			return undefined;
19224		}
19225	};
19226
19227	BX.DataStorage = function()
19228	{
19229
19230		this.keyOffset = 1;
19231		this.data = {};
19232		this.uniqueTag = 'BX-'+Math.random();
19233
19234		this.resolve = function(owner, create){
19235			if(typeof owner[this.uniqueTag] == 'undefined')
19236				if(create)
19237				{
19238					try
19239					{
19240						Object.defineProperty(owner, this.uniqueTag, {
19241							value: this.keyOffset++
19242						});
19243					}
19244					catch(e)
19245					{
19246						owner[this.uniqueTag] = this.keyOffset++;
19247					}
19248				}
19249				else
19250					return undefined;
19251
19252			return owner[this.uniqueTag];
19253		};
19254		this.get = function(owner, key){
19255			if((owner != document && !BX.type.isElementNode(owner)) || typeof key == 'undefined')
19256				return undefined;
19257
19258			owner = this.resolve(owner, false);
19259
19260			if(typeof owner == 'undefined' || typeof this.data[owner] == 'undefined')
19261				return undefined;
19262
19263			return this.data[owner][key];
19264		};
19265		this.set = function(owner, key, value){
19266
19267			if((owner != document && !BX.type.isElementNode(owner)) || typeof value == 'undefined')
19268				return;
19269
19270			var o = this.resolve(owner, true);
19271
19272			if(typeof this.data[o] == 'undefined')
19273				this.data[o] = {};
19274
19275			this.data[o][key] = value;
19276		};
19277	};
19278
19279// some internal variables for new logic
19280	var dataStorage = new BX.DataStorage();	// manager which BX.data() uses to keep data
19281})(window.BX);
19282
19283;(function(window)
19284{
19285	/****************** ATTENTION *******************************
19286	 * Please do not use Bitrix CoreJS in this class.
19287	 * This class can be called on page without Bitrix Framework
19288	*************************************************************/
19289
19290	if (!window.BX)
19291	{
19292		window.BX = {};
19293	}
19294
19295	var BX = window.BX;
19296
19297	BX.Promise = function(fn, ctx) // fn is future-reserved
19298	{
19299		this.state = null;
19300		this.value = null;
19301		this.reason = null;
19302		this.next = null;
19303		this.ctx = ctx || this;
19304
19305		this.onFulfilled = [];
19306		this.onRejected = [];
19307	};
19308	BX.Promise.prototype.fulfill = function(value)
19309	{
19310		this.checkState();
19311
19312		this.value = value;
19313		this.state = true;
19314		this.execute();
19315	};
19316	BX.Promise.prototype.reject = function(reason)
19317	{
19318		this.checkState();
19319
19320		this.reason = reason;
19321		this.state = false;
19322		this.execute();
19323	};
19324	BX.Promise.prototype.then = function(onFulfilled, onRejected)
19325	{
19326		if(typeof (onFulfilled) == "function" || onFulfilled instanceof Function)
19327		{
19328			this.onFulfilled.push(onFulfilled);
19329		}
19330		if(typeof (onRejected) == "function" || onRejected instanceof Function)
19331		{
19332			this.onRejected.push(onRejected);
19333		}
19334
19335		if(this.next === null)
19336		{
19337			this.next = new BX.Promise(null, this.ctx);
19338		}
19339
19340		if(this.state !== null) // if promise was already resolved, execute immediately
19341		{
19342			this.execute();
19343		}
19344
19345		return this.next;
19346	};
19347
19348	BX.Promise.prototype.catch = function(onRejected)
19349	{
19350		if(typeof (onRejected) == "function" || onRejected instanceof Function)
19351		{
19352			this.onRejected.push(onRejected);
19353		}
19354
19355		if(this.next === null)
19356		{
19357			this.next = new BX.Promise(null, this.ctx);
19358		}
19359
19360		if(this.state !== null) // if promise was already resolved, execute immediately
19361		{
19362			this.execute();
19363		}
19364
19365		return this.next;
19366	};
19367
19368	BX.Promise.prototype.setAutoResolve = function(way, ms)
19369	{
19370		this.timer = setTimeout(function(){
19371			if(this.state === null)
19372			{
19373				this[way ? 'fulfill' : 'reject']();
19374			}
19375		}.bind(this), ms || 15);
19376	};
19377	BX.Promise.prototype.cancelAutoResolve = function()
19378	{
19379		clearTimeout(this.timer);
19380	};
19381	/**
19382	 * Resolve function. This function allows promise chaining, like ..then().then()...
19383	 * Typical usage:
19384	 *
19385	 * var p = new Promise();
19386	 *
19387	 * p.then(function(value){
19388	 *  return someValue; // next promise in the chain will be fulfilled with someValue
19389	 * }).then(function(value){
19390	 *
19391	 *  var p1 = new Promise();
19392	 *  *** some async code here, that eventually resolves p1 ***
19393	 *
19394	 *  return p1; // chain will resume when p1 resolved (fulfilled or rejected)
19395	 * }).then(function(value){
19396	 *
19397	 *  // you can also do
19398	 *  var e = new Error();
19399	 *  throw e;
19400	 *  // it will cause next promise to be rejected with e
19401	 *
19402	 *  return someOtherValue;
19403	 * }).then(function(value){
19404	 *  ...
19405	 * }, function(reason){
19406	 *  // promise was rejected with reason
19407	 * })...;
19408	 *
19409	 * p.fulfill('let`s start this chain');
19410	 *
19411	 * @param x
19412	 */
19413	BX.Promise.prototype.resolve = function(x)
19414	{
19415		var this_ = this;
19416
19417		if(this === x)
19418		{
19419			this.reject(new TypeError('Promise cannot fulfill or reject itself')); // avoid recursion
19420		}
19421		// allow "pausing" promise chaining until promise x is fulfilled or rejected
19422		else if(x && x.toString() === "[object BX.Promise]")
19423		{
19424			x.then(function(value){
19425				this_.fulfill(value);
19426			}, function(reason){
19427				this_.reject(reason);
19428			});
19429		}
19430		else // auto-fulfill this promise
19431		{
19432			this.fulfill(x);
19433		}
19434	};
19435
19436	BX.Promise.prototype.toString = function()
19437	{
19438		return "[object BX.Promise]";
19439	};
19440
19441	BX.Promise.prototype.execute = function()
19442	{
19443		if(this.state === null)
19444		{
19445			//then() must not be called before BX.Promise resolve() happens
19446			return;
19447		}
19448
19449		var value = undefined;
19450		var reason = undefined;
19451		var x = undefined;
19452		var k;
19453		if(this.state === true) // promise was fulfill()-ed
19454		{
19455			if(this.onFulfilled.length)
19456			{
19457				try
19458				{
19459					for(k = 0; k < this.onFulfilled.length; k++)
19460					{
19461						x = this.onFulfilled[k].apply(this.ctx, [this.value]);
19462						if(typeof x != 'undefined')
19463						{
19464							value = x;
19465						}
19466					}
19467				}
19468				catch(e)
19469				{
19470					if('console' in window)
19471					{
19472						console.dir(e);
19473					}
19474
19475					if (typeof BX.debug !== 'undefined')
19476					{
19477						BX.debug(e);
19478					}
19479
19480					reason = e; // reject next
19481				}
19482			}
19483			else
19484			{
19485				value = this.value; // resolve next
19486			}
19487		}
19488		else if(this.state === false) // promise was reject()-ed
19489		{
19490			if(this.onRejected.length)
19491			{
19492				try
19493				{
19494					for(k = 0; k < this.onRejected.length; k++)
19495					{
19496						x = this.onRejected[k].apply(this.ctx, [this.reason]);
19497						if(typeof x != 'undefined')
19498						{
19499							value = x;
19500						}
19501					}
19502				}
19503				catch(e)
19504				{
19505					if('console' in window)
19506					{
19507						console.dir(e);
19508					}
19509
19510					if (typeof BX.debug !== 'undefined')
19511					{
19512						BX.debug(e);
19513					}
19514
19515					reason = e; // reject next
19516				}
19517			}
19518			else
19519			{
19520				reason = this.reason; // reject next
19521			}
19522		}
19523
19524		if(this.next !== null)
19525		{
19526			if(typeof reason != 'undefined')
19527			{
19528				this.next.reject(reason);
19529			}
19530			else if(typeof value != 'undefined')
19531			{
19532				this.next.resolve(value);
19533			}
19534		}
19535	};
19536	BX.Promise.prototype.checkState = function()
19537	{
19538		if(this.state !== null)
19539		{
19540			throw new Error('You can not do fulfill() or reject() multiple times');
19541		}
19542	};
19543})(window);
19544
19545
19546
19547;(function(window){
19548
19549if (window.BX.ajax)
19550	return;
19551
19552var
19553	BX = window.BX,
19554
19555	tempDefaultConfig = {},
19556	defaultConfig = {
19557		method: 'GET', // request method: GET|POST
19558		dataType: 'html', // type of data loading: html|json|script
19559		timeout: 0, // request timeout in seconds. 0 for browser-default
19560		async: true, // whether request is asynchronous or not
19561		processData: true, // any data processing is disabled if false, only callback call
19562		scriptsRunFirst: false, // whether to run _all_ found scripts before onsuccess call. script tag can have an attribute "bxrunfirst" to turn  this flag on only for itself
19563		emulateOnload: true,
19564		skipAuthCheck: false, // whether to check authorization failure (SHOUD be set to true for CORS requests)
19565		start: true, // send request immediately (if false, request can be started manually via XMLHttpRequest object returned)
19566		cache: true, // whether NOT to add random addition to URL
19567		preparePost: true, // whether set Content-Type x-www-form-urlencoded in POST
19568		headers: false, // add additional headers, example: [{'name': 'If-Modified-Since', 'value': 'Wed, 15 Aug 2012 08:59:08 GMT'}, {'name': 'If-None-Match', 'value': '0'}]
19569		lsTimeout: 30, //local storage data TTL. useless without lsId.
19570		lsForce: false //wheter to force query instead of using localStorage data. useless without lsId.
19571/*
19572other parameters:
19573	url: url to get/post
19574	data: data to post
19575	onsuccess: successful request callback. BX.proxy may be used.
19576	onfailure: request failure callback. BX.proxy may be used.
19577	onprogress: request progress callback. BX.proxy may be used.
19578
19579	lsId: local storage id - for constantly updating queries which can communicate via localStorage. core_ls.js needed
19580
19581any of the default parameters can be overridden. defaults can be changed by BX.ajax.Setup() - for all further requests!
19582*/
19583	},
19584	ajax_session = null,
19585	loadedScripts = {},
19586	loadedScriptsQueue = [],
19587	r = {
19588		'url_utf': /[^\034-\254]+/g,
19589		'script_self': /\/bitrix\/js\/main\/core\/core(_ajax)*.js$/i,
19590		'script_self_window': /\/bitrix\/js\/main\/core\/core_window.js$/i,
19591		'script_self_admin': /\/bitrix\/js\/main\/core\/core_admin.js$/i,
19592		'script_onload': /window.onload/g
19593	};
19594
19595// low-level method
19596BX.ajax = function(config)
19597{
19598	var status, data;
19599
19600	if (!config || !config.url || !BX.type.isString(config.url))
19601	{
19602		return false;
19603	}
19604
19605	for (var i in tempDefaultConfig)
19606		if (typeof (config[i]) == "undefined") config[i] = tempDefaultConfig[i];
19607
19608	tempDefaultConfig = {};
19609
19610	for (i in defaultConfig)
19611		if (typeof (config[i]) == "undefined") config[i] = defaultConfig[i];
19612
19613	config.method = config.method.toUpperCase();
19614
19615	if (!BX.localStorage)
19616		config.lsId = null;
19617
19618	if (BX.browser.IsIE())
19619	{
19620		var result = r.url_utf.exec(config.url);
19621		if (result)
19622		{
19623			do
19624			{
19625				config.url = config.url.replace(result, BX.util.urlencode(result));
19626				result = r.url_utf.exec(config.url);
19627			} while (result);
19628		}
19629	}
19630
19631	if(config.dataType == 'json')
19632		config.emulateOnload = false;
19633
19634	if (!config.cache && config.method == 'GET')
19635		config.url = BX.ajax._uncache(config.url);
19636
19637	if (config.method == 'POST')
19638	{
19639		if (config.preparePost)
19640		{
19641			config.data = BX.ajax.prepareData(config.data);
19642		}
19643		else if (getLastContentTypeHeader(config.headers) === 'application/json')
19644		{
19645			config.data = JSON.stringify(config.data);
19646		}
19647	}
19648
19649	var bXHR = true;
19650	if (config.lsId && !config.lsForce)
19651	{
19652		var v = BX.localStorage.get('ajax-' + config.lsId);
19653		if (v !== null)
19654		{
19655			bXHR = false;
19656
19657			var lsHandler = function(lsData) {
19658				if (lsData.key == 'ajax-' + config.lsId && lsData.value != 'BXAJAXWAIT')
19659				{
19660					var data = lsData.value,
19661						bRemove = !!lsData.oldValue && data == null;
19662					if (!bRemove)
19663						BX.ajax.__run(config, data);
19664					else if (config.onfailure)
19665						config.onfailure("timeout");
19666
19667					BX.removeCustomEvent('onLocalStorageChange', lsHandler);
19668				}
19669			};
19670
19671			if (v == 'BXAJAXWAIT')
19672			{
19673				BX.addCustomEvent('onLocalStorageChange', lsHandler);
19674			}
19675			else
19676			{
19677				setTimeout(function() {lsHandler({key: 'ajax-' + config.lsId, value: v})}, 10);
19678			}
19679		}
19680	}
19681
19682	if (bXHR)
19683	{
19684		config.xhr = BX.ajax.xhr();
19685		if (!config.xhr) return;
19686
19687		if (config.lsId)
19688		{
19689			BX.localStorage.set('ajax-' + config.lsId, 'BXAJAXWAIT', config.lsTimeout);
19690		}
19691
19692		config.xhr.open(config.method, config.url, config.async);
19693
19694		if (!config.skipBxHeader && !BX.ajax.isCrossDomain(config.url))
19695		{
19696			config.xhr.setRequestHeader('Bx-ajax', 'true');
19697		}
19698
19699		if (config.method == 'POST' && config.preparePost)
19700		{
19701			config.xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
19702		}
19703		if (typeof(config.headers) == "object")
19704		{
19705			for (i = 0; i < config.headers.length; i++)
19706				config.xhr.setRequestHeader(config.headers[i].name, config.headers[i].value);
19707		}
19708
19709		if(!!config.onprogress)
19710		{
19711			BX.bind(config.xhr, 'progress', config.onprogress);
19712		}
19713
19714		var bRequestCompleted = false;
19715		var onreadystatechange = config.xhr.onreadystatechange = function(additional)
19716		{
19717			if (bRequestCompleted)
19718				return;
19719
19720			if (additional === 'timeout')
19721			{
19722				if (config.onfailure)
19723				{
19724					config.onfailure('timeout', '', config);
19725				}
19726
19727				BX.onCustomEvent(config.xhr, 'onAjaxFailure', ['timeout', '', config]);
19728
19729				config.xhr.onreadystatechange = BX.DoNothing;
19730				config.xhr.abort();
19731
19732				if (config.async)
19733				{
19734					config.xhr = null;
19735				}
19736			}
19737			else
19738			{
19739				if (config.xhr.readyState == 4 || additional == 'run')
19740				{
19741					status = BX.ajax.xhrSuccess(config.xhr) ? "success" : "error";
19742					bRequestCompleted = true;
19743					config.xhr.onreadystatechange = BX.DoNothing;
19744
19745					if (status == 'success')
19746					{
19747						var authHeader = (!!config.skipAuthCheck || BX.ajax.isCrossDomain(config.url))
19748							? false
19749							: config.xhr.getResponseHeader('X-Bitrix-Ajax-Status');
19750
19751						if(!!authHeader && authHeader == 'Authorize')
19752						{
19753							if (config.onfailure)
19754							{
19755								config.onfailure('auth', config.xhr.status, config);
19756							}
19757
19758							BX.onCustomEvent(config.xhr, 'onAjaxFailure', ['auth', config.xhr.status, config]);
19759						}
19760						else
19761						{
19762							var data = config.xhr.responseText;
19763
19764							if (config.lsId)
19765							{
19766								BX.localStorage.set('ajax-' + config.lsId, data, config.lsTimeout);
19767							}
19768
19769							BX.ajax.__run(config, data);
19770						}
19771					}
19772					else
19773					{
19774						if (config.onfailure)
19775						{
19776							config.onfailure('status', config.xhr.status, config);
19777						}
19778
19779						BX.onCustomEvent(config.xhr, 'onAjaxFailure', ['status', config.xhr.status, config]);
19780					}
19781
19782					if (config.async)
19783					{
19784						config.xhr = null;
19785					}
19786				}
19787			}
19788		};
19789
19790		if (config.async && config.timeout > 0)
19791		{
19792			setTimeout(function() {
19793				if (config.xhr && !bRequestCompleted)
19794				{
19795					onreadystatechange("timeout");
19796				}
19797			}, config.timeout * 1000);
19798		}
19799
19800		if (config.start)
19801		{
19802			config.xhr.send(config.data);
19803
19804			if (!config.async)
19805			{
19806				onreadystatechange('run');
19807			}
19808		}
19809
19810		return config.xhr;
19811	}
19812};
19813
19814BX.ajax.xhr = function()
19815{
19816	if (window.XMLHttpRequest)
19817	{
19818		try {return new XMLHttpRequest();} catch(e){}
19819	}
19820	else if (window.ActiveXObject)
19821	{
19822		try { return new window.ActiveXObject("Msxml2.XMLHTTP.6.0"); }
19823			catch(e) {}
19824		try { return new window.ActiveXObject("Msxml2.XMLHTTP.3.0"); }
19825			catch(e) {}
19826		try { return new window.ActiveXObject("Msxml2.XMLHTTP"); }
19827			catch(e) {}
19828		try { return new window.ActiveXObject("Microsoft.XMLHTTP"); }
19829			catch(e) {}
19830		throw new Error("This browser does not support XMLHttpRequest.");
19831	}
19832
19833	return null;
19834};
19835
19836BX.ajax.isCrossDomain = function(url, location)
19837{
19838	location = location || window.location;
19839
19840	//Relative URL gets a current protocol
19841	if (url.indexOf("//") === 0)
19842	{
19843		url = location.protocol + url;
19844	}
19845
19846	//Fast check
19847	if (url.indexOf("http") !== 0)
19848	{
19849		return false;
19850	}
19851
19852	var link = window.document.createElement("a");
19853	link.href = url;
19854
19855	return  link.protocol !== location.protocol ||
19856			link.hostname !== location.hostname ||
19857			BX.ajax.getHostPort(link.protocol, link.host) !== BX.ajax.getHostPort(location.protocol, location.host);
19858};
19859
19860BX.ajax.getHostPort = function(protocol, host)
19861{
19862	var match = /:(\d+)$/.exec(host);
19863	if (match)
19864	{
19865		return match[1];
19866	}
19867	else
19868	{
19869		if (protocol === "http:")
19870		{
19871			return "80";
19872		}
19873		else if (protocol === "https:")
19874		{
19875			return "443";
19876		}
19877	}
19878
19879	return "";
19880};
19881
19882BX.ajax.__prepareOnload = function(scripts)
19883{
19884	if (scripts.length > 0)
19885	{
19886		BX.ajax['onload_' + ajax_session] = null;
19887
19888		for (var i=0,len=scripts.length;i<len;i++)
19889		{
19890			if (scripts[i].isInternal)
19891			{
19892				scripts[i].JS = scripts[i].JS.replace(r.script_onload, 'BX.aja
19892x.onload_' + ajax_session);
19893			}
19894		}
19895	}
19896
19897	BX.CaptureEventsGet();
19898	BX.CaptureEvents(window, 'load');
19899};
19900
19901BX.ajax.__runOnload = function()
19902{
19903	if (null != BX.ajax['onload_' + ajax_session])
19904	{
19905		BX.ajax['onload_' + ajax_session].apply(window);
19906		BX.ajax['onload_' + ajax_session] = null;
19907	}
19908
19909	var h = BX.CaptureEventsGet();
19910
19911	if (h)
19912	{
19913		for (var i=0; i<h.length; i++)
19914			h[i].apply(window);
19915	}
19916};
19917
19918BX.ajax.__run = function(config, data)
19919{
19920	if (!config.processData)
19921	{
19922		if (config.onsuccess)
19923		{
19924			config.onsuccess(data);
19925		}
19926
19927		BX.onCustomEvent(config.xhr, 'onAjaxSuccess', [data, config]);
19928	}
19929	else
19930	{
19931		data = BX.ajax.processRequestData(data, config);
19932	}
19933};
19934
19935
19936BX.ajax._onParseJSONFailure = function(data)
19937{
19938	this.jsonFailure = true;
19939	this.jsonResponse = data;
19940	this.jsonProactive = /^\[WAF\]/.test(data);
19941};
19942
19943BX.ajax.processRequestData = function(data, config)
19944{
19945	var result, scripts = [], styles = [];
19946	switch (config.dataType.toUpperCase())
19947	{
19948		case 'JSON':
19949
19950			var context = config.xhr || {};
19951			BX.addCustomEvent(context, 'onParseJSONFailure', BX.proxy(BX.ajax._onParseJSONFailure, config));
19952			result = BX.parseJSON(data, context);
19953			BX.removeCustomEvent(context, 'onParseJSONFailure', BX.proxy(BX.ajax._onParseJSONFailure, config));
19954
19955			if(!!result && BX.type.isArray(result['bxjs']))
19956			{
19957				for(var i = 0; i < result['bxjs'].length; i++)
19958				{
19959					if(BX.type.isNotEmptyString(result['bxjs'][i]))
19960					{
19961						scripts.push({
19962							"isInternal": false,
19963							"JS": result['bxjs'][i],
19964							"bRunFirst": config.scriptsRunFirst
19965						});
19966					}
19967					else
19968					{
19969						scripts.push(result['bxjs'][i])
19970					}
19971				}
19972			}
19973
19974			if(!!result && BX.type.isArray(result['bxcss']))
19975			{
19976				styles = result['bxcss'];
19977			}
19978
19979		break;
19980		case 'SCRIPT':
19981			scripts.push({"isInternal": true, "JS": data, "bRunFirst": config.scriptsRunFirst});
19982			result = data;
19983		break;
19984
19985		default: // HTML
19986			var ob = BX.processHTML(data, config.scriptsRunFirst);
19987			result = ob.HTML; scripts = ob.SCRIPT; styles = ob.STYLE;
19988		break;
19989	}
19990
19991	var bSessionCreated = false;
19992	if (null == ajax_session)
19993	{
19994		ajax_session = parseInt(Math.random() * 1000000);
19995		bSessionCreated = true;
19996	}
19997
19998	if (styles.length > 0)
19999		BX.loadCSS(styles);
20000
20001	if (config.emulateOnload)
20002			BX.ajax.__prepareOnload(scripts);
20003
20004	var cb = BX.DoNothing;
20005	if(config.emulateOnload || bSessionCreated)
20006	{
20007		cb = BX.defer(function()
20008		{
20009			if (config.emulateOnload)
20010				BX.ajax.__runOnload();
20011			if (bSessionCreated)
20012				ajax_session = null;
20013			BX.onCustomEvent(config.xhr, 'onAjaxSuccessFinish', [config]);
20014		});
20015	}
20016
20017	try
20018	{
20019		if (!!config.jsonFailure)
20020		{
20021			throw {type: 'json_failure', data: config.jsonResponse, bProactive: config.jsonProactive};
20022		}
20023
20024		config.scripts = scripts;
20025
20026		BX.ajax.processScripts(config.scripts, true);
20027
20028		if (config.onsuccess)
20029		{
20030			config.onsuccess(result);
20031		}
20032
20033		BX.onCustomEvent(config.xhr, 'onAjaxSuccess', [result, config]);
20034
20035		BX.ajax.processScripts(config.scripts, false, cb);
20036	}
20037	catch (e)
20038	{
20039		if (config.onfailure)
20040			config.onfailure("processing", e);
20041		BX.onCustomEvent(config.xhr, 'onAjaxFailure', ['processing', e, config]);
20042	}
20043};
20044
20045BX.ajax.processScripts = function(scripts, bRunFirst, cb)
20046{
20047	var scriptsExt = [], scriptsInt = '';
20048
20049	cb = cb || BX.DoNothing;
20050
20051	for (var i = 0, length = scripts.length; i < length; i++)
20052	{
20053		if (typeof bRunFirst != 'undefined' && bRunFirst != !!scripts[i].bRunFirst)
20054			continue;
20055
20056		if (scripts[i].isInternal)
20057			scriptsInt += ';' + scripts[i].JS;
20058		else
20059			scriptsExt.push(scripts[i].JS);
20060	}
20061
20062	scriptsExt = BX.util.array_unique(scriptsExt);
20063	var inlineScripts = scriptsInt.length > 0 ? function() { BX.evalGlobal(scriptsInt); } : BX.DoNothing;
20064
20065	if (scriptsExt.length > 0)
20066	{
20067		BX.load(scriptsExt, function() {
20068			inlineScripts();
20069			cb();
20070		});
20071	}
20072	else
20073	{
20074		inlineScripts();
20075		cb();
20076	}
20077};
20078
20079// TODO: extend this function to use with any data objects or forms
20080BX.ajax.prepareData = function(arData, prefix)
20081{
20082	var data = '';
20083	if (BX.type.isString(arData))
20084		data = arData;
20085	else if (null != arData)
20086	{
20087		for(var i in arData)
20088		{
20089			if (arData.hasOwnProperty(i))
20090			{
20091				if (data.length > 0)
20092					data += '&';
20093				var name = BX.util.urlencode(i);
20094				if(prefix)
20095					name = prefix + '[' + name + ']';
20096				if(typeof arData[i] == 'object')
20097					data += BX.ajax.prepareData(arData[i], name);
20098				else
20099					data += name + '=' + BX.util.urlencode(arData[i]);
20100			}
20101		}
20102	}
20103	return data;
20104};
20105
20106BX.ajax.xhrSuccess = function(xhr)
20107{
20108	return (xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;
20109};
20110
20111BX.ajax.Setup = function(config, bTemp)
20112{
20113	bTemp = !!bTemp;
20114
20115	for (var i in config)
20116	{
20117		if (bTemp)
20118			tempDefaultConfig[i] = config[i];
20119		else
20120			defaultConfig[i] = config[i];
20121	}
20122};
20123
20124BX.ajax.replaceLocalStorageValue = function(lsId, data, ttl)
20125{
20126	if (!!BX.localStorage)
20127		BX.localStorage.set('ajax-' + lsId, data, ttl);
20128};
20129
20130
20131BX.ajax._uncache = function(url)
20132{
20133	return url + ((url.indexOf('?') !== -1 ? "&" : "?") + '_=' + (new Date()).getTime());
20134};
20135
20136/* simple interface */
20137BX.ajax.get = function(url, data, callback)
20138{
20139	if (BX.type.isFunction(data))
20140	{
20141		callback = data;
20142		data = '';
20143	}
20144
20145	data = BX.ajax.prepareData(data);
20146
20147	if (data)
20148	{
20149		url += (url.indexOf('?') !== -1 ? "&" : "?") + data;
20150		data = '';
20151	}
20152
20153	return BX.ajax({
20154		'method': 'GET',
20155		'dataType': 'html',
20156		'url': url,
20157		'data':  '',
20158		'onsuccess': callback
20159	});
20160};
20161
20162BX.ajax.getCaptcha = function(callback)
20163{
20164	return BX.ajax.loadJSON('/bitrix/tools/ajax_captcha.php', callback);
20165};
20166
20167BX.ajax.insertToNode = function(url, node)
20168{
20169	node = BX(node);
20170	if (!!node)
20171	{
20172		var eventArgs = { cancel: false };
20173		BX.onCustomEvent('onAjaxInsertToNode', [{ url: url, node: node, eventArgs: eventArgs }]);
20174		if(eventArgs.cancel === true)
20175		{
20176			return;
20177		}
20178
20179		var show = null;
20180		if (!tempDefaultConfig.denyShowWait)
20181		{
20182			show = BX.showWait(node);
20183			delete tempDefaultConfig.denyShowWait;
20184		}
20185
20186		return BX.ajax.get(url, function(data) {
20187			node.innerHTML = data;
20188			BX.closeWait(node, show);
20189		});
20190	}
20191};
20192
20193BX.ajax.post = function(url, data, callback)
20194{
20195	data = BX.ajax.prepareData(data);
20196
20197	return BX.ajax({
20198		'method': 'POST',
20199		'dataType': 'html',
20200		'url': url,
20201		'data':  data,
20202		'onsuccess': callback
20203	});
20204};
20205
20206/**
20207 * BX.ajax with BX.Promise
20208 *
20209 * @param config
20210 * @returns {BX.Promise|false}
20211 */
20212BX.ajax.promise = function(config)
20213{
20214	var result = new BX.Promise();
20215
20216	config.onsuccess = function(data)
20217	{
20218		result.fulfill(data);
20219	};
20220	config.onfailure = function(reason, data)
20221	{
20222		result.reject({
20223			reason: reason,
20224			data: data
20225		});
20226	};
20227	config.onprogress = function(data)
20228	{
20229		if (data.position == 0 && data.totalSize == 0)
20230		{
20231			result.reject({
20232				reason: 'progress',
20233				data: data
20234			});
20235		}
20236	};
20237
20238	var xhr = BX.ajax(config);
20239	if (xhr)
20240	{
20241		if (typeof config.onrequeststart === 'function')
20242		{
20243			config.onrequeststart(xhr);
20244		}
20245	}
20246	else
20247	{
20248		result.reject({
20249			reason: "init",
20250			data: false
20251		});
20252	}
20253
20254	return result;
20255};
20256
20257/* load and execute external file script with onload emulation */
20258BX.ajax.loadScriptAjax = function(script_src, callback, bPreload)
20259{
20260	if (BX.type.isArray(script_src))
20261	{
20262		for (var i=0,len=script_src.length;i<len;i++)
20263		{
20264			BX.ajax.loadScriptAjax(script_src[i], callback, bPreload);
20265		}
20266	}
20267	else
20268	{
20269		var script_src_test = script_src.replace(/\.js\?.*/, '.js');
20270
20271		if (r.script_self.test(script_src_test)) return;
20272		if (r.script_self_window.test(script_src_test) && BX.CWindow) return;
20273		if (r.script_self_admin.test(script_src_test) && BX.admin) return;
20274
20275		if (typeof loadedScripts[script_src_test] == 'undefined')
20276		{
20277			if (!!bPreload)
20278			{
20279				loadedScripts[script_src_test] = '';
20280				return BX.loadScript(script_src);
20281			}
20282			else
20283			{
20284				return BX.ajax({
20285					url: script_src,
20286					method: 'GET',
20287					dataType: 'script',
20288					processData: true,
20289					emulateOnload: false,
20290					scriptsRunFirst: true,
20291					async: false,
20292					start: true,
20293					onsuccess: function(result) {
20294						loadedScripts[script_src_test] = result;
20295						if (callback)
20296							callback(result);
20297					}
20298				});
20299			}
20300		}
20301		else if (callback)
20302		{
20303			callback(loadedScripts[script_src_test]);
20304		}
20305	}
20306};
20307
20308/* non-xhr loadings */
20309BX.ajax.loadJSON = function(url, data, callback, callback_failure)
20310{
20311	if (BX.type.isFunction(data))
20312	{
20313		callback_failure = callback;
20314		callback = data;
20315		data = '';
20316	}
20317
20318	data = BX.ajax.prepareData(data);
20319
20320	if (data)
20321	{
20322		url += (url.indexOf('?') !== -1 ? "&" : "?") + data;
20323		data = '';
20324	}
20325
20326	return BX.ajax({
20327		'method': 'GET',
20328		'dataType': 'json',
20329		'url': url,
20330		'onsuccess': callback,
20331		'onfailure': callback_failure
20332	});
20333};
20334
20335var getLastContentTypeHeader = function (headers) {
20336	if (!BX.Type.isArray(headers))
20337	{
20338		return null;
20339	}
20340	var lastHeader = headers
20341		.filter(function (header) {
20342			return header.name === 'Content-Type';
20343		})
20344		.pop();
20345
20346	return lastHeader ? lastHeader.value : null;
20347};
20348
20349var prepareAjaxGetParameters = function(config)
20350{
20351	var getParameters = config.getParameters || {};
20352	if (BX.type.isNotEmptyString(config.analyticsLabel))
20353	{
20354		getParameters.analyticsLabel = config.analyticsLabel;
20355	}
20356	else if (BX.type.isNotEmptyObject(config.analyticsLabel))
20357	{
20358		getParameters.analyticsLabel = config.analyticsLabel;
20359	}
20360	if (typeof config.mode !== 'undefined')
20361	{
20362		getParameters.mode = config.mode;
20363	}
20364	if (config.navigation)
20365	{
20366		if(config.navigation.page)
20367		{
20368			getParameters.nav = 'page-' + config.navigation.page;
20369		}
20370		if(config.navigation.size)
20371		{
20372			if(getParameters.nav)
20373			{
20374				getParameters.nav += '-';
20375			}
20376			else
20377			{
20378				getParameters.nav = '';
20379			}
20380			getParameters.nav += 'size-' + config.navigation.size;
20381		}
20382	}
20383
20384	return getParameters;
20385};
20386
20387var prepareAjaxConfig = function(config)
20388{
20389	config = BX.type.isPlainObject(config) ? config : {};
20390
20391	if (typeof config.json !== 'undefined')
20392	{
20393		if (!BX.type.isPlainObject(config.json))
20394		{
20395			throw new Error('Wrong `config.json`, plain object expected.')
20396		}
20397
20398		config.headers = config.headers || [];
20399		config.headers.push({name: 'Content-Type', value: 'application/json'});
20400		config.headers.push({name: 'X-Bitrix-Csrf-Token', value: BX.bitrix_sessid()});
20401		if (BX.message.SITE_ID)
20402		{
20403			config.headers.push({name: 'X-Bitrix-Site-Id', value: BX.message.SITE_ID});
20404		}
20405
20406		config.data = config.json;
20407		config.preparePost = false;
20408	}
20409	else if (config.data instanceof FormData)
20410	{
20411		config.preparePost = false;
20412
20413		config.data.append('sessid', BX.bitrix_sessid());
20414		if (BX.message.SITE_ID)
20415		{
20416			config.data.append('SITE_ID', BX.message.SITE_ID);
20417		}
20418		if (typeof config.signedParameters !== 'undefined')
20419		{
20420			config.data.append('signedParameters', config.signedParameters);
20421		}
20422	}
20423	else
20424	{
20425		config.data = BX.type.isPlainObject(config.data) ? config.data : {};
20426		if (BX.message.SITE_ID)
20427		{
20428			config.data.SITE_ID = BX.message.SITE_ID;
20429		}
20430		config.data.sessid = BX.bitrix_sessid();
20431		if (typeof config.signedParameters !== 'undefined')
20432		{
20433			config.data.signedParameters = config.signedParameters;
20434		}
20435	}
20436
20437	if (!config.method)
20438	{
20439		config.method = 'POST'
20440	}
20441
20442	return config;
20443};
20444
20445var buildAjaxPromiseToRestoreCsrf = function(config, withoutRestoringCsrf)
20446{
20447	withoutRestoringCsrf = withoutRestoringCsrf || false;
20448	var originalConfig = BX.clone(config);
20449	var request = null;
20450
20451	var onrequeststart = config.onrequeststart;
20452	config.onrequeststart = function(xhr) {
20453		request = xhr;
20454		if (BX.type.isFunction(onrequeststart))
20455		{
20456			onrequeststart(xhr);
20457		}
20458	};
20459	var onrequeststartOrig = originalConfig.onrequeststart;
20460	originalConfig.onrequeststart = function(xhr) {
20461		request = xhr;
20462		if (BX.type.isFunction(onrequeststartOrig))
20463		{
20464			onrequeststartOrig(xhr);
20465		}
20466	};
20467
20468	var promise = BX.ajax.promise(config);
20469
20470	return promise.then(function(response) {
20471		if (!withoutRestoringCsrf && BX.type.isPlainObject(response) && BX.type.isArray(response.errors))
20472		{
20473			var csrfProblem = false;
20474			response.errors.forEach(function(error) {
20475				if (error.code === 'invalid_csrf' && error.customData.csrf)
20476				{
20477					BX.message({'bitrix_sessid': error.customData.csrf});
20478					originalConfig.data.sessid = BX.bitrix_sessid();
20479
20480					csrfProblem = true;
20481				}
20482			});
20483
20484			if (csrfProblem)
20485			{
20486				return buildAjaxPromiseToRestoreCsrf(originalConfig, true);
20487			}
20488		}
20489
20490		if (!BX.type.isPlainObject(response) || response.status !== 'success')
20491		{
20492			var errorPromise = new BX.Promise();
20493			errorPromise.reject(response);
20494
20495			return errorPromise;
20496		}
20497
20498		return response;
20499	}).catch(function(data) {
20500		var ajaxReject = new BX.Promise();
20501
20502		if (BX.type.isPlainObject(data) && data.status && data.hasOwnProperty('data'))
20503		{
20504			ajaxReject.reject(data);
20505		}
20506		else
20507		{
20508			ajaxReject.reject({
20509				status: 'error',
20510				data: {
20511					ajaxRejectData: data
20512				},
20513				errors: [
20514					{
20515						code: 'NETWORK_ERROR',
20516						message: 'Network error'
20517					}
20518				]
20519			});
20520		}
20521
20522		return ajaxReject;
20523	}).then(function(response){
20524
20525		var assetsLoaded = new BX.Promise();
20526
20527		var headers = request.getAllResponseHeaders().trim().split(/[\r\n]+/);
20528		var headerMap = {};
20529		headers.forEach(function (line) {
20530			var parts = line.split(': ');
20531			var header = parts.shift().toLowerCase();
20532			headerMap[header] = parts.join(': ');
20533		});
20534
20535		if (!headerMap['x-process-assets'])
20536		{
20537			assetsLoaded.fulfill(response);
20538
20539			return assetsLoaded;
20540		}
20541
20542		var assets = BX.prop.getObject(BX.prop.getObject(response, "data", {}), "assets", {});
20543		var promise = new Promise(function(resolve, reject) {
20544			var css = BX.prop.getArray(assets, "css", []);
20545			BX.load(css, function(){
20546				BX.loadScript(
20547					BX.prop.getArray(assets, "js", []),
20548					resolve
20549				);
20550			});
20551		});
20552		promise.then(function(){
20553			var strings = BX.prop.getArray(assets, "string", []);
20554			var stringAsset = strings.join('\n');
20555			BX.html(document.head, stringAsset, { useAdjacentHTML: true }).then(function(){
20556				assetsLoaded.fulfill(response);
20557			});
20558		});
20559
20560		return assetsLoaded;
20561	});
20562};
20563
20564/**
20565 *
20566 * @param {string} action
20567 * @param {Object} config
20568 * @param {?string|?Object} [config.analyticsLabel]
20569 * @param {string} [config.method='POST']
20570 * @param {Object} [config.data]
20571 * @param {?Object} [config.getParameters]
20572 * @param {?Object} [config.headers]
20573 * @param {?Object} [config.timeout]
20574 * @param {Object} [config.navigation]
20575 * @param {number} [config.navigation.page]
20576 */
20577BX.ajax.runAction = function(action, config)
20578{
20579	config = prepareAjaxConfig(config);
20580	var getParameters = prepareAjaxGetParameters(config);
20581	getParameters.action = action;
20582
20583	var url = '/bitrix/services/main/ajax.php?' + BX.ajax.prepareData(getParameters);
20584	return buildAjaxPromiseToRestoreCsrf({
20585		method: config.method,
20586		dataType: 'json',
20587		url: url,
20588		data: config.data,
20589		timeout: config.timeout,
20590		preparePost: config.preparePost,
20591		headers: config.headers,
20592		onrequeststart: config.onrequeststart
20593	});
20594};
20595
20596/**
20597 *
20598 * @param {string} component
20599 * @param {string} action
20600 * @param {Object} config
20601 * @param {?string|?Object} [config.analyticsLabel]
20602 * @param {?string} [config.signedParameters]
20603 * @param {string} [config.method='POST']
20604 * @param {string} [config.mode='ajax'] Ajax or class.
20605 * @param {Object} [config.data]
20606 * @param {?Object} [config.getParameters]
20607 * @param {?array} [config.headers]
20608 * @param {?number} [config.timeout]
20609 * @param {Object} [config.navigation]
20610 */
20611BX.ajax.runComponentAction = function (component, action, config)
20612{
20613	config = prepareAjaxConfig(config);
20614	config.mode = config.mode || 'ajax';
20615
20616	var getParameters = prepareAjaxGetParameters(config);
20617	getParameters.c = component;
20618	getParameters.action = action;
20619
20620	var url = '/bitrix/services/main/ajax.php?' + BX.ajax.prepareData(getParameters);
20621
20622	return buildAjaxPromiseToRestoreCsrf({
20623		method: config.method,
20624		dataType: 'json',
20625		url: url,
20626		data: config.data,
20627		timeout: config.timeout,
20628		preparePost: config.preparePost,
20629		headers: config.headers,
20630		onrequeststart: (config.onrequeststart ? config.onrequeststart : null)
20631	});
20632};
20633
20634/*
20635arObs = [{
20636	url: url,
20637	type: html|script|json|css,
20638	callback: function
20639}]
20640*/
20641BX.ajax.load = function(arObs, callback)
20642{
20643	if (!BX.type.isArray(arObs))
20644		arObs = [arObs];
20645
20646	var cnt = 0;
20647
20648	if (!BX.type.isFunction(callback))
20649		callback = BX.DoNothing;
20650
20651	var handler = function(data)
20652		{
20653			if (BX.type.isFunction(this.callback))
20654				this.callback(data);
20655
20656			if (++cnt >= len)
20657				callback();
20658		};
20659
20660	for (var i = 0, len = arObs.length; i<len; i++)
20661	{
20662		switch(arObs[i].type.toUpperCase())
20663		{
20664			case 'SCRIPT':
20665				BX.loadScript([arObs[i].url], BX.proxy(handler, arObs[i]));
20666			break;
20667			case 'CSS':
20668				BX.loadCSS([arObs[i].url]);
20669
20670				if (++cnt >= len)
20671					callback();
20672			break;
20673			case 'JSON':
20674				BX.ajax.loadJSON(arObs[i].url, BX.proxy(handler, arObs[i]));
20675			break;
20676
20677			default:
20678				BX.ajax.get(arObs[i].url, '', BX.proxy(handler, arObs[i]));
20679			break;
20680		}
20681	}
20682};
20683
20684/* ajax form sending */
20685BX.ajax.submit = function(obForm, callback)
20686{
20687	if (!obForm.target)
20688	{
20689		if (null == obForm.BXFormTarget)
20690		{
20691			var frame_name = 'formTarget_' + Math.random();
20692			obForm.BXFormTarget = document.body.appendChild(BX.create('IFRAME', {
20693				props: {
20694					name: frame_name,
20695					id: frame_name,
20696					src: 'javascript:void(0)'
20697				},
20698				style: {
20699					display: 'none'
20700				}
20701			}));
20702		}
20703
20704		obForm.target = obForm.BXFormTarget.name;
20705	}
20706
20707	obForm.BXFormCallback = callback;
20708	BX.bind(obForm.BXFormTarget, 'load', BX.proxy(BX.ajax._submit_callback, obForm));
20709
20710	BX.submit(obForm);
20711
20712	return false;
20713};
20714
20715BX.ajax.submitComponentForm = function(obForm, container, bWait)
20716{
20717	if (!obForm.target)
20718	{
20719		if (null == obForm.BXFormTarget)
20720		{
20721			var frame_name = 'formTarget_' + Math.random();
20722			obForm.BXFormTarget = document.body.appendChild(BX.create('IFRAME', {
20723				props: {
20724					name: frame_name,
20725					id: frame_name,
20726					src: 'javascript:void(0)'
20727				},
20728				style: {
20729					display: 'none'
20730				}
20731			}));
20732		}
20733
20734		obForm.target = obForm.BXFormTarget.name;
20735	}
20736
20737	if (!!bWait)
20738		var w = BX.showWait(container);
20739
20740	obForm.BXFormCallback = function(d) {
20741		if (!!bWait)
20742			BX.closeWait(w);
20743
20744		var callOnload = function(){
20745			if(!!window.bxcompajaxframeonload)
20746			{
20747				setTimeout(function(){window.bxcompajaxframeonload();window.bxcompajaxframeonload=null;}, 10);
20748			}
20749		};
20750
20751		BX(container).innerHTML = d;
20752		BX.onCustomEvent('onAjaxSuccess', [null,null,callOnload]);
20753	};
20754
20755	BX.bind(obForm.BXFormTarget, 'load', BX.proxy(BX.ajax._submit_callback, obForm));
20756
20757	return true;
20758};
20759
20760// func will be executed in form context
20761BX.ajax._submit_callback = function()
20762{
20763	//opera and IE8 triggers onload event even on empty iframe
20764	try
20765	{
20766		if(this.BXFormTarget.contentWindow.location.href.indexOf('http') != 0)
20767			return;
20768	} catch (e) {
20769		return;
20770	}
20771
20772	if (this.BXFormCallback)
20773		this.BXFormCallback.apply(this, [this.BXFormTarget.contentWindow.document.body.innerHTML]);
20774
20775	BX.unbindAll(this.BXFormTarget);
20776};
20777
20778BX.ajax.prepareForm = function(obForm, data)
20779{
20780	data = (!!data ? data : {});
20781	var i, ii, el,
20782		_data = [],
20783		n = obForm.elements.length,
20784		files = 0, length = 0;
20785	if(!!obForm)
20786	{
20787		for (i = 0; i < n; i++)
20788		{
20789			el = obForm.elements[i];
20790			if (el.disabled)
20791				continue;
20792
20793			if(!el.type)
20794				continue;
20795
20796			switch(el.type.toLowerCase())
20797			{
20798				case 'text':
20799				case 'textarea':
20800				case 'password':
20801				case 'number':
20802				case 'hidden':
20803				case 'select-one':
20804					_data.push({name: el.name, value: el.value});
20805					length += (el.name.length + el.value.length);
20806					break;
20807				case 'file':
20808					if (!!el.files)
20809					{
20810						for (ii = 0; ii < el.files.length; ii++)
20811						{
20812							files++;
20813							_data.push({name: el.name, value: el.files[ii], file : true});
20814							length += el.files[ii].size;
20815						}
20816					}
20817					break;
20818				case 'radio':
20819				case 'checkbox':
20820					if(el.checked)
20821					{
20822						_data.push({name: el.name, value: el.value});
20823						length += (el.name.length + el.value.length);
20824					}
20825					break;
20826				case 'select-multiple':
20827					for (var j = 0; j < el.options.length; j++)
20828					{
20829						if (el.options[j].selected)
20830						{
20831							_data.push({name : el.name, value : el.options[j].value});
20832							length += (el.name.length + el.options[j].length);
20833						}
20834					}
20835					break;
20836				default:
20837					break;
20838			}
20839		}
20840
20841		i = 0; length = 0;
20842		var current = data, name, rest, pp, tmpKey;
20843
20844		while(i < _data.length)
20845		{
20846			var p = _data[i].name.indexOf('[');
20847			if (tmpKey)
20848			{
20849				current[_data[i].name] = {};
20850				current[_data[i].name][tmpKey.replace(/\[|\]/gi, '')] = _data[i].value;
20851				current = data;
20852				tmpKey = null;
20853				i++;
20854			}
20855			else if (p == -1)
20856			{
20857				current[_data[i].name] = _data[i].value;
20858				current = data;
20859				i++;
20860			}
20861			else
20862			{
20863				name = _data[i].name.substring(0, p);
20864				rest = _data[i].name.substring(p+1);
20865				pp = rest.indexOf(']');
20866
20867				if(pp == -1)
20868				{
20869					if (!current[name])
20870						current[name] = [];
20871					current = data;
20872					i++;
20873				}
20874				else if(pp == 0)
20875				{
20876					if (!current[name])
20877						current[name] = [];
20878					//No index specified - so take the next integer
20879					current = current[name];
20880					_data[i].name = '' + current.length;
20881					if (rest.substring(pp+1).indexOf('[') === 0)
20882						tmpKey = rest.substring(0, pp) + rest.substring(pp+1);
20883				}
20884				else
20885				{
20886					if (!current[name])
20887						current[name] = {};
20888					//Now index name becomes and name and we go deeper into the array
20889					current = current[name];
20890					_data[i].name = rest.substring(0, pp) + rest.substring(pp+1);
20891				}
20892			}
20893		}
20894	}
20895	return {data : data, filesCount : files, roughSize : length};
20896};
20897BX.ajax.submitAjax = function(obForm, config)
20898{
20899	config = (config !== null && typeof config == "object" ? config : {});
20900	config.url = (config["url"] || obForm.getAttribute("action"));
20901
20902	var additionalData = (config["data"] || {});
20903	config.data = BX.ajax.prepareForm(obForm).data;
20904	for (var ii in additionalData)
20905	{
20906		if (additionalData.hasOwnProperty(ii))
20907		{
20908			config.data[ii] = additionalData[ii];
20909		}
20910	}
20911
20912	if (!window["FormData"])
20913	{
20914		BX.ajax(config);
20915	}
20916	else
20917	{
20918		var isFile = function(item)
20919		{
20920			var res = Object.prototype.toString.call(item);
20921			return (res == '[object File]' || res == '[object Blob]');
20922		},
20923		appendToForm = function(fd, key, val)
20924		{
20925			if (!!val && typeof val == "object" && !isFile(val))
20926			{
20927				for (var ii in val)
20928				{
20929					if (val.hasOwnProperty(ii))
20930					{
20931						appendToForm(fd, (key == '' ? ii : key + '[' + ii + ']'), val[ii]);
20932					}
20933				}
20934			}
20935			else
20936				fd.append(key, (!!val ? val : ''));
20937		},
20938		prepareData = function(arData)
20939		{
20940			var data = {};
20941			if (null != arData)
20942			{
20943				if(typeof arData == 'object')
20944				{
20945					for(var i in arData)
20946					{
20947						if (arData.hasOwnProperty(i))
20948						{
20949							var name = BX.util.urlencode(i);
20950							if(typeof arData[i] == 'object' && arData[i]["file"] !== true)
20951								data[name] = prepareData(arData[i]);
20952							else if (arData[i]["file"] === true)
20953								data[name] = arData[i]["value"];
20954							else
20955								data[name] = BX.util.urlencode(arData[i]);
20956						}
20957					}
20958				}
20959				else
20960					data = BX.util.urlencode(arData);
20961			}
20962			return data;
20963		},
20964		fd = new window.FormData();
20965
20966		if (config.method !== 'POST')
20967		{
20968			config.data = BX.ajax.prepareData(config.data);
20969			if (config.data)
20970			{
20971				config.url += (config.url.indexOf('?') !== -1 ? "&" : "?") + config.data;
20972				config.data = '';
20973			}
20974		}
20975		else
20976		{
20977			if (config.preparePost === true)
20978				config.data = prepareData(config.data);
20979			appendToForm(fd, '', config.data);
20980			config.data = fd;
20981		}
20982
20983		config.preparePost = false;
20984		config.start = false;
20985
20986		var xhr = BX.ajax(config);
20987		if (!!config["onprogress"])
20988			xhr.upload.addEventListener(
20989				'progress',
20990				function(e){
20991					var percent = null;
20992					if(e.lengthComputable && (e.total || e["totalSize"])) {
20993						percent = e.loaded * 100 / (e.total || e["totalSize"]);
20994					}
20995					config["onprogress"](e, percent);
20996				}
20997			);
20998		xhr.send(fd);
20999	}
21000};
21001
21002BX.ajax.UpdatePageData = function (arData)
21003{
21004	if (arData.TITLE)
21005		BX.ajax.UpdatePageTitle(arData.TITLE);
21006	if (arData.WINDOW_TITLE || arData.TITLE)
21007		BX.ajax.UpdateWindowTitle(arData.WINDOW_TITLE || arData.TITLE);
21008	if (arData.NAV_CHAIN)
21009		BX.ajax.UpdatePageNavChain(arData.NAV_CHAIN);
21010	if (arData.CSS && arData.CSS.length > 0)
21011		BX.loadCSS(arData.CSS);
21012	if (arData.SCRIPTS && arData.SCRIPTS.length > 0)
21013	{
21014		var f = function(result,config,cb){
21015
21016			if(!!config && BX.type.isArray(config.scripts))
21017			{
21018				for(var i=0,l=arData.SCRIPTS.length;i<l;i++)
21019				{
21020					config.scripts.push({isInternal:false,JS:arData.SCRIPTS[i]});
21021				}
21022			}
21023			else
21024			{
21025				BX.loadScript(arData.SCRIPTS,cb);
21026			}
21027
21028			BX.removeCustomEvent('onAjaxSuccess',f);
21029		};
21030		BX.addCustomEvent('onAjaxSuccess',f);
21031	}
21032	else
21033	{
21034		var f1 = function(result,config,cb){
21035			if(BX.type.isFunction(cb))
21036			{
21037				cb();
21038			}
21039			BX.removeCustomEvent('onAjaxSuccess',f1);
21040		};
21041		BX.addCustomEvent('onAjaxSuccess', f1);
21042	}
21043};
21044
21045BX.ajax.UpdatePageTitle = function(title)
21046{
21047	var obTitle = BX('pagetitle');
21048	if (obTitle)
21049	{
21050		BX.remove(obTitle.firstChild);
21051		if (!obTitle.firstChild)
21052			obTitle.appendChild(document.createTextNode(title));
21053		else
21054			obTitle.insertBefore(document.createTextNode(title), obTitle.firstChild);
21055	}
21056};
21057
21058BX.ajax.UpdateWindowTitle = function(title)
21059{
21060	document.title = title;
21061};
21062
21063BX.ajax.UpdatePageNavChain = function(nav_chain)
21064{
21065	var obNavChain = BX('navigation');
21066	if (obNavChain)
21067	{
21068		obNavChain.innerHTML = nav_chain;
21069	}
21070};
21071
21072/* user options handling */
21073BX.userOptions = {
21074	options: null,
21075	bSend: false,
21076	delay: 5000,
21077	path: '/bitrix/admin/user_options.php?'
21078};
21079
21080BX.userOptions.setAjaxPath = function(url)
21081{
21082	BX.userOptions.path = url.indexOf('?') == -1? url+'?': url+'&';
21083}
21084BX.userOptions.save = function(sCategory, sName, sValName, sVal, bCommon)
21085{
21086	if (null == BX.userOptions.options)
21087		BX.userOptions.options = {};
21088
21089	bCommon = !!bCommon;
21090	BX.userOptions.options[sCategory+'.'+sName+'.'+sValName] = [sCategory, sName, sValName, sVal, bCommon];
21091
21092	var sParam = BX.userOptions.__get();
21093	if (sParam != '')
21094		document.cookie = BX.message('COOKIE_PREFIX')+"_LAST_SETTINGS=" + encodeURIComponent(sParam) + "&sessid="+BX.bitrix_sessid()+"; expires=Thu, 31 Dec " + ((new Date()).getFullYear() + 1) + " 23:59:59 GMT; path=/;";
21095
21096	if(!BX.userOptions.bSend)
21097	{
21098		BX.userOptions.bSend = true;
21099		setTimeout(function(){BX.userOptions.send(null)}, BX.userOptions.delay);
21100	}
21101};
21102
21103BX.userOptions.send = function(callback)
21104{
21105	var sParam = BX.userOptions.__get();
21106	BX.userOptions.options = null;
21107	BX.userOptions.bSend = false;
21108
21109	if (sParam != '')
21110	{
21111		document.cookie = BX.message('COOKIE_PREFIX') + "_LAST_SETTINGS=; path=/;";
21112		BX.ajax({
21113			'method': 'GET',
21114			'dataType': 'html',
21115			'processData': false,
21116			'cache': false,
21117			'url': BX.userOptions.path+sParam+'&sessid='+BX.bitrix_sessid(),
21118			'onsuccess': callback
21119		});
21120	}
21121};
21122
21123BX.userOptions.del = function(sCategory, sName, bCommon, callback)
21124{
21125	BX.ajax.get(BX.userOptions.path+'action=delete&c='+sCategory+'&n='+sName+(bCommon == true? '&common=Y':'')+'&sessid='+BX.bitrix_sessid(), callback);
21126};
21127
21128BX.userOptions.__get = function()
21129{
21130	if (!BX.userOptions.options) return '';
21131
21132	var sParam = '', n = -1, prevParam = '', aOpt, i;
21133
21134	for (i in BX.userOptions.options)
21135	{
21136		if(BX.userOptions.options.hasOwnProperty(i))
21137		{
21138			aOpt = BX.userOptions.options[i];
21139
21140			if (prevParam != aOpt[0]+'.'+aOpt[1])
21141			{
21142				n++;
21143				sParam += '&p['+n+'][c]='+BX.util.urlencode(aOpt[0]);
21144				sParam += '&p['+n+'][n]='+BX.util.urlencode(aOpt[1]);
21145				if (aOpt[4] == true)
21146					sParam += '&p['+n+'][d]=Y';
21147				prevParam = aOpt[0]+'.'+aOpt[1];
21148			}
21149
21150			var valueName = aOpt[2];
21151			var value = aOpt[3];
21152
21153			if (valueName === null)
21154			{
21155				sParam += '&p['+n+'][v]='+BX.util.urlencode(value);
21156			}
21157			else
21158			{
21159				sParam += '&p['+n+'][v]['+BX.util.urlencode(valueName)+']='+BX.util.urlencode(value);
21160			}
21161		}
21162	}
21163
21164	return sParam.substr(1);
21165};
21166
21167BX.ajax.history = {
21168	expected_hash: '',
21169
21170	obParams: null,
21171
21172	obFrame: null,
21173	obImage: null,
21174
21175	obTimer: null,
21176
21177	bInited: false,
21178	bHashCollision: false,
21179	bPushState: !!(history.pushState && BX.type.isFunction(history.pushState)),
21180
21181	startState: null,
21182
21183	init: function(obParams)
21184	{
21185		if (BX.ajax.history.bInited)
21186			return;
21187
21188		this.obParams = obParams;
21189		var obCurrentState = this.obParams.getState();
21190
21191		if (BX.ajax.history.bPushState)
21192		{
21193			BX.ajax.history.expected_hash = window.location.pathname;
21194			if (window.location.search)
21195				BX.ajax.history.expected_hash += window.location.search;
21196
21197			BX.ajax.history.put(obCurrentState, BX.ajax.history.expected_hash, '', true);
21198			// due to some strange thing, chrome calls popstate event on page start. so we should delay it
21199			setTimeout(function(){BX.bind(window, 'popstate', BX.ajax.history.__hashListener);}, 500);
21200		}
21201		else
21202		{
21203			BX.ajax.history.expected_hash = window.location.hash;
21204
21205			if (!BX.ajax.history.expected_hash || BX.ajax.history.expected_hash == '#')
21206				BX.ajax.history.expected_hash = '__bx_no_hash__';
21207
21208			jsAjaxHistoryContainer.put(BX.ajax.history.expected_hash, obCurrentState);
21209			BX.ajax.history.obTimer = setTimeout(BX.ajax.history.__hashListener, 500);
21210
21211			if (BX.browser.IsIE())
21212			{
21213				BX.ajax.history.obFrame = document.createElement('IFRAME');
21214				BX.hide_object(BX.ajax.history.obFrame);
21215
21216				document.body.appendChild(BX.ajax.history.obFrame);
21217
21218				BX.ajax.history.obFrame.contentWindow.document.open();
21219				BX.ajax.history.obFrame.contentWindow.document.write(BX.ajax.history.expected_hash);
21220				BX.ajax.history.obFrame.contentWindow.document.close();
21221			}
21222			else if (BX.browser.IsOpera())
21223			{
21224				BX.ajax.history.obImage = document.createElement('IMG');
21225				BX.hide_object(BX.ajax.history.obImage);
21226
21227				document.body.appendChild(BX.ajax.history.obImage);
21228
21229				BX.ajax.history.obImage.setAttribute('src', 'javascript:location.href = \'javascript:BX.ajax.history.__hashListener();\';');
21230			}
21231		}
21232
21233		BX.ajax.history.bInited = true;
21234	},
21235
21236	__hashListener: function(e)
21237	{
21238		e = e || window.event || {state:false};
21239
21240		if (BX.ajax.history.bPushState)
21241		{
21242			BX.ajax.history.obParams.setState(e.state||BX.ajax.history.startState);
21243		}
21244		else
21245		{
21246			if (BX.ajax.history.obTimer)
21247			{
21248				window.clearTimeout(BX.ajax.history.obTimer);
21249				BX.ajax.history.obTimer = null;
21250			}
21251
21252			var current_hash;
21253			if (null != BX.ajax.history.obFrame)
21254				current_hash = BX.ajax.history.obFrame.contentWindow.document.body.innerText;
21255			else
21256				current_hash = window.location.hash;
21257
21258			if (!current_hash || current_hash == '#')
21259				current_hash = '__bx_no_hash__';
21260
21261			if (current_hash.indexOf('#') == 0)
21262				current_hash = current_hash.substring(1);
21263
21264			if (current_hash != BX.ajax.history.expected_hash)
21265			{
21266				var state = jsAjaxHistoryContainer.get(current_hash);
21267				if (state)
21268				{
21269					BX.ajax.history.obParams.setState(state);
21270
21271					BX.ajax.history.expected_hash = current_hash;
21272					if (null != BX.ajax.history.obFrame)
21273					{
21274						var __hash = current_hash == '__bx_no_hash__' ? '' : current_hash;
21275						if (window.location.hash != __hash && window.location.hash != '#' + __hash)
21276							window.location.hash = __hash;
21277					}
21278				}
21279			}
21280
21281			BX.ajax.history.obTimer = setTimeout(BX.ajax.history.__hashListener, 500);
21282		}
21283	},
21284
21285	put: function(state, new_hash, new_hash1, bStartState)
21286	{
21287		if (this.bPushState)
21288		{
21289			if(!bStartState)
21290			{
21291				history.pushState(state, '', new_hash);
21292			}
21293			else
21294			{
21295				BX.ajax.history.startState = state;
21296			}
21297		}
21298		else
21299		{
21300			if (typeof new_hash1 != 'undefined')
21301				new_hash = new_hash1;
21302			else
21303				new_hash = 'view' + new_hash;
21304
21305			jsAjaxHistoryContainer.put(new_hash, state);
21306			BX.ajax.history.expected_hash = new_hash;
21307
21308			window.location.hash = BX.util.urlencode(new_hash);
21309
21310			if (null != BX.ajax.history.obFrame)
21311			{
21312				BX.ajax.history.obFrame.contentWindow.document.open();
21313				BX.ajax.history.obFrame.contentWindow.document.write(new_hash);
21314				BX.ajax.history.obFrame.contentWindow.document.close();
21315			}
21316		}
21317	},
21318
21319	checkRedirectStart: function(param_name, param_value)
21320	{
21321		var current_hash = window.location.hash;
21322		if (current_hash.substring(0, 1) == '#') current_hash = current_hash.substring(1);
21323
21324		var test = current_hash.substring(0, 5);
21325		if (test == 'view/' || test == 'view%')
21326		{
21327			BX.ajax.history.bHashCollision = true;
21328			document.write('<' + 'div id="__ajax_hash_collision_' + param_value + '" style="display: none;">');
21329		}
21330	},
21331
21332	checkRedirectFinish: function(param_name, param_value)
21333	{
21334		document.write('</div>');
21335
21336		var current_hash = window.location.hash;
21337		if (current_hash.substring(0, 1) == '#') current_hash = current_hash.substring(1);
21338
21339		BX.ready(function ()
21340		{
21341			var test = current_hash.substring(0, 5);
21342			if (test == 'view/' || test == 'view%')
21343			{
21344				var obColNode = BX('__ajax_hash_collision_' + param_value);
21345				var obNode = obColNode.firstChild;
21346				BX.cleanNode(obNode);
21347				obColNode.style.display = 'block';
21348
21349				// IE, Opera and Chrome automatically modifies hash with urlencode, but FF doesn't ;-(
21350				if (test != 'view%')
21351					current_hash = BX.util.urlencode(current_hash);
21352
21353				current_hash += (current_hash.indexOf('%3F') == -1 ? '%3F' : '%26') + param_name + '=' + param_value;
21354
21355				var url = '/bitrix/tools/ajax_redirector.php?hash=' + current_hash;
21356
21357				BX.ajax.insertToNode(url, obNode);
21358			}
21359		});
21360	}
21361};
21362
21363BX.ajax.component = function(node)
21364{
21365	this.node = node;
21366};
21367
21368BX.ajax.component.prototype.getState = function()
21369{
21370	var state = {
21371		'node': this.node,
21372		'title': window.document.title,
21373		'data': BX(this.node).innerHTML
21374	};
21375
21376	var obNavChain = BX('navigation');
21377	if (null != obNavChain)
21378		state.nav_chain = obNavChain.innerHTML;
21379
21380	BX.onCustomEvent(BX(state.node), "onComponentAjaxHistoryGetState", [state]);
21381
21382	return state;
21383};
21384
21385BX.ajax.component.prototype.setState = function(state)
21386{
21387	BX(state.node).innerHTML = state.data;
21388	BX.ajax.UpdatePageTitle(state.title);
21389
21390	if (state.nav_chain)
21391	{
21392		BX.ajax.UpdatePageNavChain(state.nav_chain);
21393	}
21394
21395	BX.onCustomEvent(BX(state.node), "onComponentAjaxHistorySetState", [state]);
21396};
21397
21398var jsAjaxHistoryContainer = {
21399	arHistory: {},
21400
21401	put: function(hash, state)
21402	{
21403		this.arHistory[hash] = state;
21404	},
21405
21406	get: function(hash)
21407	{
21408		return this.arHistory[hash];
21409	}
21410};
21411
21412
21413BX.ajax.FormData = function()
21414{
21415	this.elements = [];
21416	this.files = [];
21417	this.features = {};
21418	this.isSupported();
21419	this.log('BX FormData init');
21420};
21421
21422BX.ajax.FormData.isSupported = function()
21423{
21424	var f = new BX.ajax.FormData();
21425	var result = f.features.supported;
21426	f = null;
21427	return result;
21428};
21429
21430BX.ajax.FormData.prototype.log = function(o)
21431{
21432	if (false) {
21433		try {
21434			if (BX.browser.IsIE()) o = JSON.stringify(o);
21435			console.log(o);
21436		} catch(e) {}
21437	}
21438};
21439
21440BX.ajax.FormData.prototype.isSupported = function()
21441{
21442	var f = {};
21443	f.fileReader = (window.FileReader && window.FileReader.prototype.readAsBinaryString);
21444	f.readFormData = f.sendFormData = !!(window.FormData);
21445	f.supported = !!(f.readFormData && f.sendFormData);
21446	this.features = f;
21447	this.log('features:');
21448	this.log(f);
21449
21450	return f.supported;
21451};
21452
21453BX.ajax.FormData.prototype.append = function(name, value)
21454{
21455	if (typeof(value) === 'object') { // seems to be files element
21456		this.files.push({'name': name, 'value':value});
21457	} else {
21458		this.elements.push({'name': name, 'value':value});
21459	}
21460};
21461
21462BX.ajax.FormData.prototype.send = function(url, callbackOk, callbackProgress, callbackError)
21463{
21464	this.log('FD send');
21465	this.xhr = BX.ajax({
21466			'method': 'POST',
21467			'dataType': 'html',
21468			'url': url,
21469			'onsuccess': callbackOk,
21470			'onfailure': callbackError,
21471			'start': false,
21472			'preparePost':false
21473		});
21474
21475	if (callbackProgress)
21476	{
21477		this.xhr.upload.addEventListener(
21478			'progress',
21479			function(e) {
21480				if (e.lengthComputable)
21481					callbackProgress(e.loaded / (e.total || e.totalSize));
21482			},
21483			false
21484		);
21485	}
21486
21487	if (this.features.readFormData && this.features.sendFormData)
21488	{
21489		var fd = new FormData();
21490		this.log('use browser formdata');
21491		for (var i in this.elements)
21492		{
21493			if(this.elements.hasOwnProperty(i))
21494				fd.append(this.elements[i].name,this.elements[i].value);
21495		}
21496		for (i in this.files)
21497		{
21498			if(this.files.hasOwnProperty(i))
21499				fd.append(this.files[i].name, this.files[i].value);
21500		}
21501		this.xhr.send(fd);
21502	}
21503
21504	return this.xhr;
21505};
21506
21507BX.addCustomEvent('onAjaxFailure', BX.debug);
21508})(window);
21509
21510
21511
21512(function (exports,main_core) {
21513	'use strict';
21514
21515	var LazyLoad = {
21516	  observer: null,
21517	  images: {},
21518	  imageStatus: {
21519	    hidden: -2,
21520	    error: -1,
21521	    "undefined": 0,
21522	    inited: 1,
21523	    loaded: 2
21524	  },
21525	  imageTypes: {
21526	    image: 1,
21527	    background: 2
21528	  },
21529	  initObserver: function initObserver() {
21530	    this.observer = new IntersectionObserver(this.onIntersection.bind(this), {
21531	      rootMargin: '20% 0% 20% 0%',
21532	      threshold: 0.10
21533	    });
21534	  },
21535	  onIntersection: function onIntersection(entries) {
21536	    entries.forEach(function (entry) {
21537	      if (entry.isIntersecting) {
21538	        this.showImage(entry.target);
21539	      }
21540	    }.bind(this));
21541	  },
21542	  registerImage: function registerImage(id, isImageVisibleCallback, options) {
21543	    if (this.observer === null) {
21544	      this.initObserver();
21545	    }
21546
21547	    options = options || {};
21548
21549	    if (!main_core.Type.isStringFilled(id)) {
21550	      return;
21551	    }
21552
21553	    if (main_core.Type.isObject(this.images[id])) {
21554	      return;
21555	    }
21556
21557	    var element = document.getElementById(id);
21558
21559	    if (!main_core.Type.isDomNode(element)) {
21560	      return;
21561	    }
21562
21563	    this.observer.observe(element);
21564	    this.images[id] = {
21565	      id: id,
21566	      node: null,
21567	      src: null,
21568	      dataSrcName: options.dataSrcName || 'src',
21569	      type: null,
21570	      func: main_core.Type.isFunction(isImageVisibleCallback) ? isImageVisibleCallback : null,
21571	      status: this.imageStatus.undefined
21572	    };
21573	  },
21574	  registerImages: function registerImages(ids, isImageVisibleCallback, options) {
21575	    if (main_core.Type.isArray(ids)) {
21576	      for (var i = 0, length = ids.length; i < length; i++) {
21577	        this.registerImage(ids[i], isImageVisibleCallback, options);
21578	      }
21579	    }
21580	  },
21581	  showImage: function showImage(imageNode) {
21582	    var imageNodeId = imageNode.id;
21583
21584	    if (!main_core.Type.isStringFilled(imageNodeId)) {
21585	      return;
21586	    }
21587
21588	    var image = this.images[imageNodeId];
21589
21590	    if (!main_core.Type.isPlainObject(image)) {
21591	      return;
21592	    }
21593
21594	    if (image.status == this.imageStatus.undefined) {
21595	      this.initImage(image);
21596	    }
21597
21598	    if (image.status !== this.imageStatus.inited) {
21599	      return;
21600	    }
21601
21602	    if (!image.node || !image.node.parentNode) {
21603	      image.node = null;
21604	      image.status = this.imageStatus.error;
21605	      return;
21606	    }
21607
21608	    if (image.type == this.imageTypes.image) {
21609	      image.node.src = image.src;
21610	    } else {
21611	      image.node.style.backgroundImage = "url('" + image.src + "')";
21612	    }
21613
21614	    image.node.dataset[image.dataSrcName] = "";
21615	    image.status = this.imageStatus.loaded;
21616	  },
21617	  showImages: function showImages(checkOwnVisibility) {
21618	    checkOwnVisibility = checkOwnVisibility !== false;
21619
21620	    for (var id in this.images) {
21621	      if (!this.images.hasOwnProperty(id)) {
21622	        continue;
21623	      }
21624
21625	      var image = this.images[id];
21626
21627	      if (image.status == this.imageStatus.undefined) {
21628	        this.initImage(image);
21629	      }
21630
21631	      if (image.status !== this.imageStatus.inited) {
21632	        continue;
21633	      }
21634
21635	      if (!image.node || !image.node.parentNode) {
21636	        image.node = null;
21637	        image.status = this.imageStatus.error;
21638	        continue;
21639	      }
21640
21641	      var isImageVisible = true;
21642
21643	      if (checkOwnVisibility && main_core.Type.isFunction(image.func)) {
21644	        isImageVisible = image.func(image);
21645	      }
21646
21647	      if (isImageVisible === true && this.isElementVisibleOnScreen(image.node)) {
21648	        if (image.type == this.imageTypes.image) {
21649	          image.node.src = image.src;
21650	        } else {
21651	          image.node.style.backgroundImage = "url('" + image.src + "')";
21652	        }
21653
21654	        image.node.dataset[image.dataSrcName] = "";
21655	        image.status = this.imageStatus.loaded;
21656	      }
21657	    }
21658	  },
21659	  initImage: function initImage(image) {
21660	    image.status = this.imageStatus.error;
21661	    var node = document.getElementById(image.id);
21662
21663	    if (!main_core.Type.isDomNode(node)) {
21664	      return;
21665	    }
21666
21667	    var src = node.dataset[image.dataSrcName];
21668
21669	    if (main_core.Type.isStringFilled(src)) {
21670	      image.node = node;
21671	      image.src = src;
21672	      image.status = this.imageStatus.inited;
21673	      image.type = image.node.tagName.toLowerCase() == "img" ? this.imageTypes.image : this.imageTypes.background;
21674	    }
21675	  },
21676	  isElementVisibleOnScreen: function isElementVisibleOnScreen(element) {
21677	    var coords = this.getElementCoords(element);
21678	    var windowTop = window.pageYOffset || document.documentElement.scrollTop;
21679	    var windowBottom = windowTop + document.documentElement.clientHeight;
21680	    coords.bottom = coords.top + element.offsetHeight;
21681	    return coords.top > windowTop && coords.top < windowBottom || // topVisible
21682	    coords.bottom < windowBottom && coords.bottom > windowTop // bottomVisible
21683	    ;
21684	  },
21685	  isElementVisibleOn2Screens: function isElementVisibleOn2Screens(element) {
21686	    var windowHeight = document.documentElement.clientHeight;
21687	    var windowTop = window.pageYOffset || document.documentElement.scrollTop;
21688	    var windowBottom = windowTop + windowHeight;
21689	    var coords = this.getElementCoords(element);
21690	    coords.bottom = coords.top + element.offsetHeight;
21691	    windowTop -= windowHeight;
21692	    windowBottom += windowHeight;
21693	    return coords.top > windowTop && coords.top < windowBottom || // topVisible
21694	    coords.bottom < windowBottom && coords.bottom > windowTop // bottomVisible
21695	    ;
21696	  },
21697	  getElementCoords: function getElementCoords(element) {
21698	    var box = element.getBoundingClientRect();
21699	    return {
21700	      originTop: box.top,
21701	      originLeft: box.left,
21702	      top: box.top + window.pageYOffset,
21703	      left: box.left + window.pageXOffset
21704	    };
21705	  },
21706	  onScroll: function onScroll() {},
21707	  clearImages: function clearImages() {
21708	    this.images = [];
21709	  }
21710	};
21711
21712	exports.LazyLoad = LazyLoad;
21713
21714}((this.BX = this.BX || {}),BX));
21715
21716
21717
21718(function (exports) {
21719	'use strict';
21720
21721	var ParamBag = /*#__PURE__*/function () {
21722	  function ParamBag() {
21723	    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
21724	    babelHelpers.classCallCheck(this, ParamBag);
21725
21726	    if (!!params && babelHelpers.typeof(params) === 'object') {
21727	      this.params = new Map(Object.entries(params));
21728	    } else {
21729	      this.params = new Map();
21730	    }
21731	  }
21732
21733	  babelHelpers.createClass(ParamBag, [{
21734	    key: "getParam",
21735	    value: function getParam(key) {
21736	      var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
21737
21738	      if (this.params.has(key)) {
21739	        return this.params.get(key);
21740	      }
21741
21742	      return defaultValue;
21743	    }
21744	  }, {
21745	    key: "setParam",
21746	    value: function setParam(key, value) {
21747	      this.params.set(key, value);
21748	    }
21749	  }, {
21750	    key: "clear",
21751	    value: function clear() {
21752	      this.params.clear();
21753	    }
21754	  }], [{
21755	    key: "create",
21756	    value: function create() {
21757	      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
21758	      return new ParamBag(params);
21759	    }
21760	  }]);
21761	  return ParamBag;
21762	}();
21763
21764	exports.ParamBag = ParamBag;
21765
21766}((this.BX = this.BX || {})));
21767
21768
21769
21770(function() {
21771	BX.FixFontSize = function(params)
21772	{
21773		var widthNode, computedStyles, width;
21774
21775		this.node = null;
21776		this.prevWindowSize = 0;
21777		this.prevWrapperSize = 0;
21778		this.mainWrapper = null;
21779		this.textWrapper = null;
21780		this.objList = params.objList;
21781		this.minFontSizeList = [];
21782		this.minFontSize = 0;
21783
21784		if (params.onresize)
21785		{
21786			this.prevWindowSize = window.innerWidth || document.documentElement.clientWidth;
21787			BX.bind(window, 'resize', BX.throttle(this.onResize, 350, this));
21788		}
21789
21790		if (params.onAdaptiveResize)
21791		{
21792			widthNode = this.objList[0].scaleBy || this.objList[0].node;
21793			computedStyles = getComputedStyle(widthNode);
21794			this.prevWrapperSize = parseInt(computedStyles["width"]) - parseInt(computedStyles["paddingLeft"]) - parseInt(computedStyles["paddingRight"]);
21795			BX.bind(window, 'resize', BX.throttle(this.onAdaptiveResize, 350, this));
21796		}
21797
21798		this.createTestNodes();
21799		this.decrease();
21800	};
21801
21802	BX.FixFontSize.prototype =
21803		{
21804			createTestNodes: function()
21805			{
21806				this.textWrapper = BX.create('div',{
21807					style : {
21808						display : 'inline-block',
21809						whiteSpace : 'nowrap'
21810					}
21811				});
21812
21813				this.mainWrapper = BX.create('div',{
21814					style : {
21815						height : 0,
21816						overflow : 'hidden'
21817					},
21818					children : [this.textWrapper]
21819				});
21820
21821			},
21822			insertTestNodes: function()
21823			{
21824				document.body.appendChild(this.mainWrapper);
21825			},
21826			removeTestNodes: function()
21827			{
21828				document.body.removeChild(this.mainWrapper);
21829			},
21830			decrease: function()
21831			{
21832				var width,
21833					fontSize,
21834					widthNode,
21835					computedStyles;
21836
21837				this.insertTestNodes();
21838
21839				for(var i=this.objList.length-1; i>=0; i--)
21840				{
21841					widthNode = this.objList[i].scaleBy || this.objList[i].node;
21842					computedStyles = getComputedStyle(widthNode);
21843					width  = parseInt(computedStyles["width"]) - parseInt(computedStyles["paddingLeft"]) - parseInt(computedStyles["paddingRight"]);
21844					fontSize = parseInt(getComputedStyle(this.objList[i].node)["font-size"]);
21845
21846					this.textWrapperSetStyle(this.objList[i].node);
21847
21848					if(this.textWrapperInsertText(this.objList[i].node))
21849					{
21850						while(this.textWrapper.offsetWidth > width && fontSize > 0)
21851						{
21852							this.textWrapper.style.fontSize = --fontSize + 'px';
21853						}
21854
21855						if(this.objList[i].smallestValue)
21856						{
21857							this.minFontSize = this.minFontSize ? Math.min(this.minFontSize, fontSize) : fontSize;
21858
21859							this.minFontSizeList.push(this.objList[i].node)
21860						}
21861						else
21862						{
21863							this.objList[i].node.style.fontSize = fontSize + 'px';
21864						}
21865					}
21866				}
21867
21868				if(this.minFontSizeList.length > 0)
21869					this.setMinFont();
21870
21871				this.removeTestNodes();
21872
21873			},
21874			increase: function()
21875			{
21876				this.insertTestNodes();
21877				var width,
21878					fontSize,
21879					widthNode,
21880					computedStyles;
21881
21882				this.insertTestNodes();
21883
21884				for(var i=this.objList.length-1; i>=0; i--)
21885				{
21886					widthNode = this.objList[i].scaleBy || this.objList[i].node;
21887					computedStyles = getComputedStyle(widthNode);
21888					width  = parseInt(computedStyles["width"]) - parseInt(computedStyles["paddingLeft"]) - parseInt(computedStyles["paddingRight"]);
21889					fontSize = parseInt(getComputedStyle(this.objList[i].node)["font-size"]);
21890
21891					this.textWrapperSetStyle(this.objList[i].node);
21892
21893					if(this.textWrapperInsertText(this.objList[i].node))
21894					{
21895						while(this.textWrapper.offsetWidth < width && fontSize < this.objList[i].maxFontSize)
21896						{
21897							this.textWrapper.style.fontSize = ++fontSize + 'px';
21898						}
21899
21900						fontSize--;
21901
21902						if(this.objList[i].smallestValue)
21903						{
21904							this.minFontSize = this.minFontSize ? Math.min(this.minFontSize, fontSize) : fontSize;
21905
21906							this.minFontSizeList.push(this.objList[i].node)
21907						}
21908						else
21909						{
21910							this.objList[i].node.style.fontSize = fontSize + 'px';
21911						}
21912					}
21913				}
21914
21915				if(this.minFontSizeList.length > 0)
21916					this.setMinFont();
21917
21918				this.removeTestNodes();
21919			},
21920			setMinFont : function()
21921			{
21922				for(var i = this.minFontSizeList.length-1; i>=0; i--)
21923				{
21924					this.minFontSizeList[i].style.fontSize = this.minFontSize + 'px';
21925				}
21926
21927				this.minFontSize = 0;
21928			},
21929			onResize : function()
21930			{
21931				var width = window.innerWidth || document.documentElement.clientWidth;
21932
21933				if(this.prevWindowSize > width)
21934					this.decrease();
21935
21936				else if (this.prevWindowSize < width)
21937					this.increase();
21938
21939				this.prevWindowSize = width;
21940			},
21941			onAdaptiveResize : function()
21942			{
21943				var widthNode = this.objList[0].scaleBy || this.objList[0].node,
21944					computedStyles = getComputedStyle(widthNode),
21945					width = parseInt(computedStyles["width"]) - parseInt(computedStyles["paddingLeft"]) - parseInt(computedStyles["paddingRight"]);
21946
21947				if (this.prevWrapperSize > width)
21948					this.decrease();
21949				else if (this.prevWrapperSize < width)
21950					this.increase();
21951
21952				this.prevWrapperSize = width;
21953			},
21954			textWrapperInsertText : function(node)
21955			{
21956				if(node.textContent){
21957					this.textWrapper.textContent = node.textContent;
21958					return true;
21959				}
21960				else if(node.innerText)
21961				{
21962					this.textWrapper.innerText = node.innerText;
21963					return true;
21964				}
21965				else {
21966					return false;
21967				}
21968			},
21969			textWrapperSetStyle : function(node)
21970			{
21971				this.textWrapper.style.fontFamily = getComputedStyle(node)["font-family"];
21972				this.textWrapper.style.fontSize = getComputedStyle(node)["font-size"];
21973				this.textWrapper.style.fontStyle = getComputedStyle(node)["font-style"];
21974				this.textWrapper.style.fontWeight = getComputedStyle(node)["font-weight"];
21975				this.textWrapper.style.lineHeight = getComputedStyle(node)["line-height"];
21976			}
21977		};
21978
21979	BX.FixFontSize.init = function(params)
21980	{
21981		return new BX.FixFontSize(params);
21982	};
21983})();
21984
21985})();
21986//# sourceMappingURL=core.js.map

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