@ditojs/admin 2.94.1 → 2.96.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2729 +0,0 @@
1
- import {
2
- pick,
3
- isDate,
4
- hyphenate,
5
- isString,
6
- defaultFormats,
7
- format
8
- } from '@ditojs/utils'
9
- const index = ''
10
- function getAbsoluteBoundingRect(el) {
11
- const doc = document
12
- const win = window
13
- const body = doc.body
14
- let offsetX =
15
- win.pageXOffset !== void 0
16
- ? win.pageXOffset
17
- : (doc.documentElement || body.parentNode || body).scrollLeft
18
- let offsetY =
19
- win.pageYOffset !== void 0
20
- ? win.pageYOffset
21
- : (doc.documentElement || body.parentNode || body).scrollTop
22
- const rect = el.getBoundingClientRect()
23
- if (el !== body) {
24
- let parent = el.parentNode
25
- while (parent !== body) {
26
- offsetX += parent.scrollLeft
27
- offsetY += parent.scrollTop
28
- parent = parent.parentNode
29
- }
30
- }
31
- return {
32
- bottom: rect.bottom + offsetY,
33
- height: rect.height,
34
- left: rect.left + offsetX,
35
- right: rect.right + offsetX,
36
- top: rect.top + offsetY,
37
- width: rect.width
38
- }
39
- }
40
- function copyDate(date, {
41
- year,
42
- month,
43
- day,
44
- hour,
45
- minute,
46
- second,
47
- millisecond
48
- } = {}) {
49
- return new Date(
50
- pick(year, date && date.getFullYear(), 0),
51
- pick(month, date && date.getMonth(), 0),
52
- pick(day, date && date.getDate(), 0),
53
- pick(hour, date && date.getHours(), 0),
54
- pick(minute, date && date.getMinutes(), 0),
55
- pick(second, date && date.getSeconds(), 0),
56
- pick(millisecond, date && date.getMilliseconds(), 0)
57
- )
58
- }
59
- function convertDate(date) {
60
- return isDate(date) ? date : date ? new Date(date) : null
61
- }
62
- function addEvents(target, events2) {
63
- for (const type in events2) {
64
- target.addEventListener(type, events2[type], false)
65
- }
66
- return {
67
- remove() {
68
- for (const type in events2) {
69
- target.removeEventListener(type, events2[type], false)
70
- }
71
- }
72
- }
73
- }
74
- function getKey(event) {
75
- return {
76
- 37: 'left',
77
- 38: 'up',
78
- 39: 'right',
79
- 40: 'down',
80
- 13: 'enter'
81
- }[event.keyCode]
82
- }
83
- function getKeyNavigation(event) {
84
- const key = getKey(event)
85
- return {
86
- hor: { left: -1, right: 1 }[key] || 0,
87
- ver: { up: -1, down: 1 }[key] || 0,
88
- enter: key === 'enter'
89
- }
90
- }
91
- function scrollTo(element, to, duration) {
92
- const requestAnimationFrame = (
93
- window.requestAnimationFrame ||
94
- function () {
95
- return setTimeout(arguments[0], 10)
96
- }
97
- )
98
- if (duration <= 0) {
99
- element.scrollTop = to
100
- } else {
101
- const difference = to - element.scrollTop
102
- const perTick = difference / duration * 10
103
- requestAnimationFrame(() => {
104
- element.scrollTop = element.scrollTop + perTick
105
- if (element.scrollTop === to) {
106
- return
107
- }
108
- scrollTo(element, to, duration - 10)
109
- })
110
- }
111
- }
112
- function setSelection(field, start, end) {
113
- if (field.createTextRange) {
114
- const range = field.createTextRange()
115
- range.collapse(true)
116
- range.moveStart('character', start)
117
- range.moveEnd('character', end)
118
- range.select()
119
- field.focus()
120
- } else if (field.setSelectionRange) {
121
- field.focus()
122
- field.setSelectionRange(start, end)
123
- } else if ('selectionStart' in field) {
124
- field.selectionStart = start
125
- field.selectionEnd = end
126
- field.focus()
127
- }
128
- }
129
- const render$8 = function () {
130
- const _vm = this
131
- const _h = _vm.$createElement
132
- const _c = _vm._self._c || _h
133
- return _c(
134
- 'div',
135
- {
136
- staticClass: 'dito-calendar'
137
- },
138
- [
139
- _c(
140
- 'div',
141
- {
142
- staticClass: 'dito-calendar-popup'
143
- },
144
- [
145
- _c(
146
- 'div',
147
- {
148
- staticClass: 'dito-calendar-inner'
149
- },
150
- [
151
- _vm.currentMode === 'day'
152
- ? [
153
- _c(
154
- 'div',
155
- {
156
- staticClass: 'dito-calendar-header'
157
- },
158
- [
159
- _c('a', {
160
- staticClass:
161
- 'dito-calendar-step-prev dito-calendar-step-year',
162
- on: {
163
- click: function ($event) {
164
- return _vm.stepYear(-1)
165
- }
166
- }
167
- }),
168
- _c('a', {
169
- staticClass:
170
- 'dito-calendar-step-prev dito-calendar-step-month',
171
- on: {
172
- click: function ($event) {
173
- return _vm.stepMonth(-1)
174
- }
175
- }
176
- }),
177
- _c('span', [
178
- _c(
179
- 'a',
180
- {
181
- staticClass: 'dito-calendar-select-year',
182
- on: {
183
- click: function ($event) {
184
- return _vm.setMode('year')
185
- }
186
- }
187
- },
188
- [
189
- _vm._v(
190
- _vm._s(
191
- _vm.dateToString(_vm.currentValue, {
192
- year: 1
193
- })
194
- )
195
- )
196
- ]
197
- ),
198
- _c(
199
- 'a',
200
- {
201
- staticClass: 'dito-calendar-select-month',
202
- on: {
203
- click: function ($event) {
204
- return _vm.setMode('month')
205
- }
206
- }
207
- },
208
- [
209
- _vm._v(
210
- _vm._s(
211
- _vm.dateToString(_vm.currentValue, {
212
- month: 1
213
- })
214
- )
215
- )
216
- ]
217
- )
218
- ]),
219
- _c('a', {
220
- staticClass:
221
- 'dito-calendar-step-next dito-calendar-step-month',
222
- on: {
223
- click: function ($event) {
224
- return _vm.stepMonth(1)
225
- }
226
- }
227
- }),
228
- _c('a', {
229
- staticClass:
230
- 'dito-calendar-step-next dito-calendar-step-year',
231
- on: {
232
- click: function ($event) {
233
- return _vm.stepYear(1)
234
- }
235
- }
236
- })
237
- ]
238
- ),
239
- _c(
240
- 'div',
241
- {
242
- staticClass: 'dito-calendar-body'
243
- },
244
- [
245
- _c(
246
- 'div',
247
- {
248
- staticClass: 'dito-calendar-weekdays'
249
- },
250
- _vm._l(_vm.weekdayNames, function (weekday) {
251
- return _c('span', [_vm._v(_vm._s(weekday.short))])
252
- }),
253
- 0
254
- ),
255
- _c(
256
- 'div',
257
- {
258
- staticClass: 'dito-calendar-dates'
259
- },
260
- _vm._l(_vm.dateRange, function (date) {
261
- return _c(
262
- 'span',
263
- {
264
- class: (
265
- date.state && `dito-calendar-item-${
266
- date.state
267
- }`
268
- ),
269
- on: {
270
- click: function ($event) {
271
- return _vm.selectDate(
272
- date.date,
273
- date.state,
274
- true
275
- )
276
- }
277
- }
278
- },
279
- [_vm._v(_vm._s(date.text))]
280
- )
281
- }),
282
- 0
283
- )
284
- ]
285
- ),
286
- _c(
287
- 'div',
288
- {
289
- staticClass: 'dito-calendar-footer'
290
- },
291
- [
292
- _c('a', {
293
- staticClass: 'dito-calendar-select-today',
294
- attrs: {
295
- role: 'button',
296
- title: _vm.dateToString(new Date(), {
297
- year: 1,
298
- month: 1,
299
- day: 1
300
- })
301
- },
302
- on: {
303
- click: function ($event) {
304
- _vm.selectDate(new Date())
305
- }
306
- }
307
- })
308
- ]
309
- )
310
- ]
311
- : _vm.currentMode === 'month'
312
- ? [
313
- _c(
314
- 'div',
315
- {
316
- staticClass: 'dito-calendar-header'
317
- },
318
- [
319
- _c('a', {
320
- staticClass: 'dito-calendar-step-prev',
321
- on: {
322
- click: function ($event) {
323
- return _vm.stepYear(-1)
324
- }
325
- }
326
- }),
327
- _c('span', [
328
- _c(
329
- 'a',
330
- {
331
- staticClass: 'dito-calendar-select-year',
332
- on: {
333
- click: function ($event) {
334
- return _vm.setMode('year')
335
- }
336
- }
337
- },
338
- [
339
- _vm._v(
340
- _vm._s(
341
- _vm.dateToString(_vm.currentValue, {
342
- year: 1
343
- })
344
- )
345
- )
346
- ]
347
- )
348
- ]),
349
- _c('a', {
350
- staticClass: 'dito-calendar-step-next',
351
- on: {
352
- click: function ($event) {
353
- return _vm.stepYear(1)
354
- }
355
- }
356
- })
357
- ]
358
- ),
359
- _c(
360
- 'div',
361
- {
362
- staticClass: 'dito-calendar-body'
363
- },
364
- [
365
- _c(
366
- 'div',
367
- {
368
- staticClass: 'dito-calendar-months'
369
- },
370
- _vm._l(_vm.monthNames, function (month, index2) {
371
- return _c(
372
- 'span',
373
- {
374
- class: _vm.getMonthClass(index2),
375
- on: {
376
- click: function ($event) {
377
- return _vm.selectMonth(index2)
378
- }
379
- }
380
- },
381
- [_vm._v(_vm._s(month.short))]
382
- )
383
- }),
384
- 0
385
- )
386
- ]
387
- )
388
- ]
389
- : _vm.currentMode === 'year'
390
- ? [
391
- _c(
392
- 'div',
393
- {
394
- staticClass: 'dito-calendar-header'
395
- },
396
- [
397
- _c('a', {
398
- staticClass: 'dito-calendar-step-prev',
399
- on: {
400
- click: function ($event) {
401
- return _vm.stepDecade(-1)
402
- }
403
- }
404
- }),
405
- _c('span', [
406
- _vm._v(
407
- _vm._s(_vm.decadeToString(_vm.currentValue))
408
- )
409
- ]),
410
- _c('a', {
411
- staticClass: 'dito-calendar-step-next',
412
- on: {
413
- click: function ($event) {
414
- return _vm.stepDecade(1)
415
- }
416
- }
417
- })
418
- ]
419
- ),
420
- _c(
421
- 'div',
422
- {
423
- staticClass: 'dito-calendar-body'
424
- },
425
- [
426
- _c(
427
- 'div',
428
- {
429
- staticClass: 'dito-calendar-years'
430
- },
431
- _vm._l(_vm.yearRange, function (year) {
432
- return _c(
433
- 'span',
434
- {
435
- class: _vm.getYearClass(year),
436
- on: {
437
- click: function ($event) {
438
- return _vm.selectYear(year)
439
- }
440
- }
441
- },
442
- [_vm._v(_vm._s(year))]
443
- )
444
- }),
445
- 0
446
- )
447
- ]
448
- )
449
- ]
450
- : _vm._e()
451
- ],
452
- 2
453
- )
454
- ]
455
- )
456
- ]
457
- )
458
- }
459
- const staticRenderFns$8 = []
460
- render$8._withStripped = true
461
- const Calendar_vue_vue_type_style_index_0_lang = ''
462
- function normalizeComponent(
463
- scriptExports,
464
- render2,
465
- staticRenderFns2,
466
- functionalTemplate,
467
- injectStyles,
468
- scopeId,
469
- moduleIdentifier,
470
- shadowMode
471
- ) {
472
- const options =
473
- typeof scriptExports === 'function' ? scriptExports.options : scriptExports
474
- if (render2) {
475
- options.render = render2
476
- options.staticRenderFns = staticRenderFns2
477
- options._compiled = true
478
- }
479
- if (functionalTemplate) {
480
- options.functional = true
481
- }
482
- if (scopeId) {
483
- options._scopeId = 'data-v-' + scopeId
484
- }
485
- let hook
486
- if (moduleIdentifier) {
487
- hook = function (context) {
488
- context = (
489
- context ||
490
- this.$vnode && this.$vnode.ssrContext ||
491
- this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext
492
- )
493
- if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
494
- context = __VUE_SSR_CONTEXT__
495
- }
496
- if (injectStyles) {
497
- injectStyles.call(this, context)
498
- }
499
- if (context && context._registeredComponents) {
500
- context._registeredComponents.add(moduleIdentifier)
501
- }
502
- }
503
- options._ssrRegister = hook
504
- } else if (injectStyles) {
505
- hook = shadowMode
506
- ? function () {
507
- injectStyles.call(
508
- this,
509
- (options.functional ? this.parent : this).$root.$options.shadowRoot
510
- )
511
- }
512
- : injectStyles
513
- }
514
- if (hook) {
515
- if (options.functional) {
516
- options._injectStyles = hook
517
- const originalRender = options.render
518
- options.render = function renderWithStyleInjection(h, context) {
519
- hook.call(context)
520
- return originalRender(h, context)
521
- }
522
- } else {
523
- const existing = options.beforeCreate
524
- options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
525
- }
526
- }
527
- return {
528
- exports: scriptExports,
529
- options
530
- }
531
- }
532
- const __vue2_script$9 = {
533
- props: {
534
- value: { type: Date, default: null },
535
- locale: { type: String, default: 'en-US' },
536
- disabledDate: { type: Function, default: () => false },
537
- mode: { type: String, default: 'day' }
538
- },
539
- data() {
540
- const { weekdayNames, monthNames } = getLocaleNames(this.locale)
541
- return {
542
- weekdayNames,
543
- monthNames,
544
- dateRange: [],
545
- yearRange: [],
546
- currentValue: (
547
- this.value || copyDate(new Date(), { hour: 0, minute: 0, second: 0 })
548
- ),
549
- currentMode: this.mode
550
- }
551
- },
552
- watch: {
553
- currentValue: 'updateDateRange',
554
- disabledDate: 'updateDateRange',
555
- value(newVal, oldVal) {
556
- if (+newVal !== +oldVal) {
557
- this.currentValue = newVal || new Date()
558
- }
559
- },
560
- mode(mode) {
561
- this.currentMode = mode
562
- }
563
- },
564
- mounted() {
565
- this.updateDateRange()
566
- },
567
- methods: {
568
- getMonthClass(month) {
569
- return {
570
- 'dito-calendar-item-active': (
571
- this.value &&
572
- month === this.value.getMonth() &&
573
- this.currentValue.getFullYear() === this.value.getFullYear()
574
- ),
575
- 'dito-calendar-item-current': month === this.currentValue.getMonth()
576
- }
577
- },
578
- getYearClass(year) {
579
- return {
580
- 'dito-calendar-item-active': (
581
- this.value && year === this.value.getFullYear()
582
- ),
583
- 'dito-calendar-item-current': year === this.currentValue.getFullYear()
584
- }
585
- },
586
- setDate(overrides) {
587
- this.currentValue = copyDate(this.currentValue, overrides)
588
- },
589
- stepDecade(step) {
590
- this.setDate({
591
- year: this.currentValue.getFullYear() + step * 10
592
- })
593
- },
594
- setMode(mode) {
595
- this.currentMode = mode
596
- },
597
- stepMonth(step) {
598
- const { currentValue } = this
599
- const { year, month } = this.getYearMonth(
600
- currentValue.getFullYear(),
601
- currentValue.getMonth() + step
602
- )
603
- this.setDate({
604
- month,
605
- day: Math.min(
606
- this.getDayCount(year, month),
607
- this.currentValue.getDate()
608
- )
609
- })
610
- },
611
- stepYear(step) {
612
- this.setDate({
613
- year: this.currentValue.getFullYear() + step
614
- })
615
- },
616
- selectDate(date, state, copy = false) {
617
- if (state !== 'disabled') {
618
- if (copy) {
619
- this.setDate({
620
- year: date.getFullYear(),
621
- month: date.getMonth(),
622
- day: date.getDate()
623
- })
624
- } else {
625
- this.currentValue = date
626
- }
627
- this.$emit('input', this.currentValue)
628
- }
629
- },
630
- selectMonth(month) {
631
- this.setMode('day')
632
- this.setDate({ month })
633
- },
634
- selectYear(year) {
635
- this.setMode('month')
636
- this.setDate({ year })
637
- },
638
- getYearMonth(year, month) {
639
- if (month > 11) {
640
- year++
641
- month = 0
642
- } else if (month < 0) {
643
- year--
644
- month = 11
645
- }
646
- return { year, month }
647
- },
648
- dateToString(date, { year, month, day }) {
649
- return date.toLocaleString(this.locale, {
650
- year: year && 'numeric',
651
- month: month && 'long',
652
- day: day && 'numeric'
653
- })
654
- },
655
- decadeToString(date) {
656
- const year = this.getFirstYearOfDecade(date.getFullYear())
657
- return `${year} \u2013 ${year + 9}`
658
- },
659
- getDayCount(year, month) {
660
- const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
661
- return month === 1 && (!(year % 400) || !(year % 4) && year % 100)
662
- ? 29
663
- : daysInMonth[month]
664
- },
665
- getFirstYearOfDecade(year) {
666
- const yearStr = year.toString()
667
- return +`${yearStr.slice(0, -1)}0`
668
- },
669
- navigate({ hor, ver, enter }) {
670
- const { currentMode, currentValue } = this
671
- if (hor || ver) {
672
- switch (currentMode) {
673
- case 'day':
674
- this.setDate({
675
- day: currentValue.getDate() + hor + ver * 7
676
- })
677
- break
678
- case 'month':
679
- this.setDate({
680
- month: currentValue.getMonth() + hor + ver * 6
681
- })
682
- break
683
- case 'year':
684
- this.setDate({
685
- year: currentValue.getFullYear() + hor + ver * 5
686
- })
687
- break
688
- }
689
- return true
690
- } else if (enter) {
691
- switch (currentMode) {
692
- case 'day':
693
- this.selectDate(currentValue)
694
- break
695
- case 'month':
696
- this.setMode('day')
697
- break
698
- case 'year':
699
- this.setMode('month')
700
- break
701
- }
702
- return true
703
- }
704
- },
705
- updateDateRange() {
706
- this.dateRange = []
707
- this.yearRange = []
708
- const { currentValue } = this
709
- const year = currentValue.getFullYear()
710
- const month = currentValue.getMonth()
711
- const startYear = this.getFirstYearOfDecade(year)
712
- for (let i = 0; i < 10; i++) {
713
- this.yearRange.push(startYear + i)
714
- }
715
- const currMonthFirstDay = new Date(year, month, 1)
716
- let firstDayWeek = currMonthFirstDay.getDay() + 1
717
- if (firstDayWeek === 0) {
718
- firstDayWeek = 7
719
- }
720
- const dayCount = this.getDayCount(year, month)
721
- if (firstDayWeek > 1) {
722
- const prevMonth = this.getYearMonth(year, month - 1)
723
- const prevMonthDayCount = this.getDayCount(
724
- prevMonth.year,
725
- prevMonth.month
726
- )
727
- for (let i = 1; i < firstDayWeek; i++) {
728
- const day = prevMonthDayCount - firstDayWeek + i + 1
729
- const date = new Date(prevMonth.year, prevMonth.month, day)
730
- this.dateRange.push({
731
- text: day,
732
- date,
733
- state: this.disabledDate(date) ? 'disabled' : 'gray'
734
- })
735
- }
736
- }
737
- const today = new Date()
738
- for (let i = 1; i <= dayCount; i++) {
739
- const date = new Date(year, month, i)
740
- const isDay = date2 => (
741
- date2 &&
742
- date2.getDate() === i &&
743
- date2.getFullYear() === year &&
744
- date2.getMonth() === month
745
- )
746
- const state = isDay(this.value)
747
- ? 'active'
748
- : isDay(today)
749
- ? 'today'
750
- : this.disabledDate(date)
751
- ? 'disabled'
752
- : isDay(currentValue)
753
- ? 'current'
754
- : null
755
- this.dateRange.push({
756
- text: i,
757
- date,
758
- state
759
- })
760
- }
761
- const nextMonthNeed = 42 - this.dateRange.length
762
- if (nextMonthNeed > 0) {
763
- const nextMonth = this.getYearMonth(year, month + 1)
764
- for (let i = 1; i <= nextMonthNeed; i++) {
765
- const date = new Date(nextMonth.year, nextMonth.month, i)
766
- const state = this.disabledDate(date) ? 'disabled' : 'gray'
767
- this.dateRange.push({
768
- text: i,
769
- date,
770
- state
771
- })
772
- }
773
- }
774
- }
775
- }
776
- }
777
- const localeNames = {}
778
- function getLocaleNames(locale) {
779
- let names = localeNames[locale]
780
- if (!names) {
781
- const weekdayNames = []
782
- for (let i = 0; i < 7; i++) {
783
- const date = new Date(0, 0, i)
784
- weekdayNames.push({
785
- long: date.toLocaleString(locale, { weekday: 'long' }),
786
- short: date.toLocaleString(locale, { weekday: 'short' })
787
- })
788
- }
789
- const monthNames = []
790
- for (let i = 1; i <= 12; i++) {
791
- const date = new Date(0, i, 0)
792
- monthNames.push({
793
- long: date.toLocaleString(locale, { month: 'long' }),
794
- short: date.toLocaleString(locale, { month: 'short' })
795
- })
796
- }
797
- names = localeNames[locale] = {
798
- weekdayNames,
799
- monthNames
800
- }
801
- }
802
- return names
803
- }
804
- const __cssModules$9 = {}
805
- const __component__$9 = /* @__PURE__ */ normalizeComponent(
806
- __vue2_script$9,
807
- render$8,
808
- staticRenderFns$8,
809
- false,
810
- __vue2_injectStyles$9,
811
- null,
812
- null,
813
- null
814
- )
815
- function __vue2_injectStyles$9(context) {
816
- for (const o in __cssModules$9) {
817
- this[o] = __cssModules$9[o]
818
- }
819
- }
820
- __component__$9.options.__file = 'src/components/Calendar.vue'
821
- const Calendar = /* @__PURE__ */ (function () {
822
- return __component__$9.exports
823
- })()
824
- const render$7 = function () {
825
- const _vm = this
826
- const _h = _vm.$createElement
827
- const _c = _vm._self._c || _h
828
- return _c(
829
- 'div',
830
- {
831
- staticClass: 'dito-trigger-container'
832
- },
833
- [
834
- _vm.alwaysShow
835
- ? _c(
836
- 'div',
837
- {
838
- ref: 'trigger',
839
- staticClass: 'dito-trigger',
840
- class: _vm.triggerClass
841
- },
842
- [_vm._t('trigger')],
843
- 2
844
- )
845
- : _vm.trigger === 'click'
846
- ? _c(
847
- 'div',
848
- {
849
- ref: 'trigger',
850
- staticClass: 'dito-trigger',
851
- class: _vm.triggerClass,
852
- on: {
853
- click: _vm.onClick
854
- }
855
- },
856
- [_vm._t('trigger')],
857
- 2
858
- )
859
- : _vm.trigger === 'hover'
860
- ? _c(
861
- 'div',
862
- {
863
- ref: 'trigger',
864
- staticClass: 'dito-trigger',
865
- class: _vm.triggerClass,
866
- on: {
867
- mouseenter: function ($event) {
868
- return _vm.onHover(true)
869
- },
870
- mouseleave: function ($event) {
871
- return _vm.onHover(false)
872
- }
873
- }
874
- },
875
- [_vm._t('trigger')],
876
- 2
877
- )
878
- : _vm.trigger === 'focus' || _vm.trigger === 'always'
879
- ? _c(
880
- 'div',
881
- {
882
- ref: 'trigger',
883
- staticClass: 'dito-trigger',
884
- class: _vm.triggerClass
885
- },
886
- [_vm._t('trigger')],
887
- 2
888
- )
889
- : _vm._e(),
890
- _c(
891
- 'transition',
892
- {
893
- attrs: {
894
- name: _vm.transition
895
- }
896
- },
897
- [
898
- _vm.trigger === 'hover'
899
- ? _c(
900
- 'div',
901
- {
902
- directives: [
903
- {
904
- name: 'show',
905
- rawName: 'v-show',
906
- value: _vm.showPopup,
907
- expression: 'showPopup'
908
- }
909
- ],
910
- ref: 'popup',
911
- staticClass: 'dito-popup',
912
- class: _vm.popupClass,
913
- style: _vm.popupStyle,
914
- on: {
915
- mouseenter: function ($event) {
916
- return _vm.onHover(true)
917
- },
918
- mouseleave: function ($event) {
919
- return _vm.onHover(false)
920
- }
921
- }
922
- },
923
- [_vm.showPopup ? _vm._t('popup') : _vm._e()],
924
- 2
925
- )
926
- : _c(
927
- 'div',
928
- {
929
- directives: [
930
- {
931
- name: 'show',
932
- rawName: 'v-show',
933
- value: _vm.showPopup,
934
- expression: 'showPopup'
935
- }
936
- ],
937
- ref: 'popup',
938
- staticClass: 'dito-popup',
939
- class: _vm.popupClass,
940
- style: _vm.popupStyle
941
- },
942
- [_vm.showPopup ? _vm._t('popup') : _vm._e()],
943
- 2
944
- )
945
- ]
946
- )
947
- ],
948
- 1
949
- )
950
- }
951
- const staticRenderFns$7 = []
952
- render$7._withStripped = true
953
- const Trigger_vue_vue_type_style_index_0_lang = ''
954
- const __vue2_script$8 = {
955
- props: {
956
- trigger: { type: String, default: 'click' },
957
- transition: { type: String, default: 'slide' },
958
- placement: { type: String, default: 'bottom' },
959
- show: { type: Boolean, default: false },
960
- disabled: { type: Boolean, default: false },
961
- target: { type: [String, HTMLElement], default: null },
962
- customClass: { type: String, default: null },
963
- zIndex: { type: Number, default: 0 },
964
- keepInView: { type: Boolean, default: true },
965
- hideWhenClickOutside: { type: Boolean, default: true },
966
- alwaysShow: { type: Boolean, default: false },
967
- cover: { type: Boolean, default: false },
968
- hideDelay: { type: Number, default: 0 }
969
- },
970
- data() {
971
- return {
972
- showPopup: this.show,
973
- popupPlacement: this.placement
974
- }
975
- },
976
- computed: {
977
- triggerClass() {
978
- return {
979
- 'dito-trigger-disabled': this.disabled
980
- }
981
- },
982
- popupClass() {
983
- const classes = {
984
- [`dito-popup-${hyphenate(this.placement)}`]: true
985
- }
986
- if (this.customClass) {
987
- classes[this.customClass] = true
988
- }
989
- return classes
990
- },
991
- popupStyle() {
992
- return this.zIndex ? `z-index: ${this.zIndex}` : ''
993
- }
994
- },
995
- watch: {
996
- show(show) {
997
- this.showPopup = show || this.alwaysShow
998
- },
999
- showPopup(newVal, oldVal) {
1000
- if (!newVal !== !oldVal) {
1001
- this.$emit('update:show', newVal)
1002
- if (newVal) {
1003
- this.$nextTick(() => this.updatePosition())
1004
- }
1005
- }
1006
- }
1007
- },
1008
- mounted() {
1009
- const { trigger, popup } = this.$refs
1010
- if (this.trigger === 'focus') {
1011
- const target = trigger.querySelector('input, textarea')
1012
- if (target) {
1013
- this.focusEvents = addEvents(target, {
1014
- focus: () => {
1015
- this.showPopup = true
1016
- },
1017
- blur: () => {
1018
- this.showPopup = false
1019
- }
1020
- })
1021
- }
1022
- }
1023
- if (this.hideWhenClickOutside && !this.alwaysShow) {
1024
- this.closeEvents = addEvents(window, {
1025
- mouseup: event => {
1026
- if (
1027
- this.showPopup &&
1028
- !popup.contains(event.target) &&
1029
- !trigger.contains(event.target)
1030
- ) {
1031
- this.showPopup = false
1032
- }
1033
- },
1034
- blur: () => {
1035
- this.showPopup = false
1036
- }
1037
- })
1038
- }
1039
- if (this.alwaysShow) {
1040
- this.showPopup = true
1041
- }
1042
- },
1043
- created() {
1044
- this.showPopup = this.show
1045
- },
1046
- beforeDestroy() {
1047
- let _a, _b
1048
- ;(_a = this.focusEvents) == null ? void 0 : _a.remove()
1049
- ;(_b = this.closeEvents) == null ? void 0 : _b.remove()
1050
- this.mouseLeaveTimer = null
1051
- },
1052
- methods: {
1053
- updatePosition() {
1054
- const { trigger, popup } = this.$refs
1055
- if (this.show && popup.offsetWidth === 0) {
1056
- setTimeout(() => this.updatePosition(), 0)
1057
- return
1058
- }
1059
- const target = isString(this.target)
1060
- ? this.$refs[this.target]
1061
- : this.target
1062
- if (target) {
1063
- const el = target === popup ? trigger : popup.firstChild
1064
- el.style.width = getComputedStyle(target).width
1065
- }
1066
- const bounds = (target || trigger).getBoundingClientRect()
1067
- const triggerLeft = bounds.left + window.scrollX
1068
- const triggerTop = bounds.top + window.scrollY
1069
- const triggerWidth = bounds.width
1070
- const triggerHeight = bounds.height
1071
- const popupWidth = popup.offsetWidth
1072
- const popupHeight = popup.offsetHeight
1073
- let [part1, part2] = this.popupPlacement.split('-') || []
1074
- if (this.keepInView) {
1075
- const winWidth = window.innerWidth
1076
- const winHeight = window.innerHeight
1077
- if (part1 === 'top') {
1078
- if (triggerTop < popupHeight) {
1079
- part1 = 'bottom'
1080
- }
1081
- } else if (part1 === 'bottom') {
1082
- if (winHeight - triggerTop - triggerHeight < popupHeight) {
1083
- part1 = 'top'
1084
- }
1085
- } else if (part1 === 'left') {
1086
- if (triggerLeft < popupWidth) {
1087
- part1 = 'right'
1088
- }
1089
- } else if (part1 === 'right') {
1090
- if (winWidth - triggerLeft - triggerWidth < popupWidth) {
1091
- part1 = 'left'
1092
- }
1093
- }
1094
- if (part2 === 'top') {
1095
- if (winHeight - triggerTop < popupHeight) {
1096
- part2 = 'bottom'
1097
- }
1098
- } else if (part2 === 'bottom') {
1099
- if (triggerTop + triggerHeight < popupHeight) {
1100
- part2 = 'top'
1101
- }
1102
- } else if (part2 === 'left') {
1103
- if (winWidth - triggerLeft < popupWidth) {
1104
- part2 = 'right'
1105
- }
1106
- } else if (part2 === 'right') {
1107
- if (triggerLeft + triggerWidth < popupWidth) {
1108
- part2 = 'left'
1109
- }
1110
- }
1111
- }
1112
- let left = 0
1113
- let top = 0
1114
- switch (part1) {
1115
- case 'top':
1116
- top -= popupHeight
1117
- break
1118
- case 'left':
1119
- left -= popupWidth
1120
- break
1121
- case 'right':
1122
- left += triggerWidth
1123
- break
1124
- case 'bottom':
1125
- top += triggerHeight
1126
- break
1127
- }
1128
- switch (part2) {
1129
- case 'right':
1130
- left -= popupWidth - triggerWidth
1131
- break
1132
- case 'bottom':
1133
- top -= popupHeight - triggerHeight
1134
- break
1135
- }
1136
- if (this.cover) {
1137
- if (part1 === 'top') {
1138
- top += triggerHeight
1139
- } else if (part1 === 'bottom') {
1140
- top -= triggerHeight
1141
- }
1142
- }
1143
- if (target && target !== trigger) {
1144
- const triggerBounds = trigger.getBoundingClientRect()
1145
- left += triggerLeft - triggerBounds.left
1146
- top += triggerTop - triggerBounds.top
1147
- }
1148
- popup.style.left = `${left}px`
1149
- popup.style.top = `${top}px`
1150
- this.$emit('update-position', {
1151
- trigger,
1152
- popup,
1153
- placement: this.popupPlacement
1154
- })
1155
- },
1156
- onClick() {
1157
- if (!this.disabled) {
1158
- this.showPopup = !this.showPopup
1159
- }
1160
- },
1161
- onHover(enter) {
1162
- if (!this.disabled) {
1163
- clearTimeout(this.mouseLeaveTimer)
1164
- if (enter) {
1165
- this.showPopup = true
1166
- } else {
1167
- if (this.hideDelay) {
1168
- this.mouseLeaveTimer = setTimeout(() => {
1169
- this.showPopup = false
1170
- }, this.hideDelay)
1171
- } else {
1172
- this.showPopup = false
1173
- }
1174
- }
1175
- }
1176
- }
1177
- }
1178
- }
1179
- const __cssModules$8 = {}
1180
- const __component__$8 = /* @__PURE__ */ normalizeComponent(
1181
- __vue2_script$8,
1182
- render$7,
1183
- staticRenderFns$7,
1184
- false,
1185
- __vue2_injectStyles$8,
1186
- null,
1187
- null,
1188
- null
1189
- )
1190
- function __vue2_injectStyles$8(context) {
1191
- for (const o in __cssModules$8) {
1192
- this[o] = __cssModules$8[o]
1193
- }
1194
- }
1195
- __component__$8.options.__file = 'src/components/Trigger.vue'
1196
- const Trigger = /* @__PURE__ */ (function () {
1197
- return __component__$8.exports
1198
- })()
1199
- const render$6 = function () {
1200
- const _vm = this
1201
- const _h = _vm.$createElement
1202
- const _c = _vm._self._c || _h
1203
- return _c(
1204
- 'div',
1205
- {
1206
- staticClass: 'dito-input'
1207
- },
1208
- [
1209
- _vm.attributes.type === 'checkbox'
1210
- ? _c(
1211
- 'input',
1212
- _vm._g(
1213
- _vm._b(
1214
- {
1215
- directives: [
1216
- {
1217
- name: 'model',
1218
- rawName: 'v-model',
1219
- value: _vm.currentValue,
1220
- expression: 'currentValue'
1221
- }
1222
- ],
1223
- ref: 'input',
1224
- attrs: {
1225
- 'aria-label': _vm.title,
1226
- 'type': 'checkbox'
1227
- },
1228
- domProps: {
1229
- checked: Array.isArray(_vm.currentValue)
1230
- ? _vm._i(_vm.currentValue, null) > -1
1231
- : _vm.currentValue
1232
- },
1233
- on: {
1234
- change: function ($event) {
1235
- const $$a = _vm.currentValue
1236
- const $$el = $event.target
1237
- const $$c = !!$$el.checked
1238
- if (Array.isArray($$a)) {
1239
- const $$v = null
1240
- const $$i = _vm._i($$a, $$v)
1241
- if ($$el.checked) {
1242
- $$i < 0 && (_vm.currentValue = $$a.concat([$$v]))
1243
- } else {
1244
- $$i > -1 &&
1245
- (_vm.currentValue = $$a
1246
- .slice(0, $$i)
1247
- .concat($$a.slice($$i + 1)))
1248
- }
1249
- } else {
1250
- _vm.currentValue = $$c
1251
- }
1252
- }
1253
- }
1254
- },
1255
- 'input',
1256
- _vm.attributes,
1257
- false
1258
- ),
1259
- _vm.listeners
1260
- )
1261
- )
1262
- : _vm.attributes.type === 'radio'
1263
- ? _c(
1264
- 'input',
1265
- _vm._g(
1266
- _vm._b(
1267
- {
1268
- directives: [
1269
- {
1270
- name: 'model',
1271
- rawName: 'v-model',
1272
- value: _vm.currentValue,
1273
- expression: 'currentValue'
1274
- }
1275
- ],
1276
- ref: 'input',
1277
- attrs: {
1278
- 'aria-label': _vm.title,
1279
- 'type': 'radio'
1280
- },
1281
- domProps: {
1282
- checked: _vm._q(_vm.currentValue, null)
1283
- },
1284
- on: {
1285
- change: function ($event) {
1286
- _vm.currentValue = null
1287
- }
1288
- }
1289
- },
1290
- 'input',
1291
- _vm.attributes,
1292
- false
1293
- ),
1294
- _vm.listeners
1295
- )
1296
- )
1297
- : _c(
1298
- 'input',
1299
- _vm._g(
1300
- _vm._b(
1301
- {
1302
- directives: [
1303
- {
1304
- name: 'model',
1305
- rawName: 'v-model',
1306
- value: _vm.currentValue,
1307
- expression: 'currentValue'
1308
- }
1309
- ],
1310
- ref: 'input',
1311
- attrs: {
1312
- 'aria-label': _vm.title,
1313
- 'type': _vm.attributes.type
1314
- },
1315
- domProps: {
1316
- value: _vm.currentValue
1317
- },
1318
- on: {
1319
- input: function ($event) {
1320
- if ($event.target.composing) {
1321
- return
1322
- }
1323
- _vm.currentValue = $event.target.value
1324
- }
1325
- }
1326
- },
1327
- 'input',
1328
- _vm.attributes,
1329
- false
1330
- ),
1331
- _vm.listeners
1332
- )
1333
- )
1334
- ]
1335
- )
1336
- }
1337
- const staticRenderFns$6 = []
1338
- render$6._withStripped = true
1339
- const InputField_vue_vue_type_style_index_0_lang = ''
1340
- const __vue2_script$7 = {
1341
- props: {
1342
- type: { type: String, default: 'text' },
1343
- value: { type: [String, Number], default: null },
1344
- id: { type: String, default: null },
1345
- name: { type: String, default: null },
1346
- title: { type: String, default: null },
1347
- disabled: { type: Boolean, default: false },
1348
- readonly: { type: Boolean, default: false },
1349
- placeholder: { type: String, default: null },
1350
- autocomplete: { type: String, default: 'off' }
1351
- },
1352
- data() {
1353
- return {
1354
- currentValue: this.value,
1355
- hovering: false,
1356
- focused: false
1357
- }
1358
- },
1359
- computed: {
1360
- attributes() {
1361
- const {
1362
- id,
1363
- name,
1364
- type,
1365
- size,
1366
- title,
1367
- disabled,
1368
- readonly,
1369
- placeholder,
1370
- autocomplete,
1371
- $attrs
1372
- } = this
1373
- return {
1374
- id,
1375
- name,
1376
- type,
1377
- size,
1378
- title,
1379
- disabled,
1380
- readonly,
1381
- placeholder,
1382
- autocomplete,
1383
- ...$attrs
1384
- }
1385
- },
1386
- listeners() {
1387
- const { input, ...listeners } = this.$listeners
1388
- return listeners
1389
- },
1390
- size() {
1391
- const { size, min, max } = this.$attrs
1392
- const getLength = value => (value != null ? `${value}`.length : 0)
1393
- return size || getLength(min) || getLength(max) || void 0
1394
- }
1395
- },
1396
- watch: {
1397
- value(newVal, oldVal) {
1398
- if (newVal !== oldVal) {
1399
- this.currentValue = newVal
1400
- }
1401
- },
1402
- currentValue(newVal) {
1403
- if (newVal !== this.value) {
1404
- this.$emit('input', newVal)
1405
- }
1406
- }
1407
- },
1408
- methods: {
1409
- focus() {
1410
- this.$refs.input.focus()
1411
- },
1412
- blur() {
1413
- this.$refs.input.blur()
1414
- }
1415
- }
1416
- }
1417
- const __cssModules$7 = {}
1418
- const __component__$7 = /* @__PURE__ */ normalizeComponent(
1419
- __vue2_script$7,
1420
- render$6,
1421
- staticRenderFns$6,
1422
- false,
1423
- __vue2_injectStyles$7,
1424
- null,
1425
- null,
1426
- null
1427
- )
1428
- function __vue2_injectStyles$7(context) {
1429
- for (const o in __cssModules$7) {
1430
- this[o] = __cssModules$7[o]
1431
- }
1432
- }
1433
- __component__$7.options.__file = 'src/components/InputField.vue'
1434
- const InputField = /* @__PURE__ */ (function () {
1435
- return __component__$7.exports
1436
- })()
1437
- const render$5 = function () {
1438
- const _vm = this
1439
- const _h = _vm.$createElement
1440
- const _c = _vm._self._c || _h
1441
- return _c(
1442
- 'trigger',
1443
- _vm._b(
1444
- {
1445
- ref: 'trigger',
1446
- staticClass: 'dito-date-picker',
1447
- attrs: {
1448
- trigger: 'click',
1449
- show: _vm.showPopup
1450
- },
1451
- on: {
1452
- 'update:show': function ($event) {
1453
- _vm.showPopup = $event
1454
- }
1455
- }
1456
- },
1457
- 'trigger',
1458
- {
1459
- transition: _vm.transition,
1460
- placement: _vm.placement,
1461
- disabled: _vm.disabled,
1462
- target: _vm.target
1463
- },
1464
- false
1465
- ),
1466
- [
1467
- _c(
1468
- 'input-field',
1469
- _vm._b(
1470
- {
1471
- ref: 'input',
1472
- staticClass: 'dito-date-picker-input',
1473
- class: {
1474
- 'dito-focus': _vm.showPopup
1475
- },
1476
- attrs: {
1477
- slot: 'trigger',
1478
- type: 'text',
1479
- value: _vm.currentText,
1480
- readonly: ''
1481
- },
1482
- on: {
1483
- focus: function ($event) {
1484
- _vm.inputFocused = true
1485
- },
1486
- blur: function ($event) {
1487
- _vm.inputFocused = false
1488
- },
1489
- keydown: _vm.onKeyDown
1490
- },
1491
- slot: 'trigger'
1492
- },
1493
- 'input-field',
1494
- {
1495
- placeholder: _vm.placeholder,
1496
- disabled: _vm.disabled
1497
- },
1498
- false
1499
- )
1500
- ),
1501
- _c(
1502
- 'calendar',
1503
- _vm._b(
1504
- {
1505
- ref: 'calendar',
1506
- staticClass: 'dito-date-picker-popup',
1507
- attrs: {
1508
- slot: 'popup',
1509
- value: _vm.currentValue
1510
- },
1511
- on: {
1512
- input: _vm.selectDate
1513
- },
1514
- slot: 'popup'
1515
- },
1516
- 'calendar',
1517
- {
1518
- locale: _vm.locale,
1519
- disabledDate: _vm.disabledDate
1520
- },
1521
- false
1522
- )
1523
- )
1524
- ],
1525
- 1
1526
- )
1527
- }
1528
- const staticRenderFns$5 = []
1529
- render$5._withStripped = true
1530
- const DatePicker_vue_vue_type_style_index_0_lang = ''
1531
- const __vue2_script$6 = {
1532
- components: { Trigger, Calendar, InputField },
1533
- props: {
1534
- value: { type: Date, default: null },
1535
- transition: { type: String, default: 'slide' },
1536
- placement: { type: String, default: 'bottom-left' },
1537
- placeholder: { type: String, default: null },
1538
- locale: { type: String, default: 'en-US' },
1539
- dateFormat: { type: Object, default: () => defaultFormats.date },
1540
- show: { type: Boolean, default: false },
1541
- disabled: { type: Boolean, default: false },
1542
- target: { type: [String, HTMLElement], default: 'trigger' },
1543
- disabledDate: { type: Function, default: () => false }
1544
- },
1545
- data() {
1546
- return {
1547
- currentValue: this.value,
1548
- showPopup: this.show,
1549
- inputFocused: false,
1550
- changed: false
1551
- }
1552
- },
1553
- computed: {
1554
- focused() {
1555
- return this.inputFocused || this.showPopup
1556
- },
1557
- currentText() {
1558
- return (
1559
- format(this.currentValue, {
1560
- locale: this.locale,
1561
- date: this.dateFormat,
1562
- time: false
1563
- }) || ''
1564
- )
1565
- }
1566
- },
1567
- watch: {
1568
- value(newVal, oldVal) {
1569
- if (+newVal !== +oldVal) {
1570
- this.currentValue = newVal
1571
- }
1572
- },
1573
- currentValue(date) {
1574
- if (+date !== +this.value) {
1575
- this.changed = true
1576
- this.$emit('input', date)
1577
- }
1578
- },
1579
- show(show) {
1580
- this.showPopup = show
1581
- },
1582
- showPopup(newVal, oldVal) {
1583
- if (!newVal !== !oldVal) {
1584
- this.$emit('update:show', newVal)
1585
- }
1586
- },
1587
- focused(newVal, oldVal) {
1588
- if (!newVal !== !oldVal) {
1589
- this.$emit(newVal ? 'focus' : 'blur')
1590
- }
1591
- }
1592
- },
1593
- mounted() {
1594
- this.$on('blur', () => {
1595
- if (this.changed) {
1596
- this.changed = false
1597
- this.$emit('change', this.currentValue)
1598
- }
1599
- })
1600
- },
1601
- methods: {
1602
- selectDate(date) {
1603
- this.currentValue = date
1604
- this.showPopup = false
1605
- },
1606
- onKeyDown(event) {
1607
- let _a
1608
- if (
1609
- (_a = this.$refs.calendar) == null
1610
- ? void 0
1611
- : _a.navigate(getKeyNavigation(event))
1612
- ) {
1613
- event.preventDefault()
1614
- }
1615
- },
1616
- focus() {
1617
- this.$refs.input.focus()
1618
- },
1619
- blur() {
1620
- this.$refs.input.blur()
1621
- }
1622
- }
1623
- }
1624
- const __cssModules$6 = {}
1625
- const __component__$6 = /* @__PURE__ */ normalizeComponent(
1626
- __vue2_script$6,
1627
- render$5,
1628
- staticRenderFns$5,
1629
- false,
1630
- __vue2_injectStyles$6,
1631
- null,
1632
- null,
1633
- null
1634
- )
1635
- function __vue2_injectStyles$6(context) {
1636
- for (const o in __cssModules$6) {
1637
- this[o] = __cssModules$6[o]
1638
- }
1639
- }
1640
- __component__$6.options.__file = 'src/components/DatePicker.vue'
1641
- const DatePicker = /* @__PURE__ */ (function () {
1642
- return __component__$6.exports
1643
- })()
1644
- const render$4 = function () {
1645
- const _vm = this
1646
- const _h = _vm.$createElement
1647
- const _c = _vm._self._c || _h
1648
- return _c(
1649
- 'trigger',
1650
- _vm._b(
1651
- {
1652
- ref: 'trigger',
1653
- staticClass: 'dito-time-picker',
1654
- attrs: {
1655
- trigger: 'click',
1656
- show: _vm.showPopup
1657
- },
1658
- on: {
1659
- 'update:show': function ($event) {
1660
- _vm.showPopup = $event
1661
- }
1662
- }
1663
- },
1664
- 'trigger',
1665
- {
1666
- transition: _vm.transition,
1667
- placement: _vm.placement,
1668
- disabled: _vm.disabled,
1669
- target: _vm.target
1670
- },
1671
- false
1672
- ),
1673
- [
1674
- _c(
1675
- 'input-field',
1676
- _vm._b(
1677
- {
1678
- ref: 'input',
1679
- staticClass: 'dito-time-picker-input',
1680
- class: {
1681
- 'dito-focus': _vm.showPopup
1682
- },
1683
- attrs: {
1684
- slot: 'trigger',
1685
- type: 'text',
1686
- value: _vm.currentText,
1687
- readonly: ''
1688
- },
1689
- on: {
1690
- focus: function ($event) {
1691
- _vm.inputFocused = true
1692
- },
1693
- blur: function ($event) {
1694
- _vm.inputFocused = false
1695
- },
1696
- keydown: _vm.onKeyDown
1697
- },
1698
- slot: 'trigger'
1699
- },
1700
- 'input-field',
1701
- {
1702
- placeholder: _vm.placeholder,
1703
- disabled: _vm.disabled
1704
- },
1705
- false
1706
- )
1707
- ),
1708
- _c(
1709
- 'div',
1710
- {
1711
- staticClass: 'dito-time-picker-popup',
1712
- attrs: {
1713
- slot: 'popup'
1714
- },
1715
- slot: 'popup'
1716
- },
1717
- [
1718
- _c(
1719
- 'div',
1720
- {
1721
- staticClass: 'dito-time-picker-panel'
1722
- },
1723
- [
1724
- _c(
1725
- 'ul',
1726
- {
1727
- ref: 'hour',
1728
- staticClass: 'dito-time-picker-hour',
1729
- on: {
1730
- mouseover: function ($event) {
1731
- _vm.selection = 0
1732
- }
1733
- }
1734
- },
1735
- _vm._l(24, function (index2) {
1736
- return !_vm.disabledHour(index2 - 1)
1737
- ? _c(
1738
- 'li',
1739
- {
1740
- class: {
1741
- selected: _vm.hour === index2 - 1
1742
- },
1743
- on: {
1744
- click: function ($event) {
1745
- _vm.hour = index2 - 1
1746
- }
1747
- }
1748
- },
1749
- [_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
1750
- )
1751
- : _vm._e()
1752
- }),
1753
- 0
1754
- )
1755
- ]
1756
- ),
1757
- _c(
1758
- 'div',
1759
- {
1760
- staticClass: 'dito-time-picker-panel'
1761
- },
1762
- [
1763
- _c(
1764
- 'ul',
1765
- {
1766
- ref: 'minute',
1767
- staticClass: 'dito-time-picker-minute',
1768
- on: {
1769
- mouseover: function ($event) {
1770
- _vm.selection = 1
1771
- }
1772
- }
1773
- },
1774
- _vm._l(60, function (index2) {
1775
- return !_vm.disabledMinute(index2 - 1)
1776
- ? _c(
1777
- 'li',
1778
- {
1779
- class: {
1780
- selected: _vm.minute === index2 - 1
1781
- },
1782
- on: {
1783
- click: function ($event) {
1784
- _vm.minute = index2 - 1
1785
- }
1786
- }
1787
- },
1788
- [_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
1789
- )
1790
- : _vm._e()
1791
- }),
1792
- 0
1793
- )
1794
- ]
1795
- ),
1796
- _c(
1797
- 'div',
1798
- {
1799
- staticClass: 'dito-time-picker-panel'
1800
- },
1801
- [
1802
- _c(
1803
- 'ul',
1804
- {
1805
- ref: 'second',
1806
- staticClass: 'dito-time-picker-second',
1807
- on: {
1808
- mouseover: function ($event) {
1809
- _vm.selection = 2
1810
- }
1811
- }
1812
- },
1813
- _vm._l(60, function (index2) {
1814
- return !_vm.disabledSecond(index2 - 1)
1815
- ? _c(
1816
- 'li',
1817
- {
1818
- class: {
1819
- selected: _vm.second === index2 - 1
1820
- },
1821
- on: {
1822
- click: function ($event) {
1823
- _vm.second = index2 - 1
1824
- }
1825
- }
1826
- },
1827
- [_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
1828
- )
1829
- : _vm._e()
1830
- }),
1831
- 0
1832
- )
1833
- ]
1834
- )
1835
- ]
1836
- )
1837
- ],
1838
- 1
1839
- )
1840
- }
1841
- const staticRenderFns$4 = []
1842
- render$4._withStripped = true
1843
- const TimePicker_vue_vue_type_style_index_0_lang = ''
1844
- const __vue2_script$5 = {
1845
- components: { Trigger, InputField },
1846
- props: {
1847
- value: { type: Date, default: null },
1848
- transition: { type: String, default: 'slide' },
1849
- placement: { type: String, default: 'bottom-left' },
1850
- placeholder: { type: String, default: null },
1851
- show: { type: Boolean, default: false },
1852
- disabled: { type: Boolean, default: false },
1853
- target: { type: [String, HTMLElement], default: 'trigger' },
1854
- disabledHour: { type: Function, default: () => false },
1855
- disabledMinute: { type: Function, default: () => false },
1856
- disabledSecond: { type: Function, default: () => false }
1857
- },
1858
- data() {
1859
- return {
1860
- currentValue: this.value,
1861
- showPopup: this.show,
1862
- inputFocused: false,
1863
- selection: 0,
1864
- changed: false
1865
- }
1866
- },
1867
- computed: {
1868
- focused() {
1869
- return this.inputFocused || this.showPopup
1870
- },
1871
- currentText() {
1872
- return this.currentValue
1873
- ? `${this.leftPad(this.hour)}:${this.leftPad(this.minute)}:${
1874
- this.leftPad(this.second)
1875
- }`
1876
- : ''
1877
- },
1878
- currentDate() {
1879
- return (
1880
- this.currentValue ||
1881
- copyDate(new Date(), { hour: 0, minute: 0, second: 0 })
1882
- )
1883
- },
1884
- hour: {
1885
- get() {
1886
- return this.currentDate.getHours()
1887
- },
1888
- set(hour) {
1889
- this.setTime({ hour })
1890
- }
1891
- },
1892
- minute: {
1893
- get() {
1894
- return this.currentDate.getMinutes()
1895
- },
1896
- set(minute) {
1897
- this.setTime({ minute })
1898
- }
1899
- },
1900
- second: {
1901
- get() {
1902
- return this.currentDate.getSeconds()
1903
- },
1904
- set(second) {
1905
- this.setTime({ second })
1906
- }
1907
- }
1908
- },
1909
- watch: {
1910
- value(newVal, oldVal) {
1911
- if (+newVal !== +oldVal) {
1912
- this.currentValue = newVal
1913
- }
1914
- },
1915
- currentValue(date) {
1916
- if (+date !== +this.value) {
1917
- this.changed = true
1918
- this.$emit('input', date)
1919
- this.scrollAll()
1920
- }
1921
- },
1922
- currentText: 'updateSelection',
1923
- selection: 'updateSelection',
1924
- show(show) {
1925
- this.showPopup = show
1926
- },
1927
- showPopup(newVal, oldVal) {
1928
- if (newVal) {
1929
- this.updateSelection()
1930
- this.scrollAll(0)
1931
- }
1932
- if (!newVal !== !oldVal) {
1933
- this.$emit('update:show', newVal)
1934
- }
1935
- },
1936
- focused(newVal, oldVal) {
1937
- if (!newVal !== !oldVal) {
1938
- this.$emit(newVal ? 'focus' : 'blur')
1939
- }
1940
- }
1941
- },
1942
- mounted() {
1943
- this.$on('blur', () => {
1944
- if (this.changed) {
1945
- this.changed = false
1946
- this.$emit('change', this.currentValue)
1947
- }
1948
- })
1949
- },
1950
- methods: {
1951
- leftPad(value) {
1952
- return ('0' + value).slice(-2)
1953
- },
1954
- setTime(param) {
1955
- this.currentValue = copyDate(this.currentDate, param)
1956
- },
1957
- updateSelection(force = false) {
1958
- if (this.showPopup || force) {
1959
- const start = 3 * this.selection
1960
- this.$nextTick(() => setSelection(this.$refs.input, start, start + 2))
1961
- }
1962
- },
1963
- scrollAll(duration = 100) {
1964
- const scroll = (ref, value) => {
1965
- const target = this.$refs[ref]
1966
- if (target) {
1967
- const lineHeight = target.scrollHeight / (target.children.length + 6)
1968
- scrollTo(target, Math.round(value * lineHeight), duration)
1969
- }
1970
- }
1971
- this.$nextTick(() => {
1972
- scroll('hour', this.hour)
1973
- scroll('minute', this.minute)
1974
- scroll('second', this.second)
1975
- })
1976
- },
1977
- onKeyDown(event) {
1978
- const selected = ['hour', 'minute', 'second'][this.selection]
1979
- if (selected) {
1980
- const { hor, ver, enter } = getKeyNavigation(event)
1981
- if (hor) {
1982
- const value = this.selection + hor
1983
- this.selection = value < 0 ? 2 : value > 2 ? 0 : value
1984
- } else if (ver) {
1985
- const value = this[selected] + ver
1986
- const { length } = this.$refs[selected].children
1987
- this[selected] =
1988
- value < 0
1989
- ? value + length
1990
- : value >= length
1991
- ? value - length
1992
- : value
1993
- }
1994
- if (enter) {
1995
- this.showPopup = false
1996
- }
1997
- if (hor || ver || enter) {
1998
- this.updateSelection(true)
1999
- event.preventDefault()
2000
- }
2001
- }
2002
- },
2003
- focus() {
2004
- this.$refs.input.focus()
2005
- },
2006
- blur() {
2007
- this.$refs.input.blur()
2008
- }
2009
- }
2010
- }
2011
- const __cssModules$5 = {}
2012
- const __component__$5 = /* @__PURE__ */ normalizeComponent(
2013
- __vue2_script$5,
2014
- render$4,
2015
- staticRenderFns$4,
2016
- false,
2017
- __vue2_injectStyles$5,
2018
- null,
2019
- null,
2020
- null
2021
- )
2022
- function __vue2_injectStyles$5(context) {
2023
- for (const o in __cssModules$5) {
2024
- this[o] = __cssModules$5[o]
2025
- }
2026
- }
2027
- __component__$5.options.__file = 'src/components/TimePicker.vue'
2028
- const TimePicker = /* @__PURE__ */ (function () {
2029
- return __component__$5.exports
2030
- })()
2031
- const render$3 = function () {
2032
- const _vm = this
2033
- const _h = _vm.$createElement
2034
- const _c = _vm._self._c || _h
2035
- return _c(
2036
- 'div',
2037
- {
2038
- ref: 'picker',
2039
- staticClass: 'dito-date-time-picker'
2040
- },
2041
- [
2042
- _c(
2043
- 'div',
2044
- {
2045
- staticClass: 'dito-pickers',
2046
- class: {
2047
- 'dito-focus': _vm.focused
2048
- }
2049
- },
2050
- [
2051
- _c(
2052
- 'date-picker',
2053
- _vm._b(
2054
- {
2055
- ref: 'date',
2056
- attrs: {
2057
- placement: 'bottom-left',
2058
- target: _vm.$refs.picker,
2059
- show: _vm.showDate
2060
- },
2061
- on: {
2062
- 'update:show': function ($event) {
2063
- _vm.showDate = $event
2064
- },
2065
- 'focus': function ($event) {
2066
- _vm.dateFocused = true
2067
- },
2068
- 'blur': function ($event) {
2069
- _vm.dateFocused = false
2070
- }
2071
- },
2072
- model: {
2073
- value: _vm.currentValue,
2074
- callback: function ($$v) {
2075
- _vm.currentValue = $$v
2076
- },
2077
- expression: 'currentValue'
2078
- }
2079
- },
2080
- 'date-picker',
2081
- {
2082
- transition: _vm.transition,
2083
- placeholder: _vm.placeholder,
2084
- locale: _vm.locale,
2085
- dateFormat: _vm.dateFormat,
2086
- disabled: _vm.disabled
2087
- },
2088
- false
2089
- )
2090
- ),
2091
- _c(
2092
- 'time-picker',
2093
- _vm._b(
2094
- {
2095
- ref: 'time',
2096
- attrs: {
2097
- placeholder: '',
2098
- placement: 'bottom-right',
2099
- target: _vm.$refs.picker,
2100
- show: _vm.showTime
2101
- },
2102
- on: {
2103
- 'update:show': function ($event) {
2104
- _vm.showTime = $event
2105
- },
2106
- 'focus': function ($event) {
2107
- _vm.timeFocused = true
2108
- },
2109
- 'blur': function ($event) {
2110
- _vm.timeFocused = false
2111
- }
2112
- },
2113
- model: {
2114
- value: _vm.currentValue,
2115
- callback: function ($$v) {
2116
- _vm.currentValue = $$v
2117
- },
2118
- expression: 'currentValue'
2119
- }
2120
- },
2121
- 'time-picker',
2122
- {
2123
- transition: _vm.transition,
2124
- disabled: _vm.disabled
2125
- },
2126
- false
2127
- )
2128
- )
2129
- ],
2130
- 1
2131
- )
2132
- ]
2133
- )
2134
- }
2135
- const staticRenderFns$3 = []
2136
- render$3._withStripped = true
2137
- const DateTimePicker_vue_vue_type_style_index_0_lang = ''
2138
- const __vue2_script$4 = {
2139
- components: { DatePicker, TimePicker },
2140
- props: {
2141
- value: { type: Date, default: null },
2142
- transition: { type: String, default: 'slide' },
2143
- placeholder: { type: String, default: null },
2144
- dateFormat: { type: Object, default: () => defaultFormats.date },
2145
- locale: { type: String, default: 'en-US' },
2146
- disabled: { type: Boolean, default: false }
2147
- },
2148
- data() {
2149
- return {
2150
- currentValue: this.value,
2151
- showDate: false,
2152
- showTime: false,
2153
- dateFocused: false,
2154
- timeFocused: false,
2155
- changed: false
2156
- }
2157
- },
2158
- computed: {
2159
- focused() {
2160
- return this.dateFocused || this.timeFocused
2161
- }
2162
- },
2163
- watch: {
2164
- value(newVal, oldVal) {
2165
- if (+newVal !== +oldVal) {
2166
- this.currentValue = newVal
2167
- }
2168
- },
2169
- currentValue(date) {
2170
- if (+date !== +this.value) {
2171
- this.changed = true
2172
- this.$emit('input', date)
2173
- }
2174
- },
2175
- focused(newVal, oldVal) {
2176
- if (!newVal !== !oldVal) {
2177
- this.$emit(newVal ? 'focus' : 'blur')
2178
- }
2179
- }
2180
- },
2181
- mounted() {
2182
- this.$on('blur', () => {
2183
- if (this.changed) {
2184
- this.changed = false
2185
- this.$emit('change', this.currentValue)
2186
- }
2187
- })
2188
- },
2189
- methods: {
2190
- focus() {
2191
- this.$refs.date.focus()
2192
- },
2193
- blur() {
2194
- this.$refs.date.blur()
2195
- this.$refs.time.blur()
2196
- }
2197
- }
2198
- }
2199
- const __cssModules$4 = {}
2200
- const __component__$4 = /* @__PURE__ */ normalizeComponent(
2201
- __vue2_script$4,
2202
- render$3,
2203
- staticRenderFns$3,
2204
- false,
2205
- __vue2_injectStyles$4,
2206
- null,
2207
- null,
2208
- null
2209
- )
2210
- function __vue2_injectStyles$4(context) {
2211
- for (const o in __cssModules$4) {
2212
- this[o] = __cssModules$4[o]
2213
- }
2214
- }
2215
- __component__$4.options.__file = 'src/components/DateTimePicker.vue'
2216
- const DateTimePicker = /* @__PURE__ */ (function () {
2217
- return __component__$4.exports
2218
- })()
2219
- const render$2 = function () {
2220
- const _vm = this
2221
- const _h = _vm.$createElement
2222
- const _c = _vm._self._c || _h
2223
- return _c('i', {
2224
- staticClass: 'dito-icon',
2225
- class: `dito-icon-${_vm.name}`
2226
- })
2227
- }
2228
- const staticRenderFns$2 = []
2229
- render$2._withStripped = true
2230
- const Icon_vue_vue_type_style_index_0_lang = ''
2231
- const __vue2_script$3 = {
2232
- props: {
2233
- name: {
2234
- type: String,
2235
- required: true
2236
- }
2237
- }
2238
- }
2239
- const __cssModules$3 = {}
2240
- const __component__$3 = /* @__PURE__ */ normalizeComponent(
2241
- __vue2_script$3,
2242
- render$2,
2243
- staticRenderFns$2,
2244
- false,
2245
- __vue2_injectStyles$3,
2246
- null,
2247
- null,
2248
- null
2249
- )
2250
- function __vue2_injectStyles$3(context) {
2251
- for (const o in __cssModules$3) {
2252
- this[o] = __cssModules$3[o]
2253
- }
2254
- }
2255
- __component__$3.options.__file = 'src/components/Icon.vue'
2256
- const Icon = /* @__PURE__ */ (function () {
2257
- return __component__$3.exports
2258
- })()
2259
- const render$1 = function () {
2260
- const _vm = this
2261
- const _h = _vm.$createElement
2262
- const _c = _vm._self._c || _h
2263
- return _vm.numPages > 1
2264
- ? _c(
2265
- 'div',
2266
- {
2267
- staticClass: 'dito-pagination'
2268
- },
2269
- [
2270
- _vm.showTotal
2271
- ? _c(
2272
- 'div',
2273
- {
2274
- staticClass: 'dito-pagination-total'
2275
- },
2276
- [
2277
- _vm.total > 0
2278
- ? [
2279
- _vm._v(
2280
- _vm._s(_vm.first) + ' \u2013 ' + _vm._s(_vm.last)
2281
- )
2282
- ]
2283
- : [_vm._v('0')],
2284
- _vm._v(' / ' + _vm._s(_vm.total))
2285
- ],
2286
- 2
2287
- )
2288
- : _vm._e(),
2289
- _c(
2290
- 'div',
2291
- {
2292
- staticClass: 'dito-buttons dito-buttons-round'
2293
- },
2294
- _vm._l(_vm.pageRange, function (page) {
2295
- return _c(
2296
- 'button',
2297
- {
2298
- staticClass: 'dito-button',
2299
- class: _vm.getPageClass(page),
2300
- attrs: {
2301
- disabled: page.disabled
2302
- },
2303
- on: {
2304
- click: function ($event) {
2305
- return _vm.onClickPage(page)
2306
- }
2307
- }
2308
- },
2309
- [page.text ? _c('span', [_vm._v(_vm._s(page.text))]) : _vm._e()]
2310
- )
2311
- }),
2312
- 0
2313
- )
2314
- ]
2315
- )
2316
- : _vm._e()
2317
- }
2318
- const staticRenderFns$1 = []
2319
- render$1._withStripped = true
2320
- const Pagination_vue_vue_type_style_index_0_lang = ''
2321
- const __vue2_script$2 = {
2322
- props: {
2323
- total: { type: Number, default: 0 },
2324
- page: { type: Number, default: 1 },
2325
- pageSize: { type: Number, default: 10 },
2326
- showTotal: { type: Boolean, default: true }
2327
- },
2328
- data() {
2329
- return {
2330
- pageRange: [],
2331
- showPrev: true,
2332
- showNext: true,
2333
- numPages: 0,
2334
- currentPageSize: this.pageSize,
2335
- currentPage: this.page
2336
- }
2337
- },
2338
- computed: {
2339
- first() {
2340
- return (this.currentPage - 1) * this.currentPageSize + 1
2341
- },
2342
- last() {
2343
- return Math.min(this.first + this.currentPageSize - 1, this.total)
2344
- }
2345
- },
2346
- watch: {
2347
- total: 'updatePageRange',
2348
- showPrev: 'updatePageRange',
2349
- showNext: 'updatePageRange',
2350
- page(page) {
2351
- this.currentPage = page
2352
- },
2353
- pageSize(pageSize) {
2354
- this.currentPageSize = pageSize
2355
- },
2356
- currentPageSize(currentPageSize) {
2357
- this.numPages = Math.ceil(this.total / currentPageSize)
2358
- if (this.currentPage > this.numPages) {
2359
- this.currentPage = this.numPages
2360
- }
2361
- this.updatePageRange()
2362
- this.$emit('size-change', this.page, currentPageSize)
2363
- },
2364
- currentPage(newVal, oldVal) {
2365
- if (newVal !== oldVal) {
2366
- this.updatePageRange()
2367
- this.$emit('update:page', newVal)
2368
- }
2369
- }
2370
- },
2371
- created() {
2372
- this.currentPage = this.page
2373
- this.currentPageSize = this.pageSize
2374
- },
2375
- mounted() {
2376
- this.updatePageRange()
2377
- },
2378
- methods: {
2379
- onClickPage(page) {
2380
- if (page.index && !page.disabled && page.index !== this.currentPage) {
2381
- this.currentPage = page.index
2382
- }
2383
- },
2384
- getPageClass(page) {
2385
- const classes = {
2386
- 'dito-selected': page.active
2387
- }
2388
- if (page.type) {
2389
- classes[`dito-button-${page.type}`] = true
2390
- }
2391
- return classes
2392
- },
2393
- updatePageRange() {
2394
- const { showPrev, showNext, total, currentPageSize, currentPage } = this
2395
- const showLength = showPrev + showNext + 1
2396
- const numPages = (this.numPages = Math.ceil(total / currentPageSize))
2397
- let start = 1
2398
- let end = 1
2399
- if (numPages <= showLength) {
2400
- end = numPages
2401
- } else if (currentPage <= showPrev + 1) {
2402
- end = showLength
2403
- } else if (currentPage >= numPages - showNext) {
2404
- end = numPages
2405
- start = numPages - showLength + 1
2406
- } else {
2407
- start = currentPage - showPrev
2408
- end = currentPage + showNext
2409
- }
2410
- const pageRange = []
2411
- pageRange.push({
2412
- index: currentPage - 1,
2413
- type: 'prev',
2414
- disabled: currentPage <= 1
2415
- })
2416
- if (start >= 2) {
2417
- pageRange.push({ index: 1, text: 1 })
2418
- }
2419
- if (start > 2) {
2420
- pageRange.push({
2421
- index: Math.max(1, currentPage - 10),
2422
- type: 'ellipsis-prev'
2423
- })
2424
- }
2425
- for (let i = start; i <= end; i++) {
2426
- pageRange.push({
2427
- index: i,
2428
- text: i,
2429
- active: i === currentPage
2430
- })
2431
- }
2432
- if (end < numPages - 1) {
2433
- pageRange.push({
2434
- index: Math.min(numPages, currentPage + 10),
2435
- type: 'ellipsis-next'
2436
- })
2437
- }
2438
- if (end <= numPages - 1) {
2439
- pageRange.push({ index: numPages, text: numPages })
2440
- }
2441
- pageRange.push({
2442
- index: currentPage + 1,
2443
- type: 'next',
2444
- disabled: currentPage >= numPages
2445
- })
2446
- this.pageRange = pageRange
2447
- }
2448
- }
2449
- }
2450
- const __cssModules$2 = {}
2451
- const __component__$2 = /* @__PURE__ */ normalizeComponent(
2452
- __vue2_script$2,
2453
- render$1,
2454
- staticRenderFns$1,
2455
- false,
2456
- __vue2_injectStyles$2,
2457
- null,
2458
- null,
2459
- null
2460
- )
2461
- function __vue2_injectStyles$2(context) {
2462
- for (const o in __cssModules$2) {
2463
- this[o] = __cssModules$2[o]
2464
- }
2465
- }
2466
- __component__$2.options.__file = 'src/components/Pagination.vue'
2467
- const Pagination = /* @__PURE__ */ (function () {
2468
- return __component__$2.exports
2469
- })()
2470
- const render = function () {
2471
- const _vm = this
2472
- const _h = _vm.$createElement
2473
- const _c = _vm._self._c || _h
2474
- return _c(
2475
- 'div',
2476
- {
2477
- staticClass: 'dito-switch',
2478
- class: _vm.classes,
2479
- style: _vm.styles
2480
- },
2481
- [
2482
- _c(
2483
- 'div',
2484
- {
2485
- staticClass: 'dito-switch-pane'
2486
- },
2487
- [
2488
- _c(
2489
- 'input',
2490
- _vm._b(
2491
- {
2492
- directives: [
2493
- {
2494
- name: 'model',
2495
- rawName: 'v-model',
2496
- value: _vm.checked,
2497
- expression: 'checked'
2498
- }
2499
- ],
2500
- ref: 'input',
2501
- attrs: {
2502
- type: 'checkbox'
2503
- },
2504
- domProps: {
2505
- checked: Array.isArray(_vm.checked)
2506
- ? _vm._i(_vm.checked, null) > -1
2507
- : _vm.checked
2508
- },
2509
- on: {
2510
- change: function ($event) {
2511
- const $$a = _vm.checked
2512
- const $$el = $event.target
2513
- const $$c = !!$$el.checked
2514
- if (Array.isArray($$a)) {
2515
- const $$v = null
2516
- const $$i = _vm._i($$a, $$v)
2517
- if ($$el.checked) {
2518
- $$i < 0 && (_vm.checked = $$a.concat([$$v]))
2519
- } else {
2520
- $$i > -1 &&
2521
- (_vm.checked = $$a
2522
- .slice(0, $$i)
2523
- .concat($$a.slice($$i + 1)))
2524
- }
2525
- } else {
2526
- _vm.checked = $$c
2527
- }
2528
- }
2529
- }
2530
- },
2531
- 'input',
2532
- _vm.attributes,
2533
- false
2534
- )
2535
- ),
2536
- _c('div', {
2537
- staticClass: 'dito-switch-button'
2538
- }),
2539
- _vm.labels
2540
- ? _c(
2541
- 'span',
2542
- {
2543
- staticClass: 'dito-switch-label'
2544
- },
2545
- [
2546
- _vm.checked
2547
- ? _vm._t('checked', function () {
2548
- return [_vm._v(_vm._s(_vm.labels.checked || 'on'))]
2549
- })
2550
- : _vm._t('unchecked', function () {
2551
- return [_vm._v(_vm._s(_vm.labels.unchecked || 'off'))]
2552
- })
2553
- ],
2554
- 2
2555
- )
2556
- : _vm._e()
2557
- ]
2558
- )
2559
- ]
2560
- )
2561
- }
2562
- const staticRenderFns = []
2563
- render._withStripped = true
2564
- const SwitchButton_vue_vue_type_style_index_0_lang = ''
2565
- const __vue2_script$1 = {
2566
- props: {
2567
- value: { type: Boolean, default: false },
2568
- id: { type: String, default: null },
2569
- name: { type: String, default: null },
2570
- disabled: { type: Boolean, default: false },
2571
- labels: { type: [Object, Boolean], default: false }
2572
- },
2573
- data() {
2574
- return {
2575
- checked: this.value
2576
- }
2577
- },
2578
- computed: {
2579
- classes() {
2580
- const { checked, disabled } = this
2581
- return {
2582
- 'dito-checked': checked,
2583
- 'dito-disabled': disabled
2584
- }
2585
- },
2586
- styles() {
2587
- const { labels: { checked, unchecked } = {} } = this
2588
- const length = Math.max(
2589
- 0,
2590
- checked == null ? void 0 : checked.length,
2591
- unchecked == null ? void 0 : unchecked.length
2592
- )
2593
- return {
2594
- '--switch-width': length ? `${length * 1.5}rem` : null
2595
- }
2596
- },
2597
- attributes() {
2598
- const { id, name, disabled, $attrs } = this
2599
- return { id, name, disabled, ...$attrs }
2600
- }
2601
- },
2602
- watch: {
2603
- value(value) {
2604
- this.checked = value
2605
- },
2606
- checked(checked) {
2607
- if (checked !== this.value) {
2608
- this.$emit('input', checked)
2609
- this.$emit('change', checked)
2610
- }
2611
- }
2612
- },
2613
- methods: {
2614
- focus() {
2615
- this.$refs.input.focus()
2616
- }
2617
- }
2618
- }
2619
- const __cssModules$1 = {}
2620
- const __component__$1 = /* @__PURE__ */ normalizeComponent(
2621
- __vue2_script$1,
2622
- render,
2623
- staticRenderFns,
2624
- false,
2625
- __vue2_injectStyles$1,
2626
- null,
2627
- null,
2628
- null
2629
- )
2630
- function __vue2_injectStyles$1(context) {
2631
- for (const o in __cssModules$1) {
2632
- this[o] = __cssModules$1[o]
2633
- }
2634
- }
2635
- __component__$1.options.__file = 'src/components/SwitchButton.vue'
2636
- const SwitchButton = /* @__PURE__ */ (function () {
2637
- return __component__$1.exports
2638
- })()
2639
- const TransitionHeight_vue_vue_type_style_index_0_lang = ''
2640
- const __vue2_script = {
2641
- functional: true,
2642
- props: {
2643
- enabled: { type: Boolean, default: true }
2644
- },
2645
- render: (createElement, context) =>
2646
- createElement(
2647
- 'transition',
2648
- context.props.enabled
2649
- ? {
2650
- props: { name: 'height' },
2651
- on: events
2652
- }
2653
- : {},
2654
- context.children
2655
- )
2656
- }
2657
- const setStyle = (element, style) => Object.assign(element.style, style)
2658
- const forceRepaint = element => getComputedStyle(element).height
2659
- const events = {
2660
- afterEnter(element) {
2661
- setTimeout(() => setStyle(element, { height: 'auto' }))
2662
- },
2663
- enter(element) {
2664
- const { width } = getComputedStyle(element)
2665
- setStyle(element, {
2666
- width,
2667
- position: 'absolute',
2668
- visibility: 'hidden',
2669
- height: 'auto'
2670
- })
2671
- const { height } = getComputedStyle(element)
2672
- setStyle(element, {
2673
- width: null,
2674
- position: null,
2675
- visibility: null,
2676
- height: 0
2677
- })
2678
- forceRepaint(element)
2679
- setTimeout(() => setStyle(element, { height }))
2680
- },
2681
- leave(element) {
2682
- const { height } = getComputedStyle(element)
2683
- setStyle(element, { height })
2684
- forceRepaint(element)
2685
- setTimeout(() => setStyle(element, { height: 0 }))
2686
- }
2687
- }
2688
- let __vue2_render, __vue2_staticRenderFns
2689
- const __cssModules = {}
2690
- const __component__ = /* @__PURE__ */ normalizeComponent(
2691
- __vue2_script,
2692
- __vue2_render,
2693
- __vue2_staticRenderFns,
2694
- false,
2695
- __vue2_injectStyles,
2696
- null,
2697
- null,
2698
- null
2699
- )
2700
- function __vue2_injectStyles(context) {
2701
- for (const o in __cssModules) {
2702
- this[o] = __cssModules[o]
2703
- }
2704
- }
2705
- __component__.options.__file = 'src/transitions/TransitionHeight.vue'
2706
- const TransitionHeight = /* @__PURE__ */ (function () {
2707
- return __component__.exports
2708
- })()
2709
- export {
2710
- Calendar,
2711
- DatePicker,
2712
- DateTimePicker,
2713
- Icon,
2714
- InputField,
2715
- Pagination,
2716
- SwitchButton,
2717
- TimePicker,
2718
- TransitionHeight,
2719
- Trigger,
2720
- addEvents,
2721
- convertDate,
2722
- copyDate,
2723
- getAbsoluteBoundingRect,
2724
- getKey,
2725
- getKeyNavigation,
2726
- scrollTo,
2727
- setSelection
2728
- }
2729
- // # sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by11aS5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2JvdW5kcy5qcyIsIi4uL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0lucHV0RmllbGQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvSWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZSIsIi4uL3NyYy90cmFuc2l0aW9ucy9UcmFuc2l0aW9uSGVpZ2h0LnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0QWJzb2x1dGVCb3VuZGluZ1JlY3QoZWwpIHtcbiAgY29uc3QgZG9jID0gZG9jdW1lbnRcbiAgY29uc3Qgd2luID0gd2luZG93XG4gIGNvbnN0IGJvZHkgPSBkb2MuYm9keVxuICAvLyBwYWdlWE9mZnNldCBhbmQgcGFnZVlPZmZzZXQgd29yayBldmVyeXdoZXJlIGV4Y2VwdCBJRSA8OS5cbiAgbGV0IG9mZnNldFggPSB3aW4ucGFnZVhPZmZzZXQgIT09IHVuZGVmaW5lZCA/IHdpbi5wYWdlWE9mZnNldFxuICAgIDogKGRvYy5kb2N1bWVudEVsZW1lbnQgfHwgYm9keS5wYXJlbnROb2RlIHx8IGJvZHkpLnNjcm9sbExlZnRcbiAgbGV0IG9mZnNldFkgPSB3aW4ucGFnZVlPZmZzZXQgIT09IHVuZGVmaW5lZCA/IHdpbi5wYWdlWU9mZnNldFxuICAgIDogKGRvYy5kb2N1bWVudEVsZW1lbnQgfHwgYm9keS5wYXJlbnROb2RlIHx8IGJvZHkpLnNjcm9sbFRvcFxuICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgaWYgKGVsICE9PSBib2R5KSB7XG4gICAgbGV0IHBhcmVudCA9IGVsLnBhcmVudE5vZGVcbiAgICAvLyBUaGUgZWxlbWVudCdzIHJlY3Qgd2lsbCBiZSBhZmZlY3RlZCBieSB0aGUgc2Nyb2xsIHBvc2l0aW9ucyBvZlxuICAgIC8vICphbGwqIG9mIGl0cyBzY3JvbGxhYmxlIHBhcmVudHMsIG5vdCBqdXN0IHRoZSB3aW5kb3csIHNvIHdlIGhhdmVcbiAgICAvLyB0byB3YWxrIHVwIHRoZSB0cmVlIGFuZCBjb2xsZWN0IGV2ZXJ5IHNjcm9sbCBvZmZzZXQuIEdvb2QgdGltZXMuXG4gICAgd2hpbGUgKHBhcmVudCAhPT0gYm9keSkge1xuICAgICAgb2Zmc2V0WCArPSBwYXJlbnQuc2Nyb2xsTGVmdFxuICAgICAgb2Zmc2V0WSArPSBwYXJlbnQuc2Nyb2xsVG9wXG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGJvdHRvbTogcmVjdC5ib3R0b20gKyBvZmZzZXRZLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogcmVjdC5sZWZ0ICsgb2Zmc2V0WCxcbiAgICByaWdodDogcmVjdC5yaWdodCArIG9mZnNldFgsXG4gICAgdG9wOiByZWN0LnRvcCArIG9mZnNldFksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGhcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNEYXRlLCBwaWNrIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRlKGRhdGUsXG4gIHsgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0gPSB7fVxuKSB7XG4gIHJldHVybiBuZXcgRGF0ZShcbiAgICBwaWNrKHllYXIsIGRhdGUgJiYgZGF0ZS5nZXRGdWxsWWVhcigpLCAwKSxcbiAgICBwaWNrKG1vbnRoLCBkYXRlICYmIGRhdGUuZ2V0TW9udGgoKSwgMCksXG4gICAgcGljayhkYXksIGRhdGUgJiYgZGF0ZS5nZXREYXRlKCksIDApLFxuICAgIHBpY2soaG91ciwgZGF0ZSAmJiBkYXRlLmdldEhvdXJzKCksIDApLFxuICAgIHBpY2sobWludXRlLCBkYXRlICYmIGRhdGUuZ2V0TWludXRlcygpLCAwKSxcbiAgICBwaWNrKHNlY29uZCwgZGF0ZSAmJiBkYXRlLmdldFNlY29uZHMoKSwgMCksXG4gICAgcGljayhtaWxsaXNlY29uZCwgZGF0ZSAmJiBkYXRlLmdldE1pbGxpc2Vjb25kcygpLCAwKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XG4gIHJldHVybiBpc0RhdGUoZGF0ZSkgPyBkYXRlIDogZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbFxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXQsIGV2ZW50cykge1xuICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uKSB7XG4gIGNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYXJndW1lbnRzWzBdLCAxMClcbiAgfVxuICBpZiAoZHVyYXRpb24gPD0gMCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdG9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdG8gLSBlbGVtZW50LnNjcm9sbFRvcFxuICAgIGNvbnN0IHBlclRpY2sgPSBkaWZmZXJlbmNlIC8gZHVyYXRpb24gKiAxMFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgcGVyVGlja1xuICAgICAgaWYgKGVsZW1lbnQuc2Nyb2xsVG9wID09PSB0bykgcmV0dXJuXG4gICAgICBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24gLSAxMClcbiAgICB9KVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGZpZWxkLCBzdGFydCwgZW5kKSB7XG4gIGlmIChmaWVsZC5jcmVhdGVUZXh0UmFuZ2UpIHtcbiAgICBjb25zdCByYW5nZSA9IGZpZWxkLmNyZWF0ZVRleHRSYW5nZSgpXG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KVxuICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZClcbiAgICByYW5nZS5zZWxlY3QoKVxuICAgIGZpZWxkLmZvY3VzKClcbiAgfSBlbHNlIGlmIChmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGZpZWxkLmZvY3VzKClcbiAgICBmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9IGVsc2UgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gZmllbGQpIHtcbiAgICBmaWVsZC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0XG4gICAgZmllbGQuc2VsZWN0aW9uRW5kID0gZW5kXG4gICAgZmllbGQuZm9jdXMoKVxuICB9XG59XG4iLCJcbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jYWxlbmRhclxuICAgIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShkYXRlLmRhdGUsIGRhdGUuc3RhdGUsIHRydWUpXCJcbiAgICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkoXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCksIHsgeWVhcjogMSwgbW9udGg6IDEsIGRheTogMSB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNhbGVuZGFyXG4gICAgbWluLXdpZHRoOiAyNDBweFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcblxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICB6LWluZGV4OiAxMDAwXG5cbiAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBzcGFuXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KVxuICAgICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0XG4gICAgICBsaW5lLWhlaWdodDogY2FsYygjeyRpbnB1dC1oZWlnaHR9IC0gMnB4KVxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS10b2RheVxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmVcbiAgICAgICYsXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgY29sb3I6IHdoaXRlXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogd2hpdGVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1ncmF5XG4gICAgICBjb2xvcjogIzk5OVxuXG4gIC5kaXRvLWNhbGVuZGFyLW1vbnRocyxcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICBzcGFuXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNClcbiAgICAgIG1hcmdpbjogMC41ZW0gMFxuXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNSlcblxuICAuZGl0by1jYWxlbmRhciBhLFxuICAuZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuICAuZGl0by1jYWxlbmRhci1tb250aHMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhblxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBjdXJzb3I6IHBvaW50ZXJcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhblxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGFcbiAgICAgIHBhZGRpbmc6IDAgMC4yZW1cblxuICAuZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuOmhvdmVyLFxuICAuZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXI6bm90KDpob3ZlcikgLmRpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuXG4gIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzIHNwYW5cbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuXG4gIC5kaXRvLWNhbGVuZGFyLWhlYWRlcixcbiAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgQGV4dGVuZCAlaW5wdXQtaGVpZ2h0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgdGV4dC1hbGlnbjogY2VudGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZVxuXG4gIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICA+IHNwYW5cbiAgICAgIG1hcmdpbjogYXV0b1xuICAgICAgcGFkZGluZzogMCAwLjVlbVxuICAgIGFcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG5cbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICB3aWR0aDogNSVcbiAgICBtaW4td2lkdGg6IDJlbVxuICAgIG1heC13aWR0aDogM2VtXG4gICAgJjo6YWZ0ZXJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgbGVmdDogMFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIGZvbnQtc2l6ZTogMS4yNWVtXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldlxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAn4oC5J1xuICAgICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyXG4gICAgICBjb250ZW50OiAnwqsnXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dFxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAn4oC6J1xuICAgICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyXG4gICAgICBjb250ZW50OiAnwrsnXG5cbiAgLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5XG4gICAgJjo6YWZ0ZXJcbiAgICAgIGNvbnRlbnQ6ICdOb3cnXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY29weURhdGUgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIG1vZGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZGF5JyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IHdlZWtkYXlOYW1lcywgbW9udGhOYW1lcyB9ID0gZ2V0TG9jYWxlTmFtZXModGhpcy5sb2NhbGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXMsXG4gICAgICBkYXRlUmFuZ2U6IFtdLFxuICAgICAgeWVhclJhbmdlOiBbXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTpcbiAgICAgICAgdGhpcy52YWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAgfSksXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5tb2RlXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgY3VycmVudFZhbHVlOiAndXBkYXRlRGF0ZVJhbmdlJyxcbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsIHx8IG5ldyBEYXRlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOlxuICAgICAgICAgIHRoaXMudmFsdWUgJiYgbW9udGggPT09IHRoaXMudmFsdWUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMudmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzpcbiAgICAgICAgICBtb250aCA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRZZWFyQ2xhc3MoeWVhcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOlxuICAgICAgICAgIHRoaXMudmFsdWUgJiYgeWVhciA9PT0gdGhpcy52YWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOlxuICAgICAgICAgIHllYXIgPT09IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0RGF0ZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5Q291bnQoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlLCBzdGF0ZSwgY29weSA9IGZhbHNlKSB7XG4gICAgICBpZiAoc3RhdGUgIT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdE1vbnRoKG1vbnRoKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3RZZWFyKHllYXIpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgdGhpcy5zZXREYXRlKHsgeWVhciB9KVxuICAgIH0sXG5cbiAgICBnZXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIHllYXIrK1xuICAgICAgICBtb250aCA9IDBcbiAgICAgIH0gZWxzZSBpZiAobW9udGggPCAwKSB7XG4gICAgICAgIHllYXItLVxuICAgICAgICBtb250aCA9IDExXG4gICAgICB9XG4gICAgICByZXR1cm4geyB5ZWFyLCBtb250aCB9XG4gICAgfSxcblxuICAgIGRhdGVUb1N0cmluZyhkYXRlLCB7IHllYXIsIG1vbnRoLCBkYXkgfSkge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogeWVhciAmJiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiBtb250aCAmJiAnbG9uZycsXG4gICAgICAgIGRheTogZGF5ICYmICdudW1lcmljJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZGVjYWRlVG9TdHJpbmcoZGF0ZSkge1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoZGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIGAke3llYXJ9IOKAkyAke3llYXIgKyA5fWBcbiAgICB9LFxuXG4gICAgZ2V0RGF5Q291bnQoeWVhciwgbW9udGgpIHtcbiAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdXG4gICAgICAvLyBIYW5kbGUgbGVhcCB5ZWFyOlxuICAgICAgcmV0dXJuIG1vbnRoID09PSAxICYmICghKHllYXIgJSA0MDApIHx8ICEoeWVhciAlIDQpICYmICh5ZWFyICUgMTAwKSlcbiAgICAgICAgPyAyOVxuICAgICAgICA6IGRheXNJbk1vbnRoW21vbnRoXVxuICAgIH0sXG5cbiAgICBnZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKSB7XG4gICAgICBjb25zdCB5ZWFyU3RyID0geWVhci50b1N0cmluZygpXG4gICAgICByZXR1cm4gK2Ake3llYXJTdHIuc2xpY2UoMCwgLTEpfTBgXG4gICAgfSxcblxuICAgIG5hdmlnYXRlKHsgaG9yLCB2ZXIsIGVudGVyIH0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudE1vZGUsIGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgaWYgKGhvciB8fCB2ZXIpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50TW9kZSkge1xuICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBob3IgKyB2ZXIgKiA3XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIG1vbnRoOiBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIGhvciArIHZlciAqIDZcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICB5ZWFyOiBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIGhvciArIHZlciAqIDVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50TW9kZSkge1xuICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGVSYW5nZSgpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0gW11cbiAgICAgIHRoaXMueWVhclJhbmdlID0gW11cblxuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgY29uc3QgbW9udGggPSBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgY29uc3Qgc3RhcnRZZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHRoaXMueWVhclJhbmdlLnB1c2goc3RhcnRZZWFyICsgaSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJNb250aEZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICBsZXQgZmlyc3REYXlXZWVrID0gY3Vyck1vbnRoRmlyc3REYXkuZ2V0RGF5KCkgKyAxXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID09PSAwKSB7XG4gICAgICAgIGZpcnN0RGF5V2VlayA9IDdcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRheUNvdW50ID0gdGhpcy5nZXREYXlDb3VudCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoRGF5Q291bnQgPSB0aGlzLmdldERheUNvdW50KFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhEYXlDb3VudCAtIGZpcnN0RGF5V2VlayArIGkgKyAxXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHByZXZNb250aC55ZWFyLCBwcmV2TW9udGgubW9udGgsIGRheSlcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGRheUNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMudmFsdWUpID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KHRvZGF5KSA/ICd0b2RheSdcbiAgICAgICAgICA6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJ1xuICAgICAgICAgIDogaXNEYXkoY3VycmVudFZhbHVlKSA/ICdjdXJyZW50J1xuICAgICAgICAgIDogbnVsbFxuICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE1vbnRoTmVlZCA9IDQyIC0gdGhpcy5kYXRlUmFuZ2UubGVuZ3RoXG4gICAgICBpZiAobmV4dE1vbnRoTmVlZCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggKyAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0TW9udGhOZWVkOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV4dE1vbnRoLnllYXIsIG5leHRNb250aC5tb250aCwgaSlcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgbG9jYWxlTmFtZXMgPSB7fVxuXG4vLyBDYWxsaW5nIGB0b0xvY2FsZVN0cmluZygpYCB0aGlzIG11Y2ggYXBwZWFycyB0byBiZSBleHBlbnNpdmUsIHNvIGNhY2hlIGl0OlxuZnVuY3Rpb24gZ2V0TG9jYWxlTmFtZXMobG9jYWxlKSB7XG4gIGxldCBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV1cbiAgaWYgKCFuYW1lcykge1xuICAgIGNvbnN0IHdlZWtkYXlOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCAwLCBpKVxuICAgICAgd2Vla2RheU5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBtb250aE5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgaSwgMClcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdID0ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lc1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNcbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIHRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgIClcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICApXG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICAgIHJlZj1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICAgIHJlZj1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgdHJhbnNpdGlvbig6bmFtZT1cInRyYW5zaXRpb25cIilcbiAgICAgIC5kaXRvLXBvcHVwKFxuICAgICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICApXG4gICAgICAuZGl0by1wb3B1cChcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgKVxuICAgICAgICBzbG90KFxuICAgICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2FzcydcblxuICAuZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gIC5kaXRvLXRyaWdnZXItZGlzYWJsZWRcbiAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgKlxuICAgICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnRcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjpmb2N1c1xuICAgICAgICBib3gtc2hhZG93OiBub25lXG5cbiAgLmRpdG8tcG9wdXBcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB0b3A6IDBcbiAgICBsZWZ0OiAwXG4gICAgei1pbmRleDogMTAwMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IGFkZEV2ZW50cyh0YXJnZXQsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IG51bGxcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcodGhpcy50YXJnZXQpXG4gICAgICAgID8gdGhpcy4kcmVmc1t0aGlzLnRhcmdldF1cbiAgICAgICAgOiB0aGlzLnRhcmdldFxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgICAgY29uc3QgZWwgPSB0YXJnZXQgPT09IHBvcHVwID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0Q2hpbGRcbiAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gKHRhcmdldCB8fCB0cmlnZ2VyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuXG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGUtcG9zaXRpb24nLCB7XG4gICAgICAgIHRyaWdnZXIsXG4gICAgICAgIHBvcHVwLFxuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMucG9wdXBQbGFjZW1lbnRcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWlucHV0XG4gIGlucHV0KFxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8taW5wdXRcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1pbnB1dFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIEBleHRlbmQgJWlucHV0XG4gICAgaW5wdXRcbiAgICAgIC8vIEluaGVyaXQgYWxsIHN0eWxpbmcgZnJvbSAuZGl0by1pbnB1dFxuICAgICAgYWxsOiBpbmhlcml0XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBib3JkZXI6IDBcbiAgICAgIG1hcmdpbjogMFxuICAgICAgcGFkZGluZzogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgdmFsdWU6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgICAvKlxuICAgIGNsZWFyYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gICAgc3VmZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwcmVmaXhJY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gICAgKi9cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lLFxuICAgICAgICB0eXBlLFxuICAgICAgICBzaXplLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIHJlYWRvbmx5LFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgYXV0b2NvbXBsZXRlLFxuICAgICAgICAkYXR0cnNcbiAgICAgIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByZWFkb25seSxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGF1dG9jb21wbGV0ZSxcbiAgICAgICAgLi4uJGF0dHJzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIC8vIFJlbW92ZSAnaW5wdXQnIGxpc3RlbmVyIGJlY2F1c2Ugd2UncmUgaGFuZGxpbmcgaXQgc2VwYXJhdGVseSBiZWxvdyxcbiAgICAgIC8vIGJ1dCBwYXNzIG9uIGFsbCBvdGhlcnMgdG8gdGhlIHdyYXBwZWQgbmF0aXZlIGVsZW1lbnQ6XG4gICAgICBjb25zdCB7IGlucHV0LCAuLi5saXN0ZW5lcnMgfSA9IHRoaXMuJGxpc3RlbmVyc1xuICAgICAgcmV0dXJuIGxpc3RlbmVyc1xuICAgIH0sXG5cbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+IHZhbHVlICE9IG51bGwgPyBgJHt2YWx1ZX1gLmxlbmd0aCA6IDBcbiAgICAgIHJldHVybiBzaXplIHx8IGdldExlbmd0aChtaW4pIHx8IGdldExlbmd0aChtYXgpIHx8IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKG5ld1ZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgaW5wdXQtZmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgcmVhZG9ubHlcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgKVxuICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICBjYWxlbmRhci5kaXRvLWRhdGUtcGlja2VyLXBvcHVwKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgIEBpbnB1dD1cInNlbGVjdERhdGVcIlxuICAgIDp2YWx1ZT1cImN1cnJlbnRWYWx1ZVwiXG4gICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgKVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWRhdGUtcGlja2VyKFxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4gIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gICAgKVxuICAgIC8vIGljb24odHlwZT1cImNhbGVuZGFyXCIgOmNvbG9yPVwiaWNvbkNvbG9yXCIpXG4gICAgY2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICBAaW5wdXQ9XCJzZWxlY3REYXRlXCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJ7IGxvY2FsZSwgZGlzYWJsZWREYXRlIH1cIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1kYXRlLXBpY2tlclxuICAgIG1pbi13aWR0aDogMjQwcHhcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICB3aWR0aDogMTAwJVxuICAuZGl0by1kYXRlLXBpY2tlci1wb3B1cFxuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpblxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBDYWxlbmRhciBmcm9tICcuL0NhbGVuZGFyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBDYWxlbmRhciwgSW5wdXRGaWVsZCB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkYXRlRm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gZGVmYXVsdEZvcm1hdHMuZGF0ZSB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgZGF0ZTogdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aW1lOiBmYWxzZVxuICAgICAgfSkgfHwgJydcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cChuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2VsZWN0RGF0ZShkYXRlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy4kcmVmcy5jYWxlbmRhcj8ubmF2aWdhdGUoZ2V0S2V5TmF2aWdhdGlvbihldmVudCkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICBpbnB1dC1maWVsZC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICByZWFkb25seVxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICApXG4gIC8vIGljb24odHlwZT1cInRpbWVcIlxuICAvLyAgIDpjb2xvcj1cImRpc2FibGVkID8gJyNiZmJmYmYnIDogKHRleHQgPyAnIzY2NicgOiAnI2JmYmZiZicpXCJcbiAgLy8gKVxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cChcbiAgICBzbG90PVwicG9wdXBcIlxuICApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihcbiAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAwXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLW1pbnV0ZShcbiAgICAgICAgcmVmPVwibWludXRlXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKFxuICAgICAgICByZWY9XCJzZWNvbmRcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMlwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuICApXG4gICAgaW5wdXQtZmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICAvLyBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgICAvLyAgIDpjb2xvcj1cImRpc2FibGVkID8gJyNiZmJmYmYnIDogKHRleHQgPyAnIzY2NicgOiAnI2JmYmZiZicpXCJcbiAgICAvLyApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgIClcbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihcbiAgICAgICAgICByZWY9XCJob3VyXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMFwiXG4gICAgICAgIClcbiAgICAgICAgICBsaShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgICAgcmVmPVwibWludXRlXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMVwiXG4gICAgICAgIClcbiAgICAgICAgICBsaShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQoXG4gICAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMlwiXG4gICAgICAgIClcbiAgICAgICAgICBsaShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIHdpZHRoOiAxMDAlXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICBtYXgtd2lkdGg6IDE2MHB4XG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG5cbiAgJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4XG4gIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC5kaXRvLWljb24tdGltZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiA3cHhcbiAgICAgICAgaGVpZ2h0OiAxMDAlXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICBsaXN0LXN0eWxlOiBub25lXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvd1xuICAgIG92ZXJmbG93OiBoaWRkZW5cblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cCAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgIGZsb2F0OiBsZWZ0XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXdpZHRoOiAwIDFweCAwXG4gICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpXG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuICAgICY6bGFzdC1jaGlsZFxuICAgICAgYm9yZGVyLXJpZ2h0OiAwXG4gICAgdWxcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlblxuICAgICAgb3ZlcmZsb3cteTogYXV0b1xuICAgICAgbGlzdC1zdHlsZTogbm9uZVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIG1hcmdpbjogMFxuICAgICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveFxuICAgICAgcGFkZGluZzogMCAxN3B4IDAgMFxuICAgICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAmID4gbGlcbiAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3hcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlblxuICAgICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICAmOmhvdmVyXG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgICAmLnNlbGVjdGVkLFxuICAgICAgICAmLnNlbGVjdGVkOmhvdmVyXG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgICAmLmRpc2FibGVkXG4gICAgICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuICAgICAgICAmLmRpc2FibGVkOmhvdmVyXG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7XG4gIGNvcHlEYXRlLCBzY3JvbGxUbywgc2V0U2VsZWN0aW9uLCBnZXRLZXlOYXZpZ2F0aW9uXG59IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHNlbGVjdGlvbjogMCxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZVxuICAgICAgICA/IGAke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLmhvdXIpfToke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLm1pbnV0ZSl9OiR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMuc2Vjb25kKX1gXG4gICAgICAgIDogJydcbiAgICB9LFxuXG4gICAgY3VycmVudERhdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSB8fFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgRGF0ZSgpIG9iamVjdCB3aXRoIHRoZSB0aW1lIHNldCB0byAwLCB0byBiZSB1c2VkIHdoZW5cbiAgICAgICAgLy8gZmlyc3Qgc2V0dGluZyBhbnkgb2YgdGhlIHRpbWVzLCBmb3IgbWVhbmluZ2Z1bCBkYXRlcyBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBvYmplY3QgaXMgc2hhcmVkIHdpdGggYSBEYXRlUGlja2VyLCBlLmcuIHRocm91Z2ggRGF0ZVRpbWVQaWNrZXIuXG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNlbGVjdGlvbjogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgwKVxuICAgICAgfVxuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUocGFyYW0pIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50RGF0ZSwgcGFyYW0pXG4gICAgfSxcblxuICAgIHVwZGF0ZVNlbGVjdGlvbihmb3JjZSA9IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5zaG93UG9wdXAgfHwgZm9yY2UpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSAzICogdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuJHJlZnMuaW5wdXQsIHN0YXJ0LCBzdGFydCArIDIpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY3JvbGxBbGwoZHVyYXRpb24gPSAxMDApIHtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IChyZWYsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJHJlZnNbcmVmXVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgLy8gRmlyc3QgYW5kIGFsc3Qgb25lIGFkZCAzIHRpbWVzIHRoZSBtYXJnaW5cbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gdGFyZ2V0LnNjcm9sbEhlaWdodCAvICh0YXJnZXQuY2hpbGRyZW4ubGVuZ3RoICsgNilcbiAgICAgICAgICBzY3JvbGxUbyh0YXJnZXQsIE1hdGgucm91bmQodmFsdWUgKiBsaW5lSGVpZ2h0KSwgZHVyYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsKCdob3VyJywgdGhpcy5ob3VyKVxuICAgICAgICBzY3JvbGwoJ21pbnV0ZScsIHRoaXMubWludXRlKVxuICAgICAgICBzY3JvbGwoJ3NlY29uZCcsIHRoaXMuc2Vjb25kKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IFsnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJ11bdGhpcy5zZWxlY3Rpb25dXG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgeyBob3IsIHZlciwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICAgIGlmIChob3IpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0aW9uICsgaG9yXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPVxuICAgICAgICAgICAgdmFsdWUgPCAwID8gMlxuICAgICAgICAgICAgOiB2YWx1ZSA+IDIgPyAwXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH0gZWxzZSBpZiAodmVyKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW3NlbGVjdGVkXSArIHZlclxuICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSB0aGlzLiRyZWZzW3NlbGVjdGVkXS5jaGlsZHJlblxuICAgICAgICAgIHRoaXNbc2VsZWN0ZWRdID1cbiAgICAgICAgICAgIHZhbHVlIDwgMCA/IHZhbHVlICsgbGVuZ3RoXG4gICAgICAgICAgICA6IHZhbHVlID49IGxlbmd0aCA/IHZhbHVlIC0gbGVuZ3RoXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChob3IgfHwgdmVyIHx8IGVudGVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odHJ1ZSlcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihcbiAgcmVmPVwicGlja2VyXCJcbilcbiAgLmRpdG8tcGlja2VycyhcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgKVxuICAgIGRhdGUtcGlja2VyKFxuICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgOnNob3cuc3luYz1cInNob3dEYXRlXCJcbiAgICAgIEBmb2N1cz1cImRhdGVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgdGltZS1waWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgOnNob3cuc3luYz1cInNob3dUaW1lXCJcbiAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyKFxuICAgIHJlZj1cInBpY2tlclwiXG4gIClcbiAgICAuZGl0by1waWNrZXJzKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgKVxuICAgICAgZGF0ZS1waWNrZXIoXG4gICAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgICAgOnNob3cuc3luYz1cInNob3dEYXRlXCJcbiAgICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgICAgQGJsdXI9XCJkYXRlRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICAgIClcbiAgICAgIHRpbWUtcGlja2VyKFxuICAgICAgICByZWY9XCJ0aW1lXCJcbiAgICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICAgIDpzaG93LnN5bmM9XCJzaG93VGltZVwiXG4gICAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICAgIEBibHVyPVwidGltZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgZGlzYWJsZWQgfVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlclxuICAgIC5kaXRvLXBpY2tlcnNcbiAgICAgIEBleHRlbmQgJWlucHV0XG4gICAgICBwYWRkaW5nOiAwXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgICB3aWR0aDogNjAlXG4gICAgICBtaW4td2lkdGg6IDYuOWVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwXG4gICAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAgIHdpZHRoOiA0MCVcbiAgICAgIG1pbi13aWR0aDogNS40ZW1cbiAgICAgIC5kaXRvLWlucHV0XG4gICAgICAgIHBhZGRpbmctbGVmdDogMFxuICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVGb2N1c2VkIHx8IHRoaXMudGltZUZvY3VzZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmJsdXIoKVxuICAgICAgdGhpcy4kcmVmcy50aW1lLmJsdXIoKVxuICAgIH1cbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIGB5YXJuIGJ1aWxkOmljb25zYCBjb252ZXJ0cyB0aGUgaWNvbiBTVkcgZmlsZXMgdG8gc2lsZW50IGNsYXNzZXMgaW5zaWRlXG4gIC8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Fzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuICAvLyBjb2RlIHRocm91Z2ggYF9pbXBvcnRzYC5cbiAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBhcyBub3JtYWwgQ1NTIGNsYXNzZXMsIGNvbnZlcnQgdGhlbSBoZXJlOlxuICBAZWFjaCAkbmFtZSBpbiAkaWNvbnNcbiAgICAuZGl0by1pY29uLSN7JG5hbWV9XG4gICAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFnaW5hdGlvbihcbiAgdi1pZj1cIm51bVBhZ2VzID4gMVwiXG4pXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwidG90YWwgPiAwXCIpIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19XG4gICAgdGVtcGxhdGUodi1lbHNlKSAwXG4gICAgfCAgLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhZ2luYXRpb24oXG4gICAgdi1pZj1cIm51bVBhZ2VzID4gMVwiXG4gIClcbiAgICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgICAgdi1pZj1cInNob3dUb3RhbFwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUodi1pZj1cInRvdGFsID4gMFwiKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgICAgdGVtcGxhdGUodi1lbHNlKSAwXG4gICAgICB8ICAvIHt7IHRvdGFsIH19XG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICAgIEBjbGljaz1cIm9uQ2xpY2tQYWdlKHBhZ2UpXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgICApXG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICAgICkge3sgcGFnZS50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFnaW5hdGlvblxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsXG4gICAgICArZWxsaXBzaXNcbiAgICAgIG1hcmdpbjogMCAwLjVlbVxuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHRcbiAgICAuZGl0by1idXR0b25cbiAgICAgIHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZSwgY29sb3IgMHMsIGJhY2tncm91bmQgMHMsIGJvcmRlciAwc1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgcGFkZGluZzogMCAwLjVlbVxuICAgICAgJi1wcmV2LFxuICAgICAgJi1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tYXJyb3dcbiAgICAgICYtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuICAgICAgJi1lbGxpcHNpcy1wcmV2LFxuICAgICAgJi1lbGxpcHNpcy1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXNcbiAgICAgICAgJjpob3Zlcjo6YmVmb3JlXG4gICAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9uc1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcbiAgICAgICAgJjpmb2N1c1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgICY6YWN0aXZlXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZVxuICAgICAgJi1lbGxpcHNpcy1wcmV2OjpiZWZvcmVcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlUmFuZ2U6IFtdLFxuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIG51bVBhZ2VzOiAwLFxuICAgICAgY3VycmVudFBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5jdXJyZW50UGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHRvdGFsOiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93UHJldjogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd05leHQ6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuXG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZShwYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBwYWdlU2l6ZVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZVNpemUoY3VycmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgIHRoaXMuJGVtaXQoJ3NpemUtY2hhbmdlJywgdGhpcy5wYWdlLCBjdXJyZW50UGFnZVNpemUpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlXG4gICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplXG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2tQYWdlKHBhZ2UpIHtcbiAgICAgIGlmIChwYWdlLmluZGV4ICYmICFwYWdlLmRpc2FibGVkICYmIHBhZ2UuaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2UuaW5kZXhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGFnZUNsYXNzKHBhZ2UpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogcGFnZS5hY3RpdmVcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtwYWdlLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICB1cGRhdGVQYWdlUmFuZ2UoKSB7XG4gICAgICBjb25zdCB7IHNob3dQcmV2LCBzaG93TmV4dCwgdG90YWwsIGN1cnJlbnRQYWdlU2l6ZSwgY3VycmVudFBhZ2UgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuICAgICAgY29uc3QgbnVtUGFnZXMgPSB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgIGlucHV0KFxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXN3aXRjaChcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gICAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICAgIGlucHV0KFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByZWY9XCJpbnB1dFwiXG4gICAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLy8gVXNlIHdob2xlIG11bHRpcGxlcyBvZiBgcmVtYCBmb3Igc2l6ZXMgYW5kIGBweGAgbWFyZ2lucy9wYWRkaW5nIGFsb25nXG4gICAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLiBgcmVtYCBpcyBuZWVkZWQgYmVjYXVzZSB3ZVxuICAgIC8vIGNoYW5nZSBgZm9udC1zaXplYCBpbnNpZGUgYC5kaXRvLXN3aXRjaC1idXR0b25gXG4gICAgLS1zd2l0Y2gtd2lkdGg6IDRyZW1cbiAgICAtLXN3aXRjaC1oZWlnaHQ6IDJyZW1cbiAgICAtLXN3aXRjaC1tYXJnaW46IDJweFxuICAgIC0tc3dpdGNoLXBhZGRpbmc6IDNweFxuICAgIC0tc3dpdGNoLXNwZWVkOiAzMDBtc1xuICAgIC0tbGFiZWwtbWFyZ2luOiAwLjVlbVxuXG4gICAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKVxuICAgIC0taGVpZ2h0OiBjYWxjKHZhcigtLXN3aXRjaC1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKVxuICAgIC0tb2Zmc2V0OiBjYWxjKHZhcigtLXdpZHRoKSAtIHZhcigtLWhlaWdodCkpXG5cbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICBoZWlnaHQ6IHZhcigtLXN3aXRjaC1oZWlnaHQpXG4gICAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICAgIHZlcnRpY2FsLWFsaWduOiAtMjUlXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgd2lkdGg6IHZhcigtLXdpZHRoKVxuICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpXG4gICAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICB0b3A6IDUwJVxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpXG4gICAgaW5wdXRcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgYXBwZWFyYW5jZTogbm9uZVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuM3MsIGJhY2tncm91bmQtY29sb3IgLjNzXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAvLyBTZXQgZm9udC1zaXplIHRvIGhlaWdodCwgc28gd2UgY2FuIHVzZSB3aWR0aC9oZWlnaHQgPSAxZW0gZm9yIGNpcmNsZTpcbiAgICAgIGZvbnQtc2l6ZTogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1wYWRkaW5nKSlcbiAgICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpXG4gICAgICBsZWZ0OiB2YXIoLS1zd2l0Y2gtcGFkZGluZylcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG4gICAgICBib3JkZXItcmFkaXVzOiAwLjVlbVxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKVxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pXG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgJi5kaXRvLWNoZWNrZWRcbiAgICAgIGlucHV0XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpXG4gICAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgICAgbGVmdDogdmFyKC0tbGFiZWwtbWFyZ2luKVxuICAgICAgICByaWdodDogdW5zZXRcbiAgICAmLmRpdG8tZGlzYWJsZWRcbiAgICAgIEBleHRlbmQgJWJ1dHRvbi1kaXNhYmxlZFxuICAgICY6Zm9jdXMtd2l0aGluOm5vdCg6aG92ZXIpXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWxzOiB7IHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tlZDogdGhpcy52YWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCB7IGNoZWNrZWQsIGRpc2FibGVkIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jaGVja2VkJzogY2hlY2tlZCxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsczogeyBjaGVja2VkLCB1bmNoZWNrZWQgfSA9IHt9IH0gPSB0aGlzXG4gICAgICAvLyBDYWxjdWxhdGUgYC0tc3dpdGNoLXdpZHRoYCBpbiBgcmVtYCwgYmFzZWQgb24gbGFiZWwgbGVuZ3RoLlxuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoMCwgY2hlY2tlZD8ubGVuZ3RoLCB1bmNoZWNrZWQ/Lmxlbmd0aClcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLXN3aXRjaC13aWR0aCc6IGxlbmd0aCA/IGAke2xlbmd0aCAqIDEuNX1yZW1gIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBpZCwgbmFtZSwgZGlzYWJsZWQsICRhdHRycyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgaWQsIG5hbWUsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKHZhbHVlKSB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSB2YWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAkZHVyYXRpb246IDAuMTVzXG4gIC5oZWlnaHQtZW50ZXItYWN0aXZlLFxuICAuaGVpZ2h0LWxlYXZlLWFjdGl2ZVxuICAgIHRyYW5zaXRpb246IGhlaWdodCAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgLmhlaWdodC1lbnRlci1hY3RpdmVcbiAgICBhbmltYXRpb246IHNsaWRlLWVudGVyICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gIC5oZWlnaHQtbGVhdmUtYWN0aXZlXG4gICAgYW5pbWF0aW9uOiBzbGlkZS1sZWF2ZSAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAuaGVpZ2h0LWVudGVyLFxuICAuaGVpZ2h0LWxlYXZlLXRvXG4gICAgaGVpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuXG4gIHByb3BzOiB7XG4gICAgZW5hYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICByZW5kZXI6IChjcmVhdGVFbGVtZW50LCBjb250ZXh0KSA9PiBjcmVhdGVFbGVtZW50KFxuICAgICd0cmFuc2l0aW9uJyxcbiAgICBjb250ZXh0LnByb3BzLmVuYWJsZWRcbiAgICAgID8ge1xuICAgICAgICBwcm9wczogeyBuYW1lOiAnaGVpZ2h0JyB9LFxuICAgICAgICBvbjogZXZlbnRzXG4gICAgICB9XG4gICAgICA6IHt9LFxuICAgIGNvbnRleHQuY2hpbGRyZW5cbiAgKVxufVxuXG5jb25zdCBzZXRTdHlsZSA9IChlbGVtZW50LCBzdHlsZSkgPT4gT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSlcblxuLy8gRm9yY2UgcmVwYWludCB0byBtYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyB0cmlnZ2VyZWQgY29ycmVjdGx5LlxuY29uc3QgZm9yY2VSZXBhaW50ID0gZWxlbWVudCA9PiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodFxuXG5jb25zdCBldmVudHMgPSB7XG4gIGFmdGVyRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEEgdGltZXBvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6ICdhdXRvJyB9KSlcbiAgfSxcblxuICBlbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIGxlYXZlKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pXG4gICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG4iXSwibmFtZXMiOlsicmVuZGVyIiwic3RhdGljUmVuZGVyRm5zIiwiX192dWUyX3NjcmlwdCJdLCJtYXBwaW5ncyI6Ijs7QUFBTyxpQ0FBaUMsSUFBSTtBQUMxQyxRQUFNLE1BQU07QUFDWixRQUFNLE1BQU07QUFDWixRQUFNLE9BQU8sSUFBSTtBQUVqQixNQUFJLFVBQVUsSUFBSSxnQkFBZ0IsU0FBWSxJQUFJLGNBQzdDLEtBQUksbUJBQW1CLEtBQUssY0FBYyxNQUFNO0FBQ3JELE1BQUksVUFBVSxJQUFJLGdCQUFnQixTQUFZLElBQUksY0FDN0MsS0FBSSxtQkFBbUIsS0FBSyxjQUFjLE1BQU07QUFDckQsUUFBTSxPQUFPLEdBQUcsc0JBQXVCO0FBQ3ZDLE1BQUksT0FBTyxNQUFNO0FBQ2YsUUFBSSxTQUFTLEdBQUc7QUFJaEIsV0FBTyxXQUFXLE1BQU07QUFDdEIsaUJBQVcsT0FBTztBQUNsQixpQkFBVyxPQUFPO0FBQ2xCLGVBQVMsT0FBTztBQUFBLElBQ2pCO0FBQUEsRUFDRjtBQUNELFNBQU87QUFBQSxJQUNMLFFBQVEsS0FBSyxTQUFTO0FBQUEsSUFDdEIsUUFBUSxLQUFLO0FBQUEsSUFDYixNQUFNLEtBQUssT0FBTztBQUFBLElBQ2xCLE9BQU8sS0FBSyxRQUFRO0FBQUEsSUFDcEIsS0FBSyxLQUFLLE1BQU07QUFBQSxJQUNoQixPQUFPLEtBQUs7QUFBQSxFQUNiO0FBQ0g7QUMzQk8sa0JBQWtCLE1BQ3ZCLEVBQUUsTUFBTSxPQUFPLEtBQUssTUFBTSxRQUFRLFFBQVEsZ0JBQWdCLENBQUUsR0FDNUQ7QUFDQSxTQUFPLElBQUksS0FDVCxLQUFLLE1BQU0sUUFBUSxLQUFLLFlBQVcsR0FBSSxDQUFDLEdBQ3hDLEtBQUssT0FBTyxRQUFRLEtBQUssU0FBUSxHQUFJLENBQUMsR0FDdEMsS0FBSyxLQUFLLFFBQVEsS0FBSyxRQUFPLEdBQUksQ0FBQyxHQUNuQyxLQUFLLE1BQU0sUUFBUSxLQUFLLFNBQVEsR0FBSSxDQUFDLEdBQ3JDLEtBQUssUUFBUSxRQUFRLEtBQUssV0FBVSxHQUFJLENBQUMsR0FDekMsS0FBSyxRQUFRLFFBQVEsS0FBSyxXQUFVLEdBQUksQ0FBQyxHQUN6QyxLQUFLLGFBQWEsUUFBUSxLQUFLLGdCQUFlLEdBQUksQ0FBQyxDQUNwRDtBQUNIO0FBRU8scUJBQXFCLE1BQU07QUFDaEMsU0FBTyxPQUFPLElBQUksSUFBSSxPQUFPLE9BQU8sSUFBSSxLQUFLLElBQUksSUFBSTtBQUN2RDtBQ2xCTyxtQkFBbUIsUUFBUSxTQUFRO0FBQ3hDLGFBQVcsUUFBUSxTQUFRO0FBQ3pCLFdBQU8saUJBQWlCLE1BQU0sUUFBTyxPQUFPLEtBQUs7QUFBQSxFQUNsRDtBQUNELFNBQU87QUFBQSxJQUNMLFNBQVM7QUFDUCxpQkFBVyxRQUFRLFNBQVE7QUFDekIsZUFBTyxvQkFBb0IsTUFBTSxRQUFPLE9BQU8sS0FBSztBQUFBLE1BQ3JEO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDSDtBQUVPLGdCQUFnQixPQUFPO0FBQzVCLFNBQU87QUFBQSxJQUNMLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxFQUNSLEVBQUksTUFBTTtBQUNWO0FBRU8sMEJBQTBCLE9BQU87QUFDdEMsUUFBTSxNQUFNLE9BQU8sS0FBSztBQUN4QixTQUFPO0FBQUEsSUFDTCxLQUFLLEVBQUUsTUFBTSxJQUFJLE9BQU8sRUFBRyxFQUFDLFFBQVE7QUFBQSxJQUNwQyxLQUFLLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRyxFQUFDLFFBQVE7QUFBQSxJQUNqQyxPQUFPLFFBQVE7QUFBQSxFQUNoQjtBQUNIO0FDOUJPLGtCQUFrQixTQUFTLElBQUksVUFBVTtBQUM5QyxRQUFNLHdCQUF3QixPQUFPLHlCQUF5QixXQUFXO0FBQ3ZFLFdBQU8sV0FBVyxVQUFVLElBQUksRUFBRTtBQUFBLEVBQ25DO0FBQ0QsTUFBSSxZQUFZLEdBQUc7QUFDakIsWUFBUSxZQUFZO0FBQUEsRUFDeEIsT0FBUztBQUNMLFVBQU0sYUFBYSxLQUFLLFFBQVE7QUFDaEMsVUFBTSxVQUFVLGFBQWEsV0FBVztBQUN4QywwQkFBc0IsTUFBTTtBQUMxQixjQUFRLFlBQVksUUFBUSxZQUFZO0FBQ3hDLFVBQUksUUFBUSxjQUFjO0FBQUk7QUFDOUIsZUFBUyxTQUFTLElBQUksV0FBVyxFQUFFO0FBQUEsSUFDekMsQ0FBSztBQUFBLEVBQ0Y7QUFDSDtBQ2ZPLHNCQUFzQixPQUFPLE9BQU8sS0FBSztBQUM5QyxNQUFJLE1BQU0saUJBQWlCO0FBQ3pCLFVBQU0sUUFBUSxNQUFNLGdCQUFpQjtBQUNyQyxVQUFNLFNBQVMsSUFBSTtBQUNuQixVQUFNLFVBQVUsYUFBYSxLQUFLO0FBQ2xDLFVBQU0sUUFBUSxhQUFhLEdBQUc7QUFDOUIsVUFBTSxPQUFRO0FBQ2QsVUFBTSxNQUFPO0FBQUEsRUFDakIsV0FBYSxNQUFNLG1CQUFtQjtBQUNsQyxVQUFNLE1BQU87QUFDYixVQUFNLGtCQUFrQixPQUFPLEdBQUc7QUFBQSxFQUN0QyxXQUFhLG9CQUFvQixPQUFPO0FBQ3BDLFVBQU0saUJBQWlCO0FBQ3ZCLFVBQU0sZUFBZTtBQUNyQixVQUFNLE1BQU87QUFBQSxFQUNkO0FBQ0g7QUNoQkEsSUFBSUEsV0FBUyxXQUFZO0FBQ3ZCLE1BQUksTUFBSTtBQUNSLE1BQUksS0FBRyxJQUFJO0FBQ1gsTUFBSSxLQUFHLElBQUksTUFBTSxNQUFJO0FBRXJCLFNBQU8sR0FBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDLEdBQUcsT0FBTztBQUFBLElBQ1osYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQyxHQUFHLE9BQU87QUFBQSxJQUNaLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUMsSUFBSSxnQkFBZ0IsUUFBUSxDQUFDLEdBQUcsT0FBTztBQUFBLElBQ3pDLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUMsR0FBRyxLQUFLO0FBQUEsSUFDVixhQUFhO0FBQUEsSUFDYixJQUFJO0FBQUEsTUFDRixTQUFTLFNBQVUsUUFBUTtBQUN6QixlQUFPLElBQUksU0FBUyxFQUFFO0FBQUEsTUFDdkI7QUFBQSxJQUNGO0FBQUEsRUFDTCxDQUFHLEdBQUcsR0FBRyxLQUFLO0FBQUEsSUFDVixhQUFhO0FBQUEsSUFDYixJQUFJO0FBQUEsTUFDRixTQUFTLFNBQVUsUUFBUTtBQUN6QixlQUFPLElBQUksVUFBVSxFQUFFO0FBQUEsTUFDeEI7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFBLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxLQUFLO0FBQUEsSUFDdEIsYUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLE1BQ0YsU0FBUyxTQUFVLFFBQVE7QUFDekIsZUFBTyxJQUFJLFFBQVEsTUFBTTtBQUFBLE1BQzFCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxhQUFhLElBQUksY0FBYztBQUFBLElBQ25ELE1BQU07QUFBQSxFQUNQLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSztBQUFBLElBQ2QsYUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLE1BQ0YsU0FBUyxTQUFVLFFBQVE7QUFDekIsZUFBTyxJQUFJLFFBQVEsT0FBTztBQUFBLE1BQzNCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxhQUFhLElBQUksY0FBYztBQUFBLElBQ25ELE9BQU87QUFBQSxFQUNSLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUs7QUFBQSxJQUNoQixhQUFhO0FBQUEsSUFDYixJQUFJO0FBQUEsTUFDRixTQUFTLFNBQVUsUUFBUTtBQUN6QixlQUFPLElBQUksVUFBVSxDQUFDO0FBQUEsTUFDdkI7QUFBQSxJQUNGO0FBQUEsRUFDTCxDQUFHLEdBQUcsR0FBRyxLQUFLO0FBQUEsSUFDVixhQUFhO0FBQUEsSUFDYixJQUFJO0FBQUEsTUFDRixTQUFTLFNBQVUsUUFBUTtBQUN6QixlQUFPLElBQUksU0FBUyxDQUFDO0FBQUEsTUFDdEI7QUFBQSxJQUNGO0FBQUEsRUFDTCxDQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsT0FBTztBQUFBLElBQ2QsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQyxHQUFHLE9BQU87QUFBQSxJQUNaLGFBQWE7QUFBQSxFQUNkLEdBQUUsSUFBSSxHQUFHLElBQUksY0FBYyxTQUFVLFNBQVM7QUFDN0MsV0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ2xELENBQUEsR0FBRyxDQUFDLEdBQUcsR0FBRyxPQUFPO0FBQUEsSUFDaEIsYUFBYTtBQUFBLEVBQ2QsR0FBRSxJQUFJLEdBQUcsSUFBSSxXQUFXLFNBQVUsTUFBTTtBQUN2QyxXQUFPLEdBQUcsUUFBUTtBQUFBLE1BQ2hCLE9BQU8sS0FBSyxTQUFTLHNCQUFzQixLQUFLO0FBQUEsTUFDaEQsSUFBSTtBQUFBLFFBQ0YsU0FBUyxTQUFVLFFBQVE7QUFDekIsaUJBQU8sSUFBSSxXQUFXLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSTtBQUFBLFFBQ2xEO0FBQUEsTUFDRjtBQUFBLElBQ1AsR0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDL0IsQ0FBQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxPQUFPO0FBQUEsSUFDbEIsYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQyxHQUFHLEtBQUs7QUFBQSxJQUNWLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxNQUNSLFNBQVMsSUFBSSxhQUFhLElBQUksS0FBSSxHQUFJO0FBQUEsUUFDcEMsTUFBTTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsS0FBSztBQUFBLE1BQ2IsQ0FBTztBQUFBLElBQ0Y7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLFNBQVMsU0FBVSxRQUFRO0FBQ3pCLFlBQUksV0FBVyxJQUFJLEtBQUksQ0FBRTtBQUFBLE1BQzFCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsQ0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLFVBQVUsQ0FBQyxHQUFHLE9BQU87QUFBQSxJQUMvQyxhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDLEdBQUcsS0FBSztBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLE1BQ0YsU0FBUyxTQUFVLFFBQVE7QUFDekIsZUFBTyxJQUFJLFNBQVMsRUFBRTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsS0FBSztBQUFBLElBQ3RCLGFBQWE7QUFBQSxJQUNiLElBQUk7QUFBQSxNQUNGLFNBQVMsU0FBVSxRQUFRO0FBQ3pCLGVBQU8sSUFBSSxRQUFRLE1BQU07QUFBQSxNQUMxQjtBQUFBLElBQ0Y7QUFBQSxFQUNMLEdBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksYUFBYSxJQUFJLGNBQWM7QUFBQSxJQUNuRCxNQUFNO0FBQUEsRUFDUCxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLE1BQ0YsU0FBUyxTQUFVLFFBQVE7QUFDekIsZUFBTyxJQUFJLFNBQVMsQ0FBQztBQUFBLE1BQ3RCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsQ0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLE9BQU87QUFBQSxJQUNkLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUMsR0FBRyxPQUFPO0FBQUEsSUFDWixhQUFhO0FBQUEsRUFDakIsR0FBSyxJQUFJLEdBQUcsSUFBSSxZQUFZLFNBQVUsT0FBTyxRQUFPO0FBQ2hELFdBQU8sR0FBRyxRQUFRO0FBQUEsTUFDaEIsT0FBTyxJQUFJLGNBQWMsTUFBSztBQUFBLE1BQzlCLElBQUk7QUFBQSxRQUNGLFNBQVMsU0FBVSxRQUFRO0FBQ3pCLGlCQUFPLElBQUksWUFBWSxNQUFLO0FBQUEsUUFDN0I7QUFBQSxNQUNGO0FBQUEsSUFDUCxHQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNwQyxDQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLFNBQVMsQ0FBQyxHQUFHLE9BQU87QUFBQSxJQUNsRCxhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDLEdBQUcsS0FBSztBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLE1BQ0YsU0FBUyxTQUFVLFFBQVE7QUFDekIsZUFBTyxJQUFJLFdBQVcsRUFBRTtBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsQ0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxlQUFlLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLO0FBQUEsSUFDOUUsYUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLE1BQ0YsU0FBUyxTQUFVLFFBQVE7QUFDekIsZUFBTyxJQUFJLFdBQVcsQ0FBQztBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsQ0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLE9BQU87QUFBQSxJQUNkLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUMsR0FBRyxPQUFPO0FBQUEsSUFDWixhQUFhO0FBQUEsRUFDZCxHQUFFLElBQUksR0FBRyxJQUFJLFdBQVcsU0FBVSxNQUFNO0FBQ3ZDLFdBQU8sR0FBRyxRQUFRO0FBQUEsTUFDaEIsT0FBTyxJQUFJLGFBQWEsSUFBSTtBQUFBLE1BQzVCLElBQUk7QUFBQSxRQUNGLFNBQVMsU0FBVSxRQUFRO0FBQ3pCLGlCQUFPLElBQUksV0FBVyxJQUFJO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBQUEsSUFDUCxHQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDMUIsQ0FBQSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUksQ0FBQSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QjtBQUVBLElBQUlDLG9CQUFrQixDQUFBO0FBQ3RCRCxTQUFPLGdCQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM0Q3ZCLE1BQUFFLGtCQUFBO0FBQUEsRUFDQSxPQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxNQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLFFBQUE7QUFBQSxJQUNBLGNBQUEsRUFBQSxNQUFBLFVBQUEsU0FBQSxNQUFBLE1BQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxNQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFVBQUEsRUFBQSxjQUFBLGVBQUEsZUFBQSxLQUFBLE1BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQUEsQ0FBQTtBQUFBLE1BQ0EsV0FBQSxDQUFBO0FBQUEsTUFDQSxjQUNBLEtBQUEsU0FFQSxTQUFBLElBQUEsS0FBQSxHQUFBLEVBQUEsTUFBQSxHQUFBLFFBQUEsR0FBQSxRQUFBLEdBQUE7QUFBQSxNQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxjQUFBO0FBQUEsSUFDQSxjQUFBO0FBQUEsSUFFQSxNQUFBLFFBQUEsUUFBQTtBQUNBLFVBQUEsQ0FBQSxXQUFBLENBQUEsUUFBQTtBQUNBLGFBQUEsZUFBQSxVQUFBLElBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxLQUFBLE1BQUE7QUFDQSxXQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsZ0JBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxjQUFBLE9BQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSw2QkFDQSxLQUFBLFNBQUEsVUFBQSxLQUFBLE1BQUEsU0FBQSxLQUNBLEtBQUEsYUFBQSxZQUFBLE1BQUEsS0FBQSxNQUFBLFlBQUE7QUFBQSxRQUNBLDhCQUNBLFVBQUEsS0FBQSxhQUFBLFNBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxNQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsNkJBQ0EsS0FBQSxTQUFBLFNBQUEsS0FBQSxNQUFBLFlBQUE7QUFBQSxRQUNBLDhCQUNBLFNBQUEsS0FBQSxhQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxXQUFBO0FBQ0EsV0FBQSxlQUFBLFNBQUEsS0FBQSxjQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBLE1BQUE7QUFDQSxXQUFBLFFBQUE7QUFBQSxRQUNBLE1BQUEsS0FBQSxhQUFBLFlBQUEsSUFBQSxPQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxNQUFBO0FBQ0EsV0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQSxNQUFBO0FBQ0EsWUFBQSxFQUFBLGlCQUFBO0FBQ0EsWUFBQSxFQUFBLE1BQUEsVUFBQSxLQUFBLGFBQ0EsYUFBQSxZQUFBLEdBQ0EsYUFBQSxTQUFBLElBQUEsSUFDQTtBQUNBLFdBQUEsUUFBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLEtBQUEsS0FBQSxJQUNBLEtBQUEsWUFBQSxNQUFBLEtBQUEsR0FDQSxLQUFBLGFBQUEsUUFBQSxDQUNBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQSxNQUFBO0FBQ0EsV0FBQSxRQUFBO0FBQUEsUUFDQSxNQUFBLEtBQUEsYUFBQSxZQUFBLElBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBLE1BQUEsT0FBQSxPQUFBLE9BQUE7QUFDQSxVQUFBLFVBQUEsWUFBQTtBQUNBLFlBQUEsTUFBQTtBQUNBLGVBQUEsUUFBQTtBQUFBLFlBQ0EsTUFBQSxLQUFBLFlBQUE7QUFBQSxZQUNBLE9BQUEsS0FBQSxTQUFBO0FBQUEsWUFDQSxLQUFBLEtBQUEsUUFBQTtBQUFBLFVBQ0EsQ0FBQTtBQUFBLFFBQ0EsT0FBQTtBQUNBLGVBQUEsZUFBQTtBQUFBLFFBQ0E7QUFDQSxhQUFBLE1BQUEsU0FBQSxLQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQSxPQUFBO0FBQ0EsV0FBQSxRQUFBLEtBQUE7QUFDQSxXQUFBLFFBQUEsRUFBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQSxNQUFBO0FBQ0EsV0FBQSxRQUFBLE9BQUE7QUFDQSxXQUFBLFFBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxNQUFBLE9BQUE7QUFDQSxVQUFBLFFBQUEsSUFBQTtBQUNBO0FBQ0EsZ0JBQUE7QUFBQSxNQUNBLFdBQUEsUUFBQSxHQUFBO0FBQ0E7QUFDQSxnQkFBQTtBQUFBLE1BQ0E7QUFDQSxhQUFBLEVBQUEsTUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxNQUFBLEVBQUEsTUFBQSxPQUFBLE9BQUE7QUFDQSxhQUFBLEtBQUEsZUFBQSxLQUFBLFFBQUE7QUFBQSxRQUNBLE1BQUEsUUFBQTtBQUFBLFFBQ0EsT0FBQSxTQUFBO0FBQUEsUUFDQSxLQUFBLE9BQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBLE1BQUE7QUFDQSxZQUFBLE9BQUEsS0FBQSxxQkFBQSxLQUFBLFlBQUEsQ0FBQTtBQUNBLGFBQUEsR0FBQSxlQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBLE1BQUEsT0FBQTtBQUNBLFlBQUEsY0FBQSxDQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxFQUFBO0FBRUEsYUFBQSxVQUFBLEtBQUEsRUFBQSxRQUFBLFFBQUEsQ0FBQSxRQUFBLE1BQUEsT0FBQSxPQUNBLEtBQ0EsWUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHFCQUFBLE1BQUE7QUFDQSxZQUFBLFVBQUEsS0FBQSxTQUFBO0FBQ0EsYUFBQSxDQUFBLEdBQUEsUUFBQSxNQUFBLEdBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUEsRUFBQSxLQUFBLEtBQUEsU0FBQTtBQUNBLFlBQUEsRUFBQSxhQUFBLGlCQUFBO0FBQ0EsVUFBQSxPQUFBLEtBQUE7QUFDQSxnQkFBQTtBQUFBLGVBQ0E7QUFDQSxpQkFBQSxRQUFBO0FBQUEsY0FDQSxLQUFBLGFBQUEsUUFBQSxJQUFBLE1BQUEsTUFBQTtBQUFBLFlBQ0EsQ0FBQTtBQUNBO0FBQUEsZUFDQTtBQUNBLGlCQUFBLFFBQUE7QUFBQSxjQUNBLE9BQUEsYUFBQSxTQUFBLElBQUEsTUFBQSxNQUFBO0FBQUEsWUFDQSxDQUFBO0FBQ0E7QUFBQSxlQUNBO0FBQ0EsaUJBQUEsUUFBQTtBQUFBLGNBQ0EsTUFBQSxhQUFBLFlBQUEsSUFBQSxNQUFBLE1BQUE7QUFBQSxZQUNBLENBQUE7QUFDQTtBQUFBO0FBRUEsZUFBQTtBQUFBLE1BQ0EsV0FBQSxPQUFBO0FBQ0EsZ0JBQUE7QUFBQSxlQUNBO0FBQ0EsaUJBQUEsV0FBQSxZQUFBO0FBQ0E7QUFBQSxlQUNBO0FBQ0EsaUJBQUEsUUFBQSxLQUFBO0FBQ0E7QUFBQSxlQUNBO0FBQ0EsaUJBQUEsUUFBQSxPQUFBO0FBQ0E7QUFBQTtBQUVBLGVBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsa0JBQUE7QUFDQSxXQUFBLFlBQUEsQ0FBQTtBQUNBLFdBQUEsWUFBQSxDQUFBO0FBRUEsWUFBQSxFQUFBLGlCQUFBO0FBQ0EsWUFBQSxPQUFBLGFBQUEsWUFBQTtBQUNBLFlBQUEsUUFBQSxhQUFBLFNBQUE7QUFDQSxZQUFBLFlBQUEsS0FBQSxxQkFBQSxJQUFBO0FBQ0EsZUFBQSxJQUFBLEdBQUEsSUFBQSxJQUFBLEtBQUE7QUFDQSxhQUFBLFVBQUEsS0FBQSxZQUFBLENBQUE7QUFBQSxNQUNBO0FBQ0EsWUFBQSxvQkFBQSxJQUFBLEtBQUEsTUFBQSxPQUFBLENBQUE7QUFDQSxVQUFBLGVBQUEsa0JBQUEsT0FBQSxJQUFBO0FBQ0EsVUFBQSxpQkFBQSxHQUFBO0FBQ0EsdUJBQUE7QUFBQSxNQUNBO0FBQ0EsWUFBQSxXQUFBLEtBQUEsWUFBQSxNQUFBLEtBQUE7QUFDQSxVQUFBLGVBQUEsR0FBQTtBQUNBLGNBQUEsWUFBQSxLQUFBLGFBQUEsTUFBQSxRQUFBLENBQUE7QUFDQSxjQUFBLG9CQUFBLEtBQUEsWUFDQSxVQUFBLE1BQ0EsVUFBQSxLQUNBO0FBQ0EsaUJBQUEsSUFBQSxHQUFBLElBQUEsY0FBQSxLQUFBO0FBQ0EsZ0JBQUEsTUFBQSxvQkFBQSxlQUFBLElBQUE7QUFDQSxnQkFBQSxPQUFBLElBQUEsS0FBQSxVQUFBLE1BQUEsVUFBQSxPQUFBLEdBQUE7QUFDQSxlQUFBLFVBQUEsS0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLE9BQUEsS0FBQSxhQUFBLElBQUEsSUFBQSxhQUFBO0FBQUEsVUFDQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFFQSxZQUFBLFFBQUEsSUFBQSxLQUFBO0FBQ0EsZUFBQSxJQUFBLEdBQUEsS0FBQSxVQUFBLEtBQUE7QUFDQSxjQUFBLE9BQUEsSUFBQSxLQUFBLE1BQUEsT0FBQSxDQUFBO0FBQ0EsY0FBQSxRQUFBLFdBQUEsU0FDQSxNQUFBLFFBQUEsTUFBQSxLQUNBLE1BQUEsWUFBQSxNQUFBLFFBQ0EsTUFBQSxTQUFBLE1BQUE7QUFDQSxjQUFBLFFBQUEsTUFBQSxLQUFBLEtBQUEsSUFBQSxXQUNBLE1BQUEsS0FBQSxJQUFBLFVBQ0EsS0FBQSxhQUFBLElBQUEsSUFBQSxhQUNBLE1BQUEsWUFBQSxJQUFBLFlBQ0E7QUFDQSxhQUFBLFVBQUEsS0FBQTtBQUFBLFVBQ0EsTUFBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDQSxDQUFBO0FBQUEsTUFDQTtBQUVBLFlBQUEsZ0JBQUEsS0FBQSxLQUFBLFVBQUE7QUFDQSxVQUFBLGdCQUFBLEdBQUE7QUFDQSxjQUFBLFlBQUEsS0FBQSxhQUFBLE1BQUEsUUFBQSxDQUFBO0FBQ0EsaUJBQUEsSUFBQSxHQUFBLEtBQUEsZUFBQSxLQUFBO0FBQ0EsZ0JBQUEsT0FBQSxJQUFBLEtBQUEsVUFBQSxNQUFBLFVBQUEsT0FBQSxDQUFBO0FBQ0EsZ0JBQUEsUUFBQSxLQUFBLGFBQUEsSUFBQSxJQUFBLGFBQUE7QUFDQSxlQUFBLFVBQUEsS0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBO0FB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SUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0Esc0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsTUFBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLE1BQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFdBQUEsS0FBQTtBQUFBLE1BQ0EsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxlQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EseUJBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsWUFBQSxVQUFBO0FBQUEsUUFDQSxDQUFBLGNBQUEsVUFBQSxLQUFBLFNBQUEsTUFBQTtBQUFBLE1BQ0E7QUFDQSxVQUFBLEtBQUEsYUFBQTtBQUNBLGdCQUFBLEtBQUEsZUFBQTtBQUFBLE1BQ0E7QUFDQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUEsS0FBQSxTQUFBLFlBQUEsS0FBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLEtBQUEsTUFBQTtBQUNBLFdBQUEsWUFBQSxRQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBLFFBQUEsUUFBQTtBQUNBLFVBQUEsQ0FBQSxXQUFBLENBQUEsUUFBQTtBQUNBLGFBQUEsTUFBQSxlQUFBLE1BQUE7QUFDQSxZQUFBLFFBQUE7QUFDQSxlQUFBLFVBQUEsTUFBQSxLQUFBLGVBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxVQUFBLEVBQUEsU0FBQSxVQUFBLEtBQUE7QUFDQSxRQUFBLEtBQUEsWUFBQSxTQUFBO0FBQ0EsWUFBQSxTQUFBLFFBQUEsY0FBQSxpQkFBQTtBQUNBLFVBQUEsUUFBQTtBQUNBLGFBQUEsY0FBQSxVQUFBLFFBQUE7QUFBQSxVQUNBLE9BQUEsTUFBQTtBQUNBLGlCQUFBLFlBQUE7QUFBQSxVQUNBO0FBQUEsVUFDQSxNQUFBLE1BQUE7QUFDQSxpQkFBQSxZQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBRUEsUUFBQSxLQUFBLHdCQUFBLENBQUEsS0FBQSxZQUFBO0FBSUEsV0FBQSxjQUFBLFVBQUEsUUFBQTtBQUFBLFFBQ0EsU0FBQSxXQUFBO0FBQ0EsY0FDQSxLQUFBLGFBQ0EsQ0FBQSxNQUFBLFNBQUEsTUFBQSxNQUFBLEtBQ0EsQ0FBQSxRQUFBLFNBQUEsTUFBQSxNQUFBLEdBQ0E7QUFDQSxpQkFBQSxZQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUVBLE1BQUEsTUFBQTtBQUNBLGVBQUEsWUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBRUEsUUFBQSxLQUFBLFlBQUE7QUFDQSxXQUFBLFlBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsWUFBQSxLQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsZ0JBQUE7O0FBQ0EsZUFBQSxnQkFBQSxtQkFBQTtBQUNBLGVBQUEsZ0JBQUEsbUJBQUE7QUFDQSxTQUFBLGtCQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsaUJBQUE7QUFDQSxZQUFBLEVBQUEsU0FBQSxVQUFBLEtBQUE7QUFDQSxVQUFBLEtBQUEsUUFBQSxNQUFBLGdCQUFBLEdBQUE7QUFDQSxtQkFBQSxNQUFBLEtBQUEsZUFBQSxHQUFBLENBQUE7QUFDQTtBQUFBLE1BQ0E7QUFFQSxZQUFBLFNBQUEsU0FBQSxLQUFBLE1BQUEsSUFDQSxLQUFBLE1BQUEsS0FBQSxVQUNBLEtBQUE7QUFDQSxVQUFBLFFBQUE7QUFFQSxjQUFBLEtBQUEsV0FBQSxRQUFBLFVBQUEsTUFBQTtBQUNBLFdBQUEsTUFBQSxRQUFBLGlCQUFBLE1BQUEsRUFBQTtBQUFBLE1BQ0E7QUFFQSxZQUFBLFNBQUEsV0FBQSxTQUFBLHNCQUFBO0FBQ0EsWUFBQSxjQUFBLE9BQUEsT0FBQSxPQUFBO0FBQ0EsWUFBQSxhQUFBLE9BQUEsTUFBQSxPQUFBO0FBQ0EsWUFBQSxlQUFBLE9BQUE7QUFDQSxZQUFBLGdCQUFBLE9BQUE7QUFDQSxZQUFBLGFBQUEsTUFBQTtBQUNBLFlBQUEsY0FBQSxNQUFBO0FBRUEsVUFBQSxDQUFBLE9BQUEsU0FBQSxLQUFBLGVBQUEsTUFBQSxHQUFBLEtBQUEsQ0FBQTtBQUNBLFVBQUEsS0FBQSxZQUFBO0FBQ0EsY0FBQSxXQUFBLE9BQUE7QUFDQSxjQUFBLFlBQUEsT0FBQTtBQUNBLFlBQUEsVUFBQSxPQUFBO0FBQ0EsY0FBQSxhQUFBLGFBQUE7QUFDQSxvQkFBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBLFdBQUEsVUFBQSxVQUFBO0FBQ0EsY0FBQSxZQUFBLGFBQUEsZ0JBQUEsYUFBQTtBQUNBLG9CQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0EsV0FBQSxVQUFBLFFBQUE7QUFDQSxjQUFBLGNBQUEsWUFBQTtBQUNBLG9CQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0EsV0FBQSxVQUFBLFNBQUE7QUFDQSxjQUFBLFdBQUEsY0FBQSxlQUFBLFlBQUE7QUFDQSxvQkFBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBRUEsWUFBQSxVQUFBLE9BQUE7QUFDQSxjQUFBLFlBQUEsYUFBQSxhQUFBO0FBQ0Esb0JBQUE7QUFBQSxVQUNBO0FBQUEsUUFDQSxXQUFBLFVBQUEsVUFBQTtBQUNBLGNBQUEsYUFBQSxnQkFBQSxhQUFBO0FBQ0Esb0JBQUE7QUFBQSxVQUNBO0FBQUEsUUFDQSxXQUFBLFVBQUEsUUFBQTtBQUNBLGNBQUEsV0FBQSxjQUFBLFlBQUE7QUFDQSxvQkFBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBLFdBQUEsVUFBQSxTQUFBO0FBQ0EsY0FBQSxjQUFBLGVBQUEsWUFBQTtBQUNBLG9CQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBRUEsVUFBQSxPQUFBO0FBQ0EsVUFBQSxNQUFBO0FBQ0EsY0FBQTtBQUFBLGFBQ0E7QUFDQSxpQkFBQTtBQUNBO0FBQUEsYUFDQTtBQUNBLGtCQUFBO0FBQ0E7QUFBQSxhQUNBO0FBQ0Esa0JBQUE7QUFDQTtBQUFBLGFBQ0E7QUFDQSxpQkFBQTtBQUNBO0FBQUE7QUFFQSxjQUFBO0FBQUEsYUFDQTtBQUNBLGtCQUFBLGFBQUE7QUFDQTtBQUFBLGFBQ0E7QUFDQSxpQkFBQSxjQUFBO0FBQ0E7QUFBQTtBQUVBLFVBQUEsS0FBQSxPQUFBO0FBQ0EsWUFBQSxVQUFBLE9BQUE7QUFDQSxpQkFBQTtBQUFBLFFBQ0EsV0FBQSxVQUFBLFVBQUE7QUFDQSxpQkFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQ0EsVUFBQSxVQUFBLFdBQUEsU0FBQTtBQUNBLGNBQUEsZ0JBQUEsUUFBQSxzQkFBQTtBQUNBLGdCQUFBLGNBQUEsY0FBQTtBQUNBLGVBQUEsYUFBQSxjQUFBO0FBQUEsTUFDQTtBQUNBLFlBQUEsTUFBQSxPQUFBLEdBQUE7QUFDQSxZQUFBLE1BQUEsTUFBQSxHQUFBO0FBRUEsV0FBQSxNQUFBLG1CQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLFdBQUEsS0FBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxVQUFBLENBQUEsS0FBQSxVQUFBO0FBQ0EsYUFBQSxZQUFBLENBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBLE9BQUE7QUFDQSxVQUFBLENBQUEsS0FBQSxVQUFBO0FBQ0EscUJBQUEsS0FBQSxlQUFBO0FBQ0EsWUFBQSxPQUFBO0FBQ0EsZUFBQSxZQUFBO0FBQUEsUUFDQSxPQUFBO0FBQ0EsY0FBQSxLQUFBLFdBQUE7QUFDQSxpQkFBQSxrQkFBQSxXQUFBLE1BQUE7QUFDQSxtQkFBQSxZQUFBO0FBQUEsWUFDQSxHQUFBLEtBQUEsU0FBQTtBQUFBLFVB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LENBQUEsUUFBQTtBQUNBLGFBQUEsZUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBLE1BQUE7QUFDQSxVQUFBLENBQUEsU0FBQSxDQUFBLEtBQUEsT0FBQTtBQUNBLGFBQUEsVUFBQTtBQUNBLGFBQUEsTUFBQSxTQUFBLElBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsS0FBQSxNQUFBO0FBQ0EsV0FBQSxZQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxhQUFBLE1BQUEsZUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUEsUUFBQSxRQUFBO0FBQ0EsVUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsYUFBQSxNQUFBLFNBQUEsVUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxJQUFBLFFBQUEsTUFBQTtBQUNBLFVBQUEsS0FBQSxTQUFBO0FBQ0EsYUFBQSxVQUFBO0FBQ0EsYUFBQSxNQUFBLFVBQUEsS0FBQSxZQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFdBQUEsTUFBQTtBQUNBLFdBQUEsZUFBQTtBQUNBLFdBQUEsWUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUEsT0FBQTs7QUFDQSxVQUFBLFdBQUEsTUFBQSxhQUFBLG1CQUFBLFNBQUEsaUJBQUEsS0FBQSxJQUFBO0FBQ0EsY0FBQSxlQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFDQSxXQUFBLE1BQUEsTUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLFdBQUEsTUFBQSxNQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNwSkEsSUFBSUYsV0FBUyxXQUFZO0FBQ3ZCLE1B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LElBQ0EsWUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLFFBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxjQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLE1BQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxNQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxDQUFBLFFBQUEsV0FBQSxHQUFBLFNBQUEsVUFBQTtBQUFBLElBQ0EsY0FBQSxFQUFBLE1BQUEsVUFBQSxTQUFBLE1BQUEsTUFBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFVBQUEsU0FBQSxNQUFBLE1BQUE7QUFBQSxJQUNBLGdCQUFBLEVBQUEsTUFBQSxVQUFBLFNBQUEsTUFBQSxNQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0EsV0FBQSxLQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsTUFDQSxXQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsZUFDQSxHQUNBLEtBQUEsUUFBQSxLQUFBLElBQUEsS0FDQSxLQUFBLFFBQUEsS0FBQSxNQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsTUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQ0EsS0FBQSxnQkFJQSxTQUFBLElBQUEsS0FBQSxHQUFBLEVBQUEsTUFBQSxHQUFBLFFBQUEsR0FBQSxRQUFBLEdBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBO0FBQUEsTUFDQSxNQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLElBQUEsTUFBQTtBQUNBLGFBQUEsUUFBQSxFQUFBLE1BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUNBLGVBQUEsS0FBQSxZQUFBLFdBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxJQUFBLFFBQUE7QUFDQSxhQUFBLFFBQUEsRUFBQSxRQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFBQSxNQUNBLE1BQUE7QUFDQSxlQUFBLEtBQUEsWUFBQSxXQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsSUFBQSxRQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsUUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsTUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxhQUFBLGVBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxNQUFBO0FBQ0EsVUFBQSxDQUFBLFNBQUEsQ0FBQSxLQUFBLE9BQUE7QUFDQSxhQUFBLFVBQUE7QUFDQSxhQUFBLE1BQUEsU0FBQSxJQUFBO0FBQ0EsYUFBQSxVQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFBQSxJQUVBLFdBQUE7QUFBQSxJQUVBLEtBQUEsTUFBQTtBQUNBLFdBQUEsWUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUEsUUFBQSxRQUFBO0FBQ0EsVUFBQSxRQUFBO0FBQ0EsYUFBQSxnQkFBQTtBQUNBLGFBQUEsVUFBQSxDQUFBO0FBQUEsTUFDQTtBQUNBLFVBQUEsQ0FBQSxXQUFBLENBQUEsUUFBQTtBQUNBLGFBQUEsTUFBQSxlQUFBLE1BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxhQUFBLE1BQUEsU0FBQSxVQUFBLE1BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLElBQUEsUUFBQSxNQUFBO0FBQ0EsVUFBQSxLQUFBLFNBQUE7QUFDQSxhQUFBLFVBQUE7QUFDQSxhQUFBLE1BQUEsVUFBQSxLQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsUUFBQSxPQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsTUFBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxPQUFBO0FBQ0EsV0FBQSxlQUFBLFNBQUEsS0FBQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQSxRQUFBLE9BQUE7QUFDQSxVQUFBLEtBQUEsYUFBQSxPQUFBO0FBQ0EsY0FBQSxRQUFBLElBQUEsS0FBQTtBQUNBLGFBQUEsVUFBQSxNQUFBLGFBQUEsS0FBQSxNQUFBLE9BQUEsT0FBQSxRQUFBLENBQUEsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBLFdBQUEsS0FBQTtBQUNBLFlBQUEsU0FBQSxDQUFBLEtBQUEsVUFBQTtBQUNBLGNBQUEsU0FBQSxLQUFBLE1BQUE7QUFDQSxZQUFBLFFBQUE7QUFFQSxnQkFBQSxhQUFBLE9BQUEsZUFBQSxRQUFBLFNBQUEsU0FBQTtBQUNBLG1CQUFBLFFBQUEsS0FBQSxNQUFBLFFBQUEsVUFBQSxHQUFBLFFBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUNBLFdBQUEsVUFBQSxNQUFBO0FBQ0EsZUFBQSxRQUFBLEtBQUEsSUFBQTtBQUNBLGVBQUEsVUFBQSxLQUFBLE1BQUE7QUFDQSxlQUFBLFVBQUEsS0FBQSxNQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQSxPQUFBO0FBQ0EsWUFBQSxXQUFBLENBQUEsUUFBQSxVQUFBLFFBQUEsRUFBQSxLQUFBO0FBQ0EsVUFBQSxVQUFBO0FBQ0EsY0FBQSxFQUFBLEtBQUEsS0FBQSxVQUFBLGlCQUFBLEtBQUE7QUFDQSxZQUFBLEtBQUE7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QUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsV0FBQSxDQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxpQkFBQSxLQUFBO0FBQUEsTUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsUUFBQTtBQUNBLGFBQUEsTUFBQSxjQUFBLEtBQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxhQUFBLEtBQUEsSUFBQSxLQUFBLFFBQUEsS0FBQSxrQkFBQSxHQUFBLEtBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxPQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFFQSxLQUFBLE1BQUE7QUFDQSxXQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBLFVBQUE7QUFDQSxXQUFBLGtCQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUEsaUJBQUE7QUFDQSxXQUFBLFdBQUEsS0FBQSxLQUFBLEtBQUEsUUFBQSxlQUFBO0FBQ0EsVUFBQSxLQUFBLGNBQUEsS0FBQSxVQUFBO0FBQ0EsYUFBQSxjQUFBLEtBQUE7QUFBQSxNQUNBO0FBQ0EsV0FBQSxnQkFBQTtBQUNBLFdBQUEsTUFBQSxlQUFBLEtBQUEsTUFBQSxlQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLFdBQUEsUUFBQTtBQUNBLGFBQUEsZ0JBQUE7QUFDQSxhQUFBLE1BQUEsZUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxjQUFBLEtBQUE7QUFDQSxTQUFBLGtCQUFBLEtBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxnQkFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFlBQUEsTUFBQTtBQUNBLFVBQUEsS0FBQSxTQUFBLENBQUEsS0FBQSxZQUFBLEtBQUEsVUFBQSxLQUFBLGFBQUE7QUFDQSxhQUFBLGNBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBLE1BQUE7QUFDQSxZQUFBLFVBQUE7QUFBQSxRQUNBLGlCQUFBLEtBQUE7QUFBQSxNQUNBO0FBQ0EsVUFBQSxLQUFBLE1BQUE7QUFDQSxnQkFBQSxlQUFBLEtBQUEsVUFBQTtBQUFBLE1BQ0E7QUFDQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsa0JBQUE7QUFDQSxZQUFBLEVBQUEsVUFBQSxVQUFBLE9BQUEsaUJBQUEsZ0JBQUE7QUFDQSxZQUFBLGFBQUEsV0FBQSxXQUFBO0FBQ0EsWUFBQSxXQUFBLEtBQUEsV0FBQSxLQUFBLEtBQUEsUUFBQSxlQUFBO0FBRUEsVUFBQSxRQUFBO0FBQ0EsVUFBQSxNQUFBO0FBQ0EsVUFBQSxZQUFBLFlBQUE7QUFDQSxjQUFBO0FBQUEsTUFDQSxXQUFBLGVBQUEsV0FBQSxHQUFBO0FBQ0EsY0FBQTtBQUFBLE1BQ0EsV0FBQSxlQUFBLFdBQUEsVUFBQTtBQUNBLGNBQUE7QUFDQSxnQkFBQSxXQUFBLGFBQUE7QUFBQSxNQUNBLE9BQUE7QUFDQSxnQkFBQSxjQUFBO0FBQ0EsY0FBQSxjQUFBO0FBQUEsTUFDQTtBQUVBLFlBQUEsWUFBQSxDQUFBO0FBQ0EsZ0JBQUEsS0FBQTtBQUFBLFFBQ0EsT0FBQSxjQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxVQUFBLGVBQUE7QUFBQSxNQUNBLENBQUE7QUFDQSxVQUFBLFNBQUEsR0FBQTtBQUNBLGtCQUFBLEtBQUEsRUFBQSxPQUFBLEdBQUEsTUFBQSxHQUFBO0FBQUEsTUFDQTtBQUNBLFVBQUEsUUFBQSxHQUFBO0FBQ0Esa0JBQUEsS0FBQTtBQUFBLFVBQ0EsT0FBQSxLQUFBLElBQUEsR0FBQSxjQUFBLEVBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQ0EsZUFBQSxJ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