@libs-ui/components-drag-drop 0.2.304 → 0.2.306-10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,13 +6,7 @@ import { LibsUiDragItemDirective } from '../drag-item.directive';
6
6
  import * as i0 from "@angular/core";
7
7
  export class LibsUiDragDropDemoComponent {
8
8
  // Basic List Items
9
- basicItems = [
10
- 'Task 1',
11
- 'Task 2',
12
- 'Task 3',
13
- 'Task 4',
14
- 'Task 5'
15
- ];
9
+ basicItems = ['Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5'];
16
10
  // Kanban Board Columns
17
11
  columnsIds = ['todo', 'in-progress', 'done'];
18
12
  columns = [
@@ -24,15 +18,15 @@ export class LibsUiDragDropDemoComponent {
24
18
  id: 1,
25
19
  title: 'Implement drag and drop',
26
20
  description: 'Add drag and drop functionality to the component',
27
- status: 'todo'
21
+ status: 'todo',
28
22
  },
29
23
  {
30
24
  id: 2,
31
25
  title: 'Add animations',
32
26
  description: 'Implement smooth animations for drag and drop',
33
- status: 'todo'
34
- }
35
- ]
27
+ status: 'todo',
28
+ },
29
+ ],
36
30
  },
37
31
  {
38
32
  id: 'in-progress',
@@ -42,9 +36,9 @@ export class LibsUiDragDropDemoComponent {
42
36
  id: 3,
43
37
  title: 'Fix styling issues',
44
38
  description: 'Resolve CSS conflicts in the component',
45
- status: 'in-progress'
46
- }
47
- ]
39
+ status: 'in-progress',
40
+ },
41
+ ],
48
42
  },
49
43
  {
50
44
  id: 'done',
@@ -54,28 +48,28 @@ export class LibsUiDragDropDemoComponent {
54
48
  id: 4,
55
49
  title: 'Setup project structure',
56
50
  description: 'Initialize the project with necessary configurations',
57
- status: 'done'
58
- }
59
- ]
60
- }
51
+ status: 'done',
52
+ },
53
+ ],
54
+ },
61
55
  ];
62
56
  // Nested Items
63
57
  nestedItems = [
64
58
  {
65
59
  id: 1,
66
60
  title: 'Project A',
67
- subItems: ['Task 1', 'Task 2', 'Task 3']
61
+ subItems: ['Task 1', 'Task 2', 'Task 3'],
68
62
  },
69
63
  {
70
64
  id: 2,
71
65
  title: 'Project B',
72
- subItems: ['Task 4', 'Task 5']
66
+ subItems: ['Task 4', 'Task 5'],
73
67
  },
74
68
  {
75
69
  id: 3,
76
70
  title: 'Project C',
77
- subItems: ['Task 6', 'Task 7', 'Task 8']
78
- }
71
+ subItems: ['Task 6', 'Task 7', 'Task 8'],
72
+ },
79
73
  ];
80
74
  // API Documentation
81
75
  inputsDoc = [
@@ -83,99 +77,99 @@ export class LibsUiDragDropDemoComponent {
83
77
  name: 'items',
84
78
  type: 'Array<unknown>',
85
79
  default: '[]',
86
- description: 'Array of items to be displayed in the container'
80
+ description: 'Array of items to be displayed in the container',
87
81
  },
88
82
  {
89
83
  name: 'mode',
90
84
  type: "'move' | 'copy' | 'deepCopy'",
91
85
  default: "'move'",
92
- description: 'Mode for drag and drop operations'
86
+ description: 'Mode for drag and drop operations',
93
87
  },
94
88
  {
95
89
  name: 'directionDrag',
96
90
  type: "'horizontal' | 'vertical'",
97
91
  default: 'undefined',
98
- description: 'Direction of drag movement'
92
+ description: 'Direction of drag movement',
99
93
  },
100
94
  {
101
95
  name: 'viewEncapsulation',
102
96
  type: "'emulated' | 'none'",
103
97
  default: "'emulated'",
104
- description: 'View encapsulation mode for styling'
98
+ description: 'View encapsulation mode for styling',
105
99
  },
106
100
  {
107
101
  name: 'disableDragContainer',
108
102
  type: 'boolean',
109
103
  default: 'undefined',
110
- description: 'Whether to disable drag operations for the container'
104
+ description: 'Whether to disable drag operations for the container',
111
105
  },
112
106
  {
113
107
  name: 'acceptDragSameGroup',
114
108
  type: 'boolean',
115
109
  default: 'false',
116
- description: 'Whether to accept drag operations within the same group'
110
+ description: 'Whether to accept drag operations within the same group',
117
111
  },
118
112
  {
119
113
  name: 'placeholder',
120
114
  type: 'boolean',
121
115
  default: 'true',
122
- description: 'Whether to show placeholder during drag'
116
+ description: 'Whether to show placeholder during drag',
123
117
  },
124
118
  {
125
119
  name: 'groupName',
126
120
  type: 'string',
127
121
  default: "'groupDragAndDropDefault'",
128
- description: 'Name of the group for drag and drop operations'
122
+ description: 'Name of the group for drag and drop operations',
129
123
  },
130
124
  {
131
125
  name: 'dropToGroupName',
132
126
  type: 'Array<string> | null',
133
127
  default: 'null',
134
- description: 'List of group names that can accept drops from this container'
128
+ description: 'List of group names that can accept drops from this container',
135
129
  },
136
130
  {
137
131
  name: 'stylesOverride',
138
132
  type: 'Array<{ className: string, styles: string }>',
139
133
  default: 'undefined',
140
- description: 'Custom styles to override default drag-drop styling'
141
- }
134
+ description: 'Custom styles to override default drag-drop styling',
135
+ },
142
136
  ];
143
137
  outputsDoc = [
144
138
  {
145
139
  name: 'outDragStartContainer',
146
140
  type: 'IDragStart',
147
- description: 'Event emitted when dragging starts in the container'
141
+ description: 'Event emitted when dragging starts in the container',
148
142
  },
149
143
  {
150
144
  name: 'outDragOverContainer',
151
145
  type: 'IDragOver',
152
- description: 'Event emitted when dragging over the container'
146
+ description: 'Event emitted when dragging over the container',
153
147
  },
154
148
  {
155
149
  name: 'outDragLeaveContainer',
156
150
  type: 'IDragLeave',
157
- description: 'Event emitted when dragging leaves the container'
151
+ description: 'Event emitted when dragging leaves the container',
158
152
  },
159
153
  {
160
154
  name: 'outDragEndContainer',
161
155
  type: 'IDragEnd',
162
- description: 'Event emitted when dragging ends in the container'
156
+ description: 'Event emitted when dragging ends in the container',
163
157
  },
164
158
  {
165
159
  name: 'outDroppedContainer',
166
160
  type: 'IDrop',
167
- description: 'Event emitted when an item is dropped in the container'
161
+ description: 'Event emitted when an item is dropped in the container',
168
162
  },
169
163
  {
170
164
  name: 'outDroppedContainerEmpty',
171
165
  type: 'IDrop',
172
- description: 'Event emitted when an item is dropped in an empty container'
166
+ description: 'Event emitted when an item is dropped in an empty container',
173
167
  },
174
168
  {
175
169
  name: 'outFunctionControl',
176
170
  type: 'IDragDropFunctionControlEvent',
177
- description: 'Event emitted to control drag-drop functionality'
178
- }
171
+ description: 'Event emitted to control drag-drop functionality',
172
+ },
179
173
  ];
180
174
  // Interface Documentation
181
175
  interfacesDoc = [
@@ -187,7 +181,7 @@ export class LibsUiDragDropDemoComponent {
187
181
  elementKeepContainer?: boolean;
188
182
  itemDragInfo?: IItemDragInfo;
189
183
  }`,
190
- description: 'Interface for drag operation events, containing information about the dragged element and mouse position'
184
+ description: 'Interface for drag operation events, containing information about the dragged element and mouse position',
191
185
  },
192
186
  {
193
187
  name: 'IDragStart',
@@ -196,7 +190,7 @@ export class LibsUiDragDropDemoComponent {
196
190
  elementDrag: HTMLElement;
197
191
  itemDragInfo?: IItemDragInfo;
198
192
  }`,
199
- description: 'Interface for drag start events, triggered when dragging begins'
193
+ description: 'Interface for drag start events, triggered when dragging begins',
200
194
  },
201
195
  {
202
196
  name: 'IDragOver',
@@ -206,7 +200,7 @@ export class LibsUiDragDropDemoComponent {
206
200
  elementDragOver: HTMLElement;
207
201
  itemDragInfo?: IItemDragInfo;
208
202
  }`,
209
- description: 'Interface for drag over events, triggered when an element is dragged over another element'
203
+ description: 'Interface for drag over events, triggered when an element is dragged over another element',
210
204
  },
211
205
  {
212
206
  name: 'IDragLeave',
@@ -215,7 +209,7 @@ export class LibsUiDragDropDemoComponent {
215
209
  elementDragLeave: HTMLElement;
216
210
  itemDragInfo?: IItemDragInfo;
217
211
  }`,
218
- description: 'Interface for drag leave events, triggered when a dragged element leaves another element'
212
+ description: 'Interface for drag leave events, triggered when a dragged element leaves another element',
219
213
  },
220
214
  {
221
215
  name: 'IDragEnd',
@@ -224,7 +218,7 @@ export class LibsUiDragDropDemoComponent {
224
218
  elementDrag: HTMLElement;
225
219
  itemDragInfo?: IItemDragInfo;
226
220
  }`,
227
- description: 'Interface for drag end events, triggered when dragging ends'
221
+ description: 'Interface for drag end events, triggered when dragging ends',
228
222
  },
229
223
  {
230
224
  name: 'IDrop',
@@ -233,7 +227,7 @@ export class LibsUiDragDropDemoComponent {
233
227
  elementDrop: HTMLElement;
234
228
  itemDragInfo?: IItemDragInfo;
235
229
  }`,
236
- description: 'Interface for drop events, triggered when an element is dropped'
230
+ description: 'Interface for drop events, triggered when an element is dropped',
237
231
  },
238
232
  {
239
233
  name: 'IItemDragInfo',
@@ -247,7 +241,7 @@ export class LibsUiDragDropDemoComponent {
247
241
  containerDrag?: HTMLElement;
248
242
  containerDrop?: HTMLElement;
249
243
  }`,
250
- description: 'Interface containing information about the dragged item and its containers'
244
+ description: 'Interface containing information about the dragged item and its containers',
251
245
  },
252
246
  {
253
247
  name: 'IDragItemInContainerVirtualScroll',
@@ -261,7 +255,7 @@ export class LibsUiDragDropDemoComponent {
261
255
  dragBoundaryAcceptMouseLeaveContainer?: boolean;
262
256
  ignoreStopEvent?: boolean;
263
257
  }`,
264
- description: 'Interface for virtual scrolling drag operations, containing information about drag boundaries and container elements'
258
+ description: 'Interface for virtual scrolling drag operations, containing information about drag boundaries and container elements',
265
259
  },
