@bryntum/calendar-angular-thin 7.1.1

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.
Files changed (46) hide show
  1. package/README.md +44 -0
  2. package/bryntum-calendar-angular-thin.d.ts +5 -0
  3. package/bundles/bryntum-calendar-angular-thin.umd.js +22195 -0
  4. package/bundles/bryntum-calendar-angular-thin.umd.js.map +1 -0
  5. package/esm2015/bryntum-calendar-angular-thin.js +5 -0
  6. package/esm2015/lib/bryntum-agenda-view.component.js +2503 -0
  7. package/esm2015/lib/bryntum-calendar-date-picker.component.js +1045 -0
  8. package/esm2015/lib/bryntum-calendar-project-model.component.js +369 -0
  9. package/esm2015/lib/bryntum-calendar.component.js +2355 -0
  10. package/esm2015/lib/bryntum-day-agenda-view.component.js +1338 -0
  11. package/esm2015/lib/bryntum-day-resource-view.component.js +1347 -0
  12. package/esm2015/lib/bryntum-day-view.component.js +1323 -0
  13. package/esm2015/lib/bryntum-event-list.component.js +2453 -0
  14. package/esm2015/lib/bryntum-mode-selector.component.js +702 -0
  15. package/esm2015/lib/bryntum-month-agenda-view.component.js +1201 -0
  16. package/esm2015/lib/bryntum-month-grid.component.js +1262 -0
  17. package/esm2015/lib/bryntum-month-view.component.js +1337 -0
  18. package/esm2015/lib/bryntum-range-menu.component.js +884 -0
  19. package/esm2015/lib/bryntum-resource-view.component.js +1068 -0
  20. package/esm2015/lib/bryntum-week-view.component.js +1323 -0
  21. package/esm2015/lib/bryntum-year-view.component.js +1163 -0
  22. package/esm2015/lib/calendar.module.js +99 -0
  23. package/esm2015/lib/wrapper.helper.js +74 -0
  24. package/esm2015/public-api.js +21 -0
  25. package/fesm2015/bryntum-calendar-angular-thin.js +21714 -0
  26. package/fesm2015/bryntum-calendar-angular-thin.js.map +1 -0
  27. package/lib/bryntum-agenda-view.component.d.ts +2953 -0
  28. package/lib/bryntum-calendar-date-picker.component.d.ts +1525 -0
  29. package/lib/bryntum-calendar-project-model.component.d.ts +399 -0
  30. package/lib/bryntum-calendar.component.d.ts +2577 -0
  31. package/lib/bryntum-day-agenda-view.component.d.ts +1960 -0
  32. package/lib/bryntum-day-resource-view.component.d.ts +2025 -0
  33. package/lib/bryntum-day-view.component.d.ts +1980 -0
  34. package/lib/bryntum-event-list.component.d.ts +2888 -0
  35. package/lib/bryntum-mode-selector.component.d.ts +851 -0
  36. package/lib/bryntum-month-agenda-view.component.d.ts +1765 -0
  37. package/lib/bryntum-month-grid.component.d.ts +1731 -0
  38. package/lib/bryntum-month-view.component.d.ts +1897 -0
  39. package/lib/bryntum-range-menu.component.d.ts +1130 -0
  40. package/lib/bryntum-resource-view.component.d.ts +1512 -0
  41. package/lib/bryntum-week-view.component.d.ts +1980 -0
  42. package/lib/bryntum-year-view.component.d.ts +1661 -0
  43. package/lib/calendar.module.d.ts +22 -0
  44. package/lib/wrapper.helper.d.ts +26 -0
  45. package/package.json +33 -0
  46. package/public-api.d.ts +17 -0
