@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.
- package/README.md +44 -0
- package/bryntum-calendar-angular-thin.d.ts +5 -0
- package/bundles/bryntum-calendar-angular-thin.umd.js +22195 -0
- package/bundles/bryntum-calendar-angular-thin.umd.js.map +1 -0
- package/esm2015/bryntum-calendar-angular-thin.js +5 -0
- package/esm2015/lib/bryntum-agenda-view.component.js +2503 -0
- package/esm2015/lib/bryntum-calendar-date-picker.component.js +1045 -0
- package/esm2015/lib/bryntum-calendar-project-model.component.js +369 -0
- package/esm2015/lib/bryntum-calendar.component.js +2355 -0
- package/esm2015/lib/bryntum-day-agenda-view.component.js +1338 -0
- package/esm2015/lib/bryntum-day-resource-view.component.js +1347 -0
- package/esm2015/lib/bryntum-day-view.component.js +1323 -0
- package/esm2015/lib/bryntum-event-list.component.js +2453 -0
- package/esm2015/lib/bryntum-mode-selector.component.js +702 -0
- package/esm2015/lib/bryntum-month-agenda-view.component.js +1201 -0
- package/esm2015/lib/bryntum-month-grid.component.js +1262 -0
- package/esm2015/lib/bryntum-month-view.component.js +1337 -0
- package/esm2015/lib/bryntum-range-menu.component.js +884 -0
- package/esm2015/lib/bryntum-resource-view.component.js +1068 -0
- package/esm2015/lib/bryntum-week-view.component.js +1323 -0
- package/esm2015/lib/bryntum-year-view.component.js +1163 -0
- package/esm2015/lib/calendar.module.js +99 -0
- package/esm2015/lib/wrapper.helper.js +74 -0
- package/esm2015/public-api.js +21 -0
- package/fesm2015/bryntum-calendar-angular-thin.js +21714 -0
- package/fesm2015/bryntum-calendar-angular-thin.js.map +1 -0
- package/lib/bryntum-agenda-view.component.d.ts +2953 -0
- package/lib/bryntum-calendar-date-picker.component.d.ts +1525 -0
- package/lib/bryntum-calendar-project-model.component.d.ts +399 -0
- package/lib/bryntum-calendar.component.d.ts +2577 -0
- package/lib/bryntum-day-agenda-view.component.d.ts +1960 -0
- package/lib/bryntum-day-resource-view.component.d.ts +2025 -0
- package/lib/bryntum-day-view.component.d.ts +1980 -0
- package/lib/bryntum-event-list.component.d.ts +2888 -0
- package/lib/bryntum-mode-selector.component.d.ts +851 -0
- package/lib/bryntum-month-agenda-view.component.d.ts +1765 -0
- package/lib/bryntum-month-grid.component.d.ts +1731 -0
- package/lib/bryntum-month-view.component.d.ts +1897 -0
- package/lib/bryntum-range-menu.component.d.ts +1130 -0
- package/lib/bryntum-resource-view.component.d.ts +1512 -0
- package/lib/bryntum-week-view.component.d.ts +1980 -0
- package/lib/bryntum-year-view.component.d.ts +1661 -0
- package/lib/calendar.module.d.ts +22 -0
- package/lib/wrapper.helper.d.ts +26 -0
- package/package.json +33 -0
- package/public-api.d.ts +17 -0
|
@@ -0,0 +1,1338 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
/**
|
|
3
|
+
* Angular wrapper for Bryntum DayAgendaView
|
|
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 { DayAgendaView } from '@bryntum/calendar-thin';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class BryntumDayAgendaViewComponent {
|
|
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/DayAgendaView#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/DayAgendaView#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/DayAgendaView#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/DayAgendaView#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/DayAgendaView#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/DayAgendaView#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/DayAgendaView#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/DayAgendaView#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 } = BryntumDayAgendaViewComponent;
|
|
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 } = BryntumDayAgendaViewComponent;
|
|
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 } = BryntumDayAgendaViewComponent;
|
|
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
|
+
BryntumDayAgendaViewComponent.instanceClass = DayAgendaView;
|
|
390
|
+
BryntumDayAgendaViewComponent.instanceName = 'DayAgendaView';
|
|
391
|
+
BryntumDayAgendaViewComponent.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
|
+
BryntumDayAgendaViewComponent.bryntumFeatureNames = [];
|
|
429
|
+
BryntumDayAgendaViewComponent.bryntumConfigs = BryntumDayAgendaViewComponent.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
|
+
'borderColor',
|
|
449
|
+
'bubbleEvents',
|
|
450
|
+
'callOnFunctions',
|
|
451
|
+
'catchEventHandlerExceptions',
|
|
452
|
+
'centered',
|
|
453
|
+
'cls',
|
|
454
|
+
'collapsed',
|
|
455
|
+
'collapsible',
|
|
456
|
+
'color',
|
|
457
|
+
'column',
|
|
458
|
+
'columnHeaderRenderer',
|
|
459
|
+
'compactHeader',
|
|
460
|
+
'config',
|
|
461
|
+
'constrainTo',
|
|
462
|
+
'contentElementCls',
|
|
463
|
+
'coreHours',
|
|
464
|
+
'currentTimeIndicatorRenderer',
|
|
465
|
+
'dashedSubticks',
|
|
466
|
+
'dataField',
|
|
467
|
+
'dataset',
|
|
468
|
+
'date',
|
|
469
|
+
'dateFilter',
|
|
470
|
+
'dateFormat',
|
|
471
|
+
'dateSeparator',
|
|
472
|
+
'dayCellRenderer',
|
|
473
|
+
'dayEndTime',
|
|
474
|
+
'dayHeaderRenderer',
|
|
475
|
+
'dayNameFormat',
|
|
476
|
+
'dayStartShift',
|
|
477
|
+
'dayStartTime',
|
|
478
|
+
'defaultBindProperty',
|
|
479
|
+
'defaultFocus',
|
|
480
|
+
'defaults',
|
|
481
|
+
'defaultScrollOptions',
|
|
482
|
+
'descriptionFormat',
|
|
483
|
+
'descriptionRenderer',
|
|
484
|
+
'detectCSSCompatibilityIssues',
|
|
485
|
+
'disabled',
|
|
486
|
+
'dock',
|
|
487
|
+
'draggable',
|
|
488
|
+
'dragUnit',
|
|
489
|
+
'drawer',
|
|
490
|
+
'elementAttributes',
|
|
491
|
+
'endDate',
|
|
492
|
+
'eventFilter',
|
|
493
|
+
'eventFlowDirection',
|
|
494
|
+
'eventHeaderRenderer',
|
|
495
|
+
'eventRenderer',
|
|
496
|
+
'eventSorter',
|
|
497
|
+
'eventSpacing',
|
|
498
|
+
'extendAllDayEndDay',
|
|
499
|
+
'extraData',
|
|
500
|
+
'filterEventResources',
|
|
501
|
+
'fixedDuration',
|
|
502
|
+
'flex',
|
|
503
|
+
'floating',
|
|
504
|
+
'footer',
|
|
505
|
+
'getPrimaryResource',
|
|
506
|
+
'gutterWidth',
|
|
507
|
+
'header',
|
|
508
|
+
'height',
|
|
509
|
+
'hidden',
|
|
510
|
+
'hideAnimation',
|
|
511
|
+
'hideBorders',
|
|
512
|
+
'hideEmptyDays',
|
|
513
|
+
'hideEmptyHours',
|
|
514
|
+
'hideNonWorkingDays',
|
|
515
|
+
'hideTimeAxis',
|
|
516
|
+
'hideWhenEmpty',
|
|
517
|
+
'hourHeight',
|
|
518
|
+
'hourHeightBreakpoints',
|
|
519
|
+
'hourSpacing',
|
|
520
|
+
'icon',
|
|
521
|
+
'id',
|
|
522
|
+
'ignoreParentReadOnly',
|
|
523
|
+
'inputFieldAlign',
|
|
524
|
+
'insertBefore',
|
|
525
|
+
'insertFirst',
|
|
526
|
+
'interDayDrag',
|
|
527
|
+
'interDayResize',
|
|
528
|
+
'itemCls',
|
|
529
|
+
'items',
|
|
530
|
+
'keyMap',
|
|
531
|
+
'labelPosition',
|
|
532
|
+
'layout',
|
|
533
|
+
'layoutStyle',
|
|
534
|
+
'lazyItems',
|
|
535
|
+
'listeners',
|
|
536
|
+
'localeClass',
|
|
537
|
+
'localizable',
|
|
538
|
+
'localizableProperties',
|
|
539
|
+
'margin',
|
|
540
|
+
'maskDefaults',
|
|
541
|
+
'masked',
|
|
542
|
+
'maxAllDayHeight',
|
|
543
|
+
'maxDate',
|
|
544
|
+
'maxHeight',
|
|
545
|
+
'maximizeOnMobile',
|
|
546
|
+
'maxWidth',
|
|
547
|
+
'minDate',
|
|
548
|
+
'minDayWidth',
|
|
549
|
+
'minEventHeight',
|
|
550
|
+
'minEventWidth',
|
|
551
|
+
'minHeight',
|
|
552
|
+
'minHourHeight',
|
|
553
|
+
'minWidth',
|
|
554
|
+
'monitorResize',
|
|
555
|
+
'namedItems',
|
|
556
|
+
'noMatchingDates',
|
|
557
|
+
'nonWorkingDays',
|
|
558
|
+
'overflowPopup',
|
|
559
|
+
'owner',
|
|
560
|
+
'pastEventCls',
|
|
561
|
+
'positioned',
|
|
562
|
+
'preventTooltipOnTouch',
|
|
563
|
+
'range',
|
|
564
|
+
'readOnly',
|
|
565
|
+
'relayStoreEvents',
|
|
566
|
+
'rendition',
|
|
567
|
+
'resourceImagePath',
|
|
568
|
+
'responsive',
|
|
569
|
+
'responsiveRoot',
|
|
570
|
+
'responsiveState',
|
|
571
|
+
'responsiveTarget',
|
|
572
|
+
'ripple',
|
|
573
|
+
'rootElement',
|
|
574
|
+
'rtl',
|
|
575
|
+
'scrollable',
|
|
576
|
+
'scrollAction',
|
|
577
|
+
'selectorButton',
|
|
578
|
+
'selectorMenuItem',
|
|
579
|
+
'shiftIncrement',
|
|
580
|
+
'shortDateFormat',
|
|
581
|
+
'shortDateTimeFormat',
|
|
582
|
+
'showAllDayHeader',
|
|
583
|
+
'showAnimation',
|
|
584
|
+
'showBullet',
|
|
585
|
+
'showResourceAvatars',
|
|
586
|
+
'showTime',
|
|
587
|
+
'showTooltipWhenDisabled',
|
|
588
|
+
'snapRelativeToEventStartDate',
|
|
589
|
+
'span',
|
|
590
|
+
'stackMultiDayEvents',
|
|
591
|
+
'startDate',
|
|
592
|
+
'stateful',
|
|
593
|
+
'statefulEvents',
|
|
594
|
+
'stateId',
|
|
595
|
+
'stateProvider',
|
|
596
|
+
'strictRecordMapping',
|
|
597
|
+
'strips',
|
|
598
|
+
'syncCalendarDate',
|
|
599
|
+
'syncHourHeights',
|
|
600
|
+
'syncViewDate',
|
|
601
|
+
'tab',
|
|
602
|
+
'tabBarItems',
|
|
603
|
+
'tag',
|
|
604
|
+
'tbar',
|
|
605
|
+
'textAlign',
|
|
606
|
+
'tickRenderer',
|
|
607
|
+
'timeAxisTimeFormat',
|
|
608
|
+
'timeFormat',
|
|
609
|
+
'title',
|
|
610
|
+
'tools',
|
|
611
|
+
'tooltip',
|
|
612
|
+
'trapFocus',
|
|
613
|
+
'type',
|
|
614
|
+
'ui',
|
|
615
|
+
'visibleStartTime',
|
|
616
|
+
'weekStartDay',
|
|
617
|
+
'weight',
|
|
618
|
+
'width',
|
|
619
|
+
'x',
|
|
620
|
+
'y'
|
|
621
|
+
]);
|
|
622
|
+
BryntumDayAgendaViewComponent.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
|
+
'eventRenderer',
|
|
660
|
+
'eventSorter',
|
|
661
|
+
'floating',
|
|
662
|
+
'footer',
|
|
663
|
+
'getPrimaryResource',
|
|
664
|
+
'header',
|
|
665
|
+
'hideAnimation',
|
|
666
|
+
'hideWhenEmpty',
|
|
667
|
+
'icon',
|
|
668
|
+
'ignoreParentReadOnly',
|
|
669
|
+
'itemCls',
|
|
670
|
+
'lazyItems',
|
|
671
|
+
'listeners',
|
|
672
|
+
'localeClass',
|
|
673
|
+
'localizable',
|
|
674
|
+
'localizableProperties',
|
|
675
|
+
'maskDefaults',
|
|
676
|
+
'masked',
|
|
677
|
+
'maxAllDayHeight',
|
|
678
|
+
'monitorResize',
|
|
679
|
+
'namedItems',
|
|
680
|
+
'overflowPopup',
|
|
681
|
+
'owner',
|
|
682
|
+
'positioned',
|
|
683
|
+
'preventTooltipOnTouch',
|
|
684
|
+
'relayStoreEvents',
|
|
685
|
+
'resourceImagePath',
|
|
686
|
+
'responsive',
|
|
687
|
+
'responsiveRoot',
|
|
688
|
+
'responsiveState',
|
|
689
|
+
'responsiveTarget',
|
|
690
|
+
'ripple',
|
|
691
|
+
'rootElement',
|
|
692
|
+
'scrollAction',
|
|
693
|
+
'selectorButton',
|
|
694
|
+
'selectorMenuItem',
|
|
695
|
+
'showAllDayHeader',
|
|
696
|
+
'showAnimation',
|
|
697
|
+
'showBullet',
|
|
698
|
+
'showResourceAvatars',
|
|
699
|
+
'showTooltipWhenDisabled',
|
|
700
|
+
'startDate',
|
|
701
|
+
'stateful',
|
|
702
|
+
'statefulEvents',
|
|
703
|
+
'stateId',
|
|
704
|
+
'stateProvider',
|
|
705
|
+
'strips',
|
|
706
|
+
'tab',
|
|
707
|
+
'tabBarItems',
|
|
708
|
+
'tag',
|
|
709
|
+
'tbar',
|
|
710
|
+
'textAlign',
|
|
711
|
+
'tickRenderer',
|
|
712
|
+
'timeAxisTimeFormat',
|
|
713
|
+
'timeFormat',
|
|
714
|
+
'trapFocus',
|
|
715
|
+
'type',
|
|
716
|
+
'ui',
|
|
717
|
+
'visibleStartTime',
|
|
718
|
+
'weekStartDay',
|
|
719
|
+
'weight'
|
|
720
|
+
];
|
|
721
|
+
BryntumDayAgendaViewComponent.bryntumProps = BryntumDayAgendaViewComponent.bryntumFeatureNames.concat([
|
|
722
|
+
'alignSelf',
|
|
723
|
+
'allowDragCreate',
|
|
724
|
+
'allowDragMove',
|
|
725
|
+
'allowDragResize',
|
|
726
|
+
'allowZoomUnderflow',
|
|
727
|
+
'anchorSize',
|
|
728
|
+
'animateTimeShift',
|
|
729
|
+
'appendTo',
|
|
730
|
+
'autoCreate',
|
|
731
|
+
'borderColor',
|
|
732
|
+
'callOnFunctions',
|
|
733
|
+
'catchEventHandlerExceptions',
|
|
734
|
+
'cls',
|
|
735
|
+
'collapsed',
|
|
736
|
+
'column',
|
|
737
|
+
'compactHeader',
|
|
738
|
+
'coreHours',
|
|
739
|
+
'dashedSubticks',
|
|
740
|
+
'dataset',
|
|
741
|
+
'date',
|
|
742
|
+
'dateFilter',
|
|
743
|
+
'dateFormat',
|
|
744
|
+
'dateSeparator',
|
|
745
|
+
'dayCellCls',
|
|
746
|
+
'dayEndTime',
|
|
747
|
+
'dayStartTime',
|
|
748
|
+
'defaultScrollOptions',
|
|
749
|
+
'descriptionFormat',
|
|
750
|
+
'disabled',
|
|
751
|
+
'dragUnit',
|
|
752
|
+
'eventFlowDirection',
|
|
753
|
+
'eventSpacing',
|
|
754
|
+
'extendAllDayEndDay',
|
|
755
|
+
'extraData',
|
|
756
|
+
'filterEventResources',
|
|
757
|
+
'firstVisibleCell',
|
|
758
|
+
'firstVisibleDate',
|
|
759
|
+
'fitHours',
|
|
760
|
+
'fixedDuration',
|
|
761
|
+
'flex',
|
|
762
|
+
'focusVisible',
|
|
763
|
+
'gutterWidth',
|
|
764
|
+
'hasChanges',
|
|
765
|
+
'height',
|
|
766
|
+
'hidden',
|
|
767
|
+
'hideBorders',
|
|
768
|
+
'hideEmptyDays',
|
|
769
|
+
'hideEmptyHours',
|
|
770
|
+
'hideNonWorkingDays',
|
|
771
|
+
'hideTimeAxis',
|
|
772
|
+
'horizontalScroller',
|
|
773
|
+
'hourHeight',
|
|
774
|
+
'hourHeightBreakpoints',
|
|
775
|
+
'hourSpacing',
|
|
776
|
+
'id',
|
|
777
|
+
'increment',
|
|
778
|
+
'inputFieldAlign',
|
|
779
|
+
'insertBefore',
|
|
780
|
+
'insertFirst',
|
|
781
|
+
'interDayDrag',
|
|
782
|
+
'interDayResize',
|
|
783
|
+
'isSettingValues',
|
|
784
|
+
'isValid',
|
|
785
|
+
'items',
|
|
786
|
+
'keyMap',
|
|
787
|
+
'labelPosition',
|
|
788
|
+
'lastVisibleCell',
|
|
789
|
+
'lastVisibleDate',
|
|
790
|
+
'layout',
|
|
791
|
+
'layoutStyle',
|
|
792
|
+
'margin',
|
|
793
|
+
'maxDate',
|
|
794
|
+
'maxHeight',
|
|
795
|
+
'maximizeOnMobile',
|
|
796
|
+
'maxWidth',
|
|
797
|
+
'minDate',
|
|
798
|
+
'minDayWidth',
|
|
799
|
+
'minEventHeight',
|
|
800
|
+
'minEventWidth',
|
|
801
|
+
'minHeight',
|
|
802
|
+
'minHourHeight',
|
|
803
|
+
'minWidth',
|
|
804
|
+
'noMatchingDates',
|
|
805
|
+
'nonWorkingDays',
|
|
806
|
+
'parent',
|
|
807
|
+
'pastEventCls',
|
|
808
|
+
'range',
|
|
809
|
+
'readOnly',
|
|
810
|
+
'record',
|
|
811
|
+
'rendition',
|
|
812
|
+
'rtl',
|
|
813
|
+
'scrollable',
|
|
814
|
+
'shiftIncrement',
|
|
815
|
+
'shortDateFormat',
|
|
816
|
+
'shortDateTimeFormat',
|
|
817
|
+
'showCurrentTime',
|
|
818
|
+
'showTime',
|
|
819
|
+
'sixMinuteTicks',
|
|
820
|
+
'snapRelativeToEventStartDate',
|
|
821
|
+
'span',
|
|
822
|
+
'stackMultiDayEvents',
|
|
823
|
+
'state',
|
|
824
|
+
'strictRecordMapping',
|
|
825
|
+
'syncCalendarDate',
|
|
826
|
+
'syncHourHeights',
|
|
827
|
+
'syncViewDate',
|
|
828
|
+
'timeSnapType',
|
|
829
|
+
'title',
|
|
830
|
+
'tools',
|
|
831
|
+
'tooltip',
|
|
832
|
+
'values',
|
|
833
|
+
'width',
|
|
834
|
+
'x',
|
|
835
|
+
'y'
|
|
836
|
+
]);
|
|
837
|
+
BryntumDayAgendaViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDayAgendaViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
838
|
+
BryntumDayAgendaViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumDayAgendaViewComponent, selector: "bryntum-day-agenda-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", eventRenderer: "eventRenderer", eventSorter: "eventSorter", 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", 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", alignSelf: "alignSelf", allowDragCreate: "allowDragCreate", allowDragMove: "allowDragMove", allowDragResize: "allowDragResize", allowZoomUnderflow: "allowZoomUnderflow", animateTimeShift: "animateTimeShift", appendTo: "appendTo", autoCreate: "autoCreate", borderColor: "borderColor", 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", eventFlowDirection: "eventFlowDirection", eventSpacing: "eventSpacing", extendAllDayEndDay: "extendAllDayEndDay", extraData: "extraData", filterEventResources: "filterEventResources", fixedDuration: "fixedDuration", flex: "flex", gutterWidth: "gutterWidth", height: "height", hidden: "hidden", hideBorders: "hideBorders", hideEmptyDays: "hideEmptyDays", hideEmptyHours: "hideEmptyHours", hideNonWorkingDays: "hideNonWorkingDays", hideTimeAxis: "hideTimeAxis", hourHeight: "hourHeight", hourHeightBreakpoints: "hourHeightBreakpoints", hourSpacing: "hourSpacing", id: "id", 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", minEventWidth: "minEventWidth", 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", showTime: "showTime", snapRelativeToEventStartDate: "snapRelativeToEventStartDate", span: "span", stackMultiDayEvents: "stackMultiDayEvents", strictRecordMapping: "strictRecordMapping", syncCalendarDate: "syncCalendarDate", syncHourHeights: "syncHourHeights", syncViewDate: "syncViewDate", title: "title", tools: "tools", tooltip: "tooltip", width: "width", x: "x", y: "y", anchorSize: "anchorSize", dayCellCls: "dayCellCls", firstVisibleCell: "firstVisibleCell", firstVisibleDate: "firstVisibleDate", fitHours: "fitHours", focusVisible: "focusVisible", hasChanges: "hasChanges", horizontalScroller: "horizontalScroller", increment: "increment", isSettingValues: "isSettingValues", isValid: "isValid", lastVisibleCell: "lastVisibleCell", lastVisibleDate: "lastVisibleDate", parent: "parent", record: "record", showCurrentTime: "showCurrentTime", sixMinuteTicks: "sixMinuteTicks", state: "state", timeSnapType: "timeSnapType", 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 });
|
|
839
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDayAgendaViewComponent, decorators: [{
|
|
840
|
+
type: Component,
|
|
841
|
+
args: [{
|
|
842
|
+
selector: 'bryntum-day-agenda-view',
|
|
843
|
+
template: ''
|
|
844
|
+
}]
|
|
845
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { actionButtons: [{
|
|
846
|
+
type: Input
|
|
847
|
+
}], activationKey: [{
|
|
848
|
+
type: Input
|
|
849
|
+
}], adopt: [{
|
|
850
|
+
type: Input
|
|
851
|
+
}], align: [{
|
|
852
|
+
type: Input
|
|
853
|
+
}], allDayEvents: [{
|
|
854
|
+
type: Input
|
|
855
|
+
}], anchor: [{
|
|
856
|
+
type: Input
|
|
857
|
+
}], ariaDescription: [{
|
|
858
|
+
type: Input
|
|
859
|
+
}], ariaLabel: [{
|
|
860
|
+
type: Input
|
|
861
|
+
}], bbar: [{
|
|
862
|
+
type: Input
|
|
863
|
+
}], bodyCls: [{
|
|
864
|
+
type: Input
|
|
865
|
+
}], bubbleEvents: [{
|
|
866
|
+
type: Input
|
|
867
|
+
}], centered: [{
|
|
868
|
+
type: Input
|
|
869
|
+
}], collapsible: [{
|
|
870
|
+
type: Input
|
|
871
|
+
}], color: [{
|
|
872
|
+
type: Input
|
|
873
|
+
}], columnHeaderRenderer: [{
|
|
874
|
+
type: Input
|
|
875
|
+
}], config: [{
|
|
876
|
+
type: Input
|
|
877
|
+
}], constrainTo: [{
|
|
878
|
+
type: Input
|
|
879
|
+
}], contentElementCls: [{
|
|
880
|
+
type: Input
|
|
881
|
+
}], currentTimeIndicatorRenderer: [{
|
|
882
|
+
type: Input
|
|
883
|
+
}], dataField: [{
|
|
884
|
+
type: Input
|
|
885
|
+
}], dayCellRenderer: [{
|
|
886
|
+
type: Input
|
|
887
|
+
}], dayHeaderRenderer: [{
|
|
888
|
+
type: Input
|
|
889
|
+
}], dayNameFormat: [{
|
|
890
|
+
type: Input
|
|
891
|
+
}], dayStartShift: [{
|
|
892
|
+
type: Input
|
|
893
|
+
}], defaultBindProperty: [{
|
|
894
|
+
type: Input
|
|
895
|
+
}], defaultFocus: [{
|
|
896
|
+
type: Input
|
|
897
|
+
}], defaults: [{
|
|
898
|
+
type: Input
|
|
899
|
+
}], descriptionRenderer: [{
|
|
900
|
+
type: Input
|
|
901
|
+
}], detectCSSCompatibilityIssues: [{
|
|
902
|
+
type: Input
|
|
903
|
+
}], dock: [{
|
|
904
|
+
type: Input
|
|
905
|
+
}], draggable: [{
|
|
906
|
+
type: Input
|
|
907
|
+
}], drawer: [{
|
|
908
|
+
type: Input
|
|
909
|
+
}], elementAttributes: [{
|
|
910
|
+
type: Input
|
|
911
|
+
}], endDate: [{
|
|
912
|
+
type: Input
|
|
913
|
+
}], eventFilter: [{
|
|
914
|
+
type: Input
|
|
915
|
+
}], eventHeaderRenderer: [{
|
|
916
|
+
type: Input
|
|
917
|
+
}], eventRenderer: [{
|
|
918
|
+
type: Input
|
|
919
|
+
}], eventSorter: [{
|
|
920
|
+
type: Input
|
|
921
|
+
}], floating: [{
|
|
922
|
+
type: Input
|
|
923
|
+
}], footer: [{
|
|
924
|
+
type: Input
|
|
925
|
+
}], getPrimaryResource: [{
|
|
926
|
+
type: Input
|
|
927
|
+
}], header: [{
|
|
928
|
+
type: Input
|
|
929
|
+
}], hideAnimation: [{
|
|
930
|
+
type: Input
|
|
931
|
+
}], hideWhenEmpty: [{
|
|
932
|
+
type: Input
|
|
933
|
+
}], icon: [{
|
|
934
|
+
type: Input
|
|
935
|
+
}], ignoreParentReadOnly: [{
|
|
936
|
+
type: Input
|
|
937
|
+
}], itemCls: [{
|
|
938
|
+
type: Input
|
|
939
|
+
}], lazyItems: [{
|
|
940
|
+
type: Input
|
|
941
|
+
}], listeners: [{
|
|
942
|
+
type: Input
|
|
943
|
+
}], localeClass: [{
|
|
944
|
+
type: Input
|
|
945
|
+
}], localizable: [{
|
|
946
|
+
type: Input
|
|
947
|
+
}], localizableProperties: [{
|
|
948
|
+
type: Input
|
|
949
|
+
}], maskDefaults: [{
|
|
950
|
+
type: Input
|
|
951
|
+
}], masked: [{
|
|
952
|
+
type: Input
|
|
953
|
+
}], maxAllDayHeight: [{
|
|
954
|
+
type: Input
|
|
955
|
+
}], monitorResize: [{
|
|
956
|
+
type: Input
|
|
957
|
+
}], namedItems: [{
|
|
958
|
+
type: Input
|
|
959
|
+
}], overflowPopup: [{
|
|
960
|
+
type: Input
|
|
961
|
+
}], owner: [{
|
|
962
|
+
type: Input
|
|
963
|
+
}], positioned: [{
|
|
964
|
+
type: Input
|
|
965
|
+
}], preventTooltipOnTouch: [{
|
|
966
|
+
type: Input
|
|
967
|
+
}], relayStoreEvents: [{
|
|
968
|
+
type: Input
|
|
969
|
+
}], resourceImagePath: [{
|
|
970
|
+
type: Input
|
|
971
|
+
}], responsive: [{
|
|
972
|
+
type: Input
|
|
973
|
+
}], responsiveRoot: [{
|
|
974
|
+
type: Input
|
|
975
|
+
}], responsiveState: [{
|
|
976
|
+
type: Input
|
|
977
|
+
}], responsiveTarget: [{
|
|
978
|
+
type: Input
|
|
979
|
+
}], ripple: [{
|
|
980
|
+
type: Input
|
|
981
|
+
}], rootElement: [{
|
|
982
|
+
type: Input
|
|
983
|
+
}], scrollAction: [{
|
|
984
|
+
type: Input
|
|
985
|
+
}], selectorButton: [{
|
|
986
|
+
type: Input
|
|
987
|
+
}], selectorMenuItem: [{
|
|
988
|
+
type: Input
|
|
989
|
+
}], showAllDayHeader: [{
|
|
990
|
+
type: Input
|
|
991
|
+
}], showAnimation: [{
|
|
992
|
+
type: Input
|
|
993
|
+
}], showBullet: [{
|
|
994
|
+
type: Input
|
|
995
|
+
}], showResourceAvatars: [{
|
|
996
|
+
type: Input
|
|
997
|
+
}], showTooltipWhenDisabled: [{
|
|
998
|
+
type: Input
|
|
999
|
+
}], startDate: [{
|
|
1000
|
+
type: Input
|
|
1001
|
+
}], stateful: [{
|
|
1002
|
+
type: Input
|
|
1003
|
+
}], statefulEvents: [{
|
|
1004
|
+
type: Input
|
|
1005
|
+
}], stateId: [{
|
|
1006
|
+
type: Input
|
|
1007
|
+
}], stateProvider: [{
|
|
1008
|
+
type: Input
|
|
1009
|
+
}], strips: [{
|
|
1010
|
+
type: Input
|
|
1011
|
+
}], tab: [{
|
|
1012
|
+
type: Input
|
|
1013
|
+
}], tabBarItems: [{
|
|
1014
|
+
type: Input
|
|
1015
|
+
}], tag: [{
|
|
1016
|
+
type: Input
|
|
1017
|
+
}], tbar: [{
|
|
1018
|
+
type: Input
|
|
1019
|
+
}], textAlign: [{
|
|
1020
|
+
type: Input
|
|
1021
|
+
}], tickRenderer: [{
|
|
1022
|
+
type: Input
|
|
1023
|
+
}], timeAxisTimeFormat: [{
|
|
1024
|
+
type: Input
|
|
1025
|
+
}], timeFormat: [{
|
|
1026
|
+
type: Input
|
|
1027
|
+
}], trapFocus: [{
|
|
1028
|
+
type: Input
|
|
1029
|
+
}], type: [{
|
|
1030
|
+
type: Input
|
|
1031
|
+
}], ui: [{
|
|
1032
|
+
type: Input
|
|
1033
|
+
}], visibleStartTime: [{
|
|
1034
|
+
type: Input
|
|
1035
|
+
}], weekStartDay: [{
|
|
1036
|
+
type: Input
|
|
1037
|
+
}], weight: [{
|
|
1038
|
+
type: Input
|
|
1039
|
+
}], alignSelf: [{
|
|
1040
|
+
type: Input
|
|
1041
|
+
}], allowDragCreate: [{
|
|
1042
|
+
type: Input
|
|
1043
|
+
}], allowDragMove: [{
|
|
1044
|
+
type: Input
|
|
1045
|
+
}], allowDragResize: [{
|
|
1046
|
+
type: Input
|
|
1047
|
+
}], allowZoomUnderflow: [{
|
|
1048
|
+
type: Input
|
|
1049
|
+
}], animateTimeShift: [{
|
|
1050
|
+
type: Input
|
|
1051
|
+
}], appendTo: [{
|
|
1052
|
+
type: Input
|
|
1053
|
+
}], autoCreate: [{
|
|
1054
|
+
type: Input
|
|
1055
|
+
}], borderColor: [{
|
|
1056
|
+
type: Input
|
|
1057
|
+
}], callOnFunctions: [{
|
|
1058
|
+
type: Input
|
|
1059
|
+
}], catchEventHandlerExceptions: [{
|
|
1060
|
+
type: Input
|
|
1061
|
+
}], cls: [{
|
|
1062
|
+
type: Input
|
|
1063
|
+
}], collapsed: [{
|
|
1064
|
+
type: Input
|
|
1065
|
+
}], column: [{
|
|
1066
|
+
type: Input
|
|
1067
|
+
}], compactHeader: [{
|
|
1068
|
+
type: Input
|
|
1069
|
+
}], coreHours: [{
|
|
1070
|
+
type: Input
|
|
1071
|
+
}], dashedSubticks: [{
|
|
1072
|
+
type: Input
|
|
1073
|
+
}], dataset: [{
|
|
1074
|
+
type: Input
|
|
1075
|
+
}], date: [{
|
|
1076
|
+
type: Input
|
|
1077
|
+
}], dateFilter: [{
|
|
1078
|
+
type: Input
|
|
1079
|
+
}], dateFormat: [{
|
|
1080
|
+
type: Input
|
|
1081
|
+
}], dateSeparator: [{
|
|
1082
|
+
type: Input
|
|
1083
|
+
}], dayEndTime: [{
|
|
1084
|
+
type: Input
|
|
1085
|
+
}], dayStartTime: [{
|
|
1086
|
+
type: Input
|
|
1087
|
+
}], defaultScrollOptions: [{
|
|
1088
|
+
type: Input
|
|
1089
|
+
}], descriptionFormat: [{
|
|
1090
|
+
type: Input
|
|
1091
|
+
}], disabled: [{
|
|
1092
|
+
type: Input
|
|
1093
|
+
}], dragUnit: [{
|
|
1094
|
+
type: Input
|
|
1095
|
+
}], eventFlowDirection: [{
|
|
1096
|
+
type: Input
|
|
1097
|
+
}], eventSpacing: [{
|
|
1098
|
+
type: Input
|
|
1099
|
+
}], extendAllDayEndDay: [{
|
|
1100
|
+
type: Input
|
|
1101
|
+
}], extraData: [{
|
|
1102
|
+
type: Input
|
|
1103
|
+
}], filterEventResources: [{
|
|
1104
|
+
type: Input
|
|
1105
|
+
}], fixedDuration: [{
|
|
1106
|
+
type: Input
|
|
1107
|
+
}], flex: [{
|
|
1108
|
+
type: Input
|
|
1109
|
+
}], gutterWidth: [{
|
|
1110
|
+
type: Input
|
|
1111
|
+
}], height: [{
|
|
1112
|
+
type: Input
|
|
1113
|
+
}], hidden: [{
|
|
1114
|
+
type: Input
|
|
1115
|
+
}], hideBorders: [{
|
|
1116
|
+
type: Input
|
|
1117
|
+
}], hideEmptyDays: [{
|
|
1118
|
+
type: Input
|
|
1119
|
+
}], hideEmptyHours: [{
|
|
1120
|
+
type: Input
|
|
1121
|
+
}], hideNonWorkingDays: [{
|
|
1122
|
+
type: Input
|
|
1123
|
+
}], hideTimeAxis: [{
|
|
1124
|
+
type: Input
|
|
1125
|
+
}], hourHeight: [{
|
|
1126
|
+
type: Input
|
|
1127
|
+
}], hourHeightBreakpoints: [{
|
|
1128
|
+
type: Input
|
|
1129
|
+
}], hourSpacing: [{
|
|
1130
|
+
type: Input
|
|
1131
|
+
}], id: [{
|
|
1132
|
+
type: Input
|
|
1133
|
+
}], inputFieldAlign: [{
|
|
1134
|
+
type: Input
|
|
1135
|
+
}], insertBefore: [{
|
|
1136
|
+
type: Input
|
|
1137
|
+
}], insertFirst: [{
|
|
1138
|
+
type: Input
|
|
1139
|
+
}], interDayDrag: [{
|
|
1140
|
+
type: Input
|
|
1141
|
+
}], interDayResize: [{
|
|
1142
|
+
type: Input
|
|
1143
|
+
}], items: [{
|
|
1144
|
+
type: Input
|
|
1145
|
+
}], keyMap: [{
|
|
1146
|
+
type: Input
|
|
1147
|
+
}], labelPosition: [{
|
|
1148
|
+
type: Input
|
|
1149
|
+
}], layout: [{
|
|
1150
|
+
type: Input
|
|
1151
|
+
}], layoutStyle: [{
|
|
1152
|
+
type: Input
|
|
1153
|
+
}], margin: [{
|
|
1154
|
+
type: Input
|
|
1155
|
+
}], maxDate: [{
|
|
1156
|
+
type: Input
|
|
1157
|
+
}], maxHeight: [{
|
|
1158
|
+
type: Input
|
|
1159
|
+
}], maximizeOnMobile: [{
|
|
1160
|
+
type: Input
|
|
1161
|
+
}], maxWidth: [{
|
|
1162
|
+
type: Input
|
|
1163
|
+
}], minDate: [{
|
|
1164
|
+
type: Input
|
|
1165
|
+
}], minDayWidth: [{
|
|
1166
|
+
type: Input
|
|
1167
|
+
}], minEventHeight: [{
|
|
1168
|
+
type: Input
|
|
1169
|
+
}], minEventWidth: [{
|
|
1170
|
+
type: Input
|
|
1171
|
+
}], minHeight: [{
|
|
1172
|
+
type: Input
|
|
1173
|
+
}], minHourHeight: [{
|
|
1174
|
+
type: Input
|
|
1175
|
+
}], minWidth: [{
|
|
1176
|
+
type: Input
|
|
1177
|
+
}], noMatchingDates: [{
|
|
1178
|
+
type: Input
|
|
1179
|
+
}], nonWorkingDays: [{
|
|
1180
|
+
type: Input
|
|
1181
|
+
}], pastEventCls: [{
|
|
1182
|
+
type: Input
|
|
1183
|
+
}], range: [{
|
|
1184
|
+
type: Input
|
|
1185
|
+
}], readOnly: [{
|
|
1186
|
+
type: Input
|
|
1187
|
+
}], rendition: [{
|
|
1188
|
+
type: Input
|
|
1189
|
+
}], rtl: [{
|
|
1190
|
+
type: Input
|
|
1191
|
+
}], scrollable: [{
|
|
1192
|
+
type: Input
|
|
1193
|
+
}], shiftIncrement: [{
|
|
1194
|
+
type: Input
|
|
1195
|
+
}], shortDateFormat: [{
|
|
1196
|
+
type: Input
|
|
1197
|
+
}], shortDateTimeFormat: [{
|
|
1198
|
+
type: Input
|
|
1199
|
+
}], showTime: [{
|
|
1200
|
+
type: Input
|
|
1201
|
+
}], snapRelativeToEventStartDate: [{
|
|
1202
|
+
type: Input
|
|
1203
|
+
}], span: [{
|
|
1204
|
+
type: Input
|
|
1205
|
+
}], stackMultiDayEvents: [{
|
|
1206
|
+
type: Input
|
|
1207
|
+
}], strictRecordMapping: [{
|
|
1208
|
+
type: Input
|
|
1209
|
+
}], syncCalendarDate: [{
|
|
1210
|
+
type: Input
|
|
1211
|
+
}], syncHourHeights: [{
|
|
1212
|
+
type: Input
|
|
1213
|
+
}], syncViewDate: [{
|
|
1214
|
+
type: Input
|
|
1215
|
+
}], title: [{
|
|
1216
|
+
type: Input
|
|
1217
|
+
}], tools: [{
|
|
1218
|
+
type: Input
|
|
1219
|
+
}], tooltip: [{
|
|
1220
|
+
type: Input
|
|
1221
|
+
}], width: [{
|
|
1222
|
+
type: Input
|
|
1223
|
+
}], x: [{
|
|
1224
|
+
type: Input
|
|
1225
|
+
}], y: [{
|
|
1226
|
+
type: Input
|
|
1227
|
+
}], anchorSize: [{
|
|
1228
|
+
type: Input
|
|
1229
|
+
}], dayCellCls: [{
|
|
1230
|
+
type: Input
|
|
1231
|
+
}], firstVisibleCell: [{
|
|
1232
|
+
type: Input
|
|
1233
|
+
}], firstVisibleDate: [{
|
|
1234
|
+
type: Input
|
|
1235
|
+
}], fitHours: [{
|
|
1236
|
+
type: Input
|
|
1237
|
+
}], focusVisible: [{
|
|
1238
|
+
type: Input
|
|
1239
|
+
}], hasChanges: [{
|
|
1240
|
+
type: Input
|
|
1241
|
+
}], horizontalScroller: [{
|
|
1242
|
+
type: Input
|
|
1243
|
+
}], increment: [{
|
|
1244
|
+
type: Input
|
|
1245
|
+
}], isSettingValues: [{
|
|
1246
|
+
type: Input
|
|
1247
|
+
}], isValid: [{
|
|
1248
|
+
type: Input
|
|
1249
|
+
}], lastVisibleCell: [{
|
|
1250
|
+
type: Input
|
|
1251
|
+
}], lastVisibleDate: [{
|
|
1252
|
+
type: Input
|
|
1253
|
+
}], parent: [{
|
|
1254
|
+
type: Input
|
|
1255
|
+
}], record: [{
|
|
1256
|
+
type: Input
|
|
1257
|
+
}], showCurrentTime: [{
|
|
1258
|
+
type: Input
|
|
1259
|
+
}], sixMinuteTicks: [{
|
|
1260
|
+
type: Input
|
|
1261
|
+
}], state: [{
|
|
1262
|
+
type: Input
|
|
1263
|
+
}], timeSnapType: [{
|
|
1264
|
+
type: Input
|
|
1265
|
+
}], values: [{
|
|
1266
|
+
type: Input
|
|
1267
|
+
}], onBeforeAutoCreate: [{
|
|
1268
|
+
type: Output
|
|
1269
|
+
}], onBeforeChangeDate: [{
|
|
1270
|
+
type: Output
|
|
1271
|
+
}], onBeforeDestroy: [{
|
|
1272
|
+
type: Output
|
|
1273
|
+
}], onBeforeHide: [{
|
|
1274
|
+
type: Output
|
|
1275
|
+
}], onBeforeResponsiveStateChange: [{
|
|
1276
|
+
type: Output
|
|
1277
|
+
}], onBeforeSetRecord: [{
|
|
1278
|
+
type: Output
|
|
1279
|
+
}], onBeforeShow: [{
|
|
1280
|
+
type: Output
|
|
1281
|
+
}], onBeforeStateApply: [{
|
|
1282
|
+
type: Output
|
|
1283
|
+
}], onBeforeStateSave: [{
|
|
1284
|
+
type: Output
|
|
1285
|
+
}], onCatchAll: [{
|
|
1286
|
+
type: Output
|
|
1287
|
+
}], onCellMapPopulated: [{
|
|
1288
|
+
type: Output
|
|
1289
|
+
}], onCollapse: [{
|
|
1290
|
+
type: Output
|
|
1291
|
+
}], onDayCellPopulated: [{
|
|
1292
|
+
type: Output
|
|
1293
|
+
}], onDestroy: [{
|
|
1294
|
+
type: Output
|
|
1295
|
+
}], onDirtyStateChange: [{
|
|
1296
|
+
type: Output
|
|
1297
|
+
}], onElementCreated: [{
|
|
1298
|
+
type: Output
|
|
1299
|
+
}], onEventAutoCreated: [{
|
|
1300
|
+
type: Output
|
|
1301
|
+
}], onEventPropagate: [{
|
|
1302
|
+
type: Output
|
|
1303
|
+
}], onExpand: [{
|
|
1304
|
+
type: Output
|
|
1305
|
+
}], onFocusIn: [{
|
|
1306
|
+
type: Output
|
|
1307
|
+
}], onFocusOut: [{
|
|
1308
|
+
type: Output
|
|
1309
|
+
}], onHide: [{
|
|
1310
|
+
type: Output
|
|
1311
|
+
}], onLayoutUpdate: [{
|
|
1312
|
+
type: Output
|
|
1313
|
+
}], onPaint: [{
|
|
1314
|
+
type: Output
|
|
1315
|
+
}], onRangeChange: [{
|
|
1316
|
+
type: Output
|
|
1317
|
+
}], onReadOnly: [{
|
|
1318
|
+
type: Output
|
|
1319
|
+
}], onRecompose: [{
|
|
1320
|
+
type: Output
|
|
1321
|
+
}], onRefresh: [{
|
|
1322
|
+
type: Output
|
|
1323
|
+
}], onResize: [{
|
|
1324
|
+
type: Output
|
|
1325
|
+
}], onResponsiveStateChange: [{
|
|
1326
|
+
type: Output
|
|
1327
|
+
}], onShiftIncrementChange: [{
|
|
1328
|
+
type: Output
|
|
1329
|
+
}], onShow: [{
|
|
1330
|
+
type: Output
|
|
1331
|
+
}], onTickChange: [{
|
|
1332
|
+
type: Output
|
|
1333
|
+
}], onTimeAxisClick: [{
|
|
1334
|
+
type: Output
|
|
1335
|
+
}], onToolClick: [{
|
|
1336
|
+
type: Output
|
|
1337
|
+
}] } });
|
|
1338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1kYXktYWdlbmRhLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS1kYXktYWdlbmRhLXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBOFgsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeGEsT0FBTyxFQUFpSixhQUFhLEVBQThGLE1BQU0sd0JBQXdCLENBQUM7O0FBNHZDbFMsTUFBTSxPQUFPLDZCQUE2QjtJQXVkdEMsWUFBWSxPQUFtQjtRQVR2QixrQkFBYSxHQUFHO1lBQ3BCLEtBQUssRUFBYyxTQUFTO1lBQzVCLFFBQVEsRUFBVyxTQUFTO1lBQzVCLElBQUksRUFBZSxTQUFTO1lBQzVCLGdCQUFnQixFQUFHLElBQUk7WUFDdkIsUUFBUSxFQUFXLEVBQUU7WUFDckIsU0FBUyxFQUFVLEVBQUU7U0FDeEIsQ0FBQztRQWdRRixrQkFBa0I7UUFDbEI7Ozs7Ozs7Ozs7OztXQVlHO1FBQ08sdUJBQWtCLEdBQVEsSUFBSSxZQUFZLEVBQXlLLENBQUM7UUFDOU47Ozs7Ozs7V0FPRztRQUNPLHVCQUFrQixHQUFRLElBQUksWUFBWSxFQUFvRixDQUFDO1FBQ3pJOzs7O1dBSUc7UUFDTyxvQkFBZSxHQUFRLElBQUksWUFBWSxFQUE4QyxDQUFDO1FBQ2hHOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUFRLElBQUksWUFBWSxFQUF5RSxDQUFDO1FBQ3hIOzs7Ozs7V0FNRztRQUNPLGtDQUE2QixHQUFRLElBQUksWUFBWSxFQUFpRixDQUFDO1FBQ2pKOzs7Ozs7V0FNRztRQUNPLHNC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LE1BQU07Z0JBU0csVUFBVTtzQkFBbkIsTUFBTTtnQkFNRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFVRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsU0FBUztzQkFBbEIsTUFBTTtnQkFPRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFlRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBTUcsUUFBUTtzQkFBakIsTUFBTTtnQkFXRyxTQUFTO3NCQUFsQixNQUFNO2dCQWFHLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQVFHLGNBQWM7c0JBQXZCLE1BQU07Z0JBVUcsT0FBTztzQkFBaEIsTUFBTTtnQkFjRyxhQUFhO3NCQUF0QixNQUFNO2dCQU1HLFVBQVU7c0JBQW5CLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFNRyxTQUFTO3NCQUFsQixNQUFNO2dCQVVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBUUcsdUJBQXVCO3NCQUFoQyxNQUFNO2dCQU9HLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBYUcsWUFBWTtzQkFBckIsTUFBTTtnQkFTRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIERheUFnZW5kYVZpZXdcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgV3JhcHBlckhlbHBlciBmcm9tICcuL3dyYXBwZXIuaGVscGVyJztcblxuaW1wb3J0IHsgQWxpZ25TcGVjLCBCYXNlLCBCcnludHVtU2Nyb2xsT3B0aW9ucywgQnV0dG9uQ29uZmlnLCBDb250YWluZXIsIERvbUNvbmZpZywgRHVyYXRpb25Db25maWcsIEtleU1hcENvbmZpZywgTGF5b3V0LCBNYXNrQ29uZmlnLCBNZW51SXRlbUNvbmZpZywgTWVudUl0ZW1FbnRyeSwgTW9kZWwsIFBhZ2luZ1Rvb2xiYXJDb25maWcsIFBhbmVsLCBQYW5lbENvbGxhcHNlckNvbmZpZywgUGFuZWxDb2xsYXBzZXJPdmVybGF5Q29uZmlnLCBQYW5lbEhlYWRlciwgUmVjdGFuZ2xlLCBTY3JvbGxlciwgU2Nyb2xsZXJDb25maWcsIFN0YXRlUHJvdmlkZXIsIFRhYkNvbmZpZywgVG9vbCwgVG9vbENvbmZpZywgVG9vbGJhckNvbmZpZywgVG9vbGJhckl0ZW1zLCBUb29sdGlwQ29uZmlnLCBXaWRnZXQgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuaW1wb3J0IHsgRXZlbnRNb2RlbCwgUmVzb3VyY2VNb2RlbCB9IGZyb20gJ0BicnludHVtL3NjaGVkdWxlci10aGluJztcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbnNDb25maWcsIENhbGVuZGFyUm93LCBDYWxlbmRhclJvd0NvbmZpZywgQ2FsZW5kYXJWaWV3LCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWcsIENhbGVuZGFyQ29udGFpbmVyTGF5b3V0Q29uZmlnLCBEYXRlUmFuZ2VPd25lciwgRGF5QWdlbmRhVmlldywgRGF5QWdlbmRhVmlld0xpc3RlbmVycywgRGF5Q2VsbCwgRGF5Q2VsbFdpdGhFdmVudHMsIERheVZpZXcsIEV2ZW50QmFyLCBPdmVyZmxvd1BvcHVwQ29uZmlnIH0gZnJvbSAnQGJyeW50dW0vY2FsZW5kYXItdGhpbic7XG5cbmltcG9ydCB7IFN0cmluZ0hlbHBlciB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5cbmV4cG9ydCB0eXBlIEJyeW50dW1EYXlBZ2VuZGFWaWV3UHJvcHMgPSB7XG4gICAgLy8gQ29uZmlnc1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBvciBhbiBhcnJheSBvZiBidXR0b24gc3BlY2lmaWNhdGlvbnMgd2hpY2ggYWRkIGNsaWNrYWJsZSBpY29uIGJ1dHRvbnMgdG9cbiAgICAgKiB0aGUgcmVuZGVyZWQgZXZlbnQgYmxvY2tzIHdoaWNoIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1hY3Rpb25CdXR0b25zKVxuICAgICAqL1xuICAgIGFjdGlvbkJ1dHRvbnMgPyA6IEFjdGlvbkJ1dHRvbnNDb25maWdbXXxSZWNvcmQ8c3RyaW5nLCBBY3Rpb25CdXR0b25zQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIEEga2V5IHRvIHVzZSB0byBhY3RpdmF0ZSB0aGlzIHZpZXcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWFjdGl2YXRpb25LZXkpXG4gICAgICovXG4gICAgYWN0aXZhdGlvbktleSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYWRvcHQgYXMgdGhpcyBXaWRnZXQncyBlbmNhcHN1bGF0aW5nIGVsZW1lbnQuIFRoZSB3aWRnZXQnc1xuICAgICAqIGNvbnRlbnQgd2lsbCBiZSBwbGFjZWQgaW5zaWRlIHRoaXMgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctYWRvcHQpXG4gICAgICovXG4gICAgYWRvcHQgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWFsaWduKVxuICAgICAqL1xuICAgIGFsaWduID8gOiBBbGlnblNwZWN8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbYWxpZ24tc2VsZl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2FsaWduLXNlbGYpIHN0eWxlLlxuICAgICAqL1xuICAgIGFsaWduU2VsZiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBbQ2FsZW5kYXJSb3ddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0NhbGVuZGFyUm93KSB3aWRnZXQgY29udGFpbmluZyB0aGUgaG9yaXpvbnRhbCBzZXJpZXMgb2YgY2FsZW5kYXIgY2VsbHMgd2l0aCB0aGVcbiAgICAgKiBkYXkgaGVhZGVycyBhbmQgYW55IGFsbC1kYXksIG9yIGRheS1zcGFubmluZyBldmVudHMgd2hpY2ggZmFsbCBpbnNpZGUgdGhpcyB2aWV3J3MgdGltZSByYW5nZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctYWxsRGF5RXZlbnRzKVxuICAgICAqL1xuICAgIGFsbERheUV2ZW50cyA/IDogQ2FsZW5kYXJSb3d8Q2FsZW5kYXJSb3dDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGBmYWxzZWAgdG8gZGlzYWJsZSBkcmFnLWNyZWF0aW5nIGV2ZW50cyBpbiB0aGlzIHZpZXcuXG4gICAgICovXG4gICAgYWxsb3dEcmFnQ3JlYXRlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHRoaXMgYXMgYGZhbHNlYCB0byBkaXNhYmxlIGRyYWctbW92aW5nIGV2ZW50cyBpbiB0aGlzIHZpZXcuXG4gICAgICovXG4gICAgYWxsb3dEcmFnTW92ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGBmYWxzZWAgdG8gZGlzYWJsZSBkcmFnLXJlc2l6aW5nIGV2ZW50cyBpbiB0aGlzIHZpZXcuXG4gICAgICovXG4gICAgYWxsb3dEcmFnUmVzaXplID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgd2hlbiBtb3VzZXdoZWVsIHpvb21pbmcgb3V0IGZyb20gKm92ZXJmbG93aW5nKiB0aGUgY2xpZW50IGhlaWdodCwgaXQgaXMgbm90IHBlcm1pdHRlZCB0byB6b29tXG4gICAgICogZnVydGhlciBvdXQgc28gdGhhdCB0aGUgaG91cnMgKnVuZGVyZmxvdyogdGhlIGNsaWVudCBoZWlnaHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWFsbG93Wm9vbVVuZGVyZmxvdylcbiAgICAgKi9cbiAgICBhbGxvd1pvb21VbmRlcmZsb3cgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgYW5kIGJlaW5nIHNob3duIHRocm91Z2ggW3Nob3dCeV0oI0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1zaG93QnkpLipcbiAgICAgKiBgdHJ1ZWAgdG8gc2hvdyBhIGNvbm5lY3RvciBhcnJvdyBwb2ludGluZyB0byB0aGUgYWxpZ24gdGFyZ2V0LlxuICAgICAqL1xuICAgIGFuY2hvciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHdoZW4gbmF2aWdhdGluZyB0aHJvdWdoIHRpbWUsIHRoZSBuZXh0IHRpbWVcbiAgICAgKiBibG9jayB3aWxsIGJlIGFuaW1hdGVkIGluIGZyb20gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctYW5pbWF0ZVRpbWVTaGlmdClcbiAgICAgKi9cbiAgICBhbmltYXRlVGltZVNoaWZ0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgdGhlIGlkIG9mIGFuIGVsZW1lbnQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCdzIGVsZW1lbnQgdG8uIENhbiBiZSBjb25maWd1cmVkLCBvciBzZXQgb25jZSBhdFxuICAgICAqIHJ1bnRpbWUuIFRvIGFjY2VzcyB0aGUgZWxlbWVudCBvZiBhIHJlbmRlcmVkIHdpZGdldCwgc2VlIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KS5cbiAgICAgKi9cbiAgICBhcHBlbmRUbyA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3RcbiAgICAgKiBpbnRvIGFuIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSBsaW5rZWQgdXNpbmcgdGhlIGBhcmlhLWRlc2NyaWJlZGJ5YCBhdHRyaWJ1dGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWFyaWFEZXNjcmlwdGlvbilcbiAgICAgKi9cbiAgICBhcmlhRGVzY3JpcHRpb24gPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgbG9jYWxpemFibGUgc3RyaW5nIChNYXkgY29udGFpbiBgJ0x7fSdgIHRva2VucyB3aGljaCByZXNvbHZlIGluIHRoZSBsb2NhbGUgZmlsZSkgdG8gaW5qZWN0IGFzXG4gICAgICogdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWFyaWFMYWJlbClcbiAgICAgKi9cbiAgICBhcmlhTGFiZWwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIElmIHRoaXMgY29uZmlnIGlzIHNldCwgdGhlbiB0aGUgYGdlc3R1cmVgIGNvbmZpZ3VyZWQgKHdoaWNoIGRlZmF1bHRzIHRvIGBkYmxjbGlja2ApIGNyZWF0ZXMgYVxuICAgICAqIG5ldyBldmVudCBhdCB0aGUgbW91c2Ugb3IgdG91Y2ggZXZlbnQncyB0aW1lIHBvaW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1hdXRvQ3JlYXRlKVxuICAgICAqL1xuICAgIGF1dG9DcmVhdGUgPyA6IHtcbiAgICAgICAgZ2VzdHVyZT86IHN0cmluZ1xuICAgICAgICBuZXdOYW1lPzogRnVuY3Rpb258c3RyaW5nXG4gICAgICAgIHN0ZXA/OiBzdHJpbmdcbiAgICAgICAgc25hcFR5cGU/OiAncm91bmQnfCdjZWlsJ3wnZmxvb3InXG4gICAgICAgIGR1cmF0aW9uPzogc3RyaW5nXG4gICAgICAgIHN0YXJ0SG91cj86IG51bWJlclxuICAgIH18c3RyaW5nfGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIENvbmZpZyBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgW1Rvb2xiYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhciksXG4gICAgICogb3IgYXJyYXkgb2YgY29uZmlnIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBjaGlsZCBpdGVtcyBvZiBhIFRvb2xiYXIuIEFub3RoZXIgd2F5IHRvIGFkZCBhIGJiYXIgaXMgdG8gdXNlIFtzdHJpcHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXN0cmlwcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWJiYXIpXG4gICAgICovXG4gICAgYmJhciA/IDogKENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBwYW5lbCdzIGJvZHkgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctYm9keUNscylcbiAgICAgKi9cbiAgICBib2R5Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogVGhlIGNvbG9yIG9mIHRoZSBib3JkZXJzIChpZiBhbnkpIGJldHdlZW4gaG91ciByb3dzIGFuZCBkYXkgcm93cy5cbiAgICAgKi9cbiAgICBib3JkZXJDb2xvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdoZXJlIHByb3BlcnR5IG5hbWVzIHdpdGggYSB0cnV0aHkgdmFsdWUgaW5kaWNhdGUgd2hpY2ggZXZlbnRzIHNob3VsZCBidWJibGUgdXAgdGhlIG93bmVyc2hpcFxuICAgICAqIGhpZXJhcmNoeSB3aGVuIHRyaWdnZXJlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctYnViYmxlRXZlbnRzKVxuICAgICAqL1xuICAgIGJ1YmJsZUV2ZW50cyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IGNhbGwgb25YWFggbWV0aG9kIG5hbWVzIChlLmcuIGBvblNob3dgLCBgb25DbGlja2ApLCBhcyBhbiBlYXN5IHdheSB0byBsaXN0ZW4gZm9yIGV2ZW50cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctY2FsbE9uRnVuY3Rpb25zKVxuICAgICAqL1xuICAgIGNhbGxPbkZ1bmN0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGlmIGFuIGV2ZW50IGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlIGVycm9yIHByb3BhZ2F0ZXMgdXAgdGhlIHN0YWNrIGFuZCB0aGVcbiAgICAgKiBhcHBsaWNhdGlvbiBzdGF0ZSBpcyB1bmRlZmluZWQuIENvZGUgd2hpY2ggZm9sbG93cyB0aGUgZXZlbnQgaGFuZGxlciB3aWxsICpub3QqIGJlIGV4ZWN1dGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1jYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMpXG4gICAgICovXG4gICAgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGNlbnRyZSB0aGUgV2lkZ2V0IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgY2VudGVyZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIGVsZW1lbnQuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWNscylcbiAgICAgKi9cbiAgICBjbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwYW5lbCBpcyBjb2xsYXBzZWQgKHRoZSBib2R5IG9mIHRoZSBwYW5lbCBpcyBoaWRkZW4gd2hpbGUgb25seSB0aGUgaGVhZGVyIGlzXG4gICAgICogdmlzaWJsZSkuIE9ubHkgdmFsaWQgaWYgdGhlIHBhbmVsIGlzIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpLlxuICAgICAqL1xuICAgIGNvbGxhcHNlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIGVuYWJsZXMgY29sbGFwc2liaWxpdHkgZm9yIHRoZSBwYW5lbC4gU2VlIFtjb2xsYXBzZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNlZCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWNvbGxhcHNpYmxlKVxuICAgICAqL1xuICAgIGNvbGxhcHNpYmxlID8gOiBib29sZWFufFBhbmVsQ29sbGFwc2VyQ29uZmlnfFBhbmVsQ29sbGFwc2VyT3ZlcmxheUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIHNwZWNpZmllZCBjb2xvciB0byB0aGUgd2lkZ2V0LCBieSBzZXR0aW5nIHRoZSBgLS1iLXByaW1hcnlgIENTUyB2YXJpYWJsZSBpbiB0aGUgd2lkZ2V0c1xuICAgICAqIGBzdHlsZWAgYmxvY2suXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWNvbG9yKVxuICAgICAqL1xuICAgIGNvbG9yID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIHdoaWNoIGNvbHVtbiB0byBzdGFydCBpbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBjb2x1bW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIG5hbWUgb2YgYSBmdW5jdGlvbiB3aGljaCBpcyBwYXNzZWQgdGhlIFtEYXlDZWxsV2l0aEV2ZW50c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyN0eXBlZGVmLURheUNlbGxXaXRoRXZlbnRzKSBvYmplY3Qgd2hpY2hcbiAgICAgKiBkZXNjcmliZXMgdGhlIGV2ZW50cyBhbmQgZGV0YWlscyBvZiB0aGUgZGF5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1jb2x1bW5IZWFkZXJSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge0RheUNlbGxXaXRoRXZlbnRzfSBjZWxsRGF0YSBBIGRhdGEgYmxvY2sgZGVzY3JpYmluZyB0aGUgZGF0ZSBhbmQgdGhlIGV2ZW50cyBmb3IgdGhhdCBkYXRlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmcsb2JqZWN0fVxuICAgICAqL1xuICAgIGNvbHVtbkhlYWRlclJlbmRlcmVyID8gOiAoKGNlbGxEYXRhOiBEYXlDZWxsV2l0aEV2ZW50cykgPT4gc3RyaW5nfG9iamVjdCl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHRoaXMgcHJvcGVydHkgYXMgYHRydWVgIHRvIHNob3cgdGhlIGRheSBuYW1lIGFuZCBkYXRlIGhlYWRlcnMgaW4gYSBtb3JlIGNvbXBhY3Qgc3R5bGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWNvbXBhY3RIZWFkZXIpXG4gICAgICovXG4gICAgY29tcGFjdEhlYWRlciA/IDogYm9vbGVhblxuICAgIGNvbmZpZyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIG9yIFtwb3NpdGlvbmVkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1wb3NpdGlvbmVkKS4qXG4gICAgICogRWxlbWVudCwgV2lkZ2V0IG9yIFJlY3RhbmdsZSB0byB3aGljaCB0aGlzIFdpZGdldCBpcyBjb25zdHJhaW5lZC5cbiAgICAgKi9cbiAgICBjb25zdHJhaW5UbyA/IDogSFRNTEVsZW1lbnR8V2lkZ2V0fFJlY3RhbmdsZVxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gdGhlIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1jb250ZW50RWxlbWVudENscylcbiAgICAgKi9cbiAgICBjb250ZW50RWxlbWVudENscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHR3byBwcm9wZXJ0aWVzLCBgc3RhcnRgIGFuZCBgZW5kYCByZXByZXNlbnRpbmcgdGhlIHN0YXJ0IGFuZFxuICAgICAqIGVuZCBvZiBjb3JlIHdvcmtpbmcgaG91cnMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWNvcmVIb3VycylcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgRGF0ZSBmb3IgaG91cnMgY2FsY3VsYXRpb25cbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0W119XG4gICAgICovXG4gICAgY29yZUhvdXJzID8gOiBvYmplY3R8KChkYXRlOiBEYXRlKSA9PiBvYmplY3RbXSl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgbmFtZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIHByb2R1Y2VzIGEgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGJsb2NrIHRvIGNyZWF0ZSB0aGUgY3VycmVudCB0aW1lIGluZGljYXRvclxuICAgICAqIHdoaWNoIGlzIGRpc3BsYXllZCBpbiBhIGRheSBjb2x1bW4gd2hpY2ggcmVwcmVzZW50cyB0aGUgY3VycmVudCBkYXRlLiBJdCBpcyB0aGUgZGV2ZWxvcGVyJ3MgcmVzcG9uc2liaWxpdHlcbiAgICAgKiB0byBhZGQgQ1NTIGNsYXNzZXMgYW5kIHRoZSBhcHByb3ByaWF0ZSBDU1MgcnVsZXMgdG8gcHJvZHVjZSB0aGUgZGVzaXJlIGFwcGVhcmFuY2UuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWN1cnJlbnRUaW1lSW5kaWNhdG9yUmVuZGVyZXIpXG4gICAgICogQHJldHVybnMge0RvbUNvbmZpZ30gQW4gb2JqZWN0IHdoaWNoIGRlc2NyaWJlcyB0aGUgRE9NIHN0cnVjdHVyZSBvZiB0aGUgdG9kYXkgaW5kaWNhdG9yIGVsZW1lbnQuXG4gICAgICovXG4gICAgY3VycmVudFRpbWVJbmRpY2F0b3JSZW5kZXJlciA/IDogKCgpID0+IERvbUNvbmZpZyl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgaGFsZiBob3VyLCBmaWZ0ZWVuIG1pbnV0ZSB0aWNrIGxpbmVzIGFyZSByZW5kZXJlZCBpbiBhIGxvd2VyIGNvbnRyYXN0XG4gICAgICogY29sb3VyIHRoYW4gaG91ciBsaW5lcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctZGFzaGVkU3VidGlja3MpXG4gICAgICovXG4gICAgZGFzaGVkU3VidGlja3MgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgV2lkZ2V0IGNvbmZpZ3VyYXRpb24gaXMgdXNlZCBpbiB0aGUgR3JpZCdzIFJvd0V4cGFuZGVyIGZlYXR1cmUncyBgd2lkZ2V0YCBjb25maWcsIHByb3ZpZGUgdGhlXG4gICAgICogZmllbGQgb24gdGhlIGV4cGFuZGVkIHJlY29yZCB0byB1c2UgZm9yIHBvcHVsYXRpbmcgdGhpcyB3aWRnZXQncyBzdG9yZSAoaWYgYXBwbGljYWJsZSlcbiAgICAgKi9cbiAgICBkYXRhRmllbGQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBhcHBseSB0byBlbGVtZW50cyBkYXRhc2V0IChlYWNoIGtleSB3aWxsIGJlIHVzZWQgYXMgYSBkYXRhLWF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudClcbiAgICAgKi9cbiAgICBkYXRhc2V0ID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGUgdG8gb3JpZW50IHRoaXMgdmlldydzIFtyYW5nZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vRGF0ZVJhbmdlT3duZXIjY29uZmlnLXJhbmdlKSBhcm91bmQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWRhdGUpXG4gICAgICovXG4gICAgZGF0ZSA/IDogRGF0ZVxuICAgIC8qKlxuICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24sIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkgd2hpY2ggYW5cbiAgICAgKiBhcHBsaWNhdGlvbiBtYXkgcHJvdmlkZSB0byBmaWx0ZXIgb3V0IGRheSBjb2x1bW5zIGZvciBpbmRpdmlkdWFsIGRhdGVzLlxuICAgICAqIEBwYXJhbSB7RGF5Q2VsbH0gY29udGV4dCBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZGF5IGNvbHVtbiB0byBiZSBjcmVhdGVkLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm4gYGZhbHNlYCB0byBub3QgZGlzcGxheSBhIGNvbHVtbiBmb3IgdGhlIHBhc3NlZCBkYXRlLlxuICAgICAqL1xuICAgIGRhdGVGaWx0ZXIgPyA6ICgoY29udGV4dDogRGF5Q2VsbCkgPT4gYm9vbGVhbil8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBbRGF0ZUhlbHBlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyKSBmb3JtYXQgc3RyaW5nL2Z1bmN0aW9uIHRvIHVzZSB0byBjcmVhdGUgZGF0ZSBvdXRwdXQgZm9yIHZpZXcgZGVzY3JpcHRpb25zLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBUaGUgZGF0ZSB0byBmb3JtYXQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBkYXRlLlxuICAgICAqL1xuICAgIGRhdGVGb3JtYXQgPyA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZylcbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyB1c2VkIHRvIHNlcGFyYXRlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgaW4gdGhlIFtkZXNjcmlwdGlvbkZvcm1hdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9EZXNjcmliYWJsZSNjb25maWctZGVzY3JpcHRpb25Gb3JtYXQpLlxuICAgICAqL1xuICAgIGRhdGVTZXBhcmF0b3IgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIG5hbWUgb2YgYSBmdW5jdGlvbiB3aGljaCBpcyBwYXNzZWQgdGhlIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3Qgd2hpY2hcbiAgICAgKiB3aWxsIGJlIHVzZWQgdG8gc3luYyB3aXRoIGEgZGF5IGNvbHVtbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctZGF5Q2VsbFJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7RG9tQ29uZmlnLG9iamVjdH0gZG9tQ29uZmlnIEEgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGNvbmZpZyBvYmplY3Qgd2hpY2ggaXMgdXNlZCB0byBzeW5jIHRoZSBkYXkgY29sdW1uIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRvbUNvbmZpZy5jbGFzc05hbWUgQW4gb2JqZWN0IHdobydzIHRydXRoeSBwcm9wZXJ0eSBuYW1lcyB3aWxsIGJlIGFwcGxpZWQgYXMgY2xhc3MgbmFtZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRvbUNvbmZpZy5zdHlsZSBBIENTUyBzdHlsZSBkZWZpbml0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZG9tQ29uZmlnLmRhdGFzZXQgVGhlIERPTSBkYXRhIHByb3BlcnRpZXMgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RG9tQ29uZmlnW119IGNoaWxkcmVuIFRoZSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgZGVmaW5pdGlvbnMgZm9yIHRoZSBldmVudHMgaW4gdGhlIGRheS5cbiAgICAgKiBAcGFyYW0ge0RheUNlbGx9IGNlbGxEYXRhIEEgYERheUNlbGxgIG9iamVjdCB0aGF0IGNvbnRhaW5zIGRhdGEgYWJvdXQgdGhlIGNlbGwuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICBkYXlDZWxsUmVuZGVyZXIgPyA6ICgoZG9tQ29uZmlnOiB7IGNsYXNzTmFtZTogb2JqZWN0LCBzdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QgfSwgY2hpbGRyZW46IERvbUNvbmZpZ1tdLCBjZWxsRGF0YTogRGF5Q2VsbCkgPT4gc3RyaW5nKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBFaXRoZXIgdGhlIGVuZCBob3VyIG9mIHRoZSBkYXksIG9yIGEgKjI0IGhvdXIqwqBgSEg6TU1gIHN0cmluZyBkZW5vdGluZyB0aGUgZW5kIGRhdGUgb2YgdGhlIGxhc3QgcmVuZGVyZWQgdGltZSBibG9jay5cbiAgICAgKiBZb3UgY2FuIGFsc28gc2V0IHRoaXMgdmFsdWUgdG8gYSBtcyB0aW1lc3RhbXAgcmVwcmVzZW50aW5nIHRpbWUgZnJvbSBtaWRuaWdodC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctZGF5RW5kVGltZSlcbiAgICAgKi9cbiAgICBkYXlFbmRUaW1lID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgbmFtZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIGlzIHBhc3NlZCB0aGUgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIG9iamVjdCB3aGljaFxuICAgICAqIHdpbGwgYmUgdXNlZCB0byBzeW5jIHdpdGggYSBkYXkgY2VsbCBoZWFkZXIgPHN0cm9uZz5pbiB0aGUgYWxsIGRheSByb3c8L3N0cm9uZz4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWRheUhlYWRlclJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7RG9tQ29uZmlnLG9iamVjdH0gaGVhZGVyRG9tQ29uZmlnIEEgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGNvbmZpZyBvYmplY3Qgd2hpY2ggaXMgdXNlZCB0byBzeW5jIHRoZSBkYXkgaGVhZGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGhlYWRlckRvbUNvbmZpZy5jbGFzc05hbWUgQW4gb2JqZWN0IHdobydzIHRydXRoeSBwcm9wZXJ0eSBuYW1lcyB3aWxsIGJlIGFwcGxpZWQgYXMgY2xhc3MgbmFtZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGhlYWRlckRvbUNvbmZpZy5zdHlsZSBBIENTUyBzdHlsZSBkZWZpbml0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyRG9tQ29uZmlnLmRhdGFzZXQgVGhlIERPTSBkYXRhIHByb3BlcnRpZXMgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RG9tQ29uZmlnW119IGhlYWRlckRvbUNvbmZpZy5jaGlsZHJlbiBUaGUgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGRlZmluaXRpb25zIHRoZSBoZWFkZXIgY29udGVudC4gVGhlcmUgd2lsbCBiZSAyIGBjaGlsZHJlbmAgZW5jYXBzdWxhdGluZyB0aGUgZGF5IG5hbWUgYW5kIHRoZSBkYXRlLlxuICAgICAqIEBwYXJhbSB7RGF5Q2VsbH0gY2VsbERhdGEgQSBgRGF5Q2VsbGAgb2JqZWN0IHRoYXQgY29udGFpbnMgZGF0YSBhYm91dCB0aGUgY2VsbC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGRheUhlYWRlclJlbmRlcmVyID8gOiAoKGhlYWRlckRvbUNvbmZpZzogeyBjbGFzc05hbWU6IG9iamVjdCwgc3R5bGU6IG9iamVjdCwgZGF0YXNldDogb2JqZWN0LCBjaGlsZHJlbjogRG9tQ29uZmlnW10gfSwgY2VsbERhdGE6IERheUNlbGwpID0+IHN0cmluZyl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gZm9yIGRheSBuYW1lcyBpbiB0aGUgaGVhZGVyIHJvdyAoZS5nLiwgXCJkZGRcIiBmb3IgXCJNb25cIiwgXCJUdWVcIiwgLi4uKVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBUaGUgZGF0ZSB0byBmb3JtYXQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBkYXRlLlxuICAgICAqL1xuICAgIGRheU5hbWVGb3JtYXQgPyA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZylcbiAgICAvKipcbiAgICAgKiBFaXRoZXIgdGhlIHN0YXJ0IGhvdXIgb2YgdGhlIGRheSwgb3IgYSAqMjQgaG91cirCoGBISDpNTWAgc3RyaW5nIGRlbm90aW5nIHRoZSBzdGFydCB0aW1lIGZvciBkYXlzLiBUaGlzXG4gICAgICogaXMgbWlkbmlnaHQgYnkgZGVmYXVsdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctZGF5U3RhcnRTaGlmdClcbiAgICAgKi9cbiAgICBkYXlTdGFydFNoaWZ0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogRWl0aGVyIHRoZSBzdGFydCBob3VyIG9mIHRoZSBkYXksIG9yIGEgKjI0IGhvdXIqwqBgSEg6TU1gIHN0cmluZyBkZW5vdGluZyB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHJlbmRlcmVkXG4gICAgICogZGFpbHkgdGltZSBibG9jay4gWW91IGNhbiBhbHNvIHNldCB0aGlzIHZhbHVlIHRvIGEgbXMgdGltZXN0YW1wIHJlcHJlc2VudGluZyB0aW1lIGZyb20gbWlkbmlnaHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWRheVN0YXJ0VGltZSlcbiAgICAgKi9cbiAgICBkYXlTdGFydFRpbWUgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0IHdoZW4gYSBzaW5nbGUgdmFsdWUgaXMgdG8gYmUgYXBwbGllZCB0byB0aGlzIFdpZGdldC4gU3VjaCBhcyB3aGVuIHVzZWRcbiAgICAgKiBpbiBhIGdyaWQgV2lkZ2V0Q29sdW1uLCB0aGlzIGlzIHRoZSBwcm9wZXJ0eSB0byB3aGljaCB0aGUgY29sdW1uJ3MgYGZpZWxkYCBpcyBhcHBsaWVkLlxuICAgICAqL1xuICAgIGRlZmF1bHRCaW5kUHJvcGVydHkgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgW3F1ZXJ5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNmdW5jdGlvbi1xdWVyeSkgc2VsZWN0b3IgZnVuY3Rpb24gd2hpY2ggY2FuIGlkZW50aWZ5IHRoZSBkZXNjZW5kYW50IHdpZGdldCB0byB3aGljaFxuICAgICAqIGZvY3VzIHNob3VsZCBiZSBkaXJlY3RlZCBieSBkZWZhdWx0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1kZWZhdWx0Rm9jdXMpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IHdpZGdldCBXaWRnZXQgcGFzc2VkIHRvIG1ldGhvZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB0cnV0aHkgdmFsdWUgaWYgd2lkZ2V0IGlzIHRoZSBkZWZhdWx0IG9uZVxuICAgICAqL1xuICAgIGRlZmF1bHRGb2N1cyA/IDogKCh3aWRnZXQ6IFdpZGdldCkgPT4gYm9vbGVhbil8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgZGVmYXVsdCBzZXR0aW5ncyB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cy5cbiAgICAgKi9cbiAgICBkZWZhdWx0cyA/IDogQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnXG4gICAgLyoqXG4gICAgICogT3B0aW9ucyB0byBhZGQgaW50byBzY3JvbGwgb3B0aW9ucyB3aGVuIHRoZSBbc2Nyb2xsVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jZnVuY3Rpb24tc2Nyb2xsVG8pIG1ldGhvZCBpcyBjYWxsZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWRlZmF1bHRTY3JvbGxPcHRpb25zKVxuICAgICAqL1xuICAgIGRlZmF1bHRTY3JvbGxPcHRpb25zID8gOiBCcnludHVtU2Nyb2xsT3B0aW9uc1xuICAgIC8qKlxuICAgICAqIFRoZSBkYXRlIGZvcm1hdCB1c2VkIGJ5IHRoZSBkZWZhdWx0IFtkZXNjcmlwdGlvblJlbmRlcmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL0Rlc2NyaWJhYmxlI2NvbmZpZy1kZXNjcmlwdGlvblJlbmRlcmVyKSBmb3IgcmVuZGVyaW5nIHRoZSB2aWV3J3MgZGVzY3JpcHRpb24uXG4gICAgICogSWYgdGhpcyB2YWx1ZSBpcyBgbnVsbGAsIHRoZSBbZGF0ZUZvcm1hdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9EZXNjcmliYWJsZSNjb25maWctZGF0ZUZvcm1hdCkgKGFuZCBwb3RlbnRpYWxseSBbZGF0ZVNlcGFyYXRvcl0oI1NjaGVkdWxlci92aWV3L21peGluL0Rlc2NyaWJhYmxlI2NvbmZpZy1kYXRlU2VwYXJhdG9yKSkgd2lsbFxuICAgICAqIGJlIHVzZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWRlc2NyaXB0aW9uRm9ybWF0KVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBUaGUgZGF0ZSB0byBmb3JtYXQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBkYXRlLlxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uRm9ybWF0ID8gOiBzdHJpbmd8c3RyaW5nW118Ym9vbGVhbltdfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKXxGdW5jdGlvbltdXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIHRoZSB0ZXh0dWFsIGRlc2NyaXB0aW9uIGZvciB0aGlzIHZpZXcuIElmIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGVcbiAgICAgKiBbZGVzY3JpcHRpb25Gb3JtYXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vRGVzY3JpYmFibGUjY29uZmlnLWRlc2NyaXB0aW9uRm9ybWF0KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctZGVzY3JpcHRpb25SZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gdmlldyBUaGUgYWN0aXZlIHZpZXcgaW4gY2FzZSB0aGUgZnVuY3Rpb24gaXMgaW4gYW5vdGhlciBzY29wZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBEZXNjcmlwdGlvbiBzdHJpbmdcbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvblJlbmRlcmVyID8gOiAodmlldzogV2lkZ2V0KSA9PiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDaGVjayBmb3IgQ1NTIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdoZW4gdXBncmFkaW5nIHRvIHY3LiBQZXJmb3JtcyB0aGUgZm9sbG93aW5nIGNoZWNrczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcylcbiAgICAgKi9cbiAgICBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBvciBlbmFibGUgdGhlIHdpZGdldC4gSXQgaXMgc2ltaWxhciB0byBbcmVhZE9ubHldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWFkT25seSkgZXhjZXB0IGEgZGlzYWJsZWQgd2lkZ2V0XG4gICAgICogY2Fubm90IGJlIGZvY3VzZWQsIHVzZXMgYSBkaWZmZXJlbnQgcmVuZGl0aW9uICh1c3VhbGx5IGdyZXlpc2gpIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWxlY3RpbmcgaXRzIHZhbHVlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBkaXNhYmxlZCA/IDogYm9vbGVhbnwnaW5lcnQnXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgW3BhbmVsJ3MgXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsKVxuICAgICAqIFtzdHJpcHMgY29sbGVjdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRoaXMgY29uZmlnIGFyZSBgJ3RvcCdgLFxuICAgICAqIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBvciBgJ3JpZ2h0J2AsIHdoaWNoIGNhdXNlIHRoZSB3aWRnZXQgdG8gYmUgcGxhY2VkIG9uIHRoYXQgc2lkZSBvZiB0aGUgcGFuZWwnc1xuICAgICAqIGJvZHkuIFN1Y2ggd2lkZ2V0cyBhcmUgY2FsbGVkIFwiZWRnZSBzdHJpcHNcIi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctZG9jaylcbiAgICAgKi9cbiAgICBkb2NrID8gOiAndG9wJ3wnYm90dG9tJ3wnbGVmdCd8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnfCdoZWFkZXInfCdwcmUtaGVhZGVyJ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYmUgYWJsZSB0byBkcmFnIGEgd2lkZ2V0IGZyZWVseSBvbiB0aGUgcGFnZS4gT3Igc2V0IHRvIGFuIG9iamVjdCB3aXRoIGEgwrRoYW5kbGVTZWxlY3RvcsK0XG4gICAgICogcHJvcGVydHkgd2hpY2ggY29udHJvbHMgd2hlbiBhIGRyYWcgc2hvdWxkIHN0YXJ0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1kcmFnZ2FibGUpXG4gICAgICovXG4gICAgZHJhZ2dhYmxlID8gOiBib29sZWFufHtcbiAgICAgICAgaGFuZGxlU2VsZWN0b3I/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIFtkdXJhdGlvblVuaXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL0V2ZW50TW9kZWwjZmllbGQtZHVyYXRpb25Vbml0KSB0byB1c2Ugd2hlbiBkcmFnLWNyZWF0aW5nIGV2ZW50c1xuICAgICAqIGluIHRoaXMgdmlldy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctZHJhZ1VuaXQpXG4gICAgICovXG4gICAgZHJhZ1VuaXQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIE1ha2UgdGhpcyBQYW5lbCBhIGRvY2tlZCBkcmF3ZXIgd2hpY2ggc2xpZGVzIG91dCBmcm9tIG9uZSBzaWRlIG9mIHRoZSBicm93c2VyIHZpZXdwb3J0IGJ5IGRlZmF1bHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWRyYXdlcilcbiAgICAgKiBAcGFyYW0geydzdGFydCcsJ2xlZnQnLCdlbmQnLCdyaWdodCcsJ3RvcCcsJ2JvdHRvbSd9IHNpZGUgVGhlIHNpZGUgb2YgdGhlIHZpZXdwb3J0IHRvIGRvY2sgdGhlIGRyYXdlciB0by4gICogYCdzdGFydCdgIG1lYW5zIHRoZSBgaW5saW5lLXN0YXJ0YCBzaWRlLiAqIGAnZW5kJ2AgbWVhbnMgdGhlIGBpbmxpbmUtZW5kYCBzaWRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nLG51bWJlcn0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgZHJhd2VyIGluIGl0cyBjb2xsYXBzaWJsZSBheGlzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5saW5lIElmIHVzaW5nIHRoZSBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgdG8gcGxhY2UgdGhlIGRyYXdlciBpbnNpZGUgYSBob3N0IHdpZGdldCwgdGhpcyBtYXkgYmUgc2V0IHRvIGB0cnVlYCB0byBtYWtlIHRoZSBkcmF3ZXIgaW5saW5lIHdpdGhpbiB0aGF0IGhvc3QuIE5vdGUgdGhhdCwgaWYgdXNpbmcgdGhpcywgdGhlIGxheW91dCBvZiB0aGUgaG9zdCBlbGVtZW50IG11c3QgaGF2ZSBgZmxleC1kaXJlY3Rpb25gIHNldCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixvYmplY3R9IGF1dG9DbG9zZSBTcGVjaWZpZXMgd2hhdCB1c2VyIGFjdGlvbnMgc2hvdWxkIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGRyYXdlci4gRGVmYXVsdHMgdG8gY2xvc2luZyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIgb3Igd2hlbiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gYXV0b0Nsb3NlLm1vdXNlZG93biBJZiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLCB0aGUgZHJhd2VyIHdpbGwgYXV0b21hdGljYWxseSBiZSBoaWRkZW4uIElmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZywgaXQgaXMgdXNlZCBhcyBhIENTUyBzZWxlY3RvciB0byBmaWx0ZXIgY2xpY2tzIHdoaWNoIHNob3VsZCBjbG9zZSB0aGUgZHJhd2VyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixzdHJpbmd9IGF1dG9DbG9zZS5mb2N1c291dCBJZiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIsIHRoZSBkcmF3ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGhpZGRlbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0b0Nsb3NlLm1vdXNlb3V0IEhpZGVzIHRoZSBkcmF3ZXIgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBkcmF3ZXIgYWZ0ZXIgdGhlIGBhdXRvQ2xvc2VEZWxheWAgcGVyaW9kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdXRvQ2xvc2VEZWxheSBXaGVuIHVzaW5nIGBtb3VzZW91dGAsIHRoaXMgaXMgdGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kc1xuICAgICAqL1xuICAgIGRyYXdlciA/IDogYm9vbGVhbnx7c2lkZT86ICdzdGFydCd8J2xlZnQnfCdlbmQnfCdyaWdodCd8J3RvcCd8J2JvdHRvbScsIHNpemU/OiBzdHJpbmd8bnVtYmVyLCBpbmxpbmU/OiBib29sZWFuLCBhdXRvQ2xvc2U6IHsgbW91c2Vkb3duPzogYm9vbGVhbnxzdHJpbmcsIGZvY3Vzb3V0PzogYm9vbGVhbnxzdHJpbmcsIG1vdXNlb3V0Pzogc3RyaW5nIH0sIGF1dG9DbG9zZURlbGF5PzogbnVtYmVyfVxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBzcGVjaWZ5aW5nIGF0dHJpYnV0ZXMgdG8gYXNzaWduIHRvIHRoZSByb290IGVsZW1lbnQgb2YgdGhpcyB3aWRnZXQuXG4gICAgICogU2V0IGBudWxsYCB2YWx1ZSB0byBhdHRyaWJ1dGUgdG8gcmVtb3ZlIGl0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1lbGVtZW50QXR0cmlidXRlcylcbiAgICAgKi9cbiAgICBlbGVtZW50QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+XG4gICAgLyoqXG4gICAgICogVGhlIGVuZCBkYXRlIChUaW1lIGNvbXBvbmVudCBpcyB6ZXJvZWQpIG9mIHRoaXMgdmlldy4gTm90ZSB0aGF0IGluIHRlcm1zIG9mIGZ1bGwgZGF5cyxcbiAgICAgKiB0aGlzIGlzIGV4Y2x1c2l2ZSwgaWU6IDIwMjAtMDEtMDEyIHRvIDIwMjAtMDEtMDggaXMgKnNldmVuKiBkYXlzLiBUaGUgZW5kIGlzIDAwOjAwOjAwIG9uXG4gICAgICogdGhlIDh0aC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctZW5kRGF0ZSlcbiAgICAgKi9cbiAgICBlbmREYXRlID8gOiBEYXRlXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiB0aGUgb3duZXJzaGlwIGhpZXJhcmNoeSB0byBmaWx0ZXIgd2hpY2ggZXZlbnRzXG4gICAgICogYXJlIGNvbGxlY3RlZCBpbnRvIHRoZSBkYXkgY2VsbCBkYXRhIGJsb2Nrcy5cbiAgICAgKiBSZXR1cm4gYHRydWVgIHRvIGluY2x1ZGUgdGhlIHBhc3NlZCBldmVudCwgb3IgYSAqZmFsc3kqIHZhbHVlIHRvIGV4Y2x1ZGUgdGhlIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50IHRoZSBwYXNzZWQgZXZlbnRcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBldmVudEZpbHRlciA/IDogKChldmVudDogRXZlbnRNb2RlbCkgPT4gYm9vbGVhbil8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hpY2ggZGlyZWN0aW9uIHRvIGZsb3cgZXZlbnRzIGluIGFuIGhvdXIgcm93LCB2ZXJ0aWNhbGx5ICh0aGUgZGVmYXVsdCksIG9yIGhvcml6b250YWxseS5cbiAgICAgKi9cbiAgICBldmVudEZsb3dEaXJlY3Rpb24gPyA6ICdjb2x1bW4nfCdyb3cnXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiB0aGUgb3duZXJzaGlwIGhpZXJhcmNoeSB3aGljaCB5b3VcbiAgICAgKiBjYW4gc3BlY2lmeSB0byBjdXN0b21pemUgZXZlbnQgRE9NIGNvbnRlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWV2ZW50SGVhZGVyUmVuZGVyZXIpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbCBBbiBvYmplY3QgdGhhdCBjb250YWlucyBkYXRhIGFib3V0IHRoZSBldmVudCBiZWluZyByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7Q2FsZW5kYXJWaWV3fSBkZXRhaWwudmlldyBUaGUgdmlldyByZW5kZXJpbmcgdGhlIGV2ZW50XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbH0gZGV0YWlsLmV2ZW50UmVjb3JkIFRoZSBldmVudCByZWNvcmRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5SZXNvdXJjZU1vZGVsfSBkZXRhaWwucmVzb3VyY2VSZWNvcmQgVGhlIHJlc291cmNlIHJlY29yZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YSBBIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGV2ZW50IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuc3R5bGUgVGhlIHN0eWxlIHByb3BlcnR5IGlzIGFuIG9iamVjdCBjb250YWluaW5nIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBldmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmNscyBUaGUgY2xzIHByb3BlcnR5IGlzIGFuIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBuYW1lcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBldmVudCBlbGVtZW50IGlmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyB0cnV0aHlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuaWNvblN0eWxlIFRoZSBpY29uU3R5bGUgcHJvcGVydHkgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGljb24gZWxlbWVudCBpZiBhbiBpY29uIGVsZW1lbnQgaXMgdG8gYmUgdXNlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5pY29uQ2xzIFRoZSBpY29uQ2xzIHByb3BlcnR5IGlzIGFuIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBuYW1lcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBpY29uIGVsZW1lbnQuIEluaXRpYWxseSBzZXQgZnJvbSB0aGUgZXZlbnQgcmVjb3JkJ3MgW2ljb25DbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL0V2ZW50TW9kZWwjZmllbGQtaWNvbkNscykuIENhbiBiZSBtdXRhdGVkIGJ5IHRoZSByZW5kZXJlci4gSWYgbnVsbCwgb3Igbm8gcHJvcGVydGllcyBhcmUgc2V0LCBubyBpY29uIHdpbGwgYmUgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEuZXZlbnRDb2xvciBDb2xvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBldmVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5kYXRhc2V0IEFuIG9iamVjdCB3aGljaCBwcm9kdWNlcyB0aGUgYGRhdGFzZXRgIG9mIHRoZSByZXN1bHRpbmcgZXZlbnQgYmFyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBkZXRhaWwucmVuZGVyRGF0YS5zb2xpZEJhciBUaGlzIGlzIHZhbGlkIGZvciB2aWV3cyB3aGljaCBjcmVhdGUgZXZlbnQgYmFycy4gVGhpcyBpcyBzZXQgdG8gYHRydWVgIGJ5IGRlZmF1bHQgZm9yIGFsbCBkYXkgYW5kIGludGVyZGF5IGV2ZW50cyBzbyB0aGF0IHRoZXNlIGFwcGVhciBhcyBhIHNvbGlkIGJsb2NrIG9mIGJhY2tncm91bmQgY29sb3IuIEFuIGV2ZW50UmVuZGVyZXIgbWF5IG11dGF0ZSB0aGlzIGZsYWcgdG8gY2hhbmdlIGluIHdoYXQgbWFubmVyIHRoZSBldmVudCBiYXIgaXMgY29sb3JlZCAtIGFzIGEgc29saWQgYmFyIG9mIGNvbG9yLCBvciB1c2luZyB0aGUgZm9yZWdyb3VuZCBjb2xvciAodGV4dCBhbmQgaWNvbnMpIHN1Y2ggYXMgdGhlIE1vbnRoVmlldywgdGhlIENhbGVuZGFyUm93IChhbGwgZGF5IGV2ZW50cyBpbiBhIERheVZpZXcpLCBhbmQgT3ZlcmZsb3dQb3B1cHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEuYm9keUNvbG9yIFdoZW4gdXNlZCBpbiBhIFtEYXlWaWV3XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3KSwgdGhpcyBjb2xvciBpcyBhcHBsaWVkIHRvIHRoZSBib2R5IG9mIHRoZSBldmVudCBlbGVtZW50LiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGxpZ2h0IGVub3VnaCB0aGF0IHRoZSB0ZXh0IGNvbG9yIChGcm9tIHRoZSBTQVNTIHZhcmlhYmxlIGAkZGF5dmlldy1ldmVudC1jb2xvcmApIGlzIHZpc2libGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFpbC5zaG93QnVsbGV0IElmIHRoZXJlIGlzIG5vIGBpY29uQ2xzYCwgYW5kIHRoZSBldmVudCBpcyBub3QgcmVjdXJyaW5nLCB0aGVuIGJ5IGRlZmF1bHQgYSBcImJ1bGxldFwiIGNpcmN1bGFyIGljb24gaXMgc2hvd24gaWYgdGhlIHZpZXcncyBbc2hvd0J1bGxldF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctc2hvd0J1bGxldCkgaWYgc2V0LiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgaW4gYW4gZXZlbnQgcmVuZGVyZXIgb3ZlcnJpZGVzIHRoaXMgYmVoYXZpb3VyLlxuICAgICAqIEByZXR1cm5zIHtEb21Db25maWcsRG9tQ29uZmlnW10sc3RyaW5nLHZvaWR9XG4gICAgICovXG4gICAgZXZlbnRIZWFkZXJSZW5kZXJlciA/IDogKChkZXRhaWw6IHsgdmlldzogQ2FsZW5kYXJWaWV3LCBldmVudFJlY29yZDogRXZlbnRNb2RlbCwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwsIHJlbmRlckRhdGE6IHsgc3R5bGU6IG9iamVjdCwgY2xzOiBvYmplY3QsIGljb25TdHlsZTogb2JqZWN0LCBpY29uQ2xzOiBvYmplY3QsIGV2ZW50Q29sb3I6IHN0cmluZywgZGF0YXNldDogb2JqZWN0LCBzb2xpZEJhcjogYm9vbGVhbiwgYm9keUNvbG9yOiBzdHJpbmcgfSwgc2hvd0J1bGxldDogYm9vbGVhbiB9KSA9PiBEb21Db25maWd8RG9tQ29uZmlnW118c3RyaW5nfHZvaWQpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkgd2hpY2ggeW91XG4gICAgICogY2FuIHNwZWNpZnkgdG8gY3VzdG9taXplIGV2ZW50IERPTSBjb250ZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1ldmVudFJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgZGF0YSBhYm91dCB0aGUgZXZlbnQgYmVpbmcgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyVmlld30gZGV0YWlsLnZpZXcgVGhlIHZpZXcgcmVuZGVyaW5nIHRoZSBldmVudFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWx9IGRldGFpbC5ldmVudFJlY29yZCBUaGUgZXZlbnQgcmVjb3JkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuUmVzb3VyY2VNb2RlbH0gZGV0YWlsLnJlc291cmNlUmVjb3JkIFRoZSBSZXNvdXJjZSByZWNvcmRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEgQSBkYXRhIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBldmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLnN0eWxlIFRoZSBzdHlsZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3QgY29udGFpbmluZyBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZXZlbnQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5jbHMgVGhlIGNscyBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgZXZlbnQgZWxlbWVudCBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdHJ1dGh5XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmljb25TdHlsZSBUaGUgaWNvblN0eWxlIHByb3BlcnR5IGlzIGFuIG9iamVjdCBjb250YWluaW5nIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBpY29uIGVsZW1lbnQgaWYgYW4gaWNvbiBlbGVtZW50IGlzIHRvIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuaWNvbkNscyBUaGUgaWNvbkNscyBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgaWNvbiBlbGVtZW50LiBJbml0aWFsbHkgc2V0IGZyb20gdGhlIGV2ZW50IHJlY29yZCdzIFtpY29uQ2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9FdmVudE1vZGVsI2ZpZWxkLWljb25DbHMpLiBDYW4gYmUgbXV0YXRlZCBieSB0aGUgcmVuZGVyZXIuIElmIG51bGwsIG9yIG5vIHByb3BlcnRpZXMgYXJlIHNldCwgbm8gaWNvbiB3aWxsIGJlIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLmV2ZW50Q29sb3IgQ29sb3IgdG8gYmUgYXBwbGllZCB0byB0aGUgZXZlbnQuIFRoaXMgbWF5IGJlIGEgQ1NTIGNvbG9yIG5hbWUgb3IgYSBDU1MgY29sb3IgdmFsdWUgaW4gYW55IG9mIHRoZSBzdXBwb3J0ZWQgQ1NTIGNvbG9yIGZvcm1hdHMgc3VjaCBhcyBgI1JSR0dCQmAsIGByZ2IoMjU1LCAwLCAwKWAsIG9yIGByZ2JhKDI1NSwgMCwgMCwgMC41KWAuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLmV2ZW50QmFja2dyb3VuZCBBIENTUyBiYWNrZ3JvdW5kIHN0eWxlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGV2ZW50LiBUaGlzIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBzZXQgYnkgdGhlIHJlbmRlcmVyIHRvIHByb3ZpZGUgYSBiYWNrZ3JvdW5kIGltYWdlIG9yIGdyYWRpZW50IGZvciB0aGUgZXZlbnQgYmFyLiBUaGlzIG92ZXJyaWRlcyB0aGUgYGV2ZW50Q29sb3JgIHByb3BlcnR5IGlmIHByZXNlbnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLnRleHRDb2xvciBBIENTUyBjb2xvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBldmVudCB0ZXh0LiBUaGlzIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBzZXQgYnkgdGhlIHJlbmRlcmVyIHRvIHByb3ZpZGUgYSBjdXN0b20gY29sb3IgZm9yIHRoZSBldmVudCBuYW1lIHRleHQgaW4gdGhlIGV2ZW50IGJhci4gVGhpcyBtYXkgYmUgYSBDU1MgY29sb3IgbmFtZSBvciBhIENTUyBjb2xvciB2YWx1ZSBpbiBhbnkgb2YgdGhlIHN1cHBvcnRlZCBDU1MgY29sb3IgZm9ybWF0cyBzdWNoIGFzIGAjUlJHR0JCYCwgYHJnYigyNTUsIDAsIDApYCwgb3IgYHJnYmEoMjU1LCAwLCAwLCAwLjUpYC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuZXZlbnRJbm5lclN0eWxlIFRoZSBldmVudElubmVyU3R5bGUgcHJvcGVydHkgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGlubmVyIHBhcnQgb2YgdGhlIGV2ZW50IGVsZW1lbnQsIHRoZSBgLmItY2FsLWV2ZW50YCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5kYXRhc2V0IEFuIG9iamVjdCB3aGljaCBwcm9kdWNlcyB0aGUgYGRhdGFzZXRgIG9mIHRoZSByZXN1bHRpbmcgZXZlbnQgYmFyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBkZXRhaWwucmVuZGVyRGF0YS5zb2xpZEJhciBUaGlzIGlzIHZhbGlkIGZvciB2aWV3cyB3aGljaCBjcmVhdGUgZXZlbnQgYmFycy4gVGhpcyBpcyBzZXQgdG8gYHRydWVgIGJ5IGRlZmF1bHQgZm9yIGFsbCBkYXkgYW5kIGludGVyZGF5IGV2ZW50cyBzbyB0aGF0IHRoZXNlIGFwcGVhciBhcyBhIHNvbGlkIGJsb2NrIG9mIGJhY2tncm91bmQgY29sb3IuIEFuIGV2ZW50UmVuZGVyZXIgbWF5IG11dGF0ZSB0aGlzIGZsYWcgdG8gY2hhbmdlIGluIHdoYXQgbWFubmVyIHRoZSBldmVudCBiYXIgaXMgY29sb3JlZCAtIGFzIGEgc29saWQgYmFyIG9mIGNvbG9yLCBvciB1c2luZyB0aGUgZm9yZWdyb3VuZCBjb2xvciAodGV4dCBhbmQgaWNvbnMpIHN1Y2ggYXMgdGhlIE1vbnRoVmlldywgdGhlIENhbGVuZGFyUm93IChhbGwgZGF5IGV2ZW50cyBpbiBhIERheVZpZXcpLCBhbmQgT3ZlcmZsb3dQb3B1cHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEuYm9keUNvbG9yIFdoZW4gdXNlZCBpbiBhIFtEYXlWaWV3XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3KSwgdGhpcyBjb2xvciBpcyBhcHBsaWVkIHRvIHRoZSBib2R5IG9mIHRoZSBldmVudCBlbGVtZW50LiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGxpZ2h0IGVub3VnaCB0aGF0IHRoZSB0ZXh0IGNvbG9yIChGcm9tIHRoZSBTQVNTIHZhcmlhYmxlIGAkZGF5dmlldy1ldmVudC1jb2xvcmApIGlzIHZpc2libGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFpbC5yZW5kZXJEYXRhLnNob3dCdWxsZXQgSWYgdGhlcmUgaXMgbm8gYGljb25DbHNgLCBhbmQgdGhlIGV2ZW50IGlzIG5vdCByZWN1cnJpbmcsIHRoZW4gYnkgZGVmYXVsdCBhIFwiYnVsbGV0XCIgY2lyY3VsYXIgaWNvbiBpcyBzaG93biBpZiB0aGUgdmlldydzIFtzaG93QnVsbGV0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG93QnVsbGV0KSBpZiBzZXQuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpbiBhbiBldmVudCByZW5kZXJlciBvdmVycmlkZXMgdGhpcyBiZWhhdmlvdXIuXG4gICAgICogQHJldHVybnMge0RvbUNvbmZpZyxEb21Db25maWdbXSxzdHJpbmcsdm9pZH0gVGhlIGNvbnRlbnQgdG8gYmUgdXNlZCBhcyB0aGUgZXZlbnQgYm9keS5cbiAgICAgKi9cbiAgICBldmVudFJlbmRlcmVyID8gOiAoKGRldGFpbDogeyB2aWV3OiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgcmVuZGVyRGF0YTogeyBzdHlsZTogb2JqZWN0LCBjbHM6IG9iamVjdCwgaWNvblN0eWxlOiBvYmplY3QsIGljb25DbHM6IG9iamVjdCwgZXZlbnRDb2xvcjogc3RyaW5nLCBldmVudEJhY2tncm91bmQ6IHN0cmluZywgdGV4dENvbG9yOiBzdHJpbmcsIGV2ZW50SW5uZXJTdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QsIHNvbGlkQmFyOiBib29sZWFuLCBib2R5Q29sb3I6IHN0cmluZywgc2hvd0J1bGxldDogYm9vbGVhbiB9IH0pID0+IERvbUNvbmZpZ3xEb21Db25maWdbXXxzdHJpbmd8dm9pZCl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB3aGljaCBjb21wYXJlcyBldmVudHMgd2hpY2ggc29tZSB2aWV3cyB1c2UgdG8gZGVjaWRlIHVwb24gcmVuZGVyaW5nIG9yZGVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1ldmVudFNvcnRlcilcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsLEV2ZW50QmFyfSBsaHMgVGhlIGxlZnQgc2lkZSB2YWx1ZSB0byBjb25wYXJlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbCxFdmVudEJhcn0gcmhzIFRoZSByaWdodCBzaWRlIHZhbHVlIHRvIGNvbnBhcmVcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGV2ZW50U29ydGVyID8gOiAobGhzOiBFdmVudE1vZGVsfEV2ZW50QmFyLCByaHM6IEV2ZW50TW9kZWx8RXZlbnRCYXIpID0+IG51bWJlclxuICAgIC8qKlxuICAgICAqIEhvdyBtdWNoIHZlcnRpY2FsIHNwYWNlIHRvIGxlYXZlIGJldHdlZW4gZXZlbnQgYmFycyBpbiBhIGNlbGwuXG4gICAgICovXG4gICAgZXZlbnRTcGFjaW5nID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGVuZCBkYXRlIG9mIGFuIGFsbCBkYXkgZXZlbnQgaXMgZGlzcGxheWVkIGluIHRoZSBVSSBhc1xuICAgICAqIHRoZSBsYXN0IGNhbGVuZGFyIGRhdGUgb24gd2hpY2ggdGhlIGV2ZW50IGZhbGxzLiBGb3IgbW9zdCBlbmQgdXNlcnMsIHRoaXMgaXMgdGhlXG4gICAgICogZXhwZWN0ZWQgdmFsdWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWV4dGVuZEFsbERheUVuZERheSlcbiAgICAgKi9cbiAgICBleHRlbmRBbGxEYXlFbmREYXkgPyA6IGJvb2xlYW5cbiAgICBleHRyYURhdGEgPyA6IGFueVxuICAgIC8qKlxuICAgICAqIElmIHRoaXMgaXMgc2V0IHRvIGB0cnVlYCwgdGhlbiB3aGVuIGRldGVybWluaW5nIHdoaWNoIGFzc2lnbmVkIHJlc291cmNlIG9mIGEgbXVsdGkgYXNzaWduZWQgZXZlbnRcbiAgICAgKiB0byB1c2UgdG8gY3JlYXRlIHRoZSBldmVudCBVSSwgdGhlIGZpcnN0IHJlc291cmNlIHdoaWNoIGlzIHN0aWxsIHNlbGVjdGVkIGluIHRoZVxuICAgICAqIFtyZXNvdXJjZUZpbHRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvU2lkZWJhciNwcm9wZXJ0eS1yZXNvdXJjZUZpbHRlcikgaXMgdXNlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctZmlsdGVyRXZlbnRSZXNvdXJjZXMpXG4gICAgICovXG4gICAgZmlsdGVyRXZlbnRSZXNvdXJjZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCByZWNvbmZpZ3VyaW5nIHRoZSBbc3RhcnREYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1zdGFydERhdGUpIG1haW50YWlucyB0aGUgY3VycmVudCBkdXJhdGlvblxuICAgICAqIG9mIHRoZSB2aWV3IGFuZCBtb3ZlcyB0aGUgW2VuZERhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWVuZERhdGUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1maXhlZER1cmF0aW9uKVxuICAgICAqL1xuICAgIGZpeGVkRHVyYXRpb24gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFtmbGV4XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZmxleCkgc3R5bGUuXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBhIHNpbmdsZSBudW1iZXIgb3IgYSBgJmx0O2ZsZXgtZ3JvdyZndDsgJmx0O2ZsZXgtc2hyaW5rJmd0OyAmbHQ7ZmxleC1iYXNpcyZndDtgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGBmbGV4LWdyb3dgIHZhbHVlLlxuICAgICAqL1xuICAgIGZsZXggPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIG1vdmUgdGhlIHdpZGdldCBvdXQgb2YgdGhlIGRvY3VtZW50IGZsb3cgYW5kIHBvc2l0aW9uIGl0XG4gICAgICogYWJzb2x1dGVseSBpbiBicm93c2VyIHZpZXdwb3J0IHNwYWNlLlxuICAgICAqL1xuICAgIGZsb2F0aW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlnIG9iamVjdCBvZiBhIGZvb3Rlci4gTWF5IGNvbnRhaW4gYSBgZG9ja2AsIGBodG1sYCBhbmQgYSBgY2xzYCBwcm9wZXJ0eS4gQSBmb290ZXIgaXMgbm90IGEgd2lkZ2V0LFxuICAgICAqIGJ1dCByYXRoZXIgcGxhaW4gSFRNTCB0aGF0IGZvbGxvd3MgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGFuZWwncyBib2R5IGFuZCBbc3RyaXBzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1mb290ZXIpXG4gICAgICovXG4gICAgZm9vdGVyID8gOiB7XG4gICAgICAgIGRvY2s/OiAndG9wJ3wncmlnaHQnfCdib3R0b20nfCdsZWZ0J3wnc3RhcnQnfCdlbmQnXG4gICAgICAgIGh0bWw/OiBzdHJpbmdcbiAgICAgICAgY2xzPzogc3RyaW5nXG4gICAgfXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIEZ1bmN0aW9uIChvciBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkpIHdoaWNoIHJldHVybnMgdGhlXG4gICAgICogW3Jlc291cmNlIHJlY29yZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvUmVzb3VyY2VNb2RlbCkgdG8gdXNlIHRvIGNyZWF0ZSB0aGUgVUkgZm9yIGFuIGV2ZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1nZXRQcmltYXJ5UmVzb3VyY2UpXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnRSZWNvcmQgVGhlIGV2ZW50IGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgcHJpbWFyeSByZXNvdXJjZS5cbiAgICAgKiBAcmV0dXJucyB7U2NoZWR1bGVyLm1vZGVsLlJlc291cmNlTW9kZWx9IFRoZSByZXNvdXJjZSB0byBiZSB1c2VkIHRvIHJlbmRlciB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgZ2V0UHJpbWFyeVJlc291cmNlID8gOiAoKGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsKSA9PiBSZXNvdXJjZU1vZGVsKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBIb3cgbXVjaCBzcGFjZSB0byBsZWF2ZSBlbXB0eSBhdCB0aGUgcmlnaHQgc2lkZSBvZiBkYXkgY29sdW1ucyB0byBhbGxvdyBpbnRlcmFjdGlvbiBzdWNoIGFzXG4gICAgICogZG91YmxlIGNsaWNrIG9yIGRyYWcuXG4gICAgICovXG4gICAgZ3V0dGVyV2lkdGggPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBbb2JqZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI3R5cGVkZWYtUGFuZWxIZWFkZXIpIGZvciB0aGUgcGFuZWwncyBoZWFkZXIgb3IgYSBzdHJpbmcgaW4gcGxhY2Ugb2YgYSBgdGl0bGVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1oZWFkZXIpXG4gICAgICovXG4gICAgaGVhZGVyID8gOiBzdHJpbmd8Ym9vbGVhbnxQYW5lbEhlYWRlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIGhlaWdodCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUuaGVpZ2h0YC4gRWl0aGVyIHNwZWNpZnkgYSB2YWxpZCBoZWlnaHQgc3RyaW5nIG9yIGEgbnVtYmVyLFxuICAgICAqIHdoaWNoIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgaGVpZ2h0LCBidXQgaW4gc29tZVxuICAgICAqIGNhc2VzIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgaGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHdpdGggdHJ1ZSB0byBtYWtlIHdpZGdldCBpbml0aWFsbHkgaGlkZGVuLlxuICAgICAqL1xuICAgIGhpZGRlbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWhpZGVBbmltYXRpb24pXG4gICAgICovXG4gICAgaGlkZUFuaW1hdGlvbiA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIHRvIGhpZGUgdGhlIGJvcmRlcnMgYmV0d2VlbiBjZWxscy5cbiAgICAgKi9cbiAgICBoaWRlQm9yZGVycyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGB0cnVlYCB0byBoaWRlIGRheSBjb2x1bW5zIHdoaWNoIGNvbnRhaW4gbm8gZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1oaWRlRW1wdHlEYXlzKVxuICAgICAqL1xuICAgIGhpZGVFbXB0eURheXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIHRvIGhpZGUgZW1wdHkgaG91ciByb3dzIGluIHRoaXMgZGF5IGFnZW5kYS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctaGlkZUVtcHR5SG91cnMpXG4gICAgICovXG4gICAgaGlkZUVtcHR5SG91cnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGhpZGUgW25vbldvcmtpbmdEYXlzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1ub25Xb3JraW5nRGF5cylcbiAgICAgKi9cbiAgICBoaWRlTm9uV29ya2luZ0RheXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyB0byB0cnVlIHRvIGhpZGUgdGhlIHRpbWUgY2VsbHMgaW4gdGhlIGRheSBjb2x1bW5zLlxuICAgICAqL1xuICAgIGhpZGVUaW1lQXhpcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIG1ha2UgdGhpcyBjb250YWluZXIgaGlkZSB3aGVuIGl0IGhhcyBubyB2aXNpYmxlIGNoaWxkcmVuIChFaXRoZXIgZW1wdHlcbiAgICAgKiBvciBhbGwgY2hpbGRyZW4gaGlkZGVuKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctaGlkZVdoZW5FbXB0eSlcbiAgICAgKi9cbiAgICBoaWRlV2hlbkVtcHR5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIGhlaWdodCA8c3Ryb25nPmluIHBpeGVsczwvc3Ryb25nPiBvZiBhbiAqZW1wdHkqIGhvdXIgcm93LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1ob3VySGVpZ2h0KVxuICAgICAqL1xuICAgIGhvdXJIZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IHdoaWNoIGVuY2Fwc3VsYXRlcyBhIHNldCBvZiBbaG91ckhlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaG91ckhlaWdodCkgYnJlYWtwb2ludHMgd2hpY2hcbiAgICAgKiBkaWN0YXRlIHdoZW4gc3VidGlja3MgLSBpbnRlcnZlbmluZyB0aW1lIGluZGljYXRvcnMgLSBhcmUgaW50cm9kdWNlZCBpbnRvIHRoZSBEYXlWaWV3J3NcbiAgICAgKiB0aW1lIGF4aXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWhvdXJIZWlnaHRCcmVha3BvaW50cylcbiAgICAgKi9cbiAgICBob3VySGVpZ2h0QnJlYWtwb2ludHMgPyA6IG51bWJlcltdXG4gICAgLyoqXG4gICAgICogSG93IG11Y2ggdmVydGljYWwgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZSBob3VyIGNlbGxzLlxuICAgICAqL1xuICAgIGhvdXJTcGFjaW5nID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gaWNvbiB0byBzaG93IGJlZm9yZSB0aGUgW3RpdGxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy10aXRsZSkuIEVpdGhlciBwYXNzIGEgQ1NTIGNsYXNzIGFzIGEgc3RyaW5nLCBvciBwYXNzIGFcbiAgICAgKiBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgb2JqZWN0IGRlc2NyaWJpbmcgYW4gZWxlbWVudCB0byByZXByZXNlbnQgdGhlIGljb24uXG4gICAgICovXG4gICAgaWNvbiA/IDogc3RyaW5nfERvbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFdpZGdldCBpZCwgaWYgbm90IHNwZWNpZmllZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuIEFsc28gdXNlZCBmb3IgbG9va3VwcyB0aHJvdWdoIFdpZGdldC5nZXRCeUlkXG4gICAgICovXG4gICAgaWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIHdpZGdldHMgcmVhZC1vbmx5IHN0YXRlIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IGl0cyBwYXJlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWlnbm9yZVBhcmVudFJlYWRPbmx5KVxuICAgICAqL1xuICAgIGlnbm9yZVBhcmVudFJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byBhbGlnbiBpbnB1dCBmaWVsZHMgb2YgY2hpbGQgd2lkZ2V0cy4gQnkgZGVmYXVsdCwgdGhlIEZpZWxkIGlucHV0IGVsZW1lbnQgaXNcbiAgICAgKiBwbGFjZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBgbGFiZWxgLiBJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIGlucHV0IGZpZWxkcyBhbGlnbmVkIHRvIHRoZVxuICAgICAqIHJpZ2h0LCBzZXQgdGhpcyBjb25maWcgdG8gYCdlbmQnYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctaW5wdXRGaWVsZEFsaWduKVxuICAgICAqL1xuICAgIGlucHV0RmllbGRBbGlnbiA/IDogJ3N0YXJ0J3wnZW5kJ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGluc2VydCB0aGlzIHdpZGdldCBiZWZvcmUuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICovXG4gICAgaW5zZXJ0QmVmb3JlID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhcHBlbmQgdGhpcyB3aWRnZXQgZWxlbWVudCB0bywgYXMgYSBmaXJzdCBjaGlsZC4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRGaXJzdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgZHJhZy1tb3ZpbmcgYW4gZXZlbnQgYWxsb3dzIHRoZSBkcmFnIGdlc3R1cmUgdG8gbW92ZSB0aGUgZXZlbnQgaW50byBvdGhlciBkYXkgY29sdW1ucy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctaW50ZXJEYXlEcmFnKVxuICAgICAqL1xuICAgIGludGVyRGF5RHJhZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGRyYWctcmVzaXppbmcgYW4gZXZlbnQgKGluY2x1ZGluZyBjcmVhdGluZyBhIG5ldyBldmVudCkgYWxsb3dzIHRoZSBkcmFnIGdlc3R1cmUgdG8gc3BhbiBtdWx0aXBsZSBkYXlcbiAgICAgKiBjb2x1bW5zIHRvIG1ha2UgdGhlIGV2ZW50IGFuIGludGVyIGRheSBldmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctaW50ZXJEYXlSZXNpemUpXG4gICAgICovXG4gICAgaW50ZXJEYXlSZXNpemUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBDU1MgY2xhc3MgdG8gYWRkIHRvIGNoaWxkIGl0ZW1zIG9mIHRoaXMgY29udGFpbmVyLlxuICAgICAqL1xuICAgIGl0ZW1DbHMgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHR5cGVkIGNoaWxkIHdpZGdldCBjb25maWcgb2JqZWN0cyBvciBXaWRnZXRzLiBNYXkgYWxzbyBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhbiBhcnJheS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctaXRlbXMpXG4gICAgICovXG4gICAgaXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUVudHJ5PnwoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtRW50cnl8V2lkZ2V0KVtdXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIHRoZSBba2V5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkpIG5hbWVcbiAgICAgKiBhbmQgb3B0aW9uYWwgbW9kaWZpZXIgcHJlZml4ZXM6IGAnQ3RybCsnYCwgYCdBbHQrJ2AsIGAnTWV0YSsnYCwgYW5kIGAnU2hpZnQrJ2AgKGNhc2UtaW5zZW5zaXRpdmUpLiBUaGUgdmFsdWVzXG4gICAgICogYXJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YW5jZSBtZXRob2QgdG8gY2FsbCB3aGVuIHRoZSBrZXlzdHJva2UgaXMgcmVjZWl2ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWtleU1hcClcbiAgICAgKi9cbiAgICBrZXlNYXAgPyA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzZXR0aW5nIHRvIHVzZSBzYW1lIGxhYmVsIHBsYWNlbWVudCBvbiBhbGwgY2hpbGQgd2lkZ2V0cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctbGFiZWxQb3NpdGlvbilcbiAgICAgKi9cbiAgICBsYWJlbFBvc2l0aW9uID8gOiAnYmVmb3JlJ3wnYWJvdmUnfCdhbGlnbi1iZWZvcmUnfCdhdXRvJ3xudWxsXG4gICAgLyoqXG4gICAgICogVGhlIHNob3J0IG5hbWUgb2YgYSBoZWxwZXIgY2xhc3Mgd2hpY2ggbWFuYWdlcyByZW5kZXJpbmcgYW5kIHN0eWxpbmcgb2YgY2hpbGQgaXRlbXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWxheW91dClcbiAgICAgKi9cbiAgICBsYXlvdXQgPyA6IHN0cmluZ3xDYWxlbmRhckNvbnRhaW5lckxheW91dENvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBDU1Mgc3R5bGUgcHJvcGVydGllcyB0byBhcHBseSB0byB0aGUgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWxheW91dFN0eWxlKVxuICAgICAqL1xuICAgIGxheW91dFN0eWxlID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBbY2hpbGQgaXRlbV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKSAqY29uZmlnIG9iamVjdHMqIHdoaWNoIGlzIHRvIGJlIGNvbnZlcnRlZCBpbnRvXG4gICAgICogaW5zdGFuY2VzIG9ubHkgd2hlbiB0aGlzIENvbnRhaW5lciBpcyByZW5kZXJlZCwgcmF0aGVyIHRoYW4gZWFnZXJseSBhdCBjb25zdHJ1Y3QgdGltZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctbGF6eUl0ZW1zKVxuICAgICAqL1xuICAgIGxhenlJdGVtcyA/IDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnPnxDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWdbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0ZW5lciBzZXQgZm9yIHRoaXMgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1saXN0ZW5lcnMpXG4gICAgICovXG4gICAgbGlzdGVuZXJzID8gOiBEYXlBZ2VuZGFWaWV3TGlzdGVuZXJzXG4gICAgLyoqXG4gICAgICogQSBjbGFzcyB0cmFuc2xhdGlvbnMgb2Ygd2hpY2ggYXJlIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoaXMgZW50aXR5LlxuICAgICAqIFRoaXMgaXMgb2Z0ZW4gdXNlZCB3aGVuIHRyYW5zbGF0aW9ucyBvZiBhbiBpdGVtIGFyZSBkZWZpbmVkIG9uIGl0cyBjb250YWluZXIgY2xhc3MuXG4gICAgICogRm9yIGV4YW1wbGU6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWxvY2FsZUNsYXNzKVxuICAgICAqL1xuICAgIGxvY2FsZUNsYXNzID8gOiB0eXBlb2YgQmFzZVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJhbnNsYXRlZCBhdXRvbWF0aWNhbGx5IHVwb24gYSBsb2NhbGUgYXBwbHlpbmcuXG4gICAgICogSW4gY2FzZSB0aGVyZSBpcyBhIG5lZWQgdG8gbG9jYWxpemUgbm90IHR5cGljYWwgdmFsdWUgKG5vdCBhIFN0cmluZyB2YWx1ZSBvciBhIGZpZWxkIHdpdGggcmUtZGVmaW5lZCBzZXR0ZXIvZ2V0dGVyKSxcbiAgICAgKiB5b3UgY291bGQgdXNlICdsb2NhbGVLZXknIG1ldGEgY29uZmlndXJhdGlvbi5cbiAgICAgKiBFeGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1sb2NhbGl6YWJsZVByb3BlcnRpZXMpXG4gICAgICovXG4gICAgbG9jYWxpemFibGVQcm9wZXJ0aWVzID8gOiBzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIG1hcmdpbi4gVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBhIHNpbmdsZSBudW1iZXIgb3IgYSBgVFJCTGAgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyBwaXhlbHMuXG4gICAgICovXG4gICAgbWFyZ2luID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgb2JqZWN0IGNvbnRhaW5zIHRoZSBkZWZhdWx0cyBmb3IgdGhlIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNyZWF0ZWQgZm9yIHRoZVxuICAgICAqIFttYXNrZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tYXNrZWQpIGNvbmZpZy4gQW55IHByb3BlcnRpZXMgc3BlY2lmaWVkIGluIHRoZSBgbWFza2VkYCBjb25maWcgd2lsbCBvdmVycmlkZSB0aGVzZVxuICAgICAqIHZhbHVlcy5cbiAgICAgKi9cbiAgICBtYXNrRGVmYXVsdHMgPyA6IE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFwcGx5IHRoZSBkZWZhdWx0IG1hc2sgdG8gdGhlIHdpZGdldC4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgdGhlIG1hc2sgbWVzc2FnZSBvciBhXG4gICAgICogW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdC5cbiAgICAgKi9cbiAgICBtYXNrZWQgPyA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSBoZWlnaHQgdGhlIGFsbCBkYXkgZXZlbnQgcm93IGlzIGFsbG93ZWQgdG8gZ3JvdyB3aXRoaW4gdGhpcyB2aWV3XG4gICAgICogd2hlbiBpdCBpcyBleHBhbmRlZCB0byBzaG93IGFsbCBpdHMgXCJhbGwgZGF5XCIgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1tYXhBbGxEYXlIZWlnaHQpXG4gICAgICovXG4gICAgbWF4QWxsRGF5SGVpZ2h0ID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gZGF0ZSB0byB3aGljaCB0aGUgYGVuZERhdGVgIG9mIHRoaXMgdmlldyBtYXkgYmUgbmF2aWdhdGVkLlxuICAgICAqL1xuICAgIG1heERhdGUgPyA6IERhdGV8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtYXhIZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctbWF4aW1pemVPbk1vYmlsZSlcbiAgICAgKi9cbiAgICBtYXhpbWl6ZU9uTW9iaWxlID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1heFdpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIGRhdGUgdG8gd2hpY2ggdGhlIGBzdGFydERhdGVgIG9mIHRoaXMgdmlldyBtYXkgYmUgbmF2aWdhdGVkLlxuICAgICAqL1xuICAgIG1pbkRhdGUgPyA6IERhdGV8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gd2lkdGggb2YgYSBkYXkgY29sdW1uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1taW5EYXlXaWR0aClcbiAgICAgKi9cbiAgICBtaW5EYXlXaWR0aCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIGhlaWdodCB0byB3aGljaCBldmVudCBibG9ja3MgaW4gYSBkYXkgY2VsbCBtYXkgc2hyaW5rLiBJZiBhbiBldmVudCBoYXMgdmVyeVxuICAgICAqIHNob3J0IGR1cmF0aW9uLCB3aGF0ZXZlciB0aGUgW2hvdXJIZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWhvdXJIZWlnaHQpLCBhbmQgcmVnYXJkbGVzcyBvZlxuICAgICAqIFt0aW1lbGluZSB6b29taW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2Z1bmN0aW9uLXpvb21UbyksIHRoZSBldmVudCBibG9jayB3aWxsIG5ldmVyIGRyb3AgYmVsb3cgdGhpcyBoZWlnaHQuXG4gICAgICovXG4gICAgbWluRXZlbnRIZWlnaHQgPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSBldmVudCB3aWR0aCB3aGVuIFtldmVudEZsb3dEaXJlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLWV2ZW50Rmxvd0RpcmVjdGlvbikgaXMgYCdyb3cnYC5cbiAgICAgKi9cbiAgICBtaW5FdmVudFdpZHRoID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtaW5IZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluSGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gaGVpZ2h0IDxzdHJvbmc+aW4gcGl4ZWxzPC9zdHJvbmc+IHRvIGFsbG93IGEgem9vbSByZXF1ZXN0IHRvIHpvb20gb3V0IHRvLlxuICAgICAqL1xuICAgIG1pbkhvdXJIZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtaW5XaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluV2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgaXMgY29uZmlndXJlZCBhcyBgdHJ1ZWAgYSBbUmVzaXplT2JzZXJ2ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXNpemVPYnNlcnZlcilcbiAgICAgKiBpcyB1c2VkIHRvIG1vbml0b3IgdGhpcyBlbGVtZW50IGZvciBzaXplIGNoYW5nZXMgY2F1c2VkIGJ5IGVpdGhlciBzdHlsZSBtYW5pcHVsYXRpb24sIG9yIGJ5IENTU1xuICAgICAqIGxheW91dC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctbW9uaXRvclJlc2l6ZSlcbiAgICAgKi9cbiAgICBtb25pdG9yUmVzaXplID8gOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0IGNvbmZpZyBvYmplY3RzIHdoaWNoIG1heSBiZSByZWZlcmVuY2VkIGJ5IG5hbWUgaW4gdGhlIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKVxuICAgICAqIGNvbmZpZy4gRm9yIGV4YW1wbGUsIGEgc3BlY2lhbGl6ZWQgW01lbnVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWVudSkgc3ViY2xhc3MgbWF5IGhhdmUgYSBgbmFtZWRJdGVtc2AgZGVmYXVsdFxuICAgICAqIHZhbHVlIGRlZmluZWQgbGlrZSB0aGlzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1uYW1lZEl0ZW1zKVxuICAgICAqL1xuICAgIG5hbWVkSXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz5cbiAgICAvKipcbiAgICAgKiBUZXh0IG9yIEhUTUwsIG9yIGEgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGJsb2NrIHRvIGRpc3BsYXkgd2hlbiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGhhdmUgYmVlbiBmaWx0ZXJlZCBvdXQuXG4gICAgICovXG4gICAgbm9NYXRjaGluZ0RhdGVzID8gOiBzdHJpbmd8RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogTm9uLXdvcmtpbmcgZGF5cyBhcyBhbiBvYmplY3Qgd2hlcmUga2V5cyBhcmUgZGF5IGluZGljZXMsIDAtNiAoU3VuZGF5LVNhdHVyZGF5KSwgYW5kIHRoZSB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogRGVmYXVsdHMgdG8gW25vbldvcmtpbmdEYXlzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIjcHJvcGVydHktbm9uV29ya2luZ0RheXMtc3RhdGljKS5cbiAgICAgKi9cbiAgICBub25Xb3JraW5nRGF5cyA/IDogUmVjb3JkPG51bWJlciwgYm9vbGVhbj5cbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBvYmplY3QgdXNlZCB0byBjcmVhdGUgdGhlIFtPdmVyZmxvd1BvcHVwXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9PdmVyZmxvd1BvcHVwKSB0aGF0IHRoZVxuICAgICAqIFthbGxEYXlFdmVudHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjcHJvcGVydHktYWxsRGF5RXZlbnRzKSBtYXkgc2hvdyB3aGVuIGV2ZW50cyBmb3Igb25lIGRheSBvdmVyZmxvdyB0aGUgYXZhaWxhYmxlIHNwYWNlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1vdmVyZmxvd1BvcHVwKVxuICAgICAqL1xuICAgIG92ZXJmbG93UG9wdXAgPyA6IE92ZXJmbG93UG9wdXBDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIFdpZGdldCBvZiB0aGlzIFdpZGdldC4gSWYgdGhpcyBXaWRnZXQgaXMgZGlyZWN0bHkgY29udGFpbmVkICh0aGF0IGlzLCBpdCBpcyBvbmUgb2YgdGhlXG4gICAgICogW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1pdGVtcykgb2YgYSBDb250YWluZXIpLCB0aGlzIGNvbmZpZyB3aWxsIGJlIGlnbm9yZWQuIEluIHRoaXMgY2FzZVxuICAgICAqIHRoZSBvd25lciBpcyA8c3Ryb25nPmFsd2F5czwvc3Ryb25nPiB0aGUgZW5jYXBzdWxhdGluZyBDb250YWluZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLW93bmVyKVxuICAgICAqL1xuICAgIG93bmVyID8gOiBXaWRnZXR8YW55XG4gICAgLyoqXG4gICAgICogVGhlIGNsYXNzIG5hbWUgdG8gYWRkIHRvIGV2ZW50cyB3aGljaCBoYXZlIGFuIGVuZCBkYXRlIGluIHRoZSBwYXN0LiBEZWZhdWx0cyB0byBgJ2ItcGFzdC1ldmVudCdgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1wYXN0RXZlbnRDbHMpXG4gICAgICovXG4gICAgcGFzdEV2ZW50Q2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHdoZW4gYSB3aWRnZXQgaXMgcmVuZGVyZWQgaW50byBhbm90aGVyIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLCBidXQgbXVzdFxuICAgICAqIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0IG9mIHRoYXQgd2lkZ2V0LCBhbmQgbXVzdCBiZSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhhdFxuICAgICAqIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1wb3NpdGlvbmVkKVxuICAgICAqL1xuICAgIHBvc2l0aW9uZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IHRvb2x0aXAgZnJvbSBiZWluZyBkaXNwbGF5ZWQgb24gdG91Y2ggZGV2aWNlcy4gVXNlZnVsIGZvciBleGFtcGxlIGZvciBidXR0b25zIHRoYXQgZGlzcGxheSBhXG4gICAgICogbWVudSBvbiBjbGljayBldGMsIHNpbmNlIHRoZSB0b29sdGlwIHdvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAqL1xuICAgIHByZXZlbnRUb29sdGlwT25Ub3VjaCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW1lIHJhbmdlIGFyb3VuZCB0aGUgW2RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RhdGVSYW5nZU93bmVyI2NvbmZpZy1kYXRlKSB0byBkaXNwbGF5IGV2ZW50cyBmb3IuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLXJhbmdlKVxuICAgICAqL1xuICAgIHJhbmdlID8gOiBzdHJpbmd8RHVyYXRpb25Db25maWdcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgd2lkZ2V0IGlzIHJlYWQtb25seS4gIFRoaXMgaXMgb25seSB2YWxpZCBpZiB0aGUgd2lkZ2V0IGlzIGFuIGlucHV0XG4gICAgICogZmllbGQsIDxzdHJvbmc+b3IgY29udGFpbnMgaW5wdXQgZmllbGRzIGF0IGFueSBkZXB0aDwvc3Ryb25nPi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWl0aGVyIGEgZGVmYXVsdCBgcmVuZGl0aW9uYCB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cywgb3IgYSBtYXAgb2YgcmVuZGl0aW9ucyBrZXllZCBieSBjaGlsZCB3aWRnZXRcbiAgICAgKiBgdHlwZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLXJlbmRpdGlvbilcbiAgICAgKi9cbiAgICByZW5kaXRpb24gPyA6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fG51bGxcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGxvYWQgcmVzb3VyY2UgaW1hZ2VzIGZyb20uIFVzZWQgYnkgdGhlIFtzaG93UmVzb3VyY2VBdmF0YXJzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG93UmVzb3VyY2VBdmF0YXJzKSBjb25maWdcbiAgICAgKiB0byBjcmVhdGUgVVJMcyB1c2luZyB0aGUgcmVzb3VyY2Unc1xuICAgICAqIFtpbWFnZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvUmVzb3VyY2VNb2RlbCNmaWVsZC1pbWFnZSkgb3JcbiAgICAgKiBbaW1hZ2VVcmxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL1Jlc291cmNlTW9kZWwjZmllbGQtaW1hZ2VVcmwpIGZpZWxkczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctcmVzb3VyY2VJbWFnZVBhdGgpXG4gICAgICovXG4gICAgcmVzb3VyY2VJbWFnZVBhdGggPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFyaW91cyByZXNwb25zaXZlIHN0YXRlIG9iamVjdHMga2V5ZWQgYnkgdGhlaXIgbmFtZS4gRWFjaCBrZXkgKGV4Y2VwdCBgJyonYCwgc2VlIGJlbG93KSBpblxuICAgICAqIHRoaXMgb2JqZWN0IGlzIGEgc3RhdGUgbmFtZSAoc2VlIFtyZXNwb25zaXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vUmVzcG9uc2l2ZSNjb25maWctcmVzcG9uc2l2ZVN0YXRlKSkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIHRoZVxuICAgICAqIGFzc29jaWF0ZWQgW1Jlc3BvbnNpdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI3R5cGVkZWYtUmVzcG9uc2l2ZVN0YXRlKSBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLXJlc3BvbnNpdmUpXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZSA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBtYXJrIHRoaXMgaW5zdGFuY2UgYXMgdGhlIGRlZmF1bHQgW3Jlc3BvbnNpdmVUYXJnZXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vUmVzcG9uc2l2ZSNjb25maWctcmVzcG9uc2l2ZVRhcmdldCkgZm9yIGRlc2NlbmRhbnRzIHRoYXQgZG9cbiAgICAgKiBub3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBbcmVzcG9uc2l2ZVRhcmdldF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlVGFyZ2V0KSBvZiB0aGVpciBvd24uXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZVJvb3QgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBbcmVzcG9uc2l2ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlKSBjb25maWcuIFRoaXMgaXMgYXNzaWduZWQgaW50ZXJuYWxseVxuICAgICAqIGFuZCBzaG91bGQgbm90IGJlIGFzc2lnbmVkIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIHJlc3BvbnNpdmVTdGF0ZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIHdpZGdldCB3aG9zZSBzaXplIGFuZCBvdGhlciBwcm9wZXJ0aWVzIGRyaXZlIHRoaXMgb2JqZWN0J3MgcmVzcG9uc2l2ZSBiZWhhdmlvci4gSWYgdGhpcyBjb25maWcgaXMgbm90XG4gICAgICogc3BlY2lmaWVkLCB0aGUgY2xvc2VzdCBhbmNlc3RvciB0aGF0IHNwZWNpZmllZCBbcmVzcG9uc2l2ZVJvb3Q9dHJ1ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlUm9vdCkgd2lsbCBiZVxuICAgICAqIHVzZWQuIElmIHRoZXJlIGlzIG5vIHN1Y2ggYW5jZXN0b3IsIHRoZW4gdGhlIGluc3RhbmNlIHVzaW5nIHRoaXMgbWl4aW4gaXMgdXNlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctcmVzcG9uc2l2ZVRhcmdldClcbiAgICAgKi9cbiAgICByZXNwb25zaXZlVGFyZ2V0ID8gOiBzdHJpbmd8V2lkZ2V0XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBjb21wb25lbnQgZGlzcGxheSBhIHRyYW5zbHVjZW50IHJpcHBsZSB3aGVuIGl0c1xuICAgICAqIFtmb2N1c0VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWZvY3VzRWxlbWVudCksIG9yIFtlbGVtZW50XSgjQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIHRhcHBlZCA8ZW0+aWYgdGhlXG4gICAgICogY3VycmVudCB0aGVtZSBzdXBwb3J0cyByaXBwbGVzPC9lbT4uIE91dCBvZiB0aGUgYm94LCBvbmx5IHRoZSBNYXRlcmlhbCB0aGVtZSBzdXBwb3J0cyByaXBwbGVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1yaXBwbGUpXG4gICAgICovXG4gICAgcmlwcGxlID8gOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSByZW5kZXJpbmcgdGhpcyB3aWRnZXQgdG8gYSBzaGFkb3cgcm9vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgdGhpcyBjb25maWcgdG8gdGhlIHNoYWRvd1Jvb3QuIElmIG5vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgaXQgdG8gYGRvY3VtZW50LmJvZHlgXG4gICAgICovXG4gICAgcm9vdEVsZW1lbnQgPyA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnRcbiAgICAvKipcbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGB0cnVlYCB0byBtYWtlIHRoZSB3aWRnZXQncyBlbGVtZW50IHVzZSB0aGUgYGRpcmVjdGlvbjpydGxgIHN0eWxlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgKGFuZCBvcHRpb25hbGx5IGluIHdoaWNoIGF4ZXMpIGEgV2lkZ2V0IG1heSBzY3JvbGwuIGB0cnVlYCBtZWFucyB0aGlzIHdpZGdldCBtYXkgc2Nyb2xsXG4gICAgICogaW4gYm90aCBheGVzLiBNYXkgYmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYm9vbGVhbiBgb3ZlcmZsb3dYYCBhbmQgYG92ZXJmbG93WWAgcHJvcGVydGllcyB3aGljaCBhcmVcbiAgICAgKiBhcHBsaWVkIHRvIENTUyBzdHlsZSBwcm9wZXJ0aWVzIGBvdmVyZmxvd1hgIGFuZCBgb3ZlcmZsb3dZYC4gSWYgdGhleSBhcmUgYm9vbGVhbiwgdGhleSBhcmUgdHJhbnNsYXRlZCB0b1xuICAgICAqIENTUyBvdmVyZmxvdyBwcm9wZXJ0aWVzIHRodXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLXNjcm9sbGFibGUpXG4gICAgICovXG4gICAgc2Nyb2xsYWJsZSA/IDogYm9vbGVhbnxTY3JvbGxlckNvbmZpZ3xTY3JvbGxlclxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hhdCB0byBkbyBpZiBkb2N1bWVudCBpcyBzY3JvbGxlZCB3aGlsZSBXaWRnZXQgaXMgdmlzaWJsZSAob25seSByZWxldmFudCB3aGVuIGZsb2F0aW5nIGlzIHNldCB0byBgdHJ1ZWApLlxuICAgICAqIFZhbGlkIHZhbHVlczogwrRudWxswrQ6IGRvIG5vdGhpbmcsIMK0aGlkZcK0OiBoaWRlIHRoZSB3aWRnZXQgb3IgwrRyZWFsaWduwrQ6IHJlYWxpZ24gdG8gdGhlIHRhcmdldCBpZiBwb3NzaWJsZS5cbiAgICAgKi9cbiAgICBzY3JvbGxBY3Rpb24gPyA6ICdoaWRlJ3wncmVhbGlnbid8bnVsbFxuICAgIC8qKlxuICAgICAqIEEgYnV0dG9uIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIHVzZSBmb3IgdGhlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBtb2RlIHNlbGVjdG9yIGJ1dHRvbiBmb3IgdGhpcyBtb2RlLlxuICAgICAqL1xuICAgIHNlbGVjdG9yQnV0dG9uID8gOiBCdXR0b25Db25maWdcbiAgICAvKipcbiAgICAgKiBBIG1lbnUgaXRlbSBjb25maWd1cmF0aW9uIG9iamVjdCB0byB1c2UgZm9yIHRoZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgbW9kZSBzZWxlY3RvciBtZW51IGl0ZW0gZm9yIHRoaXMgbW9kZS5cbiAgICAgKi9cbiAgICBzZWxlY3Rvck1lbnVJdGVtID8gOiBNZW51SXRlbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW1lIHJhbmdlIHRvIG1vdmUgYnkgd2hlbiBbbmV4dF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vRGF0ZVJhbmdlT3duZXIjZnVuY3Rpb24tbmV4dCkgb3IgW3ByZXZpb3VzXSgjQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RhdGVSYW5nZU93bmVyI2Z1bmN0aW9uLXByZXZpb3VzKSBpcyBjYWxsZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLXNoaWZ0SW5jcmVtZW50KVxuICAgICAqL1xuICAgIHNoaWZ0SW5jcmVtZW50ID8gOiBzdHJpbmd8RHVyYXRpb25Db25maWdcbiAgICAvKipcbiAgICAgKiBBIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gdG8gdXNlIHRvIGNyZWF0ZSBkYXRlIG91dHB1dCBmb3JcbiAgICAgKiBhYmJyZXZpYXRlZCB2aWV3IGRlc2NyaXB0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBzaG9ydERhdGVGb3JtYXQgPyA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZylcbiAgICAvKipcbiAgICAgKiBBIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gdG8gdXNlIHRvIGNyZWF0ZSBkYXRlIGFuZCB0aW1lIG91dHB1dCBmb3JcbiAgICAgKiBhYmJyZXZpYXRlZCB2aWV3IGRlc2NyaXB0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBzaG9ydERhdGVUaW1lRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogU2hvd3MgYW4gYWxsIGRheSBoZWFkZXIgYWJvdmUgdGhlIG1haW4gc2NoZWR1bGUgZm9yIEFsbCBEYXkgZXZlbnRzLlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBzaG93IGFsbCBkYXksIG9yIG11bHRpLWRheSBldmVudHMgaW4gYW4gYWxsIGRheSBoZWFkZXIsIGJ1dFxuICAgICAqIHRvIGhhdmUgdGhlbSBzaG93aW5nIHdyYXBwaW5nIHRocm91Z2ggdGhlIGRheSBjZWxscy5cbiAgICAgKi9cbiAgICBzaG93QWxsRGF5SGVhZGVyID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctc2hvd0FuaW1hdGlvbilcbiAgICAgKi9cbiAgICBzaG93QW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIDxzdHJvbmc+Tm90IGFwcGxpY2FibGUgaW4gYSBgRGF5Vmlld2A8L3N0cm9uZz5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctc2hvd0J1bGxldClcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGJhciBUaGlzIGlzIGBmYWxzZWAgYnkgZGVmYXVsdC4gU2V0IHRoaXMgdG8gYHRydWVgIGluIG1vZGVzIHdoZXJlIGEgc29saWQgZXZlbnQgYmFyIHNob3VsZCBzaG93IGEgYnVsbGV0IGljb25cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5vQmFyIFRoaXMgaXMgYHRydWVgIGJ5IGRlZmF1bHQuIEV2ZW50cyB3aXRoIG5vIGJhY2tncm91bmQgY29sb3VyLCB1c2UgdGhpcyB0byBzaG93IHRoZSBldmVudCdzIGRlZmluZWQgYGV2ZW50Q29sb3JgXG4gICAgICovXG4gICAgc2hvd0J1bGxldCA/IDogYm9vbGVhbnx7YmFyPzogYm9vbGVhbiwgbm9CYXI/OiBib29sZWFufVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gc2hvdyBhdmF0YXJzIG9mIHRoZSBhc3NpZ25lZCByZXNvdXJjZXMgKGNhbGVuZGFycykgYXQgdGhlXG4gICAgICogc3RhcnQgb2YgdGhlIGV2ZW50IGJhci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctc2hvd1Jlc291cmNlQXZhdGFycylcbiAgICAgKi9cbiAgICBzaG93UmVzb3VyY2VBdmF0YXJzID8gOiBib29sZWFufHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgZmFsc2VgIHRvIGhpZGUgdGhlIHN0YXJ0IHRpbWUgbm9ybWFsbHkgc2hvd24gYXQgdGhlIHRvcCBvZiB0aGUgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1zaG93VGltZSlcbiAgICAgKi9cbiAgICBzaG93VGltZSA/IDogYm9vbGVhbnxSZWNvcmQ8KCdzdGFydFRpbWUnfCdlbmRUaW1lJ3wnZHVyYXRpb24nKSwgYm9vbGVhbnxzdHJpbmd8RnVuY3Rpb24+XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgdGhlIHRvb2x0aXAgd2hlbiB0aGlzIHdpZGdldCBpcyBbZGlzYWJsZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWRpc2FibGVkKVxuICAgICAqL1xuICAgIHNob3dUb29sdGlwV2hlbkRpc2FibGVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQWZmZWN0cyBkcmFnIGRyb3AgYW5kIG1vdmluZyBvZiBldmVudHMgd2l0aCByZWdhcmQgdG8gdGhlIFtpbmNyZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjcHJvcGVydHktaW5jcmVtZW50KVxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1zbmFwUmVsYXRpdmVUb0V2ZW50U3RhcnREYXRlKVxuICAgICAqL1xuICAgIHNuYXBSZWxhdGl2ZVRvRXZlbnRTdGFydERhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIGhvdyBtYW55IGNvbHVtbnMgdG8gc3BhbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBzcGFuID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIHN0YWNrIG11bHRpLWRheSBldmVudHMgd2l0aGluIGVhY2ggY2VsbCBpbiB0aGUgb3JkZXIgb2YgdGhlaXIgc3RhcnQgdGltZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctc3RhY2tNdWx0aURheUV2ZW50cylcbiAgICAgKi9cbiAgICBzdGFja011bHRpRGF5RXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXJ0IGRhdGUgKFRpbWUgY29tcG9uZW50IGlzIHplcm9lZCkgb2YgdGhpcyB2aWV3LlxuICAgICAqL1xuICAgIHN0YXJ0RGF0ZSA/IDogRGF0ZVxuICAgIC8qKlxuICAgICAqIFRoaXMgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1zdGF0ZWZ1bClcbiAgICAgKi9cbiAgICBzdGF0ZWZ1bCA/IDogYm9vbGVhbnxvYmplY3R8c3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnRzIHRoYXQsIHdoZW4gZmlyZWQgYnkgdGhpcyBjb21wb25lbnQsIHNob3VsZCB0cmlnZ2VyIGl0IHRvIHNhdmUgaXRzIHN0YXRlIGJ5IGNhbGxpbmdcbiAgICAgKiBbc2F2ZVN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjZnVuY3Rpb24tc2F2ZVN0YXRlKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctc3RhdGVmdWxFdmVudHMpXG4gICAgICovXG4gICAgc3RhdGVmdWxFdmVudHMgPyA6IG9iamVjdHxzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgdG8gdXNlIHdoZW4gc2F2aW5nIHRoaXMgb2JqZWN0J3Mgc3RhdGUgaW4gdGhlIFtzdGF0ZVByb3ZpZGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjY29uZmlnLXN0YXRlUHJvdmlkZXIpLiBJZiB0aGlzIGNvbmZpZyBpc1xuICAgICAqIG5vdCBhc3NpZ25lZCwgYW5kIFtzdGF0ZWZ1bF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2NvbmZpZy1zdGF0ZWZ1bCkgaXMgbm90IHNldCB0byBgZmFsc2VgLCB0aGUgW2lkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1pZClcbiAgICAgKiAoaWYgZXhwbGljaXRseSBzcGVjaWZpZWQpIHdpbGwgYmUgdXNlZCBhcyB0aGUgYHN0YXRlSWRgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1zdGF0ZUlkKVxuICAgICAqL1xuICAgIHN0YXRlSWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBgU3RhdGVQcm92aWRlcmAgdG8gdXNlIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhpcyBvYmplY3QncyBbc3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNwcm9wZXJ0eS1zdGF0ZSkuIEJ5IGRlZmF1bHQsIGBzdGF0ZWBcbiAgICAgKiB3aWxsIGJlIHNhdmVkIHVzaW5nIHRoZSBbZGVmYXVsdCBzdGF0ZSBwcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3N0YXRlL1N0YXRlUHJvdmlkZXIjcHJvcGVydHktaW5zdGFuY2Utc3RhdGljKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctc3RhdGVQcm92aWRlcilcbiAgICAgKi9cbiAgICBzdGF0ZVByb3ZpZGVyID8gOiBTdGF0ZVByb3ZpZGVyXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gbWF0Y2ggZmllbGRzIGJ5IHRoZWlyIGBuYW1lYCBwcm9wZXJ0eSBvbmx5IHdoZW4gYXNzaWduaW5nIGEgW3JlY29yZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLXJlY29yZCksXG4gICAgICogd2l0aG91dCBmYWxsaW5nIGJhY2sgdG8gYHJlZmAuXG4gICAgICovXG4gICAgc3RyaWN0UmVjb3JkTWFwcGluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHdpZGdldHMga2V5ZWQgYnkgbmFtZS4gQnkgZGVmYXVsdCAod2hlbiBubyBgdHlwZWAgaXMgZ2l2ZW4pLCBzdHJpcHMgYXJlXG4gICAgICogW3Rvb2xiYXJzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIpLiBJZiB5b3Ugd2FudCB0byBwYXNzIGFuIGFycmF5LCB5b3UgY2FuIHVzZVxuICAgICAqIHRoZSB0b29sYmFyJ3MgW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctaXRlbXMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1zdHJpcHMpXG4gICAgICovXG4gICAgc3RyaXBzID8gOiBSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWc+XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnZlcnNlIG9mIFtzeW5jVmlld0RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jcHJvcGVydHktc3luY1ZpZXdEYXRlKVxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1zeW5jQ2FsZW5kYXJEYXRlKVxuICAgICAqL1xuICAgIHN5bmNDYWxlbmRhckRhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0IHRoZSBob3VycyBhY3Jvc3MgYSBtdWx0aXBsZSBkYXkgdmlldyBtYXkgaGF2ZSBkaWZmZXJlbnQgaGVpZ2h0cyBiZWNhdXNlIG9mIGRpZmZlcmVudFxuICAgICAqIGV2ZW50IGxvYWRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy1zeW5jSG91ckhlaWdodHMpXG4gICAgICovXG4gICAgc3luY0hvdXJIZWlnaHRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnZlcnNlIG9mIFtzeW5jQ2FsZW5kYXJEYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI3Byb3BlcnR5LXN5bmNDYWxlbmRhckRhdGUpXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLXN5bmNWaWV3RGF0ZSlcbiAgICAgKi9cbiAgICBzeW5jVmlld0RhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBbdGFiXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYikgY3JlYXRlZCBmb3IgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBwbGFjZWQgaW4gYVxuICAgICAqIFtUYWJQYW5lbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctdGFiKVxuICAgICAqL1xuICAgIHRhYiA/IDogYm9vbGVhbnxUYWJDb25maWdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgY29udGFpbmVyIGlzIHVzZWQgYXMgYSB0YWIgaW4gYSBUYWJQYW5lbCwgdGhlc2UgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZVxuICAgICAqIFtUYWJCYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiQmFyKSB3aGVuIHRoaXMgY29udGFpbmVyIGlzIHRoZSBhY3RpdmUgdGFiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy10YWJCYXJJdGVtcylcbiAgICAgKi9cbiAgICB0YWJCYXJJdGVtcyA/IDogVG9vbGJhckl0ZW1zW118V2lkZ2V0W11cbiAgICAvKipcbiAgICAgKiBUaGUgdGFnIG5hbWUgb2YgdGhpcyBXaWRnZXQncyByb290IGVsZW1lbnRcbiAgICAgKi9cbiAgICB0YWcgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgQ29uZmlnIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBbVG9vbGJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci5cbiAgICAgKiBUaGlzIGNyZWF0ZXMgYSB0b29sYmFyIGRvY2tlZCB0byB0aGUgdG9wIG9mIHRoZSBwYW5lbCBpbW1lZGlhdGVseSBiZWxvdyB0aGUgaGVhZGVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy10YmFyKVxuICAgICAqL1xuICAgIHRiYXIgPyA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogVGV4dCBhbGlnbm1lbnQ6ICdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0Jy4gQWxzbyBhY2NlcHRzIGRpcmVjdGlvbiBuZXV0cmFsICdzdGFydCcgYW5kICdlbmQnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy10ZXh0QWxpZ24pXG4gICAgICovXG4gICAgdGV4dEFsaWduID8gOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgbmFtZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIHlpZWxkcyBhIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3QgdG8gdXNlIGFzIGEgdGljayBiYWNrZ3JvdW5kIGVsZW1lbnRcbiAgICAgKiBmb3IgdGhlIHRpY2sgY29udGV4dCBwYXNzZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLXRpY2tSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdGlja0NvbnRleHQgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgZm9yIHRoZSB0aWNrIGJlaW5nIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gdGlja0NvbnRleHQuc3RhcnRUaW1lIFRoZSBzdGFydCB0aW1lIG9mIHRoZSB0aWNrLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gdGlja0NvbnRleHQuZW5kVGltZSBUaGUgZW5kIHRpbWUgb2YgdGhlIHRpY2suXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbFtdfSB0aWNrQ29udGV4dC5ldmVudHMgVGhlIGV2ZW50cyB0aGF0IHZpc3VhbGx5IGludGVyc2VjdCB3aXRoIHRoZSB0aWNrLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aWNrQ29udGV4dC50aWNrSW5kZXggVGhlIHplcm8tYmFzZWQgb3ZlcmFsbCB0aWNrIGluZGV4LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aWNrQ29udGV4dC5zdWJ0aWNrSW5kZXggVGhlIHplcm8tYmFzZWQgc3VidGljayBpbmRleCAqd2l0aGluKiB0aGUgaG91ci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGlja0NvbnRleHQuc3VidGlja0NvdW50IFRoZSB0b3RhbCBudW1iZXIgb2YgdmlzaWJsZSBzdWJ0aWNrcyBpbiBhbiBob3VyLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlJlc291cmNlTW9kZWx9IHRpY2tDb250ZXh0LnJlc291cmNlUmVjb3JkICpJZiogdGhpcyB2aWV3IGlzIGEgcmVzb3VyY2UgdmlldywgdGhlIHJlc291cmNlIHJlY29yZC5cbiAgICAgKiBAcmV0dXJucyB7RG9tQ29uZmlnfSBUaGUgRE9NIGNvbmZpZyBvYmplY3QgdG8gdXNlIGZvciB0aGUgdGljay5cbiAgICAgKi9cbiAgICB0aWNrUmVuZGVyZXIgPyA6ICgodGlja0NvbnRleHQ6IHsgc3RhcnRUaW1lOiBEYXRlLCBlbmRUaW1lOiBEYXRlLCBldmVudHM6IEV2ZW50TW9kZWxbXSwgdGlja0luZGV4OiBudW1iZXIsIHN1YnRpY2tJbmRleDogbnVtYmVyLCBzdWJ0aWNrQ291bnQ6IG51bWJlciwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwgfSkgPT4gRG9tQ29uZmlnKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gdXNlZCB0byBmb3JtYXQgdGhlIHRpbWUgZGlzcGxheWVkIGluIHRoZVxuICAgICAqIHRpbWUgYXhpcyBhdCB0aGUgbGVmdCBzaWRlIG9mIHRoZSB2aWV3LlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBUaGUgZGF0ZSB0byBmb3JtYXQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBkYXRlLlxuICAgICAqL1xuICAgIHRpbWVBeGlzVGltZUZvcm1hdCA/IDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIEEgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlcikgZm9ybWF0IHN0cmluZy9mdW5jdGlvbiB1c2VkIHRvIGZvcm1hdCB0aGUgdGltZSBkaXNwbGF5ZWQgaW4gZXZlbnRzXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIFRoZSBkYXRlIHRvIGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuXG4gICAgICovXG4gICAgdGltZUZvcm1hdCA/IDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIEEgdGl0bGUgdG8gZGlzcGxheSBpbiB0aGUgaGVhZGVyIG9yIG93bmluZyBUYWJQYW5lbC4gQ2F1c2VzIGNyZWF0aW9uIGFuZCBkb2NraW5nIG9mIGEgaGVhZGVyXG4gICAgICogdG8gdGhlIHRvcCBpZiBubyBoZWFkZXIgaXMgY29uZmlndXJlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctdGl0bGUpXG4gICAgICovXG4gICAgdGl0bGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBbdG9vbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbCkgdG8gYWRkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGB0aXRsZWAgaW4gdGhlIFBhbmVsIGhlYWRlci4gRWFjaFxuICAgICAqIHByb3BlcnR5IG5hbWUgaXMgdGhlIHJlZmVyZW5jZSBieSB3aGljaCBhbiBpbnN0YW50aWF0ZWQgdG9vbCBtYXkgYmUgcmV0cmlldmVkIGZyb20gdGhlIGxpdmVcbiAgICAgKiBgW3Rvb2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Rvb2xhYmxlI3Byb3BlcnR5LXRvb2xzKWAgcHJvcGVydHkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLXRvb2xzKVxuICAgICAqL1xuICAgIHRvb2xzID8gOiBSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPnxudWxsXG4gICAgLyoqXG4gICAgICogVG9vbHRpcCBmb3IgdGhlIHdpZGdldCwgZWl0aGVyIGFzIGEgc3RyaW5nIG9yIGFzIGEgVG9vbHRpcCBjb25maWcgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy10b29sdGlwKVxuICAgICAqL1xuICAgIHRvb2x0aXAgPyA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB0YWJiaW5nIHdpdGhpbiBhIFBhbmVsIGlzIG5vdCBjb250YWluZWQsIGllIHlvdSBjYW4gVEFCIG91dCBvZiB0aGUgUGFuZWxcbiAgICAgKiBmb3J3YXJkcyBvciBiYWNrd2FyZHMuXG4gICAgICogQ29uZmlndXJlIHRoaXMgYXMgYHRydWVgIHRvIGRpc2FsbG93IHRhYmJpbmcgb3V0IG9mIHRoZSBQYW5lbCwgYW5kIG1ha2UgdGFiYmluZyBjaXJjdWxhciB3aXRoaW4gdGhpcyBQYW5lbC5cbiAgICAgKi9cbiAgICB0cmFwRm9jdXMgPyA6IGJvb2xlYW5cbiAgICB0eXBlID8gOiAnZGF5YWdlbmRhJ1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3MgbmFtZSBzdWZmaXhlcyB0byBhcHBseSB0byB0aGUgZWxlbWVudHMgcmVuZGVyZWQgYnkgdGhpcyB3aWRnZXQuIFRoaXMgbWF5IGJlIHNwZWNpZmllZFxuICAgICAqIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgYW4gYXJyYXkgb2Ygc3RyaW5ncywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzIHdpdGggdHJ1dGh5XG4gICAgICogdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNjb25maWctdWkpXG4gICAgICovXG4gICAgdWkgPyA6ICdwbGFpbid8J3Rvb2xiYXInfHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBFaXRoZXIgdGhlIHN0YXJ0IGhvdXIgb2YgdGhlIGRheSwgb3IgYSAqMjQgaG91cirCoGBISDpNTWAgc3RyaW5nIGRlbm90aW5nIHRoZSBpbml0aWFsbHkgdmlzaWJsZSBzdGFydFxuICAgICAqIHRpbWUgb2YgdGhlIGRheS4gRGVmYXVsdHMgdG8gN2FtLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2NvbmZpZy12aXNpYmxlU3RhcnRUaW1lKVxuICAgICAqL1xuICAgIHZpc2libGVTdGFydFRpbWUgPyA6IHN0cmluZ3xudW1iZXJ8e1xuICAgICAgICB0aW1lPzogc3RyaW5nfG51bWJlclxuICAgICAgICBibG9jaz86ICdzdGFydCd8J2VuZCd8J2NlbnRlcid8J25lYXJlc3QnXG4gICAgICAgIGVkZ2VPZmZzZXQ/OiBudW1iZXJcbiAgICAgICAgYW5pbWF0ZT86IG9iamVjdHxib29sZWFufG51bWJlclxuICAgICAgICBkdXJhdGlvbj86IG51bWJlclxuICAgICAgICBlYXNpbmc/OiBzdHJpbmdcbiAgICB9fG51bGxcbiAgICAvKipcbiAgICAgKiBUaGUgd2VlayBzdGFydCBkYXksIDAgbWVhbmluZyBTdW5kYXksIDYgbWVhbmluZyBTYXR1cmRheS5cbiAgICAgKiBEZWZhdWx0cyB0byBbd2Vla1N0YXJ0RGF5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIjcHJvcGVydHktd2Vla1N0YXJ0RGF5LXN0YXRpYykuXG4gICAgICovXG4gICAgd2Vla1N0YXJ0RGF5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIHdpZGdldHMgd2VpZ2h0IGRldGVybWluZXMgaXRzIHBvc2l0aW9uIGFtb25nIHNpYmxpbmdzIHdoZW4gYWRkZWQgdG8gYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lcikuXG4gICAgICogSGlnaGVyIHdlaWdodHMgZ28gZnVydGhlciBkb3duLlxuICAgICAqL1xuICAgIHdlaWdodCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3Mgd2lkdGgsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLndpZHRoYC4gRWl0aGVyIHNwZWNpZnkgYSB2YWxpZCB3aWR0aCBzdHJpbmcgb3IgYSBudW1iZXIsIHdoaWNoXG4gICAgICogd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCB3aWR0aCwgYnV0IGluIHNvbWUgY2FzZXNcbiAgICAgKiB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIHdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHggcG9zaXRpb24gZm9yIHRoZSB3aWRnZXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLXgpXG4gICAgICovXG4gICAgeCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHkgcG9zaXRpb24gZm9yIHRoZSB3aWRnZXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjY29uZmlnLXkpXG4gICAgICovXG4gICAgeSA/IDogbnVtYmVyXG5cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3IgOiAnYnJ5bnR1bS1kYXktYWdlbmRhLXZpZXcnLFxuICAgIHRlbXBsYXRlIDogJydcbn0pXG5leHBvcnQgY2xhc3MgQnJ5bnR1bURheUFnZW5kYVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlQ2xhc3MgPSBEYXlBZ2VuZGFWaWV3O1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZU5hbWUgPSAnRGF5QWdlbmRhVmlldyc7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ29uQmVmb3JlQXV0b0NyZWF0ZScsXG4gICAgICAgICdvbkJlZm9yZUNoYW5nZURhdGUnLFxuICAgICAgICAnb25CZWZvcmVEZXN0cm95JyxcbiAgICAgICAgJ29uQmVmb3JlSGlkZScsXG4gICAgICAgICdvbkJlZm9yZVJlc3BvbnNpdmVTdGF0ZUNoYW5nZScsXG4gICAgICAgICdvbkJlZm9yZVNldFJlY29yZCcsXG4gICAgICAgICdvbkJlZm9yZVNob3cnLFxuICAgICAgICAnb25CZWZvcmVTdGF0ZUFwcGx5JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhdGVTYXZlJyxcbiAgICAgICAgJ29uQ2F0Y2hBbGwnLFxuICAgICAgICAnb25DZWxsTWFwUG9wdWxhdGVkJyxcbiAgICAgICAgJ29uQ29sbGFwc2UnLFxuICAgICAgICAnb25EYXlDZWxsUG9wdWxhdGVkJyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkRpcnR5U3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25FbGVtZW50Q3JlYXRlZCcsXG4gICAgICAgICdvbkV2ZW50QXV0b0NyZWF0ZWQnLFxuICAgICAgICAnb25FdmVudFByb3BhZ2F0ZScsXG4gICAgICAgICdvbkV4cGFuZCcsXG4gICAgICAgICdvbkZvY3VzSW4nLFxuICAgICAgICAnb25Gb2N1c091dCcsXG4gICAgICAgICdvbkhpZGUnLFxuICAgICAgICAnb25MYXlvdXRVcGRhdGUnLFxuICAgICAgICAnb25QYWludCcsXG4gICAgICAgICdvblJhbmdlQ2hhbmdlJyxcbiAgICAgICAgJ29uUmVhZE9ubHknLFxuICAgICAgICAnb25SZWNvbXBvc2UnLFxuICAgICAgICAnb25SZWZyZXNoJyxcbiAgICAgICAgJ29uUmVzaXplJyxcbiAgICAgICAgJ29uUmVzcG9uc2l2ZVN0YXRlQ2hhbmdlJyxcbiAgICAgICAgJ29uU2hpZnRJbmNyZW1lbnRDaGFuZ2UnLFxuICAgICAgICAnb25TaG93JyxcbiAgICAgICAgJ29uVGlja0NoYW5nZScsXG4gICAgICAgICdvblRpbWVBeGlzQ2xpY2snLFxuICAgICAgICAnb25Ub29sQ2xpY2snXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1GZWF0dXJlTmFtZXM6IHN0cmluZ1tdID0gW1xuXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Db25maWdzOiBzdHJpbmdbXSA9IEJyeW50dW1EYXlBZ2VuZGFWaWV3Q29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2FjdGlvbkJ1dHRvbnMnLFxuICAgICAgICAnYWN0aXZhdGlvbktleScsXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYWxsRGF5RXZlbnRzJyxcbiAgICAgICAgJ2FsbG93RHJhZ0NyZWF0ZScsXG4gICAgICAgICdhbGxvd0RyYWdNb3ZlJyxcbiAgICAgICAgJ2FsbG93RHJhZ1Jlc2l6ZScsXG4gICAgICAgICdhbGxvd1pvb21VbmRlcmZsb3cnLFxuICAgICAgICAnYW5jaG9yJyxcbiAgICAgICAgJ2FuaW1hdGVUaW1lU2hpZnQnLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdhdXRvQ3JlYXRlJyxcbiAgICAgICAgJ2JiYXInLFxuICAgICAgICAnYm9keUNscycsXG4gICAgICAgICdib3JkZXJDb2xvcicsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgJ2NvbGxhcHNpYmxlJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb2x1bW5IZWFkZXJSZW5kZXJlcicsXG4gICAgICAgICdjb21wYWN0SGVhZGVyJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdjb3JlSG91cnMnLFxuICAgICAgICAnY3VycmVudFRpbWVJbmRpY2F0b3JSZW5kZXJlcicsXG4gICAgICAgICdkYXNoZWRTdWJ0aWNrcycsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkYXRlJyxcbiAgICAgICAgJ2RhdGVGaWx0ZXInLFxuICAgICAgICAnZGF0ZUZvcm1hdCcsXG4gICAgICAgICdkYXRlU2VwYXJhdG9yJyxcbiAgICAgICAgJ2RheUNlbGxSZW5kZXJlcicsXG4gICAgICAgICdkYXlFbmRUaW1lJyxcbiAgICAgICAgJ2RheUhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2RheU5hbWVGb3JtYXQnLFxuICAgICAgICAnZGF5U3RhcnRTaGlmdCcsXG4gICAgICAgICdkYXlTdGFydFRpbWUnLFxuICAgICAgICAnZGVmYXVsdEJpbmRQcm9wZXJ0eScsXG4gICAgICAgICdkZWZhdWx0Rm9jdXMnLFxuICAgICAgICAnZGVmYXVsdHMnLFxuICAgICAgICAnZGVmYXVsdFNjcm9sbE9wdGlvbnMnLFxuICAgICAgICAnZGVzY3JpcHRpb25Gb3JtYXQnLFxuICAgICAgICAnZGVzY3JpcHRpb25SZW5kZXJlcicsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhZ2dhYmxlJyxcbiAgICAgICAgJ2RyYWdVbml0JyxcbiAgICAgICAgJ2RyYXdlcicsXG4gICAgICAgICdlbGVtZW50QXR0cmlidXRlcycsXG4gICAgICAgICdlbmREYXRlJyxcbiAgICAgICAgJ2V2ZW50RmlsdGVyJyxcbiAgICAgICAgJ2V2ZW50Rmxvd0RpcmVjdGlvbicsXG4gICAgICAgICdldmVudEhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2V2ZW50UmVuZGVyZXInLFxuICAgICAgICAnZXZlbnRTb3J0ZXInLFxuICAgICAgICAnZXZlbnRTcGFjaW5nJyxcbiAgICAgICAgJ2V4dGVuZEFsbERheUVuZERheScsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmlsdGVyRXZlbnRSZXNvdXJjZXMnLFxuICAgICAgICAnZml4ZWREdXJhdGlvbicsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2Zvb3RlcicsXG4gICAgICAgICdnZXRQcmltYXJ5UmVzb3VyY2UnLFxuICAgICAgICAnZ3V0dGVyV2lkdGgnLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUFuaW1hdGlvbicsXG4gICAgICAgICdoaWRlQm9yZGVycycsXG4gICAgICAgICdoaWRlRW1wdHlEYXlzJyxcbiAgICAgICAgJ2hpZGVFbXB0eUhvdXJzJyxcbiAgICAgICAgJ2hpZGVOb25Xb3JraW5nRGF5cycsXG4gICAgICAgICdoaWRlVGltZUF4aXMnLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdob3VySGVpZ2h0JyxcbiAgICAgICAgJ2hvdXJIZWlnaHRCcmVha3BvaW50cycsXG4gICAgICAgICdob3VyU3BhY2luZycsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2lucHV0RmllbGRBbGlnbicsXG4gICAgICAgICdpbnNlcnRCZWZvcmUnLFxuICAgICAgICAnaW5zZXJ0Rmlyc3QnLFxuICAgICAgICAnaW50ZXJEYXlEcmFnJyxcbiAgICAgICAgJ2ludGVyRGF5UmVzaXplJyxcbiAgICAgICAgJ2l0ZW1DbHMnLFxuICAgICAgICAnaXRlbXMnLFxuICAgICAgICAna2V5TWFwJyxcbiAgICAgICAgJ2xhYmVsUG9zaXRpb24nLFxuICAgICAgICAnbGF5b3V0JyxcbiAgICAgICAgJ2xheW91dFN0eWxlJyxcbiAgICAgICAgJ2xhenlJdGVtcycsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9jYWxlQ2xhc3MnLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9jYWxpemFibGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21heEFsbERheUhlaWdodCcsXG4gICAgICAgICdtYXhEYXRlJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkRhdGUnLFxuICAgICAgICAnbWluRGF5V2lkdGgnLFxuICAgICAgICAnbWluRXZlbnRIZWlnaHQnLFxuICAgICAgICAnbWluRXZlbnRXaWR0aCcsXG4gICAgICAgICdtaW5IZWlnaHQnLFxuICAgICAgICAnbWluSG91ckhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ25hbWVkSXRlbXMnLFxuICAgICAgICAnbm9NYXRjaGluZ0RhdGVzJyxcbiAgICAgICAgJ25vbldvcmtpbmdEYXlzJyxcbiAgICAgICAgJ292ZXJmbG93UG9wdXAnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncGFzdEV2ZW50Q2xzJyxcbiAgICAgICAgJ3Bvc2l0aW9uZWQnLFxuICAgICAgICAncHJldmVudFRvb2x0aXBPblRvdWNoJyxcbiAgICAgICAgJ3JhbmdlJyxcbiAgICAgICAgJ3JlYWRPbmx5JyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3Jlc291cmNlSW1hZ2VQYXRoJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmUnLFxuICAgICAgICAncmVzcG9uc2l2ZVJvb3QnLFxuICAgICAgICAncmVzcG9uc2l2ZVN0YXRlJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVUYXJnZXQnLFxuICAgICAgICAncmlwcGxlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxhYmxlJyxcbiAgICAgICAgJ3Njcm9sbEFjdGlvbicsXG4gICAgICAgICdzZWxlY3RvckJ1dHRvbicsXG4gICAgICAgICdzZWxlY3Rvck1lbnVJdGVtJyxcbiAgICAgICAgJ3NoaWZ0SW5jcmVtZW50JyxcbiAgICAgICAgJ3Nob3J0RGF0ZUZvcm1hdCcsXG4gICAgICAgICdzaG9ydERhdGVUaW1lRm9ybWF0JyxcbiAgICAgICAgJ3Nob3dBbGxEYXlIZWFkZXInLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93QnVsbGV0JyxcbiAgICAgICAgJ3Nob3dSZXNvdXJjZUF2YXRhcnMnLFxuICAgICAgICAnc2hvd1RpbWUnLFxuICAgICAgICAnc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQnLFxuICAgICAgICAnc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZScsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0YWNrTXVsdGlEYXlFdmVudHMnLFxuICAgICAgICAnc3RhcnREYXRlJyxcbiAgICAgICAgJ3N0YXRlZnVsJyxcbiAgICAgICAgJ3N0YXRlZnVsRXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlSWQnLFxuICAgICAgICAnc3RhdGVQcm92aWRlcicsXG4gICAgICAgICdzdHJpY3RSZWNvcmRNYXBwaW5nJyxcbiAgICAgICAgJ3N0cmlwcycsXG4gICAgICAgICdzeW5jQ2FsZW5kYXJEYXRlJyxcbiAgICAgICAgJ3N5bmNIb3VySGVpZ2h0cycsXG4gICAgICAgICdzeW5jVmlld0RhdGUnLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhYkJhckl0ZW1zJyxcbiAgICAgICAgJ3RhZycsXG4gICAgICAgICd0YmFyJyxcbiAgICAgICAgJ3RleHRBbGlnbicsXG4gICAgICAgICd0aWNrUmVuZGVyZXInLFxuICAgICAgICAndGltZUF4aXNUaW1lRm9ybWF0JyxcbiAgICAgICAgJ3RpbWVGb3JtYXQnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHMnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd0cmFwRm9jdXMnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICd1aScsXG4gICAgICAgICd2aXNpYmxlU3RhcnRUaW1lJyxcbiAgICAgICAgJ3dlZWtTdGFydERheScsXG4gICAgICAgICd3ZWlnaHQnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3NPbmx5OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2FjdGlvbkJ1dHRvbnMnLFxuICAgICAgICAnYWN0aXZhdGlvbktleScsXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbGxEYXlFdmVudHMnLFxuICAgICAgICAnYW5jaG9yJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYmJhcicsXG4gICAgICAgICdib2R5Q2xzJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW5IZWFkZXJSZW5kZXJlcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29uc3RyYWluVG8nLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY3VycmVudFRpbWVJbmRpY2F0b3JSZW5kZXJlcicsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF5Q2VsbFJlbmRlcmVyJyxcbiAgICAgICAgJ2RheUhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2RheU5hbWVGb3JtYXQnLFxuICAgICAgICAnZGF5U3RhcnRTaGlmdCcsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RlZmF1bHRGb2N1cycsXG4gICAgICAgICdkZWZhdWx0cycsXG4gICAgICAgICdkZXNjcmlwdGlvblJlbmRlcmVyJyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmFnZ2FibGUnLFxuICAgICAgICAnZHJhd2VyJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2VuZERhdGUnLFxuICAgICAgICAnZXZlbnRGaWx0ZXInLFxuICAgICAgICAnZXZlbnRIZWFkZXJSZW5kZXJlcicsXG4gICAgICAgICdldmVudFJlbmRlcmVyJyxcbiAgICAgICAgJ2V2ZW50U29ydGVyJyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2Zvb3RlcicsXG4gICAgICAgICdnZXRQcmltYXJ5UmVzb3VyY2UnLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2l0ZW1DbHMnLFxuICAgICAgICAnbGF6eUl0ZW1zJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhBbGxEYXlIZWlnaHQnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICduYW1lZEl0ZW1zJyxcbiAgICAgICAgJ292ZXJmbG93UG9wdXAnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZXNvdXJjZUltYWdlUGF0aCcsXG4gICAgICAgICdyZXNwb25zaXZlJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVSb290JyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVTdGF0ZScsXG4gICAgICAgICdyZXNwb25zaXZlVGFyZ2V0JyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2VsZWN0b3JCdXR0b24nLFxuICAgICAgICAnc2VsZWN0b3JNZW51SXRlbScsXG4gICAgICAgICdzaG93QWxsRGF5SGVhZGVyJyxcbiAgICAgICAgJ3Nob3dBbmltYXRpb24nLFxuICAgICAgICAnc2hvd0J1bGxldCcsXG4gICAgICAgICdzaG93UmVzb3VyY2VBdmF0YXJzJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwV2hlbkRpc2FibGVkJyxcbiAgICAgICAgJ3N0YXJ0RGF0ZScsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RyaXBzJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YWcnLFxuICAgICAgICAndGJhcicsXG4gICAgICAgICd0ZXh0QWxpZ24nLFxuICAgICAgICAndGlja1JlbmRlcmVyJyxcbiAgICAgICAgJ3RpbWVBeGlzVGltZUZvcm1hdCcsXG4gICAgICAgICd0aW1lRm9ybWF0JyxcbiAgICAgICAgJ3RyYXBGb2N1cycsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3Zpc2libGVTdGFydFRpbWUnLFxuICAgICAgICAnd2Vla1N0YXJ0RGF5JyxcbiAgICAgICAgJ3dlaWdodCdcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bVByb3BzOiBzdHJpbmdbXSA9IEJyeW50dW1EYXlBZ2VuZGFWaWV3Q29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbGxvd0RyYWdDcmVhdGUnLFxuICAgICAgICAnYWxsb3dEcmFnTW92ZScsXG4gICAgICAgICdhbGxvd0RyYWdSZXNpemUnLFxuICAgICAgICAnYWxsb3dab29tVW5kZXJmbG93JyxcbiAgICAgICAgJ2FuY2hvclNpemUnLFxuICAgICAgICAnYW5pbWF0ZVRpbWVTaGlmdCcsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhdXRvQ3JlYXRlJyxcbiAgICAgICAgJ2JvcmRlckNvbG9yJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29tcGFjdEhlYWRlcicsXG4gICAgICAgICdjb3JlSG91cnMnLFxuICAgICAgICAnZGFzaGVkU3VidGlja3MnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkYXRlJyxcbiAgICAgICAgJ2RhdGVGaWx0ZXInLFxuICAgICAgICAnZGF0ZUZvcm1hdCcsXG4gICAgICAgICdkYXRlU2VwYXJhdG9yJyxcbiAgICAgICAgJ2RheUNlbGxDbHMnLFxuICAgICAgICAnZGF5RW5kVGltZScsXG4gICAgICAgICdkYXlTdGFydFRpbWUnLFxuICAgICAgICAnZGVmYXVsdFNjcm9sbE9wdGlvbnMnLFxuICAgICAgICAnZGVzY3JpcHRpb25Gb3JtYXQnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZHJhZ1VuaXQnLFxuICAgICAgICAnZXZlbnRGbG93RGlyZWN0aW9uJyxcbiAgICAgICAgJ2V2ZW50U3BhY2luZycsXG4gICAgICAgICdleHRlbmRBbGxEYXlFbmREYXknLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZpbHRlckV2ZW50UmVzb3VyY2VzJyxcbiAgICAgICAgJ2ZpcnN0VmlzaWJsZUNlbGwnLFxuICAgICAgICAnZmlyc3RWaXNpYmxlRGF0ZScsXG4gICAgICAgICdmaXRIb3VycycsXG4gICAgICAgICdmaXhlZER1cmF0aW9uJyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZm9jdXNWaXNpYmxlJyxcbiAgICAgICAgJ2d1dHRlcldpZHRoJyxcbiAgICAgICAgJ2hhc0NoYW5nZXMnLFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICdoaWRlQm9yZGVycycsXG4gICAgICAgICdoaWRlRW1wdHlEYXlzJyxcbiAgICAgICAgJ2hpZGVFbXB0eUhvdXJzJyxcbiAgICAgICAgJ2hpZGVOb25Xb3JraW5nRGF5cycsXG4gICAgICAgICdoaWRlVGltZUF4aXMnLFxuICAgICAgICAnaG9yaXpvbnRhbFNjcm9sbGVyJyxcbiAgICAgICAgJ2hvdXJIZWlnaHQnLFxuICAgICAgICAnaG91ckhlaWdodEJyZWFrcG9pbnRzJyxcbiAgICAgICAgJ2hvdXJTcGFjaW5nJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2luY3JlbWVudCcsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2ludGVyRGF5RHJhZycsXG4gICAgICAgICdpbnRlckRheVJlc2l6ZScsXG4gICAgICAgICdpc1NldHRpbmdWYWx1ZXMnLFxuICAgICAgICAnaXNWYWxpZCcsXG4gICAgICAgICdpdGVtcycsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYXN0VmlzaWJsZUNlbGwnLFxuICAgICAgICAnbGFzdFZpc2libGVEYXRlJyxcbiAgICAgICAgJ2xheW91dCcsXG4gICAgICAgICdsYXlvdXRTdHlsZScsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWF4RGF0ZScsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4aW1pemVPbk1vYmlsZScsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtaW5EYXRlJyxcbiAgICAgICAgJ21pbkRheVdpZHRoJyxcbiAgICAgICAgJ21pbkV2ZW50SGVpZ2h0JyxcbiAgICAgICAgJ21pbkV2ZW50V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbkhvdXJIZWlnaHQnLFxuICAgICAgICAnbWluV2lkdGgnLFxuICAgICAgICAnbm9NYXRjaGluZ0RhdGVzJyxcbiAgICAgICAgJ25vbldvcmtpbmdEYXlzJyxcbiAgICAgICAgJ3BhcmVudCcsXG4gICAgICAgICdwYXN0RXZlbnRDbHMnLFxuICAgICAgICAncmFuZ2UnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVjb3JkJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzaGlmdEluY3JlbWVudCcsXG4gICAgICAgICdzaG9ydERhdGVGb3JtYXQnLFxuICAgICAgICAnc2hvcnREYXRlVGltZUZvcm1hdCcsXG4gICAgICAgICdzaG93Q3VycmVudFRpbWUnLFxuICAgICAgICAnc2hvd1RpbWUnLFxuICAgICAgICAnc2l4TWludXRlVGlja3MnLFxuICAgICAgICAnc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZScsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0YWNrTXVsdGlEYXlFdmVudHMnLFxuICAgICAgICAnc3RhdGUnLFxuICAgICAgICAnc3RyaWN0UmVjb3JkTWFwcGluZycsXG4gICAgICAgICdzeW5jQ2FsZW5kYXJEYXRlJyxcbiAgICAgICAgJ3N5bmNIb3VySGVpZ2h0cycsXG4gICAgICAgICdzeW5jVmlld0RhdGUnLFxuICAgICAgICAndGltZVNuYXBUeXBlJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndmFsdWVzJyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ3gnLFxuICAgICAgICAneSdcbiAgICBdKTtcblxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgICBwdWJsaWMgaW5zdGFuY2UhOiBEYXlBZ2VuZGFWaWV3O1xuXG4gICAgcHJpdmF0ZSBicnludHVtQ29uZmlnID0ge1xuICAgICAgICBhZG9wdCAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhcHBlbmRUbyAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBocmVmICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhbmd1bGFyQ29tcG9uZW50IDogdGhpcyxcbiAgICAgICAgZmVhdHVyZXMgICAgICAgICA6IHt9LFxuICAgICAgICBsaXN0ZW5lcnMgICAgICAgIDoge31cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3Mgb25seVxuICAgIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbnMgICAgICAgICAgICAgICAgISA6IEFjdGlvbkJ1dHRvbnNDb25maWdbXXxSZWNvcmQ8c3RyaW5nLCBBY3Rpb25CdXR0b25zQ29uZmlnPjtcbiAgICBASW5wdXQoKSBhY3RpdmF0aW9uS2V5ICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYWRvcHQgICAgICAgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFsaWduICAgICAgICAgICAgICAgICAgICAgICAgISA6IEFsaWduU3BlY3xzdHJpbmc7XG4gICAgQElucHV0KCkgYWxsRGF5RXZlbnRzICAgICAgICAgICAgICAgICAhIDogQ2FsZW5kYXJSb3d8Q2FsZW5kYXJSb3dDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSBhbmNob3IgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFyaWFEZXNjcmlwdGlvbiAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhcmlhTGFiZWwgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYmJhciAgICAgICAgICAgICAgICAgICAgICAgICAhIDogKENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgYm9keUNscyAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBidWJibGVFdmVudHMgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY2VudGVyZWQgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjb2xsYXBzaWJsZSAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufFBhbmVsQ29sbGFwc2VyQ29uZmlnfFBhbmVsQ29sbGFwc2VyT3ZlcmxheUNvbmZpZztcbiAgICBASW5wdXQoKSBjb2xvciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29sdW1uSGVhZGVyUmVuZGVyZXIgICAgICAgICAhIDogKChjZWxsRGF0YTogRGF5Q2VsbFdpdGhFdmVudHMpID0+IHN0cmluZ3xvYmplY3QpfHN0cmluZztcbiAgICBASW5wdXQoKSBjb25maWcgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY29uc3RyYWluVG8gICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8V2lkZ2V0fFJlY3RhbmdsZTtcbiAgICBASW5wdXQoKSBjb250ZW50RWxlbWVudENscyAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGN1cnJlbnRUaW1lSW5kaWNhdG9yUmVuZGVyZXIgISA6ICgoKSA9PiBEb21Db25maWcpfHN0cmluZztcbiAgICBASW5wdXQoKSBkYXRhRmllbGQgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGF5Q2VsbFJlbmRlcmVyICAgICAgICAgICAgICAhIDogKChkb21Db25maWc6IHsgY2xhc3NOYW1lOiBvYmplY3QsIHN0eWxlOiBvYmplY3QsIGRhdGFzZXQ6IG9iamVjdCB9LCBjaGlsZHJlbjogRG9tQ29uZmlnW10sIGNlbGxEYXRhOiBEYXlDZWxsKSA9PiBzdHJpbmcpfHN0cmluZztcbiAgICBASW5wdXQoKSBkYXlIZWFkZXJSZW5kZXJlciAgICAgICAgICAgICEgOiAoKGhlYWRlckRvbUNvbmZpZzogeyBjbGFzc05hbWU6IG9iamVjdCwgc3R5bGU6IG9iamVjdCwgZGF0YXNldDogb2JqZWN0LCBjaGlsZHJlbjogRG9tQ29uZmlnW10gfSwgY2VsbERhdGE6IERheUNlbGwpID0+IHN0cmluZyl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGRheU5hbWVGb3JtYXQgICAgICAgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgZGF5U3RhcnRTaGlmdCAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBkZWZhdWx0QmluZFByb3BlcnR5ICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdEZvY3VzICAgICAgICAgICAgICAgICAhIDogKCh3aWRnZXQ6IFdpZGdldCkgPT4gYm9vbGVhbil8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRzICAgICAgICAgICAgICAgICAgICAgISA6IENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZztcbiAgICBASW5wdXQoKSBkZXNjcmlwdGlvblJlbmRlcmVyICAgICAgICAgICEgOiAodmlldzogV2lkZ2V0KSA9PiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkb2NrICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAndG9wJ3wnYm90dG9tJ3wnbGVmdCd8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnfCdoZWFkZXInfCdwcmUtaGVhZGVyJ3xvYmplY3Q7XG4gICAgQElucHV0KCkgZHJhZ2dhYmxlICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGhhbmRsZVNlbGVjdG9yPzogc3RyaW5nXG4gICAgfTtcbiAgICBASW5wdXQoKSBkcmF3ZXIgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtzaWRlPzogJ3N0YXJ0J3wnbGVmdCd8J2VuZCd8J3JpZ2h0J3wndG9wJ3wnYm90dG9tJywgc2l6ZT86IHN0cmluZ3xudW1iZXIsIGlubGluZT86IGJvb2xlYW4sIGF1dG9DbG9zZTogeyBtb3VzZWRvd24/OiBib29sZWFufHN0cmluZywgZm9jdXNvdXQ/OiBib29sZWFufHN0cmluZywgbW91c2VvdXQ/OiBzdHJpbmcgfSwgYXV0b0Nsb3NlRGVsYXk/OiBudW1iZXJ9O1xuICAgIEBJbnB1dCgpIGVsZW1lbnRBdHRyaWJ1dGVzICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ3xudWxsPjtcbiAgICBASW5wdXQoKSBlbmREYXRlICAgICAgICAgICAgICAgICAgICAgICEgOiBEYXRlO1xuICAgIEBJbnB1dCgpIGV2ZW50RmlsdGVyICAgICAgICAgICAgICAgICAgISA6ICgoZXZlbnQ6IEV2ZW50TW9kZWwpID0+IGJvb2xlYW4pfHN0cmluZztcbiAgICBASW5wdXQoKSBldmVudEhlYWRlclJlbmRlcmVyICAgICAgICAgICEgOiAoKGRldGFpbDogeyB2aWV3OiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgcmVuZGVyRGF0YTogeyBzdHlsZTogb2JqZWN0LCBjbHM6IG9iamVjdCwgaWNvblN0eWxlOiBvYmplY3QsIGljb25DbHM6IG9iamVjdCwgZXZlbnRDb2xvcjogc3RyaW5nLCBkYXRhc2V0OiBvYmplY3QsIHNvbGlkQmFyOiBib29sZWFuLCBib2R5Q29sb3I6IHN0cmluZyB9LCBzaG93QnVsbGV0OiBib29sZWFuIH0pID0+IERvbUNvbmZpZ3xEb21Db25maWdbXXxzdHJpbmd8dm9pZCl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGV2ZW50UmVuZGVyZXIgICAgICAgICAgICAgICAgISA6ICgoZGV0YWlsOiB7IHZpZXc6IENhbGVuZGFyVmlldywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIHJlc291cmNlUmVjb3JkOiBSZXNvdXJjZU1vZGVsLCByZW5kZXJEYXRhOiB7IHN0eWxlOiBvYmplY3QsIGNsczogb2JqZWN0LCBpY29uU3R5bGU6IG9iamVjdCwgaWNvbkNsczogb2JqZWN0LCBldmVudENvbG9yOiBzdHJpbmcsIGV2ZW50QmFja2dyb3VuZDogc3RyaW5nLCB0ZXh0Q29sb3I6IHN0cmluZywgZXZlbnRJbm5lclN0eWxlOiBvYmplY3QsIGRhdGFzZXQ6IG9iamVjdCwgc29saWRCYXI6IGJvb2xlYW4sIGJvZHlDb2xvcjogc3RyaW5nLCBzaG93QnVsbGV0OiBib29sZWFuIH0gfSkgPT4gRG9tQ29uZmlnfERvbUNvbmZpZ1tdfHN0cmluZ3x2b2lkKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZXZlbnRTb3J0ZXIgICAgICAgICAgICAgICAgICAhIDogKGxoczogRXZlbnRNb2RlbHxFdmVudEJhciwgcmhzOiBFdmVudE1vZGVsfEV2ZW50QmFyKSA9PiBudW1iZXI7XG4gICAgQElucHV0KCkgZmxvYXRpbmcgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmb290ZXIgICAgICAgICAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIGRvY2s/OiAndG9wJ3wncmlnaHQnfCdib3R0b20nfCdsZWZ0J3wnc3RhcnQnfCdlbmQnXG4gICAgICAgIGh0bWw/OiBzdHJpbmdcbiAgICAgICAgY2xzPzogc3RyaW5nXG4gICAgfXxzdHJpbmc7XG4gICAgQElucHV0KCkgZ2V0UHJpbWFyeVJlc291cmNlICAgICAgICAgICAhIDogKChldmVudFJlY29yZDogRXZlbnRNb2RlbCkgPT4gUmVzb3VyY2VNb2RlbCl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xib29sZWFufFBhbmVsSGVhZGVyO1xuICAgIEBJbnB1dCgpIGhpZGVBbmltYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIGhpZGVXaGVuRW1wdHkgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaWNvbiAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfERvbUNvbmZpZztcbiAgICBASW5wdXQoKSBpZ25vcmVQYXJlbnRSZWFkT25seSAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGl0ZW1DbHMgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBsYXp5SXRlbXMgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWc+fENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ1tdfFdpZGdldFtdO1xuICAgIEBJbnB1dCgpIGxpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgISA6IERheUFnZW5kYVZpZXdMaXN0ZW5lcnM7XG4gICAgQElucHV0KCkgbG9jYWxlQ2xhc3MgICAgICAgICAgICAgICAgICAhIDogdHlwZW9mIEJhc2U7XG4gICAgQElucHV0KCkgbG9jYWxpemFibGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZVByb3BlcnRpZXMgICAgICAgICEgOiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBtYXNrRGVmYXVsdHMgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1hc2tlZCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWF4QWxsRGF5SGVpZ2h0ICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtb25pdG9yUmVzaXplICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgbmFtZWRJdGVtcyAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnPjtcbiAgICBASW5wdXQoKSBvdmVyZmxvd1BvcHVwICAgICAgICAgICAgICAgICEgOiBPdmVyZmxvd1BvcHVwQ29uZmlnO1xuICAgIEBJbnB1dCgpIG93bmVyICAgICAgICAgICAgICAgICAgICAgICAgISA6IFdpZGdldHxhbnk7XG4gICAgQElucHV0KCkgcG9zaXRpb25lZCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbGF5U3RvcmVFdmVudHMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVzb3VyY2VJbWFnZVBhdGggICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJlc3BvbnNpdmUgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlUm9vdCAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlc3BvbnNpdmVTdGF0ZSAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByZXNwb25zaXZlVGFyZ2V0ICAgICAgICAgICAgICEgOiBzdHJpbmd8V2lkZ2V0O1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBkZWxlZ2F0ZT86IHN0cmluZ1xuICAgICAgICBjb2xvcj86IHN0cmluZ1xuICAgICAgICByYWRpdXM/OiBudW1iZXJcbiAgICAgICAgY2xpcD86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgcm9vdEVsZW1lbnQgICAgICAgICAgICAgICAgICAhIDogU2hhZG93Um9vdHxIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBzY3JvbGxBY3Rpb24gICAgICAgICAgICAgICAgICEgOiAnaGlkZSd8J3JlYWxpZ24nfG51bGw7XG4gICAgQElucHV0KCkgc2VsZWN0b3JCdXR0b24gICAgICAgICAgICAgICAhIDogQnV0dG9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNlbGVjdG9yTWVudUl0ZW0gICAgICAgICAgICAgISA6IE1lbnVJdGVtQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNob3dBbGxEYXlIZWFkZXIgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd0FuaW1hdGlvbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgc2hvd0J1bGxldCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7YmFyPzogYm9vbGVhbiwgbm9CYXI/OiBib29sZWFufTtcbiAgICBASW5wdXQoKSBzaG93UmVzb3VyY2VBdmF0YXJzICAgICAgICAgICEgOiBib29sZWFufHN0cmluZztcbiAgICBASW5wdXQoKSBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0YXJ0RGF0ZSAgICAgICAgICAgICAgICAgICAgISA6IERhdGU7XG4gICAgQElucHV0KCkgc3RhdGVmdWwgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3R8c3RyaW5nW107XG4gICAgQElucHV0KCkgc3RhdGVmdWxFdmVudHMgICAgICAgICAgICAgICAhIDogb2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlSWQgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzdGF0ZVByb3ZpZGVyICAgICAgICAgICAgICAgICEgOiBTdGF0ZVByb3ZpZGVyO1xuICAgIEBJbnB1dCgpIHN0cmlwcyAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz47XG4gICAgQElucHV0KCkgdGFiICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxUYWJDb25maWc7XG4gICAgQElucHV0KCkgdGFiQmFySXRlbXMgICAgICAgICAgICAgICAgICAhIDogVG9vbGJhckl0ZW1zW118V2lkZ2V0W107XG4gICAgQElucHV0KCkgdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRiYXIgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIHRleHRBbGlnbiAgICAgICAgICAgICAgICAgICAgISA6ICdsZWZ0J3wnY2VudGVyJ3wncmlnaHQnfCdzdGFydCd8J2VuZCc7XG4gICAgQElucHV0KCkgdGlja1JlbmRlcmVyICAgICAgICAgICAgICAgICAhIDogKCh0aWNrQ29udGV4dDogeyBzdGFydFRpbWU6IERhdGUsIGVuZFRpbWU6IERhdGUsIGV2ZW50czogRXZlbnRNb2RlbFtdLCB0aWNrSW5kZXg6IG51bWJlciwgc3VidGlja0luZGV4OiBudW1iZXIsIHN1YnRpY2tDb3VudDogbnVtYmVyLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCB9KSA9PiBEb21Db25maWcpfHN0cmluZztcbiAgICBASW5wdXQoKSB0aW1lQXhpc1RpbWVGb3JtYXQgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpO1xuICAgIEBJbnB1dCgpIHRpbWVGb3JtYXQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgdHJhcEZvY3VzICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAnZGF5YWdlbmRhJztcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAncGxhaW4nfCd0b29sYmFyJ3xzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHZpc2libGVTdGFydFRpbWUgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXJ8e1xuICAgICAgICB0aW1lPzogc3RyaW5nfG51bWJlclxuICAgICAgICBibG9jaz86ICdzdGFydCd8J2VuZCd8J2NlbnRlcid8J25lYXJlc3QnXG4gICAgICAgIGVkZ2VPZmZzZXQ/OiBudW1iZXJcbiAgICAgICAgYW5pbWF0ZT86IG9iamVjdHxib29sZWFufG51bWJlclxuICAgICAgICBkdXJhdGlvbj86IG51bWJlclxuICAgICAgICBlYXNpbmc/OiBzdHJpbmdcbiAgICB9fG51bGw7XG4gICAgQElucHV0KCkgd2Vla1N0YXJ0RGF5ICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhbGlnblNlbGYgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYWxsb3dEcmFnQ3JlYXRlICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbGxvd0RyYWdNb3ZlICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFsbG93RHJhZ1Jlc2l6ZSAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYWxsb3dab29tVW5kZXJmbG93ICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbmltYXRlVGltZVNoaWZ0ICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRvQ3JlYXRlICAgICAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIGdlc3R1cmU/OiBzdHJpbmdcbiAgICAgICAgbmV3TmFtZT86IEZ1bmN0aW9ufHN0cmluZ1xuICAgICAgICBzdGVwPzogc3RyaW5nXG4gICAgICAgIHNuYXBUeXBlPzogJ3JvdW5kJ3wnY2VpbCd8J2Zsb29yJ1xuICAgICAgICBkdXJhdGlvbj86IHN0cmluZ1xuICAgICAgICBzdGFydEhvdXI/OiBudW1iZXJcbiAgICB9fHN0cmluZ3xib29sZWFuO1xuICAgIEBJbnB1dCgpIGJvcmRlckNvbG9yICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBjYWxsT25GdW5jdGlvbnMgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2xzICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2xsYXBzZWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbHVtbiAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBjb21wYWN0SGVhZGVyICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvcmVIb3VycyAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHwoKGRhdGU6IERhdGUpID0+IG9iamVjdFtdKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGFzaGVkU3VidGlja3MgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkYXRhc2V0ICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8UmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBASW5wdXQoKSBkYXRlICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBEYXRlO1xuICAgIEBJbnB1dCgpIGRhdGVGaWx0ZXIgICAgICAgICAgICAgICAgICAgISA6ICgoY29udGV4dDogRGF5Q2VsbCkgPT4gYm9vbGVhbil8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGRhdGVGb3JtYXQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgZGF0ZVNlcGFyYXRvciAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRheUVuZFRpbWUgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgZGF5U3RhcnRUaW1lICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBkZWZhdWx0U2Nyb2xsT3B0aW9ucyAgICAgICAgICEgOiBCcnludHVtU2Nyb2xsT3B0aW9ucztcbiAgICBASW5wdXQoKSBkZXNjcmlwdGlvbkZvcm1hdCAgICAgICAgICAgICEgOiBzdHJpbmd8c3RyaW5nW118Ym9vbGVhbltdfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKXxGdW5jdGlvbltdO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58J2luZXJ0JztcbiAgICBASW5wdXQoKSBkcmFnVW5pdCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXZlbnRGbG93RGlyZWN0aW9uICAgICAgICAgICAhIDogJ2NvbHVtbid8J3Jvdyc7XG4gICAgQElucHV0KCkgZXZlbnRTcGFjaW5nICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBleHRlbmRBbGxEYXlFbmREYXkgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGV4dHJhRGF0YSAgICAgICAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSBmaWx0ZXJFdmVudFJlc291cmNlcyAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZpeGVkRHVyYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZmxleCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBndXR0ZXJXaWR0aCAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhlaWdodCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGlkZGVuICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWRlQm9yZGVycyAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVFbXB0eURheXMgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUVtcHR5SG91cnMgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWRlTm9uV29ya2luZ0RheXMgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVUaW1lQXhpcyAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaG91ckhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGhvdXJIZWlnaHRCcmVha3BvaW50cyAgICAgICAgISA6IG51bWJlcltdO1xuICAgIEBJbnB1dCgpIGhvdXJTcGFjaW5nICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlucHV0RmllbGRBbGlnbiAgICAgICAgICAgICAgISA6ICdzdGFydCd8J2VuZCc7XG4gICAgQElucHV0KCkgaW5zZXJ0QmVmb3JlICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEZpcnN0ICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBpbnRlckRheURyYWcgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGludGVyRGF5UmVzaXplICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXRlbXMgICAgICAgICAgICAgICAgICAgICAgICAhIDogKENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUNvbmZpZ3xXaWRnZXQpW118UmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtQ29uZmlnPnxXaWRnZXRbXXxSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeT58KENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUVudHJ5fFdpZGdldClbXTtcbiAgICBASW5wdXQoKSBrZXlNYXAgICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+O1xuICAgIEBJbnB1dCgpIGxhYmVsUG9zaXRpb24gICAgICAgICAgICAgICAgISA6ICdiZWZvcmUnfCdhYm92ZSd8J2FsaWduLWJlZm9yZSd8J2F1dG8nfG51bGw7XG4gICAgQElucHV0KCkgbGF5b3V0ICAgICAgICAgICAgICAgICAgICAgICAhIDogTGF5b3V0fHN0cmluZ3xDYWxlbmRhckNvbnRhaW5lckxheW91dENvbmZpZztcbiAgICBASW5wdXQoKSBsYXlvdXRTdHlsZSAgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgbWFyZ2luICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhEYXRlICAgICAgICAgICAgICAgICAgICAgICEgOiBEYXRlfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhIZWlnaHQgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1heGltaXplT25Nb2JpbGUgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4V2lkdGggICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5EYXRlICAgICAgICAgICAgICAgICAgICAgICEgOiBEYXRlfHN0cmluZztcbiAgICBASW5wdXQoKSBtaW5EYXlXaWR0aCAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1pbkV2ZW50SGVpZ2h0ICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWluRXZlbnRXaWR0aCAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtaW5IZWlnaHQgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkhvdXJIZWlnaHQgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5XaWR0aCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG5vTWF0Y2hpbmdEYXRlcyAgICAgICAgICAgICAgISA6IHN0cmluZ3xEb21Db25maWc7XG4gICAgQElucHV0KCkgbm9uV29ya2luZ0RheXMgICAgICAgICAgICAgICAhIDogUmVjb3JkPG51bWJlciwgYm9vbGVhbj47XG4gICAgQElucHV0KCkgcGFzdEV2ZW50Q2xzICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xEdXJhdGlvbkNvbmZpZztcbiAgICBASW5wdXQoKSByZWFkT25seSAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbmRpdGlvbiAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fG51bGw7XG4gICAgQElucHV0KCkgcnRsICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzY3JvbGxhYmxlICAgICAgICAgICAgICAgICAgICEgOiBTY3JvbGxlcnxib29sZWFufFNjcm9sbGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNoaWZ0SW5jcmVtZW50ICAgICAgICAgICAgICAgISA6IHN0cmluZ3xEdXJhdGlvbkNvbmZpZztcbiAgICBASW5wdXQoKSBzaG9ydERhdGVGb3JtYXQgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpO1xuICAgIEBJbnB1dCgpIHNob3J0RGF0ZVRpbWVGb3JtYXQgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgc2hvd1RpbWUgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxSZWNvcmQ8KCdzdGFydFRpbWUnfCdlbmRUaW1lJ3wnZHVyYXRpb24nKSwgYm9vbGVhbnxzdHJpbmd8RnVuY3Rpb24+O1xuICAgIEBJbnB1dCgpIHNuYXBSZWxhdGl2ZVRvRXZlbnRTdGFydERhdGUgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3BhbiAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHN0YWNrTXVsdGlEYXlFdmVudHMgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3RyaWN0UmVjb3JkTWFwcGluZyAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzeW5jQ2FsZW5kYXJEYXRlICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN5bmNIb3VySGVpZ2h0cyAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3luY1ZpZXdEYXRlICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0aXRsZSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdG9vbHMgICAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgVG9vbHxUb29sQ29uZmlnPnxudWxsfFJlY29yZDxzdHJpbmcsIFRvb2w+fFJlY29yZDxzdHJpbmcsIFRvb2xDb25maWc+O1xuICAgIEBJbnB1dCgpIHRvb2x0aXAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgd2lkdGggICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gUHJvcGVydGllcyBvbmx5XG4gICAgQElucHV0KCkgYW5jaG9yU2l6ZSAgICAgICAgICEgOiBudW1iZXJbXTtcbiAgICBASW5wdXQoKSBkYXlDZWxsQ2xzICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBmaXJzdFZpc2libGVDZWxsICAgISA6IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIGZpcnN0VmlzaWJsZURhdGUgICAhIDogRGF0ZTtcbiAgICBASW5wdXQoKSBmaXRIb3VycyAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBtaW5IZWlnaHQ/OiBudW1iZXJcbiAgICB9O1xuICAgIEBJbnB1dCgpIGZvY3VzVmlzaWJsZSAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoYXNDaGFuZ2VzICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbGVyICEgOiBTY3JvbGxlcjtcbiAgICBASW5wdXQoKSBpbmNyZW1lbnQgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgaXNTZXR0aW5nVmFsdWVzICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlzVmFsaWQgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsYXN0VmlzaWJsZUNlbGwgICAgISA6IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIGxhc3RWaXNpYmxlRGF0ZSAgICAhIDogRGF0ZTtcbiAgICBASW5wdXQoKSBwYXJlbnQgICAgICAgICAgICAgISA6IFdpZGdldDtcbiAgICBASW5wdXQoKSByZWNvcmQgICAgICAgICAgICAgISA6IE1vZGVsO1xuICAgIEBJbnB1dCgpIHNob3dDdXJyZW50VGltZSAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGZ1bGxXaWR0aD86IGJvb2xlYW5cbiAgICAgICAgc2hvd1RpbWU/OiBib29sZWFuXG4gICAgICAgIG9uVG9wPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgc2l4TWludXRlVGlja3MgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0YXRlICAgICAgICAgICAgICAhIDogYW55O1xuICAgIEBJbnB1dCgpIHRpbWVTbmFwVHlwZSAgICAgICAhIDogJ3JvdW5kJ3wnY2VpbCd8J2Zsb29yJ3xudWxsO1xuICAgIEBJbnB1dCgpIHZhbHVlcyAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgb2JqZWN0PjtcblxuICAgIC8vIEV2ZW50cyBlbWl0dGVyc1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgd2hlbmV2ZXIgdGhlIFthdXRvQ3JlYXRlIGdlc3R1cmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLWF1dG9DcmVhdGUpIGlzIGRldGVjdGVkXG4gICAgICogYW5kIGFsc28gd2hlbiBhIFtkcmFnLWNyZWF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci9mZWF0dXJlL0NhbGVuZGFyRHJhZykgZ2VzdHVyZSBpcyBkZXRlY3RlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNldmVudC1iZWZvcmVBdXRvQ3JlYXRlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgRE9NIGV2ZW50IHdoaWNoIGluaXRpYXRlZCB0aGUgY3JlYXRpb24uXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5kYXRlICpERVBSRUNBVEVEIGluIGZhdm91ciBvZiBgc3RhcnREYXRlYC4qIFRoZSBzdGFydGluZyB0aW1lIG9mIHRoZSBldmVudCB0byBiZSBjcmVhdGVkLiBJZiB0aGlzIGlzIGluIGEgYERheVZpZXdgLCB0aGlzIHdpbGwgYmUgc25hcHBlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gaW4gW2F1dG9DcmVhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLWF1dG9DcmVhdGUpXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgVGhlIHN0YXJ0aW5nIHRpbWUgb2YgdGhlIGV2ZW50IHRvIGJlIGNyZWF0ZWQuIElmIHRoaXMgaXMgaW4gYSBgRGF5Vmlld2AsIHRoaXMgd2lsbCBiZSBzbmFwcGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiBpbiBbYXV0b0NyZWF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctYXV0b0NyZWF0ZSlcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmVuZERhdGUgVGhlIGVuZGluZyB0aW1lIG9mIHRoZSBldmVudCB0byBiZSBjcmVhdGVkLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlJlc291cmNlTW9kZWx9IGV2ZW50LnJlc291cmNlUmVjb3JkIFRoZSByZXNvdXJjZSBpZiB0aGUgVUkgaW5jbHVkZXMgYSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyVmlld30gZXZlbnQudmlldyBUaGlzIHZpZXcuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQXV0b0NyZWF0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGRvbUV2ZW50OiBFdmVudCwgZGF0ZTogRGF0ZSwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgdmlldzogQ2FsZW5kYXJWaWV3IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHZpZXcncyBvcmllbnRhdGluZyBkYXRlIGNoYW5nZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjZXZlbnQtYmVmb3JlQ2hhbmdlRGF0ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5vbGREYXRlIFRoZSBjdXJyZW50IG9yaWVudGF0aW5nIGRhdGUgb2YgdGhpcyB2aWV3LlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSBUaGUgbmV3IGRhdGUgdG8gd2hpY2ggdGhpcyB2aWV3IGlzIHRvIGJlIG9yaWVudGF0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2hhbmdlRGF0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IG9sZERhdGU6IERhdGUsIGRhdGU6IERhdGUgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgaGlkZGVuLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBoaWRkZW4uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIG5ldyBbcmVzcG9uc2l2ZVN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Jlc3BvbnNpdmUjY29uZmlnLXJlc3BvbnNpdmVTdGF0ZSkgaXMgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IHdob3NlIGByZXNwb25zaXZlU3RhdGVgIGlzIHRvIGJlIGNoYW5nZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuc3RhdGUgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHdpZGdldCdzIGByZXNwb25zaXZlU3RhdGVgXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm9sZFN0YXRlIFRoZSBwcmV2aW91cyB2YWx1ZSBmb3IgdGhlIHdpZGdldCdzIGByZXNwb25zaXZlU3RhdGVgXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUmVzcG9uc2l2ZVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHN0YXRlOiBzdHJpbmcsIG9sZFN0YXRlOiBzdHJpbmcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSB0aGlzIGNvbnRhaW5lciB3aWxsIGxvYWQgcmVjb3JkIHZhbHVlcyBpbnRvIGl0cyBjaGlsZCBmaWVsZHMuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdVxuICAgICAqIHdhbnQgdG8gbW9kaWZ5IHRoZSBVSSBiZWZvcmUgZGF0YSBpcyBsb2FkZWQgKGUuZy4gc2V0IHNvbWUgaW5wdXQgZmllbGQgdG8gYmUgcmVhZG9ubHkpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNldFJlY29yZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ29udGFpbmVyLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIHNob3duLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0LGFueX0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgc2hvd25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXR8YW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHN0YXRlIGlzIGFwcGxpZWQgdG8gdGhlIHNvdXJjZS4gQWxsb3dzIGVkaXRpbmcgdGhlIHN0YXRlIG9iamVjdCBvciBwcmV2ZW50aW5nIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7YW55fSBldmVudC5zdGF0ZSBTdGF0ZSBvYmplY3QgY29uZmlnXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU3RhdGVBcHBseTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHN0YXRlOiBhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgc3RhdGUgaXMgc2F2ZWQgYnkgdGhlIFN0YXRlUHJvdmlkZXIuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQuc3RhdGUgU3RhdGUgb2JqZWN0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXRlU2F2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHN0YXRlOiBhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFueSBvdGhlciBldmVudCBpcyBmaXJlZCBmcm9tIHRoZSBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjZXZlbnQtY2F0Y2hBbGwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfX0gZXZlbnQuZXZlbnQgVGhlIE9iamVjdCB0aGF0IGNvbnRhaW5zIGV2ZW50IGRldGFpbHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZXZlbnQudHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhdGNoQWxsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHtba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ30pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgbmV3IHNldCBvZiBldmVudHMgaGFzIGJlZW4gZ2F0aGVyZWQgZm9yIHRoaXMgdmlldydzIGRhdGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7TWFwPGFueSwgYW55Pn0gZXZlbnQuY2VsbE1hcCBUaGUgbWFwIG9mIGRhdGUga2V5cyB0byBbZGF5IGNlbGxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RheUNlbGxDb2xsZWN0ZXIjdHlwZWRlZi1EYXlDZWxsKSBkYXRhIGJsb2Nrcy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTWFwUG9wdWxhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2VsbE1hcDogTWFwPGFueSwgYW55PiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIFBhbmVsIGlzIGNvbGxhcHNlZCB1c2luZyB0aGUgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFBhbmVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciBvbmUgZGF5IGNlbGwncyBldmVudHMgYXJlIGNvbGxlY3RlZCBpbiBzb3J0ZWQgb3JkZXIgYWNjb3JkaW5nIHRvIHRoZVxuICAgICAqIFtldmVudFNvcnRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctZXZlbnRTb3J0ZXIpXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheUFnZW5kYVZpZXcjZXZlbnQtZGF5Q2VsbFBvcHVsYXRlZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbFtdfSBldmVudC5ldmVudHMgVGhlIGV2ZW50cyB0byBiZSBzaG93biBmb3IgdGhlIHBhc3NlZCBkYXRlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5UaGUgZGF0ZSB0aGUgZXZlbnRzIGFyZSB0byBiZSBzaG93biBpbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EYXlDZWxsUG9wdWxhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZXZlbnRzOiBFdmVudE1vZGVsW10sIFRoZTogRGF0ZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIGZpZWxkIGlzIG11dGF0ZWQgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgW2hhc0NoYW5nZXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LWhhc0NoYW5nZXMpIHByb3BlcnR5IGNoYW5nZXNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Db250YWluZXJ9IGV2ZW50LnNvdXJjZSBUaGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuZGlydHkgVGhlIGRpcnR5IHN0YXRlIG9mIHRoZSBDb250YWluZXIgLSBgdHJ1ZWAgaWYgdGhlcmUgYXJlIGFueSBmaWVsZHMgd2hpY2ggaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgaW5pdGlhbCBsb2FkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRpcnR5U3RhdGVDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgZGlydHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0J3MgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIGF2YWlsYWJsZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudCBUaGUgV2lkZ2V0J3MgZWxlbWVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FbGVtZW50Q3JlYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGFuIFthdXRvQ3JlYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1hdXRvQ3JlYXRlKSBnZXN0dXJlIGhhcyBjcmVhdGVkIGEgbmV3IGV2ZW50XG4gICAgICogYW5kIGFkZGVkIGl0IHRvIHRoZSBldmVudCBzdG9yZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNldmVudC1ldmVudEF1dG9DcmVhdGVkKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyVmlld30gZXZlbnQuc291cmNlIFRoaXMgQ2FsZW5kYXIgdmlldyBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBUaGUgbmV3IGV2ZW50IHJlY29yZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudEF1dG9DcmVhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgZGF5IHNwYW5uaW5nIGV2ZW50IGlzIGZvdW5kLCBhbmQgdGhlIGRhdGUgdG8gd2hpY2ggaXRzIGVuY2Fwc3VsYXRpbmcgZXZlbnQgYmFyXG4gICAgICogZXh0ZW5kcyBoYXMgYmVlbiBjYWxjdWxhdGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2V2ZW50LWV2ZW50UHJvcGFnYXRlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmV2ZW50RW5kRGF0ZSBUaGUgZW5kIGRhdGUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgcHJvcGFnYXRlIGVuZCBkYXRlLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQucHJvcGFnYXRlRW5kRGF0ZSBUaGUgc3lzdGVtLWNhbGN1bGF0ZWQgZW5kIHBvaW50IG9mIHRoZSBldmVudCBiYXIuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5pc0FsbERheSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGlzIGFuIGFsbCBkYXkgZXZlbnQsIG9yIHNwYW5zIG11bHRpcGxlIGRheXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5pc092ZXJmbG93IGB0cnVlYCBpZiB0aGlzIGlzIGJlaW5nIGNhbGxlZCBhcyBwYXJ0IG9mIGZ1cnRoZXIgcHJvcGFnYXRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5vdmVyZmxvd3MgYHRydWVgIGlmIHRoZSBldmVudCBleHRlbmRzIGludG8gZnV0dXJlIGNlbGxzLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIFRoZSBldmVudCByZWNvcmQgYmVpbmcgcHJvcGFnYXRlZC5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmRhdGUgVGhlIGRhdGUgZnJvbSB3aGljaCB0aGUgZXZlbnQgaXMgYmVpbmcgcHJvcGFnYXRlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudFByb3BhZ2F0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGV2ZW50RW5kRGF0ZTogRGF0ZSwgcHJvcGFnYXRlRW5kRGF0ZTogRGF0ZSwgaXNBbGxEYXk6IGJvb2xlYW4sIGlzT3ZlcmZsb3c6IGJvb2xlYW4sIG92ZXJmbG93czogYm9vbGVhbiwgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIGRhdGU6IERhdGUgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBQYW5lbCBpcyBleHBhbmRlZCB1c2luZyB0aGUgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBQYW5lbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBlbnRlcnMgdGhpcyBXaWRnZXQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c0luOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIGBibHVyYCBldmVudC5cbiAgICAgKiBmb2N1cyBtb3ZpbmcgZnJvbSB3aXRoaW4gdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZSwgZXZlbiBpZiB0aGVyZSBhcmUgZmxvYXRpbmcgd2lkZ2V0c1xuICAgICAqIHdpbGwgbm90IHRyaWdnZXIgdGhpcyBldmVudC4gVGhpcyBpcyB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgd2lkZ2V0IGNvbXBsZXRlbHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c091dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgd2FzIGhpZGRlblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhpcyBEYXlWaWV3IGNoYW5nZXMgYW4gYXNwZWN0IG9mIGl0cyBsYXlvdXQuIFRoaXMgaGFwcGVucyB3aGVuIGNoYW5naW5nXG4gICAgICogW2hvdXJIZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjcHJvcGVydHktaG91ckhlaWdodCksIFttaW5EYXlXaWR0aF0oI0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I3Byb3BlcnR5LW1pbkRheVdpZHRoKSwgYW5kIHdoZW4gdGhlIGF2YWlsYWJsZVxuICAgICAqIGRheSBjb250YWluZXIgaGVpZ2h0IGNoYW5nZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q2FsZW5kYXIud2lkZ2V0LkRheVZpZXd9IGV2ZW50LnNvdXJjZSBUaGUgdHJpZ2dlcmluZyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25MYXlvdXRVcGRhdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IERheVZpZXcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0IHdoaWNoIGhhZCBiZWVuIGluIGEgbm9uLXZpc2libGUgc3RhdGUgZm9yIGFueSByZWFzb25cbiAgICAgKiBhY2hpZXZlcyB2aXNpYmlsaXR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlBZ2VuZGFWaWV3I2V2ZW50LXBhaW50KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgcGFpbnRlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmZpcnN0UGFpbnQgYHRydWVgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhaW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhaW50OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZpcnN0UGFpbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHJhbmdlIG9mIGRhdGVzIGVuY2Fwc3VsYXRlZCBieSB0aGlzIHZpZXcgY2hhbmdlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5QWdlbmRhVmlldyNldmVudC1yYW5nZUNoYW5nZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHt0eXBlb2YgRGF0ZVJhbmdlT3duZXJ9IGV2ZW50LnNvdXJjZSBUaGlzIGNhbGVuZGFyIHZpZXcgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm9sZCBUaGUgb2xkIGRhdGUgcmFuZ2UgPHN0cm9uZz5pZiBhbnk8L3N0cm9uZz4uXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5vbGQuc3RhcnREYXRlIHRoZSBvbGQgc3RhcnQgZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm9sZC5lbmREYXRlIHRoZSBvbGQgZW5kIGRhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm5ldyBUaGUgbmV3IGRhdGUgcmFuZ2VcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm5ldy5zdGFydERhdGUgdGhlIG5ldyBzdGFydCBkYXRlLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQubmV3LmVuZERhdGUgdGhlIG5ldyBlbmQgZGF0ZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SYW5nZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogdHlwZW9mIERhdGVSYW5nZU93bmVyLCBvbGQ6IHsgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlIH0sIG5ldzogeyBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUgfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFdpZGdldCdzIHJlYWQgb25seSBzdGF0ZSBpcyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQucmVhZE9ubHkgUmVhZCBvbmx5IG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlYWRPbmx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVhZE9ubHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSB3aWRnZXQncyBlbGVtZW50cyBoYXZlIGJlZW4gc3luY2hyb25pemVkIGR1ZSB0byBhIGRpcmVjdCBvciBpbmRpcmVjdCBjYWxsXG4gICAgICogdG8gW3JlY29tcG9zZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tcmVjb21wb3NlKSwgaWYgdGhpcyByZXN1bHRzIGluIHNvbWUgY2hhbmdlIHRvIHRoZSB3aWRnZXQncyByZW5kZXJlZCBET00gZWxlbWVudHMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVjb21wb3NlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGlzIERheVZpZXcgcmVmcmVzaGVzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyLndpZGdldC5EYXlWaWV3fSBldmVudC5zb3VyY2UgVGhlIHRyaWdnZXJpbmcgaW5zdGFuY2UuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVmcmVzaDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogRGF5VmlldyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgZW5jYXBzdWxhdGluZyBlbGVtZW50IG9mIGEgV2lkZ2V0IHJlc2l6ZXMgKm9ubHkgd2hlbiBbbW9uaXRvclJlc2l6ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1vbml0b3JSZXNpemUpIGlzIGB0cnVlYCouXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQud2lkdGggVGhlIG5ldyB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5oZWlnaHQgVGhlIG5ldyBoZWlnaHRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkV2lkdGggVGhlIG9sZCB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRIZWlnaHQgVGhlIG9sZCBoZWlnaHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG9sZFdpZHRoOiBudW1iZXIsIG9sZEhlaWdodDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIG5ldyBbcmVzcG9uc2l2ZVN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Jlc3BvbnNpdmUjY29uZmlnLXJlc3BvbnNpdmVTdGF0ZSkgaXMgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IHdob3NlIGByZXNwb25zaXZlU3RhdGVgIGhhcyBjaGFuZ2VkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnN0YXRlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSB3aWRnZXQncyBgcmVzcG9uc2l2ZVN0YXRlYFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5vbGRTdGF0ZSBUaGUgcHJldmlvdXMgdmFsdWUgZm9yIHRoZSB3aWRnZXQncyBgcmVzcG9uc2l2ZVN0YXRlYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc3BvbnNpdmVTdGF0ZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBzdGF0ZTogc3RyaW5nLCBvbGRTdGF0ZTogc3RyaW5nIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBbc2hpZnRJbmNyZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RhdGVSYW5nZU93bmVyI3Byb3BlcnR5LXNoaWZ0SW5jcmVtZW50KSBvZiB0aGlzIHZpZXcgY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm9sZCBUaGUgc2hpZnQgaW5jcmVtZW50ICppZiBhbnkqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5uZXcgVGhlIHNoaWZ0IGluY3JlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNoaWZ0SW5jcmVtZW50Q2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgb2xkPzogb2JqZWN0LCBuZXc6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGNoYW5naW5nIHRoZSBbaG91ckhlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNwcm9wZXJ0eS1ob3VySGVpZ2h0KSBjYXVzZXMgYW5cbiAgICAgKiBbaG91ciBoZWlnaHQgYnJlYWtwb2ludF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaG91ckhlaWdodEJyZWFrcG9pbnRzKSB0byBiZSBjcm9zc2VkXG4gICAgICogYW5kIHRoZSBkaXNwbGF5ZWQgc3ViVGljayBpbnRlcnZhbHMgaW4gdGhlIHRpbWUgYXhpcyBjaGFuZ2UuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vbGQgVGhlIG9sZCBob3VyIGhlaWdodCB0aWNrIHJlc29sdXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGQubGV2ZWwgVGhlIGxldmVsIGAwYCB0byBgNGAgd2hlcmUgYDBgIGlzIHRoZSBkZWZhdWx0IHdpdGggbm8gc3ViVGljayB0aW1lcyBkaXNwbGF5ZWQsIGFuZCBgNGAgbWVhbnMgZXZlcnkgNSBtaW51dGUgdGltZSBpcyBkaXNwbGF5ZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm9sZC5zdGVwIFRoZSB0aW1lIGR1cmF0aW9uIG9mIHZpc2libGUgc3ViVGlja3MuIFRoaXMgaXMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCByZXF1aXJlZCBieSBbcGFyc2VEdXJhdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyI2Z1bmN0aW9uLXBhcnNlRHVyYXRpb24tc3RhdGljKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5uZXcgVGhlIG5ldyBob3VyIGhlaWdodCB0aWNrIHJlc29sdXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5uZXcubGV2ZWwgVGhlIGxldmVsIGAwYCB0byBgNGAgd2hlcmUgYDBgIGlzIHRoZSBkZWZhdWx0IHdpdGggbm8gc3ViVGljayB0aW1lcyBkaXNwbGF5ZWQsIGFuZCBgNGAgbWVhbnMgZXZlcnkgNSBtaW51dGUgdGltZSBpcyBkaXNwbGF5ZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm5ldy5zdGVwIFRoZSB0aW1lIGR1cmF0aW9uIG9mIHZpc2libGUgc3ViVGlja3MuIFRoaXMgaXMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCByZXF1aXJlZCBieSBbcGFyc2VEdXJhdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyI2Z1bmN0aW9uLXBhcnNlRHVyYXRpb24tc3RhdGljKVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpY2tDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBvbGQ6IHsgbGV2ZWw6IG51bWJlciwgc3RlcDogc3RyaW5nIH0sIG5ldzogeyBsZXZlbDogbnVtYmVyLCBzdGVwOiBzdHJpbmcgfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHRpbWUgYXhpcyBpcyBjbGlja2VkIG9uLiBJZiB0aGUgaGFuZGxlciByZXR1cm5zXG4gICAgICogYGZhbHNlYCB0aGUgY3VycmVudCBwb2ludGVyIGV2ZW50IGlzIG5vdCBwcm9jZXNzZWQgZnVydGhlci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHRyaWdnZXJpbmcgRE9NIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQucHJlY2lzZVRpbWUgVGhlIGV4YWN0IGRhdGUgYW5kIHRpbWUgYXQgdGhlIGNsaWNrZWQgcG9zaXRpb25cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnRpbWUgVGhlIGRhdGUgYW5kIHRpbWUgYXQgdGhlIGNsaWNrZWQgcG9zaXRpb24gc25hcHBlZCBhY2NvcmRpbmcgdG8gdGhlIFtpbmNyZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWluY3JlbWVudCkgYW5kIFt0aW1lU25hcFR5cGVdKCNDYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctdGltZVNuYXBUeXBlKVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpbWVBeGlzQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBkb21FdmVudDogRXZlbnQsIHByZWNpc2VUaW1lOiBEYXRlLCB0aW1lOiBEYXRlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBBIGhlYWRlciBbdG9vbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctdG9vbHMpIGhhcyBiZWVuIGNsaWNrZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuVG9vbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Ub29sfSBldmVudC50b29sIFRoZSB0b29sIHdoaWNoIGlzIGJlaW5nIGNsaWNrZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVG9vbENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBUb29sLCB0b29sOiBUb29sIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbmQgYXBwZW5kIHRoZSB1bmRlcmx5aW5nIHdpZGdldFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgbWUgPSB0aGlzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ1xuICAgICAgICAgICAgfSA9IG1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VOYW1lLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdzLFxuICAgICAgICAgICAgICAgIGJyeW50dW1FdmVudHNcbiAgICAgICAgICAgIH0gPSBCcnludHVtRGF5QWdlbmRhVmlld0NvbXBvbmVudDtcblxuICAgICAgICBicnludHVtQ29uZmlncy5maWx0ZXIocHJvcCA9PiBwcm9wIGluIHRoaXMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGJyeW50dW1Db25maWcsIHByb3AsIHRoaXNbcHJvcF0pO1xuICAgICAgICAgICAgaWYgKFsnZmVhdHVyZXMnLCAnY29uZmlnJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb25maWdQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGJyeW50dW1FdmVudHMuZmlsdGVyKGV2ZW50ID0+IHRoaXNbZXZlbnRdICYmIHRoaXNbZXZlbnRdLm9ic2VydmVycy5sZW5ndGggPiAwKS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgdW5jYXBpdGFsaXplID0gKHN0cjogc3RyaW5nKSA9PiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSksXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gKHN0cjogc3RyaW5nKSA9PiB1bmNhcGl0YWxpemUoc3RyLnNsaWNlKDIpKTtcblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5saXN0ZW5lcnNbZXZlbnROYW1lKGV2ZW50KV0gPSBlID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgbWVbZXZlbnRdLmVtaXQoZSk7XG4gICAgICAgICAgICAgICAgLy8gRXZlbnRFbWl0dGVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMgaW4gdGhlIG5vcm1hbCB3YXksIHdvcmsgYXJvdW5kIGl0IGJ5IHNldHRpbmcgYHJldHVyblZhbHVlYCBmbGFnXG4gICAgICAgICAgICAgICAgLy8gaW4gQW5ndWxhciBsaXN0ZW5lcnNcbiAgICAgICAgICAgICAgICByZXR1cm4gZS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBoYXMgbm8gY29udGFpbmVyIHNwZWNpZmllZCBpbiBjb25maWcgdGhlbiB1c2UgYWRvcHQgdG8gV3JhcHBlcidzIGVsZW1lbnRcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIGNvbnRhaW5lclBhcmFtID0gW1xuICAgICAgICAgICAgICAgICdhZG9wdCcsXG4gICAgICAgICAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QWZ0ZXInLFxuICAgICAgICAgICAgICAgICdpbnNlcnRCZWZvcmUnXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgXS5maW5kKHByb3AgPT4gYnJ5bnR1bUNvbmZpZ1twcm9wXSk7XG4gICAgICAgIGlmICghY29udGFpbmVyUGFyYW0pIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU5hbWUgPT09ICdCdXR0b24nIHx8IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRSb290Tm9kZSgpIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgIC8vIEJ1dHRvbiBzaG91bGQgYWx3YXlzIGJlIDxhPiBvciA8YnV0dG9uPiBpbnNpZGUgb3duZXIgZWxlbWVudFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYXBwZW5kVG8gPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFkb3B0ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29udGFpbmVyKGluc3RhbmNlTmFtZSwgY29udGFpbmVyUGFyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBtZS5pbnN0YW5jZSA9IGluc3RhbmNlTmFtZSA9PT0gJ1dpZGdldCcgPyBXaWRnZXQuY3JlYXRlKGJyeW50dW1Db25maWcpIDogbmV3IGluc3RhbmNlQ2xhc3MoYnJ5bnR1bUNvbmZpZyk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYXRjaCBmb3IgY2hhbmdlc1xuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgIHsgaW5zdGFuY2VOYW1lIH0gPSBCcnludHVtRGF5QWdlbmRhVmlld0NvbXBvbmVudDtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgY2hhbmdlc1xuICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzKS5mb3JFYWNoKChbcHJvcCwgY2hhbmdlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IChjaGFuZ2UgYXMgU2ltcGxlQ2hhbmdlKS5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgICAgICB7IGJyeW50dW1Db25maWdzT25seSwgYnJ5bnR1bVByb3BzIH0gPSBCcnludHVtRGF5QWdlbmRhVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChicnludHVtUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGluc3RhbmNlLCBwcm9wLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChicnludHVtQ29uZmlnc09ubHkuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nVXBkYXRlUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5kZXN0cm95KSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|