266
260
  {
267
261
  name: 'IMousePosition',
@@ -269,15 +263,15 @@ export class LibsUiDragDropDemoComponent {
269
263
  clientX: number;
270
264
  clientY: number;
271
265
  }`,
272
- description: 'Interface representing mouse position coordinates'
266
+ description: 'Interface representing mouse position coordinates',
273
267
  },
274
268
  {
275
269
  name: 'IDragDropFunctionControlEvent',
276
270
  code: `interface IDragDropFunctionControlEvent {
277
271
  setAttributeElementAndItemDrag: () => Promise<void>;
278
272
  }`,
279
- description: 'Interface for drag and drop control functions'
280
- }
273
+ description: 'Interface for drag and drop control functions',
274
+ },
281
275
  ];
282
276
  // Features
283
277
  features = [
@@ -285,26 +279,26 @@ export class LibsUiDragDropDemoComponent {
285
279
  id: 1,
286
280
  icon: '🔄',
287
281
  title: 'Flexible Drag and Drop',
288
- description: 'Support for container-to-container dragging with customizable group names and drop zones'
282
+ description: 'Support for container-to-container dragging with customizable group names and drop zones',
289
283
  },
290
284
  {
291
285
  id: 2,
292
286
  icon: '📜',
293
287
  title: 'Virtual Scrolling',
294
- description: 'Efficient handling of large lists with virtual scrolling support'
288
+ description: 'Efficient handling of large lists with virtual scrolling support',
295
289
  },
296
290
  {
297
291
  id: 3,
298
292
  icon: '🎯',
299
293
  title: 'Custom Boundaries',
300
- description: 'Define custom drag boundaries and drop zones for precise control'
294
+ description: 'Define custom drag boundaries and drop zones for precise control',
301
295
  },
302
296
  {
303
297
  id: 4,
304
298
  icon: '🎨',
305
299
  title: 'Styling Options',
306
- description: 'Customizable styles for drag items and containers'
307
- }
300
+ description: 'Customizable styles for drag items and containers',
301
+ },
308
302
  ];
309
303
  // Code Examples
310
304
  codeExamples = [
@@ -320,7 +314,7 @@ export class LibsUiDragDropDemoComponent {
320
314
  {{ item }}
321
315
  &lt;/div&gt;
322
316
  }
323
- &lt;/div&gt;`
317
+ &lt;/div&gt;`,
324
318
  },
325
319
  {
326
320
  id: 2,
@@ -344,8 +338,8 @@ export class LibsUiDragDropDemoComponent {
344
338
  {{ item }}
345
339
  &lt;/div&gt;
346
340
  }
347
- &lt;/div&gt;`
348
- }
341
+ &lt;/div&gt;`,
342
+ },
349
343
  ];
350
344
  /**
351
345
  * Copy text to clipboard
@@ -369,14 +363,15 @@ export class LibsUiDragDropDemoComponent {
369
363
  <section class="intro-section">
370
364
  <h2>Introduction</h2>
371
365
  <p>
372
- <code>&#64;libs-ui/components-drag-drop</code> is a powerful Angular component that enables drag and drop functionality with features like virtual scrolling, multi-selection, and custom boundaries.
366
+ <code>&#64;libs-ui/components-drag-drop</code>
367
+ is a powerful Angular component that enables drag and drop functionality with features like virtual scrolling, multi-selection, and custom boundaries.
373
368
  </p>
374
369
  </section>
375
370
 
376
371
  <section class="installation-section">
377
372
  <h2>Installation</h2>
378
373
  <p>To install the library, use npm or yarn:</p>
379
-
374
+
380
375
  <div class="install-command">
381
376
  <pre>
382
377
  <code>npm install &#64;libs-ui/components-drag-drop</code>
@@ -385,9 +380,9 @@ export class LibsUiDragDropDemoComponent {
385
380
  (outClick)="copyToClipboard('npm install @libs-ui/components-drag-drop')" />
386
381
  </pre>
387
382
  </div>
388
-
383
+
389
384
  <p>Or with yarn:</p>
390
-
385
+
391
386
  <div class="install-command">
392
387
  <pre>
393
388
  <code>yarn add &#64;libs-ui/components-drag-drop</code>
@@ -405,12 +400,14 @@ export class LibsUiDragDropDemoComponent {
405
400
  <div class="demo-example">
406
401
  <h3>Basic List</h3>
407
402
  <div class="list-container">
408
- <div LibsUiComponentsDragContainerDirective
409
- [(items)]="basicItems"
410
- [acceptDragSameGroup]="true">
403
+ <div
404
+ LibsUiComponentsDragContainerDirective
405
+ [(items)]="basicItems"
406
+ [acceptDragSameGroup]="true">
411
407
  @for (item of basicItems; track item) {
412
- <div class="list-item"
413
- LibsUiDragItemDirective>
408
+ <div
409
+ class="list-item"
410
+ LibsUiDragItemDirective>
414
411
  <span class="item-icon">📋</span>
415
412
  <span class="item-text">{{ item }}</span>
416
413
  </div>
@@ -424,19 +421,23 @@ export class LibsUiDragDropDemoComponent {
424
421
  <h3>Kanban Board</h3>
425
422
  <div class="kanban-board">
426
423
  @for (column of columns; track column) {
427
- <div class="kanban-column"
428
- LibsUiComponentsDragContainerDirective
429
- [(items)]="column.items"
430
- [groupName]="column.id"
431
- [dropToGroupName]="columnsIds"
432
- [acceptDragSameGroup]="true">
424
+ <div
425
+ class="kanban-column"
426
+ LibsUiComponentsDragContainerDirective
427
+ [(items)]="column.items"
428
+ [groupName]="column.id"
429
+ [dropToGroupName]="columnsIds"
430
+ [acceptDragSameGroup]="true">
433
431
  <h4>{{ column.title }}</h4>
434
432
  @for (item of column.items; track item) {
435
- <div class="kanban-item"
436
- LibsUiDragItemDirective>
433
+ <div
434
+ class="kanban-item"
435
+ LibsUiDragItemDirective>
437
436
  <div class="kanban-item-header">
438
437
  <span class="item-title">{{ item.title }}</span>
439
- <span class="item-status" [class]="'status-' + item.status">
438
+ <span
439
+ class="item-status"
440
+ [class]="'status-' + item.status">
440
441
  {{ item.status }}
441
442
  </span>
442
443
  </div>
@@ -452,25 +453,29 @@ export class LibsUiDragDropDemoComponent {
452
453
  <div class="demo-example">
453
454
  <h3>Nested Containers copy</h3>
454
455
  <div class="nested-container">
455
- <div LibsUiComponentsDragContainerDirective
456
- [(items)]="nestedItems"
457
- [groupName]="'parent'"
458
- [mode]="'copy'"
459
- [acceptDragSameGroup]="true">
456
+ <div
457
+ LibsUiComponentsDragContainerDirective
458
+ [(items)]="nestedItems"
459
+ [groupName]="'parent'"
460
+ [mode]="'copy'"
461
+ [acceptDragSameGroup]="true">
460
462
  @for (item of nestedItems; track item) {
461
- <div class="nested-item"
462
- LibsUiDragItemDirective>
463
+ <div
464
+ class="nested-item"
465
+ LibsUiDragItemDirective>
463
466
  <div class="nested-item-header">
464
467
  <span class="item-title">{{ item.title }}</span>
465
468
  </div>
466
469
  <div class="nested-item-content">
467
- <div LibsUiComponentsDragContainerDirective
468
- [(items)]="item.subItems"
469
- [groupName]="'child'"
470
- [acceptDragSameGroup]="true">
470
+ <div
471
+ LibsUiComponentsDragContainerDirective
472
+ [(items)]="item.subItems"
473
+ [groupName]="'child'"
474
+ [acceptDragSameGroup]="true">
471
475
  @for (subItem of item.subItems; track subItem) {
472
- <div class="sub-item"
473
- LibsUiDragItemDirective>
476
+ <div
477
+ class="sub-item"
478
+ LibsUiDragItemDirective>
474
479
  {{ subItem }}
475
480
  </div>
476
481
  }
@@ -486,7 +491,7 @@ export class LibsUiDragDropDemoComponent {
486
491
 
487
492
  <section class="api-doc-section">
488
493
  <h2>API Documentation</h2>
489
-
494
+
490
495
  <h3>Inputs</h3>
491
496
  <div class="table-container">
492
497
  <table class="api-table">
@@ -501,10 +506,14 @@ export class LibsUiDragDropDemoComponent {
501
506
  <tbody>
502
507
  @for (input of inputsDoc; track input.name) {
503
508
  <tr>
504
- <td><code>{{input.name}}</code></td>
505
- <td><code>{{input.type}}</code></td>
506
- <td>{{input.default}}</td>
507
- <td>{{input.description}}</td>
509
+ <td>
510
+ <code>{{ input.name }}</code>
511
+ </td>
512
+ <td>
513
+ <code>{{ input.type }}</code>
514
+ </td>
515
+ <td>{{ input.default }}</td>
516
+ <td>{{ input.description }}</td>
508
517
  </tr>
509
518
  }
510
519
  </tbody>
@@ -524,9 +533,13 @@ export class LibsUiDragDropDemoComponent {
524
533
  <tbody>
525
534
  @for (output of outputsDoc; track output.name) {
526
535
  <tr>
527
- <td><code>{{output.name}}</code></td>
528
- <td><code>{{output.type}}</code></td>
529
- <td>{{output.description}}</td>
536
+ <td>
537
+ <code>{{ output.name }}</code>
538
+ </td>
539
+ <td>
540
+ <code>{{ output.type }}</code>
541
+ </td>
542
+ <td>{{ output.description }}</td>
530
543
  </tr>
531
544
  }
532
545
  </tbody>
@@ -539,9 +552,9 @@ export class LibsUiDragDropDemoComponent {
539
552
  <div class="interface-docs">
540
553
  @for (interfaceItem of interfacesDoc; track interfaceItem.name) {
541
554
  <div class="interface-item">
542
- <h3>{{interfaceItem.name}}</h3>
555
+ <h3>{{ interfaceItem.name }}</h3>
543
556
  <pre><code>{{interfaceItem.code}}</code></pre>
544
- <p>{{interfaceItem.description}}</p>
557
+ <p>{{ interfaceItem.description }}</p>
545
558
  </div>
546
559
  }
547
560
  </div>
@@ -552,10 +565,10 @@ export class LibsUiDragDropDemoComponent {
552
565
  <ul>
553
566
  @for (feature of features; track feature.id) {
554
567
  <li>
555
- <span class="feature-icon">{{feature.icon}}</span>
568
+ <span class="feature-icon">{{ feature.icon }}</span>
556
569
  <div class="feature-info">
557
- <h3>{{feature.title}}</h3>
558
- <p>{{feature.description}}</p>
570
+ <h3>{{ feature.title }}</h3>
571
+ <p>{{ feature.description }}</p>
559
572
  </div>
560
573
  </li>
561
574
  }
@@ -567,7 +580,7 @@ export class LibsUiDragDropDemoComponent {
567
580
  <div class="code-examples">
568
581
  @for (example of codeExamples; track example.id) {
569
582
  <div class="code-example">
570
- <h3>{{example.title}}</h3>
583
+ <h3>{{ example.title }}</h3>
571
584
  <pre><code [innerHTML]="example.code"></code></pre>
572
585
  </div>
573
586
  }
@@ -579,12 +592,7 @@ export class LibsUiDragDropDemoComponent {
579
592
  }
580
593
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiDragDropDemoComponent, decorators: [{
581
594
  type: Component,
582
- args: [{ selector: 'lib-drag-drop-demo', standalone: true, imports: [
583
- CommonModule,
584
- LibsUiComponentsDragContainerDirective,
585
- LibsUiDragItemDirective,
586
- LibsUiComponentsButtonsButtonComponent
587
- ], template: `
595
+ args: [{ selector: 'lib-drag-drop-demo', standalone: true, imports: [CommonModule, LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective, LibsUiComponentsButtonsButtonComponent], template: `
588
596
  <div class="page-container">
589
597
  <header>
590
598
  <h1>Demo Drag and Drop Component</h1>
@@ -595,14 +603,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
595
603
  <section class="intro-section">
596
604
  <h2>Introduction</h2>
597
605
  <p>
598
- <code>&#64;libs-ui/components-drag-drop</code> is a powerful Angular component that enables drag and drop functionality with features like virtual scrolling, multi-selection, and custom boundaries.
606
+ <code>&#64;libs-ui/components-drag-drop</code>
607
+ is a powerful Angular component that enables drag and drop functionality with features like virtual scrolling, multi-selection, and custom boundaries.
599
608
  </p>
600
609
  </section>
601
610
 
602
611
  <section class="installation-section">
603
612
  <h2>Installation</h2>
604
613
  <p>To install the library, use npm or yarn:</p>
605
-
614
+
606
615
  <div class="install-command">
607
616
  <pre>
608
617
  <code>npm install &#64;libs-ui/components-drag-drop</code>
@@ -611,9 +620,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
611
620
  (outClick)="copyToClipboard('npm install @libs-ui/components-drag-drop')" />
612
621
  </pre>
613
622
  </div>
614
-
623
+
615
624
  <p>Or with yarn:</p>
616
-
625
+
617
626
  <div class="install-command">
618
627
  <pre>
619
628
  <code>yarn add &#64;libs-ui/components-drag-drop</code>
@@ -631,12 +640,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
631
640
  <div class="demo-example">
632
641
  <h3>Basic List</h3>
633
642
  <div class="list-container">
634
- <div LibsUiComponentsDragContainerDirective
635
- [(items)]="basicItems"
636
- [acceptDragSameGroup]="true">
643
+ <div
644
+ LibsUiComponentsDragContainerDirective
645
+ [(items)]="basicItems"
646
+ [acceptDragSameGroup]="true">
637
647
  @for (item of basicItems; track item) {
638
- <div class="list-item"
639
- LibsUiDragItemDirective>
648
+ <div
649
+ class="list-item"
650
+ LibsUiDragItemDirective>
640
651
  <span class="item-icon">📋</span>
641
652
  <span class="item-text">{{ item }}</span>
642
653
  </div>
@@ -650,19 +661,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
650
661
  <h3>Kanban Board</h3>
651
662
  <div class="kanban-board">
652
663
  @for (column of columns; track column) {
653
- <div class="kanban-column"
654
- LibsUiComponentsDragContainerDirective
655
- [(items)]="column.items"
656
- [groupName]="column.id"
657
- [dropToGroupName]="columnsIds"
658
- [acceptDragSameGroup]="true">
664
+ <div
665
+ class="kanban-column"
666
+ LibsUiComponentsDragContainerDirective
667
+ [(items)]="column.items"
668
+ [groupName]="column.id"
669
+ [dropToGroupName]="columnsIds"
670
+ [acceptDragSameGroup]="true">
659
671
  <h4>{{ column.title }}</h4>
660
672
  @for (item of column.items; track item) {
661
- <div class="kanban-item"
662
- LibsUiDragItemDirective>
673
+ <div
674
+ class="kanban-item"
675
+ LibsUiDragItemDirective>
663
676
  <div class="kanban-item-header">
664
677
  <span class="item-title">{{ item.title }}</span>
665
- <span class="item-status" [class]="'status-' + item.status">
678
+ <span
679
+ class="item-status"
680
+ [class]="'status-' + item.status">
666
681
  {{ item.status }}
667
682
  </span>
668
683
  </div>
@@ -678,25 +693,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
678
693
  <div class="demo-example">
679
694
  <h3>Nested Containers copy</h3>
680
695
  <div class="nested-container">
681
- <div LibsUiComponentsDragContainerDirective
682
- [(items)]="nestedItems"
683
- [groupName]="'parent'"
684
- [mode]="'copy'"
685
- [acceptDragSameGroup]="true">
696
+ <div
697
+ LibsUiComponentsDragContainerDirective
698
+ [(items)]="nestedItems"
699
+ [groupName]="'parent'"
700
+ [mode]="'copy'"
701
+ [acceptDragSameGroup]="true">
686
702
  @for (item of nestedItems; track item) {
687
- <div class="nested-item"
688
- LibsUiDragItemDirective>
703
+ <div
704
+ class="nested-item"
705
+ LibsUiDragItemDirective>
689
706
  <div class="nested-item-header">
690
707
  <span class="item-title">{{ item.title }}</span>
691
708
  </div>
692
709
  <div class="nested-item-content">
693
- <div LibsUiComponentsDragContainerDirective
694
- [(items)]="item.subItems"
695
- [groupName]="'child'"
696
- [acceptDragSameGroup]="true">
710
+ <div
711
+ LibsUiComponentsDragContainerDirective
712
+ [(items)]="item.subItems"
713
+ [groupName]="'child'"
714
+ [acceptDragSameGroup]="true">
697
715
  @for (subItem of item.subItems; track subItem) {
698
- <div class="sub-item"
699
- LibsUiDragItemDirective>
716
+ <div
717
+ class="sub-item"
718
+ LibsUiDragItemDirective>
700
719
  {{ subItem }}
701
720
  </div>
702
721
  }
@@ -712,7 +731,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
712
731
 
713
732
  <section class="api-doc-section">
714
733
  <h2>API Documentation</h2>
715
-
734
+
716
735
  <h3>Inputs</h3>
717
736
  <div class="table-container">
718
737
  <table class="api-table">
@@ -727,10 +746,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
727
746
  <tbody>
728
747
  @for (input of inputsDoc; track input.name) {
729
748
  <tr>
730
- <td><code>{{input.name}}</code></td>
731
- <td><code>{{input.type}}</code></td>
732
- <td>{{input.default}}</td>
733
- <td>{{input.description}}</td>
749
+ <td>
750
+ <code>{{ input.name }}</code>
751
+ </td>
752
+ <td>
753
+ <code>{{ input.type }}</code>
754
+ </td>
755
+ <td>{{ input.default }}</td>
756
+ <td>{{ input.description }}</td>
734
757
  </tr>
735
758
  }
736
759
  </tbody>
@@ -750,9 +773,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
750
773
  <tbody>
751
774
  @for (output of outputsDoc; track output.name) {
752
775
  <tr>
753
- <td><code>{{output.name}}</code></td>
754
- <td><code>{{output.type}}</code></td>
755
- <td>{{output.description}}</td>
776
+ <td>
777
+ <code>{{ output.name }}</code>
778
+ </td>
779
+ <td>
780
+ <code>{{ output.type }}</code>
781
+ </td>
782
+ <td>{{ output.description }}</td>
756
783
  </tr>
757
784
  }
758
785
  </tbody>
@@ -765,9 +792,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
765
792
  <div class="interface-docs">
766
793
  @for (interfaceItem of interfacesDoc; track interfaceItem.name) {
767
794
  <div class="interface-item">
768
- <h3>{{interfaceItem.name}}</h3>
795
+ <h3>{{ interfaceItem.name }}</h3>
769
796
  <pre><code>{{interfaceItem.code}}</code></pre>
770
- <p>{{interfaceItem.description}}</p>
797
+ <p>{{ interfaceItem.description }}</p>
771
798
  </div>
772
799
  }
773
800
  </div>
@@ -778,10 +805,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
778
805
  <ul>
779
806
  @for (feature of features; track feature.id) {
780
807
  <li>
781
- <span class="feature-icon">{{feature.icon}}</span>
808
+ <span class="feature-icon">{{ feature.icon }}</span>
782
809
  <div class="feature-info">
783
- <h3>{{feature.title}}</h3>
784
- <p>{{feature.description}}</p>
810
+ <h3>{{ feature.title }}</h3>
811
+ <p>{{ feature.description }}</p>
785
812
  </div>
786
813
  </li>
787
814
  }
@@ -793,7 +820,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
793
820
  <div class="code-examples">
794
821
  @for (example of codeExamples; track example.id) {
795
822
  <div class="code-example">
796
- <h3>{{example.title}}</h3>
823
+ <h3>{{ example.title }}</h3>
797
824
  <pre><code [innerHTML]="example.code"></code></pre>
798
825
  </div>
799
826
  }
@@ -803,4 +830,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
803
830
  </div>
804
831
  `, styles: [".page-container{max-width:1200px;margin:0 auto;padding:20px;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;line-height:1.6;color:#333}header{text-align:center;padding:40px 0;background-color:#fff;border-radius:8px;margin-bottom:30px;box-shadow:0 2px 5px #0000001a}header h1{font-size:2.5rem;color:#2c3e50;margin-bottom:10px}header p{font-size:1.2rem;color:#7f8c8d}section{background-color:#fff;border-radius:8px;padding:30px;margin-bottom:30px;box-shadow:0 2px 5px #0000001a}h2{font-size:1.8rem;color:#2c3e50;margin-bottom:20px;padding-bottom:10px;border-bottom:2px solid #ecf0f1}h3{font-size:1.4rem;color:#34495e;margin-bottom:15px}h4{font-size:1.2rem;color:#34495e;margin-bottom:10px}p{margin-bottom:15px}code{font-family:Courier New,Courier,monospace;background-color:#f7f7f7;padding:2px 5px;border-radius:3px;font-size:.9em}pre{background-color:#f7f7f7;padding:15px;border-radius:5px;overflow-x:auto;margin-bottom:20px;display:flex;align-items:center;justify-content:space-between}pre code{background-color:transparent;padding:0}.installation-section .install-command{position:relative;margin-bottom:20px}.installation-section .copy-button{position:absolute;top:10px;right:10px;background:#3498db;color:#fff;border:none;border-radius:4px;padding:5px 10px;font-size:.9rem;cursor:pointer;transition:background .2s}.installation-section .copy-button:hover{background:#2980b9}.demo-container{display:grid;grid-template-columns:1fr;gap:30px}.demo-example{background:#f7f7f7;padding:20px;border-radius:8px;margin-bottom:20px}.list-container{max-width:400px;margin:20px auto}.list-item{padding:12px;margin:8px 0;background:#fff;border:1px solid #e0e0e0;border-radius:6px;display:flex;align-items:center;transition:transform .2s,box-shadow .2s}.list-item:hover{transform:translateY(-2px);box-shadow:0 4px 8px #0000001a}.item-icon{margin-right:12px;font-size:1.2em}.kanban-board{display:flex;gap:20px;padding:20px;overflow-x:auto}.kanban-column{flex:1;min-width:300px;background:#f5f5f5;padding:15px;border-radius:8px}.kanban-item{background:#fff;padding:12px;margin:8px 0;border-radius:6px;box-shadow:0 1px 3px #0000001a}.kanban-item-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.item-title{font-weight:500}.item-status{padding:4px 8px;border-radius:4px;font-size:.8em}.status-todo{background:#ffebee;color:#c62828}.status-in-progress{background:#fff3e0;color:#ef6c00}.status-done{background:#e8f5e9;color:#2e7d32}.item-description{font-size:.9em;color:#666}.nested-container{max-width:800px;margin:0 auto}.nested-item{background:#fff;border:1px solid #e0e0e0;border-radius:8px;margin:12px 0;overflow:hidden}.nested-item-header{padding:12px;background:#f5f5f5;border-bottom:1px solid #e0e0e0}.nested-item-content{padding:12px}.sub-item{padding:8px;margin:4px 0;background:#f9f9f9;border:1px solid #e0e0e0;border-radius:4px}.api-doc-section{margin-bottom:40px}.table-container{overflow-x:auto;margin-bottom:30px}.api-table{width:100%;border-collapse:collapse;margin-bottom:20px}.api-table th,.api-table td{padding:12px 15px;text-align:left;border-bottom:1px solid #e1e1e1}.api-table th{background-color:#f5f5f5;font-weight:700}.api-table tbody tr:hover{background-color:#f9f9f9}.features-section ul{list-style:none}.features-section li{display:flex;margin-bottom:25px;align-items:flex-start}.feature-icon{font-size:2rem;margin-right:20px;min-width:40px;text-align:center}.feature-info{flex:1}.code-examples{display:grid;grid-template-columns:1fr;gap:20px}@media (min-width: 768px){.code-examples{grid-template-columns:repeat(2,1fr)}}@media (min-width: 992px){.code-examples{grid-template-columns:repeat(3,1fr)}}.code-example{border:1px solid #ecf0f1;border-radius:5px;padding:15px}@media (max-width: 768px){header{padding:30px 0}header h1{font-size:2rem}section{padding:20px}.kanban-board{flex-direction:column}.kanban-column{min-width:100%}.feature-icon{font-size:1.5rem;margin-right:15px}}\n"] }]
