angular-three 2.2.1 → 2.3.2

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.
@@ -1,9 +1,12 @@
1
1
  import { DOCUMENT } from '@angular/common';
2
2
  import { inject, Pipe } from '@angular/core';
3
3
  import * as i0 from "@angular/core";
4
+ const RGBA_REGEX = /rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*(\d*\.?\d+)?\)/;
5
+ const DEFAULT_COLOR = 0x000000;
4
6
  export class NgtHexify {
5
7
  constructor() {
6
8
  this.document = inject(DOCUMENT, { optional: true });
9
+ this.cache = {};
7
10
  }
8
11
  /**
9
12
  * transforms a:
@@ -17,38 +20,54 @@ export class NgtHexify {
17
20
  */
18
21
  transform(value) {
19
22
  if (value == null)
20
- return 0x000000;
23
+ return DEFAULT_COLOR;
21
24
  if (value.startsWith('#')) {
22
- return this.hexStringToNumber(value);
25
+ if (!this.cache[value]) {
26
+ this.cache[value] = this.hexStringToNumber(value);
27
+ }
28
+ return this.cache[value];
23
29
  }
24
30
  if (!this.ctx) {
25
31
  this.ctx = this.document?.createElement('canvas').getContext('2d');
26
32
  }
27
- if (!this.ctx)
28
- return 0x000000;
33
+ if (!this.ctx) {
34
+ console.warn('[NGT] hexify: canvas context is not available');
35
+ return DEFAULT_COLOR;
36
+ }
29
37
  this.ctx.fillStyle = value;
30
38
  const computedValue = this.ctx.fillStyle;
31
39
  if (computedValue.startsWith('#')) {
32
- return this.hexStringToNumber(computedValue);
40
+ if (!this.cache[computedValue]) {
41
+ this.cache[computedValue] = this.hexStringToNumber(computedValue);
42
+ }
43
+ return this.cache[computedValue];
44
+ }
45
+ if (!computedValue.startsWith('rgba')) {
46
+ console.warn(`[NGT] hexify: invalid color format. Expected rgba or hex, receive: ${computedValue}`);
47
+ return DEFAULT_COLOR;
48
+ }
49
+ const match = computedValue.match(RGBA_REGEX);
50
+ if (!match) {
51
+ console.warn(`[NGT] hexify: invalid color format. Expected rgba or hex, receive: ${computedValue}`);
52
+ return DEFAULT_COLOR;
33
53
  }
34
- if (!computedValue.startsWith('rgba'))
35
- return 0x000000;
36
- const regex = /rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*(\d*\.?\d+)?\)/;
37
- const match = computedValue.match(regex);
38
- if (!match)
39
- return 0x000000;
40
54
  const r = parseInt(match[1], 10);
41
55
  const g = parseInt(match[2], 10);
42
56
  const b = parseInt(match[3], 10);
43
57
  const a = match[4] ? parseFloat(match[4]) : 1.0;
44
- // Convert the components to hex strings
45
- const hexR = this.componentToHex(r);
46
- const hexG = this.componentToHex(g);
47
- const hexB = this.componentToHex(b);
48
- const hexA = this.componentToHex(Math.round(a * 255));
49
- // Combine the hex components into a single hex string
50
- const hex = `#${hexR}${hexG}${hexB}${hexA}`;
51
- return this.hexStringToNumber(hex);
58
+ const cacheKey = `${r}:${g}:${b}:${a}`;
59
+ // check result from cache
60
+ if (!this.cache[cacheKey]) {
61
+ // Convert the components to hex strings
62
+ const hexR = this.componentToHex(r);
63
+ const hexG = this.componentToHex(g);
64
+ const hexB = this.componentToHex(b);
65
+ const hexA = this.componentToHex(Math.round(a * 255));
66
+ // Combine the hex components into a single hex string
67
+ const hex = `#${hexR}${hexG}${hexB}${hexA}`;
68
+ this.cache[cacheKey] = this.hexStringToNumber(hex);
69
+ }
70
+ return this.cache[cacheKey];
52
71
  }
