@syncfusion/ej2-base 20.1.56 → 20.1.58-106983

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/.eslintrc.json +16 -1
  2. package/CHANGELOG.md +108 -4
  3. package/{README.md → ReadMe.md} +5 -6
  4. package/bin/syncfusion-license.js +2 -0
  5. package/dist/ej2-base.min.js +1 -0
  6. package/dist/ej2-base.umd.min.js +1 -10
  7. package/dist/ej2-base.umd.min.js.map +1 -1
  8. package/dist/es6/ej2-base.es2015.js +671 -315
  9. package/dist/es6/ej2-base.es2015.js.map +1 -1
  10. package/dist/es6/ej2-base.es5.js +448 -233
  11. package/dist/es6/ej2-base.es5.js.map +1 -1
  12. package/dist/global/ej2-base.min.js +1 -10
  13. package/dist/global/ej2-base.min.js.map +1 -1
  14. package/dist/global/index.d.ts +0 -9
  15. package/e2e/modified-protractor/protractor.config.js +316 -0
  16. package/e2e/protractor.config.js +56 -24
  17. package/helpers/e2e/base.js +62 -52
  18. package/helpers/e2e/index.js +8 -6
  19. package/package.json +78 -158
  20. package/src/animation.d.ts +13 -0
  21. package/src/animation.js +31 -4
  22. package/src/base.js +12 -12
  23. package/src/browser.js +9 -9
  24. package/src/child-property.js +10 -10
  25. package/src/component-model.d.ts +1 -1
  26. package/src/component.d.ts +1 -1
  27. package/src/component.js +30 -11
  28. package/src/dom.js +10 -10
  29. package/src/draggable-model.d.ts +21 -8
  30. package/src/draggable.d.ts +31 -6
  31. package/src/draggable.js +118 -21
  32. package/src/event-handler.js +6 -6
  33. package/src/hijri-parser.js +1 -1
  34. package/src/intl/date-parser.js +4 -4
  35. package/src/intl/intl-base.js +4 -4
  36. package/src/intl/number-formatter.js +3 -3
  37. package/src/intl/parser-base.js +2 -2
  38. package/src/keyboard.js +4 -4
  39. package/src/l10n.js +5 -5
  40. package/src/module-loader.js +2 -2
  41. package/src/notify-property-change.js +28 -28
  42. package/src/observer.js +9 -9
  43. package/src/sanitize-helper.js +3 -3
  44. package/src/template-engine.js +14 -14
  45. package/src/template.js +3 -2
  46. package/src/touch.js +4 -0
  47. package/src/util.js +30 -28
  48. package/src/validate-lic.d.ts +4 -0
  49. package/src/validate-lic.js +107 -42
  50. package/styles/_all.scss +1 -2
  51. package/styles/_bootstrap4-definition.scss +0 -1
  52. package/styles/_fusionnew-dark-definition.scss +9 -0
  53. package/styles/_fusionnew-definition.scss +9 -0
  54. package/styles/_highcontrast-light-definition.scss +0 -1
  55. package/styles/_material-dark-definition.scss +1 -1
  56. package/styles/_material-definition.scss +1 -1
  57. package/styles/_material3-dark-definition.scss +10 -0
  58. package/styles/_material3-definition.scss +9 -0
  59. package/styles/_tailwind-dark-definition.scss +1 -1
  60. package/styles/_tailwind-definition.scss +1 -1
  61. package/styles/animation/_all.scss +31 -30
  62. package/styles/bootstrap-dark.css +157 -1
  63. package/styles/bootstrap.css +157 -1
  64. package/styles/bootstrap4.css +157 -1
  65. package/styles/bootstrap5-dark.css +157 -1
  66. package/styles/bootstrap5.css +157 -1
  67. package/styles/common/_core.scss +16 -4
  68. package/styles/definition/_bootstrap-dark.scss +114 -0
  69. package/styles/definition/_bootstrap.scss +115 -1
  70. package/styles/definition/_bootstrap4.scss +114 -0
  71. package/styles/definition/_bootstrap5-dark.scss +132 -24
  72. package/styles/definition/_bootstrap5.scss +124 -14
  73. package/styles/definition/_fabric-dark.scss +114 -0
  74. package/styles/definition/_fabric.scss +114 -0
  75. package/styles/definition/_fluent-dark.scss +144 -22
  76. package/styles/definition/_fluent.scss +135 -14
  77. package/styles/definition/_fusionnew-dark.scss +360 -0
  78. package/styles/definition/_fusionnew.scss +361 -0
  79. package/styles/definition/_highcontrast-light.scss +112 -0
  80. package/styles/definition/_highcontrast.scss +114 -0
  81. package/styles/definition/_material-dark.scss +114 -0
  82. package/styles/definition/_material.scss +117 -0
  83. package/styles/definition/_material3-dark.scss +421 -0
  84. package/styles/definition/_material3.scss +361 -0
  85. package/styles/definition/_tailwind-dark.scss +128 -17
  86. package/styles/definition/_tailwind.scss +130 -19
  87. package/styles/fabric-dark.css +161 -2
  88. package/styles/fabric.css +161 -2
  89. package/styles/fluent-dark.css +157 -1
  90. package/styles/fluent.css +157 -1
  91. package/styles/highcontrast-light.css +164 -2
  92. package/styles/highcontrast.css +164 -2
  93. package/styles/material-dark.css +157 -1
  94. package/styles/material.css +157 -1
  95. package/styles/offline-theme/material-dark.css +2625 -0
  96. package/styles/offline-theme/material.css +2625 -0
  97. package/styles/offline-theme/tailwind-dark.css +1899 -0
  98. package/styles/offline-theme/tailwind.css +1899 -0
  99. package/styles/tailwind-dark.css +157 -1
  100. package/styles/tailwind.css +157 -1
@@ -66,7 +66,7 @@ function getValue(nameSpace, obj) {
66
66
  let value = obj;
67
67
  const splits = nameSpace.replace(/\[/g, '.').replace(/\]/g, '').split('.');
68
68
  for (let i = 0; i < splits.length && !isUndefined(value); i++) {
69
- value = value[splits[i]];
69
+ value = value[splits[parseInt(i.toString(), 10)]];
70
70
  }
71
71
  return value;
72
72
  }
@@ -90,14 +90,14 @@ function setValue(nameSpace, value, obj) {
90
90
  const length = keys.length;
91
91
  let key;
92
92
  for (i = 0; i < length; i++) {
93
- key = keys[i];
93
+ key = keys[parseInt(i.toString(), 10)];
94
94
  if (i + 1 === length) {
95
- fromObj[key] = value === undefined ? {} : value;
95
+ fromObj[`${key}`] = value === undefined ? {} : value;
96
96
  }
97
- else if (isNullOrUndefined(fromObj[key])) {
98
- fromObj[key] = {};
97
+ else if (isNullOrUndefined(fromObj[`${key}`])) {
98
+ fromObj[`${key}`] = {};
99
99
  }
100
- fromObj = fromObj[key];
100
+ fromObj = fromObj[`${key}`];
101
101
  }
102
102
  return start;
103
103
  }
@@ -111,12 +111,13 @@ function setValue(nameSpace, value, obj) {
111
111
  */
112
112
  // eslint-disable-next-line
113
113
  function deleteObject(obj, key) {
114
- delete obj[key];
114
+ delete obj[`${key}`];
115
115
  }
116
116
  /**
117
117
  *@private
118
118
  */
119
- const containerObject = typeof window !== "undefined" ? window : {};
119
+ // eslint-disable-next-line
120
+ const containerObject = typeof window !== 'undefined' ? window : {};
120
121
  /**
121
122
  * Check weather the given argument is only object.
122
123
  *
@@ -157,12 +158,12 @@ function merge(source, destination) {
157
158
  const keys = Object.keys(destination);
158
159
  const deepmerge = 'deepMerge';
159
160
  for (const key of keys) {
160
- if (!isNullOrUndefined(temrObj[deepmerge]) && (temrObj[deepmerge].indexOf(key) !== -1) &&
161
- (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {
162
- extend(temrObj[key], temrObj[key], tempProp[key], true);
161
+ if (!isNullOrUndefined(temrObj[`${deepmerge}`]) && (temrObj[`${deepmerge}`].indexOf(key) !== -1) &&
162
+ (isObject(tempProp[`${key}`]) || Array.isArray(tempProp[`${key}`]))) {
163
+ extend(temrObj[`${key}`], temrObj[`${key}`], tempProp[`${key}`], true);
163
164
  }
164
165
  else {
165
- temrObj[key] = tempProp[key];
166
+ temrObj[`${key}`] = tempProp[`${key}`];
166
167
  }
167
168
  }
168
169
  }
@@ -191,8 +192,8 @@ function extend(copied, first, second, deep) {
191
192
  // eslint-disable-next-line
192
193
  let obj1 = arguments[i];
193
194
  Object.keys(obj1).forEach((key) => {
194
- const src = result[key];
195
- const copy = obj1[key];
195
+ const src = result[`${key}`];
196
+ const copy = obj1[`${key}`];
196
197
  let clone;
197
198
  const isArrayChanged = Array.isArray(copy) && Array.isArray(src) && (copy.length !== src.length);
198
199
  // eslint-disable-next-line
@@ -205,17 +206,18 @@ function extend(copied, first, second, deep) {
205
206
  extend(clone, {}, copy, deep);
206
207
  }
207
208
  else {
208
- result[key] = extend(clone, {}, copy, deep);
209
+ result[`${key}`] = extend(clone, {}, copy, deep);
209
210
  }
210
211
  }
211
212
  else {
212
213
  /* istanbul ignore next */
213
214
  clone = isBlazor() ? src && Object.keys(copy).length : src ? src : [];
214
- result[key] = extend([], clone, copy, deep);
215
+ // eslint-disable-next-line
216
+ result[`${key}`] = extend([], clone, copy, (clone && clone.length) || (copy && copy.length));
215
217
  }
216
218
  }
217
219
  else {
218
- result[key] = copy;
220
+ result[`${key}`] = copy;
219
221
  }
220
222
  });
221
223
  }
@@ -285,7 +287,7 @@ function queryParams(data) {
285
287
  const array = [];
286
288
  const keys = Object.keys(data);
287
289
  for (const key of keys) {
288
- array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));
290
+ array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[`${key}`]));
289
291
  }
290
292
  return array.join('&');
291
293
  }