@@ -0,0 +1,1323 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /**
3
+ * Angular wrapper for Bryntum WeekView
4
+ */
5
+ import { Component, EventEmitter, Output, Input } from '@angular/core';
6
+ import WrapperHelper from './wrapper.helper';
7
+ import { Widget } from '@bryntum/core-thin';
8
+ import { WeekView } from '@bryntum/calendar-thin';
9
+ import * as i0 from "@angular/core";
10
+ export class BryntumWeekViewComponent {
11
+ constructor(element) {
12
+ this.bryntumConfig = {
13
+ adopt: undefined,
14
+ appendTo: undefined,
15
+ href: undefined,
16
+ angularComponent: this,
17
+ features: {},
18
+ listeners: {}
19
+ };
20
+ // Events emitters
21
+ /**
22
+ * This event fires whenever the [autoCreate gesture](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate) is detected
23
+ * and also when a [drag-create](https://bryntum.com/products/calendar/docs/api/Calendar/feature/CalendarDrag) gesture is detected.
24
+ * ...
25
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/WeekView#event-beforeAutoCreate)
26
+ * @param {object} event Event object
27
+ * @param {Event} event.domEvent The DOM event which initiated the creation.
28
+ * @param {Date} event.date *DEPRECATED in favour of `startDate`.* The starting time of the event to be created. If this is in a `DayView`, this will be snapped according to the specification in [autoCreate](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate)
29
+ * @param {Date} event.startDate The starting time of the event to be created. If this is in a `DayView`, this will be snapped according to the specification in [autoCreate](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate)
30
+ * @param {Date} event.endDate The ending time of the event to be created.
31
+ * @param {Scheduler.model.ResourceModel} event.resourceRecord The resource if the UI includes a resource.
32
+ * @param {CalendarView} event.view This view.
33
+ */
34
+ this.onBeforeAutoCreate = new EventEmitter();
35
+ /**
36
+ * Triggered before a view's orientating date changes.
37
+ * ...
38
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/WeekView#event-beforeChangeDate)
39
+ * @param {object} event Event object
40
+ * @param {Date} event.oldDate The current orientating date of this view.
41
+ * @param {Date} event.date The new date to which this view is to be orientated.
42
+ */
43
+ this.onBeforeChangeDate = new EventEmitter();
44
+ /**
45
+ * Fires before an object is destroyed.
46
+ * @param {object} event Event object
47
+ * @param {Core.Base} event.source The Object that is being destroyed.
48
+ */
49
+ this.onBeforeDestroy = new EventEmitter();
50
+ /**
51
+ * Triggered before a widget is hidden. Return `false` to prevent the action.
52
+ * @param {object} event Event object
53
+ * @param {Core.widget.Widget} event.source The widget being hidden.
54
+ */
55
+ this.onBeforeHide = new EventEmitter();
56
+ /**
57
+ * Triggered before a new [responsiveState](https://bryntum.com/products/calendar/docs/api/Core/widget/mixin/Responsive#config-responsiveState) is applied.
58
+ * @param {object} event Event object
59
+ * @param {Core.widget.Widget} event.source The widget whose `responsiveState` is to be changed
60
+ * @param {string} event.state The new value for the widget's `responsiveState`
61
+ * @param {string} event.oldState The previous value for the widget's `responsiveState`
62
+ */
63
+ this.onBeforeResponsiveStateChange = new EventEmitter();
64
+ /**
65
+ * Fired before this container will load record values into its child fields. This is useful if you
66
+ * want to modify the UI before data is loaded (e.g. set some input field to be readonly)
67
+ * @param {object} event Event object
68
+ * @param {Core.widget.Container} event.source The container
69
+ * @param {Core.data.Model} event.record The record
70
+ */
71
+ this.onBeforeSetRecord = new EventEmitter();
72
+ /**
73
+ * Triggered before a widget is shown. Return `false` to prevent the action.
74
+ * @param {object} event Event object
75
+ * @param {Core.widget.Widget,any} event.source The widget being shown
76
+ */
77
+ this.onBeforeShow = new EventEmitter();
78
+ /**
79
+ * Fired before state is applied to the source. Allows editing the state object or preventing the operation.
80
+ * @param {object} event Event object
81
+ * @param {any} event.state State object config
82
+ */
83
+ this.onBeforeStateApply = new EventEmitter();
84
+ /**
85
+ * Fired before state is saved by the StateProvider. Allows editing the state object or preventing the operation.
86
+ * @param {object} event Event object
87
+ * @param {any} event.state State object config
88
+ */
89
+ this.onBeforeStateSave = new EventEmitter();
90
+ /**
91
+ * Fires when any other event is fired from the object.
92
+ * ...
93
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/WeekView#event-catchAll)
94
+ * @param {object} event Event object
95
+ * @param {{[key: string]: any, type: string}} event.event The Object that contains event details
96
+ * @param {string} event.event.type The type of the event which is caught by the listener
97
+ */
98
+ this.onCatchAll = new EventEmitter();
99
+ /**
100
+ * Fired when a new set of events has been gathered for this view's date range.
101
+ * @param {object} event Event object
102
+ * @param {Map<any, any>} event.cellMap The map of date keys to [day cell](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/DayCellCollecter#typedef-DayCell) data blocks.
103
+ */
104
+ this.onCellMapPopulated = new EventEmitter();
105
+ /**
106
+ * Fires when a Panel is collapsed using the [collapsible](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-collapsible) setting.
107
+ * @param {object} event Event object
108
+ * @param {Core.widget.Panel} event.source This Panel.
109
+ */
110
+ this.onCollapse = new EventEmitter();
111
+ /**
112
+ * Fired after one day cell's events are collected in sorted order according to the
113
+ * [eventSorter](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-eventSorter)
114
+ * ...
115
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/WeekView#event-dayCellPopulated)
116
+ * @param {object} event Event object
117
+ * @param {Scheduler.model.EventModel[]} event.events The events to be shown for the passed date
118
+ * @param {Date} event.The date the events are to be shown in.
119
+ */
120
+ this.onDayCellPopulated = new EventEmitter();
121
+ /**
122
+ * Fires when an object is destroyed.
123
+ * @param {object} event Event object
124
+ * @param {Core.Base} event.source The Object that is being destroyed.
125
+ */
126
+ this.onDestroy = new EventEmitter();
127
+ /**
128
+ * Fires when a field is mutated and the state of the [hasChanges](https://bryntum.com/products/calendar/docs/api/Core/widget/Container#property-hasChanges) property changes
129
+ * @param {object} event Event object
130
+ * @param {Core.widget.Container} event.source The container.
131
+ * @param {boolean} event.dirty The dirty state of the Container - `true` if there are any fields which have been changed since initial load.
132
+ */
133
+ this.onDirtyStateChange = new EventEmitter();
134
+ /**
135
+ * Triggered when a widget's [element](https://bryntum.com/products/calendar/docs/api/Core/widget/Widget#property-element) is available.
136
+ * @param {object} event Event object
137
+ * @param {HTMLElement} event.element The Widget's element.
138
+ */
139
+ this.onElementCreated = new EventEmitter();
140
+ /**
141
+ * Fired when an [autoCreate](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate) gesture has created a new event
142
+ * and added it to the event store.
143
+ * ...
144
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/WeekView#event-eventAutoCreated)
145
+ * @param {object} event Event object
146
+ * @param {CalendarView} event.source This Calendar view instance.
147
+ * @param {Scheduler.model.EventModel} event.eventRecord The new event record.
148
+ */
149
+ this.onEventAutoCreated = new EventEmitter();
150
+ /**
151
+ * Fires when a day spanning event is found, and the date to which its encapsulating event bar
152
+ * extends has been calculated.
153
+ * ...
154
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/WeekView#event-eventPropagate)
155
+ * @param {object} event Event object
156
+ * @param {Date} event.eventEndDate The end date for which to calculate the propagate end date.
157
+ * @param {Date} event.propagateEndDate The system-calculated end point of the event bar.
158
+ * @param {boolean} event.isAllDay `true` if the event is an all day event, or spans multiple days.
159
+ * @param {boolean} event.isOverflow `true` if this is being called as part of further propagation.
160
+ * @param {boolean} event.overflows `true` if the event extends into future cells.
161
+ * @param {Scheduler.model.EventModel} event.eventRecord The event record being propagated.
162
+ * @param {Date} event.date The date from which the event is being propagated.
163
+ */
164
+ this.onEventPropagate = new EventEmitter();
165
+ /**
166
+ * Fires when a Panel is expanded using the [collapsible](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-collapsible) setting.
167
+ * @param {object} event Event object
168
+ * @param {Core.widget.Panel} event.source This Panel.
169
+ */
170
+ this.onExpand = new EventEmitter();
171
+ /**
172
+ * Fired when focus enters this Widget.
173
+ * @param {object} event Event object
174
+ * @param {Core.widget.Widget} event.source This Widget
175
+ * @param {HTMLElement} event.fromElement The element which lost focus.
176
+ * @param {HTMLElement} event.toElement The element which gained focus.
177
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
178
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
179
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
180
+ */
181
+ this.onFocusIn = new EventEmitter();
182
+ /**
183
+ * Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
184
+ * focus moving from within this Widget's ownership tree, even if there are floating widgets
185
+ * will not trigger this event. This is when focus exits this widget completely.
186
+ * @param {object} event Event object
187
+ * @param {Core.widget.Widget} event.source This Widget
188
+ * @param {HTMLElement} event.fromElement The element which lost focus.
189
+ * @param {HTMLElement} event.toElement The element which gained focus.
190
+ * @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
191
+ * @param {Core.widget.Widget} event.toWidget The widget which gained focus.
192
+ * @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
193
+ */
194
+ this.onFocusOut = new EventEmitter();
195
+ /**
196
+ * Triggered after a widget was hidden
197
+ * @param {object} event Event object
198
+ * @param {Core.widget.Widget} event.source The widget
199
+ */
200
+ this.onHide = new EventEmitter();
201
+ /**
202
+ * Fires when this DayView changes an aspect of its layout. This happens when changing
203
+ * [hourHeight](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#property-hourHeight), [minDayWidth](#Calendar/widget/DayView#property-minDayWidth), and when the available
204
+ * day container height changes.
205
+ * @param {object} event Event object
206
+ * @param {Calendar.widget.DayView} event.source The triggering instance.
207
+ */
208
+ this.onLayoutUpdate = new EventEmitter();
209
+ /**
210
+ * Triggered when a widget which had been in a non-visible state for any reason
211
+ * achieves visibility.
212
+ * ...
213
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/WeekView#event-paint)
214
+ * @param {object} event Event object
215
+ * @param {Core.widget.Widget} event.source The widget being painted.
216
+ * @param {boolean} event.firstPaint `true` if this is the first paint.
217
+ */
218
+ this.onPaint = new EventEmitter();
219
+ /**
220
+ * Fired when the range of dates encapsulated by this view changes.
221
+ * ...
222
+ * [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/WeekView#event-rangeChange)
223
+ * @param {object} event Event object
224
+ * @param {typeof DateRangeOwner} event.source This calendar view instance.
225
+ * @param {object} event.old The old date range <strong>if any</strong>.
226
+ * @param {Date} event.old.startDate the old start date.
227
+ * @param {Date} event.old.endDate the old end date.
228
+ * @param {object} event.new The new date range
229
+ * @param {Date} event.new.startDate the new start date.
230
+ * @param {Date} event.new.endDate the new end date.
231
+ */
232
+ this.onRangeChange = new EventEmitter();
233
+ /**
234
+ * Fired when a Widget's read only state is toggled
235
+ * @param {object} event Event object
236
+ * @param {boolean} event.readOnly Read only or not
237
+ */
238
+ this.onReadOnly = new EventEmitter();
239
+ /**
240
+ * This event is fired after a widget's elements have been synchronized due to a direct or indirect call
241
+ * to [recompose](https://bryntum.com/products/calendar/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
242
+ */
243
+ this.onRecompose = new EventEmitter();
244
+ /**
245
+ * Fires when this DayView refreshes.
246
+ * @param {object} event Event object
247
+ * @param {Calendar.widget.DayView} event.source The triggering instance.
248
+ */
249
+ this.onRefresh = new EventEmitter();
250
+ /**
251
+ * Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/calendar/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
252
+ * @param {object} event Event object
253
+ * @param {Core.widget.Widget} event.source This Widget
254
+ * @param {number} event.width The new width
255
+ * @param {number} event.height The new height
256
+ * @param {number} event.oldWidth The old width
257
+ * @param {number} event.oldHeight The old height
258
+ */
259
+ this.onResize = new EventEmitter();
260
+ /**
261
+ * Triggered when a new [responsiveState](https://bryntum.com/products/calendar/docs/api/Core/widget/mixin/Responsive#config-responsiveState) is applied.
262
+ * @param {object} event Event object
263
+ * @param {Core.widget.Widget} event.source The widget whose `responsiveState` has changed
264
+ * @param {string} event.state The new value for the widget's `responsiveState`
265
+ * @param {string} event.oldState The previous value for the widget's `responsiveState`
266
+ */
267
+ this.onResponsiveStateChange = new EventEmitter();
268
+ /**
269
+ * Fired when the [shiftIncrement](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/DateRangeOwner#property-shiftIncrement) of this view changes.
270
+ * @param {object} event Event object
271
+ * @param {object} event.old The shift increment *if any*.
272
+ * @param {object} event.new The shift increment
273
+ */
274
+ this.onShiftIncrementChange = new EventEmitter();
275
+ /**
276
+ * Triggered after a widget is shown.
277
+ * @param {object} event Event object
278
+ * @param {Core.widget.Widget} event.source The widget
279
+ */
280
+ this.onShow = new EventEmitter();
281
+ /**
282
+ * Triggered when changing the [hourHeight](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#property-hourHeight) causes an
283
+ * [hour height breakpoint](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#config-hourHeightBreakpoints) to be crossed
284
+ * and the displayed subTick intervals in the time axis change.
285
+ * @param {object} event Event object
286
+ * @param {object} event.old The old hour height tick resolution object.
287
+ * @param {number} event.old.level The level `0` to `4` where `0` is the default with no subTick times displayed, and `4` means every 5 minute time is displayed.
288
+ * @param {string} event.old.step The time duration of visible subTicks. This is a string in the format required by [parseDuration](https://bryntum.com/products/calendar/docs/api/Core/helper/DateHelper#function-parseDuration-static)
289
+ * @param {object} event.new The new hour height tick resolution object.
290
+ * @param {number} event.new.level The level `0` to `4` where `0` is the default with no subTick times displayed, and `4` means every 5 minute time is displayed.
291
+ * @param {string} event.new.step The time duration of visible subTicks. This is a string in the format required by [parseDuration](https://bryntum.com/products/calendar/docs/api/Core/helper/DateHelper#function-parseDuration-static)
292
+ */
293
+ this.onTickChange = new EventEmitter();
294
+ /**
295
+ * Fired when a time axis is clicked on. If the handler returns
296
+ * `false` the current pointer event is not processed further.
297
+ * @param {object} event Event object
298
+ * @param {Event} event.domEvent The triggering DOM event.
299
+ * @param {Date} event.preciseTime The exact date and time at the clicked position
300
+ * @param {Date} event.time The date and time at the clicked position snapped according to the [increment](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#config-increment) and [timeSnapType](#Calendar/widget/DayView#config-timeSnapType)
301
+ */
302
+ this.onTimeAxisClick = new EventEmitter();
303
+ /**
304
+ * A header [tool](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-tools) has been clicked.
305
+ * @param {object} event Event object
306
+ * @param {Core.widget.Tool} event.source This Panel.
307
+ * @param {Core.widget.Tool} event.tool The tool which is being clicked.
308
+ */
309
+ this.onToolClick = new EventEmitter();
310
+ this.elementRef = element;
311
+ }
312
+ /**
313
+ * Create and append the underlying widget
314
+ */
315
+ ngOnInit() {
316
+ const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumWeekViewComponent;
317
+ bryntumConfigs.filter(prop => prop in this).forEach(prop => {
318
+ // @ts-ignore
319
+ WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
320
+ if (['features', 'config'].includes(prop)) {
321
+ WrapperHelper.devWarningConfigProp(instanceName, prop);
322
+ }
323
+ });
324
+ // @ts-ignore
325
+ bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
326
+ const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
327
+ // @ts-ignore
328
+ bryntumConfig.listeners[eventName(event)] = e => {
329
+ // @ts-ignore
330
+ me[event].emit(e);
331
+ // EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
332
+ // in Angular listeners
333
+ return e.returnValue;
334
+ };
335
+ });
336
+ // If component has no container specified in config then use adopt to Wrapper's element
337
+ const containerParam = [
338
+ 'adopt',
339
+ 'appendTo',
340
+ 'insertAfter',
341
+ 'insertBefore'
342
+ // @ts-ignore
343
+ ].find(prop => bryntumConfig[prop]);
344
+ if (!containerParam) {
345
+ if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
346
+ // Button should always be <a> or <button> inside owner element
347
+ bryntumConfig.appendTo = elementRef.nativeElement;
348
+ }
349
+ else {
350
+ bryntumConfig.adopt = elementRef.nativeElement;
351
+ }
352
+ }
353
+ else {
354
+ WrapperHelper.devWarningContainer(instanceName, containerParam);
355
+ }
356
+ // @ts-ignore
357
+ me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
358
+ }
359
+ /**
360
+ * Watch for changes
361
+ * @param changes
362
+ */
363
+ ngOnChanges(changes) {
364
+ const { instance } = this, { instanceName } = BryntumWeekViewComponent;
365
+ if (!instance) {
366
+ return;
367
+ }
368
+ // Iterate over all changes
369
+ Object.entries(changes).forEach(([prop, change]) => {
370
+ const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumWeekViewComponent;
371
+ if (bryntumProps.includes(prop)) {
372
+ WrapperHelper.applyPropValue(instance, prop, newValue, false);
373
+ if (bryntumConfigsOnly.includes(prop)) {
374
+ WrapperHelper.devWarningUpdateProp(instanceName, prop);
375
+ }
376
+ }
377
+ });
378
+ }
379
+ /**
380
+ * Destroy the component
381
+ */
382
+ ngOnDestroy() {
383
+ // @ts-ignore
384
+ if (this.instance && this.instance.destroy) {
385
+ this.instance.destroy();
386
+ }
387
+ }
388
+ }
389
+ BryntumWeekViewComponent.instanceClass = WeekView;
390
+ BryntumWeekViewComponent.instanceName = 'WeekView';
391
+ BryntumWeekViewComponent.bryntumEvents = [
392
+ 'onBeforeAutoCreate',
393
+ 'onBeforeChangeDate',
394
+ 'onBeforeDestroy',
395
+ 'onBeforeHide',
396
+ 'onBeforeResponsiveStateChange',
397
+ 'onBeforeSetRecord',
398
+ 'onBeforeShow',
399
+ 'onBeforeStateApply',
400
+ 'onBeforeStateSave',
401
+ 'onCatchAll',
402
+ 'onCellMapPopulated',
403
+ 'onCollapse',
404
+ 'onDayCellPopulated',
405
+ 'onDestroy',
406
+ 'onDirtyStateChange',
407
+ 'onElementCreated',
408
+ 'onEventAutoCreated',
409
+ 'onEventPropagate',
410
+ 'onExpand',
411
+ 'onFocusIn',
412
+ 'onFocusOut',
413
+ 'onHide',
414
+ 'onLayoutUpdate',
415
+ 'onPaint',
416
+ 'onRangeChange',
417
+ 'onReadOnly',
418
+ 'onRecompose',
419
+ 'onRefresh',
420
+ 'onResize',
421
+ 'onResponsiveStateChange',
422
+ 'onShiftIncrementChange',
423
+ 'onShow',
424
+ 'onTickChange',
425
+ 'onTimeAxisClick',
426
+ 'onToolClick'
427
+ ];
428
+ BryntumWeekViewComponent.bryntumFeatureNames = [];
429
+ BryntumWeekViewComponent.bryntumConfigs = BryntumWeekViewComponent.bryntumFeatureNames.concat([
430
+ 'actionButtons',
431
+ 'activationKey',
432
+ 'adopt',
433
+ 'align',
434
+ 'alignSelf',
435
+ 'allDayEvents',
436
+ 'allowDragCreate',
437
+ 'allowDragMove',
438
+ 'allowDragResize',
439
+ 'allowZoomUnderflow',
440
+ 'anchor',
441
+ 'animateTimeShift',
442
+ 'appendTo',
443
+ 'ariaDescription',
444
+ 'ariaLabel',
445
+ 'autoCreate',
446
+ 'bbar',
447
+ 'bodyCls',
448
+ 'bubbleEvents',
449
+ 'callOnFunctions',
450
+ 'catchEventHandlerExceptions',
451
+ 'centered',
452
+ 'cls',
453
+ 'collapsed',
454
+ 'collapsible',
455
+ 'color',
456
+ 'column',
457
+ 'columnHeaderRenderer',
458
+ 'compactHeader',
459
+ 'config',
460
+ 'constrainTo',
461
+ 'contentElementCls',
462
+ 'coreHours',
463
+ 'currentTimeIndicatorRenderer',
464
+ 'dashedSubticks',
465
+ 'dataField',
466
+ 'dataset',
467
+ 'date',
468
+ 'dateFilter',
469
+ 'dateFormat',
470
+ 'dateSeparator',
471
+ 'dayCellRenderer',
472
+ 'dayEndTime',
473
+ 'dayHeaderRenderer',
474
+ 'dayNameFormat',
475
+ 'dayStartShift',
476
+ 'dayStartTime',
477
+ 'defaultBindProperty',
478
+ 'defaultFocus',
479
+ 'defaults',
480
+ 'defaultScrollOptions',
481
+ 'descriptionFormat',
482
+ 'descriptionRenderer',
483
+ 'detectCSSCompatibilityIssues',
484
+ 'disabled',
485
+ 'dock',
486
+ 'draggable',
487
+ 'dragUnit',
488
+ 'drawer',
489
+ 'elementAttributes',
490
+ 'endDate',
491
+ 'eventFilter',
492
+ 'eventHeaderRenderer',
493
+ 'eventLayout',
494
+ 'eventRenderer',
495
+ 'eventSorter',
496
+ 'eventSpacing',
497
+ 'extendAllDayEndDay',
498
+ 'extraData',
499
+ 'filterEventResources',
500
+ 'fitHours',
501
+ 'fixedDuration',
502
+ 'flex',
503
+ 'floating',
504
+ 'footer',
505
+ 'getPrimaryResource',
506
+ 'header',
507
+ 'height',
508
+ 'hidden',
509
+ 'hideAnimation',
510
+ 'hideEmptyDays',
511
+ 'hideNonWorkingDays',
512
+ 'hideWhenEmpty',
513
+ 'hourHeight',
514
+ 'hourHeightBreakpoints',
515
+ 'icon',
516
+ 'id',
517
+ 'ignoreParentReadOnly',
518
+ 'increment',
519
+ 'inputFieldAlign',
520
+ 'insertBefore',
521
+ 'insertFirst',
522
+ 'interDayDrag',
523
+ 'interDayResize',
524
+ 'itemCls',
525
+ 'items',
526
+ 'keyMap',
527
+ 'labelPosition',
528
+ 'layout',
529
+ 'layoutStyle',
530
+ 'lazyItems',
531
+ 'listeners',
532
+ 'localeClass',
533
+ 'localizable',
534
+ 'localizableProperties',
535
+ 'margin',
536
+ 'maskDefaults',
537
+ 'masked',
538
+ 'maxAllDayHeight',
539
+ 'maxDate',
540
+ 'maxHeight',
541
+ 'maximizeOnMobile',
542
+ 'maxWidth',
543
+ 'minDate',
544
+ 'minDayWidth',
545
+ 'minEventHeight',
546
+ 'minHeight',
547
+ 'minHourHeight',
548
+ 'minWidth',
549
+ 'monitorResize',
550
+ 'namedItems',
551
+ 'noMatchingDates',
552
+ 'nonWorkingDays',
553
+ 'overflowPopup',
554
+ 'owner',
555
+ 'pastEventCls',
556
+ 'positioned',
557
+ 'preventTooltipOnTouch',
558
+ 'range',
559
+ 'readOnly',
560
+ 'relayStoreEvents',
561
+ 'rendition',
562
+ 'resourceImagePath',
563
+ 'responsive',
564
+ 'responsiveRoot',
565
+ 'responsiveState',
566
+ 'responsiveTarget',
567
+ 'ripple',
568
+ 'rootElement',
569
+ 'rtl',
570
+ 'scrollable',
571
+ 'scrollAction',
572
+ 'selectorButton',
573
+ 'selectorMenuItem',
574
+ 'shiftIncrement',
575
+ 'shortDateFormat',
576
+ 'shortDateTimeFormat',
577
+ 'shortEventCls',
578
+ 'shortEventDuration',
579
+ 'showAllDayHeader',
580
+ 'showAnimation',
581
+ 'showBullet',
582
+ 'showCurrentTime',
583
+ 'showResourceAvatars',
584
+ 'showTime',
585
+ 'showTooltipWhenDisabled',
586
+ 'sixMinuteTicks',
587
+ 'snapRelativeToEventStartDate',
588
+ 'span',
589
+ 'stackMultiDayEvents',
590
+ 'startDate',
591
+ 'stateful',
592
+ 'statefulEvents',
593
+ 'stateId',
594
+ 'stateProvider',
595
+ 'strictRecordMapping',
596
+ 'strips',
597
+ 'syncCalendarDate',
598
+ 'syncViewDate',
599
+ 'tab',
600
+ 'tabBarItems',
601
+ 'tag',
602
+ 'tbar',
603
+ 'textAlign',
604
+ 'tickRenderer',
605
+ 'timeAxisTimeFormat',
606
+ 'timeFormat',
607
+ 'timeSnapType',
608
+ 'title',
609
+ 'tools',
610
+ 'tooltip',
611
+ 'trapFocus',
612
+ 'type',
613
+ 'ui',
614
+ 'visibleStartTime',
615
+ 'weekStartDay',
616
+ 'weight',
617
+ 'width',
618
+ 'x',
619
+ 'y',
620
+ 'zoomOnMouseWheel'
621
+ ]);
622
+ BryntumWeekViewComponent.bryntumConfigsOnly = [
623
+ 'actionButtons',
624
+ 'activationKey',
625
+ 'adopt',
626
+ 'align',
627
+ 'allDayEvents',
628
+ 'anchor',
629
+ 'ariaDescription',
630
+ 'ariaLabel',
631
+ 'bbar',
632
+ 'bodyCls',
633
+ 'bubbleEvents',
634
+ 'centered',
635
+ 'collapsible',
636
+ 'color',
637
+ 'columnHeaderRenderer',
638
+ 'config',
639
+ 'constrainTo',
640
+ 'contentElementCls',
641
+ 'currentTimeIndicatorRenderer',
642
+ 'dataField',
643
+ 'dayCellRenderer',
644
+ 'dayHeaderRenderer',
645
+ 'dayNameFormat',
646
+ 'dayStartShift',
647
+ 'defaultBindProperty',
648
+ 'defaultFocus',
649
+ 'defaults',
650
+ 'descriptionRenderer',
651
+ 'detectCSSCompatibilityIssues',
652
+ 'dock',
653
+ 'draggable',
654
+ 'drawer',
655
+ 'elementAttributes',
656
+ 'endDate',
657
+ 'eventFilter',
658
+ 'eventHeaderRenderer',
659
+ 'eventLayout',
660
+ 'eventRenderer',
661
+ 'eventSorter',
662
+ 'eventSpacing',
663
+ 'floating',
664
+ 'footer',
665
+ 'getPrimaryResource',
666
+ 'header',
667
+ 'hideAnimation',
668
+ 'hideWhenEmpty',
669
+ 'icon',
670
+ 'ignoreParentReadOnly',
671
+ 'itemCls',
672
+ 'lazyItems',
673
+ 'listeners',
674
+ 'localeClass',
675
+ 'localizable',
676
+ 'localizableProperties',
677
+ 'maskDefaults',
678
+ 'masked',
679
+ 'maxAllDayHeight',
680
+ 'monitorResize',
681
+ 'namedItems',
682
+ 'overflowPopup',
683
+ 'owner',
684
+ 'positioned',
685
+ 'preventTooltipOnTouch',
686
+ 'relayStoreEvents',
687
+ 'resourceImagePath',
688
+ 'responsive',
689
+ 'responsiveRoot',
690
+ 'responsiveState',
691
+ 'responsiveTarget',
692
+ 'ripple',
693
+ 'rootElement',
694
+ 'scrollAction',
695
+ 'selectorButton',
696
+ 'selectorMenuItem',
697
+ 'shortEventCls',
698
+ 'shortEventDuration',
699
+ 'showAllDayHeader',
700
+ 'showAnimation',
701
+ 'showBullet',
702
+ 'showResourceAvatars',
703
+ 'showTooltipWhenDisabled',
704
+ 'startDate',
705
+ 'stateful',
706
+ 'statefulEvents',
707
+ 'stateId',
708
+ 'stateProvider',
709
+ 'strips',
710
+ 'tab',
711
+ 'tabBarItems',
712
+ 'tag',
713
+ 'tbar',
714
+ 'textAlign',
715
+ 'tickRenderer',
716
+ 'timeAxisTimeFormat',
717
+ 'timeFormat',
718
+ 'trapFocus',
719
+ 'type',
720
+ 'ui',
721
+ 'visibleStartTime',
722
+ 'weekStartDay',
723
+ 'weight',
724
+ 'zoomOnMouseWheel'
725
+ ];
726
+ BryntumWeekViewComponent.bryntumProps = BryntumWeekViewComponent.bryntumFeatureNames.concat([
727
+ 'alignSelf',
728
+ 'allowDragCreate',
729
+ 'allowDragMove',
730
+ 'allowDragResize',
731
+ 'allowZoomUnderflow',
732
+ 'anchorSize',
733
+ 'animateTimeShift',
734
+ 'appendTo',
735
+ 'autoCreate',
736
+ 'callOnFunctions',
737
+ 'catchEventHandlerExceptions',
738
+ 'cls',
739
+ 'collapsed',
740
+ 'column',
741
+ 'compactHeader',
742
+ 'coreHours',
743
+ 'dashedSubticks',
744
+ 'dataset',
745
+ 'date',
746
+ 'dateFilter',
747
+ 'dateFormat',
748
+ 'dateSeparator',
749
+ 'dayCellCls',
750
+ 'dayEndTime',
751
+ 'dayStartTime',
752
+ 'defaultScrollOptions',
753
+ 'descriptionFormat',
754
+ 'disabled',
755
+ 'dragUnit',
756
+ 'extendAllDayEndDay',
757
+ 'extraData',
758
+ 'filterEventResources',
759
+ 'firstVisibleCell',
760
+ 'firstVisibleDate',
761
+ 'fitHours',
762
+ 'fixedDuration',
763
+ 'flex',
764
+ 'focusVisible',
765
+ 'hasChanges',
766
+ 'height',
767
+ 'hidden',
768
+ 'hideEmptyDays',
769
+ 'hideNonWorkingDays',
770
+ 'horizontalScroller',
771
+ 'hourHeight',
772
+ 'hourHeightBreakpoints',
773
+ 'id',
774
+ 'increment',
775
+ 'inputFieldAlign',
776
+ 'insertBefore',
777
+ 'insertFirst',
778
+ 'interDayDrag',
779
+ 'interDayResize',
780
+ 'isSettingValues',
781
+ 'isValid',
782
+ 'items',
783
+ 'keyMap',
784
+ 'labelPosition',
785
+ 'lastVisibleCell',
786
+ 'lastVisibleDate',
787
+ 'layout',
788
+ 'layoutStyle',
789
+ 'margin',
790
+ 'maxDate',
791
+ 'maxHeight',
792
+ 'maximizeOnMobile',
793
+ 'maxWidth',
794
+ 'minDate',
795
+ 'minDayWidth',
796
+ 'minEventHeight',
797
+ 'minHeight',
798
+ 'minHourHeight',
799
+ 'minWidth',
800
+ 'noMatchingDates',
801
+ 'nonWorkingDays',
802
+ 'parent',
803
+ 'pastEventCls',
804
+ 'range',
805
+ 'readOnly',
806
+ 'record',
807
+ 'rendition',
808
+ 'rtl',
809
+ 'scrollable',
810
+ 'shiftIncrement',
811
+ 'shortDateFormat',
812
+ 'shortDateTimeFormat',
813
+ 'showCurrentTime',
814
+ 'showTime',
815
+ 'sixMinuteTicks',
816
+ 'snapRelativeToEventStartDate',
817
+ 'span',
818
+ 'stackMultiDayEvents',
819
+ 'state',
820
+ 'strictRecordMapping',
821
+ 'syncCalendarDate',
822
+ 'syncViewDate',
823
+ 'timeSnapType',
824
+ 'title',
825
+ 'tools',
826
+ 'tooltip',
827
+ 'values',
828
+ 'width',
829
+ 'x',
830
+ 'y'
831
+ ]);
832
+ BryntumWeekViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumWeekViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
833
+ BryntumWeekViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumWeekViewComponent, selector: "bryntum-week-view", inputs: { actionButtons: "actionButtons", activationKey: "activationKey", adopt: "adopt", align: "align", allDayEvents: "allDayEvents", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", bbar: "bbar", bodyCls: "bodyCls", bubbleEvents: "bubbleEvents", centered: "centered", collapsible: "collapsible", color: "color", columnHeaderRenderer: "columnHeaderRenderer", config: "config", constrainTo: "constrainTo", contentElementCls: "contentElementCls", currentTimeIndicatorRenderer: "currentTimeIndicatorRenderer", dataField: "dataField", dayCellRenderer: "dayCellRenderer", dayHeaderRenderer: "dayHeaderRenderer", dayNameFormat: "dayNameFormat", dayStartShift: "dayStartShift", defaultBindProperty: "defaultBindProperty", defaultFocus: "defaultFocus", defaults: "defaults", descriptionRenderer: "descriptionRenderer", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", dock: "dock", draggable: "draggable", drawer: "drawer", elementAttributes: "elementAttributes", endDate: "endDate", eventFilter: "eventFilter", eventHeaderRenderer: "eventHeaderRenderer", eventLayout: "eventLayout", eventRenderer: "eventRenderer", eventSorter: "eventSorter", eventSpacing: "eventSpacing", floating: "floating", footer: "footer", getPrimaryResource: "getPrimaryResource", header: "header", hideAnimation: "hideAnimation", hideWhenEmpty: "hideWhenEmpty", icon: "icon", ignoreParentReadOnly: "ignoreParentReadOnly", itemCls: "itemCls", lazyItems: "lazyItems", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", maxAllDayHeight: "maxAllDayHeight", monitorResize: "monitorResize", namedItems: "namedItems", overflowPopup: "overflowPopup", owner: "owner", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", resourceImagePath: "resourceImagePath", responsive: "responsive", responsiveRoot: "responsiveRoot", responsiveState: "responsiveState", responsiveTarget: "responsiveTarget", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", selectorButton: "selectorButton", selectorMenuItem: "selectorMenuItem", shortEventCls: "shortEventCls", shortEventDuration: "shortEventDuration", showAllDayHeader: "showAllDayHeader", showAnimation: "showAnimation", showBullet: "showBullet", showResourceAvatars: "showResourceAvatars", showTooltipWhenDisabled: "showTooltipWhenDisabled", startDate: "startDate", stateful: "stateful", statefulEvents: "statefulEvents", stateId: "stateId", stateProvider: "stateProvider", strips: "strips", tab: "tab", tabBarItems: "tabBarItems", tag: "tag", tbar: "tbar", textAlign: "textAlign", tickRenderer: "tickRenderer", timeAxisTimeFormat: "timeAxisTimeFormat", timeFormat: "timeFormat", trapFocus: "trapFocus", type: "type", ui: "ui", visibleStartTime: "visibleStartTime", weekStartDay: "weekStartDay", weight: "weight", zoomOnMouseWheel: "zoomOnMouseWheel", alignSelf: "alignSelf", allowDragCreate: "allowDragCreate", allowDragMove: "allowDragMove", allowDragResize: "allowDragResize", allowZoomUnderflow: "allowZoomUnderflow", animateTimeShift: "animateTimeShift", appendTo: "appendTo", autoCreate: "autoCreate", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", collapsed: "collapsed", column: "column", compactHeader: "compactHeader", coreHours: "coreHours", dashedSubticks: "dashedSubticks", dataset: "dataset", date: "date", dateFilter: "dateFilter", dateFormat: "dateFormat", dateSeparator: "dateSeparator", dayEndTime: "dayEndTime", dayStartTime: "dayStartTime", defaultScrollOptions: "defaultScrollOptions", descriptionFormat: "descriptionFormat", disabled: "disabled", dragUnit: "dragUnit", extendAllDayEndDay: "extendAllDayEndDay", extraData: "extraData", filterEventResources: "filterEventResources", fitHours: "fitHours", fixedDuration: "fixedDuration", flex: "flex", height: "height", hidden: "hidden", hideEmptyDays: "hideEmptyDays", hideNonWorkingDays: "hideNonWorkingDays", hourHeight: "hourHeight", hourHeightBreakpoints: "hourHeightBreakpoints", id: "id", increment: "increment", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", interDayDrag: "interDayDrag", interDayResize: "interDayResize", items: "items", keyMap: "keyMap", labelPosition: "labelPosition", layout: "layout", layoutStyle: "layoutStyle", margin: "margin", maxDate: "maxDate", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", minDate: "minDate", minDayWidth: "minDayWidth", minEventHeight: "minEventHeight", minHeight: "minHeight", minHourHeight: "minHourHeight", minWidth: "minWidth", noMatchingDates: "noMatchingDates", nonWorkingDays: "nonWorkingDays", pastEventCls: "pastEventCls", range: "range", readOnly: "readOnly", rendition: "rendition", rtl: "rtl", scrollable: "scrollable", shiftIncrement: "shiftIncrement", shortDateFormat: "shortDateFormat", shortDateTimeFormat: "shortDateTimeFormat", showCurrentTime: "showCurrentTime", showTime: "showTime", sixMinuteTicks: "sixMinuteTicks", snapRelativeToEventStartDate: "snapRelativeToEventStartDate", span: "span", stackMultiDayEvents: "stackMultiDayEvents", strictRecordMapping: "strictRecordMapping", syncCalendarDate: "syncCalendarDate", syncViewDate: "syncViewDate", timeSnapType: "timeSnapType", title: "title", tools: "tools", tooltip: "tooltip", width: "width", x: "x", y: "y", anchorSize: "anchorSize", dayCellCls: "dayCellCls", firstVisibleCell: "firstVisibleCell", firstVisibleDate: "firstVisibleDate", focusVisible: "focusVisible", hasChanges: "hasChanges", horizontalScroller: "horizontalScroller", isSettingValues: "isSettingValues", isValid: "isValid", lastVisibleCell: "lastVisibleCell", lastVisibleDate: "lastVisibleDate", parent: "parent", record: "record", state: "state", values: "values" }, outputs: { onBeforeAutoCreate: "onBeforeAutoCreate", onBeforeChangeDate: "onBeforeChangeDate", onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeResponsiveStateChange: "onBeforeResponsiveStateChange", onBeforeSetRecord: "onBeforeSetRecord", onBeforeShow: "onBeforeShow", onBeforeStateApply: "onBeforeStateApply", onBeforeStateSave: "onBeforeStateSave", onCatchAll: "onCatchAll", onCellMapPopulated: "onCellMapPopulated", onCollapse: "onCollapse", onDayCellPopulated: "onDayCellPopulated", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onElementCreated: "onElementCreated", onEventAutoCreated: "onEventAutoCreated", onEventPropagate: "onEventPropagate", onExpand: "onExpand", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onLayoutUpdate: "onLayoutUpdate", onPaint: "onPaint", onRangeChange: "onRangeChange", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onRefresh: "onRefresh", onResize: "onResize", onResponsiveStateChange: "onResponsiveStateChange", onShiftIncrementChange: "onShiftIncrementChange", onShow: "onShow", onTickChange: "onTickChange", onTimeAxisClick: "onTimeAxisClick", onToolClick: "onToolClick" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
834
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumWeekViewComponent, decorators: [{
835
+ type: Component,
836
+ args: [{
837
+ selector: 'bryntum-week-view',
838
+ template: ''
839
+ }]
840
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { actionButtons: [{
841
+ type: Input
842
+ }], activationKey: [{
843
+ type: Input
844
+ }], adopt: [{
845
+ type: Input
846
+ }], align: [{
847
+ type: Input
848
+ }], allDayEvents: [{
849
+ type: Input
850
+ }], anchor: [{
851
+ type: Input
852
+ }], ariaDescription: [{
853
+ type: Input
854
+ }], ariaLabel: [{
855
+ type: Input
856
+ }], bbar: [{
857
+ type: Input
858
+ }], bodyCls: [{
859
+ type: Input
860
+ }], bubbleEvents: [{
861
+ type: Input
862
+ }], centered: [{
863
+ type: Input
864
+ }], collapsible: [{
865
+ type: Input
866
+ }], color: [{
867
+ type: Input
868
+ }], columnHeaderRenderer: [{
869
+ type: Input
870
+ }], config: [{
871
+ type: Input
872
+ }], constrainTo: [{
873
+ type: Input
874
+ }], contentElementCls: [{
875
+ type: Input
876
+ }], currentTimeIndicatorRenderer: [{
877
+ type: Input
878
+ }], dataField: [{
879
+ type: Input
880
+ }], dayCellRenderer: [{
881
+ type: Input
882
+ }], dayHeaderRenderer: [{
883
+ type: Input
884
+ }], dayNameFormat: [{
885
+ type: Input
886
+ }], dayStartShift: [{
887
+ type: Input
888
+ }], defaultBindProperty: [{
889
+ type: Input
890
+ }], defaultFocus: [{
891
+ type: Input
892
+ }], defaults: [{
893
+ type: Input
894
+ }], descriptionRenderer: [{
895
+ type: Input
896
+ }], detectCSSCompatibilityIssues: [{
897
+ type: Input
898
+ }], dock: [{
899
+ type: Input
900
+ }], draggable: [{
901
+ type: Input
902
+ }], drawer: [{
903
+ type: Input
904
+ }], elementAttributes: [{
905
+ type: Input
906
+ }], endDate: [{
907
+ type: Input
908
+ }], eventFilter: [{
909
+ type: Input
910
+ }], eventHeaderRenderer: [{
911
+ type: Input
912
+ }], eventLayout: [{
913
+ type: Input
914
+ }], eventRenderer: [{
915
+ type: Input
916
+ }], eventSorter: [{
917
+ type: Input
918
+ }], eventSpacing: [{
919
+ type: Input
920
+ }], floating: [{
921
+ type: Input
922
+ }], footer: [{
923
+ type: Input
924
+ }], getPrimaryResource: [{
925
+ type: Input
926
+ }], header: [{
927
+ type: Input
928
+ }], hideAnimation: [{
929
+ type: Input
930
+ }], hideWhenEmpty: [{
931
+ type: Input
932
+ }], icon: [{
933
+ type: Input
934
+ }], ignoreParentReadOnly: [{
935
+ type: Input
936
+ }], itemCls: [{
937
+ type: Input
938
+ }], lazyItems: [{
939
+ type: Input
940
+ }], listeners: [{
941
+ type: Input
942
+ }], localeClass: [{
943
+ type: Input
944
+ }], localizable: [{
945
+ type: Input
946
+ }], localizableProperties: [{
947
+ type: Input
948
+ }], maskDefaults: [{
949
+ type: Input
950
+ }], masked: [{
951
+ type: Input
952
+ }], maxAllDayHeight: [{
953
+ type: Input
954
+ }], monitorResize: [{
955
+ type: Input
956
+ }], namedItems: [{
957
+ type: Input
958
+ }], overflowPopup: [{
959
+ type: Input
960
+ }], owner: [{
961
+ type: Input
962
+ }], positioned: [{
963
+ type: Input
964
+ }], preventTooltipOnTouch: [{
965
+ type: Input
966
+ }], relayStoreEvents: [{
967
+ type: Input
968
+ }], resourceImagePath: [{
969
+ type: Input
970
+ }], responsive: [{
971
+ type: Input
972
+ }], responsiveRoot: [{
973
+ type: Input
974
+ }], responsiveState: [{
975
+ type: Input
976
+ }], responsiveTarget: [{
977
+ type: Input
978
+ }], ripple: [{
979
+ type: Input
980
+ }], rootElement: [{
981
+ type: Input
982
+ }], scrollAction: [{
983
+ type: Input
984
+ }], selectorButton: [{
985
+ type: Input
986
+ }], selectorMenuItem: [{
987
+ type: Input
988
+ }], shortEventCls: [{
989
+ type: Input
990
+ }], shortEventDuration: [{
991
+ type: Input
992
+ }], showAllDayHeader: [{
993
+ type: Input
994
+ }], showAnimation: [{
995
+ type: Input
996
+ }], showBullet: [{
997
+ type: Input
998
+ }], showResourceAvatars: [{
999
+ type: Input
1000
+ }], showTooltipWhenDisabled: [{
1001
+ type: Input
1002
+ }], startDate: [{
1003
+ type: Input
1004
+ }], stateful: [{
1005
+ type: Input
1006
+ }], statefulEvents: [{
1007
+ type: Input
1008
+ }], stateId: [{
1009
+ type: Input
1010
+ }], stateProvider: [{
1011
+ type: Input
1012
+ }], strips: [{
1013
+ type: Input
1014
+ }], tab: [{
1015
+ type: Input
1016
+ }], tabBarItems: [{
1017
+ type: Input
1018
+ }], tag: [{
1019
+ type: Input
1020
+ }], tbar: [{
1021
+ type: Input
1022
+ }], textAlign: [{
1023
+ type: Input
1024
+ }], tickRenderer: [{
1025
+ type: Input
1026
+ }], timeAxisTimeFormat: [{
1027
+ type: Input
1028
+ }], timeFormat: [{
1029
+ type: Input
1030
+ }], trapFocus: [{
1031
+ type: Input
1032
+ }], type: [{
1033
+ type: Input
1034
+ }], ui: [{
1035
+ type: Input
1036
+ }], visibleStartTime: [{
1037
+ type: Input
1038
+ }], weekStartDay: [{
1039
+ type: Input
1040
+ }], weight: [{
1041
+ type: Input
1042
+ }], zoomOnMouseWheel: [{
1043
+ type: Input
1044
+ }], alignSelf: [{
1045
+ type: Input
1046
+ }], allowDragCreate: [{
1047
+ type: Input
1048
+ }], allowDragMove: [{
1049
+ type: Input
1050
+ }], allowDragResize: [{
1051
+ type: Input
1052
+ }], allowZoomUnderflow: [{
1053
+ type: Input
1054
+ }], animateTimeShift: [{
1055
+ type: Input
1056
+ }], appendTo: [{
1057
+ type: Input
1058
+ }], autoCreate: [{
1059
+ type: Input
1060
+ }], callOnFunctions: [{
1061
+ type: Input
1062
+ }], catchEventHandlerExceptions: [{
1063
+ type: Input
1064
+ }], cls: [{
1065
+ type: Input
1066
+ }], collapsed: [{
1067
+ type: Input
1068
+ }], column: [{
1069
+ type: Input
1070
+ }], compactHeader: [{
1071
+ type: Input
1072
+ }], coreHours: [{
1073
+ type: Input
1074
+ }], dashedSubticks: [{
1075
+ type: Input
1076
+ }], dataset: [{
1077
+ type: Input
1078
+ }], date: [{
1079
+ type: Input
1080
+ }], dateFilter: [{
1081
+ type: Input
1082
+ }], dateFormat: [{
1083
+ type: Input
1084
+ }], dateSeparator: [{
1085
+ type: Input
1086
+ }], dayEndTime: [{
1087
+ type: Input
1088
+ }], dayStartTime: [{
1089
+ type: Input
1090
+ }], defaultScrollOptions: [{
1091
+ type: Input
1092
+ }], descriptionFormat: [{
1093
+ type: Input
1094
+ }], disabled: [{
1095
+ type: Input
1096
+ }], dragUnit: [{
1097
+ type: Input
1098
+ }], extendAllDayEndDay: [{
1099
+ type: Input
1100
+ }], extraData: [{
1101
+ type: Input
1102
+ }], filterEventResources: [{
1103
+ type: Input
1104
+ }], fitHours: [{
1105
+ type: Input
1106
+ }], fixedDuration: [{
1107
+ type: Input
1108
+ }], flex: [{
1109
+ type: Input
1110
+ }], height: [{
1111
+ type: Input
1112
+ }], hidden: [{
1113
+ type: Input
1114
+ }], hideEmptyDays: [{
1115
+ type: Input
1116
+ }], hideNonWorkingDays: [{
1117
+ type: Input
1118
+ }], hourHeight: [{
1119
+ type: Input
1120
+ }], hourHeightBreakpoints: [{
1121
+ type: Input
1122
+ }], id: [{
1123
+ type: Input
1124
+ }], increment: [{
1125
+ type: Input
1126
+ }], inputFieldAlign: [{
1127
+ type: Input
1128
+ }], insertBefore: [{
1129
+ type: Input
1130
+ }], insertFirst: [{
1131
+ type: Input
1132
+ }], interDayDrag: [{
1133
+ type: Input
1134
+ }], interDayResize: [{
1135
+ type: Input
1136
+ }], items: [{
1137
+ type: Input
1138
+ }], keyMap: [{
1139
+ type: Input
1140
+ }], labelPosition: [{
1141
+ type: Input
1142
+ }], layout: [{
1143
+ type: Input
1144
+ }], layoutStyle: [{
1145
+ type: Input
1146
+ }], margin: [{
1147
+ type: Input
1148
+ }], maxDate: [{
1149
+ type: Input
1150
+ }], maxHeight: [{
1151
+ type: Input
1152
+ }], maximizeOnMobile: [{
1153
+ type: Input
1154
+ }], maxWidth: [{
1155
+ type: Input
1156
+ }], minDate: [{
1157
+ type: Input
1158
+ }], minDayWidth: [{
1159
+ type: Input
1160
+ }], minEventHeight: [{
1161
+ type: Input
1162
+ }], minHeight: [{
1163
+ type: Input
1164
+ }], minHourHeight: [{
1165
+ type: Input
1166
+ }], minWidth: [{
1167
+ type: Input
1168
+ }], noMatchingDates: [{
1169
+ type: Input
1170
+ }], nonWorkingDays: [{
1171
+ type: Input
1172
+ }], pastEventCls: [{
1173
+ type: Input
1174
+ }], range: [{
1175
+ type: Input
1176
+ }], readOnly: [{
1177
+ type: Input
1178
+ }], rendition: [{
1179
+ type: Input
1180
+ }], rtl: [{
1181
+ type: Input
1182
+ }], scrollable: [{
1183
+ type: Input
1184
+ }], shiftIncrement: [{
1185
+ type: Input
1186
+ }], shortDateFormat: [{
1187
+ type: Input
1188
+ }], shortDateTimeFormat: [{
1189
+ type: Input
1190
+ }], showCurrentTime: [{
1191
+ type: Input
1192
+ }], showTime: [{
1193
+ type: Input
1194
+ }], sixMinuteTicks: [{
1195
+ type: Input
1196
+ }], snapRelativeToEventStartDate: [{
1197
+ type: Input
1198
+ }], span: [{
1199
+ type: Input
1200
+ }], stackMultiDayEvents: [{
1201
+ type: Input
1202
+ }], strictRecordMapping: [{
1203
+ type: Input
1204
+ }], syncCalendarDate: [{
1205
+ type: Input
1206
+ }], syncViewDate: [{
1207
+ type: Input
1208
+ }], timeSnapType: [{
1209
+ type: Input
1210
+ }], title: [{
1211
+ type: Input
1212
+ }], tools: [{
1213
+ type: Input
1214
+ }], tooltip: [{
1215
+ type: Input
1216
+ }], width: [{
1217
+ type: Input
1218
+ }], x: [{
1219
+ type: Input
1220
+ }], y: [{
1221
+ type: Input
1222
+ }], anchorSize: [{
1223
+ type: Input
1224
+ }], dayCellCls: [{
1225
+ type: Input
1226
+ }], firstVisibleCell: [{
1227
+ type: Input
1228
+ }], firstVisibleDate: [{
1229
+ type: Input
1230
+ }], focusVisible: [{
1231
+ type: Input
1232
+ }], hasChanges: [{
1233
+ type: Input
1234
+ }], horizontalScroller: [{
1235
+ type: Input
1236
+ }], isSettingValues: [{
1237
+ type: Input
1238
+ }], isValid: [{
1239
+ type: Input
1240
+ }], lastVisibleCell: [{
1241
+ type: Input
1242
+ }], lastVisibleDate: [{
1243
+ type: Input
1244
+ }], parent: [{
1245
+ type: Input
1246
+ }], record: [{
1247
+ type: Input
1248
+ }], state: [{
1249
+ type: Input
1250
+ }], values: [{
1251
+ type: Input
1252
+ }], onBeforeAutoCreate: [{
1253
+ type: Output
1254
+ }], onBeforeChangeDate: [{
1255
+ type: Output
1256
+ }], onBeforeDestroy: [{
1257
+ type: Output
1258
+ }], onBeforeHide: [{
1259
+ type: Output
1260
+ }], onBeforeResponsiveStateChange: [{
1261
+ type: Output
1262
+ }], onBeforeSetRecord: [{
1263
+ type: Output
1264
+ }], onBeforeShow: [{
1265
+ type: Output
1266
+ }], onBeforeStateApply: [{
1267
+ type: Output
1268
+ }], onBeforeStateSave: [{
1269
+ type: Output
1270
+ }], onCatchAll: [{
1271
+ type: Output
1272
+ }], onCellMapPopulated: [{
1273
+ type: Output
1274
+ }], onCollapse: [{
1275
+ type: Output
1276
+ }], onDayCellPopulated: [{
1277
+ type: Output
1278
+ }], onDestroy: [{
1279
+ type: Output
1280
+ }], onDirtyStateChange: [{
1281
+ type: Output
1282
+ }], onElementCreated: [{
1283
+ type: Output
1284
+ }], onEventAutoCreated: [{
1285
+ type: Output
1286
+ }], onEventPropagate: [{
1287
+ type: Output
1288
+ }], onExpand: [{
1289
+ type: Output
1290
+ }], onFocusIn: [{
1291
+ type: Output
1292
+ }], onFocusOut: [{
1293
+ type: Output
1294
+ }], onHide: [{
1295
+ type: Output
1296
+ }], onLayoutUpdate: [{
1297
+ type: Output
1298
+ }], onPaint: [{
1299
+ type: Output
1300
+ }], onRangeChange: [{
1301
+ type: Output
1302
+ }], onReadOnly: [{
1303
+ type: Output
1304
+ }], onRecompose: [{
1305
+ type: Output
1306
+ }], onRefresh: [{
1307
+ type: Output
1308
+ }], onResize: [{
1309
+ type: Output
1310
+ }], onResponsiveStateChange: [{
1311
+ type: Output
1312
+ }], onShiftIncrementChange: [{
1313
+ type: Output
1314
+ }], onShow: [{
1315
+ type: Output
1316
+ }], onTickChange: [{
1317
+ type: Output
1318
+ }], onTimeAxisClick: [{
1319
+ type: Output
1320
+ }], onToolClick: [{
1321
+ type: Output
1322
+ }] } });
1323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS13ZWVrLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS13ZWVrLXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBOFgsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeGEsT0FBTyxFQUEyTyxRQUFRLEVBQXFCLE1BQU0sd0JBQXdCLENBQUM7O0FBcXhDOVMsTUFBTSxPQUFPLHdCQUF3QjtJQWtkakMsWUFBWSxPQUFtQjtRQVR2QixrQkFBYSxHQUFHO1lBQ3BCLEtBQUssRUFBYyxTQUFTO1lBQzVCLFFBQVEsRUFBVyxTQUFTO1lBQzVCLElBQUksRUFBZSxTQUFTO1lBQzVCLGdCQUFnQixFQUFHLElBQUk7WUFDdkIsUUFBUSxFQUFXLEVBQUU7WUFDckIsU0FBUyxFQUFVLEVBQUU7U0FDeEIsQ0FBQztRQTJQRixrQkFBa0I7UUFDbEI7Ozs7Ozs7Ozs7OztXQVlHO1FBQ08sdUJBQWtCLEdBQVEsSUFBSSxZQUFZLEVBQXlLLENBQUM7UUFDOU47Ozs7Ozs7V0FPRztRQUNPLHVCQUFrQixHQUFRLElBQUksWUFBWSxFQUFvRixDQUFDO1FBQ3pJOzs7O1dBSUc7UUFDTyxvQkFBZSxHQUFRLElBQUksWUFBWSxFQUE4QyxDQUFDO1FBQ2hHOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUFRLElBQUksWUFBWSxFQUF5RSxDQUFDO1FBQ3hIOzs7Ozs7V0FNRztRQUNPLGtDQUE2QixHQUFRLElBQUksWUFBWSxFQUFpRixDQUFDO1FBQ2pKOzs7Ozs7V0FNRztRQUNPLHNCQUFpQixHQUFRLElB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Z0JBVUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQWVHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFNRyxRQUFRO3NCQUFqQixNQUFNO2dCQVdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBYUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBUUcsY0FBYztzQkFBdkIsTUFBTTtnQkFVRyxPQUFPO3NCQUFoQixNQUFNO2dCQWNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBTUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQU1HLFNBQVM7c0JBQWxCLE1BQU07Z0JBVUcsUUFBUTtzQkFBakIsTUFBTTtnQkFRRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBT0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQU1HLE1BQU07c0JBQWYsTUFBTTtnQkFhRyxZQUFZO3NCQUFyQixNQUFNO2dCQVNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBBbmd1bGFyIHdyYXBwZXIgZm9yIEJyeW50dW0gV2Vla1ZpZXdcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgV3JhcHBlckhlbHBlciBmcm9tICcuL3dyYXBwZXIuaGVscGVyJztcblxuaW1wb3J0IHsgQWxpZ25TcGVjLCBCYXNlLCBCcnludHVtU2Nyb2xsT3B0aW9ucywgQnV0dG9uQ29uZmlnLCBDb250YWluZXIsIERvbUNvbmZpZywgRHVyYXRpb25Db25maWcsIEtleU1hcENvbmZpZywgTGF5b3V0LCBNYXNrQ29uZmlnLCBNZW51SXRlbUNvbmZpZywgTWVudUl0ZW1FbnRyeSwgTW9kZWwsIFBhZ2luZ1Rvb2xiYXJDb25maWcsIFBhbmVsLCBQYW5lbENvbGxhcHNlckNvbmZpZywgUGFuZWxDb2xsYXBzZXJPdmVybGF5Q29uZmlnLCBQYW5lbEhlYWRlciwgUmVjdGFuZ2xlLCBTY3JvbGxlciwgU2Nyb2xsZXJDb25maWcsIFN0YXRlUHJvdmlkZXIsIFRhYkNvbmZpZywgVG9vbCwgVG9vbENvbmZpZywgVG9vbGJhckNvbmZpZywgVG9vbGJhckl0ZW1zLCBUb29sdGlwQ29uZmlnLCBXaWRnZXQgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuaW1wb3J0IHsgRXZlbnRNb2RlbCwgUmVzb3VyY2VNb2RlbCB9IGZyb20gJ0BicnludHVtL3NjaGVkdWxlci10aGluJztcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbnNDb25maWcsIENhbGVuZGFyUm93LCBDYWxlbmRhclJvd0NvbmZpZywgQ2FsZW5kYXJWaWV3LCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWcsIENhbGVuZGFyQ29udGFpbmVyTGF5b3V0Q29uZmlnLCBEYXRlUmFuZ2VPd25lciwgRGF5Q2VsbCwgRGF5Q2VsbFdpdGhFdmVudHMsIERheVZpZXcsIEV2ZW50QmFyLCBGbHVpZERheUxheW91dENvbmZpZywgT3ZlcmZsb3dQb3B1cENvbmZpZywgV2Vla1ZpZXcsIFdlZWtWaWV3TGlzdGVuZXJzIH0gZnJvbSAnQGJyeW50dW0vY2FsZW5kYXItdGhpbic7XG5cbmltcG9ydCB7IFN0cmluZ0hlbHBlciB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5cbmV4cG9ydCB0eXBlIEJyeW50dW1XZWVrVmlld1Byb3BzID0ge1xuICAgIC8vIENvbmZpZ3NcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb3IgYW4gYXJyYXkgb2YgYnV0dG9uIHNwZWNpZmljYXRpb25zIHdoaWNoIGFkZCBjbGlja2FibGUgaWNvbiBidXR0b25zIHRvXG4gICAgICogdGhlIHJlbmRlcmVkIGV2ZW50IGJsb2NrcyB3aGljaCBjb250YWluIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWFjdGlvbkJ1dHRvbnMpXG4gICAgICovXG4gICAgYWN0aW9uQnV0dG9ucyA/IDogQWN0aW9uQnV0dG9uc0NvbmZpZ1tdfFJlY29yZDxzdHJpbmcsIEFjdGlvbkJ1dHRvbnNDb25maWc+XG4gICAgLyoqXG4gICAgICogQSBrZXkgdG8gdXNlIHRvIGFjdGl2YXRlIHRoaXMgdmlldy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWFjdGl2YXRpb25LZXkpXG4gICAgICovXG4gICAgYWN0aXZhdGlvbktleSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYWRvcHQgYXMgdGhpcyBXaWRnZXQncyBlbmNhcHN1bGF0aW5nIGVsZW1lbnQuIFRoZSB3aWRnZXQnc1xuICAgICAqIGNvbnRlbnQgd2lsbCBiZSBwbGFjZWQgaW5zaWRlIHRoaXMgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWFkb3B0KVxuICAgICAqL1xuICAgIGFkb3B0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctYWxpZ24pXG4gICAgICovXG4gICAgYWxpZ24gPyA6IEFsaWduU3BlY3xzdHJpbmdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFthbGlnbi1zZWxmXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYWxpZ24tc2VsZikgc3R5bGUuXG4gICAgICovXG4gICAgYWxpZ25TZWxmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIFtDYWxlbmRhclJvd10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvQ2FsZW5kYXJSb3cpIHdpZGdldCBjb250YWluaW5nIHRoZSBob3Jpem9udGFsIHNlcmllcyBvZiBjYWxlbmRhciBjZWxscyB3aXRoIHRoZVxuICAgICAqIGRheSBoZWFkZXJzIGFuZCBhbnkgYWxsLWRheSwgb3IgZGF5LXNwYW5uaW5nIGV2ZW50cyB3aGljaCBmYWxsIGluc2lkZSB0aGlzIHZpZXcncyB0aW1lIHJhbmdlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctYWxsRGF5RXZlbnRzKVxuICAgICAqL1xuICAgIGFsbERheUV2ZW50cyA/IDogQ2FsZW5kYXJSb3d8Q2FsZW5kYXJSb3dDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGBmYWxzZWAgdG8gZGlzYWJsZSBkcmFnLWNyZWF0aW5nIGV2ZW50cyBpbiB0aGlzIHZpZXcuXG4gICAgICovXG4gICAgYWxsb3dEcmFnQ3JlYXRlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHRoaXMgYXMgYGZhbHNlYCB0byBkaXNhYmxlIGRyYWctbW92aW5nIGV2ZW50cyBpbiB0aGlzIHZpZXcuXG4gICAgICovXG4gICAgYWxsb3dEcmFnTW92ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGBmYWxzZWAgdG8gZGlzYWJsZSBkcmFnLXJlc2l6aW5nIGV2ZW50cyBpbiB0aGlzIHZpZXcuXG4gICAgICovXG4gICAgYWxsb3dEcmFnUmVzaXplID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgd2hlbiBtb3VzZXdoZWVsIHpvb21pbmcgb3V0IGZyb20gKm92ZXJmbG93aW5nKiB0aGUgY2xpZW50IGhlaWdodCwgaXQgaXMgbm90IHBlcm1pdHRlZCB0byB6b29tXG4gICAgICogZnVydGhlciBvdXQgc28gdGhhdCB0aGUgaG91cnMgKnVuZGVyZmxvdyogdGhlIGNsaWVudCBoZWlnaHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1hbGxvd1pvb21VbmRlcmZsb3cpXG4gICAgICovXG4gICAgYWxsb3dab29tVW5kZXJmbG93ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIGFuZCBiZWluZyBzaG93biB0aHJvdWdoIFtzaG93QnldKCNDb3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tc2hvd0J5KS4qXG4gICAgICogYHRydWVgIHRvIHNob3cgYSBjb25uZWN0b3IgYXJyb3cgcG9pbnRpbmcgdG8gdGhlIGFsaWduIHRhcmdldC5cbiAgICAgKi9cbiAgICBhbmNob3IgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB3aGVuIG5hdmlnYXRpbmcgdGhyb3VnaCB0aW1lLCB0aGUgbmV4dCB0aW1lXG4gICAgICogYmxvY2sgd2lsbCBiZSBhbmltYXRlZCBpbiBmcm9tIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1hbmltYXRlVGltZVNoaWZ0KVxuICAgICAqL1xuICAgIGFuaW1hdGVUaW1lU2hpZnQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciB0aGUgaWQgb2YgYW4gZWxlbWVudCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0J3MgZWxlbWVudCB0by4gQ2FuIGJlIGNvbmZpZ3VyZWQsIG9yIHNldCBvbmNlIGF0XG4gICAgICogcnVudGltZS4gVG8gYWNjZXNzIHRoZSBlbGVtZW50IG9mIGEgcmVuZGVyZWQgd2lkZ2V0LCBzZWUgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpLlxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWFyaWFEZXNjcmlwdGlvbilcbiAgICAgKi9cbiAgICBhcmlhRGVzY3JpcHRpb24gPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgbG9jYWxpemFibGUgc3RyaW5nIChNYXkgY29udGFpbiBgJ0x7fSdgIHRva2VucyB3aGljaCByZXNvbHZlIGluIHRoZSBsb2NhbGUgZmlsZSkgdG8gaW5qZWN0IGFzXG4gICAgICogdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1hcmlhTGFiZWwpXG4gICAgICovXG4gICAgYXJpYUxhYmVsID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNvbmZpZyBpcyBzZXQsIHRoZW4gdGhlIGBnZXN0dXJlYCBjb25maWd1cmVkICh3aGljaCBkZWZhdWx0cyB0byBgZGJsY2xpY2tgKSBjcmVhdGVzIGFcbiAgICAgKiBuZXcgZXZlbnQgYXQgdGhlIG1vdXNlIG9yIHRvdWNoIGV2ZW50J3MgdGltZSBwb2ludC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWF1dG9DcmVhdGUpXG4gICAgICovXG4gICAgYXV0b0NyZWF0ZSA/IDoge1xuICAgICAgICBnZXN0dXJlPzogc3RyaW5nXG4gICAgICAgIG5ld05hbWU/OiBGdW5jdGlvbnxzdHJpbmdcbiAgICAgICAgc3RlcD86IHN0cmluZ1xuICAgICAgICBzbmFwVHlwZT86ICdyb3VuZCd8J2NlaWwnfCdmbG9vcidcbiAgICAgICAgZHVyYXRpb24/OiBzdHJpbmdcbiAgICAgICAgc3RhcnRIb3VyPzogbnVtYmVyXG4gICAgfXxzdHJpbmd8Ym9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgQ29uZmlnIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBbVG9vbGJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci4gQW5vdGhlciB3YXkgdG8gYWRkIGEgYmJhciBpcyB0byB1c2UgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWJiYXIpXG4gICAgICovXG4gICAgYmJhciA/IDogKENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBwYW5lbCdzIGJvZHkgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWJvZHlDbHMpXG4gICAgICovXG4gICAgYm9keUNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aGVyZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGEgdHJ1dGh5IHZhbHVlIGluZGljYXRlIHdoaWNoIGV2ZW50cyBzaG91bGQgYnViYmxlIHVwIHRoZSBvd25lcnNoaXBcbiAgICAgKiBoaWVyYXJjaHkgd2hlbiB0cmlnZ2VyZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgY2FsbCBvblhYWCBtZXRob2QgbmFtZXMgKGUuZy4gYG9uU2hvd2AsIGBvbkNsaWNrYCksIGFzIGFuIGVhc3kgd2F5IHRvIGxpc3RlbiBmb3IgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctY2FsbE9uRnVuY3Rpb25zKVxuICAgICAqL1xuICAgIGNhbGxPbkZ1bmN0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGlmIGFuIGV2ZW50IGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlIGVycm9yIHByb3BhZ2F0ZXMgdXAgdGhlIHN0YWNrIGFuZCB0aGVcbiAgICAgKiBhcHBsaWNhdGlvbiBzdGF0ZSBpcyB1bmRlZmluZWQuIENvZGUgd2hpY2ggZm9sbG93cyB0aGUgZXZlbnQgaGFuZGxlciB3aWxsICpub3QqIGJlIGV4ZWN1dGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zKVxuICAgICAqL1xuICAgIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBjZW50cmUgdGhlIFdpZGdldCBpbiBicm93c2VyIHZpZXdwb3J0IHNwYWNlLlxuICAgICAqL1xuICAgIGNlbnRlcmVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byBlbGVtZW50LlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctY2xzKVxuICAgICAqL1xuICAgIGNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHBhbmVsIGlzIGNvbGxhcHNlZCAodGhlIGJvZHkgb2YgdGhlIHBhbmVsIGlzIGhpZGRlbiB3aGlsZSBvbmx5IHRoZSBoZWFkZXIgaXNcbiAgICAgKiB2aXNpYmxlKS4gT25seSB2YWxpZCBpZiB0aGUgcGFuZWwgaXMgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkuXG4gICAgICovXG4gICAgY29sbGFwc2VkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgZW5hYmxlcyBjb2xsYXBzaWJpbGl0eSBmb3IgdGhlIHBhbmVsLiBTZWUgW2NvbGxhcHNlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2VkKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWNvbGxhcHNpYmxlKVxuICAgICAqL1xuICAgIGNvbGxhcHNpYmxlID8gOiBib29sZWFufFBhbmVsQ29sbGFwc2VyQ29uZmlnfFBhbmVsQ29sbGFwc2VyT3ZlcmxheUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIHNwZWNpZmllZCBjb2xvciB0byB0aGUgd2lkZ2V0LCBieSBzZXR0aW5nIHRoZSBgLS1iLXByaW1hcnlgIENTUyB2YXJpYWJsZSBpbiB0aGUgd2lkZ2V0c1xuICAgICAqIGBzdHlsZWAgYmxvY2suXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1jb2xvcilcbiAgICAgKi9cbiAgICBjb2xvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciB3aGljaCBjb2x1bW4gdG8gc3RhcnQgaW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgY29sdW1uID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uLCBvciBuYW1lIG9mIGEgZnVuY3Rpb24gd2hpY2ggaXMgcGFzc2VkIHRoZSBbRGF5Q2VsbFdpdGhFdmVudHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjdHlwZWRlZi1EYXlDZWxsV2l0aEV2ZW50cykgb2JqZWN0IHdoaWNoXG4gICAgICogZGVzY3JpYmVzIHRoZSBldmVudHMgYW5kIGRldGFpbHMgb2YgdGhlIGRheS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWNvbHVtbkhlYWRlclJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7RGF5Q2VsbFdpdGhFdmVudHN9IGNlbGxEYXRhIEEgZGF0YSBibG9jayBkZXNjcmliaW5nIHRoZSBkYXRlIGFuZCB0aGUgZXZlbnRzIGZvciB0aGF0IGRhdGUuXG4gICAgICogQHJldHVybnMge3N0cmluZyxvYmplY3R9XG4gICAgICovXG4gICAgY29sdW1uSGVhZGVyUmVuZGVyZXIgPyA6ICgoY2VsbERhdGE6IERheUNlbGxXaXRoRXZlbnRzKSA9PiBzdHJpbmd8b2JqZWN0KXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBwcm9wZXJ0eSBhcyBgdHJ1ZWAgdG8gc2hvdyB0aGUgZGF5IG5hbWUgYW5kIGRhdGUgaGVhZGVycyBpbiBhIG1vcmUgY29tcGFjdCBzdHlsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWNvbXBhY3RIZWFkZXIpXG4gICAgICovXG4gICAgY29tcGFjdEhlYWRlciA/IDogYm9vbGVhblxuICAgIGNvbmZpZyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIG9yIFtwb3NpdGlvbmVkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1wb3NpdGlvbmVkKS4qXG4gICAgICogRWxlbWVudCwgV2lkZ2V0IG9yIFJlY3RhbmdsZSB0byB3aGljaCB0aGlzIFdpZGdldCBpcyBjb25zdHJhaW5lZC5cbiAgICAgKi9cbiAgICBjb25zdHJhaW5UbyA/IDogSFRNTEVsZW1lbnR8V2lkZ2V0fFJlY3RhbmdsZVxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gdGhlIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctY29udGVudEVsZW1lbnRDbHMpXG4gICAgICovXG4gICAgY29udGVudEVsZW1lbnRDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB0d28gcHJvcGVydGllcywgYHN0YXJ0YCBhbmQgYGVuZGAgcmVwcmVzZW50aW5nIHRoZSBzdGFydCBhbmRcbiAgICAgKiBlbmQgb2YgY29yZSB3b3JraW5nIGhvdXJzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctY29yZUhvdXJzKVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBEYXRlIGZvciBob3VycyBjYWxjdWxhdGlvblxuICAgICAqIEByZXR1cm5zIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICBjb3JlSG91cnMgPyA6IG9iamVjdHwoKGRhdGU6IERhdGUpID0+IG9iamVjdFtdKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uLCBvciBuYW1lIG9mIGEgZnVuY3Rpb24gd2hpY2ggcHJvZHVjZXMgYSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgYmxvY2sgdG8gY3JlYXRlIHRoZSBjdXJyZW50IHRpbWUgaW5kaWNhdG9yXG4gICAgICogd2hpY2ggaXMgZGlzcGxheWVkIGluIGEgZGF5IGNvbHVtbiB3aGljaCByZXByZXNlbnRzIHRoZSBjdXJyZW50IGRhdGUuIEl0IGlzIHRoZSBkZXZlbG9wZXIncyByZXNwb25zaWJpbGl0eVxuICAgICAqIHRvIGFkZCBDU1MgY2xhc3NlcyBhbmQgdGhlIGFwcHJvcHJpYXRlIENTUyBydWxlcyB0byBwcm9kdWNlIHRoZSBkZXNpcmUgYXBwZWFyYW5jZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWN1cnJlbnRUaW1lSW5kaWNhdG9yUmVuZGVyZXIpXG4gICAgICogQHJldHVybnMge0RvbUNvbmZpZ30gQW4gb2JqZWN0IHdoaWNoIGRlc2NyaWJlcyB0aGUgRE9NIHN0cnVjdHVyZSBvZiB0aGUgdG9kYXkgaW5kaWNhdG9yIGVsZW1lbnQuXG4gICAgICovXG4gICAgY3VycmVudFRpbWVJbmRpY2F0b3JSZW5kZXJlciA/IDogKCgpID0+IERvbUNvbmZpZyl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgaGFsZiBob3VyLCBmaWZ0ZWVuIG1pbnV0ZSB0aWNrIGxpbmVzIGFyZSByZW5kZXJlZCBpbiBhIGxvd2VyIGNvbnRyYXN0XG4gICAgICogY29sb3VyIHRoYW4gaG91ciBsaW5lcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWRhc2hlZFN1YnRpY2tzKVxuICAgICAqL1xuICAgIGRhc2hlZFN1YnRpY2tzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIFdpZGdldCBjb25maWd1cmF0aW9uIGlzIHVzZWQgaW4gdGhlIEdyaWQncyBSb3dFeHBhbmRlciBmZWF0dXJlJ3MgYHdpZGdldGAgY29uZmlnLCBwcm92aWRlIHRoZVxuICAgICAqIGZpZWxkIG9uIHRoZSBleHBhbmRlZCByZWNvcmQgdG8gdXNlIGZvciBwb3B1bGF0aW5nIHRoaXMgd2lkZ2V0J3Mgc3RvcmUgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gICAgZGF0YUZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gYXBwbHkgdG8gZWxlbWVudHMgZGF0YXNldCAoZWFjaCBrZXkgd2lsbCBiZSB1c2VkIGFzIGEgZGF0YS1hdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQpXG4gICAgICovXG4gICAgZGF0YXNldCA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRlIHRvIG9yaWVudCB0aGlzIHZpZXcncyBbcmFuZ2VdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RhdGVSYW5nZU93bmVyI2NvbmZpZy1yYW5nZSkgYXJvdW5kLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZGF0ZSlcbiAgICAgKi9cbiAgICBkYXRlID8gOiBEYXRlXG4gICAgLyoqXG4gICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiwgb3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiB0aGUgb3duZXJzaGlwIGhpZXJhcmNoeSB3aGljaCBhblxuICAgICAqIGFwcGxpY2F0aW9uIG1heSBwcm92aWRlIHRvIGZpbHRlciBvdXQgZGF5IGNvbHVtbnMgZm9yIGluZGl2aWR1YWwgZGF0ZXMuXG4gICAgICogQHBhcmFtIHtEYXlDZWxsfSBjb250ZXh0IEluZm9ybWF0aW9uIGFib3V0IHRoZSBkYXkgY29sdW1uIHRvIGJlIGNyZWF0ZWQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiBgZmFsc2VgIHRvIG5vdCBkaXNwbGF5IGEgY29sdW1uIGZvciB0aGUgcGFzc2VkIGRhdGUuXG4gICAgICovXG4gICAgZGF0ZUZpbHRlciA/IDogKChjb250ZXh0OiBEYXlDZWxsKSA9PiBib29sZWFuKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gdG8gdXNlIHRvIGNyZWF0ZSBkYXRlIG91dHB1dCBmb3IgdmlldyBkZXNjcmlwdGlvbnMuXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIFRoZSBkYXRlIHRvIGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuXG4gICAgICovXG4gICAgZGF0ZUZvcm1hdCA/IDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIHVzZWQgdG8gc2VwYXJhdGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBpbiB0aGUgW2Rlc2NyaXB0aW9uRm9ybWF0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL0Rlc2NyaWJhYmxlI2NvbmZpZy1kZXNjcmlwdGlvbkZvcm1hdCkuXG4gICAgICovXG4gICAgZGF0ZVNlcGFyYXRvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgbmFtZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIGlzIHBhc3NlZCB0aGUgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIG9iamVjdCB3aGljaFxuICAgICAqIHdpbGwgYmUgdXNlZCB0byBzeW5jIHdpdGggYSBkYXkgY29sdW1uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZGF5Q2VsbFJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7RG9tQ29uZmlnLG9iamVjdH0gZG9tQ29uZmlnIEEgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGNvbmZpZyBvYmplY3Qgd2hpY2ggaXMgdXNlZCB0byBzeW5jIHRoZSBkYXkgY29sdW1uIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRvbUNvbmZpZy5jbGFzc05hbWUgQW4gb2JqZWN0IHdobydzIHRydXRoeSBwcm9wZXJ0eSBuYW1lcyB3aWxsIGJlIGFwcGxpZWQgYXMgY2xhc3MgbmFtZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRvbUNvbmZpZy5zdHlsZSBBIENTUyBzdHlsZSBkZWZpbml0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZG9tQ29uZmlnLmRhdGFzZXQgVGhlIERPTSBkYXRhIHByb3BlcnRpZXMgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RG9tQ29uZmlnW119IGNoaWxkcmVuIFRoZSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgZGVmaW5pdGlvbnMgZm9yIHRoZSBldmVudHMgaW4gdGhlIGRheS5cbiAgICAgKiBAcGFyYW0ge0RheUNlbGx9IGNlbGxEYXRhIEEgYERheUNlbGxgIG9iamVjdCB0aGF0IGNvbnRhaW5zIGRhdGEgYWJvdXQgdGhlIGNlbGwuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICBkYXlDZWxsUmVuZGVyZXIgPyA6ICgoZG9tQ29uZmlnOiB7IGNsYXNzTmFtZTogb2JqZWN0LCBzdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QgfSwgY2hpbGRyZW46IERvbUNvbmZpZ1tdLCBjZWxsRGF0YTogRGF5Q2VsbCkgPT4gc3RyaW5nKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBFaXRoZXIgdGhlIGVuZCBob3VyIG9mIHRoZSBkYXksIG9yIGEgKjI0IGhvdXIqwqBgSEg6TU1gIHN0cmluZyBkZW5vdGluZyB0aGUgZW5kIGRhdGUgb2YgdGhlIGxhc3QgcmVuZGVyZWQgdGltZSBibG9jay5cbiAgICAgKiBZb3UgY2FuIGFsc28gc2V0IHRoaXMgdmFsdWUgdG8gYSBtcyB0aW1lc3RhbXAgcmVwcmVzZW50aW5nIHRpbWUgZnJvbSBtaWRuaWdodC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWRheUVuZFRpbWUpXG4gICAgICovXG4gICAgZGF5RW5kVGltZSA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIG5hbWUgb2YgYSBmdW5jdGlvbiB3aGljaCBpcyBwYXNzZWQgdGhlIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3Qgd2hpY2hcbiAgICAgKiB3aWxsIGJlIHVzZWQgdG8gc3luYyB3aXRoIGEgZGF5IGNlbGwgaGVhZGVyIDxzdHJvbmc+aW4gdGhlIGFsbCBkYXkgcm93PC9zdHJvbmc+LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZGF5SGVhZGVyUmVuZGVyZXIpXG4gICAgICogQHBhcmFtIHtEb21Db25maWcsb2JqZWN0fSBoZWFkZXJEb21Db25maWcgQSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgY29uZmlnIG9iamVjdCB3aGljaCBpcyB1c2VkIHRvIHN5bmMgdGhlIGRheSBoZWFkZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyRG9tQ29uZmlnLmNsYXNzTmFtZSBBbiBvYmplY3Qgd2hvJ3MgdHJ1dGh5IHByb3BlcnR5IG5hbWVzIHdpbGwgYmUgYXBwbGllZCBhcyBjbGFzcyBuYW1lcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyRG9tQ29uZmlnLnN0eWxlIEEgQ1NTIHN0eWxlIGRlZmluaXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBoZWFkZXJEb21Db25maWcuZGF0YXNldCBUaGUgRE9NIGRhdGEgcHJvcGVydGllcyB0byBzZXQuXG4gICAgICogQHBhcmFtIHtEb21Db25maWdbXX0gaGVhZGVyRG9tQ29uZmlnLmNoaWxkcmVuIFRoZSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgZGVmaW5pdGlvbnMgdGhlIGhlYWRlciBjb250ZW50LiBUaGVyZSB3aWxsIGJlIDIgYGNoaWxkcmVuYCBlbmNhcHN1bGF0aW5nIHRoZSBkYXkgbmFtZSBhbmQgdGhlIGRhdGUuXG4gICAgICogQHBhcmFtIHtEYXlDZWxsfSBjZWxsRGF0YSBBIGBEYXlDZWxsYCBvYmplY3QgdGhhdCBjb250YWlucyBkYXRhIGFib3V0IHRoZSBjZWxsLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgZGF5SGVhZGVyUmVuZGVyZXIgPyA6ICgoaGVhZGVyRG9tQ29uZmlnOiB7IGNsYXNzTmFtZTogb2JqZWN0LCBzdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QsIGNoaWxkcmVuOiBEb21Db25maWdbXSB9LCBjZWxsRGF0YTogRGF5Q2VsbCkgPT4gc3RyaW5nKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlcikgZm9ybWF0IHN0cmluZy9mdW5jdGlvbiBmb3IgZGF5IG5hbWVzIGluIHRoZSBoZWFkZXIgcm93IChlLmcuLCBcImRkZFwiIGZvciBcIk1vblwiLCBcIlR1ZVwiLCAuLi4pXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIFRoZSBkYXRlIHRvIGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuXG4gICAgICovXG4gICAgZGF5TmFtZUZvcm1hdCA/IDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIEVpdGhlciB0aGUgc3RhcnQgaG91ciBvZiB0aGUgZGF5LCBvciBhICoyNCBob3VyKsKgYEhIOk1NYCBzdHJpbmcgZGVub3RpbmcgdGhlIHN0YXJ0IHRpbWUgZm9yIGRheXMuIFRoaXNcbiAgICAgKiBpcyBtaWRuaWdodCBieSBkZWZhdWx0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZGF5U3RhcnRTaGlmdClcbiAgICAgKi9cbiAgICBkYXlTdGFydFNoaWZ0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogRWl0aGVyIHRoZSBzdGFydCBob3VyIG9mIHRoZSBkYXksIG9yIGEgKjI0IGhvdXIqwqBgSEg6TU1gIHN0cmluZyBkZW5vdGluZyB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHJlbmRlcmVkXG4gICAgICogZGFpbHkgdGltZSBibG9jay4gWW91IGNhbiBhbHNvIHNldCB0aGlzIHZhbHVlIHRvIGEgbXMgdGltZXN0YW1wIHJlcHJlc2VudGluZyB0aW1lIGZyb20gbWlkbmlnaHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1kYXlTdGFydFRpbWUpXG4gICAgICovXG4gICAgZGF5U3RhcnRUaW1lID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldCB3aGVuIGEgc2luZ2xlIHZhbHVlIGlzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBXaWRnZXQuIFN1Y2ggYXMgd2hlbiB1c2VkXG4gICAgICogaW4gYSBncmlkIFdpZGdldENvbHVtbiwgdGhpcyBpcyB0aGUgcHJvcGVydHkgdG8gd2hpY2ggdGhlIGNvbHVtbidzIGBmaWVsZGAgaXMgYXBwbGllZC5cbiAgICAgKi9cbiAgICBkZWZhdWx0QmluZFByb3BlcnR5ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIFtxdWVyeV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjZnVuY3Rpb24tcXVlcnkpIHNlbGVjdG9yIGZ1bmN0aW9uIHdoaWNoIGNhbiBpZGVudGlmeSB0aGUgZGVzY2VuZGFudCB3aWRnZXQgdG8gd2hpY2hcbiAgICAgKiBmb2N1cyBzaG91bGQgYmUgZGlyZWN0ZWQgYnkgZGVmYXVsdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWRlZmF1bHRGb2N1cylcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gd2lkZ2V0IFdpZGdldCBwYXNzZWQgdG8gbWV0aG9kXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydXRoeSB2YWx1ZSBpZiB3aWRnZXQgaXMgdGhlIGRlZmF1bHQgb25lXG4gICAgICovXG4gICAgZGVmYXVsdEZvY3VzID8gOiAoKHdpZGdldDogV2lkZ2V0KSA9PiBib29sZWFuKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0IHNldHRpbmdzIHRvIGFwcGx5IHRvIGFsbCBjaGlsZCB3aWRnZXRzLlxuICAgICAqL1xuICAgIGRlZmF1bHRzID8gOiBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWdcbiAgICAvKipcbiAgICAgKiBPcHRpb25zIHRvIGFkZCBpbnRvIHNjcm9sbCBvcHRpb25zIHdoZW4gdGhlIFtzY3JvbGxUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNmdW5jdGlvbi1zY3JvbGxUbykgbWV0aG9kIGlzIGNhbGxlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWRlZmF1bHRTY3JvbGxPcHRpb25zKVxuICAgICAqL1xuICAgIGRlZmF1bHRTY3JvbGxPcHRpb25zID8gOiBCcnludHVtU2Nyb2xsT3B0aW9uc1xuICAgIC8qKlxuICAgICAqIFRoZSBkYXRlIGZvcm1hdCB1c2VkIGJ5IHRoZSBkZWZhdWx0IFtkZXNjcmlwdGlvblJlbmRlcmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL0Rlc2NyaWJhYmxlI2NvbmZpZy1kZXNjcmlwdGlvblJlbmRlcmVyKSBmb3IgcmVuZGVyaW5nIHRoZSB2aWV3J3MgZGVzY3JpcHRpb24uXG4gICAgICogSWYgdGhpcyB2YWx1ZSBpcyBgbnVsbGAsIHRoZSBbZGF0ZUZvcm1hdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9EZXNjcmliYWJsZSNjb25maWctZGF0ZUZvcm1hdCkgKGFuZCBwb3RlbnRpYWxseSBbZGF0ZVNlcGFyYXRvcl0oI1NjaGVkdWxlci92aWV3L21peGluL0Rlc2NyaWJhYmxlI2NvbmZpZy1kYXRlU2VwYXJhdG9yKSkgd2lsbFxuICAgICAqIGJlIHVzZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1kZXNjcmlwdGlvbkZvcm1hdClcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbkZvcm1hdCA/IDogc3RyaW5nfHN0cmluZ1tdfGJvb2xlYW5bXXwoKGRhdGU6IERhdGUpID0+IHN0cmluZyl8RnVuY3Rpb25bXVxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyB0aGUgdGV4dHVhbCBkZXNjcmlwdGlvbiBmb3IgdGhpcyB2aWV3LiBJZiBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlXG4gICAgICogW2Rlc2NyaXB0aW9uRm9ybWF0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL0Rlc2NyaWJhYmxlI2NvbmZpZy1kZXNjcmlwdGlvbkZvcm1hdCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1kZXNjcmlwdGlvblJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSB2aWV3IFRoZSBhY3RpdmUgdmlldyBpbiBjYXNlIHRoZSBmdW5jdGlvbiBpcyBpbiBhbm90aGVyIHNjb3BlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IERlc2NyaXB0aW9uIHN0cmluZ1xuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uUmVuZGVyZXIgPyA6ICh2aWV3OiBXaWRnZXQpID0+IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENoZWNrIGZvciBDU1MgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2hlbiB1cGdyYWRpbmcgdG8gdjcuIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgY2hlY2tzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcylcbiAgICAgKi9cbiAgICBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBvciBlbmFibGUgdGhlIHdpZGdldC4gSXQgaXMgc2ltaWxhciB0byBbcmVhZE9ubHldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWFkT25seSkgZXhjZXB0IGEgZGlzYWJsZWQgd2lkZ2V0XG4gICAgICogY2Fubm90IGJlIGZvY3VzZWQsIHVzZXMgYSBkaWZmZXJlbnQgcmVuZGl0aW9uICh1c3VhbGx5IGdyZXlpc2gpIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWxlY3RpbmcgaXRzIHZhbHVlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZGlzYWJsZWQpXG4gICAgICovXG4gICAgZGlzYWJsZWQgPyA6IGJvb2xlYW58J2luZXJ0J1xuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBwbGFjZW1lbnQgb2YgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBhZGRlZCB0byBhIFtwYW5lbCdzIF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbClcbiAgICAgKiBbc3RyaXBzIGNvbGxlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXN0cmlwcykuIFR5cGljYWwgdmFsdWVzIGZvciB0aGlzIGNvbmZpZyBhcmUgYCd0b3AnYCxcbiAgICAgKiBgJ2JvdHRvbSdgLCBgJ2xlZnQnYCwgb3IgYCdyaWdodCdgLCB3aGljaCBjYXVzZSB0aGUgd2lkZ2V0IHRvIGJlIHBsYWNlZCBvbiB0aGF0IHNpZGUgb2YgdGhlIHBhbmVsJ3NcbiAgICAgKiBib2R5LiBTdWNoIHdpZGdldHMgYXJlIGNhbGxlZCBcImVkZ2Ugc3RyaXBzXCIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1kb2NrKVxuICAgICAqL1xuICAgIGRvY2sgPyA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBiZSBhYmxlIHRvIGRyYWcgYSB3aWRnZXQgZnJlZWx5IG9uIHRoZSBwYWdlLiBPciBzZXQgdG8gYW4gb2JqZWN0IHdpdGggYSDCtGhhbmRsZVNlbGVjdG9ywrRcbiAgICAgKiBwcm9wZXJ0eSB3aGljaCBjb250cm9scyB3aGVuIGEgZHJhZyBzaG91bGQgc3RhcnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1kcmFnZ2FibGUpXG4gICAgICovXG4gICAgZHJhZ2dhYmxlID8gOiBib29sZWFufHtcbiAgICAgICAgaGFuZGxlU2VsZWN0b3I/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFtkdXJhdGlvblVuaXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL0V2ZW50TW9kZWwjZmllbGQtZHVyYXRpb25Vbml0KSB0byB1c2Ugd2hlbiBkcmFnLWNyZWF0aW5nIGV2ZW50c1xuICAgICAqIGluIHRoaXMgdmlldy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWRyYWdVbml0KVxuICAgICAqL1xuICAgIGRyYWdVbml0ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBNYWtlIHRoaXMgUGFuZWwgYSBkb2NrZWQgZHJhd2VyIHdoaWNoIHNsaWRlcyBvdXQgZnJvbSBvbmUgc2lkZSBvZiB0aGUgYnJvd3NlciB2aWV3cG9ydCBieSBkZWZhdWx0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZHJhd2VyKVxuICAgICAqIEBwYXJhbSB7J3N0YXJ0JywnbGVmdCcsJ2VuZCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ30gc2lkZSBUaGUgc2lkZSBvZiB0aGUgdmlld3BvcnQgdG8gZG9jayB0aGUgZHJhd2VyIHRvLiAgKiBgJ3N0YXJ0J2AgbWVhbnMgdGhlIGBpbmxpbmUtc3RhcnRgIHNpZGUuICogYCdlbmQnYCBtZWFucyB0aGUgYGlubGluZS1lbmRgIHNpZGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmcsbnVtYmVyfSBzaXplIFRoZSBzaXplIG9mIHRoZSBkcmF3ZXIgaW4gaXRzIGNvbGxhcHNpYmxlIGF4aXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpbmxpbmUgSWYgdXNpbmcgdGhlIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyB0byBwbGFjZSB0aGUgZHJhd2VyIGluc2lkZSBhIGhvc3Qgd2lkZ2V0LCB0aGlzIG1heSBiZSBzZXQgdG8gYHRydWVgIHRvIG1ha2UgdGhlIGRyYXdlciBpbmxpbmUgd2l0aGluIHRoYXQgaG9zdC4gTm90ZSB0aGF0LCBpZiB1c2luZyB0aGlzLCB0aGUgbGF5b3V0IG9mIHRoZSBob3N0IGVsZW1lbnQgbXVzdCBoYXZlIGBmbGV4LWRpcmVjdGlvbmAgc2V0IGFwcHJvcHJpYXRlbHkuXG4gICAgICogQHBhcmFtIHtib29sZWFuLG9iamVjdH0gYXV0b0Nsb3NlIFNwZWNpZmllcyB3aGF0IHVzZXIgYWN0aW9ucyBzaG91bGQgYXV0b21hdGljYWxseSBjbG9zZSB0aGUgZHJhd2VyLiBEZWZhdWx0cyB0byBjbG9zaW5nIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGRyYXdlciBvciB3aGVuIGZvY3VzIG1vdmVzIG91dHNpZGUgb2YgdGhlIGRyYXdlci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sc3RyaW5nfSBhdXRvQ2xvc2UubW91c2Vkb3duIElmIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIsIHRoZSBkcmF3ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGhpZGRlbi4gSWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCBpdCBpcyB1c2VkIGFzIGEgQ1NTIHNlbGVjdG9yIHRvIGZpbHRlciBjbGlja3Mgd2hpY2ggc2hvdWxkIGNsb3NlIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gYXV0b0Nsb3NlLmZvY3Vzb3V0IElmIGZvY3VzIG1vdmVzIG91dHNpZGUgb2YgdGhlIGRyYXdlciwgdGhlIGRyYXdlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaGlkZGVuLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRvQ2xvc2UubW91c2VvdXQgSGlkZXMgdGhlIGRyYXdlciB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIGRyYXdlciBhZnRlciB0aGUgYGF1dG9DbG9zZURlbGF5YCBwZXJpb2QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGF1dG9DbG9zZURlbGF5IFdoZW4gdXNpbmcgYG1vdXNlb3V0YCwgdGhpcyBpcyB0aGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG4gICAgICovXG4gICAgZHJhd2VyID8gOiBib29sZWFufHtzaWRlPzogJ3N0YXJ0J3wnbGVmdCd8J2VuZCd8J3JpZ2h0J3wndG9wJ3wnYm90dG9tJywgc2l6ZT86IHN0cmluZ3xudW1iZXIsIGlubGluZT86IGJvb2xlYW4sIGF1dG9DbG9zZTogeyBtb3VzZWRvd24/OiBib29sZWFufHN0cmluZywgZm9jdXNvdXQ/OiBib29sZWFufHN0cmluZywgbW91c2VvdXQ/OiBzdHJpbmcgfSwgYXV0b0Nsb3NlRGVsYXk/OiBudW1iZXJ9XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHNwZWNpZnlpbmcgYXR0cmlidXRlcyB0byBhc3NpZ24gdG8gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHdpZGdldC5cbiAgICAgKiBTZXQgYG51bGxgIHZhbHVlIHRvIGF0dHJpYnV0ZSB0byByZW1vdmUgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1lbGVtZW50QXR0cmlidXRlcylcbiAgICAgKi9cbiAgICBlbGVtZW50QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+XG4gICAgLyoqXG4gICAgICogVGhlIGVuZCBkYXRlIChUaW1lIGNvbXBvbmVudCBpcyB6ZXJvZWQpIG9mIHRoaXMgdmlldy4gTm90ZSB0aGF0IGluIHRlcm1zIG9mIGZ1bGwgZGF5cyxcbiAgICAgKiB0aGlzIGlzIGV4Y2x1c2l2ZSwgaWU6IDIwMjAtMDEtMDEyIHRvIDIwMjAtMDEtMDggaXMgKnNldmVuKiBkYXlzLiBUaGUgZW5kIGlzIDAwOjAwOjAwIG9uXG4gICAgICogdGhlIDh0aC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWVuZERhdGUpXG4gICAgICovXG4gICAgZW5kRGF0ZSA/IDogRGF0ZVxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkgdG8gZmlsdGVyIHdoaWNoIGV2ZW50c1xuICAgICAqIGFyZSBjb2xsZWN0ZWQgaW50byB0aGUgZGF5IGNlbGwgZGF0YSBibG9ja3MuXG4gICAgICogUmV0dXJuIGB0cnVlYCB0byBpbmNsdWRlIHRoZSBwYXNzZWQgZXZlbnQsIG9yIGEgKmZhbHN5KiB2YWx1ZSB0byBleGNsdWRlIHRoZSBldmVudC5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBldmVudCB0aGUgcGFzc2VkIGV2ZW50XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgZXZlbnRGaWx0ZXIgPyA6ICgoZXZlbnQ6IEV2ZW50TW9kZWwpID0+IGJvb2xlYW4pfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkgd2hpY2ggeW91XG4gICAgICogY2FuIHNwZWNpZnkgdG8gY3VzdG9taXplIGV2ZW50IERPTSBjb250ZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZXZlbnRIZWFkZXJSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGRhdGEgYWJvdXQgdGhlIGV2ZW50IGJlaW5nIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtDYWxlbmRhclZpZXd9IGRldGFpbC52aWV3IFRoZSB2aWV3IHJlbmRlcmluZyB0aGUgZXZlbnRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBkZXRhaWwuZXZlbnRSZWNvcmQgVGhlIGV2ZW50IHJlY29yZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlJlc291cmNlTW9kZWx9IGRldGFpbC5yZXNvdXJjZVJlY29yZCBUaGUgcmVzb3VyY2UgcmVjb3JkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhIEEgZGF0YSBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgZXZlbnQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5zdHlsZSBUaGUgc3R5bGUgcHJvcGVydHkgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGV2ZW50IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuY2xzIFRoZSBjbHMgcHJvcGVydHkgaXMgYW4gb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGV2ZW50IGVsZW1lbnQgaWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHRydXRoeVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5pY29uU3R5bGUgVGhlIGljb25TdHlsZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3QgY29udGFpbmluZyBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgaWNvbiBlbGVtZW50IGlmIGFuIGljb24gZWxlbWVudCBpcyB0byBiZSB1c2VkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmljb25DbHMgVGhlIGljb25DbHMgcHJvcGVydHkgaXMgYW4gb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGljb24gZWxlbWVudC4gSW5pdGlhbGx5IHNldCBmcm9tIHRoZSBldmVudCByZWNvcmQncyBbaWNvbkNsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvRXZlbnRNb2RlbCNmaWVsZC1pY29uQ2xzKS4gQ2FuIGJlIG11dGF0ZWQgYnkgdGhlIHJlbmRlcmVyLiBJZiBudWxsLCBvciBubyBwcm9wZXJ0aWVzIGFyZSBzZXQsIG5vIGljb24gd2lsbCBiZSByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXRhaWwucmVuZGVyRGF0YS5ldmVudENvbG9yIENvbG9yIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGV2ZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmRhdGFzZXQgQW4gb2JqZWN0IHdoaWNoIHByb2R1Y2VzIHRoZSBgZGF0YXNldGAgb2YgdGhlIHJlc3VsdGluZyBldmVudCBiYXJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFpbC5yZW5kZXJEYXRhLnNvbGlkQmFyIFRoaXMgaXMgdmFsaWQgZm9yIHZpZXdzIHdoaWNoIGNyZWF0ZSBldmVudCBiYXJzLiBUaGlzIGlzIHNldCB0byBgdHJ1ZWAgYnkgZGVmYXVsdCBmb3IgYWxsIGRheSBhbmQgaW50ZXJkYXkgZXZlbnRzIHNvIHRoYXQgdGhlc2UgYXBwZWFyIGFzIGEgc29saWQgYmxvY2sgb2YgYmFja2dyb3VuZCBjb2xvci4gQW4gZXZlbnRSZW5kZXJlciBtYXkgbXV0YXRlIHRoaXMgZmxhZyB0byBjaGFuZ2UgaW4gd2hhdCBtYW5uZXIgdGhlIGV2ZW50IGJhciBpcyBjb2xvcmVkIC0gYXMgYSBzb2xpZCBiYXIgb2YgY29sb3IsIG9yIHVzaW5nIHRoZSBmb3JlZ3JvdW5kIGNvbG9yICh0ZXh0IGFuZCBpY29ucykgc3VjaCBhcyB0aGUgTW9udGhWaWV3LCB0aGUgQ2FsZW5kYXJSb3cgKGFsbCBkYXkgZXZlbnRzIGluIGEgRGF5VmlldyksIGFuZCBPdmVyZmxvd1BvcHVwc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXRhaWwucmVuZGVyRGF0YS5ib2R5Q29sb3IgV2hlbiB1c2VkIGluIGEgW0RheVZpZXddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcpLCB0aGlzIGNvbG9yIGlzIGFwcGxpZWQgdG8gdGhlIGJvZHkgb2YgdGhlIGV2ZW50IGVsZW1lbnQuIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgbGlnaHQgZW5vdWdoIHRoYXQgdGhlIHRleHQgY29sb3IgKEZyb20gdGhlIFNBU1MgdmFyaWFibGUgYCRkYXl2aWV3LWV2ZW50LWNvbG9yYCkgaXMgdmlzaWJsZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGV0YWlsLnNob3dCdWxsZXQgSWYgdGhlcmUgaXMgbm8gYGljb25DbHNgLCBhbmQgdGhlIGV2ZW50IGlzIG5vdCByZWN1cnJpbmcsIHRoZW4gYnkgZGVmYXVsdCBhIFwiYnVsbGV0XCIgY2lyY3VsYXIgaWNvbiBpcyBzaG93biBpZiB0aGUgdmlldydzIFtzaG93QnVsbGV0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG93QnVsbGV0KSBpZiBzZXQuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpbiBhbiBldmVudCByZW5kZXJlciBvdmVycmlkZXMgdGhpcyBiZWhhdmlvdXIuXG4gICAgICogQHJldHVybnMge0RvbUNvbmZpZyxEb21Db25maWdbXSxzdHJpbmcsdm9pZH1cbiAgICAgKi9cbiAgICBldmVudEhlYWRlclJlbmRlcmVyID8gOiAoKGRldGFpbDogeyB2aWV3OiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgcmVuZGVyRGF0YTogeyBzdHlsZTogb2JqZWN0LCBjbHM6IG9iamVjdCwgaWNvblN0eWxlOiBvYmplY3QsIGljb25DbHM6IG9iamVjdCwgZXZlbnRDb2xvcjogc3RyaW5nLCBkYXRhc2V0OiBvYmplY3QsIHNvbGlkQmFyOiBib29sZWFuLCBib2R5Q29sb3I6IHN0cmluZyB9LCBzaG93QnVsbGV0OiBib29sZWFuIH0pID0+IERvbUNvbmZpZ3xEb21Db25maWdbXXxzdHJpbmd8dm9pZCl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiB0byBtYW5hZ2UgZXZlbnQgbGF5b3V0IGNsYXNzLlxuICAgICAqIFNlZSBbRmx1aWREYXlMYXlvdXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvbGF5b3V0L2RheS9GbHVpZERheUxheW91dCkgY2xhc3MgZG9jcyB0byBzZWUgYWxsIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZXZlbnRMYXlvdXQpXG4gICAgICovXG4gICAgZXZlbnRMYXlvdXQgPyA6IEZsdWlkRGF5TGF5b3V0Q29uZmlnXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiB0aGUgb3duZXJzaGlwIGhpZXJhcmNoeSB3aGljaCB5b3VcbiAgICAgKiBjYW4gc3BlY2lmeSB0byBjdXN0b21pemUgZXZlbnQgRE9NIGNvbnRlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1ldmVudFJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgZGF0YSBhYm91dCB0aGUgZXZlbnQgYmVpbmcgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyVmlld30gZGV0YWlsLnZpZXcgVGhlIHZpZXcgcmVuZGVyaW5nIHRoZSBldmVudFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWx9IGRldGFpbC5ldmVudFJlY29yZCBUaGUgZXZlbnQgcmVjb3JkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuUmVzb3VyY2VNb2RlbH0gZGV0YWlsLnJlc291cmNlUmVjb3JkIFRoZSBSZXNvdXJjZSByZWNvcmRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEgQSBkYXRhIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBldmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLnN0eWxlIFRoZSBzdHlsZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3QgY29udGFpbmluZyBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZXZlbnQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5jbHMgVGhlIGNscyBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgZXZlbnQgZWxlbWVudCBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdHJ1dGh5XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmljb25TdHlsZSBUaGUgaWNvblN0eWxlIHByb3BlcnR5IGlzIGFuIG9iamVjdCBjb250YWluaW5nIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBpY29uIGVsZW1lbnQgaWYgYW4gaWNvbiBlbGVtZW50IGlzIHRvIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuaWNvbkNscyBUaGUgaWNvbkNscyBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgaWNvbiBlbGVtZW50LiBJbml0aWFsbHkgc2V0IGZyb20gdGhlIGV2ZW50IHJlY29yZCdzIFtpY29uQ2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9FdmVudE1vZGVsI2ZpZWxkLWljb25DbHMpLiBDYW4gYmUgbXV0YXRlZCBieSB0aGUgcmVuZGVyZXIuIElmIG51bGwsIG9yIG5vIHByb3BlcnRpZXMgYXJlIHNldCwgbm8gaWNvbiB3aWxsIGJlIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLmV2ZW50Q29sb3IgQ29sb3IgdG8gYmUgYXBwbGllZCB0byB0aGUgZXZlbnQuIFRoaXMgbWF5IGJlIGEgQ1NTIGNvbG9yIG5hbWUgb3IgYSBDU1MgY29sb3IgdmFsdWUgaW4gYW55IG9mIHRoZSBzdXBwb3J0ZWQgQ1NTIGNvbG9yIGZvcm1hdHMgc3VjaCBhcyBgI1JSR0dCQmAsIGByZ2IoMjU1LCAwLCAwKWAsIG9yIGByZ2JhKDI1NSwgMCwgMCwgMC41KWAuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLmV2ZW50QmFja2dyb3VuZCBBIENTUyBiYWNrZ3JvdW5kIHN0eWxlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGV2ZW50LiBUaGlzIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBzZXQgYnkgdGhlIHJlbmRlcmVyIHRvIHByb3ZpZGUgYSBiYWNrZ3JvdW5kIGltYWdlIG9yIGdyYWRpZW50IGZvciB0aGUgZXZlbnQgYmFyLiBUaGlzIG92ZXJyaWRlcyB0aGUgYGV2ZW50Q29sb3JgIHByb3BlcnR5IGlmIHByZXNlbnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLnRleHRDb2xvciBBIENTUyBjb2xvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBldmVudCB0ZXh0LiBUaGlzIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBzZXQgYnkgdGhlIHJlbmRlcmVyIHRvIHByb3ZpZGUgYSBjdXN0b20gY29sb3IgZm9yIHRoZSBldmVudCBuYW1lIHRleHQgaW4gdGhlIGV2ZW50IGJhci4gVGhpcyBtYXkgYmUgYSBDU1MgY29sb3IgbmFtZSBvciBhIENTUyBjb2xvciB2YWx1ZSBpbiBhbnkgb2YgdGhlIHN1cHBvcnRlZCBDU1MgY29sb3IgZm9ybWF0cyBzdWNoIGFzIGAjUlJHR0JCYCwgYHJnYigyNTUsIDAsIDApYCwgb3IgYHJnYmEoMjU1LCAwLCAwLCAwLjUpYC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuZXZlbnRJbm5lclN0eWxlIFRoZSBldmVudElubmVyU3R5bGUgcHJvcGVydHkgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGlubmVyIHBhcnQgb2YgdGhlIGV2ZW50IGVsZW1lbnQsIHRoZSBgLmItY2FsLWV2ZW50YCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5kYXRhc2V0IEFuIG9iamVjdCB3aGljaCBwcm9kdWNlcyB0aGUgYGRhdGFzZXRgIG9mIHRoZSByZXN1bHRpbmcgZXZlbnQgYmFyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBkZXRhaWwucmVuZGVyRGF0YS5zb2xpZEJhciBUaGlzIGlzIHZhbGlkIGZvciB2aWV3cyB3aGljaCBjcmVhdGUgZXZlbnQgYmFycy4gVGhpcyBpcyBzZXQgdG8gYHRydWVgIGJ5IGRlZmF1bHQgZm9yIGFsbCBkYXkgYW5kIGludGVyZGF5IGV2ZW50cyBzbyB0aGF0IHRoZXNlIGFwcGVhciBhcyBhIHNvbGlkIGJsb2NrIG9mIGJhY2tncm91bmQgY29sb3IuIEFuIGV2ZW50UmVuZGVyZXIgbWF5IG11dGF0ZSB0aGlzIGZsYWcgdG8gY2hhbmdlIGluIHdoYXQgbWFubmVyIHRoZSBldmVudCBiYXIgaXMgY29sb3JlZCAtIGFzIGEgc29saWQgYmFyIG9mIGNvbG9yLCBvciB1c2luZyB0aGUgZm9yZWdyb3VuZCBjb2xvciAodGV4dCBhbmQgaWNvbnMpIHN1Y2ggYXMgdGhlIE1vbnRoVmlldywgdGhlIENhbGVuZGFyUm93IChhbGwgZGF5IGV2ZW50cyBpbiBhIERheVZpZXcpLCBhbmQgT3ZlcmZsb3dQb3B1cHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEuYm9keUNvbG9yIFdoZW4gdXNlZCBpbiBhIFtEYXlWaWV3XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3KSwgdGhpcyBjb2xvciBpcyBhcHBsaWVkIHRvIHRoZSBib2R5IG9mIHRoZSBldmVudCBlbGVtZW50LiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGxpZ2h0IGVub3VnaCB0aGF0IHRoZSB0ZXh0IGNvbG9yIChGcm9tIHRoZSBTQVNTIHZhcmlhYmxlIGAkZGF5dmlldy1ldmVudC1jb2xvcmApIGlzIHZpc2libGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFpbC5yZW5kZXJEYXRhLnNob3dCdWxsZXQgSWYgdGhlcmUgaXMgbm8gYGljb25DbHNgLCBhbmQgdGhlIGV2ZW50IGlzIG5vdCByZWN1cnJpbmcsIHRoZW4gYnkgZGVmYXVsdCBhIFwiYnVsbGV0XCIgY2lyY3VsYXIgaWNvbiBpcyBzaG93biBpZiB0aGUgdmlldydzIFtzaG93QnVsbGV0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG93QnVsbGV0KSBpZiBzZXQuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpbiBhbiBldmVudCByZW5kZXJlciBvdmVycmlkZXMgdGhpcyBiZWhhdmlvdXIuXG4gICAgICogQHJldHVybnMge0RvbUNvbmZpZyxEb21Db25maWdbXSxzdHJpbmcsdm9pZH0gVGhlIGNvbnRlbnQgdG8gYmUgdXNlZCBhcyB0aGUgZXZlbnQgYm9keS5cbiAgICAgKi9cbiAgICBldmVudFJlbmRlcmVyID8gOiAoKGRldGFpbDogeyB2aWV3OiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgcmVuZGVyRGF0YTogeyBzdHlsZTogb2JqZWN0LCBjbHM6IG9iamVjdCwgaWNvblN0eWxlOiBvYmplY3QsIGljb25DbHM6IG9iamVjdCwgZXZlbnRDb2xvcjogc3RyaW5nLCBldmVudEJhY2tncm91bmQ6IHN0cmluZywgdGV4dENvbG9yOiBzdHJpbmcsIGV2ZW50SW5uZXJTdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QsIHNvbGlkQmFyOiBib29sZWFuLCBib2R5Q29sb3I6IHN0cmluZywgc2hvd0J1bGxldDogYm9vbGVhbiB9IH0pID0+IERvbUNvbmZpZ3xEb21Db25maWdbXXxzdHJpbmd8dm9pZCl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB3aGljaCBjb21wYXJlcyBldmVudHMgd2hpY2ggc29tZSB2aWV3cyB1c2UgdG8gZGVjaWRlIHVwb24gcmVuZGVyaW5nIG9yZGVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZXZlbnRTb3J0ZXIpXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbCxFdmVudEJhcn0gbGhzIFRoZSBsZWZ0IHNpZGUgdmFsdWUgdG8gY29ucGFyZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWwsRXZlbnRCYXJ9IHJocyBUaGUgcmlnaHQgc2lkZSB2YWx1ZSB0byBjb25wYXJlXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBldmVudFNvcnRlciA/IDogKGxoczogRXZlbnRNb2RlbHxFdmVudEJhciwgcmhzOiBFdmVudE1vZGVsfEV2ZW50QmFyKSA9PiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgcGl4ZWxzIHRvIHJlZHVjZSB0aGUgaGVpZ2h0IG9mIGV2ZW50cyBieSwgdG8gbGVhdmUgYSBnYXAgYmV0d2VlbiB0aGVtLlxuICAgICAqL1xuICAgIGV2ZW50U3BhY2luZyA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGVuZCBkYXRlIG9mIGFuIGFsbCBkYXkgZXZlbnQgaXMgZGlzcGxheWVkIGluIHRoZSBVSSBhc1xuICAgICAqIHRoZSBsYXN0IGNhbGVuZGFyIGRhdGUgb24gd2hpY2ggdGhlIGV2ZW50IGZhbGxzLiBGb3IgbW9zdCBlbmQgdXNlcnMsIHRoaXMgaXMgdGhlXG4gICAgICogZXhwZWN0ZWQgdmFsdWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1leHRlbmRBbGxEYXlFbmREYXkpXG4gICAgICovXG4gICAgZXh0ZW5kQWxsRGF5RW5kRGF5ID8gOiBib29sZWFuXG4gICAgZXh0cmFEYXRhID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGlzIHNldCB0byBgdHJ1ZWAsIHRoZW4gd2hlbiBkZXRlcm1pbmluZyB3aGljaCBhc3NpZ25lZCByZXNvdXJjZSBvZiBhIG11bHRpIGFzc2lnbmVkIGV2ZW50XG4gICAgICogdG8gdXNlIHRvIGNyZWF0ZSB0aGUgZXZlbnQgVUksIHRoZSBmaXJzdCByZXNvdXJjZSB3aGljaCBpcyBzdGlsbCBzZWxlY3RlZCBpbiB0aGVcbiAgICAgKiBbcmVzb3VyY2VGaWx0ZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1NpZGViYXIjcHJvcGVydHktcmVzb3VyY2VGaWx0ZXIpIGlzIHVzZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1maWx0ZXJFdmVudFJlc291cmNlcylcbiAgICAgKi9cbiAgICBmaWx0ZXJFdmVudFJlc291cmNlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgdGhlIGhvdXJzIGluIHRoZSBkYXkgd2lsbCBiZSBzaXplZCBzbyB0aGF0IHRoZXkgZml0IGluIHRoZSBhdmFpbGFibGVcbiAgICAgKiBoZWlnaHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1maXRIb3VycylcbiAgICAgKi9cbiAgICBmaXRIb3VycyA/IDogYm9vbGVhbnx7XG4gICAgICAgIG1pbkhlaWdodD86IG51bWJlclxuICAgIH1cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCByZWNvbmZpZ3VyaW5nIHRoZSBbc3RhcnREYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1zdGFydERhdGUpIG1haW50YWlucyB0aGUgY3VycmVudCBkdXJhdGlvblxuICAgICAqIG9mIHRoZSB2aWV3IGFuZCBtb3ZlcyB0aGUgW2VuZERhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWVuZERhdGUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctZml4ZWREdXJhdGlvbilcbiAgICAgKi9cbiAgICBmaXhlZER1cmF0aW9uID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbZmxleF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZsZXgpIHN0eWxlLlxuICAgICAqIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYCZsdDtmbGV4LWdyb3cmZ3Q7ICZsdDtmbGV4LXNocmluayZndDsgJmx0O2ZsZXgtYmFzaXMmZ3Q7YCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHRoZSBgZmxleC1ncm93YCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmbGV4ID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBtb3ZlIHRoZSB3aWRnZXQgb3V0IG9mIHRoZSBkb2N1bWVudCBmbG93IGFuZCBwb3NpdGlvbiBpdFxuICAgICAqIGFic29sdXRlbHkgaW4gYnJvd3NlciB2aWV3cG9ydCBzcGFjZS5cbiAgICAgKi9cbiAgICBmbG9hdGluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZyBvYmplY3Qgb2YgYSBmb290ZXIuIE1heSBjb250YWluIGEgYGRvY2tgLCBgaHRtbGAgYW5kIGEgYGNsc2AgcHJvcGVydHkuIEEgZm9vdGVyIGlzIG5vdCBhIHdpZGdldCxcbiAgICAgKiBidXQgcmF0aGVyIHBsYWluIEhUTUwgdGhhdCBmb2xsb3dzIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhbmVsJ3MgYm9keSBhbmQgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWZvb3RlcilcbiAgICAgKi9cbiAgICBmb290ZXIgPyA6IHtcbiAgICAgICAgZG9jaz86ICd0b3AnfCdyaWdodCd8J2JvdHRvbSd8J2xlZnQnfCdzdGFydCd8J2VuZCdcbiAgICAgICAgaHRtbD86IHN0cmluZ1xuICAgICAgICBjbHM/OiBzdHJpbmdcbiAgICB9fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgRnVuY3Rpb24gKG9yIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiB0aGUgb3duZXJzaGlwIGhpZXJhcmNoeSkgd2hpY2ggcmV0dXJucyB0aGVcbiAgICAgKiBbcmVzb3VyY2UgcmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9SZXNvdXJjZU1vZGVsKSB0byB1c2UgdG8gY3JlYXRlIHRoZSBVSSBmb3IgYW4gZXZlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1nZXRQcmltYXJ5UmVzb3VyY2UpXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnRSZWNvcmQgVGhlIGV2ZW50IGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgcHJpbWFyeSByZXNvdXJjZS5cbiAgICAgKiBAcmV0dXJucyB7U2NoZWR1bGVyLm1vZGVsLlJlc291cmNlTW9kZWx9IFRoZSByZXNvdXJjZSB0byBiZSB1c2VkIHRvIHJlbmRlciB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgZ2V0UHJpbWFyeVJlc291cmNlID8gOiAoKGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsKSA9PiBSZXNvdXJjZU1vZGVsKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBbb2JqZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI3R5cGVkZWYtUGFuZWxIZWFkZXIpIGZvciB0aGUgcGFuZWwncyBoZWFkZXIgb3IgYSBzdHJpbmcgaW4gcGxhY2Ugb2YgYSBgdGl0bGVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctaGVhZGVyKVxuICAgICAqL1xuICAgIGhlYWRlciA/IDogc3RyaW5nfGJvb2xlYW58UGFuZWxIZWFkZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBoZWlnaHQsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLmhlaWdodGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgaGVpZ2h0IHN0cmluZyBvciBhIG51bWJlcixcbiAgICAgKiB3aGljaCB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIGhlaWdodCwgYnV0IGluIHNvbWVcbiAgICAgKiBjYXNlcyB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIGhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB3aXRoIHRydWUgdG8gbWFrZSB3aWRnZXQgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKi9cbiAgICBoaWRkZW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctaGlkZUFuaW1hdGlvbilcbiAgICAgKi9cbiAgICBoaWRlQW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGB0cnVlYCB0byBoaWRlIGRheSBjb2x1bW5zIHdoaWNoIGNvbnRhaW4gbm8gZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctaGlkZUVtcHR5RGF5cylcbiAgICAgKi9cbiAgICBoaWRlRW1wdHlEYXlzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoaWRlIFtub25Xb3JraW5nRGF5c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctbm9uV29ya2luZ0RheXMpXG4gICAgICovXG4gICAgaGlkZU5vbldvcmtpbmdEYXlzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gbWFrZSB0aGlzIGNvbnRhaW5lciBoaWRlIHdoZW4gaXQgaGFzIG5vIHZpc2libGUgY2hpbGRyZW4gKEVpdGhlciBlbXB0eVxuICAgICAqIG9yIGFsbCBjaGlsZHJlbiBoaWRkZW4pLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctaGlkZVdoZW5FbXB0eSlcbiAgICAgKi9cbiAgICBoaWRlV2hlbkVtcHR5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCA8c3Ryb25nPmluIHBpeGVsczwvc3Ryb25nPiBvZiBvbmUgaG91ciBjZWxsIGluIGEgZGF5IGNvbHVtbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWhvdXJIZWlnaHQpXG4gICAgICovXG4gICAgaG91ckhlaWdodCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgd2hpY2ggZW5jYXBzdWxhdGVzIGEgc2V0IG9mIFtob3VySGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1ob3VySGVpZ2h0KSBicmVha3BvaW50cyB3aGljaFxuICAgICAqIGRpY3RhdGUgd2hlbiBzdWJ0aWNrcyAtIGludGVydmVuaW5nIHRpbWUgaW5kaWNhdG9ycyAtIGFyZSBpbnRyb2R1Y2VkIGludG8gdGhlIERheVZpZXcnc1xuICAgICAqIHRpbWUgYXhpcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWhvdXJIZWlnaHRCcmVha3BvaW50cylcbiAgICAgKi9cbiAgICBob3VySGVpZ2h0QnJlYWtwb2ludHMgPyA6IG51bWJlcltdXG4gICAgLyoqXG4gICAgICogQW4gaWNvbiB0byBzaG93IGJlZm9yZSB0aGUgW3RpdGxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy10aXRsZSkuIEVpdGhlciBwYXNzIGEgQ1NTIGNsYXNzIGFzIGEgc3RyaW5nLCBvciBwYXNzIGFcbiAgICAgKiBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgb2JqZWN0IGRlc2NyaWJpbmcgYW4gZWxlbWVudCB0byByZXByZXNlbnQgdGhlIGljb24uXG4gICAgICovXG4gICAgaWNvbiA/IDogc3RyaW5nfERvbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFdpZGdldCBpZCwgaWYgbm90IHNwZWNpZmllZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuIEFsc28gdXNlZCBmb3IgbG9va3VwcyB0aHJvdWdoIFdpZGdldC5nZXRCeUlkXG4gICAgICovXG4gICAgaWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIHdpZGdldHMgcmVhZC1vbmx5IHN0YXRlIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IGl0cyBwYXJlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1pZ25vcmVQYXJlbnRSZWFkT25seSlcbiAgICAgKi9cbiAgICBpZ25vcmVQYXJlbnRSZWFkT25seSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgbWlsbGlzZWNvbmQgdmFsdWUgdG8gd2hpY2ggdG8gc25hcCBwb2ludGVyIHRpbWVzIHdoZW4gY2xpY2tpbmcgb3IgZHJhZ2dpbmcgd2l0aGluIGEgZGF5IGNvbHVtblxuICAgICAqIGFuZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBob3ZlcmVkIHRpbWUgZm9yIHRoZSBbU2NoZWR1bGVUb29sdGlwXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL2ZlYXR1cmUvU2NoZWR1bGVUb29sdGlwKSB0b29sdGlwLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctaW5jcmVtZW50KVxuICAgICAqL1xuICAgIGluY3JlbWVudCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIHNldHRpbmcgdG8gYWxpZ24gaW5wdXQgZmllbGRzIG9mIGNoaWxkIHdpZGdldHMuIEJ5IGRlZmF1bHQsIHRoZSBGaWVsZCBpbnB1dCBlbGVtZW50IGlzXG4gICAgICogcGxhY2VkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgYGxhYmVsYC4gSWYgeW91IHByZWZlciB0byBoYXZlIGFsbCBpbnB1dCBmaWVsZHMgYWxpZ25lZCB0byB0aGVcbiAgICAgKiByaWdodCwgc2V0IHRoaXMgY29uZmlnIHRvIGAnZW5kJ2AuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1pbnB1dEZpZWxkQWxpZ24pXG4gICAgICovXG4gICAgaW5wdXRGaWVsZEFsaWduID8gOiAnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gaW5zZXJ0IHRoaXMgd2lkZ2V0IGJlZm9yZS4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyBpcyBpZ25vcmVkLlxuICAgICAqL1xuICAgIGluc2VydEZpcnN0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkcmFnLW1vdmluZyBhbiBldmVudCBhbGxvd3MgdGhlIGRyYWcgZ2VzdHVyZSB0byBtb3ZlIHRoZSBldmVudCBpbnRvIG90aGVyIGRheSBjb2x1bW5zLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctaW50ZXJEYXlEcmFnKVxuICAgICAqL1xuICAgIGludGVyRGF5RHJhZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGRyYWctcmVzaXppbmcgYW4gZXZlbnQgKGluY2x1ZGluZyBjcmVhdGluZyBhIG5ldyBldmVudCkgYWxsb3dzIHRoZSBkcmFnIGdlc3R1cmUgdG8gc3BhbiBtdWx0aXBsZSBkYXlcbiAgICAgKiBjb2x1bW5zIHRvIG1ha2UgdGhlIGV2ZW50IGFuIGludGVyIGRheSBldmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWludGVyRGF5UmVzaXplKVxuICAgICAqL1xuICAgIGludGVyRGF5UmVzaXplID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgQ1NTIGNsYXNzIHRvIGFkZCB0byBjaGlsZCBpdGVtcyBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBpdGVtQ2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB0eXBlZCBjaGlsZCB3aWRnZXQgY29uZmlnIG9iamVjdHMgb3IgV2lkZ2V0cy4gTWF5IGFsc28gYmUgc3BlY2lmaWVkXG4gICAgICogYXMgYW4gYXJyYXkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1pdGVtcylcbiAgICAgKi9cbiAgICBpdGVtcyA/IDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtRW50cnk+fChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeXxXaWRnZXQpW11cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgdGhlIFtrZXldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleSkgbmFtZVxuICAgICAqIGFuZCBvcHRpb25hbCBtb2RpZmllciBwcmVmaXhlczogYCdDdHJsKydgLCBgJ0FsdCsnYCwgYCdNZXRhKydgLCBhbmQgYCdTaGlmdCsnYCAoY2FzZS1pbnNlbnNpdGl2ZSkuIFRoZSB2YWx1ZXNcbiAgICAgKiBhcmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlIG1ldGhvZCB0byBjYWxsIHdoZW4gdGhlIGtleXN0cm9rZSBpcyByZWNlaXZlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWtleU1hcClcbiAgICAgKi9cbiAgICBrZXlNYXAgPyA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzZXR0aW5nIHRvIHVzZSBzYW1lIGxhYmVsIHBsYWNlbWVudCBvbiBhbGwgY2hpbGQgd2lkZ2V0cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWxhYmVsUG9zaXRpb24pXG4gICAgICovXG4gICAgbGFiZWxQb3NpdGlvbiA/IDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSBzaG9ydCBuYW1lIG9mIGEgaGVscGVyIGNsYXNzIHdoaWNoIG1hbmFnZXMgcmVuZGVyaW5nIGFuZCBzdHlsaW5nIG9mIGNoaWxkIGl0ZW1zLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctbGF5b3V0KVxuICAgICAqL1xuICAgIGxheW91dCA/IDogc3RyaW5nfENhbGVuZGFyQ29udGFpbmVyTGF5b3V0Q29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIENTUyBzdHlsZSBwcm9wZXJ0aWVzIHRvIGFwcGx5IHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWxheW91dFN0eWxlKVxuICAgICAqL1xuICAgIGxheW91dFN0eWxlID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBbY2hpbGQgaXRlbV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKSAqY29uZmlnIG9iamVjdHMqIHdoaWNoIGlzIHRvIGJlIGNvbnZlcnRlZCBpbnRvXG4gICAgICogaW5zdGFuY2VzIG9ubHkgd2hlbiB0aGlzIENvbnRhaW5lciBpcyByZW5kZXJlZCwgcmF0aGVyIHRoYW4gZWFnZXJseSBhdCBjb25zdHJ1Y3QgdGltZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWxhenlJdGVtcylcbiAgICAgKi9cbiAgICBsYXp5SXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz58Q2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnW118V2lkZ2V0W11cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdGVuZXIgc2V0IGZvciB0aGlzIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWxpc3RlbmVycylcbiAgICAgKi9cbiAgICBsaXN0ZW5lcnMgPyA6IFdlZWtWaWV3TGlzdGVuZXJzXG4gICAgLyoqXG4gICAgICogQSBjbGFzcyB0cmFuc2xhdGlvbnMgb2Ygd2hpY2ggYXJlIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoaXMgZW50aXR5LlxuICAgICAqIFRoaXMgaXMgb2Z0ZW4gdXNlZCB3aGVuIHRyYW5zbGF0aW9ucyBvZiBhbiBpdGVtIGFyZSBkZWZpbmVkIG9uIGl0cyBjb250YWluZXIgY2xhc3MuXG4gICAgICogRm9yIGV4YW1wbGU6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1sb2NhbGVDbGFzcylcbiAgICAgKi9cbiAgICBsb2NhbGVDbGFzcyA/IDogdHlwZW9mIEJhc2VcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGxvY2FsaXphdGlvbiBvZiB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcHJvcGVydGllcyB3aGljaCB2YWx1ZXMgc2hvdWxkIGJlIHRyYW5zbGF0ZWQgYXV0b21hdGljYWxseSB1cG9uIGEgbG9jYWxlIGFwcGx5aW5nLlxuICAgICAqIEluIGNhc2UgdGhlcmUgaXMgYSBuZWVkIHRvIGxvY2FsaXplIG5vdCB0eXBpY2FsIHZhbHVlIChub3QgYSBTdHJpbmcgdmFsdWUgb3IgYSBmaWVsZCB3aXRoIHJlLWRlZmluZWQgc2V0dGVyL2dldHRlciksXG4gICAgICogeW91IGNvdWxkIHVzZSAnbG9jYWxlS2V5JyBtZXRhIGNvbmZpZ3VyYXRpb24uXG4gICAgICogRXhhbXBsZTpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLWxvY2FsaXphYmxlUHJvcGVydGllcylcbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZVByb3BlcnRpZXMgPyA6IHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgbWFyZ2luLiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGBUUkJMYCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXJnaW4gPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBvYmplY3QgY29udGFpbnMgdGhlIGRlZmF1bHRzIGZvciB0aGUgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY3JlYXRlZCBmb3IgdGhlXG4gICAgICogW21hc2tlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1hc2tlZCkgY29uZmlnLiBBbnkgcHJvcGVydGllcyBzcGVjaWZpZWQgaW4gdGhlIGBtYXNrZWRgIGNvbmZpZyB3aWxsIG92ZXJyaWRlIHRoZXNlXG4gICAgICogdmFsdWVzLlxuICAgICAqL1xuICAgIG1hc2tEZWZhdWx0cyA/IDogTWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYXBwbHkgdGhlIGRlZmF1bHQgbWFzayB0byB0aGUgd2lkZ2V0LiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGNhbiBiZSB0aGUgbWFzayBtZXNzYWdlIG9yIGFcbiAgICAgKiBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIG1hc2tlZCA/IDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIGhlaWdodCB0aGUgYWxsIGRheSBldmVudCByb3cgaXMgYWxsb3dlZCB0byBncm93IHdpdGhpbiB0aGlzIHZpZXdcbiAgICAgKiB3aGVuIGl0IGlzIGV4cGFuZGVkIHRvIHNob3cgYWxsIGl0cyBcImFsbCBkYXlcIiBldmVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1tYXhBbGxEYXlIZWlnaHQpXG4gICAgICovXG4gICAgbWF4QWxsRGF5SGVpZ2h0ID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gZGF0ZSB0byB3aGljaCB0aGUgYGVuZERhdGVgIG9mIHRoaXMgdmlldyBtYXkgYmUgbmF2aWdhdGVkLlxuICAgICAqL1xuICAgIG1heERhdGUgPyA6IERhdGV8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtYXhIZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLW1heGltaXplT25Nb2JpbGUpXG4gICAgICovXG4gICAgbWF4aW1pemVPbk1vYmlsZSA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtYXhXaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4V2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSBkYXRlIHRvIHdoaWNoIHRoZSBgc3RhcnREYXRlYCBvZiB0aGlzIHZpZXcgbWF5IGJlIG5hdmlnYXRlZC5cbiAgICAgKi9cbiAgICBtaW5EYXRlID8gOiBEYXRlfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIHdpZHRoIG9mIGEgZGF5IGNvbHVtbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLW1pbkRheVdpZHRoKVxuICAgICAqL1xuICAgIG1pbkRheVdpZHRoID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gaGVpZ2h0IHRvIHdoaWNoIGV2ZW50IGJsb2NrcyBpbiBhIGRheSBjZWxsIG1heSBzaHJpbmsuIElmIGFuIGV2ZW50IGhhcyB2ZXJ5XG4gICAgICogc2hvcnQgZHVyYXRpb24sIHdoYXRldmVyIHRoZSBbaG91ckhlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaG91ckhlaWdodCksIGFuZCByZWdhcmRsZXNzIG9mXG4gICAgICogW3RpbWVsaW5lIHpvb21pbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjZnVuY3Rpb24tem9vbVRvKSwgdGhlIGV2ZW50IGJsb2NrIHdpbGwgbmV2ZXIgZHJvcCBiZWxvdyB0aGlzIGhlaWdodC5cbiAgICAgKi9cbiAgICBtaW5FdmVudEhlaWdodCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWluSGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWhlaWdodCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1pbkhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIGhlaWdodCA8c3Ryb25nPmluIHBpeGVsczwvc3Ryb25nPiB0byBhbGxvdyBhIHpvb20gcmVxdWVzdCB0byB6b29tIG91dCB0by5cbiAgICAgKi9cbiAgICBtaW5Ib3VySGVpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWluV2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1pbldpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIGlzIGNvbmZpZ3VyZWQgYXMgYHRydWVgIGEgW1Jlc2l6ZU9ic2VydmVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVzaXplT2JzZXJ2ZXIpXG4gICAgICogaXMgdXNlZCB0byBtb25pdG9yIHRoaXMgZWxlbWVudCBmb3Igc2l6ZSBjaGFuZ2VzIGNhdXNlZCBieSBlaXRoZXIgc3R5bGUgbWFuaXB1bGF0aW9uLCBvciBieSBDU1NcbiAgICAgKiBsYXlvdXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1tb25pdG9yUmVzaXplKVxuICAgICAqL1xuICAgIG1vbml0b3JSZXNpemUgPyA6IGJvb2xlYW58e1xuICAgICAgICBpbW1lZGlhdGU/OiBib29sZWFuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIGRlZmF1bHQgY29uZmlnIG9iamVjdHMgd2hpY2ggbWF5IGJlIHJlZmVyZW5jZWQgYnkgbmFtZSBpbiB0aGUgW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctaXRlbXMpXG4gICAgICogY29uZmlnLiBGb3IgZXhhbXBsZSwgYSBzcGVjaWFsaXplZCBbTWVudV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9NZW51KSBzdWJjbGFzcyBtYXkgaGF2ZSBhIGBuYW1lZEl0ZW1zYCBkZWZhdWx0XG4gICAgICogdmFsdWUgZGVmaW5lZCBsaWtlIHRoaXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1uYW1lZEl0ZW1zKVxuICAgICAqL1xuICAgIG5hbWVkSXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz5cbiAgICAvKipcbiAgICAgKiBUZXh0IG9yIEhUTUwsIG9yIGEgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGJsb2NrIHRvIGRpc3BsYXkgd2hlbiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGhhdmUgYmVlbiBmaWx0ZXJlZCBvdXQuXG4gICAgICovXG4gICAgbm9NYXRjaGluZ0RhdGVzID8gOiBzdHJpbmd8RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogTm9uLXdvcmtpbmcgZGF5cyBhcyBhbiBvYmplY3Qgd2hlcmUga2V5cyBhcmUgZGF5IGluZGljZXMsIDAtNiAoU3VuZGF5LVNhdHVyZGF5KSwgYW5kIHRoZSB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogRGVmYXVsdHMgdG8gW25vbldvcmtpbmdEYXlzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIjcHJvcGVydHktbm9uV29ya2luZ0RheXMtc3RhdGljKS5cbiAgICAgKi9cbiAgICBub25Xb3JraW5nRGF5cyA/IDogUmVjb3JkPG51bWJlciwgYm9vbGVhbj5cbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBvYmplY3QgdXNlZCB0byBjcmVhdGUgdGhlIFtPdmVyZmxvd1BvcHVwXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9PdmVyZmxvd1BvcHVwKSB0aGF0IHRoZVxuICAgICAqIFthbGxEYXlFdmVudHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjcHJvcGVydHktYWxsRGF5RXZlbnRzKSBtYXkgc2hvdyB3aGVuIGV2ZW50cyBmb3Igb25lIGRheSBvdmVyZmxvdyB0aGUgYXZhaWxhYmxlIHNwYWNlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctb3ZlcmZsb3dQb3B1cClcbiAgICAgKi9cbiAgICBvdmVyZmxvd1BvcHVwID8gOiBPdmVyZmxvd1BvcHVwQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIG93bmluZyBXaWRnZXQgb2YgdGhpcyBXaWRnZXQuIElmIHRoaXMgV2lkZ2V0IGlzIGRpcmVjdGx5IGNvbnRhaW5lZCAodGhhdCBpcywgaXQgaXMgb25lIG9mIHRoZVxuICAgICAqIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjcHJvcGVydHktaXRlbXMpIG9mIGEgQ29udGFpbmVyKSwgdGhpcyBjb25maWcgd2lsbCBiZSBpZ25vcmVkLiBJbiB0aGlzIGNhc2VcbiAgICAgKiB0aGUgb3duZXIgaXMgPHN0cm9uZz5hbHdheXM8L3N0cm9uZz4gdGhlIGVuY2Fwc3VsYXRpbmcgQ29udGFpbmVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctb3duZXIpXG4gICAgICovXG4gICAgb3duZXIgPyA6IFdpZGdldHxhbnlcbiAgICAvKipcbiAgICAgKiBUaGUgY2xhc3MgbmFtZSB0byBhZGQgdG8gZXZlbnRzIHdoaWNoIGhhdmUgYW4gZW5kIGRhdGUgaW4gdGhlIHBhc3QuIERlZmF1bHRzIHRvIGAnYi1wYXN0LWV2ZW50J2AuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1wYXN0RXZlbnRDbHMpXG4gICAgICovXG4gICAgcGFzdEV2ZW50Q2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHdoZW4gYSB3aWRnZXQgaXMgcmVuZGVyZWQgaW50byBhbm90aGVyIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLCBidXQgbXVzdFxuICAgICAqIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0IG9mIHRoYXQgd2lkZ2V0LCBhbmQgbXVzdCBiZSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhhdFxuICAgICAqIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctcG9zaXRpb25lZClcbiAgICAgKi9cbiAgICBwb3NpdGlvbmVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJldmVudCB0b29sdGlwIGZyb20gYmVpbmcgZGlzcGxheWVkIG9uIHRvdWNoIGRldmljZXMuIFVzZWZ1bCBmb3IgZXhhbXBsZSBmb3IgYnV0dG9ucyB0aGF0IGRpc3BsYXkgYVxuICAgICAqIG1lbnUgb24gY2xpY2sgZXRjLCBzaW5jZSB0aGUgdG9vbHRpcCB3b3VsZCBiZSBkaXNwbGF5ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgKi9cbiAgICBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgdGltZSByYW5nZSBhcm91bmQgdGhlIFtkYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9EYXRlUmFuZ2VPd25lciNjb25maWctZGF0ZSkgdG8gZGlzcGxheSBldmVudHMgZm9yLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctcmFuZ2UpXG4gICAgICovXG4gICAgcmFuZ2UgPyA6IHN0cmluZ3xEdXJhdGlvbkNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhpcyB3aWRnZXQgaXMgcmVhZC1vbmx5LiAgVGhpcyBpcyBvbmx5IHZhbGlkIGlmIHRoZSB3aWRnZXQgaXMgYW4gaW5wdXRcbiAgICAgKiBmaWVsZCwgPHN0cm9uZz5vciBjb250YWlucyBpbnB1dCBmaWVsZHMgYXQgYW55IGRlcHRoPC9zdHJvbmc+LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWl0aGVyIGEgZGVmYXVsdCBgcmVuZGl0aW9uYCB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cywgb3IgYSBtYXAgb2YgcmVuZGl0aW9ucyBrZXllZCBieSBjaGlsZCB3aWRnZXRcbiAgICAgKiBgdHlwZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1yZW5kaXRpb24pXG4gICAgICovXG4gICAgcmVuZGl0aW9uID8gOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPnxudWxsXG4gICAgLyoqXG4gICAgICogUGF0aCB0byBsb2FkIHJlc291cmNlIGltYWdlcyBmcm9tLiBVc2VkIGJ5IHRoZSBbc2hvd1Jlc291cmNlQXZhdGFyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctc2hvd1Jlc291cmNlQXZhdGFycykgY29uZmlnXG4gICAgICogdG8gY3JlYXRlIFVSTHMgdXNpbmcgdGhlIHJlc291cmNlJ3NcbiAgICAgKiBbaW1hZ2VdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL1Jlc291cmNlTW9kZWwjZmllbGQtaW1hZ2UpIG9yXG4gICAgICogW2ltYWdlVXJsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9SZXNvdXJjZU1vZGVsI2ZpZWxkLWltYWdlVXJsKSBmaWVsZHM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1yZXNvdXJjZUltYWdlUGF0aClcbiAgICAgKi9cbiAgICByZXNvdXJjZUltYWdlUGF0aCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSB2YXJpb3VzIHJlc3BvbnNpdmUgc3RhdGUgb2JqZWN0cyBrZXllZCBieSB0aGVpciBuYW1lLiBFYWNoIGtleSAoZXhjZXB0IGAnKidgLCBzZWUgYmVsb3cpIGluXG4gICAgICogdGhpcyBvYmplY3QgaXMgYSBzdGF0ZSBuYW1lIChzZWUgW3Jlc3BvbnNpdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlU3RhdGUpKSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgdGhlXG4gICAgICogYXNzb2NpYXRlZCBbUmVzcG9uc2l2ZVN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Jlc3BvbnNpdmUjdHlwZWRlZi1SZXNwb25zaXZlU3RhdGUpIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXJlc3BvbnNpdmUpXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZSA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBtYXJrIHRoaXMgaW5zdGFuY2UgYXMgdGhlIGRlZmF1bHQgW3Jlc3BvbnNpdmVUYXJnZXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vUmVzcG9uc2l2ZSNjb25maWctcmVzcG9uc2l2ZVRhcmdldCkgZm9yIGRlc2NlbmRhbnRzIHRoYXQgZG9cbiAgICAgKiBub3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBbcmVzcG9uc2l2ZVRhcmdldF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlVGFyZ2V0KSBvZiB0aGVpciBvd24uXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZVJvb3QgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBbcmVzcG9uc2l2ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlKSBjb25maWcuIFRoaXMgaXMgYXNzaWduZWQgaW50ZXJuYWxseVxuICAgICAqIGFuZCBzaG91bGQgbm90IGJlIGFzc2lnbmVkIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIHJlc3BvbnNpdmVTdGF0ZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIHdpZGdldCB3aG9zZSBzaXplIGFuZCBvdGhlciBwcm9wZXJ0aWVzIGRyaXZlIHRoaXMgb2JqZWN0J3MgcmVzcG9uc2l2ZSBiZWhhdmlvci4gSWYgdGhpcyBjb25maWcgaXMgbm90XG4gICAgICogc3BlY2lmaWVkLCB0aGUgY2xvc2VzdCBhbmNlc3RvciB0aGF0IHNwZWNpZmllZCBbcmVzcG9uc2l2ZVJvb3Q9dHJ1ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlUm9vdCkgd2lsbCBiZVxuICAgICAqIHVzZWQuIElmIHRoZXJlIGlzIG5vIHN1Y2ggYW5jZXN0b3IsIHRoZW4gdGhlIGluc3RhbmNlIHVzaW5nIHRoaXMgbWl4aW4gaXMgdXNlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXJlc3BvbnNpdmVUYXJnZXQpXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZVRhcmdldCA/IDogc3RyaW5nfFdpZGdldFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gaGF2ZSB0aGUgY29tcG9uZW50IGRpc3BsYXkgYSB0cmFuc2x1Y2VudCByaXBwbGUgd2hlbiBpdHNcbiAgICAgKiBbZm9jdXNFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1mb2N1c0VsZW1lbnQpLCBvciBbZWxlbWVudF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyB0YXBwZWQgPGVtPmlmIHRoZVxuICAgICAqIGN1cnJlbnQgdGhlbWUgc3VwcG9ydHMgcmlwcGxlczwvZW0+LiBPdXQgb2YgdGhlIGJveCwgb25seSB0aGUgTWF0ZXJpYWwgdGhlbWUgc3VwcG9ydHMgcmlwcGxlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXJpcHBsZSlcbiAgICAgKi9cbiAgICByaXBwbGUgPyA6IGJvb2xlYW58e1xuICAgICAgICBkZWxlZ2F0ZT86IHN0cmluZ1xuICAgICAgICBjb2xvcj86IHN0cmluZ1xuICAgICAgICByYWRpdXM/OiBudW1iZXJcbiAgICAgICAgY2xpcD86IHN0cmluZ1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB5b3UgYXJlIHJlbmRlcmluZyB0aGlzIHdpZGdldCB0byBhIHNoYWRvdyByb290IGluc2lkZSBhIHdlYiBjb21wb25lbnQsIHNldCB0aGlzIGNvbmZpZyB0byB0aGUgc2hhZG93Um9vdC4gSWYgbm90IGluc2lkZSBhIHdlYiBjb21wb25lbnQsIHNldCBpdCB0byBgZG9jdW1lbnQuYm9keWBcbiAgICAgKi9cbiAgICByb290RWxlbWVudCA/IDogU2hhZG93Um9vdHxIVE1MRWxlbWVudFxuICAgIC8qKlxuICAgICAqIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYHRydWVgIHRvIG1ha2UgdGhlIHdpZGdldCdzIGVsZW1lbnQgdXNlIHRoZSBgZGlyZWN0aW9uOnJ0bGAgc3R5bGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgKGFuZCBvcHRpb25hbGx5IGluIHdoaWNoIGF4ZXMpIGEgV2lkZ2V0IG1heSBzY3JvbGwuIGB0cnVlYCBtZWFucyB0aGlzIHdpZGdldCBtYXkgc2Nyb2xsXG4gICAgICogaW4gYm90aCBheGVzLiBNYXkgYmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYm9vbGVhbiBgb3ZlcmZsb3dYYCBhbmQgYG92ZXJmbG93WWAgcHJvcGVydGllcyB3aGljaCBhcmVcbiAgICAgKiBhcHBsaWVkIHRvIENTUyBzdHlsZSBwcm9wZXJ0aWVzIGBvdmVyZmxvd1hgIGFuZCBgb3ZlcmZsb3dZYC4gSWYgdGhleSBhcmUgYm9vbGVhbiwgdGhleSBhcmUgdHJhbnNsYXRlZCB0b1xuICAgICAqIENTUyBvdmVyZmxvdyBwcm9wZXJ0aWVzIHRodXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1zY3JvbGxhYmxlKVxuICAgICAqL1xuICAgIHNjcm9sbGFibGUgPyA6IGJvb2xlYW58U2Nyb2xsZXJDb25maWd8U2Nyb2xsZXJcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoYXQgdG8gZG8gaWYgZG9jdW1lbnQgaXMgc2Nyb2xsZWQgd2hpbGUgV2lkZ2V0IGlzIHZpc2libGUgKG9ubHkgcmVsZXZhbnQgd2hlbiBmbG9hdGluZyBpcyBzZXQgdG8gYHRydWVgKS5cbiAgICAgKiBWYWxpZCB2YWx1ZXM6IMK0bnVsbMK0OiBkbyBub3RoaW5nLCDCtGhpZGXCtDogaGlkZSB0aGUgd2lkZ2V0IG9yIMK0cmVhbGlnbsK0OiByZWFsaWduIHRvIHRoZSB0YXJnZXQgaWYgcG9zc2libGUuXG4gICAgICovXG4gICAgc2Nyb2xsQWN0aW9uID8gOiAnaGlkZSd8J3JlYWxpZ24nfG51bGxcbiAgICAvKipcbiAgICAgKiBBIGJ1dHRvbiBjb25maWd1cmF0aW9uIG9iamVjdCB0byB1c2UgZm9yIHRoZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgbW9kZSBzZWxlY3RvciBidXR0b24gZm9yIHRoaXMgbW9kZS5cbiAgICAgKi9cbiAgICBzZWxlY3RvckJ1dHRvbiA/IDogQnV0dG9uQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBtZW51IGl0ZW0gY29uZmlndXJhdGlvbiBvYmplY3QgdG8gdXNlIGZvciB0aGUgYXV0b21hdGljYWxseSBjcmVhdGVkIG1vZGUgc2VsZWN0b3IgbWVudSBpdGVtIGZvciB0aGlzIG1vZGUuXG4gICAgICovXG4gICAgc2VsZWN0b3JNZW51SXRlbSA/IDogTWVudUl0ZW1Db25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgdGltZSByYW5nZSB0byBtb3ZlIGJ5IHdoZW4gW25leHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RhdGVSYW5nZU93bmVyI2Z1bmN0aW9uLW5leHQpIG9yIFtwcmV2aW91c10oI0NhbGVuZGFyL3dpZGdldC9taXhpbi9EYXRlUmFuZ2VPd25lciNmdW5jdGlvbi1wcmV2aW91cykgaXMgY2FsbGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctc2hpZnRJbmNyZW1lbnQpXG4gICAgICovXG4gICAgc2hpZnRJbmNyZW1lbnQgPyA6IHN0cmluZ3xEdXJhdGlvbkNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlcikgZm9ybWF0IHN0cmluZy9mdW5jdGlvbiB0byB1c2UgdG8gY3JlYXRlIGRhdGUgb3V0cHV0IGZvclxuICAgICAqIGFiYnJldmlhdGVkIHZpZXcgZGVzY3JpcHRpb25zLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBUaGUgZGF0ZSB0byBmb3JtYXQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBkYXRlLlxuICAgICAqL1xuICAgIHNob3J0RGF0ZUZvcm1hdCA/IDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIEEgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlcikgZm9ybWF0IHN0cmluZy9mdW5jdGlvbiB0byB1c2UgdG8gY3JlYXRlIGRhdGUgYW5kIHRpbWUgb3V0cHV0IGZvclxuICAgICAqIGFiYnJldmlhdGVkIHZpZXcgZGVzY3JpcHRpb25zLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBUaGUgZGF0ZSB0byBmb3JtYXQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBkYXRlLlxuICAgICAqL1xuICAgIHNob3J0RGF0ZVRpbWVGb3JtYXQgPyA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZylcbiAgICAvKipcbiAgICAgKiBUaGUgY2xhc3MgbmFtZSB0byBhZGQgdG8gZXZlbnRzIHdoaWNoIGhhdmUgZHVyYXRpb24gbGVzcyB0aGFuIG9yIGVxdWFsIHRvXG4gICAgICogW3Nob3J0RXZlbnREdXJhdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctc2hvcnRFdmVudER1cmF0aW9uKS5cbiAgICAgKi9cbiAgICBzaG9ydEV2ZW50Q2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgZHVyYXRpb24gYXQgd2hpY2ggYmVsb3cgYW5kIGVxdWFsIHRvIHRoaXMgdmFsdWUsIGFuIGV2ZW50J3MgZW5jYXBzdWxhdGluZyBlbGVtZW50IGdldHNcbiAgICAgKiB0aGUgW3Nob3J0RXZlbnRDbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLXNob3J0RXZlbnRDbHMpIGFkZGVkIHRvIGl0IHNvIHRoYXQgc21hbGwgZXZlbnQgYmFycyBjYW4gaGF2ZSBzdHlsZSByZWFycmFuZ2VtZW50cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXNob3J0RXZlbnREdXJhdGlvbilcbiAgICAgKi9cbiAgICBzaG9ydEV2ZW50RHVyYXRpb24gPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBTaG93cyBhbiBhbGwgZGF5IGhlYWRlciBhYm92ZSB0aGUgbWFpbiBzY2hlZHVsZSBmb3IgQWxsIERheSBldmVudHMuXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgYWxsIGRheSwgb3IgbXVsdGktZGF5IGV2ZW50cyBpbiBhbiBhbGwgZGF5IGhlYWRlciwgYnV0XG4gICAgICogdG8gaGF2ZSB0aGVtIHNob3dpbmcgd3JhcHBpbmcgdGhyb3VnaCB0aGUgZGF5IGNlbGxzLlxuICAgICAqL1xuICAgIHNob3dBbGxEYXlIZWFkZXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctc2hvd0FuaW1hdGlvbilcbiAgICAgKi9cbiAgICBzaG93QW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIDxzdHJvbmc+Tm90IGFwcGxpY2FibGUgaW4gYSBgRGF5Vmlld2A8L3N0cm9uZz5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXNob3dCdWxsZXQpXG4gICAgICogQHBhcmFtIHtib29sZWFufSBiYXIgVGhpcyBpcyBgZmFsc2VgIGJ5IGRlZmF1bHQuIFNldCB0aGlzIHRvIGB0cnVlYCBpbiBtb2RlcyB3aGVyZSBhIHNvbGlkIGV2ZW50IGJhciBzaG91bGQgc2hvdyBhIGJ1bGxldCBpY29uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBub0JhciBUaGlzIGlzIGB0cnVlYCBieSBkZWZhdWx0LiBFdmVudHMgd2l0aCBubyBiYWNrZ3JvdW5kIGNvbG91ciwgdXNlIHRoaXMgdG8gc2hvdyB0aGUgZXZlbnQncyBkZWZpbmVkIGBldmVudENvbG9yYFxuICAgICAqL1xuICAgIHNob3dCdWxsZXQgPyA6IGJvb2xlYW58e2Jhcj86IGJvb2xlYW4sIG5vQmFyPzogYm9vbGVhbn1cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0IDxiPnRvZGF5J3M8L2I+IGRhdGUgc2hvd3MgYSBjdXJyZW50IHRpbWUgbGluZSB0byBpbmRpY2F0ZSB0aGUgY3VycmVudCB0aW1lLiBUaGlzXG4gICAgICogbGluZSBpcyBjb25maW5lZCB0byB0aGUgZGF5IGNlbGwgZm9yIDxiPnRvZGF5PC9iPi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXNob3dDdXJyZW50VGltZSlcbiAgICAgKi9cbiAgICBzaG93Q3VycmVudFRpbWUgPyA6IGJvb2xlYW58e1xuICAgICAgICBmdWxsV2lkdGg/OiBib29sZWFuXG4gICAgICAgIHNob3dUaW1lPzogYm9vbGVhblxuICAgICAgICBvblRvcD86IGJvb2xlYW5cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBzaG93IGF2YXRhcnMgb2YgdGhlIGFzc2lnbmVkIHJlc291cmNlcyAoY2FsZW5kYXJzKSBhdCB0aGVcbiAgICAgKiBzdGFydCBvZiB0aGUgZXZlbnQgYmFyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctc2hvd1Jlc291cmNlQXZhdGFycylcbiAgICAgKi9cbiAgICBzaG93UmVzb3VyY2VBdmF0YXJzID8gOiBib29sZWFufHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgZmFsc2VgIHRvIGhpZGUgdGhlIHN0YXJ0IHRpbWUgbm9ybWFsbHkgc2hvd24gYXQgdGhlIHRvcCBvZiB0aGUgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctc2hvd1RpbWUpXG4gICAgICovXG4gICAgc2hvd1RpbWUgPyA6IGJvb2xlYW58UmVjb3JkPCgnc3RhcnRUaW1lJ3wnZW5kVGltZSd8J2R1cmF0aW9uJyksIGJvb2xlYW58c3RyaW5nfEZ1bmN0aW9uPlxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBzaG93IHRoZSB0b29sdGlwIHdoZW4gdGhpcyB3aWRnZXQgaXMgW2Rpc2FibGVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBtb3N0IGdyYW51bGFyIHRpbWUgdGljayBsZXZlbCBpbiB0aGUgRGF5VmlldydzIHRpbWUgYXhpcyBpcyBmaXZlIG1pbnV0ZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1zaXhNaW51dGVUaWNrcylcbiAgICAgKi9cbiAgICBzaXhNaW51dGVUaWNrcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFmZmVjdHMgZHJhZyBkcm9wIGFuZCBtb3Zpbmcgb2YgZXZlbnRzIHdpdGggcmVnYXJkIHRvIHRoZSBbaW5jcmVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I3Byb3BlcnR5LWluY3JlbWVudClcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXNuYXBSZWxhdGl2ZVRvRXZlbnRTdGFydERhdGUpXG4gICAgICovXG4gICAgc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgaG93IG1hbnkgY29sdW1ucyB0byBzcGFuIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIHNwYW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gc3RhY2sgbXVsdGktZGF5IGV2ZW50cyB3aXRoaW4gZWFjaCBjZWxsIGluIHRoZSBvcmRlciBvZiB0aGVpciBzdGFydCB0aW1lLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctc3RhY2tNdWx0aURheUV2ZW50cylcbiAgICAgKi9cbiAgICBzdGFja011bHRpRGF5RXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXJ0IGRhdGUgKFRpbWUgY29tcG9uZW50IGlzIHplcm9lZCkgb2YgdGhpcyB2aWV3LlxuICAgICAqL1xuICAgIHN0YXJ0RGF0ZSA/IDogRGF0ZVxuICAgIC8qKlxuICAgICAqIFRoaXMgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctc3RhdGVmdWwpXG4gICAgICovXG4gICAgc3RhdGVmdWwgPyA6IGJvb2xlYW58b2JqZWN0fHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50cyB0aGF0LCB3aGVuIGZpcmVkIGJ5IHRoaXMgY29tcG9uZW50LCBzaG91bGQgdHJpZ2dlciBpdCB0byBzYXZlIGl0cyBzdGF0ZSBieSBjYWxsaW5nXG4gICAgICogW3NhdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2Z1bmN0aW9uLXNhdmVTdGF0ZSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1zdGF0ZWZ1bEV2ZW50cylcbiAgICAgKi9cbiAgICBzdGF0ZWZ1bEV2ZW50cyA/IDogb2JqZWN0fHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGtleSB0byB1c2Ugd2hlbiBzYXZpbmcgdGhpcyBvYmplY3QncyBzdGF0ZSBpbiB0aGUgW3N0YXRlUHJvdmlkZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVQcm92aWRlcikuIElmIHRoaXMgY29uZmlnIGlzXG4gICAgICogbm90IGFzc2lnbmVkLCBhbmQgW3N0YXRlZnVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjY29uZmlnLXN0YXRlZnVsKSBpcyBub3Qgc2V0IHRvIGBmYWxzZWAsIHRoZSBbaWRdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWlkKVxuICAgICAqIChpZiBleHBsaWNpdGx5IHNwZWNpZmllZCkgd2lsbCBiZSB1c2VkIGFzIHRoZSBgc3RhdGVJZGAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1zdGF0ZUlkKVxuICAgICAqL1xuICAgIHN0YXRlSWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBgU3RhdGVQcm92aWRlcmAgdG8gdXNlIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhpcyBvYmplY3QncyBbc3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNwcm9wZXJ0eS1zdGF0ZSkuIEJ5IGRlZmF1bHQsIGBzdGF0ZWBcbiAgICAgKiB3aWxsIGJlIHNhdmVkIHVzaW5nIHRoZSBbZGVmYXVsdCBzdGF0ZSBwcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3N0YXRlL1N0YXRlUHJvdmlkZXIjcHJvcGVydHktaW5zdGFuY2Utc3RhdGljKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXN0YXRlUHJvdmlkZXIpXG4gICAgICovXG4gICAgc3RhdGVQcm92aWRlciA/IDogU3RhdGVQcm92aWRlclxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIG1hdGNoIGZpZWxkcyBieSB0aGVpciBgbmFtZWAgcHJvcGVydHkgb25seSB3aGVuIGFzc2lnbmluZyBhIFtyZWNvcmRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1yZWNvcmQpLFxuICAgICAqIHdpdGhvdXQgZmFsbGluZyBiYWNrIHRvIGByZWZgLlxuICAgICAqL1xuICAgIHN0cmljdFJlY29yZE1hcHBpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB3aWRnZXRzIGtleWVkIGJ5IG5hbWUuIEJ5IGRlZmF1bHQgKHdoZW4gbm8gYHR5cGVgIGlzIGdpdmVuKSwgc3RyaXBzIGFyZVxuICAgICAqIFt0b29sYmFyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKS4gSWYgeW91IHdhbnQgdG8gcGFzcyBhbiBhcnJheSwgeW91IGNhbiB1c2VcbiAgICAgKiB0aGUgdG9vbGJhcidzIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXN0cmlwcylcbiAgICAgKi9cbiAgICBzdHJpcHMgPyA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz5cbiAgICAvKipcbiAgICAgKiBUaGUgY29udmVyc2Ugb2YgW3N5bmNWaWV3RGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNwcm9wZXJ0eS1zeW5jVmlld0RhdGUpXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy1zeW5jQ2FsZW5kYXJEYXRlKVxuICAgICAqL1xuICAgIHN5bmNDYWxlbmRhckRhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgY29udmVyc2Ugb2YgW3N5bmNDYWxlbmRhckRhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jcHJvcGVydHktc3luY0NhbGVuZGFyRGF0ZSlcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXN5bmNWaWV3RGF0ZSlcbiAgICAgKi9cbiAgICBzeW5jVmlld0RhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBbdGFiXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYikgY3JlYXRlZCBmb3IgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBwbGFjZWQgaW4gYVxuICAgICAqIFtUYWJQYW5lbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXRhYilcbiAgICAgKi9cbiAgICB0YWIgPyA6IGJvb2xlYW58VGFiQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIGNvbnRhaW5lciBpcyB1c2VkIGFzIGEgdGFiIGluIGEgVGFiUGFuZWwsIHRoZXNlIGl0ZW1zIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgKiBbVGFiQmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYkJhcikgd2hlbiB0aGlzIGNvbnRhaW5lciBpcyB0aGUgYWN0aXZlIHRhYi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXRhYkJhckl0ZW1zKVxuICAgICAqL1xuICAgIHRhYkJhckl0ZW1zID8gOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIFRoZSB0YWcgbmFtZSBvZiB0aGlzIFdpZGdldCdzIHJvb3QgZWxlbWVudFxuICAgICAqL1xuICAgIHRhZyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBDb25maWcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIpLFxuICAgICAqIG9yIGFycmF5IG9mIGNvbmZpZyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgY2hpbGQgaXRlbXMgb2YgYSBUb29sYmFyLlxuICAgICAqIFRoaXMgY3JlYXRlcyBhIHRvb2xiYXIgZG9ja2VkIHRvIHRoZSB0b3Agb2YgdGhlIHBhbmVsIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBoZWFkZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy10YmFyKVxuICAgICAqL1xuICAgIHRiYXIgPyA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogVGV4dCBhbGlnbm1lbnQ6ICdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0Jy4gQWxzbyBhY2NlcHRzIGRpcmVjdGlvbiBuZXV0cmFsICdzdGFydCcgYW5kICdlbmQnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctdGV4dEFsaWduKVxuICAgICAqL1xuICAgIHRleHRBbGlnbiA/IDogJ2xlZnQnfCdjZW50ZXInfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIG5hbWUgb2YgYSBmdW5jdGlvbiB3aGljaCB5aWVsZHMgYSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgb2JqZWN0IHRvIHVzZSBhcyBhIHRpY2sgYmFja2dyb3VuZCBlbGVtZW50XG4gICAgICogZm9yIHRoZSB0aWNrIGNvbnRleHQgcGFzc2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctdGlja1JlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0aWNrQ29udGV4dCBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCBmb3IgdGhlIHRpY2sgYmVpbmcgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIHtEYXRlfSB0aWNrQ29udGV4dC5zdGFydFRpbWUgVGhlIHN0YXJ0IHRpbWUgb2YgdGhlIHRpY2suXG4gICAgICogQHBhcmFtIHtEYXRlfSB0aWNrQ29udGV4dC5lbmRUaW1lIFRoZSBlbmQgdGltZSBvZiB0aGUgdGljay5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsW119IHRpY2tDb250ZXh0LmV2ZW50cyBUaGUgZXZlbnRzIHRoYXQgdmlzdWFsbHkgaW50ZXJzZWN0IHdpdGggdGhlIHRpY2suXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpY2tDb250ZXh0LnRpY2tJbmRleCBUaGUgemVyby1iYXNlZCBvdmVyYWxsIHRpY2sgaW5kZXguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpY2tDb250ZXh0LnN1YnRpY2tJbmRleCBUaGUgemVyby1iYXNlZCBzdWJ0aWNrIGluZGV4ICp3aXRoaW4qIHRoZSBob3VyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aWNrQ29udGV4dC5zdWJ0aWNrQ291bnQgVGhlIHRvdGFsIG51bWJlciBvZiB2aXNpYmxlIHN1YnRpY2tzIGluIGFuIGhvdXIuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuUmVzb3VyY2VNb2RlbH0gdGlja0NvbnRleHQucmVzb3VyY2VSZWNvcmQgKklmKiB0aGlzIHZpZXcgaXMgYSByZXNvdXJjZSB2aWV3LCB0aGUgcmVzb3VyY2UgcmVjb3JkLlxuICAgICAqIEByZXR1cm5zIHtEb21Db25maWd9IFRoZSBET00gY29uZmlnIG9iamVjdCB0byB1c2UgZm9yIHRoZSB0aWNrLlxuICAgICAqL1xuICAgIHRpY2tSZW5kZXJlciA/IDogKCh0aWNrQ29udGV4dDogeyBzdGFydFRpbWU6IERhdGUsIGVuZFRpbWU6IERhdGUsIGV2ZW50czogRXZlbnRNb2RlbFtdLCB0aWNrSW5kZXg6IG51bWJlciwgc3VidGlja0luZGV4OiBudW1iZXIsIHN1YnRpY2tDb3VudDogbnVtYmVyLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCB9KSA9PiBEb21Db25maWcpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlcikgZm9ybWF0IHN0cmluZy9mdW5jdGlvbiB1c2VkIHRvIGZvcm1hdCB0aGUgdGltZSBkaXNwbGF5ZWQgaW4gdGhlXG4gICAgICogdGltZSBheGlzIGF0IHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHZpZXcuXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIFRoZSBkYXRlIHRvIGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuXG4gICAgICovXG4gICAgdGltZUF4aXNUaW1lRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogQSBbRGF0ZUhlbHBlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyKSBmb3JtYXQgc3RyaW5nL2Z1bmN0aW9uIHVzZWQgdG8gZm9ybWF0IHRoZSB0aW1lIGRpc3BsYXllZCBpbiBldmVudHNcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICB0aW1lRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2Ygcm91bmRpbmcgdG8gYXBwbHkgd2hlbiBjYWxjdWxhdGluZyBhIGRhdGUgZnJvbSBhIHBvaW50ZXIgcG9zaXRpb24gaW4gYSBkYXlcbiAgICAgKiBjb2x1bW4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy10aW1lU25hcFR5cGUpXG4gICAgICovXG4gICAgdGltZVNuYXBUeXBlID8gOiAncm91bmQnfCdjZWlsJ3wnZmxvb3InfG51bGxcbiAgICAvKipcbiAgICAgKiBBIHRpdGxlIHRvIGRpc3BsYXkgaW4gdGhlIGhlYWRlciBvciBvd25pbmcgVGFiUGFuZWwuIENhdXNlcyBjcmVhdGlvbiBhbmQgZG9ja2luZyBvZiBhIGhlYWRlclxuICAgICAqIHRvIHRoZSB0b3AgaWYgbm8gaGVhZGVyIGlzIGNvbmZpZ3VyZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy10aXRsZSlcbiAgICAgKi9cbiAgICB0aXRsZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIFt0b29sc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sKSB0byBhZGQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgYHRpdGxlYCBpbiB0aGUgUGFuZWwgaGVhZGVyLiBFYWNoXG4gICAgICogcHJvcGVydHkgbmFtZSBpcyB0aGUgcmVmZXJlbmNlIGJ5IHdoaWNoIGFuIGluc3RhbnRpYXRlZCB0b29sIG1heSBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgbGl2ZVxuICAgICAqIGBbdG9vbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vVG9vbGFibGUjcHJvcGVydHktdG9vbHMpYCBwcm9wZXJ0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjY29uZmlnLXRvb2xzKVxuICAgICAqL1xuICAgIHRvb2xzID8gOiBSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPnxudWxsXG4gICAgLyoqXG4gICAgICogVG9vbHRpcCBmb3IgdGhlIHdpZGdldCwgZWl0aGVyIGFzIGEgc3RyaW5nIG9yIGFzIGEgVG9vbHRpcCBjb25maWcgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctdG9vbHRpcClcbiAgICAgKi9cbiAgICB0b29sdGlwID8gOiBzdHJpbmd8VG9vbHRpcENvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGFiYmluZyB3aXRoaW4gYSBQYW5lbCBpcyBub3QgY29udGFpbmVkLCBpZSB5b3UgY2FuIFRBQiBvdXQgb2YgdGhlIFBhbmVsXG4gICAgICogZm9yd2FyZHMgb3IgYmFja3dhcmRzLlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGB0cnVlYCB0byBkaXNhbGxvdyB0YWJiaW5nIG91dCBvZiB0aGUgUGFuZWwsIGFuZCBtYWtlIHRhYmJpbmcgY2lyY3VsYXIgd2l0aGluIHRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgdHJhcEZvY3VzID8gOiBib29sZWFuXG4gICAgdHlwZSA/IDogJ3dlZWt2aWV3J3wnd2VlaydcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy11aSlcbiAgICAgKi9cbiAgICB1aSA/IDogJ3BsYWluJ3wndG9vbGJhcid8c3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIEVpdGhlciB0aGUgc3RhcnQgaG91ciBvZiB0aGUgZGF5LCBvciBhICoyNCBob3VyKsKgYEhIOk1NYCBzdHJpbmcgZGVub3RpbmcgdGhlIGluaXRpYWxseSB2aXNpYmxlIHN0YXJ0XG4gICAgICogdGltZSBvZiB0aGUgZGF5LiBEZWZhdWx0cyB0byA3YW0uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy12aXNpYmxlU3RhcnRUaW1lKVxuICAgICAqL1xuICAgIHZpc2libGVTdGFydFRpbWUgPyA6IHN0cmluZ3xudW1iZXJ8e1xuICAgICAgICB0aW1lPzogc3RyaW5nfG51bWJlclxuICAgICAgICBibG9jaz86ICdzdGFydCd8J2VuZCd8J2NlbnRlcid8J25lYXJlc3QnXG4gICAgICAgIGVkZ2VPZmZzZXQ/OiBudW1iZXJcbiAgICAgICAgYW5pbWF0ZT86IG9iamVjdHxib29sZWFufG51bWJlclxuICAgICAgICBkdXJhdGlvbj86IG51bWJlclxuICAgICAgICBlYXNpbmc/OiBzdHJpbmdcbiAgICB9fG51bGxcbiAgICAvKipcbiAgICAgKiBUaGUgd2VlayBzdGFydCBkYXksIDAgbWVhbmluZyBTdW5kYXksIDYgbWVhbmluZyBTYXR1cmRheS5cbiAgICAgKiBEZWZhdWx0cyB0byBbd2Vla1N0YXJ0RGF5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIjcHJvcGVydHktd2Vla1N0YXJ0RGF5LXN0YXRpYykuXG4gICAgICovXG4gICAgd2Vla1N0YXJ0RGF5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIHdpZGdldHMgd2VpZ2h0IGRldGVybWluZXMgaXRzIHBvc2l0aW9uIGFtb25nIHNpYmxpbmdzIHdoZW4gYWRkZWQgdG8gYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lcikuXG4gICAgICogSGlnaGVyIHdlaWdodHMgZ28gZnVydGhlciBkb3duLlxuICAgICAqL1xuICAgIHdlaWdodCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3Mgd2lkdGgsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLndpZHRoYC4gRWl0aGVyIHNwZWNpZnkgYSB2YWxpZCB3aWR0aCBzdHJpbmcgb3IgYSBudW1iZXIsIHdoaWNoXG4gICAgICogd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCB3aWR0aCwgYnV0IGluIHNvbWUgY2FzZXNcbiAgICAgKiB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIHdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHggcG9zaXRpb24gZm9yIHRoZSB3aWRnZXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2NvbmZpZy14KVxuICAgICAqL1xuICAgIHggPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB5IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWcteSlcbiAgICAgKi9cbiAgICB5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBZb3UgY2FuIHpvb20gaW4gYW5kIG91dCBvbiB0aGUgdGltZSBheGlzIHVzaW5nIENUUkwta2V5ICsgbW91c2Ugd2hlZWxcbiAgICAgKiBvbiBtb3VzZS1iYXNlZCBkZXZpY2VzIG9yIHBpbmNoLXpvb20gb24gdG91Y2ggZGV2aWNlcy5cbiAgICAgKiBTZWUgYWxzbyB0aGUgW2hvdXJIZWlnaHRCcmVha3BvaW50c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaG91ckhlaWdodEJyZWFrcG9pbnRzKSBjb25maWcgb3B0aW9uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNjb25maWctem9vbU9uTW91c2VXaGVlbClcbiAgICAgKi9cbiAgICB6b29tT25Nb3VzZVdoZWVsID8gOiBib29sZWFufG51bWJlclxuXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yIDogJ2JyeW50dW0td2Vlay12aWV3JyxcbiAgICB0ZW1wbGF0ZSA6ICcnXG59KVxuZXhwb3J0IGNsYXNzIEJyeW50dW1XZWVrVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IFdlZWtWaWV3O1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZU5hbWUgPSAnV2Vla1ZpZXcnO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUV2ZW50czogc3RyaW5nW10gPSBbXG4gICAgICAgICdvbkJlZm9yZUF1dG9DcmVhdGUnLFxuICAgICAgICAnb25CZWZvcmVDaGFuZ2VEYXRlJyxcbiAgICAgICAgJ29uQmVmb3JlRGVzdHJveScsXG4gICAgICAgICdvbkJlZm9yZUhpZGUnLFxuICAgICAgICAnb25CZWZvcmVSZXNwb25zaXZlU3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25CZWZvcmVTZXRSZWNvcmQnLFxuICAgICAgICAnb25CZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhdGVBcHBseScsXG4gICAgICAgICdvbkJlZm9yZVN0YXRlU2F2ZScsXG4gICAgICAgICdvbkNhdGNoQWxsJyxcbiAgICAgICAgJ29uQ2VsbE1hcFBvcHVsYXRlZCcsXG4gICAgICAgICdvbkNvbGxhcHNlJyxcbiAgICAgICAgJ29uRGF5Q2VsbFBvcHVsYXRlZCcsXG4gICAgICAgICdvbkRlc3Ryb3knLFxuICAgICAgICAnb25EaXJ0eVN0YXRlQ2hhbmdlJyxcbiAgICAgICAgJ29uRWxlbWVudENyZWF0ZWQnLFxuICAgICAgICAnb25FdmVudEF1dG9DcmVhdGVkJyxcbiAgICAgICAgJ29uRXZlbnRQcm9wYWdhdGUnLFxuICAgICAgICAnb25FeHBhbmQnLFxuICAgICAgICAnb25Gb2N1c0luJyxcbiAgICAgICAgJ29uRm9jdXNPdXQnLFxuICAgICAgICAnb25IaWRlJyxcbiAgICAgICAgJ29uTGF5b3V0VXBkYXRlJyxcbiAgICAgICAgJ29uUGFpbnQnLFxuICAgICAgICAnb25SYW5nZUNoYW5nZScsXG4gICAgICAgICdvblJlYWRPbmx5JyxcbiAgICAgICAgJ29uUmVjb21wb3NlJyxcbiAgICAgICAgJ29uUmVmcmVzaCcsXG4gICAgICAgICdvblJlc2l6ZScsXG4gICAgICAgICdvblJlc3BvbnNpdmVTdGF0ZUNoYW5nZScsXG4gICAgICAgICdvblNoaWZ0SW5jcmVtZW50Q2hhbmdlJyxcbiAgICAgICAgJ29uU2hvdycsXG4gICAgICAgICdvblRpY2tDaGFuZ2UnLFxuICAgICAgICAnb25UaW1lQXhpc0NsaWNrJyxcbiAgICAgICAgJ29uVG9vbENsaWNrJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcblxuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtV2Vla1ZpZXdDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWN0aW9uQnV0dG9ucycsXG4gICAgICAgICdhY3RpdmF0aW9uS2V5JyxcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduJyxcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbGxEYXlFdmVudHMnLFxuICAgICAgICAnYWxsb3dEcmFnQ3JlYXRlJyxcbiAgICAgICAgJ2FsbG93RHJhZ01vdmUnLFxuICAgICAgICAnYWxsb3dEcmFnUmVzaXplJyxcbiAgICAgICAgJ2FsbG93Wm9vbVVuZGVyZmxvdycsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYW5pbWF0ZVRpbWVTaGlmdCcsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2F1dG9DcmVhdGUnLFxuICAgICAgICAnYmJhcicsXG4gICAgICAgICdib2R5Q2xzJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NlbnRlcmVkJyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2xsYXBzZWQnLFxuICAgICAgICAnY29sbGFwc2libGUnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2NvbHVtbkhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2NvbXBhY3RIZWFkZXInLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnN0cmFpblRvJyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2NvcmVIb3VycycsXG4gICAgICAgICdjdXJyZW50VGltZUluZGljYXRvclJlbmRlcmVyJyxcbiAgICAgICAgJ2Rhc2hlZFN1YnRpY2tzJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2RhdGUnLFxuICAgICAgICAnZGF0ZUZpbHRlcicsXG4gICAgICAgICdkYXRlRm9ybWF0JyxcbiAgICAgICAgJ2RhdGVTZXBhcmF0b3InLFxuICAgICAgICAnZGF5Q2VsbFJlbmRlcmVyJyxcbiAgICAgICAgJ2RheUVuZFRpbWUnLFxuICAgICAgICAnZGF5SGVhZGVyUmVuZGVyZXInLFxuICAgICAgICAnZGF5TmFtZUZvcm1hdCcsXG4gICAgICAgICdkYXlTdGFydFNoaWZ0JyxcbiAgICAgICAgJ2RheVN0YXJ0VGltZScsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RlZmF1bHRGb2N1cycsXG4gICAgICAgICdkZWZhdWx0cycsXG4gICAgICAgICdkZWZhdWx0U2Nyb2xsT3B0aW9ucycsXG4gICAgICAgICdkZXNjcmlwdGlvbkZvcm1hdCcsXG4gICAgICAgICdkZXNjcmlwdGlvblJlbmRlcmVyJyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmFnZ2FibGUnLFxuICAgICAgICAnZHJhZ1VuaXQnLFxuICAgICAgICAnZHJhd2VyJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2VuZERhdGUnLFxuICAgICAgICAnZXZlbnRGaWx0ZXInLFxuICAgICAgICAnZXZlbnRIZWFkZXJSZW5kZXJlcicsXG4gICAgICAgICdldmVudExheW91dCcsXG4gICAgICAgICdldmVudFJlbmRlcmVyJyxcbiAgICAgICAgJ2V2ZW50U29ydGVyJyxcbiAgICAgICAgJ2V2ZW50U3BhY2luZycsXG4gICAgICAgICdleHRlbmRBbGxEYXlFbmREYXknLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZpbHRlckV2ZW50UmVzb3VyY2VzJyxcbiAgICAgICAgJ2ZpdEhvdXJzJyxcbiAgICAgICAgJ2ZpeGVkRHVyYXRpb24nLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmbG9hdGluZycsXG4gICAgICAgICdmb290ZXInLFxuICAgICAgICAnZ2V0UHJpbWFyeVJlc291cmNlJyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZUVtcHR5RGF5cycsXG4gICAgICAgICdoaWRlTm9uV29ya2luZ0RheXMnLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdob3VySGVpZ2h0JyxcbiAgICAgICAgJ2hvdXJIZWlnaHRCcmVha3BvaW50cycsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2luY3JlbWVudCcsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2ludGVyRGF5RHJhZycsXG4gICAgICAgICdpbnRlckRheVJlc2l6ZScsXG4gICAgICAgICdpdGVtQ2xzJyxcbiAgICAgICAgJ2l0ZW1zJyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xheW91dCcsXG4gICAgICAgICdsYXlvdXRTdHlsZScsXG4gICAgICAgICdsYXp5SXRlbXMnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhBbGxEYXlIZWlnaHQnLFxuICAgICAgICAnbWF4RGF0ZScsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4aW1pemVPbk1vYmlsZScsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtaW5EYXRlJyxcbiAgICAgICAgJ21pbkRheVdpZHRoJyxcbiAgICAgICAgJ21pbkV2ZW50SGVpZ2h0JyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5Ib3VySGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnbmFtZWRJdGVtcycsXG4gICAgICAgICdub01hdGNoaW5nRGF0ZXMnLFxuICAgICAgICAnbm9uV29ya2luZ0RheXMnLFxuICAgICAgICAnb3ZlcmZsb3dQb3B1cCcsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwYXN0RXZlbnRDbHMnLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmFuZ2UnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZW5kaXRpb24nLFxuICAgICAgICAncmVzb3VyY2VJbWFnZVBhdGgnLFxuICAgICAgICAncmVzcG9uc2l2ZScsXG4gICAgICAgICdyZXNwb25zaXZlUm9vdCcsXG4gICAgICAgICdyZXNwb25zaXZlU3RhdGUnLFxuICAgICAgICAncmVzcG9uc2l2ZVRhcmdldCcsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9vdEVsZW1lbnQnLFxuICAgICAgICAncnRsJyxcbiAgICAgICAgJ3Njcm9sbGFibGUnLFxuICAgICAgICAnc2Nyb2xsQWN0aW9uJyxcbiAgICAgICAgJ3NlbGVjdG9yQnV0dG9uJyxcbiAgICAgICAgJ3NlbGVjdG9yTWVudUl0ZW0nLFxuICAgICAgICAnc2hpZnRJbmNyZW1lbnQnLFxuICAgICAgICAnc2hvcnREYXRlRm9ybWF0JyxcbiAgICAgICAgJ3Nob3J0RGF0ZVRpbWVGb3JtYXQnLFxuICAgICAgICAnc2hvcnRFdmVudENscycsXG4gICAgICAgICdzaG9ydEV2ZW50RHVyYXRpb24nLFxuICAgICAgICAnc2hvd0FsbERheUhlYWRlcicsXG4gICAgICAgICdzaG93QW5pbWF0aW9uJyxcbiAgICAgICAgJ3Nob3dCdWxsZXQnLFxuICAgICAgICAnc2hvd0N1cnJlbnRUaW1lJyxcbiAgICAgICAgJ3Nob3dSZXNvdXJjZUF2YXRhcnMnLFxuICAgICAgICAnc2hvd1RpbWUnLFxuICAgICAgICAnc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQnLFxuICAgICAgICAnc2l4TWludXRlVGlja3MnLFxuICAgICAgICAnc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZScsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0YWNrTXVsdGlEYXlFdmVudHMnLFxuICAgICAgICAnc3RhcnREYXRlJyxcbiAgICAgICAgJ3N0YXRlZnVsJyxcbiAgICAgICAgJ3N0YXRlZnVsRXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlSWQnLFxuICAgICAgICAnc3RhdGVQcm92aWRlcicsXG4gICAgICAgICdzdHJpY3RSZWNvcmRNYXBwaW5nJyxcbiAgICAgICAgJ3N0cmlwcycsXG4gICAgICAgICdzeW5jQ2FsZW5kYXJEYXRlJyxcbiAgICAgICAgJ3N5bmNWaWV3RGF0ZScsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiQmFySXRlbXMnLFxuICAgICAgICAndGFnJyxcbiAgICAgICAgJ3RiYXInLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RpY2tSZW5kZXJlcicsXG4gICAgICAgICd0aW1lQXhpc1RpbWVGb3JtYXQnLFxuICAgICAgICAndGltZUZvcm1hdCcsXG4gICAgICAgICd0aW1lU25hcFR5cGUnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHMnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd0cmFwRm9jdXMnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICd1aScsXG4gICAgICAgICd2aXNpYmxlU3RhcnRUaW1lJyxcbiAgICAgICAgJ3dlZWtTdGFydERheScsXG4gICAgICAgICd3ZWlnaHQnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5JyxcbiAgICAgICAgJ3pvb21Pbk1vdXNlV2hlZWwnXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnc09ubHk6IHN0cmluZ1tdID0gW1xuICAgICAgICAnYWN0aW9uQnV0dG9ucycsXG4gICAgICAgICdhY3RpdmF0aW9uS2V5JyxcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduJyxcbiAgICAgICAgJ2FsbERheUV2ZW50cycsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2NlbnRlcmVkJyxcbiAgICAgICAgJ2NvbGxhcHNpYmxlJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbHVtbkhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdjdXJyZW50VGltZUluZGljYXRvclJlbmRlcmVyJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkYXlDZWxsUmVuZGVyZXInLFxuICAgICAgICAnZGF5SGVhZGVyUmVuZGVyZXInLFxuICAgICAgICAnZGF5TmFtZUZvcm1hdCcsXG4gICAgICAgICdkYXlTdGFydFNoaWZ0JyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGVmYXVsdEZvY3VzJyxcbiAgICAgICAgJ2RlZmF1bHRzJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uUmVuZGVyZXInLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW5kRGF0ZScsXG4gICAgICAgICdldmVudEZpbHRlcicsXG4gICAgICAgICdldmVudEhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2V2ZW50TGF5b3V0JyxcbiAgICAgICAgJ2V2ZW50UmVuZGVyZXInLFxuICAgICAgICAnZXZlbnRTb3J0ZXInLFxuICAgICAgICAnZXZlbnRTcGFjaW5nJyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2Zvb3RlcicsXG4gICAgICAgICdnZXRQcmltYXJ5UmVzb3VyY2UnLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2l0ZW1DbHMnLFxuICAgICAgICAnbGF6eUl0ZW1zJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhBbGxEYXlIZWlnaHQnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICduYW1lZEl0ZW1zJyxcbiAgICAgICAgJ292ZXJmbG93UG9wdXAnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZXNvdXJjZUltYWdlUGF0aCcsXG4gICAgICAgICdyZXNwb25zaXZlJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVSb290JyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVTdGF0ZScsXG4gICAgICAgICdyZXNwb25zaXZlVGFyZ2V0JyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2VsZWN0b3JCdXR0b24nLFxuICAgICAgICAnc2VsZWN0b3JNZW51SXRlbScsXG4gICAgICAgICdzaG9ydEV2ZW50Q2xzJyxcbiAgICAgICAgJ3Nob3J0RXZlbnREdXJhdGlvbicsXG4gICAgICAgICdzaG93QWxsRGF5SGVhZGVyJyxcbiAgICAgICAgJ3Nob3dBbmltYXRpb24nLFxuICAgICAgICAnc2hvd0J1bGxldCcsXG4gICAgICAgICdzaG93UmVzb3VyY2VBdmF0YXJzJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwV2hlbkRpc2FibGVkJyxcbiAgICAgICAgJ3N0YXJ0RGF0ZScsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RyaXBzJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YWcnLFxuICAgICAgICAndGJhcicsXG4gICAgICAgICd0ZXh0QWxpZ24nLFxuICAgICAgICAndGlja1JlbmRlcmVyJyxcbiAgICAgICAgJ3RpbWVBeGlzVGltZUZvcm1hdCcsXG4gICAgICAgICd0aW1lRm9ybWF0JyxcbiAgICAgICAgJ3RyYXBGb2N1cycsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3Zpc2libGVTdGFydFRpbWUnLFxuICAgICAgICAnd2Vla1N0YXJ0RGF5JyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd6b29tT25Nb3VzZVdoZWVsJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtUHJvcHM6IHN0cmluZ1tdID0gQnJ5bnR1bVdlZWtWaWV3Q29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbGxvd0RyYWdDcmVhdGUnLFxuICAgICAgICAnYWxsb3dEcmFnTW92ZScsXG4gICAgICAgICdhbGxvd0RyYWdSZXNpemUnLFxuICAgICAgICAnYWxsb3dab29tVW5kZXJmbG93JyxcbiAgICAgICAgJ2FuY2hvclNpemUnLFxuICAgICAgICAnYW5pbWF0ZVRpbWVTaGlmdCcsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhdXRvQ3JlYXRlJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29tcGFjdEhlYWRlcicsXG4gICAgICAgICdjb3JlSG91cnMnLFxuICAgICAgICAnZGFzaGVkU3VidGlja3MnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkYXRlJyxcbiAgICAgICAgJ2RhdGVGaWx0ZXInLFxuICAgICAgICAnZGF0ZUZvcm1hdCcsXG4gICAgICAgICdkYXRlU2VwYXJhdG9yJyxcbiAgICAgICAgJ2RheUNlbGxDbHMnLFxuICAgICAgICAnZGF5RW5kVGltZScsXG4gICAgICAgICdkYXlTdGFydFRpbWUnLFxuICAgICAgICAnZGVmYXVsdFNjcm9sbE9wdGlvbnMnLFxuICAgICAgICAnZGVzY3JpcHRpb25Gb3JtYXQnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZHJhZ1VuaXQnLFxuICAgICAgICAnZXh0ZW5kQWxsRGF5RW5kRGF5JyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmaWx0ZXJFdmVudFJlc291cmNlcycsXG4gICAgICAgICdmaXJzdFZpc2libGVDZWxsJyxcbiAgICAgICAgJ2ZpcnN0VmlzaWJsZURhdGUnLFxuICAgICAgICAnZml0SG91cnMnLFxuICAgICAgICAnZml4ZWREdXJhdGlvbicsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2ZvY3VzVmlzaWJsZScsXG4gICAgICAgICdoYXNDaGFuZ2VzJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUVtcHR5RGF5cycsXG4gICAgICAgICdoaWRlTm9uV29ya2luZ0RheXMnLFxuICAgICAgICAnaG9yaXpvbnRhbFNjcm9sbGVyJyxcbiAgICAgICAgJ2hvdXJIZWlnaHQnLFxuICAgICAgICAnaG91ckhlaWdodEJyZWFrcG9pbnRzJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2luY3JlbWVudCcsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2ludGVyRGF5RHJhZycsXG4gICAgICAgICdpbnRlckRheVJlc2l6ZScsXG4gICAgICAgICdpc1NldHRpbmdWYWx1ZXMnLFxuICAgICAgICAnaXNWYWxpZCcsXG4gICAgICAgICdpdGVtcycsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYXN0VmlzaWJsZUNlbGwnLFxuICAgICAgICAnbGFzdFZpc2libGVEYXRlJyxcbiAgICAgICAgJ2xheW91dCcsXG4gICAgICAgICdsYXlvdXRTdHlsZScsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWF4RGF0ZScsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4aW1pemVPbk1vYmlsZScsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtaW5EYXRlJyxcbiAgICAgICAgJ21pbkRheVdpZHRoJyxcbiAgICAgICAgJ21pbkV2ZW50SGVpZ2h0JyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5Ib3VySGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ25vTWF0Y2hpbmdEYXRlcycsXG4gICAgICAgICdub25Xb3JraW5nRGF5cycsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncGFzdEV2ZW50Q2xzJyxcbiAgICAgICAgJ3JhbmdlJyxcbiAgICAgICAgJ3JlYWRPbmx5JyxcbiAgICAgICAgJ3JlY29yZCcsXG4gICAgICAgICdyZW5kaXRpb24nLFxuICAgICAgICAncnRsJyxcbiAgICAgICAgJ3Njcm9sbGFibGUnLFxuICAgICAgICAnc2hpZnRJbmNyZW1lbnQnLFxuICAgICAgICAnc2hvcnREYXRlRm9ybWF0JyxcbiAgICAgICAgJ3Nob3J0RGF0ZVRpbWVGb3JtYXQnLFxuICAgICAgICAnc2hvd0N1cnJlbnRUaW1lJyxcbiAgICAgICAgJ3Nob3dUaW1lJyxcbiAgICAgICAgJ3NpeE1pbnV0ZVRpY2tzJyxcbiAgICAgICAgJ3NuYXBSZWxhdGl2ZVRvRXZlbnRTdGFydERhdGUnLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzdGFja011bHRpRGF5RXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlJyxcbiAgICAgICAgJ3N0cmljdFJlY29yZE1hcHBpbmcnLFxuICAgICAgICAnc3luY0NhbGVuZGFyRGF0ZScsXG4gICAgICAgICdzeW5jVmlld0RhdGUnLFxuICAgICAgICAndGltZVNuYXBUeXBlJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndmFsdWVzJyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ3gnLFxuICAgICAgICAneSdcbiAgICBdKTtcblxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgICBwdWJsaWMgaW5zdGFuY2UhOiBXZWVrVmlldztcblxuICAgIHByaXZhdGUgYnJ5bnR1bUNvbmZpZyA9IHtcbiAgICAgICAgYWRvcHQgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYXBwZW5kVG8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHJlZiAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYW5ndWxhckNvbXBvbmVudCA6IHRoaXMsXG4gICAgICAgIGZlYXR1cmVzICAgICAgICAgOiB7fSxcbiAgICAgICAgbGlzdGVuZXJzICAgICAgICA6IHt9XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBDb25maWdzIG9ubHlcbiAgICBASW5wdXQoKSBhY3Rpb25CdXR0b25zICAgICAgICAgICAgICAgICEgOiBBY3Rpb25CdXR0b25zQ29uZmlnW118UmVjb3JkPHN0cmluZywgQWN0aW9uQnV0dG9uc0NvbmZpZz47XG4gICAgQElucHV0KCkgYWN0aXZhdGlvbktleSAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFkb3B0ICAgICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhbGlnbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBBbGlnblNwZWN8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFsbERheUV2ZW50cyAgICAgICAgICAgICAgICAgISA6IENhbGVuZGFyUm93fENhbGVuZGFyUm93Q29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgYW5jaG9yICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcmlhRGVzY3JpcHRpb24gICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXJpYUxhYmVsICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGJiYXIgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIGJvZHlDbHMgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgYnViYmxlRXZlbnRzICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNlbnRlcmVkICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sbGFwc2libGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWc7XG4gICAgQElucHV0KCkgY29sb3IgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbHVtbkhlYWRlclJlbmRlcmVyICAgICAgICAgISA6ICgoY2VsbERhdGE6IERheUNlbGxXaXRoRXZlbnRzKSA9PiBzdHJpbmd8b2JqZWN0KXxzdHJpbmc7XG4gICAgQElucHV0KCkgY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbnN0cmFpblRvICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fFdpZGdldHxSZWN0YW5nbGU7XG4gICAgQElucHV0KCkgY29udGVudEVsZW1lbnRDbHMgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjdXJyZW50VGltZUluZGljYXRvclJlbmRlcmVyICEgOiAoKCkgPT4gRG9tQ29uZmlnKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0YUZpZWxkICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRheUNlbGxSZW5kZXJlciAgICAgICAgICAgICAgISA6ICgoZG9tQ29uZmlnOiB7IGNsYXNzTmFtZTogb2JqZWN0LCBzdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QgfSwgY2hpbGRyZW46IERvbUNvbmZpZ1tdLCBjZWxsRGF0YTogRGF5Q2VsbCkgPT4gc3RyaW5nKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGF5SGVhZGVyUmVuZGVyZXIgICAgICAgICAgICAhIDogKChoZWFkZXJEb21Db25maWc6IHsgY2xhc3NOYW1lOiBvYmplY3QsIHN0eWxlOiBvYmplY3QsIGRhdGFzZXQ6IG9iamVjdCwgY2hpbGRyZW46IERvbUNvbmZpZ1tdIH0sIGNlbGxEYXRhOiBEYXlDZWxsKSA9PiBzdHJpbmcpfHN0cmluZztcbiAgICBASW5wdXQoKSBkYXlOYW1lRm9ybWF0ICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpO1xuICAgIEBJbnB1dCgpIGRheVN0YXJ0U2hpZnQgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgZGVmYXVsdEJpbmRQcm9wZXJ0eSAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRGb2N1cyAgICAgICAgICAgICAgICAgISA6ICgod2lkZ2V0OiBXaWRnZXQpID0+IGJvb2xlYW4pfHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICEgOiBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWc7XG4gICAgQElucHV0KCkgZGVzY3JpcHRpb25SZW5kZXJlciAgICAgICAgICAhIDogKHZpZXc6IFdpZGdldCkgPT4gc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZG9jayAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRyYWdnYWJsZSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBoYW5kbGVTZWxlY3Rvcj86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgZHJhd2VyICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7c2lkZT86ICdzdGFydCd8J2xlZnQnfCdlbmQnfCdyaWdodCd8J3RvcCd8J2JvdHRvbScsIHNpemU/OiBzdHJpbmd8bnVtYmVyLCBpbmxpbmU/OiBib29sZWFuLCBhdXRvQ2xvc2U6IHsgbW91c2Vkb3duPzogYm9vbGVhbnxzdHJpbmcsIGZvY3Vzb3V0PzogYm9vbGVhbnxzdHJpbmcsIG1vdXNlb3V0Pzogc3RyaW5nIH0sIGF1dG9DbG9zZURlbGF5PzogbnVtYmVyfTtcbiAgICBASW5wdXQoKSBlbGVtZW50QXR0cmlidXRlcyAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD47XG4gICAgQElucHV0KCkgZW5kRGF0ZSAgICAgICAgICAgICAgICAgICAgICAhIDogRGF0ZTtcbiAgICBASW5wdXQoKSBldmVudEZpbHRlciAgICAgICAgICAgICAgICAgICEgOiAoKGV2ZW50OiBFdmVudE1vZGVsKSA9PiBib29sZWFuKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZXZlbnRIZWFkZXJSZW5kZXJlciAgICAgICAgICAhIDogKChkZXRhaWw6IHsgdmlldzogQ2FsZW5kYXJWaWV3LCBldmVudFJlY29yZDogRXZlbnRNb2RlbCwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwsIHJlbmRlckRhdGE6IHsgc3R5bGU6IG9iamVjdCwgY2xzOiBvYmplY3QsIGljb25TdHlsZTogb2JqZWN0LCBpY29uQ2xzOiBvYmplY3QsIGV2ZW50Q29sb3I6IHN0cmluZywgZGF0YXNldDogb2JqZWN0LCBzb2xpZEJhcjogYm9vbGVhbiwgYm9keUNvbG9yOiBzdHJpbmcgfSwgc2hvd0J1bGxldDogYm9vbGVhbiB9KSA9PiBEb21Db25maWd8RG9tQ29uZmlnW118c3RyaW5nfHZvaWQpfHN0cmluZztcbiAgICBASW5wdXQoKSBldmVudExheW91dCAgICAgICAgICAgICAgICAgICEgOiBGbHVpZERheUxheW91dENvbmZpZztcbiAgICBASW5wdXQoKSBldmVudFJlbmRlcmVyICAgICAgICAgICAgICAgICEgOiAoKGRldGFpbDogeyB2aWV3OiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgcmVuZGVyRGF0YTogeyBzdHlsZTogb2JqZWN0LCBjbHM6IG9iamVjdCwgaWNvblN0eWxlOiBvYmplY3QsIGljb25DbHM6IG9iamVjdCwgZXZlbnRDb2xvcjogc3RyaW5nLCBldmVudEJhY2tncm91bmQ6IHN0cmluZywgdGV4dENvbG9yOiBzdHJpbmcsIGV2ZW50SW5uZXJTdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QsIHNvbGlkQmFyOiBib29sZWFuLCBib2R5Q29sb3I6IHN0cmluZywgc2hvd0J1bGxldDogYm9vbGVhbiB9IH0pID0+IERvbUNvbmZpZ3xEb21Db25maWdbXXxzdHJpbmd8dm9pZCl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGV2ZW50U29ydGVyICAgICAgICAgICAgICAgICAgISA6IChsaHM6IEV2ZW50TW9kZWx8RXZlbnRCYXIsIHJoczogRXZlbnRNb2RlbHxFdmVudEJhcikgPT4gbnVtYmVyO1xuICAgIEBJbnB1dCgpIGV2ZW50U3BhY2luZyAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBmbG9hdGluZyAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZvb3RlciAgICAgICAgICAgICAgICAgICAgICAgISA6IHtcbiAgICAgICAgZG9jaz86ICd0b3AnfCdyaWdodCd8J2JvdHRvbSd8J2xlZnQnfCdzdGFydCd8J2VuZCdcbiAgICAgICAgaHRtbD86IHN0cmluZ1xuICAgICAgICBjbHM/OiBzdHJpbmdcbiAgICB9fHN0cmluZztcbiAgICBASW5wdXQoKSBnZXRQcmltYXJ5UmVzb3VyY2UgICAgICAgICAgICEgOiAoKGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsKSA9PiBSZXNvdXJjZU1vZGVsKXxzdHJpbmc7XG4gICAgQElucHV0KCkgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfGJvb2xlYW58UGFuZWxIZWFkZXI7XG4gICAgQElucHV0KCkgaGlkZUFuaW1hdGlvbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgaGlkZVdoZW5FbXB0eSAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpY29uICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8RG9tQ29uZmlnO1xuICAgIEBJbnB1dCgpIGlnbm9yZVBhcmVudFJlYWRPbmx5ICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXRlbUNscyAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGxhenlJdGVtcyAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz58Q2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnW118V2lkZ2V0W107XG4gICAgQElucHV0KCkgbGlzdGVuZXJzICAgICAgICAgICAgICAgICAgICAhIDogV2Vla1ZpZXdMaXN0ZW5lcnM7XG4gICAgQElucHV0KCkgbG9jYWxlQ2xhc3MgICAgICAgICAgICAgICAgICAhIDogdHlwZW9mIEJhc2U7XG4gICAgQElucHV0KCkgbG9jYWxpemFibGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZVByb3BlcnRpZXMgICAgICAgICEgOiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBtYXNrRGVmYXVsdHMgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1hc2tlZCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWF4QWxsRGF5SGVpZ2h0ICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtb25pdG9yUmVzaXplICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgbmFtZWRJdGVtcyAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnPjtcbiAgICBASW5wdXQoKSBvdmVyZmxvd1BvcHVwICAgICAgICAgICAgICAgICEgOiBPdmVyZmxvd1BvcHVwQ29uZmlnO1xuICAgIEBJbnB1dCgpIG93bmVyICAgICAgICAgICAgICAgICAgICAgICAgISA6IFdpZGdldHxhbnk7XG4gICAgQElucHV0KCkgcG9zaXRpb25lZCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbGF5U3RvcmVFdmVudHMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVzb3VyY2VJbWFnZVBhdGggICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJlc3BvbnNpdmUgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlUm9vdCAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlc3BvbnNpdmVTdGF0ZSAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByZXNwb25zaXZlVGFyZ2V0ICAgICAgICAgICAgICEgOiBzdHJpbmd8V2lkZ2V0O1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBkZWxlZ2F0ZT86IHN0cmluZ1xuICAgICAgICBjb2xvcj86IHN0cmluZ1xuICAgICAgICByYWRpdXM/OiBudW1iZXJcbiAgICAgICAgY2xpcD86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgcm9vdEVsZW1lbnQgICAgICAgICAgICAgICAgICAhIDogU2hhZG93Um9vdHxIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBzY3JvbGxBY3Rpb24gICAgICAgICAgICAgICAgICEgOiAnaGlkZSd8J3JlYWxpZ24nfG51bGw7XG4gICAgQElucHV0KCkgc2VsZWN0b3JCdXR0b24gICAgICAgICAgICAgICAhIDogQnV0dG9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNlbGVjdG9yTWVudUl0ZW0gICAgICAgICAgICAgISA6IE1lbnVJdGVtQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNob3J0RXZlbnRDbHMgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzaG9ydEV2ZW50RHVyYXRpb24gICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIHNob3dBbGxEYXlIZWFkZXIgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd0FuaW1hdGlvbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgc2hvd0J1bGxldCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7YmFyPzogYm9vbGVhbiwgbm9CYXI/OiBib29sZWFufTtcbiAgICBASW5wdXQoKSBzaG93UmVzb3VyY2VBdmF0YXJzICAgICAgICAgICEgOiBib29sZWFufHN0cmluZztcbiAgICBASW5wdXQoKSBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0YXJ0RGF0ZSAgICAgICAgICAgICAgICAgICAgISA6IERhdGU7XG4gICAgQElucHV0KCkgc3RhdGVmdWwgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3R8c3RyaW5nW107XG4gICAgQElucHV0KCkgc3RhdGVmdWxFdmVudHMgICAgICAgICAgICAgICAhIDogb2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlSWQgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzdGF0ZVByb3ZpZGVyICAgICAgICAgICAgICAgICEgOiBTdGF0ZVByb3ZpZGVyO1xuICAgIEBJbnB1dCgpIHN0cmlwcyAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz47XG4gICAgQElucHV0KCkgdGFiICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxUYWJDb25maWc7XG4gICAgQElucHV0KCkgdGFiQmFySXRlbXMgICAgICAgICAgICAgICAgICAhIDogVG9vbGJhckl0ZW1zW118V2lkZ2V0W107XG4gICAgQElucHV0KCkgdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRiYXIgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIHRleHRBbGlnbiAgICAgICAgICAgICAgICAgICAgISA6ICdsZWZ0J3wnY2VudGVyJ3wncmlnaHQnfCdzdGFydCd8J2VuZCc7XG4gICAgQElucHV0KCkgdGlja1JlbmRlcmVyICAgICAgICAgICAgICAgICAhIDogKCh0aWNrQ29udGV4dDogeyBzdGFydFRpbWU6IERhdGUsIGVuZFRpbWU6IERhdGUsIGV2ZW50czogRXZlbnRNb2RlbFtdLCB0aWNrSW5kZXg6IG51bWJlciwgc3VidGlja0luZGV4OiBudW1iZXIsIHN1YnRpY2tDb3VudDogbnVtYmVyLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCB9KSA9PiBEb21Db25maWcpfHN0cmluZztcbiAgICBASW5wdXQoKSB0aW1lQXhpc1RpbWVGb3JtYXQgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpO1xuICAgIEBJbnB1dCgpIHRpbWVGb3JtYXQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgdHJhcEZvY3VzICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAnd2Vla3ZpZXcnfCd3ZWVrJztcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAncGxhaW4nfCd0b29sYmFyJ3xzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHZpc2libGVTdGFydFRpbWUgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXJ8e1xuICAgICAgICB0aW1lPzogc3RyaW5nfG51bWJlclxuICAgICAgICBibG9jaz86ICdzdGFydCd8J2VuZCd8J2NlbnRlcid8J25lYXJlc3QnXG4gICAgICAgIGVkZ2VPZmZzZXQ/OiBudW1iZXJcbiAgICAgICAgYW5pbWF0ZT86IG9iamVjdHxib29sZWFufG51bWJlclxuICAgICAgICBkdXJhdGlvbj86IG51bWJlclxuICAgICAgICBlYXNpbmc/OiBzdHJpbmdcbiAgICB9fG51bGw7XG4gICAgQElucHV0KCkgd2Vla1N0YXJ0RGF5ICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB6b29tT25Nb3VzZVdoZWVsICAgICAgICAgICAgICEgOiBib29sZWFufG51bWJlcjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhbGlnblNlbGYgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYWxsb3dEcmFnQ3JlYXRlICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbGxvd0RyYWdNb3ZlICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFsbG93RHJhZ1Jlc2l6ZSAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYWxsb3dab29tVW5kZXJmbG93ICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbmltYXRlVGltZVNoaWZ0ICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRvQ3JlYXRlICAgICAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIGdlc3R1cmU/OiBzdHJpbmdcbiAgICAgICAgbmV3TmFtZT86IEZ1bmN0aW9ufHN0cmluZ1xuICAgICAgICBzdGVwPzogc3RyaW5nXG4gICAgICAgIHNuYXBUeXBlPzogJ3JvdW5kJ3wnY2VpbCd8J2Zsb29yJ1xuICAgICAgICBkdXJhdGlvbj86IHN0cmluZ1xuICAgICAgICBzdGFydEhvdXI/OiBudW1iZXJcbiAgICB9fHN0cmluZ3xib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhbGxPbkZ1bmN0aW9ucyAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNvbXBhY3RIZWFkZXIgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29yZUhvdXJzICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fCgoZGF0ZTogRGF0ZSkgPT4gb2JqZWN0W10pfHN0cmluZztcbiAgICBASW5wdXQoKSBkYXNoZWRTdWJ0aWNrcyAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRhdGFzZXQgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGU7XG4gICAgQElucHV0KCkgZGF0ZUZpbHRlciAgICAgICAgICAgICAgICAgICAhIDogKChjb250ZXh0OiBEYXlDZWxsKSA9PiBib29sZWFuKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0ZUZvcm1hdCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBkYXRlU2VwYXJhdG9yICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGF5RW5kVGltZSAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBkYXlTdGFydFRpbWUgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRTY3JvbGxPcHRpb25zICAgICAgICAgISA6IEJyeW50dW1TY3JvbGxPcHRpb25zO1xuICAgIEBJbnB1dCgpIGRlc2NyaXB0aW9uRm9ybWF0ICAgICAgICAgICAgISA6IHN0cmluZ3xzdHJpbmdbXXxib29sZWFuW118KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpfEZ1bmN0aW9uW107XG4gICAgQElucHV0KCkgZGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnwnaW5lcnQnO1xuICAgIEBJbnB1dCgpIGRyYWdVbml0ICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHRlbmRBbGxEYXlFbmREYXkgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGV4dHJhRGF0YSAgICAgICAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSBmaWx0ZXJFdmVudFJlc291cmNlcyAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZpdEhvdXJzICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBtaW5IZWlnaHQ/OiBudW1iZXJcbiAgICB9O1xuICAgIEBJbnB1dCgpIGZpeGVkRHVyYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZmxleCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGRlbiAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUVtcHR5RGF5cyAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWRlTm9uV29ya2luZ0RheXMgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhvdXJIZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBob3VySGVpZ2h0QnJlYWtwb2ludHMgICAgICAgICEgOiBudW1iZXJbXTtcbiAgICBASW5wdXQoKSBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaW5jcmVtZW50ICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBpbnB1dEZpZWxkQWxpZ24gICAgICAgICAgICAgICEgOiAnc3RhcnQnfCdlbmQnO1xuICAgIEBJbnB1dCgpIGluc2VydEJlZm9yZSAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBpbnNlcnRGaXJzdCAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgaW50ZXJEYXlEcmFnICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpbnRlckRheVJlc2l6ZSAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGl0ZW1zICAgICAgICAgICAgICAgICAgICAgICAgISA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1Db25maWd8V2lkZ2V0KVtdfFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUNvbmZpZz58V2lkZ2V0W118UmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtRW50cnk+fChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeXxXaWRnZXQpW107XG4gICAgQElucHV0KCkga2V5TWFwICAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPjtcbiAgICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uICAgICAgICAgICAgICAgICEgOiAnYmVmb3JlJ3wnYWJvdmUnfCdhbGlnbi1iZWZvcmUnfCdhdXRvJ3xudWxsO1xuICAgIEBJbnB1dCgpIGxheW91dCAgICAgICAgICAgICAgICAgICAgICAgISA6IExheW91dHxzdHJpbmd8Q2FsZW5kYXJDb250YWluZXJMYXlvdXRDb25maWc7XG4gICAgQElucHV0KCkgbGF5b3V0U3R5bGUgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIG1hcmdpbiAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4RGF0ZSAgICAgICAgICAgICAgICAgICAgICAhIDogRGF0ZXxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4SGVpZ2h0ICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhpbWl6ZU9uTW9iaWxlICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heFdpZHRoICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluRGF0ZSAgICAgICAgICAgICAgICAgICAgICAhIDogRGF0ZXxzdHJpbmc7XG4gICAgQElucHV0KCkgbWluRGF5V2lkdGggICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtaW5FdmVudEhlaWdodCAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1pbkhlaWdodCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluSG91ckhlaWdodCAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbm9NYXRjaGluZ0RhdGVzICAgICAgICAgICAgICAhIDogc3RyaW5nfERvbUNvbmZpZztcbiAgICBASW5wdXQoKSBub25Xb3JraW5nRGF5cyAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8bnVtYmVyLCBib29sZWFuPjtcbiAgICBASW5wdXQoKSBwYXN0RXZlbnRDbHMgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfER1cmF0aW9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVuZGl0aW9uICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfFJlY29yZDxzdHJpbmcsIHN0cmluZz58bnVsbDtcbiAgICBASW5wdXQoKSBydGwgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNjcm9sbGFibGUgICAgICAgICAgICAgICAgICAgISA6IFNjcm9sbGVyfGJvb2xlYW58U2Nyb2xsZXJDb25maWc7XG4gICAgQElucHV0KCkgc2hpZnRJbmNyZW1lbnQgICAgICAgICAgICAgICAhIDogc3RyaW5nfER1cmF0aW9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNob3J0RGF0ZUZvcm1hdCAgICAgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgc2hvcnREYXRlVGltZUZvcm1hdCAgICAgICAgICAhIDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBzaG93Q3VycmVudFRpbWUgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgZnVsbFdpZHRoPzogYm9vbGVhblxuICAgICAgICBzaG93VGltZT86IGJvb2xlYW5cbiAgICAgICAgb25Ub3A/OiBib29sZWFuXG4gICAgfTtcbiAgICBASW5wdXQoKSBzaG93VGltZSAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufFJlY29yZDwoJ3N0YXJ0VGltZSd8J2VuZFRpbWUnfCdkdXJhdGlvbicpLCBib29sZWFufHN0cmluZ3xGdW5jdGlvbj47XG4gICAgQElucHV0KCkgc2l4TWludXRlVGlja3MgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzbmFwUmVsYXRpdmVUb0V2ZW50U3RhcnREYXRlICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNwYW4gICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBzdGFja011bHRpRGF5RXZlbnRzICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0cmljdFJlY29yZE1hcHBpbmcgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3luY0NhbGVuZGFyRGF0ZSAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzeW5jVmlld0RhdGUgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRpbWVTbmFwVHlwZSAgICAgICAgICAgICAgICAgISA6ICdyb3VuZCd8J2NlaWwnfCdmbG9vcid8bnVsbDtcbiAgICBASW5wdXQoKSB0aXRsZSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdG9vbHMgICAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgVG9vbHxUb29sQ29uZmlnPnxudWxsfFJlY29yZDxzdHJpbmcsIFRvb2w+fFJlY29yZDxzdHJpbmcsIFRvb2xDb25maWc+O1xuICAgIEBJbnB1dCgpIHRvb2x0aXAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgd2lkdGggICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVydGllcyBvbmx5XG4gICAgQElucHV0KCkgYW5jaG9yU2l6ZSAgICAgICAgICEgOiBudW1iZXJbXTtcbiAgICBASW5wdXQoKSBkYXlDZWxsQ2xzICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBmaXJzdFZpc2libGVDZWxsICAgISA6IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIGZpcnN0VmlzaWJsZURhdGUgICAhIDogRGF0ZTtcbiAgICBASW5wdXQoKSBmb2N1c1Zpc2libGUgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGFzQ2hhbmdlcyAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhvcml6b250YWxTY3JvbGxlciAhIDogU2Nyb2xsZXI7XG4gICAgQElucHV0KCkgaXNTZXR0aW5nVmFsdWVzICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlzVmFsaWQgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsYXN0VmlzaWJsZUNlbGwgICAgISA6IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIGxhc3RWaXNpYmxlRGF0ZSAgICAhIDogRGF0ZTtcbiAgICBASW5wdXQoKSBwYXJlbnQgICAgICAgICAgICAgISA6IFdpZGdldDtcbiAgICBASW5wdXQoKSByZWNvcmQgICAgICAgICAgICAgISA6IE1vZGVsO1xuICAgIEBJbnB1dCgpIHN0YXRlICAgICAgICAgICAgICAhIDogYW55O1xuICAgIEBJbnB1dCgpIHZhbHVlcyAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgb2JqZWN0PjtcblxuICAgIC8vIEV2ZW50cyBlbWl0dGVyc1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgd2hlbmV2ZXIgdGhlIFthdXRvQ3JlYXRlIGdlc3R1cmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLWF1dG9DcmVhdGUpIGlzIGRldGVjdGVkXG4gICAgICogYW5kIGFsc28gd2hlbiBhIFtkcmFnLWNyZWF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci9mZWF0dXJlL0NhbGVuZGFyRHJhZykgZ2VzdHVyZSBpcyBkZXRlY3RlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjZXZlbnQtYmVmb3JlQXV0b0NyZWF0ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIERPTSBldmVudCB3aGljaCBpbml0aWF0ZWQgdGhlIGNyZWF0aW9uLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSAqREVQUkVDQVRFRCBpbiBmYXZvdXIgb2YgYHN0YXJ0RGF0ZWAuKiBUaGUgc3RhcnRpbmcgdGltZSBvZiB0aGUgZXZlbnQgdG8gYmUgY3JlYXRlZC4gSWYgdGhpcyBpcyBpbiBhIGBEYXlWaWV3YCwgdGhpcyB3aWxsIGJlIHNuYXBwZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIGluIFthdXRvQ3JlYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1hdXRvQ3JlYXRlKVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuc3RhcnREYXRlIFRoZSBzdGFydGluZyB0aW1lIG9mIHRoZSBldmVudCB0byBiZSBjcmVhdGVkLiBJZiB0aGlzIGlzIGluIGEgYERheVZpZXdgLCB0aGlzIHdpbGwgYmUgc25hcHBlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gaW4gW2F1dG9DcmVhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLWF1dG9DcmVhdGUpXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlIFRoZSBlbmRpbmcgdGltZSBvZiB0aGUgZXZlbnQgdG8gYmUgY3JlYXRlZC5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5SZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBUaGUgcmVzb3VyY2UgaWYgdGhlIFVJIGluY2x1ZGVzIGEgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIHtDYWxlbmRhclZpZXd9IGV2ZW50LnZpZXcgVGhpcyB2aWV3LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUF1dG9DcmVhdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBkb21FdmVudDogRXZlbnQsIGRhdGU6IERhdGUsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwsIHZpZXc6IENhbGVuZGFyVmlldyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB2aWV3J3Mgb3JpZW50YXRpbmcgZGF0ZSBjaGFuZ2VzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNldmVudC1iZWZvcmVDaGFuZ2VEYXRlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm9sZERhdGUgVGhlIGN1cnJlbnQgb3JpZW50YXRpbmcgZGF0ZSBvZiB0aGlzIHZpZXcuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5kYXRlIFRoZSBuZXcgZGF0ZSB0byB3aGljaCB0aGlzIHZpZXcgaXMgdG8gYmUgb3JpZW50YXRlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDaGFuZ2VEYXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgb2xkRGF0ZTogRGF0ZSwgZGF0ZTogRGF0ZSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBoaWRkZW4uIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIGhpZGRlbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVIaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgbmV3IFtyZXNwb25zaXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vUmVzcG9uc2l2ZSNjb25maWctcmVzcG9uc2l2ZVN0YXRlKSBpcyBhcHBsaWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgd2hvc2UgYHJlc3BvbnNpdmVTdGF0ZWAgaXMgdG8gYmUgY2hhbmdlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5zdGF0ZSBUaGUgbmV3IHZhbHVlIGZvciB0aGUgd2lkZ2V0J3MgYHJlc3BvbnNpdmVTdGF0ZWBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQub2xkU3RhdGUgVGhlIHByZXZpb3VzIHZhbHVlIGZvciB0aGUgd2lkZ2V0J3MgYHJlc3BvbnNpdmVTdGF0ZWBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSZXNwb25zaXZlU3RhdGVDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgc3RhdGU6IHN0cmluZywgb2xkU3RhdGU6IHN0cmluZyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHRoaXMgY29udGFpbmVyIHdpbGwgbG9hZCByZWNvcmQgdmFsdWVzIGludG8gaXRzIGNoaWxkIGZpZWxkcy4gVGhpcyBpcyB1c2VmdWwgaWYgeW91XG4gICAgICogd2FudCB0byBtb2RpZnkgdGhlIFVJIGJlZm9yZSBkYXRhIGlzIGxvYWRlZCAoZS5nLiBzZXQgc29tZSBpbnB1dCBmaWVsZCB0byBiZSByZWFkb25seSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Db250YWluZXJ9IGV2ZW50LnNvdXJjZSBUaGUgY29udGFpbmVyXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2V0UmVjb3JkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIHJlY29yZDogTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgc2hvd24uIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXQsYW55fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBzaG93blxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldHxhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgc3RhdGUgaXMgYXBwbGllZCB0byB0aGUgc291cmNlLiBBbGxvd3MgZWRpdGluZyB0aGUgc3RhdGUgb2JqZWN0IG9yIHByZXZlbnRpbmcgdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZUFwcGx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc3RhdGU6IGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBzdGF0ZSBpcyBzYXZlZCBieSB0aGUgU3RhdGVQcm92aWRlci4gQWxsb3dzIGVkaXRpbmcgdGhlIHN0YXRlIG9iamVjdCBvciBwcmV2ZW50aW5nIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7YW55fSBldmVudC5zdGF0ZSBTdGF0ZSBvYmplY3QgY29uZmlnXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU3RhdGVTYXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc3RhdGU6IGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW55IG90aGVyIGV2ZW50IGlzIGZpcmVkIGZyb20gdGhlIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvV2Vla1ZpZXcjZXZlbnQtY2F0Y2hBbGwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfX0gZXZlbnQuZXZlbnQgVGhlIE9iamVjdCB0aGF0IGNvbnRhaW5zIGV2ZW50IGRldGFpbHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZXZlbnQudHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhdGNoQWxsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHtba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ30pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbmV3IHNldCBvZiBldmVudHMgaGFzIGJlZW4gZ2F0aGVyZWQgZm9yIHRoaXMgdmlldydzIGRhdGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7TWFwPGFueSwgYW55Pn0gZXZlbnQuY2VsbE1hcCBUaGUgbWFwIG9mIGRhdGUga2V5cyB0byBbZGF5IGNlbGxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RheUNlbGxDb2xsZWN0ZXIjdHlwZWRlZi1EYXlDZWxsKSBkYXRhIGJsb2Nrcy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTWFwUG9wdWxhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2VsbE1hcDogTWFwPGFueSwgYW55PiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIFBhbmVsIGlzIGNvbGxhcHNlZCB1c2luZyB0aGUgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFBhbmVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciBvbmUgZGF5IGNlbGwncyBldmVudHMgYXJlIGNvbGxlY3RlZCBpbiBzb3J0ZWQgb3JkZXIgYWNjb3JkaW5nIHRvIHRoZVxuICAgICAqIFtldmVudFNvcnRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctZXZlbnRTb3J0ZXIpXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2V2ZW50LWRheUNlbGxQb3B1bGF0ZWQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWxbXX0gZXZlbnQuZXZlbnRzIFRoZSBldmVudHMgdG8gYmUgc2hvd24gZm9yIHRoZSBwYXNzZWQgZGF0ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuVGhlIGRhdGUgdGhlIGV2ZW50cyBhcmUgdG8gYmUgc2hvd24gaW4uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGF5Q2VsbFBvcHVsYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGV2ZW50czogRXZlbnRNb2RlbFtdLCBUaGU6IERhdGUgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBmaWVsZCBpcyBtdXRhdGVkIGFuZCB0aGUgc3RhdGUgb2YgdGhlIFtoYXNDaGFuZ2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1oYXNDaGFuZ2VzKSBwcm9wZXJ0eSBjaGFuZ2VzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmRpcnR5IFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGUgQ29udGFpbmVyIC0gYHRydWVgIGlmIHRoZXJlIGFyZSBhbnkgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGluaXRpYWwgbG9hZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EaXJ0eVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIGRpcnR5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGhlIFdpZGdldCdzIGVsZW1lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRWxlbWVudENyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhbiBbYXV0b0NyZWF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctYXV0b0NyZWF0ZSkgZ2VzdHVyZSBoYXMgY3JlYXRlZCBhIG5ldyBldmVudFxuICAgICAqIGFuZCBhZGRlZCBpdCB0byB0aGUgZXZlbnQgc3RvcmUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2V2ZW50LWV2ZW50QXV0b0NyZWF0ZWQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q2FsZW5kYXJWaWV3fSBldmVudC5zb3VyY2UgVGhpcyBDYWxlbmRhciB2aWV3IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIFRoZSBuZXcgZXZlbnQgcmVjb3JkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50QXV0b0NyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENhbGVuZGFyVmlldywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBkYXkgc3Bhbm5pbmcgZXZlbnQgaXMgZm91bmQsIGFuZCB0aGUgZGF0ZSB0byB3aGljaCBpdHMgZW5jYXBzdWxhdGluZyBldmVudCBiYXJcbiAgICAgKiBleHRlbmRzIGhhcyBiZWVuIGNhbGN1bGF0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2V2ZW50LWV2ZW50UHJvcGFnYXRlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmV2ZW50RW5kRGF0ZSBUaGUgZW5kIGRhdGUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgcHJvcGFnYXRlIGVuZCBkYXRlLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQucHJvcGFnYXRlRW5kRGF0ZSBUaGUgc3lzdGVtLWNhbGN1bGF0ZWQgZW5kIHBvaW50IG9mIHRoZSBldmVudCBiYXIuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5pc0FsbERheSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGlzIGFuIGFsbCBkYXkgZXZlbnQsIG9yIHNwYW5zIG11bHRpcGxlIGRheXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5pc092ZXJmbG93IGB0cnVlYCBpZiB0aGlzIGlzIGJlaW5nIGNhbGxlZCBhcyBwYXJ0IG9mIGZ1cnRoZXIgcHJvcGFnYXRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5vdmVyZmxvd3MgYHRydWVgIGlmIHRoZSBldmVudCBleHRlbmRzIGludG8gZnV0dXJlIGNlbGxzLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIFRoZSBldmVudCByZWNvcmQgYmVpbmcgcHJvcGFnYXRlZC5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmRhdGUgVGhlIGRhdGUgZnJvbSB3aGljaCB0aGUgZXZlbnQgaXMgYmVpbmcgcHJvcGFnYXRlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudFByb3BhZ2F0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGV2ZW50RW5kRGF0ZTogRGF0ZSwgcHJvcGFnYXRlRW5kRGF0ZTogRGF0ZSwgaXNBbGxEYXk6IGJvb2xlYW4sIGlzT3ZlcmZsb3c6IGJvb2xlYW4sIG92ZXJmbG93czogYm9vbGVhbiwgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIGRhdGU6IERhdGUgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBQYW5lbCBpcyBleHBhbmRlZCB1c2luZyB0aGUgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBQYW5lbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBlbnRlcnMgdGhpcyBXaWRnZXQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c0luOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIGBibHVyYCBldmVudC5cbiAgICAgKiBmb2N1cyBtb3ZpbmcgZnJvbSB3aXRoaW4gdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZSwgZXZlbiBpZiB0aGVyZSBhcmUgZmxvYXRpbmcgd2lkZ2V0c1xuICAgICAqIHdpbGwgbm90IHRyaWdnZXIgdGhpcyBldmVudC4gVGhpcyBpcyB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgd2lkZ2V0IGNvbXBsZXRlbHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c091dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgd2FzIGhpZGRlblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhpcyBEYXlWaWV3IGNoYW5nZXMgYW4gYXNwZWN0IG9mIGl0cyBsYXlvdXQuIFRoaXMgaGFwcGVucyB3aGVuIGNoYW5naW5nXG4gICAgICogW2hvdXJIZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjcHJvcGVydHktaG91ckhlaWdodCksIFttaW5EYXlXaWR0aF0oI0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I3Byb3BlcnR5LW1pbkRheVdpZHRoKSwgYW5kIHdoZW4gdGhlIGF2YWlsYWJsZVxuICAgICAqIGRheSBjb250YWluZXIgaGVpZ2h0IGNoYW5nZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q2FsZW5kYXIud2lkZ2V0LkRheVZpZXd9IGV2ZW50LnNvdXJjZSBUaGUgdHJpZ2dlcmluZyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25MYXlvdXRVcGRhdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IERheVZpZXcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0IHdoaWNoIGhhZCBiZWVuIGluIGEgbm9uLXZpc2libGUgc3RhdGUgZm9yIGFueSByZWFzb25cbiAgICAgKiBhY2hpZXZlcyB2aXNpYmlsaXR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9XZWVrVmlldyNldmVudC1wYWludClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHBhaW50ZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5maXJzdFBhaW50IGB0cnVlYCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYWludDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmaXJzdFBhaW50OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSByYW5nZSBvZiBkYXRlcyBlbmNhcHN1bGF0ZWQgYnkgdGhpcyB2aWV3IGNoYW5nZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L1dlZWtWaWV3I2V2ZW50LXJhbmdlQ2hhbmdlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3R5cGVvZiBEYXRlUmFuZ2VPd25lcn0gZXZlbnQuc291cmNlIFRoaXMgY2FsZW5kYXIgdmlldyBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQub2xkIFRoZSBvbGQgZGF0ZSByYW5nZSA8c3Ryb25nPmlmIGFueTwvc3Ryb25nPi5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm9sZC5zdGFydERhdGUgdGhlIG9sZCBzdGFydCBkYXRlLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQub2xkLmVuZERhdGUgdGhlIG9sZCBlbmQgZGF0ZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQubmV3IFRoZSBuZXcgZGF0ZSByYW5nZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQubmV3LnN0YXJ0RGF0ZSB0aGUgbmV3IHN0YXJ0IGRhdGUuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5uZXcuZW5kRGF0ZSB0aGUgbmV3IGVuZCBkYXRlLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJhbmdlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiB0eXBlb2YgRGF0ZVJhbmdlT3duZXIsIG9sZDogeyBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUgfSwgbmV3OiB7IHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSB9IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgV2lkZ2V0J3MgcmVhZCBvbmx5IHN0YXRlIGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5yZWFkT25seSBSZWFkIG9ubHkgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVhZE9ubHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWFkT25seTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBhIHdpZGdldCdzIGVsZW1lbnRzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQgZHVlIHRvIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNhbGxcbiAgICAgKiB0byBbcmVjb21wb3NlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1yZWNvbXBvc2UpLCBpZiB0aGlzIHJlc3VsdHMgaW4gc29tZSBjaGFuZ2UgdG8gdGhlIHdpZGdldCdzIHJlbmRlcmVkIERPTSBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWNvbXBvc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoaXMgRGF5VmlldyByZWZyZXNoZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q2FsZW5kYXIud2lkZ2V0LkRheVZpZXd9IGV2ZW50LnNvdXJjZSBUaGUgdHJpZ2dlcmluZyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWZyZXNoOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBEYXlWaWV3IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBlbmNhcHN1bGF0aW5nIGVsZW1lbnQgb2YgYSBXaWRnZXQgcmVzaXplcyAqb25seSB3aGVuIFttb25pdG9yUmVzaXplXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbW9uaXRvclJlc2l6ZSkgaXMgYHRydWVgKi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC53aWR0aCBUaGUgbmV3IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LmhlaWdodCBUaGUgbmV3IGhlaWdodFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRXaWR0aCBUaGUgb2xkIHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZEhlaWdodCBUaGUgb2xkIGhlaWdodFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgb2xkV2lkdGg6IG51bWJlciwgb2xkSGVpZ2h0OiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgbmV3IFtyZXNwb25zaXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vUmVzcG9uc2l2ZSNjb25maWctcmVzcG9uc2l2ZVN0YXRlKSBpcyBhcHBsaWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgd2hvc2UgYHJlc3BvbnNpdmVTdGF0ZWAgaGFzIGNoYW5nZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuc3RhdGUgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHdpZGdldCdzIGByZXNwb25zaXZlU3RhdGVgXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm9sZFN0YXRlIFRoZSBwcmV2aW91cyB2YWx1ZSBmb3IgdGhlIHdpZGdldCdzIGByZXNwb25zaXZlU3RhdGVgXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzcG9uc2l2ZVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHN0YXRlOiBzdHJpbmcsIG9sZFN0YXRlOiBzdHJpbmcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIFtzaGlmdEluY3JlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vRGF0ZVJhbmdlT3duZXIjcHJvcGVydHktc2hpZnRJbmNyZW1lbnQpIG9mIHRoaXMgdmlldyBjaGFuZ2VzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQub2xkIFRoZSBzaGlmdCBpbmNyZW1lbnQgKmlmIGFueSouXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm5ldyBUaGUgc2hpZnQgaW5jcmVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2hpZnRJbmNyZW1lbnRDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBvbGQ/OiBvYmplY3QsIG5ldzogb2JqZWN0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgaXMgc2hvd24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gY2hhbmdpbmcgdGhlIFtob3VySGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I3Byb3BlcnR5LWhvdXJIZWlnaHQpIGNhdXNlcyBhblxuICAgICAqIFtob3VyIGhlaWdodCBicmVha3BvaW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1ob3VySGVpZ2h0QnJlYWtwb2ludHMpIHRvIGJlIGNyb3NzZWRcbiAgICAgKiBhbmQgdGhlIGRpc3BsYXllZCBzdWJUaWNrIGludGVydmFscyBpbiB0aGUgdGltZSBheGlzIGNoYW5nZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm9sZCBUaGUgb2xkIGhvdXIgaGVpZ2h0IHRpY2sgcmVzb2x1dGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZC5sZXZlbCBUaGUgbGV2ZWwgYDBgIHRvIGA0YCB3aGVyZSBgMGAgaXMgdGhlIGRlZmF1bHQgd2l0aCBubyBzdWJUaWNrIHRpbWVzIGRpc3BsYXllZCwgYW5kIGA0YCBtZWFucyBldmVyeSA1IG1pbnV0ZSB0aW1lIGlzIGRpc3BsYXllZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQub2xkLnN0ZXAgVGhlIHRpbWUgZHVyYXRpb24gb2YgdmlzaWJsZSBzdWJUaWNrcy4gVGhpcyBpcyBhIHN0cmluZyBpbiB0aGUgZm9ybWF0IHJlcXVpcmVkIGJ5IFtwYXJzZUR1cmF0aW9uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIjZnVuY3Rpb24tcGFyc2VEdXJhdGlvbi1zdGF0aWMpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm5ldyBUaGUgbmV3IGhvdXIgaGVpZ2h0IHRpY2sgcmVzb2x1dGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm5ldy5sZXZlbCBUaGUgbGV2ZWwgYDBgIHRvIGA0YCB3aGVyZSBgMGAgaXMgdGhlIGRlZmF1bHQgd2l0aCBubyBzdWJUaWNrIHRpbWVzIGRpc3BsYXllZCwgYW5kIGA0YCBtZWFucyBldmVyeSA1IG1pbnV0ZSB0aW1lIGlzIGRpc3BsYXllZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQubmV3LnN0ZXAgVGhlIHRpbWUgZHVyYXRpb24gb2YgdmlzaWJsZSBzdWJUaWNrcy4gVGhpcyBpcyBhIHN0cmluZyBpbiB0aGUgZm9ybWF0IHJlcXVpcmVkIGJ5IFtwYXJzZUR1cmF0aW9uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIjZnVuY3Rpb24tcGFyc2VEdXJhdGlvbi1zdGF0aWMpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGlja0NoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IG9sZDogeyBsZXZlbDogbnVtYmVyLCBzdGVwOiBzdHJpbmcgfSwgbmV3OiB7IGxldmVsOiBudW1iZXIsIHN0ZXA6IHN0cmluZyB9IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgdGltZSBheGlzIGlzIGNsaWNrZWQgb24uIElmIHRoZSBoYW5kbGVyIHJldHVybnNcbiAgICAgKiBgZmFsc2VgIHRoZSBjdXJyZW50IHBvaW50ZXIgZXZlbnQgaXMgbm90IHByb2Nlc3NlZCBmdXJ0aGVyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgdHJpZ2dlcmluZyBET00gZXZlbnQuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5wcmVjaXNlVGltZSBUaGUgZXhhY3QgZGF0ZSBhbmQgdGltZSBhdCB0aGUgY2xpY2tlZCBwb3NpdGlvblxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQudGltZSBUaGUgZGF0ZSBhbmQgdGltZSBhdCB0aGUgY2xpY2tlZCBwb3NpdGlvbiBzbmFwcGVkIGFjY29yZGluZyB0byB0aGUgW2luY3JlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaW5jcmVtZW50KSBhbmQgW3RpbWVTbmFwVHlwZV0oI0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy10aW1lU25hcFR5cGUpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZUF4aXNDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGRvbUV2ZW50OiBFdmVudCwgcHJlY2lzZVRpbWU6IERhdGUsIHRpbWU6IERhdGUgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEEgaGVhZGVyIFt0b29sXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy10b29scykgaGFzIGJlZW4gY2xpY2tlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Ub29sfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlRvb2x9IGV2ZW50LnRvb2wgVGhlIHRvb2wgd2hpY2ggaXMgYmVpbmcgY2xpY2tlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub29sQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRvb2wsIHRvb2w6IFRvb2wgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuZCBhcHBlbmQgdGhlIHVuZGVybHlpbmcgd2lkZ2V0XG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBtZSA9IHRoaXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnXG4gICAgICAgICAgICB9ID0gbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDbGFzcyxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZU5hbWUsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ3MsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUV2ZW50c1xuICAgICAgICAgICAgfSA9IEJyeW50dW1XZWVrVmlld0NvbXBvbmVudDtcblxuICAgICAgICBicnludHVtQ29uZmlncy5maWx0ZXIocHJvcCA9PiBwcm9wIGluIHRoaXMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGJyeW50dW1Db25maWcsIHByb3AsIHRoaXNbcHJvcF0pO1xuICAgICAgICAgICAgaWYgKFsnZmVhdHVyZXMnLCAnY29uZmlnJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb25maWdQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGJyeW50dW1FdmVudHMuZmlsdGVyKGV2ZW50ID0+IHRoaXNbZXZlbnRdICYmIHRoaXNbZXZlbnRdLm9ic2VydmVycy5sZW5ndGggPiAwKS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgdW5jYXBpdGFsaXplID0gKHN0cjogc3RyaW5nKSA9PiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSksXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gKHN0cjogc3RyaW5nKSA9PiB1bmNhcGl0YWxpemUoc3RyLnNsaWNlKDIpKTtcblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5saXN0ZW5lcnNbZXZlbnROYW1lKGV2ZW50KV0gPSBlID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgbWVbZXZlbnRdLmVtaXQoZSk7XG4gICAgICAgICAgICAgICAgLy8gRXZlbnRFbWl0dGVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMgaW4gdGhlIG5vcm1hbCB3YXksIHdvcmsgYXJvdW5kIGl0IGJ5IHNldHRpbmcgYHJldHVyblZhbHVlYCBmbGFnXG4gICAgICAgICAgICAgICAgLy8gaW4gQW5ndWxhciBsaXN0ZW5lcnNcbiAgICAgICAgICAgICAgICByZXR1cm4gZS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBoYXMgbm8gY29udGFpbmVyIHNwZWNpZmllZCBpbiBjb25maWcgdGhlbiB1c2UgYWRvcHQgdG8gV3JhcHBlcidzIGVsZW1lbnRcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIGNvbnRhaW5lclBhcmFtID0gW1xuICAgICAgICAgICAgICAgICdhZG9wdCcsXG4gICAgICAgICAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QWZ0ZXInLFxuICAgICAgICAgICAgICAgICdpbnNlcnRCZWZvcmUnXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgXS5maW5kKHByb3AgPT4gYnJ5bnR1bUNvbmZpZ1twcm9wXSk7XG4gICAgICAgIGlmICghY29udGFpbmVyUGFyYW0pIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU5hbWUgPT09ICdCdXR0b24nIHx8IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRSb290Tm9kZSgpIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgIC8vIEJ1dHRvbiBzaG91bGQgYWx3YXlzIGJlIDxhPiBvciA8YnV0dG9uPiBpbnNpZGUgb3duZXIgZWxlbWVudFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYXBwZW5kVG8gPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFkb3B0ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29udGFpbmVyKGluc3RhbmNlTmFtZSwgY29udGFpbmVyUGFyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBtZS5pbnN0YW5jZSA9IGluc3RhbmNlTmFtZSA9PT0gJ1dpZGdldCcgPyBXaWRnZXQuY3JlYXRlKGJyeW50dW1Db25maWcpIDogbmV3IGluc3RhbmNlQ2xhc3MoYnJ5bnR1bUNvbmZpZyk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYXRjaCBmb3IgY2hhbmdlc1xuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgIHsgaW5zdGFuY2VOYW1lIH0gPSBCcnludHVtV2Vla1ZpZXdDb21wb25lbnQ7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGNoYW5nZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcykuZm9yRWFjaCgoW3Byb3AsIGNoYW5nZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAoY2hhbmdlIGFzIFNpbXBsZUNoYW5nZSkuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICAgICAgeyBicnludHVtQ29uZmlnc09ubHksIGJyeW50dW1Qcm9wcyB9ID0gQnJ5bnR1bVdlZWtWaWV3Q29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGJyeW50dW1Qcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoaW5zdGFuY2UsIHByb3AsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyeW50dW1Db25maWdzT25seS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdVcGRhdGVQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19