53
72
  hexStringToNumber(hexString) {
54
73
  return parseInt(hexString.replace('#', ''), 16);
@@ -64,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
64
83
  type: Pipe,
65
84
  args: [{ name: 'hexify', pure: true, standalone: true }]
66
85
  }] });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGV4aWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGlwZXMvaGV4aWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHN0MsTUFBTSxPQUFPLFNBQVM7SUFEdEI7UUFFUyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBK0R4RDtJQTVEQTs7Ozs7Ozs7O09BU0c7SUFDSCxTQUFTLENBQUMsS0FBYTtRQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFbkMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBRXpDLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUV2RCxNQUFNLEtBQUssR0FBRyxtREFBbUQsQ0FBQztRQUNsRSxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFNUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVoRCx3Q0FBd0M7UUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXRELHNEQUFzRDtRQUN0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxTQUFpQjtRQUMxQyxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sY0FBYyxDQUFDLFNBQWlCO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzNDLENBQUM7OEdBL0RXLFNBQVM7NEdBQVQsU0FBUzs7MkZBQVQsU0FBUztrQkFEckIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHsgbmFtZTogJ2hleGlmeScsIHB1cmU6IHRydWUsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RIZXhpZnkge1xuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5ULCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXHRwcml2YXRlIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGw7XG5cblx0LyoqXG5cdCAqIHRyYW5zZm9ybXMgYTpcblx0ICogLSBoZXggc3RyaW5nIHRvIGEgaGV4IG51bWJlclxuXHQgKiAtIHJnYiBzdHJpbmcgdG8gYSBoZXggbnVtYmVyXG5cdCAqIC0gcmdiYSBzdHJpbmcgdG8gYSBoZXggbnVtYmVyXG5cdCAqIC0gY3NzIGNvbG9yIHN0cmluZyB0byBhIGhleCBudW1iZXJcblx0ICpcblx0ICogYWx3YXlzIGRlZmF1bHQgdG8gYmxhY2sgaWYgZmFpbGVkXG5cdCAqIEBwYXJhbSB2YWx1ZVxuXHQgKi9cblx0dHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gMHgwMDAwMDA7XG5cblx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnIycpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZXhTdHJpbmdUb051bWJlcih2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmN0eCkge1xuXHRcdFx0dGhpcy5jdHggPSB0aGlzLmRvY3VtZW50Py5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5jdHgpIHJldHVybiAweDAwMDAwMDtcblxuXHRcdHRoaXMuY3R4LmZpbGxTdHlsZSA9IHZhbHVlO1xuXHRcdGNvbnN0IGNvbXB1dGVkVmFsdWUgPSB0aGlzLmN0eC5maWxsU3R5bGU7XG5cblx0XHRpZiAoY29tcHV0ZWRWYWx1ZS5zdGFydHNXaXRoKCcjJykpIHtcblx0XHRcdHJldHVybiB0aGlzLmhleFN0cmluZ1RvTnVtYmVyKGNvbXB1dGVkVmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmICghY29tcHV0ZWRWYWx1ZS5zdGFydHNXaXRoKCdyZ2JhJykpIHJldHVybiAweDAwMDAwMDtcblxuXHRcdGNvbnN0IHJlZ2V4ID0gL3JnYmE/XFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKSw/XFxzKihcXGQqXFwuP1xcZCspP1xcKS87XG5cdFx0Y29uc3QgbWF0Y2ggPSBjb21wdXRlZFZhbHVlLm1hdGNoKHJlZ2V4KTtcblx0XHRpZiAoIW1hdGNoKSByZXR1cm4gMHgwMDAwMDA7XG5cblx0XHRjb25zdCByID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcblx0XHRjb25zdCBnID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcblx0XHRjb25zdCBiID0gcGFyc2VJbnQobWF0Y2hbM10sIDEwKTtcblx0XHRjb25zdCBhID0gbWF0Y2hbNF0gPyBwYXJzZUZsb2F0KG1hdGNoWzRdKSA6IDEuMDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGNvbXBvbmVudHMgdG8gaGV4IHN0cmluZ3Ncblx0XHRjb25zdCBoZXhSID0gdGhpcy5jb21wb25lbnRUb0hleChyKTtcblx0XHRjb25zdCBoZXhHID0gdGhpcy5jb21wb25lbnRUb0hleChnKTtcblx0XHRjb25zdCBoZXhCID0gdGhpcy5jb21wb25lbnRUb0hleChiKTtcblx0XHRjb25zdCBoZXhBID0gdGhpcy5jb21wb25lbnRUb0hleChNYXRoLnJvdW5kKGEgKiAyNTUpKTtcblxuXHRcdC8vIENvbWJpbmUgdGhlIGhleCBjb21wb25lbnRzIGludG8gYSBzaW5nbGUgaGV4IHN0cmluZ1xuXHRcdGNvbnN0IGhleCA9IGAjJHtoZXhSfSR7aGV4R30ke2hleEJ9JHtoZXhBfWA7XG5cdFx0cmV0dXJuIHRoaXMuaGV4U3RyaW5nVG9OdW1iZXIoaGV4KTtcblx0fVxuXG5cdHByaXZhdGUgaGV4U3RyaW5nVG9OdW1iZXIoaGV4U3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiBwYXJzZUludChoZXhTdHJpbmcucmVwbGFjZSgnIycsICcnKSwgMTYpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb21wb25lbnRUb0hleChjb21wb25lbnQ6IG51bWJlcik6IHN0cmluZyB7XG5cdFx0Y29uc3QgaGV4ID0gY29tcG9uZW50LnRvU3RyaW5nKDE2KTtcblx0XHRyZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/ICcwJyArIGhleCA6IGhleDtcblx0fVxufVxuIl19
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGV4aWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGlwZXMvaGV4aWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFN0MsTUFBTSxVQUFVLEdBQUcsbURBQW1ELENBQUM7QUFDdkUsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBRy9CLE1BQU0sT0FBTyxTQUFTO0lBRHRCO1FBRVMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVoRCxVQUFLLEdBQTJCLEVBQUUsQ0FBQztLQW1GM0M7SUFqRkE7Ozs7Ozs7OztPQVNHO0lBQ0gsU0FBUyxDQUFDLEtBQWE7UUFDdEIsSUFBSSxLQUFLLElBQUksSUFBSTtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBRXhDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztR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LENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sY0FBYyxDQUFDLFNBQWlCO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzNDLENBQUM7OEdBckZXLFNBQVM7NEdBQVQsU0FBUzs7MkZBQVQsU0FBUztrQkFEckIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IFJHQkFfUkVHRVggPSAvcmdiYT9cXCgoXFxkKyksXFxzKihcXGQrKSxcXHMqKFxcZCspLD9cXHMqKFxcZCpcXC4/XFxkKyk/XFwpLztcbmNvbnN0IERFRkFVTFRfQ09MT1IgPSAweDAwMDAwMDtcblxuQFBpcGUoeyBuYW1lOiAnaGV4aWZ5JywgcHVyZTogdHJ1ZSwgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndEhleGlmeSB7XG5cdHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cdHByaXZhdGUgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbDtcblx0cHJpdmF0ZSBjYWNoZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG5cdC8qKlxuXHQgKiB0cmFuc2Zvcm1zIGE6XG5cdCAqIC0gaGV4IHN0cmluZyB0byBhIGhleCBudW1iZXJcblx0ICogLSByZ2Igc3RyaW5nIHRvIGEgaGV4IG51bWJlclxuXHQgKiAtIHJnYmEgc3RyaW5nIHRvIGEgaGV4IG51bWJlclxuXHQgKiAtIGNzcyBjb2xvciBzdHJpbmcgdG8gYSBoZXggbnVtYmVyXG5cdCAqXG5cdCAqIGFsd2F5cyBkZWZhdWx0IHRvIGJsYWNrIGlmIGZhaWxlZFxuXHQgKiBAcGFyYW0gdmFsdWVcblx0ICovXG5cdHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIERFRkFVTFRfQ09MT1I7XG5cblx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnIycpKSB7XG5cdFx0XHRpZiAoIXRoaXMuY2FjaGVbdmFsdWVdKSB7XG5cdFx0XHRcdHRoaXMuY2FjaGVbdmFsdWVdID0gdGhpcy5oZXhTdHJpbmdUb051bWJlcih2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5jYWNoZVt2YWx1ZV07XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmN0eCkge1xuXHRcdFx0dGhpcy5jdHggPSB0aGlzLmRvY3VtZW50Py5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5jdHgpIHtcblx0XHRcdGNvbnNvbGUud2FybignW05HVF0gaGV4aWZ5OiBjYW52YXMgY29udGV4dCBpcyBub3QgYXZhaWxhYmxlJyk7XG5cdFx0XHRyZXR1cm4gREVGQVVMVF9DT0xPUjtcblx0XHR9XG5cblx0XHR0aGlzLmN0eC5maWxsU3R5bGUgPSB2YWx1ZTtcblx0XHRjb25zdCBjb21wdXRlZFZhbHVlID0gdGhpcy5jdHguZmlsbFN0eWxlO1xuXG5cdFx0aWYgKGNvbXB1dGVkVmFsdWUuc3RhcnRzV2l0aCgnIycpKSB7XG5cdFx0XHRpZiAoIXRoaXMuY2FjaGVbY29tcHV0ZWRWYWx1ZV0pIHtcblx0XHRcdFx0dGhpcy5jYWNoZVtjb21wdXRlZFZhbHVlXSA9IHRoaXMuaGV4U3RyaW5nVG9OdW1iZXIoY29tcHV0ZWRWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5jYWNoZVtjb21wdXRlZFZhbHVlXTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbXB1dGVkVmFsdWUuc3RhcnRzV2l0aCgncmdiYScpKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oYFtOR1RdIGhleGlmeTogaW52YWxpZCBjb2xvciBmb3JtYXQuIEV4cGVjdGVkIHJnYmEgb3IgaGV4LCByZWNlaXZlOiAke2NvbXB1dGVkVmFsdWV9YCk7XG5cdFx0XHRyZXR1cm4gREVGQVVMVF9DT0xPUjtcblx0XHR9XG5cblx0XHRjb25zdCBtYXRjaCA9IGNvbXB1dGVkVmFsdWUubWF0Y2goUkdCQV9SRUdFWCk7XG5cdFx0aWYgKCFtYXRjaCkge1xuXHRcdFx0Y29uc29sZS53YXJuKGBbTkdUXSBoZXhpZnk6IGludmFsaWQgY29sb3IgZm9ybWF0LiBFeHBlY3RlZCByZ2JhIG9yIGhleCwgcmVjZWl2ZTogJHtjb21wdXRlZFZhbHVlfWApO1xuXHRcdFx0cmV0dXJuIERFRkFVTFRfQ09MT1I7XG5cdFx0fVxuXG5cdFx0Y29uc3QgciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG5cdFx0Y29uc3QgZyA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7XG5cdFx0Y29uc3QgYiA9IHBhcnNlSW50KG1hdGNoWzNdLCAxMCk7XG5cdFx0Y29uc3QgYSA9IG1hdGNoWzRdID8gcGFyc2VGbG9hdChtYXRjaFs0XSkgOiAxLjA7XG5cblx0XHRjb25zdCBjYWNoZUtleSA9IGAke3J9OiR7Z306JHtifToke2F9YDtcblxuXHRcdC8vIGNoZWNrIHJlc3VsdCBmcm9tIGNhY2hlXG5cdFx0aWYgKCF0aGlzLmNhY2hlW2NhY2hlS2V5XSkge1xuXHRcdFx0Ly8gQ29udmVydCB0aGUgY29tcG9uZW50cyB0byBoZXggc3RyaW5nc1xuXHRcdFx0Y29uc3QgaGV4UiA9IHRoaXMuY29tcG9uZW50VG9IZXgocik7XG5cdFx0XHRjb25zdCBoZXhHID0gdGhpcy5jb21wb25lbnRUb0hleChnKTtcblx0XHRcdGNvbnN0IGhleEIgPSB0aGlzLmNvbXBvbmVudFRvSGV4KGIpO1xuXHRcdFx0Y29uc3QgaGV4QSA9IHRoaXMuY29tcG9uZW50VG9IZXgoTWF0aC5yb3VuZChhICogMjU1KSk7XG5cblx0XHRcdC8vIENvbWJpbmUgdGhlIGhleCBjb21wb25lbnRzIGludG8gYSBzaW5nbGUgaGV4IHN0cmluZ1xuXHRcdFx0Y29uc3QgaGV4ID0gYCMke2hleFJ9JHtoZXhHfSR7aGV4Qn0ke2hleEF9YDtcblx0XHRcdHRoaXMuY2FjaGVbY2FjaGVLZXldID0gdGhpcy5oZXhTdHJpbmdUb051bWJlcihoZXgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNhY2hlW2NhY2hlS2V5XTtcblx0fVxuXG5cdHByaXZhdGUgaGV4U3RyaW5nVG9OdW1iZXIoaGV4U3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiBwYXJzZUludChoZXhTdHJpbmcucmVwbGFjZSgnIycsICcnKSwgMTYpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb21wb25lbnRUb0hleChjb21wb25lbnQ6IG51bWJlcik6IHN0cmluZyB7XG5cdFx0Y29uc3QgaGV4ID0gY29tcG9uZW50LnRvU3RyaW5nKDE2KTtcblx0XHRyZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/ICcwJyArIGhleCA6IGhleDtcblx0fVxufVxuIl19
@@ -213,7 +213,9 @@ export function injectCanvasRootInitializer(injector) {
213
213
  if (state.flat !== flat)
214
214
  stateToUpdate.flat = flat;
215
215
  // Set gl props
216
- gl.setClearAlpha(0);
216
+ if (gl.setClearAlpha) {
217
+ gl.setClearAlpha(0);
218
+ }
217
219
  gl.setPixelRatio(makeDpr(state.viewport.dpr));
218
220
  gl.setSize(state.size.width, state.size.height);
219
221
  if (is.obj(glOptions) &&
@@ -270,4 +272,4 @@ export function dispose(obj) {
270
272
  delete obj[p];
271
273
  }
272
274
  }
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yb290cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUNOLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE1BQU0sWUFBWSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixDQUFDO0FBRTNFLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxRQUFtQjtJQUM5RCxPQUFPLGNBQWMsQ0FBQywyQkFBMkIsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ2pFLE1BQU0sYUFBYSxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBRTFCLE9BQU8sQ0FBQyxNQUF3QixFQUFFLEVBQUU7WUFDbkMs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Q3BCLENBQUM7SUFFRCxJQUFJLE9BQU8saUJBQWlCLEtBQUssV0FBVyxJQUFJLE1BQU0sWUFBWSxpQkFBaUIsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0csT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksT0FBTyxlQUFlLEtBQUssV0FBVyxJQUFJLE1BQU0sWUFBWSxlQUFlLEVBQUUsQ0FBQztRQUNqRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDeEUsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQsQ0FBQztBQUVELDRDQUE0QztBQUM1QyxNQUFNLFVBQVUsT0FBTyxDQUEyRSxHQUFTO0lBQzFHLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU87UUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkQsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNwQixDQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUN2QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLENBQUM7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHtcblx0QUNFU0ZpbG1pY1RvbmVNYXBwaW5nLFxuXHRCYXNpY1NoYWRvd01hcCxcblx0Q29sb3JNYW5hZ2VtZW50LFxuXHROb1RvbmVNYXBwaW5nLFxuXHRQQ0ZTaGFkb3dNYXAsXG5cdFBDRlNvZnRTaGFkb3dNYXAsXG5cdFJheWNhc3Rlcixcblx0U2NlbmUsXG5cdFZTTVNoYWRvd01hcCxcblx0VmVjdG9yMyxcbn0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgcHJlcGFyZSB9IGZyb20gJy4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgaW5qZWN0TG9vcCwgcm9vdHMgfSBmcm9tICcuL2xvb3AnO1xuaW1wb3J0IHsgaW5qZWN0U3RvcmUgfSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB7IE5ndEFueVJlY29yZCwgTmd0Q2FudmFzRWxlbWVudCwgTmd0Q2FudmFzT3B0aW9ucywgTmd0RXF1Q29uZmlnLCBOZ3RTaXplLCBOZ3RTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYXBwbHlQcm9wcyB9IGZyb20gJy4vdXRpbHMvYXBwbHktcHJvcHMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IG1ha2VDYW1lcmFJbnN0YW5jZSwgbWFrZURwciwgbWFrZVJlbmRlcmVySW5zdGFuY2UgfSBmcm9tICcuL3V0aWxzL21ha2UnO1xuaW1wb3J0IHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlIH0gZnJvbSAnLi91dGlscy91cGRhdGUnO1xuXG5jb25zdCBzaGFsbG93TG9vc2UgPSB7IG9iamVjdHM6ICdzaGFsbG93Jywgc3RyaWN0OiBmYWxzZSB9IGFzIE5ndEVxdUNvbmZpZztcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplcihpbmplY3Rvcj86IEluamVjdG9yKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RDYW52YXNSb290SW5pdGlhbGl6ZXIsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgaW5qZWN0ZWRTdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdFx0Y29uc3QgbG9vcCA9IGluamVjdExvb3AoKTtcblxuXHRcdHJldHVybiAoY2FudmFzOiBOZ3RDYW52YXNFbGVtZW50KSA9PiB7XG5cdFx0XHRjb25zdCBleGlzdCA9IHJvb3RzLmhhcyhjYW52YXMpO1xuXHRcdFx0bGV0IHN0b3JlID0gcm9vdHMuZ2V0KGNhbnZhcykgYXMgTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+O1xuXG5cdFx0XHRpZiAoc3RvcmUpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdbTkdUXSBTYW1lIGNhbnZhcyByb290IGlzIGJlaW5nIGNyZWF0ZWQgdHdpY2UnKTtcblx0XHRcdH1cblxuXHRcdFx0c3RvcmUgfHw9IGluamVjdGVkU3RvcmU7XG5cblx0XHRcdGlmICghc3RvcmUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdbTkdUXSBObyBzdG9yZSBpbml0aWFsaXplZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWV4aXN0KSB7XG5cdFx0XHRcdHJvb3RzLnNldChjYW52YXMsIHN0b3JlKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IGlzQ29uZmlndXJlZCA9IGZhbHNlO1xuXHRcdFx0bGV0IGxhc3RDYW1lcmE6IE5ndENhbnZhc09wdGlvbnNbJ2NhbWVyYSddO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpc0NvbmZpZ3VyZWQsXG5cdFx0XHRcdGRlc3Ryb3k6ICh0aW1lb3V0ID0gNTAwKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgcm9vdCA9IHJvb3RzLmdldChjYW52YXMpO1xuXHRcdFx0XHRcdGlmIChyb290KSB7XG5cdFx0XHRcdFx0XHRyb290LnVwZGF0ZSgoc3RhdGUpID0+ICh7IGludGVybmFsOiB7IC4uLnN0YXRlLmludGVybmFsLCBhY3RpdmU6IGZhbHNlIH0gfSkpO1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSByb290LmdldCgpO1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmV2ZW50cy5kaXNjb25uZWN0Py4oKTtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZS5nbD8ucmVuZGVyTGlzdHM/LmRpc3Bvc2U/LigpO1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmdsPy5mb3JjZUNvbnRleHRMb3NzPy4oKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhdGUuZ2w/LnhyKSBzdGF0ZS54ci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0ZGlzcG9zZShzdGF0ZSk7XG5cdFx0XHRcdFx0XHRcdFx0cm9vdHMuZGVsZXRlKGNhbnZhcyk7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdbTkdUXSBVbmV4cGVjdGVkIGVycm9yIHdoaWxlIGRlc3Ryb3lpbmcgQ2FudmFzIFJvb3QnLCBlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgdGltZW91dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb25maWd1cmU6IChpbnB1dHM6IE5ndENhbnZhc09wdGlvbnMpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7XG5cdFx0XHRcdFx0XHRzaGFkb3dzID0gZmFsc2UsXG5cdFx0XHRcdFx0XHRsaW5lYXIgPSBmYWxzZSxcblx0XHRcdFx0XHRcdGZsYXQgPSBmYWxzZSxcblx0XHRcdFx0XHRcdGxlZ2FjeSA9IGZhbHNlLFxuXHRcdFx0XHRcdFx0b3J0aG9ncmFwaGljID0gZmFsc2UsXG5cdFx0XHRcdFx0XHRmcmFtZWxvb3AgPSAnYWx3YXlzJyxcblx0XHRcdFx0XHRcdGRwciA9IFsxLCAyXSxcblx0XHRcdFx0XHRcdGdsOiBnbE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRzaXplOiBzaXplT3B0aW9ucyxcblx0XHRcdFx0XHRcdGNhbWVyYTogY2FtZXJhT3B0aW9ucyxcblx0XHRcdFx0XHRcdHJheWNhc3RlcjogcmF5Y2FzdGVyT3B0aW9ucyxcblx0XHRcdFx0XHRcdHNjZW5lOiBzY2VuZU9wdGlvbnMsXG5cdFx0XHRcdFx0XHRldmVudHMsXG5cdFx0XHRcdFx0XHRsb29rQXQsXG5cdFx0XHRcdFx0XHRwZXJmb3JtYW5jZSxcblx0XHRcdFx0XHR9ID0gaW5wdXRzO1xuXG5cdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSBzdG9yZS5zbmFwc2hvdDtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZVRvVXBkYXRlOiBQYXJ0aWFsPE5ndFN0YXRlPiA9IHt9O1xuXG5cdFx0XHRcdFx0Ly8gc2V0dXAgcmVuZGVyZXJcblx0XHRcdFx0XHRsZXQgZ2wgPSBzdGF0ZS5nbDtcblx0XHRcdFx0XHRpZiAoIXN0YXRlLmdsKSBzdGF0ZVRvVXBkYXRlLmdsID0gZ2wgPSBtYWtlUmVuZGVyZXJJbnN0YW5jZShnbE9wdGlvbnMsIGNhbnZhcyk7XG5cblx0XHRcdFx0XHQvLyBzZXR1cCByYXljYXN0ZXJcblx0XHRcdFx0XHRsZXQgcmF5Y2FzdGVyID0gc3RhdGUucmF5Y2FzdGVyO1xuXHRcdFx0XHRcdGlmICghcmF5Y2FzdGVyKSBzdGF0ZVRvVXBkYXRlLnJheWNhc3RlciA9IHJheWNhc3RlciA9IG5ldyBSYXljYXN0ZXIoKTtcblxuXHRcdFx0XHRcdC8vIHNldCByYXljYXN0ZXIgb3B0aW9uc1xuXHRcdFx0XHRcdGNvbnN0IHsgcGFyYW1zLCAuLi5vcHRpb25zIH0gPSByYXljYXN0ZXJPcHRpb25zIHx8IHt9O1xuXHRcdFx0XHRcdGlmICghaXMuZXF1KG9wdGlvbnMsIHJheWNhc3Rlciwgc2hhbGxvd0xvb3NlKSkgYXBwbHlQcm9wcyhyYXljYXN0ZXIsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdGlmICghaXMuZXF1KHBhcmFtcywgcmF5Y2FzdGVyLnBhcmFtcywgc2hhbGxvd0xvb3NlKSkge1xuXHRcdFx0XHRcdFx0YXBwbHlQcm9wcyhyYXljYXN0ZXIsIHsgcGFyYW1zOiB7IC4uLnJheWNhc3Rlci5wYXJhbXMsIC4uLihwYXJhbXMgfHwge30pIH0gfSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGRlZmF1bHQgY2FtZXJhLCBkb24ndCBvdmVyd3JpdGUgYW55IHVzZXItc2V0IHN0YXRlXG5cdFx0XHRcdFx0aWYgKCFzdGF0ZS5jYW1lcmEgfHwgKHN0YXRlLmNhbWVyYSA9PT0gbGFzdENhbWVyYSAmJiAhaXMuZXF1KGxhc3RDYW1lcmEsIGNhbWVyYU9wdGlvbnMsIHNoYWxsb3dMb29zZSkpKSB7XG5cdFx0XHRcdFx0XHRsYXN0Q2FtZXJhID0gY2FtZXJhT3B0aW9ucztcblx0XHRcdFx0XHRcdGNvbnN0IGlzQ2FtZXJhID0gaXMuY2FtZXJhKGNhbWVyYU9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0bGV0IGNhbWVyYSA9IGlzQ2FtZXJhID8gY2FtZXJhT3B0aW9ucyA6IG1ha2VDYW1lcmFJbnN0YW5jZShvcnRob2dyYXBoaWMsIHN0YXRlLnNpemUpO1xuXG5cdFx0XHRcdFx0XHRpZiAoIWlzQ2FtZXJhKSB7XG5cdFx0XHRcdFx0XHRcdGNhbWVyYS5wb3NpdGlvbi56ID0gNTtcblx0XHRcdFx0XHRcdFx0aWYgKGNhbWVyYU9wdGlvbnMpIHtcblx0XHRcdFx0XHRcdFx0XHRhcHBseVByb3BzKGNhbWVyYSwgY2FtZXJhT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2FzcGVjdCcgaW4gY2FtZXJhT3B0aW9ucyB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0J2xlZnQnIGluIGNhbWVyYU9wdGlvbnMgfHxcblx0XHRcdFx0XHRcdFx0XHRcdCdyaWdodCcgaW4gY2FtZXJhT3B0aW9ucyB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0J3RvcCcgaW4gY2FtZXJhT3B0aW9ucyB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0J2JvdHRvbScgaW4gY2FtZXJhT3B0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihjYW1lcmEsIHsgbWFudWFsOiB0cnVlIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FtZXJhPy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gYWx3YXlzIGxvb2sgYXQgY2VudGVyIG9yIHBhc3NlZC1pbiBsb29rQXQgYnkgZGVmYXVsdFxuXHRcdFx0XHRcdFx0XHRpZiAoIXN0YXRlLmNhbWVyYSAmJiAhY2FtZXJhT3B0aW9ucz8ucm90YXRpb24gJiYgIWNhbWVyYU9wdGlvbnM/LnF1YXRlcm5pb24pIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShsb29rQXQpKSBjYW1lcmEubG9va0F0KGxvb2tBdFswXSwgbG9va0F0WzFdLCBsb29rQXRbMl0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGxvb2tBdCBpbnN0YW5jZW9mIFZlY3RvcjMpIGNhbWVyYS5sb29rQXQobG9va0F0KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGNhbWVyYS5sb29rQXQoMCwgMCwgMCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB1cGRhdGUgcHJvamVjdGlvbiBtYXRyaXggYWZ0ZXIgYXBwbHlwcm9wc1xuXHRcdFx0XHRcdFx0XHRjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeD8uKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghaXMuaW5zdGFuY2UoY2FtZXJhKSkgY2FtZXJhID0gcHJlcGFyZShjYW1lcmEsIHsgc3RvcmUgfSk7XG5cblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUuY2FtZXJhID0gY2FtZXJhO1xuXG5cdFx0XHRcdFx0XHQvLyBDb25maWd1cmUgcmF5Y2FzdGVyXG5cdFx0XHRcdFx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vcG1uZHJzL3JlYWN0LXhyL2lzc3Vlcy8zMDBcblx0XHRcdFx0XHRcdHJheWNhc3Rlci5jYW1lcmEgPSBjYW1lcmE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU2V0IHVwIHNjZW5lIChvbmUgdGltZSBvbmx5ISlcblx0XHRcdFx0XHRpZiAoIXN0YXRlLnNjZW5lKSB7XG5cdFx0XHRcdFx0XHRsZXQgc2NlbmU6IFNjZW5lO1xuXG5cdFx0XHRcdFx0XHRpZiAoc2NlbmVPcHRpb25zIGluc3RhbmNlb2YgU2NlbmUpIHtcblx0XHRcdFx0XHRcdFx0c2NlbmUgPSBzY2VuZU9wdGlvbnM7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzY2VuZSA9IG5ldyBTY2VuZSgpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc2NlbmVPcHRpb25zKSBhcHBseVByb3BzKHNjZW5lLCBzY2VuZU9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhcHBseVByb3BzKHNjZW5lLCB7XG5cdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZTogKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChjYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhbnZhcy5wYXJlbnRFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhbnZhcy5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYW52YXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0c3RhdGVUb1VwZGF0ZS5zY2VuZSA9IHByZXBhcmUoc2NlbmUsIHsgc3RvcmUgfSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU2V0IHVwIFhSIChvbmUgdGltZSBvbmx5ISlcblx0XHRcdFx0XHRpZiAoIXN0YXRlLnhyKSB7XG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZnJhbWUgYmVoYXZpb3IgaW4gV2ViWFJcblx0XHRcdFx0XHRcdGNvbnN0IGhhbmRsZVhSRnJhbWU6IFhSRnJhbWVSZXF1ZXN0Q2FsbGJhY2sgPSAodGltZXN0YW1wOiBudW1iZXIsIGZyYW1lPzogWFJGcmFtZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLnNuYXBzaG90O1xuXHRcdFx0XHRcdFx0XHRpZiAoc3RhdGUuZnJhbWVsb29wID09PSAnbmV2ZXInKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdGxvb3AuYWR2YW5jZSh0aW1lc3RhbXAsIHRydWUsIHN0b3JlLCBmcmFtZSk7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHQvLyBUb2dnbGUgcmVuZGVyIHN3aXRjaGluZyBvbiBzZXNzaW9uXG5cdFx0XHRcdFx0XHRjb25zdCBoYW5kbGVTZXNzaW9uQ2hhbmdlID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLnNuYXBzaG90O1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS5nbC54ci5lbmFibGVkID0gc3RhdGUuZ2wueHIuaXNQcmVzZW50aW5nO1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS5nbC54ci5zZXRBbmltYXRpb25Mb29wKHN0YXRlLmdsLnhyLmlzUHJlc2VudGluZyA/IGhhbmRsZVhSRnJhbWUgOiBudWxsKTtcblx0XHRcdFx0XHRcdFx0aWYgKCFzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcpIGxvb3AuaW52YWxpZGF0ZShzdG9yZSk7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHQvLyBXZWJYUiBzZXNzaW9uIG1hbmFnZXJcblx0XHRcdFx0XHRcdGNvbnN0IHhyID0ge1xuXHRcdFx0XHRcdFx0XHRjb25uZWN0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIuYWRkRXZlbnRMaXN0ZW5lcignc2Vzc2lvbnN0YXJ0JywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIuYWRkRXZlbnRMaXN0ZW5lcignc2Vzc2lvbmVuZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRkaXNjb25uZWN0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbnN0YXJ0JywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbmVuZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Ly8gU3Vic2NyaWJlIHRvIFdlYlhSIHNlc3Npb24gZXZlbnRzXG5cdFx0XHRcdFx0XHRpZiAoZ2wueHIgJiYgdHlwZW9mIGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHhyLmNvbm5lY3QoKTtcblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUueHIgPSB4cjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTZXQgc2hhZG93bWFwXG5cdFx0XHRcdFx0aWYgKGdsLnNoYWRvd01hcCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2xkRW5hYmxlZCA9IGdsLnNoYWRvd01hcC5lbmFibGVkO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2xkVHlwZSA9IGdsLnNoYWRvd01hcC50eXBlO1xuXHRcdFx0XHRcdFx0Z2wuc2hhZG93TWFwLmVuYWJsZWQgPSAhIXNoYWRvd3M7XG5cblx0XHRcdFx0XHRcdGlmICh0eXBlb2Ygc2hhZG93cyA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRcdFx0XHRcdGdsLnNoYWRvd01hcC50eXBlID0gUENGU29mdFNoYWRvd01hcDtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHNoYWRvd3MgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHR5cGVzID0ge1xuXHRcdFx0XHRcdFx0XHRcdGJhc2ljOiBCYXNpY1NoYWRvd01hcCxcblx0XHRcdFx0XHRcdFx0XHRwZXJjZW50YWdlOiBQQ0ZTaGFkb3dNYXAsXG5cdFx0XHRcdFx0XHRcdFx0c29mdDogUENGU29mdFNoYWRvd01hcCxcblx0XHRcdFx0XHRcdFx0XHR2YXJpYW5jZTogVlNNU2hhZG93TWFwLFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRnbC5zaGFkb3dNYXAudHlwZSA9IHR5cGVzW3NoYWRvd3NdID8/IFBDRlNvZnRTaGFkb3dNYXA7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzLm9iaihzaGFkb3dzKSkge1xuXHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGdsLnNoYWRvd01hcCwgc2hhZG93cyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChvbGRFbmFibGVkICE9PSBnbC5zaGFkb3dNYXAuZW5hYmxlZCB8fCBvbGRUeXBlICE9PSBnbC5zaGFkb3dNYXAudHlwZSkgY2hlY2tOZWVkc1VwZGF0ZShnbC5zaGFkb3dNYXApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFNhZmVseSBzZXQgY29sb3IgbWFuYWdlbWVudCBpZiBhdmFpbGFibGUuXG5cdFx0XHRcdFx0Ly8gQXZvaWQgYWNjZXNzaW5nIENvbG9yTWFuYWdlbWVudCB0byBwbGF5IG5pY2Ugd2l0aCBvbGRlciB2ZXJzaW9uc1xuXHRcdFx0XHRcdGlmIChDb2xvck1hbmFnZW1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbG9yTWFuYWdlbWVudCA9IENvbG9yTWFuYWdlbWVudCBhcyBOZ3RBbnlSZWNvcmQ7XG5cdFx0XHRcdFx0XHRpZiAoJ2VuYWJsZWQnIGluIGNvbG9yTWFuYWdlbWVudCkgY29sb3JNYW5hZ2VtZW50WydlbmFibGVkJ10gPSAhbGVnYWN5O1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoJ2xlZ2FjeU1vZGUnIGluIGNvbG9yTWFuYWdlbWVudCkgY29sb3JNYW5hZ2VtZW50WydsZWdhY3lNb2RlJ10gPSBsZWdhY3k7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFpc0NvbmZpZ3VyZWQpIHtcblx0XHRcdFx0XHRcdC8vIHNldCBjb2xvciBzcGFjZSBhbmQgdG9uZW1hcHBpbmcgcHJlZmVyZW5jZXMgb25jZVxuXHRcdFx0XHRcdFx0Y29uc3QgTGluZWFyRW5jb2RpbmcgPSAzMDAwO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1JHQkVuY29kaW5nID0gMzAwMTtcblx0XHRcdFx0XHRcdGFwcGx5UHJvcHMoZ2wsIHtcblx0XHRcdFx0XHRcdFx0b3V0cHV0RW5jb2Rpbmc6IGxpbmVhciA/IExpbmVhckVuY29kaW5nIDogc1JHQkVuY29kaW5nLFxuXHRcdFx0XHRcdFx0XHR0b25lTWFwcGluZzogZmxhdCA/IE5vVG9uZU1hcHBpbmcgOiBBQ0VTRmlsbWljVG9uZU1hcHBpbmcsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBVcGRhdGUgY29sb3IgbWFuYWdlbWVudCBzdGF0ZVxuXHRcdFx0XHRcdGlmIChzdGF0ZS5sZWdhY3kgIT09IGxlZ2FjeSkgc3RhdGVUb1VwZGF0ZS5sZWdhY3kgPSBsZWdhY3k7XG5cdFx0XHRcdFx0aWYgKHN0YXRlLmxpbmVhciAhPT0gbGluZWFyKSBzdGF0ZVRvVXBkYXRlLmxpbmVhciA9IGxpbmVhcjtcblx0XHRcdFx0XHRpZiAoc3RhdGUuZmxhdCAhPT0gZmxhdCkgc3RhdGVUb1VwZGF0ZS5mbGF0ID0gZmxhdDtcblxuXHRcdFx0XHRcdC8vIFNldCBnbCBwcm9wc1xuXHRcdFx0XHRcdGdsLnNldENsZWFyQWxwaGEoMCk7XG5cdFx0XHRcdFx0Z2wuc2V0UGl4ZWxSYXRpbyhtYWtlRHByKHN0YXRlLnZpZXdwb3J0LmRwcikpO1xuXHRcdFx0XHRcdGdsLnNldFNpemUoc3RhdGUuc2l6ZS53aWR0aCwgc3RhdGUuc2l6ZS5oZWlnaHQpO1xuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0aXMub2JqKGdsT3B0aW9ucykgJiZcblx0XHRcdFx0XHRcdCEodHlwZW9mIGdsT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykgJiZcblx0XHRcdFx0XHRcdCFpcy5yZW5kZXJlcihnbE9wdGlvbnMpICYmXG5cdFx0XHRcdFx0XHQhaXMuZXF1KGdsT3B0aW9ucywgZ2wsIHNoYWxsb3dMb29zZSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGFwcGx5UHJvcHMoZ2wsIGdsT3B0aW9ucyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgZXZlbnRzIGludGVybmFsbHlcblx0XHRcdFx0XHRpZiAoZXZlbnRzICYmICFzdGF0ZS5ldmVudHMuaGFuZGxlcnMpIHN0YXRlVG9VcGRhdGUuZXZlbnRzID0gZXZlbnRzKHN0b3JlKTtcblxuXHRcdFx0XHRcdC8vIENoZWNrIHBlcmZvcm1hbmNlXG5cdFx0XHRcdFx0aWYgKHBlcmZvcm1hbmNlICYmICFpcy5lcXUocGVyZm9ybWFuY2UsIHN0YXRlLnBlcmZvcm1hbmNlLCBzaGFsbG93TG9vc2UpKSB7XG5cdFx0XHRcdFx0XHRzdGF0ZVRvVXBkYXRlLnBlcmZvcm1hbmNlID0geyAuLi5zdGF0ZS5wZXJmb3JtYW5jZSwgLi4ucGVyZm9ybWFuY2UgfTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoT2JqZWN0LmtleXMoc3RhdGVUb1VwZGF0ZSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRzdG9yZS51cGRhdGUoc3RhdGVUb1VwZGF0ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgc2l6ZSwgYWxsb3cgaXQgdG8gdGFrZSBvbiBjb250YWluZXIgYm91bmRzIGluaXRpYWxseVxuXHRcdFx0XHRcdGNvbnN0IHNpemUgPSBjb21wdXRlSW5pdGlhbFNpemUoY2FudmFzLCBzaXplT3B0aW9ucyk7XG5cdFx0XHRcdFx0aWYgKCFpcy5lcXUoc2l6ZSwgc3RhdGUuc2l6ZSwgc2hhbGxvd0xvb3NlKSkge1xuXHRcdFx0XHRcdFx0c3RhdGUuc2V0U2l6ZShzaXplLndpZHRoLCBzaXplLmhlaWdodCwgc2l6ZS50b3AsIHNpemUubGVmdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgcGl4ZWxyYXRpb1xuXHRcdFx0XHRcdGlmIChkcHIgJiYgc3RhdGUudmlld3BvcnQuZHByICE9PSBtYWtlRHByKGRwcikpIHN0YXRlLnNldERwcihkcHIpO1xuXHRcdFx0XHRcdC8vIENoZWNrIGZyYW1lbG9vcFxuXHRcdFx0XHRcdGlmIChzdGF0ZS5mcmFtZWxvb3AgIT09IGZyYW1lbG9vcCkgc3RhdGUuc2V0RnJhbWVsb29wKGZyYW1lbG9vcCk7XG5cblx0XHRcdFx0XHRpc0NvbmZpZ3VyZWQgPSB0cnVlO1xuXHRcdFx0XHR9LFxuXHRcdFx0fTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Q2FudmFzQ29uZmlndXJhdG9yID0gUmV0dXJuVHlwZTxSZXR1cm5UeXBlPHR5cGVvZiBpbmplY3RDYW52YXNSb290SW5pdGlhbGl6ZXI+PjtcblxuZnVuY3Rpb24gY29tcHV0ZUluaXRpYWxTaXplKGNhbnZhczogTmd0Q2FudmFzRWxlbWVudCwgZGVmYXVsdFNpemU/OiBOZ3RTaXplKTogTmd0U2l6ZSB7XG5cdGlmIChkZWZhdWx0U2l6ZSkge1xuXHRcdHJldHVybiBkZWZhdWx0U2l6ZTtcblx0fVxuXG5cdGlmICh0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGNhbnZhcyBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50ICYmIGNhbnZhcy5wYXJlbnRFbGVtZW50KSB7XG5cdFx0cmV0dXJuIGNhbnZhcy5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBPZmZzY3JlZW5DYW52YXMgIT09ICd1bmRlZmluZWQnICYmIGNhbnZhcyBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcykge1xuXHRcdHJldHVybiB7IHdpZHRoOiBjYW52YXMud2lkdGgsIGhlaWdodDogY2FudmFzLmhlaWdodCwgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdH1cblxuXHRyZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCB0b3A6IDAsIGxlZnQ6IDAgfTtcbn1cblxuLy8gRGlzcG9zZXMgYW4gb2JqZWN0IGFuZCBhbGwgaXRzIHByb3BlcnRpZXNcbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlPFRPYmogZXh0ZW5kcyB7IGRpc3Bvc2U/OiAoKSA9PiB2b2lkOyB0eXBlPzogc3RyaW5nOyBba2V5OiBzdHJpbmddOiBhbnkgfT4ob2JqOiBUT2JqKSB7XG5cdGlmIChvYmouZGlzcG9zZSAmJiBvYmoudHlwZSAhPT0gJ1NjZW5lJykgb2JqLmRpc3Bvc2UoKTtcblx0Zm9yIChjb25zdCBwIGluIG9iaikge1xuXHRcdChwIGFzIGFueSkuZGlzcG9zZT8uKCk7XG5cdFx0ZGVsZXRlIG9ialtwXTtcblx0fVxufVxuIl19
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yb290cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUNOLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE1BQU0sWUFBWSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixDQUFDO0FBRTNFLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxRQUFtQjtJQUM5RCxPQUFPLGNBQWMsQ0FBQywyQkFBMkIsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ2pFLE1BQU0sYUFBYSxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBRTFCLE9BQU8sQ0FBQyxNQUF3QixFQUFFLEVBQUU7WUFDbkMs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QUMxRSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sV0FBVyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLE9BQU8saUJBQWlCLEtBQUssV0FBVyxJQUFJLE1BQU0sWUFBWSxpQkFBaUIsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0csT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksT0FBTyxlQUFlLEtBQUssV0FBVyxJQUFJLE1BQU0sWUFBWSxlQUFlLEVBQUUsQ0FBQztRQUNqRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDeEUsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQsQ0FBQztBQUVELDRDQUE0QztBQUM1QyxNQUFNLFVBQVUsT0FBTyxDQUEyRSxHQUFTO0lBQzFHLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU87UUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkQsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNwQixDQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUN2QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLENBQUM7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHtcblx0QUNFU0ZpbG1pY1RvbmVNYXBwaW5nLFxuXHRCYXNpY1NoYWRvd01hcCxcblx0Q29sb3JNYW5hZ2VtZW50LFxuXHROb1RvbmVNYXBwaW5nLFxuXHRQQ0ZTaGFkb3dNYXAsXG5cdFBDRlNvZnRTaGFkb3dNYXAsXG5cdFJheWNhc3Rlcixcblx0U2NlbmUsXG5cdFZTTVNoYWRvd01hcCxcblx0VmVjdG9yMyxcbn0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgcHJlcGFyZSB9IGZyb20gJy4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgaW5qZWN0TG9vcCwgcm9vdHMgfSBmcm9tICcuL2xvb3AnO1xuaW1wb3J0IHsgaW5qZWN0U3RvcmUgfSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB7IE5ndEFueVJlY29yZCwgTmd0Q2FudmFzRWxlbWVudCwgTmd0Q2FudmFzT3B0aW9ucywgTmd0RXF1Q29uZmlnLCBOZ3RTaXplLCBOZ3RTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYXBwbHlQcm9wcyB9IGZyb20gJy4vdXRpbHMvYXBwbHktcHJvcHMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IG1ha2VDYW1lcmFJbnN0YW5jZSwgbWFrZURwciwgbWFrZVJlbmRlcmVySW5zdGFuY2UgfSBmcm9tICcuL3V0aWxzL21ha2UnO1xuaW1wb3J0IHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlIH0gZnJvbSAnLi91dGlscy91cGRhdGUnO1xuXG5jb25zdCBzaGFsbG93TG9vc2UgPSB7IG9iamVjdHM6ICdzaGFsbG93Jywgc3RyaWN0OiBmYWxzZSB9IGFzIE5ndEVxdUNvbmZpZztcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplcihpbmplY3Rvcj86IEluamVjdG9yKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RDYW52YXNSb290SW5pdGlhbGl6ZXIsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgaW5qZWN0ZWRTdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdFx0Y29uc3QgbG9vcCA9IGluamVjdExvb3AoKTtcblxuXHRcdHJldHVybiAoY2FudmFzOiBOZ3RDYW52YXNFbGVtZW50KSA9PiB7XG5cdFx0XHRjb25zdCBleGlzdCA9IHJvb3RzLmhhcyhjYW52YXMpO1xuXHRcdFx0bGV0IHN0b3JlID0gcm9vdHMuZ2V0KGNhbnZhcykgYXMgTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+O1xuXG5cdFx0XHRpZiAoc3RvcmUpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdbTkdUXSBTYW1lIGNhbnZhcyByb290IGlzIGJlaW5nIGNyZWF0ZWQgdHdpY2UnKTtcblx0XHRcdH1cblxuXHRcdFx0c3RvcmUgfHw9IGluamVjdGVkU3RvcmU7XG5cblx0XHRcdGlmICghc3RvcmUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdbTkdUXSBObyBzdG9yZSBpbml0aWFsaXplZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWV4aXN0KSB7XG5cdFx0XHRcdHJvb3RzLnNldChjYW52YXMsIHN0b3JlKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IGlzQ29uZmlndXJlZCA9IGZhbHNlO1xuXHRcdFx0bGV0IGxhc3RDYW1lcmE6IE5ndENhbnZhc09wdGlvbnNbJ2NhbWVyYSddO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpc0NvbmZpZ3VyZWQsXG5cdFx0XHRcdGRlc3Ryb3k6ICh0aW1lb3V0ID0gNTAwKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgcm9vdCA9IHJvb3RzLmdldChjYW52YXMpO1xuXHRcdFx0XHRcdGlmIChyb290KSB7XG5cdFx0XHRcdFx0XHRyb290LnVwZGF0ZSgoc3RhdGUpID0+ICh7IGludGVybmFsOiB7IC4uLnN0YXRlLmludGVybmFsLCBhY3RpdmU6IGZhbHNlIH0gfSkpO1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSByb290LmdldCgpO1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmV2ZW50cy5kaXNjb25uZWN0Py4oKTtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZS5nbD8ucmVuZGVyTGlzdHM/LmRpc3Bvc2U/LigpO1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmdsPy5mb3JjZUNvbnRleHRMb3NzPy4oKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhdGUuZ2w/LnhyKSBzdGF0ZS54ci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0ZGlzcG9zZShzdGF0ZSk7XG5cdFx0XHRcdFx0XHRcdFx0cm9vdHMuZGVsZXRlKGNhbnZhcyk7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdbTkdUXSBVbmV4cGVjdGVkIGVycm9yIHdoaWxlIGRlc3Ryb3lpbmcgQ2FudmFzIFJvb3QnLCBlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgdGltZW91dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb25maWd1cmU6IChpbnB1dHM6IE5ndENhbnZhc09wdGlvbnMpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7XG5cdFx0XHRcdFx0XHRzaGFkb3dzID0gZmFsc2UsXG5cdFx0XHRcdFx0XHRsaW5lYXIgPSBmYWxzZSxcblx0XHRcdFx0XHRcdGZsYXQgPSBmYWxzZSxcblx0XHRcdFx0XHRcdGxlZ2FjeSA9IGZhbHNlLFxuXHRcdFx0XHRcdFx0b3J0aG9ncmFwaGljID0gZmFsc2UsXG5cdFx0XHRcdFx0XHRmcmFtZWxvb3AgPSAnYWx3YXlzJyxcblx0XHRcdFx0XHRcdGRwciA9IFsxLCAyXSxcblx0XHRcdFx0XHRcdGdsOiBnbE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRzaXplOiBzaXplT3B0aW9ucyxcblx0XHRcdFx0XHRcdGNhbWVyYTogY2FtZXJhT3B0aW9ucyxcblx0XHRcdFx0XHRcdHJheWNhc3RlcjogcmF5Y2FzdGVyT3B0aW9ucyxcblx0XHRcdFx0XHRcdHNjZW5lOiBzY2VuZU9wdGlvbnMsXG5cdFx0XHRcdFx0XHRldmVudHMsXG5cdFx0XHRcdFx0XHRsb29rQXQsXG5cdFx0XHRcdFx0XHRwZXJmb3JtYW5jZSxcblx0XHRcdFx0XHR9ID0gaW5wdXRzO1xuXG5cdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSBzdG9yZS5zbmFwc2hvdDtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZVRvVXBkYXRlOiBQYXJ0aWFsPE5ndFN0YXRlPiA9IHt9O1xuXG5cdFx0XHRcdFx0Ly8gc2V0dXAgcmVuZGVyZXJcblx0XHRcdFx0XHRsZXQgZ2wgPSBzdGF0ZS5nbDtcblx0XHRcdFx0XHRpZiAoIXN0YXRlLmdsKSBzdGF0ZVRvVXBkYXRlLmdsID0gZ2wgPSBtYWtlUmVuZGVyZXJJbnN0YW5jZShnbE9wdGlvbnMsIGNhbnZhcyk7XG5cblx0XHRcdFx0XHQvLyBzZXR1cCByYXljYXN0ZXJcblx0XHRcdFx0XHRsZXQgcmF5Y2FzdGVyID0gc3RhdGUucmF5Y2FzdGVyO1xuXHRcdFx0XHRcdGlmICghcmF5Y2FzdGVyKSBzdGF0ZVRvVXBkYXRlLnJheWNhc3RlciA9IHJheWNhc3RlciA9IG5ldyBSYXljYXN0ZXIoKTtcblxuXHRcdFx0XHRcdC8vIHNldCByYXljYXN0ZXIgb3B0aW9uc1xuXHRcdFx0XHRcdGNvbnN0IHsgcGFyYW1zLCAuLi5vcHRpb25zIH0gPSByYXljYXN0ZXJPcHRpb25zIHx8IHt9O1xuXHRcdFx0XHRcdGlmICghaXMuZXF1KG9wdGlvbnMsIHJheWNhc3Rlciwgc2hhbGxvd0xvb3NlKSkgYXBwbHlQcm9wcyhyYXljYXN0ZXIsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdGlmICghaXMuZXF1KHBhcmFtcywgcmF5Y2FzdGVyLnBhcmFtcywgc2hhbGxvd0xvb3NlKSkge1xuXHRcdFx0XHRcdFx0YXBwbHlQcm9wcyhyYXljYXN0ZXIsIHsgcGFyYW1zOiB7IC4uLnJheWNhc3Rlci5wYXJhbXMsIC4uLihwYXJhbXMgfHwge30pIH0gfSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGRlZmF1bHQgY2FtZXJhLCBkb24ndCBvdmVyd3JpdGUgYW55IHVzZXItc2V0IHN0YXRlXG5cdFx0XHRcdFx0aWYgKCFzdGF0ZS5jYW1lcmEgfHwgKHN0YXRlLmNhbWVyYSA9PT0gbGFzdENhbWVyYSAmJiAhaXMuZXF1KGxhc3RDYW1lcmEsIGNhbWVyYU9wdGlvbnMsIHNoYWxsb3dMb29zZSkpKSB7XG5cdFx0XHRcdFx0XHRsYXN0Q2FtZXJhID0gY2FtZXJhT3B0aW9ucztcblx0XHRcdFx0XHRcdGNvbnN0IGlzQ2FtZXJhID0gaXMuY2FtZXJhKGNhbWVyYU9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0bGV0IGNhbWVyYSA9IGlzQ2FtZXJhID8gY2FtZXJhT3B0aW9ucyA6IG1ha2VDYW1lcmFJbnN0YW5jZShvcnRob2dyYXBoaWMsIHN0YXRlLnNpemUpO1xuXG5cdFx0XHRcdFx0XHRpZiAoIWlzQ2FtZXJhKSB7XG5cdFx0XHRcdFx0XHRcdGNhbWVyYS5wb3NpdGlvbi56ID0gNTtcblx0XHRcdFx0XHRcdFx0aWYgKGNhbWVyYU9wdGlvbnMpIHtcblx0XHRcdFx0XHRcdFx0XHRhcHBseVByb3BzKGNhbWVyYSwgY2FtZXJhT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2FzcGVjdCcgaW4gY2FtZXJhT3B0aW9ucyB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0J2xlZnQnIGluIGNhbWVyYU9wdGlvbnMgfHxcblx0XHRcdFx0XHRcdFx0XHRcdCdyaWdodCcgaW4gY2FtZXJhT3B0aW9ucyB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0J3RvcCcgaW4gY2FtZXJhT3B0aW9ucyB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0J2JvdHRvbScgaW4gY2FtZXJhT3B0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihjYW1lcmEsIHsgbWFudWFsOiB0cnVlIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FtZXJhPy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gYWx3YXlzIGxvb2sgYXQgY2VudGVyIG9yIHBhc3NlZC1pbiBsb29rQXQgYnkgZGVmYXVsdFxuXHRcdFx0XHRcdFx0XHRpZiAoIXN0YXRlLmNhbWVyYSAmJiAhY2FtZXJhT3B0aW9ucz8ucm90YXRpb24gJiYgIWNhbWVyYU9wdGlvbnM/LnF1YXRlcm5pb24pIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShsb29rQXQpKSBjYW1lcmEubG9va0F0KGxvb2tBdFswXSwgbG9va0F0WzFdLCBsb29rQXRbMl0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGxvb2tBdCBpbnN0YW5jZW9mIFZlY3RvcjMpIGNhbWVyYS5sb29rQXQobG9va0F0KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGNhbWVyYS5sb29rQXQoMCwgMCwgMCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB1cGRhdGUgcHJvamVjdGlvbiBtYXRyaXggYWZ0ZXIgYXBwbHlwcm9wc1xuXHRcdFx0XHRcdFx0XHRjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeD8uKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghaXMuaW5zdGFuY2UoY2FtZXJhKSkgY2FtZXJhID0gcHJlcGFyZShjYW1lcmEsIHsgc3RvcmUgfSk7XG5cblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUuY2FtZXJhID0gY2FtZXJhO1xuXG5cdFx0XHRcdFx0XHQvLyBDb25maWd1cmUgcmF5Y2FzdGVyXG5cdFx0XHRcdFx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vcG1uZHJzL3JlYWN0LXhyL2lzc3Vlcy8zMDBcblx0XHRcdFx0XHRcdHJheWNhc3Rlci5jYW1lcmEgPSBjYW1lcmE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU2V0IHVwIHNjZW5lIChvbmUgdGltZSBvbmx5ISlcblx0XHRcdFx0XHRpZiAoIXN0YXRlLnNjZW5lKSB7XG5cdFx0XHRcdFx0XHRsZXQgc2NlbmU6IFNjZW5lO1xuXG5cdFx0XHRcdFx0XHRpZiAoc2NlbmVPcHRpb25zIGluc3RhbmNlb2YgU2NlbmUpIHtcblx0XHRcdFx0XHRcdFx0c2NlbmUgPSBzY2VuZU9wdGlvbnM7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzY2VuZSA9IG5ldyBTY2VuZSgpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc2NlbmVPcHRpb25zKSBhcHBseVByb3BzKHNjZW5lLCBzY2VuZU9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhcHBseVByb3BzKHNjZW5lLCB7XG5cdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZTogKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChjYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNhbnZhcy5wYXJlbnRFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhbnZhcy5wYXJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYW52YXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0c3RhdGVUb1VwZGF0ZS5zY2VuZSA9IHByZXBhcmUoc2NlbmUsIHsgc3RvcmUgfSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU2V0IHVwIFhSIChvbmUgdGltZSBvbmx5ISlcblx0XHRcdFx0XHRpZiAoIXN0YXRlLnhyKSB7XG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZnJhbWUgYmVoYXZpb3IgaW4gV2ViWFJcblx0XHRcdFx0XHRcdGNvbnN0IGhhbmRsZVhSRnJhbWU6IFhSRnJhbWVSZXF1ZXN0Q2FsbGJhY2sgPSAodGltZXN0YW1wOiBudW1iZXIsIGZyYW1lPzogWFJGcmFtZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLnNuYXBzaG90O1xuXHRcdFx0XHRcdFx0XHRpZiAoc3RhdGUuZnJhbWVsb29wID09PSAnbmV2ZXInKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdGxvb3AuYWR2YW5jZSh0aW1lc3RhbXAsIHRydWUsIHN0b3JlLCBmcmFtZSk7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHQvLyBUb2dnbGUgcmVuZGVyIHN3aXRjaGluZyBvbiBzZXNzaW9uXG5cdFx0XHRcdFx0XHRjb25zdCBoYW5kbGVTZXNzaW9uQ2hhbmdlID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLnNuYXBzaG90O1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS5nbC54ci5lbmFibGVkID0gc3RhdGUuZ2wueHIuaXNQcmVzZW50aW5nO1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS5nbC54ci5zZXRBbmltYXRpb25Mb29wKHN0YXRlLmdsLnhyLmlzUHJlc2VudGluZyA/IGhhbmRsZVhSRnJhbWUgOiBudWxsKTtcblx0XHRcdFx0XHRcdFx0aWYgKCFzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcpIGxvb3AuaW52YWxpZGF0ZShzdG9yZSk7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHQvLyBXZWJYUiBzZXNzaW9uIG1hbmFnZXJcblx0XHRcdFx0XHRcdGNvbnN0IHhyID0ge1xuXHRcdFx0XHRcdFx0XHRjb25uZWN0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIuYWRkRXZlbnRMaXN0ZW5lcignc2Vzc2lvbnN0YXJ0JywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIuYWRkRXZlbnRMaXN0ZW5lcignc2Vzc2lvbmVuZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRkaXNjb25uZWN0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbnN0YXJ0JywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbmVuZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Ly8gU3Vic2NyaWJlIHRvIFdlYlhSIHNlc3Npb24gZXZlbnRzXG5cdFx0XHRcdFx0XHRpZiAoZ2wueHIgJiYgdHlwZW9mIGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHhyLmNvbm5lY3QoKTtcblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUueHIgPSB4cjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTZXQgc2hhZG93bWFwXG5cdFx0XHRcdFx0aWYgKGdsLnNoYWRvd01hcCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2xkRW5hYmxlZCA9IGdsLnNoYWRvd01hcC5lbmFibGVkO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2xkVHlwZSA9IGdsLnNoYWRvd01hcC50eXBlO1xuXHRcdFx0XHRcdFx0Z2wuc2hhZG93TWFwLmVuYWJsZWQgPSAhIXNoYWRvd3M7XG5cblx0XHRcdFx0XHRcdGlmICh0eXBlb2Ygc2hhZG93cyA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRcdFx0XHRcdGdsLnNoYWRvd01hcC50eXBlID0gUENGU29mdFNoYWRvd01hcDtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHNoYWRvd3MgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHR5cGVzID0ge1xuXHRcdFx0XHRcdFx0XHRcdGJhc2ljOiBCYXNpY1NoYWRvd01hcCxcblx0XHRcdFx0XHRcdFx0XHRwZXJjZW50YWdlOiBQQ0ZTaGFkb3dNYXAsXG5cdFx0XHRcdFx0XHRcdFx0c29mdDogUENGU29mdFNoYWRvd01hcCxcblx0XHRcdFx0XHRcdFx0XHR2YXJpYW5jZTogVlNNU2hhZG93TWFwLFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRnbC5zaGFkb3dNYXAudHlwZSA9IHR5cGVzW3NoYWRvd3NdID8/IFBDRlNvZnRTaGFkb3dNYXA7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzLm9iaihzaGFkb3dzKSkge1xuXHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGdsLnNoYWRvd01hcCwgc2hhZG93cyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChvbGRFbmFibGVkICE9PSBnbC5zaGFkb3dNYXAuZW5hYmxlZCB8fCBvbGRUeXBlICE9PSBnbC5zaGFkb3dNYXAudHlwZSkgY2hlY2tOZWVkc1VwZGF0ZShnbC5zaGFkb3dNYXApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFNhZmVseSBzZXQgY29sb3IgbWFuYWdlbWVudCBpZiBhdmFpbGFibGUuXG5cdFx0XHRcdFx0Ly8gQXZvaWQgYWNjZXNzaW5nIENvbG9yTWFuYWdlbWVudCB0byBwbGF5IG5pY2Ugd2l0aCBvbGRlciB2ZXJzaW9uc1xuXHRcdFx0XHRcdGlmIChDb2xvck1hbmFnZW1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbG9yTWFuYWdlbWVudCA9IENvbG9yTWFuYWdlbWVudCBhcyBOZ3RBbnlSZWNvcmQ7XG5cdFx0XHRcdFx0XHRpZiAoJ2VuYWJsZWQnIGluIGNvbG9yTWFuYWdlbWVudCkgY29sb3JNYW5hZ2VtZW50WydlbmFibGVkJ10gPSAhbGVnYWN5O1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoJ2xlZ2FjeU1vZGUnIGluIGNvbG9yTWFuYWdlbWVudCkgY29sb3JNYW5hZ2VtZW50WydsZWdhY3lNb2RlJ10gPSBsZWdhY3k7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFpc0NvbmZpZ3VyZWQpIHtcblx0XHRcdFx0XHRcdC8vIHNldCBjb2xvciBzcGFjZSBhbmQgdG9uZW1hcHBpbmcgcHJlZmVyZW5jZXMgb25jZVxuXHRcdFx0XHRcdFx0Y29uc3QgTGluZWFyRW5jb2RpbmcgPSAzMDAwO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1JHQkVuY29kaW5nID0gMzAwMTtcblx0XHRcdFx0XHRcdGFwcGx5UHJvcHMoZ2wsIHtcblx0XHRcdFx0XHRcdFx0b3V0cHV0RW5jb2Rpbmc6IGxpbmVhciA/IExpbmVhckVuY29kaW5nIDogc1JHQkVuY29kaW5nLFxuXHRcdFx0XHRcdFx0XHR0b25lTWFwcGluZzogZmxhdCA/IE5vVG9uZU1hcHBpbmcgOiBBQ0VTRmlsbWljVG9uZU1hcHBpbmcsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBVcGRhdGUgY29sb3IgbWFuYWdlbWVudCBzdGF0ZVxuXHRcdFx0XHRcdGlmIChzdGF0ZS5sZWdhY3kgIT09IGxlZ2FjeSkgc3RhdGVUb1VwZGF0ZS5sZWdhY3kgPSBsZWdhY3k7XG5cdFx0XHRcdFx0aWYgKHN0YXRlLmxpbmVhciAhPT0gbGluZWFyKSBzdGF0ZVRvVXBkYXRlLmxpbmVhciA9IGxpbmVhcjtcblx0XHRcdFx0XHRpZiAoc3RhdGUuZmxhdCAhPT0gZmxhdCkgc3RhdGVUb1VwZGF0ZS5mbGF0ID0gZmxhdDtcblxuXHRcdFx0XHRcdC8vIFNldCBnbCBwcm9wc1xuXHRcdFx0XHRcdGlmIChnbC5zZXRDbGVhckFscGhhKSB7XG5cdFx0XHRcdFx0XHRnbC5zZXRDbGVhckFscGhhKDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRnbC5zZXRQaXhlbFJhdGlvKG1ha2VEcHIoc3RhdGUudmlld3BvcnQuZHByKSk7XG5cdFx0XHRcdFx0Z2wuc2V0U2l6ZShzdGF0ZS5zaXplLndpZHRoLCBzdGF0ZS5zaXplLmhlaWdodCk7XG5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpcy5vYmooZ2xPcHRpb25zKSAmJlxuXHRcdFx0XHRcdFx0ISh0eXBlb2YgZ2xPcHRpb25zID09PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0XHRcdFx0IWlzLnJlbmRlcmVyKGdsT3B0aW9ucykgJiZcblx0XHRcdFx0XHRcdCFpcy5lcXUoZ2xPcHRpb25zLCBnbCwgc2hhbGxvd0xvb3NlKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0YXBwbHlQcm9wcyhnbCwgZ2xPcHRpb25zKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBldmVudHMgaW50ZXJuYWxseVxuXHRcdFx0XHRcdGlmIChldmVudHMgJiYgIXN0YXRlLmV2ZW50cy5oYW5kbGVycykgc3RhdGVUb1VwZGF0ZS5ldmVudHMgPSBldmVudHMoc3RvcmUpO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgcGVyZm9ybWFuY2Vcblx0XHRcdFx0XHRpZiAocGVyZm9ybWFuY2UgJiYgIWlzLmVxdShwZXJmb3JtYW5jZSwgc3RhdGUucGVyZm9ybWFuY2UsIHNoYWxsb3dMb29zZSkpIHtcblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUucGVyZm9ybWFuY2UgPSB7IC4uLnN0YXRlLnBlcmZvcm1hbmNlLCAuLi5wZXJmb3JtYW5jZSB9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChPYmplY3Qua2V5cyhzdGF0ZVRvVXBkYXRlKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHN0b3JlLnVwZGF0ZShzdGF0ZVRvVXBkYXRlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDaGVjayBzaXplLCBhbGxvdyBpdCB0byB0YWtlIG9uIGNvbnRhaW5lciBib3VuZHMgaW5pdGlhbGx5XG5cdFx0XHRcdFx0Y29uc3Qgc2l6ZSA9IGNvbXB1dGVJbml0aWFsU2l6ZShjYW52YXMsIHNpemVPcHRpb25zKTtcblx0XHRcdFx0XHRpZiAoIWlzLmVxdShzaXplLCBzdGF0ZS5zaXplLCBzaGFsbG93TG9vc2UpKSB7XG5cdFx0XHRcdFx0XHRzdGF0ZS5zZXRTaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0LCBzaXplLnRvcCwgc2l6ZS5sZWZ0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDaGVjayBwaXhlbHJhdGlvXG5cdFx0XHRcdFx0aWYgKGRwciAmJiBzdGF0ZS52aWV3cG9ydC5kcHIgIT09IG1ha2VEcHIoZHByKSkgc3RhdGUuc2V0RHByKGRwcik7XG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZnJhbWVsb29wXG5cdFx0XHRcdFx0aWYgKHN0YXRlLmZyYW1lbG9vcCAhPT0gZnJhbWVsb29wKSBzdGF0ZS5zZXRGcmFtZWxvb3AoZnJhbWVsb29wKTtcblxuXHRcdFx0XHRcdGlzQ29uZmlndXJlZCA9IHRydWU7XG5cdFx0XHRcdH0sXG5cdFx0XHR9O1xuXHRcdH07XG5cdH0pO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RDYW52YXNDb25maWd1cmF0b3IgPSBSZXR1cm5UeXBlPFJldHVyblR5cGU8dHlwZW9mIGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplcj4+O1xuXG5mdW5jdGlvbiBjb21wdXRlSW5pdGlhbFNpemUoY2FudmFzOiBOZ3RDYW52YXNFbGVtZW50LCBkZWZhdWx0U2l6ZT86IE5ndFNpemUpOiBOZ3RTaXplIHtcblx0aWYgKGRlZmF1bHRTaXplKSB7XG5cdFx0cmV0dXJuIGRlZmF1bHRTaXplO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgY2FudmFzIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgJiYgY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gY2FudmFzLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdH1cblxuXHRpZiAodHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPT0gJ3VuZGVmaW5lZCcgJiYgY2FudmFzIGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzKSB7XG5cdFx0cmV0dXJuIHsgd2lkdGg6IGNhbnZhcy53aWR0aCwgaGVpZ2h0OiBjYW52YXMuaGVpZ2h0LCB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0fVxuXG5cdHJldHVybiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgbGVmdDogMCB9O1xufVxuXG4vLyBEaXNwb3NlcyBhbiBvYmplY3QgYW5kIGFsbCBpdHMgcHJvcGVydGllc1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2U8VE9iaiBleHRlbmRzIHsgZGlzcG9zZT86ICgpID0+IHZvaWQ7IHR5cGU/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IGFueSB9PihvYmo6IFRPYmopIHtcblx0aWYgKG9iai5kaXNwb3NlICYmIG9iai50eXBlICE9PSAnU2NlbmUnKSBvYmouZGlzcG9zZSgpO1xuXHRmb3IgKGNvbnN0IHAgaW4gb2JqKSB7XG5cdFx0KHAgYXMgYW55KS5kaXNwb3NlPy4oKTtcblx0XHRkZWxldGUgb2JqW3BdO1xuXHR9XG59XG4iXX0=
@@ -2317,7 +2317,9 @@ function injectCanvasRootInitializer(injector) {
2317
2317
  if (state.flat !== flat)
2318
2318
  stateToUpdate.flat = flat;
2319
2319
  // Set gl props
2320
- gl.setClearAlpha(0);
2320
+ if (gl.setClearAlpha) {
2321
+ gl.setClearAlpha(0);
2322
+ }
2321
2323
  gl.setPixelRatio(makeDpr(state.viewport.dpr));
2322
2324
  gl.setSize(state.size.width, state.size.height);
2323
2325
  if (is.obj(glOptions) &&
@@ -2764,9 +2766,12 @@ _injectLoader.clear = (urls) => {
2764
2766
  };
2765
2767
  const injectLoader = _injectLoader;
2766
2768
 
2769
+ const RGBA_REGEX = /rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*(\d*\.?\d+)?\)/;
2770
+ const DEFAULT_COLOR = 0x000000;
2767
2771
  class NgtHexify {
2768
2772
  constructor() {
2769
2773
  this.document = inject(DOCUMENT, { optional: true });
2774
+ this.cache = {};
2770
2775
  }
2771
2776
  /**
2772
2777
  * transforms a:
@@ -2780,38 +2785,54 @@ class NgtHexify {
2780
2785
  */
2781
2786
  transform(value) {
2782
2787
  if (value == null)
2783
- return 0x000000;
2788
+ return DEFAULT_COLOR;
2784
2789
  if (value.startsWith('#')) {
2785
- return this.hexStringToNumber(value);
2790
+ if (!this.cache[value]) {
2791
+ this.cache[value] = this.hexStringToNumber(value);
2792
+ }
2793
+ return this.cache[value];
2786
2794
  }
2787
2795
  if (!this.ctx) {
2788
2796
  this.ctx = this.document?.createElement('canvas').getContext('2d');
2789
2797
  }
2790
- if (!this.ctx)
2791
- return 0x000000;
2798
+ if (!this.ctx) {
2799
+ console.warn('[NGT] hexify: canvas context is not available');
2800
+ return DEFAULT_COLOR;
2801
+ }
2792
2802
  this.ctx.fillStyle = value;
2793
2803
  const computedValue = this.ctx.fillStyle;
2794
2804
  if (computedValue.startsWith('#')) {
2795
- return this.hexStringToNumber(computedValue);
2796
- }
2797
- if (!computedValue.startsWith('rgba'))
2798
- return 0x000000;
2799
- const regex = /rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*(\d*\.?\d+)?\)/;
2800
- const match = computedValue.match(regex);
2801
- if (!match)
2802
- return 0x000000;
2805
+ if (!this.cache[computedValue]) {
2806
+ this.cache[computedValue] = this.hexStringToNumber(computedValue);
2807
+ }
2808
+ return this.cache[computedValue];
2809
+ }
2810
+ if (!computedValue.startsWith('rgba')) {
2811
+ console.warn(`[NGT] hexify: invalid color format. Expected rgba or hex, receive: ${computedValue}`);
2812
+ return DEFAULT_COLOR;
2813
+ }
2814
+ const match = computedValue.match(RGBA_REGEX);
2815
+ if (!match) {
2816
+ console.warn(`[NGT] hexify: invalid color format. Expected rgba or hex, receive: ${computedValue}`);
2817
+ return DEFAULT_COLOR;
2818
+ }
2803
2819
  const r = parseInt(match[1], 10);
2804
2820
  const g = parseInt(match[2], 10);
2805
2821
  const b = parseInt(match[3], 10);
2806
2822
  const a = match[4] ? parseFloat(match[4]) : 1.0;
2807
- // Convert the components to hex strings
2808
- const hexR = this.componentToHex(r);
2809
- const hexG = this.componentToHex(g);
2810
- const hexB = this.componentToHex(b);
2811
- const hexA = this.componentToHex(Math.round(a * 255));
2812
- // Combine the hex components into a single hex string
2813
- const hex = `#${hexR}${hexG}${hexB}${hexA}`;
2814
- return this.hexStringToNumber(hex);
2823
+ const cacheKey = `${r}:${g}:${b}:${a}`;
2824
+ // check result from cache
2825
+ if (!this.cache[cacheKey]) {
2826
+ // Convert the components to hex strings
2827
+ const hexR = this.componentToHex(r);
2828
+ const hexG = this.componentToHex(g);
2829
+ const hexB = this.componentToHex(b);
2830
+ const hexA = this.componentToHex(Math.round(a * 255));
2831
+ // Combine the hex components into a single hex string
2832
+ const hex = `#${hexR}${hexG}${hexB}${hexA}`;
2833
+ this.cache[cacheKey] = this.hexStringToNumber(hex);
2834
+ }
2835
+ return this.cache[cacheKey];
2815
2836
  }
2816
2837
  hexStringToNumber(hexString) {
2817
2838
  return parseInt(hexString.replace('#', ''), 16);