805
832
  }] });
806
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVtby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJhZy1kcm9wL3NyYy9kZW1vL2RlbW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWtsQmpFLE1BQU0sT0FBTywyQkFBMkI7SUFDdEMsbUJBQW1CO0lBQ25CLFVBQVUsR0FBRztRQUNYLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO0tBQ1QsQ0FBQztJQUVGLHVCQUF1QjtJQUN2QixVQUFVLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLE9BQU8sR0FBYTtRQUNsQjtZQUNFLEVBQUUsRUFBRSxNQUFNO1lBQ1YsS0FBSyxFQUFFLE9BQU87WUFDZCxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsRUFBRSxFQUFFLENBQUM7b0JBQ0wsS0FBSyxFQUFFLHlCQUF5QjtvQkFDaEMsV0FBVyxFQUFFLGtEQUFrRDtvQkFDL0QsTUFBTSxFQUFFLE1BQU07aUJBQ2Y7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLENBQUM7b0JBQ0wsS0FBSyxFQUFFLGdCQUFnQjtvQkFDdkIsV0FBVyxFQUFFLCtDQUErQztvQkFDNUQsTUFBTSxFQUFFLE1BQU07aUJBQ2Y7YUFDRjtTQUNGO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsYUFBYTtZQUNqQixLQUFLLEVBQUUs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5TlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kcmFnLWRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJhZy1pdGVtLmRpcmVjdGl2ZSc7XG5cbmludGVyZmFjZSBUYXNrIHtcbiAgaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzOiAndG9kbycgfCAnaW4tcHJvZ3Jlc3MnIHwgJ2RvbmUnO1xufVxuXG5pbnRlcmZhY2UgQ29sdW1uIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgaXRlbXM6IFRhc2tbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRyYWctZHJvcC1kZW1vJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSxcbiAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwYWdlLWNvbnRhaW5lclwiPlxuICAgICAgPGhlYWRlcj5cbiAgICAgICAgPGgxPkRlbW8gRHJhZyBhbmQgRHJvcCBDb21wb25lbnQ8L2gxPlxuICAgICAgICA8cD5Bbmd1bGFyIGNvbXBvbmVudCBsaWJyYXJ5IGZvciBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHk8L3A+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgPG1haW4+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaW50cm8tc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5JbnRyb2R1Y3Rpb248L2gyPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPGNvZGU+JiM2NDtsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wPC9jb2RlPiBpcyBhIHBvd2VyZnVsIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgZW5hYmxlcyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkgd2l0aCBmZWF0dXJlcyBsaWtlIHZpcnR1YWwgc2Nyb2xsaW5nLCBtdWx0aS1zZWxlY3Rpb24sIGFuZCBjdXN0b20gYm91bmRhcmllcy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImluc3RhbGxhdGlvbi1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkluc3RhbGxhdGlvbjwvaDI+XG4gICAgICAgICAgPHA+VG8gaW5zdGFsbCB0aGUgbGlicmFyeSwgdXNlIG5wbSBvciB5YXJuOjwvcD5cbiAgICAgICAgICBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zdGFsbC1jb21tYW5kXCI+XG4gICAgICAgICAgICA8cHJlPlxuICAgICAgICAgICAgICA8Y29kZT5ucG0gaW5zdGFsbCAmIzY0O2xpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3A8L2NvZGU+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NvcHknXCJcbiAgICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKCducG0gaW5zdGFsbCBAbGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcCcpXCIgLz5cbiAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxwPk9yIHdpdGggeWFybjo8L3A+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluc3RhbGwtY29tbWFuZFwiPlxuICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgPGNvZGU+eWFybiBhZGQgJiM2NDtsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wPC9jb2RlPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDb3B5J1wiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgneWFybiBhZGQgQGxpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3AnKVwiIC8+XG4gICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZGVtby1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkxpdmUgRGVtbzwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRlbW8tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8IS0tIEJhc2ljIExpc3QgRGVtbyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZW1vLWV4YW1wbGVcIj5cbiAgICAgICAgICAgICAgPGgzPkJhc2ljIExpc3Q8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICAgICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwiYmFzaWNJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGJhc2ljSXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmU+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLWljb25cIj7wn5OLPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10ZXh0XCI+e3sgaXRlbSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gS2FuYmFuIEJvYXJkIERlbW8gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVtby1leGFtcGxlXCI+XG4gICAgICAgICAgICAgIDxoMz5LYW5iYW4gQm9hcmQ8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2FuYmFuLWJvYXJkXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImthbmJhbi1jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgICAgICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwiY29sdW1uLml0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCJjb2x1bW4uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbZHJvcFRvR3JvdXBOYW1lXT1cImNvbHVtbnNJZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoND57eyBjb2x1bW4udGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGNvbHVtbi5pdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYW5iYW4taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYW5iYW4taXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXRpdGxlXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXN0YXR1c1wiIFtjbGFzc109XCInc3RhdHVzLScgKyBpdGVtLnN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uc3RhdHVzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJpdGVtLWRlc2NyaXB0aW9uXCI+e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE5lc3RlZCBDb250YWluZXJzIERlbW8gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVtby1leGFtcGxlXCI+XG4gICAgICAgICAgICAgIDxoMz5OZXN0ZWQgQ29udGFpbmVycyBjb3B5PC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICAgICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwibmVzdGVkSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCIncGFyZW50J1wiXG4gICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCInY29weSdcIlxuICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBuZXN0ZWRJdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmVzdGVkLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXN0ZWQtaXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10aXRsZVwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1pdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaXRlbXMpXT1cIml0ZW0uc3ViSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBOYW1lXT1cIidjaGlsZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHN1Ykl0ZW0gb2YgaXRlbS5zdWJJdGVtczsgdHJhY2sgc3ViSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1Ykl0ZW0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJhcGktZG9jLXNlY3Rpb25cIj5cbiAgICAgICAgICA8aDI+QVBJIERvY3VtZW50YXRpb248L2gyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxoMz5JbnB1dHM8L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImFwaS10YWJsZVwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPlR5cGU8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPkRlZmF1bHQ8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPkRlc2NyaXB0aW9uPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGZvciAoaW5wdXQgb2YgaW5wdXRzRG9jOyB0cmFjayBpbnB1dC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48Y29kZT57e2lucHV0Lm5hbWV9fTwvY29kZT48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+e3tpbnB1dC50eXBlfX08L2NvZGU+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aW5wdXQuZGVmYXVsdH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aW5wdXQuZGVzY3JpcHRpb259fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8aDM+T3V0cHV0czwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiYXBpLXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGg+TmFtZTwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGg+VHlwZTwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICBAZm9yIChvdXRwdXQgb2Ygb3V0cHV0c0RvYzsgdHJhY2sgb3V0cHV0Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPnt7b3V0cHV0Lm5hbWV9fTwvY29kZT48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+e3tvdXRwdXQudHlwZX19PC9jb2RlPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e291dHB1dC5kZXNjcmlwdGlvbn19PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaW50ZXJmYWNlcy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkludGVyZmFjZXM8L2gyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnRlcmZhY2UtZG9jc1wiPlxuICAgICAgICAgICAgQGZvciAoaW50ZXJmYWNlSXRlbSBvZiBpbnRlcmZhY2VzRG9jOyB0cmFjayBpbnRlcmZhY2VJdGVtLm5hbWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludGVyZmFjZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGgzPnt7aW50ZXJmYWNlSXRlbS5uYW1lfX08L2gzPlxuICAgICAgICAgICAgICAgIDxwcmU+PGNvZGU+e3tpbnRlcmZhY2VJdGVtLmNvZGV9fTwvY29kZT48L3ByZT5cbiAgICAgICAgICAgICAgICA8cD57e2ludGVyZmFjZUl0ZW0uZGVzY3JpcHRpb259fTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImZlYXR1cmVzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8aDI+RmVhdHVyZXM8L2gyPlxuICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgIEBmb3IgKGZlYXR1cmUgb2YgZmVhdHVyZXM7IHRyYWNrIGZlYXR1cmUuaWQpIHtcbiAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmVhdHVyZS1pY29uXCI+e3tmZWF0dXJlLmljb259fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmVhdHVyZS1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICA8aDM+e3tmZWF0dXJlLnRpdGxlfX08L2gzPlxuICAgICAgICAgICAgICAgICAgPHA+e3tmZWF0dXJlLmRlc2NyaXB0aW9ufX08L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidXNhZ2Utc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5Vc2FnZTwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvZGUtZXhhbXBsZXNcIj5cbiAgICAgICAgICAgIEBmb3IgKGV4YW1wbGUgb2YgY29kZUV4YW1wbGVzOyB0cmFjayBleGFtcGxlLmlkKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2RlLWV4YW1wbGVcIj5cbiAgICAgICAgICAgICAgICA8aDM+e3tleGFtcGxlLnRpdGxlfX08L2gzPlxuICAgICAgICAgICAgICAgIDxwcmU+PGNvZGUgW2lubmVySFRNTF09XCJleGFtcGxlLmNvZGVcIj48L2NvZGU+PC9wcmU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L21haW4+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAucGFnZS1jb250YWluZXIge1xuICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgVGFob21hLCBHZW5ldmEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7XG4gICAgICBsaW5lLWhlaWdodDogMS42O1xuICAgICAgY29sb3I6ICMzMzM7XG4gICAgfVxuICAgIFxuICAgIGhlYWRlciB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA0MHB4IDA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgfVxuICAgIFxuICAgIGhlYWRlciBoMSB7XG4gICAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICAgIGNvbG9yOiAjMmMzZTUwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICB9XG4gICAgXG4gICAgaGVhZGVyIHAge1xuICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICBjb2xvcjogIzdmOGM4ZDtcbiAgICB9XG4gICAgXG4gICAgc2VjdGlvbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgcGFkZGluZzogMzBweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIH1cbiAgICBcbiAgICBoMiB7XG4gICAgICBmb250LXNpemU6IDEuOHJlbTtcbiAgICAgIGNvbG9yOiAjMmMzZTUwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlY2YwZjE7XG4gICAgfVxuICAgIFxuICAgIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICAgICAgY29sb3I6ICMzNDQ5NWU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIH1cblxuICAgIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgICAgY29sb3I6ICMzNDQ5NWU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgIH1cbiAgICBcbiAgICBwIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgfVxuICAgIFxuICAgIGNvZGUge1xuICAgICAgZm9udC1mYW1pbHk6ICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gICAgICBwYWRkaW5nOiAycHggNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgZm9udC1zaXplOiAwLjllbTtcbiAgICB9XG4gICAgXG4gICAgcHJlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gICAgICBwYWRkaW5nOiAxNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG4gICAgXG4gICAgcHJlIGNvZGUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC8qIEluc3RhbGxhdGlvbiBzZWN0aW9uIHN0eWxlcyAqL1xuICAgIC5pbnN0YWxsYXRpb24tc2VjdGlvbiAuaW5zdGFsbC1jb21tYW5kIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgfVxuICAgIFxuICAgIC5pbnN0YWxsYXRpb24tc2VjdGlvbiAuY29weS1idXR0b24ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAxMHB4O1xuICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMzQ5OGRiO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgICBmb250LXNpemU6IDAuOXJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycztcbiAgICB9XG4gICAgXG4gICAgLmluc3RhbGxhdGlvbi1zZWN0aW9uIC5jb3B5LWJ1dHRvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMjk4MGI5O1xuICAgIH1cblxuICAgIC8qIERlbW8gc2VjdGlvbiBzdHlsZXMgKi9cbiAgICAuZGVtby1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuICAgICAgZ2FwOiAzMHB4O1xuICAgIH1cblxuICAgIC5kZW1vLWV4YW1wbGUge1xuICAgICAgYmFja2dyb3VuZDogI2Y3ZjdmNztcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cblxuICAgIC8qIExpc3Qgc3R5bGVzICovXG4gICAgLmxpc3QtY29udGFpbmVyIHtcbiAgICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgICBtYXJnaW46IDIwcHggYXV0bztcbiAgICB9XG5cbiAgICAubGlzdC1pdGVtIHtcbiAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICBtYXJnaW46IDhweCAwO1xuICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycywgYm94LXNoYWRvdyAwLjJzO1xuICAgIH1cblxuICAgIC5saXN0LWl0ZW06aG92ZXIge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwwLDAsMC4xKTtcbiAgICB9XG5cbiAgICAuaXRlbS1pY29uIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgfVxuXG4gICAgLyogS2FuYmFuIHN0eWxlcyAqL1xuICAgIC5rYW5iYW4tYm9hcmQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGdhcDogMjBweDtcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIH1cblxuICAgIC5rYW5iYW4tY29sdW1uIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4td2lkdGg6IDMwMHB4O1xuICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgfVxuXG4gICAgLmthbmJhbi1pdGVtIHtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgIG1hcmdpbjogOHB4IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjEpO1xuICAgIH1cblxuICAgIC5rYW5iYW4taXRlbS1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgfVxuXG4gICAgLml0ZW0tdGl0bGUge1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB9XG5cbiAgICAuaXRlbS1zdGF0dXMge1xuICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgfVxuXG4gICAgLnN0YXR1cy10b2RvIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmViZWU7XG4gICAgICBjb2xvcjogI2M2MjgyODtcbiAgICB9XG5cbiAgICAuc3RhdHVzLWluLXByb2dyZXNzIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmYzZTA7XG4gICAgICBjb2xvcjogI2VmNmMwMDtcbiAgICB9XG5cbiAgICAuc3RhdHVzLWRvbmUge1xuICAgICAgYmFja2dyb3VuZDogI2U4ZjVlOTtcbiAgICAgIGNvbG9yOiAjMmU3ZDMyO1xuICAgIH1cblxuICAgIC5pdGVtLWRlc2NyaXB0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICBjb2xvcjogIzY2NjtcbiAgICB9XG5cbiAgICAvKiBOZXN0ZWQgY29udGFpbmVycyBzdHlsZXMgKi9cbiAgICAubmVzdGVkLWNvbnRhaW5lciB7XG4gICAgICBtYXgtd2lkdGg6IDgwMHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgfVxuXG4gICAgLm5lc3RlZC1pdGVtIHtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIG1hcmdpbjogMTJweCAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAubmVzdGVkLWl0ZW0taGVhZGVyIHtcbiAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XG4gICAgfVxuXG4gICAgLm5lc3RlZC1pdGVtLWNvbnRlbnQge1xuICAgICAgcGFkZGluZzogMTJweDtcbiAgICB9XG5cbiAgICAuc3ViLWl0ZW0ge1xuICAgICAgcGFkZGluZzogOHB4O1xuICAgICAgbWFyZ2luOiA0cHggMDtcbiAgICAgIGJhY2tncm91bmQ6ICNmOWY5Zjk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cblxuICAgIC8qIEFQSSBkb2N1bWVudGF0aW9uIHN0eWxlcyAqL1xuICAgIC5hcGktZG9jLXNlY3Rpb24ge1xuICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgXG4gICAgLnRhYmxlLWNvbnRhaW5lciB7XG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICB9XG4gICAgXG4gICAgLmFwaS10YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cbiAgICBcbiAgICAuYXBpLXRhYmxlIHRoLFxuICAgIC5hcGktdGFibGUgdGQge1xuICAgICAgcGFkZGluZzogMTJweCAxNXB4O1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTFlMWUxO1xuICAgIH1cbiAgICBcbiAgICAuYXBpLXRhYmxlIHRoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG4gICAgXG4gICAgLmFwaS10YWJsZSB0Ym9keSB0cjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5O1xuICAgIH1cblxuICAgIC8qIEZlYXR1cmVzIHNlY3Rpb24gKi9cbiAgICAuZmVhdHVyZXMtc2VjdGlvbiB1bCB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIH1cbiAgICBcbiAgICAuZmVhdHVyZXMtc2VjdGlvbiBsaSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIH1cbiAgICBcbiAgICAuZmVhdHVyZS1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgIG1hcmdpbi1yaWdodDogMjBweDtcbiAgICAgIG1pbi13aWR0aDogNDBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gICAgXG4gICAgLmZlYXR1cmUtaW5mbyB7XG4gICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgIC8qIENvZGUgZXhhbXBsZXMgKi9cbiAgICAuY29kZS1leGFtcGxlcyB7XG4gICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgICBnYXA6IDIwcHg7XG4gICAgfVxuICAgIFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICAgLmNvZGUtZXhhbXBsZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAgIC5jb2RlLWV4YW1wbGVzIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLmNvZGUtZXhhbXBsZSB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNmMGYxO1xuICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgcGFkZGluZzogMTVweDtcbiAgICB9XG5cbiAgICAvKiBSZXNwb25zaXZlIGFkanVzdG1lbnRzICovXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICBoZWFkZXIge1xuICAgICAgICBwYWRkaW5nOiAzMHB4IDA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGhlYWRlciBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC5rYW5iYW4tYm9hcmQge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgICAgXG4gICAgICAua2FuYmFuLWNvbHVtbiB7XG4gICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLmZlYXR1cmUtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG4gICAgICB9XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlEcmFnRHJvcERlbW9Db21wb25lbnQge1xuICAvLyBCYXNpYyBMaXN0IEl0ZW1zXG4gIGJhc2ljSXRlbXMgPSBbXG4gICAgJ1Rhc2sgMScsXG4gICAgJ1Rhc2sgMicsXG4gICAgJ1Rhc2sgMycsXG4gICAgJ1Rhc2sgNCcsXG4gICAgJ1Rhc2sgNSdcbiAgXTtcblxuICAvLyBLYW5iYW4gQm9hcmQgQ29sdW1uc1xuICBjb2x1bW5zSWRzID0gWyd0b2RvJywgJ2luLXByb2dyZXNzJywgJ2RvbmUnXTtcbiAgY29sdW1uczogQ29sdW1uW10gPSBbXG4gICAge1xuICAgICAgaWQ6ICd0b2RvJyxcbiAgICAgIHRpdGxlOiAnVG8gRG8nLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAxLFxuICAgICAgICAgIHRpdGxlOiAnSW1wbGVtZW50IGRyYWcgYW5kIGRyb3AnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQWRkIGRyYWcgYW5kIGRyb3AgZnVuY3Rpb25hbGl0eSB0byB0aGUgY29tcG9uZW50JyxcbiAgICAgICAgICBzdGF0dXM6ICd0b2RvJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDIsXG4gICAgICAgICAgdGl0bGU6ICdBZGQgYW5pbWF0aW9ucycsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdJbXBsZW1lbnQgc21vb3RoIGFuaW1hdGlvbnMgZm9yIGRyYWcgYW5kIGRyb3AnLFxuICAgICAgICAgIHN0YXR1czogJ3RvZG8nXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnaW4tcHJvZ3Jlc3MnLFxuICAgICAgdGl0bGU6ICdJbiBQcm9ncmVzcycsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDMsXG4gICAgICAgICAgdGl0bGU6ICdGaXggc3R5bGluZyBpc3N1ZXMnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzb2x2ZSBDU1MgY29uZmxpY3RzIGluIHRoZSBjb21wb25lbnQnLFxuICAgICAgICAgIHN0YXR1czogJ2luLXByb2dyZXNzJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2RvbmUnLFxuICAgICAgdGl0bGU6ICdEb25lJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogNCxcbiAgICAgICAgICB0aXRsZTogJ1NldHVwIHByb2plY3Qgc3RydWN0dXJlJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luaXRpYWxpemUgdGhlIHByb2plY3Qgd2l0aCBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMnLFxuICAgICAgICAgIHN0YXR1czogJ2RvbmUnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgLy8gTmVzdGVkIEl0ZW1zXG4gIG5lc3RlZEl0ZW1zID0gW1xuICAgIHtcbiAgICAgIGlkOiAxLFxuICAgICAgdGl0bGU6ICdQcm9qZWN0IEEnLFxuICAgICAgc3ViSXRlbXM6IFsnVGFzayAxJywgJ1Rhc2sgMicsICdUYXNrIDMnXVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICB0aXRsZTogJ1Byb2plY3QgQicsXG4gICAgICBzdWJJdGVtczogWydUYXNrIDQnLCAnVGFzayA1J11cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgdGl0bGU6ICdQcm9qZWN0IEMnLFxuICAgICAgc3ViSXRlbXM6IFsnVGFzayA2JywgJ1Rhc2sgNycsICdUYXNrIDgnXVxuICAgIH1cbiAgXTtcblxuICAvLyBBUEkgRG9jdW1lbnRhdGlvblxuICBpbnB1dHNEb2MgPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2l0ZW1zJyxcbiAgICAgIHR5cGU6ICdBcnJheTx1bmtub3duPicsXG4gICAgICBkZWZhdWx0OiAnW10nLFxuICAgICAgZGVzY3JpcHRpb246ICdBcnJheSBvZiBpdGVtcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdtb2RlJyxcbiAgICAgIHR5cGU6IFwiJ21vdmUnIHwgJ2NvcHknIHwgJ2RlZXBDb3B5J1wiLFxuICAgICAgZGVmYXVsdDogXCInbW92ZSdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnTW9kZSBmb3IgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb25zJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2RpcmVjdGlvbkRyYWcnLFxuICAgICAgdHlwZTogXCInaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXCIsXG4gICAgICBkZWZhdWx0OiAndW5kZWZpbmVkJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlyZWN0aW9uIG9mIGRyYWcgbW92ZW1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndmlld0VuY2Fwc3VsYXRpb24nLFxuICAgICAgdHlwZTogXCInZW11bGF0ZWQnIHwgJ25vbmUnXCIsXG4gICAgICBkZWZhdWx0OiBcIidlbXVsYXRlZCdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnVmlldyBlbmNhcHN1bGF0aW9uIG1vZGUgZm9yIHN0eWxpbmcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGlzYWJsZURyYWdDb250YWluZXInLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogJ3VuZGVmaW5lZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdG8gZGlzYWJsZSBkcmFnIG9wZXJhdGlvbnMgZm9yIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXB0RHJhZ1NhbWVHcm91cCcsXG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiAnZmFsc2UnLFxuICAgICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIGFjY2VwdCBkcmFnIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBzYW1lIGdyb3VwJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BsYWNlaG9sZGVyJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgIGRlZmF1bHQ6ICd0cnVlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBzaG93IHBsYWNlaG9sZGVyIGR1cmluZyBkcmFnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2dyb3VwTmFtZScsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGRlZmF1bHQ6IFwiJ2dyb3VwRHJhZ0FuZERyb3BEZWZhdWx0J1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBncm91cCBmb3IgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb25zJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2Ryb3BUb0dyb3VwTmFtZScsXG4gICAgICB0eXBlOiAnQXJyYXk8c3RyaW5nPiB8IG51bGwnLFxuICAgICAgZGVmYXVsdDogJ251bGwnLFxuICAgICAgZGVzY3JpcHRpb246ICdMaXN0IG9mIGdyb3VwIG5hbWVzIHRoYXQgY2FuIGFjY2VwdCBkcm9wcyBmcm9tIHRoaXMgY29udGFpbmVyJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3N0eWxlc092ZXJyaWRlJyxcbiAgICAgIHR5cGU6ICdBcnJheTx7IGNsYXNzTmFtZTogc3RyaW5nLCBzdHlsZXM6IHN0cmluZyB9PicsXG4gICAgICBkZWZhdWx0OiAndW5kZWZpbmVkJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3VzdG9tIHN0eWxlcyB0byBvdmVycmlkZSBkZWZhdWx0IGRyYWctZHJvcCBzdHlsaW5nJ1xuICAgIH1cbiAgXTtcblxuICBvdXRwdXRzRG9jID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcmFnU3RhcnRDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcmFnU3RhcnQnLFxuICAgICAgZGVzY3JpcHRpb246ICdFdmVudCBlbWl0dGVkIHdoZW4gZHJhZ2dpbmcgc3RhcnRzIGluIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ092ZXJDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcmFnT3ZlcicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBkcmFnZ2luZyBvdmVyIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ0xlYXZlQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0xlYXZlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIGxlYXZlcyB0aGUgY29udGFpbmVyJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ291dERyYWdFbmRDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcmFnRW5kJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIGVuZHMgaW4gdGhlIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcm9wcGVkQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJvcCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIGRyb3BwZWQgaW4gdGhlIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcm9wcGVkQ29udGFpbmVyRW1wdHknLFxuICAgICAgdHlwZTogJ0lEcm9wJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbiBhbiBlbXB0eSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RnVuY3Rpb25Db250cm9sJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgdG8gY29udHJvbCBkcmFnLWRyb3AgZnVuY3Rpb25hbGl0eSdcbiAgICB9XG4gIF07XG5cbiAgLy8gSW50ZXJmYWNlIERvY3VtZW50YXRpb25cbiAgaW50ZXJmYWNlc0RvYyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdnaW5nJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdnaW5nIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudEtlZXBDb250YWluZXI/OiBib29sZWFuO1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBvcGVyYXRpb24gZXZlbnRzLCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFnZ2VkIGVsZW1lbnQgYW5kIG1vdXNlIHBvc2l0aW9uJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lEcmFnU3RhcnQnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ1N0YXJ0IHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgc3RhcnQgZXZlbnRzLCB0cmlnZ2VyZWQgd2hlbiBkcmFnZ2luZyBiZWdpbnMnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdPdmVyJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdPdmVyIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudERyYWdPdmVyOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgb3ZlciBldmVudHMsIHRyaWdnZXJlZCB3aGVuIGFuIGVsZW1lbnQgaXMgZHJhZ2dlZCBvdmVyIGFub3RoZXIgZWxlbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0xlYXZlJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdMZWF2ZSB7XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudERyYWdMZWF2ZTogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIGxlYXZlIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gYSBkcmFnZ2VkIGVsZW1lbnQgbGVhdmVzIGFub3RoZXIgZWxlbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0VuZCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnRW5kIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgZW5kIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gZHJhZ2dpbmcgZW5kcydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJvcCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcm9wIHtcbiAgZWxlbWVudERyYWc6IEhUTUxFbGVtZW50O1xuICBlbGVtZW50RHJvcDogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcm9wIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gYW4gZWxlbWVudCBpcyBkcm9wcGVkJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lJdGVtRHJhZ0luZm8nLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJSXRlbURyYWdJbmZvIHtcbiAgaXRlbTogb2JqZWN0O1xuICBpdGVtc01vdmU/OiBXcml0YWJsZVNpZ25hbDxBcnJheTx1bmtub3duPj47XG4gIGluZGV4RHJhZz86IG51bWJlcjtcbiAgaW5kZXhEcm9wPzogbnVtYmVyO1xuICBpdGVtc0RyYWc6IFdyaXRhYmxlU2lnbmFsPEFycmF5PHVua25vd24+PjtcbiAgaXRlbXNEcm9wPzogV3JpdGFibGVTaWduYWw8QXJyYXk8dW5rbm93bj4+O1xuICBjb250YWluZXJEcmFnPzogSFRNTEVsZW1lbnQ7XG4gIGNvbnRhaW5lckRyb3A/OiBIVE1MRWxlbWVudDtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZ2dlZCBpdGVtIGFuZCBpdHMgY29udGFpbmVycydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwge1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3A6IG51bWJlcjtcbiAgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQ6IG51bWJlcjtcbiAgZWxlbWVudENvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xuICBkcmFnQm91bmRhcnk/OiBib29sZWFuO1xuICBkcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyPzogYm9vbGVhbjtcbiAgaWdub3JlU3RvcEV2ZW50PzogYm9vbGVhbjtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIHZpcnR1YWwgc2Nyb2xsaW5nIGRyYWcgb3BlcmF0aW9ucywgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBkcmFnIGJvdW5kYXJpZXMgYW5kIGNvbnRhaW5lciBlbGVtZW50cydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJTW91c2VQb3NpdGlvbicsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElNb3VzZVBvc2l0aW9uIHtcbiAgY2xpZW50WDogbnVtYmVyO1xuICBjbGllbnRZOiBudW1iZXI7XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIHJlcHJlc2VudGluZyBtb3VzZSBwb3NpdGlvbiBjb29yZGluYXRlcydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnRHJvcEZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBhbmQgZHJvcCBjb250cm9sIGZ1bmN0aW9ucydcbiAgICB9XG4gIF07XG5cbiAgLy8gRmVhdHVyZXNcbiAgZmVhdHVyZXMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICBpY29uOiAn8J+UhCcsXG4gICAgICB0aXRsZTogJ0ZsZXhpYmxlIERyYWcgYW5kIERyb3AnLFxuICAgICAgZGVzY3JpcHRpb246ICdTdXBwb3J0IGZvciBjb250YWluZXItdG8tY29udGFpbmVyIGRyYWdnaW5nIHdpdGggY3VzdG9taXphYmxlIGdyb3VwIG5hbWVzIGFuZCBkcm9wIHpvbmVzJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICBpY29uOiAn8J+TnCcsXG4gICAgICB0aXRsZTogJ1ZpcnR1YWwgU2Nyb2xsaW5nJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRWZmaWNpZW50IGhhbmRsaW5nIG9mIGxhcmdlIGxpc3RzIHdpdGggdmlydHVhbCBzY3JvbGxpbmcgc3VwcG9ydCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgaWNvbjogJ/Cfjq8nLFxuICAgICAgdGl0bGU6ICdDdXN0b20gQm91bmRhcmllcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0RlZmluZSBjdXN0b20gZHJhZyBib3VuZGFyaWVzIGFuZCBkcm9wIHpvbmVzIGZvciBwcmVjaXNlIGNvbnRyb2wnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNCxcbiAgICAgIGljb246ICfwn46oJyxcbiAgICAgIHRpdGxlOiAnU3R5bGluZyBPcHRpb25zJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3VzdG9taXphYmxlIHN0eWxlcyBmb3IgZHJhZyBpdGVtcyBhbmQgY29udGFpbmVycydcbiAgICB9XG4gIF07XG5cbiAgLy8gQ29kZSBFeGFtcGxlc1xuICBjb2RlRXhhbXBsZXMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICB0aXRsZTogJ0Jhc2ljIFVzYWdlJyxcbiAgICAgIGNvZGU6IGAmbHQ7ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICBbKGl0ZW1zKV09XCJpdGVtc1wiXG4gIFtncm91cE5hbWVdPVwiJ215R3JvdXAnXCJcbiAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiJmd0O1xuICBAZm9yIChpdGVtIG9mIGl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgJmx0O2RpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSZndDtcbiAgICAgIHt7IGl0ZW0gfX1cbiAgICAmbHQ7L2RpdiZndDtcbiAgfVxuJmx0Oy9kaXYmZ3Q7YFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICB0aXRsZTogJ0NvbnRhaW5lci10by1Db250YWluZXInLFxuICAgICAgY29kZTogYCZsdDtkaXYgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gIFsoaXRlbXMpXT1cInNvdXJjZUl0ZW1zXCJcbiAgW2dyb3VwTmFtZV09XCInc291cmNlJ1wiJmd0O1xuICBAZm9yIChpdGVtIG9mIHNvdXJjZUl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgJmx0O2RpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSZndDtcbiAgICAgIHt7IGl0ZW0gfX1cbiAgICAmbHQ7L2RpdiZndDtcbiAgfVxuJmx0Oy9kaXYmZ3Q7XG5cbiZsdDtkaXYgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gIFsoaXRlbXMpXT1cInRhcmdldEl0ZW1zXCJcbiAgW2dyb3VwTmFtZV09XCIndGFyZ2V0J1wiXG4gIFtkcm9wVG9Hcm91cE5hbWVdPVwiWydzb3VyY2UnXVwiJmd0O1xuICBAZm9yIChpdGVtIG9mIHRhcmdldEl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgJmx0O2RpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSZndDtcbiAgICAgIHt7IGl0ZW0gfX1cbiAgICAmbHQ7L2RpdiZndDtcbiAgfVxuJmx0Oy9kaXYmZ3Q7YFxuICAgIH1dO1xuXG4gIC8qKlxuICAgKiBDb3B5IHRleHQgdG8gY2xpcGJvYXJkXG4gICAqL1xuICBjb3B5VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKSB7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgYWxlcnQoJ0NvcGllZCB0byBjbGlwYm9hcmQnKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBjb3B5IHRleHQ6ICcsIGVycik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufSAiXX0=
833
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVtby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJhZy1kcm9wL3NyYy9kZW1vL2RlbW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQW9tQmpFLE1BQU0sT0FBTywyQkFBMkI7SUFDdEMsbUJBQW1CO0lBQ25CLFVBQVUsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVoRSx1QkFBdUI7SUFDdkIsVUFBVSxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QyxPQUFPLEdBQWE7UUFDbEI7WUFDRSxFQUFFLEVBQUUsTUFBTTtZQUNWLEtBQUssRUFBRSxPQUFPO1lBQ2QsS0FBSyxFQUFFO2dCQUNMO29CQUNFLEVBQUUsRUFBRSxDQUFDO29CQUNMLEtBQUssRUFBRSx5QkFBeUI7b0JBQ2hDLFdBQVcsRUFBRSxrREFBa0Q7b0JBQy9ELE1BQU0sRUFBRSxNQUFNO2lCQUNmO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxDQUFDO29CQUNMLEtBQUssRUFBRSxnQkFBZ0I7b0JBQ3ZCLFdBQVcsRUFBRSwrQ0FBK0M7b0JBQzVELE1BQU0sRUFBRSxNQUFNO2lCQUNmO2FBQ0Y7U0FDRjtRQUNEO1lBQ0UsRUFBRSxFQUFFLGFBQWE7WUFDakIsS0FBSyxFQUFF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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0T1QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kcmFnLWRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJhZy1pdGVtLmRpcmVjdGl2ZSc7XG5cbmludGVyZmFjZSBUYXNrIHtcbiAgaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzOiAndG9kbycgfCAnaW4tcHJvZ3Jlc3MnIHwgJ2RvbmUnO1xufVxuXG5pbnRlcmZhY2UgQ29sdW1uIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgaXRlbXM6IFRhc2tbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRyYWctZHJvcC1kZW1vJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUsIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlLCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInBhZ2UtY29udGFpbmVyXCI+XG4gICAgICA8aGVhZGVyPlxuICAgICAgICA8aDE+RGVtbyBEcmFnIGFuZCBEcm9wIENvbXBvbmVudDwvaDE+XG4gICAgICAgIDxwPkFuZ3VsYXIgY29tcG9uZW50IGxpYnJhcnkgZm9yIGRyYWcgYW5kIGRyb3AgZnVuY3Rpb25hbGl0eTwvcD5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICA8bWFpbj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJpbnRyby1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkludHJvZHVjdGlvbjwvaDI+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8Y29kZT4mIzY0O2xpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3A8L2NvZGU+XG4gICAgICAgICAgICBpcyBhIHBvd2VyZnVsIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgZW5hYmxlcyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkgd2l0aCBmZWF0dXJlcyBsaWtlIHZpcnR1YWwgc2Nyb2xsaW5nLCBtdWx0aS1zZWxlY3Rpb24sIGFuZCBjdXN0b20gYm91bmRhcmllcy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImluc3RhbGxhdGlvbi1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkluc3RhbGxhdGlvbjwvaDI+XG4gICAgICAgICAgPHA+VG8gaW5zdGFsbCB0aGUgbGlicmFyeSwgdXNlIG5wbSBvciB5YXJuOjwvcD5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnN0YWxsLWNvbW1hbmRcIj5cbiAgICAgICAgICAgIDxwcmU+XG4gICAgICAgICAgICAgIDxjb2RlPm5wbSBpbnN0YWxsICYjNjQ7bGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcDwvY29kZT5cbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQ29weSdcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoJ25wbSBpbnN0YWxsIEBsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wJylcIiAvPlxuICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cD5PciB3aXRoIHlhcm46PC9wPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluc3RhbGwtY29tbWFuZFwiPlxuICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgPGNvZGU+eWFybiBhZGQgJiM2NDtsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wPC9jb2RlPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDb3B5J1wiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgneWFybiBhZGQgQGxpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3AnKVwiIC8+XG4gICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZGVtby1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkxpdmUgRGVtbzwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRlbW8tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8IS0tIEJhc2ljIExpc3QgRGVtbyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZW1vLWV4YW1wbGVcIj5cbiAgICAgICAgICAgICAgPGgzPkJhc2ljIExpc3Q8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZVxuICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwiYmFzaWNJdGVtc1wiXG4gICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGJhc2ljSXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0taWNvblwiPvCfk4s8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXRleHRcIj57eyBpdGVtIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBLYW5iYW4gQm9hcmQgRGVtbyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZW1vLWV4YW1wbGVcIj5cbiAgICAgICAgICAgICAgPGgzPkthbmJhbiBCb2FyZDwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYW5iYW4tYm9hcmRcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwia2FuYmFuLWNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgIExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgICAgIFsoaXRlbXMpXT1cImNvbHVtbi5pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIFtncm91cE5hbWVdPVwiY29sdW1uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Ryb3BUb0dyb3VwTmFtZV09XCJjb2x1bW5zSWRzXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aDQ+e3sgY29sdW1uLnRpdGxlIH19PC9oND5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjb2x1bW4uaXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImthbmJhbi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImthbmJhbi1pdGVtLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tdGl0bGVcIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS1zdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInc3RhdHVzLScgKyBpdGVtLnN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uc3RhdHVzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJpdGVtLWRlc2NyaXB0aW9uXCI+e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE5lc3RlZCBDb250YWluZXJzIERlbW8gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVtby1leGFtcGxlXCI+XG4gICAgICAgICAgICAgIDxoMz5OZXN0ZWQgQ29udGFpbmVycyBjb3B5PC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZVxuICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwibmVzdGVkSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCIncGFyZW50J1wiXG4gICAgICAgICAgICAgICAgICBbbW9kZV09XCInY29weSdcIlxuICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBuZXN0ZWRJdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuZXN0ZWQtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmU+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1pdGVtLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXRpdGxlXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmVzdGVkLWl0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKGl0ZW1zKV09XCJpdGVtLnN1Ykl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCInY2hpbGQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChzdWJJdGVtIG9mIGl0ZW0uc3ViSXRlbXM7IHRyYWNrIHN1Ykl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN1Yi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3ViSXRlbSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImFwaS1kb2Mtc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5BUEkgRG9jdW1lbnRhdGlvbjwvaDI+XG5cbiAgICAgICAgICA8aDM+SW5wdXRzPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJhcGktdGFibGVcIj5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5EZWZhdWx0PC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIEBmb3IgKGlucHV0IG9mIGlucHV0c0RvYzsgdHJhY2sgaW5wdXQubmFtZSkge1xuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3sgaW5wdXQubmFtZSB9fTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7IGlucHV0LnR5cGUgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpbnB1dC5kZWZhdWx0IH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGlucHV0LmRlc2NyaXB0aW9uIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxoMz5PdXRwdXRzPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJhcGktdGFibGVcIj5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIEBmb3IgKG91dHB1dCBvZiBvdXRwdXRzRG9jOyB0cmFjayBvdXRwdXQubmFtZSkge1xuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3sgb3V0cHV0Lm5hbWUgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57eyBvdXRwdXQudHlwZSB9fTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7IG91dHB1dC5kZXNjcmlwdGlvbiB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImludGVyZmFjZXMtc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5JbnRlcmZhY2VzPC9oMj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW50ZXJmYWNlLWRvY3NcIj5cbiAgICAgICAgICAgIEBmb3IgKGludGVyZmFjZUl0ZW0gb2YgaW50ZXJmYWNlc0RvYzsgdHJhY2sgaW50ZXJmYWNlSXRlbS5uYW1lKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnRlcmZhY2UtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxoMz57eyBpbnRlcmZhY2VJdGVtLm5hbWUgfX08L2gzPlxuICAgICAgICAgICAgICAgIDxwcmU+PGNvZGU+e3tpbnRlcmZhY2VJdGVtLmNvZGV9fTwvY29kZT48L3ByZT5cbiAgICAgICAgICAgICAgICA8cD57eyBpbnRlcmZhY2VJdGVtLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZmVhdHVyZXMtc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5GZWF0dXJlczwvaDI+XG4gICAgICAgICAgPHVsPlxuICAgICAgICAgICAgQGZvciAoZmVhdHVyZSBvZiBmZWF0dXJlczsgdHJhY2sgZmVhdHVyZS5pZCkge1xuICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmZWF0dXJlLWljb25cIj57eyBmZWF0dXJlLmljb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZlYXR1cmUtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgPGgzPnt7IGZlYXR1cmUudGl0bGUgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgPHA+e3sgZmVhdHVyZS5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJ1c2FnZS1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPlVzYWdlPC9oMj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29kZS1leGFtcGxlc1wiPlxuICAgICAgICAgICAgQGZvciAoZXhhbXBsZSBvZiBjb2RlRXhhbXBsZXM7IHRyYWNrIGV4YW1wbGUuaWQpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvZGUtZXhhbXBsZVwiPlxuICAgICAgICAgICAgICAgIDxoMz57eyBleGFtcGxlLnRpdGxlIH19PC9oMz5cbiAgICAgICAgICAgICAgICA8cHJlPjxjb2RlIFtpbm5lckhUTUxdPVwiZXhhbXBsZS5jb2RlXCI+PC9jb2RlPjwvcHJlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9tYWluPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAucGFnZS1jb250YWluZXIge1xuICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBUYWhvbWEsIEdlbmV2YSwgVmVyZGFuYSwgc2Fucy1zZXJpZjtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICB9XG5cbiAgICAgIGhlYWRlciB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogNDBweCAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIGhlYWRlciBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgICAgICBjb2xvcjogIzJjM2U1MDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgIH1cblxuICAgICAgaGVhZGVyIHAge1xuICAgICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgICAgY29sb3I6ICM3ZjhjOGQ7XG4gICAgICB9XG5cbiAgICAgIHNlY3Rpb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDMwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIGgyIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjhyZW07XG4gICAgICAgIGNvbG9yOiAjMmMzZTUwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlY2YwZjE7XG4gICAgICB9XG5cbiAgICAgIGgzIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjRyZW07XG4gICAgICAgIGNvbG9yOiAjMzQ0OTVlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgICAgfVxuXG4gICAgICBoNCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgICAgICBjb2xvcjogIzM0NDk1ZTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgIH1cblxuICAgICAgcCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICB9XG5cbiAgICAgIGNvZGUge1xuICAgICAgICBmb250LWZhbWlseTogJ0NvdXJpZXIgTmV3JywgQ291cmllciwgbW9ub3NwYWNlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuICAgICAgICBwYWRkaW5nOiAycHggNXB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICB9XG5cbiAgICAgIHByZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gICAgICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgfVxuXG4gICAgICBwcmUgY29kZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICAvKiBJbnN0YWxsYXRpb24gc2VjdGlvbiBzdHlsZXMgKi9cbiAgICAgIC5pbnN0YWxsYXRpb24tc2VjdGlvbiAuaW5zdGFsbC1jb21tYW5kIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgfVxuXG4gICAgICAuaW5zdGFsbGF0aW9uLXNlY3Rpb24gLmNvcHktYnV0dG9uIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDEwcHg7XG4gICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMzQ5OGRiO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBwYWRkaW5nOiA1cHggMTBweDtcbiAgICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xuICAgICAgfVxuXG4gICAgICAuaW5zdGFsbGF0aW9uLXNlY3Rpb24gLmNvcHktYnV0dG9uOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzI5ODBiOTtcbiAgICAgIH1cblxuICAgICAgLyogRGVtbyBzZWN0aW9uIHN0eWxlcyAqL1xuICAgICAgLmRlbW8tY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgICAgIGdhcDogMzBweDtcbiAgICAgIH1cblxuICAgICAgLmRlbW8tZXhhbXBsZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmN2Y3Zjc7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIH1cblxuICAgICAgLyogTGlzdCBzdHlsZXMgKi9cbiAgICAgIC5saXN0LWNvbnRhaW5lciB7XG4gICAgICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgICAgIG1hcmdpbjogMjBweCBhdXRvO1xuICAgICAgfVxuXG4gICAgICAubGlzdC1pdGVtIHtcbiAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgbWFyZ2luOiA4cHggMDtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICB0cmFuc2Zvcm0gMC4ycyxcbiAgICAgICAgICBib3gtc2hhZG93IDAuMnM7XG4gICAgICB9XG5cbiAgICAgIC5saXN0LWl0ZW06aG92ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5pdGVtLWljb24ge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICB9XG5cbiAgICAgIC8qIEthbmJhbiBzdHlsZXMgKi9cbiAgICAgIC5rYW5iYW4tYm9hcmQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDIwcHg7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICB9XG5cbiAgICAgIC5rYW5iYW4tY29sdW1uIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAzMDBweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgICAgICAgcGFkZGluZzogMTVweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICAua2FuYmFuLWl0ZW0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgbWFyZ2luOiA4cHggMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAua2FuYmFuLWl0ZW0taGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG5cbiAgICAgIC5pdGVtLXRpdGxlIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIH1cblxuICAgICAgLml0ZW0tc3RhdHVzIHtcbiAgICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgICAgfVxuXG4gICAgICAuc3RhdHVzLXRvZG8ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZlYmVlO1xuICAgICAgICBjb2xvcjogI2M2MjgyODtcbiAgICAgIH1cblxuICAgICAgLnN0YXR1cy1pbi1wcm9ncmVzcyB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYzZTA7XG4gICAgICAgIGNvbG9yOiAjZWY2YzAwO1xuICAgICAgfVxuXG4gICAgICAuc3RhdHVzLWRvbmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZThmNWU5O1xuICAgICAgICBjb2xvcjogIzJlN2QzMjtcbiAgICAgIH1cblxuICAgICAgLml0ZW0tZGVzY3JpcHRpb24ge1xuICAgICAgICBmb250LXNpemU6IDAuOWVtO1xuICAgICAgICBjb2xvcjogIzY2NjtcbiAgICAgIH1cblxuICAgICAgLyogTmVzdGVkIGNvbnRhaW5lcnMgc3R5bGVzICovXG4gICAgICAubmVzdGVkLWNvbnRhaW5lciB7XG4gICAgICAgIG1heC13aWR0aDogODAwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgfVxuXG4gICAgICAubmVzdGVkLWl0ZW0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBtYXJnaW46IDEycHggMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgLm5lc3RlZC1pdGVtLWhlYWRlciB7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgICAgfVxuXG4gICAgICAubmVzdGVkLWl0ZW0tY29udGVudCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICB9XG5cbiAgICAgIC5zdWItaXRlbSB7XG4gICAgICAgIHBhZGRpbmc6IDhweDtcbiAgICAgICAgbWFyZ2luOiA0cHggMDtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgfVxuXG4gICAgICAvKiBBUEkgZG9jdW1lbnRhdGlvbiBzdHlsZXMgKi9cbiAgICAgIC5hcGktZG9jLXNlY3Rpb24ge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xuICAgICAgfVxuXG4gICAgICAudGFibGUtY29udGFpbmVyIHtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICAgIH1cblxuICAgICAgLmFwaS10YWJsZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgfVxuXG4gICAgICAuYXBpLXRhYmxlIHRoLFxuICAgICAgLmFwaS10YWJsZSB0ZCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTVweDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMWUxZTE7XG4gICAgICB9XG5cbiAgICAgIC5hcGktdGFibGUgdGgge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIH1cblxuICAgICAgLmFwaS10YWJsZSB0Ym9keSB0cjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG4gICAgICB9XG5cbiAgICAgIC8qIEZlYXR1cmVzIHNlY3Rpb24gKi9cbiAgICAgIC5mZWF0dXJlcy1zZWN0aW9uIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmVzLXNlY3Rpb24gbGkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNXB4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmUtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xuICAgICAgICBtaW4td2lkdGg6IDQwcHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmZlYXR1cmUtaW5mbyB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIC8qIENvZGUgZXhhbXBsZXMgKi9cbiAgICAgIC5jb2RlLWV4YW1wbGVzIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgICAgIGdhcDogMjBweDtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgICAgIC5jb2RlLWV4YW1wbGVzIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAgICAgICAuY29kZS1leGFtcGxlcyB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY29kZS1leGFtcGxlIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VjZjBmMTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgICBwYWRkaW5nOiAxNXB4O1xuICAgICAgfVxuXG4gICAgICAvKiBSZXNwb25zaXZlIGFkanVzdG1lbnRzICovXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgaGVhZGVyIHtcbiAgICAgICAgICBwYWRkaW5nOiAzMHB4IDA7XG4gICAgICAgIH1cblxuICAgICAgICBoZWFkZXIgaDEge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlY3Rpb24ge1xuICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAua2FuYmFuLWJvYXJkIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgLmthbmJhbi1jb2x1bW4ge1xuICAgICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mZWF0dXJlLWljb24ge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMTVweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaURyYWdEcm9wRGVtb0NvbXBvbmVudCB7XG4gIC8vIEJhc2ljIExpc3QgSXRlbXNcbiAgYmFzaWNJdGVtcyA9IFsnVGFzayAxJywgJ1Rhc2sgMicsICdUYXNrIDMnLCAnVGFzayA0JywgJ1Rhc2sgNSddO1xuXG4gIC8vIEthbmJhbiBCb2FyZCBDb2x1bW5zXG4gIGNvbHVtbnNJZHMgPSBbJ3RvZG8nLCAnaW4tcHJvZ3Jlc3MnLCAnZG9uZSddO1xuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICB7XG4gICAgICBpZDogJ3RvZG8nLFxuICAgICAgdGl0bGU6ICdUbyBEbycsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDEsXG4gICAgICAgICAgdGl0bGU6ICdJbXBsZW1lbnQgZHJhZyBhbmQgZHJvcCcsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdBZGQgZHJhZyBhbmQgZHJvcCBmdW5jdGlvbmFsaXR5IHRvIHRoZSBjb21wb25lbnQnLFxuICAgICAgICAgIHN0YXR1czogJ3RvZG8nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDIsXG4gICAgICAgICAgdGl0bGU6ICdBZGQgYW5pbWF0aW9ucycsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdJbXBsZW1lbnQgc21vb3RoIGFuaW1hdGlvbnMgZm9yIGRyYWcgYW5kIGRyb3AnLFxuICAgICAgICAgIHN0YXR1czogJ3RvZG8nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnaW4tcHJvZ3Jlc3MnLFxuICAgICAgdGl0bGU6ICdJbiBQcm9ncmVzcycsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDMsXG4gICAgICAgICAgdGl0bGU6ICdGaXggc3R5bGluZyBpc3N1ZXMnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzb2x2ZSBDU1MgY29uZmxpY3RzIGluIHRoZSBjb21wb25lbnQnLFxuICAgICAgICAgIHN0YXR1czogJ2luLXByb2dyZXNzJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2RvbmUnLFxuICAgICAgdGl0bGU6ICdEb25lJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogNCxcbiAgICAgICAgICB0aXRsZTogJ1NldHVwIHByb2plY3Qgc3RydWN0dXJlJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luaXRpYWxpemUgdGhlIHByb2plY3Qgd2l0aCBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMnLFxuICAgICAgICAgIHN0YXR1czogJ2RvbmUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIC8vIE5lc3RlZCBJdGVtc1xuICBuZXN0ZWRJdGVtcyA9IFtcbiAgICB7XG4gICAgICBpZDogMSxcbiAgICAgIHRpdGxlOiAnUHJvamVjdCBBJyxcbiAgICAgIHN1Ykl0ZW1zOiBbJ1Rhc2sgMScsICdUYXNrIDInLCAnVGFzayAzJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHRpdGxlOiAnUHJvamVjdCBCJyxcbiAgICAgIHN1Ykl0ZW1zOiBbJ1Rhc2sgNCcsICdUYXNrIDUnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgdGl0bGU6ICdQcm9qZWN0IEMnLFxuICAgICAgc3ViSXRlbXM6IFsnVGFzayA2JywgJ1Rhc2sgNycsICdUYXNrIDgnXSxcbiAgICB9LFxuICBdO1xuXG4gIC8vIEFQSSBEb2N1bWVudGF0aW9uXG4gIGlucHV0c0RvYyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnaXRlbXMnLFxuICAgICAgdHlwZTogJ0FycmF5PHVua25vd24+JyxcbiAgICAgIGRlZmF1bHQ6ICdbXScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0FycmF5IG9mIGl0ZW1zIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgY29udGFpbmVyJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdtb2RlJyxcbiAgICAgIHR5cGU6IFwiJ21vdmUnIHwgJ2NvcHknIHwgJ2RlZXBDb3B5J1wiLFxuICAgICAgZGVmYXVsdDogXCInbW92ZSdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnTW9kZSBmb3IgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb25zJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkaXJlY3Rpb25EcmFnJyxcbiAgICAgIHR5cGU6IFwiJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1wiLFxuICAgICAgZGVmYXVsdDogJ3VuZGVmaW5lZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0RpcmVjdGlvbiBvZiBkcmFnIG1vdmVtZW50JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd2aWV3RW5jYXBzdWxhdGlvbicsXG4gICAgICB0eXBlOiBcIidlbXVsYXRlZCcgfCAnbm9uZSdcIixcbiAgICAgIGRlZmF1bHQ6IFwiJ2VtdWxhdGVkJ1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdWaWV3IGVuY2Fwc3VsYXRpb24gbW9kZSBmb3Igc3R5bGluZycsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGlzYWJsZURyYWdDb250YWluZXInLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogJ3VuZGVmaW5lZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdG8gZGlzYWJsZSBkcmFnIG9wZXJhdGlvbnMgZm9yIHRoZSBjb250YWluZXInLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2VwdERyYWdTYW1lR3JvdXAnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogJ2ZhbHNlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBhY2NlcHQgZHJhZyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBncm91cCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGxhY2Vob2xkZXInLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogJ3RydWUnLFxuICAgICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIHNob3cgcGxhY2Vob2xkZXIgZHVyaW5nIGRyYWcnLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2dyb3VwTmFtZScsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGRlZmF1bHQ6IFwiJ2dyb3VwRHJhZ0FuZERyb3BEZWZhdWx0J1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBncm91cCBmb3IgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb25zJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkcm9wVG9Hcm91cE5hbWUnLFxuICAgICAgdHlwZTogJ0FycmF5PHN0cmluZz4gfCBudWxsJyxcbiAgICAgIGRlZmF1bHQ6ICdudWxsJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBvZiBncm91cCBuYW1lcyB0aGF0IGNhbiBhY2NlcHQgZHJvcHMgZnJvbSB0aGlzIGNvbnRhaW5lcicsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc3R5bGVzT3ZlcnJpZGUnLFxuICAgICAgdHlwZTogJ0FycmF5PHsgY2xhc3NOYW1lOiBzdHJpbmcsIHN0eWxlczogc3RyaW5nIH0+JyxcbiAgICAgIGRlZmF1bHQ6ICd1bmRlZmluZWQnLFxuICAgICAgZGVzY3JpcHRpb246ICdDdXN0b20gc3R5bGVzIHRvIG92ZXJyaWRlIGRlZmF1bHQgZHJhZy1kcm9wIHN0eWxpbmcnLFxuICAgIH0sXG4gIF07XG5cbiAgb3V0cHV0c0RvYyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ1N0YXJ0Q29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ1N0YXJ0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIHN0YXJ0cyBpbiB0aGUgY29udGFpbmVyJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcmFnT3ZlckNvbnRhaW5lcicsXG4gICAgICB0eXBlOiAnSURyYWdPdmVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIG92ZXIgdGhlIGNvbnRhaW5lcicsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ0xlYXZlQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0xlYXZlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIGxlYXZlcyB0aGUgY29udGFpbmVyJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcmFnRW5kQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0VuZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBkcmFnZ2luZyBlbmRzIGluIHRoZSBjb250YWluZXInLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ291dERyb3BwZWRDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcm9wJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbiB0aGUgY29udGFpbmVyJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcm9wcGVkQ29udGFpbmVyRW1wdHknLFxuICAgICAgdHlwZTogJ0lEcm9wJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbiBhbiBlbXB0eSBjb250YWluZXInLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ291dEZ1bmN0aW9uQ29udHJvbCcsXG4gICAgICB0eXBlOiAnSURyYWdEcm9wRnVuY3Rpb25Db250cm9sRXZlbnQnLFxuICAgICAgZGVzY3JpcHRpb246ICdFdmVudCBlbWl0dGVkIHRvIGNvbnRyb2wgZHJhZy1kcm9wIGZ1bmN0aW9uYWxpdHknLFxuICAgIH0sXG4gIF07XG5cbiAgLy8gSW50ZXJmYWNlIERvY3VtZW50YXRpb25cbiAgaW50ZXJmYWNlc0RvYyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdnaW5nJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdnaW5nIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudEtlZXBDb250YWluZXI/OiBib29sZWFuO1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBvcGVyYXRpb24gZXZlbnRzLCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFnZ2VkIGVsZW1lbnQgYW5kIG1vdXNlIHBvc2l0aW9uJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ1N0YXJ0JyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdTdGFydCB7XG4gIG1vdXNlUG9zaXRpb246IElNb3VzZVBvc2l0aW9uO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIHN0YXJ0IGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gZHJhZ2dpbmcgYmVnaW5zJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ092ZXInLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ092ZXIge1xuICBtb3VzZVBvc2l0aW9uOiBJTW91c2VQb3NpdGlvbjtcbiAgZWxlbWVudERyYWc6IEhUTUxFbGVtZW50O1xuICBlbGVtZW50RHJhZ092ZXI6IEhUTUxFbGVtZW50O1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBvdmVyIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gYW4gZWxlbWVudCBpcyBkcmFnZ2VkIG92ZXIgYW5vdGhlciBlbGVtZW50JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0xlYXZlJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdMZWF2ZSB7XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudERyYWdMZWF2ZTogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIGxlYXZlIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gYSBkcmFnZ2VkIGVsZW1lbnQgbGVhdmVzIGFub3RoZXIgZWxlbWVudCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdFbmQnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ0VuZCB7XG4gIG1vdXNlUG9zaXRpb246IElNb3VzZVBvc2l0aW9uO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIGVuZCBldmVudHMsIHRyaWdnZXJlZCB3aGVuIGRyYWdnaW5nIGVuZHMnLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lEcm9wJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyb3Age1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGVsZW1lbnREcm9wOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyb3AgZXZlbnRzLCB0cmlnZ2VyZWQgd2hlbiBhbiBlbGVtZW50IGlzIGRyb3BwZWQnLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lJdGVtRHJhZ0luZm8nLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJSXRlbURyYWdJbmZvIHtcbiAgaXRlbTogb2JqZWN0O1xuICBpdGVtc01vdmU/OiBXcml0YWJsZVNpZ25hbDxBcnJheTx1bmtub3duPj47XG4gIGluZGV4RHJhZz86IG51bWJlcjtcbiAgaW5kZXhEcm9wPzogbnVtYmVyO1xuICBpdGVtc0RyYWc6IFdyaXRhYmxlU2lnbmFsPEFycmF5PHVua25vd24+PjtcbiAgaXRlbXNEcm9wPzogV3JpdGFibGVTaWduYWw8QXJyYXk8dW5rbm93bj4+O1xuICBjb250YWluZXJEcmFnPzogSFRNTEVsZW1lbnQ7XG4gIGNvbnRhaW5lckRyb3A/OiBIVE1MRWxlbWVudDtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZ2dlZCBpdGVtIGFuZCBpdHMgY29udGFpbmVycycsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsIHtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbiAgZWxlbWVudERyYWc6IEhUTUxFbGVtZW50O1xuICBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wOiBudW1iZXI7XG4gIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0OiBudW1iZXI7XG4gIGVsZW1lbnRDb250YWluZXI/OiBIVE1MRWxlbWVudDtcbiAgZHJhZ0JvdW5kYXJ5PzogYm9vbGVhbjtcbiAgZHJhZ0JvdW5kYXJ5QWNjZXB0TW91c2VMZWF2ZUNvbnRhaW5lcj86IGJvb2xlYW47XG4gIGlnbm9yZVN0b3BFdmVudD86IGJvb2xlYW47XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciB2aXJ0dWFsIHNjcm9sbGluZyBkcmFnIG9wZXJhdGlvbnMsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgZHJhZyBib3VuZGFyaWVzIGFuZCBjb250YWluZXIgZWxlbWVudHMnLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lNb3VzZVBvc2l0aW9uJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSU1vdXNlUG9zaXRpb24ge1xuICBjbGllbnRYOiBudW1iZXI7XG4gIGNsaWVudFk6IG51bWJlcjtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgcmVwcmVzZW50aW5nIG1vdXNlIHBvc2l0aW9uIGNvb3JkaW5hdGVzJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnRHJvcEZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBhbmQgZHJvcCBjb250cm9sIGZ1bmN0aW9ucycsXG4gICAgfSxcbiAgXTtcblxuICAvLyBGZWF0dXJlc1xuICBmZWF0dXJlcyA9IFtcbiAgICB7XG4gICAgICBpZDogMSxcbiAgICAgIGljb246ICfwn5SEJyxcbiAgICAgIHRpdGxlOiAnRmxleGlibGUgRHJhZyBhbmQgRHJvcCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1N1cHBvcnQgZm9yIGNvbnRhaW5lci10by1jb250YWluZXIgZHJhZ2dpbmcgd2l0aCBjdXN0b21pemFibGUgZ3JvdXAgbmFtZXMgYW5kIGRyb3Agem9uZXMnLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICBpY29uOiAn8J+TnCcsXG4gICAgICB0aXRsZTogJ1ZpcnR1YWwgU2Nyb2xsaW5nJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRWZmaWNpZW50IGhhbmRsaW5nIG9mIGxhcmdlIGxpc3RzIHdpdGggdmlydHVhbCBzY3JvbGxpbmcgc3VwcG9ydCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMyxcbiAgICAgIGljb246ICfwn46vJyxcbiAgICAgIHRpdGxlOiAnQ3VzdG9tIEJvdW5kYXJpZXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdEZWZpbmUgY3VzdG9tIGRyYWcgYm91bmRhcmllcyBhbmQgZHJvcCB6b25lcyBmb3IgcHJlY2lzZSBjb250cm9sJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA0LFxuICAgICAgaWNvbjogJ/CfjqgnLFxuICAgICAgdGl0bGU6ICdTdHlsaW5nIE9wdGlvbnMnLFxuICAgICAgZGVzY3JpcHRpb246ICdDdXN0b21pemFibGUgc3R5bGVzIGZvciBkcmFnIGl0ZW1zIGFuZCBjb250YWluZXJzJyxcbiAgICB9LFxuICBdO1xuXG4gIC8vIENvZGUgRXhhbXBsZXNcbiAgY29kZUV4YW1wbGVzID0gW1xuICAgIHtcbiAgICAgIGlkOiAxLFxuICAgICAgdGl0bGU6ICdCYXNpYyBVc2FnZScsXG4gICAgICBjb2RlOiBgJmx0O2RpdiBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgWyhpdGVtcyldPVwiaXRlbXNcIlxuICBbZ3JvdXBOYW1lXT1cIidteUdyb3VwJ1wiXG4gIFthY2NlcHREcmFnU2FtZUdyb3VwXT1cInRydWVcIiZndDtcbiAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICZsdDtkaXYgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUmZ3Q7XG4gICAgICB7eyBpdGVtIH19XG4gICAgJmx0Oy9kaXYmZ3Q7XG4gIH1cbiZsdDsvZGl2Jmd0O2AsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHRpdGxlOiAnQ29udGFpbmVyLXRvLUNvbnRhaW5lcicsXG4gICAgICBjb2RlOiBgJmx0O2RpdiBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgWyhpdGVtcyldPVwic291cmNlSXRlbXNcIlxuICBbZ3JvdXBOYW1lXT1cIidzb3VyY2UnXCImZ3Q7XG4gIEBmb3IgKGl0ZW0gb2Ygc291cmNlSXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAmbHQ7ZGl2IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlJmd0O1xuICAgICAge3sgaXRlbSB9fVxuICAgICZsdDsvZGl2Jmd0O1xuICB9XG4mbHQ7L2RpdiZndDtcblxuJmx0O2RpdiBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgWyhpdGVtcyldPVwidGFyZ2V0SXRlbXNcIlxuICBbZ3JvdXBOYW1lXT1cIid0YXJnZXQnXCJcbiAgW2Ryb3BUb0dyb3VwTmFtZV09XCJbJ3NvdXJjZSddXCImZ3Q7XG4gIEBmb3IgKGl0ZW0gb2YgdGFyZ2V0SXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAmbHQ7ZGl2IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlJmd0O1xuICAgICAge3sgaXRlbSB9fVxuICAgICZsdDsvZGl2Jmd0O1xuICB9XG4mbHQ7L2RpdiZndDtgLFxuICAgIH0sXG4gIF07XG5cbiAgLyoqXG4gICAqIENvcHkgdGV4dCB0byBjbGlwYm9hcmRcbiAgICovXG4gIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBhbGVydCgnQ29waWVkIHRvIGNsaXBib2FyZCcpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvcHkgdGV4dDogJywgZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iXX0=