@@ -355,7 +357,7 @@ function print(element, printWindow) {
355
357
  const blinks = [].slice.call(document.getElementsByTagName('body')[0].querySelectorAll('link, style'));
356
358
  if (blinks.length) {
357
359
  for (let l = 0, len = blinks.length; l < len; l++) {
358
- links.push(blinks[l]);
360
+ links.push(blinks[parseInt(l.toString(), 10)]);
359
361
  }
360
362
  }
361
363
  let reference = '';
@@ -364,7 +366,7 @@ function print(element, printWindow) {
364
366
  }
365
367
  div.appendChild(element.cloneNode(true));
366
368
  for (let i = 0, len = links.length; i < len; i++) {
367
- reference += links[i].outerHTML;
369
+ reference += links[parseInt(i.toString(), 10)].outerHTML;
368
370
  }
369
371
  printWindow.document.write('<!DOCTYPE html> <html><head>' + reference + '</head><body>' + div.innerHTML +
370
372
  '<script> (function() { window.ready = true; })(); </script>' + '</body></html>');
@@ -421,8 +423,8 @@ function isBlazor() {
421
423
  */
422
424
  function getElement(element) {
423
425
  const xPath = 'xPath';
424
- if (!(element instanceof Node) && isBlazor() && !isNullOrUndefined(element[xPath])) {
425
- return document.evaluate(element[xPath], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
426
+ if (!(element instanceof Node) && isBlazor() && !isNullOrUndefined(element[`${xPath}`])) {
427
+ return document.evaluate(element[`${xPath}`], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
426
428
  }
427
429
  return element;
428
430
  }
@@ -438,8 +440,8 @@ function getElement(element) {
438
440
  function getInstance(element, component) {
439
441
  // eslint-disable-next-line
440
442
  let elem = (typeof (element) === 'string') ? document.querySelector(element) : element;
441
- if (elem[instances]) {
442
- for (const inst of elem[instances]) {
443
+ if (elem[`${instances}`]) {
444
+ for (const inst of elem[`${instances}`]) {
443
445
  if (inst instanceof component) {
444
446
  return inst;
445
447
  }
@@ -458,11 +460,11 @@ function getInstance(element, component) {
458
460
  function addInstance(element, instance) {
459
461
  // eslint-disable-next-line
460
462
  let elem = (typeof (element) === 'string') ? document.querySelector(element) : element;
461
- if (elem[instances]) {
462
- elem[instances].push(instance);
463
+ if (elem[`${instances}`]) {
464
+ elem[`${instances}`].push(instance);
463
465
  }
464
466
  else {
465
- elem[instances] = [instance];
467
+ elem[`${instances}`] = [instance];
466
468
  }
467
469
  }
468
470
  /**
@@ -489,7 +491,7 @@ function uniqueID() {
489
491
  function combineArray(num) {
490
492
  let ret = '';
491
493
  for (let i = 0; i < 5; i++) {
492
- ret += (i ? ',' : '') + num[i];
494
+ ret += (i ? ',' : '') + num[parseInt(i.toString(), 10)];
493
495
  }
494
496
  return ret;
495
497
  }
@@ -596,10 +598,10 @@ class ParserBase {
596
598
  let ret = '';
597
599
  for (let i = 0; i < len; i++) {
598
600
  if (i !== len - 1) {
599
- ret += val[i] + '|';
601
+ ret += val[parseInt(i.toString(), 10)] + '|';
600
602
  }
601
603
  else {
602
- ret += val[i];
604
+ ret += val[parseInt(i.toString(), 10)];
603
605
  }
604
606
  }
605
607
  return ret;
@@ -1009,7 +1011,7 @@ var HijriParser;
1009
1011
  const tempDay = z - Math.floor(29.5001 * im - 29);
1010
1012
  let i = 0;
1011
1013
  for (; i < dateCorrection.length; i++) {
1012
- if (dateCorrection[i] > modifiedJulianDate) {
1014
+ if (dateCorrection[parseInt(i.toString(), 10)] > modifiedJulianDate) {
1013
1015
  break;
1014
1016
  }
1015
1017
  }
@@ -1365,7 +1367,7 @@ const errorText = {
1365
1367
  'ms': 'minimumSignificantDigits',
1366
1368
  'ls': 'maximumSignificantDigits',
1367
1369
  'mf': 'minimumFractionDigits',
1368
- 'lf': 'maximumFractionDigits',
1370
+ 'lf': 'maximumFractionDigits'
1369
1371
  };
1370
1372
  const percentSign = 'percentSign';
1371
1373
  const minusSign = 'minusSign';
@@ -1396,9 +1398,9 @@ class NumberFormat {
1396
1398
  dOptions.currencySymbol = isBlazor() ? getValue('currencySymbol', numObject) : IntlBase.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode, option.altSymbol);
1397
1399
  /* eslint-disable @typescript-eslint/no-explicit-any */
1398
1400
  dOptions.percentSymbol = isBlazor() ? getValue('numberSymbols.percentSign', numObject) :
1399
- dOptions.numberMapper.numberSymbols[percentSign];
1401
+ dOptions.numberMapper.numberSymbols[`${percentSign}`];
1400
1402
  dOptions.minusSymbol = isBlazor() ? getValue('numberSymbols.minusSign', numObject) :
1401
- dOptions.numberMapper.numberSymbols[minusSign];
1403
+ dOptions.numberMapper.numberSymbols[`${minusSign}`];
1402
1404
  const symbols = dOptions.numberMapper.numberSymbols;
1403
1405
  if ((option.format) && !(IntlBase.formatRegex.test(option.format))) {
1404
1406
  cOptions = IntlBase.customFormat(option.format, dOptions, dependable.numericObject);
@@ -1746,7 +1748,7 @@ class DateParser {
1746
1748
  let numMapper = isBlazor() ? dependable.parserObject.numbers :
1747
1749
  ParserBase.getNumberMapper(dependable.parserObject, ParserBase.getNumberingSystem(cldr));
1748
1750
  for (let i = 0; i < length; i++) {
1749
- const str = patternMatch[i];
1751
+ const str = patternMatch[parseInt(i.toString(), 10)];
1750
1752
  const len = str.length;
1751
1753
  const char = (str[0] === 'K') ? 'h' : str[0];
1752
1754
  let isNumber;
@@ -1876,7 +1878,7 @@ class DateParser {
1876
1878
  break;
1877
1879
  }
1878
1880
  if (canUpdate) {
1879
- parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };
1881
+ parseOptions.evalposition[`${charKey}`] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };
1880
1882
  }
1881
1883
  if (i === length - 1 && !isNullOrUndefined(regexString)) {
1882
1884
  parseOptions.parserRegex = new RegExp('^' + regexString + '$', 'i');
@@ -1998,7 +2000,7 @@ class DateParser {
1998
2000
  else {
1999
2001
  const props = Object.keys(parseOptions.evalposition);
2000
2002
  for (const prop of props) {
2001
- const curObject = parseOptions.evalposition[prop];
2003
+ const curObject = parseOptions.evalposition[`${prop}`];
2002
2004
  let matchString = matches[curObject.pos];
2003
2005
  if (curObject.isNumber) {
2004
2006
  // eslint-disable-next-line
@@ -2018,7 +2020,7 @@ class DateParser {
2018
2020
  val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);
2019
2021
  }
2020
2022
  if (!isNullOrUndefined(val)) {
2021
- retOptions[prop] = val;
2023
+ retOptions[`${prop}`] = val;
2022
2024
  }
2023
2025
  }
2024
2026
  else {
@@ -2219,7 +2221,7 @@ class NumberParser {
2219
2221
  }
2220
2222
  }
2221
2223
  static convertMaxFracDigits(value, options, ret, isNegative) {
2222
- let decimalSplitValue = value.split('.');
2224
+ const decimalSplitValue = value.split('.');
2223
2225
  if (decimalSplitValue[1] && decimalSplitValue[1].length > options.maximumFractionDigits) {
2224
2226
  ret = +(ret.toFixed(options.custom ?
2225
2227
  (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.maximumFractionDigits));
@@ -2252,17 +2254,17 @@ class Observer {
2252
2254
  }
2253
2255
  const cntxt = context || this.context;
2254
2256
  if (this.notExist(property)) {
2255
- this.boundedEvents[property] = [{ handler: handler, context: cntxt }];
2257
+ this.boundedEvents[`${property}`] = [{ handler: handler, context: cntxt }];
2256
2258
  return;
2257
2259
  }
2258
2260
  if (!isNullOrUndefined(id)) {
2259
2261
  if (this.ranArray.indexOf(id) === -1) {
2260
2262
  this.ranArray.push(id);
2261
- this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });
2263
+ this.boundedEvents[`${property}`].push({ handler: handler, context: cntxt, id: id });
2262
2264
  }
2263
2265
  }
2264
- else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {
2265
- this.boundedEvents[property].push({ handler: handler, context: cntxt });
2266
+ else if (!this.isHandlerPresent(this.boundedEvents[`${property}`], handler)) {
2267
+ this.boundedEvents[`${property}`].push({ handler: handler, context: cntxt });
2266
2268
  }
2267
2269
  }
2268
2270
  /**
@@ -2281,7 +2283,7 @@ class Observer {
2281
2283
  if (handler) {
2282
2284
  for (let i = 0; i < curObject.length; i++) {
2283
2285
  if (id) {
2284
- if (curObject[i].id === id) {
2286
+ if (curObject[parseInt(i.toString(), 10)].id === id) {
2285
2287
  curObject.splice(i, 1);
2286
2288
  const indexLocation = this.ranArray.indexOf(id);
2287
2289
  if (indexLocation !== -1) {
@@ -2290,14 +2292,14 @@ class Observer {
2290
2292
  break;
2291
2293
  }
2292
2294
  }
2293
- else if (handler === curObject[i].handler) {
2295
+ else if (handler === curObject[parseInt(i.toString(), 10)].handler) {
2294
2296
  curObject.splice(i, 1);
2295
2297
  break;
2296
2298
  }
2297
2299
  }
2298
2300
  }
2299
2301
  else {
2300
- delete this.boundedEvents[property];
2302
+ delete this.boundedEvents[`${property}`];
2301
2303
  }
2302
2304
  }
2303
2305
  /**
@@ -2321,7 +2323,7 @@ class Observer {
2321
2323
  }
2322
2324
  const blazor = 'Blazor';
2323
2325
  const curObject = getValue(property, this.boundedEvents).slice(0);
2324
- if (window[blazor]) {
2326
+ if (window[`${blazor}`]) {
2325
2327
  return this.blazorCallback(curObject, argument, successHandler, errorHandler, 0);
2326
2328
  }
2327
2329
  else {
@@ -2336,7 +2338,7 @@ class Observer {
2336
2338
  blazorCallback(objs, argument, successHandler, errorHandler, index) {
2337
2339
  const isTrigger = index === objs.length - 1;
2338
2340
  if (index < objs.length) {
2339
- const obj = objs[index];
2341
+ const obj = objs[parseInt(index.toString(), 10)];
2340
2342
  const promise = obj.handler.call(obj.context, argument);
2341
2343
  if (promise && typeof promise.then === 'function') {
2342
2344
  if (!successHandler) {
@@ -3633,7 +3635,7 @@ var IntlBase;
3633
3635
  function isCurrencyPercent(parts, actual, symbol) {
3634
3636
  const options = { nlead: parts[0], nend: parts[1] };
3635
3637
  for (let i = 0; i < 2; i++) {
3636
- const part = parts[i];
3638
+ const part = parts[parseInt(i.toString(), 10)];
3637
3639
  const loc = part.indexOf(actual);
3638
3640
  if ((loc !== -1) && ((loc < part.indexOf('\'')) || (loc > part.lastIndexOf('\'')))) {
3639
3641
  // eslint-disable-next-line
@@ -3852,7 +3854,7 @@ var IntlBase;
3852
3854
  integer = hash + integer;
3853
3855
  pattern = '';
3854
3856
  for (let x = integer.length - 1; x > 0; x = x - 3) {
3855
- pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;
3857
+ pattern = ',' + integer[x - 2] + integer[x - 1] + integer[parseInt(x.toString(), 10)] + pattern;
3856
3858
  }
3857
3859
  pattern = pattern.slice(1);
3858
3860
  return temp[1] ? (pattern + '.' + temp[1]) : pattern;
@@ -3873,9 +3875,9 @@ var IntlBase;
3873
3875
  }
3874
3876
  iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);
3875
3877
  if (mapper) {
3876
- firstDay = mapper[iCulture] || mapper[iCulture.slice(0, 2)] || defaultFirstDay;
3878
+ firstDay = mapper[`${iCulture}`] || mapper[iCulture.slice(0, 2)] || defaultFirstDay;
3877
3879
  }
3878
- return firstDayMapper[firstDay];
3880
+ return firstDayMapper[`${firstDay}`];
3879
3881
  }
3880
3882
  IntlBase.getWeekData = getWeekData;
3881
3883
  /**
@@ -4122,7 +4124,7 @@ class Browser {
4122
4124
  const keys = Object.keys(REGX_BROWSER);
4123
4125
  let clientInfo = [];
4124
4126
  for (const key of keys) {
4125
- clientInfo = Browser.userAgent.match(REGX_BROWSER[key]);
4127
+ clientInfo = Browser.userAgent.match(REGX_BROWSER[`${key}`]);
4126
4128
  if (clientInfo) {
4127
4129
  browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());
4128
4130
  browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);
@@ -4164,9 +4166,9 @@ class Browser {
4164
4166
  isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'
4165
4167
  }
4166
4168
  };
4167
- return (Browser.isPointer ? events[event].isPointer :
4168
- (Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '')
4169
- : events[event].isDevice));
4169
+ return (Browser.isPointer ? events[`${event}`].isPointer :
4170
+ (Browser.isTouch ? events[`${event}`].isTouch + (!Browser.isDevice ? ' ' + events[`${event}`].isDevice : '')
4171
+ : events[`${event}`].isDevice));
4170
4172
  }
4171
4173
  /**
4172
4174
  * To get the Touch start event from browser
@@ -4208,17 +4210,17 @@ class Browser {
4208
4210
  * @returns {Object} ?
4209
4211
  */
4210
4212
  static getValue(key, regX) {
4211
- const browserDetails = window.browserDetails;
4212
- if (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 && Browser.isTouch === true) {
4213
+ const browserDetails = typeof window !== 'undefined' ? window.browserDetails : {};
4214
+ if (typeof navigator !== 'undefined' && navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 && Browser.isTouch === true) {
4213
4215
  browserDetails['isIos'] = true;
4214
4216
  browserDetails['isDevice'] = true;
4215
4217
  browserDetails['isTouch'] = true;
4216
4218
  browserDetails['isPointer'] = true;
4217
4219
  }
4218
- if ('undefined' === typeof browserDetails[key]) {
4219
- return browserDetails[key] = regX.test(Browser.userAgent);
4220
+ if ('undefined' === typeof browserDetails[`${key}`]) {
4221
+ return browserDetails[`${key}`] = regX.test(Browser.userAgent);
4220
4222
  }
4221
- return browserDetails[key];
4223
+ return browserDetails[`${key}`];
4222
4224
  }
4223
4225
  //Properties
4224
4226
  /**
@@ -4447,15 +4449,15 @@ class EventHandler {
4447
4449
  const event = eventName.split(' ');
4448
4450
  for (let i = 0; i < event.length; i++) {
4449
4451
  eventData.push({
4450
- name: event[i],
4452
+ name: event[parseInt(i.toString(), 10)],
4451
4453
  listener: listener,
4452
4454
  debounce: debounceListener
4453
4455
  });
4454
4456
  if (Browser.isIE) {
4455
- element.addEventListener(event[i], debounceListener);
4457
+ element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener);
4456
4458
  }
4457
4459
  else {
4458
- element.addEventListener(event[i], debounceListener, { passive: false });
4460
+ element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener, { passive: false });
4459
4461
  }
4460
4462
  }
4461
4463
  return debounceListener;
@@ -4476,7 +4478,7 @@ class EventHandler {
4476
4478
  let debounceListener;
4477
4479
  if (eventData && eventData.length !== 0) {
4478
4480
  eventData.some((x, i) => {
4479
- return x.name === event[j] && x.listener === listener ?
4481
+ return x.name === event[parseInt(j.toString(), 10)] && x.listener === listener ?
4480
4482
  (index = i, debounceListener = x.debounce, true) : false;
4481
4483
  });
4482
4484
  }
@@ -4484,7 +4486,7 @@ class EventHandler {
4484
4486
  eventData.splice(index, 1);
4485
4487
  }
4486
4488
  if (debounceListener) {
4487
- element.removeEventListener(event[j], debounceListener);
4489
+ element.removeEventListener(event[parseInt(j.toString(), 10)], debounceListener);
4488
4490
  }
4489
4491
  }
4490
4492
  }
@@ -4502,7 +4504,7 @@ class EventHandler {
4502
4504
  // eslint-disable-next-line
4503
4505
  copyData = extend([], copyData, eventData);
4504
4506
  for (let i = 0; i < copyData.length; i++) {
4505
- element.removeEventListener(copyData[i].name, copyData[i].debounce);
4507
+ element.removeEventListener(copyData[parseInt(i.toString(), 10)].name, copyData[parseInt(i.toString(), 10)].debounce);
4506
4508
  eventData.shift();
4507
4509
  }
4508
4510
  }
@@ -4751,10 +4753,10 @@ function attributes(element, attributes) {
4751
4753
  if (key === 'tabindex') {
4752
4754
  iKey = 'tabIndex';
4753
4755
  }
4754
- ele.attributes[iKey] = attributes[key];
4756
+ ele.attributes[`${iKey}`] = attributes[`${key}`];
4755
4757
  }
4756
4758
  else {
4757
- ele.setAttribute(key, attributes[key]);
4759
+ ele.setAttribute(key, attributes[`${key}`]);
4758
4760
  }
4759
4761
  }
4760
4762
  return ele;
@@ -4800,20 +4802,20 @@ function querySelectId(selector) {
4800
4802
  if (selector.match(/#[0-9]/g) || selector.match(charRegex)) {
4801
4803
  const idList = selector.split(',');
4802
4804
  for (let i = 0; i < idList.length; i++) {
4803
- const list = idList[i].split(' ');
4805
+ const list = idList[parseInt(i.toString(), 10)].split(' ');
4804
4806
  for (let j = 0; j < list.length; j++) {
4805
- if (list[j].indexOf('#') > -1) {
4806
- if (!list[j].match(/\[.*\]/)) {
4807
- const splitId = list[j].split('#');
4807
+ if (list[parseInt(j.toString(), 10)].indexOf('#') > -1) {
4808
+ if (!list[parseInt(j.toString(), 10)].match(/\[.*\]/)) {
4809
+ const splitId = list[parseInt(j.toString(), 10)].split('#');
4808
4810
  if (splitId[1].match(/^\d/) || splitId[1].match(charRegex)) {
4809
- const setId = list[j].split('.');
4811
+ const setId = list[parseInt(j.toString(), 10)].split('.');
4810
4812
  setId[0] = setId[0].replace(/#/, '[id=\'') + '\']';
4811
- list[j] = setId.join('.');
4813
+ list[parseInt(j.toString(), 10)] = setId.join('.');
4812
4814
  }
4813
4815
  }
4814
4816
  }
4815
4817
  }
4816
- idList[i] = list.join(' ');
4818
+ idList[parseInt(i.toString(), 10)] = list.join(' ');
4817
4819
  }
4818
4820
  return idList.join(',');
4819
4821
  }
@@ -4880,7 +4882,7 @@ function getAttributeOrDefault(element, property, value) {
4880
4882
  element.setAttribute(property, value.toString());
4881
4883
  }
4882
4884
  else {
4883
- element.attributes[property] = value;
4885
+ element.attributes[`${property}`] = value;
4884
4886
  }
4885
4887
  attrVal = value;
4886
4888
  }
@@ -5065,15 +5067,15 @@ class Base {
5065
5067
  static callChildDataBind(obj, parent) {
5066
5068
  const keys = Object.keys(obj);
5067
5069
  for (const key of keys) {
5068
- if (parent[key] instanceof Array) {
5069
- for (const obj of parent[key]) {
5070
+ if (parent[`${key}`] instanceof Array) {
5071
+ for (const obj of parent[`${key}`]) {
5070
5072
  if (obj.dataBind !== undefined) {
5071
5073
  obj.dataBind();
5072
5074
  }
5073
5075
  }
5074
5076
  }
5075
5077
  else {
5076
- parent[key].dataBind();
5078
+ parent[`${key}`].dataBind();
5077
5079
  }
5078
5080
  }
5079
5081
  }
@@ -5108,8 +5110,8 @@ class Base {
5108
5110
  newChanges = newChanges ? newChanges : {};
5109
5111
  extend(this.bulkChanges, {}, newChanges, true);
5110
5112
  const sfBlazor = 'sfBlazor';
5111
- if (this.allowServerDataBinding && window[sfBlazor].updateModel) {
5112
- window[sfBlazor].updateModel(this);
5113
+ if (this.allowServerDataBinding && window[`${sfBlazor}`].updateModel) {
5114
+ window[`${sfBlazor}`].updateModel(this);
5113
5115
  this.bulkChanges = {};
5114
5116
  }
5115
5117
  }
@@ -5118,14 +5120,14 @@ class Base {
5118
5120
  if (isBlazor()) {
5119
5121
  // tslint:disable-next-line:no-any
5120
5122
  const newChanges = {};
5121
- newChanges[key] = newValue;
5123
+ newChanges[`${key}`] = newValue;
5122
5124
  this.serverDataBind(newChanges);
5123
5125
  }
5124
5126
  if (this.isProtectedOnChange) {
5125
5127
  return;
5126
5128
  }
5127
- this.oldProperties[key] = oldValue;
5128
- this.changedProperties[key] = newValue;
5129
+ this.oldProperties[`${key}`] = oldValue;
5130
+ this.changedProperties[`${key}`] = newValue;
5129
5131
  this.finalUpdate();
5130
5132
  this.finalUpdate = setImmediate(this.dataBind.bind(this));
5131
5133
  }
@@ -5170,7 +5172,7 @@ class Base {
5170
5172
  const handler = getValue(eventName, this);
5171
5173
  if (handler) {
5172
5174
  const blazor = 'Blazor';
5173
- if (window[blazor]) {
5175
+ if (window[`${blazor}`]) {
5174
5176
  const promise = handler.call(this, eventProp);
5175
5177
  if (promise && typeof promise.then === 'function') {
5176
5178
  if (!successHandler) {
@@ -5258,7 +5260,7 @@ function getComponent(elem, comp) {
5258
5260
  let i;
5259
5261
  const ele = typeof elem === 'string' ? document.getElementById(elem) : elem;
5260
5262
  for (i = 0; i < ele.ej2_instances.length; i++) {
5261
- instance = ele.ej2_instances[i];
5263
+ instance = ele.ej2_instances[parseInt(i.toString(), 10)];
5262
5264
  if (typeof comp === 'string') {
5263
5265
  const compName = instance.getModuleName();
5264
5266
  if (comp === compName) {
@@ -5286,9 +5288,9 @@ function removeChildInstance(element) {
5286
5288
  // tslint:disable-next-line:no-any
5287
5289
  const childEle = [].slice.call(element.getElementsByClassName('e-control'));
5288
5290
  for (let i = 0; i < childEle.length; i++) {
5289
- const compName = childEle[i].classList[1].split('e-')[1];
5291
+ const compName = childEle[parseInt(i.toString(), 10)].classList[1].split('e-')[1];
5290
5292
  // tslint:disable-next-line:no-any
5291
- const compInstance = getComponent(childEle[i], compName);
5293
+ const compInstance = getComponent(childEle[parseInt(i.toString(), 10)], compName);
5292
5294
  if (!isUndefined(compInstance)) {
5293
5295
  compInstance.destroy();
5294
5296
  }
@@ -5308,9 +5310,9 @@ function removeChildInstance(element) {
5308
5310
  function getObject(instance, curKey, defaultValue, type) {
5309
5311
  // eslint-disable-next-line
5310
5312
  if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {
5311
- instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);
5313
+ instance.properties[`${curKey}`] = createInstance(type, [instance, curKey, defaultValue]);
5312
5314
  }
5313
- return instance.properties[curKey];
5315
+ return instance.properties[`${curKey}`];
5314
5316
  }
5315
5317
  /**
5316
5318
  * Returns object array
@@ -5330,15 +5332,15 @@ function getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactor
5330
5332
  for (let i = 0; i < len; i++) {
5331
5333
  let curType = type;
5332
5334
  if (isFactory) {
5333
- curType = type(defaultValue[i], instance);
5335
+ curType = type(defaultValue[parseInt(i.toString(), 10)], instance);
5334
5336
  }
5335
5337
  if (isSetter) {
5336
5338
  const inst = createInstance(curType, [instance, curKey, {}, true]);
5337
- inst.setProperties(defaultValue[i], true);
5339
+ inst.setProperties(defaultValue[parseInt(i.toString(), 10)], true);
5338
5340
  result.push(inst);
5339
5341
  }
5340
5342
  else {
5341
- result.push(createInstance(curType, [instance, curKey, defaultValue[i], false]));
5343
+ result.push(createInstance(curType, [instance, curKey, defaultValue[parseInt(i.toString(), 10)], false]));
5342
5344
  }
5343
5345
  }
5344
5346
  return result;
@@ -5354,9 +5356,9 @@ function propertyGetter(defaultValue, curKey) {
5354
5356
  return function () {
5355
5357
  // eslint-disable-next-line
5356
5358
  if (!this.properties.hasOwnProperty(curKey)) {
5357
- this.properties[curKey] = defaultValue;
5359
+ this.properties[`${curKey}`] = defaultValue;
5358
5360
  }
5359
- return this.properties[curKey];
5361
+ return this.properties[`${curKey}`];
5360
5362
  };
5361
5363
  }
5362
5364
  /**
@@ -5368,11 +5370,11 @@ function propertyGetter(defaultValue, curKey) {
5368
5370
  */
5369
5371
  function propertySetter(defaultValue, curKey) {
5370
5372
  return function (newValue) {
5371
- if (this.properties[curKey] !== newValue) {
5373
+ if (this.properties[`${curKey}`] !== newValue) {
5372
5374
  // eslint-disable-next-line
5373
5375
  let oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;
5374
5376
  this.saveChanges(curKey, newValue, oldVal);
5375
- this.properties[curKey] = newValue;
5377
+ this.properties[`${curKey}`] = newValue;
5376
5378
  }
5377
5379
  };
5378
5380
  }
@@ -5416,7 +5418,7 @@ function complexFactoryGetter(defaultValue, curKey, type) {
5416
5418
  const curType = type({});
5417
5419
  // eslint-disable-next-line
5418
5420
  if (this.properties.hasOwnProperty(curKey)) {
5419
- return this.properties[curKey];
5421
+ return this.properties[`${curKey}`];
5420
5422
  }
5421
5423
  else {
5422
5424
  return getObject(this, curKey, defaultValue, curType);
@@ -5448,7 +5450,7 @@ function complexArrayGetter(defaultValue, curKey, type) {
5448
5450
  // eslint-disable-next-line
5449
5451
  if (!this.properties.hasOwnProperty(curKey)) {
5450
5452
  const defCollection = getObjectArray(this, curKey, defaultValue, type, false);
5451
- this.properties[curKey] = defCollection;
5453
+ this.properties[`${curKey}`] = defCollection;
5452
5454
  }
5453
5455
  const ignore = ((this.controlParent !== undefined && this.controlParent.ignoreCollectionWatch)
5454
5456
  || this.ignoreCollectionWatch);
@@ -5456,17 +5458,17 @@ function complexArrayGetter(defaultValue, curKey, type) {
5456
5458
  if (!this.properties[curKey].hasOwnProperty('push') && !ignore) {
5457
5459
  ['push', 'pop'].forEach((extendFunc) => {
5458
5460
  const descriptor = {
5459
- value: complexArrayDefinedCallback(extendFunc, curKey, type, this.properties[curKey]).bind(this),
5461
+ value: complexArrayDefinedCallback(extendFunc, curKey, type, this.properties[`${curKey}`]).bind(this),
5460
5462
  configurable: true
5461
5463
  };
5462
- Object.defineProperty(this.properties[curKey], extendFunc, descriptor);
5464
+ Object.defineProperty(this.properties[`${curKey}`], extendFunc, descriptor);
5463
5465
  });
5464
5466
  }
5465
5467
  // eslint-disable-next-line
5466
5468
  if (!this.properties[curKey].hasOwnProperty('isComplexArray')) {
5467
- Object.defineProperty(this.properties[curKey], 'isComplexArray', { value: true });
5469
+ Object.defineProperty(this.properties[`${curKey}`], 'isComplexArray', { value: true });
5468
5470
  }
5469
- return this.properties[curKey];
5471
+ return this.properties[`${curKey}`];
5470
5472
  };
5471
5473
  }
5472
5474
  /**
@@ -5483,7 +5485,7 @@ function complexArraySetter(defaultValue, curKey, type) {
5483
5485
  const newValCollection = getObjectArray(this, curKey, newValue, type, true);
5484
5486
  this.isComplexArraySetter = false;
5485
5487
  this.saveChanges(curKey, newValCollection, oldValueCollection);
5486
- this.properties[curKey] = newValCollection;
5488
+ this.properties[`${curKey}`] = newValCollection;
5487
5489
  };
5488
5490
  }
5489
5491
  /**
@@ -5499,7 +5501,7 @@ function complexArrayFactorySetter(defaultValue, curKey, type) {
5499
5501
  const oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;
5500
5502
  const newValCollection = getObjectArray(this, curKey, newValue, type, true, true);
5501
5503
  this.saveChanges(curKey, newValCollection, oldValueCollection);
5502
- this.properties[curKey] = newValCollection;
5504
+ this.properties[`${curKey}`] = newValCollection;
5503
5505
  };
5504
5506
  }
5505
5507
  /**
@@ -5515,9 +5517,9 @@ function complexArrayFactoryGetter(defaultValue, curKey, type) {
5515
5517
  // eslint-disable-next-line
5516
5518
  if (!this.properties.hasOwnProperty(curKey)) {
5517
5519
  const defCollection = getObjectArray(this, curKey, defaultValue, curType, false);
5518
- this.properties[curKey] = defCollection;
5520
+ this.properties[`${curKey}`] = defCollection;
5519
5521
  }
5520
- return this.properties[curKey];
5522
+ return this.properties[`${curKey}`];
5521
5523
  };
5522
5524
  }
5523
5525
  /**
@@ -5535,13 +5537,13 @@ function complexArrayDefinedCallback(dFunc, curKey, type, prop) {
5535
5537
  switch (dFunc) {
5536
5538
  case 'push':
5537
5539
  for (let i = 0; i < newValue.length; i++) {
5538
- Array.prototype[dFunc].apply(prop, [newValue[i]]);
5539
- const model = getArrayModel(keyString + (prop.length - 1), newValue[i], !this.controlParent, dFunc);
5540
- this.serverDataBind(model, newValue[i], false, dFunc);
5540
+ Array.prototype[`${dFunc}`].apply(prop, [newValue[parseInt(i.toString(), 10)]]);
5541
+ const model = getArrayModel(keyString + (prop.length - 1), newValue[parseInt(i.toString(), 10)], !this.controlParent, dFunc);
5542
+ this.serverDataBind(model, newValue[parseInt(i.toString(), 10)], false, dFunc);
5541
5543
  }
5542
5544
  break;
5543
5545
  case 'pop':
5544
- Array.prototype[dFunc].apply(prop);
5546
+ Array.prototype[`${dFunc}`].apply(prop);
5545
5547
  // eslint-disable-next-line
5546
5548
  let model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);
5547
5549
  this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);
@@ -5562,10 +5564,10 @@ function getArrayModel(keyString, value, isControlParent, arrayFunction) {
5562
5564
  let modelObject = keyString;
5563
5565
  if (isControlParent) {
5564
5566
  modelObject = {};
5565
- modelObject[keyString] = value;
5567
+ modelObject[`${keyString}`] = value;
5566
5568
  if (value && typeof value === 'object') {
5567
5569
  const action = 'ejsAction';
5568
- modelObject[keyString][action] = arrayFunction;
5570
+ modelObject[`${keyString}`][`${action}`] = arrayFunction;
5569
5571
  }
5570
5572
  }
5571
5573
  return modelObject;
@@ -5706,14 +5708,14 @@ function Event$1() {
5706
5708
  return (target, key) => {
5707
5709
  const eventDescriptor = {
5708
5710
  set: function (newValue) {
5709
- const oldValue = this.properties[key];
5711
+ const oldValue = this.properties[`${key}`];
5710
5712
  if (oldValue !== newValue) {
5711
5713
  const finalContext = getParentContext(this, key);
5712
5714
  if (isUndefined(oldValue) === false) {
5713
5715
  finalContext.context.removeEventListener(finalContext.prefix, oldValue);
5714
5716
  }
5715
5717
  finalContext.context.addEventListener(finalContext.prefix, newValue);
5716
- this.properties[key] = newValue;
5718
+ this.properties[`${key}`] = newValue;
5717
5719
  }
5718
5720
  },
5719
5721
  get: propertyGetter(undefined, key),
@@ -5801,7 +5803,7 @@ function getBuilderProperties(component) {
5801
5803
  };
5802
5804
  const rex = /complex/;
5803
5805
  for (const key of Object.keys(component.prototype.propList)) {
5804
- for (const prop of component.prototype.propList[key]) {
5806
+ for (const prop of component.prototype.propList[`${key}`]) {
5805
5807
  if (rex.test(key)) {
5806
5808
  component.prototype.builderObject[prop.propertyName] = function (value) {
5807
5809
  const childType = {};
@@ -5964,11 +5966,21 @@ let Animation = Animation_1 = class Animation extends Base {
5964
5966
  * @returns {void}
5965
5967
  */
5966
5968
  static delayAnimation(model) {
5967
- if (model.delay) {
5968
- setTimeout(() => { Animation_1.applyAnimation(model); }, model.delay);
5969
+ if (animationMode === 'Disable') {
5970
+ if (model.begin) {
5971
+ model.begin.call(this, model);
5972
+ }
5973
+ if (model.end) {
5974
+ model.end.call(this, model);
5975
+ }
5969
5976
  }
5970
5977
  else {
5971
- Animation_1.applyAnimation(model);
5978
+ if (model.delay) {
5979
+ setTimeout(() => { Animation_1.applyAnimation(model); }, model.delay);
5980
+ }
5981
+ else {
5982
+ Animation_1.applyAnimation(model);
5983
+ }
5972
5984
  }
5973
5985
  }
5974
5986
  /**
@@ -6128,7 +6140,9 @@ Animation = Animation_1 = __decorate([
6128
6140
  function rippleEffect(element, rippleOptions, done) {
6129
6141
  const rippleModel = getRippleModel(rippleOptions);
6130
6142
  if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {
6131
- return (() => { });
6143
+ return (() => {
6144
+ // do nothing.
6145
+ });
6132
6146
  }
6133
6147
  element.setAttribute('data-ripple', 'true');
6134
6148
  EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });
@@ -6270,6 +6284,21 @@ function enableRipple(isRipple) {
6270
6284
  isRippleEnabled = isRipple;
6271
6285
  return isRippleEnabled;
6272
6286
  }
6287
+ /**
6288
+ * Defines the Modes of Global animation.
6289
+ *
6290
+ * @private
6291
+ */
6292
+ let animationMode = '';
6293
+ /**
6294
+ * Method for set the Global animation modes for Syncfusion Blazor components.
6295
+ *
6296
+ * @param {string} value - Specifies the animation mode.
6297
+ * @returns {void}
6298
+ */
6299
+ function setGlobalAnimation(value) {
6300
+ animationMode = value;
6301
+ }
6273
6302
 
6274
6303
  /**
6275
6304
  * Module loading operations
@@ -6297,10 +6326,10 @@ class ModuleLoader {
6297
6326
  this.clearUnusedModule(requiredModules);
6298
6327
  }
6299
6328
  for (let i = 0; i < reqLength; i++) {
6300
- const modl = requiredModules[i];
6329
+ const modl = requiredModules[parseInt(i.toString(), 10)];
6301
6330
  for (const module of moduleList) {
6302
6331
  const modName = modl.member;
6303
- if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {
6332
+ if (module && module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {
6304
6333
  const moduleObject = createInstance(module, modl.args);
6305
6334
  const memberName = this.getMemberName(modName);
6306
6335
  if (modl.isProperty) {
@@ -6403,10 +6432,10 @@ class ChildProperty {
6403
6432
  */
6404
6433
  updateChange(val, propName) {
6405
6434
  if (val === true) {
6406
- this.parentObj.childChangedProperties[propName] = val;
6435
+ this.parentObj.childChangedProperties[`${propName}`] = val;
6407
6436
  }
6408
6437
  else {
6409
- delete this.parentObj.childChangedProperties[propName];
6438
+ delete this.parentObj.childChangedProperties[`${propName}`];
6410
6439
  }
6411
6440
  if (this.parentObj.updateChange) {
6412
6441
  this.parentObj.updateChange(val, this.parentObj.propName);
@@ -6494,8 +6523,8 @@ class ChildProperty {
6494
6523
  if (!restrictServerDataBind) {
6495
6524
  this.serverDataBind(key, newValue, true);
6496
6525
  }
6497
- this.oldProperties[key] = oldValue;
6498
- this.changedProperties[key] = newValue;
6526
+ this.oldProperties[`${key}`] = oldValue;
6527
+ this.changedProperties[`${key}`] = newValue;
6499
6528
  this.updateChange(true, this.propName);
6500
6529
  this.finalUpdate();
6501
6530
  this.updateTimeOut();
@@ -6511,19 +6540,19 @@ class ChildProperty {
6511
6540
  parent = newChanges;
6512
6541
  for (let i = 0; i < complexKeys.length; i++) {
6513
6542
  const isFinal = i === complexKeys.length - 1;
6514
- parent[complexKeys[i]] = isFinal ? value : {};
6515
- parent = isFinal ? parent : parent[complexKeys[i]];
6543
+ parent[complexKeys[parseInt(i.toString(), 10)]] = isFinal ? value : {};
6544
+ parent = isFinal ? parent : parent[complexKeys[parseInt(i.toString(), 10)]];
6516
6545
  }
6517
6546
  }
6518
6547
  else {
6519
- newChanges[parentKey] = {};
6520
- parent = newChanges[parentKey];
6521
- newChanges[parentKey][key] = value;
6548
+ newChanges[`${parentKey}`] = {};
6549
+ parent = newChanges[`${parentKey}`];
6550
+ newChanges[`${parentKey}`][`${key}`] = value;
6522
6551
  }
6523
6552
  /* istanbul ignore next */
6524
6553
  if (this.isParentArray) {
6525
6554
  const actionProperty = 'ejsAction';
6526
- parent[actionProperty] = action ? action : 'none';
6555
+ parent[`${actionProperty}`] = action ? action : 'none';
6527
6556
  }
6528
6557
  this.controlParent.serverDataBind(newChanges);
6529
6558
  }
@@ -6547,61 +6576,86 @@ class ChildProperty {
6547
6576
  }
6548
6577
  }
6549
6578
 
6579
+ let componentList = ['grid', 'pivotview', 'treegrid', 'spreadsheet', 'rangeNavigator', 'DocumentEditor', 'listbox', 'PdfViewer', 'richtexteditor', 'DashboardLayout', 'chart', 'stockChart', 'circulargauge', 'diagram', 'heatmap', 'lineargauge', 'maps', 'smithchart', 'barcode', 'sparkline', 'treemap', 'bulletChart', 'kanban', 'daterangepicker', 'schedule', 'gantt', 'signature', 'query-builder', 'drop-down-tree', 'carousel', 'filemanager', 'uploader', 'accordion', 'tab', 'treeview'];
6550
6580
  const bypassKey = [115, 121, 110, 99, 102, 117, 115, 105,
6551
6581
  111, 110, 46, 105, 115, 76, 105, 99, 86, 97, 108,
6552
6582
  105, 100, 97, 116, 101, 100];
6583
+ let accountURL;
6553
6584
  /**
6554
6585
  * License validation module
6586
+ *
6555
6587
  * @private
6556
6588
  */
6557
6589
  class LicenseValidator {
6558
6590
  constructor(key) {
6559
6591
  this.isValidated = false;
6560
- this.version = '20.1';
6592
+ this.isLicensed = true;
6593
+ this.version = '20.4';
6561
6594
  this.platform = /JavaScript|ASPNET|ASPNETCORE|ASPNETMVC|FileFormats/i;
6562
6595
  this.errors = {
6563
- noLicense: 'This application was built using a trial version of Syncfusion Essential Studio.' +
6564
- ' Please include a valid license to permanently remove this license validation message.' +
6565
- ' You can also obtain a free 30 day evaluation license to temporarily remove this message ' +
6566
- 'during the evaluation period. Please refer to this <a style="color:yellow;text-decoration:none;"' +
6567
- 'href="https://help.syncfusion.com/common/essential-studio/licensing">help topic</a> for more information.',
6568
- trailExpired: 'Your Syncfusion trial license has expired. Please refer to this ' +
6569
- '<a style="color:yellow;text-decoration:none;"' +
6570
- 'href="https://help.syncfusion.com/common/essential-studio/licensing/licensing-errors#trial-expired">help topic</a> for more information.',
6571
- versionMismatched: 'The included Syncfusion license (v##LicenseVersion) is invalid for version ' +
6572
- '##Requireversion. Please refer to this <a style="color:yellow;text-decoration:none;" ' +
6573
- 'href="https://help.syncfusion.com/es/licensing/version-mismatch/">help topic</a> for more information.',
6574
- platformMismatched: 'The included Syncfusion license is invalid (Platform mismatch). Please refer' +
6575
- ' to this <a style="color:yellow;text-decoration:none;" ' +
6576
- 'href="https://help.syncfusion.com/common/essential-studio/licensing/licensing-errors#platform-mismatch">help topic</a> for more information.',
6577
- invalidKey: 'The included Syncfusion license is invalid. Please refer to this ' +
6578
- '<a style="color:yellow;text-decoration:none;" ' +
6579
- 'href="https://help.syncfusion.com/common/essential-studio/licensing/licensing-errors#invalid-key">help topic</a> for more information.'
6596
+ noLicense: '<span>This application was built using a trial version of Syncfusion Essential Studio.' +
6597
+ ' To remove the license validation message permanently, a valid license key must be included.</span>',
6598
+ trailExpired: '<span>This application was built using a trial version of Syncfusion Essential Studio.' +
6599
+ ' To remove the license validation message permanently, a valid license key must be included.</span>',
6600
+ versionMismatched: '<span>The included Syncfusion license key is invalid.</span>',
6601
+ platformMismatched: '<span>The included Syncfusion license key is invalid.</span>',
6602
+ invalidKey: '<span>The included Syncfusion license key is invalid.</span>'
6580
6603
  };
6581
6604
  /**
6582
6605
  * To manage licensing operation.
6583
6606
  */
6584
6607
  this.manager = (() => {
6585
6608
  let licKey = null;
6609
+ /**
6610
+ * Sets the license key.
6611
+ *
6612
+ * @param {string} key - Specifies the license key.
6613
+ * @returns {void}
6614
+ */
6586
6615
  function set(key) { licKey = key; }
6616
+ /**
6617
+ * Gets the license key.
6618
+ *
6619
+ * @returns {string} -Gets the license key.
6620
+ */
6587
6621
  function get() { return licKey; }
6588
6622
  return {
6589
6623
  setKey: set,
6590
6624
  getKey: get
6591
6625
  };
6592
6626
  })();
6627
+ /**
6628
+ * To manage npx licensing operation.
6629
+ */
6630
+ this.npxManager = (() => {
6631
+ const npxLicKey = 'npxKeyReplace';
6632
+ /**
6633
+ * Gets the license key.
6634
+ *
6635
+ * @returns {string} - Gets the license key.
6636
+ */
6637
+ function get() { return npxLicKey; }
6638
+ return {
6639
+ getKey: get
6640
+ };
6641
+ })();
6593
6642
  this.manager.setKey(key);
6594
6643
  }
6595
6644
  /**
6596
6645
  * To validate the provided license key.
6597
- */
6646
+ */
6598
6647
  validate() {
6648
+ let contentKey = [115, 121, 110, 99, 102, 117, 115, 105, 111, 110, 46,
6649
+ 108, 105, 99, 101, 110, 115, 101, 67, 111, 110, 116, 101, 110, 116];
6650
+ let URLKey = [115, 121, 110, 99, 102, 117, 115, 105, 111, 110, 46,
6651
+ 99, 108, 97, 105, 109, 65, 99, 99, 111, 117, 110, 116, 85, 82, 76];
6599
6652
  if (!this.isValidated && (containerObject && !getValue(convertToChar(bypassKey), containerObject) && !getValue('Blazor', containerObject))) {
6600
6653
  let validateMsg;
6601
- if (this.manager && this.manager.getKey()) {
6602
- let result = this.getInfoFromKey();
6654
+ let validateURL;
6655
+ if ((this.manager && this.manager.getKey()) || (this.npxManager && this.npxManager.getKey() !== 'npxKeyReplace')) {
6656
+ const result = this.getInfoFromKey();
6603
6657
  if (result && result.length) {
6604
- for (let res of result) {
6658
+ for (const res of result) {
6605
6659
  if (!this.platform.test(res.platform) || res.invalidPlatform) {
6606
6660
  validateMsg = this.errors.platformMismatched;
6607
6661
  }
@@ -6611,8 +6665,8 @@ class LicenseValidator {
6611
6665
  validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');
6612
6666
  }
6613
6667
  else if (res.expiryDate) {
6614
- let expDate = new Date(res.expiryDate);
6615
- let currDate = new Date();
6668
+ const expDate = new Date(res.expiryDate);
6669
+ const currDate = new Date();
6616
6670
  if (expDate !== currDate && expDate < currDate) {
6617
6671
  validateMsg = this.errors.trailExpired;
6618
6672
  }
@@ -6627,28 +6681,44 @@ class LicenseValidator {
6627
6681
  }
6628
6682
  }
6629
6683
  else {
6630
- validateMsg = this.errors.noLicense;
6631
- }
6632
- if (validateMsg && typeof document !== "undefined" && !isNullOrUndefined(document)) {
6633
- let errorDiv = createElement('div', {
6634
- innerHTML: validateMsg +
6635
- '<span style="position:absolute;right: 10px;top:27%;cursor:pointer;"' +
6636
- 'onClick=this.parentElement.remove();>' +
6637
- '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20">' +
6638
- '<line x1="5" y1="5" x2="15" y2="15" stroke="yellow" stroke-width="2.5" ' +
6639
- 'stroke-miterlimit="10" stroke-linecap="round"></line><line x1="15" y1="5" ' +
6640
- 'x2="5" y2="15" stroke="yellow" stroke-width="2.5" stroke-linecap="round" ' +
6641
- 'stroke-miterlimit="10"></line></svg></span>',
6642
- styles: 'position:fixed;top:0;left:0;right:0;font-family:"Segoe UI";font-size:16px;' +
6643
- 'background:repeating-linear-gradient(45deg,#d70f0f,#d70f0f 10px,#e12121 10px,#e12121 17px);' +
6644
- 'color:#ffffff;z-index:999999999;text-align:center;padding:10px 50px 10px 25px;'
6684
+ let licenseContent = getValue(convertToChar(contentKey), containerObject);
6685
+ validateURL = getValue(convertToChar(URLKey), containerObject);
6686
+ if (licenseContent && licenseContent !== '') {
6687
+ validateMsg = licenseContent;
6688
+ }
6689
+ else {
6690
+ validateMsg = this.errors.noLicense;
6691
+ }
6692
+ }
6693
+ if (validateMsg && typeof document !== 'undefined' && !isNullOrUndefined(document)) {
6694
+ accountURL = (validateURL && validateURL !== '') ? validateURL : "https://www.syncfusion.com/account/claim-license-key?pl=SmF2YVNjcmlwdA==&vs=MjAuNA==";
6695
+ const errorDiv = createElement('div', {
6696
+ innerHTML: `<img src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzE5OV80KSI+CjxwYXRoIGQ9Ik0xMiAyMUMxNi45NzA2IDIxIDIxIDE2Ljk3MDYgMjEgMTJDMjEgNy4wMjk0NCAxNi45NzA2IDMgMTIgM0M3LjAyOTQ0IDMgMyA3LjAyOTQ0IDMgMTJDMyAxNi45NzA2IDcuMDI5NDQgMjEgMTIgMjFaIiBzdHJva2U9IiM3MzczNzMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMS4yNSAxMS4yNUgxMlYxNi41SDEyLjc1IiBmaWxsPSIjNjE2MDYzIi8+CjxwYXRoIGQ9Ik0xMS4yNSAxMS4yNUgxMlYxNi41SDEyLjc1IiBzdHJva2U9IiM3MzczNzMiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMS44MTI1IDlDMTIuNDMzOCA5IDEyLjkzNzUgOC40OTYzMiAxMi45Mzc1IDcuODc1QzEyLjkzNzUgNy4yNTM2OCAxMi40MzM4IDYuNzUgMTEuODEyNSA2Ljc1QzExLjE5MTIgNi43NSAxMC42ODc1IDcuMjUzNjggMTAuNjg3NSA3Ljg3NUMxMC42ODc1IDguNDk2MzIgMTEuMTkxMiA5IDExLjgxMjUgOVoiIGZpbGw9IiM3MzczNzMiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xOTlfNCI+CjxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K' style="top: 6px;
6697
+ position: absolute;
6698
+ left: 16px;
6699
+ width: 24px;
6700
+ height: 24px;"/>` + validateMsg + ' ' + '<a style="text-decoration: none;color: #0D6EFD;font-weight: 500;" href=' + accountURL + '>Claim your free account</a>'
6645
6701
  });
6646
- errorDiv.setAttribute('id', 'js-licensing');
6702
+ errorDiv.setAttribute('style', `position: fixed;
6703
+ top: 10px;
6704
+ left: 10px;
6705
+ right: 10px;
6706
+ font-size: 14px;
6707
+ background: #EEF2FF;
6708
+ color: #222222;
6709
+ z-index: 999999999;
6710
+ text-align: left;
6711
+ border: 1px solid #EEEEEE;
6712
+ padding: 10px 11px 10px 50px;
6713
+ border-radius: 8px;
6714
+ font-family: Helvetica Neue, Helvetica, Arial;`);
6647
6715
  document.body.appendChild(errorDiv);
6716
+ this.isLicensed = false;
6648
6717
  }
6649
6718
  this.isValidated = true;
6650
6719
  setValue(convertToChar(bypassKey), this.isValidated, containerObject);
6651
6720
  }
6721
+ return this.isLicensed;
6652
6722
  }
6653
6723
  getDecryptedData(key) {
6654
6724
  try {
@@ -6660,30 +6730,52 @@ class LicenseValidator {
6660
6730
  }
6661
6731
  /**
6662
6732
  * Get license information from key.
6733
+ *
6734
+ * @returns {IValidator} - Get license information from key.
6663
6735
  */
6664
6736
  getInfoFromKey() {
6665
6737
  try {
6666
- let licKey = this.manager.getKey();
6667
- let licKeySplit = licKey.split(';');
6668
- let pkey = [5439488, 7929856, 5111808, 6488064, 4587520, 7667712, 5439488,
6738
+ let licKey = '';
6739
+ const pkey = [5439488, 7929856, 5111808, 6488064, 4587520, 7667712, 5439488,
6669
6740
  6881280, 5177344, 7208960, 4194304, 4456448, 6619136, 7733248, 5242880, 7077888,
6670
6741
  6356992, 7602176, 4587520, 7274496, 7471104, 7143424];
6671
6742
  let decryptedStr = [];
6672
- let resultArray = [];
6743
+ const resultArray = [];
6673
6744
  let invalidPlatform = false;
6674
- for (let lKey of licKeySplit) {
6675
- let decodeStr = this.getDecryptedData(lKey);
6745
+ let isNpxKey = false;
6746
+ if (this.manager.getKey()) {
6747
+ licKey = this.manager.getKey();
6748
+ }
6749
+ else {
6750
+ isNpxKey = true;
6751
+ licKey = this.npxManager.getKey().split('npxKeyReplace')[1];
6752
+ }
6753
+ const licKeySplit = licKey.split(';');
6754
+ for (const lKey of licKeySplit) {
6755
+ const decodeStr = this.getDecryptedData(lKey);
6676
6756
  if (!decodeStr) {
6677
6757
  continue;
6678
6758
  }
6679
6759
  let k = 0;
6680
6760
  let buffr = '';
6681
- for (let i = 0; i < decodeStr.length; i++, k++) {
6682
- if (k === pkey.length) {
6683
- k = 0;
6761
+ if (!isNpxKey) {
6762
+ for (let i = 0; i < decodeStr.length; i++, k++) {
6763
+ if (k === pkey.length) {
6764
+ k = 0;
6765
+ }
6766
+ const c = decodeStr.charCodeAt(i);
6767
+ buffr += String.fromCharCode(c ^ (pkey[parseInt(k.toString(), 10)] >> 16));
6768
+ }
6769
+ }
6770
+ else {
6771
+ const charKey = decodeStr[decodeStr.length - 1];
6772
+ const decryptedKey = [];
6773
+ for (let i = 0; i < decodeStr.length; i++) {
6774
+ decryptedKey[parseInt(i.toString(), 10)] = decodeStr[parseInt(i.toString(), 10)].charCodeAt(0) - charKey.charCodeAt(0);
6775
+ }
6776
+ for (let i = 0; i < decryptedKey.length; i++) {
6777
+ buffr += String.fromCharCode(decryptedKey[parseInt(i.toString(), 10)]);
6684
6778
  }
6685
- let c = decodeStr.charCodeAt(i);
6686
- buffr += String.fromCharCode(c ^ (pkey[k] >> 16));
6687
6779
  }
6688
6780
  if (this.platform.test(buffr)) {
6689
6781
  decryptedStr = buffr.split(';');
@@ -6712,16 +6804,24 @@ class LicenseValidator {
6712
6804
  }
6713
6805
  }
6714
6806
  let licenseValidator = new LicenseValidator();
6807
+ /**
6808
+ * Converts the given number to characters.
6809
+ *
6810
+ * @param {number} cArr - Specifies the license key as number.
6811
+ * @returns {string}
6812
+ */
6715
6813
  function convertToChar(cArr) {
6716
6814
  let ret = '';
6717
- for (let arr of cArr) {
6815
+ for (const arr of cArr) {
6718
6816
  ret += String.fromCharCode(arr);
6719
6817
  }
6720
6818
  return ret;
6721
6819
  }
6722
6820
  /**
6723
6821
  * To set license key.
6822
+ *
6724
6823
  * @param {string} key - license key
6824
+ * @returns {void}
6725
6825
  */
6726
6826
  function registerLicense(key) {
6727
6827
  licenseValidator = new LicenseValidator(key);
@@ -6730,11 +6830,146 @@ const validateLicense = (key) => {
6730
6830
  if (key) {
6731
6831
  registerLicense(key);
6732
6832
  }
6733
- licenseValidator.validate();
6833
+ return licenseValidator.validate();
6734
6834
  };
6735
6835
  const getVersion = () => {
6736
6836
  return licenseValidator.version;
6737
6837
  };
6838
+ // Method for create overlay over the sample
6839
+ const createLicenseOverlay = () => {
6840
+ let bannerTemplate = `
6841
+ <div style="
6842
+ position: fixed;
6843
+ width: 100%;
6844
+ height: 100%;
6845
+ top: 0;
6846
+ left: 0;
6847
+ right: 0;
6848
+ bottom: 0;
6849
+ background-color: rgba(0, 0, 0, 0.5);
6850
+ z-index: 99999;
6851
+ ">
6852
+ <div style="
6853
+ background: #FFFFFF;
6854
+ height: 455px;
6855
+ width: 840px;
6856
+ font-family: Helvetica Neue, Helvetica, Arial;
6857
+ color: #000000;
6858
+ box-shadow: 0px 4.8px 14.4px rgb(0 0 0 / 18%), 0px 25.6px 57.6px rgb(0 0 0 / 22%);
6859
+ display: block;
6860
+ margin: 8% auto;
6861
+ border-radius: 20px;
6862
+ ">
6863
+ <div style="
6864
+ position: absolute;
6865
+ width: 838px;
6866
+ height: 62px;
6867
+ background-color: #F9F9F9;
6868
+ border: 1px solid #EEEEEE;
6869
+ border-top-left-radius: 20px;
6870
+ border-top-right-radius: 20px;
6871
+ ">
6872
+ <img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQ2IiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMTQ2IDMyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNDAuNTk2NSAxNS4wMDc4SDMyLjQyNUMzMS41NTU3IDE1LjAwNzggMzAuOTAzNyAxNS4xODEyIDMwLjUxMjUgMTUuNDg0NkMzMC4xMjEzIDE1LjgzMTQgMjkuOTA0IDE2LjMwODIgMjkuOTA0IDE3LjA0NTFDMjkuOTA0IDE3LjYwODYgMzAuMDc3OCAxOC4wNDIxIDMwLjQyNTYgMTguMzAyMkMzMC43NzMzIDE4LjYwNTYgMzEuMjk0OSAxOC43MzU2IDMxLjk5MDMgMTguNzM1NkgzNi4zMzY5QzM4LjExODkgMTguNzM1NiAzOS40MjI5IDE5LjA4MjQgNDAuMTYxOCAxOS43MzI2QzQwLjk0NDIgMjAuNDI2MiA0MS4yOTE5IDIxLjU1MzIgNDEuMjkxOSAyMy4xMTM3QzQxLjI5MTkgMjQuNzE3NiA0MC44NTcyIDI1Ljg4OCAzOS45ODc5IDI2LjY2ODJDMzkuMTE4NiAyNy40MDUxIDM3LjcyNzcgMjcuNzk1MyAzNS44NTg3IDI3Ljc5NTNIMjcuMDc4N1YyNS4wMjFIMzUuMzM3MkMzNi4yOTM0IDI1LjAyMSAzNi45NDU0IDI0Ljg5MSAzNy4zMzY2IDI0LjYzMDlDMzcuNzI3NyAyNC4zNzA4IDM3LjkwMTYgMjMuODk0IDM3LjkwMTYgMjMuMjg3MUMzNy45MDE2IDIyLjYzNjkgMzcuNzI3NyAyMi4xNjAxIDM3LjM4IDIxLjlDMzcuMDMyMyAyMS42Mzk5IDM2LjQyMzggMjEuNDY2NSAzNS41NTQ1IDIxLjQ2NjVIMzEuNjQyNkMyOS44NjA1IDIxLjQ2NjUgMjguNTEzMSAyMS4xMTk4IDI3LjY4NzMgMjAuMzgyOEMyNi44NjE0IDE5LjY0NTkgMjYuNDI2OCAxOC41MTg5IDI2LjQyNjggMTcuMDAxN0MyNi40MjY4IDE1LjM1NDUgMjYuODYxNCAxNC4xNDA4IDI3LjczMDcgMTMuMzYwNkMyOC42IDEyLjU4MDMgMjkuOTkwOSAxMi4yMzM1IDMxLjkwMzQgMTIuMjMzNUg0MC41OTY1VjE1LjAwNzhaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik00OC4wNzI3IDI1LjI4MTFINTAuNTA2OFYxNi4zOTQ5SDUzLjU0OTNWMjcuNTM1MkM1My41NDkzIDI5LjA1MjQgNTMuMjAxNiAzMC4xNzk0IDUyLjUwNjIgMzAuOTE2M0M1MS44MTA3IDMxLjY1MzIgNTAuNzI0MSAzMiA0OS4yNDYzIDMySDQzLjMzNVYyOS42NTkySDQ4LjcyNDdDNDkuMjg5NyAyOS42NTkyIDQ5Ljc2NzkgMjkuNTI5MiA1MC4wNzIxIDI5LjIyNThDNTAuMzc2NCAyOC45NjU3IDUwLjU1MDIgMjguNTMyMiA1MC41NTAyIDI4LjAxMlYyNy44Mzg2SDQ3Ljg5ODlDNDYuMjAzNyAyNy44Mzg2IDQ0Ljk0MzIgMjcuNDkxOSA0NC4yNDc4IDI2Ljg0MTZDNDMuNTA4OSAyNi4xNDgxIDQzLjE2MTEgMjUuMDY0NCA0My4xNjExIDIzLjQ2MDVWMTYuMzk0OUg0Ni4xNjAyVjIzLjIwMDVDNDYuMTYwMiAyNC4wNjc0IDQ2LjI5MDYgMjQuNjMwOSA0Ni41NTE0IDI0Ljg5MUM0Ni43MjUzIDI1LjE1MTEgNDcuMjQ2OSAyNS4yODExIDQ4LjA3MjcgMjUuMjgxMVoiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTU1Ljg5NjUgMTYuMzk0OUg2MS41OTA0QzYzLjMyOTEgMTYuMzk0OSA2NC41NDYxIDE2LjY5ODMgNjUuMjg1IDE3LjM0ODVDNjYuMDIzOSAxNy45OTg4IDY2LjM3MTYgMTkuMDgyNCA2Ni4zNzE2IDIwLjU1NjNWMjcuNzk1M0g2My4zMjkxVjIwLjk0NjRDNjMuMzI5MSAyMC4wNzk0IDYzLjE5ODcgMTkuNTE1OSA2Mi45Mzc5IDE5LjI5OTJDNjIuNjc3MSAxOS4wMzkxIDYyLjE1NTUgMTguOTA5MSA2MS4zMjk3IDE4LjkwOTFINTguODk1NlYyNy44Mzg2SDU1Ljg1M1YxNi4zOTQ5SDU1Ljg5NjVaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik03NC45MzQyIDI1LjM2NzhINzguMTUwNlYyNy43OTUySDc0LjAyMTRDNzIuOTc4MiAyNy43OTUyIDcyLjEwODkgMjcuNjY1MiA3MS40NTcgMjcuNDkxOEM3MC44MDUgMjcuMjc1IDcwLjE5NjUgMjYuOTI4MyA2OS43MTgzIDI2LjQ1MTRDNjkuMTk2OCAyNS45MzEzIDY4Ljc2MjEgMjUuMjgxMSA2OC40NTc4IDI0LjU0NDJDNjguMTUzNiAyMy44MDcyIDY4LjAyMzIgMjIuOTgzNiA2OC4wMjMyIDIyLjE2QzY4LjAyMzIgMjEuMjkzMSA2OC4xNTM2IDIwLjQ2OTUgNjguNDU3OCAxOS42ODkyQzY4Ljc2MjEgMTguOTA5IDY5LjE1MzMgMTguMzAyMSA2OS43MTgzIDE3Ljc4MTlDNzAuMjM5OSAxNy4zMDUxIDcwLjgwNSAxNi45NTgzIDcxLjUwMDQgMTYuNzQxNkM3Mi4xOTU5IDE2LjUyNDkgNzMuMDIxNyAxNi40MzgyIDc0LjA2NDkgMTYuNDM4Mkg3OC4xOTQxVjE4LjkwOUg3NC45MzQyQzczLjQ5OTggMTguOTA5IDcyLjU0MzYgMTkuMTY5MSA3MS45Nzg1IDE5LjY0NTlDNzEuNDU2OSAyMC4xMjI3IDcxLjE1MjcgMjAuOTg5NyA3MS4xNTI3IDIyLjIwMzRDNzEuMTUyNyAyMi44OTY5IDcxLjI4MzEgMjMuNDYwNSA3MS41MDA0IDIzLjkzNzNDNzEuNzE3NyAyNC40MTQxIDcyLjA2NTUgMjQuNzYwOSA3Mi41MDAxIDI1LjA2NDNDNzIuNzE3NCAyNS4xOTQ0IDcyLjk3ODIgMjUuMjgxMSA3My4yODI1IDI1LjM2NzhDNzMuNjMwMiAyNS4zMjQ0IDc0LjE1MTggMjUuMzY3OCA3NC45MzQyIDI1LjM2NzhaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik04MC44NDU2IDE4LjY0ODlINzguNjcyNFYxNi4zNTE1SDgwLjg0NTZWMTUuMTgxMUM4MC44NDU2IDE0LjAxMDggODEuMDYzIDEzLjIzMDUgODEuNDk3NiAxMi44NDA0QzgxLjkzMjMgMTIuNDUwMyA4Mi43NTgxIDEyLjIzMzUgODMuOTc1MSAxMi4yMzM1SDg2Ljg0MzhWMTQuNDAwOUg4NS40MDk1Qzg0Ljg4NzkgMTQuNDAwOSA4NC41NDAyIDE0LjQ4NzYgODQuMzIyOSAxNC42NjFDODQuMTA1NSAxNC44MzQ0IDgzLjk3NTEgMTUuMDk0NSA4My45NzUxIDE1LjQ0MTJWMTYuMzUxNUg4Ni44NDM4VjE4LjY0ODlIODMuOTc1MVYyNy43OTUzSDgwLjg0NTZWMTguNjQ4OVoiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTk4LjQwNTYgMjcuNzk1M0g5Mi43MTE2QzkxLjAxNjUgMjcuNzk1MyA4OS44NDI5IDI3LjQ0ODUgODkuMDYwNSAyNi43OTgzQzg4LjMyMTYgMjYuMTQ4MSA4Ny45MzA0IDI1LjA2NDQgODcuOTMwNCAyMy41OTA2VjE2LjM5NDlIOTAuOTI5NVYyMy40MTcyQzkwLjkyOTUgMjQuMTk3NCA5MS4wNTk5IDI0LjY3NDMgOTEuMzIwNyAyNC45MzQ0QzkxLjU4MTUgMjUuMTk0NCA5Mi4xMDMxIDI1LjMyNDUgOTIuOTI4OSAyNS4zMjQ1SDk1LjM2M1YxNi4zOTQ5SDk4LjQwNTZWMjcuNzk1M1oiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTEwMC42MjIgMjUuNDExMkgxMDcuMDExQzEwNy41NzcgMjUuNDExMiAxMDguMDExIDI1LjMyNDUgMTA4LjI3MiAyNS4xNTExQzEwOC41MzMgMjQuOTc3NyAxMDguNjYzIDI0LjY3NDMgMTA4LjY2MyAyNC4zMjc1QzEwOC42NjMgMjMuOTM3NCAxMDguNTMzIDIzLjY3NzMgMTA4LjI3MiAyMy40NjA1QzEwOC4wMTEgMjMuMjg3MSAxMDcuNTc3IDIzLjIwMDUgMTA3LjA1NSAyMy4yMDA1SDEwNC40NDdDMTAyLjg4MiAyMy4yMDA1IDEwMS44MzkgMjIuOTgzNyAxMDEuMzE4IDIyLjUwNjlDMTAwLjc1MiAyMi4wMzAxIDEwMC40OTIgMjEuMjA2NSAxMDAuNDkyIDE5Ljk5MjdDMTAwLjQ5MiAxOC43NzkgMTAwLjgzOSAxNy44Njg3IDEwMS40OTEgMTcuMjYxOEMxMDIuMTQzIDE2LjY5ODMgMTAzLjE4NyAxNi4zOTQ5IDEwNC41MzQgMTYuMzk0OUgxMTEuMDU0VjE4Ljc3OUgxMDUuNzA4QzEwNC44MzggMTguNzc5IDEwNC4yNzMgMTguODY1NyAxMDQuMDEyIDE4Ljk5NTdDMTAzLjc1MiAxOS4xNjkxIDEwMy42MjEgMTkuNDI5MiAxMDMuNjIxIDE5LjgxOTRDMTAzLjYyMSAyMC4xNjYxIDEwMy43NTIgMjAuNDI2MiAxMDMuOTY5IDIwLjU5OTZDMTA0LjE4NiAyMC43NzMgMTA0LjU3NyAyMC44NTk3IDEwNS4wNTYgMjAuODU5N0gxMDcuNzk0QzEwOS4wNTQgMjAuODU5NyAxMTAuMDExIDIxLjE2MzEgMTEwLjY2MyAyMS43MjY2QzExMS4zMTUgMjIuMjkwMiAxMTEuNjYyIDIzLjE1NzEgMTExLjY2MiAyNC4yNDA4QzExMS42NjIgMjUuMjgxMSAxMTEuMzU4IDI2LjE0ODEgMTEwLjc5MyAyNi43OTgzQzExMC4yMjggMjcuNDQ4NSAxMDkuNDQ2IDI3Ljc5NTMgMTA4LjUzMyAyNy43OTUzSDEwMC43MDlWMjUuNDExMkgxMDAuNjIyWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMTE2LjU3NCAxNS4wOTQ0SDExMy40MDFWMTIuMjc2OUgxMTYuNTc0VjE1LjA5NDRaTTExNi41NzQgMjcuNzk1M0gxMTMuNDAxVjE2LjM5NDlIMTE2LjU3NFYyNy43OTUzWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMTMwLjMwOSAyMi4xMTY3QzEzMC4zMDkgMjMuODkzOSAxMjkuNzQ0IDI1LjMyNDQgMTI4LjY1NyAyNi40MDgxQzEyNy41NzEgMjcuNDkxOCAxMjYuMDkzIDI4LjAxMiAxMjQuMjI0IDI4LjAxMkMxMjIuMzU1IDI4LjAxMiAxMjAuODc3IDI3LjQ5MTggMTE5Ljc5IDI2LjQwODFDMTE4LjcwNCAyNS4zMjQ0IDExOC4xMzkgMjMuODkzOSAxMTguMTM5IDIyLjExNjdDMTE4LjEzOSAyMC4zMzk0IDExOC43MDQgMTguOTA5IDExOS43OSAxNy44MjUzQzEyMC44NzcgMTYuNzQxNiAxMjIuMzk4IDE2LjIyMTQgMTI0LjIyNCAxNi4yMjE0QzEyNi4wNDkgMTYuMjIxNCAxMjcuNTI3IDE2Ljc0MTYgMTI4LjY1NyAxNy44MjUzQzEyOS43NDQgMTguODY1NiAxMzAuMzA5IDIwLjI5NjEgMTMwLjMwOSAyMi4xMTY3Wk0xMjEuMjY4IDIyLjExNjdDMTIxLjI2OCAyMy4yMDA0IDEyMS41MjkgMjQuMDY3MyAxMjIuMDUxIDI0LjY3NDJDMTIyLjU3MiAyNS4yODExIDEyMy4yNjggMjUuNTg0NSAxMjQuMTggMjUuNTg0NUMxMjUuMDkzIDI1LjU4NDUgMTI1Ljc4OSAyNS4yODExIDEyNi4zMSAyNC42NzQyQzEyNi44MzIgMjQuMDY3MyAxMjcuMDkzIDIzLjIwMDQgMTI3LjA5MyAyMi4xMTY3QzEyNy4wOTMgMjEuMDMzIDEyNi44MzIgMjAuMTY2MSAxMjYuMzEgMTkuNjAyNUMxMjUuNzg5IDE4Ljk5NTcgMTI1LjA5MyAxOC42OTIyIDEyNC4xMzcgMTguNjkyMkMxMjMuMjI0IDE4LjY5MjIgMTIyLjUyOSAxOC45OTU3IDEyMi4wMDcgMTkuNjAyNUMxMjEuNTI5IDIwLjE2NjEgMTIxLjI2OCAyMS4wMzMgMTIxLjI2OCAyMi4xMTY3WiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMTMxLjc4NyAxNi4zOTQ5SDEzNy40ODFDMTM5LjIxOSAxNi4zOTQ5IDE0MC40MzYgMTYuNjk4MyAxNDEuMTc1IDE3LjM0ODVDMTQxLjkxNCAxNy45OTg4IDE0Mi4yNjIgMTkuMDgyNCAxNDIuMjYyIDIwLjU1NjNWMjcuNzk1M0gxMzkuMjE5VjIwLjk0NjRDMTM5LjIxOSAyMC4wNzk0IDEzOS4wODkgMTkuNTE1OSAxMzguODI4IDE5LjI5OTJDMTM4LjU2NyAxOS4wMzkxIDEzOC4wNDYgMTguOTA5MSAxMzcuMjIgMTguOTA5MUgxMzQuNzg2VjI3LjgzODZIMTMxLjc0M1YxNi4zOTQ5SDEzMS43ODdaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik03LjEyODMxIDMuNzM3NDNIMFYxMC44NDY0SDcuMTI4MzFWMy43Mzc0M1oiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTIzLjI1MTMgLTIuMTU3MjVlLTA1TDE4LjU1MTMgNS41MTY4NUwyNC4wODMxIDEwLjIwNDFMMjguNzgzMSA0LjY4NzI1TDIzLjI1MTMgLTIuMTU3MjVlLTA1WiIgZmlsbD0iI0ZGODYwMCIvPgo8cGF0aCBkPSJNMTUuNjA0MSAzLjczNzQzSDguNDc1ODNWMTAuODQ2NEgxNS42MDQxVjMuNzM3NDNaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik03LjEyODMxIDEyLjE5MDJIMFYxOS4yOTkySDcuMTI4MzFWMTIuMTkwMloiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTE1LjYwNDEgMTIuMTkwMkg4LjQ3NTgzVjE5LjI5OTJIMTUuNjA0MVYxMi4xOTAyWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMjQuMDc5NyAxMi4xOTAySDE2Ljk1MTRWMTkuMjk5MkgyNC4wNzk3VjEyLjE5MDJaIiBmaWxsPSIjRkY4NjAwIi8+CjxwYXRoIGQ9Ik03LjEyODMxIDIwLjY4NjNIMFYyNy43OTUzSDcuMTI4MzFWMjAuNjg2M1oiIGZpbGw9IiMzNTQzQTgiLz4KPHBhdGggZD0iTTE1LjYwNDEgMjAuNjg2M0g4LjQ3NTgzVjI3Ljc5NTNIMTUuNjA0MVYyMC42ODYzWiIgZmlsbD0iIzM1NDNBOCIvPgo8cGF0aCBkPSJNMjQuMTIzMiAyMC42ODYzSDE2Ljk5NDlWMjcuNzk1M0gyNC4xMjMyVjIwLjY4NjNaIiBmaWxsPSIjMzU0M0E4Ii8+CjxwYXRoIGQ9Ik0xNDYgMTUuODMxM0MxNDYgMTYuODcxNyAxNDUuMTc0IDE3LjY5NTMgMTQ0LjEzMSAxNy42OTUzQzE0My4wODggMTcuNjk1MyAxNDIuMjYyIDE2Ljg3MTcgMTQyLjI2MiAxNS44MzEzQzE0Mi4yNjIgMTQuNzkxIDE0My4wODggMTQuMDEwNyAxNDQuMTMxIDE0LjAxMDdDMTQ1LjEzMSAxMy45Njc0IDE0NiAxNC43OTEgMTQ2IDE1LjgzMTNaTTE0Mi45NTcgMTQuNzkxQzE0Mi42OTcgMTUuMDUxMSAxNDIuNTY2IDE1LjQ0MTIgMTQyLjU2NiAxNS44MzEzQzE0Mi41NjYgMTYuNjk4MyAxNDMuMjYyIDE3LjM5MTggMTQ0LjEzMSAxNy4zOTE4QzE0NSAxNy4zOTE4IDE0NS42OTYgMTYuNjk4MyAxNDUuNjk2IDE1LjgzMTNDMTQ1LjY5NiAxNS4wMDc3IDE0NSAxNC4yNzA4IDE0NC4xNzQgMTQuMjcwOEMxNDMuNjUzIDE0LjI3MDggMTQzLjI2MiAxNC40NDQyIDE0Mi45NTcgMTQuNzkxWk0xNDQuODcgMTYuOTE1SDE0NC40NzlMMTQzLjkxNCAxNi4wOTE0VjE2LjkxNUgxNDMuNjA5VjE0Ljc0NzZIMTQzLjk1N0MxNDQuNDM1IDE0Ljc0NzYgMTQ0LjY1MyAxNC45NjQ0IDE0NC42NTMgMTUuMzU0NUMxNDQuNjUzIDE1LjY1NzkgMTQ0LjQ3OSAxNS44NzQ3IDE0NC4xNzQgMTUuOTYxNEwxNDQuODcgMTYuOTE1Wk0xNDQuMDQ0IDE1LjY1NzlDMTQ0LjI2MSAxNS42NTc5IDE0NC4zOTIgMTUuNTI3OSAxNDQuMzkyIDE1LjM1NDVDMTQ0LjM5MiAxNS4xMzc4IDE0NC4yNjEgMTUuMDUxMSAxNDQuMDAxIDE1LjA1MTFIMTQzLjkxNFYxNS42NTc5SDE0NC4wNDRaIiBmaWxsPSIjMzU0M0E4Ii8+Cjwvc3ZnPgo=" style="
6873
+ text-align: left;
6874
+ width: 146px;
6875
+ position: absolute;
6876
+ top: 14px;
6877
+ left: 31px;
6878
+ ">
6879
+ </div>
6880
+ <div style="
6881
+ position: relative;
6882
+ top: 80px;
6883
+ left: 32px;
6884
+ font-size: 20px;
6885
+ text-align: left;
6886
+ font-weight: 700;
6887
+ letter-spacing: 0.02em;
6888
+ font-style: normal;
6889
+ line-height: 125%;
6890
+ ">Claim your FREE account and get a key in less than a minute</div>
6891
+ <ul style="
6892
+ font-size: 15px;
6893
+ font-weight: 400;
6894
+ color: #333333;
6895
+ letter-spacing: 0.01em;
6896
+ position: relative;
6897
+ left: 32px;
6898
+ top: 88px;
6899
+ line-height: 180%;
6900
+ ">
6901
+ <li><span>Access to a 30-day free trial of any of our products.</span></li>
6902
+ <li><span>Access to 24x5 support by developers via the <a href="https://support.syncfusion.com/create" style="text-decoration: none;
6903
+ color: #0D6EFD;
6904
+ font-weight: 500;">support tickets</a>, <a href="https://www.syncfusion.com/forums" style="text-decoration: none;
6905
+ color: #0D6EFD;
6906
+ font-weight: 500;">forum</a>, <a href="https://www.syncfusion.com/feedback" style="text-decoration: none;
6907
+ color: #0D6EFD;
6908
+ font-weight: 500;">feature &amp; feedback page</a> and chat.</span></li>
6909
+ <li><span>200+ <a href="https://www.syncfusion.com/succinctly-free-ebooks" style="text-decoration: none;
6910
+ color: #0D6EFD;
6911
+ font-weight: 500;">ebooks </a>on the latest technologies, industry trends, and research topics.</span>
6912
+ </li>
6913
+ <li><span>Largest collection of over 7,000 flat and wireframe icons for free with Syncfusion <a href="https://www.syncfusion.com/succinctly-free-ebooks" style="text-decoration: none;
6914
+ color: #0D6EFD;
6915
+ font-weight: 500;">Metro Studio.</a></span></li>
6916
+ <li><span>Free and unlimited access to Syncfusion technical <a href="https://www.syncfusion.com/blogs/" style="text-decoration: none;
6917
+ color: #0D6EFD;
6918
+ font-weight: 500;">blogs</a> and <a href="https://www.syncfusion.com/resources/techportal/whitepapers" style="text-decoration: none;
6919
+ color: #0D6EFD;
6920
+ font-weight: 500;">whitepapers.</a></span></li>
6921
+ </ul>
6922
+ <div style="
6923
+ font-size: 18px;
6924
+ font-weight: 700;
6925
+ position: relative;
6926
+ line-height: 125%;
6927
+ letter-spacing: 0.02em;
6928
+ top: 90px;
6929
+ left: 32px;
6930
+ ">Syncfusion is trusted by 29,000+ businesses worldwide</div>
6931
+ <img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODIwIiBoZWlnaHQ9IjU2IiB2aWV3Qm94PSIwIDAgODIwIDU2IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MjcuNjE3IDIyLjU2NTlWMjQuNzIyNkM0MjYuNTU4IDI0LjM2MzggNDI1LjM5OCAyNC4xNTQ0IDQyNC40NzQgMjQuMTU0NEM0MjMuMzMzIDI0LjE1NDQgNDIyLjY5OCAyNC40OTEyIDQyMi42OTggMjUuMDk2M0M0MjIuNjk4IDI1LjQ4MjQgNDIyLjk3NiAyNS43MzgzIDQyMy43NzMgMjYuMDg1NEw0MjUuOTE3IDI3LjAxNzRDNDI3LjYzMyAyNy43NjM5IDQyOC40OTcgMjguODUzIDQyOC40OTcgMzAuMjY4MUM0MjguNDk3IDMyLjQ1MjIgNDI2LjU0NiAzMy44MyA0MjMuNDUyIDMzLjgzQzQyMi4zMjQgMzMuODMgNDIxLjAxOCAzMy42NzM2IDQxOS42MzYgMzMuMzcwOVYzMS4xNDE2QzQyMS4wMDYgMzEuNTAyOCA0MjIuMjYyIDMxLjY5NTcgNDIzLjIzOSAzMS42OTU3QzQyNC41MTggMzEuNjk1NyA0MjUuMjAzIDMxLjM1MDYgNDI1LjIwMyAzMC43MDc0QzQyNS4yMDMgMzAuMzIwOCA0MjQuOTM1IDMwLjAzNjcgNDI0LjMyMiAyOS43NzE3TDQyMS45NzUgMjguNzU5M0M0MjAuMjM2IDI4LjAwNzggNDE5LjQzMyAyNi45OTU0IDQxOS40MzMgMjUuNTUyMUM0MTkuNDMzIDIzLjQ4MzcgNDIxLjMxNCAyMi4xNjQ5IDQyNC4yNjUgMjIuMTY0OUM0MjUuMjk4IDIyLjE2NDkgNDI2LjU3IDIyLjMxNzEgNDI3LjYxNyAyMi41NjU5VjIyLjU2NTlaTTQzMC4xNjcgMjIuMzkwOUg0MzMuNjM1VjMzLjYwMzlINDMwLjE2N1YyMi4zOTA5Wk00NDQuOTExIDIyLjM5MDlWMjQuNDQ1MUg0MzkuNjc1VjI2Ljk3NDJINDQ0LjI0OVYyOC44MzIzSDQzOS42NzVWMzEuNDU0M0g0NDQuOTc4VjMzLjYwMzlINDM2LjMwNVYyMi4zOTA5SDQ0NC45MTFaTTQ2MS4yOTQgMjIuMzkwOVYzMy42MDM5SDQ1Ny45MzlWMjYuMjIzNkw0NTQuNjUyIDMzLjY5MTVINDUyLjUzMUw0NDkuMjY2IDI2LjIyMzZWMzMuNjAzOUg0NDYuOTQ5VjIyLjM5MDlINDUxLjE4NEw0NTQuMTc4IDI5LjIxMTRMNDU3LjE1NiAyMi4zOTA5SDQ2MS4yOTRWMjIuMzkwOVpNNDcyLjU3OSAyMi4zOTA5VjI0LjQ0NTFINDY3LjMzNVYyNi45NzQySDQ3MS45MDhWMjguODMyM0g0NjcuMzM1VjMxLjQ1NDNINDcyLjYzOFYzMy42MDM5SDQ2My45NTdWMjIuMzkwOUg0NzIuNTc5Wk00ODQuNzk0IDIyLjM5MDlWMzMuNjAzOUg0ODEuMDkzTDQ3Ni45MjYgMjYuNDEyM1YzMy42MDM5SDQ3NC42MDhWMjIuMzkwOUg0NzguNDA3TDQ4Mi40ODQgMjkuNDg3NlYyMi4zOTA5SDQ4NC43OTRaTTQ5NC44NTggMjIuNTY1OVYyNC43MjI2QzQ5My44MDcgMjQuMzY2MyA0OTIuNjQgMjQuMTU0NCA0OTEuNzMyIDI0LjE1NDRDNDkwLjU3MyAyNC4xNTQ0IDQ4OS45MzkgMjQuNDg1OCA0ODkuOTM5IDI1LjA5M0M0ODkuOTM5IDI1LjQ4ODYgNDkwLjE5OCAyNS43MjUgNDkxLjAyMyAyNi4wODU5TDQ5My4xNTcgMjcuMDE3OEM0OTQuODg1IDI3Ljc3MjIgNDk1LjczOSAyOC44NTE4IDQ5NS43MzkgMzAuMjgzNUM0OTUuNzM5IDMyLjQ1NTkgNDkzLjc4NiAzMy44MzA4IDQ5MC42OTkgMzMuODMwOEM0ODkuNTY5IDMzLjgzMDggNDg4LjI1OSAzMy42NzM2IDQ4Ni44NzggMzMuMzcxN1YzMS4xNDI0QzQ4OC4yNDcgMzEuNTAyOCA0ODkuNDk5IDMxLjY5NjUgNDkwLjQ3IDMxLjY5NjVDNDkxLjc0IDMxLjY5NjUgNDkyLjQ0NCAzMS4zNTE1IDQ5Mi40NDQgMzAuNzI4NUM0OTIuNDQ0IDMwLjMxNjMgNDkyLjE5NyAzMC4wNTA0IDQ5MS41NTUgMjkuNzcyNUw0ODkuMjE4IDI4Ljc2MDFDNDg3LjQ2NyAyOC4wMDI4IDQ4Ni42NzQgMjcuMDAyIDQ4Ni42NzQgMjUuNTUzM0M0ODYuNjc0IDIzLjQ4NjIgNDg4LjU1NiAyMi4xNjY1IDQ5MS41IDIyLjE2NjVDNDkyLjUzNiAyMi4xNjUzIDQ5My44MTMgMjIuMzE3MSA0OTQuODU4IDIyLjU2NTlWMjIuNTY1OVoiIGZpbGw9IiMwMEEwQjAiLz4NCjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzUyLjQxMyAyNi44MTlDMzUwLjk5MiAyNS4yNzU5IDM0OS42MzggMjMuODMxNSAzNDguMzQ5IDIyLjE1NzRMMzQ3LjkyIDIxLjU5OTVDMzQ5LjQwNiAyMS4zNjkzIDM1MC42OTUgMjAuMzg0OCAzNTAuNjk1IDE4Ljc0MzNDMzUwLjY5NSAxNy4yMzMxIDM0OS41MzkgMTYuMjQ4MiAzNDcuODIxIDE2LjI0ODJDMzQ2LjU5OCAxNi4yNDgyIDM0NS43MDYgMTYuMzEzNyAzNDUuMjQzIDE2LjMxMzdDMzQ0LjcxNSAxNi4zMTM3IDM0NC4yODUgMTYuMzEzNyAzNDMuNzkgMTYuMjgwOEMzNDMuODU2IDE4LjE1MjEgMzQzLjg4OSAxOC4yODM0IDM0My44ODkgMTkuNDMyMlYyMy42MzQzQzM0My44ODkgMjQuNDU1MyAzNDMuODU2IDI1LjI3NTkgMzQzLjc5IDI2LjgxODZDMzQ0LjE1MyAyNi43MjAyIDM0NC41MTcgMjYuNzIwMiAzNDQuNzgxIDI2LjcyMDJDMzQ1LjA0NSAyNi43MjAyIDM0NS40MDkgMjYuNzUzMSAzNDUuNzA2IDI2LjgxODZDMzQ1LjY0IDI1Ljc2NzkgMzQ1LjYwNyAyNC4wMjgzIDM0NS42MDcgMjMuNjM0M1YyMS4yMDUxQzM0Ny4xNiAyMy4yMDc3IDM0OS4yMDkgMjUuNjY5NSAzNTAuMDAxIDI2LjgxODZDMzUwLjM5OCAyNi43MjAyIDM1MC43MjggMjYuNzIwMiAzNTEuMTI0IDI2LjcyMDJDMzUxLjQ1NSAyNi43MjA2IDM1MS45MTggMjYuNzIwNiAzNTIuNDEzIDI2LjgxOVYyNi44MTlaTTM0OC44NzggMTkuMDA2QzM0OC44NzggMjAuMDIzNCAzNDguMzE3IDIxLjIwNTQgMzQ2Ljc5NyAyMS4yMDU0QzM0Ni40IDIxLjIwNTQgMzQ2LjAwMyAyMS4yMDU0IDM0NS42MDcgMjEuMTcyNVYxNy4wNjg4QzM0Ni4wMDMgMTYuOTcwNCAzNDYuNDk5IDE2LjkwNDYgMzQ2Ljc2MyAxNi45MDQ2QzM0OC4wODUgMTYuOTA0OSAzNDguODc4IDE3LjY2IDM0OC44NzggMTkuMDA2VjE5LjAwNlpNMzgyLjM4IDI2Ljg4NDVDMzgxLjgxOSAyNi4yOTM2IDM4MC45NiAyNS4zNDE3IDM4MC4xMzQgMjQuNDIyM0MzODAuODI4IDIzLjY2NzIgMzgxLjU1NSAyMi41NTEgMzgxLjk4NCAyMS41OTkxQzM4MS43MTkgMjEuNDY3OCAzODEuMzU2IDIxLjIwNTEgMzgxLjA5MiAyMC45NzUzQzM4MC45OTMgMjEuNzk1OSAzODAuNDMyIDIyLjg3OTIgMzc5LjYzOSAyMy44MzE1QzM3OC41MTUgMjIuNTE4NSAzNzguMjE4IDIyLjE1NzQgMzc3LjE5MyAyMC43Nzg1QzM3OC41ODEgMTkuODkyMSAzNzkuMjQyIDE4Ljg3NDMgMzc5LjI0MiAxOC4wNTM3QzM3OS4yNDIgMTcuMTAxNyAzNzguNTgxIDE2LjExNjkgMzc2Ljk2MiAxNi4xMTY5QzM3NS4yMTEgMTYuMTE2OSAzNzQuMzUyIDE3LjIwMDIgMzc0LjM1MiAxOC40ODAzQzM3NC4zNTIgMTkuMjM1NCAzNzQuNTUgMTkuODkxNyAzNzUuMzc2IDIwLjk3NTNDMzc0LjA1NCAyMS42OTc1IDM3Mi43NjYgMjIuNzQ3OSAzNzIuNzY2IDI0LjQyMjNDMzcyLjc2NiAyNi4wNjM5IDM3NC4wODcgMjYuOTE3NCAzNzUuNzA3IDI2LjkxNzRDMzc3LjE5MyAyNi45MTc0IDM3OC4xNTEgMjYuMzI2NiAzNzguOTEyIDI1LjYzNjlMMzc5LjkwMiAyNi44MTlDMzgwLjIgMjYuNzg2MSAzODAuNTMxIDI2LjcyMDYgMzgwLjg2MSAyNi43MjA2QzM4MS4zMjQgMjYuNzIwNiAzODEuODUyIDI2Ljc4NjEgMzgyLjM4IDI2Ljg4NDVWMjYuODg0NVpNMzgzLjM3MiA0MC4wMTU4QzM4MS45MTggMzguNDczIDM4MC41OTcgMzcuMDYxMiAzNzkuMzA4IDM1LjM4NzFMMzc4Ljg3OCAzNC44Mjg4QzM4MC4zMzIgMzQuNTk5MSAzODEuNjU0IDMzLjYxNSAzODEuNjU0IDMxLjk0MDFDMzgxLjY1NCAzMC40NjMyIDM4MC40OTggMjkuNDQ1NCAzNzguNzc5IDI5LjQ0NTRDMzc3LjU1NyAyOS40NDU0IDM3Ni42MzIgMjkuNTQzNSAzNzYuMTY5IDI5LjU0MzVDMzc1LjY3MyAyOS41NDM1IDM3NS4yNDQgMjkuNTQzNSAzNzQuNzQ4IDI5LjQ3NzZDMzc0LjgxNCAzMS4zODIyIDM3NC44NDggMzEuNDgwMiAzNzQuODQ4IDMyLjYyOTRWMzYuODMxMUMzNzQuODQ4IDM3LjY1MjQgMzc0LjgxNCAzOC41MDUyIDM3NC43NDggNDAuMDE1NEMzNzUuMTEyIDM5Ljk0OTYgMzc1LjQ3NSAzOS45NDk2IDM3NS43MDcgMzkuOTQ5NkMzNzYuMDA0IDM5Ljk0OTYgMzc2LjM2OCAzOS45NDk2IDM3Ni42MzIgNDAuMDE1NEMzNzYuNTY1IDM4Ljk5OCAzNzYuNTMzIDM3LjI1ODEgMzc2LjUzMyAzNi44MzExVjM0LjQzNDhDMzc4LjExOSAzNi40MDQyIDM4MC4xNjcgMzguODk5NiAzODAuOTYgNDAuMDE1NEMzODEuMzU2IDM5Ljk0OTYgMzgxLjY4NyAzOS45NDk2IDM4Mi4wODMgMzkuOTQ5NkMzODIuMzggMzkuOTUgMzgyLjg3NiAzOS45NSAzODMuMzcyIDQwLjAxNThaTTM2Mi4xNiAyNi44MTlDMzYwLjk3MSAyNS41NzE1IDM1OC44ODkgMjIuOTc4IDM1OC4wNjMgMjEuOTkzNUwzNTcuMjM3IDIwLjk3NTdDMzU4LjA5NiAxOS45NTgzIDM1OC42OSAxOS4zMzQxIDM1OS4zMTkgMTguNTc5QzM2MC4wNDUgMTcuNzkxIDM2MC43MDYgMTYuOTcwNCAzNjEuNDk5IDE2LjI0ODJDMzYxLjEzNiAxNi4zMTM3IDM2MC45MzcgMTYuMzEzNyAzNjAuNzM5IDE2LjMxMzdDMzYwLjU0MSAxNi4zMTM3IDM2MC4zNDMgMTYuMzEzNyAzNjAuMTQ0IDE2LjI0ODJDMzU5LjkxMyAxNi42MDkzIDM1OS41NSAxNy4wNjg4IDM1OS4xNTMgMTcuNTI4N0MzNTguNzU2IDE3Ljk1NTYgMzU4LjM2IDE4LjM4MjIgMzU4LjA2MyAxOC43NDMzQzM1Ny4yMzYgMTkuNjk1MiAzNTYuNzc0IDIwLjE1NDcgMzU1LjU4NSAyMS4yNzA5VjE5LjQ2NTVDMzU1LjU4NSAxOC40MTUxIDM1NS41ODUgMTcuNzI1NSAzNTUuNjUxIDE2LjI0ODJDMzU1LjMyMSAxNi4zMTM3IDM1NC45NTcgMTYuMzEzNyAzNTQuNzI2IDE2LjMxMzdDMzU0LjQ2MSAxNi4zMTM3IDM1NC4wMzIgMTYuMzEzNyAzNTMuNzY4IDE2LjI0ODJDMzUzLjgzMyAxNy44MjM5IDM1My44NjcgMTguMjgzNCAzNTMuODY3IDE5LjQzMjVWMjMuNjM0N0MzNTMuODY3IDI0LjY4NSAzNTMuODMzIDI1LjMwODggMzUzLjc2OCAyNi44MTlDMzU0LjE2NCAyNi43MjA2IDM1NC40OTUgMjYuNzIwNiAzNTQuNzI2IDI2LjcyMDZDMzU0Ljk1NyAyNi43MjA2IDM1NS4zNTMgMjYuNzUzNSAzNTUuNjUxIDI2LjgxOUMzNTUuNTg1IDI1LjE0NDkgMzU1LjU4NSAyNC4xNTk3IDM1NS41ODUgMjMuNjM0N1YyMS40MzUyQzM1Ni44MDcgMjIuODc5NiAzNTguNjkgMjUuMjQzMyAzNTkuNzQ4IDI2LjgxOUMzNjAuMTMgMjYuNzU2MyAzNjAuNTE3IDI2LjcyMzQgMzYwLjkwNSAyNi43MjA2QzM2MS4yMDIgMjYuNzIwNiAzNjEuNjY1IDI2LjcyMDYgMzYyLjE2IDI2LjgxOVYyNi44MTlaTTM3Mi42MDEgNDAuMDE1OEMzNzIuNTY4IDM5Ljg1MTkgMzcyLjUzNSAzOS43MjA2IDM3Mi41MzUgMzkuNTIzNEMzNzIuNTM1IDM5LjM5MjggMzcyLjU2OCAzOS4yMjgxIDM3Mi42MDEgMzkuMDk2NEMzNzEuMjggMzkuMTI5NyAzNjguOTAxIDM5LjE5NTIgMzY4LjM3MiAzOS4xOTUyVjM0LjY2NDlDMzY5LjY5NCAzNC42NjQ5IDM3MC45ODIgMzQuNjY0OSAzNzIuMjcgMzQuNzk2M0MzNzIuMjM4IDM0LjYzMjQgMzcyLjIwNCAzNC40Njc3IDM3Mi4yMDQgMzQuMzM2NEMzNzIuMjA0IDM0LjIwNTggMzcyLjIwNCAzNC4wNDE5IDM3Mi4yNyAzMy44NDQ3QzM3MS4zNDYgMzMuOTQyOCAzNjkuMTk4IDMzLjk3NiAzNjguMzcyIDMzLjk3NlYzMC4yNjZDMzY5LjgyNiAzMC4yNjYgMzcwLjY4NSAzMC4yNjYgMzcxLjE4IDMwLjI5OTNMMzcyLjUwMiAzMC4zNjUxQzM3Mi40MzYgMzAuMTY3OSAzNzIuNDM2IDMwLjA2OTIgMzcyLjQzNiAyOS45MDUzQzM3Mi40MzYgMjkuNzQxNCAzNzIuNDM2IDI5LjcwODEgMzcyLjUwMiAyOS40NDU4QzM3MS40MTEgMjkuNDc4MyAzNjkuOTI1IDI5LjU0MzggMzY5LjI2NCAyOS41NDM4QzM2OC44MDIgMjkuNTQzOCAzNjcuMzQ4IDI5LjUxMTMgMzY2LjU4NyAyOS40NDU4QzM2Ni42NTQgMzAuMjY2NCAzNjYuNjg2IDMxLjYxMjMgMzY2LjY4NiAzMi41NjQyVjM2Ljg2NTFDMzY2LjY4NiAzNy40ODg1IDM2Ni42MiAzOC43MzU3IDM2Ni41ODcgNDAuMDE2MkMzNjcuNTEzIDM5Ljk1MDMgMzY4LjgwMiAzOS45NTAzIDM2OS4yNjQgMzkuOTUwM0MzNzAuMDI0IDM5Ljk1IDM3MS42NDMgMzkuOTUgMzcyLjYwMSA0MC4wMTU4Wk0zNjQuNjA1IDM5LjEyOTRDMzY0LjQ0IDM4LjgwMDggMzY0LjM0MSAzOC4zMDg4IDM2NC4yNzUgMzguMDQ2MUMzNjIuOTIgMzkuMTYxOSAzNjEuOTk1IDM5LjM5MjQgMzYwLjkzOCAzOS4zOTI0QzM1OC41OTIgMzkuMzkyNCAzNTcuMzM3IDM3LjI5MTMgMzU3LjMzNyAzNC42NjQ5QzM1Ny4zMzcgMzEuNzQzNiAzNTguNzU3IDMwLjAzNjIgMzYxLjE2OSAzMC4wMzYyQzM2Mi40MjUgMzAuMDM2MiAzNjMuNjE0IDMwLjU5NDUgMzY0LjE3NiAzMS4xNTI4QzM2NC4yMDggMzAuODg5OCAzNjQuMzA4IDMwLjM2NDggMzY0LjQ3MyAzMC4wNjg4QzM2My4zMTYgMjkuNTExMyAzNjIuMjU5IDI5LjM0NjYgMzYxLjEwMiAyOS4zNDY2QzM1Ny4yMzcgMjkuMzQ2NiAzNTUuNDUzIDMxLjc0MzYgMzU1LjQ1MyAzNC44Mjg4QzM1NS40NTMgMzguMzA5MSAzNTcuNzk4IDQwLjE0NzEgMzYwLjczOSA0MC4xNDcxQzM2Mi40MjUgNDAuMTQ3MSAzNjMuODEyIDM5LjYyMjIgMzY0LjYwNSAzOS4xMjk0VjM5LjEyOTRaTTM0Mi4zMDMgMjYuODE5QzM0MC41MTkgMjMuNDA0OSAzMzguOCAxOS4xMzczIDMzNy41NzggMTYuMTE2OUgzMzcuMzhDMzM2LjU4NyAxOC4wMjA3IDMzNS4xMzMgMjEuMjcwOSAzMzQuNzM3IDIyLjE4OTlDMzM0LjI3NCAyMy4zMDYxIDMzMy4yNSAyNS41MDU2IDMzMi41ODkgMjYuODE4NkMzMzIuODAzIDI2Ljc1MzggMzMzLjAyNiAyNi43MjA2IDMzMy4yNSAyNi43MjAyQzMzMy40NDggMjYuNzIwMiAzMzMuNjEzIDI2Ljc1MzEgMzMzLjg0NSAyNi44MTg2QzMzNC4xNzUgMjUuOTMyMiAzMzQuNjM4IDI0LjgxNiAzMzUuMTMzIDIzLjYzNDNDMzM1Ljc5NCAyMy42MDE0IDMzNi4zODkgMjMuNTY4OCAzMzYuOTg0IDIzLjU2ODhDMzM3LjYxMiAyMy41Njg4IDMzOC4yNzIgMjMuNjAxNCAzMzguOTMzIDIzLjYzNDNMMzM5LjU5NCAyNS4yMUwzNDAuMjU1IDI2LjgxODZDMzQwLjcxNyAyNi43MjAyIDM0MS4wOCAyNi43MjAyIDM0MS4zMTIgMjYuNzIwMkMzNDEuNjA5IDI2LjcyMDYgMzQxLjg3MyAyNi43MjA2IDM0Mi4zMDMgMjYuODE5VjI2LjgxOVpNMzUzLjYzNiAyOS40NDU0QzM1My40MzggMjkuNTExMyAzNTMuMjczIDI5LjU0MzUgMzUzLjEwNyAyOS41NDM1QzM1Mi45MDkgMjkuNTQzNSAzNTIuNzQ0IDI5LjUxMDkgMzUyLjU0NiAyOS40NDU0QzM1Mi42NDQgMzAuNzU4NCAzNTIuNjc4IDMyLjA3MTQgMzUyLjY3OCAzMy4zNTE5VjM2LjczMzRDMzUyLjE0OSAzNi4yNzM2IDM1MC44NiAzNS4wOTE5IDM0OS4zNzQgMzMuNzEzQzM0Ny44NiAzMi4zMDc0IDM0Ni4zOTQgMzAuODUxMSAzNDQuOTc5IDI5LjM0NjZIMzQ0Ljc0OEMzNDQuNzgxIDMwLjgyNDMgMzQ0LjgxNCAzMi40IDM0NC44MTQgMzMuODExNFYzNS44Nzk5QzM0NC44MTQgMzcuNjUyOCAzNDQuODE0IDM4LjYwNDcgMzQ0LjcxNSA0MC4wMTYyQzM0NC45OCAzOS45NTAzIDM0NS4xMTIgMzkuOTUwMyAzNDUuMzEgMzkuOTUwM0MzNDUuNDQyIDM5Ljk1MDMgMzQ1LjU3NSAzOS45NTAzIDM0NS44MDYgNDAuMDE2MkMzNDUuNzQgMzguNjcwNiAzNDUuNzA3IDM2LjQ3MDggMzQ1LjcwNyAzNS44Nzk5VjMyLjU5NjhDMzQ4LjE4NSAzNC44NjI1IDM1MS4yMjQgMzcuODgyNiAzNTMuNDcxIDQwLjE0NzVIMzUzLjYwM0MzNTMuNjAzIDM4LjkzMjkgMzUzLjUzNyAzNy43MTc5IDM1My41MzcgMzYuNTA0VjM0LjYzMjdDMzUzLjUzNiAzMi40MzI1IDM1My41MzYgMzEuMzQ5MyAzNTMuNjM2IDI5LjQ0NTRaTTM0Mi41NjcgNDAuMDE1OEMzNDIuNTM0IDM5Ljg1MTkgMzQyLjUwMSAzOS43MjA2IDM0Mi41MDEgMzkuNTIzNEMzNDIuNTAxIDM5LjM5MjggMzQyLjUzNCAzOS4yMjgxIDM0Mi41NjcgMzkuMDk2NEMzNDEuMjQ2IDM5LjEyOTcgMzM4Ljg2NyAzOS4xOTUyIDMzOC4zNzEgMzkuMTk1MlYzNC42NjQ5QzMzOS42NiAzNC42NjQ5IDM0MC45NDggMzQuNjY0OSAzNDIuMjM3IDM0Ljc5NjNDMzQyLjIwNCAzNC42MzI0IDM0Mi4xNzEgMzQuNDY3NyAzNDIuMTcxIDM0LjMzNjRDMzQyLjE3MSAzNC4yMDU4IDM0Mi4xNzEgMzQuMDQxOSAzNDIuMjM3IDMzLjg0NDdDMzQxLjMxMiAzMy45NDI4IDMzOS4xOTcgMzMuOTc2IDMzOC4zNzEgMzMuOTc2VjMwLjI2NkMzMzkuNzkyIDMwLjI2NiAzNDAuNjUxIDMwLjI2NiAzNDEuMTc5IDMwLjI5OTNMMzQyLjQ2OCAzMC4zNjUxQzM0Mi40MzUgMzAuMTY3OSAzNDIuNDM1IDMwLjA2OTIgMzQyLjQzNSAyOS45MDUzQzM0Mi40MzUgMjkuNzQxNCAzNDIuNDM1IDI5LjY3NTUgMzQyLjQ2OCAyOS40NDU4QzM0MS4zNzggMjkuNDc4MyAzMzkuODkxIDI5LjU0MzggMzM5LjIzIDI5LjU0MzhDMzM4Ljc2NyAyOS41NDM4IDMzNy4zMTQgMjkuNTExMyAzMzYuNTU0IDI5LjQ0NThDMzM2LjYyIDMwLjI2NjQgMzM2LjY1MyAzMS42MTIzIDMzNi42NTMgMzIuNTY0MlYzNi44NjUxQzMzNi42NTMgMzcuNDg4NSAzMzYuNTg3IDM4LjczNTcgMzM2LjU1NCA0MC4wMTYyQzMzNy41MTIgMzkuOTUwMyAzMzguNzY3IDM5Ljk1MDMgMzM5LjIzIDM5Ljk1MDNDMzM5Ljk5IDM5Ljk1IDM0MS42NDIgMzkuOTUgMzQyLjU2NyA0MC4wMTU4VjQwLjAxNThaTTMzMS4yMDEgMjYuODE5QzMzMC42NzMgMjMuMjQwNiAzMzAuMjEgMTkuNDk4NCAzMjkuODQ3IDE2LjExNjlDMzI5Ljc0OCAxNi4xNDk4IDMyOS43MTQgMTYuMTQ5OCAzMjkuNjQ5IDE2LjExNjlDMzI4Ljk1NSAxNy4zMzE1IDMyOC4xNjIgMTguNjQ0NSAzMjcuNTY3IDE5LjU2MzlDMzI3LjAwNiAyMC40NTAzIDMyNi4zNDUgMjEuNTAwNyAzMjUuNTg1IDIyLjYxNjlDMzIzLjk5OSAyMC41ODE3IDMyMi4zNDcgMTguMDIxMSAzMjEuMjU2IDE2LjExNjlDMzIxLjE5IDE2LjE0OTggMzIxLjE1NyAxNi4xMTY5IDMyMS4wOTEgMTYuMTE2OUMzMjAuNzI4IDE5LjQ5OCAzMjAuMjMyIDIzLjI3MzIgMzE5LjczNiAyNi44MTlDMzIwLjAwMSAyNi43MjA2IDMyMC4xNjYgMjYuNzIwNiAzMjAuMjk4IDI2LjcyMDZDMzIwLjQ5NiAyNi43MjA2IDMyMC42MjggMjYuNzUzNSAzMjAuODU5IDI2LjgxOUMzMjAuOTkyIDI0LjQ1NTMgMzIxLjI1NiAyMi4xMjQ0IDMyMS41NTMgMTkuNjYyM0MzMjIuODQyIDIxLjUzMzYgMzIzLjk2NSAyMy4xNDIyIDMyNS4yMjEgMjQuODQ5M0MzMjYuMjc4IDIzLjIwNzcgMzI3LjM2OCAyMS40MzQ4IDMyOC41NTggMTkuNjI5NEMzMjguODg4IDIyLjE1NyAzMjkuMTg2IDI0LjQ1NTMgMzI5LjM1MSAyNi44MTlDMzI5Ljc4IDI2LjcyMDYgMzMwLjA3OCAyNi43MjA2IDMzMC4yNzYgMjYuNzIwNkMzMzAuNTQgMjYuNzIwNiAzMzAuODA1IDI2LjcyMDYgMzMxLjIwMSAyNi44MTlWMjYuODE5Wk0zMzQuOTY4IDMyLjIwMjhDMzM0Ljk2OCAzMC4yOTg5IDMzMy40NDggMjkuNDQ1NCAzMzEuNTk4IDI5LjQ0NTRDMzMwLjc3MiAyOS40NDU0IDMyOS44OCAyOS41NDM1IDMyOS4yNTIgMjkuNTQzNUMzMjkuMDIxIDI5LjU0MzUgMzI4LjUyNSAyOS41NDM1IDMyNy45OTcgMjkuNDc3NkMzMjguMDMgMzAuNTI4MyAzMjguMDk2IDMxLjQxNDggMzI4LjA5NiAzMi40MzIyVjM2LjkyOTVDMzI4LjA5NiAzNy45MTQ4IDMyOC4wMyAzOC45OTggMzI3Ljk5NyA0MC4wMTU0QzMyOC40MjYgMzkuOTQ5NiAzMjguNzI0IDM5Ljk0OTYgMzI4LjkyMiAzOS45NDk2QzMyOS4xNTMgMzkuOTQ5NiAzMjkuNDg0IDM5Ljk0OTYgMzI5Ljg4IDQwLjAxNTRDMzI5LjgxNSAzOS4wMzE5IDMyOS43ODIgMzguMDQ2NSAzMjkuNzgxIDM3LjA2MDlWMzUuNDJDMzMwLjE0NSAzNS40NTI2IDMzMC41MDggMzUuNDUyNiAzMzAuOTA1IDM1LjQ1MjZDMzMyLjgyIDM1LjQ1MjYgMzM0Ljk2OCAzNC43MzA0IDMzNC45NjggMzIuMjAyOFYzMi4yMDI4Wk0zMjYuMDE0IDM2Ljg5NzNDMzI2LjAxNCAzNS4yNTU4IDMyNC45MjQgMzQuNTMzNiAzMjMuMDQgMzMuNzQ1NkMzMjEuNjg2IDMzLjE4OCAzMjAuOTkyIDMyLjY5NTYgMzIwLjk5MiAzMS42NDQ1QzMyMC45OTIgMzAuNjYgMzIxLjc1MiAzMC4wMzYyIDMyMy4wMDggMzAuMDM2MkMzMjMuODM0IDMwLjAzNjIgMzI0LjU2MSAzMC4zMzE1IDMyNS4yMjIgMzAuODU2OEMzMjUuMjg3IDMwLjQ5NTcgMzI1LjQ1MyAzMC4xMzQ3IDMyNS42NTEgMjkuODM5NEMzMjQuODU4IDI5LjQ3ODMgMzIzLjk5OSAyOS4zNDcgMzIzLjA3NCAyOS4zNDdDMzIwLjM2NSAyOS4zNDcgMzE5LjUwNSAzMC44OTA1IDMxOS41MDUgMzIuMjAzNUMzMTkuNTA1IDMzLjgxMTggMzIwLjI5OSAzNC41NjcyIDMyMi4zNDcgMzUuMzU1M0MzMjMuNjM2IDM1Ljg0NyAzMjQuMjk2IDM2LjQ3MTEgMzI0LjI5NiAzNy41NTQ0QzMyNC4yOTYgMzguNzAzNSAzMjMuNDM3IDM5LjQyNTcgMzIyLjI0OCAzOS40MjU3QzMyMS41NTQgMzkuNDI1NyAzMjAuMzY1IDM5LjA2NDYgMzE5LjUzOSAzOC4zMDk5QzMxOS41MDUgMzguNzM2MSAzMTkuNTA1IDM5LjEzMDQgMzE5LjM3MyAzOS40OTE1QzMxOS45MDIgMzkuNzU0NiAzMjEuMTI1IDQwLjE0NzkgMzIyLjIxNSA0MC4xNDc5QzMyNC45OSA0MC4xNDcxIDMyNi4wMTQgMzguNDM5NyAzMjYuMDE0IDM2Ljg5NzNWMzYuODk3M1pNMzc4LjE1MiAxNy45ODgyQzM3OC4xNTIgMTguOTczIDM3Ny40NTggMTkuNjYyMyAzNzYuNzY0IDIwLjIyMDJDMzc2LjMwMSAxOS41NjM5IDM3NS43NCAxOC42NzcxIDM3NS43NCAxNy45ODgyQzM3NS43NCAxNy4yMzMxIDM3Ni4yNjggMTYuODA2MSAzNzYuOTk1IDE2LjgwNjFDMzc3Ljk4NyAxNi44MDY1IDM3OC4xNTIgMTcuNjkyNiAzNzguMTUyIDE3Ljk4ODJWMTcuOTg4MlpNMzc4LjQ4MiAyNS4wMTMyQzM3OC4xMTkgMjUuMzQxNyAzNzcuMjYgMjUuOTY1NSAzNzYuNTMzIDI1Ljk2NTVDMzc1LjU3NCAyNS45NjU1IDM3NC40MTggMjUuMjc1OSAzNzQuNDE4IDIzLjc5ODZDMzc0LjQxOCAyMi40ODU1IDM3NS4yNzcgMjEuODk0NyAzNzUuODA2IDIxLjU2NjVDMzc3LjAyOCAyMy4yNDA2IDM3Ny4wOTUgMjMuMzM5MSAzNzguNDgyIDI1LjAxMzJaTTM3OS44MDQgMzIuMjAyOEMzNzkuODA0IDMzLjI1MzUgMzc5LjI3NSAzNC40MDI2IDM3Ny43NTUgMzQuNDAyNkMzNzcuMzI2IDM0LjQwMjYgMzc2LjkyOSAzNC40MDI2IDM3Ni41MzMgMzQuMzY5M1YzMC4yNjU2QzM3Ni45MjkgMzAuMTY3NiAzNzcuNDI1IDMwLjEzNDMgMzc3LjcyMiAzMC4xMzQzQzM3OS4wMTEgMzAuMTM0MyAzNzkuODA0IDMwLjg4OTggMzc5LjgwNCAzMi4yMDI4Wk0zMzguNjAyIDIyLjgxNDFDMzM3LjkwOSAyMi44NDY2IDMzNy41NDUgMjIuODQ2NiAzMzcuMDgyIDIyLjg0NjZDMzM2LjUyMSAyMi44NDY2IDMzNi4xOSAyMi44NDY2IDMzNS40NjMgMjIuODE0MUwzMzcuMDgyIDE5LjAwNkwzMzguNjAyIDIyLjgxNDFaTTMzMy4xNTEgMzIuMzAwOEMzMzMuMTUxIDMzLjgxMTEgMzMyLjI1OCAzNC43OTU5IDMzMC44MDUgMzQuNzk1OUMzMzAuNTA3IDM0Ljc5NTkgMzMwLjE3NyAzNC43OTU5IDMyOS43OCAzNC43MzAxVjMwLjIzMjdDMzMwLjI0MyAzMC4xNjY5IDMzMC42MzkgMzAuMTMzOSAzMzEuMDM2IDMwLjEzMzlDMzMyLjQyNCAzMC4xMzQzIDMzMy4xNTEgMzEuMDIxMSAzMzMuMTUxIDMyLjMwMDhaTTM2OS41MjggMjMuNjY3NkMzNjkuNTI4IDIyLjAyNiAzNjguNDM4IDIxLjMwMzkgMzY2LjU1NSAyMC41MTYyQzM2NS4yIDE5Ljk1ODMgMzY0LjUwNiAxOS40OTg4IDM2NC41MDYgMTguNDE1MUMzNjQuNTA2IDE3LjQ2MzIgMzY1LjI2NiAxNi44MDY1IDM2Ni41MjEgMTYuODA2NUMzNjcuMzQ4IDE2LjgwNjUgMzY4LjA3NSAxNy4xMDE3IDM2OC43MzUgMTcuNjI3NUMzNjguODAyIDE3LjI2NjQgMzY4Ljk2NyAxNi45MDQ5IDM2OS4xMzEgMTYuNjQyMkMzNjguMzcyIDE2LjI4MTEgMzY3LjQ3OSAxNi4xMTcyIDM2Ni41ODcgMTYuMTE3MkMzNjMuOTQ0IDE2LjExNzIgMzYyLjk4NiAxNy42NiAzNjIuOTg2IDE5LjAwNkMzNjIuOTg2IDIwLjU4MTcgMzYzLjgxMiAyMS4zMzY4IDM2NS44NjEgMjIuMTI0NEMzNjcuMTQ5IDIyLjYxNjkgMzY3LjgxIDIzLjI0MDYgMzY3LjgxIDI0LjM1NjhDMzY3LjgxIDI1LjQ3MyAzNjYuOTUxIDI2LjE5NTIgMzY1Ljc2MiAyNi4xOTUyQzM2NS4wMzUgMjYuMTk1MiAzNjMuODc5IDI1LjgzNDEgMzYzLjA1MiAyNS4xMTE5QzM2My4wMiAyNS41Mzg5IDM2Mi45ODYgMjUuOSAzNjIuODg3IDI2LjI2MTFDMzYzLjM4MyAyNi41MjM4IDM2NC42MDYgMjYuOTE3NCAzNjUuNzI5IDI2LjkxNzRDMzY4LjUwNCAyNi45MTc0IDM2OS41MjggMjUuMjQzMyAzNjkuNTI4IDIzLjY2NzZWMjMuNjY3NloiIGZpbGw9IiMwMzY1NTUiLz4NCjxwYXRoIGQ9Ik02NDAuNDE2IDIwLjU1NzNDNjM4LjY3MSAxOS44MzU0IDYzNy42MzEgMTkuNTU1MSA2MzYuNTk4IDE5LjU1NTFDNjM1LjUxNCAxOS41NTUxIDYzNC44MTkgMTkuOTE3IDYzNC44MTkgMjAuNDc2NUM2MzQuODE5IDIyLjE2NDUgNjQwLjk2MiAyMS42ODkzIDY0MC45NjIgMjUuNTkzNkM2NDAuOTYyIDI3Ljc0NjQgNjM5LjAyNCAyOC45OTc0IDYzNi4zMzIgMjguOTk3NEM2MzQuMjIgMjguOTk3NCA2MzMuMTggMjguNDg4IDYzMS45ODMgMjcuOTExNlYyNS40OTYyQzYzMy43MSAyNi41NjM1IDYzNC43NjggMjYuOTQwMSA2MzYuMTAxIDI2Ljk0MDFDNjM3LjI1NiAyNi45NDAxIDYzNy44NzkgMjYuNTYzNSA2MzcuODc5IDI1LjkwNjNDNjM3Ljg3OSAyNC4wNjg1IDYzMS43MzcgMjQuNzQxNSA2MzEuNzM3IDIwLjcyMTNDNjMxLjczNyAxOC43ODI3IDYzMy41MzQgMTcuNDk5IDYzNi4zMzIgMTcuNDk5QzYzNy42ODIgMTcuNDk5IDYzOC45MDEgMTcuNzYzNSA2NDAuNDE2IDE4LjM3MDdWMjAuNTU3M1pNNjQ5LjAxNiAyOC40ODQxQzY0Ny45OTIgMjguODMwNiA2NDcuMTI2IDI4Ljk5NTQgNjQ2LjI2MiAyOC45OTU0QzY0My40MDIgMjguOTk1NCA2NDEuNTUyIDI3LjQ0MjIgNjQxLjU1MiAyNS4wNzkyQzY0MS41NTIgMjIuNzU5NCA2NDMuNDczIDIxLjEyMDIgNjQ2LjE1NiAyMS4xMjAyQzY0Ni45ODUgMjEuMTIwMiA2NDguMDQ0IDIxLjMxODIgNjQ4Ljg5MSAyMS42MTIzVjIzLjM4ODFDNjQ4LjIyMSAyMy4wNTYyIDY0Ny40NDQgMjIuODc0MSA2NDYuODA5IDIyLjg3NDFDNjQ1LjI3MyAyMi44NzQxIDY0NC4yODYgMjMuNzM0MyA2NDQuMjg2IDI1LjA2MTlDNjQ0LjI4NiAyNi40MDggNjQ1LjI1NiAyNy4yOTQgNjQ2LjcyIDI3LjI5NEM2NDcuMzM3IDI3LjI5NCA2NDcuODg2IDI3LjE2MjMgNjQ5LjAxNiAyNi43NjhMNjQ5LjAxNiAyOC40ODQxWk02NzEuMzIgMjQuMjA5QzY3MS40MjUgMjMuMTU0OCA2NzIuMDgxIDIyLjU0NTcgNjczLjA4NyAyMi41NDU3QzY3NC4wNzYgMjIuNTQ1NyA2NzQuNzQ2IDIzLjE3MjEgNjc0Ljg1MiAyNC4yMDlINjcxLjMyWk02NzIuOTEgMjEuMTIyOUM2NzAuNCAyMS4xMjI5IDY2OC42MTQgMjIuNzc1NSA2NjguNjE0IDI1LjEwMTJDNjY4LjYxNCAyNy40NDQxIDY3MC40NzEgMjguOTk1NCA2NzMuMzM1IDI4Ljk5NTRDNjczLjk3IDI4Ljk5NTQgNjc1LjUwNCAyOC45OTU0IDY3Ni45NjYgMjcuOTg3VjI2LjUwNDJDNjc1Ljc2OSAyNy4yOTkzIDY3NC45NzcgMjcuNTczMSA2NzMuOTU1IDI3LjU3MzFDNjcyLjM0MSAyNy41NzMxIDY3MS4zNTQgMjYuNzk0OSA2NzEuMjY1IDI1LjQ2NjZINjc3LjExQzY3Ny4yMzIgMjIuNjkzOSA2NzUuMjc5IDIxLjEyMjkgNjcyLjkxIDIxLjEyMjlWMjEuMTIyOVpNNjc4LjA5OSAyOC44NTcySDY4MC42NTRWMjEuMjYyN0g2NzguMDk5VjI4Ljg1NzJaTTY4Ny43NjcgMjYuNzgxNUM2ODcuMjM0IDI3LjIyODEgNjg2Ljc5MiAyNy40MDcyIDY4Ni4yNDYgMjcuNDA3MkM2ODUuMDQzIDI3LjQwNzIgNjg0LjI4MSAyNi40ODM4IDY4NC4yODEgMjUuMTAwNEM2ODQuMjgxIDIzLjU4NDEgNjg1LjA0MyAyMi43MTAxIDY4Ni4zMzEgMjIuNzEwMUM2ODYuNzkyIDIyLjcxMDEgNjg3LjM5NCAyMi45MDggNjg3Ljc2NyAyMy4xNTU5VjI2Ljc4MTVaTTY4Ny43NjcgMTcuNjM5MVYyMS41OTU4QzY4Ny4wNzYgMjEuMjg0NyA2ODYuMzg4IDIxLjEyMDIgNjg1LjY0NCAyMS4xMjAyQzY4My4zMTMgMjEuMTIwMiA2ODEuNyAyMi43MjY2IDY4MS43IDI1LjA1MDdDNjgxLjcgMjcuMzI0OCA2ODMuMzEzIDI4Ljk5NzQgNjg1LjUgMjguOTk3NEM2ODYuMzY3IDI4Ljk5NzQgNjg3LjAzNyAyOC43ODU2IDY4Ny43NjcgMjguMjQzNVYyOC44NTQ5SDY5MC4zMjJWMTcuNjM5MUg2ODcuNzY3Wk02OTQuMTA1IDI0LjIwOUM2OTQuMjExIDIzLjE1NDggNjk0Ljg2NCAyMi41NDU3IDY5NS44NjggMjIuNTQ1N0M2OTYuODU4IDIyLjU0NTcgNjk3LjUzNSAyMy4xNzIxIDY5Ny42NDEgMjQuMjA5SDY5NC4xMDVaTTY5NS42OTQgMjEuMTIyOUM2OTMuMTg0IDIxLjEyMjkgNjkxLjQgMjIuNzc1NSA2OTEuNCAyNS4xMDEyQzY5MS40IDI3LjQ0NDEgNjkzLjI1OSAyOC45OTU0IDY5Ni4xMTkgMjguOTk1NEM2OTYuNzUzIDI4Ljk5NTQgNjk4LjI5IDI4Ljk5NTQgNjk5Ljc1NSAyNy45ODdWMjYuNTA0MkM2OTguNTU3IDI3LjI5OTMgNjk3Ljc2MyAyNy41NzMxIDY5Ni43MzYgMjcuNTczMUM2OTUuMTMxIDI3LjU3MzEgNjk0LjE0IDI2Ljc5NDkgNjk0LjA1MSAyNS40NjY2SDY5OS44OTRDNzAwLjAxNSAyMi42OTM5IDY5OC4wNjEgMjEuMTIyOSA2OTUuNjk0IDIxLjEyMjkiIGZpbGw9IiMwMDlFNEQiLz4NCjxwYXRoIGQ9Ik03MDMuNzIxIDIzLjQzNjhINzAzLjc1OEM3MDQuNTE3IDIxLjg1NjIgNzA1LjM2NiAyMS4xMTUgNzA2LjM1MiAyMS4xMTVDNzA2Ljg2MiAyMS4xMTUgNzA3LjMwMyAyMS4yOTY0IDcwOC4wNDQgMjEuODA3Nkw3MDcuMzQxIDIzLjkxMzNDNzA2LjY3IDIzLjUxODYgNzA2LjIyOSAyMy4zNTM1IDcwNS44MjMgMjMuMzUzNUM3MDQuODg2IDIzLjM1MzUgNzA0LjI4NiAyNC4xNzc1IDcwMy43MjEgMjUuNTcwNFYyOC44NDY2SDcwMS4xNjJWMjEuMjU0MUg3MDMuNzIxVjIzLjQzNjhaTTY4MC43NzUgMTguMDY3NEM2ODEuMDE1IDE4LjY1NzUgNjgwLjU4MyAxOS40ODA1IDY3OS44MTQgMTkuOTA0QzY3OS4wNDEgMjAuMzI3MSA2NzguMjI0IDIwLjE5MjggNjc3Ljk4NiAxOS42MDI3QzY3Ny43NDMgMTkuMDExNyA2NzguMTczIDE4LjE4NzcgNjc4Ljk0NSAxNy43NjY2QzY3OS43MTYgMTcuMzQxMSA2ODAuNTMzIDE3LjQ3NTkgNjgwLjc3NSAxOC4wNjc0WiIgZmlsbD0iIzAwOUU0RCIvPg0KPHBhdGggZD0iTTY1OC4yMiAyNC4wMjMxQzY1OC4yMiAyMS45NjUxIDY1Ni43MTkgMjEuMTIyNiA2NTUuMjM5IDIxLjEyMjZDNjU0LjIzMiAyMS4xMjI2IDY1My40MDQgMjEuNTE4NCA2NTIuNjY0IDIyLjM5MjFINjUyLjYyOVYxNy42MzkySDY1MC4wNzFWMjguODM1M0g2NTIuNjI5VjI0LjAyMzFDNjUzLjIyOCAyMy4yMTYxIDY1My43MzggMjIuODcxMSA2NTQuMzM4IDIyLjg3MTFDNjU1LjEzNCAyMi44NzExIDY1NS42NjIgMjMuMzk4NiA2NTUuNjYyIDI0LjUzMjlWMjcuMjAwOEM2NTYuNTIgMjYuNzg5NiA2NTcuMzkzIDI2LjUzNzQgNjU4LjIyIDI2LjQ0MzhWMjQuMDIzMVpNNjY0LjYzNiAyMS4xMTk5QzY2My41OTQgMjEuMTE5OSA2NjIuNzk5IDIxLjQ4MTEgNjYxLjk4NCAyMi4zNDkzVjIxLjI2MjRINjU5LjQyOFYyNi40MjM0QzY2MC4zMTMgMjYuNTA1OCA2NjEuNDQzIDI2Ljg4NDcgNjYxLjk4NCAyNy41MTA0VjIzLjk2MzRDNjYyLjY1NyAyMy4wMjMyIDY2My4xMzQgMjIuNzA5NyA2NjMuNzcgMjIuNzA5N0M2NjQuNDk0IDIyLjcwOTcgNjY1LjA0NSAyMy4xNTU2IDY2NS4wNDUgMjQuMjI2NFYyOC44MzcySDY2Ny42MDJWMjQuMDI4OUM2NjcuNjAyIDIxLjc5MjYgNjY1LjkwOCAyMS4xMTk5IDY2NC42MzYgMjEuMTE5OVYyMS4xMTk5Wk02NjkuMDE1IDMxLjAxODFINjY2LjA0M1YzMi45ODY0SDY2OC45MDlWMzMuODMxMkg2NjYuMDQzVjM1Ljg2MTlINjY5LjEwM1YzNi43MDU1SDY2NS4wNDZWMzAuMTc1Mkg2NjkuMDE1TDY2OS4wMTUgMzEuMDE4MVpNNjcxLjQ0MiAzNi43MDkzSDY3Mi4zNTJWMzAuMTczM0g2NzEuNDQyVjM2LjcwOTNaTTY3Ni44NTkgMzMuMDQ4NEM2NzcuNTA0IDMzLjA0ODQgNjc3LjkwNCAzMy40NjMxIDY3Ny45MzUgMzQuMTE0Mkg2NzUuNjE2QzY3NS43NDIgMzMuNDM0MiA2NzYuMTYxIDMzLjA0ODQgNjc2Ljg1OSAzMy4wNDg0Wk02NzUuNiAzNC42ODFINjc4Ljg0MkM2NzguODQyIDMzLjA4NjkgNjc4LjA2MiAzMi4zMTggNjc2LjgzOCAzMi4zMThDNjc1LjU2OSAzMi4zMTggNjc0LjY4OCAzMy4xOTI0IDY3NC42ODggMzQuNDk2OUM2NzQuNjg4IDM1LjY4OSA2NzUuNDg0IDM2Ljc4OTggNjc2LjkxNyAzNi43ODk4QzY3Ny42OTggMzYuNzg5OCA2NzguMjAzIDM2LjYyODEgNjc4Ljc2MyAzNi4yODJWMzUuNDU2QzY3OC4yMjIgMzUuNzg1NiA2NzcuNjk4IDM1Ljk3NTggNjc3LjE0NyAzNS45NzU4QzY3Ni4yNjUgMzUuOTc1OCA2NzUuNzQyIDM1LjUzNSA2NzUuNiAzNC42ODA2VjM0LjY4MVpNNjg0Ljc4NiAzMy41MzA5QzY4NC4yNjMgMzMuMTk2NiA2ODMuOTE0IDMzLjA5ODUgNjgzLjUxNSAzMy4wOTg1QzY4Mi42ODIgMzMuMDk4NSA2ODIuMTA1IDMzLjY5NDUgNjgyLjEwNSAzNC41NjdDNjgyLjEwNSAzNS40NTYgNjgyLjcxOSAzNS45OTE2IDY4My42NjggMzUuOTkxNkM2ODQuMDU4IDM1Ljk5MTYgNjg0LjQzIDM1Ljg5NzMgNjg0Ljg4OCAzNS43MDU5VjM2LjU0MjZDNjg0LjU4MiAzNi42Nzc0IDY4My45OTcgMzYuNzg5OCA2ODMuNTE1IDM2Ljc4OThDNjgyLjEzNiAzNi43ODk4IDY4MS4xOCAzNS45MDYyIDY4MS4xOCAzNC42NDMyQzY4MS4xOCAzMy4yMTc4IDY4Mi4wNTQgMzIuMzE4IDY4My40NTMgMzIuMzE4QzY4My45ODcgMzIuMzE4IDY4NC4zNDYgMzIuNDMzOSA2ODQuNzg3IDMyLjYxNDVMNjg0Ljc4NiAzMy41MzA5Wk02ODguOTM0IDMyLjQwMDRINjkwLjM5NVYzMy4xNjUxSDY4OC45MzRWMzUuMzc1MkM2ODguOTM0IDM1Ljg4MTEgNjg5LjMyNyAzNi4wMjc0IDY4OS41OTMgMzYuMDI3NEM2ODkuOTIyIDM2LjAyNzQgNjkwLjI2MiAzNS45MiA2OTAuNjMgMzUuNzA3OVYzNi41MDM3QzY5MC4zMSAzNi42Njc4IDY4OS44MiAzNi43ODk4IDY4OS41MTkgMzYuNzg5OEM2ODguNTI4IDM2Ljc4OTggNjg4LjAyNyAzNi4yMTYxIDY4OC4wMjcgMzUuNDM5MVYzMy4xNjUxSDY4Ny4yMjRWMzMuMDcwM0w2ODguOTM0IDMxLjUxMDJWMzIuNDAwNFpNNjkzLjg3NiAzMi40MDA0VjMzLjM5NjlINjkzLjg5NUM2OTQuMzU5IDMyLjYzNDUgNjk0LjggMzIuMzE4IDY5NS4yMyAzMi4zMThDNjk1LjYwMSAzMi4zMTggNjk1Ljk0NyAzMi40ODAxIDY5Ni4zMjkgMzIuODE2Nkw2OTUuODQ3IDMzLjU2NDRDNjk1LjU3IDMzLjMwOTEgNjk1LjIxMSAzMy4xMzMxIDY5NC45OTUgMzMuMTMzMUM2OTQuMzY4IDMzLjEzMzEgNjkzLjg3NiAzMy43MjY4IDY5My44NzYgMzQuNDYyNlYzNi43MDkzSDY5Mi45NjdWMzIuNDAwNEg2OTMuODc2Wk03MDUuNjU3IDMzLjUzMDlDNzA1LjEzMSAzMy4xOTY2IDcwNC43ODIgMzMuMDk4NSA3MDQuMzgxIDMzLjA5ODVDNzAzLjU0OSAzMy4wOTg1IDcwMi45NzcgMzMuNjk0NSA3MDIuOTc3IDM0LjU2N0M3MDIuOTc3IDM1LjQ1NiA3MDMuNTkyIDM1Ljk5MTYgNzA0LjUzNSAzNS45OTE2QzcwNC45MjUgMzUuOTkxNiA3MDUuMjk1IDM1Ljg5NzMgNzA1Ljc2IDM1LjcwNTlWMzYuNTQyNkM3MDUuNDQ3IDM2LjY3NzQgNzA0Ljg2MiAzNi43ODk4IDcwNC4zOCAzNi43ODk4QzcwMy4wMDQgMzYuNzg5OCA3MDIuMDQ0IDM1LjkwNjIgNzAyLjA0NCAzNC42NDMyQzcwMi4wNDQgMzMuMjE3OCA3MDIuOTIyIDMyLjMxOCA3MDQuMzIgMzIuMzE4QzcwNC44NTUgMzIuMzE4IDcwNS4yMTIgMzIuNDMzOSA3MDUuNjU3IDMyLjYxNDVMNzA1LjY1NyAzMy41MzA5Wk02OTguNzQyIDM2LjcwOTNINjk5LjY1MlYzMi40MDA4SDY5OC43NDJWMzYuNzA5M1oiIGZpbGw9IiMwMDlFNEQiLz4NCjxwYXRoIGQ9Ik02OTkuNjg0IDMwLjg1MjVDNjk5Ljc3MyAzMS4wNjA0IDY5OS42MTggMzEuMzU0NCA2OTkuMzQ0IDMxLjUwNDFDNjk5LjA2OCAzMS42NTQzIDY5OC43NzYgMzEuNjA2MiA2OTguNjkzIDMxLjM5NzhDNjk4LjYxIDMxLjE4NzQgNjk4Ljc2MSAzMC44OTU4IDY5OS4wMzggMzAuNzQ1NkM2OTkuMzExIDMwLjU5MzUgNjk5LjYwMSAzMC42NDIxIDY5OS42ODQgMzAuODUyNVYzMC44NTI1Wk02NTguOTQgMzEuMjAwOUM2NTguNzc5IDMxLjIwMDkgNjU4LjcxMSAzMS4yMjU1IDY1OC42NDYgMzEuMjkzOEM2NTguNjIgMzEuMzIwMyA2NTguNjEgMzEuMzQ3MiA2NTguNiAzMS40MDExTDY1Ny43ODQgMzQuMjg3QzY1Ny41OTMgMzUuMjk5MiA2NTYuMjU5IDM2LjMwOTkgNjU0LjUyMSAzNi4zMDk5SDY1Mi4xMDRMNjUyLjUyMyAzNC44MjdINjU0LjA3NkM2NTQuMjM0IDM0LjgyNyA2NTQuMzU4IDM0Ljc3MjEgNjU0LjQ2MiAzNC42NjQzQzY1NC41IDM0LjYyMjUgNjU0LjU1IDM0LjU1NyA2NTQuNTU2IDM0LjQ4OTZMNjU1LjIwMSAzMS45NjgxQzY1NS4zOTEgMzAuOTU1NSA2NTYuNTM4IDI5LjgzNjkgNjU4LjI3NiAyOS44MzY5SDY2MC43NTFMNjYwLjQzNSAzMS4yMDA5SDY1OC45NFpNNjU5LjQ5NyAzMi45NTk2TDY1OS43NzMgMzIuMDI1OUg2NjIuMjg4QzY2Mi41OTggMzAuNjcyIDY2Mi4zNTQgMjkuNDE3NyA2NjEuNDczIDI4LjU5NjFDNjU5LjY4OSAyNi45MzMyIDY1NS45NTcgMjcuNDk4MyA2NTMuMTc3IDI5Ljk3NzlDNjUyLjc0MyAzMC4zNjMgNjUyLjM3NiAzMC43NzkzIDY1Mi4wNDIgMzEuMjA0OEg2NTMuNTU2TDY1My4yMDQgMzIuMTQwNEg2NTEuMzk1QzY1MS4yMjIgMzIuNDM1NCA2NTEuMDYgMzIuNzI4MSA2NTAuOTM2IDMzLjAyNUg2NTMuMDgxTDY1Mi43MzcgMzMuOTYwN0g2NTAuNjNDNjUwLjI2OSAzNS4zOTAxIDY1MC40OTkgMzYuNzIzMyA2NTEuNDA2IDM3LjU2OTlDNjUzLjE2NyAzOS4yMTE2IDY1Ni44ODggMzguNjM0NiA2NTkuNjY3IDM2LjE1NTRDNjYwLjE1MyAzNS43MjQyIDY2MC41NTUgMzUuMjU4NyA2NjAuOTE4IDM0Ljc4MDhINjU4Ljk3M0w2NTkuMjY5IDMzLjg0NzFINjYxLjU0M0M2NjEuNzEgMzMuNTUwMSA2NjEuODYzIDMzLjI1NjUgNjYxLjk4MyAzMi45NTk2SDY1OS40OTdaIiBmaWxsPSIjMDA5RTREIi8+DQo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfNThfMTExKSI+DQo8cGF0aCBkPSJNNzc1LjA2OCA0MS4yMjc0Qzc2Ni4yODUgNDIuMDQ2MyA3NTcuMTMxIDQwLjc1NjQgNzU1Ljg0OCAzMy44MTlDNzU1LjIyMSAzMC4zOTkgNzU2Ljc2NSAyNi43NzI1IDc1OC44MSAyNC41MTg0VjIzLjMxNDhDNzU1LjEyNiAyNi41OCA3NTMuMTMgMzAuNzExNSA3NTQuMjggMzUuNTkyQzc1NS43NDggNDEuODUxOCA3NjMuNjAzIDQ1LjM5NjcgNzc1LjU5NSA0NC4yMTk1Qzc4MC4zNDIgNDMuNzU0NSA3ODYuNTUgNDIuMjEyIDc5MC44NjkgMzkuODE0NFYzNi40MTA5Qzc4Ni45NDkgMzguNzcxMyA3ODAuNDY4IDQwLjcyMTEgNzc1LjA2OCA0MS4yMjc0VjQxLjIyNzRaTTc5OC4yMDUgMjMuMjMzNUM3OTYuMTIyIDEyLjk1MzMgNzc2LjM3MyAxMi4zMDE2IDc2My42NDMgMjAuMTMzOFYyMC45OTg5Qzc3Ni4zNTkgMTQuMzkxNSA3OTQuMzk1IDE0LjQzMTcgNzk2LjAzNyAyMy45MDE2Qzc5Ni41ODkgMjcuMDM0MiA3OTQuODQzIDMwLjI5NzggNzkxLjcyMyAzMi4xNzdWMzQuNjM0MkM3OTUuNDc2IDMzLjI0MzIgNzk5LjMyNCAyOC43NDQyIDc5OC4yMDUgMjMuMjMzNVYyMy4yMzM1WiIgZmlsbD0iIzBFN0RDMiIvPg0KPHBhdGggZD0iTTc5MC4xNTkgMjEuNzM2OEg3ODcuODU2VjMyLjEwM0M3ODcuODU2IDMzLjMxNzkgNzg4LjQzNyAzNC4zNzQ0IDc5MC4xNTkgMzQuNTQzMlYyMS43MzY4Wk03NjIuNzM5IDI1LjUyMTdINzYwLjQzMkw3NjAuNDMxIDMyLjI5NDNDNzYwLjQzMSAzMy41MTM0IDc2MS4wMTMgMzQuNTY4OCA3NjIuNzM5IDM0LjczNDRWMjUuNTIxN1YyNS41MjE3Wk03NjAuNDMyIDIyLjA1MjFINzYyLjczMlYyNC4yNTg0SDc2MC40MzJWMjIuMDUyMVpNNzc2LjUzIDM0LjYyNzJDNzc0LjY2NiAzNC42MjcyIDc3My44NzcgMzMuMzE3NyA3NzMuODc3IDMyLjAyOFYyMy4wMzU1SDc3Ni4xNlYyNS41MjE3SDc3Ny44NzlWMjcuMzg1M0g3NzYuMTZWMzEuODg1NEM3NzYuMTYgMzIuNDExMyA3NzYuNDA3IDMyLjcwNDQgNzc2Ljk1IDMyLjcwNDRINzc3Ljg3OVYzNC42MjcyTDc3Ni41MyAzNC42MjcyVjM0LjYyNzJaTTc4MC43MzEgMzAuNzk2MUM3ODAuNzMxIDMxLjk3NjggNzgxLjQ2MSAzMi44NDQ2IDc4Mi43NTQgMzIuODQ0NkM3ODMuNzY2IDMyLjg0NDYgNzg0LjI2NiAzMi41NjA1IDc4NC44NSAzMS45NzY4TDc4Ni4yNjEgMzMuMzM0OUM3ODUuMzU3IDM0LjIzNzkgNzg0LjQwOSAzNC43ODcgNzgyLjczNyAzNC43ODdDNzgwLjU1MiAzNC43ODcgNzc4LjQ1OSAzMy41ODE5IDc3OC40NTkgMzAuMDY4NkM3NzguNDU5IDI3LjA2NTEgNzgwLjI4OCAyNS4zNjczIDc4Mi42ODYgMjUuMzY3M0M3ODUuMTI0IDI1LjM2NzMgNzg2LjUyNSAyNy4zNTQ5IDc4Ni41MjUgMjkuOTYzOVYzMC43OTYzSDc4MC43MzFWMzAuNzk2MVpNNzgyLjU4NiAyNy4yNzU2Qzc4MS44MDUgMjcuMjc1NiA3ODEuMjA0IDI3LjY4MjMgNzgwLjk1IDI4LjIzMDlDNzgwLjgwMiAyOC41NjA3IDc4MC43NDcgMjguODE3NyA3ODAuNzMxIDI5LjIyMjlINzg0LjI0OUM3ODQuMjA0IDI4LjIzMDkgNzgzLjc1OSAyNy4yNzU2IDc4Mi41ODYgMjcuMjc1NlpNNzY4LjkzOSAyNy4zODUzQzc2OS42MDggMjcuMzg1MyA3NjkuODg3IDI3LjcxOTggNzY5Ljg4NyAyOC4yNjI2VjM0LjY0MDZINzcyLjE3VjI4LjI0OTJDNzcyLjE3IDI2Ljk1NDIgNzcxLjQ4NyAyNS41MjQxIDc2OS40ODIgMjUuNTI0MUw3NjQuNzY2IDI1LjUyMTdWMzQuNjQwNkg3NjcuMDVWMjcuMzg1M0g3NjguOTM5VjI3LjM4NTNaTTc5Mi42MzcgMjMuNTg5MUM3OTIuMTI5IDIzLjU4OTEgNzkxLjcyNCAyMy4xNzU0IDc5MS43MjQgMjIuNjYyOUM3OTEuNzI0IDIyLjE1MjkgNzkyLjEyOSAyMS43MzY4IDc5Mi42MzcgMjEuNzM2OEM3OTMuMTQyIDIxLjczNjggNzkzLjU1NiAyMi4xNTI5IDc5My41NTYgMjIuNjYyOUM3OTMuNTU2IDIzLjE3NTQgNzkzLjE0MiAyMy41ODkxIDc5Mi42MzcgMjMuNTg5MVpNNzkyLjYzNyAyMS44OTEyQzc5Mi4yMTggMjEuODkxMiA3OTEuODgyIDIyLjI0MDcgNzkxLjg4MiAyMi42NjI5Qzc5MS44ODIgMjMuMDg3NiA3OTIuMjE4IDIzLjQzMDkgNzkyLjYzNyAyMy40MzA5Qzc5My4wNTUgMjMuNDMwOSA3OTMuNDAyIDIzLjA4NzYgNzkzLjQwMiAyMi42NjI5Qzc5My40MDIgMjIuMjQwNyA3OTMuMDU1IDIxLjg5MTIgNzkyLjYzNyAyMS44OTEyWk03OTMuMDQzIDIzLjIxOEg3OTIuODcyQzc5Mi44NjQgMjMuMjE3OSA3OTIuODU3IDIzLjIxNTcgNzkyLjg1MSAyMy4yMTE2Qzc5Mi44NDUgMjMuMjA3NSA3OTIuODQgMjMuMjAxNyA3OTIuODM3IDIzLjE5NDlMNzkyLjYwNSAyMi43OTdDNzkyLjU5OCAyMi43ODg1IDc5Mi41NzkgMjIuNzc4OCA3OTIuNTczIDIyLjc3ODhINzkyLjQ2N1YyMy4xNzU0Qzc5Mi40NjcgMjMuMTk1IDc5Mi40NTMgMjMuMjE4MSA3OTIuNDI4IDIzLjIxODFINzkyLjI3NEM3OTIuMjUxIDIzLjIxODEgNzkyLjIzNSAyMy4xOTUgNzkyLjIzNSAyMy4xNzU0VjIyLjE3NDlDNzkyLjIzNSAyMi4xMTY0IDc5Mi4yNTQgMjIuMDkyNCA3OTIuMzA1IDIyLjA4NUM3OTIuMzYxIDIyLjA3OSA3OTIuNTA1IDIyLjA3MTYgNzkyLjU4NiAyMi4wNzE2Qzc5Mi44NzIgMjIuMDcxNiA3OTMuMDM5IDIyLjE1NjYgNzkzLjAzOSAyMi40MjQ0VjIyLjQ0NEM3OTMuMDM5IDIyLjYwOTQgNzkyLjk1OSAyMi42OTk1IDc5Mi44MzMgMjIuNzM5N0w3OTMuMDc0IDIzLjE1NDdDNzkzLjA3OCAyMy4xNjQgNzkzLjA4IDIzLjE3MzkgNzkzLjA4IDIzLjE4NEM3OTMuMDggMjMuMTk5NyA3OTMuMDcyIDIzLjIxOCA3OTMuMDQzIDIzLjIxOFYyMy4yMThaTTc5Mi44MjEgMjIuNDI0NEM3OTIuODIxIDIyLjMxMjcgNzkyLjc1MiAyMi4yNzczIDc5Mi42MDUgMjIuMjc3M0g3OTIuNDU5VjIyLjU5NDdDNzkyLjQ4MiAyMi41OTQ3IDc5Mi41ODYgMjIuNTk5NiA3OTIuNjA1IDIyLjU5OTZDNzkyLjc1MiAyMi41OTk2IDc5Mi44MjEgMjIuNTUgNzkyLjgyMSAyMi40NDRWMjIuNDI0NFoiIGZpbGw9IiMwRTdEQzIiLz4NCjwvZz4NCjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMV81OF8xMTEpIj4NCjxwYXRoIGQ9Ik01MzMuNzczIDIwLjk5MTFDNTI5LjI2MyAyMC45OTExIDUyNS41OTkgMjQuNjU0NyA1MjUuNTk5IDI5LjE2NDRDNTI1LjU5OSAzMy42NzQxIDUyOS4yNjMgMzcuMzM3NyA1MzMuNzczIDM3LjMzNzdDNTM4LjI4MiAzNy4zMzc3IDU0MS45NDYgMzMuNjc0MSA1NDEuOTQ2IDI5LjE2NDRDNTQxLjk0NiAyNC42NTQ3IDUzOC4yODIgMjAuOTkxMSA1MzMuNzczIDIwLjk5MTFaTTUzMy43NzMgMzYuNTE4NkM1MjkuNzEzIDM2LjUxODYgNTI2LjQxOSAzMy4yMTUgNTI2LjQxOSAyOS4xNjQ0QzUyNi40MTkgMjUuMTEzNyA1MjkuNzEzIDIxLjgxMDIgNTMzLjc3MyAyMS44MTAyQzUzNy44MzIgMjEuODEwMiA1NDEuMTI3IDI1LjExMzcgNTQxLjEyNyAyOS4xNjQ0QzU0MS4xMjcgMzMuMjE1IDUzNy44MzIgMzYuNTE4NiA1MzMuNzczIDM2LjUxODZaIiBmaWxsPSJibGFjayIvPg0KPHBhdGggZD0iTTUzNi42OSAyMy45MjUyQzUzNi42NjMgMjMuOTA3MiA1MzYuNjI3IDIzLjg5ODIgNTM2LjU5MSAyMy44OTgyQzUzNi40ODMgMjMuODk4MiA1MzYuNDAyIDIzLjk3OTIgNTM2LjQwMiAyNC4wODczVjI2LjY0MzdDNTM2LjQwMiAyNi43MzM3IDUzNi4zMyAyNi44MDU3IDUzNi4yNCAyNi44MDU3SDUzMS4yOUM1MzEuMiAyNi44MDU3IDUzMS4xMzcgMjYuNzMzNyA1MzEuMTI4IDI2LjY0MzdWMjQuMDg3M0M1MzEuMTI4IDI0LjA1MTMgNTMxLjExOSAyNC4wMjQyIDUzMS4xMDEgMjMuOTg4MkM1MzEuMDQ3IDIzLjg5ODIgNTMwLjkzIDIzLjg3MTIgNTMwLjgzOSAyMy45MjUyQzUyOS4wMTIgMjUuMDUwNCA1MjcuOTA1IDI3LjAwMzcgNTI3LjkwNSAyOS4xNjQxQzUyNy45MDUgMzEuMzI0NCA1MjkuMDEyIDMzLjI3NzcgNTMwLjg1NyAzNC40MDI5QzUzMC44ODUgMzQuNDIwOSA1MzAuOTIxIDM0LjQyOTkgNTMwLjk1NyAzNC40Mjk5QzUzMS4wNjUgMzQuNDI5OSA1MzEuMTQ2IDM0LjM0ODkgNTMxLjE0NiAzNC4yNDA5VjMxLjY4NDVDNTMxLjE0NiAzMS41OTQ0IDUzMS4yMTggMzEuNTMxNCA1MzEuMzA4IDMxLjUyMjRINTM2LjI1OEM1MzYuMzQ4IDMxLjUyMjQgNTM2LjQyIDMxLjU5NDQgNTM2LjQyIDMxLjY4NDVWMzQuMjQwOUM1MzYuNDIgMzQuMjc2OSA1MzYuNDI5IDM0LjMwMzkgNTM2LjQ0NyAzNC4zMzk5QzUzNi41MDEgMzQuNDI5OSA1MzYuNjE4IDM0LjQ1NjkgNTM2LjcwOCAzNC40MDI5QzUzOC41NTQgMzMuMjc3NyA1MzkuNjYxIDMxLjMyNDQgNTM5LjY2MSAyOS4xNjQxQzUzOS42NjEgMjcuMDAzNyA1MzguNTM2IDI1LjA1MDQgNTM2LjY5IDIzLjkyNTJWMjMuOTI1MlpNNTMwLjE5MSAzMi4zNjg2TDUzMC4yMTggMzIuNjc0Nkw1MzAuMDIgMzIuNDMxNkM1MjguNDk5IDMwLjUxNDMgNTI4LjQ5OSAyNy44MDQ4IDUzMC4wMiAyNS44ODc1TDUzMC4xOTEgMjUuNjcxNUw1MzAuMjE4IDI1LjY0NDVMNTMwLjE5MSAyNS45NTk2QzUzMC4xNjQgMjYuMjExNiA1MzAuMTU1IDI2LjQ3MjYgNTMwLjE1NSAyNi43MzM3VjMxLjU4NTRDNTMwLjE1NSAzMS44NDY1IDUzMC4xNzMgMzIuMTA3NSA1MzAuMTkxIDMyLjM2ODZaTTUzNi40MDIgMzAuMzg4M0M1MzYuNDAyIDMwLjQ3ODMgNTM2LjMzIDMwLjU1MDMgNTM2LjI0IDMwLjU1MDNINTMxLjI5QzUzMS4yIDMwLjU1MDMgNTMxLjEzNyAzMC40NzgzIDUzMS4xMjggMzAuMzg4M1YyNy45Mzk5QzUzMS4xMjggMjcuODQ5OSA1MzEuMiAyNy43Nzc4IDUzMS4yOSAyNy43Nzc4SDUzNi4yNEM1MzYuMzMgMjcuNzc3OCA1MzYuNDAyIDI3Ljg0OTkgNTM2LjQwMiAyNy45Mzk5VjMwLjM4ODNaTTUzNy41MTkgMzIuNDMxNkw1MzcuMzIxIDMyLjY3NDZMNTM3LjM0OCAzMi4zNjg2QzUzNy4zNzUgMzIuMTE2NSA1MzcuMzg0IDMxLjg1NTUgNTM3LjM4NCAzMS41OTQ0VjI2LjczMzdDNTM3LjM4NCAyNi40NzI2IDUzNy4zNzUgMjYuMjExNiA1MzcuMzQ4IDI1Ljk1OTZMNTM3LjMzOSAyNS44MjQ1TDUzNy4zMyAyNS42ODA1VjI1LjY0NDVMNTM3LjUxOSAyNS44ODc1QzUzOC4yNTcgMjYuODA1NyA1MzguNjYyIDI3Ljk3NTkgNTM4LjY2MiAyOS4xNTUxQzUzOC42NjIgMzAuMzM0MiA1MzguMjU3IDMxLjUxMzQgNTM3LjUxOSAzMi40MzE2VjMyLjQzMTZaIiBmaWxsPSJibGFjayIvPg0KPHBhdGggZD0iTTU1NC4yNzYgMjkuMDIwMkM1NTQuMjMxIDI5LjAwMjIgNTU0LjE3NyAyOC45ODQyIDU1NC4xNzcgMjguOTMwMkM1NTQuMTc3IDI4Ljg5NDIgNTU0LjE5NSAyOC44NjcyIDU1NC4yMzEgMjguODQ5MkM1NTQuMjk0IDI4LjgyMjIgNTU1Ljg1MSAyOC4yNjQxIDU1NS44NTEgMjYuNDI3OEM1NTUuODUxIDI0LjM4NDUgNTU0LjQ3NCAyMy4xNjkzIDU1Mi4xNTIgMjMuMTY5M0g1NDYuNTI2VjM1LjE3NzJINTUyLjY2NUM1NTQuNDU2IDM1LjE3NzIgNTU2LjM4MiAzMy45MDggNTU2LjM4MiAzMS44NjQ2QzU1Ni4zODIgMjkuOTExMyA1NTQuOTA2IDI5LjIyNzIgNTU0LjI3NiAyOS4wMjAyVjI5LjAyMDJaTTU0OS4zNjEgMjUuNjI2N0M1NDkuMzYxIDI1LjU4MTcgNTQ5LjM5NyAyNS41NDU2IDU0OS40NDIgMjUuNTQ1Nkg1NTEuNjc1QzU1Mi40MTMgMjUuNTQ1NiA1NTIuOTE3IDI2LjA0MDcgNTUyLjkxNyAyNi43Nzg4QzU1Mi45MTcgMjcuMzU0OSA1NTIuNDY3IDI3Ljk3NiA1NTEuNjIxIDI3Ljk3Nkg1NDkuNDQyQzU0OS4zOTcgMjcuOTc2IDU0OS4zNjEgMjcuOTQgNTQ5LjM2MSAyNy44OTVWMjUuNjI2N1pNNTUxLjY3NSAzMi44MDk4SDU0OS40NDJDNTQ5LjM5NyAzMi44MDk4IDU0OS4zNjEgMzIuNzczOCA1NDkuMzYxIDMyLjcyODhWMzAuMzM0NEM1NDkuMzYxIDMwLjI4OTQgNTQ5LjM5NyAzMC4yNTM0IDU0OS40NDIgMzAuMjUzNEg1NTEuNjIxQzU1Mi42OTIgMzAuMjUzNCA1NTMuMzA0IDMwLjcxMjUgNTUzLjMwNCAzMS41MjI2QzU1My4zMDQgMzIuMzU5NyA1NTIuNzM3IDMyLjgwOTggNTUxLjY3NSAzMi44MDk4VjMyLjgwOThaTTU3NS4zODQgMjcuOTQ5TDU3NC45NTIgMjcuODU5QzU3My45OCAyNy42NTIgNTczLjAzNSAyNy4zOTA5IDU3My4wMzUgMjYuNTUzOEM1NzMuMDM1IDI1LjcxNjcgNTczLjgxOCAyNS4zMzg2IDU3NC41OTIgMjUuMzM4NkM1NzUuNTAxIDI1LjMzODYgNTc2LjQwMSAyNS43NDM3IDU3Ny4wODYgMjYuNDQ1OEw1NzguODY4IDI0LjY4MTVDNTc4LjEwMyAyMy44MzU0IDU3Ni43NDQgMjIuODYzMiA1NzQuNTQ3IDIyLjg2MzJDNTcxLjkwMSAyMi44NjMyIDU3MC4xMTggMjQuMzY2NSA1NzAuMTE4IDI2LjYwNzhDNTcwLjExOCAyOC45NzUyIDU3MS45ODIgMjkuODY2MyA1NzMuNTQ4IDMwLjE5OTRMNTczLjk3MSAzMC4yODk0QzU3NS40OTIgMzAuNjEzNSA1NzYuMjEyIDMwLjg1NjUgNTc2LjIxMiAzMS43MjA2QzU3Ni4yMTIgMzIuNDk0NyA1NzUuNTE5IDMzLjAwNzggNTc0LjQ5MyAzMy4wMDc4QzU3My4yODcgMzMuMDA3OCA1NzIuMjE2IDMyLjQ3NjcgNTcxLjQwNiAzMS40Nzc2TDU2OS41NzggMzMuMjY4OUM1NzAuNTUxIDM0LjQyMTEgNTcxLjgzOCAzNS40NjUyIDU3NC41MjkgMzUuNDY1MkM1NzYuODI1IDM1LjQ2NTIgNTc5LjE1NiAzNC4xMzMgNTc5LjE1NiAzMS41NzY2QzU3OS4xNDcgMjguOTU3MiA1NzcuMzY1IDI4LjM2MzEgNTc1LjM4NCAyNy45NDlWMjcuOTQ5Wk01OTkuMTAzIDIzLjE2OTNWMjcuNTYyQzU5OS4xMDMgMjcuNjA3IDU5OS4wNjcgMjcuNjQzIDU5OS4wMjIgMjcuNjQzSDU5NS4zMzFDNTk1LjI4NiAyNy42NDMgNTk1LjI1IDI3LjYwNyA1OTUuMjUgMjcuNTYyVjIzLjE2OTNINTkyLjIyNlYzNS4xNzcySDU5NS4yNVYzMC40NjA0QzU5NS4yNSAzMC40MTU0IDU5NS4yODYgMzAuMzc5NCA1OTUuMzMxIDMwLjM3OTRINTk5LjAyMkM1OTkuMDY3IDMwLjM3OTQgNTk5LjEwMyAzMC40MTU0IDU5OS4xMDMgMzAuNDYwNFYzNS4xNzcySDYwMi4xNDZWMjMuMTY5M0g1OTkuMTAzWk01ODYuMTQxIDMyLjcxOThDNTg0Ljc4MiAzMi43MTk4IDU4My4zMTUgMzEuNTg1NiA1ODMuMzE1IDI5LjA5MjJDNTgzLjMxNSAyNi44MTQ4IDU4NC42OTIgMjUuNjI2NyA1ODYuMDUxIDI1LjYyNjdDNTg3LjA0MSAyNS42MjY3IDU4Ny43MzQgMjYuMDQwNyA1ODguMjgzIDI2Ljk1ODlMNTkwLjYwNiAyNS40MTk2QzU4OS40MTggMjMuNjczMyA1ODguMDA0IDIyLjg4MTIgNTg2LjAzMyAyMi44ODEyQzU4Mi4xNzEgMjIuODgxMiA1ODAuNDQzIDI2LjAwNDcgNTgwLjQ0MyAyOS4wOTIyQzU4MC40NDMgMzIuODQ1OCA1ODIuNzI5IDM1LjQ2NTIgNTg1Ljk5NyAzNS40NjUyQzU4OC40MjcgMzUuNDY1MiA1ODkuNTM1IDM0LjU3NDEgNTkwLjY5NiAzMi45MjY4TDU4OC4zNTUgMzEuMzUxNkM1ODcuODMzIDMyLjE5NzcgNTg3LjI2NiAzMi43MTk4IDU4Ni4xNDEgMzIuNzE5OFpNNTYzLjE3OCAyMi44NjMyQzU1OS44NzUgMjIuODYzMiA1NTcuNjYxIDI1LjM5MjYgNTU3LjY2MSAyOS4xNjQyQzU1Ny42NjEgMzIuOTM1OCA1NTkuODc1IDM1LjQ2NTIgNTYzLjE3OCAzNS40NjUyQzU2Ni40ODIgMzUuNDY1MiA1NjguNjk2IDMyLjkzNTggNTY4LjY5NiAyOS4xNjQyQzU2OC42OTYgMjUuMzkyNiA1NjYuNDgyIDIyLjg2MzIgNTYzLjE3OCAyMi44NjMyVjIyLjg2MzJaTTU2My4xNzggMzIuNzE5OEM1NjEuNTU4IDMyLjcxOTggNTYwLjUxNCAzMS4zMjQ2IDU2MC41MTQgMjkuMTY0MkM1NjAuNTE0IDI3LjAxMjkgNTYxLjU1OCAyNS42MjY3IDU2My4xNzggMjUuNjI2N0M1NjQuODA4IDI1LjYyNjcgNTY1Ljg2MSAyNy4wMTI5IDU2NS44NjEgMjkuMTY0MkM1NjUuODYxIDMxLjMyNDYgNTY0LjgwOCAzMi43MTk4IDU2My4xNzggMzIuNzE5OFoiIGZpbGw9IiNGODAwMDAiLz4NCjwvZz4NCjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTQ2LjM0NCAyMi4xODExQzE0Ny41OTUgMjIuMjg1NCAxNDguODQ1IDIxLjU1NTMgMTQ5LjYyNyAyMC42Mjk4QzE1MC4zOTUgMTkuNjc4MSAxNTAuOTAzIDE4LjQwMDUgMTUwLjc3MyAxNy4wOTY5QzE0OS42NjYgMTcuMTQ5MSAxNDguMjk4IDE3LjgyNjkgMTQ3LjUxNyAxOC43Nzg2QzE0Ni44IDE5LjU5OTkgMTQ2LjE4OCAyMC45Mjk2IDE0Ni4zNDQgMjIuMTgxMVpNMTQ3Ljg0MSAyMy4wNzk3QzE0OC42NTMgMjIuNzYwNiAxNDkuNjU4IDIyLjM2NTYgMTUwLjc2IDIyLjQyOTFDMTUxLjQ2MyAyMi40ODEyIDE1My40OTUgMjIuNjg5OCAxNTQuNzk4IDI0LjYxOTJDMTU0Ljc5MiAyNC42MjM3IDE1NC43NzggMjQuNjMyMyAxNTQuNzU5IDI0LjY0NUMxNTQuNDM2IDI0Ljg1NDggMTUyLjM5IDI2LjE4NzEgMTUyLjQxNCAyOC44MTY5QzE1Mi40MzkgMzEuOTQ5OSAxNTQuOTg4IDMzLjExODMgMTU1LjMyMiAzMy4yNzExQzE1NS4zNDQgMzMuMjgxMSAxNTUuMzU2IDMzLjI4NjcgMTU1LjM1OCAzMy4yODgzQzE1NS4zNTYgMzMuMjkyNiAxNTUuMzU0IDMzLjMwMSAxNTUuMzUgMzMuMzEzM0MxNTUuMjgzIDMzLjUyODggMTU0Ljg0NSAzNC45NDg5IDE1My44NDcgMzYuNDA0QzE1Mi45MjIgMzcuNzU5OCAxNTEuOTcxIDM5LjA4OTUgMTUwLjQ2IDM5LjExNTZDMTQ5Ljc0OSAzOS4xMjgzIDE0OS4yNyAzOC45MjExIDE0OC43NzIgMzguNzA1NEMxNDguMjQ3IDM4LjQ3ODUgMTQ3LjcwMSAzOC4yNDIyIDE0Ni44NCAzOC4yNDIyQzE0NS45NDcgMzguMjQyMiAxNDUuMzc2IDM4LjQ4NDggMTQ0LjgyNiAzOC43MTg0QzE0NC4zNDggMzguOTIxNCAxNDMuODg3IDM5LjExNzQgMTQzLjI0NSAzOS4xNDE3QzE0MS43ODYgMzkuMTkzOCAxNDAuNjc5IDM3LjcwNzcgMTM5Ljc1NCAzNi4zNTE5QzEzNy44NjYgMzMuNjE0MyAxMzYuNDIgMjguNjM0NCAxMzguMzc0IDI1LjI3MUMxMzkuMzI1IDIzLjU4OTMgMTQxLjA1NyAyMi41MzM0IDE0Mi45MTkgMjIuNTA3M0MxNDMuNzMyIDIyLjQ5MjUgMTQ0LjUwNyAyMi44MDA2IDE0NS4xODQgMjMuMDcwMUMxNDUuNzAyIDIzLjI3NTggMTQ2LjE2MiAyMy40NTg5IDE0Ni41NCAyMy40NTg5QzE0Ni44NzcgMjMuNDU4OSAxNDcuMzE5IDIzLjI4NTEgMTQ3Ljg0MSAyMy4wNzk3WiIgZmlsbD0iYmxhY2siLz4NCjxwYXRoIGQ9Ik0zNi44NTg3IDM3LjUyNDFIMzEuOTg3NEwzNS4wMzQyIDE5LjY2NjhIMzkuOTA1MkwzNi44NTg3IDM3LjUyNDFaIiBmaWxsPSIjMDA1NzlGIi8+DQo8cGF0aCBkPSJNNTQuNTE1NyAyMC4xMDQxQzUzLjU1NDkgMTkuNzQyOCA1Mi4wMzA5IDE5LjM0MzggNTAuMTQ2NiAxOS4zNDM4QzQ1LjMzNjEgMTkuMzQzOCA0MS45NDg2IDIxLjc3NTMgNDEuOTI3OCAyNS4yNTE2QzQxLjg4NzggMjcuODE2NSA0NC4zNTMxIDI5LjI0MSA0Ni4xOTcgMzAuMDk2MkM0OC4wODE2IDMwLjk3MDEgNDguNzIyMyAzMS41NDA1IDQ4LjcyMjMgMzIuMzE5NEM0OC43MDMxIDMzLjUxNTcgNDcuMTk5NCAzNC4wNjcyIDQ1Ljc5NjkgMzQuMDY3MkM0My44NTIxIDM0LjA2NzIgNDIuODEgMzMuNzgyOSA0MS4yMjY0IDMzLjExNzNMNDAuNTg1IDMyLjgzMkwzOS45MDMzIDM2Ljg0MDZDNDEuMDQ1OCAzNy4zMzM5IDQzLjE1MDcgMzcuNzcxNyA0NS4zMzYxIDM3Ljc5MDlDNTAuNDQ3MyAzNy43OTA5IDUzLjc3NDkgMzUuMzk3MSA1My44MTQzIDMxLjY5MjVDNTMuODMzOCAyOS42NTk3IDUyLjUzMiAyOC4xMDIgNDkuNzI1NCAyNi44MjkyQzQ4LjAyMTcgMjYuMDEyMSA0Ni45NzgzIDI1LjQ2MTIgNDYuOTc4MyAyNC42MjUyQzQ2Ljk5ODMgMjMuODY1MiA0Ny44NjA4IDIzLjA4NjggNDkuNzg0IDIzLjA4NjhDNTEuMzY3NyAyMy4wNDg2IDUyLjUzMTIgMjMuNDA5NCA1My40MTI2IDIzLjc3MDVMNTMuODUzMiAyMy45NjAxTDU0LjUxNTcgMjAuMTA0MVoiIGZpbGw9IiMwMDU3OUYiLz4NCjxwYXRoIGQ9Ik02MC45OTI0IDMxLjE5NzlDNjEuMzkzNiAzMC4xNzIgNjIuOTM3MiAyNi4yMDE2IDYyLjkzNzIgMjYuMjAxNkM2Mi45MTcgMjYuMjM5NyA2My4zMzc2IDI1LjE1NjggNjMuNTc4MSAyNC40OTE5TDYzLjkxODYgMjYuMDMwNkM2My45MTg2IDI2LjAzMDYgNjQuODQxIDMwLjMwNTEgNjUuMDQxNCAzMS4xOTc5QzY0LjI4IDMxLjE5NzkgNjEuOTU0NiAzMS4xOTc5IDYwLjk5MjQgMzEuMTk3OVpNNjcuMDA1NCAxOS42NjY4SDYzLjIzNzRDNjIuMDc1NSAxOS42NjY4IDYxLjE5MjcgMTkuOTg5NSA2MC42OTE0IDIxLjE0ODRMNTMuNDU1OCAzNy41MjM5SDU4LjU2NzFDNTguNTY3MSAzNy41MjM5IDU5LjQwODUgMzUuMzE5OSA1OS41ODk0IDM0Ljg0NTJDNjAuMTUwMSAzNC44NDUyIDY1LjEyMjMgMzQuODQ1MiA2NS44NDM3IDM0Ljg0NTJDNjUuOTgzNSAzNS40NzIxIDY2LjQyNDkgMzcuNTIzOSA2Ni40MjQ5IDM3LjUyMzlINzAuOTM1Mkw2Ny4wMDU0IDE5LjY2NjhWMTkuNjY2OFoiIGZpbGw9IiMwMDU3OUYiLz4NCjxwYXRoIGQ9Ik0yNy45MTggMTkuNjY2OEwyMy4xNDc1IDMxLjg0MzhMMjIuNjI2MiAyOS4zNzQxQzIxLjc0NDIgMjYuNTI0NSAxOC45NzgxIDIzLjQyODQgMTUuODkxNCAyMS44ODlMMjAuMjYxIDM3LjUwNTJIMjUuNDEyMkwzMy4wNjkgMTkuNjY2OEgyNy45MThWMTkuNjY2OFoiIGZpbGw9IiMwMDU3OUYiLz4NCjxwYXRoIGQ9Ik0xOC43MTg0IDE5LjY2NjhIMTAuODgxMUwxMC44MDA5IDIwLjAyNzZDMTYuOTE0NSAyMS41MDk1IDIwLjk2MzUgMjUuMDgxNSAyMi42MjcgMjkuMzc0OUwyMC45MjMyIDIxLjE2NzlDMjAuNjQyNyAyMC4wMjc0IDE5Ljc4MDcgMTkuNzA0NCAxOC43MTg0IDE5LjY2NjhaIiBmaWxsPSIjRkFBNjFBIi8+DQo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDJfNThfMTExKSI+DQo8cGF0aCBkPSJNMjIxLjE1OCAxNy40OTlWMTguOTM1NkgyMzEuMzA2VjE3LjQ5OUgyMjEuMTU4Wk0yMzIuNzQ0IDE3LjQ5OVYxOC45MzU2SDI0Ny4yMDZDMjQ3LjIwNiAxOC45MzU2IDI0NS43MjkgMTcuNDk5IDI0My43NzMgMTcuNDk5SDIzMi43NDRaTTI1MC4wNDMgMTcuNDk5VjE4LjkzNTZIMjU4Ljc5M0wyNTguMjczIDE3LjQ5OUgyNTAuMDQzWk0yNjUuMDY1IDE3LjQ5OUwyNjQuNTQ2IDE4LjkzNTZIMjczLjIxNlYxNy40OTlIMjY1LjA2NVpNMjIxLjE1OCAyMC4yOTI5VjIxLjcyOTZIMjMxLjMwNlYyMC4yOTI5SDIyMS4xNThaTTIzMi43NDQgMjAuMjk1VjIxLjcyOTdIMjQ4Ljg4NEMyNDguODg0IDIxLjcyOTcgMjQ4LjY5NiAyMC42MjM5IDI0OC4zNjcgMjAuMjk1SDIzMi43NDRaTTI1MC4wNDMgMjAuMjk1VjIxLjcyOTdIMjU5Ljc1MkwyNTkuMjcxIDIwLjI5NUgyNTAuMDQzWk0yNjQuMDI3IDIwLjI5NUwyNjMuNTQ2IDIxLjcyOTdIMjczLjIxNlYyMC4yOTVIMjY0LjAyN1YyMC4yOTVaTTIyNC4wNzQgMjMuMDg2OVYyNC41MjU3SDIyOC40NjlWMjMuMDg2OUgyMjQuMDc0VjIzLjA4NjlaTTIzNS42NjEgMjMuMDg2OVYyNC41MjU3SDI0MC4wNTZWMjMuMDg2OUgyMzUuNjYxVjIzLjA4NjlaTTI0NC4zMzEgMjMuMDg2OVYyNC41MjU3SDI0OC43MjZDMjQ4LjcyNiAyNC41MjU3IDI0OS4wMDUgMjMuNzY1OSAyNDkuMDA1IDIzLjA4NjlIMjQ0LjMzMVYyMy4wODY5Wk0yNTIuOTYgMjMuMDg2OVYyNC41MjU3SDI2MC43NTJMMjYwLjIzMiAyMy4wODY5SDI1Mi45NlYyMy4wODY5Wk0yNjMuMDY5IDIzLjA4NjlMMjYyLjU0OCAyNC41MjU3SDI3MC4zNzlWMjMuMDg2OUgyNjMuMDY5VjIzLjA4NjlaTTIyNC4wNzQgMjUuODgzVjI3LjMxOTdIMjI4LjQ2OVYyNS44ODNIMjI0LjA3NFYyNS44ODNaTTIzNS42NjEgMjUuODgzVjI3LjMxOTdIMjQ2Ljg4N0MyNDYuODg3IDI3LjMxOTcgMjQ3LjgyNiAyNi41ODI1IDI0OC4xMjUgMjUuODgzSDIzNS42NjFaTTI1Mi45NiAyNS44ODNWMjcuMzE5N0gyNTcuMzU1VjI2LjUyTDI1Ny42MzQgMjcuMzE5N0gyNjUuNjg0TDI2NS45ODQgMjYuNTJWMjcuMzE5N0gyNzAuMzc5VjI1Ljg4M0gyNjIuMTI5TDI2MS42OTEgMjcuMDk5OUwyNjEuMjUxIDI1Ljg4M0gyNTIuOTZaTTIyNC4wNzQgMjguNjc3VjMwLjExMzdIMjI4LjQ2OVYyOC42NzdIMjI0LjA3NFpNMjM1LjY2MSAyOC42NzdWMzAuMTEzN0gyNDguMTI1QzI0Ny44MjYgMjkuNDE2NSAyNDYuODg3IDI4LjY3NyAyNDYuODg3IDI4LjY3N0gyMzUuNjYxWk0yNTIuOTYgMjguNjc3VjMwLjExMzdIMjU3LjM1NVYyOC42NzdIMjUyLjk2Wk0yNTguMTUzIDI4LjY3N0wyNTguNjg1IDMwLjExMzdIMjY0LjcyMUwyNjUuMjI2IDI4LjY3N0gyNTguMTUzWk0yNjUuOTg0IDI4LjY3N1YzMC4xMTM3SDI3MC4zNzlWMjguNjc3SDI2NS45ODRaTTIyNC4wNzQgMzEuNDcxVjMyLjkwNzZIMjI4LjQ2OVYzMS40NzFIMjI0LjA3NFpNMjM1LjY2MSAzMS40NzFWMzIuOTA3NkgyNDAuMDU2VjMxLjQ3MUgyMzUuNjYxWk0yNDQuMzMxIDMxLjQ3MVYzMi45MDc2SDI0OS4wMDVDMjQ5LjAwNSAzMi4yMjk2IDI0OC43MjYgMzEuNDcxIDI0OC43MjYgMzEuNDcxSDI0NC4zMzFWMzEuNDcxWk0yNTIuOTYgMzEuNDcxVjMyLjkwNzZIMjU3LjM1NVYzMS40NzFIMjUyLjk2Wk0yNTkuMTUxIDMxLjQ3MUwyNTkuNjY2IDMyLjkwNzZIMjYzLjcxM0wyNjQuMjMyIDMxLjQ3MUgyNTkuMTUxWk0yNjUuOTg0IDMxLjQ3MVYzMi45MDc2SDI3MC4zNzlWMzEuNDcxSDI2NS45ODRaTTIyMS4yMzcgMzQuMjY1VjM1LjcwMzdIMjMxLjM4NlYzNC4yNjVIMjIxLjIzN1pNMjMyLjc0NCAzNC4yNjVWMzUuNzAzN0gyNDguMzY3QzI0OC42OTYgMzUuMzc0MyAyNDguODg0IDM0LjI2NSAyNDguODg0IDM0LjI2NUgyMzIuNzQ0VjM0LjI2NVpNMjUwLjEyMyAzNC4yNjVWMzUuNzAzN0gyNTcuMzU1VjM0LjI2NUgyNTAuMTIzWk0yNjAuMTUxIDM0LjI2NUwyNjAuNjggMzUuNzAzN0gyNjIuNzM5TDI2My4yMzYgMzQuMjY1SDI2MC4xNTFaTTI2NS45ODQgMzQuMjY1VjM1LjcwMzdIMjczLjI5NVYzNC4yNjVIMjY1Ljk4NFpNMjIxLjIzNyAzNy4wNjFWMzguNDk3N0gyMzEuMzg2VjM3LjA2MUgyMjEuMjM3Wk0yMzIuNzQ0IDM3LjA2MVYzOC40OTU2SDI0My43NzNDMjQ1LjcyOSAzOC40OTU2IDI0Ny4yMDYgMzcuMDYxIDI0Ny4yMDYgMzcuMDYxSDIzMi43NDRaTTI1MC4xMjMgMzcuMDYxVjM4LjQ5NzdIMjU3LjM1NVYzNy4wNjFIMjUwLjEyM1pNMjYxLjE1NSAzNy4wNjFMMjYxLjY2NCAzOC40OTM2TDI2MS43NTIgMzguNDk1NkwyNjIuMjY5IDM3LjA2MUgyNjEuMTU1VjM3LjA2MVpNMjY1Ljk4NCAzNy4wNjFWMzguNDk3N0gyNzMuMjk1VjM3LjA2MUgyNjUuOTg0WiIgZmlsbD0iIzFGNzBDMSIvPg0KPC9nPg0KPGRlZnM+DQo8Y2xpcFBhdGggaWQ9ImNsaXAwXzU4XzExMSI+DQo8cmVjdCB3aWR0aD0iNDQuNDQ3MyIgaGVpZ2h0PSIyOS42MzE1IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzUzLjk1NSAxNC44MTU1KSIvPg0KPC9jbGlwUGF0aD4NCjxjbGlwUGF0aCBpZD0iY2xpcDFfNThfMTExIj4NCjxyZWN0IHdpZHRoPSI3Ni41NDgxIiBoZWlnaHQ9IjE2LjM1MDciIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MjUuNTk5IDIwLjk4ODkpIi8+DQo8L2NsaXBQYXRoPg0KPGNsaXBQYXRoIGlkPSJjbGlwMl81OF8xMTEiPg0KPHJlY3Qgd2lkdGg9IjUyLjEzNzIiIGhlaWdodD0iMjAuOTk4NyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMS4xNTggMTcuNDk5KSIvPg0KPC9jbGlwUGF0aD4NCjwvZGVmcz4NCjwvc3ZnPg0K" style="
6932
+ width: 742.5px;
6933
+ position: relative;
6934
+ top: 107px;
6935
+ left: 32px;
6936
+ ">
6937
+ <a href=${accountURL} style="
6938
+ float: left;
6939
+ border-radius: 56px;
6940
+ background: #0D6EFD;
6941
+ padding-top: 8px;
6942
+ width: 280px;
6943
+ height: 38px;
6944
+ text-align: center;
6945
+ position: relative;
6946
+ top: 127px;
6947
+ left: 274px;
6948
+ font-size: 16px;
6949
+ color: white;
6950
+ text-decoration: none;
6951
+ letter-spacing: 0.02em;
6952
+ ">Claim your FREE account</a>
6953
+ <div style="
6954
+ font-size: 14px;
6955
+ position: relative;
6956
+ top: 180px;
6957
+ left: 19px;
6958
+ letter-spacing: 0.02em;
6959
+ font-weight: 500;
6960
+ line-height: 125%;
6961
+ ">have a Syncfusion account? <a href="https://www.syncfusion.com/account/login?ReturnUrl=/account/login" style="text-decoration: none;
6962
+ color: #0D6EFD;
6963
+ font-weight: 500;">Sign In</a></div>
6964
+ </div>
6965
+ </div>`;
6966
+ if (typeof document !== 'undefined' && !isNullOrUndefined(document)) {
6967
+ const errorBackground = createElement('div', {
6968
+ innerHTML: bannerTemplate
6969
+ });
6970
+ document.body.appendChild(errorBackground);
6971
+ }
6972
+ };
6738
6973
 
6739
6974
  var __decorate$1 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
6740
6975
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -6745,6 +6980,12 @@ var __decorate$1 = (undefined && undefined.__decorate) || function (decorators,
6745
6980
  let componentCount = 0;
6746
6981
  let lastPageID;
6747
6982
  let lastHistoryLen = 0;
6983
+ // Decalre the static variable to count the instance
6984
+ let instancecount = 0;
6985
+ // Decalre the static variable to find if control limit exceed or not
6986
+ let isvalid = true;
6987
+ // We have added styles to inline type so here declare the static variable to detect if banner is added or not
6988
+ let isBannerAdded = false;
6748
6989
  let versionBasedStatePersistence = false;
6749
6990
  /**
6750
6991
  * To enable or disable version based statePersistence functionality for all components globally.
@@ -6786,8 +7027,14 @@ let Component = class Component extends Base {
6786
7027
  this.localObserver = new Observer(this);
6787
7028
  // tslint:disable-next-line:no-function-constructor-with-string-args
6788
7029
  onIntlChange.on('notifyExternalChange', this.detectFunction, this, this.randomId);
6789
- if (typeof window !== "undefined" && typeof document !== "undefined") {
6790
- validateLicense();
7030
+ // Based on the considered control list we have count the instance
7031
+ if (typeof window !== "undefined" && typeof document !== "undefined" && !validateLicense()) {
7032
+ if (componentList.indexOf(this.getModuleName()) !== -1) {
7033
+ instancecount = instancecount + 1;
7034
+ if (instancecount > 5) {
7035
+ isvalid = false;
7036
+ }
7037
+ }
6791
7038
  }
6792
7039
  if (!isUndefined(selector)) {
6793
7040
  this.appendTo();
@@ -6898,6 +7145,11 @@ let Component = class Component extends Base {
6898
7145
  }
6899
7146
  this.preRender();
6900
7147
  this.injectModules();
7148
+ // Checked weather cases are valid or not. If control leads to more than five counts
7149
+ if (!isvalid && !isBannerAdded) {
7150
+ createLicenseOverlay();
7151
+ isBannerAdded = true;
7152
+ }
6901
7153
  this.render();
6902
7154
  if (!this.mount) {
6903
7155
  this.trigger('created');
@@ -7001,8 +7253,8 @@ let Component = class Component extends Base {
7001
7253
  this.prototype.injectedModules = [];
7002
7254
  }
7003
7255
  for (let i = 0; i < moduleList.length; i++) {
7004
- if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {
7005
- this.prototype.injectedModules.push(moduleList[i]);
7256
+ if (this.prototype.injectedModules.indexOf(moduleList[parseInt(i.toString(), 10)]) === -1) {
7257
+ this.prototype.injectedModules.push(moduleList[parseInt(i.toString(), 10)]);
7006
7258
  }
7007
7259
  }
7008
7260
  }
@@ -7069,9 +7321,11 @@ let Component = class Component extends Base {
7069
7321
  }
7070
7322
  }
7071
7323
  }
7072
- //tslint:disable-next-line
7073
- renderReactTemplates() {
7074
- //No Code
7324
+ // eslint-disable-next-line
7325
+ renderReactTemplates(callback) {
7326
+ if (!isNullOrUndefined(callback)) {
7327
+ callback();
7328
+ }
7075
7329
  }
7076
7330
  // eslint-disable-next-line
7077
7331
  clearTemplate(templateName, index) {
@@ -7137,10 +7391,10 @@ let Component = class Component extends Base {
7137
7391
  }).map((str) => {
7138
7392
  return str.replace(key + '.', '');
7139
7393
  });
7140
- newObj[key] = this.iterateJsonProperties(this.getActualProperties(value), newList);
7394
+ newObj[`${key}`] = this.iterateJsonProperties(this.getActualProperties(value), newList);
7141
7395
  }
7142
7396
  else {
7143
- newObj[key] = value;
7397
+ newObj[`${key}`] = value;
7144
7398
  }
7145
7399
  }
7146
7400
  }
@@ -7217,8 +7471,8 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7217
7471
  this.prevLeft = 0;
7218
7472
  this.prevTop = 0;
7219
7473
  this.dragProcessStarted = false;
7220
- /* tslint:disable no-any */
7221
7474
  this.eleTop = 0;
7475
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7222
7476
  this.tapHoldTimer = 0;
7223
7477
  this.externalInitialize = false;
7224
7478
  this.diffY = 0;
@@ -7242,7 +7496,7 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7242
7496
  if (!isUndefined(this.handle)) {
7243
7497
  ele = select(this.handle, this.element);
7244
7498
  }
7245
- let handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;
7499
+ const handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;
7246
7500
  if (isUnWire) {
7247
7501
  EventHandler.remove(ele || this.element, Browser.touchStartEvent, handler);
7248
7502
  }
@@ -7252,7 +7506,7 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7252
7506
  }
7253
7507
  /* istanbul ignore next */
7254
7508
  mobileInitialize(evt) {
7255
- let target = evt.currentTarget;
7509
+ const target = evt.currentTarget;
7256
7510
  this.tapHoldTimer = setTimeout(() => {
7257
7511
  this.externalInitialize = true;
7258
7512
  this.removeTapholdTimer();
@@ -7269,12 +7523,12 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7269
7523
  }
7270
7524
  /* istanbul ignore next */
7271
7525
  getScrollableParent(element, axis) {
7272
- let scroll = { 'vertical': 'scrollHeight', 'horizontal': 'scrollWidth' };
7273
- let client = { 'vertical': 'clientHeight', 'horizontal': 'clientWidth' };
7526
+ const scroll = { 'vertical': 'scrollHeight', 'horizontal': 'scrollWidth' };
7527
+ const client = { 'vertical': 'clientHeight', 'horizontal': 'clientWidth' };
7274
7528
  if (isNullOrUndefined(element)) {
7275
7529
  return null;
7276
7530
  }
7277
- if (element[scroll[axis]] > element[client[axis]]) {
7531
+ if (element[scroll[`${axis}`]] > element[client[`${axis}`]]) {
7278
7532
  if (axis === 'vertical' ? element.scrollTop > 0 : element.scrollLeft > 0) {
7279
7533
  if (axis === 'vertical') {
7280
7534
  this.parentScrollY = this.parentScrollY +
@@ -7304,9 +7558,9 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7304
7558
  getScrollableValues() {
7305
7559
  this.parentScrollX = 0;
7306
7560
  this.parentScrollY = 0;
7307
- let isModalDialog = this.element.classList.contains('e-dialog') && this.element.classList.contains('e-dlg-modal');
7308
- let verticalScrollParent = this.getScrollableParent(this.element.parentNode, 'vertical');
7309
- let horizontalScrollParent = this.getScrollableParent(this.element.parentNode, 'horizontal');
7561
+ const isModalDialog = this.element.classList.contains('e-dialog') && this.element.classList.contains('e-dlg-modal');
7562
+ const verticalScrollParent = this.getScrollableParent(this.element.parentNode, 'vertical');
7563
+ const horizontalScrollParent = this.getScrollableParent(this.element.parentNode, 'horizontal');
7310
7564
  }
7311
7565
  initialize(evt, curTarget) {
7312
7566
  this.currentStateTarget = evt.target;
@@ -7326,7 +7580,7 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7326
7580
  abortSelectors = [abortSelectors];
7327
7581
  }
7328
7582
  for (let i = 0; i < abortSelectors.length; i++) {
7329
- if (!isNullOrUndefined(closest(evt.target, abortSelectors[i]))) {
7583
+ if (!isNullOrUndefined(closest(evt.target, abortSelectors[parseInt(i.toString(), 10)]))) {
7330
7584
  /* istanbul ignore next */
7331
7585
  if (this.isDragStarted()) {
7332
7586
  this.isDragStarted(true);
@@ -7339,10 +7593,10 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7339
7593
  evt.preventDefault();
7340
7594
  }
7341
7595
  this.element.setAttribute('aria-grabbed', 'true');
7342
- let intCoord = this.getCoordinates(evt);
7596
+ const intCoord = this.getCoordinates(evt);
7343
7597
  this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };
7344
7598
  if (!this.clone) {
7345
- let pos = this.element.getBoundingClientRect();
7599
+ const pos = this.element.getBoundingClientRect();
7346
7600
  this.getScrollableValues();
7347
7601
  if (evt.clientX === evt.pageX) {
7348
7602
  this.parentScrollX = 0;
@@ -7369,25 +7623,22 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7369
7623
  }
7370
7624
  intDragStart(evt) {
7371
7625
  this.removeTapholdTimer();
7372
- let isChangeTouch = !isUndefined(evt.changedTouches);
7626
+ const isChangeTouch = !isUndefined(evt.changedTouches);
7373
7627
  if (isChangeTouch && (evt.changedTouches.length !== 1)) {
7374
7628
  return;
7375
7629
  }
7376
- if (isChangeTouch) {
7377
- evt.preventDefault();
7378
- }
7379
- let intCordinate = this.getCoordinates(evt);
7630
+ const intCordinate = this.getCoordinates(evt);
7380
7631
  let pos;
7381
- let styleProp = getComputedStyle(this.element);
7632
+ const styleProp = getComputedStyle(this.element);
7382
7633
  this.margin = {
7383
7634
  left: parseInt(styleProp.marginLeft, 10),
7384
7635
  top: parseInt(styleProp.marginTop, 10),
7385
7636
  right: parseInt(styleProp.marginRight, 10),
7386
- bottom: parseInt(styleProp.marginBottom, 10),
7637
+ bottom: parseInt(styleProp.marginBottom, 10)
7387
7638
  };
7388
7639
  let element = this.element;
7389
7640
  if (this.clone && this.dragTarget) {
7390
- let intClosest = closest(evt.target, this.dragTarget);
7641
+ const intClosest = closest(evt.target, this.dragTarget);
7391
7642
  if (!isNullOrUndefined(intClosest)) {
7392
7643
  element = intClosest;
7393
7644
  }
@@ -7398,19 +7649,22 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7398
7649
  }
7399
7650
  this.offset = this.calculateParentPosition(element);
7400
7651
  this.position = this.getMousePosition(evt, this.isDragScroll);
7401
- let x = this.initialPosition.x - intCordinate.pageX;
7402
- let y = this.initialPosition.y - intCordinate.pageY;
7403
- let distance = Math.sqrt((x * x) + (y * y));
7652
+ const x = this.initialPosition.x - intCordinate.pageX;
7653
+ const y = this.initialPosition.y - intCordinate.pageY;
7654
+ const distance = Math.sqrt((x * x) + (y * y));
7404
7655
  if ((distance >= this.distance || this.externalInitialize)) {
7405
- let ele = this.getHelperElement(evt);
7656
+ const ele = this.getHelperElement(evt);
7406
7657
  if (!ele || isNullOrUndefined(ele)) {
7407
7658
  return;
7408
7659
  }
7409
- let dragTargetElement = this.helperElement = ele;
7660
+ if (isChangeTouch) {
7661
+ evt.preventDefault();
7662
+ }
7663
+ const dragTargetElement = this.helperElement = ele;
7410
7664
  this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);
7411
7665
  if (this.dragStart) {
7412
- let curTarget = this.getProperTargetElement(evt);
7413
- let args = {
7666
+ const curTarget = this.getProperTargetElement(evt);
7667
+ const args = {
7414
7668
  event: evt,
7415
7669
  element: element,
7416
7670
  target: curTarget,
@@ -7433,8 +7687,8 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7433
7687
  }
7434
7688
  this.getScrollableValues();
7435
7689
  // when drag element has margin-top
7436
- let styles = getComputedStyle(element);
7437
- let marginTop = parseFloat(styles.marginTop);
7690
+ const styles = getComputedStyle(element);
7691
+ const marginTop = parseFloat(styles.marginTop);
7438
7692
  /* istanbul ignore next */
7439
7693
  if (this.clone && marginTop !== 0) {
7440
7694
  pos.top += marginTop;
@@ -7448,10 +7702,13 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7448
7702
  pos.top -= this.parentScrollY;
7449
7703
  pos.left -= this.parentScrollX;
7450
7704
  }
7451
- let posValue = this.getProcessedPositionValue({
7705
+ const posValue = this.getProcessedPositionValue({
7452
7706
  top: (pos.top - this.diffY) + 'px',
7453
7707
  left: (pos.left - this.diffX) + 'px'
7454
7708
  });
7709
+ if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {
7710
+ pos.top += this.dragArea.scrollTop;
7711
+ }
7455
7712
  this.dragElePosition = { top: pos.top, left: pos.left };
7456
7713
  setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));
7457
7714
  EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);
@@ -7497,8 +7754,8 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7497
7754
  if (isNullOrUndefined(ele)) {
7498
7755
  return { left: 0, top: 0 };
7499
7756
  }
7500
- let rect = ele.getBoundingClientRect();
7501
- let style = getComputedStyle(ele);
7757
+ const rect = ele.getBoundingClientRect();
7758
+ const style = getComputedStyle(ele);
7502
7759
  return {
7503
7760
  left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),
7504
7761
  top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)
@@ -7515,19 +7772,19 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7515
7772
  let left;
7516
7773
  let top;
7517
7774
  this.position = this.getMousePosition(evt, this.isDragScroll);
7518
- let docHeight = this.getDocumentWidthHeight('Height');
7775
+ const docHeight = this.getDocumentWidthHeight('Height');
7519
7776
  if (docHeight < this.position.top) {
7520
7777
  this.position.top = docHeight;
7521
7778
  }
7522
- let docWidth = this.getDocumentWidthHeight('Width');
7779
+ const docWidth = this.getDocumentWidthHeight('Width');
7523
7780
  if (docWidth < this.position.left) {
7524
7781
  this.position.left = docWidth;
7525
7782
  }
7526
7783
  if (this.drag) {
7527
- let curTarget = this.getProperTargetElement(evt);
7784
+ const curTarget = this.getProperTargetElement(evt);
7528
7785
  this.trigger('drag', { event: evt, element: this.element, target: curTarget });
7529
7786
  }
7530
- let eleObj = this.checkTargetElement(evt);
7787
+ const eleObj = this.checkTargetElement(evt);
7531
7788
  if (eleObj.target && eleObj.instance) {
7532
7789
  /* tslint:disable no-any */
7533
7790
  let flag = true;
@@ -7548,19 +7805,19 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7548
7805
  else if (this.hoverObject) {
7549
7806
  this.triggerOutFunction(evt, eleObj);
7550
7807
  }
7551
- let helperElement = this.droppables[this.scope].helper;
7808
+ const helperElement = this.droppables[this.scope].helper;
7552
7809
  this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);
7553
- let tLeft = this.parentClientRect.left;
7554
- let tTop = this.parentClientRect.top;
7555
- let intCoord = this.getCoordinates(evt);
7556
- let pagex = intCoord.pageX;
7557
- let pagey = intCoord.pageY;
7558
- let dLeft = this.position.left - this.diffX;
7559
- let dTop = this.position.top - this.diffY;
7560
- let styles = getComputedStyle(helperElement);
7810
+ const tLeft = this.parentClientRect.left;
7811
+ const tTop = this.parentClientRect.top;
7812
+ const intCoord = this.getCoordinates(evt);
7813
+ const pagex = intCoord.pageX;
7814
+ const pagey = intCoord.pageY;
7815
+ const dLeft = this.position.left - this.diffX;
7816
+ const dTop = this.position.top - this.diffY;
7817
+ const styles = getComputedStyle(helperElement);
7561
7818
  if (this.dragArea) {
7562
7819
  if (this.pageX !== pagex || this.skipDistanceCheck) {
7563
- let helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)
7820
+ const helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)
7564
7821
  + parseFloat(styles.marginRight));
7565
7822
  if (this.dragLimit.left > dLeft && dLeft > 0) {
7566
7823
  left = this.dragLimit.left;
@@ -7573,7 +7830,7 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7573
7830
  }
7574
7831
  }
7575
7832
  if (this.pageY !== pagey || this.skipDistanceCheck) {
7576
- let helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)
7833
+ const helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)
7577
7834
  + parseFloat(styles.marginBottom));
7578
7835
  if (this.dragLimit.top > dTop && dTop > 0) {
7579
7836
  top = this.dragLimit.top;
@@ -7590,8 +7847,8 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7590
7847
  left = dLeft;
7591
7848
  top = dTop;
7592
7849
  }
7593
- let iTop = tTop + this.borderWidth.top;
7594
- let iLeft = tLeft + this.borderWidth.left;
7850
+ const iTop = tTop + this.borderWidth.top;
7851
+ const iLeft = tLeft + this.borderWidth.left;
7595
7852
  if (this.dragProcessStarted) {
7596
7853
  if (isNullOrUndefined(top)) {
7597
7854
  top = this.prevTop;
@@ -7602,16 +7859,29 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7602
7859
  }
7603
7860
  let draEleTop;
7604
7861
  let draEleLeft;
7605
- if (this.dragArea) {
7606
- this.dragLimit.top = this.clone ? this.dragLimit.top : 0;
7607
- draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - iTop);
7608
- draEleLeft = (left - iLeft) < 0 ? this.dragElePosition.left : (left - iLeft);
7862
+ if (this.helperElement.classList.contains('e-treeview')) {
7863
+ if (this.dragArea) {
7864
+ this.dragLimit.top = this.clone ? this.dragLimit.top : 0;
7865
+ draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - this.borderWidth.top);
7866
+ draEleLeft = (left - iLeft) < 0 ? this.dragLimit.left : (left - this.borderWidth.left);
7867
+ }
7868
+ else {
7869
+ draEleTop = top - this.borderWidth.top;
7870
+ draEleLeft = left - this.borderWidth.left;
7871
+ }
7609
7872
  }
7610
7873
  else {
7611
- draEleTop = top - iTop;
7612
- draEleLeft = left - iLeft;
7874
+ if (this.dragArea) {
7875
+ this.dragLimit.top = this.clone ? this.dragLimit.top : 0;
7876
+ draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - iTop);
7877
+ draEleLeft = (left - iLeft) < 0 ? this.dragElePosition.left : (left - iLeft);
7878
+ }
7879
+ else {
7880
+ draEleTop = top - iTop;
7881
+ draEleLeft = left - iLeft;
7882
+ }
7613
7883
  }
7614
- let marginTop = parseFloat(getComputedStyle(this.element).marginTop);
7884
+ const marginTop = parseFloat(getComputedStyle(this.element).marginTop);
7615
7885
  // when drag-element has margin-top
7616
7886
  /* istanbul ignore next */
7617
7887
  if (marginTop > 0) {
@@ -7629,7 +7899,7 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7629
7899
  }
7630
7900
  if ((top - iTop) < 0) {
7631
7901
  if (dTop + marginTop + (helperElement.offsetHeight - iTop) >= 0) {
7632
- let tempDraEleTop = this.dragLimit.top + dTop - iTop;
7902
+ const tempDraEleTop = this.dragLimit.top + dTop - iTop;
7633
7903
  if ((tempDraEleTop + marginTop + iTop) < 0) {
7634
7904
  draEleTop -= marginTop + iTop;
7635
7905
  }
@@ -7642,6 +7912,11 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7642
7912
  }
7643
7913
  }
7644
7914
  }
7915
+ if (this.dragArea && this.helperElement.classList.contains('e-treeview')) {
7916
+ const helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)
7917
+ + parseFloat(styles.marginBottom));
7918
+ draEleTop = (draEleTop + helperHeight) > this.dragLimit.bottom ? (this.dragLimit.bottom - helperHeight) : draEleTop;
7919
+ }
7645
7920
  /* istanbul ignore next */
7646
7921
  // if(this.eleTop > 0) {
7647
7922
  // draEleTop += this.eleTop;
@@ -7650,11 +7925,33 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7650
7925
  draEleTop -= this.parentScrollY;
7651
7926
  draEleLeft -= this.parentScrollX;
7652
7927
  }
7653
- let dragValue = this.getProcessedPositionValue({ top: draEleTop + 'px', left: draEleLeft + 'px' });
7928
+ if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {
7929
+ draEleTop += this.dragArea.scrollTop;
7930
+ }
7931
+ const dragValue = this.getProcessedPositionValue({ top: draEleTop + 'px', left: draEleLeft + 'px' });
7654
7932
  setStyleAttribute(helperElement, this.getDragPosition(dragValue));
7655
- if (!this.elementInViewport(helperElement) && this.enableAutoScroll) {
7933
+ if (!this.elementInViewport(helperElement) && this.enableAutoScroll && !this.helperElement.classList.contains('e-treeview')) {
7656
7934
  this.helperElement.scrollIntoView();
7657
7935
  }
7936
+ let elements = document.querySelectorAll(':hover');
7937
+ if (this.enableAutoScroll && this.helperElement.classList.contains('e-treeview')) {
7938
+ if (elements.length === 0) {
7939
+ elements = this.getPathElements(evt);
7940
+ }
7941
+ /* tslint:disable no-any */
7942
+ let scrollParent = this.getScrollParent(elements, false);
7943
+ if (this.elementInViewport(this.helperElement)) {
7944
+ this.getScrollPosition(scrollParent, draEleTop);
7945
+ }
7946
+ else if (!this.elementInViewport(this.helperElement)) {
7947
+ elements = [].slice.call(document.querySelectorAll(':hover'));
7948
+ if (elements.length === 0) {
7949
+ elements = this.getPathElements(evt);
7950
+ }
7951
+ scrollParent = this.getScrollParent(elements, true);
7952
+ this.getScrollPosition(scrollParent, draEleTop);
7953
+ }
7954
+ }
7658
7955
  this.dragProcessStarted = true;
7659
7956
  this.prevLeft = left;
7660
7957
  this.prevTop = top;
@@ -7663,13 +7960,55 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7663
7960
  this.pageX = pagex;
7664
7961
  this.pageY = pagey;
7665
7962
  }
7963
+ /* tslint:disable no-any */
7964
+ getScrollParent(node, reverse) {
7965
+ /* tslint:disable no-any */
7966
+ const nodeEl = reverse ? node.reverse() : node;
7967
+ let hasScroll;
7968
+ for (let i = nodeEl.length - 1; i >= 0; i--) {
7969
+ hasScroll = window.getComputedStyle(nodeEl[parseInt(i.toString(), 10)])['overflow-y'];
7970
+ if ((hasScroll === 'auto' || hasScroll === 'scroll')
7971
+ && nodeEl[parseInt(i.toString(), 10)].scrollHeight > nodeEl[parseInt(i.toString(), 10)].clientHeight) {
7972
+ return nodeEl[parseInt(i.toString(), 10)];
7973
+ }
7974
+ }
7975
+ hasScroll = window.getComputedStyle(document.scrollingElement)['overflow-y'];
7976
+ if (hasScroll === 'visible') {
7977
+ document.scrollingElement.style.overflow = 'auto';
7978
+ return document.scrollingElement;
7979
+ }
7980
+ }
7981
+ getScrollPosition(nodeEle, draEleTop) {
7982
+ if (nodeEle && nodeEle === document.scrollingElement) {
7983
+ if ((nodeEle.clientHeight + document.scrollingElement.scrollTop - this.helperElement.clientHeight) < draEleTop
7984
+ && nodeEle.getBoundingClientRect().height + this.parentClientRect.top > draEleTop) {
7985
+ nodeEle.scrollTop += this.helperElement.clientHeight;
7986
+ }
7987
+ else if (nodeEle.scrollTop > draEleTop - this.helperElement.clientHeight) {
7988
+ nodeEle.scrollTop -= this.helperElement.clientHeight;
7989
+ }
7990
+ }
7991
+ else if (nodeEle && nodeEle !== document.scrollingElement) {
7992
+ if ((nodeEle.clientHeight + nodeEle.getBoundingClientRect().top - this.helperElement.clientHeight + document.scrollingElement.scrollTop) < draEleTop) {
7993
+ nodeEle.scrollTop += this.helperElement.clientHeight;
7994
+ }
7995
+ else if (nodeEle.getBoundingClientRect().top > (draEleTop - this.helperElement.clientHeight - document.scrollingElement.scrollTop)) {
7996
+ nodeEle.scrollTop -= this.helperElement.clientHeight;
7997
+ }
7998
+ }
7999
+ }
8000
+ getPathElements(evt) {
8001
+ const elementTop = evt.clientX > 0 ? evt.clientX : 0;
8002
+ const elementLeft = evt.clientY > 0 ? evt.clientY : 0;
8003
+ return document.elementsFromPoint(elementTop, elementLeft);
8004
+ }
7666
8005
  triggerOutFunction(evt, eleObj) {
7667
8006
  this.hoverObject.instance.intOut(evt, eleObj.target);
7668
8007
  this.hoverObject.instance.dragData[this.scope] = null;
7669
8008
  this.hoverObject = null;
7670
8009
  }
7671
8010
  getDragPosition(dragValue) {
7672
- let temp = extend({}, dragValue);
8011
+ const temp = extend({}, dragValue);
7673
8012
  if (this.axis) {
7674
8013
  if (this.axis === 'x') {
7675
8014
  delete temp.top;
@@ -7681,9 +8020,9 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7681
8020
  return temp;
7682
8021
  }
7683
8022
  getDocumentWidthHeight(str) {
7684
- let docBody = document.body;
7685
- let docEle = document.documentElement;
7686
- let returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);
8023
+ const docBody = document.body;
8024
+ const docEle = document.documentElement;
8025
+ const returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);
7687
8026
  return returnValue;
7688
8027
  }
7689
8028
  intDragStop(evt) {
@@ -7691,10 +8030,10 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7691
8030
  if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {
7692
8031
  return;
7693
8032
  }
7694
- let type = ['touchend', 'pointerup', 'mouseup'];
8033
+ const type = ['touchend', 'pointerup', 'mouseup'];
7695
8034
  if (type.indexOf(evt.type) !== -1) {
7696
8035
  if (this.dragStop) {
7697
- let curTarget = this.getProperTargetElement(evt);
8036
+ const curTarget = this.getProperTargetElement(evt);
7698
8037
  this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });
7699
8038
  }
7700
8039
  this.intDestroy(evt);
@@ -7702,7 +8041,7 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7702
8041
  else {
7703
8042
  this.element.setAttribute('aria-grabbed', 'false');
7704
8043
  }
7705
- let eleObj = this.checkTargetElement(evt);
8044
+ const eleObj = this.checkTargetElement(evt);
7706
8045
  if (eleObj.target && eleObj.instance) {
7707
8046
  eleObj.instance.dragStopCalled = true;
7708
8047
  eleObj.instance.dragData[this.scope] = this.droppables[this.scope];
@@ -7746,7 +8085,7 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7746
8085
  let top = 0;
7747
8086
  let left = 0;
7748
8087
  let ele;
7749
- let type = typeof this.dragArea;
8088
+ const type = typeof this.dragArea;
7750
8089
  if (type === 'string') {
7751
8090
  ele = select(this.dragArea);
7752
8091
  }
@@ -7754,20 +8093,25 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7754
8093
  ele = this.dragArea;
7755
8094
  }
7756
8095
  if (ele) {
7757
- let elementArea = ele.getBoundingClientRect();
8096
+ const elementArea = ele.getBoundingClientRect();
7758
8097
  eleWidthBound = ele.scrollWidth ? ele.scrollWidth : elementArea.right - elementArea.left;
7759
- eleHeightBound = ele.scrollHeight ? ele.scrollHeight : elementArea.bottom - elementArea.top;
7760
- let keys = ['Top', 'Left', 'Bottom', 'Right'];
7761
- let styles = getComputedStyle(ele);
8098
+ eleHeightBound = ele.scrollHeight ? (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) ? ele.clientHeight : ele.scrollHeight : elementArea.bottom - elementArea.top;
8099
+ const keys = ['Top', 'Left', 'Bottom', 'Right'];
8100
+ const styles = getComputedStyle(ele);
7762
8101
  for (let i = 0; i < keys.length; i++) {
7763
- let key = keys[i];
7764
- let tborder = styles['border' + key + 'Width'];
7765
- let tpadding = styles['padding' + key];
7766
- let lowerKey = key.toLowerCase();
7767
- this.borderWidth[lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);
7768
- this.padding[lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);
7769
- }
7770
- top = elementArea.top;
8102
+ const key = keys[parseInt(i.toString(), 10)];
8103
+ const tborder = styles['border' + key + 'Width'];
8104
+ const tpadding = styles['padding' + key];
8105
+ const lowerKey = key.toLowerCase();
8106
+ this.borderWidth[`${lowerKey}`] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);
8107
+ this.padding[`${lowerKey}`] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);
8108
+ }
8109
+ if (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) {
8110
+ top = elementArea.top + document.scrollingElement.scrollTop;
8111
+ }
8112
+ else {
8113
+ top = elementArea.top;
8114
+ }
7771
8115
  left = elementArea.left;
7772
8116
  this.dragLimit.left = left + this.borderWidth.left + this.padding.left;
7773
8117
  this.dragLimit.top = ele.offsetTop + this.borderWidth.top + this.padding.top;
@@ -7776,10 +8120,11 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7776
8120
  }
7777
8121
  }
7778
8122
  getProperTargetElement(evt) {
7779
- let intCoord = this.getCoordinates(evt);
8123
+ const intCoord = this.getCoordinates(evt);
7780
8124
  let ele;
7781
- let prevStyle = this.helperElement.style.pointerEvents || '';
7782
- if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1) {
8125
+ const prevStyle = this.helperElement.style.pointerEvents || '';
8126
+ let isPointer = evt.type.indexOf('pointer') !== -1 && Browser.info.name === 'safari' && parseInt(Browser.info.version) > 12;
8127
+ if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1 || isPointer) {
7783
8128
  this.helperElement.style.pointerEvents = 'none';
7784
8129
  ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);
7785
8130
  this.helperElement.style.pointerEvents = prevStyle;
@@ -7802,11 +8147,11 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7802
8147
  }
7803
8148
  getMousePosition(evt, isdragscroll) {
7804
8149
  /* tslint:disable no-any */
7805
- let dragEle = evt.srcElement !== undefined ? evt.srcElement : evt.target;
7806
- let intCoord = this.getCoordinates(evt);
8150
+ const dragEle = evt.srcElement !== undefined ? evt.srcElement : evt.target;
8151
+ const intCoord = this.getCoordinates(evt);
7807
8152
  let pageX;
7808
8153
  let pageY;
7809
- let isOffsetParent = isNullOrUndefined(dragEle.offsetParent);
8154
+ const isOffsetParent = isNullOrUndefined(dragEle.offsetParent);
7810
8155
  /* istanbul ignore next */
7811
8156
  if (isdragscroll) {
7812
8157
  pageX = this.clone ? intCoord.pageX :
@@ -7818,6 +8163,12 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7818
8163
  pageX = this.clone ? intCoord.pageX : (intCoord.pageX + window.pageXOffset) - this.relativeXPosition;
7819
8164
  pageY = this.clone ? intCoord.pageY : (intCoord.pageY + window.pageYOffset) - this.relativeYPosition;
7820
8165
  }
8166
+ if (this.element && this.element.classList.length > 0 && this.element.classList.value.indexOf("e-dialog") === -1 && document.scrollingElement) {
8167
+ let isVerticalScroll = document.scrollingElement.scrollHeight > 0 && document.scrollingElement.scrollHeight > document.scrollingElement.clientHeight && document.scrollingElement.scrollTop > 0;
8168
+ let isHorrizontalScroll = document.scrollingElement.scrollWidth > 0 && document.scrollingElement.scrollWidth > document.scrollingElement.clientWidth && document.scrollingElement.scrollLeft > 0;
8169
+ pageX = isHorrizontalScroll ? pageX - document.scrollingElement.scrollLeft : pageX;
8170
+ pageY = isVerticalScroll ? pageY - document.scrollingElement.scrollTop : pageY;
8171
+ }
7821
8172
  return {
7822
8173
  left: pageX - (this.margin.left + this.cursorAt.left),
7823
8174
  top: pageY - (this.margin.top + this.cursorAt.top)
@@ -7853,10 +8204,10 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7853
8204
  };
7854
8205
  }
7855
8206
  checkTargetElement(evt) {
7856
- let target = this.getProperTargetElement(evt);
8207
+ const target = this.getProperTargetElement(evt);
7857
8208
  let dropIns = this.getDropInstance(target);
7858
8209
  if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {
7859
- let parent = closest(target.parentNode, '.e-droppable') || target.parentElement;
8210
+ const parent = closest(target.parentNode, '.e-droppable') || target.parentElement;
7860
8211
  if (parent) {
7861
8212
  dropIns = this.getDropInstance(parent);
7862
8213
  }
@@ -7864,12 +8215,12 @@ let Draggable = Draggable_1 = class Draggable extends Base {
7864
8215
  return { target: target, instance: dropIns };
7865
8216
  }
7866
8217
  getDropInstance(ele) {
7867
- let name = 'getModuleName';
8218
+ const name = 'getModuleName';
7868
8219
  let drop;
7869
- let eleInst = ele && ele.ej2_instances;
8220
+ const eleInst = ele && ele.ej2_instances;
7870
8221
  if (eleInst) {
7871
- for (let inst of eleInst) {
7872
- if (inst[name]() === 'droppable') {
8222
+ for (const inst of eleInst) {
8223
+ if (inst[`${name}`]() === 'droppable') {
7873
8224
  drop = inst;
7874
8225
  break;
7875
8226
  }
@@ -8166,7 +8517,7 @@ let KeyboardEvents = KeyboardEvents_1 = class KeyboardEvents extends Base {
8166
8517
  const curkeyCode = e.which;
8167
8518
  const keys = Object.keys(this.keyConfigs);
8168
8519
  for (const key of keys) {
8169
- const configCollection = this.keyConfigs[key].split(',');
8520
+ const configCollection = this.keyConfigs[`${key}`].split(',');
8170
8521
  for (const rconfig of configCollection) {
8171
8522
  const rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());
8172
8523
  if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&
@@ -8240,7 +8591,7 @@ let KeyboardEvents = KeyboardEvents_1 = class KeyboardEvents extends Base {
8240
8591
  */
8241
8592
  static getKeyConfigData(config) {
8242
8593
  if (config in this.configCache) {
8243
- return this.configCache[config];
8594
+ return this.configCache[`${config}`];
8244
8595
  }
8245
8596
  const keys = config.toLowerCase().split('+');
8246
8597
  const keyData = {
@@ -8255,12 +8606,12 @@ let KeyboardEvents = KeyboardEvents_1 = class KeyboardEvents extends Base {
8255
8606
  else {
8256
8607
  keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);
8257
8608
  }
8258
- KeyboardEvents_1.configCache[config] = keyData;
8609
+ KeyboardEvents_1.configCache[`${config}`] = keyData;
8259
8610
  return keyData;
8260
8611
  }
8261
8612
  // Return the keycode value as string
8262
8613
  static getKeyCode(keyVal) {
8263
- return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);
8614
+ return keyCode[`${keyVal}`] || keyVal.toUpperCase().charCodeAt(0);
8264
8615
  }
8265
8616
  };
8266
8617
  KeyboardEvents.configCache = {};
@@ -8340,11 +8691,11 @@ class L10n {
8340
8691
  */
8341
8692
  getConstant(prop) {
8342
8693
  // Removed conditional operator because this method does not return correct value when passing 0 as value in localization
8343
- if (!isNullOrUndefined(this.currentLocale[prop])) {
8344
- return this.currentLocale[prop];
8694
+ if (!isNullOrUndefined(this.currentLocale[`${prop}`])) {
8695
+ return this.currentLocale[`${prop}`];
8345
8696
  }
8346
8697
  else {
8347
- return this.localeStrings[prop] || '';
8698
+ return this.localeStrings[`${prop}`] || '';
8348
8699
  }
8349
8700
  }
8350
8701
  /**
@@ -8355,8 +8706,8 @@ class L10n {
8355
8706
  * @returns {Object} ?
8356
8707
  */
8357
8708
  intGetControlConstant(curObject, locale) {
8358
- if ((curObject)[locale]) {
8359
- return (curObject)[locale][this.controlName];
8709
+ if ((curObject)[`${locale}`]) {
8710
+ return (curObject)[`${locale}`][this.controlName];
8360
8711
  }
8361
8712
  return null;
8362
8713
  }
@@ -8496,6 +8847,10 @@ let Touch = class Touch extends Base {
8496
8847
  diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);
8497
8848
  diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);
8498
8849
  this.isTouchMoved = diffX > 1 || diffY > 1;
8850
+ const isFirefox = (/Firefox/).test(Browser.userAgent);
8851
+ if (isFirefox && point.clientX === 0 && point.clientY === 0 && evt.type === 'mouseup') {
8852
+ this.isTouchMoved = false;
8853
+ }
8499
8854
  this.endPoint = point;
8500
8855
  this.calcPoints(evt);
8501
8856
  const swipeArgs = {
@@ -8746,6 +9101,7 @@ const WINDOWFUNC = /\window\./gm;
8746
9101
  function compile$1(template, helper, ignorePrefix) {
8747
9102
  const argName = 'data';
8748
9103
  const evalExpResult = evalExp(template, argName, helper, ignorePrefix);
9104
+ // eslint-disable-next-line
8749
9105
  const condtion = `var valueRegEx = (/value=\\'([A-Za-z0-9 _]*)((.)([\\w)(!-;?-■\\s]+)['])/g);
8750
9106
  var hrefRegex = (/(?:href)([\\s='"./]+)([\\w-./?=&\\\\#"]+)((.)([\\w)(!-;/?-■\\s]+)['])/g);
8751
9107
  if(str.match(valueRegEx)){
@@ -8775,7 +9131,7 @@ function compile$1(template, helper, ignorePrefix) {
8775
9131
  }
8776
9132
  }
8777
9133
  `;
8778
- const fnCode = "var str=\"" + evalExpResult + "\";" + condtion + " return str;";
9134
+ const fnCode = 'var str=\"' + evalExpResult + '\";' + condtion + ' return str;';
8779
9135
  const fn = new Function(argName, fnCode);
8780
9136
  return fn.bind(helper);
8781
9137
  }
@@ -8888,7 +9244,7 @@ function evalExp(str, nameSpace, helper, ignorePrefix) {
8888
9244
  }
8889
9245
  else {
8890
9246
  // evaluate normal expression
8891
- cnt = '"+' + addNameSpace(cnt.replace(/,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys, ignorePrefix) + '+"';
9247
+ cnt = cnt !== '' ? '"+' + addNameSpace(cnt.replace(/,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys, ignorePrefix) + '+"' : ' ';
8892
9248
  }
8893
9249
  }
8894
9250
  return cnt;
@@ -9007,23 +9363,23 @@ function compile$$1(templateString, helper, ignorePrefix) {
9007
9363
  if (isBlazor() && !isStringTemplate) {
9008
9364
  const randomId = getRandomId();
9009
9365
  let blazorId = templateId + randomId;
9010
- if (!blazorTemplates[templateId]) {
9011
- blazorTemplates[templateId] = [];
9366
+ if (!blazorTemplates[`${templateId}`]) {
9367
+ blazorTemplates[`${templateId}`] = [];
9012
9368
  }
9013
9369
  if (!isNullOrUndefined(index)) {
9014
- const keys = Object.keys(blazorTemplates[templateId][index]);
9370
+ const keys = Object.keys(blazorTemplates[`${templateId}`][parseInt(index.toString(), 10)]);
9015
9371
  for (const key of keys) {
9016
- if (key !== blazorTemplateId && data[key]) {
9017
- blazorTemplates[templateId][index][key] = data[key];
9372
+ if (key !== blazorTemplateId && data[`${key}`]) {
9373
+ blazorTemplates[`${templateId}`][parseInt(index.toString(), 10)][`${key}`] = data[`${key}`];
9018
9374
  }
9019
9375
  if (key === blazorTemplateId) {
9020
- blazorId = blazorTemplates[templateId][index][key];
9376
+ blazorId = blazorTemplates[`${templateId}`][parseInt(index.toString(), 10)][`${key}`];
9021
9377
  }
9022
9378
  }
9023
9379
  }
9024
9380
  else {
9025
- data[blazorTemplateId] = blazorId;
9026
- blazorTemplates[templateId].push(data);
9381
+ data[`${blazorTemplateId}`] = blazorId;
9382
+ blazorTemplates[`${templateId}`].push(data);
9027
9383
  }
9028
9384
  // eslint-disable-next-line
9029
9385
  return propName === 'rowTemplate' ? [createElement('tr', { id: blazorId, className: 'e-blazor-template' })] :
@@ -9057,9 +9413,9 @@ function compile$$1(templateString, helper, ignorePrefix) {
9057
9413
  function updateBlazorTemplate(templateId, templateName, comp, isEmpty, callBack) {
9058
9414
  if (isBlazor()) {
9059
9415
  const ejsIntrop = 'sfBlazor';
9060
- window[ejsIntrop].updateTemplate(templateName, blazorTemplates[templateId], templateId, comp, callBack);
9416
+ window[`${ejsIntrop}`].updateTemplate(templateName, blazorTemplates[`${templateId}`], templateId, comp, callBack);
9061
9417
  if (isEmpty !== false) {
9062
- blazorTemplates[templateId] = [];
9418
+ blazorTemplates[`${templateId}`] = [];
9063
9419
  }
9064
9420
  }
9065
9421
  }
@@ -9078,21 +9434,21 @@ function resetBlazorTemplate(templateId, templateName, index) {
9078
9434
  for (let i = 0; i < innerTemplates.length; i++) {
9079
9435
  let tempId = ' ';
9080
9436
  if (!isNullOrUndefined(index)) {
9081
- tempId = innerTemplates[index].getAttribute('data-templateId');
9437
+ tempId = innerTemplates[parseInt(index.toString(), 10)].getAttribute('data-templateId');
9082
9438
  }
9083
9439
  else {
9084
- tempId = innerTemplates[i].getAttribute('data-templateId');
9440
+ tempId = innerTemplates[parseInt(i.toString(), 10)].getAttribute('data-templateId');
9085
9441
  }
9086
9442
  const tempElement = document.getElementById(tempId);
9087
9443
  if (tempElement) {
9088
9444
  const length = tempElement.childNodes.length;
9089
9445
  for (let j = 0; j < length; j++) {
9090
9446
  if (!isNullOrUndefined(index)) {
9091
- innerTemplates[index].appendChild(tempElement.childNodes[0]);
9447
+ innerTemplates[parseInt(index.toString(), 10)].appendChild(tempElement.childNodes[0]);
9092
9448
  i = innerTemplates.length;
9093
9449
  }
9094
9450
  else {
9095
- innerTemplates[i].appendChild(tempElement.childNodes[0]);
9451
+ innerTemplates[parseInt(i.toString(), 10)].appendChild(tempElement.childNodes[0]);
9096
9452
  }
9097
9453
  }
9098
9454
  }
@@ -9262,15 +9618,15 @@ class SanitizeHtmlHelper {
9262
9618
  this.removeXssAttrs();
9263
9619
  const tempEleValue = this.wrapElement.innerHTML;
9264
9620
  this.removeElement();
9265
- return tempEleValue;
9621
+ return tempEleValue.replace('&amp;', '&');
9266
9622
  }
9267
9623
  static removeElement() {
9268
9624
  // Removes an element's attibute to avoid html tag validation
9269
9625
  const nodes = this.wrapElement.children;
9270
9626
  for (let j = 0; j < nodes.length; j++) {
9271
- const attribute = nodes[j].attributes;
9627
+ const attribute = nodes[parseInt(j.toString(), 10)].attributes;
9272
9628
  for (let i = 0; i < attribute.length; i++) {
9273
- this.wrapElement.children[j].removeAttribute(attribute[i].localName);
9629
+ this.wrapElement.children[parseInt(j.toString(), 10)].removeAttribute(attribute[parseInt(i.toString(), 10)].localName);
9274
9630
  }
9275
9631
  }
9276
9632
  }
@@ -9317,5 +9673,5 @@ class SanitizeHtmlHelper {
9317
9673
  * Base modules
9318
9674
  */
9319
9675
 
9320
- export { blazorCultureFormats, IntlBase, Ajax, Animation, rippleEffect, isRippleEnabled, enableRipple, Base, getComponent, removeChildInstance, Browser, versionBasedStatePersistence, enableVersionBasedPersistence, Component, ChildProperty, Position, Draggable, Droppable, EventHandler, onIntlChange, rightToLeft, cldrData, defaultCulture, defaultCurrencyCode, Internationalization, setCulture, setCurrencyCode, loadCldr, enableRtl, getNumericObject, getNumberDependable, getDefaultDateObject, KeyboardEvents, L10n, ModuleLoader, Property, Complex, ComplexFactory, Collection, CollectionFactory, Event$1 as Event, NotifyPropertyChanges, CreateBuilder, SwipeSettings, Touch, HijriParser, blazorTemplates, getRandomId, compile$$1 as compile, updateBlazorTemplate, resetBlazorTemplate, setTemplateEngine, getTemplateEngine, disableBlazorMode, createInstance, setImmediate, getValue, setValue, deleteObject, containerObject, isObject, getEnumValue, merge, extend, isNullOrUndefined, isUndefined, getUniqueID, debounce, queryParams, isObjectArray, compareElementParent, throwError, print, formatUnit, enableBlazorMode, isBlazor, getElement, getInstance, addInstance, uniqueID, createElement, addClass, removeClass, isVisible, prepend, append, detach, remove, attributes, select, selectAll, closest, siblings, getAttributeOrDefault, setStyleAttribute, classList, matches, includeInnerHTML, containsClass, cloneNode, Observer, SanitizeHtmlHelper, registerLicense, validateLicense, getVersion };
9676
+ export { blazorCultureFormats, IntlBase, Ajax, Animation, rippleEffect, isRippleEnabled, enableRipple, animationMode, setGlobalAnimation, Base, getComponent, removeChildInstance, Browser, versionBasedStatePersistence, enableVersionBasedPersistence, Component, ChildProperty, Position, Draggable, Droppable, EventHandler, onIntlChange, rightToLeft, cldrData, defaultCulture, defaultCurrencyCode, Internationalization, setCulture, setCurrencyCode, loadCldr, enableRtl, getNumericObject, getNumberDependable, getDefaultDateObject, KeyboardEvents, L10n, ModuleLoader, Property, Complex, ComplexFactory, Collection, CollectionFactory, Event$1 as Event, NotifyPropertyChanges, CreateBuilder, SwipeSettings, Touch, HijriParser, blazorTemplates, getRandomId, compile$$1 as compile, updateBlazorTemplate, resetBlazorTemplate, setTemplateEngine, getTemplateEngine, disableBlazorMode, createInstance, setImmediate, getValue, setValue, deleteObject, containerObject, isObject, getEnumValue, merge, extend, isNullOrUndefined, isUndefined, getUniqueID, debounce, queryParams, isObjectArray, compareElementParent, throwError, print, formatUnit, enableBlazorMode, isBlazor, getElement, getInstance, addInstance, uniqueID, createElement, addClass, removeClass, isVisible, prepend, append, detach, remove, attributes, select, selectAll, closest, siblings, getAttributeOrDefault, setStyleAttribute, classList, matches, includeInnerHTML, containsClass, cloneNode, Observer, SanitizeHtmlHelper, componentList, registerLicense, validateLicense, getVersion, createLicenseOverlay };
9321
9677
  //# sourceMappingURL=ej2-base.es2015.js.map