@libs-ui/components-color-picker 0.2.10

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.
@@ -0,0 +1,261 @@
1
+ import { get, isNil, set } from "@libs-ui/utils";
2
+ export const ColorNames = { 'aliceblue': '#F0F8FF', 'antiquewhite': '#FAEBD7', 'aqua': '#00FFFF', 'aquamarine': '#7FFFD4', 'azure': '#F0FFFF', 'beige': '#F5F5DC', 'bisque': '#FFE4C4', 'black': '#000000', 'blanchedalmond': '#FFEBCD', 'blue': '#0000FF', 'blueviolet': '#8A2BE2', 'brown': '#A52A2A', 'burlywood': '#DEB887', 'cadetblue': '#5F9EA0', 'chartreuse': '#7FFF00', 'chocolate': '#D2691E', 'coral': '#FF7F50', 'cornflowerblue': '#6495ED', 'cornsilk': '#FFF8DC', 'crimson': '#DC143C', 'cyan': '#00FFFF', 'darkblue': '#00008B', 'darkcyan': '#008B8B', 'darkgoldenrod': '#B8860B', 'darkgray': '#A9A9A9', 'darkgrey': '#A9A9A9', 'darkgreen': '#006400', 'darkkhaki': '#BDB76B', 'darkmagenta': '#8B008B', 'darkolivegreen': '#556B2F', 'darkorange': '#FF8C00', 'darkorchid': '#9932CC', 'darkred': '#8B0000', 'darksalmon': '#E9967A', 'darkseagreen': '#8FBC8F', 'darkslateblue': '#483D8B', 'darkslategray': '#2F4F4F', 'darkslategrey': '#2F4F4F', 'darkturquoise': '#00CED1', 'darkviolet': '#9400D3', 'deeppink': '#FF1493', 'deepskyblue': '#00BFFF', 'dimgray': '#696969', 'dimgrey': '#696969', 'dodgerblue': '#1E90FF', 'firebrick': '#B22222', 'floralwhite': '#FFFAF0', 'forestgreen': '#228B22', 'fuchsia': '#FF00FF', 'gainsboro': '#DCDCDC', 'ghostwhite': '#F8F8FF', 'gold': '#FFD700', 'goldenrod': '#DAA520', 'gray': '#808080', 'grey': '#808080', 'green': '#008000', 'greenyellow': '#ADFF2F', 'honeydew': '#F0FFF0', 'hotpink': '#FF69B4', 'indianred ': '#CD5C5C', 'indigo ': '#4B0082', 'ivory': '#FFFFF0', 'khaki': '#F0E68C', 'lavender': '#E6E6FA', 'lavenderblush': '#FFF0F5', 'lawngreen': '#7CFC00', 'lemonchiffon': '#FFFACD', 'lightblue': '#ADD8E6', 'lightcoral': '#F08080', 'lightcyan': '#E0FFFF', 'lightgoldenrodyellow': '#FAFAD2', 'lightgray': '#D3D3D3', 'lightgrey': '#D3D3D3', 'lightgreen': '#90EE90', 'lightpink': '#FFB6C1', 'lightsalmon': '#FFA07A', 'lightseagreen': '#20B2AA', 'lightskyblue': '#87CEFA', 'lightslategray': '#778899', 'lightslategrey': '#778899', 'lightsteelblue': '#B0C4DE', 'lightyellow': '#FFFFE0', 'lime': '#00FF00', 'limegreen': '#32CD32', 'linen': '#FAF0E6', 'magenta': '#FF00FF', 'maroon': '#800000', 'mediumaquamarine': '#66CDAA', 'mediumblue': '#0000CD', 'mediumorchid': '#BA55D3', 'mediumpurple': '#9370DB', 'mediumseagreen': '#3CB371', 'mediumslateblue': '#7B68EE', 'mediumspringgreen': '#00FA9A', 'mediumturquoise': '#48D1CC', 'mediumvioletred': '#C71585', 'midnightblue': '#191970', 'mintcream': '#F5FFFA', 'mistyrose': '#FFE4E1', 'moccasin': '#FFE4B5', 'navajowhite': '#FFDEAD', 'navy': '#000080', 'oldlace': '#FDF5E6', 'olive': '#808000', 'olivedrab': '#6B8E23', 'orange': '#FFA500', 'orangered': '#FF4500', 'orchid': '#DA70D6', 'palegoldenrod': '#EEE8AA', 'palegreen': '#98FB98', 'paleturquoise': '#AFEEEE', 'palevioletred': '#DB7093', 'papayawhip': '#FFEFD5', 'peachpuff': '#FFDAB9', 'peru': '#CD853F', 'pink': '#FFC0CB', 'plum': '#DDA0DD', 'powderblue': '#B0E0E6', 'purple': '#800080', 'rebeccapurple': '#663399', 'red': '#FF0000', 'rosybrown': '#BC8F8F', 'royalblue': '#4169E1', 'saddlebrown': '#8B4513', 'salmon': '#FA8072', 'sandybrown': '#F4A460', 'seagreen': '#2E8B57', 'seashell': '#FFF5EE', 'sienna': '#A0522D', 'silver': '#C0C0C0', 'skyblue': '#87CEEB', 'slateblue': '#6A5ACD', 'slategray': '#708090', 'slategrey': '#708090', 'snow': '#FFFAFA', 'springgreen': '#00FF7F', 'steelblue': '#4682B4', 'tan': '#D2B48C', 'teal': '#008080', 'thistle': '#D8BFD8', 'tomato': '#FF6347', 'turquoise': '#40E0D0', 'violet': '#EE82EE', 'wheat': '#F5DEB3', 'white': '#FFFFFF', 'whitesmoke': '#F5F5F5', 'yellow': '#FFFF00', 'yellowgreen': '#9ACD32' };
3
+ export const optionsDefault = () => {
4
+ return {
5
+ showHsl: false,
6
+ showRgb: true,
7
+ showHex: true,
8
+ showAlpha: false,
9
+ color: '#ff0000',
10
+ format: 'color',
11
+ slBarSize: [316, 200],
12
+ hueBarSize: [316, 20],
13
+ alphaBarSize: [316, 20]
14
+ };
15
+ };
16
+ export const limit = (value, min, max) => {
17
+ value = +value;
18
+ return isNaN(value) ? min : (value < min ? min : (value > max ? max : value));
19
+ };
20
+ export const hslToRgb = (h, s, l) => {
21
+ let r, g, b;
22
+ [h, s, l] = [limit(h, 0, 360) / 360, limit(s, 0, 100) / 100, limit(l, 0, 100) / 100];
23
+ if (s == 0) {
24
+ r = g = b = l; // achromatic
25
+ return [r * 255, g * 255, b * 255].map(Math.round);
26
+ }
27
+ const hueToRgb = (p, q, t) => {
28
+ if (t < 0)
29
+ t += 1;
30
+ if (t > 1)
31
+ t -= 1;
32
+ if (t < 1 / 6)
33
+ return p + (q - p) * 6 * t;
34
+ if (t < 1 / 2)
35
+ return q;
36
+ if (t < 2 / 3)
37
+ return p + (q - p) * (2 / 3 - t) * 6;
38
+ return p;
39
+ };
40
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
41
+ const p = (2 * l) - q;
42
+ r = hueToRgb(p, q, h + (1 / 3));
43
+ g = hueToRgb(p, q, h);
44
+ b = hueToRgb(p, q, h - (1 / 3));
45
+ return [r * 255, g * 255, b * 255].map(Math.round);
46
+ };
47
+ export const cssColorToRgba = (color) => {
48
+ if (color) {
49
+ const colorByName = get(ColorNames, color.toLowerCase());
50
+ const [, , , r, g, b, a, , rr, gg, bb, aa] = /^\s*#?((([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])?)|(([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})?))\s*$/i.exec(colorByName || color) || [];
51
+ if (!isNil(r)) {
52
+ return [
53
+ parseInt(r + r, 16),
54
+ parseInt(g + g, 16),
55
+ parseInt(b + b, 16),
56
+ a ? +((parseInt(a + a, 16)) / 255).toFixed(2) : 1
57
+ ];
58
+ }
59
+ if (!isNil(rr)) {
60
+ return [
61
+ parseInt(rr, 16),
62
+ parseInt(gg, 16),
63
+ parseInt(bb, 16),
64
+ aa ? +((parseInt(aa, 16)) / 255).toFixed(2) : 1
65
+ ];
66
+ }
67
+ }
68
+ return undefined;
69
+ };
70
+ export const parseColorToRgba = (color) => {
71
+ if (Array.isArray(color)) {
72
+ return [
73
+ limit(color[0], 0, 255),
74
+ limit(color[1], 0, 255),
75
+ limit(color[2], 0, 255),
76
+ limit(color[3] ?? 1, 0, 1)
77
+ ];
78
+ }
79
+ const parsed = cssColorToRgba(color) || cssRgbaToRgba(color);
80
+ if (parsed && parsed.length === 3) {
81
+ parsed.push(1);
82
+ }
83
+ return parsed;
84
+ };
85
+ export const cssRgbaToRgba = (rgba) => {
86
+ if (rgba) {
87
+ const [m, r, g, b, , a] = /^rgba?\((\d+)\s*[\s,]\s*(\d+)\s*[\s,]\s*(\d+)(\s*[\s,]\s*(\d*(.\d+)?))?\)/i.exec(rgba) || [];
88
+ return m ? [limit(r, 0, 255), limit(g, 0, 255), limit(b, 0, 255), limit(a ?? 1, 0, 1)] : undefined;
89
+ }
90
+ return undefined;
91
+ };
92
+ export const cssHslaToHsla = (hsla) => {
93
+ if (hsla) {
94
+ const [m, h, s, l, , a] = /^hsla?\((\d+)\s*[\s,]\s*(\d+)\s*[\s,]\s*(\d+)(\s*[\s,]\s*(\d*(.\d+)?))?\)/i.exec(hsla) || [];
95
+ return m ? [limit(h, 0, 255), limit(s, 0, 255), limit(l, 0, 255), limit(a ?? 1, 0, 1)] : undefined;
96
+ }
97
+ return undefined;
98
+ };
99
+ export const parseColorToHsla = (color) => {
100
+ if (Array.isArray(color)) {
101
+ return [
102
+ limit(color[0], 0, 360),
103
+ limit(color[1], 0, 100),
104
+ limit(color[2], 0, 100),
105
+ limit(color[3] ?? 1, 0, 1)
106
+ ];
107
+ }
108
+ const parsed = cssHslaToHsla(color);
109
+ if (parsed && parsed.length === 3) {
110
+ parsed.push(1);
111
+ }
112
+ return parsed;
113
+ };
114
+ export const rgbToHsl = (r, g, b) => {
115
+ [r, g, b] = [limit(r, 0, 255) / 255, limit(g, 0, 255) / 255, limit(b, 0, 255) / 255];
116
+ const max = Math.max(r, g, b);
117
+ const min = Math.min(r, g, b);
118
+ let h, s = (max + min) / 2;
119
+ const l = (max + min) / 2;
120
+ if (max == min) {
121
+ h = s = 0; // achromatic
122
+ return [h * 360, s * 100, l * 100].map(Math.round);
123
+ }
124
+ const d = max - min;
125
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
126
+ switch (max) {
127
+ case r:
128
+ h = ((g - b) / d) + (g < b ? 6 : 0);
129
+ break;
130
+ case g:
131
+ h = ((b - r) / d) + 2;
132
+ break;
133
+ case b:
134
+ h = ((r - g) / d) + 4;
135
+ break;
136
+ }
137
+ h = (h || 0) / 6;
138
+ return [h * 360, s * 100, l * 100].map(Math.round);
139
+ };
140
+ export const rgbToHex = (r, g, b) => {
141
+ [r, g, b] = [limit(r, 0, 255), limit(g, 0, 255), limit(b, 0, 255)];
142
+ return "#" + ("000000" + ((r << 16) | (g << 8) | b).toString(16)).slice(-6);
143
+ };
144
+ export const rgbToInt = (r, g, b) => {
145
+ return (r << 16) | (g << 8) | b;
146
+ };
147
+ export const rgbToHsv = (r, g, b) => {
148
+ [r, g, b] = [limit(r, 0, 255) / 255, limit(g, 0, 255) / 255, limit(b, 0, 255) / 255];
149
+ const max = Math.max(r, g, b);
150
+ const min = Math.min(r, g, b);
151
+ let h, s = max;
152
+ const v = max;
153
+ const d = max - min;
154
+ s = max === 0 ? 0 : d / max;
155
+ if (max == min) {
156
+ h = 0;
157
+ return [h, s, v];
158
+ }
159
+ switch (max) {
160
+ case r:
161
+ h = (g - b) / d + (g < b ? 6 : 0);
162
+ break;
163
+ case g:
164
+ h = (b - r) / d + 2;
165
+ break;
166
+ case b:
167
+ h = (r - g) / d + 4;
168
+ break;
169
+ }
170
+ h = (h || 0) / 6;
171
+ return [h, s, v];
172
+ };
173
+ export const formatColor = (data, format) => {
174
+ switch (format) {
175
+ case 'rgb':
176
+ default:
177
+ return data.slice(0, 3);
178
+ case 'rgbcss':
179
+ return `rgb(${data[0]}, ${data[1]}, ${data[2]})`;
180
+ case 'rgbcss4':
181
+ return `rgb(${data[0]}, ${data[1]}, ${data[2]}, ${data[3]})`;
182
+ case 'rgba':
183
+ return data;
184
+ case 'rgbacss':
185
+ return `rgba(${data[0]}, ${data[1]}, ${data[2]}, ${data[3]})`;
186
+ case 'hsl':
187
+ return rgbToHsl(data[0], data[1], data[2]);
188
+ case 'hslcss':
189
+ data = rgbToHsl(data[0], data[1], data[2]);
190
+ return `hsl(${data[0]}, ${data[1]}, ${data[2]})`;
191
+ case 'hslcss4': {
192
+ const hh = rgbToHsl(data[0], data[1], data[2]);
193
+ return `hsl(${hh[0]}, ${hh[1]}, ${hh[2]}, ${data[3]})`;
194
+ }
195
+ case 'hsla':
196
+ return [...rgbToHsl(data[0], data[1], data[2]), data[3]];
197
+ case 'hslacss': {
198
+ const ha = rgbToHsl(data[0], data[1], data[2]);
199
+ return `hsla(${ha[0]}, ${ha[1]}, ${ha[2]}, ${data[3]})`;
200
+ }
201
+ case 'hex':
202
+ return rgbToHex(data[0], data[1], data[2]);
203
+ case 'hexcss4':
204
+ return rgbToHex(data[0], data[1], data[2]) + ('00' + parseInt((data[3] * 255).toString()).toString(16)).slice(-2);
205
+ case 'int':
206
+ return rgbToInt(data[0], data[1], data[2]);
207
+ }
208
+ };
209
+ export const parseColor = (color, format) => {
210
+ if (!isNil(color)) {
211
+ let data = [];
212
+ data = parseColorToRgba(color) || (parseColorToHsla(color) && [...hslToRgb(data[0], data[1], data[2]), data[3]]);
213
+ if (data) {
214
+ if (typeof format === 'object') {
215
+ return ['rgb', 'rgbcss', 'rgbcss4', 'rgba', 'rgbacss', 'hsl', 'hslcss', 'hslcss4', 'hsla', 'hslacss', 'hex', 'hexcss4', 'int'].reduce((m, f) => {
216
+ set(m, f, formatColor(data, f));
217
+ return m;
218
+ }, format);
219
+ }
220
+ return formatColor(data, format);
221
+ }
222
+ }
223
+ return undefined;
224
+ };
225
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
226
+ export const canvasHelper = (canvas) => {
227
+ const ctx = canvas.getContext('2d');
228
+ const width = +canvas.width;
229
+ const height = +canvas.height;
230
+ const whiteBlackGradient = ctx.createLinearGradient(1, 1, 1, height - 1);
231
+ whiteBlackGradient.addColorStop(0, 'white');
232
+ whiteBlackGradient.addColorStop(1, 'black');
233
+ return {
234
+ setHue: (hue) => {
235
+ const colorGradient = ctx.createLinearGradient(1, 0, width - 1, 0);
236
+ colorGradient.addColorStop(0, `hsla(${hue}, 100%, 50%, 0)`);
237
+ colorGradient.addColorStop(1, `hsla(${hue}, 100%, 50%, 1)`);
238
+ ctx.fillStyle = whiteBlackGradient;
239
+ ctx.fillRect(0, 0, width, height);
240
+ ctx.fillStyle = colorGradient;
241
+ ctx.globalCompositeOperation = 'multiply';
242
+ ctx.fillRect(0, 0, width, height);
243
+ ctx.globalCompositeOperation = 'source-over';
244
+ },
245
+ grabColor: (x, y) => ctx.getImageData(x, y, 1, 1).data,
246
+ findColor: (r, g, b) => {
247
+ const [, s, v] = rgbToHsv(r, g, b);
248
+ const x = s * width;
249
+ const y = height - (v * height);
250
+ return [x, y];
251
+ }
252
+ };
253
+ };
254
+ export const defaultHelper = () => {
255
+ return {
256
+ setHue: () => { return; },
257
+ grabColor: () => [],
258
+ findColor: () => []
259
+ };
260
+ };
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2NvbG9yLXBpY2tlci9zcmMvdXRpbHMvcGlja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxX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YSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUU7SUFDNUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQUFBRCxFQUFHLENBQUMsQ0FBQyxHQUFHLDRFQUE0RSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEgsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUU7SUFDNUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQUFBRCxFQUFHLENBQUMsQ0FBQyxHQUFHLDRFQUE0RSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEgsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FB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Q0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRTtJQUMxRCxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFO0lBQzFELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDckYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2YsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNwQixDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBRTVCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVOLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFDRCxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ1osS0FBSyxDQUFDO1lBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxNQUFNO1FBQ2pELEtBQUssQ0FBQztZQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUMsTUFBTTtRQUNuQyxLQUFLLENBQUM7WUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU07SUFDckMsQ0FBQztJQUNELENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFakIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBbUIsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUNqRSxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxLQUFLLENBQUM7UUFDWDtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbkQsS0FBSyxTQUFTO1lBQ1osT0FBTyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQy9ELEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxTQUFTO1lBQ1osT0FBTyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2hFLEtBQUssS0FBSztZQUNSLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsS0FBSyxRQUFRO1lBQ1gsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTNDLE9BQU8sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ25ELEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNmLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9DLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsS0FBSyxNQUFNO1lBQ1QsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUs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UyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDdEUsU0FBUyxFQUFFLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRTtZQUM3QyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNwQixNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFFaEMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUU7SUFDaEMsT0FBTztRQUNMLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFNLENBQUMsQ0FBQztRQUN4QixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNuQixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtLQUNwQixDQUFDO0FBQ0osQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0LCBpc05pbCwgc2V0IH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBJUGlja2VyT3B0aW9ucyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCBjb25zdCBDb2xvck5hbWVzID0geyAnYWxpY2VibHVlJzogJyNGMEY4RkYnLCAnYW50aXF1ZXdoaXRlJzogJyNGQUVCRDcnLCAnYXF1YSc6ICcjMDBGRkZGJywgJ2FxdWFtYXJpbmUnOiAnIzdGRkZENCcsICdhenVyZSc6ICcjRjBGRkZGJywgJ2JlaWdlJzogJyNGNUY1REMnLCAnYmlzcXVlJzogJyNGRkU0QzQnLCAnYmxhY2snOiAnIzAwMDAwMCcsICdibGFuY2hlZGFsbW9uZCc6ICcjRkZFQkNEJywgJ2JsdWUnOiAnIzAwMDBGRicsICdibHVldmlvbGV0JzogJyM4QTJCRTInLCAnYnJvd24nOiAnI0E1MkEyQScsICdidXJseXdvb2QnOiAnI0RFQjg4NycsICdjYWRldGJsdWUnOiAnIzVGOUVBMCcsICdjaGFydHJldXNlJzogJyM3RkZGMDAnLCAnY2hvY29sYXRlJzogJyNEMjY5MUUnLCAnY29yYWwnOiAnI0ZGN0Y1MCcsICdjb3JuZmxvd2VyYmx1ZSc6ICcjNjQ5NUVEJywgJ2Nvcm5zaWxrJzogJyNGRkY4REMnLCAnY3JpbXNvbic6ICcjREMxNDNDJywgJ2N5YW4nOiAnIzAwRkZGRicsICdkYXJrYmx1ZSc6ICcjMDAwMDhCJywgJ2RhcmtjeWFuJzogJyMwMDhCOEInLCAnZGFya2dvbGRlbnJvZCc6ICcjQjg4NjBCJywgJ2RhcmtncmF5JzogJyNBOUE5QTknLCAnZGFya2dyZXknOiAnI0E5QTlBOScsICdkYXJrZ3JlZW4nOiAnIzAwNjQwMCcsICdkYXJra2hha2knOiAnI0JEQjc2QicsICdkYXJrbWFnZW50YSc6ICcjOEIwMDhCJywgJ2RhcmtvbGl2ZWdyZWVuJzogJyM1NTZCMkYnLCAnZGFya29yYW5nZSc6ICcjRkY4QzAwJywgJ2RhcmtvcmNoaWQnOiAnIzk5MzJDQycsICdkYXJrcmVkJzogJyM4QjAwMDAnLCAnZGFya3NhbG1vbic6ICcjRTk5NjdBJywgJ2RhcmtzZWFncmVlbic6ICcjOEZCQzhGJywgJ2RhcmtzbGF0ZWJsdWUnOiAnIzQ4M0Q4QicsICdkYXJrc2xhdGVncmF5JzogJyMyRjRGNEYnLCAnZGFya3NsYXRlZ3JleSc6ICcjMkY0RjRGJywgJ2Rhcmt0dXJxdW9pc2UnOiAnIzAwQ0VEMScsICdkYXJrdmlvbGV0JzogJyM5NDAwRDMnLCAnZGVlcHBpbmsnOiAnI0ZGMTQ5MycsICdkZWVwc2t5Ymx1ZSc6ICcjMDBCRkZGJywgJ2RpbWdyYXknOiAnIzY5Njk2OScsICdkaW1ncmV5JzogJyM2OTY5NjknLCAnZG9kZ2VyYmx1ZSc6ICcjMUU5MEZGJywgJ2ZpcmVicmljayc6ICcjQjIyMjIyJywgJ2Zsb3JhbHdoaXRlJzogJyNGRkZBRjAnLCAnZm9yZXN0Z3JlZW4nOiAnIzIyOEIyMicsICdmdWNoc2lhJzogJyNGRjAwRkYnLCAnZ2FpbnNib3JvJzogJyNEQ0RDREMnLCAnZ2hvc3R3aGl0ZSc6ICcjRjhGOEZGJywgJ2dvbGQnOiAnI0ZGRDcwMCcsICdnb2xkZW5yb2QnOiAnI0RBQTUyMCcsICdncmF5JzogJyM4MDgwODAnLCAnZ3JleSc6ICcjODA4MDgwJywgJ2dyZWVuJzogJyMwMDgwMDAnLCAnZ3JlZW55ZWxsb3cnOiAnI0FERkYyRicsICdob25leWRldyc6ICcjRjBGRkYwJywgJ2hvdHBpbmsnOiAnI0ZGNjlCNCcsICdpbmRpYW5yZWQgJzogJyNDRDVDNUMnLCAnaW5kaWdvICc6ICcjNEIwMDgyJywgJ2l2b3J5JzogJyNGRkZGRjAnLCAna2hha2knOiAnI0YwRTY4QycsICdsYXZlbmRlcic6ICcjRTZFNkZBJywgJ2xhdmVuZGVyYmx1c2gnOiAnI0ZGRjBGNScsICdsYXduZ3JlZW4nOiAnIzdDRkMwMCcsICdsZW1vbmNoaWZmb24nOiAnI0ZGRkFDRCcsICdsaWdodGJsdWUnOiAnI0FERDhFNicsICdsaWdodGNvcmFsJzogJyNGMDgwODAnLCAnbGlnaHRjeWFuJzogJyNFMEZGRkYnLCAnbGlnaHRnb2xkZW5yb2R5ZWxsb3cnOiAnI0ZBRkFEMicsICdsaWdodGdyYXknOiAnI0QzRDNEMycsICdsaWdodGdyZXknOiAnI0QzRDNEMycsICdsaWdodGdyZWVuJzogJyM5MEVFOTAnLCAnbGlnaHRwaW5rJzogJyNGRkI2QzEnLCAnbGlnaHRzYWxtb24nOiAnI0ZGQTA3QScsICdsaWdodHNlYWdyZWVuJzogJyMyMEIyQUEnLCAnbGlnaHRza3libHVlJzogJyM4N0NFRkEnLCAnbGlnaHRzbGF0ZWdyYXknOiAnIzc3ODg5OScsICdsaWdodHNsYXRlZ3JleSc6ICcjNzc4ODk5JywgJ2xpZ2h0c3RlZWxibHVlJzogJyNCMEM0REUnLCAnbGlnaHR5ZWxsb3cnOiAnI0ZGRkZFMCcsICdsaW1lJzogJyMwMEZGMDAnLCAnbGltZWdyZWVuJzogJyMzMkNEMzInLCAnbGluZW4nOiAnI0ZBRjBFNicsICdtYWdlbnRhJzogJyNGRjAwRkYnLCAnbWFyb29uJzogJyM4MDAwMDAnLCAnbWVkaXVtYXF1YW1hcmluZSc6ICcjNjZDREFBJywgJ21lZGl1bWJsdWUnOiAnIzAwMDBDRCcsICdtZWRpdW1vcmNoaWQnOiAnI0JBNTVEMycsICdtZWRpdW1wdXJwbGUnOiAnIzkzNzBEQicsICdtZWRpdW1zZWFncmVlbic6ICcjM0NCMzcxJywgJ21lZGl1bXNsYXRlYmx1ZSc6ICcjN0I2OEVFJywgJ21lZGl1bXNwcmluZ2dyZWVuJzogJyMwMEZBOUEnLCAnbWVkaXVtdHVycXVvaXNlJzogJyM0OEQxQ0MnLCAnbWVkaXVtdmlvbGV0cmVkJzogJyNDNzE1ODUnLCAnbWlkbmlnaHRibHVlJzogJyMxOTE5NzAnLCAnbWludGNyZWFtJzogJyNGNUZGRkEnLCAnbWlzdHlyb3NlJzogJyNGRkU0RTEnLCAnbW9jY2FzaW4nOiAnI0ZGRTRCNScsICduYXZham93aGl0ZSc6ICcjRkZERUFEJywgJ25hdnknOiAnIzAwMDA4MCcsICdvbGRsYWNlJzogJyNGREY1RTYnLCAnb2xpdmUnOiAnIzgwODAwMCcsICdvbGl2ZWRyYWInOiAnIzZCOEUyMycsICdvcmFuZ2UnOiAnI0ZGQTUwMCcsICdvcmFuZ2VyZWQnOiAnI0ZGNDUwMCcsICdvcmNoaWQnOiAnI0RBNzBENicsICdwYWxlZ29sZGVucm9kJzogJyNFRUU4QUEnLCAncGFsZWdyZWVuJzogJyM5OEZCOTgnLCAncGFsZXR1cnF1b2lzZSc6ICcjQUZFRUVFJywgJ3BhbGV2aW9sZXRyZWQnOiAnI0RCNzA5MycsICdwYXBheWF3aGlwJzogJyNGRkVGRDUnLCAncGVhY2hwdWZmJzogJyNGRkRBQjknLCAncGVydSc6ICcjQ0Q4NTNGJywgJ3BpbmsnOiAnI0ZGQzBDQicsICdwbHVtJzogJyNEREEwREQnLCAncG93ZGVyYmx1ZSc6ICcjQjBFMEU2JywgJ3B1cnBsZSc6ICcjODAwMDgwJywgJ3JlYmVjY2FwdXJwbGUnOiAnIzY2MzM5OScsICdyZWQnOiAnI0ZGMDAwMCcsICdyb3N5YnJvd24nOiAnI0JDOEY4RicsICdyb3lhbGJsdWUnOiAnIzQxNjlFMScsICdzYWRkbGVicm93bic6ICcjOEI0NTEzJywgJ3NhbG1vbic6ICcjRkE4MDcyJywgJ3NhbmR5YnJvd24nOiAnI0Y0QTQ2MCcsICdzZWFncmVlbic6ICcjMkU4QjU3JywgJ3NlYXNoZWxsJzogJyNGRkY1RUUnLCAnc2llbm5hJzogJyNBMDUyMkQnLCAnc2lsdmVyJzogJyNDMEMwQzAnLCAnc2t5Ymx1ZSc6ICcjODdDRUVCJywgJ3NsYXRlYmx1ZSc6ICcjNkE1QUNEJywgJ3NsYXRlZ3JheSc6ICcjNzA4MDkwJywgJ3NsYXRlZ3JleSc6ICcjNzA4MDkwJywgJ3Nub3cnOiAnI0ZGRkFGQScsICdzcHJpbmdncmVlbic6ICcjMDBGRjdGJywgJ3N0ZWVsYmx1ZSc6ICcjNDY4MkI0JywgJ3Rhbic6ICcjRDJCNDhDJywgJ3RlYWwnOiAnIzAwODA4MCcsICd0aGlzdGxlJzogJyNEOEJGRDgnLCAndG9tYXRvJzogJyNGRjYzNDcnLCAndHVycXVvaXNlJzogJyM0MEUwRDAnLCAndmlvbGV0JzogJyNFRTgyRUUnLCAnd2hlYXQnOiAnI0Y1REVCMycsICd3aGl0ZSc6ICcjRkZGRkZGJywgJ3doaXRlc21va2UnOiAnI0Y1RjVGNScsICd5ZWxsb3cnOiAnI0ZGRkYwMCcsICd5ZWxsb3dncmVlbic6ICcjOUFDRDMyJyB9O1xuZXhwb3J0IGNvbnN0IG9wdGlvbnNEZWZhdWx0ID0gKCk6IElQaWNrZXJPcHRpb25zID0+IHtcbiAgcmV0dXJuIHtcbiAgICBzaG93SHNsOiBmYWxzZSxcbiAgICBzaG93UmdiOiB0cnVlLFxuICAgIHNob3dIZXg6IHRydWUsXG4gICAgc2hvd0FscGhhOiBmYWxzZSxcbiAgICBjb2xvcjogJyNmZjAwMDAnLFxuICAgIGZvcm1hdDogJ2NvbG9yJyxcbiAgICBzbEJhclNpemU6IFszMTYsIDIwMF0sXG4gICAgaHVlQmFyU2l6ZTogWzMxNiwgMjBdLFxuICAgIGFscGhhQmFyU2l6ZTogWzMxNiwgMjBdXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBsaW1pdCA9ICh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpID0+IHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIHJldHVybiBpc05hTih2YWx1ZSkgPyBtaW4gOiAodmFsdWUgPCBtaW4gPyBtaW4gOiAodmFsdWUgPiBtYXggPyBtYXggOiB2YWx1ZSkpO1xufVxuXG5leHBvcnQgY29uc3QgaHNsVG9SZ2IgPSAoaDogbnVtYmVyLCBzOiBudW1iZXIsIGw6IG51bWJlcikgPT4ge1xuICBsZXQgciwgZywgYjtcbiAgW2gsIHMsIGxdID0gW2xpbWl0KGgsIDAsIDM2MCkgLyAzNjAsIGxpbWl0KHMsIDAsIDEwMCkgLyAxMDAsIGxpbWl0KGwsIDAsIDEwMCkgLyAxMDBdO1xuXG4gIGlmIChzID09IDApIHtcbiAgICByID0gZyA9IGIgPSBsOyAvLyBhY2hyb21hdGljXG5cbiAgICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdLm1hcChNYXRoLnJvdW5kKTtcbiAgfVxuICBjb25zdCBodWVUb1JnYiA9IChwOiBudW1iZXIsIHE6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHQgPCAwKSB0ICs9IDE7XG4gICAgaWYgKHQgPiAxKSB0IC09IDE7XG4gICAgaWYgKHQgPCAxIC8gNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG4gICAgaWYgKHQgPCAxIC8gMikgcmV0dXJuIHE7XG4gICAgaWYgKHQgPCAyIC8gMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuXG4gICAgcmV0dXJuIHA7XG4gIH07XG4gIGNvbnN0IHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuICBjb25zdCBwID0gKDIgKiBsKSAtIHE7XG5cbiAgciA9IGh1ZVRvUmdiKHAsIHEsIGggKyAoMSAvIDMpKTtcbiAgZyA9IGh1ZVRvUmdiKHAsIHEsIGgpO1xuICBiID0gaHVlVG9SZ2IocCwgcSwgaCAtICgxIC8gMykpO1xuXG4gIHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV0ubWFwKE1hdGgucm91bmQpO1xufVxuXG5leHBvcnQgY29uc3QgY3NzQ29sb3JUb1JnYmEgPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBpZiAoY29sb3IpIHtcbiAgICBjb25zdCBjb2xvckJ5TmFtZSA9IGdldChDb2xvck5hbWVzLCBjb2xvci50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBbLCAsICwgciwgZywgYiwgYSwgLCByciwgZ2csIGJiLCBhYV0gPSAvXlxccyojPygoKFswLTlBLUZdKShbMC05QS1GXSkoWzAtOUEtRl0pKFswLTlBLUZdKT8pfCgoWzAtOUEtRl17Mn0pKFswLTlBLUZdezJ9KShbMC05QS1GXXsyfSkoWzAtOUEtRl17Mn0pPykpXFxzKiQvaS5leGVjKGNvbG9yQnlOYW1lIHx8IGNvbG9yKSB8fCBbXTtcbiAgICBpZiAoIWlzTmlsKHIpKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBwYXJzZUludChyICsgciwgMTYpLFxuICAgICAgICBwYXJzZUludChnICsgZywgMTYpLFxuICAgICAgICBwYXJzZUludChiICsgYiwgMTYpLFxuICAgICAgICBhID8gKygocGFyc2VJbnQoYSArIGEsIDE2KSkgLyAyNTUpLnRvRml4ZWQoMikgOiAxXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAoIWlzTmlsKHJyKSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgcGFyc2VJbnQocnIsIDE2KSxcbiAgICAgICAgcGFyc2VJbnQoZ2csIDE2KSxcbiAgICAgICAgcGFyc2VJbnQoYmIsIDE2KSxcbiAgICAgICAgYWEgPyArKChwYXJzZUludChhYSwgMTYpKSAvIDI1NSkudG9GaXhlZCgyKSA6IDFcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29sb3JUb1JnYmEgPSAoY29sb3I6IHN0cmluZyB8IEFycmF5PG51bWJlcj4pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3IpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGxpbWl0KGNvbG9yWzBdLCAwLCAyNTUpLFxuICAgICAgbGltaXQoY29sb3JbMV0sIDAsIDI1NSksXG4gICAgICBsaW1pdChjb2xvclsyXSwgMCwgMjU1KSxcbiAgICAgIGxpbWl0KGNvbG9yWzNdID8/IDEsIDAsIDEpXG4gICAgXTtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBjc3NDb2xvclRvUmdiYShjb2xvcikgfHwgY3NzUmdiYVRvUmdiYShjb2xvcik7XG5cbiAgaWYgKHBhcnNlZCAmJiBwYXJzZWQubGVuZ3RoID09PSAzKSB7XG4gICAgcGFyc2VkLnB1c2goMSk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5leHBvcnQgY29uc3QgY3NzUmdiYVRvUmdiYSA9IChyZ2JhOiBzdHJpbmcpID0+IHtcbiAgaWYgKHJnYmEpIHtcbiAgICBjb25zdCBbbSwgciwgZywgYiwgLCBhXSA9IC9ecmdiYT9cXCgoXFxkKylcXHMqW1xccyxdXFxzKihcXGQrKVxccypbXFxzLF1cXHMqKFxcZCspKFxccypbXFxzLF1cXHMqKFxcZCooLlxcZCspPykpP1xcKS9pLmV4ZWMocmdiYSkgfHwgW107XG5cbiAgICByZXR1cm4gbSA/IFtsaW1pdChyLCAwLCAyNTUpLCBsaW1pdChnLCAwLCAyNTUpLCBsaW1pdChiLCAwLCAyNTUpLCBsaW1pdChhID8/IDEsIDAsIDEpXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBjc3NIc2xhVG9Ic2xhID0gKGhzbGE6IHN0cmluZykgPT4ge1xuICBpZiAoaHNsYSkge1xuICAgIGNvbnN0IFttLCBoLCBzLCBsLCAsIGFdID0gL15oc2xhP1xcKChcXGQrKVxccypbXFxzLF1cXHMqKFxcZCspXFxzKltcXHMsXVxccyooXFxkKykoXFxzKltcXHMsXVxccyooXFxkKiguXFxkKyk/KSk/XFwpL2kuZXhlYyhoc2xhKSB8fCBbXTtcblxuICAgIHJldHVybiBtID8gW2xpbWl0KGgsIDAsIDI1NSksIGxpbWl0KHMsIDAsIDI1NSksIGxpbWl0KGwsIDAsIDI1NSksIGxpbWl0KGEgPz8gMSwgMCwgMSldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29sb3JUb0hzbGEgPSAoY29sb3I6IHN0cmluZyB8IEFycmF5PG51bWJlcj4pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3IpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGxpbWl0KGNvbG9yWzBdLCAwLCAzNjApLFxuICAgICAgbGltaXQoY29sb3JbMV0sIDAsIDEwMCksXG4gICAgICBsaW1pdChjb2xvclsyXSwgMCwgMTAwKSxcbiAgICAgIGxpbWl0KGNvbG9yWzNdID8/IDEsIDAsIDEpXG4gICAgXTtcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBjc3NIc2xhVG9Ic2xhKGNvbG9yKTtcblxuICBpZiAocGFyc2VkICYmIHBhcnNlZC5sZW5ndGggPT09IDMpIHtcbiAgICBwYXJzZWQucHVzaCgxKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmV4cG9ydCBjb25zdCByZ2JUb0hzbCA9IChyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKSA9PiB7XG4gIFtyLCBnLCBiXSA9IFtsaW1pdChyLCAwLCAyNTUpIC8gMjU1LCBsaW1pdChnLCAwLCAyNTUpIC8gMjU1LCBsaW1pdChiLCAwLCAyNTUpIC8gMjU1XTtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICBsZXQgaCwgcyA9IChtYXggKyBtaW4pIC8gMjtcbiAgY29uc3QgbCA9IChtYXggKyBtaW4pIC8gMjtcblxuICBpZiAobWF4ID09IG1pbikge1xuICAgIGggPSBzID0gMDsgLy8gYWNocm9tYXRpY1xuXG4gICAgcmV0dXJuIFtoICogMzYwLCBzICogMTAwLCBsICogMTAwXS5tYXAoTWF0aC5yb3VuZCk7XG4gIH1cbiAgY29uc3QgZCA9IG1heCAtIG1pbjtcblxuICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gIHN3aXRjaCAobWF4KSB7XG4gICAgY2FzZSByOlxuICAgICAgaCA9ICgoZyAtIGIpIC8gZCkgKyAoZyA8IGIgPyA2IDogMCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGc6XG4gICAgICBoID0gKChiIC0gcikgLyBkKSArIDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGI6XG4gICAgICBoID0gKChyIC0gZykgLyBkKSArIDQ7XG4gICAgICBicmVhaztcbiAgfVxuICBoID0gKGggfHwgMCkgLyA2O1xuXG4gIHJldHVybiBbaCAqIDM2MCwgcyAqIDEwMCwgbCAqIDEwMF0ubWFwKE1hdGgucm91bmQpO1xufVxuXG5leHBvcnQgY29uc3QgcmdiVG9IZXggPSAocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcikgPT4ge1xuICBbciwgZywgYl0gPSBbbGltaXQociwgMCwgMjU1KSwgbGltaXQoZywgMCwgMjU1KSwgbGltaXQoYiwgMCwgMjU1KV07XG5cbiAgcmV0dXJuIFwiI1wiICsgKFwiMDAwMDAwXCIgKyAoKHIgPDwgMTYpIHwgKGcgPDwgOCkgfCBiKS50b1N0cmluZygxNikpLnNsaWNlKC02KTtcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvSW50ID0gKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYjtcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvSHN2ID0gKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIpID0+IHtcbiAgW3IsIGcsIGJdID0gW2xpbWl0KHIsIDAsIDI1NSkgLyAyNTUsIGxpbWl0KGcsIDAsIDI1NSkgLyAyNTUsIGxpbWl0KGIsIDAsIDI1NSkgLyAyNTVdO1xuICBjb25zdCBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcbiAgY29uc3QgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gIGxldCBoLCBzID0gbWF4O1xuICBjb25zdCB2ID0gbWF4O1xuICBjb25zdCBkID0gbWF4IC0gbWluO1xuICBzID0gbWF4ID09PSAwID8gMCA6IGQgLyBtYXg7XG5cbiAgaWYgKG1heCA9PSBtaW4pIHtcbiAgICBoID0gMDtcblxuICAgIHJldHVybiBbaCwgcywgdl07XG4gIH1cbiAgc3dpdGNoIChtYXgpIHtcbiAgICBjYXNlIHI6IGggPSAoZyAtIGIpIC8gZCArIChnIDwgYiA/IDYgOiAwKTsgYnJlYWs7XG4gICAgY2FzZSBnOiBoID0gKGIgLSByKSAvIGQgKyAyOyBicmVhaztcbiAgICBjYXNlIGI6IGggPSAociAtIGcpIC8gZCArIDQ7IGJyZWFrO1xuICB9XG4gIGggPSAoaCB8fCAwKSAvIDY7XG5cbiAgcmV0dXJuIFtoLCBzLCB2XTtcbn1cblxuZXhwb3J0IGNvbnN0IGZvcm1hdENvbG9yID0gKGRhdGE6IEFycmF5PG51bWJlcj4sIGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAncmdiJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRhdGEuc2xpY2UoMCwgMyk7XG4gICAgY2FzZSAncmdiY3NzJzpcbiAgICAgIHJldHVybiBgcmdiKCR7ZGF0YVswXX0sICR7ZGF0YVsxXX0sICR7ZGF0YVsyXX0pYDtcbiAgICBjYXNlICdyZ2Jjc3M0JzpcbiAgICAgIHJldHVybiBgcmdiKCR7ZGF0YVswXX0sICR7ZGF0YVsxXX0sICR7ZGF0YVsyXX0sICR7ZGF0YVszXX0pYDtcbiAgICBjYXNlICdyZ2JhJzpcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIGNhc2UgJ3JnYmFjc3MnOlxuICAgICAgcmV0dXJuIGByZ2JhKCR7ZGF0YVswXX0sICR7ZGF0YVsxXX0sICR7ZGF0YVsyXX0sICR7ZGF0YVszXX0pYDtcbiAgICBjYXNlICdoc2wnOlxuICAgICAgcmV0dXJuIHJnYlRvSHNsKGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0pO1xuICAgIGNhc2UgJ2hzbGNzcyc6XG4gICAgICBkYXRhID0gcmdiVG9Ic2woZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSk7XG5cbiAgICAgIHJldHVybiBgaHNsKCR7ZGF0YVswXX0sICR7ZGF0YVsxXX0sICR7ZGF0YVsyXX0pYDtcbiAgICBjYXNlICdoc2xjc3M0Jzoge1xuICAgICAgY29uc3QgaGggPSByZ2JUb0hzbChkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdKTtcblxuICAgICAgcmV0dXJuIGBoc2woJHtoaFswXX0sICR7aGhbMV19LCAke2hoWzJdfSwgJHtkYXRhWzNdfSlgO1xuICAgIH1cbiAgICBjYXNlICdoc2xhJzpcbiAgICAgIHJldHVybiBbLi4ucmdiVG9Ic2woZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSksIGRhdGFbM11dO1xuICAgIGNhc2UgJ2hzbGFjc3MnOiB7XG4gICAgICBjb25zdCBoYSA9IHJnYlRvSHNsKGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0pO1xuXG4gICAgICByZXR1cm4gYGhzbGEoJHtoYVswXX0sICR7aGFbMV19LCAke2hhWzJdfSwgJHtkYXRhWzNdfSlgO1xuICAgIH1cbiAgICBjYXNlICdoZXgnOlxuICAgICAgcmV0dXJuIHJnYlRvSGV4KGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0pO1xuICAgIGNhc2UgJ2hleGNzczQnOlxuICAgICAgcmV0dXJuIHJnYlRvSGV4KGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0pICsgKCcwMCcgKyBwYXJzZUludCgoZGF0YVszXSAqIDI1NSkudG9TdHJpbmcoKSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XG4gICAgY2FzZSAnaW50JzpcbiAgICAgIHJldHVybiByZ2JUb0ludChkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcGFyc2VDb2xvciA9IChjb2xvcjogc3RyaW5nIHwgQXJyYXk8bnVtYmVyPiwgZm9ybWF0OiBzdHJpbmcgfCBvYmplY3QpID0+IHtcbiAgaWYgKCFpc05pbChjb2xvcikpIHtcbiAgICBsZXQgZGF0YTogQXJyYXk8bnVtYmVyPiB8IHVuZGVmaW5lZCA9IFtdO1xuXG4gICAgZGF0YSA9IHBhcnNlQ29sb3JUb1JnYmEoY29sb3IpIHx8IChwYXJzZUNvbG9yVG9Ic2xhKGNvbG9yKSAmJiBbLi4uaHNsVG9SZ2IoZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSksIGRhdGFbM11dKTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBbJ3JnYicsICdyZ2Jjc3MnLCAncmdiY3NzNCcsICdyZ2JhJywgJ3JnYmFjc3MnLCAnaHNsJywgJ2hzbGNzcycsICdoc2xjc3M0JywgJ2hzbGEnLCAnaHNsYWNzcycsICdoZXgnLCAnaGV4Y3NzNCcsICdpbnQnXS5yZWR1Y2UoKG0sIGYpID0+IHtcbiAgICAgICAgICBzZXQobSwgZiwgZm9ybWF0Q29sb3IoZGF0YSwgZikpO1xuXG4gICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH0sIGZvcm1hdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtYXRDb2xvcihkYXRhLCBmb3JtYXQgYXMgc3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNvbnN0IGNhbnZhc0hlbHBlciA9IChjYW52YXM6IGFueSkgPT4ge1xuICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgY29uc3Qgd2lkdGggPSArY2FudmFzLndpZHRoO1xuICBjb25zdCBoZWlnaHQgPSArY2FudmFzLmhlaWdodDtcbiAgY29uc3Qgd2hpdGVCbGFja0dyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDEsIDEsIDEsIGhlaWdodCAtIDEpO1xuXG4gIHdoaXRlQmxhY2tHcmFkaWVudC5hZGRDb2xvclN0b3AoMCwgJ3doaXRlJyk7XG4gIHdoaXRlQmxhY2tHcmFkaWVudC5hZGRDb2xvclN0b3AoMSwgJ2JsYWNrJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBzZXRIdWU6IChodWU6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JHcmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgxLCAwLCB3aWR0aCAtIDEsIDApO1xuICAgICAgY29sb3JHcmFkaWVudC5hZGRDb2xvclN0b3AoMCwgYGhzbGEoJHtodWV9LCAxMDAlLCA1MCUsIDApYCk7XG4gICAgICBjb2xvckdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCBgaHNsYSgke2h1ZX0sIDEwMCUsIDUwJSwgMSlgKTtcblxuICAgICAgY3R4LmZpbGxTdHlsZSA9IHdoaXRlQmxhY2tHcmFkaWVudDtcbiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvckdyYWRpZW50O1xuICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdtdWx0aXBseSc7XG4gICAgICBjdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1vdmVyJztcbiAgICB9LFxuICAgIGdyYWJDb2xvcjogKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiBjdHguZ2V0SW1hZ2VEYXRhKHgsIHksIDEsIDEpLmRhdGEsXG4gICAgZmluZENvbG9yOiAocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgWywgcywgdl0gPSByZ2JUb0hzdihyLCBnLCBiKTtcbiAgICAgIGNvbnN0IHggPSBzICogd2lkdGg7XG4gICAgICBjb25zdCB5ID0gaGVpZ2h0IC0gKHYgKiBoZWlnaHQpO1xuXG4gICAgICByZXR1cm4gW3gsIHldO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRIZWxwZXIgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgc2V0SHVlOiAoKSA9PiB7IHJldHVybiB9LFxuICAgIGdyYWJDb2xvcjogKCkgPT4gW10sXG4gICAgZmluZENvbG9yOiAoKSA9PiBbXVxuICB9O1xufSJdfQ==