@seniorsistemas/components-ai 1.2.0 → 1.3.0

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,279 @@
1
+ import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ const COLOR_MAP = {
6
+ primary: { base: 'var(--p-primary-500, #3b82f6)', light: 'var(--p-primary-300, #93c5fd)' },
7
+ secondary: { base: 'var(--p-surface-500, #64748b)', light: 'var(--p-surface-300, #cbd5e1)' },
8
+ success: { base: 'var(--p-green-500, #22c55e)', light: 'var(--p-green-300, #86efac)' },
9
+ warn: { base: 'var(--p-yellow-500, #eab308)', light: 'var(--p-yellow-300, #fde047)' },
10
+ danger: { base: 'var(--p-red-500, #ef4444)', light: 'var(--p-red-300, #fca5a5)' },
11
+ info: { base: 'var(--p-blue-500, #3b82f6)', light: 'var(--p-blue-300, #93c5fd)' },
12
+ senior: { base: '#0d9488', light: '#00c89a' },
13
+ };
14
+ const SENIOR_PATH_RIGHT = 'M174.719 518.932L258.161 439.782C264.546 433.762 269.614 426.603 273.072 418.719C276.53 410.834 278.31 402.378 278.31 393.838C278.31 385.298 276.53 376.843 273.072 368.958C269.614 361.073 264.546 353.915 258.161 347.895L174.719 269.199C168.45 263.304 163.474 256.289 160.077 248.56C156.681 240.83 154.933 232.539 154.933 224.165C154.933 215.792 156.681 207.501 160.077 199.771C163.474 192.042 168.45 185.027 174.719 179.132L303.718 301.496C329.517 326.089 344 359.371 344 394.066C344 428.76 329.517 462.043 303.718 486.635L174.719 609C168.45 603.105 163.474 596.09 160.077 588.36C156.681 580.631 154.933 572.34 154.933 563.966C154.933 555.592 156.681 547.301 160.077 539.572C163.474 531.842 168.45 524.828 174.719 518.932Z';
15
+ const SENIOR_PATH_LEFT = 'M173.76 94.0677L90.3189 173.218C83.9334 179.238 78.8659 186.397 75.408 194.281C71.95 202.166 70.1698 210.622 70.1698 219.162C70.1698 227.702 71.95 236.157 75.408 244.042C78.8659 251.927 83.9334 259.085 90.3189 265.105L173.76 344.256C180.03 350.151 185.006 357.166 188.402 364.895C191.798 372.625 193.547 380.916 193.547 389.289C193.547 397.663 191.798 405.954 188.402 413.684C185.006 421.413 180.03 428.428 173.76 434.323L44.2823 311.504C18.4832 286.911 4 253.629 4 218.934C4 184.24 18.4832 150.957 44.2823 126.365L173.76 4C186.213 16.0129 193.192 32.1861 193.192 49.0338C193.192 65.8815 186.213 82.0547 173.76 94.0677Z';
16
+ const SENIOR_PATH_FULL = SENIOR_PATH_RIGHT + ' ' + SENIOR_PATH_LEFT;
17
+ export class LoadingComponent {
18
+ variant = 'senior-reveal';
19
+ color = 'senior';
20
+ size = 40;
21
+ text = '';
22
+ padding = '3rem 0';
23
+ get colorBase() {
24
+ return (COLOR_MAP[this.color] || COLOR_MAP['senior']).base;
25
+ }
26
+ get colorLight() {
27
+ return (COLOR_MAP[this.color] || COLOR_MAP['senior']).light;
28
+ }
29
+ pathRight = SENIOR_PATH_RIGHT;
30
+ pathLeft = SENIOR_PATH_LEFT;
31
+ pathFull = SENIOR_PATH_FULL;
32
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LoadingComponent, isStandalone: true, selector: "sia-loading", inputs: { variant: "variant", color: "color", size: "size", text: "text", padding: "padding" }, ngImport: i0, template: `
34
+ <div class="sia-loading" [style.padding]="padding"
35
+ [class.sia-loading--skeleton]="variant === 'skeleton'"
36
+ [style.--sia-c]="colorBase" [style.--sia-cl]="colorLight">
37
+
38
+ <div class="sia-dots" *ngIf="variant === 'dots'">
39
+ <span class="dot" *ngFor="let d of [0,1,2]" [style.--i]="d"></span>
40
+ </div>
41
+
42
+ <div class="sia-pulse" *ngIf="variant === 'pulse'" [style.--size]="size + 'px'">
43
+ <span class="ring ring-1"></span>
44
+ <span class="ring ring-2"></span>
45
+ <span class="core"></span>
46
+ </div>
47
+
48
+ <div class="sia-bars" *ngIf="variant === 'bars'" [style.--h]="size + 'px'">
49
+ <span class="bar" *ngFor="let b of [0,1,2,3,4]" [style.--i]="b"></span>
50
+ </div>
51
+
52
+ <div class="sia-orbit" *ngIf="variant === 'orbit'" [style.--size]="size + 'px'">
53
+ <span class="orbit-track"></span>
54
+ <span class="orbit-dot orbit-dot-1"></span>
55
+ <span class="orbit-dot orbit-dot-2"></span>
56
+ </div>
57
+
58
+ <div class="sia-morph" *ngIf="variant === 'morph'" [style.--size]="size + 'px'">
59
+ <span class="morph-shape"></span>
60
+ </div>
61
+
62
+ <div class="sia-wave" *ngIf="variant === 'wave'">
63
+ <span class="wave-dot" *ngFor="let w of [0,1,2,3,4,5,6]" [style.--i]="w"></span>
64
+ </div>
65
+
66
+ <div class="sia-skeleton" *ngIf="variant === 'skeleton'">
67
+ <div class="skel-row skel-row--header">
68
+ <div class="skel-circle"></div>
69
+ <div class="skel-lines">
70
+ <div class="skel-line skel-line--md"></div>
71
+ <div class="skel-line skel-line--sm"></div>
72
+ </div>
73
+ </div>
74
+ <div class="skel-line skel-line--full"></div>
75
+ <div class="skel-line skel-line--lg"></div>
76
+ <div class="skel-line skel-line--md"></div>
77
+ </div>
78
+
79
+ <!-- ═══ SENIOR VARIANTS ═══ -->
80
+
81
+ <!-- senior-draw: stroke draw animation -->
82
+ <div class="sia-senior-draw" *ngIf="variant === 'senior-draw'" [style.--size]="size + 'px'">
83
+ <svg [attr.width]="size" [attr.height]="size" viewBox="0 0 348 613" fill="none">
84
+ <path class="sp sp-r" [attr.d]="pathRight"
85
+ [attr.stroke]="colorBase" stroke-width="6" fill="none" stroke-linecap="round" stroke-linejoin="round" />
86
+ <path class="sp sp-l" [attr.d]="pathLeft"
87
+ [attr.stroke]="colorBase" stroke-width="6" fill="none" stroke-linecap="round" stroke-linejoin="round" />
88
+ </svg>
89
+ </div>
90
+
91
+ <!-- senior-pulse: circle with logo, pulse + scale -->
92
+ <div class="sia-senior-pulse" *ngIf="variant === 'senior-pulse'" [style.--size]="size + 'px'">
93
+ <div class="sp-circle">
94
+ <svg [attr.width]="size * 0.5" [attr.height]="size * 0.88" viewBox="0 0 348 613" fill="none">
95
+ <path [attr.d]="pathFull" fill="white" />
96
+ </svg>
97
+ </div>
98
+ </div>
99
+
100
+ <!-- senior-glow: neon glow with breathing -->
101
+ <div class="sia-senior-glow" *ngIf="variant === 'senior-glow'" [style.--size]="size + 'px'">
102
+ <svg [attr.width]="size" [attr.height]="size" viewBox="0 0 348 613" fill="none">
103
+ <path class="glow-shadow" [attr.d]="pathFull" [attr.stroke]="colorLight" stroke-width="12" fill="none" />
104
+ <path class="glow-main" [attr.d]="pathFull" [attr.stroke]="colorBase" stroke-width="4" fill="none" />
105
+ </svg>
106
+ </div>
107
+
108
+ <!-- senior-flip: 3D Y-axis flip -->
109
+ <div class="sia-senior-flip" *ngIf="variant === 'senior-flip'" [style.--size]="size + 'px'">
110
+ <svg [attr.width]="size" [attr.height]="size" viewBox="0 0 348 613" fill="none">
111
+ <path [attr.d]="pathFull" [attr.fill]="colorBase" />
112
+ </svg>
113
+ </div>
114
+
115
+ <!-- senior-bounce: alternating halves bounce -->
116
+ <div class="sia-senior-bounce" *ngIf="variant === 'senior-bounce'" [style.--size]="size + 'px'">
117
+ <svg [attr.width]="size" [attr.height]="size" viewBox="0 0 348 613" fill="none">
118
+ <path class="bounce-r" [attr.d]="pathRight" [attr.fill]="colorBase" />
119
+ <path class="bounce-l" [attr.d]="pathLeft" [attr.fill]="colorLight" />
120
+ </svg>
121
+ </div>
122
+
123
+ <!-- senior-reveal: tennis ball bouncing with Senior logo inside -->
124
+ <div class="sia-senior-reveal" *ngIf="variant === 'senior-reveal'" [style.--size]="size * 1.3 + 'px'">
125
+ <!-- Tennis ball with Senior logo inside -->
126
+ <svg class="sr-ball" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
127
+ <defs>
128
+ <clipPath id="sr-clip"><circle cx="50" cy="50" r="48" /></clipPath>
129
+ </defs>
130
+ <circle cx="50" cy="50" r="48" [attr.fill]="colorBase" />
131
+ <g clip-path="url(#sr-clip)">
132
+ <!-- top-right seam curve -->
133
+ <path d="M38 -2 C58 18, 62 38, 102 48" stroke="white" stroke-width="9" fill="none" stroke-linecap="round" opacity="0.15" />
134
+ <path d="M38 -2 C58 18, 62 38, 102 48" stroke="white" stroke-width="4" fill="none" stroke-linecap="round" opacity="0.8" />
135
+ <!-- bottom-left seam curve -->
136
+ <path d="M-2 52 C38 62, 42 82, 62 102" stroke="white" stroke-width="9" fill="none" stroke-linecap="round" opacity="0.15" />
137
+ <path d="M-2 52 C38 62, 42 82, 62 102" stroke="white" stroke-width="4" fill="none" stroke-linecap="round" opacity="0.8" />
138
+ <g transform="translate(32.6, 19.4) scale(0.10)">
139
+ <path [attr.d]="pathFull" fill="white" opacity="0.8" />
140
+ </g>
141
+ </g>
142
+ </svg>
143
+ <div class="sr-shadow"></div>
144
+ </div>
145
+
146
+ <span class="sia-loading-text" *ngIf="text && variant !== 'skeleton'">{{ text }}</span>
147
+ </div>
148
+ `, isInline: true, styles: [":host{display:block}.sia-loading{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:.75rem;padding:3rem 0}.sia-loading--skeleton{align-items:stretch}.sia-loading-text{color:var(--p-text-muted-color, #94a3b8);font-size:.8rem;letter-spacing:.02em}.sia-dots{display:flex;gap:6px;align-items:center}.sia-dots .dot{width:10px;height:10px;border-radius:50%;background:var(--sia-c);animation:sia-dot-bounce 1.2s calc(var(--i) * .15s) ease-in-out infinite}@keyframes sia-dot-bounce{0%,60%,to{transform:translateY(0) scale(1);opacity:.4}30%{transform:translateY(-12px) scale(1.15);opacity:1}}.sia-pulse{position:relative;width:var(--size, 40px);height:var(--size, 40px)}.sia-pulse .ring{position:absolute;inset:0;border-radius:50%;border:2px solid var(--sia-c);opacity:0}.sia-pulse .ring-1{animation:sia-ripple 1.8s 0s ease-out infinite}.sia-pulse .ring-2{animation:sia-ripple 1.8s .6s ease-out infinite}.sia-pulse .core{position:absolute;top:50%;left:50%;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:var(--sia-c);animation:sia-core-pulse 1.8s ease-in-out infinite}@keyframes sia-ripple{0%{transform:scale(.3);opacity:.8}to{transform:scale(1);opacity:0}}@keyframes sia-core-pulse{0%,to{transform:scale(1);opacity:.6}50%{transform:scale(1.3);opacity:1}}.sia-bars{display:flex;align-items:center;gap:3px;height:var(--h, 40px)}.sia-bars .bar{width:4px;height:40%;border-radius:2px;background:var(--sia-c);animation:sia-bar-wave 1s calc(var(--i) * .1s) ease-in-out infinite}@keyframes sia-bar-wave{0%,to{height:20%;opacity:.4}50%{height:100%;opacity:1}}.sia-orbit{position:relative;width:var(--size, 40px);height:var(--size, 40px)}.sia-orbit .orbit-track{position:absolute;inset:0;border-radius:50%;border:1.5px solid var(--p-surface-200, #e2e8f0)}.sia-orbit .orbit-dot{position:absolute;width:8px;height:8px;border-radius:50%;top:-4px;left:calc(50% - 4px)}.sia-orbit .orbit-dot-1{background:var(--sia-c);animation:sia-orbit-spin 1.4s linear infinite;transform-origin:50% calc(var(--size, 40px) / 2 + 4px)}.sia-orbit .orbit-dot-2{background:var(--sia-cl);animation:sia-orbit-spin 1.4s .7s linear infinite;transform-origin:50% calc(var(--size, 40px) / 2 + 4px)}@keyframes sia-orbit-spin{to{transform:rotate(360deg)}}.sia-morph{width:var(--size, 40px);height:var(--size, 40px);display:flex;align-items:center;justify-content:center}.sia-morph .morph-shape{width:70%;height:70%;background:var(--sia-c);animation:sia-morph 2.4s ease-in-out infinite}@keyframes sia-morph{0%{border-radius:50%;transform:rotate(0) scale(1)}25%{border-radius:30% 70% 50% 50%;transform:rotate(90deg) scale(.85)}50%{border-radius:50% 30% 70%;transform:rotate(180deg) scale(1)}75%{border-radius:70% 50% 30% 70%;transform:rotate(270deg) scale(.85)}to{border-radius:50%;transform:rotate(360deg) scale(1)}}.sia-wave{display:flex;align-items:center;gap:3px}.sia-wave .wave-dot{width:6px;height:6px;border-radius:50%;background:var(--sia-c);animation:sia-wave-flow 1.6s calc(var(--i) * .12s) ease-in-out infinite}@keyframes sia-wave-flow{0%,to{transform:translateY(0) scale(.6);opacity:.3}50%{transform:translateY(-10px) scale(1);opacity:1}}.sia-skeleton{display:flex;flex-direction:column;gap:.75rem;padding:0 1rem;width:100%}.skel-row{display:flex;align-items:center;gap:.75rem}.skel-row--header{margin-bottom:.25rem}.skel-circle{width:36px;height:36px;border-radius:50%;flex-shrink:0;background:var(--p-surface-200, #e2e8f0);animation:sia-shimmer 1.6s ease-in-out infinite}.skel-lines{flex:1;display:flex;flex-direction:column;gap:.4rem}.skel-line{height:10px;border-radius:4px;background:var(--p-surface-200, #e2e8f0);animation:sia-shimmer 1.6s ease-in-out infinite}.skel-line--full{width:100%;animation-delay:.1s}.skel-line--lg{width:75%;animation-delay:.2s}.skel-line--md{width:55%;animation-delay:.3s}.skel-line--sm{width:35%;animation-delay:.15s}@keyframes sia-shimmer{0%,to{opacity:.4}50%{opacity:1}}.sia-senior-draw{width:var(--size, 40px);height:var(--size, 40px);display:flex;align-items:center;justify-content:center}.sia-senior-draw .sp{stroke-dasharray:1200;stroke-dashoffset:1200}.sia-senior-draw .sp-r{animation:sia-sd-r 2s ease-in-out infinite}.sia-senior-draw .sp-l{animation:sia-sd-l 2s ease-in-out infinite}@keyframes sia-sd-r{0%{stroke-dashoffset:1200;opacity:.2}35%{stroke-dashoffset:0;opacity:1}60%{stroke-dashoffset:0;opacity:1}to{stroke-dashoffset:-1200;opacity:.2}}@keyframes sia-sd-l{0%{stroke-dashoffset:1200;opacity:.2}15%{stroke-dashoffset:1200;opacity:.2}50%{stroke-dashoffset:0;opacity:1}65%{stroke-dashoffset:0;opacity:1}to{stroke-dashoffset:-1200;opacity:.2}}.sia-senior-pulse{display:flex;align-items:center;justify-content:center}.sia-senior-pulse .sp-circle{width:var(--size, 64px);height:var(--size, 64px);border-radius:50%;background-color:var(--sia-c);display:flex;align-items:center;justify-content:center;position:relative;animation:sia-sp-pulse 1.4s ease-out infinite,sia-sp-scale 1.4s ease-in-out infinite}@keyframes sia-sp-pulse{0%{box-shadow:0 0 0 0 var(--sia-cl)}70%{box-shadow:0 0 0 20px transparent}to{box-shadow:0 0 0 0 transparent}}@keyframes sia-sp-scale{0%,to{transform:scale(1)}50%{transform:scale(1.12)}}.sia-senior-glow{width:var(--size, 40px);height:var(--size, 40px);display:flex;align-items:center;justify-content:center}.sia-senior-glow .glow-shadow{opacity:.3;filter:blur(4px);animation:sia-sg-breathe 2s ease-in-out infinite}.sia-senior-glow .glow-main{animation:sia-sg-breathe 2s ease-in-out infinite}@keyframes sia-sg-breathe{0%,to{opacity:.4;filter:drop-shadow(0 0 2px var(--sia-cl))}50%{opacity:1;filter:drop-shadow(0 0 10px var(--sia-cl)) drop-shadow(0 0 20px var(--sia-c))}}.sia-senior-flip{width:var(--size, 40px);height:var(--size, 40px);display:flex;align-items:center;justify-content:center;perspective:300px}.sia-senior-flip svg{animation:sia-sf-flip 2s ease-in-out infinite;transform-style:preserve-3d}@keyframes sia-sf-flip{0%{transform:rotateY(0)}50%{transform:rotateY(180deg)}to{transform:rotateY(360deg)}}.sia-senior-bounce{width:var(--size, 40px);height:var(--size, 40px);display:flex;align-items:center;justify-content:center}.sia-senior-bounce .bounce-r{animation:sia-sb-r 1.2s ease-in-out infinite;transform-origin:center center}.sia-senior-bounce .bounce-l{animation:sia-sb-l 1.2s ease-in-out infinite;transform-origin:center center}@keyframes sia-sb-r{0%,to{transform:translateY(0) scale(1);opacity:.7}50%{transform:translateY(-8px) scale(1.05);opacity:1}}@keyframes sia-sb-l{0%,to{transform:translateY(-8px) scale(1.05);opacity:1}50%{transform:translateY(0) scale(1);opacity:.7}}.sia-senior-reveal{width:var(--size, 64px);height:calc(var(--size, 64px) * 1.4);position:relative;display:flex;align-items:center;justify-content:center}.sia-senior-reveal .sr-ball{position:absolute;width:var(--size, 64px);height:var(--size, 64px);border-radius:50%;overflow:hidden;animation:sia-sr-bounce 1.2s ease-in-out infinite}.sia-senior-reveal .sr-shadow{position:absolute;bottom:0;width:60%;height:6px;border-radius:50%;background:#0000001f;animation:sia-sr-shadow 1.2s ease-in-out infinite}@keyframes sia-sr-bounce{0%,to{transform:translateY(20%) scaleX(1.06) scaleY(.94)}50%{transform:translateY(-25%) scaleX(.96) scaleY(1.04)}}@keyframes sia-sr-shadow{0%,to{transform:scaleX(1);opacity:.12}50%{transform:scaleX(.6);opacity:.06}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
149
+ }
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoadingComponent, decorators: [{
151
+ type: Component,
152
+ args: [{ selector: 'sia-loading', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule], template: `
153
+ <div class="sia-loading" [style.padding]="padding"
154
+ [class.sia-loading--skeleton]="variant === 'skeleton'"
155
+ [style.--sia-c]="colorBase" [style.--sia-cl]="colorLight">
156
+
157
+ <div class="sia-dots" *ngIf="variant === 'dots'">
158
+ <span class="dot" *ngFor="let d of [0,1,2]" [style.--i]="d"></span>
159
+ </div>
160
+
161
+ <div class="sia-pulse" *ngIf="variant === 'pulse'" [style.--size]="size + 'px'">
162
+ <span class="ring ring-1"></span>
163
+ <span class="ring ring-2"></span>
164
+ <span class="core"></span>
165
+ </div>
166
+
167
+ <div class="sia-bars" *ngIf="variant === 'bars'" [style.--h]="size + 'px'">
168
+ <span class="bar" *ngFor="let b of [0,1,2,3,4]" [style.--i]="b"></span>
169
+ </div>
170
+
171
+ <div class="sia-orbit" *ngIf="variant === 'orbit'" [style.--size]="size + 'px'">
172
+ <span class="orbit-track"></span>
173
+ <span class="orbit-dot orbit-dot-1"></span>
174
+ <span class="orbit-dot orbit-dot-2"></span>
175
+ </div>
176
+
177
+ <div class="sia-morph" *ngIf="variant === 'morph'" [style.--size]="size + 'px'">
178
+ <span class="morph-shape"></span>
179
+ </div>
180
+
181
+ <div class="sia-wave" *ngIf="variant === 'wave'">
182
+ <span class="wave-dot" *ngFor="let w of [0,1,2,3,4,5,6]" [style.--i]="w"></span>
183
+ </div>
184
+
185
+ <div class="sia-skeleton" *ngIf="variant === 'skeleton'">
186
+ <div class="skel-row skel-row--header">
187
+ <div class="skel-circle"></div>
188
+ <div class="skel-lines">
189
+ <div class="skel-line skel-line--md"></div>
190
+ <div class="skel-line skel-line--sm"></div>
191
+ </div>
192
+ </div>
193
+ <div class="skel-line skel-line--full"></div>
194
+ <div class="skel-line skel-line--lg"></div>
195
+ <div class="skel-line skel-line--md"></div>
196
+ </div>
197
+
198
+ <!-- ═══ SENIOR VARIANTS ═══ -->
199
+
200
+ <!-- senior-draw: stroke draw animation -->
201
+ <div class="sia-senior-draw" *ngIf="variant === 'senior-draw'" [style.--size]="size + 'px'">
202
+ <svg [attr.width]="size" [attr.height]="size" viewBox="0 0 348 613" fill="none">
203
+ <path class="sp sp-r" [attr.d]="pathRight"
204
+ [attr.stroke]="colorBase" stroke-width="6" fill="none" stroke-linecap="round" stroke-linejoin="round" />
205
+ <path class="sp sp-l" [attr.d]="pathLeft"
206
+ [attr.stroke]="colorBase" stroke-width="6" fill="none" stroke-linecap="round" stroke-linejoin="round" />
207
+ </svg>
208
+ </div>
209
+
210
+ <!-- senior-pulse: circle with logo, pulse + scale -->
211
+ <div class="sia-senior-pulse" *ngIf="variant === 'senior-pulse'" [style.--size]="size + 'px'">
212
+ <div class="sp-circle">
213
+ <svg [attr.width]="size * 0.5" [attr.height]="size * 0.88" viewBox="0 0 348 613" fill="none">
214
+ <path [attr.d]="pathFull" fill="white" />
215
+ </svg>
216
+ </div>
217
+ </div>
218
+
219
+ <!-- senior-glow: neon glow with breathing -->
220
+ <div class="sia-senior-glow" *ngIf="variant === 'senior-glow'" [style.--size]="size + 'px'">
221
+ <svg [attr.width]="size" [attr.height]="size" viewBox="0 0 348 613" fill="none">
222
+ <path class="glow-shadow" [attr.d]="pathFull" [attr.stroke]="colorLight" stroke-width="12" fill="none" />
223
+ <path class="glow-main" [attr.d]="pathFull" [attr.stroke]="colorBase" stroke-width="4" fill="none" />
224
+ </svg>
225
+ </div>
226
+
227
+ <!-- senior-flip: 3D Y-axis flip -->
228
+ <div class="sia-senior-flip" *ngIf="variant === 'senior-flip'" [style.--size]="size + 'px'">
229
+ <svg [attr.width]="size" [attr.height]="size" viewBox="0 0 348 613" fill="none">
230
+ <path [attr.d]="pathFull" [attr.fill]="colorBase" />
231
+ </svg>
232
+ </div>
233
+
234
+ <!-- senior-bounce: alternating halves bounce -->
235
+ <div class="sia-senior-bounce" *ngIf="variant === 'senior-bounce'" [style.--size]="size + 'px'">
236
+ <svg [attr.width]="size" [attr.height]="size" viewBox="0 0 348 613" fill="none">
237
+ <path class="bounce-r" [attr.d]="pathRight" [attr.fill]="colorBase" />
238
+ <path class="bounce-l" [attr.d]="pathLeft" [attr.fill]="colorLight" />
239
+ </svg>
240
+ </div>
241
+
242
+ <!-- senior-reveal: tennis ball bouncing with Senior logo inside -->
243
+ <div class="sia-senior-reveal" *ngIf="variant === 'senior-reveal'" [style.--size]="size * 1.3 + 'px'">
244
+ <!-- Tennis ball with Senior logo inside -->
245
+ <svg class="sr-ball" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
246
+ <defs>
247
+ <clipPath id="sr-clip"><circle cx="50" cy="50" r="48" /></clipPath>
248
+ </defs>
249
+ <circle cx="50" cy="50" r="48" [attr.fill]="colorBase" />
250
+ <g clip-path="url(#sr-clip)">
251
+ <!-- top-right seam curve -->
252
+ <path d="M38 -2 C58 18, 62 38, 102 48" stroke="white" stroke-width="9" fill="none" stroke-linecap="round" opacity="0.15" />
253
+ <path d="M38 -2 C58 18, 62 38, 102 48" stroke="white" stroke-width="4" fill="none" stroke-linecap="round" opacity="0.8" />
254
+ <!-- bottom-left seam curve -->
255
+ <path d="M-2 52 C38 62, 42 82, 62 102" stroke="white" stroke-width="9" fill="none" stroke-linecap="round" opacity="0.15" />
256
+ <path d="M-2 52 C38 62, 42 82, 62 102" stroke="white" stroke-width="4" fill="none" stroke-linecap="round" opacity="0.8" />
257
+ <g transform="translate(32.6, 19.4) scale(0.10)">
258
+ <path [attr.d]="pathFull" fill="white" opacity="0.8" />
259
+ </g>
260
+ </g>
261
+ </svg>
262
+ <div class="sr-shadow"></div>
263
+ </div>
264
+
265
+ <span class="sia-loading-text" *ngIf="text && variant !== 'skeleton'">{{ text }}</span>
266
+ </div>
267
+ `, styles: [":host{display:block}.sia-loading{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:.75rem;padding:3rem 0}.sia-loading--skeleton{align-items:stretch}.sia-loading-text{color:var(--p-text-muted-color, #94a3b8);font-size:.8rem;letter-spacing:.02em}.sia-dots{display:flex;gap:6px;align-items:center}.sia-dots .dot{width:10px;height:10px;border-radius:50%;background:var(--sia-c);animation:sia-dot-bounce 1.2s calc(var(--i) * .15s) ease-in-out infinite}@keyframes sia-dot-bounce{0%,60%,to{transform:translateY(0) scale(1);opacity:.4}30%{transform:translateY(-12px) scale(1.15);opacity:1}}.sia-pulse{position:relative;width:var(--size, 40px);height:var(--size, 40px)}.sia-pulse .ring{position:absolute;inset:0;border-radius:50%;border:2px solid var(--sia-c);opacity:0}.sia-pulse .ring-1{animation:sia-ripple 1.8s 0s ease-out infinite}.sia-pulse .ring-2{animation:sia-ripple 1.8s .6s ease-out infinite}.sia-pulse .core{position:absolute;top:50%;left:50%;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:var(--sia-c);animation:sia-core-pulse 1.8s ease-in-out infinite}@keyframes sia-ripple{0%{transform:scale(.3);opacity:.8}to{transform:scale(1);opacity:0}}@keyframes sia-core-pulse{0%,to{transform:scale(1);opacity:.6}50%{transform:scale(1.3);opacity:1}}.sia-bars{display:flex;align-items:center;gap:3px;height:var(--h, 40px)}.sia-bars .bar{width:4px;height:40%;border-radius:2px;background:var(--sia-c);animation:sia-bar-wave 1s calc(var(--i) * .1s) ease-in-out infinite}@keyframes sia-bar-wave{0%,to{height:20%;opacity:.4}50%{height:100%;opacity:1}}.sia-orbit{position:relative;width:var(--size, 40px);height:var(--size, 40px)}.sia-orbit .orbit-track{position:absolute;inset:0;border-radius:50%;border:1.5px solid var(--p-surface-200, #e2e8f0)}.sia-orbit .orbit-dot{position:absolute;width:8px;height:8px;border-radius:50%;top:-4px;left:calc(50% - 4px)}.sia-orbit .orbit-dot-1{background:var(--sia-c);animation:sia-orbit-spin 1.4s linear infinite;transform-origin:50% calc(var(--size, 40px) / 2 + 4px)}.sia-orbit .orbit-dot-2{background:var(--sia-cl);animation:sia-orbit-spin 1.4s .7s linear infinite;transform-origin:50% calc(var(--size, 40px) / 2 + 4px)}@keyframes sia-orbit-spin{to{transform:rotate(360deg)}}.sia-morph{width:var(--size, 40px);height:var(--size, 40px);display:flex;align-items:center;justify-content:center}.sia-morph .morph-shape{width:70%;height:70%;background:var(--sia-c);animation:sia-morph 2.4s ease-in-out infinite}@keyframes sia-morph{0%{border-radius:50%;transform:rotate(0) scale(1)}25%{border-radius:30% 70% 50% 50%;transform:rotate(90deg) scale(.85)}50%{border-radius:50% 30% 70%;transform:rotate(180deg) scale(1)}75%{border-radius:70% 50% 30% 70%;transform:rotate(270deg) scale(.85)}to{border-radius:50%;transform:rotate(360deg) scale(1)}}.sia-wave{display:flex;align-items:center;gap:3px}.sia-wave .wave-dot{width:6px;height:6px;border-radius:50%;background:var(--sia-c);animation:sia-wave-flow 1.6s calc(var(--i) * .12s) ease-in-out infinite}@keyframes sia-wave-flow{0%,to{transform:translateY(0) scale(.6);opacity:.3}50%{transform:translateY(-10px) scale(1);opacity:1}}.sia-skeleton{display:flex;flex-direction:column;gap:.75rem;padding:0 1rem;width:100%}.skel-row{display:flex;align-items:center;gap:.75rem}.skel-row--header{margin-bottom:.25rem}.skel-circle{width:36px;height:36px;border-radius:50%;flex-shrink:0;background:var(--p-surface-200, #e2e8f0);animation:sia-shimmer 1.6s ease-in-out infinite}.skel-lines{flex:1;display:flex;flex-direction:column;gap:.4rem}.skel-line{height:10px;border-radius:4px;background:var(--p-surface-200, #e2e8f0);animation:sia-shimmer 1.6s ease-in-out infinite}.skel-line--full{width:100%;animation-delay:.1s}.skel-line--lg{width:75%;animation-delay:.2s}.skel-line--md{width:55%;animation-delay:.3s}.skel-line--sm{width:35%;animation-delay:.15s}@keyframes sia-shimmer{0%,to{opacity:.4}50%{opacity:1}}.sia-senior-draw{width:var(--size, 40px);height:var(--size, 40px);display:flex;align-items:center;justify-content:center}.sia-senior-draw .sp{stroke-dasharray:1200;stroke-dashoffset:1200}.sia-senior-draw .sp-r{animation:sia-sd-r 2s ease-in-out infinite}.sia-senior-draw .sp-l{animation:sia-sd-l 2s ease-in-out infinite}@keyframes sia-sd-r{0%{stroke-dashoffset:1200;opacity:.2}35%{stroke-dashoffset:0;opacity:1}60%{stroke-dashoffset:0;opacity:1}to{stroke-dashoffset:-1200;opacity:.2}}@keyframes sia-sd-l{0%{stroke-dashoffset:1200;opacity:.2}15%{stroke-dashoffset:1200;opacity:.2}50%{stroke-dashoffset:0;opacity:1}65%{stroke-dashoffset:0;opacity:1}to{stroke-dashoffset:-1200;opacity:.2}}.sia-senior-pulse{display:flex;align-items:center;justify-content:center}.sia-senior-pulse .sp-circle{width:var(--size, 64px);height:var(--size, 64px);border-radius:50%;background-color:var(--sia-c);display:flex;align-items:center;justify-content:center;position:relative;animation:sia-sp-pulse 1.4s ease-out infinite,sia-sp-scale 1.4s ease-in-out infinite}@keyframes sia-sp-pulse{0%{box-shadow:0 0 0 0 var(--sia-cl)}70%{box-shadow:0 0 0 20px transparent}to{box-shadow:0 0 0 0 transparent}}@keyframes sia-sp-scale{0%,to{transform:scale(1)}50%{transform:scale(1.12)}}.sia-senior-glow{width:var(--size, 40px);height:var(--size, 40px);display:flex;align-items:center;justify-content:center}.sia-senior-glow .glow-shadow{opacity:.3;filter:blur(4px);animation:sia-sg-breathe 2s ease-in-out infinite}.sia-senior-glow .glow-main{animation:sia-sg-breathe 2s ease-in-out infinite}@keyframes sia-sg-breathe{0%,to{opacity:.4;filter:drop-shadow(0 0 2px var(--sia-cl))}50%{opacity:1;filter:drop-shadow(0 0 10px var(--sia-cl)) drop-shadow(0 0 20px var(--sia-c))}}.sia-senior-flip{width:var(--size, 40px);height:var(--size, 40px);display:flex;align-items:center;justify-content:center;perspective:300px}.sia-senior-flip svg{animation:sia-sf-flip 2s ease-in-out infinite;transform-style:preserve-3d}@keyframes sia-sf-flip{0%{transform:rotateY(0)}50%{transform:rotateY(180deg)}to{transform:rotateY(360deg)}}.sia-senior-bounce{width:var(--size, 40px);height:var(--size, 40px);display:flex;align-items:center;justify-content:center}.sia-senior-bounce .bounce-r{animation:sia-sb-r 1.2s ease-in-out infinite;transform-origin:center center}.sia-senior-bounce .bounce-l{animation:sia-sb-l 1.2s ease-in-out infinite;transform-origin:center center}@keyframes sia-sb-r{0%,to{transform:translateY(0) scale(1);opacity:.7}50%{transform:translateY(-8px) scale(1.05);opacity:1}}@keyframes sia-sb-l{0%,to{transform:translateY(-8px) scale(1.05);opacity:1}50%{transform:translateY(0) scale(1);opacity:.7}}.sia-senior-reveal{width:var(--size, 64px);height:calc(var(--size, 64px) * 1.4);position:relative;display:flex;align-items:center;justify-content:center}.sia-senior-reveal .sr-ball{position:absolute;width:var(--size, 64px);height:var(--size, 64px);border-radius:50%;overflow:hidden;animation:sia-sr-bounce 1.2s ease-in-out infinite}.sia-senior-reveal .sr-shadow{position:absolute;bottom:0;width:60%;height:6px;border-radius:50%;background:#0000001f;animation:sia-sr-shadow 1.2s ease-in-out infinite}@keyframes sia-sr-bounce{0%,to{transform:translateY(20%) scaleX(1.06) scaleY(.94)}50%{transform:translateY(-25%) scaleX(.96) scaleY(1.04)}}@keyframes sia-sr-shadow{0%,to{transform:scaleX(1);opacity:.12}50%{transform:scaleX(.6);opacity:.06}}\n"] }]
268
+ }], propDecorators: { variant: [{
269
+ type: Input
270
+ }], color: [{
271
+ type: Input
272
+ }], size: [{
273
+ type: Input
274
+ }], text: [{
275
+ type: Input
276
+ }], padding: [{
277
+ type: Input
278
+ }] } });
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLWFpL3NyYy9saWIvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBTy9DLE1BQU0sU0FBUyxHQUEwRDtJQUN2RSxPQUFPLEVBQUksRUFBRSxJQUFJLEVBQUUsK0JBQStCLEVBQUcsS0FBSyxFQUFFLCtCQUErQixFQUFFO0lBQzdGLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSwrQkFBK0IsRUFBRyxLQUFLLEVBQUUsK0JBQStCLEVBQUU7SUFDN0YsT0FBTyxFQUFJLEVBQUUsSUFBSSxFQUFFLDZCQUE2QixFQUFLLEtBQUssRUFBRSw2QkFBNkIsRUFBRTtJQUMzRixJQUFJLEVBQU8sRUFBRSxJQUFJLEVBQUUsOEJBQThCLEVBQUksS0FBSyxFQUFFLDhCQUE4QixFQUFFO0lBQzVGLE1BQU0sRUFBSyxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7SUFDekYsSUFBSSxFQUFPLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFNLEtBQUssRUFBRSw0QkFBNEIsRUFBRTtJQUMxRixNQUFNLEVBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUF5QixLQUFLLEVBQUUsU0FBUyxFQUFFO0NBQ3hFLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHLG90QkFBb3RCLENBQUM7QUFDL3VCLE1BQU0sZ0JBQWdCLEdBQUcsNm1CQUE2bUIsQ0FBQztBQUN2b0IsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsZ0JBQWdCLENBQUM7QUFrVnBFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsT0FBTyxHQUFtQixlQUFlLENBQUM7SUFDMUMsS0FBSyxHQUFpQixRQUFRLENBQUM7SUFDL0IsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLE9BQU8sR0FBVyxRQUFRLENBQUM7SUFFcEMsSUFBSSxTQUFTO1FBQ1gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUQsQ0FBQztJQUVELFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztJQUM5QixRQUFRLEdBQUcsZ0JBQWdCLENBQUM7SUFDNUIsUUFBUSxHQUFHLGdCQUFnQixDQUFDO3dHQWpCakIsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsdUtBM1VqQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1IVCwrdE9BcEhTLFlBQVk7OzRGQTRVWCxnQkFBZ0I7a0JBaFY1QixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1IVDs4QkF5TlEsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBMb2FkaW5nVmFyaWFudCA9XG4gIHwgJ2RvdHMnIHwgJ3B1bHNlJyB8ICdiYXJzJyB8ICdvcmJpdCcgfCAnbW9ycGgnIHwgJ3dhdmUnIHwgJ3NrZWxldG9uJ1xuICB8ICdzZW5pb3ItZHJhdycgfCAnc2VuaW9yLXB1bHNlJyB8ICdzZW5pb3ItZ2xvdycgfCAnc2VuaW9yLWZsaXAnIHwgJ3Nlbmlvci1ib3VuY2UnIHwgJ3Nlbmlvci1yZXZlYWwnO1xuZXhwb3J0IHR5cGUgTG9hZGluZ0NvbG9yID0gJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnc3VjY2VzcycgfCAnd2FybicgfCAnZGFuZ2VyJyB8ICdpbmZvJyB8ICdzZW5pb3InO1xuXG5jb25zdCBDT0xPUl9NQVA6IFJlY29yZDxMb2FkaW5nQ29sb3IsIHsgYmFzZTogc3RyaW5nOyBsaWdodDogc3RyaW5nIH0+ID0ge1xuICBwcmltYXJ5OiAgIHsgYmFzZTogJ3ZhcigtLXAtcHJpbWFyeS01MDAsICMzYjgyZjYpJywgIGxpZ2h0OiAndmFyKC0tcC1wcmltYXJ5LTMwMCwgIzkzYzVmZCknIH0sXG4gIHNlY29uZGFyeTogeyBiYXNlOiAndmFyKC0tcC1zdXJmYWNlLTUwMCwgIzY0NzQ4YiknLCAgbGlnaHQ6ICd2YXIoLS1wLXN1cmZhY2UtMzAwLCAjY2JkNWUxKScgfSxcbiAgc3VjY2VzczogICB7IGJhc2U6ICd2YXIoLS1wLWdyZWVuLTUwMCwgIzIyYzU1ZSknLCAgICBsaWdodDogJ3ZhcigtLXAtZ3JlZW4tMzAwLCAjODZlZmFjKScgfSxcbiAgd2FybjogICAgICB7IGJhc2U6ICd2YXIoLS1wLXllbGxvdy01MDAsICNlYWIzMDgpJywgICBsaWdodDogJ3ZhcigtLXAteWVsbG93LTMwMCwgI2ZkZTA0NyknIH0sXG4gIGRhbmdlcjogICAgeyBiYXNlOiAndmFyKC0tcC1yZWQtNTAwLCAjZWY0NDQ0KScsICAgICAgbGlnaHQ6ICd2YXIoLS1wLXJlZC0zMDAsICNmY2E1YTUpJyB9LFxuICBpbmZvOiAgICAgIHsgYmFzZTogJ3ZhcigtLXAtYmx1ZS01MDAsICMzYjgyZjYpJywgICAgIGxpZ2h0OiAndmFyKC0tcC1ibHVlLTMwMCwgIzkzYzVmZCknIH0sXG4gIHNlbmlvcjogICAgeyBiYXNlOiAnIzBkOTQ4OCcsICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQ6ICcjMDBjODlhJyB9LFxufTtcblxuY29uc3QgU0VOSU9SX1BBVEhfUklHSFQgPSAnTTE3NC43MTkgNTE4LjkzMkwyNTguMTYxIDQzOS43ODJDMjY0LjU0NiA0MzMuNzYyIDI2OS42MTQgNDI2LjYwMyAyNzMuMDcyIDQxOC43MTlDMjc2LjUzIDQxMC44MzQgMjc4LjMxIDQwMi4zNzggMjc4LjMxIDM5My44MzhDMjc4LjMxIDM4NS4yOTggMjc2LjUzIDM3Ni44NDMgMjczLjA3MiAzNjguOTU4QzI2OS42MTQgMzYxLjA3MyAyNjQuNTQ2IDM1My45MTUgMjU4LjE2MSAzNDcuODk1TDE3NC43MTkgMjY5LjE5OUMxNjguNDUgMjYzLjMwNCAxNjMuNDc0IDI1Ni4yODkgMTYwLjA3NyAyNDguNTZDMTU2LjY4MSAyNDAuODMgMTU0LjkzMyAyMzIuNTM5IDE1NC45MzMgMjI0LjE2NUMxNTQuOTMzIDIxNS43OTIgMTU2LjY4MSAyMDcuNTAxIDE2MC4wNzcgMTk5Ljc3MUMxNjMuNDc0IDE5Mi4wNDIgMTY4LjQ1IDE4NS4wMjcgMTc0LjcxOSAxNzkuMTMyTDMwMy43MTggMzAxLjQ5NkMzMjkuNTE3IDMyNi4wODkgMzQ0IDM1OS4zNzEgMzQ0IDM5NC4wNjZDMzQ0IDQyOC43NiAzMjkuNTE3IDQ2Mi4wNDMgMzAzLjcxOCA0ODYuNjM1TDE3NC43MTkgNjA5QzE2OC40NSA2MDMuMTA1IDE2My40NzQgNTk2LjA5IDE2MC4wNzcgNTg4LjM2QzE1Ni42ODEgNTgwLjYzMSAxNTQuOTMzIDU3Mi4zNCAxNTQuOTMzIDU2My45NjZDMTU0LjkzMyA1NTUuNTkyIDE1Ni42ODEgNTQ3LjMwMSAxNjAuMDc3IDUzOS41NzJDMTYzLjQ3NCA1MzEuODQyIDE2OC40NSA1MjQuODI4IDE3NC43MTkgNTE4LjkzMlonO1xuY29uc3QgU0VOSU9SX1BBVEhfTEVGVCA9ICdNMTczLjc2IDk0LjA2NzdMOTAuMzE4OSAxNzMuMjE4QzgzLjkzMzQgMTc5LjIzOCA3OC44NjU5IDE4Ni4zOTcgNzUuNDA4IDE5NC4yODFDNzEuOTUgMjAyLjE2NiA3MC4xNjk4IDIxMC42MjIgNzAuMTY5OCAyMTkuMTYyQzcwLjE2OTggMjI3LjcwMiA3MS45NSAyMzYuMTU3IDc1LjQwOCAyNDQuMDQyQzc4Ljg2NTkgMjUxLjkyNyA4My45MzM0IDI1OS4wODUgOTAuMzE4OSAyNjUuMTA1TDE3My43NiAzNDQuMjU2QzE4MC4wMyAzNTAuMTUxIDE4NS4wMDYgMzU3LjE2NiAxODguNDAyIDM2NC44OTVDMTkxLjc5OCAzNzIuNjI1IDE5My41NDcgMzgwLjkxNiAxOTMuNTQ3IDM4OS4yODlDMTkzLjU0NyAzOTcuNjYzIDE5MS43OTggNDA1Ljk1NCAxODguNDAyIDQxMy42ODRDMTg1LjAwNiA0MjEuNDEzIDE4MC4wMyA0MjguNDI4IDE3My43NiA0MzQuMzIzTDQ0LjI4MjMgMzExLjUwNEMxOC40ODMyIDI4Ni45MTEgNCAyNTMuNjI5IDQgMjE4LjkzNEM0IDE4NC4yNCAxOC40ODMyIDE1MC45NTcgNDQuMjgyMyAxMjYuMzY1TDE3My43NiA0QzE4Ni4yMTMgMTYuMDEyOSAxOTMuMTkyIDMyLjE4NjEgMTkzLjE5MiA0OS4wMzM4QzE5My4xOTIgNjUuODgxNSAxODYuMjEzIDgyLjA1NDcgMTczLjc2IDk0LjA2NzdaJztcbmNvbnN0IFNFTklPUl9QQVRIX0ZVTEwgPSBTRU5JT1JfUEFUSF9SSUdIVCArICcgJyArIFNFTklPUl9QQVRIX0xFRlQ7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpYS1sb2FkaW5nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJzaWEtbG9hZGluZ1wiIFtzdHlsZS5wYWRkaW5nXT1cInBhZGRpbmdcIlxuICAgICAgW2NsYXNzLnNpYS1sb2FkaW5nLS1za2VsZXRvbl09XCJ2YXJpYW50ID09PSAnc2tlbGV0b24nXCJcbiAgICAgIFtzdHlsZS4tLXNpYS1jXT1cImNvbG9yQmFzZVwiIFtzdHlsZS4tLXNpYS1jbF09XCJjb2xvckxpZ2h0XCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzaWEtZG90c1wiICpuZ0lmPVwidmFyaWFudCA9PT0gJ2RvdHMnXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCIgKm5nRm9yPVwibGV0IGQgb2YgWzAsMSwyXVwiIFtzdHlsZS4tLWldPVwiZFwiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2lhLXB1bHNlXCIgKm5nSWY9XCJ2YXJpYW50ID09PSAncHVsc2UnXCIgW3N0eWxlLi0tc2l6ZV09XCJzaXplICsgJ3B4J1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInJpbmcgcmluZy0xXCI+PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInJpbmcgcmluZy0yXCI+PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNvcmVcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNpYS1iYXJzXCIgKm5nSWY9XCJ2YXJpYW50ID09PSAnYmFycydcIiBbc3R5bGUuLS1oXT1cInNpemUgKyAncHgnXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYmFyXCIgKm5nRm9yPVwibGV0IGIgb2YgWzAsMSwyLDMsNF1cIiBbc3R5bGUuLS1pXT1cImJcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNpYS1vcmJpdFwiICpuZ0lmPVwidmFyaWFudCA9PT0gJ29yYml0J1wiIFtzdHlsZS4tLXNpemVdPVwic2l6ZSArICdweCdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmJpdC10cmFja1wiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmJpdC1kb3Qgb3JiaXQtZG90LTFcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwib3JiaXQtZG90IG9yYml0LWRvdC0yXCI+PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzaWEtbW9ycGhcIiAqbmdJZj1cInZhcmlhbnQgPT09ICdtb3JwaCdcIiBbc3R5bGUuLS1zaXplXT1cInNpemUgKyAncHgnXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibW9ycGgtc2hhcGVcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNpYS13YXZlXCIgKm5nSWY9XCJ2YXJpYW50ID09PSAnd2F2ZSdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ3YXZlLWRvdFwiICpuZ0Zvcj1cImxldCB3IG9mIFswLDEsMiwzLDQsNSw2XVwiIFtzdHlsZS4tLWldPVwid1wiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2lhLXNrZWxldG9uXCIgKm5nSWY9XCJ2YXJpYW50ID09PSAnc2tlbGV0b24nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJza2VsLXJvdyBza2VsLXJvdy0taGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNrZWwtY2lyY2xlXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNrZWwtbGluZXNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJza2VsLWxpbmUgc2tlbC1saW5lLS1tZFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNrZWwtbGluZSBza2VsLWxpbmUtLXNtXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2tlbC1saW5lIHNrZWwtbGluZS0tZnVsbFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2tlbC1saW5lIHNrZWwtbGluZS0tbGdcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNrZWwtbGluZSBza2VsLWxpbmUtLW1kXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSDilZDilZDilZAgU0VOSU9SIFZBUklBTlRTIOKVkOKVkOKVkCAtLT5cblxuICAgICAgPCEtLSBzZW5pb3ItZHJhdzogc3Ryb2tlIGRyYXcgYW5pbWF0aW9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNpYS1zZW5pb3ItZHJhd1wiICpuZ0lmPVwidmFyaWFudCA9PT0gJ3Nlbmlvci1kcmF3J1wiIFtzdHlsZS4tLXNpemVdPVwic2l6ZSArICdweCdcIj5cbiAgICAgICAgPHN2ZyBbYXR0ci53aWR0aF09XCJzaXplXCIgW2F0dHIuaGVpZ2h0XT1cInNpemVcIiB2aWV3Qm94PVwiMCAwIDM0OCA2MTNcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwic3Agc3AtclwiIFthdHRyLmRdPVwicGF0aFJpZ2h0XCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJjb2xvckJhc2VcIiBzdHJva2Utd2lkdGg9XCI2XCIgZmlsbD1cIm5vbmVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwic3Agc3AtbFwiIFthdHRyLmRdPVwicGF0aExlZnRcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cImNvbG9yQmFzZVwiIHN0cm9rZS13aWR0aD1cIjZcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gc2VuaW9yLXB1bHNlOiBjaXJjbGUgd2l0aCBsb2dvLCBwdWxzZSArIHNjYWxlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNpYS1zZW5pb3ItcHVsc2VcIiAqbmdJZj1cInZhcmlhbnQgPT09ICdzZW5pb3ItcHVsc2UnXCIgW3N0eWxlLi0tc2l6ZV09XCJzaXplICsgJ3B4J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3AtY2lyY2xlXCI+XG4gICAgICAgICAgPHN2ZyBbYXR0ci53aWR0aF09XCJzaXplICogMC41XCIgW2F0dHIuaGVpZ2h0XT1cInNpemUgKiAwLjg4XCIgdmlld0JveD1cIjAgMCAzNDggNjEzXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwicGF0aEZ1bGxcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIHNlbmlvci1nbG93OiBuZW9uIGdsb3cgd2l0aCBicmVhdGhpbmcgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2lhLXNlbmlvci1nbG93XCIgKm5nSWY9XCJ2YXJpYW50ID09PSAnc2VuaW9yLWdsb3cnXCIgW3N0eWxlLi0tc2l6ZV09XCJzaXplICsgJ3B4J1wiPlxuICAgICAgICA8c3ZnIFthdHRyLndpZHRoXT1cInNpemVcIiBbYXR0ci5oZWlnaHRdPVwic2l6ZVwiIHZpZXdCb3g9XCIwIDAgMzQ4IDYxM1wiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJnbG93LXNoYWRvd1wiIFthdHRyLmRdPVwicGF0aEZ1bGxcIiBbYXR0ci5zdHJva2VdPVwiY29sb3JMaWdodFwiIHN0cm9rZS13aWR0aD1cIjEyXCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiZ2xvdy1tYWluXCIgW2F0dHIuZF09XCJwYXRoRnVsbFwiIFthdHRyLnN0cm9rZV09XCJjb2xvckJhc2VcIiBzdHJva2Utd2lkdGg9XCI0XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIHNlbmlvci1mbGlwOiAzRCBZLWF4aXMgZmxpcCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzaWEtc2VuaW9yLWZsaXBcIiAqbmdJZj1cInZhcmlhbnQgPT09ICdzZW5pb3ItZmxpcCdcIiBbc3R5bGUuLS1zaXplXT1cInNpemUgKyAncHgnXCI+XG4gICAgICAgIDxzdmcgW2F0dHIud2lkdGhdPVwic2l6ZVwiIFthdHRyLmhlaWdodF09XCJzaXplXCIgdmlld0JveD1cIjAgMCAzNDggNjEzXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICA8cGF0aCBbYXR0ci5kXT1cInBhdGhGdWxsXCIgW2F0dHIuZmlsbF09XCJjb2xvckJhc2VcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIHNlbmlvci1ib3VuY2U6IGFsdGVybmF0aW5nIGhhbHZlcyBib3VuY2UgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2lhLXNlbmlvci1ib3VuY2VcIiAqbmdJZj1cInZhcmlhbnQgPT09ICdzZW5pb3ItYm91bmNlJ1wiIFtzdHlsZS4tLXNpemVdPVwic2l6ZSArICdweCdcIj5cbiAgICAgICAgPHN2ZyBbYXR0ci53aWR0aF09XCJzaXplXCIgW2F0dHIuaGVpZ2h0XT1cInNpemVcIiB2aWV3Qm94PVwiMCAwIDM0OCA2MTNcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiYm91bmNlLXJcIiBbYXR0ci5kXT1cInBhdGhSaWdodFwiIFthdHRyLmZpbGxdPVwiY29sb3JCYXNlXCIgLz5cbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImJvdW5jZS1sXCIgW2F0dHIuZF09XCJwYXRoTGVmdFwiIFthdHRyLmZpbGxdPVwiY29sb3JMaWdodFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gc2VuaW9yLXJldmVhbDogdGVubmlzIGJhbGwgYm91bmNpbmcgd2l0aCBTZW5pb3IgbG9nbyBpbnNpZGUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic2lhLXNlbmlvci1yZXZlYWxcIiAqbmdJZj1cInZhcmlhbnQgPT09ICdzZW5pb3ItcmV2ZWFsJ1wiIFtzdHlsZS4tLXNpemVdPVwic2l6ZSAqIDEuMyArICdweCdcIj5cbiAgICAgICAgPCEtLSBUZW5uaXMgYmFsbCB3aXRoIFNlbmlvciBsb2dvIGluc2lkZSAtLT5cbiAgICAgICAgPHN2ZyBjbGFzcz1cInNyLWJhbGxcIiB2aWV3Qm94PVwiMCAwIDEwMCAxMDBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJzci1jbGlwXCI+PGNpcmNsZSBjeD1cIjUwXCIgY3k9XCI1MFwiIHI9XCI0OFwiIC8+PC9jbGlwUGF0aD5cbiAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgPGNpcmNsZSBjeD1cIjUwXCIgY3k9XCI1MFwiIHI9XCI0OFwiIFthdHRyLmZpbGxdPVwiY29sb3JCYXNlXCIgLz5cbiAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI3NyLWNsaXApXCI+XG4gICAgICAgICAgICA8IS0tIHRvcC1yaWdodCBzZWFtIGN1cnZlIC0tPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0zOCAtMiBDNTggMTgsIDYyIDM4LCAxMDIgNDhcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjlcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBvcGFjaXR5PVwiMC4xNVwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTM4IC0yIEM1OCAxOCwgNjIgMzgsIDEwMiA0OFwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIG9wYWNpdHk9XCIwLjhcIiAvPlxuICAgICAgICAgICAgPCEtLSBib3R0b20tbGVmdCBzZWFtIGN1cnZlIC0tPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0tMiA1MiBDMzggNjIsIDQyIDgyLCA2MiAxMDJcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjlcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBvcGFjaXR5PVwiMC4xNVwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTS0yIDUyIEMzOCA2MiwgNDIgODIsIDYyIDEwMlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIG9wYWNpdHk9XCIwLjhcIiAvPlxuICAgICAgICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDMyLjYsIDE5LjQpIHNjYWxlKDAuMTApXCI+XG4gICAgICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwicGF0aEZ1bGxcIiBmaWxsPVwid2hpdGVcIiBvcGFjaXR5PVwiMC44XCIgLz5cbiAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICA8L2c+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Itc2hhZG93XCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHNwYW4gY2xhc3M9XCJzaWEtbG9hZGluZy10ZXh0XCIgKm5nSWY9XCJ0ZXh0ICYmIHZhcmlhbnQgIT09ICdza2VsZXRvbidcIj57eyB0ZXh0IH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfVxuICAgIC5zaWEtbG9hZGluZyB7XG4gICAgICBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMC43NXJlbTsgcGFkZGluZzogM3JlbSAwO1xuICAgIH1cbiAgICAuc2lhLWxvYWRpbmctLXNrZWxldG9uIHsgYWxpZ24taXRlbXM6IHN0cmV0Y2g7IH1cbiAgICAuc2lhLWxvYWRpbmctdGV4dCB7IGNvbG9yOiB2YXIoLS1wLXRleHQtbXV0ZWQtY29sb3IsICM5NGEzYjgpOyBmb250LXNpemU6IDAuOHJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsgfVxuXG4gICAgLyog4pSA4pSAIERvdHMg4pSA4pSAICovXG4gICAgLnNpYS1kb3RzIHsgZGlzcGxheTogZmxleDsgZ2FwOiA2cHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAuc2lhLWRvdHMgLmRvdCB7XG4gICAgICB3aWR0aDogMTBweDsgaGVpZ2h0OiAxMHB4OyBib3JkZXItcmFkaXVzOiA1MCU7IGJhY2tncm91bmQ6IHZhcigtLXNpYS1jKTtcbiAgICAgIGFuaW1hdGlvbjogc2lhLWRvdC1ib3VuY2UgMS4ycyBjYWxjKHZhcigtLWkpICogMC4xNXMpIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHNpYS1kb3QtYm91bmNlIHtcbiAgICAgIDAlLCA2MCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7IG9wYWNpdHk6IDAuNDsgfVxuICAgICAgMzAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMnB4KSBzY2FsZSgxLjE1KTsgb3BhY2l0eTogMTsgfVxuICAgIH1cblxuICAgIC8qIOKUgOKUgCBQdWxzZSDilIDilIAgKi9cbiAgICAuc2lhLXB1bHNlIHsgcG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogdmFyKC0tc2l6ZSwgNDBweCk7IGhlaWdodDogdmFyKC0tc2l6ZSwgNDBweCk7IH1cbiAgICAuc2lhLXB1bHNlIC5yaW5nIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgaW5zZXQ6IDA7IGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXNpYS1jKTsgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgLnNpYS1wdWxzZSAucmluZy0xIHsgYW5pbWF0aW9uOiBzaWEtcmlwcGxlIDEuOHMgMHMgZWFzZS1vdXQgaW5maW5pdGU7IH1cbiAgICAuc2lhLXB1bHNlIC5yaW5nLTIgeyBhbmltYXRpb246IHNpYS1yaXBwbGUgMS44cyAwLjZzIGVhc2Utb3V0IGluZmluaXRlOyB9XG4gICAgLnNpYS1wdWxzZSAuY29yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNTAlOyBsZWZ0OiA1MCU7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7XG4gICAgICBtYXJnaW46IC01cHggMCAwIC01cHg7IGJvcmRlci1yYWRpdXM6IDUwJTsgYmFja2dyb3VuZDogdmFyKC0tc2lhLWMpO1xuICAgICAgYW5pbWF0aW9uOiBzaWEtY29yZS1wdWxzZSAxLjhzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHNpYS1yaXBwbGUgeyAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMC4zKTsgb3BhY2l0eTogMC44OyB9IDEwMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEpOyBvcGFjaXR5OiAwOyB9IH1cbiAgICBAa2V5ZnJhbWVzIHNpYS1jb3JlLXB1bHNlIHsgMCUsIDEwMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEpOyBvcGFjaXR5OiAwLjY7IH0gNTAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjMpOyBvcGFjaXR5OiAxOyB9IH1cblxuICAgIC8qIOKUgOKUgCBCYXJzIOKUgOKUgCAqL1xuICAgIC5zaWEtYmFycyB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogM3B4OyBoZWlnaHQ6IHZhcigtLWgsIDQwcHgpOyB9XG4gICAgLnNpYS1iYXJzIC5iYXIge1xuICAgICAgd2lkdGg6IDRweDsgaGVpZ2h0OiA0MCU7IGJvcmRlci1yYWRpdXM6IDJweDsgYmFja2dyb3VuZDogdmFyKC0tc2lhLWMpO1xuICAgICAgYW5pbWF0aW9uOiBzaWEtYmFyLXdhdmUgMXMgY2FsYyh2YXIoLS1pKSAqIDAuMXMpIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHNpYS1iYXItd2F2ZSB7IDAlLCAxMDAlIHsgaGVpZ2h0OiAyMCU7IG9wYWNpdHk6IDAuNDsgfSA1MCUgeyBoZWlnaHQ6IDEwMCU7IG9wYWNpdHk6IDE7IH0gfVxuXG4gICAgLyog4pSA4pSAIE9yYml0IOKUgOKUgCAqL1xuICAgIC5zaWEtb3JiaXQgeyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiB2YXIoLS1zaXplLCA0MHB4KTsgaGVpZ2h0OiB2YXIoLS1zaXplLCA0MHB4KTsgfVxuICAgIC5zaWEtb3JiaXQgLm9yYml0LXRyYWNrIHsgcG9zaXRpb246IGFic29sdXRlOyBpbnNldDogMDsgYm9yZGVyLXJhZGl1czogNTAlOyBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLXAtc3VyZmFjZS0yMDAsICNlMmU4ZjApOyB9XG4gICAgLnNpYS1vcmJpdCAub3JiaXQtZG90IHsgcG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogOHB4OyBoZWlnaHQ6IDhweDsgYm9yZGVyLXJhZGl1czogNTAlOyB0b3A6IC00cHg7IGxlZnQ6IGNhbGMoNTAlIC0gNHB4KTsgfVxuICAgIC5zaWEtb3JiaXQgLm9yYml0LWRvdC0xIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpYS1jKTsgYW5pbWF0aW9uOiBzaWEtb3JiaXQtc3BpbiAxLjRzIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSBjYWxjKHZhcigtLXNpemUsIDQwcHgpIC8gMiArIDRweCk7XG4gICAgfVxuICAgIC5zaWEtb3JiaXQgLm9yYml0LWRvdC0yIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpYS1jbCk7IGFuaW1hdGlvbjogc2lhLW9yYml0LXNwaW4gMS40cyAwLjdzIGxpbmVhciBpbmZpbml0ZTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSBjYWxjKHZhcigtLXNpemUsIDQwcHgpIC8gMiArIDRweCk7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgc2lhLW9yYml0LXNwaW4geyB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0gfVxuXG4gICAgLyog4pSA4pSAIE1vcnBoIOKUgOKUgCAqL1xuICAgIC5zaWEtbW9ycGggeyB3aWR0aDogdmFyKC0tc2l6ZSwgNDBweCk7IGhlaWdodDogdmFyKC0tc2l6ZSwgNDBweCk7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICAgLnNpYS1tb3JwaCAubW9ycGgtc2hhcGUge1xuICAgICAgd2lkdGg6IDcwJTsgaGVpZ2h0OiA3MCU7IGJhY2tncm91bmQ6IHZhcigtLXNpYS1jKTtcbiAgICAgIGFuaW1hdGlvbjogc2lhLW1vcnBoIDIuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgc2lhLW1vcnBoIHtcbiAgICAgIDAlICAgeyBib3JkZXItcmFkaXVzOiA1MCUgNTAlIDUwJSA1MCU7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpIHNjYWxlKDEpOyB9XG4gICAgICAyNSUgIHsgYm9yZGVyLXJhZGl1czogMzAlIDcwJSA1MCUgNTAlOyB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZykgc2NhbGUoMC44NSk7IH1cbiAgICAgIDUwJSAgeyBib3JkZXItcmFkaXVzOiA1MCUgMzAlIDcwJSAzMCU7IHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZykgc2NhbGUoMSk7IH1cbiAgICAgIDc1JSAgeyBib3JkZXItcmFkaXVzOiA3MCUgNTAlIDMwJSA3MCU7IHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgc2NhbGUoMC44NSk7IH1cbiAgICAgIDEwMCUgeyBib3JkZXItcmFkaXVzOiA1MCUgNTAlIDUwJSA1MCU7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgc2NhbGUoMSk7IH1cbiAgICB9XG5cbiAgICAvKiDilIDilIAgV2F2ZSDilIDilIAgKi9cbiAgICAuc2lhLXdhdmUgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDNweDsgfVxuICAgIC5zaWEtd2F2ZSAud2F2ZS1kb3Qge1xuICAgICAgd2lkdGg6IDZweDsgaGVpZ2h0OiA2cHg7IGJvcmRlci1yYWRpdXM6IDUwJTsgYmFja2dyb3VuZDogdmFyKC0tc2lhLWMpO1xuICAgICAgYW5pbWF0aW9uOiBzaWEtd2F2ZS1mbG93IDEuNnMgY2FsYyh2YXIoLS1pKSAqIDAuMTJzKSBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICB9XG4gICAgQGtleWZyYW1lcyBzaWEtd2F2ZS1mbG93IHtcbiAgICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDAuNik7IG9wYWNpdHk6IDAuMzsgfVxuICAgICAgNTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KSBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfVxuICAgIH1cblxuICAgIC8qIOKUgOKUgCBTa2VsZXRvbiDilIDilIAgKi9cbiAgICAuc2lhLXNrZWxldG9uIHsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAwLjc1cmVtOyBwYWRkaW5nOiAwIDFyZW07IHdpZHRoOiAxMDAlOyB9XG4gICAgLnNrZWwtcm93IHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAwLjc1cmVtOyB9XG4gICAgLnNrZWwtcm93LS1oZWFkZXIgeyBtYXJnaW4tYm90dG9tOiAwLjI1cmVtOyB9XG4gICAgLnNrZWwtY2lyY2xlIHtcbiAgICAgIHdpZHRoOiAzNnB4OyBoZWlnaHQ6IDM2cHg7IGJvcmRlci1yYWRpdXM6IDUwJTsgZmxleC1zaHJpbms6IDA7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wLXN1cmZhY2UtMjAwLCAjZTJlOGYwKTsgYW5pbWF0aW9uOiBzaWEtc2hpbW1lciAxLjZzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIH1cbiAgICAuc2tlbC1saW5lcyB7IGZsZXg6IDE7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogMC40cmVtOyB9XG4gICAgLnNrZWwtbGluZSB7XG4gICAgICBoZWlnaHQ6IDEwcHg7IGJvcmRlci1yYWRpdXM6IDRweDsgYmFja2dyb3VuZDogdmFyKC0tcC1zdXJmYWNlLTIwMCwgI2UyZThmMCk7XG4gICAgICBhbmltYXRpb246IHNpYS1zaGltbWVyIDEuNnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgfVxuICAgIC5za2VsLWxpbmUtLWZ1bGwgeyB3aWR0aDogMTAwJTsgYW5pbWF0aW9uLWRlbGF5OiAwLjFzOyB9XG4gICAgLnNrZWwtbGluZS0tbGcgICB7IHdpZHRoOiA3NSU7IGFuaW1hdGlvbi1kZWxheTogMC4yczsgfVxuICAgIC5za2VsLWxpbmUtLW1kICAgeyB3aWR0aDogNTUlOyBhbmltYXRpb24tZGVsYXk6IDAuM3M7IH1cbiAgICAuc2tlbC1saW5lLS1zbSAgIHsgd2lkdGg6IDM1JTsgYW5pbWF0aW9uLWRlbGF5OiAwLjE1czsgfVxuICAgIEBrZXlmcmFtZXMgc2lhLXNoaW1tZXIgeyAwJSwgMTAwJSB7IG9wYWNpdHk6IDAuNDsgfSA1MCUgeyBvcGFjaXR5OiAxOyB9IH1cblxuICAgIC8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgICAgIFNFTklPUiBWQVJJQU5UU1xuICAgICAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4gICAgLyog4pSA4pSAIHNlbmlvci1kcmF3OiBzdHJva2UgZHJhdyBhbmltYXRpb24g4pSA4pSAICovXG4gICAgLnNpYS1zZW5pb3ItZHJhdyB7IHdpZHRoOiB2YXIoLS1zaXplLCA0MHB4KTsgaGVpZ2h0OiB2YXIoLS1zaXplLCA0MHB4KTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgICAuc2lhLXNlbmlvci1kcmF3IC5zcCB7IHN0cm9rZS1kYXNoYXJyYXk6IDEyMDA7IHN0cm9rZS1kYXNob2Zmc2V0OiAxMjAwOyB9XG4gICAgLnNpYS1zZW5pb3ItZHJhdyAuc3AtciB7IGFuaW1hdGlvbjogc2lhLXNkLXIgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7IH1cbiAgICAuc2lhLXNlbmlvci1kcmF3IC5zcC1sIHsgYW5pbWF0aW9uOiBzaWEtc2QtbCAycyBlYXNlLWluLW91dCBpbmZpbml0ZTsgfVxuICAgIEBrZXlmcmFtZXMgc2lhLXNkLXIge1xuICAgICAgMCUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiAxMjAwOyBvcGFjaXR5OiAwLjI7IH1cbiAgICAgIDM1JSAgeyBzdHJva2UtZGFzaG9mZnNldDogMDsgb3BhY2l0eTogMTsgfVxuICAgICAgNjAlICB7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBvcGFjaXR5OiAxOyB9XG4gICAgICAxMDAlIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMjAwOyBvcGFjaXR5OiAwLjI7IH1cbiAgICB9XG4gICAgQGtleWZyYW1lcyBzaWEtc2QtbCB7XG4gICAgICAwJSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDEyMDA7IG9wYWNpdHk6IDAuMjsgfVxuICAgICAgMTUlICB7IHN0cm9rZS1kYXNob2Zmc2V0OiAxMjAwOyBvcGFjaXR5OiAwLjI7IH1cbiAgICAgIDUwJSAgeyBzdHJva2UtZGFzaG9mZnNldDogMDsgb3BhY2l0eTogMTsgfVxuICAgICAgNjUlICB7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBvcGFjaXR5OiAxOyB9XG4gICAgICAxMDAlIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMjAwOyBvcGFjaXR5OiAwLjI7IH1cbiAgICB9XG5cbiAgICAvKiDilIDilIAgc2VuaW9yLXB1bHNlOiBjaXJjbGUgd2l0aCBsb2dvLCBwdWxzZSArIHNjYWxlIOKUgOKUgCAqL1xuICAgIC5zaWEtc2VuaW9yLXB1bHNlIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgICAuc2lhLXNlbmlvci1wdWxzZSAuc3AtY2lyY2xlIHtcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLCA2NHB4KTsgaGVpZ2h0OiB2YXIoLS1zaXplLCA2NHB4KTsgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2lhLWMpOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGFuaW1hdGlvbjogc2lhLXNwLXB1bHNlIDEuNHMgZWFzZS1vdXQgaW5maW5pdGUsIHNpYS1zcC1zY2FsZSAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHNpYS1zcC1wdWxzZSB7XG4gICAgICAwJSAgeyBib3gtc2hhZG93OiAwIDAgMCAwIHZhcigtLXNpYS1jbCk7IH1cbiAgICAgIDcwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDIwcHggdHJhbnNwYXJlbnQ7IH1cbiAgICAgIDEwMCV7IGJveC1zaGFkb3c6IDAgMCAwIDAgdHJhbnNwYXJlbnQ7IH1cbiAgICB9XG4gICAgQGtleWZyYW1lcyBzaWEtc3Atc2NhbGUgeyAwJSwgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH0gNTAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjEyKTsgfSB9XG5cbiAgICAvKiDilIDilIAgc2VuaW9yLWdsb3c6IG5lb24gZ2xvdyBicmVhdGhpbmcg4pSA4pSAICovXG4gICAgLnNpYS1zZW5pb3ItZ2xvdyB7IHdpZHRoOiB2YXIoLS1zaXplLCA0MHB4KTsgaGVpZ2h0OiB2YXIoLS1zaXplLCA0MHB4KTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgICAuc2lhLXNlbmlvci1nbG93IC5nbG93LXNoYWRvdyB7XG4gICAgICBvcGFjaXR5OiAwLjM7IGZpbHRlcjogYmx1cig0cHgpO1xuICAgICAgYW5pbWF0aW9uOiBzaWEtc2ctYnJlYXRoZSAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICB9XG4gICAgLnNpYS1zZW5pb3ItZ2xvdyAuZ2xvdy1tYWluIHtcbiAgICAgIGFuaW1hdGlvbjogc2lhLXNnLWJyZWF0aGUgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgc2lhLXNnLWJyZWF0aGUge1xuICAgICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAwLjQ7IGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDJweCB2YXIoLS1zaWEtY2wpKTsgfVxuICAgICAgNTAlICAgICAgeyBvcGFjaXR5OiAxOyAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDEwcHggdmFyKC0tc2lhLWNsKSkgZHJvcC1zaGFkb3coMCAwIDIwcHggdmFyKC0tc2lhLWMpKTsgfVxuICAgIH1cblxuICAgIC8qIOKUgOKUgCBzZW5pb3ItZmxpcDogM0QgWS1heGlzIGZsaXAg4pSA4pSAICovXG4gICAgLnNpYS1zZW5pb3ItZmxpcCB7XG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZSwgNDBweCk7IGhlaWdodDogdmFyKC0tc2l6ZSwgNDBweCk7XG4gICAgICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHBlcnNwZWN0aXZlOiAzMDBweDtcbiAgICB9XG4gICAgLnNpYS1zZW5pb3ItZmxpcCBzdmcge1xuICAgICAgYW5pbWF0aW9uOiBzaWEtc2YtZmxpcCAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICAgIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgc2lhLXNmLWZsaXAge1xuICAgICAgMCUgICB7IHRyYW5zZm9ybTogcm90YXRlWSgwZGVnKTsgfVxuICAgICAgNTAlICB7IHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpOyB9XG4gICAgICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGVZKDM2MGRlZyk7IH1cbiAgICB9XG5cbiAgICAvKiDilIDilIAgc2VuaW9yLWJvdW5jZTogYWx0ZXJuYXRpbmcgaGFsdmVzIGJvdW5jZSDilIDilIAgKi9cbiAgICAuc2lhLXNlbmlvci1ib3VuY2UgeyB3aWR0aDogdmFyKC0tc2l6ZSwgNDBweCk7IGhlaWdodDogdmFyKC0tc2l6ZSwgNDBweCk7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICAgLnNpYS1zZW5pb3ItYm91bmNlIC5ib3VuY2UtciB7XG4gICAgICBhbmltYXRpb246IHNpYS1zYi1yIDEuMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xuICAgIH1cbiAgICAuc2lhLXNlbmlvci1ib3VuY2UgLmJvdW5jZS1sIHtcbiAgICAgIGFuaW1hdGlvbjogc2lhLXNiLWwgMS4ycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgc2lhLXNiLXIge1xuICAgICAgMCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7IG9wYWNpdHk6IDAuNzsgfVxuICAgICAgNTAlICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLThweCkgc2NhbGUoMS4wNSk7IG9wYWNpdHk6IDE7IH1cbiAgICB9XG4gICAgQGtleWZyYW1lcyBzaWEtc2ItbCB7XG4gICAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KSBzY2FsZSgxLjA1KTsgb3BhY2l0eTogMTsgfVxuICAgICAgNTAlICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7IG9wYWNpdHk6IDAuNzsgfVxuICAgIH1cblxuICAgIC8qIOKUgOKUgCBzZW5pb3ItcmV2ZWFsOiB0ZW5uaXMgYmFsbCBib3VuY2Ug4pSA4pSAICovXG4gICAgLnNpYS1zZW5pb3ItcmV2ZWFsIHtcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLCA2NHB4KTsgaGVpZ2h0OiBjYWxjKHZhcigtLXNpemUsIDY0cHgpICogMS40KTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgfVxuICAgIC5zaWEtc2VuaW9yLXJldmVhbCAuc3ItYmFsbCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiB2YXIoLS1zaXplLCA2NHB4KTsgaGVpZ2h0OiB2YXIoLS1zaXplLCA2NHB4KTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGFuaW1hdGlvbjogc2lhLXNyLWJvdW5jZSAxLjJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIH1cbiAgICAuc2lhLXNlbmlvci1yZXZlYWwgLnNyLXNoYWRvdyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMDsgd2lkdGg6IDYwJTsgaGVpZ2h0OiA2cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xMik7XG4gICAgICBhbmltYXRpb246IHNpYS1zci1zaGFkb3cgMS4ycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIHNpYS1zci1ib3VuY2Uge1xuICAgICAgMCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjAlKSBzY2FsZVgoMS4wNikgc2NhbGVZKDAuOTQpOyB9XG4gICAgICA1MCUgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjUlKSBzY2FsZVgoMC45Nikgc2NhbGVZKDEuMDQpOyB9XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgc2lhLXNyLXNoYWRvdyB7XG4gICAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGVYKDEpOyBvcGFjaXR5OiAwLjEyOyB9XG4gICAgICA1MCUgICAgICB7IHRyYW5zZm9ybTogc2NhbGVYKDAuNik7IG9wYWNpdHk6IDAuMDY7IH1cbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIExvYWRpbmdDb21wb25lbnQge1xuICBASW5wdXQoKSB2YXJpYW50OiBMb2FkaW5nVmFyaWFudCA9ICdzZW5pb3ItcmV2ZWFsJztcbiAgQElucHV0KCkgY29sb3I6IExvYWRpbmdDb2xvciA9ICdzZW5pb3InO1xuICBASW5wdXQoKSBzaXplOiBudW1iZXIgPSA0MDtcbiAgQElucHV0KCkgdGV4dDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHBhZGRpbmc6IHN0cmluZyA9ICczcmVtIDAnO1xuXG4gIGdldCBjb2xvckJhc2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKENPTE9SX01BUFt0aGlzLmNvbG9yXSB8fCBDT0xPUl9NQVBbJ3NlbmlvciddKS5iYXNlO1xuICB9XG5cbiAgZ2V0IGNvbG9yTGlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKENPTE9SX01BUFt0aGlzLmNvbG9yXSB8fCBDT0xPUl9NQVBbJ3NlbmlvciddKS5saWdodDtcbiAgfVxuXG4gIHBhdGhSaWdodCA9IFNFTklPUl9QQVRIX1JJR0hUO1xuICBwYXRoTGVmdCA9IFNFTklPUl9QQVRIX0xFRlQ7XG4gIHBhdGhGdWxsID0gU0VOSU9SX1BBVEhfRlVMTDtcbn1cbiJdfQ==
@@ -0,0 +1,166 @@
1
+ import { Directive, Input, } from '@angular/core';
2
+ import { LoadingComponent } from '../../components/loading/loading.component';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Directive that replaces PrimeNG p-table's default loading spinner
6
+ * with the sia-loading component injected as a table row in the tbody.
7
+ *
8
+ * Usage:
9
+ * <p-table [loading]="loading" siaTableLoading>
10
+ */
11
+ export class TableLoadingDirective {
12
+ el;
13
+ renderer;
14
+ vcr;
15
+ loading = false;
16
+ siaLoadingVariant = 'senior-reveal';
17
+ siaLoadingColor = 'senior';
18
+ siaLoadingSize = 36;
19
+ loadingRow = null;
20
+ loadingRef = null;
21
+ observer = null;
22
+ styleEl = null;
23
+ constructor(el, renderer, vcr) {
24
+ this.el = el;
25
+ this.renderer = renderer;
26
+ this.vcr = vcr;
27
+ }
28
+ ngAfterViewInit() {
29
+ this.injectHideStyles();
30
+ this.setupObserver();
31
+ if (this.loading) {
32
+ this.showLoading();
33
+ }
34
+ }
35
+ ngOnChanges(changes) {
36
+ if (changes['loading'] && !changes['loading'].firstChange) {
37
+ if (this.loading) {
38
+ this.showLoading();
39
+ }
40
+ else {
41
+ this.removeLoading();
42
+ }
43
+ }
44
+ if (this.loadingRef) {
45
+ if (changes['siaLoadingVariant'])
46
+ this.loadingRef.instance.variant = this.siaLoadingVariant;
47
+ if (changes['siaLoadingColor'])
48
+ this.loadingRef.instance.color = this.siaLoadingColor;
49
+ if (changes['siaLoadingSize'])
50
+ this.loadingRef.instance.size = this.siaLoadingSize;
51
+ }
52
+ }
53
+ ngOnDestroy() {
54
+ this.removeLoading();
55
+ this.observer?.disconnect();
56
+ this.observer = null;
57
+ this.styleEl?.remove();
58
+ this.styleEl = null;
59
+ }
60
+ injectHideStyles() {
61
+ const host = this.el.nativeElement;
62
+ this.styleEl = this.renderer.createElement('style');
63
+ this.styleEl.textContent = `
64
+ .p-datatable-loading-overlay,
65
+ .p-datatable-mask {
66
+ display: none !important;
67
+ }
68
+ `;
69
+ this.renderer.appendChild(host, this.styleEl);
70
+ }
71
+ setupObserver() {
72
+ const host = this.el.nativeElement;
73
+ this.observer = new MutationObserver((mutations) => {
74
+ for (const m of mutations) {
75
+ m.addedNodes.forEach((node) => {
76
+ if (node instanceof HTMLElement) {
77
+ if (node.classList.contains('p-datatable-loading-overlay') ||
78
+ node.classList.contains('p-datatable-mask')) {
79
+ node.style.display = 'none';
80
+ }
81
+ }
82
+ });
83
+ }
84
+ });
85
+ this.observer.observe(host, { childList: true, subtree: true });
86
+ }
87
+ showLoading() {
88
+ if (this.loadingRow)
89
+ return;
90
+ const host = this.el.nativeElement;
91
+ const tbody = host.querySelector('tbody');
92
+ if (!tbody)
93
+ return;
94
+ // Hide existing data rows
95
+ const existingRows = tbody.querySelectorAll('tr');
96
+ existingRows.forEach((row) => {
97
+ this.renderer.setStyle(row, 'display', 'none');
98
+ });
99
+ // Count columns from thead
100
+ const colCount = this.getColumnCount(host);
101
+ // Create <tr>
102
+ this.loadingRow = this.renderer.createElement('tr');
103
+ this.renderer.addClass(this.loadingRow, 'sia-table-loading-row');
104
+ // Create <td colspan="N">
105
+ const td = this.renderer.createElement('td');
106
+ this.renderer.setAttribute(td, 'colspan', String(colCount || 99));
107
+ this.renderer.setStyle(td, 'text-align', 'center');
108
+ this.renderer.setStyle(td, 'padding', '2rem 0');
109
+ this.renderer.setStyle(td, 'border', 'none');
110
+ // Create LoadingComponent
111
+ this.loadingRef = this.vcr.createComponent(LoadingComponent);
112
+ this.loadingRef.instance.variant = this.siaLoadingVariant;
113
+ this.loadingRef.instance.color = this.siaLoadingColor;
114
+ this.loadingRef.instance.size = this.siaLoadingSize;
115
+ this.loadingRef.instance.padding = '0';
116
+ const loadingEl = this.loadingRef.location.nativeElement;
117
+ this.renderer.appendChild(td, loadingEl);
118
+ this.renderer.appendChild(this.loadingRow, td);
119
+ this.renderer.appendChild(tbody, this.loadingRow);
120
+ }
121
+ removeLoading() {
122
+ const host = this.el.nativeElement;
123
+ const tbody = host.querySelector('tbody');
124
+ // Remove loading row
125
+ if (this.loadingRow?.parentNode) {
126
+ this.renderer.removeChild(this.loadingRow.parentNode, this.loadingRow);
127
+ }
128
+ this.loadingRow = null;
129
+ if (this.loadingRef) {
130
+ this.loadingRef.destroy();
131
+ this.loadingRef = null;
132
+ }
133
+ // Restore hidden data rows
134
+ if (tbody) {
135
+ const rows = tbody.querySelectorAll('tr');
136
+ rows.forEach((row) => {
137
+ this.renderer.removeStyle(row, 'display');
138
+ });
139
+ }
140
+ }
141
+ getColumnCount(host) {
142
+ const headerRow = host.querySelector('thead tr');
143
+ if (headerRow) {
144
+ return headerRow.querySelectorAll('th').length;
145
+ }
146
+ return 99;
147
+ }
148
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableLoadingDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
149
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: TableLoadingDirective, isStandalone: true, selector: "p-table[siaTableLoading]", inputs: { loading: "loading", siaLoadingVariant: "siaLoadingVariant", siaLoadingColor: "siaLoadingColor", siaLoadingSize: "siaLoadingSize" }, usesOnChanges: true, ngImport: i0 });
150
+ }
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableLoadingDirective, decorators: [{
152
+ type: Directive,
153
+ args: [{
154
+ selector: 'p-table[siaTableLoading]',
155
+ standalone: true,
156
+ }]
157
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }], propDecorators: { loading: [{
158
+ type: Input
159
+ }], siaLoadingVariant: [{
160
+ type: Input
161
+ }], siaLoadingColor: [{
162
+ type: Input
163
+ }], siaLoadingSize: [{
164
+ type: Input
165
+ }] } });
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbG9hZGluZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLWFpL3NyYy9saWIvZGlyZWN0aXZlcy90YWJsZS1sb2FkaW5nL3RhYmxlLWxvYWRpbmcuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxHQVNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0MsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFFNUc7Ozs7OztHQU1HO0FBS0gsTUFBTSxPQUFPLHFCQUFxQjtJQVl0QjtJQUNBO0lBQ0E7SUFiRCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLGlCQUFpQixHQUFtQixlQUFlLENBQUM7SUFDcEQsZUFBZSxHQUFpQixRQUFRLENBQUM7SUFDekMsY0FBYyxHQUFXLEVBQUUsQ0FBQztJQUU3QixVQUFVLEdBQStCLElBQUksQ0FBQztJQUM5QyxVQUFVLEdBQTBDLElBQUksQ0FBQztJQUN6RCxRQUFRLEdBQTRCLElBQUksQ0FBQztJQUN6QyxPQUFPLEdBQTRCLElBQUksQ0FBQztJQUVoRCxZQUNVLEVBQWMsRUFDZCxRQUFtQixFQUNuQixHQUFxQjtRQUZyQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixRQUFHLEdBQUgsR0FBRyxDQUFrQjtJQUM1QixDQUFDO0lBRUosZUFBZTtRQUNiLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsU0FB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QztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLElBQWlCO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO3dHQXBKVSxxQkFBcUI7NEZBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7c0lBRVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEVsZW1lbnRSZWYsXG4gIFJlbmRlcmVyMixcbiAgQ29tcG9uZW50UmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBPbkRlc3Ryb3ksXG4gIEFmdGVyVmlld0luaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9hZGluZ0NvbXBvbmVudCwgTG9hZGluZ1ZhcmlhbnQsIExvYWRpbmdDb2xvciB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudCc7XG5cbi8qKlxuICogRGlyZWN0aXZlIHRoYXQgcmVwbGFjZXMgUHJpbWVORyBwLXRhYmxlJ3MgZGVmYXVsdCBsb2FkaW5nIHNwaW5uZXJcbiAqIHdpdGggdGhlIHNpYS1sb2FkaW5nIGNvbXBvbmVudCBpbmplY3RlZCBhcyBhIHRhYmxlIHJvdyBpbiB0aGUgdGJvZHkuXG4gKlxuICogVXNhZ2U6XG4gKiAgIDxwLXRhYmxlIFtsb2FkaW5nXT1cImxvYWRpbmdcIiBzaWFUYWJsZUxvYWRpbmc+XG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ3AtdGFibGVbc2lhVGFibGVMb2FkaW5nXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlTG9hZGluZ0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBzaWFMb2FkaW5nVmFyaWFudDogTG9hZGluZ1ZhcmlhbnQgPSAnc2VuaW9yLXJldmVhbCc7XG4gIEBJbnB1dCgpIHNpYUxvYWRpbmdDb2xvcjogTG9hZGluZ0NvbG9yID0gJ3Nlbmlvcic7XG4gIEBJbnB1dCgpIHNpYUxvYWRpbmdTaXplOiBudW1iZXIgPSAzNjtcblxuICBwcml2YXRlIGxvYWRpbmdSb3c6IEhUTUxUYWJsZVJvd0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsb2FkaW5nUmVmOiBDb21wb25lbnRSZWY8TG9hZGluZ0NvbXBvbmVudD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN0eWxlRWw6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHZjcjogVmlld0NvbnRhaW5lclJlZlxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5qZWN0SGlkZVN0eWxlcygpO1xuICAgIHRoaXMuc2V0dXBPYnNlcnZlcigpO1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2xvYWRpbmcnXSAmJiAhY2hhbmdlc1snbG9hZGluZyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTG9hZGluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkaW5nUmVmKSB7XG4gICAgICBpZiAoY2hhbmdlc1snc2lhTG9hZGluZ1ZhcmlhbnQnXSkgdGhpcy5sb2FkaW5nUmVmLmluc3RhbmNlLnZhcmlhbnQgPSB0aGlzLnNpYUxvYWRpbmdWYXJpYW50O1xuICAgICAgaWYgKGNoYW5nZXNbJ3NpYUxvYWRpbmdDb2xvciddKSB0aGlzLmxvYWRpbmdSZWYuaW5zdGFuY2UuY29sb3IgPSB0aGlzLnNpYUxvYWRpbmdDb2xvcjtcbiAgICAgIGlmIChjaGFuZ2VzWydzaWFMb2FkaW5nU2l6ZSddKSB0aGlzLmxvYWRpbmdSZWYuaW5zdGFuY2Uuc2l6ZSA9IHRoaXMuc2lhTG9hZGluZ1NpemU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVMb2FkaW5nKCk7XG4gICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuc3R5bGVFbD8ucmVtb3ZlKCk7XG4gICAgdGhpcy5zdHlsZUVsID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaW5qZWN0SGlkZVN0eWxlcygpOiB2b2lkIHtcbiAgICBjb25zdCBob3N0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMuc3R5bGVFbCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICB0aGlzLnN0eWxlRWwhLnRleHRDb250ZW50ID0gYFxuICAgICAgLnAtZGF0YXRhYmxlLWxvYWRpbmctb3ZlcmxheSxcbiAgICAgIC5wLWRhdGF0YWJsZS1tYXNrIHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIGA7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChob3N0LCB0aGlzLnN0eWxlRWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE9ic2VydmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbSBvZiBtdXRhdGlvbnMpIHtcbiAgICAgICAgbS5hZGRlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdwLWRhdGF0YWJsZS1sb2FkaW5nLW92ZXJsYXknKSB8fFxuICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5jb250YWlucygncC1kYXRhdGFibGUtbWFzaycpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbm9kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGhvc3QsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93TG9hZGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nUm93KSByZXR1cm47XG5cbiAgICBjb25zdCBob3N0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHRib2R5ID0gaG9zdC5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuICAgIGlmICghdGJvZHkpIHJldHVybjtcblxuICAgIC8vIEhpZGUgZXhpc3RpbmcgZGF0YSByb3dzXG4gICAgY29uc3QgZXhpc3RpbmdSb3dzID0gdGJvZHkucXVlcnlTZWxlY3RvckFsbCgndHInKTtcbiAgICBleGlzdGluZ1Jvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHJvdywgJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgIH0pO1xuXG4gICAgLy8gQ291bnQgY29sdW1ucyBmcm9tIHRoZWFkXG4gICAgY29uc3QgY29sQ291bnQgPSB0aGlzLmdldENvbHVtbkNvdW50KGhvc3QpO1xuXG4gICAgLy8gQ3JlYXRlIDx0cj5cbiAgICB0aGlzLmxvYWRpbmdSb3cgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmxvYWRpbmdSb3csICdzaWEtdGFibGUtbG9hZGluZy1yb3cnKTtcblxuICAgIC8vIENyZWF0ZSA8dGQgY29sc3Bhbj1cIk5cIj5cbiAgICBjb25zdCB0ZCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgndGQnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0ZCwgJ2NvbHNwYW4nLCBTdHJpbmcoY29sQ291bnQgfHwgOTkpKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRkLCAndGV4dC1hbGlnbicsICdjZW50ZXInKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRkLCAncGFkZGluZycsICcycmVtIDAnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRkLCAnYm9yZGVyJywgJ25vbmUnKTtcblxuICAgIC8vIENyZWF0ZSBMb2FkaW5nQ29tcG9uZW50XG4gICAgdGhpcy5sb2FkaW5nUmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KExvYWRpbmdDb21wb25lbnQpO1xuICAgIHRoaXMubG9hZGluZ1JlZi5pbnN0YW5jZS52YXJpYW50ID0gdGhpcy5zaWFMb2FkaW5nVmFyaWFudDtcbiAgICB0aGlzLmxvYWRpbmdSZWYuaW5zdGFuY2UuY29sb3IgPSB0aGlzLnNpYUxvYWRpbmdDb2xvcjtcbiAgICB0aGlzLmxvYWRpbmdSZWYuaW5zdGFuY2Uuc2l6ZSA9IHRoaXMuc2lhTG9hZGluZ1NpemU7XG4gICAgdGhpcy5sb2FkaW5nUmVmLmluc3RhbmNlLnBhZGRpbmcgPSAnMCc7XG5cbiAgICBjb25zdCBsb2FkaW5nRWwgPSB0aGlzLmxvYWRpbmdSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRkLCBsb2FkaW5nRWwpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5sb2FkaW5nUm93LCB0ZCk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0Ym9keSwgdGhpcy5sb2FkaW5nUm93KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTG9hZGluZygpOiB2b2lkIHtcbiAgICBjb25zdCBob3N0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHRib2R5ID0gaG9zdC5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuXG4gICAgLy8gUmVtb3ZlIGxvYWRpbmcgcm93XG4gICAgaWYgKHRoaXMubG9hZGluZ1Jvdz8ucGFyZW50Tm9kZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmxvYWRpbmdSb3cucGFyZW50Tm9kZSwgdGhpcy5sb2FkaW5nUm93KTtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nUm93ID0gbnVsbDtcbiAgICBpZiAodGhpcy5sb2FkaW5nUmVmKSB7XG4gICAgICB0aGlzLmxvYWRpbmdSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5sb2FkaW5nUmVmID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIGhpZGRlbiBkYXRhIHJvd3NcbiAgICBpZiAodGJvZHkpIHtcbiAgICAgIGNvbnN0IHJvd3MgPSB0Ym9keS5xdWVyeVNlbGVjdG9yQWxsKCd0cicpO1xuICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShyb3csICdkaXNwbGF5Jyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtbkNvdW50KGhvc3Q6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCBoZWFkZXJSb3cgPSBob3N0LnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkIHRyJyk7XG4gICAgaWYgKGhlYWRlclJvdykge1xuICAgICAgcmV0dXJuIGhlYWRlclJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDk5O1xuICB9XG59XG4iXX0=