@ngstato/angular 0.1.2 → 0.1.4

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,343 @@
1
+ import { Component, signal } from '@angular/core';
2
+ import { devTools } from '@ngstato/core';
3
+ import { JsonPipe } from '@angular/common';
4
+ import * as i0 from "@angular/core";
5
+ export class StatoDevToolsComponent {
6
+ unsub;
7
+ // State UI
8
+ isOpen = signal(false);
9
+ isMinimized = signal(false);
10
+ activeTab = signal('actions');
11
+ logs = signal([]);
12
+ selectedLog = signal(null);
13
+ // Position et taille
14
+ posX = signal(24);
15
+ posY = signal(window.innerHeight - 500);
16
+ panelWidth = signal(420);
17
+ panelHeight = signal(460);
18
+ // Drag state
19
+ isDragging = false;
20
+ isResizing = false;
21
+ dragOffsetX = 0;
22
+ dragOffsetY = 0;
23
+ startW = 0;
24
+ startH = 0;
25
+ startX = 0;
26
+ startY = 0;
27
+ // Bound listeners
28
+ boundMouseMove = this.onMouseMove.bind(this);
29
+ boundMouseUp = this.onMouseUp.bind(this);
30
+ ngOnInit() {
31
+ this.unsub = devTools.subscribe((state) => {
32
+ this.logs.set(state.logs);
33
+ this.isOpen.set(state.isOpen);
34
+ });
35
+ document.addEventListener('mousemove', this.boundMouseMove);
36
+ document.addEventListener('mouseup', this.boundMouseUp);
37
+ }
38
+ ngOnDestroy() {
39
+ this.unsub?.();
40
+ document.removeEventListener('mousemove', this.boundMouseMove);
41
+ document.removeEventListener('mouseup', this.boundMouseUp);
42
+ }
43
+ // ── Toggle ─────────────────────────────────────────
44
+ toggle() { devTools.toggle(); }
45
+ toggleMinimize() { this.isMinimized.update(v => !v); }
46
+ clear() { devTools.clear(); this.selectedLog.set(null); }
47
+ selectLog(log) {
48
+ this.selectedLog.set(this.selectedLog()?.id === log.id ? null : log);
49
+ }
50
+ formatTime(iso) {
51
+ return new Date(iso).toTimeString().slice(0, 8);
52
+ }
53
+ // ── Drag ───────────────────────────────────────────
54
+ onDragStart(e) {
55
+ if (e.target.classList.contains('btn-icon'))
56
+ return;
57
+ this.isDragging = true;
58
+ this.dragOffsetX = e.clientX - this.posX();
59
+ this.dragOffsetY = e.clientY - this.posY();
60
+ e.preventDefault();
61
+ }
62
+ // ── Resize ─────────────────────────────────────────
63
+ onResizeStart(e) {
64
+ this.isResizing = true;
65
+ this.startW = this.panelWidth();
66
+ this.startH = this.panelHeight();
67
+ this.startX = e.clientX;
68
+ this.startY = e.clientY;
69
+ e.preventDefault();
70
+ e.stopPropagation();
71
+ }
72
+ // ── Mouse Move ─────────────────────────────────────
73
+ onMouseMove(e) {
74
+ if (this.isDragging) {
75
+ this.posX.set(Math.max(0, e.clientX - this.dragOffsetX));
76
+ this.posY.set(Math.max(0, e.clientY - this.dragOffsetY));
77
+ }
78
+ if (this.isResizing) {
79
+ const newW = Math.max(300, this.startW + e.clientX - this.startX);
80
+ const newH = Math.max(200, this.startH + e.clientY - this.startY);
81
+ this.panelWidth.set(newW);
82
+ this.panelHeight.set(newH);
83
+ }
84
+ }
85
+ // ── Mouse Up ───────────────────────────────────────
86
+ onMouseUp() {
87
+ this.isDragging = false;
88
+ this.isResizing = false;
89
+ }
90
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StatoDevToolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
91
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: StatoDevToolsComponent, isStandalone: true, selector: "ngstato-devtools", ngImport: i0, template: `
92
+ <!-- Bouton flottant -->
93
+ @if (!isOpen()) {
94
+ <button class="devtools-fab" (click)="toggle()">
95
+ 🛠 Stato
96
+ </button>
97
+ }
98
+
99
+ <!-- Panel -->
100
+ @if (isOpen()) {
101
+ <div
102
+ class="devtools-panel"
103
+ [class.devtools-panel--minimized]="isMinimized()"
104
+ [style.left.px]="posX()"
105
+ [style.top.px]="posY()"
106
+ [style.width.px]="isMinimized() ? 200 : panelWidth()"
107
+ [style.height]="isMinimized() ? 'auto' : panelHeight() + 'px'"
108
+ >
109
+
110
+ <!-- Header — draggable -->
111
+ <div
112
+ class="devtools-header"
113
+ (mousedown)="onDragStart($event)"
114
+ >
115
+ <span class="devtools-title">🛠 Stato</span>
116
+ <div class="devtools-header-actions">
117
+ @if (!isMinimized()) {
118
+ <button class="btn-icon" (click)="clear()" title="Vider">🗑</button>
119
+ }
120
+ <button class="btn-icon" (click)="toggleMinimize()" title="Minimiser/Agrandir">
121
+ {{ isMinimized() ? '▲' : '▼' }}
122
+ </button>
123
+ <button class="btn-icon" (click)="toggle()" title="Fermer">✕</button>
124
+ </div>
125
+ </div>
126
+
127
+ <!-- Resize handle — coin bas droite -->
128
+ @if (!isMinimized()) {
129
+ <div
130
+ class="devtools-resize"
131
+ (mousedown)="onResizeStart($event)"
132
+ >⊿</div>
133
+ }
134
+
135
+ @if (!isMinimized()) {
136
+
137
+ <!-- Tabs -->
138
+ <div class="devtools-tabs">
139
+ <button
140
+ class="tab"
141
+ [class.tab--active]="activeTab() === 'actions'"
142
+ (click)="activeTab.set('actions')"
143
+ >
144
+ Actions ({{ logs().length }})
145
+ </button>
146
+ <button
147
+ class="tab"
148
+ [class.tab--active]="activeTab() === 'state'"
149
+ (click)="activeTab.set('state')"
150
+ >
151
+ State
152
+ </button>
153
+ </div>
154
+
155
+ <!-- Tab Actions -->
156
+ @if (activeTab() === 'actions') {
157
+ <div class="devtools-content">
158
+ @if (!logs().length) {
159
+ <div class="devtools-empty">Aucune action pour l'instant</div>
160
+ }
161
+ @for (log of logs(); track log.id) {
162
+ <div
163
+ class="log-item"
164
+ [class.log-item--error]="log.status === 'error'"
165
+ (click)="selectLog(log)"
166
+ >
167
+ <div class="log-item__left">
168
+ <span class="log-status">{{ log.status === 'success' ? '✓' : '✗' }}</span>
169
+ <span class="log-name">{{ log.name }}</span>
170
+ </div>
171
+ <div class="log-item__right">
172
+ @if (log.status === 'error') {
173
+ <span class="log-error-badge">erreur</span>
174
+ } @else {
175
+ <span class="log-duration">{{ log.duration }}ms</span>
176
+ }
177
+ <span class="log-time">{{ formatTime(log.at) }}</span>
178
+ </div>
179
+ </div>
180
+
181
+ @if (selectedLog()?.id === log.id) {
182
+ <div class="log-detail">
183
+ @if (log.error) {
184
+ <div class="log-detail__error">{{ log.error }}</div>
185
+ }
186
+ <div class="log-detail__section">
187
+ <span class="log-detail__label">Avant</span>
188
+ <pre>{{ log.prevState | json }}</pre>
189
+ </div>
190
+ <div class="log-detail__section">
191
+ <span class="log-detail__label">Après</span>
192
+ <pre>{{ log.nextState | json }}</pre>
193
+ </div>
194
+ </div>
195
+ }
196
+ }
197
+ </div>
198
+ }
199
+
200
+ <!-- Tab State -->
201
+ @if (activeTab() === 'state') {
202
+ <div class="devtools-content">
203
+ @if (logs().length) {
204
+ <pre class="state-view">{{ logs()[0].nextState | json }}</pre>
205
+ } @else {
206
+ <div class="devtools-empty">Aucun state disponible</div>
207
+ }
208
+ </div>
209
+ }
210
+ }
211
+
212
+ </div>
213
+ }
214
+ `, isInline: true, styles: [".devtools-fab{position:fixed;bottom:1.5rem;left:1.5rem;background:#1e293b;color:#fff;border:none;border-radius:999px;padding:.5rem 1rem;font-size:.85rem;font-weight:600;cursor:pointer;z-index:9999;box-shadow:0 4px 12px #0000004d;transition:background .15s}.devtools-fab:hover{background:#334155}.devtools-panel{position:fixed;background:#0f172a;border-radius:12px;box-shadow:0 8px 32px #0006;z-index:9999;display:flex;flex-direction:column;overflow:hidden;font-family:Courier New,monospace;min-width:200px;min-height:40px}.devtools-panel--minimized{border-radius:8px}.devtools-header{display:flex;justify-content:space-between;align-items:center;padding:.6rem .75rem;background:#1e293b;border-bottom:1px solid #334155;cursor:grab;-webkit-user-select:none;user-select:none}.devtools-header:active{cursor:grabbing}.devtools-title{color:#e2e8f0;font-size:.82rem;font-weight:600;font-family:system-ui}.devtools-header-actions{display:flex;gap:.25rem}.btn-icon{background:transparent;color:#64748b;border:none;cursor:pointer;font-size:.8rem;padding:.15rem .35rem;border-radius:4px;line-height:1}.btn-icon:hover{background:#334155;color:#fff}.devtools-resize{position:absolute;bottom:2px;right:4px;color:#334155;font-size:.9rem;cursor:nwse-resize;-webkit-user-select:none;user-select:none;line-height:1}.devtools-resize:hover{color:#64748b}.devtools-tabs{display:flex;background:#1e293b;border-bottom:1px solid #334155}.tab{padding:.4rem .75rem;background:transparent;color:#64748b;border:none;cursor:pointer;font-size:.78rem;font-family:system-ui}.tab:hover{color:#e2e8f0}.tab--active{color:#3b82f6;border-bottom:2px solid #3b82f6}.devtools-content{overflow-y:auto;flex:1;padding:.25rem 0}.devtools-empty{padding:2rem;text-align:center;color:#475569;font-size:.78rem;font-family:system-ui}.log-item{display:flex;justify-content:space-between;align-items:center;padding:.35rem .75rem;cursor:pointer;border-bottom:1px solid #1e293b}.log-item:hover{background:#1e293b}.log-item--error{background:#1a0a0a}.log-item__left{display:flex;align-items:center;gap:.4rem;overflow:hidden}.log-item__right{display:flex;align-items:center;gap:.4rem;flex-shrink:0}.log-status{font-size:.72rem;color:#22c55e;flex-shrink:0}.log-item--error .log-status{color:#ef4444}.log-name{color:#e2e8f0;font-size:.75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.log-duration{color:#64748b;font-size:.7rem}.log-time{color:#475569;font-size:.68rem}.log-error-badge{background:#7f1d1d;color:#fca5a5;font-size:.68rem;padding:.1rem .35rem;border-radius:4px}.log-detail{background:#0a0f1a;padding:.6rem .75rem;border-left:3px solid #3b82f6;margin:0 .4rem .4rem;border-radius:0 4px 4px 0}.log-detail__error{color:#fca5a5;font-size:.72rem;margin-bottom:.4rem}.log-detail__section{margin-bottom:.4rem}.log-detail__label{color:#64748b;font-size:.68rem;display:block;margin-bottom:.2rem;font-family:system-ui}pre{color:#86efac;font-size:.7rem;margin:0;white-space:pre-wrap;word-break:break-all;max-height:140px;overflow-y:auto}.state-view{color:#86efac;font-size:.7rem;padding:.75rem;margin:0;white-space:pre-wrap;word-break:break-all}\n"], dependencies: [{ kind: "pipe", type: JsonPipe, name: "json" }] });
215
+ }
216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StatoDevToolsComponent, decorators: [{
217
+ type: Component,
218
+ args: [{ selector: 'ngstato-devtools', standalone: true, imports: [JsonPipe], template: `
219
+ <!-- Bouton flottant -->
220
+ @if (!isOpen()) {
221
+ <button class="devtools-fab" (click)="toggle()">
222
+ 🛠 Stato
223
+ </button>
224
+ }
225
+
226
+ <!-- Panel -->
227
+ @if (isOpen()) {
228
+ <div
229
+ class="devtools-panel"
230
+ [class.devtools-panel--minimized]="isMinimized()"
231
+ [style.left.px]="posX()"
232
+ [style.top.px]="posY()"
233
+ [style.width.px]="isMinimized() ? 200 : panelWidth()"
234
+ [style.height]="isMinimized() ? 'auto' : panelHeight() + 'px'"
235
+ >
236
+
237
+ <!-- Header — draggable -->
238
+ <div
239
+ class="devtools-header"
240
+ (mousedown)="onDragStart($event)"
241
+ >
242
+ <span class="devtools-title">🛠 Stato</span>
243
+ <div class="devtools-header-actions">
244
+ @if (!isMinimized()) {
245
+ <button class="btn-icon" (click)="clear()" title="Vider">🗑</button>
246
+ }
247
+ <button class="btn-icon" (click)="toggleMinimize()" title="Minimiser/Agrandir">
248
+ {{ isMinimized() ? '▲' : '▼' }}
249
+ </button>
250
+ <button class="btn-icon" (click)="toggle()" title="Fermer">✕</button>
251
+ </div>
252
+ </div>
253
+
254
+ <!-- Resize handle — coin bas droite -->
255
+ @if (!isMinimized()) {
256
+ <div
257
+ class="devtools-resize"
258
+ (mousedown)="onResizeStart($event)"
259
+ >⊿</div>
260
+ }
261
+
262
+ @if (!isMinimized()) {
263
+
264
+ <!-- Tabs -->
265
+ <div class="devtools-tabs">
266
+ <button
267
+ class="tab"
268
+ [class.tab--active]="activeTab() === 'actions'"
269
+ (click)="activeTab.set('actions')"
270
+ >
271
+ Actions ({{ logs().length }})
272
+ </button>
273
+ <button
274
+ class="tab"
275
+ [class.tab--active]="activeTab() === 'state'"
276
+ (click)="activeTab.set('state')"
277
+ >
278
+ State
279
+ </button>
280
+ </div>
281
+
282
+ <!-- Tab Actions -->
283
+ @if (activeTab() === 'actions') {
284
+ <div class="devtools-content">
285
+ @if (!logs().length) {
286
+ <div class="devtools-empty">Aucune action pour l'instant</div>
287
+ }
288
+ @for (log of logs(); track log.id) {
289
+ <div
290
+ class="log-item"
291
+ [class.log-item--error]="log.status === 'error'"
292
+ (click)="selectLog(log)"
293
+ >
294
+ <div class="log-item__left">
295
+ <span class="log-status">{{ log.status === 'success' ? '✓' : '✗' }}</span>
296
+ <span class="log-name">{{ log.name }}</span>
297
+ </div>
298
+ <div class="log-item__right">
299
+ @if (log.status === 'error') {
300
+ <span class="log-error-badge">erreur</span>
301
+ } @else {
302
+ <span class="log-duration">{{ log.duration }}ms</span>
303
+ }
304
+ <span class="log-time">{{ formatTime(log.at) }}</span>
305
+ </div>
306
+ </div>
307
+
308
+ @if (selectedLog()?.id === log.id) {
309
+ <div class="log-detail">
310
+ @if (log.error) {
311
+ <div class="log-detail__error">{{ log.error }}</div>
312
+ }
313
+ <div class="log-detail__section">
314
+ <span class="log-detail__label">Avant</span>
315
+ <pre>{{ log.prevState | json }}</pre>
316
+ </div>
317
+ <div class="log-detail__section">
318
+ <span class="log-detail__label">Après</span>
319
+ <pre>{{ log.nextState | json }}</pre>
320
+ </div>
321
+ </div>
322
+ }
323
+ }
324
+ </div>
325
+ }
326
+
327
+ <!-- Tab State -->
328
+ @if (activeTab() === 'state') {
329
+ <div class="devtools-content">
330
+ @if (logs().length) {
331
+ <pre class="state-view">{{ logs()[0].nextState | json }}</pre>
332
+ } @else {
333
+ <div class="devtools-empty">Aucun state disponible</div>
334
+ }
335
+ </div>
336
+ }
337
+ }
338
+
339
+ </div>
340
+ }
341
+ `, styles: [".devtools-fab{position:fixed;bottom:1.5rem;left:1.5rem;background:#1e293b;color:#fff;border:none;border-radius:999px;padding:.5rem 1rem;font-size:.85rem;font-weight:600;cursor:pointer;z-index:9999;box-shadow:0 4px 12px #0000004d;transition:background .15s}.devtools-fab:hover{background:#334155}.devtools-panel{position:fixed;background:#0f172a;border-radius:12px;box-shadow:0 8px 32px #0006;z-index:9999;display:flex;flex-direction:column;overflow:hidden;font-family:Courier New,monospace;min-width:200px;min-height:40px}.devtools-panel--minimized{border-radius:8px}.devtools-header{display:flex;justify-content:space-between;align-items:center;padding:.6rem .75rem;background:#1e293b;border-bottom:1px solid #334155;cursor:grab;-webkit-user-select:none;user-select:none}.devtools-header:active{cursor:grabbing}.devtools-title{color:#e2e8f0;font-size:.82rem;font-weight:600;font-family:system-ui}.devtools-header-actions{display:flex;gap:.25rem}.btn-icon{background:transparent;color:#64748b;border:none;cursor:pointer;font-size:.8rem;padding:.15rem .35rem;border-radius:4px;line-height:1}.btn-icon:hover{background:#334155;color:#fff}.devtools-resize{position:absolute;bottom:2px;right:4px;color:#334155;font-size:.9rem;cursor:nwse-resize;-webkit-user-select:none;user-select:none;line-height:1}.devtools-resize:hover{color:#64748b}.devtools-tabs{display:flex;background:#1e293b;border-bottom:1px solid #334155}.tab{padding:.4rem .75rem;background:transparent;color:#64748b;border:none;cursor:pointer;font-size:.78rem;font-family:system-ui}.tab:hover{color:#e2e8f0}.tab--active{color:#3b82f6;border-bottom:2px solid #3b82f6}.devtools-content{overflow-y:auto;flex:1;padding:.25rem 0}.devtools-empty{padding:2rem;text-align:center;color:#475569;font-size:.78rem;font-family:system-ui}.log-item{display:flex;justify-content:space-between;align-items:center;padding:.35rem .75rem;cursor:pointer;border-bottom:1px solid #1e293b}.log-item:hover{background:#1e293b}.log-item--error{background:#1a0a0a}.log-item__left{display:flex;align-items:center;gap:.4rem;overflow:hidden}.log-item__right{display:flex;align-items:center;gap:.4rem;flex-shrink:0}.log-status{font-size:.72rem;color:#22c55e;flex-shrink:0}.log-item--error .log-status{color:#ef4444}.log-name{color:#e2e8f0;font-size:.75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.log-duration{color:#64748b;font-size:.7rem}.log-time{color:#475569;font-size:.68rem}.log-error-badge{background:#7f1d1d;color:#fca5a5;font-size:.68rem;padding:.1rem .35rem;border-radius:4px}.log-detail{background:#0a0f1a;padding:.6rem .75rem;border-left:3px solid #3b82f6;margin:0 .4rem .4rem;border-radius:0 4px 4px 0}.log-detail__error{color:#fca5a5;font-size:.72rem;margin-bottom:.4rem}.log-detail__section{margin-bottom:.4rem}.log-detail__label{color:#64748b;font-size:.68rem;display:block;margin-bottom:.2rem;font-family:system-ui}pre{color:#86efac;font-size:.7rem;margin:0;white-space:pre-wrap;word-break:break-all;max-height:140px;overflow-y:auto}.state-view{color:#86efac;font-size:.7rem;padding:.75rem;margin:0;white-space:pre-wrap;word-break:break-all}\n"] }]
342
+ }] });
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2dG9vbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RldnRvb2xzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULE1BQU0sRUFDUCxNQUE2QixlQUFlLENBQUE7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFXLGVBQWUsQ0FBQTtBQUU3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7O0FBa1QxQyxNQUFNLE9BQU8sc0JBQXNCO0lBRXpCLEtBQUssQ0FBYTtJQUUxQixXQUFXO0lBQ1gsTUFBTSxHQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzQixXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzNCLFNBQVMsR0FBSyxNQUFNLENBQXNCLFNBQVMsQ0FBQyxDQUFBO0lBQ3BELElBQUksR0FBVSxNQUFNLENBQWMsRUFBRSxDQUFDLENBQUE7SUFDckMsV0FBVyxHQUFHLE1BQU0sQ0FBbUIsSUFBSSxDQUFDLENBQUE7SUFFNUMscUJBQXFCO0lBQ3JCLElBQUksR0FBVSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDeEIsSUFBSSxHQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFBO0lBQzlDLFVBQVUsR0FBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDekIsV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV6QixhQUFhO0lBQ0wsVUFBVSxHQUFJLEtBQUssQ0FBQTtJQUNuQixVQUFVLEdBQUksS0FBSyxDQUFBO0lBQ25CLFdBQVcsR0FBRyxDQUFDLENBQUE7SUFDZixXQUFXLEdBQUcsQ0FBQyxDQUFBO0lBQ2YsTUFBTSxHQUFRLENBQUMsQ0FBQTtJQUNmLE1BQU0sR0FBUSxDQUFDLENBQUE7SUFDZixNQUFNLEdBQVEsQ0FB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QUFLLENBQUE7SUFDekIsQ0FBQzt3R0FoR1Usc0JBQXNCOzRGQUF0QixzQkFBc0IsNEVBNVN2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkhULHdtR0E1SFksUUFBUTs7NEZBNlNWLHNCQUFzQjtrQkFoVGxDLFNBQVM7K0JBQ0ksa0JBQWtCLGNBQ2xCLElBQUksV0FDSixDQUFDLFFBQVEsQ0FBQyxZQUNaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EySFQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBzaWduYWxcbn0gICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgZGV2VG9vbHMgfSAgICAgIGZyb20gJ0BuZ3N0YXRvL2NvcmUnXG5pbXBvcnQgdHlwZSB7IEFjdGlvbkxvZyB9IGZyb20gJ0BuZ3N0YXRvL2NvcmUnXG5pbXBvcnQgeyBKc29uUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAgICduZ3N0YXRvLWRldnRvb2xzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogICAgW0pzb25QaXBlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8IS0tIEJvdXRvbiBmbG90dGFudCAtLT5cbiAgICBAaWYgKCFpc09wZW4oKSkge1xuICAgICAgPGJ1dHRvbiBjbGFzcz1cImRldnRvb2xzLWZhYlwiIChjbGljayk9XCJ0b2dnbGUoKVwiPlxuICAgICAgICDwn5ugIFN0YXRvXG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG5cbiAgICA8IS0tIFBhbmVsIC0tPlxuICAgIEBpZiAoaXNPcGVuKCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkZXZ0b29scy1wYW5lbFwiXG4gICAgICAgIFtjbGFzcy5kZXZ0b29scy1wYW5lbC0tbWluaW1pemVkXT1cImlzTWluaW1pemVkKClcIlxuICAgICAgICBbc3R5bGUubGVmdC5weF09XCJwb3NYKClcIlxuICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBvc1koKVwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJpc01pbmltaXplZCgpID8gMjAwIDogcGFuZWxXaWR0aCgpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJpc01pbmltaXplZCgpID8gJ2F1dG8nIDogcGFuZWxIZWlnaHQoKSArICdweCdcIlxuICAgICAgPlxuXG4gICAgICAgIDwhLS0gSGVhZGVyIOKAlCBkcmFnZ2FibGUgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRldnRvb2xzLWhlYWRlclwiXG4gICAgICAgICAgKG1vdXNlZG93bik9XCJvbkRyYWdTdGFydCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGV2dG9vbHMtdGl0bGVcIj7wn5ugIFN0YXRvPC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXZ0b29scy1oZWFkZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgQGlmICghaXNNaW5pbWl6ZWQoKSkge1xuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWljb25cIiAoY2xpY2spPVwiY2xlYXIoKVwiIHRpdGxlPVwiVmlkZXJcIj7wn5eRPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWljb25cIiAoY2xpY2spPVwidG9nZ2xlTWluaW1pemUoKVwiIHRpdGxlPVwiTWluaW1pc2VyL0FncmFuZGlyXCI+XG4gICAgICAgICAgICAgIHt7IGlzTWluaW1pemVkKCkgPyAn4payJyA6ICfilrwnIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4taWNvblwiIChjbGljayk9XCJ0b2dnbGUoKVwiIHRpdGxlPVwiRmVybWVyXCI+4pyVPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUmVzaXplIGhhbmRsZSDigJQgY29pbiBiYXMgZHJvaXRlIC0tPlxuICAgICAgICBAaWYgKCFpc01pbmltaXplZCgpKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkZXZ0b29scy1yZXNpemVcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJlc2l6ZVN0YXJ0KCRldmVudClcIlxuICAgICAgICAgID7iir88L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoIWlzTWluaW1pemVkKCkpIHtcblxuICAgICAgICAgIDwhLS0gVGFicyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV2dG9vbHMtdGFic1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInRhYlwiXG4gICAgICAgICAgICAgIFtjbGFzcy50YWItLWFjdGl2ZV09XCJhY3RpdmVUYWIoKSA9PT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZVRhYi5zZXQoJ2FjdGlvbnMnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEFjdGlvbnMgKHt7IGxvZ3MoKS5sZW5ndGggfX0pXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJcIlxuICAgICAgICAgICAgICBbY2xhc3MudGFiLS1hY3RpdmVdPVwiYWN0aXZlVGFiKCkgPT09ICdzdGF0ZSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlVGFiLnNldCgnc3RhdGUnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFN0YXRlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVGFiIEFjdGlvbnMgLS0+XG4gICAgICAgICAgQGlmIChhY3RpdmVUYWIoKSA9PT0gJ2FjdGlvbnMnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV2dG9vbHMtY29udGVudFwiPlxuICAgICAgICAgICAgICBAaWYgKCFsb2dzKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldnRvb2xzLWVtcHR5XCI+QXVjdW5lIGFjdGlvbiBwb3VyIGwnaW5zdGFudDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBmb3IgKGxvZyBvZiBsb2dzKCk7IHRyYWNrIGxvZy5pZCkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibG9nLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmxvZy1pdGVtLS1lcnJvcl09XCJsb2cuc3RhdHVzID09PSAnZXJyb3InXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb2cobG9nKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1pdGVtX19sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nLXN0YXR1c1wiPnt7IGxvZy5zdGF0dXMgPT09ICdzdWNjZXNzJyA/ICfinJMnIDogJ+KclycgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nLW5hbWVcIj57eyBsb2cubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1pdGVtX19yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGxvZy5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZy1lcnJvci1iYWRnZVwiPmVycmV1cjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2ctZHVyYXRpb25cIj57eyBsb2cuZHVyYXRpb24gfX1tczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZy10aW1lXCI+e3sgZm9ybWF0VGltZShsb2cuYXQpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkTG9nKCk/LmlkID09PSBsb2cuaWQpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2ctZGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobG9nLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1kZXRhaWxfX2Vycm9yXCI+e3sgbG9nLmVycm9yIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1kZXRhaWxfX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZy1kZXRhaWxfX2xhYmVsXCI+QXZhbnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHByZT57eyBsb2cucHJldlN0YXRlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1kZXRhaWxfX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvZy1kZXRhaWxfX2xhYmVsXCI+QXByw6hzPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgbG9nLm5leHRTdGF0ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gVGFiIFN0YXRlIC0tPlxuICAgICAgICAgIEBpZiAoYWN0aXZlVGFiKCkgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXZ0b29scy1jb250ZW50XCI+XG4gICAgICAgICAgICAgIEBpZiAobG9ncygpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9XCJzdGF0ZS12aWV3XCI+e3sgbG9ncygpWzBdLm5leHRTdGF0ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldnRvb2xzLWVtcHR5XCI+QXVjdW4gc3RhdGUgZGlzcG9uaWJsZTwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgPC9kaXY+XG4gICAgfVxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLmRldnRvb2xzLWZhYiB7XG4gICAgICBwb3NpdGlvbjogICAgICBmaXhlZDtcbiAgICAgIGJvdHRvbTogICAgICAgIDEuNXJlbTtcbiAgICAgIGxlZnQ6ICAgICAgICAgIDEuNXJlbTtcbiAgICAgIGJhY2tncm91bmQ6ICAgICMxZTI5M2I7XG4gICAgICBjb2xvcjogICAgICAgICB3aGl0ZTtcbiAgICAgIGJvcmRlcjogICAgICAgIG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgIHBhZGRpbmc6ICAgICAgIDAuNXJlbSAxcmVtO1xuICAgICAgZm9udC1zaXplOiAgICAgMC44NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiAgIDYwMDtcbiAgICAgIGN1cnNvcjogICAgICAgIHBvaW50ZXI7XG4gICAgICB6LWluZGV4OiAgICAgICA5OTk5O1xuICAgICAgYm94LXNoYWRvdzogICAgMCA0cHggMTJweCByZ2JhKDAsMCwwLDAuMyk7XG4gICAgICB0cmFuc2l0aW9uOiAgICBiYWNrZ3JvdW5kIDAuMTVzO1xuICAgIH1cbiAgICAuZGV2dG9vbHMtZmFiOmhvdmVyIHsgYmFja2dyb3VuZDogIzMzNDE1NTsgfVxuXG4gICAgLmRldnRvb2xzLXBhbmVsIHtcbiAgICAgIHBvc2l0aW9uOiAgICAgICBmaXhlZDtcbiAgICAgIGJhY2tncm91bmQ6ICAgICAjMGYxNzJhO1xuICAgICAgYm9yZGVyLXJhZGl1czogIDEycHg7XG4gICAgICBib3gtc2hhZG93OiAgICAgMCA4cHggMzJweCByZ2JhKDAsMCwwLDAuNCk7XG4gICAgICB6LWluZGV4OiAgICAgICAgOTk5OTtcbiAgICAgIGRpc3BsYXk6ICAgICAgICBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIG92ZXJmbG93OiAgICAgICBoaWRkZW47XG4gICAgICBmb250LWZhbWlseTogICAgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xuICAgICAgbWluLXdpZHRoOiAgICAgIDIwMHB4O1xuICAgICAgbWluLWhlaWdodDogICAgIDQwcHg7XG4gICAgfVxuXG4gICAgLmRldnRvb2xzLXBhbmVsLS1taW5pbWl6ZWQge1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIH1cblxuICAgIC5kZXZ0b29scy1oZWFkZXIge1xuICAgICAgZGlzcGxheTogICAgICAgICBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgYWxpZ24taXRlbXM6ICAgICBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiAgICAgICAgIDAuNnJlbSAwLjc1cmVtO1xuICAgICAgYmFja2dyb3VuZDogICAgICAjMWUyOTNiO1xuICAgICAgYm9yZGVyLWJvdHRvbTogICAxcHggc29saWQgIzMzNDE1NTtcbiAgICAgIGN1cnNvcjogICAgICAgICAgZ3JhYjtcbiAgICAgIHVzZXItc2VsZWN0OiAgICAgbm9uZTtcbiAgICB9XG4gICAgLmRldnRvb2xzLWhlYWRlcjphY3RpdmUgeyBjdXJzb3I6IGdyYWJiaW5nOyB9XG5cbiAgICAuZGV2dG9vbHMtdGl0bGUge1xuICAgICAgY29sb3I6ICAgICAgICNlMmU4ZjA7XG4gICAgICBmb250LXNpemU6ICAgMC44MnJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LWZhbWlseTogc3lzdGVtLXVpO1xuICAgIH1cblxuICAgIC5kZXZ0b29scy1oZWFkZXItYWN0aW9ucyB7IGRpc3BsYXk6IGZsZXg7IGdhcDogMC4yNXJlbTsgfVxuXG4gICAgLmJ0bi1pY29uIHtcbiAgICAgIGJhY2tncm91bmQ6ICAgIHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6ICAgICAgICAgIzY0NzQ4YjtcbiAgICAgIGJvcmRlcjogICAgICAgIG5vbmU7XG4gICAgICBjdXJzb3I6ICAgICAgICBwb2ludGVyO1xuICAgICAgZm9udC1zaXplOiAgICAgMC44cmVtO1xuICAgICAgcGFkZGluZzogICAgICAgMC4xNXJlbSAwLjM1cmVtO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6ICAgMTtcbiAgICB9XG4gICAgLmJ0bi1pY29uOmhvdmVyIHsgYmFja2dyb3VuZDogIzMzNDE1NTsgY29sb3I6IHdoaXRlOyB9XG5cbiAgICAuZGV2dG9vbHMtcmVzaXplIHtcbiAgICAgIHBvc2l0aW9uOiAgYWJzb2x1dGU7XG4gICAgICBib3R0b206ICAgIDJweDtcbiAgICAgIHJpZ2h0OiAgICAgNHB4O1xuICAgICAgY29sb3I6ICAgICAjMzM0MTU1O1xuICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgICBjdXJzb3I6ICAgIG53c2UtcmVzaXplO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICBsaW5lLWhlaWdodDogMTtcbiAgICB9XG4gICAgLmRldnRvb2xzLXJlc2l6ZTpob3ZlciB7IGNvbG9yOiAjNjQ3NDhiOyB9XG5cbiAgICAuZGV2dG9vbHMtdGFicyB7XG4gICAgICBkaXNwbGF5OiAgICAgICBmbGV4O1xuICAgICAgYmFja2dyb3VuZDogICAgIzFlMjkzYjtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzM0MTU1O1xuICAgIH1cbiAgICAudGFiIHtcbiAgICAgIHBhZGRpbmc6ICAgICAwLjRyZW0gMC43NXJlbTtcbiAgICAgIGJhY2tncm91bmQ6ICB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiAgICAgICAjNjQ3NDhiO1xuICAgICAgYm9yZGVyOiAgICAgIG5vbmU7XG4gICAgICBjdXJzb3I6ICAgICAgcG9pbnRlcjtcbiAgICAgIGZvbnQtc2l6ZTogICAwLjc4cmVtO1xuICAgICAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTtcbiAgICB9XG4gICAgLnRhYjpob3ZlciAgICB7IGNvbG9yOiAjZTJlOGYwOyB9XG4gICAgLnRhYi0tYWN0aXZlICB7IGNvbG9yOiAjM2I4MmY2OyBib3JkZXItYm90dG9tOiAycHggc29saWQgIzNiODJmNjsgfVxuXG4gICAgLmRldnRvb2xzLWNvbnRlbnQge1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIGZsZXg6ICAgICAgIDE7XG4gICAgICBwYWRkaW5nOiAgICAwLjI1cmVtIDA7XG4gICAgfVxuXG4gICAgLmRldnRvb2xzLWVtcHR5IHtcbiAgICAgIHBhZGRpbmc6ICAgICAycmVtO1xuICAgICAgdGV4dC1hbGlnbjogIGNlbnRlcjtcbiAgICAgIGNvbG9yOiAgICAgICAjNDc1NTY5O1xuICAgICAgZm9udC1zaXplOiAgIDAuNzhyZW07XG4gICAgICBmb250LWZhbWlseTogc3lzdGVtLXVpO1xuICAgIH1cblxuICAgIC5sb2ctaXRlbSB7XG4gICAgICBkaXNwbGF5OiAgICAgICAgIGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBhbGlnbi1pdGVtczogICAgIGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6ICAgICAgICAgMC4zNXJlbSAwLjc1cmVtO1xuICAgICAgY3Vyc29yOiAgICAgICAgICBwb2ludGVyO1xuICAgICAgYm9yZGVyLWJvdHRvbTogICAxcHggc29saWQgIzFlMjkzYjtcbiAgICB9XG4gICAgLmxvZy1pdGVtOmhvdmVyICAgICAgICB7IGJhY2tncm91bmQ6ICMxZTI5M2I7IH1cbiAgICAubG9nLWl0ZW0tLWVycm9yICAgICAgIHsgYmFja2dyb3VuZDogIzFhMGEwYTsgfVxuXG4gICAgLmxvZy1pdGVtX19sZWZ0ICB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMC40cmVtOyBvdmVyZmxvdzogaGlkZGVuOyB9XG4gICAgLmxvZy1pdGVtX19yaWdodCB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMC40cmVtOyBmbGV4LXNocmluazogMDsgfVxuXG4gICAgLmxvZy1zdGF0dXMgIHsgZm9udC1zaXplOiAwLjcycmVtOyBjb2xvcjogIzIyYzU1ZTsgZmxleC1zaHJpbms6IDA7IH1cbiAgICAubG9nLWl0ZW0tLWVycm9yIC5sb2ctc3RhdHVzIHsgY29sb3I6ICNlZjQ0NDQ7IH1cbiAgICAubG9nLW5hbWUgICAgeyBjb2xvcjogI2UyZThmMDsgZm9udC1zaXplOiAwLjc1cmVtOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgfVxuICAgIC5sb2ctZHVyYXRpb24geyBjb2xvcjogIzY0NzQ4YjsgZm9udC1zaXplOiAwLjdyZW07IH1cbiAgICAubG9nLXRpbWUgICAgeyBjb2xvcjogIzQ3NTU2OTsgZm9udC1zaXplOiAwLjY4cmVtOyB9XG5cbiAgICAubG9nLWVycm9yLWJhZGdlIHtcbiAgICAgIGJhY2tncm91bmQ6ICAgICM3ZjFkMWQ7XG4gICAgICBjb2xvcjogICAgICAgICAjZmNhNWE1O1xuICAgICAgZm9udC1zaXplOiAgICAgMC42OHJlbTtcbiAgICAgIHBhZGRpbmc6ICAgICAgIDAuMXJlbSAwLjM1cmVtO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cblxuICAgIC5sb2ctZGV0YWlsIHtcbiAgICAgIGJhY2tncm91bmQ6ICAgICMwYTBmMWE7XG4gICAgICBwYWRkaW5nOiAgICAgICAwLjZyZW0gMC43NXJlbTtcbiAgICAgIGJvcmRlci1sZWZ0OiAgIDNweCBzb2xpZCAjM2I4MmY2O1xuICAgICAgbWFyZ2luOiAgICAgICAgMCAwLjRyZW0gMC40cmVtO1xuICAgICAgYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG4gICAgfVxuICAgIC5sb2ctZGV0YWlsX19lcnJvciAgIHsgY29sb3I6ICNmY2E1YTU7IGZvbnQtc2l6ZTogMC43MnJlbTsgbWFyZ2luLWJvdHRvbTogMC40cmVtOyB9XG4gICAgLmxvZy1kZXRhaWxfX3NlY3Rpb24geyBtYXJnaW4tYm90dG9tOiAwLjRyZW07IH1cbiAgICAubG9nLWRldGFpbF9fbGFiZWwgICB7XG4gICAgICBjb2xvcjogICAgICAgICAjNjQ3NDhiO1xuICAgICAgZm9udC1zaXplOiAgICAgMC42OHJlbTtcbiAgICAgIGRpc3BsYXk6ICAgICAgIGJsb2NrO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC4ycmVtO1xuICAgICAgZm9udC1mYW1pbHk6ICAgc3lzdGVtLXVpO1xuICAgIH1cbiAgICBwcmUge1xuICAgICAgY29sb3I6ICAgICAgICM4NmVmYWM7XG4gICAgICBmb250LXNpemU6ICAgMC43cmVtO1xuICAgICAgbWFyZ2luOiAgICAgIDA7XG4gICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICB3b3JkLWJyZWFrOiAgYnJlYWstYWxsO1xuICAgICAgbWF4LWhlaWdodDogIDE0MHB4O1xuICAgICAgb3ZlcmZsb3cteTogIGF1dG87XG4gICAgfVxuICAgIC5zdGF0ZS12aWV3IHtcbiAgICAgIGNvbG9yOiAgICAgICAjODZlZmFjO1xuICAgICAgZm9udC1zaXplOiAgIDAuN3JlbTtcbiAgICAgIHBhZGRpbmc6ICAgICAwLjc1cmVtO1xuICAgICAgbWFyZ2luOiAgICAgIDA7XG4gICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICB3b3JkLWJyZWFrOiAgYnJlYWstYWxsO1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgU3RhdG9EZXZUb29sc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIHVuc3ViPzogKCkgPT4gdm9pZFxuXG4gIC8vIFN0YXRlIFVJXG4gIGlzT3BlbiAgICAgID0gc2lnbmFsKGZhbHNlKVxuICBpc01pbmltaXplZCA9IHNpZ25hbChmYWxzZSlcbiAgYWN0aXZlVGFiICAgPSBzaWduYWw8J2FjdGlvbnMnIHwgJ3N0YXRlJz4oJ2FjdGlvbnMnKVxuICBsb2dzICAgICAgICA9IHNpZ25hbDxBY3Rpb25Mb2dbXT4oW10pXG4gIHNlbGVjdGVkTG9nID0gc2lnbmFsPEFjdGlvbkxvZyB8IG51bGw+KG51bGwpXG5cbiAgLy8gUG9zaXRpb24gZXQgdGFpbGxlXG4gIHBvc1ggICAgICAgID0gc2lnbmFsKDI0KVxuICBwb3NZICAgICAgICA9IHNpZ25hbCh3aW5kb3cuaW5uZXJIZWlnaHQgLSA1MDApXG4gIHBhbmVsV2lkdGggID0gc2lnbmFsKDQyMClcbiAgcGFuZWxIZWlnaHQgPSBzaWduYWwoNDYwKVxuXG4gIC8vIERyYWcgc3RhdGVcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nICA9IGZhbHNlXG4gIHByaXZhdGUgaXNSZXNpemluZyAgPSBmYWxzZVxuICBwcml2YXRlIGRyYWdPZmZzZXRYID0gMFxuICBwcml2YXRlIGRyYWdPZmZzZXRZID0gMFxuICBwcml2YXRlIHN0YXJ0VyAgICAgID0gMFxuICBwcml2YXRlIHN0YXJ0SCAgICAgID0gMFxuICBwcml2YXRlIHN0YXJ0WCAgICAgID0gMFxuICBwcml2YXRlIHN0YXJ0WSAgICAgID0gMFxuXG4gIC8vIEJvdW5kIGxpc3RlbmVyc1xuICBwcml2YXRlIGJvdW5kTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpXG4gIHByaXZhdGUgYm91bmRNb3VzZVVwICAgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51bnN1YiA9IGRldlRvb2xzLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgIHRoaXMubG9ncy5zZXQoc3RhdGUubG9ncylcbiAgICAgIHRoaXMuaXNPcGVuLnNldChzdGF0ZS5pc09wZW4pXG4gICAgfSlcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuYm91bmRNb3VzZU1vdmUpXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICAgdGhpcy5ib3VuZE1vdXNlVXApXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3ViPy4oKVxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuYm91bmRNb3VzZU1vdmUpXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICAgdGhpcy5ib3VuZE1vdXNlVXApXG4gIH1cblxuICAvLyDilIDilIAgVG9nZ2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICB0b2dnbGUoKSAgICAgICAgIHsgZGV2VG9vbHMudG9nZ2xlKCkgfVxuICB0b2dnbGVNaW5pbWl6ZSgpIHsgdGhpcy5pc01pbmltaXplZC51cGRhdGUodiA9PiAhdikgfVxuICBjbGVhcigpICAgICAgICAgIHsgZGV2VG9vbHMuY2xlYXIoKTsgdGhpcy5zZWxlY3RlZExvZy5zZXQobnVsbCkgfVxuICBzZWxlY3RMb2cobG9nOiBBY3Rpb25Mb2cpIHtcbiAgICB0aGlzLnNlbGVjdGVkTG9nLnNldCh0aGlzLnNlbGVjdGVkTG9nKCk/LmlkID09PSBsb2cuaWQgPyBudWxsIDogbG9nKVxuICB9XG4gIGZvcm1hdFRpbWUoaXNvOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgRGF0ZShpc28pLnRvVGltZVN0cmluZygpLnNsaWNlKDAsIDgpXG4gIH1cblxuICAvLyDilIDilIAgRHJhZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgb25EcmFnU3RhcnQoZTogTW91c2VFdmVudCkge1xuICAgIGlmICgoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygnYnRuLWljb24nKSkgcmV0dXJuXG4gICAgdGhpcy5pc0RyYWdnaW5nICA9IHRydWVcbiAgICB0aGlzLmRyYWdPZmZzZXRYID0gZS5jbGllbnRYIC0gdGhpcy5wb3NYKClcbiAgICB0aGlzLmRyYWdPZmZzZXRZID0gZS5jbGllbnRZIC0gdGhpcy5wb3NZKClcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZXNpemUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIG9uUmVzaXplU3RhcnQoZTogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaXNSZXNpemluZyA9IHRydWVcbiAgICB0aGlzLnN0YXJ0VyAgICAgPSB0aGlzLnBhbmVsV2lkdGgoKVxuICAgIHRoaXMuc3RhcnRIICAgICA9IHRoaXMucGFuZWxIZWlnaHQoKVxuICAgIHRoaXMuc3RhcnRYICAgICA9IGUuY2xpZW50WFxuICAgIHRoaXMuc3RhcnRZICAgICA9IGUuY2xpZW50WVxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIC8vIOKUgOKUgCBNb3VzZSBNb3ZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBvbk1vdXNlTW92ZShlOiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5wb3NYLnNldChNYXRoLm1heCgwLCBlLmNsaWVudFggLSB0aGlzLmRyYWdPZmZzZXRYKSlcbiAgICAgIHRoaXMucG9zWS5zZXQoTWF0aC5tYXgoMCwgZS5jbGllbnRZIC0gdGhpcy5kcmFnT2Zmc2V0WSkpXG4gICAgfVxuICAgIGlmICh0aGlzLmlzUmVzaXppbmcpIHtcbiAgICAgIGNvbnN0IG5ld1cgPSBNYXRoLm1heCgzMDAsIHRoaXMuc3RhcnRXICsgZS5jbGllbnRYIC0gdGhpcy5zdGFydFgpXG4gICAgICBjb25zdCBuZXdIID0gTWF0aC5tYXgoMjAwLCB0aGlzLnN0YXJ0SCArIGUuY2xpZW50WSAtIHRoaXMuc3RhcnRZKVxuICAgICAgdGhpcy5wYW5lbFdpZHRoLnNldChuZXdXKVxuICAgICAgdGhpcy5wYW5lbEhlaWdodC5zZXQobmV3SClcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgTW91c2UgVXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIG9uTW91c2VVcCgpIHtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZVxuICAgIHRoaXMuaXNSZXNpemluZyA9IGZhbHNlXG4gIH1cbn0iXX0=
@@ -0,0 +1,8 @@
1
+ // ─────────────────────────────────────────────────────
2
+ // @ngstato/angular — API publique
3
+ // ─────────────────────────────────────────────────────
4
+ export { injectStore } from './inject-store';
5
+ export { provideStato } from './provide-ngstato';
6
+ export { createAngularStore } from './create-angular-store';
7
+ export { StatoDevToolsComponent } from './devtools.component';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQ3hELGtDQUFrQztBQUNsQyx3REFBd0Q7QUFFeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUF5QixnQkFBZ0IsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQXdCLG1CQUFtQixDQUFBO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBQyxNQUFrQix3QkFBd0IsQ0FBQTtBQUV0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG4vLyBAbmdzdGF0by9hbmd1bGFyIOKAlCBBUEkgcHVibGlxdWVcclxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG5leHBvcnQgeyBpbmplY3RTdG9yZSB9ICAgICAgICAgICAgICAgICAgICBmcm9tICcuL2luamVjdC1zdG9yZSdcclxuZXhwb3J0IHsgcHJvdmlkZVN0YXRvIH0gICAgICAgICAgICAgICAgICAgZnJvbSAnLi9wcm92aWRlLW5nc3RhdG8nXHJcbmV4cG9ydCB7IGNyZWF0ZUFuZ3VsYXJTdG9yZX0gICAgICAgICAgICAgZnJvbSAnLi9jcmVhdGUtYW5ndWxhci1zdG9yZSdcclxuZXhwb3J0IHR5cGUgeyBTdGF0b0FuZ3VsYXJDb25maWcgfSAgICAgICAgZnJvbSAnLi9wcm92aWRlLW5nc3RhdG8nXHJcbmV4cG9ydCB7IFN0YXRvRGV2VG9vbHNDb21wb25lbnQgfSBmcm9tICcuL2RldnRvb2xzLmNvbXBvbmVudCciXX0=
@@ -0,0 +1,9 @@
1
+ // ─────────────────────────────────────────────────────
2
+ // @ngstato/angular — injectStore()
3
+ // Helper pour injecter un store dans un composant
4
+ // ─────────────────────────────────────────────────────
5
+ import { inject } from '@angular/core';
6
+ export function injectStore(store) {
7
+ return inject(store);
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luamVjdC1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0Q7QUFDeEQsbUNBQW1DO0FBQ25DLGtEQUFrRDtBQUNsRCx3REFBd0Q7QUFFeEQsT0FBTyxFQUFFLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQTtBQUVqRCxNQUFNLFVBQVUsV0FBVyxDQUFJLEtBQWM7SUFDM0MsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG4vLyBAbmdzdGF0by9hbmd1bGFyIOKAlCBpbmplY3RTdG9yZSgpXHJcbi8vIEhlbHBlciBwb3VyIGluamVjdGVyIHVuIHN0b3JlIGRhbnMgdW4gY29tcG9zYW50XHJcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuaW1wb3J0IHsgaW5qZWN0LCB0eXBlIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFN0b3JlPFQ+KHN0b3JlOiBUeXBlPFQ+KTogVCB7XHJcbiAgcmV0dXJuIGluamVjdChzdG9yZSlcclxufSJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzdGF0by1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25nc3RhdG8tYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,22 @@
1
+ import { makeEnvironmentProviders, InjectionToken, isDevMode } from '@angular/core';
2
+ import { configureHttp, devTools } from '@ngstato/core';
3
+ export const STATO_CONFIG = new InjectionToken('STATO_CONFIG');
4
+ export function provideStato(config = {}) {
5
+ if (config.http) {
6
+ configureHttp(config.http);
7
+ }
8
+ // DevTools — ignorés automatiquement en production
9
+ // isDevMode() est géré par Angular au build
10
+ // → false en prod même si devtools: true
11
+ if (config.devtools && isDevMode()) {
12
+ console.info('%c[Stato] 🛠 DevTools activés', 'background:#1e40af;color:white;padding:4px 8px;border-radius:4px;font-weight:bold');
13
+ devTools.open();
14
+ }
15
+ return makeEnvironmentProviders([
16
+ {
17
+ provide: STATO_CONFIG,
18
+ useValue: config
19
+ }
20
+ ]);
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1uZ3N0YXRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGUtbmdzdGF0by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCxTQUFTLEVBQ1YsTUFBK0IsZUFBZSxDQUFBO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBUXZELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBcUIsY0FBYyxDQUFDLENBQUE7QUFFbEYsTUFBTSxVQUFVLFlBQVksQ0FBQyxTQUE2QixFQUFFO0lBRTFELElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCw0Q0FBNEM7SUFDNUMseUNBQXlDO0lBQ3pDLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQ1YsK0JBQStCLEVBQy9CLG1GQUFtRixDQUNwRixDQUFBO1FBQ0QsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLHdCQUF3QixDQUFDO1FBQzlCO1lBQ0UsT0FBTyxFQUFHLFlBQVk7WUFDdEIsUUFBUSxFQUFFLE1BQU07U0FDakI7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXHJcbiAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgaXNEZXZNb2RlXHJcbn0gICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IGNvbmZpZ3VyZUh0dHAsIGRldlRvb2xzIH0gZnJvbSAnQG5nc3RhdG8vY29yZSdcclxuaW1wb3J0IHR5cGUgeyBTdGF0b0NvbmZpZyB9ICAgICAgICBmcm9tICdAbmdzdGF0by9jb3JlJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdGF0b0FuZ3VsYXJDb25maWcge1xyXG4gIGh0dHA/OiAgICAgU3RhdG9Db25maWdcclxuICBkZXZ0b29scz86IGJvb2xlYW5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFNUQVRPX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTdGF0b0FuZ3VsYXJDb25maWc+KCdTVEFUT19DT05GSUcnKVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVTdGF0byhjb25maWc6IFN0YXRvQW5ndWxhckNvbmZpZyA9IHt9KSB7XHJcblxyXG4gIGlmIChjb25maWcuaHR0cCkge1xyXG4gICAgY29uZmlndXJlSHR0cChjb25maWcuaHR0cClcclxuICB9XHJcblxyXG4gIC8vIERldlRvb2xzIOKAlCBpZ25vcsOpcyBhdXRvbWF0aXF1ZW1lbnQgZW4gcHJvZHVjdGlvblxyXG4gIC8vIGlzRGV2TW9kZSgpIGVzdCBnw6lyw6kgcGFyIEFuZ3VsYXIgYXUgYnVpbGRcclxuICAvLyDihpIgZmFsc2UgZW4gcHJvZCBtw6ptZSBzaSBkZXZ0b29sczogdHJ1ZVxyXG4gIGlmIChjb25maWcuZGV2dG9vbHMgJiYgaXNEZXZNb2RlKCkpIHtcclxuICAgIGNvbnNvbGUuaW5mbyhcclxuICAgICAgJyVjW1N0YXRvXSDwn5ugIERldlRvb2xzIGFjdGl2w6lzJyxcclxuICAgICAgJ2JhY2tncm91bmQ6IzFlNDBhZjtjb2xvcjp3aGl0ZTtwYWRkaW5nOjRweCA4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC13ZWlnaHQ6Ym9sZCdcclxuICAgIClcclxuICAgIGRldlRvb2xzLm9wZW4oKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6ICBTVEFUT19DT05GSUcsXHJcbiAgICAgIHVzZVZhbHVlOiBjb25maWdcclxuICAgIH1cclxuICBdKVxyXG59Il19