@norwegian/core-components 6.0.3 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/accordion/accordion.component.mjs +17 -12
- package/esm2022/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.mjs +1 -1
- package/esm2022/lib/components/airport-select/airport-select.component.mjs +13 -1
- package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +7 -1
- package/esm2022/lib/components/backdrop/backdrop.component.mjs +3 -1
- package/esm2022/lib/components/box/box.component.mjs +4 -4
- package/esm2022/lib/components/button/button.component.mjs +5 -1
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +3 -1
- package/esm2022/lib/components/chip/chip.component.mjs +2 -7
- package/esm2022/lib/components/container/container.component.mjs +1 -1
- package/esm2022/lib/components/continue/continue.component.mjs +6 -1
- package/esm2022/lib/components/cover/cover.component.mjs +1 -1
- package/esm2022/lib/components/datepicker/calendar/calendar.component.mjs +1 -1
- package/esm2022/lib/components/datepicker/datepicker.component.mjs +16 -1
- package/esm2022/lib/components/datepicker-combo/datepicker-combo.component.mjs +17 -1
- package/esm2022/lib/components/divider/divider.component.mjs +1 -1
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +2 -1
- package/esm2022/lib/components/filter/filter.component.mjs +36 -2
- package/esm2022/lib/components/grid/grid.component.mjs +1 -1
- package/esm2022/lib/components/icon/icon.component.mjs +1 -1
- package/esm2022/lib/components/icon-list/icon-list.component.mjs +1 -1
- package/esm2022/lib/components/icon-list/icon-list.model.mjs +1 -1
- package/esm2022/lib/components/info/info.component.mjs +5 -4
- package/esm2022/lib/components/input/input.component.mjs +6 -1
- package/esm2022/lib/components/journey/journey.component.mjs +5 -7
- package/esm2022/lib/components/journey-availability/journey-availability.component.mjs +7 -5
- package/esm2022/lib/components/journey-availability-list/journey-availability-list.component.mjs +22 -25
- package/esm2022/lib/components/journey-selection/journey-selection.component.mjs +12 -4
- package/esm2022/lib/components/journey-stopover/journey-stopover.component.mjs +18 -20
- package/esm2022/lib/components/list/list.component.mjs +1 -1
- package/esm2022/lib/components/modal/modal.component.mjs +5 -7
- package/esm2022/lib/components/number-field/number-field.component.mjs +4 -2
- package/esm2022/lib/components/page-footer/page-footer.component.mjs +2 -4
- package/esm2022/lib/components/page-header/page-header.component.mjs +30 -12
- package/esm2022/lib/components/page-header/page-header.module.mjs +5 -4
- package/esm2022/lib/components/passenger-select/models/passengers.model.mjs +1 -1
- package/esm2022/lib/components/passenger-select/passenger-select.component.mjs +11 -7
- package/esm2022/lib/components/phone-number/phone-number.component.mjs +11 -15
- package/esm2022/lib/components/premium-toggle/premium-toggle.component.mjs +3 -4
- package/esm2022/lib/components/radio/radio.component.mjs +4 -2
- package/esm2022/lib/components/select/select.component.mjs +11 -7
- package/esm2022/lib/components/simple-list/simple-list.component.mjs +1 -1
- package/esm2022/lib/components/slide-toggle/slide-toggle.component.mjs +9 -5
- package/esm2022/lib/components/slider/slider.component.mjs +32 -18
- package/esm2022/lib/components/sort/sort.component.mjs +11 -7
- package/esm2022/lib/components/spinner/spinner.component.mjs +13 -18
- package/esm2022/lib/components/subsidy-discount/subsidy-discount.component.mjs +13 -7
- package/esm2022/lib/components/suggestions/suggestions.component.mjs +3 -2
- package/esm2022/lib/components/tab-group/tab-group.component.mjs +3 -2
- package/esm2022/lib/components/table/table.component.mjs +1 -3
- package/esm2022/lib/components/textarea/textarea.component.mjs +6 -1
- package/esm2022/lib/components/toggle/toggle.component.mjs +5 -5
- package/esm2022/lib/components/trip-summary/trip-summary.component.mjs +26 -31
- package/esm2022/lib/components/weather-icon/weather-icon.component.mjs +3 -2
- package/fesm2022/norwegian-core-components.mjs +371 -221
- package/fesm2022/norwegian-core-components.mjs.map +1 -1
- package/lib/components/accordion/accordion.component.d.ts +81 -78
- package/lib/components/airport-select/airport-select-dropdown/airport-select-dropdown.component.d.ts +2 -2
- package/lib/components/airport-select/airport-select.component.d.ts +38 -2
- package/lib/components/autocomplete/autocomplete.component.d.ts +15 -2
- package/lib/components/backdrop/backdrop.component.d.ts +3 -0
- package/lib/components/box/box.component.d.ts +13 -3
- package/lib/components/button/button.component.d.ts +26 -0
- package/lib/components/checkbox/checkbox.component.d.ts +18 -2
- package/lib/components/chip/chip.component.d.ts +5 -21
- package/lib/components/container/container.component.d.ts +6 -0
- package/lib/components/continue/continue.component.d.ts +14 -0
- package/lib/components/cover/cover.component.d.ts +13 -3
- package/lib/components/datepicker/calendar/calendar.component.d.ts +2 -2
- package/lib/components/datepicker/datepicker.component.d.ts +33 -2
- package/lib/components/datepicker-combo/datepicker-combo.component.d.ts +42 -0
- package/lib/components/divider/divider.component.d.ts +9 -0
- package/lib/components/dropdown/dropdown.component.d.ts +8 -0
- package/lib/components/filter/filter.component.d.ts +108 -2
- package/lib/components/grid/grid.component.d.ts +12 -0
- package/lib/components/icon/icon.component.d.ts +5 -8
- package/lib/components/icon-list/icon-list.component.d.ts +5 -0
- package/lib/components/icon-list/icon-list.model.d.ts +1 -0
- package/lib/components/info/info.component.d.ts +7 -18
- package/lib/components/input/input.component.d.ts +30 -5
- package/lib/components/journey/journey.component.d.ts +9 -16
- package/lib/components/journey-availability/journey-availability.component.d.ts +8 -8
- package/lib/components/journey-availability-list/journey-availability-list.component.d.ts +29 -34
- package/lib/components/journey-selection/journey-selection.component.d.ts +14 -3
- package/lib/components/journey-stopover/journey-stopover.component.d.ts +35 -43
- package/lib/components/list/list.component.d.ts +8 -0
- package/lib/components/modal/modal.component.d.ts +16 -34
- package/lib/components/number-field/number-field.component.d.ts +26 -12
- package/lib/components/page-footer/page-footer.component.d.ts +9 -16
- package/lib/components/page-header/page-header.component.d.ts +30 -15
- package/lib/components/page-header/page-header.module.d.ts +2 -1
- package/lib/components/passenger-select/models/passengers.model.d.ts +2 -2
- package/lib/components/passenger-select/passenger-select.component.d.ts +33 -18
- package/lib/components/phone-number/phone-number.component.d.ts +80 -108
- package/lib/components/premium-toggle/premium-toggle.component.d.ts +9 -13
- package/lib/components/radio/radio.component.d.ts +35 -18
- package/lib/components/select/select.component.d.ts +47 -29
- package/lib/components/simple-list/simple-list.component.d.ts +16 -8
- package/lib/components/slide-toggle/slide-toggle.component.d.ts +16 -9
- package/lib/components/slider/slider.component.d.ts +51 -28
- package/lib/components/sort/sort.component.d.ts +12 -7
- package/lib/components/spinner/spinner.component.d.ts +24 -37
- package/lib/components/subsidy-discount/subsidy-discount.component.d.ts +14 -7
- package/lib/components/suggestions/suggestions.component.d.ts +6 -3
- package/lib/components/tab-group/tab-group.component.d.ts +6 -3
- package/lib/components/table/table.component.d.ts +3 -8
- package/lib/components/textarea/textarea.component.d.ts +42 -20
- package/lib/components/toggle/toggle.component.d.ts +44 -68
- package/lib/components/trip-summary/trip-summary.component.d.ts +68 -82
- package/lib/components/weather-icon/weather-icon.component.d.ts +12 -6
- package/package.json +3 -3
|
@@ -64,6 +64,7 @@ export class FilterComponent extends NasComponentBase {
|
|
|
64
64
|
this.inboundOpenChange.emit(value);
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
|
+
* @property Input
|
|
67
68
|
* @description
|
|
68
69
|
* An array of different passenger types that will be displayed.
|
|
69
70
|
*/
|
|
@@ -78,6 +79,7 @@ export class FilterComponent extends NasComponentBase {
|
|
|
78
79
|
this.passengersChange.emit(value);
|
|
79
80
|
}
|
|
80
81
|
/**
|
|
82
|
+
* @property Input
|
|
81
83
|
* @description
|
|
82
84
|
* Indicates if the edit search of accordion should be expended on mobile screen sizes.
|
|
83
85
|
*/
|
|
@@ -103,6 +105,7 @@ export class FilterComponent extends NasComponentBase {
|
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
107
|
/**
|
|
108
|
+
* @property Input
|
|
106
109
|
* @required
|
|
107
110
|
* @description
|
|
108
111
|
* All airports that will be populated into the dropdown lists.
|
|
@@ -119,6 +122,7 @@ export class FilterComponent extends NasComponentBase {
|
|
|
119
122
|
}
|
|
120
123
|
}
|
|
121
124
|
/**
|
|
125
|
+
* @property Input
|
|
122
126
|
* @description
|
|
123
127
|
* Sets and gets the selected trip type.
|
|
124
128
|
*/
|
|
@@ -133,6 +137,7 @@ export class FilterComponent extends NasComponentBase {
|
|
|
133
137
|
this.tripTypeChange.emit(this.tripType);
|
|
134
138
|
}
|
|
135
139
|
/**
|
|
140
|
+
* @property Input
|
|
136
141
|
* @description
|
|
137
142
|
* Sets and gets whether the selected transit type is direct only or not.
|
|
138
143
|
*/
|
|
@@ -147,6 +152,7 @@ export class FilterComponent extends NasComponentBase {
|
|
|
147
152
|
this.directOnlyChange.emit(this.directOnly);
|
|
148
153
|
}
|
|
149
154
|
/**
|
|
155
|
+
* @property Input
|
|
150
156
|
* @description
|
|
151
157
|
* Selected datefor outbound calendar.
|
|
152
158
|
*/
|
|
@@ -163,6 +169,7 @@ export class FilterComponent extends NasComponentBase {
|
|
|
163
169
|
});
|
|
164
170
|
}
|
|
165
171
|
/**
|
|
172
|
+
* @property Input
|
|
166
173
|
* @description
|
|
167
174
|
* Selected datefor inbound calendar.
|
|
168
175
|
*/
|
|
@@ -203,6 +210,7 @@ export class FilterComponent extends NasComponentBase {
|
|
|
203
210
|
this.maximize = false;
|
|
204
211
|
this.isNasGroupValid = false;
|
|
205
212
|
/**
|
|
213
|
+
* @property Input
|
|
206
214
|
* @description
|
|
207
215
|
* A separator for the filter summary that is dispayed if minimizeOnMobile is true.
|
|
208
216
|
*
|
|
@@ -218,133 +226,159 @@ export class FilterComponent extends NasComponentBase {
|
|
|
218
226
|
*/
|
|
219
227
|
this.lastSummarySeparator = '';
|
|
220
228
|
/**
|
|
229
|
+
* @property Input
|
|
221
230
|
* @description
|
|
222
231
|
* A placeholder that will appear on the origin airport input field.
|
|
223
232
|
*/
|
|
224
233
|
this.placeholderOrigin = '';
|
|
225
234
|
/**
|
|
235
|
+
* @property Input
|
|
226
236
|
* @description
|
|
227
237
|
* A placeholder that will appear on the destination airport input field.
|
|
228
238
|
*/
|
|
229
239
|
this.placeholderDestination = '';
|
|
230
240
|
/**
|
|
241
|
+
* @property Output
|
|
231
242
|
* @description
|
|
232
243
|
* An event that is fired every time the origin dropdown selector opens or closes.
|
|
233
244
|
*/
|
|
234
245
|
this.originOpenChange = new EventEmitter();
|
|
235
246
|
/**
|
|
247
|
+
* @property Output
|
|
236
248
|
* @description
|
|
237
249
|
* An event that is fired every time the origin dropdown selector opens or closes.
|
|
238
250
|
*/
|
|
239
251
|
this.destinationOpenChange = new EventEmitter();
|
|
240
252
|
/**
|
|
253
|
+
* @property Output
|
|
241
254
|
* @description
|
|
242
255
|
* An event that is fired every time the passenger select dropdown opens or closes.
|
|
243
256
|
*/
|
|
244
257
|
this.passengerSelectOpenChange = new EventEmitter();
|
|
245
258
|
/**
|
|
259
|
+
* @property Output
|
|
246
260
|
* @description
|
|
247
261
|
* An event that is fired every time the selected origin airport changes.
|
|
248
262
|
*/
|
|
249
263
|
this.originChange = new EventEmitter();
|
|
250
264
|
/**
|
|
265
|
+
* @property Output
|
|
251
266
|
* @description
|
|
252
267
|
* An event that is fired every time the selected destination airport changes.
|
|
253
268
|
*/
|
|
254
269
|
this.destinationChange = new EventEmitter();
|
|
255
270
|
/**
|
|
271
|
+
* @property Output
|
|
256
272
|
* @description
|
|
257
273
|
* An event that is fired every time a passenger selection change is performed.
|
|
258
274
|
*/
|
|
259
275
|
this.passengersChange = new EventEmitter();
|
|
260
276
|
/**
|
|
277
|
+
* @property Output
|
|
261
278
|
* @description
|
|
262
279
|
* Sets and gets the selected trip type.
|
|
263
280
|
*/
|
|
264
281
|
this.tripTypeChange = new EventEmitter();
|
|
265
282
|
/**
|
|
283
|
+
* @property Output
|
|
266
284
|
* @description
|
|
267
285
|
* Sets and gets whether the selected transit type is direct only or not.
|
|
268
286
|
*/
|
|
269
287
|
this.directOnlyChange = new EventEmitter();
|
|
270
288
|
/**
|
|
289
|
+
* @property Input
|
|
271
290
|
* @description
|
|
272
291
|
* The display format of the date when user has selected the date and it is being shown in the input box for the date picker.
|
|
273
292
|
* Please look at the angular Date pipe for valid formats and variations.
|
|
274
293
|
*/
|
|
275
294
|
this.dateDisplayFormat = 'EEEE d, MMMM yyyy';
|
|
276
295
|
/**
|
|
296
|
+
* @property Input
|
|
277
297
|
* @description
|
|
278
298
|
* The time display format.
|
|
279
299
|
*/
|
|
280
300
|
this.timeDisplayFormat = 'HH:mm';
|
|
281
301
|
/**
|
|
302
|
+
* @property Input
|
|
282
303
|
* @description
|
|
283
304
|
* A locale code for the locale format rules to use. When not supplied, uses the value of LOCALE_ID, which is en-US by default.
|
|
284
305
|
* This requires that registerLocaleData is called with the respective locale.
|
|
285
306
|
*/
|
|
286
307
|
this.locale = 'en-GB';
|
|
287
308
|
/**
|
|
309
|
+
* @property Input
|
|
288
310
|
* @description
|
|
289
311
|
* Will display the destination input, set this to false to remove it. It's true by default.
|
|
290
312
|
*/
|
|
291
313
|
this.enableDestinationSelect = true;
|
|
292
314
|
/**
|
|
315
|
+
* @property Input
|
|
293
316
|
* @description
|
|
294
317
|
* Will display passenger select, set this to false to remove it. It's true by default.
|
|
295
318
|
*/
|
|
296
319
|
this.enablePassengersSelect = true;
|
|
297
320
|
/**
|
|
321
|
+
* @property Input
|
|
298
322
|
* @description
|
|
299
323
|
* Will display the trip switch, set this to false to remove it. It's true by default.
|
|
300
324
|
*/
|
|
301
325
|
this.enableTripSwitch = true;
|
|
302
326
|
/**
|
|
327
|
+
* @property Input
|
|
303
328
|
* @description
|
|
304
329
|
* Will display the transit switch, set this to false to remove it. It's true by default.
|
|
305
330
|
*/
|
|
306
331
|
this.enableTransitSwitch = true;
|
|
307
332
|
/**
|
|
333
|
+
* @property Output
|
|
308
334
|
* @description
|
|
309
335
|
* When selected datehas been changed on the outbound calendar.
|
|
310
336
|
*/
|
|
311
337
|
this.outboundSelectedDateChange = new EventEmitter();
|
|
312
338
|
/**
|
|
339
|
+
* @property Output
|
|
313
340
|
* @description
|
|
314
341
|
* When selected datehas been changed on the inbound calendar.
|
|
315
342
|
*/
|
|
316
343
|
this.inboundSelectedDateChange = new EventEmitter();
|
|
317
344
|
/**
|
|
345
|
+
* @property Output
|
|
318
346
|
* @description
|
|
319
347
|
* Outbound datepicker is open or closed.
|
|
320
348
|
*/
|
|
321
349
|
this.outboundOpenChange = new EventEmitter();
|
|
322
350
|
/**
|
|
351
|
+
* @property Output
|
|
323
352
|
* @description
|
|
324
353
|
* Inbound datepicker is open or closed.
|
|
325
354
|
*/
|
|
326
355
|
this.inboundOpenChange = new EventEmitter();
|
|
327
356
|
/**
|
|
357
|
+
* @property Output
|
|
328
358
|
* @description
|
|
329
359
|
* Outbound calendar changes month.
|
|
330
360
|
*/
|
|
331
361
|
this.outboundMonthChange = new EventEmitter();
|
|
332
362
|
/**
|
|
363
|
+
* @property Output
|
|
333
364
|
* @description
|
|
334
365
|
* Inbound calendar changes month.
|
|
335
366
|
*/
|
|
336
367
|
this.inboundMonthChange = new EventEmitter();
|
|
337
368
|
/**
|
|
369
|
+
* @property Output
|
|
338
370
|
* @description
|
|
339
371
|
* When a user has actively changed the date.
|
|
340
372
|
*/
|
|
341
373
|
this.focusOnNextChange = new EventEmitter();
|
|
342
374
|
/**
|
|
375
|
+
* @property Output
|
|
343
376
|
* @description
|
|
344
377
|
* The geolocation of the user. Will be emitted if 'enableSuggestions' is true.
|
|
345
378
|
*/
|
|
346
379
|
this.positionChange = new EventEmitter();
|
|
347
380
|
/**
|
|
381
|
+
* @property Output
|
|
348
382
|
* @description
|
|
349
383
|
* An even that is fired every time the info button on the subsidy discount is clicked.
|
|
350
384
|
*/
|
|
@@ -994,7 +1028,7 @@ export class FilterComponent extends NasComponentBase {
|
|
|
994
1028
|
}
|
|
995
1029
|
}
|
|
996
1030
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: FilterComponent, deps: [{ token: i1.DeviceHelper }, { token: i2.SortService }, { token: i3.AbandonedBasketService }, { token: i4.DateHelper }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
997
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: FilterComponent, selector: "nas-filter", inputs: { airportRelations: "airportRelations", ariaLabelClear: "ariaLabelClear", ariaLabelSubtract: "ariaLabelSubtract", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelAdd: "ariaLabelAdd", allowedOriginAirports: "allowedOriginAirports", allowedDestinationAirports: "allowedDestinationAirports", displayLatestSearches: "displayLatestSearches", useSwitch: "useSwitch", displayClosestAirports: "displayClosestAirports", originAirportCode: "originAirportCode", destinationAirportCode: "destinationAirportCode", passengerSelectLabel: "passengerSelectLabel", maxPaxCount: "maxPaxCount", passengers: "passengers", minAdultCount: "minAdultCount", tripSwitchRoundTripLabel: "tripSwitchRoundTripLabel", tripSwitchOneWayLabel: "tripSwitchOneWayLabel", directOnlyLabel: "directOnlyLabel", directTransitLabel: "directTransitLabel", minimizeOnMobile: "minimizeOnMobile", expandedAccordionMobile: "expandedAccordionMobile", defaultSummarySeparator: "defaultSummarySeparator", lastSummarySeparator: "lastSummarySeparator", passengerSelectTitle: "passengerSelectTitle", passengerSelectAdultsLabel: "passengerSelectAdultsLabel", passengerSelectChildrenLabel: "passengerSelectChildrenLabel", passengerSelectInfantsLabel: "passengerSelectInfantsLabel", groupBookingLabel: "groupBookingLabel", allAirportsLabel: "allAirportsLabel", latestSearchesLabel: "latestSearchesLabel", closestAirportsLabel: "closestAirportsLabel", selectOriginFirstLabel: "selectOriginFirstLabel", labelOrigin: "labelOrigin", placeholderOrigin: "placeholderOrigin", labelDestination: "labelDestination", geolocationLabel: "geolocationLabel", geolocationBlockedLabel: "geolocationBlockedLabel", placeholderDestination: "placeholderDestination", keepSelection: "keepSelection", editSearchTitle: "editSearchTitle", nasFormGroup: "nasFormGroup", nasFormControlNameOrigin: "nasFormControlNameOrigin", nasFormControlNameDestination: "nasFormControlNameDestination", nasFormControlNameTripType: "nasFormControlNameTripType", nasFormControlNameDirectOnly: "nasFormControlNameDirectOnly", nasFormControlNameOutbound: "nasFormControlNameOutbound", nasFormControlNameInbound: "nasFormControlNameInbound", nasFormControlGroupBooking: "nasFormControlGroupBooking", nasFormControlNameSubsidyDiscount: "nasFormControlNameSubsidyDiscount", overrideOrigin: "overrideOrigin", enableSuggestions: "enableSuggestions", closestAirports: "closestAirports", minimize: "minimize", airports: "airports", tripType: "tripType", directOnly: "directOnly", groupBookingLimit: "groupBookingLimit", subsidyDiscounts: "subsidyDiscounts", selectedSubsidyDiscount: "selectedSubsidyDiscount", subsidyDiscountLabel: "subsidyDiscountLabel", ariaLabelPreviousMonth: "ariaLabelPreviousMonth", ariaLabelNextMonth: "ariaLabelNextMonth", noAvailableFlightsLabel: "noAvailableFlightsLabel", availableFlightsLabel: "availableFlightsLabel", disablePastSelection: "disablePastSelection", outboundLabel: "outboundLabel", inboundLabel: "inboundLabel", availability: "availability", outboundAvailableDates: "outboundAvailableDates", inboundAvailableDates: "inboundAvailableDates", times: "times", dateDisplayFormat: "dateDisplayFormat", timeDisplayFormat: "timeDisplayFormat", locale: "locale", compact: "compact", outboundDisabled: "outboundDisabled", inboundDisabled: "inboundDisabled", enableDatepickers: "enableDatepickers", minimizingLabel: "minimizingLabel", maximizingLabel: "maximizingLabel", directOnlyMobileLabel: "directOnlyMobileLabel", orLabel: "orLabel", invalidDestinationText: "invalidDestinationText", outboundSelectedDate: "outboundSelectedDate", inboundSelectedDate: "inboundSelectedDate", enableDestinationSelect: "enableDestinationSelect", enablePassengersSelect: "enablePassengersSelect", enableTripSwitch: "enableTripSwitch", enableTransitSwitch: "enableTransitSwitch" }, outputs: { originOpenChange: "originOpenChange", destinationOpenChange: "destinationOpenChange", passengerSelectOpenChange: "passengerSelectOpenChange", originChange: "originChange", destinationChange: "destinationChange", passengersChange: "passengersChange", tripTypeChange: "tripTypeChange", directOnlyChange: "directOnlyChange", outboundSelectedDateChange: "outboundSelectedDateChange", inboundSelectedDateChange: "inboundSelectedDateChange", outboundOpenChange: "outboundOpenChange", inboundOpenChange: "inboundOpenChange", outboundMonthChange: "outboundMonthChange", inboundMonthChange: "inboundMonthChange", focusOnNextChange: "focusOnNextChange", positionChange: "positionChange", subsidyDiscountInfoClick: "subsidyDiscountInfoClick" }, viewQueries: [{ propertyName: "passengerSelectDropdown", first: true, predicate: ["passengerSelectDropdown"], descendants: true }, { propertyName: "passengerSelect", first: true, predicate: ["passengerSelect"], descendants: true }, { propertyName: "tripSwitch", first: true, predicate: ["tripSwitch"], descendants: true }, { propertyName: "transitSwitch", first: true, predicate: ["transitSwitch"], descendants: true }, { propertyName: "airportSelect", first: true, predicate: ["airportSelect"], descendants: true }, { propertyName: "datepickerCombo", first: true, predicate: ["datepickerCombo"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "tripTypeOneway", first: true, predicate: ["tripTypeOneway"], descendants: true }, { propertyName: "tripTypeRoundTrip", first: true, predicate: ["tripTypeRoundTrip"], descendants: true }, { propertyName: "transitTypeDirectOnly", first: true, predicate: ["transitTypeDirectOnly"], descendants: true }, { propertyName: "transitTypeTransit", first: true, predicate: ["transitTypeTransit"], descendants: true }, { propertyName: "subsidyDiscount", first: true, predicate: ["subsidyDiscount"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\"\n simple\n containerOnToggle\n transparent\n [expanded]=\"expandedAccordionMobile\"\n [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\"\n *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}</div>\n\n<ng-template #filterTemplate>\n <div #container\n [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', maximize && 'maximize'])\">\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect)\"\n #airportSelect\n combo\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getAirportSelectClass()\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [placeholderDestination]=\"placeholderDestination\"\n [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && (!enableDestinationSelect)\"\n #airportSelect\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions)\"\n [nasClass]=\"getFilterClass('suggestions')\"\n [suggestions]=\"getSuggestions()\"\n [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div\n [nasClass]=\"!enableDestinationSelect ? getClass('origin-combined') :\n getTravelDetailsClass('', ['combined', exists(enableDatepickers) && 'no-border', exists(minimize) && 'minimized'])\">\n <ng-container *ngIf=\"enablePassengersSelect\">\n <nas-dropdown #passengerSelectDropdown\n *ngIf=\"passengers?.length > 0\"\n [nasClass]=\"getTravelDetailsClass('dropdown', 'passengers')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"passengerSelectLabel\"\n [labelStyle]=\"{'width': '102px'}\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onPassengerSelectOpen($event)\"\n (keydown)=\"passengerKeyDown($event)\">\n <nas-passenger-select #passengerSelect\n [ariaLabelAdd]=\"ariaLabelAdd\"\n [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\"\n [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\"\n [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\"\n [title]=\"passengerSelectTitle\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\"\n [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\"\n (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n </nas-dropdown>\n </ng-container>\n <ng-container *ngIf=\"enableTripSwitch\">\n <nas-dropdown *ngIf=\"tripSwitchOneWayLabel && tripSwitchRoundTripLabel\"\n #tripSwitch\n [nasClass]=\"getTravelDetailsClass('dropdown', 'trip-type')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"getTripSwitchLabel()\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onTripSwitchOpen($event)\"\n (keydown)=\"onTripSwitchKeyDown($event)\">\n <div [nasClass]=\"getTravelDetailsClass('actions')\">\n <button type=\"button\"\n #tripTypeRoundTrip\n [nasClass]=\"getTravelDetailsClass('action', tripType === 2 && 'active')\"\n (click)=\"onTripTypeChange(2)\">\n <nas-icon [type]=\"'medium'\"\n [icon]=\"tripType === 2 ? 'flight-return--light' : 'flight-return'\"></nas-icon>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{tripSwitchRoundTripLabel}}</span>\n </button>\n <button type=\"button\"\n #tripTypeOneway\n [nasClass]=\"getTravelDetailsClass('action', tripType === 1 && 'active')\"\n (click)=\"onTripTypeChange(1)\">\n <nas-icon [type]=\"'medium'\"\n [icon]=\"tripType === 1 ? 'flight-oneway--light' : 'flight-oneway'\"></nas-icon>\n <span [nasClass]=\"getTravelDetailsClass('title', ['small'])\">{{tripSwitchOneWayLabel}}</span>\n </button>\n </div>\n </nas-dropdown>\n </ng-container>\n <ng-container *ngIf=\"enableTransitSwitch\">\n <nas-dropdown *ngIf=\"directOnlyLabel && directTransitLabel\"\n #transitSwitch\n [nasClass]=\"getTravelDetailsClass('dropdown', 'transit-type')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"getTransitLabel()\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onTransitSwitchOpen($event)\"\n (keydown)=\"transitKeyDown($event)\">\n <div [nasClass]=\"getTravelDetailsClass('actions')\">\n <button type=\"button\"\n #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon')\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon-stop')\"></span>\n </span>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{directTransitLabel}}</span>\n </button>\n <button [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\"\n type=\"button\"\n #transitTypeDirectOnly\n (click)=\"onTransitChange(true)\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon')\"></span>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{directOnlyLabel}}</span>\n </button>\n </div>\n </nas-dropdown>\n </ng-container>\n </div>\n <div *ngIf=\"exists(enableDatepickers)\"\n [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo\n compact\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\"\n [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\"\n [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\"\n [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [times]=\"times\"\n [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\"\n [outboundOnly]=\"tripType === 1\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\"\n (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\"\n [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\"\n [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"subsidyDiscounts && subsidyDiscounts.length > 0\"\n [nasClass]=\"getFilterClass('subsidy-discount')\">\n <nas-subsidy-discount #subsidyDiscount\n [discounts]=\"subsidyDiscounts\"\n [selectedDiscount]=\"selectedSubsidyDiscount\"\n [label]=\"subsidyDiscountLabel\"\n (infoButtonClick)=\"onSubsidyDiscountInfoClick()\"\n (discountSelectChange)=\"onSubsidyDiscountSelectChange($event)\"\n (infoButtonKeydown)=\"onSubsidyDiscountInfoButtonKeydown($event)\"></nas-subsidy-discount>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter{background-color:#f1f1f1;position:relative;z-index:6}.nas-filter__title{margin-top:24px;font-size:28px;line-height:34px}@media screen and (min-width: 640px){.nas-filter__title{font-size:32px;line-height:38px}}.nas-filter__title--md{margin-top:60px}.nas-filter__filters{margin-top:12px;display:flex;flex-wrap:wrap;order:2}.nas-filter__filters .nas-filter__date-combo{order:2;flex:1;z-index:2}.nas-filter__filters--minimized .nas-filter__airport-select:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.nas-filter__filters--maximize .nas-filter__airport-select:after{display:none}.nas-filter__filters--md .nas-filter__date-combo{flex:0 0 100%}.nas-filter__filters--lg{display:flex;align-items:stretch}.nas-filter__filters--lg .nas-filter__date-combo{order:3;flex:0 0 100%;z-index:1}.nas-filter__filters--lg .nas-filter__suggestions{order:3}.nas-filter__filters--lg .nas-filter__filters--minimized .nas-filter__airport-select{margin-right:0;flex:0 1 100%}.nas-filter__filters--lg .nas-filter__filters--maximize .nas-filter__airport-select{margin-right:3px;flex:auto}.nas-filter__filters--lg.nas-filter__filters--maximize .nas-filter__date-combo{border-bottom:3px solid #c3c3c3}.nas-filter__suggestions{flex-basis:100%;position:relative;margin-top:3px}.nas-filter__suggestions:before{content:\"\";position:absolute;top:-3px;left:0px;width:100%;border-top:3px solid #c3c3c3}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__airport-select--lg{width:0;margin:0 3px 0 0;flex:1 1 auto}.nas-filter__toggler{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;font-size:18px;line-height:26px;color:#003251;margin-top:6px;z-index:1}.nas-filter__toggler .nas-filter__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter__toggler .nas-filter__direct-only{display:inline-block}.travel-details{position:relative;display:flex;margin:0;flex-wrap:wrap;z-index:1}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #f1f1f1}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:26px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:26px;margin:0}.travel-details__actions{display:flex}.travel-details__action{padding:12px;width:100%;background-color:#fff}.travel-details__action:hover,.travel-details__action:focus{background-color:#e3e3e3}.travel-details__action--active,.travel-details__action--active:hover,.travel-details__action--active:focus{color:#fff;background-color:#003251}.travel-details__action:focus{outline:none;box-shadow:inset 0 0 2px #c3c3c3,inset 0 0 2px 3px #3b99fc;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__dropdown--md.travel-details__dropdown--trip-type{order:2;flex:1;margin-right:3px}.travel-details__dropdown--md.travel-details__dropdown--transit-type{order:3;flex:1}.travel-details__dropdown--md.travel-details__dropdown--passengers{order:1;flex:1;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--trip-type{order:2;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--transit-type{order:3;flex:1 1 auto}.travel-details__dropdown--lg.travel-details__dropdown--passengers{order:1;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg:focus{outline:none}.travel-details__dropdown--lg:after{display:none}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}.travel-details--combined{order:3;flex:0 0 100%}.travel-details--combined.travel-details--md:after{content:\"\";position:absolute;bottom:-6px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--md .travel-details__dropdown{margin:0 3px 0 0}.travel-details--combined.travel-details--md .travel-details__dropdown:last-child{margin:0}.travel-details--combined.travel-details--md .dropdown__toggle{height:calc(100% - 3px);margin:0;padding-left:16px;padding-right:16px}.travel-details--combined.travel-details--lg{order:2;flex:0 0 auto;margin:0 0 0 -3px;padding-left:3px;z-index:2}.travel-details--combined.travel-details--lg:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--lg .dropdown__toggle{height:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle{padding:20px!important;width:100%;height:100%}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle:hover:after{display:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle nas-icon{float:right}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle:focus{outline:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown{width:100%}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown:focus{outline:none}@media (min-width: 640px){::ng-deep .nas-filter__filters .travel-details__dropdown:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-filter__date-combo--side-by-side .nas-datepicker-combo__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter__filters .nas-airport-select__input-line{border-top:none!important}::ng-deep .nas-filter__filters .nas-airport-select-combo__separator{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter__filters .nas-datepicker-combo__separator{display:none}::ng-deep .nas-filter__filters--lg .nas-dropdown__toggle{display:flex}::ng-deep .nas-filter__filters--lg .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:3px solid #c3c3c3}::ng-deep .nas-filter__filters--lg .nas-airport-select__input-line{border-top:3px solid #c3c3c3!important}::ng-deep .nas-filter__filters--lg .nas-datepicker-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter__filters--lg .nas-airport-select-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter__rotate{transform:rotate(180deg)}::ng-deep .nas-filter__rotate-enter,::ng-deep .nas-filter__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__input-line{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select-combo__separator{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results-wrapper{margin-top:0}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results{top:-3px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__icon{bottom:18px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select:after{display:none}::ng-deep .nas-filter__airport-select .nas-airport-select__input-line{display:none}::ng-deep .nas-filter__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter__origin-combined{border-bottom:3px solid #c3c3c3;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter__origin-combined{display:flex;flex:none}::ng-deep .nas-filter__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter__subsidy-discount{order:3}::ng-deep .nas-filter__subsidy-discount .nas-subsidy-discount{margin-top:16px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i7.AirportSelectComponent, selector: "nas-airport-select", inputs: ["airports", "airportRelations", "latestSearchesOrigin", "latestSearchesDestination", "closestAirports", "allowedOriginAiports", "allowedDestinationAirports", "displayLatestSearches", "displayClosestAirports", "combo", "useSwitch", "allAirportsLabel", "latestSearchesLabel", "closestAirportsLabel", "geolocationLabel", "geolocationBlockedLabel", "selectOriginFirstLabel", "invalidDestinationText", "labelOrigin", "placeholderOrigin", "labelDestination", "placeholderDestination", "keepSelection", "nasFormControlNameOrigin", "nasFormControlNameDestination", "nasFormGroup", "originAirportCode", "destinationAirportCode", "ariaLabelClear", "ariaLabelBackdrop"], outputs: ["originChange", "originOpenChange", "destinationChange", "destinationOpenChange", "focusOnNext", "positionChange"] }, { kind: "component", type: i8.DropdownComponent, selector: "nas-dropdown", inputs: ["open", "id", "ariaLabelBackdrop", "cssClass", "inline", "label", "stretched", "labelStyle"], outputs: ["openChange"] }, { kind: "component", type: i9.PassengerSelectComponent, selector: "nas-passenger-select", inputs: ["passengers", "maxPaxCount", "minAdultCount", "groupBookingLimit", "title", "adultsLabel", "childrenLabel", "infantsLabel", "groupBookingLabel", "nasFormGroup", "nasFormControlGroupBooking", "ariaLabelSubtract", "ariaLabelAdd"], outputs: ["passengersChange", "focusOnNext", "focusOnPrevious"] }, { kind: "component", type: i10.AccordionComponent, selector: "nas-accordion", inputs: ["expanded", "title", "subheader", "icon", "simple", "spaced", "small", "inverted", "containerOnToggle", "nopadding", "transparent", "approve", "primary", "info", "subheaderPositive", "subheaderNegative", "cssClass", "cssStyle"], outputs: ["toggleChange"] }, { kind: "component", type: i11.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "component", type: i12.DatepickerComboComponent, selector: "nas-datepicker-combo", inputs: ["ariaLabelBackdrop", "outboundOpen", "inboundOpen", "noAvailableFlightsLabel", "availableFlightsLabel", "disablePastSelection", "outboundDisabled", "inboundDisabled", "outboundOnly", "outboundLabel", "inboundLabel", "availability", "outboundAvailableDates", "inboundAvailableDates", "times", "dateDisplayFormat", "timeDisplayFormat", "locale", "compact", "nasFormGroup", "nasFormControlNameOutbound", "nasFormControlNameInbound", "outboundSelectedDate", "inboundSelectedDate", "disableBackdrop", "outboundSelectedTime", "inboundSelectedTime", "ariaLabelPreviousMonth", "ariaLabelNextMonth", "inboundLowerLimitDateOffset"], outputs: ["outboundSelectedDateChange", "inboundSelectedDateChange", "outboundOpenChange", "inboundOpenChange", "outboundMonthChange", "inboundMonthChange", "focusOnNextChange", "focusOnPreviousChange"] }, { kind: "component", type: i13.SubsidyDiscountComponent, selector: "nas-subsidy-discount", inputs: ["label", "icon", "selectedDiscount", "discounts"], outputs: ["infoButtonClick", "infoButtonKeydown", "discountSelectChange"] }, { kind: "component", type: i14.SuggestionsComponent, selector: "nas-suggestions", inputs: ["suggestions", "orLabel"], outputs: ["airportSelect"] }] }); }
|
|
1031
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: FilterComponent, selector: "nas-filter", inputs: { airportRelations: "airportRelations", ariaLabelClear: "ariaLabelClear", ariaLabelSubtract: "ariaLabelSubtract", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelAdd: "ariaLabelAdd", allowedOriginAirports: "allowedOriginAirports", allowedDestinationAirports: "allowedDestinationAirports", displayLatestSearches: "displayLatestSearches", useSwitch: "useSwitch", displayClosestAirports: "displayClosestAirports", originAirportCode: "originAirportCode", destinationAirportCode: "destinationAirportCode", passengerSelectLabel: "passengerSelectLabel", maxPaxCount: "maxPaxCount", passengers: "passengers", minAdultCount: "minAdultCount", tripSwitchRoundTripLabel: "tripSwitchRoundTripLabel", tripSwitchOneWayLabel: "tripSwitchOneWayLabel", directOnlyLabel: "directOnlyLabel", directTransitLabel: "directTransitLabel", minimizeOnMobile: "minimizeOnMobile", expandedAccordionMobile: "expandedAccordionMobile", defaultSummarySeparator: "defaultSummarySeparator", lastSummarySeparator: "lastSummarySeparator", passengerSelectTitle: "passengerSelectTitle", passengerSelectAdultsLabel: "passengerSelectAdultsLabel", passengerSelectChildrenLabel: "passengerSelectChildrenLabel", passengerSelectInfantsLabel: "passengerSelectInfantsLabel", groupBookingLabel: "groupBookingLabel", allAirportsLabel: "allAirportsLabel", latestSearchesLabel: "latestSearchesLabel", closestAirportsLabel: "closestAirportsLabel", selectOriginFirstLabel: "selectOriginFirstLabel", labelOrigin: "labelOrigin", placeholderOrigin: "placeholderOrigin", labelDestination: "labelDestination", geolocationLabel: "geolocationLabel", geolocationBlockedLabel: "geolocationBlockedLabel", placeholderDestination: "placeholderDestination", keepSelection: "keepSelection", editSearchTitle: "editSearchTitle", nasFormGroup: "nasFormGroup", nasFormControlNameOrigin: "nasFormControlNameOrigin", nasFormControlNameDestination: "nasFormControlNameDestination", nasFormControlNameTripType: "nasFormControlNameTripType", nasFormControlNameDirectOnly: "nasFormControlNameDirectOnly", nasFormControlNameOutbound: "nasFormControlNameOutbound", nasFormControlNameInbound: "nasFormControlNameInbound", nasFormControlGroupBooking: "nasFormControlGroupBooking", nasFormControlNameSubsidyDiscount: "nasFormControlNameSubsidyDiscount", overrideOrigin: "overrideOrigin", enableSuggestions: "enableSuggestions", closestAirports: "closestAirports", minimize: "minimize", airports: "airports", tripType: "tripType", directOnly: "directOnly", groupBookingLimit: "groupBookingLimit", subsidyDiscounts: "subsidyDiscounts", selectedSubsidyDiscount: "selectedSubsidyDiscount", subsidyDiscountLabel: "subsidyDiscountLabel", ariaLabelPreviousMonth: "ariaLabelPreviousMonth", ariaLabelNextMonth: "ariaLabelNextMonth", noAvailableFlightsLabel: "noAvailableFlightsLabel", availableFlightsLabel: "availableFlightsLabel", disablePastSelection: "disablePastSelection", outboundLabel: "outboundLabel", inboundLabel: "inboundLabel", availability: "availability", outboundAvailableDates: "outboundAvailableDates", inboundAvailableDates: "inboundAvailableDates", times: "times", dateDisplayFormat: "dateDisplayFormat", timeDisplayFormat: "timeDisplayFormat", locale: "locale", compact: "compact", outboundDisabled: "outboundDisabled", inboundDisabled: "inboundDisabled", enableDatepickers: "enableDatepickers", minimizingLabel: "minimizingLabel", maximizingLabel: "maximizingLabel", directOnlyMobileLabel: "directOnlyMobileLabel", orLabel: "orLabel", invalidDestinationText: "invalidDestinationText", outboundSelectedDate: "outboundSelectedDate", inboundSelectedDate: "inboundSelectedDate", enableDestinationSelect: "enableDestinationSelect", enablePassengersSelect: "enablePassengersSelect", enableTripSwitch: "enableTripSwitch", enableTransitSwitch: "enableTransitSwitch" }, outputs: { originOpenChange: "originOpenChange", destinationOpenChange: "destinationOpenChange", passengerSelectOpenChange: "passengerSelectOpenChange", originChange: "originChange", destinationChange: "destinationChange", passengersChange: "passengersChange", tripTypeChange: "tripTypeChange", directOnlyChange: "directOnlyChange", outboundSelectedDateChange: "outboundSelectedDateChange", inboundSelectedDateChange: "inboundSelectedDateChange", outboundOpenChange: "outboundOpenChange", inboundOpenChange: "inboundOpenChange", outboundMonthChange: "outboundMonthChange", inboundMonthChange: "inboundMonthChange", focusOnNextChange: "focusOnNextChange", positionChange: "positionChange", subsidyDiscountInfoClick: "subsidyDiscountInfoClick" }, viewQueries: [{ propertyName: "passengerSelectDropdown", first: true, predicate: ["passengerSelectDropdown"], descendants: true }, { propertyName: "passengerSelect", first: true, predicate: ["passengerSelect"], descendants: true }, { propertyName: "tripSwitch", first: true, predicate: ["tripSwitch"], descendants: true }, { propertyName: "transitSwitch", first: true, predicate: ["transitSwitch"], descendants: true }, { propertyName: "airportSelect", first: true, predicate: ["airportSelect"], descendants: true }, { propertyName: "datepickerCombo", first: true, predicate: ["datepickerCombo"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "tripTypeOneway", first: true, predicate: ["tripTypeOneway"], descendants: true }, { propertyName: "tripTypeRoundTrip", first: true, predicate: ["tripTypeRoundTrip"], descendants: true }, { propertyName: "transitTypeDirectOnly", first: true, predicate: ["transitTypeDirectOnly"], descendants: true }, { propertyName: "transitTypeTransit", first: true, predicate: ["transitTypeTransit"], descendants: true }, { propertyName: "subsidyDiscount", first: true, predicate: ["subsidyDiscount"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nas-accordion *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile); else filterTemplate\"\n simple\n containerOnToggle\n transparent\n [expanded]=\"expandedAccordionMobile\"\n [title]=\"editSearchTitle\"\n (toggleChange)=\"onAccordionToggleChange($event)\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n</nas-accordion>\n<div class=\"container\"\n *ngIf=\"deviceHelper?.isMobile() && exists(minimizeOnMobile) && displaySummary\">{{getSummary()}}</div>\n\n<ng-template #filterTemplate>\n <div #container\n [nasClass]=\"getContainerClass()\">\n <div [nasClass]=\"getFilterClass('filters', [exists(minimize) && 'minimized', maximize && 'maximize'])\">\n <ng-container *ngIf=\"airports?.length > 0\">\n <nas-airport-select *ngIf=\"airports && airportRelations && (enableDestinationSelect)\"\n #airportSelect\n combo\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [nasFormControlNameDestination]=\"nasFormControlNameDestination\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getAirportSelectClass()\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [allowedDestinationAirports]=\"allowedDestinationAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [latestSearchesDestination]=\"latestSearchesDestination\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [destinationAirportCode]=\"destinationAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [labelDestination]=\"labelDestination\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [placeholderDestination]=\"placeholderDestination\"\n [keepSelection]=\"keepSelection\"\n [invalidDestinationText]=\"invalidDestinationText\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (destinationChange)=\"onDestinationChange($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (destinationOpenChange)=\"onDestinationOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-airport-select *ngIf=\"airports && (!enableDestinationSelect)\"\n #airportSelect\n [ariaLabelClear]=\"ariaLabelClear\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOrigin]=\"nasFormControlNameOrigin\"\n [useSwitch]=\"useSwitch\"\n [nasClass]=\"getClass('airport-origin-select')\"\n [airports]=\"airports\"\n [allowedOriginAiports]=\"allowedOriginAirports\"\n [airportRelations]=\"airportRelations\"\n [latestSearchesOrigin]=\"latestSearchesOrigin\"\n [displayLatestSearches]=\"displayLatestSearches\"\n [displayClosestAirports]=\"displayClosestAirports\"\n [originAirportCode]=\"originAirportCode\"\n [allAirportsLabel]=\"allAirportsLabel\"\n [latestSearchesLabel]=\"latestSearchesLabel\"\n [closestAirportsLabel]=\"closestAirportsLabel\"\n [closestAirports]=\"closestAirports\"\n [selectOriginFirstLabel]=\"selectOriginFirstLabel\"\n [labelOrigin]=\"labelOrigin\"\n [placeholderOrigin]=\"placeholderOrigin\"\n [geolocationLabel]=\"geolocationLabel\"\n [geolocationBlockedLabel]=\"geolocationBlockedLabel\"\n [keepSelection]=\"keepSelection\"\n (originChange)=\"setSelectedOriginAirport($event)\"\n (focusOnNext)=\"setFocusOnPassengerSelect($event)\"\n (originOpenChange)=\"onOriginOpen($event)\"\n (positionChange)=\"getClosestAirports($event)\"></nas-airport-select>\n <nas-suggestions *ngIf=\"(closestAirports || latestSearchesOrigin) && exists(enableSuggestions)\"\n [nasClass]=\"getFilterClass('suggestions')\"\n [suggestions]=\"getSuggestions()\"\n [orLabel]=\"orLabel\"\n (airportSelect)=\"setSelectedOriginAirport($event)\"></nas-suggestions>\n </ng-container>\n <ng-container *ngIf=\"shouldMaximize()\">\n <div\n [nasClass]=\"!enableDestinationSelect ? getClass('origin-combined') :\n getTravelDetailsClass('', ['combined', exists(enableDatepickers) && 'no-border', exists(minimize) && 'minimized'])\">\n <ng-container *ngIf=\"enablePassengersSelect\">\n <nas-dropdown #passengerSelectDropdown\n *ngIf=\"passengers?.length > 0\"\n [nasClass]=\"getTravelDetailsClass('dropdown', 'passengers')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"passengerSelectLabel\"\n [labelStyle]=\"{'width': '102px'}\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onPassengerSelectOpen($event)\"\n (keydown)=\"passengerKeyDown($event)\">\n <nas-passenger-select #passengerSelect\n [ariaLabelAdd]=\"ariaLabelAdd\"\n [ariaLabelSubtract]=\"ariaLabelSubtract\"\n [adultsLabel]=\"passengerSelectAdultsLabel\"\n [childrenLabel]=\"passengerSelectChildrenLabel\"\n [infantsLabel]=\"passengerSelectInfantsLabel\"\n [maxPaxCount]=\"maxPaxCount\"\n [minAdultCount]=\"minAdultCount\"\n [title]=\"passengerSelectTitle\"\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlGroupBooking]=\"nasFormControlGroupBooking\"\n [groupBookingLabel]=\"groupBookingLabel\"\n [groupBookingLimit]=\"groupBookingLimit\"\n (focusOnNext)=\"onPassengersSelectFocusOnNext()\"\n (focusOnPrevious)=\"onPassengersSelectFocusOnPrevious()\"\n [(passengers)]=\"passengers\"></nas-passenger-select>\n </nas-dropdown>\n </ng-container>\n <ng-container *ngIf=\"enableTripSwitch\">\n <nas-dropdown *ngIf=\"tripSwitchOneWayLabel && tripSwitchRoundTripLabel\"\n #tripSwitch\n [nasClass]=\"getTravelDetailsClass('dropdown', 'trip-type')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"getTripSwitchLabel()\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onTripSwitchOpen($event)\"\n (keydown)=\"onTripSwitchKeyDown($event)\">\n <div [nasClass]=\"getTravelDetailsClass('actions')\">\n <button type=\"button\"\n #tripTypeRoundTrip\n [nasClass]=\"getTravelDetailsClass('action', tripType === 2 && 'active')\"\n (click)=\"onTripTypeChange(2)\">\n <nas-icon [type]=\"'medium'\"\n [icon]=\"tripType === 2 ? 'flight-return--light' : 'flight-return'\"></nas-icon>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{tripSwitchRoundTripLabel}}</span>\n </button>\n <button type=\"button\"\n #tripTypeOneway\n [nasClass]=\"getTravelDetailsClass('action', tripType === 1 && 'active')\"\n (click)=\"onTripTypeChange(1)\">\n <nas-icon [type]=\"'medium'\"\n [icon]=\"tripType === 1 ? 'flight-oneway--light' : 'flight-oneway'\"></nas-icon>\n <span [nasClass]=\"getTravelDetailsClass('title', ['small'])\">{{tripSwitchOneWayLabel}}</span>\n </button>\n </div>\n </nas-dropdown>\n </ng-container>\n <ng-container *ngIf=\"enableTransitSwitch\">\n <nas-dropdown *ngIf=\"directOnlyLabel && directTransitLabel\"\n #transitSwitch\n [nasClass]=\"getTravelDetailsClass('dropdown', 'transit-type')\"\n [cssClass]=\"getTravelDetailsClass('dropdown')\"\n [label]=\"getTransitLabel()\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n (openChange)=\"onTransitSwitchOpen($event)\"\n (keydown)=\"transitKeyDown($event)\">\n <div [nasClass]=\"getTravelDetailsClass('actions')\">\n <button type=\"button\"\n #transitTypeTransit\n [nasClass]=\"getTravelDetailsClass('action', !directOnly && 'active')\"\n (click)=\"onTransitChange(false)\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon')\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon-stop')\"></span>\n </span>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{directTransitLabel}}</span>\n </button>\n <button [nasClass]=\"getTravelDetailsClass('action', directOnly && 'active')\"\n type=\"button\"\n #transitTypeDirectOnly\n (click)=\"onTransitChange(true)\">\n <span [nasClass]=\"getTravelDetailsClass('transit-icon')\"></span>\n <span [nasClass]=\"getTravelDetailsClass('title', 'small')\">{{directOnlyLabel}}</span>\n </button>\n </div>\n </nas-dropdown>\n </ng-container>\n </div>\n <div *ngIf=\"exists(enableDatepickers)\"\n [nasClass]=\"getDatePickersClass()\">\n <nas-datepicker-combo #datepickerCombo\n compact\n [nasFormGroup]=\"nasFormGroup\"\n [nasFormControlNameOutbound]=\"nasFormControlNameOutbound\"\n [nasFormControlNameInbound]=\"nasFormControlNameInbound\"\n [availability]=\"availability\"\n [availableFlightsLabel]=\"availableFlightsLabel\"\n [dateDisplayFormat]=\"dateDisplayFormat\"\n [disablePastSelection]=\"disablePastSelection\"\n [locale]=\"locale\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [inboundAvailableDates]=\"inboundAvailableDates\"\n [inboundLabel]=\"inboundLabel\"\n [noAvailableFlightsLabel]=\"noAvailableFlightsLabel\"\n [outboundAvailableDates]=\"outboundAvailableDates\"\n [outboundLabel]=\"outboundLabel\"\n [timeDisplayFormat]=\"timeDisplayFormat\"\n [times]=\"times\"\n [outboundDisabled]=\"outboundDisabled\"\n [inboundDisabled]=\"inboundDisabled\"\n [outboundOnly]=\"tripType === 1\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [ariaLabelPreviousMonth]=\"ariaLabelPreviousMonth\"\n [ariaLabelNextMonth]=\"ariaLabelNextMonth\"\n (focusOnNextChange)=\"onFocusOnNextChange($event)\"\n (focusOnPreviousChange)=\"onDatepickerFocusOnPrevious($event)\"\n (inboundMonthChange)=\"onInboundMonthChange($event)\"\n (outboundMonthChange)=\"onOutboundMonthChange($event)\"\n [(outboundOpen)]=\"outboundOpen\"\n [(inboundOpen)]=\"inboundOpen\"\n [(inboundSelectedDate)]=\"inboundSelectedDate\"\n [(outboundSelectedDate)]=\"outboundSelectedDate\">\n </nas-datepicker-combo>\n </div>\n <div *ngIf=\"subsidyDiscounts && subsidyDiscounts.length > 0\"\n [nasClass]=\"getFilterClass('subsidy-discount')\">\n <nas-subsidy-discount #subsidyDiscount\n [discounts]=\"subsidyDiscounts\"\n [selectedDiscount]=\"selectedSubsidyDiscount\"\n [label]=\"subsidyDiscountLabel\"\n (infoButtonClick)=\"onSubsidyDiscountInfoClick()\"\n (discountSelectChange)=\"onSubsidyDiscountSelectChange($event)\"\n (infoButtonKeydown)=\"onSubsidyDiscountInfoButtonKeydown($event)\"></nas-subsidy-discount>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-filter{background-color:#f1f1f1;position:relative;z-index:6}.nas-filter__title{margin-top:24px;font-size:28px;line-height:34px}@media screen and (min-width: 640px){.nas-filter__title{font-size:32px;line-height:38px}}.nas-filter__title--md{margin-top:60px}.nas-filter__filters{margin-top:12px;display:flex;flex-wrap:wrap;order:2}.nas-filter__filters .nas-filter__date-combo{order:2;flex:1;z-index:2}.nas-filter__filters--minimized .nas-filter__airport-select:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.nas-filter__filters--maximize .nas-filter__airport-select:after{display:none}.nas-filter__filters--md .nas-filter__date-combo{flex:0 0 100%}.nas-filter__filters--lg{display:flex;align-items:stretch}.nas-filter__filters--lg .nas-filter__date-combo{order:3;flex:0 0 100%;z-index:1}.nas-filter__filters--lg .nas-filter__suggestions{order:3}.nas-filter__filters--lg .nas-filter__filters--minimized .nas-filter__airport-select{margin-right:0;flex:0 1 100%}.nas-filter__filters--lg .nas-filter__filters--maximize .nas-filter__airport-select{margin-right:3px;flex:auto}.nas-filter__filters--lg.nas-filter__filters--maximize .nas-filter__date-combo{border-bottom:3px solid #c3c3c3}.nas-filter__suggestions{flex-basis:100%;position:relative;margin-top:3px}.nas-filter__suggestions:before{content:\"\";position:absolute;top:-3px;left:0px;width:100%;border-top:3px solid #c3c3c3}.nas-filter__airport-select{order:0;flex:0 0 100%;position:relative}.nas-filter__airport-select--lg{width:0;margin:0 3px 0 0;flex:1 1 auto}.nas-filter__toggler{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:400;font-size:18px;line-height:26px;color:#003251;margin-top:6px;z-index:1}.nas-filter__toggler .nas-filter__toggle-action{cursor:pointer;margin-top:2px;float:right}.nas-filter__toggler .nas-filter__direct-only{display:inline-block}.travel-details{position:relative;display:flex;margin:0;flex-wrap:wrap;z-index:1}.travel-details__list{margin-top:12px}.travel-details__list-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0 0}.travel-details__list-item:not(:last-child){padding:6px 0 9px;border-bottom:2px solid #f1f1f1}.travel-details__label{flex-grow:2;margin:0 6px 0 0}.travel-details__title{font-size:18px;line-height:26px;display:block;min-width:124px}.travel-details__title--small{font-size:16px;line-height:26px;margin:0}.travel-details__actions{display:flex}.travel-details__action{padding:12px;width:100%;background-color:#fff}.travel-details__action:hover,.travel-details__action:focus{background-color:#e3e3e3}.travel-details__action--active,.travel-details__action--active:hover,.travel-details__action--active:focus{color:#fff;background-color:#003251}.travel-details__action:focus{outline:none;box-shadow:inset 0 0 2px #c3c3c3,inset 0 0 2px 3px #3b99fc;z-index:1}.travel-details__icon{margin-bottom:9px}.travel-details__dropdown{margin-right:0}.travel-details__dropdown:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details__dropdown--trip-type{order:1;flex:1;margin-right:3px;margin-bottom:3px}.travel-details__dropdown--transit-type{order:2;flex:1;margin-bottom:3px}.travel-details__dropdown--passengers{order:3;flex:1 0 100%;margin-bottom:3px}.travel-details__dropdown--md.travel-details__dropdown--trip-type{order:2;flex:1;margin-right:3px}.travel-details__dropdown--md.travel-details__dropdown--transit-type{order:3;flex:1}.travel-details__dropdown--md.travel-details__dropdown--passengers{order:1;flex:1;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--trip-type{order:2;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg.travel-details__dropdown--transit-type{order:3;flex:1 1 auto}.travel-details__dropdown--lg.travel-details__dropdown--passengers{order:1;flex:1 1 auto;margin-right:3px}.travel-details__dropdown--lg:focus{outline:none}.travel-details__dropdown--lg:after{display:none}.travel-details__transit-icon{position:relative;display:flex;justify-content:center;width:calc(100% - 48px);margin:12px auto;height:24px;background-color:inherit}.travel-details__transit-icon:before{content:\"\";position:absolute;height:2px;left:0;width:100%;top:calc(50% - 1px);background-color:currentColor}.travel-details__transit-icon:after{content:\"\";position:absolute;width:10px;height:10px;right:0;top:calc(50% - 5px);border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}.travel-details__transit-icon-stop{position:relative;top:calc(50% - 5px);width:10px;height:10px;border:2px solid currentColor;border-radius:50%;background-color:inherit}.travel-details--combined{order:3;flex:0 0 100%}.travel-details--combined.travel-details--md:after{content:\"\";position:absolute;bottom:-6px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--md .travel-details__dropdown{margin:0 3px 0 0}.travel-details--combined.travel-details--md .travel-details__dropdown:last-child{margin:0}.travel-details--combined.travel-details--md .dropdown__toggle{height:calc(100% - 3px);margin:0;padding-left:16px;padding-right:16px}.travel-details--combined.travel-details--lg{order:2;flex:0 0 auto;margin:0 0 0 -3px;padding-left:3px;z-index:2}.travel-details--combined.travel-details--lg:after{content:\"\";position:absolute;bottom:-3px;left:0px;width:100%;border-bottom:3px solid #c3c3c3}.travel-details--combined.travel-details--lg .dropdown__toggle{height:inherit}@media (min-width: 1000px){.travel-details--no-border:after{border-bottom:none}}::ng-deep .nas-filter__filters .travel-details--no-border:after{display:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle{padding:20px!important;width:100%;height:100%}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle:hover:after{display:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle nas-icon{float:right}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown__toggle:focus{outline:none}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown{width:100%}::ng-deep .nas-filter__filters .travel-details__dropdown .nas-dropdown:focus{outline:none}@media (min-width: 640px){::ng-deep .nas-filter__filters .travel-details__dropdown:after{border-bottom:none}}::ng-deep .nas-filter__filters .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-filter__date-combo--side-by-side .nas-datepicker-combo__separator{display:block;border-bottom:none!important}::ng-deep .nas-filter__filters .nas-airport-select__input-line{border-top:none!important}::ng-deep .nas-filter__filters .nas-airport-select-combo__separator{border-bottom:none!important}::ng-deep .nas-filter__filters .nas-dropdown__toggle{height:64px!important}::ng-deep .nas-filter__filters .nas-datepicker-combo__separator{display:none}::ng-deep .nas-filter__filters--lg .nas-dropdown__toggle{display:flex}::ng-deep .nas-filter__filters--lg .nas-filter__date-combo .nas-datepicker__date-picker-wrapper{border-bottom:3px solid #c3c3c3}::ng-deep .nas-filter__filters--lg .nas-airport-select__input-line{border-top:3px solid #c3c3c3!important}::ng-deep .nas-filter__filters--lg .nas-datepicker-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter__filters--lg .nas-airport-select-combo__separator{border-bottom:3px solid #c3c3c3!important}::ng-deep .nas-filter__rotate{transform:rotate(180deg)}::ng-deep .nas-filter__rotate-enter,::ng-deep .nas-filter__rotate-leave-active{transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden}::ng-deep .nas-filter__rotate-enter{animation:flip-in .55s ease both}::ng-deep .nas-filter__rotate-leave-active{animation:flip-out .2s ease-out both}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__input-line{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select-combo__separator{border-top:none}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results-wrapper{margin-top:0}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__results{top:-3px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select__icon{bottom:18px}::ng-deep .nas-filter__airport-select--no-border .nas-airport-select:after{display:none}::ng-deep .nas-filter__airport-select .nas-airport-select__input-line{display:none}::ng-deep .nas-filter__airport-origin-select{width:100%;max-width:100%}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{max-width:100%}@media (min-width: 640px){::ng-deep .nas-filter__airport-origin-select{max-width:360px;flex:auto;margin-right:3px}::ng-deep .nas-filter__airport-origin-select .nas-airport-select:only-child{width:auto;max-width:360px}}::ng-deep .nas-filter__origin-combined{border-bottom:3px solid #c3c3c3;order:3;flex:0 0 100%;display:flex;flex-wrap:wrap}@media (min-width: 1000px){::ng-deep .nas-filter__origin-combined{display:flex;flex:none}::ng-deep .nas-filter__origin-combined .nas-dropdown__toggle nas-icon{float:none!important}}::ng-deep .nas-filter__subsidy-discount{order:3}::ng-deep .nas-filter__subsidy-discount .nas-subsidy-discount{margin-top:16px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "component", type: i7.AirportSelectComponent, selector: "nas-airport-select", inputs: ["airports", "airportRelations", "latestSearchesOrigin", "latestSearchesDestination", "closestAirports", "allowedOriginAiports", "allowedDestinationAirports", "displayLatestSearches", "displayClosestAirports", "combo", "useSwitch", "allAirportsLabel", "latestSearchesLabel", "closestAirportsLabel", "geolocationLabel", "geolocationBlockedLabel", "selectOriginFirstLabel", "invalidDestinationText", "labelOrigin", "placeholderOrigin", "labelDestination", "placeholderDestination", "keepSelection", "nasFormControlNameOrigin", "nasFormControlNameDestination", "nasFormGroup", "originAirportCode", "destinationAirportCode", "ariaLabelClear", "ariaLabelBackdrop"], outputs: ["originChange", "originOpenChange", "destinationChange", "destinationOpenChange", "focusOnNext", "positionChange"] }, { kind: "component", type: i8.DropdownComponent, selector: "nas-dropdown", inputs: ["open", "id", "ariaLabelBackdrop", "cssClass", "inline", "label", "stretched", "labelStyle"], outputs: ["openChange"] }, { kind: "component", type: i9.PassengerSelectComponent, selector: "nas-passenger-select", inputs: ["passengers", "maxPaxCount", "minAdultCount", "groupBookingLimit", "title", "adultsLabel", "childrenLabel", "infantsLabel", "groupBookingLabel", "nasFormGroup", "nasFormControlGroupBooking", "ariaLabelSubtract", "ariaLabelAdd"], outputs: ["passengersChange", "focusOnNext", "focusOnPrevious"] }, { kind: "component", type: i10.AccordionComponent, selector: "nas-accordion", inputs: ["expanded", "title", "subheader", "badge", "icon", "simple", "spaced", "small", "inverted", "containerOnToggle", "nopadding", "transparent", "approve", "primary", "info", "subheaderPositive", "subheaderNegative", "badgeInfo", "badgeSuccess", "badgeWarning", "badgeError", "cssClass", "cssStyle"], outputs: ["toggleChange"] }, { kind: "component", type: i11.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "component", type: i12.DatepickerComboComponent, selector: "nas-datepicker-combo", inputs: ["ariaLabelBackdrop", "outboundOpen", "inboundOpen", "noAvailableFlightsLabel", "availableFlightsLabel", "disablePastSelection", "outboundDisabled", "inboundDisabled", "outboundOnly", "outboundLabel", "inboundLabel", "availability", "outboundAvailableDates", "inboundAvailableDates", "times", "dateDisplayFormat", "timeDisplayFormat", "locale", "compact", "nasFormGroup", "nasFormControlNameOutbound", "nasFormControlNameInbound", "outboundSelectedDate", "inboundSelectedDate", "disableBackdrop", "outboundSelectedTime", "inboundSelectedTime", "ariaLabelPreviousMonth", "ariaLabelNextMonth", "inboundLowerLimitDateOffset"], outputs: ["outboundSelectedDateChange", "inboundSelectedDateChange", "outboundOpenChange", "inboundOpenChange", "outboundMonthChange", "inboundMonthChange", "focusOnNextChange", "focusOnPreviousChange"] }, { kind: "component", type: i13.SubsidyDiscountComponent, selector: "nas-subsidy-discount", inputs: ["label", "icon", "selectedDiscount", "discounts"], outputs: ["infoButtonClick", "infoButtonKeydown", "discountSelectChange"] }, { kind: "component", type: i14.SuggestionsComponent, selector: "nas-suggestions", inputs: ["suggestions", "orLabel"], outputs: ["airportSelect"] }] }); }
|
|
998
1032
|
}
|
|
999
1033
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: FilterComponent, decorators: [{
|
|
1000
1034
|
type: Component,
|
|
@@ -1250,4 +1284,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
|
|
|
1250
1284
|
}], subsidyDiscountInfoClick: [{
|
|
1251
1285
|
type: Output
|
|
1252
1286
|
}] } });
|
|
1253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBRVYsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQnRFOzs7R0FHRztBQU1ILE1BQU0sT0FBTyxlQUFnQixTQUFRLGdCQUFnQjtJQXVCbkQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLEtBQWM7UUFDN0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFO1lBQ3BDLE9BQU87U0FDUjtRQUVELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXRCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7YUFDNUM7U0FDRjtRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWM7UUFDNUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUVELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXRCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7YUFDNUM7U0FDRjtRQUVELFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBMEZEOzs7T0FHRztJQUNILElBQ0ksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsS0FBNkI7UUFDMUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQXNDRjs7O01BR0U7SUFDRCxJQUNJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsSUFBSSx1QkFBdUIsQ0FBQyxLQUFjO1FBQ3hDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUMvQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFpTkQsSUFDSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxRQUE2QjtRQUMvQyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUM7UUFFckMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUMzQztJQUNILENBQUM7SUFPRDs7Ozs7T0FLRztJQUNILElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsUUFBNkI7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7UUFFOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQzNDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFFBQWtCO1FBQzdCLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbkMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUNJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLFVBQW1CO1FBQ2hDLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdkMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQXlORDs7O09BR0c7SUFDSCxJQUNJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsSUFBSSxvQkFBb0IsQ0FBQyxJQUFhO1FBQ3BDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPO1NBQ1I7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztZQUN0QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ0ksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO0lBQ3ZDLENBQUM7SUFDRCxJQUFJLG1CQUFtQixDQUFDLElBQWE7UUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU87U0FDUjtRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1lBQ3JDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBaUZELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDO0lBQ3hDLENBQUM7SUFDRCxJQUFJLG9CQUFvQixDQUFDLEtBQWM7UUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUU7WUFDdkUsT0FBTztTQUNSO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFpQkQsWUFDUyxZQUEwQixFQUN6QixXQUF3QixFQUN4QixzQkFBOEMsRUFDOUMsV0FBdUIsRUFDeEIsVUFBc0IsRUFDckIsY0FBaUM7UUFDekMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBTmIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN4QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQTMxQjNDLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBR3RCLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQThNeEI7Ozs7OztXQU1HO1FBQ00sNEJBQXVCLEdBQUcsRUFBRSxDQUFDO1FBRXRDOzs7OztXQUtHO1FBQ00seUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBZ0VuQzs7O1dBR0c7UUFDTSxzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFxQmhDOzs7V0FHRztRQUNNLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQWlOckM7OztXQUdHO1FBQ08scUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUV6RDs7O1VBR0U7UUFDUSwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTlEOzs7V0FHRztRQUNPLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFbEU7OztXQUdHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUUxRDs7O1VBR0U7UUFDUSxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUUvRDs7O1dBR0c7UUFDTyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUV4RTs7O1dBR0c7UUFDTyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFFeEQ7OztXQUdHO1FBQ08scUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQXdEekQ7Ozs7V0FJRztRQUNNLHNCQUFpQixHQUFHLG1CQUFtQixDQUFDO1FBRWpEOzs7V0FHRztRQUNNLHNCQUFpQixHQUFHLE9BQU8sQ0FBQztRQUVyQzs7OztXQUlHO1FBQ00sV0FBTSxHQUFHLE9BQU8sQ0FBQztRQWlHMUI7OztXQUdHO1FBQ08sNEJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBRXpDOzs7V0FHRztRQUNNLDJCQUFzQixHQUFHLElBQUksQ0FBQztRQUV2Qzs7O1dBR0c7UUFDTSxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFakM7OztXQUdHO1FBQ00sd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRXBDOzs7V0FHRztRQUNPLCtCQUEwQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFbkU7OztXQUdHO1FBQ08sOEJBQXlCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUdsRTs7O1dBR0c7UUFDTyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTNEOzs7V0FHRztRQUNPLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFMUQ7OztXQUdHO1FBQ08sd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUU1RDs7O1dBR0c7UUFDTyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTNEOzs7V0FHRztRQUNPLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFakQ7OztXQUdHO1FBQ08sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUVuRTs7O1dBR0c7UUFDTyw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBd0JoRCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLG9CQUFlLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUFhckQsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBNEIsQ0FBQztJQUMvRCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM1QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ3JDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFFbkYsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7YUFDM0M7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ25DLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBRS9FLElBQUksZUFBZSxFQUFFO2dCQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUVqRSxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtvQkFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7b0JBRTdFLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7d0JBQzFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztxQkFDMUI7aUJBQ0Y7Z0JBRUQsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFlLEVBQUUsRUFBRTtvQkFDekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ3JDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFDbkYsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO29CQUMxRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUVoQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFcEYsTUFBTSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUU7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxLQUEyQjtRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRTtZQUNqRSxPQUFPO1NBQ1I7UUFFRCxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQzdGLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsUUFBNkI7UUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFnQixFQUFFLGNBQW9CO1FBQ25ELElBQUksU0FBUyxHQUFHLGNBQWMsSUFBSSxJQUFJLEtBQUssRUFBVSxDQUFDO1FBRXRELElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxJQUFJLGNBQWMsWUFBWSxNQUFNLEVBQUU7WUFDMUUsU0FBUyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDOUI7UUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUU7WUFDbkUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkI7UUFFRCxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBRXRDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQ2xCLGdCQUFnQixFQUNoQjtZQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxJQUFJO1lBQ3hFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxJQUFJO1lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksV0FBVztTQUNuRCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7WUFDckMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ25HLENBQUMsQ0FBQyxDQUFDO1FBRUosT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUU7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVztZQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsSUFBSSxjQUFjO1NBQ3ZELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFnQixFQUFFLGNBQW9CO1FBQzFELElBQUksU0FBUyxHQUFHLGNBQWMsSUFBSSxJQUFJLEtBQUssRUFBVSxDQUFDO1FBRXRELElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxJQUFJLGNBQWMsWUFBWSxNQUFNLEVBQUU7WUFDMUUsU0FBUyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDOUI7UUFFRCxNQUFNLE1BQU0sR0FBRztZQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxJQUFJO1lBQ3ZFLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxJQUFJO1NBQ3pFLENBQUM7UUFFRixTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBRXRDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBYztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDQyxxQkFBcUIsQ0FBQyxLQUFjO1FBQ3JDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVDLGlDQUFpQztRQUMvQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ25EO2FBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBb0I7UUFDbkMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2pCLEtBQUssS0FBSztnQkFDUixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTt3QkFDcEQsTUFBTTtxQkFDUDtvQkFFRCxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztvQkFDckMsTUFBTTtpQkFDUDtnQkFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtvQkFDMUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQzlEO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztxQkFDL0I7aUJBQ0Y7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO29CQUM1QyxNQUFNO2lCQUNQO2dCQUNELElBQUksUUFBUSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRTtvQkFDdkYsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFO3dCQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztxQkFDaEQ7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNsQztpQkFDRjtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN6RSxNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBb0I7UUFDdEMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2pCLEtBQUssWUFBWTtnQkFDZixJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRTtvQkFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQzNDO2dCQUNELE1BQU07WUFDUixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFO29CQUNoRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUM5QztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLE9BQU87Z0JBQ1YsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO29CQUNsQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBRXZCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO3dCQUMzRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztxQkFDOUI7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztxQkFDN0Q7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRTt3QkFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNoQzt5QkFBTTt3QkFDTCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFOzRCQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQzt5QkFDbkQ7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUM3QjtxQkFDRjtpQkFDRjtnQkFDRCxNQUFNO1lBRVIsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzVELE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsS0FBb0I7UUFDakMsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2pCLEtBQUssWUFBWTtnQkFDZixJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRTtvQkFDcEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDbEQ7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRTtvQkFDdkUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDL0M7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxPQUFPO2dCQUNWLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtvQkFDbEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxVQUFVLENBQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDckQ7cUJBQU07b0JBQ0wsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7d0JBQzFCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7cUJBQzdEO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBRW5ELElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO3lCQUM5RDs2QkFBTTs0QkFDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7eUJBQy9CO3FCQUNGO29CQUVELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7d0JBQ3ZCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztxQkFDeEI7aUJBQ0Y7Z0JBRUQsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQy9ELE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCxrQ0FBa0MsQ0FBQyxLQUFvQjtRQUNyRCxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDakIsS0FBSyxLQUFLO2dCQUNSLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtvQkFDbEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7d0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO3FCQUM3RDt5QkFBTTt3QkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7cUJBQ25EO29CQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDeEI7Z0JBQ0QsTUFBTTtZQUVSO2dCQUNFLE1BQU07U0FDVDtJQUNILENBQUM7SUFFRCw2QkFBNkI7UUFDM0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3ZDO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFzQjtRQUMvQixZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsMkJBQTJCLENBQUMsS0FBaUM7UUFDM0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2FBQzFCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNDLElBQVUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQ0FBaUMsRUFBRTtvQkFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGdDQUFpQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNuRjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxJQUFVLElBQUksQ0FBQyxhQUFhLENBQUMsMkJBQTRCLEVBQUU7b0JBQ3pELElBQUksQ0FBQyxVQUFVLENBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQywyQkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDOUU7YUFDRjtTQUNGO0lBRUgsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWlDO1FBQ25ELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNoRDthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQ2pDLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dCQUNoQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDaEQ7U0FDRjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQWE7UUFDeEIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDM0M7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQzlCO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNqQztRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQ2pELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDM0QsSUFBSSxDQUFDLGNBQWMsSUFBSSxtQkFBbUIsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTTtlQUMxRixtQkFBbUIsQ0FBQyxJQUFJLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxjQUFjO1FBQ1osVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBYTtRQUM3QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUMzQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDOUI7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0M7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRTtZQUM3RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFhO1FBQ2pDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUM5QjtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDakM7UUFHRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRTtnQkFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQzNDO1NBQ0Y7UUFFRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFDLElBQUksSUFBSSxFQUFFO1lBQ1IsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtvQkFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ3JFO1lBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBYTtRQUM1QixZQUFZLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFMUMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNqQztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQzVDO1FBR0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0M7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFNUIsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDVDtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFhO1FBQy9CLFlBQVksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUU3QyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUMzQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDOUI7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztTQUM1QztRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNoQztRQUVELElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEQsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQXFCO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxPQUFxQjtRQUM1QyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQzNDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQXFCO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELHlCQUF5QixDQUFDLEtBQW9CO1FBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXRCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3ZFO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNoRDtTQUVGO2FBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6RCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dCQUVoQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQztnQkFDckUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7YUFFbkU7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUUxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNyRDtTQUVGO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLE9BQW1CO1FBQ3pDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWtCO1FBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV6QixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ3hELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDakYsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxVQUFtQjtRQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0IsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUMxRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUNqRixlQUFlLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVELG1DQUFtQyxDQUFDLFNBQWU7UUFDakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUzRCxPQUFPO1lBQ0wsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQzlHLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDMUUsQ0FBQztJQUVELHVCQUF1QixDQUFDLFFBQWlCO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNsRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztJQUNwSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQztTQUNiO2FBQU0sSUFBSSxJQUFJLENBQUMsYUFBYTtlQUN4QixJQUFJLENBQUMsdUJBQXVCO2VBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtlQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJO2VBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVztlQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDeEMsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNLElBQUksSUFBSSxDQUFDLGFBQWE7ZUFDeEIsQ0FBQyxJQUFJLENBQUMsdUJBQXVCO2VBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtlQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDdEcsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3RCO2FBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO2lCQUM3QjtnQkFDRCxPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNO2dCQUNMLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtJQUNILENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsRixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FFVDthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLDJCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlFO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGVBQWdELEVBQUUsUUFBNkI7UUFDdkcsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBNEIsQ0FBQztRQUVyRCxLQUFLLE1BQU0sSUFBSSxJQUFJLGVBQWUsRUFBRTtZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUNqRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1NBQ0Y7UUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUU1RCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVySSxNQUFNLHlCQUF5QixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUvSSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9HLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3pHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQzVEO1FBRUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEksQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDM0M7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQzlCO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNqQztJQUNILENBQUM7OEdBemxEVSxlQUFlO2tHQUFmLGVBQWUsMnRMQzdDNUIscThZQXVPYzs7MkZEMUxELGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0UsWUFBWTtvUEFLZ0IsdUJBQXVCO3NCQUE1RCxTQUFTO3VCQUFDLHlCQUF5QjtnQkFDTixlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDSCxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0ssYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNFLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFDSSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDSixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ08sY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ0ssaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDTSxxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUNELGtCQUFrQjtzQkFBbEQsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBQ0QsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBaUVuQixnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFNRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBTUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBT0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQU1HLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFNRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFNRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBTUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQU1HLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFNRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBTUcsV0FBVztzQkFBbkIsS0FBSztnQkFPRixVQUFVO3NCQURiLEtBQUs7Z0JBaUJHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQU1HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFNRyxlQUFlO3NCQUF2QixLQUFLO2dCQU1HLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFNRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBT0YsdUJBQXVCO3NCQUQxQixLQUFLO2dCQW1CRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBUUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQU1HLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFNRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBTUcsNEJBQTRCO3NCQUFwQyxLQUFLO2dCQU1HLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFNRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBTUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQU1HLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFNRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBT0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQU9HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFNRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBTUcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQU1HLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBUUcsWUFBWTtzQkFBcEIsS0FBSztnQkFRRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBUUcsNkJBQTZCO3NCQUFyQyxLQUFLO2dCQVFHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFRRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBUUcsMEJBQTBCO3NCQUFsQyxLQUFLO2dCQVFHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFRRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBUUcsaUNBQWlDO3NCQUF6QyxLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBTUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBbUJHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBU0YsUUFBUTtzQkFEWCxLQUFLO2dCQWtCRixRQUFRO3NCQURYLEtBQUs7Z0JBa0JGLFVBQVU7c0JBRGIsS0FBSztnQkFpQkcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFNRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBTUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQU1HLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFNRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQU1HLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFNRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBTUcsWUFBWTtzQkFBckIsTUFBTTtnQkFNRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQU1HLGNBQWM7c0JBQXZCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQU1FLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFNRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBTUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFNRyxZQUFZO3NCQUFwQixLQUFLO2dCQU1HLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFNRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBTUcsS0FBSztzQkFBYixLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFNRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csTUFBTTtzQkFBZCxLQUFLO2dCQU1HLE9BQU87c0JBQWYsS0FBSztnQkFNRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBTUcsZUFBZTtzQkFBdkIsS0FBSztnQkFNRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csZUFBZTtzQkFBdkIsS0FBSztnQkFPRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUs7Z0JBTUcsc0JBQXNCO3NCQUE5QixLQUFLO2dCQU9GLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFvQkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQW1CSSx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBTUUsc0JBQXNCO3NCQUE5QixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFNRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBTUksMEJBQTBCO3NCQUFuQyxNQUFNO2dCQU1HLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFPRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQU1HLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFNRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQU1HLGNBQWM7c0JBQXZCLE1BQU07Z0JBTUcsd0JBQXdCO3NCQUFqQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJpcFR5cGUgfSBmcm9tICcuL2VudW1zL3RyaXAtdHlwZS5lbnVtJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL2FiYW5kb25lZC1iYXNrZXQtaXRlbS5tb2RlbCc7XG5pbXBvcnQgeyBDbGFzc01vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvY2xhc3MubW9kZWwnO1xuaW1wb3J0IHsgVXRjRGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3V0Yy1kYXRlLm1vZGVsJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2FiYW5kb25lZC1iYXNrZXQvYWJhbmRvbmVkLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RhdGUvZGF0ZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZXZpY2VIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RldmljZS9kZXZpY2UtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3NvcnQvc29ydC5zZXJ2aWNlJztcbmltcG9ydCB7IEFpcnBvcnRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9haXJwb3J0LXNlbGVjdC9haXJwb3J0LXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWlycG9ydE1vZGVsIH0gZnJvbSAnLi4vYWlycG9ydC1zZWxlY3QvbW9kZWxzL2FpcnBvcnQubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlckNvbWJvQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZXBpY2tlci1jb21iby9kYXRlcGlja2VyLWNvbWJvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzZW5nZXJzTW9kZWwgfSBmcm9tICcuLi9wYXNzZW5nZXItc2VsZWN0L21vZGVscy9wYXNzZW5nZXJzLm1vZGVsJztcbmltcG9ydCB7IFN1YnNpZHlEaXNjb3VudE1vZGVsIH0gZnJvbSAnLi4vc3Vic2lkeS1kaXNjb3VudC9tb2RlbHMvc3Vic2lkeS1kaXNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBQYXNzZW5nZXJTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9wYXNzZW5nZXItc2VsZWN0L3Bhc3Nlbmdlci1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNpZHlEaXNjb3VudENvbXBvbmVudCB9IGZyb20gJy4uL3N1YnNpZHktZGlzY291bnQvc3Vic2lkeS1kaXNjb3VudC5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogTm9yd2VnaWFuIEZpbHRlciBDb21wb25lbnQgfCBGdW5jdGlvbmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIEBWaWV3Q2hpbGQoJ3Bhc3NlbmdlclNlbGVjdERyb3Bkb3duJykgcGFzc2VuZ2VyU2VsZWN0RHJvcGRvd246IERyb3Bkb3duQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdwYXNzZW5nZXJTZWxlY3QnKSBwYXNzZW5nZXJTZWxlY3Q6IFBhc3NlbmdlclNlbGVjdENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndHJpcFN3aXRjaCcpIHRyaXBTd2l0Y2g6IERyb3Bkb3duQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd0cmFuc2l0U3dpdGNoJykgdHJhbnNpdFN3aXRjaDogRHJvcGRvd25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2FpcnBvcnRTZWxlY3QnKSBhaXJwb3J0U2VsZWN0OiBBaXJwb3J0U2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyQ29tYm8nKSBkYXRlcGlja2VyQ29tYm86IERhdGVwaWNrZXJDb21ib0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZU9uZXdheScpIHRyaXBUeXBlT25ld2F5OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZVJvdW5kVHJpcCcpIHRyaXBUeXBlUm91bmRUcmlwOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmFuc2l0VHlwZURpcmVjdE9ubHknKSB0cmFuc2l0VHlwZURpcmVjdE9ubHk6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRUeXBlVHJhbnNpdCcpIHRyYW5zaXRUeXBlVHJhbnNpdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3Vic2lkeURpc2NvdW50Jykgc3Vic2lkeURpc2NvdW50OiBTdWJzaWR5RGlzY291bnRDb21wb25lbnQ7XG5cbiAgbGF0ZXN0U2VhcmNoZXNPcmlnaW46IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb246IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGRpc3BsYXlTdW1tYXJ5ID0gdHJ1ZTtcbiAgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGluYm91bmRMb3dlckxpbWl0RGF0ZTogVXRjRGF0ZTtcbiAgY29udGFpbmVyV2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIG1heGltaXplID0gZmFsc2U7XG4gIGlzTmFzR3JvdXBWYWxpZCA9IGZhbHNlO1xuXG4gIGdldCBvdXRib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3V0Ym91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm91dGJvdW5kT3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3ducygpO1xuXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dGJvdW5kT3BlblZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vdXRib3VuZE9wZW5DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaW5ib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5ib3VuZE9wZW5WYWx1ZTtcbiAgfVxuICBzZXQgaW5ib3VuZE9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pbmJvdW5kT3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3ducygpO1xuXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbmJvdW5kT3BlblRpbWVvdXQpO1xuXG4gICAgdGhpcy5pbmJvdW5kT3BlblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5ib3VuZE9wZW5WYWx1ZSA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5pbmJvdW5kT3BlbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5ib3VuZE9wZW5UaW1lb3V0OiBhbnk7XG5cbiAgLyoqXG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSByZWNvcmQgY29udGFpbmluZyBrZXlzIHdpdGggYWxsIGFpcnBvcnQgY29kZXMgd2l0aCBjb3JyZXNwb25kaW5nIGFycmF5IG9mIGFpcnBvcnQgY29kZXMgY29ubmVjdGVkIHRvIHRoZSBrZXkuXG4gICAqL1xuICBASW5wdXQoKSBhaXJwb3J0UmVsYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxzdHJpbmc+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgJ2FyaWEtbGFiZWwnIG9uIHRoZSBjbGVhciBidXR0b24gaW5zaWRlIHRoZSBhaXJwb3J0IHNlbGVjdCBpbnB1dHMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxDbGVhcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIHN1YnRyYWN0IGJ1dHRvbnMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxTdWJ0cmFjdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyAnYXJpYS1sYWJlbCcgdG8gdGhlIGJhY2tkcm9wcy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbEJhY2tkcm9wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgYWRkIGJ1dHRvbnMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxBZGQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGlzdCBvZiBhaXJwb3J0cyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yaWdpbiBkcm9wZG93bi5cbiAgICogSWYgbm90IGluY2x1ZGVkLCBhbGwgYWlycG9ydHMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd2VkT3JpZ2luQWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBhcnJheSBvZiBhaXJwb3J0cyB0aGF0IGFyZSByZXN0cmljdGVkIGZvciBkZXN0aW5hdGlvbiBhaXJwb3J0cy4gSXQgd2lsbCBkZWZhdWx0IHRvIGFpcnBvcnRzIGlmIG5vdCBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGFpcnBvcnRzIHRoYXQgdGhlIHVzZXIgYWxscmVhZHkgaGFzIHNlYXJoIGZvciBzaG91bGQgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlzcGxheUxhdGVzdFNlYXJjaGVzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzcGxheSBzd2l0Y2ggVUkgdG8gaW50ZXJjaGFuZ2Ugb3JpZ2luIGFuZCBkZXN0aW5hdGlvbiBhaXJwb3J0LlxuICAgKi9cbiAgQElucHV0KCkgdXNlU3dpdGNoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGFpcnBvcnRzIHRoYXQgYXJlIGNsb3NlIHRvIHRoZSB1c2VyIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGFpcnBvcnQgY29kZSBvZiB0aGUgb3JpZ2luIGFpcnBvcnQuIEl0IHdpbGwgc2V0IHRoZSBzZWxlY3RlZCBvcmlnaW4gYWlycG9ydCBiYXNlZCBvbiB0aGlzIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KCkgb3JpZ2luQWlycG9ydENvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBhaXJwb3J0IGNvZGUgb2YgdGhlIGRlc3RpbmF0aW9uIGFpcnBvcnQuIEl0IHdpbGwgc2V0IHRoZSBzZWxlY3RlZCBkZXN0aW5hdGlvbiBhaXJwb3J0IGJhc2VkIG9uIHRoaXMgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKSBkZXN0aW5hdGlvbkFpcnBvcnRDb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHBhc3NlbmdlclNlbGVjdExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgdG90YWwgbWF4aW11bSBhbW91bnQgb2YgcGFzc2VuZ2VycyBpbiB0aGUgcGFzc2VuZ2VyIHNlbGVjdCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIG1heFBheENvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBhcnJheSBvZiBkaWZmZXJlbnQgcGFzc2VuZ2VyIHR5cGVzIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgcGFzc2VuZ2VycygpOiBBcnJheTxQYXNzZW5nZXJzTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5wYXNzZW5nZXJzVmFsdWU7XG4gIH1cbiAgc2V0IHBhc3NlbmdlcnModmFsdWU6IEFycmF5PFBhc3NlbmdlcnNNb2RlbD4pIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYXNzZW5nZXJzVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnBhc3NlbmdlcnNDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBtaW5pbXVtIGFtb3VudCBvZiBhZHVsdHMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBtaW5BZHVsdENvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciByb3VuZCB0cmlwIHNlbGVjdGlvbiBpbiB0aGUgdHJpcCBzd2l0Y2ggZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSB0cmlwU3dpdGNoUm91bmRUcmlwTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIG9uZSB3YXkgc2VsZWN0aW9uIGluIHRoZSB0cmlwIHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHRyaXBTd2l0Y2hPbmVXYXlMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgZGlyZWN0IG9ubHkgc2VsZWN0aW9uIGluIHRoZSB0cmFuc2l0IHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdE9ubHlMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgYm90aCBkaXJlY3QgYW5kIHRyYW5zaXQgc2VsZWN0aW9uIGluIHRoZSB0cmFuc2l0IHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdFRyYW5zaXRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhdGVzIGlmIHRoZSBmaWx0ZXIgc2hvdWxkIGJlIG1pbmltaXplZCBvbiBtb2JpbGUgc2NyZWVuIHNpemVzLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemVPbk1vYmlsZT86IGJvb2xlYW47XG5cbiAvKipcbiAqIEBkZXNjcmlwdGlvblxuICogSW5kaWNhdGVzIGlmIHRoZSBlZGl0IHNlYXJjaCBvZiBhY2NvcmRpb24gc2hvdWxkIGJlIGV4cGVuZGVkIG9uIG1vYmlsZSBzY3JlZW4gc2l6ZXMuXG4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlKCkge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWU7XG4gIH1cbiAgc2V0IGV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLmV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBzZXBhcmF0b3IgZm9yIHRoZSBmaWx0ZXIgc3VtbWFyeSB0aGF0IGlzIGRpc3BheWVkIGlmIG1pbmltaXplT25Nb2JpbGUgaXMgdHJ1ZS5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICogMSB0cmF2ZWxsZXIsIHJvdW5kIHRyaXAgYW5kIGRpcmVjdC90cmFuc2l0XG4gICAqL1xuICBASW5wdXQoKSBkZWZhdWx0U3VtbWFyeVNlcGFyYXRvciA9ICcnO1xuXG4gIC8qKlxuICAgKiBBIHNlcGFyYXRvciBmb3IgdGhlIGZpbHRlciBzdW1tYXJ5IGlzIGFyZSBkaXNwYXllZCBpZiBtaW5pbWl6ZU9uTW9iaWxlIGlzIHRydWUuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqIDEgdHJhdmVsbGVyLCByb3VuZCB0cmlwIGFuZCBkaXJlY3QvdHJhbnNpdFxuICAgKi9cbiAgQElucHV0KCkgbGFzdFN1bW1hcnlTZXBhcmF0b3IgPSAnJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgdGl0bGUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0VGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIHRoZSBhZHVsdHMgcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RBZHVsdHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGNoaWxkcmVuIHBhc3NlbmdlciB0eXBlIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0Q2hpbGRyZW5MYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGluZmFudHMgcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RJbmZhbnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciB3aGVuIHRvdGFsIG51bWJlciBvZiBzZWxlY3RlZCBwYXNzZW5nZXJzIGV4Y2VlZHMgdGhlIGdyb3VwIGJvb2tpbmcgbGltaXRcbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwQm9va2luZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIGFsbCBhaXJwb3J0cyBpbiB0aGUgYWlycG9ydCBzZWxlY3QgZHJvcCBkb3duIGxpc3RzLlxuICAgKi9cbiAgQElucHV0KCkgYWxsQWlycG9ydHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgbGF0ZXN0IHNlYXJjaGVzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBsYXRlc3RTZWFyY2hlc0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBjbG9zZXN0IGFpcnBvcnRzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBjbG9zZXN0QWlycG9ydHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBkZXN0aW5hdGlvbiBpbnB1dCBmaWVsZCBpbiB0aGUgYWlycG9ydCBzZWxlY3QsIGlmIHRoZVxuICAgKiB1c2VyIHRyaWVzIHRvIHNlbGVjdCBhIGRlc3RpbmF0aW9uIGFpcnBvcnQgd2l0aG91dCBzZWxlY3RpbmcgYW4gb3JpZ2luIGFpcnBvcnQuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RPcmlnaW5GaXJzdExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgb3JpZ2luIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbE9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBwbGFjZWhvbGRlciB0aGF0IHdpbGwgYXBwZWFyIG9uIHRoZSBvcmlnaW4gYWlycG9ydCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyT3JpZ2luID0gJyc7XG5cbiAgLyoqXG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgZGVzdGluYXRpb24gYWlycG9ydCBpbnB1dCBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsRGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbiBteSBsb2NhdGlvbiBpbiB0aGUgZHJvcCBkb3duIGxpc3QgaW4gYWlycG9ydCBzZWxlY3QuXG4gICAqL1xuICBASW5wdXQoKSBnZW9sb2NhdGlvbkxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgaW4gbXkgbG9jYXRpb24sIGluIHRoZSBkcm9wIGRvd24gbGlzdCBpbiBhaXJwb3J0IHNlbGVjdCBpZiB1c2VyIGhhcyBkZW5pZWQgZ2VvbG9jYXRpb24uXG4gICAqL1xuICBASW5wdXQoKSBnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBwbGFjZWhvbGRlciB0aGF0IHdpbGwgYXBwZWFyIG9uIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJEZXN0aW5hdGlvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0aGF0IHdpbGwgYWxsb3cgYWx3YXlzIGtlZXBpbmcgdGhlIHNlbGVjdGVkIGFpcnBvcnQuXG4gICAqIFRoZSBsYXN0IHNlbGVjdGVkIGFpcnBvcnQgd2lsbCBiZSBzaG93biBvbmNlIHVzZXIgY2xlYXJzIHRoZSBzZWxlY3Rpb24gYW5kIGJsdXIuXG4gICAqL1xuICBASW5wdXQoKSBrZWVwU2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSB0aXRsZSB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gZWRpdCBzZWFyY2ggYWNjb3JkaW9uLlxuICAgKi9cbiAgQElucHV0KCkgZWRpdFNlYXJjaFRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzIHRoZSBwYXJlbnQncyBmb3JtIGdyb3VwLlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCBpcyByZXF1aWVyZWQgdG8gYmUgZmlsbGVkIGlmIG5hc0Zvcm1Db250cm9sTmFtZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZU9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVPdXRib3VuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xHcm91cEJvb2tpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZVN1YnNpZHlEaXNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTWFrZSBsYXRlc3Qgc2VhcmNoZXMgYW5kIGdlb2xvY2F0aW9uIG92ZXJyaWRlIGRlZmF1bHQgdmFsdWUgaW4gdGhlIG9yaWdpbiBhaXJwb3J0IHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KCkgb3ZlcnJpZGVPcmlnaW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyB3aWxsIG1ha2UgdGhlIGZpbHRlciBkaXNwbGF5IHN1Z2dlc3RlZCBhaXJwb3J0cyBiYXNlZCBvbiBnZW9sb2NhdGlvbiBhbmQgbGF0ZXN0IHNlYXJjaGVzLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlU3VnZ2VzdGlvbnM/OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjbG9zZXN0QWlycG9ydHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdEFpcnBvcnRzVmFsdWU7XG4gIH1cbiAgc2V0IGNsb3Nlc3RBaXJwb3J0cyhhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPikge1xuICAgIGlmICghYWlycG9ydHMgfHwgYWlycG9ydHMubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VzdEFpcnBvcnRzVmFsdWUgPSBhaXJwb3J0cztcblxuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLm92ZXJyaWRlT3JpZ2luKSkge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnRzWzBdLmNvZGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBvbmx5IGRpc3BsYXkgYWlycG9ydCBzZWxlY3Rpb24uIFdoZW4gYSBjaXR5IHBhaXIgaXMgc2VsZWN0ZWQsIHRoZSByZXN0IG9mIHRoZSBmaWx0ZXIgd2lsbCBiZSB2aXNpYmxlLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFsbCBhaXJwb3J0cyB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkIGludG8gdGhlIGRyb3Bkb3duIGxpc3RzLlxuICAgKiBJZiBkaXNwbGF5TGF0ZXN0U2VhcmNoZXMgaXMgdHJ1ZSwgaXQgd2lsbCB0cnkgdG8gZ2V0IHRoZSBsYXRlc3Qgc2VhcmNoZXMgZnJvbSB0aGUgYWJhbmRvbmVkIGJhc2tldC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhaXJwb3J0cygpIHtcbiAgICByZXR1cm4gdGhpcy5haXJwb3J0c1ZhbHVlO1xuICB9XG4gIHNldCBhaXJwb3J0cyhhaXJwb3J0czogQXJyYXk8QWlycG9ydE1vZGVsPikge1xuICAgIHRoaXMuYWlycG9ydHNWYWx1ZSA9IGFpcnBvcnRzO1xuXG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzcGxheUxhdGVzdFNlYXJjaGVzKSkge1xuICAgICAgY29uc3QgYWJhbmRvbmVkQmFza2V0ID0gdGhpcy5hYmFuZG9uZWRCYXNrZXRTZXJ2aWNlLmdldEFsbCgpO1xuICAgICAgdGhpcy5zZXRMYXRlc3RTZWFyY2hlcyhhYmFuZG9uZWRCYXNrZXQsIHRoaXMuYWlycG9ydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB0aGUgc2VsZWN0ZWQgdHJpcCB0eXBlLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHRyaXBUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnRyaXBUeXBlVmFsdWU7XG4gIH1cbiAgc2V0IHRyaXBUeXBlKHRyaXBUeXBlOiBUcmlwVHlwZSkge1xuICAgIGlmICh0cmlwVHlwZSA9PT0gdGhpcy50cmlwVHlwZVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmlwVHlwZVZhbHVlID0gdHJpcFR5cGU7XG4gICAgdGhpcy50cmlwVHlwZUNoYW5nZS5lbWl0KHRoaXMudHJpcFR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHdoZXRoZXIgdGhlIHNlbGVjdGVkIHRyYW5zaXQgdHlwZSBpcyBkaXJlY3Qgb25seSBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlyZWN0T25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXJlY3RPbmx5VmFsdWU7XG4gIH1cbiAgc2V0IGRpcmVjdE9ubHkoZGlyZWN0T25seTogYm9vbGVhbikge1xuICAgIGlmIChkaXJlY3RPbmx5ID09PSB0aGlzLmRpcmVjdE9ubHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlyZWN0T25seVZhbHVlID0gZGlyZWN0T25seTtcbiAgICB0aGlzLmRpcmVjdE9ubHlDaGFuZ2UuZW1pdCh0aGlzLmRpcmVjdE9ubHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgbGltaXQgZm9yIHdoZW4gdGhlIHRvdGFsIGFtb3VudCBvZiBwYXNzZW5nZXJzIGV4Y2VlZHMgdG8gYmUgYSBncm91cCBib29raW5nLlxuICAgKi9cbiAgQElucHV0KCkgZ3JvdXBCb29raW5nTGltaXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFN1YnNpZHkgZGlzY291bnRzXG4gICAqL1xuICBASW5wdXQoKSBzdWJzaWR5RGlzY291bnRzOiBBcnJheTxTdWJzaWR5RGlzY291bnRNb2RlbD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBzdWJzaWR5IGRpc2NvdW50XG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RlZFN1YnNpZHlEaXNjb3VudDogU3Vic2lkeURpc2NvdW50TW9kZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTdWJzaWR5IGRpc2NvdW50IGxhYmVsXG4gICAqL1xuICBASW5wdXQoKSBzdWJzaWR5RGlzY291bnRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIHByZXZpb3VzIG1vbnRoIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxQcmV2aW91c01vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgbmV4dCBtb250aCBidXR0b24gaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsTmV4dE1vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbiBkcm9wZG93biBzZWxlY3RvciBvcGVucyBvciBjbG9zZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgb3JpZ2luT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgKiBAZGVzY3JpcHRpb25cbiAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbiBkcm9wZG93biBzZWxlY3RvciBvcGVucyBvciBjbG9zZXMuXG4gICovXG4gIEBPdXRwdXQoKSBkZXN0aW5hdGlvbk9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24gb3BlbnMgb3IgY2xvc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIHBhc3NlbmdlclNlbGVjdE9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGVkIG9yaWdpbiBhaXJwb3J0IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgb3JpZ2luQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBaXJwb3J0TW9kZWw+KCk7XG5cbiAgLyoqXG4gICogQGRlc2NyaXB0aW9uXG4gICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBzZWxlY3RlZCBkZXN0aW5hdGlvbiBhaXJwb3J0IGNoYW5nZXMuXG4gICovXG4gIEBPdXRwdXQoKSBkZXN0aW5hdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWlycG9ydE1vZGVsPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIGEgcGFzc2VuZ2VyIHNlbGVjdGlvbiBjaGFuZ2UgaXMgcGVyZm9ybWVkLlxuICAgKi9cbiAgQE91dHB1dCgpIHBhc3NlbmdlcnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFBhc3NlbmdlcnNNb2RlbD4+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGFuZCBnZXRzIHRoZSBzZWxlY3RlZCB0cmlwIHR5cGUuXG4gICAqL1xuICBAT3V0cHV0KCkgdHJpcFR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRyaXBUeXBlPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB3aGV0aGVyIHRoZSBzZWxlY3RlZCB0cmFuc2l0IHR5cGUgaXMgZGlyZWN0IG9ubHkgb3Igbm90LlxuICAgKi9cbiAgQE91dHB1dCgpIGRpcmVjdE9ubHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3Igbm8gYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBub0F2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlRmxpZ2h0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNhYmxlIHBvc3NpYmlsaXR5IHRvIHNlbGVjdCBkYXRlcyBpbiB0aGUgcGFzdC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVQYXN0U2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG91dGJvdW5kIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgaW5ib3VuZCBkYXRlcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgaW5ib3VuZExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBkYXRlcGlja2VycyBpbiBhdmFpbGFiaWxpdHkgbW9kZSB3aGVyZSBhdmFpbGFibGUgZGF0ZXMgY2FuIGJlIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmlsaXR5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQXZhaWxhYmxlIGRhdGVzIGZvciBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIG91dGJvdW5kQXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQXZhaWxhYmxlIGRhdGVzIGZvciBpbmJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgaW5ib3VuZEF2YWlsYWJsZURhdGVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIElmIHNldCwgRW5hYmxlcyB0aGUgdGltZSBkcm9wZG93biBzZWxlY3RvciBhbG9uZ3NpZGUgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIHRpbWVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBkaXNwbGF5IGZvcm1hdCBvZiB0aGUgZGF0ZSB3aGVuIHVzZXIgaGFzIHNlbGVjdGVkIHRoZSBkYXRlIGFuZCBpdCBpcyBiZWluZyBzaG93biBpbiB0aGUgaW5wdXQgYm94IGZvciB0aGUgZGF0ZSBwaWNrZXIuXG4gICAqIFBsZWFzZSBsb29rIGF0IHRoZSBhbmd1bGFyIERhdGUgcGlwZSBmb3IgdmFsaWQgZm9ybWF0cyBhbmQgdmFyaWF0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGVEaXNwbGF5Rm9ybWF0ID0gJ0VFRUUgZCwgTU1NTSB5eXl5JztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSB0aW1lIGRpc3BsYXkgZm9ybWF0LlxuICAgKi9cbiAgQElucHV0KCkgdGltZURpc3BsYXlGb3JtYXQgPSAnSEg6bW0nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsb2NhbGUgY29kZSBmb3IgdGhlIGxvY2FsZSBmb3JtYXQgcnVsZXMgdG8gdXNlLiBXaGVuIG5vdCBzdXBwbGllZCwgdXNlcyB0aGUgdmFsdWUgb2YgTE9DQUxFX0lELCB3aGljaCBpcyBlbi1VUyBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHJlcXVpcmVzIHRoYXQgcmVnaXN0ZXJMb2NhbGVEYXRhIGlzIGNhbGxlZCB3aXRoIHRoZSByZXNwZWN0aXZlIGxvY2FsZS5cbiAgICovXG4gIEBJbnB1dCgpIGxvY2FsZSA9ICdlbi1HQic7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIG1vZGlmaWVyIHRvIHJlbW92ZSB0aGUgcGFkZGluZyBhbmQgbWFyZ2lucyBhcm91bmQgdGhlIGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBjb21wYWN0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3Qgb3V0Ym91bmQgZGF0ZXMuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZERpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgaW5ib3VuZCBkYXRlcy5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmREaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNob3cvQWRkIGRhdGUgcGlja2VyIGNvbWJvIGludG8gdGhlIGZpbHRlciBpZiBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZURhdGVwaWNrZXJzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciB0aGUgdG9nZ2xlIGljb24gZm9yIG1pbmltaXppbmcgZmlsdGVyLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemluZ0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIHRoZSB0b2dnbGUgaWNvbiBmb3IgbWF4aW1pemluZyBmaWx0ZXIuXG4gICAqL1xuICBASW5wdXQoKSBtYXhpbWl6aW5nTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgdGhlIHRvZ2dsaW5nIHRyYW5zaXQgdHlwZSB3aGVuIGZpbHRlciBpcyBtaW5pbWl6ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXJlY3RPbmx5TW9iaWxlTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciAnb3InIGluIHRoZSBzdWdnZXN0aW9uZWQgYWlycG9ydHMuXG4gICAqL1xuICBASW5wdXQoKSBvckxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHRleHQgdGhhdCBhcHBlYXJzIGluIHRoZSBkZXN0aW5hdGlvbnMgZHJvcGRvd24gbGlzdCB3aGVuIG9yaWdpbiBhaXJwb3J0IGlzIG5vdCBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBpbnZhbGlkRGVzdGluYXRpb25UZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZWxlY3RlZCBkYXRlZm9yIG91dGJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kU2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub3V0Ym91bmRTZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNlbGVjdGVkIGRhdGVmb3IgaW5ib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBpbmJvdW5kU2VsZWN0ZWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRTZWxlY3RlZERhdGVWYWx1ZTtcbiAgfVxuICBzZXQgaW5ib3VuZFNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluYm91bmRTZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICB0aGlzLmluYm91bmRTZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSBkZXN0aW5hdGlvbiBpbnB1dCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gICBASW5wdXQoKSBlbmFibGVEZXN0aW5hdGlvblNlbGVjdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgcGFzc2VuZ2VyIHNlbGVjdCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVBhc3NlbmdlcnNTZWxlY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSB0cmlwIHN3aXRjaCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVRyaXBTd2l0Y2ggPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSB0cmFuc2l0IHN3aXRjaCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVRyYW5zaXRTd2l0Y2ggPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBzZWxlY3RlZCBkYXRlaGFzIGJlZW4gY2hhbmdlZCBvbiB0aGUgb3V0Ym91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBAT3V0cHV0KCkgb3V0Ym91bmRTZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIHNlbGVjdGVkIGRhdGVoYXMgYmVlbiBjaGFuZ2VkIG9uIHRoZSBpbmJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRTZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE91dGJvdW5kIGRhdGVwaWNrZXIgaXMgb3BlbiBvciBjbG9zZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb3V0Ym91bmRPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5ib3VuZCBkYXRlcGlja2VyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRPcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgY2FsZW5kYXIgY2hhbmdlcyBtb250aC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5ib3VuZCBjYWxlbmRhciBjaGFuZ2VzIG1vbnRoLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRNb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGdlb2xvY2F0aW9uIG9mIHRoZSB1c2VyLiBXaWxsIGJlIGVtaXR0ZWQgaWYgJ2VuYWJsZVN1Z2dlc3Rpb25zJyBpcyB0cnVlLlxuICAgKi9cbiAgQE91dHB1dCgpIHBvc2l0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9sb2NhdGlvblBvc2l0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gZXZlbiB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIGluZm8gYnV0dG9uIG9uIHRoZSBzdWJzaWR5IGRpc2NvdW50IGlzIGNsaWNrZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgc3Vic2lkeURpc2NvdW50SW5mb0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGdldCBpbmJvdW5kU2VsZWN0ZWRNb250aCgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlO1xuICB9XG4gIHNldCBpbmJvdW5kU2VsZWN0ZWRNb250aChtb250aDogVXRjRGF0ZSkge1xuICAgIGlmICh0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZU1vbnRoKG1vbnRoLCB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmluYm91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgICAgIHRoaXMuaW5ib3VuZFNlbGVjdGVkTW9udGhWYWx1ZSA9IG1vbnRoO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGluYm91bmRTZWxlY3RlZERhdGVWYWx1ZTogVXRjRGF0ZTtcbiAgcHJpdmF0ZSBpbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGFpcnBvcnRzVmFsdWU6IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIHByaXZhdGUgdHJpcFR5cGVWYWx1ZTogVHJpcFR5cGU7XG4gIHByaXZhdGUgZGlyZWN0T25seVZhbHVlOiBib29sZWFuO1xuICBwcml2YXRlIGV4cGFuZGVkQWNjb3JkaW9uTW9iaWxlVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgY2xvc2VzdEFpcnBvcnRzVmFsdWU6IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIHByaXZhdGUgb3V0Ym91bmRPcGVuVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbmJvdW5kT3BlblZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcGFzc2VuZ2Vyc1ZhbHVlID0gbmV3IEFycmF5PFBhc3NlbmdlcnNNb2RlbD4oKTtcbiAgcHJpdmF0ZSBmb2N1c0FzeW5jVGltb3V0OiBhbnk7XG4gIHByaXZhdGUgdHJhbnNpdFN3aXRjaEZvY3VzVGltZW91dDogYW55O1xuICBwcml2YXRlIHRyaXBTd2l0Y2hGb2N1c1RpbWVvdXQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGV2aWNlSGVscGVyOiBEZXZpY2VIZWxwZXIsXG4gICAgcHJpdmF0ZSBzb3J0U2VydmljZTogU29ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhYmFuZG9uZWRCYXNrZXRTZXJ2aWNlOiBBYmFuZG9uZWRCYXNrZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVNlcnZpY2U6IERhdGVIZWxwZXIsXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcignbmFzLWZpbHRlcicpO1xuICAgIHRoaXMubmF0aXZlRWxlbWVudCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5uYXNGb3JtR3JvdXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm5hc0Zvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTmFzR3JvdXBWYWxpZCA9ICgvdHJ1ZS9pKS50ZXN0KHgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICBjb25zdCBkaXJlY3RPbmx5Q29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpO1xuXG4gICAgICBpZiAoZGlyZWN0T25seUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5kaXJlY3RPbmx5ID0gZGlyZWN0T25seUNvbnRyb2wudmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGUpIHtcbiAgICAgIGNvbnN0IHRyaXBUeXBlQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVRyaXBUeXBlKTtcblxuICAgICAgaWYgKHRyaXBUeXBlQ29udHJvbCkge1xuICAgICAgICB0aGlzLnRyaXBUeXBlID0gdHJpcFR5cGVDb250cm9sLnZhbHVlO1xuICAgICAgICB0aGlzLmluYm91bmREaXNhYmxlZCA9IHRyaXBUeXBlQ29udHJvbC52YWx1ZSA9PT0gVHJpcFR5cGUub25lV2F5O1xuXG4gICAgICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmQpIHtcbiAgICAgICAgICBjb25zdCBpbmJvdW5kQ29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmQpO1xuXG4gICAgICAgICAgaWYgKGluYm91bmRDb250cm9sICYmIHRoaXMuaW5ib3VuZERpc2FibGVkKSB7XG4gICAgICAgICAgICBpbmJvdW5kQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJpcFR5cGVDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBUcmlwVHlwZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5ib3VuZERpc2FibGVkID0gdmFsdWUgPT09IFRyaXBUeXBlLm9uZVdheTtcbiAgICAgICAgICB0aGlzLnRyaXBUeXBlID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgIGNvbnN0IGRpcmVjdE9ubHlDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seSk7XG4gICAgICBpZiAoZGlyZWN0T25seUNvbnRyb2wpIHtcbiAgICAgICAgZGlyZWN0T25seUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICB0aGlzLmRpcmVjdE9ubHkgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuXG4gICAgdGhpcy5jb250YWluZXJXaWR0aC5uZXh0KCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5vZmZzZXRXaWR0aCk7XG5cbiAgICB3aW5kb3cub25yZXNpemUgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lcldpZHRoLm5leHQoKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoKTtcbiAgICB9O1xuICB9XG5cbiAgb25TdWJzaWR5RGlzY291bnRJbmZvQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzaWR5RGlzY291bnRJbmZvQ2xpY2suZW1pdCgpO1xuICB9XG5cbiAgb25TdWJzaWR5RGlzY291bnRTZWxlY3RDaGFuZ2UobW9kZWw6IFN1YnNpZHlEaXNjb3VudE1vZGVsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm5hc0Zvcm1Hcm91cCB8fCAhdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVTdWJzaWR5RGlzY291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzaWR5RGlzY291bnRDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lU3Vic2lkeURpc2NvdW50KTtcbiAgICBzdWJzaWR5RGlzY291bnRDb250cm9sLnBhdGNoVmFsdWUobW9kZWwpO1xuICB9XG5cbiAgZ2V0Q2xvc2VzdEFpcnBvcnRzKHBvc2l0aW9uOiBHZW9sb2NhdGlvblBvc2l0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5wb3NpdGlvbkNoYW5nZS5lbWl0KHBvc2l0aW9uKTtcbiAgfVxuXG4gIGdldEZpbHRlckNsYXNzKGVsZW1lbnQ/OiBzdHJpbmcsIG1vZGlmaWVyc0lucHV0PzogYW55KTogQ2xhc3NNb2RlbCB7XG4gICAgbGV0IG1vZGlmaWVycyA9IG1vZGlmaWVyc0lucHV0IHx8IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBpZiAodHlwZW9mIG1vZGlmaWVyc0lucHV0ID09PSAnc3RyaW5nJyB8fCBtb2RpZmllcnNJbnB1dCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgbW9kaWZpZXJzID0gW21vZGlmaWVyc0lucHV0XTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aHMgPSBbXTtcblxuICAgIGlmICh0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkpIHtcbiAgICAgIHdpZHRocy5wdXNoKCdtZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoRGVza3RvcCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpKSB7XG4gICAgICB3aWR0aHMucHVzaCgnbGcnKTtcbiAgICB9XG5cbiAgICBtb2RpZmllcnMgPSBbLi4ubW9kaWZpZXJzLCAuLi53aWR0aHNdO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoZWxlbWVudCwgbW9kaWZpZXJzKTtcbiAgfVxuXG4gIGdldEFpcnBvcnRTZWxlY3RDbGFzcygpOiBDbGFzc01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzcyhcbiAgICAgICdhaXJwb3J0LXNlbGVjdCcsXG4gICAgICBbXG4gICAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ2xnJyxcbiAgICAgICAgdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aFRhYmxldCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpICYmICdtZCcsXG4gICAgICAgIHRoaXMuZXhpc3RzKHRoaXMuZW5hYmxlRGF0ZXBpY2tlcnMpICYmICduby1ib3JkZXInXG4gICAgICBdKTtcbiAgfVxuXG4gIGdldFN1Z2dlc3Rpb25zKCk6IEFycmF5PEFpcnBvcnRNb2RlbD4ge1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuZnJvbShuZXcgU2V0KFtcbiAgICAgIC4uLnRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4gPyB0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luLmZpbHRlcih4ID0+IHguY29kZSAhPT0gdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSkgOiBbXSxcbiAgICAgIC4uLnRoaXMuY2xvc2VzdEFpcnBvcnRzID8gdGhpcy5jbG9zZXN0QWlycG9ydHMuZmlsdGVyKHggPT4geC5jb2RlICE9PSB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlKSA6IFtdXG4gICAgXSkpO1xuXG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgZ2V0RGF0ZVBpY2tlcnNDbGFzcygpOiBDbGFzc01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJDbGFzcygnZGF0ZS1jb21ibycsIFtcbiAgICAgIHRoaXMuZXhpc3RzKHRoaXMubWluaW1pemUpICYmICdtaW5pbWl6ZWQnLFxuICAgICAgdGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpID4gNTAwICYmICdzaWRlLWJ5LXNpZGUnXG4gICAgXSk7XG4gIH1cblxuICBnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoZWxlbWVudD86IHN0cmluZywgbW9kaWZpZXJzSW5wdXQ/OiBhbnkpOiBDbGFzc01vZGVsIHtcbiAgICBsZXQgbW9kaWZpZXJzID0gbW9kaWZpZXJzSW5wdXQgfHwgbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGlmICh0eXBlb2YgbW9kaWZpZXJzSW5wdXQgPT09ICdzdHJpbmcnIHx8IG1vZGlmaWVyc0lucHV0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBtb2RpZmllcnMgPSBbbW9kaWZpZXJzSW5wdXRdO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRocyA9IFtcbiAgICAgIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbWQnLFxuICAgICAgdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aERlc2t0b3AodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbGcnXG4gICAgXTtcblxuICAgIG1vZGlmaWVycyA9IFsuLi5tb2RpZmllcnMsIC4uLndpZHRoc107XG5cbiAgICBjb25zdCB0cmF2ZWxEZXRhaWxzQmFzZSA9IG5ldyBOYXNDb21wb25lbnRCYXNlKCd0cmF2ZWwtZGV0YWlscycpO1xuICAgIHJldHVybiB0cmF2ZWxEZXRhaWxzQmFzZS5nZXRDbGFzcyhlbGVtZW50LCBtb2RpZmllcnMpO1xuICB9XG5cbiAgb25JbmJvdW5kTW9udGhDaGFuZ2UobW9udGg6IFV0Y0RhdGUpOiB2b2lkIHtcbiB0aGlzLmluYm91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbn1cbiAgb25PdXRib3VuZE1vbnRoQ2hhbmdlKG1vbnRoOiBVdGNEYXRlKTogdm9pZCB7XG4gdGhpcy5vdXRib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xufVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMudHJhbnNpdFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXREaXNwbGF5KCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0UHJldmlvdXNDb250cm9sKCk7XG4gICAgfVxuICB9XG5cbiAgcGFzc2VuZ2VyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSB8fCB0aGlzLmlzVGFibGV0RGlzcGxheSgpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgICAgIGlmICh0aGlzLnN1YnNpZHlEaXNjb3VudHMgJiYgdGhpcy5zdWJzaWR5RGlzY291bnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2lkeURpc2NvdW50LmluZm9CdXR0b24uYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgfHwgdGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKGZhbHNlKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblRyaXBTd2l0Y2hLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50cmlwVHlwZVJvdW5kVHJpcC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlwVHlwZU9uZXdheS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50cmlwVHlwZU9uZXdheS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlwVHlwZVJvdW5kVHJpcC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkgfHwgIXRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJldmlvdXNDb250cm9sKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gub3Blbikge1xuICAgICAgICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyYW5zaXRTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4oZmFsc2UpO1xuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNpdEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyYW5zaXRUeXBlVHJhbnNpdC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0VHlwZURpcmVjdE9ubHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJhbnNpdFR5cGVEaXJlY3RPbmx5Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRUeXBlVHJhbnNpdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgICB0aGlzLmZvY3VzQXN5bmMoPGFueT50aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25UcmFuc2l0U3dpdGNoT3BlbighdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzaWR5RGlzY291bnRzICYmIHRoaXMuc3Vic2lkeURpc2NvdW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3Vic2lkeURpc2NvdW50LmluZm9CdXR0b24uYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKGZhbHNlKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyYW5zaXRTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uU3Vic2lkeURpc2NvdW50SW5mb0J1dHRvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy50cmFuc2l0U3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25OZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICB0aGlzLmZvY3VzQXN5bmMoPGFueT50aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNBc3luYyhyZWZFbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNBc3luY1RpbW91dCk7XG5cbiAgICB0aGlzLmZvY3VzQXN5bmNUaW1vdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQocmVmRWxlbWVudCkpO1xuICB9XG5cbiAgb25EYXRlcGlja2VyRm9jdXNPblByZXZpb3VzKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLmZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk7XG4gIH1cblxuICBzZWxlY3RQcmV2aW91c0NvbnRyb2woKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPbmx5KSB7XG4gICAgICAgIHRoaXMub3V0Ym91bmRPcGVuID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5ib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICBpZiAodGhpcy5leGlzdHModGhpcy5haXJwb3J0U2VsZWN0LmNvbWJvKSkge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25EZXN0aW5hdGlvbk9wZW4odHJ1ZSk7XG4gICAgICAgIGlmICgoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duRGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKCg8YW55PnRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25EZXN0aW5hdGlvbikuaW5wdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25PcmlnaW5PcGVuKHRydWUpO1xuICAgICAgICBpZiAoKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbikpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbikuaW5wdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBvbkZvY3VzT25OZXh0Q2hhbmdlKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpICYmIHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgdGhpcy5vblRyaXBTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXREaXNwbGF5KCkpIHtcbiAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi50b2dnbGVFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNNb2JpbGVEaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoTW9iaWxlKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBpc1RhYmxldERpc3BsYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIG9uT3JpZ2luT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24ub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAhdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG5cbiAgICB0aGlzLm9yaWdpbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdmFsaWRhdGVBaXJwb3J0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uO1xuICAgIGlmICgob3JpZ2luU25hcHNob3QgJiYgZGVzdGluYXRpb25TbmFwc2hvdCAmJiBvcmlnaW5TbmFwc2hvdC5jb2RlICYmIG9yaWdpblNuYXBzaG90LmNvZGUubGVuZ3RoXG4gICAgICAmJiBkZXN0aW5hdGlvblNuYXBzaG90LmNvZGUgJiYgZGVzdGluYXRpb25TbmFwc2hvdC5jb2RlLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB1cGRhdGVNYXhpbWl6ZSgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubWF4aW1pemUgPSB0aGlzLnZhbGlkYXRlQWlycG9ydFZhbHVlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgb25EZXN0aW5hdGlvbk9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG4gICAgdGhpcy5kZXN0aW5hdGlvbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2VyU2VsZWN0T3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3Blbikge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3Blbikge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBvcGVuO1xuICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0T3BlbkNoYW5nZS5lbWl0KG9wZW4pO1xuXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3QubnVtYmVyRmllbGRzLmZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3QubnVtYmVyRmllbGRzLmZpcnN0LmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH1cblxuICBvblRyaXBTd2l0Y2hPcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50cmlwU3dpdGNoRm9jdXNUaW1lb3V0KTtcblxuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi5vcGVuID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IG9wZW47XG5cbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy50cmlwU3dpdGNoRm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpcFR5cGVSb3VuZFRyaXAubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBvblRyYW5zaXRTd2l0Y2hPcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50cmFuc2l0U3dpdGNoRm9jdXNUaW1lb3V0KTtcblxuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBvcGVuO1xuICAgIH1cblxuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2hGb2N1c1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2l0VHlwZVRyYW5zaXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBvbk9yaWdpbkNoYW5nZShhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLm9yaWdpbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIGlmICghYWlycG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25PcmlnaW5DaGFuZ2UoYWlycG9ydCk7XG5cbiAgICBpZiAodGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9PT0gYWlycG9ydC5jb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRGVzdGluYXRpb25DaGFuZ2UoYWlycG9ydDogQWlycG9ydE1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0Rm9jdXNPblBhc3NlbmdlclNlbGVjdChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMubWluaW1pemUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5kYXRlcGlja2VyQ29tYm8uZGF0ZXBpY2tlck91dGJvdW5kKS5pbnB1dCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXREaXNwbGF5KCkgJiYgdGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm91dGJvdW5kT3BlbiA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcblxuICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3Blbih0cnVlKTtcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRSZWYgPSB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQ7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudChjdXJyZW50RWxlbWVudFJlZikpO1xuXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuXG4gICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgdGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQoZWxlbWVudDogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25UcmlwVHlwZUNoYW5nZSh0cmlwVHlwZTogVHJpcFR5cGUpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyaXBUeXBlID0gdHJpcFR5cGU7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgY29uc3QgdHJpcFN3aXRjaENvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSk7XG4gICAgICB0cmlwU3dpdGNoQ29udHJvbC5wYXRjaFZhbHVlKHRyaXBUeXBlKTtcbiAgICB9XG4gIH1cblxuICBvblRyYW5zaXRDaGFuZ2UoZGlyZWN0T25seTogYm9vbGVhbik6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGlyZWN0T25seSA9IGRpcmVjdE9ubHk7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICBjb25zdCB0cmlwVHlwZUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KTtcbiAgICAgIHRyaXBUeXBlQ29udHJvbC5wYXRjaFZhbHVlKGRpcmVjdE9ubHkpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRyYXZlbERldGFpbHNUcmlwU3dpdGNoSWNvbkNsYXNzKG1vZGlmaWVycz86IGFueSk6IEFycmF5PENsYXNzTW9kZWw+IHtcbiAgICBjb25zdCBpY29uTWVkaXVtQmFzZSA9IG5ldyBOYXNDb21wb25lbnRCYXNlKCdpY29uLW1lZGl1bScpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIGljb25NZWRpdW1CYXNlLmdldENsYXNzKCcnLCBtb2RpZmllcnMpLFxuICAgICAgdGhpcy5nZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2ljb24nKVxuICAgIF07XG4gIH1cblxuICBnZXRUcmlwU3dpdGNoTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmlwVHlwZSA9PT0gVHJpcFR5cGUudHdvV2F5UmV0dXJuID8gdGhpcy50cmlwU3dpdGNoUm91bmRUcmlwTGFiZWwgOiB0aGlzLnRyaXBTd2l0Y2hPbmVXYXlMYWJlbDtcbiAgfVxuXG4gIGdldFRyYW5zaXRMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdE9ubHkgPyB0aGlzLmRpcmVjdE9ubHlMYWJlbCA6IHRoaXMuZGlyZWN0VHJhbnNpdExhYmVsO1xuICB9XG5cbiAgb25BY2NvcmRpb25Ub2dnbGVDaGFuZ2UoZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlTdW1tYXJ5ID0gIWV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0U3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnBhc3NlbmdlclNlbGVjdExhYmVsfSR7dGhpcy5kZWZhdWx0U3VtbWFyeVNlcGFyYXRvcn1gICtcbiAgICAgIGAke3RoaXMuZ2V0VHJpcFN3aXRjaExhYmVsKCkudG9Mb3dlckNhc2UoKX0ke3RoaXMubGFzdFN1bW1hcnlTZXBhcmF0b3J9JHt0aGlzLmdldFRyYW5zaXRMYWJlbCgpLnRvTG93ZXJDYXNlKCl9YDtcbiAgfVxuXG4gIHNob3VsZE1heGltaXplKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5leGlzdHModGhpcy5taW5pbWl6ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5haXJwb3J0U2VsZWN0XG4gICAgICAmJiB0aGlzLmVuYWJsZURlc3RpbmF0aW9uU2VsZWN0XG4gICAgICAmJiB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luXG4gICAgICAmJiB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luLmNvZGVcbiAgICAgICYmIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvblxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uLmNvZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5haXJwb3J0U2VsZWN0XG4gICAgICAmJiAhdGhpcy5lbmFibGVEZXN0aW5hdGlvblNlbGVjdFxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpblxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbi5jb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAodGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gfHwgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbikpIHtcbiAgICAgIHJldHVybiB0aGlzLm1heGltaXplO1xuICAgIH0gZWxzZSBpZiAodGhpcy5leGlzdHModGhpcy5taW5pbWl6ZSkpIHtcbiAgICAgIGlmICh0aGlzLm1heGltaXplKSB7XG4gICAgICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzTmFzR3JvdXBWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmFpcnBvcnRTZWxlY3QuY29tYm8pKSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25EZXN0aW5hdGlvbk9wZW4odHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDEwMCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9uT3JpZ2luT3Blbih0cnVlKTtcbiAgICAgIHRoaXMuZm9jdXNBc3luYygoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duT3JpZ2luKS5pbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMYXRlc3RTZWFyY2hlcyhhYmFuZG9uZWRCYXNrZXQ6IEFycmF5PEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbD4sIGFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+KTogdm9pZCB7XG4gICAgaWYgKCFhYmFuZG9uZWRCYXNrZXQgfHwgIWFpcnBvcnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdW5pcXVlID0gbmV3IEFycmF5PEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbD4oKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhYmFuZG9uZWRCYXNrZXQpIHtcbiAgICAgIGlmICghdW5pcXVlLnNvbWUoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZSA9PT0gaXRlbS5kZXN0aW5hdGlvbkNvZGUpKSB7XG4gICAgICAgIHVuaXF1ZS5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbkNvZGVzID0gdW5pcXVlLm1hcCh4ID0+IHgub3JpZ2luQ29kZSk7XG4gICAgY29uc3QgZGVzdGluYXRpb25Db2RlcyA9IHVuaXF1ZS5tYXAoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZSk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc09yaWdpbiA9IGFpcnBvcnRzLmZpbHRlcihhaXJwb3J0ID0+IHVuaXF1ZS5zb21lKHggPT4geC5vcmlnaW5Db2RlLnRvTG93ZXJDYXNlKCkgPT09IGFpcnBvcnQuY29kZS50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uID0gYWlycG9ydHMuZmlsdGVyKGFpcnBvcnQgPT4gdW5pcXVlLnNvbWUoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZS50b0xvd2VyQ2FzZSgpID09PSBhaXJwb3J0LmNvZGUudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgY29uc3QgY29kZSA9ICdjb2RlJztcbiAgICB0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luID0gdGhpcy5zb3J0U2VydmljZS5zb3J0QnlPYmplY3QobGF0ZXN0U2VhcmNoZXNPcmlnaW4sIG9yaWdpbkNvZGVzLCBjb2RlKS5zbGljZSgwLCAzKTtcblxuICAgIGlmICh0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luICYmIHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4ubGVuZ3RoID4gMCAmJiB0aGlzLmV4aXN0cyh0aGlzLm92ZXJyaWRlT3JpZ2luKSkge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW5bMF0uY29kZTtcbiAgICB9XG5cbiAgICB0aGlzLmxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnRCeU9iamVjdChsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbkNvZGVzLCBjb2RlKS5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEcm9wZG93bnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24ub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuYXMtYWNjb3JkaW9uICpuZ0lmPVwiZGV2aWNlSGVscGVyPy5pc01vYmlsZSgpICYmIGV4aXN0cyhtaW5pbWl6ZU9uTW9iaWxlKTsgZWxzZSBmaWx0ZXJUZW1wbGF0ZVwiXG4gIHNpbXBsZVxuICBjb250YWluZXJPblRvZ2dsZVxuICB0cmFuc3BhcmVudFxuICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVcIlxuICBbdGl0bGVdPVwiZWRpdFNlYXJjaFRpdGxlXCJcbiAgKHRvZ2dsZUNoYW5nZSk9XCJvbkFjY29yZGlvblRvZ2dsZUNoYW5nZSgkZXZlbnQpXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9uYXMtYWNjb3JkaW9uPlxuPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiXG4gICpuZ0lmPVwiZGV2aWNlSGVscGVyPy5pc01vYmlsZSgpICYmIGV4aXN0cyhtaW5pbWl6ZU9uTW9iaWxlKSAmJiBkaXNwbGF5U3VtbWFyeVwiPnt7Z2V0U3VtbWFyeSgpfX08L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZT5cbiAgPGRpdiAjY29udGFpbmVyXG4gICAgW25hc0NsYXNzXT1cImdldENvbnRhaW5lckNsYXNzKClcIj5cbiAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRGaWx0ZXJDbGFzcygnZmlsdGVycycsIFtleGlzdHMobWluaW1pemUpICYmICdtaW5pbWl6ZWQnLCBtYXhpbWl6ZSAmJiAnbWF4aW1pemUnXSlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhaXJwb3J0cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bmFzLWFpcnBvcnQtc2VsZWN0ICpuZ0lmPVwiYWlycG9ydHMgJiYgYWlycG9ydFJlbGF0aW9ucyAmJiAoZW5hYmxlRGVzdGluYXRpb25TZWxlY3QpXCJcbiAgICAgICAgICAjYWlycG9ydFNlbGVjdFxuICAgICAgICAgIGNvbWJvXG4gICAgICAgICAgW2FyaWFMYWJlbENsZWFyXT1cImFyaWFMYWJlbENsZWFyXCJcbiAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luXT1cIm5hc0Zvcm1Db250cm9sTmFtZU9yaWdpblwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uXT1cIm5hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uXCJcbiAgICAgICAgICBbdXNlU3dpdGNoXT1cInVzZVN3aXRjaFwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEFpcnBvcnRTZWxlY3RDbGFzcygpXCJcbiAgICAgICAgICBbYWlycG9ydHNdPVwiYWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkT3JpZ2luQWlwb3J0c109XCJhbGxvd2VkT3JpZ2luQWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0c109XCJhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0c1wiXG4gICAgICAgICAgW2FpcnBvcnRSZWxhdGlvbnNdPVwiYWlycG9ydFJlbGF0aW9uc1wiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzT3JpZ2luXT1cImxhdGVzdFNlYXJjaGVzT3JpZ2luXCJcbiAgICAgICAgICBbbGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbl09XCJsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uXCJcbiAgICAgICAgICBbZGlzcGxheUxhdGVzdFNlYXJjaGVzXT1cImRpc3BsYXlMYXRlc3RTZWFyY2hlc1wiXG4gICAgICAgICAgW2Rpc3BsYXlDbG9zZXN0QWlycG9ydHNdPVwiZGlzcGxheUNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW29yaWdpbkFpcnBvcnRDb2RlXT1cIm9yaWdpbkFpcnBvcnRDb2RlXCJcbiAgICAgICAgICBbZGVzdGluYXRpb25BaXJwb3J0Q29kZV09XCJkZXN0aW5hdGlvbkFpcnBvcnRDb2RlXCJcbiAgICAgICAgICBbYWxsQWlycG9ydHNMYWJlbF09XCJhbGxBaXJwb3J0c0xhYmVsXCJcbiAgICAgICAgICBbbGF0ZXN0U2VhcmNoZXNMYWJlbF09XCJsYXRlc3RTZWFyY2hlc0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzTGFiZWxdPVwiY2xvc2VzdEFpcnBvcnRzTGFiZWxcIlxuICAgICAgICAgIFtjbG9zZXN0QWlycG9ydHNdPVwiY2xvc2VzdEFpcnBvcnRzXCJcbiAgICAgICAgICBbc2VsZWN0T3JpZ2luRmlyc3RMYWJlbF09XCJzZWxlY3RPcmlnaW5GaXJzdExhYmVsXCJcbiAgICAgICAgICBbbGFiZWxPcmlnaW5dPVwibGFiZWxPcmlnaW5cIlxuICAgICAgICAgIFtwbGFjZWhvbGRlck9yaWdpbl09XCJwbGFjZWhvbGRlck9yaWdpblwiXG4gICAgICAgICAgW2xhYmVsRGVzdGluYXRpb25dPVwibGFiZWxEZXN0aW5hdGlvblwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uTGFiZWxdPVwiZ2VvbG9jYXRpb25MYWJlbFwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uQmxvY2tlZExhYmVsXT1cImdlb2xvY2F0aW9uQmxvY2tlZExhYmVsXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJEZXN0aW5hdGlvbl09XCJwbGFjZWhvbGRlckRlc3RpbmF0aW9uXCJcbiAgICAgICAgICBba2VlcFNlbGVjdGlvbl09XCJrZWVwU2VsZWN0aW9uXCJcbiAgICAgICAgICBbaW52YWxpZERlc3RpbmF0aW9uVGV4dF09XCJpbnZhbGlkRGVzdGluYXRpb25UZXh0XCJcbiAgICAgICAgICAob3JpZ2luQ2hhbmdlKT1cInNldFNlbGVjdGVkT3JpZ2luQWlycG9ydCgkZXZlbnQpXCJcbiAgICAgICAgICAoZGVzdGluYXRpb25DaGFuZ2UpPVwib25EZXN0aW5hdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAoZm9jdXNPbk5leHQpPVwic2V0Rm9jdXNPblBhc3NlbmdlclNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAob3JpZ2luT3BlbkNoYW5nZSk9XCJvbk9yaWdpbk9wZW4oJGV2ZW50KVwiXG4gICAgICAgICAgKGRlc3RpbmF0aW9uT3BlbkNoYW5nZSk9XCJvbkRlc3RpbmF0aW9uT3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAocG9zaXRpb25DaGFuZ2UpPVwiZ2V0Q2xvc2VzdEFpcnBvcnRzKCRldmVudClcIj48L25hcy1haXJwb3J0LXNlbGVjdD5cbiAgICAgICAgPG5hcy1haXJwb3J0LXNlbGVjdCAqbmdJZj1cImFpcnBvcnRzICYmICghZW5hYmxlRGVzdGluYXRpb25TZWxlY3QpXCJcbiAgICAgICAgICAjYWlycG9ydFNlbGVjdFxuICAgICAgICAgIFthcmlhTGFiZWxDbGVhcl09XCJhcmlhTGFiZWxDbGVhclwiXG4gICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU9yaWdpbl09XCJuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW5cIlxuICAgICAgICAgIFt1c2VTd2l0Y2hdPVwidXNlU3dpdGNoXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2FpcnBvcnQtb3JpZ2luLXNlbGVjdCcpXCJcbiAgICAgICAgICBbYWlycG9ydHNdPVwiYWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkT3JpZ2luQWlwb3J0c109XCJhbGxvd2VkT3JpZ2luQWlycG9ydHNcIlxuICAgICAgICAgIFthaXJwb3J0UmVsYXRpb25zXT1cImFpcnBvcnRSZWxhdGlvbnNcIlxuICAgICAgICAgIFtsYXRlc3RTZWFyY2hlc09yaWdpbl09XCJsYXRlc3RTZWFyY2hlc09yaWdpblwiXG4gICAgICAgICAgW2Rpc3BsYXlMYXRlc3RTZWFyY2hlc109XCJkaXNwbGF5TGF0ZXN0U2VhcmNoZXNcIlxuICAgICAgICAgIFtkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXT1cImRpc3BsYXlDbG9zZXN0QWlycG9ydHNcIlxuICAgICAgICAgIFtvcmlnaW5BaXJwb3J0Q29kZV09XCJvcmlnaW5BaXJwb3J0Q29kZVwiXG4gICAgICAgICAgW2FsbEFpcnBvcnRzTGFiZWxdPVwiYWxsQWlycG9ydHNMYWJlbFwiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzTGFiZWxdPVwibGF0ZXN0U2VhcmNoZXNMYWJlbFwiXG4gICAgICAgICAgW2Nsb3Nlc3RBaXJwb3J0c0xhYmVsXT1cImNsb3Nlc3RBaXJwb3J0c0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzXT1cImNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW3NlbGVjdE9yaWdpbkZpcnN0TGFiZWxdPVwic2VsZWN0T3JpZ2luRmlyc3RMYWJlbFwiXG4gICAgICAgICAgW2xhYmVsT3JpZ2luXT1cImxhYmVsT3JpZ2luXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJPcmlnaW5dPVwicGxhY2Vob2xkZXJPcmlnaW5cIlxuICAgICAgICAgIFtnZW9sb2NhdGlvbkxhYmVsXT1cImdlb2xvY2F0aW9uTGFiZWxcIlxuICAgICAgICAgIFtnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbF09XCJnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbFwiXG4gICAgICAgICAgW2tlZXBTZWxlY3Rpb25dPVwia2VlcFNlbGVjdGlvblwiXG4gICAgICAgICAgKG9yaWdpbkNoYW5nZSk9XCJzZXRTZWxlY3RlZE9yaWdpbkFpcnBvcnQoJGV2ZW50KVwiXG4gICAgICAgICAgKGZvY3VzT25OZXh0KT1cInNldEZvY3VzT25QYXNzZW5nZXJTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgKG9yaWdpbk9wZW5DaGFuZ2UpPVwib25PcmlnaW5PcGVuKCRldmVudClcIlxuICAgICAgICAgIChwb3NpdGlvbkNoYW5nZSk9XCJnZXRDbG9zZXN0QWlycG9ydHMoJGV2ZW50KVwiPjwvbmFzLWFpcnBvcnQtc2VsZWN0PlxuICAgICAgICA8bmFzLXN1Z2dlc3Rpb25zICpuZ0lmPVwiKGNsb3Nlc3RBaXJwb3J0cyB8fCBsYXRlc3RTZWFyY2hlc09yaWdpbikgJiYgZXhpc3RzKGVuYWJsZVN1Z2dlc3Rpb25zKVwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEZpbHRlckNsYXNzKCdzdWdnZXN0aW9ucycpXCJcbiAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiZ2V0U3VnZ2VzdGlvbnMoKVwiXG4gICAgICAgICAgW29yTGFiZWxdPVwib3JMYWJlbFwiXG4gICAgICAgICAgKGFpcnBvcnRTZWxlY3QpPVwic2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KCRldmVudClcIj48L25hcy1zdWdnZXN0aW9ucz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZE1heGltaXplKClcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuYXNDbGFzc109XCIhZW5hYmxlRGVzdGluYXRpb25TZWxlY3QgPyBnZXRDbGFzcygnb3JpZ2luLWNvbWJpbmVkJykgOlxuICAgICAgICAgIGdldFRyYXZlbERldGFpbHNDbGFzcygnJywgWydjb21iaW5lZCcsIGV4aXN0cyhlbmFibGVEYXRlcGlja2VycykgJiYgJ25vLWJvcmRlcicsIGV4aXN0cyhtaW5pbWl6ZSkgJiYgJ21pbmltaXplZCddKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbmFibGVQYXNzZW5nZXJzU2VsZWN0XCI+XG4gICAgICAgICAgICA8bmFzLWRyb3Bkb3duICNwYXNzZW5nZXJTZWxlY3REcm9wZG93blxuICAgICAgICAgICAgICAqbmdJZj1cInBhc3NlbmdlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicsICdwYXNzZW5nZXJzJylcIlxuICAgICAgICAgICAgICBbY3NzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cInBhc3NlbmdlclNlbGVjdExhYmVsXCJcbiAgICAgICAgICAgICAgW2xhYmVsU3R5bGVdPVwieyd3aWR0aCc6ICcxMDJweCd9XCJcbiAgICAgICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgKG9wZW5DaGFuZ2UpPVwib25QYXNzZW5nZXJTZWxlY3RPcGVuKCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJwYXNzZW5nZXJLZXlEb3duKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG5hcy1wYXNzZW5nZXItc2VsZWN0ICNwYXNzZW5nZXJTZWxlY3RcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsQWRkXT1cImFyaWFMYWJlbEFkZFwiXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbFN1YnRyYWN0XT1cImFyaWFMYWJlbFN1YnRyYWN0XCJcbiAgICAgICAgICAgICAgICBbYWR1bHRzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0QWR1bHRzTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtjaGlsZHJlbkxhYmVsXT1cInBhc3NlbmdlclNlbGVjdENoaWxkcmVuTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtpbmZhbnRzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0SW5mYW50c0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbbWF4UGF4Q291bnRdPVwibWF4UGF4Q291bnRcIlxuICAgICAgICAgICAgICAgIFttaW5BZHVsdENvdW50XT1cIm1pbkFkdWx0Q291bnRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJwYXNzZW5nZXJTZWxlY3RUaXRsZVwiXG4gICAgICAgICAgICAgICAgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgICAgICAgIFtuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZ109XCJuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZ1wiXG4gICAgICAgICAgICAgICAgW2dyb3VwQm9va2luZ0xhYmVsXT1cImdyb3VwQm9va2luZ0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbZ3JvdXBCb29raW5nTGltaXRdPVwiZ3JvdXBCb29raW5nTGltaXRcIlxuICAgICAgICAgICAgICAgIChmb2N1c09uTmV4dCk9XCJvblBhc3NlbmdlcnNTZWxlY3RGb2N1c09uTmV4dCgpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXNPblByZXZpb3VzKT1cIm9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpXCJcbiAgICAgICAgICAgICAgICBbKHBhc3NlbmdlcnMpXT1cInBhc3NlbmdlcnNcIj48L25hcy1wYXNzZW5nZXItc2VsZWN0PlxuICAgICAgICAgICAgPC9uYXMtZHJvcGRvd24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZVRyaXBTd2l0Y2hcIj5cbiAgICAgICAgICAgIDxuYXMtZHJvcGRvd24gKm5nSWY9XCJ0cmlwU3dpdGNoT25lV2F5TGFiZWwgJiYgdHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsXCJcbiAgICAgICAgICAgICAgI3RyaXBTd2l0Y2hcbiAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnZHJvcGRvd24nLCAndHJpcC10eXBlJylcIlxuICAgICAgICAgICAgICBbY3NzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImdldFRyaXBTd2l0Y2hMYWJlbCgpXCJcbiAgICAgICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgKG9wZW5DaGFuZ2UpPVwib25UcmlwU3dpdGNoT3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25UcmlwU3dpdGNoS2V5RG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9ucycpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICN0cmlwVHlwZVJvdW5kVHJpcFxuICAgICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgdHJpcFR5cGUgPT09IDIgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyaXBUeXBlQ2hhbmdlKDIpXCI+XG4gICAgICAgICAgICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ21lZGl1bSdcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJ0cmlwVHlwZSA9PT0gMiA/ICdmbGlnaHQtcmV0dXJuLS1saWdodCcgOiAnZmxpZ2h0LXJldHVybidcIj48L25hcy1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndGl0bGUnLCAnc21hbGwnKVwiPnt7dHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICN0cmlwVHlwZU9uZXdheVxuICAgICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgdHJpcFR5cGUgPT09IDEgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyaXBUeXBlQ2hhbmdlKDEpXCI+XG4gICAgICAgICAgICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ21lZGl1bSdcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJ0cmlwVHlwZSA9PT0gMSA/ICdmbGlnaHQtb25ld2F5LS1saWdodCcgOiAnZmxpZ2h0LW9uZXdheSdcIj48L25hcy1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndGl0bGUnLCBbJ3NtYWxsJ10pXCI+e3t0cmlwU3dpdGNoT25lV2F5TGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25hcy1kcm9wZG93bj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlVHJhbnNpdFN3aXRjaFwiPlxuICAgICAgICAgICAgPG5hcy1kcm9wZG93biAqbmdJZj1cImRpcmVjdE9ubHlMYWJlbCAmJiBkaXJlY3RUcmFuc2l0TGFiZWxcIlxuICAgICAgICAgICAgICAjdHJhbnNpdFN3aXRjaFxuICAgICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicsICd0cmFuc2l0LXR5cGUnKVwiXG4gICAgICAgICAgICAgIFtjc3NDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2Ryb3Bkb3duJylcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZ2V0VHJhbnNpdExhYmVsKClcIlxuICAgICAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgICAgICAob3BlbkNoYW5nZSk9XCJvblRyYW5zaXRTd2l0Y2hPcGVuKCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJ0cmFuc2l0S2V5RG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9ucycpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICN0cmFuc2l0VHlwZVRyYW5zaXRcbiAgICAgICAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2FjdGlvbicsICFkaXJlY3RPbmx5ICYmICdhY3RpdmUnKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UcmFuc2l0Q2hhbmdlKGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndHJhbnNpdC1pY29uJylcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndHJhbnNpdC1pY29uLXN0b3AnKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ3RpdGxlJywgJ3NtYWxsJylcIj57e2RpcmVjdFRyYW5zaXRMYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgZGlyZWN0T25seSAmJiAnYWN0aXZlJylcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAjdHJhbnNpdFR5cGVEaXJlY3RPbmx5XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UcmFuc2l0Q2hhbmdlKHRydWUpXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCd0cmFuc2l0LWljb24nKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ3RpdGxlJywgJ3NtYWxsJylcIj57e2RpcmVjdE9ubHlMYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmFzLWRyb3Bkb3duPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImV4aXN0cyhlbmFibGVEYXRlcGlja2VycylcIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXREYXRlUGlja2Vyc0NsYXNzKClcIj5cbiAgICAgICAgICA8bmFzLWRhdGVwaWNrZXItY29tYm8gI2RhdGVwaWNrZXJDb21ib1xuICAgICAgICAgICAgY29tcGFjdFxuICAgICAgICAgICAgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kXT1cIm5hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kXCJcbiAgICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kXT1cIm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmRcIlxuICAgICAgICAgICAgW2F2YWlsYWJpbGl0eV09XCJhdmFpbGFiaWxpdHlcIlxuICAgICAgICAgICAgW2F2YWlsYWJsZUZsaWdodHNMYWJlbF09XCJhdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICAgICAgW2RhdGVEaXNwbGF5Rm9ybWF0XT1cImRhdGVEaXNwbGF5Rm9ybWF0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlUGFzdFNlbGVjdGlvbl09XCJkaXNhYmxlUGFzdFNlbGVjdGlvblwiXG4gICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICBbbm9BdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwibm9BdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICAgICAgW2luYm91bmRBdmFpbGFibGVEYXRlc109XCJpbmJvdW5kQXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgICAgICAgW2luYm91bmRMYWJlbF09XCJpbmJvdW5kTGFiZWxcIlxuICAgICAgICAgICAgW25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cIm5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgICAgICAgIFtvdXRib3VuZEF2YWlsYWJsZURhdGVzXT1cIm91dGJvdW5kQXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgICAgICAgW291dGJvdW5kTGFiZWxdPVwib3V0Ym91bmRMYWJlbFwiXG4gICAgICAgICAgICBbdGltZURpc3BsYXlGb3JtYXRdPVwidGltZURpc3BsYXlGb3JtYXRcIlxuICAgICAgICAgICAgW3RpbWVzXT1cInRpbWVzXCJcbiAgICAgICAgICAgIFtvdXRib3VuZERpc2FibGVkXT1cIm91dGJvdW5kRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2luYm91bmREaXNhYmxlZF09XCJpbmJvdW5kRGlzYWJsZWRcIlxuICAgICAgICAgICAgW291dGJvdW5kT25seV09XCJ0cmlwVHlwZSA9PT0gMVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbFByZXZpb3VzTW9udGhdPVwiYXJpYUxhYmVsUHJldmlvdXNNb250aFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsTmV4dE1vbnRoXT1cImFyaWFMYWJlbE5leHRNb250aFwiXG4gICAgICAgICAgICAoZm9jdXNPbk5leHRDaGFuZ2UpPVwib25Gb2N1c09uTmV4dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1c09uUHJldmlvdXNDaGFuZ2UpPVwib25EYXRlcGlja2VyRm9jdXNPblByZXZpb3VzKCRldmVudClcIlxuICAgICAgICAgICAgKGluYm91bmRNb250aENoYW5nZSk9XCJvbkluYm91bmRNb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvdXRib3VuZE1vbnRoQ2hhbmdlKT1cIm9uT3V0Ym91bmRNb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFsob3V0Ym91bmRPcGVuKV09XCJvdXRib3VuZE9wZW5cIlxuICAgICAgICAgICAgWyhpbmJvdW5kT3BlbildPVwiaW5ib3VuZE9wZW5cIlxuICAgICAgICAgICAgWyhpbmJvdW5kU2VsZWN0ZWREYXRlKV09XCJpbmJvdW5kU2VsZWN0ZWREYXRlXCJcbiAgICAgICAgICAgIFsob3V0Ym91bmRTZWxlY3RlZERhdGUpXT1cIm91dGJvdW5kU2VsZWN0ZWREYXRlXCI+XG4gICAgICAgICAgPC9uYXMtZGF0ZXBpY2tlci1jb21ibz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzdWJzaWR5RGlzY291bnRzICYmIHN1YnNpZHlEaXNjb3VudHMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEZpbHRlckNsYXNzKCdzdWJzaWR5LWRpc2NvdW50JylcIj5cbiAgICAgICAgICA8bmFzLXN1YnNpZHktZGlzY291bnQgI3N1YnNpZHlEaXNjb3VudFxuICAgICAgICAgICAgW2Rpc2NvdW50c109XCJzdWJzaWR5RGlzY291bnRzXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZERpc2NvdW50XT1cInNlbGVjdGVkU3Vic2lkeURpc2NvdW50XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJzdWJzaWR5RGlzY291bnRMYWJlbFwiXG4gICAgICAgICAgICAoaW5mb0J1dHRvbkNsaWNrKT1cIm9uU3Vic2lkeURpc2NvdW50SW5mb0NsaWNrKClcIlxuICAgICAgICAgICAgKGRpc2NvdW50U2VsZWN0Q2hhbmdlKT1cIm9uU3Vic2lkeURpc2NvdW50U2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKGluZm9CdXR0b25LZXlkb3duKT1cIm9uU3Vic2lkeURpc2NvdW50SW5mb0J1dHRvbktleWRvd24oJGV2ZW50KVwiPjwvbmFzLXN1YnNpZHktZGlzY291bnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
1287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBRVYsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQnRFOzs7R0FHRztBQU1ILE1BQU0sT0FBTyxlQUFnQixTQUFRLGdCQUFnQjtJQXVCbkQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLEtBQWM7UUFDN0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFO1lBQ3BDLE9BQU87U0FDUjtRQUVELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXRCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7YUFDNUM7U0FDRjtRQUVELElBQUks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T0csT0FBTztzQkFBZixLQUFLO2dCQU9HLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFRRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBcUJGLG1CQUFtQjtzQkFEdEIsS0FBSztnQkFvQkcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQU9HLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFPRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBT0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQU9JLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFPRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBUUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxjQUFjO3NCQUF2QixNQUFNO2dCQU9HLHdCQUF3QjtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBOb3J3ZWdpYW4gQWlyIFNodXR0bGUuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJpcFR5cGUgfSBmcm9tICcuL2VudW1zL3RyaXAtdHlwZS5lbnVtJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL2FiYW5kb25lZC1iYXNrZXQtaXRlbS5tb2RlbCc7XG5pbXBvcnQgeyBDbGFzc01vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvY2xhc3MubW9kZWwnO1xuaW1wb3J0IHsgVXRjRGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3V0Yy1kYXRlLm1vZGVsJztcbmltcG9ydCB7IEFiYW5kb25lZEJhc2tldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2FiYW5kb25lZC1iYXNrZXQvYWJhbmRvbmVkLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RhdGUvZGF0ZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEZXZpY2VIZWxwZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2RldmljZS9kZXZpY2UtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3NvcnQvc29ydC5zZXJ2aWNlJztcbmltcG9ydCB7IEFpcnBvcnRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9haXJwb3J0LXNlbGVjdC9haXJwb3J0LXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWlycG9ydE1vZGVsIH0gZnJvbSAnLi4vYWlycG9ydC1zZWxlY3QvbW9kZWxzL2FpcnBvcnQubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlckNvbWJvQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZXBpY2tlci1jb21iby9kYXRlcGlja2VyLWNvbWJvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzZW5nZXJzTW9kZWwgfSBmcm9tICcuLi9wYXNzZW5nZXItc2VsZWN0L21vZGVscy9wYXNzZW5nZXJzLm1vZGVsJztcbmltcG9ydCB7IFN1YnNpZHlEaXNjb3VudE1vZGVsIH0gZnJvbSAnLi4vc3Vic2lkeS1kaXNjb3VudC9tb2RlbHMvc3Vic2lkeS1kaXNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBQYXNzZW5nZXJTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9wYXNzZW5nZXItc2VsZWN0L3Bhc3Nlbmdlci1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNpZHlEaXNjb3VudENvbXBvbmVudCB9IGZyb20gJy4uL3N1YnNpZHktZGlzY291bnQvc3Vic2lkeS1kaXNjb3VudC5jb21wb25lbnQnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogTm9yd2VnaWFuIEZpbHRlciBDb21wb25lbnQgfCBGdW5jdGlvbmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgTmFzQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIEBWaWV3Q2hpbGQoJ3Bhc3NlbmdlclNlbGVjdERyb3Bkb3duJykgcGFzc2VuZ2VyU2VsZWN0RHJvcGRvd246IERyb3Bkb3duQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdwYXNzZW5nZXJTZWxlY3QnKSBwYXNzZW5nZXJTZWxlY3Q6IFBhc3NlbmdlclNlbGVjdENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndHJpcFN3aXRjaCcpIHRyaXBTd2l0Y2g6IERyb3Bkb3duQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd0cmFuc2l0U3dpdGNoJykgdHJhbnNpdFN3aXRjaDogRHJvcGRvd25Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2FpcnBvcnRTZWxlY3QnKSBhaXJwb3J0U2VsZWN0OiBBaXJwb3J0U2VsZWN0Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyQ29tYm8nKSBkYXRlcGlja2VyQ29tYm86IERhdGVwaWNrZXJDb21ib0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZU9uZXdheScpIHRyaXBUeXBlT25ld2F5OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmlwVHlwZVJvdW5kVHJpcCcpIHRyaXBUeXBlUm91bmRUcmlwOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0cmFuc2l0VHlwZURpcmVjdE9ubHknKSB0cmFuc2l0VHlwZURpcmVjdE9ubHk6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zaXRUeXBlVHJhbnNpdCcpIHRyYW5zaXRUeXBlVHJhbnNpdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3Vic2lkeURpc2NvdW50Jykgc3Vic2lkeURpc2NvdW50OiBTdWJzaWR5RGlzY291bnRDb21wb25lbnQ7XG5cbiAgbGF0ZXN0U2VhcmNoZXNPcmlnaW46IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb246IEFycmF5PEFpcnBvcnRNb2RlbD47XG4gIGRpc3BsYXlTdW1tYXJ5ID0gdHJ1ZTtcbiAgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGluYm91bmRMb3dlckxpbWl0RGF0ZTogVXRjRGF0ZTtcbiAgY29udGFpbmVyV2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIG1heGltaXplID0gZmFsc2U7XG4gIGlzTmFzR3JvdXBWYWxpZCA9IGZhbHNlO1xuXG4gIGdldCBvdXRib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3V0Ym91bmRPcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG91dGJvdW5kT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLm91dGJvdW5kT3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3ducygpO1xuXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dGJvdW5kT3BlblZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vdXRib3VuZE9wZW5DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgaW5ib3VuZE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5ib3VuZE9wZW5WYWx1ZTtcbiAgfVxuICBzZXQgaW5ib3VuZE9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pbmJvdW5kT3BlblZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3ducygpO1xuXG4gICAgICBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbmJvdW5kT3BlblRpbWVvdXQpO1xuXG4gICAgdGhpcy5pbmJvdW5kT3BlblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5ib3VuZE9wZW5WYWx1ZSA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5pbmJvdW5kT3BlbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5ib3VuZE9wZW5UaW1lb3V0OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAcmVxdWlyZWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgcmVjb3JkIGNvbnRhaW5pbmcga2V5cyB3aXRoIGFsbCBhaXJwb3J0IGNvZGVzIHdpdGggY29ycmVzcG9uZGluZyBhcnJheSBvZiBhaXJwb3J0IGNvZGVzIGNvbm5lY3RlZCB0byB0aGUga2V5LlxuICAgKi9cbiAgQElucHV0KCkgYWlycG9ydFJlbGF0aW9uczogUmVjb3JkPHN0cmluZywgQXJyYXk8c3RyaW5nPj47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyAnYXJpYS1sYWJlbCcgb24gdGhlIGNsZWFyIGJ1dHRvbiBpbnNpZGUgdGhlIGFpcnBvcnQgc2VsZWN0IGlucHV0cy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbENsZWFyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIHN1YnRyYWN0IGJ1dHRvbnMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxTdWJ0cmFjdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgJ2FyaWEtbGFiZWwnIHRvIHRoZSBiYWNrZHJvcHMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxCYWNrZHJvcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFSSUEgbGFiZWwgZm9yIHRoZSBhZGQgYnV0dG9ucy5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbEFkZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGlzdCBvZiBhaXJwb3J0cyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yaWdpbiBkcm9wZG93bi5cbiAgICogSWYgbm90IGluY2x1ZGVkLCBhbGwgYWlycG9ydHMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd2VkT3JpZ2luQWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgb2YgYWlycG9ydHMgdGhhdCBhcmUgcmVzdHJpY3RlZCBmb3IgZGVzdGluYXRpb24gYWlycG9ydHMuIEl0IHdpbGwgZGVmYXVsdCB0byBhaXJwb3J0cyBpZiBub3Qgc2V0LlxuICAgKi9cbiAgQElucHV0KCkgYWxsb3dlZERlc3RpbmF0aW9uQWlycG9ydHM6IEFycmF5PEFpcnBvcnRNb2RlbD47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBib29sZWFuIGluZGljYXRpbmcgaWYgYWlycG9ydHMgdGhhdCB0aGUgdXNlciBhbGxyZWFkeSBoYXMgc2VhcmggZm9yIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5TGF0ZXN0U2VhcmNoZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzcGxheSBzd2l0Y2ggVUkgdG8gaW50ZXJjaGFuZ2Ugb3JpZ2luIGFuZCBkZXN0aW5hdGlvbiBhaXJwb3J0LlxuICAgKi9cbiAgQElucHV0KCkgdXNlU3dpdGNoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhaXJwb3J0cyB0aGF0IGFyZSBjbG9zZSB0byB0aGUgdXNlciBzaG91bGQgYmUgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlzcGxheUNsb3Nlc3RBaXJwb3J0czogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgYWlycG9ydCBjb2RlIG9mIHRoZSBvcmlnaW4gYWlycG9ydC4gSXQgd2lsbCBzZXQgdGhlIHNlbGVjdGVkIG9yaWdpbiBhaXJwb3J0IGJhc2VkIG9uIHRoaXMgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKSBvcmlnaW5BaXJwb3J0Q29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBhaXJwb3J0IGNvZGUgb2YgdGhlIGRlc3RpbmF0aW9uIGFpcnBvcnQuIEl0IHdpbGwgc2V0IHRoZSBzZWxlY3RlZCBkZXN0aW5hdGlvbiBhaXJwb3J0IGJhc2VkIG9uIHRoaXMgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKSBkZXN0aW5hdGlvbkFpcnBvcnRDb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSB0b3RhbCBtYXhpbXVtIGFtb3VudCBvZiBwYXNzZW5nZXJzIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgbWF4UGF4Q291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBhcnJheSBvZiBkaWZmZXJlbnQgcGFzc2VuZ2VyIHR5cGVzIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgcGFzc2VuZ2VycygpOiBBcnJheTxQYXNzZW5nZXJzTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5wYXNzZW5nZXJzVmFsdWU7XG4gIH1cbiAgc2V0IHBhc3NlbmdlcnModmFsdWU6IEFycmF5PFBhc3NlbmdlcnNNb2RlbD4pIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYXNzZW5nZXJzVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnBhc3NlbmdlcnNDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgbWluaW11bSBhbW91bnQgb2YgYWR1bHRzIHRoYXQgY2FuIGJlIHNlbGVjdGVkIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgbWluQWR1bHRDb3VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIHJvdW5kIHRyaXAgc2VsZWN0aW9uIGluIHRoZSB0cmlwIHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHRyaXBTd2l0Y2hSb3VuZFRyaXBMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIG9uZSB3YXkgc2VsZWN0aW9uIGluIHRoZSB0cmlwIHN3aXRjaCBkcm9wZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIHRyaXBTd2l0Y2hPbmVXYXlMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgZm9yIGRpcmVjdCBvbmx5IHNlbGVjdGlvbiBpbiB0aGUgdHJhbnNpdCBzd2l0Y2ggZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBkaXJlY3RPbmx5TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciBib3RoIGRpcmVjdCBhbmQgdHJhbnNpdCBzZWxlY3Rpb24gaW4gdGhlIHRyYW5zaXQgc3dpdGNoIGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0VHJhbnNpdExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhdGVzIGlmIHRoZSBmaWx0ZXIgc2hvdWxkIGJlIG1pbmltaXplZCBvbiBtb2JpbGUgc2NyZWVuIHNpemVzLlxuICAgKi9cbiAgQElucHV0KCkgbWluaW1pemVPbk1vYmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICogQHByb3BlcnR5IElucHV0XG4gICogQGRlc2NyaXB0aW9uXG4gICogSW5kaWNhdGVzIGlmIHRoZSBlZGl0IHNlYXJjaCBvZiBhY2NvcmRpb24gc2hvdWxkIGJlIGV4cGVuZGVkIG9uIG1vYmlsZSBzY3JlZW4gc2l6ZXMuXG4gICovXG4gIEBJbnB1dCgpXG4gIGdldCBleHBhbmRlZEFjY29yZGlvbk1vYmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZEFjY29yZGlvbk1vYmlsZVZhbHVlO1xuICB9XG4gIHNldCBleHBhbmRlZEFjY29yZGlvbk1vYmlsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5leHBhbmRlZEFjY29yZGlvbk1vYmlsZVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5leHBhbmRlZEFjY29yZGlvbk1vYmlsZVZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHNlcGFyYXRvciBmb3IgdGhlIGZpbHRlciBzdW1tYXJ5IHRoYXQgaXMgZGlzcGF5ZWQgaWYgbWluaW1pemVPbk1vYmlsZSBpcyB0cnVlLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKiAxIHRyYXZlbGxlciwgcm91bmQgdHJpcCBhbmQgZGlyZWN0L3RyYW5zaXRcbiAgICovXG4gIEBJbnB1dCgpIGRlZmF1bHRTdW1tYXJ5U2VwYXJhdG9yID0gJyc7XG5cbiAgLyoqXG4gICAqIEEgc2VwYXJhdG9yIGZvciB0aGUgZmlsdGVyIHN1bW1hcnkgaXMgYXJlIGRpc3BheWVkIGlmIG1pbmltaXplT25Nb2JpbGUgaXMgdHJ1ZS5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICogMSB0cmF2ZWxsZXIsIHJvdW5kIHRyaXAgYW5kIGRpcmVjdC90cmFuc2l0XG4gICAqL1xuICBASW5wdXQoKSBsYXN0U3VtbWFyeVNlcGFyYXRvciA9ICcnO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgdGl0bGUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0VGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciB0aGUgYWR1bHRzIHBhc3NlbmdlciB0eXBlIGluIHRoZSBwYXNzZW5nZXIgc2VsZWN0IGRyb3Bkb3duLlxuICAgKi9cbiAgQElucHV0KCkgcGFzc2VuZ2VyU2VsZWN0QWR1bHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIGZvciB0aGUgY2hpbGRyZW4gcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RDaGlsZHJlbkxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCBmb3IgdGhlIGluZmFudHMgcGFzc2VuZ2VyIHR5cGUgaW4gdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24uXG4gICAqL1xuICBASW5wdXQoKSBwYXNzZW5nZXJTZWxlY3RJbmZhbnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgd2hlbiB0b3RhbCBudW1iZXIgb2Ygc2VsZWN0ZWQgcGFzc2VuZ2VycyBleGNlZWRzIHRoZSBncm91cCBib29raW5nIGxpbWl0XG4gICAqL1xuICBASW5wdXQoKSBncm91cEJvb2tpbmdMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBvbiB0b3Agb2YgYWxsIGFpcnBvcnRzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBhbGxBaXJwb3J0c0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgbGF0ZXN0IHNlYXJjaGVzIGluIHRoZSBhaXJwb3J0IHNlbGVjdCBkcm9wIGRvd24gbGlzdHMuXG4gICAqL1xuICBASW5wdXQoKSBsYXRlc3RTZWFyY2hlc0xhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgY2xvc2VzdCBhaXJwb3J0cyBpbiB0aGUgYWlycG9ydCBzZWxlY3QgZHJvcCBkb3duIGxpc3RzLlxuICAgKi9cbiAgQElucHV0KCkgY2xvc2VzdEFpcnBvcnRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGluIHRoZSBhaXJwb3J0IHNlbGVjdCwgaWYgdGhlXG4gICAqIHVzZXIgdHJpZXMgdG8gc2VsZWN0IGEgZGVzdGluYXRpb24gYWlycG9ydCB3aXRob3V0IHNlbGVjdGluZyBhbiBvcmlnaW4gYWlycG9ydC5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdE9yaWdpbkZpcnN0TGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIG9uIHRvcCBvZiB0aGUgb3JpZ2luIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbE9yaWdpbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgcGxhY2Vob2xkZXIgdGhhdCB3aWxsIGFwcGVhciBvbiB0aGUgb3JpZ2luIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlck9yaWdpbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQHJlcXVpcmVkXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgb24gdG9wIG9mIHRoZSBkZXN0aW5hdGlvbiBhaXJwb3J0IGlucHV0IGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgbGFiZWxEZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgbGFiZWwgdGhhdCB3aWxsIGFwcGVhciBpbiBteSBsb2NhdGlvbiBpbiB0aGUgZHJvcCBkb3duIGxpc3QgaW4gYWlycG9ydCBzZWxlY3QuXG4gICAqL1xuICBASW5wdXQoKSBnZW9sb2NhdGlvbkxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsYWJlbCB0aGF0IHdpbGwgYXBwZWFyIGluIG15IGxvY2F0aW9uLCBpbiB0aGUgZHJvcCBkb3duIGxpc3QgaW4gYWlycG9ydCBzZWxlY3QgaWYgdXNlciBoYXMgZGVuaWVkIGdlb2xvY2F0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgZ2VvbG9jYXRpb25CbG9ja2VkTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBhcHBlYXIgb24gdGhlIGRlc3RpbmF0aW9uIGFpcnBvcnQgaW5wdXQgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlckRlc3RpbmF0aW9uID0gJyc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0aGF0IHdpbGwgYWxsb3cgYWx3YXlzIGtlZXBpbmcgdGhlIHNlbGVjdGVkIGFpcnBvcnQuXG4gICAqIFRoZSBsYXN0IHNlbGVjdGVkIGFpcnBvcnQgd2lsbCBiZSBzaG93biBvbmNlIHVzZXIgY2xlYXJzIHRoZSBzZWxlY3Rpb24gYW5kIGJsdXIuXG4gICAqL1xuICBASW5wdXQoKSBrZWVwU2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEEgdGl0bGUgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIGVkaXQgc2VhcmNoIGFjY29yZGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIGVkaXRTZWFyY2hUaXRsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFkZHMgdGhlIHBhcmVudCdzIGZvcm0gZ3JvdXAuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IGlzIHJlcXVpZXJlZCB0byBiZSBmaWxsZWQgaWYgbmFzRm9ybUNvbnRyb2xOYW1lIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhIGZvcm1Db250cm9sTmFtZSBkaXJlY3RpdmUgdG8gdGhlIGlucHV0LlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCByZXF1aWVycyB0aGF0IHRoZSBuYXNGb3JtR3JvdXAgaW5wdXQgaXMgZmlsbGVkLlxuICAgKi9cbiAgQElucHV0KCkgbmFzRm9ybUNvbnRyb2xOYW1lRGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHk6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbE5hbWVPdXRib3VuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZUluYm91bmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIGEgZm9ybUNvbnRyb2xOYW1lIGRpcmVjdGl2ZSB0byB0aGUgaW5wdXQuXG4gICAqIEl0IHJlcXVpcmVzIHRoYXQgdGhlIGNvbnN1bWVyIGluY2x1ZGVkIFJlYWN0aXZlRm9ybXNNb2R1bGUgaW4gaXQncyBtb2R1bGUuXG4gICAqIEl0IHJlcXVpZXJzIHRoYXQgdGhlIG5hc0Zvcm1Hcm91cCBpbnB1dCBpcyBmaWxsZWQuXG4gICAqL1xuICBASW5wdXQoKSBuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZVN1YnNpZHlEaXNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE1ha2UgbGF0ZXN0IHNlYXJjaGVzIGFuZCBnZW9sb2NhdGlvbiBvdmVycmlkZSBkZWZhdWx0IHZhbHVlIGluIHRoZSBvcmlnaW4gYWlycG9ydCBzZWxlY3Rvci5cbiAgICovXG4gIEBJbnB1dCgpIG92ZXJyaWRlT3JpZ2luPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGlzIHdpbGwgbWFrZSB0aGUgZmlsdGVyIGRpc3BsYXkgc3VnZ2VzdGVkIGFpcnBvcnRzIGJhc2VkIG9uIGdlb2xvY2F0aW9uIGFuZCBsYXRlc3Qgc2VhcmNoZXMuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVTdWdnZXN0aW9ucz86IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgZ2V0IGNsb3Nlc3RBaXJwb3J0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0QWlycG9ydHNWYWx1ZTtcbiAgfVxuICBzZXQgY2xvc2VzdEFpcnBvcnRzKGFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+KSB7XG4gICAgaWYgKCFhaXJwb3J0cyB8fCBhaXJwb3J0cy5sZW5ndGggPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZXN0QWlycG9ydHNWYWx1ZSA9IGFpcnBvcnRzO1xuXG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMub3ZlcnJpZGVPcmlnaW4pKSB7XG4gICAgICB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlID0gYWlycG9ydHNbMF0uY29kZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGlzIHdpbGwgb25seSBkaXNwbGF5IGFpcnBvcnQgc2VsZWN0aW9uLiBXaGVuIGEgY2l0eSBwYWlyIGlzIHNlbGVjdGVkLCB0aGUgcmVzdCBvZiB0aGUgZmlsdGVyIHdpbGwgYmUgdmlzaWJsZS5cbiAgICovXG4gIEBJbnB1dCgpIG1pbmltaXplPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWxsIGFpcnBvcnRzIHRoYXQgd2lsbCBiZSBwb3B1bGF0ZWQgaW50byB0aGUgZHJvcGRvd24gbGlzdHMuXG4gICAqIElmIGRpc3BsYXlMYXRlc3RTZWFyY2hlcyBpcyB0cnVlLCBpdCB3aWxsIHRyeSB0byBnZXQgdGhlIGxhdGVzdCBzZWFyY2hlcyBmcm9tIHRoZSBhYmFuZG9uZWQgYmFza2V0LlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGFpcnBvcnRzKCkge1xuICAgIHJldHVybiB0aGlzLmFpcnBvcnRzVmFsdWU7XG4gIH1cbiAgc2V0IGFpcnBvcnRzKGFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+KSB7XG4gICAgdGhpcy5haXJwb3J0c1ZhbHVlID0gYWlycG9ydHM7XG5cbiAgICBpZiAodGhpcy5leGlzdHModGhpcy5kaXNwbGF5TGF0ZXN0U2VhcmNoZXMpKSB7XG4gICAgICBjb25zdCBhYmFuZG9uZWRCYXNrZXQgPSB0aGlzLmFiYW5kb25lZEJhc2tldFNlcnZpY2UuZ2V0QWxsKCk7XG4gICAgICB0aGlzLnNldExhdGVzdFNlYXJjaGVzKGFiYW5kb25lZEJhc2tldCwgdGhpcy5haXJwb3J0cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB0aGUgc2VsZWN0ZWQgdHJpcCB0eXBlLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHRyaXBUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnRyaXBUeXBlVmFsdWU7XG4gIH1cbiAgc2V0IHRyaXBUeXBlKHRyaXBUeXBlOiBUcmlwVHlwZSkge1xuICAgIGlmICh0cmlwVHlwZSA9PT0gdGhpcy50cmlwVHlwZVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmlwVHlwZVZhbHVlID0gdHJpcFR5cGU7XG4gICAgdGhpcy50cmlwVHlwZUNoYW5nZS5lbWl0KHRoaXMudHJpcFR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB3aGV0aGVyIHRoZSBzZWxlY3RlZCB0cmFuc2l0IHR5cGUgaXMgZGlyZWN0IG9ubHkgb3Igbm90LlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpcmVjdE9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0T25seVZhbHVlO1xuICB9XG4gIHNldCBkaXJlY3RPbmx5KGRpcmVjdE9ubHk6IGJvb2xlYW4pIHtcbiAgICBpZiAoZGlyZWN0T25seSA9PT0gdGhpcy5kaXJlY3RPbmx5VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpcmVjdE9ubHlWYWx1ZSA9IGRpcmVjdE9ubHk7XG4gICAgdGhpcy5kaXJlY3RPbmx5Q2hhbmdlLmVtaXQodGhpcy5kaXJlY3RPbmx5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFRoZSBsaW1pdCBmb3Igd2hlbiB0aGUgdG90YWwgYW1vdW50IG9mIHBhc3NlbmdlcnMgZXhjZWVkcyB0byBiZSBhIGdyb3VwIGJvb2tpbmcuXG4gICAqL1xuICBASW5wdXQoKSBncm91cEJvb2tpbmdMaW1pdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFN1YnNpZHkgZGlzY291bnRzXG4gICAqL1xuICBASW5wdXQoKSBzdWJzaWR5RGlzY291bnRzOiBBcnJheTxTdWJzaWR5RGlzY291bnRNb2RlbD47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2VsZWN0ZWQgc3Vic2lkeSBkaXNjb3VudFxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWRTdWJzaWR5RGlzY291bnQ6IFN1YnNpZHlEaXNjb3VudE1vZGVsO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFN1YnNpZHkgZGlzY291bnQgbGFiZWxcbiAgICovXG4gIEBJbnB1dCgpIHN1YnNpZHlEaXNjb3VudExhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIHByZXZpb3VzIG1vbnRoIGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWxQcmV2aW91c01vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQVJJQSBsYWJlbCBmb3IgdGhlIG5leHQgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbE5leHRNb250aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIG9yaWdpbiBkcm9wZG93biBzZWxlY3RvciBvcGVucyBvciBjbG9zZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgb3JpZ2luT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICogQGRlc2NyaXB0aW9uXG4gICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBvcmlnaW4gZHJvcGRvd24gc2VsZWN0b3Igb3BlbnMgb3IgY2xvc2VzLlxuICAqL1xuICBAT3V0cHV0KCkgZGVzdGluYXRpb25PcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgdGhlIHBhc3NlbmdlciBzZWxlY3QgZHJvcGRvd24gb3BlbnMgb3IgY2xvc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIHBhc3NlbmdlclNlbGVjdE9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGV2ZW50IHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgb3JpZ2luIGFpcnBvcnQgY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBvcmlnaW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFpcnBvcnRNb2RlbD4oKTtcblxuICAvKipcbiAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICogQGRlc2NyaXB0aW9uXG4gICogQW4gZXZlbnQgdGhhdCBpcyBmaXJlZCBldmVyeSB0aW1lIHRoZSBzZWxlY3RlZCBkZXN0aW5hdGlvbiBhaXJwb3J0IGNoYW5nZXMuXG4gICovXG4gIEBPdXRwdXQoKSBkZXN0aW5hdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWlycG9ydE1vZGVsPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVudCB0aGF0IGlzIGZpcmVkIGV2ZXJ5IHRpbWUgYSBwYXNzZW5nZXIgc2VsZWN0aW9uIGNoYW5nZSBpcyBwZXJmb3JtZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgcGFzc2VuZ2Vyc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8UGFzc2VuZ2Vyc01vZGVsPj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB0aGUgc2VsZWN0ZWQgdHJpcCB0eXBlLlxuICAgKi9cbiAgQE91dHB1dCgpIHRyaXBUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmlwVHlwZT4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0cyBhbmQgZ2V0cyB3aGV0aGVyIHRoZSBzZWxlY3RlZCB0cmFuc2l0IHR5cGUgaXMgZGlyZWN0IG9ubHkgb3Igbm90LlxuICAgKi9cbiAgQE91dHB1dCgpIGRpcmVjdE9ubHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIG5vIGF2YWlsYWJsZSBmbGlnaHRzLlxuICAgKi9cbiAgQElucHV0KCkgbm9BdmFpbGFibGVGbGlnaHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3IgYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFibGVGbGlnaHRzTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNhYmxlIHBvc3NpYmlsaXR5IHRvIHNlbGVjdCBkYXRlcyBpbiB0aGUgcGFzdC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVQYXN0U2VsZWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBvdXRib3VuZCBkYXRlcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgb3V0Ym91bmRMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBpbmJvdW5kIGRhdGVwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBpbmJvdW5kTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBkYXRlcGlja2VycyBpbiBhdmFpbGFiaWxpdHkgbW9kZSB3aGVyZSBhdmFpbGFibGUgZGF0ZXMgY2FuIGJlIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmlsaXR5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEF2YWlsYWJsZSBkYXRlcyBmb3Igb3V0Ym91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBvdXRib3VuZEF2YWlsYWJsZURhdGVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBdmFpbGFibGUgZGF0ZXMgZm9yIGluYm91bmQgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBpbmJvdW5kQXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIElmIHNldCwgRW5hYmxlcyB0aGUgdGltZSBkcm9wZG93biBzZWxlY3RvciBhbG9uZ3NpZGUgZGF0ZXBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIHRpbWVzOiBBcnJheTxVdGNEYXRlPjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgZGlzcGxheSBmb3JtYXQgb2YgdGhlIGRhdGUgd2hlbiB1c2VyIGhhcyBzZWxlY3RlZCB0aGUgZGF0ZSBhbmQgaXQgaXMgYmVpbmcgc2hvd24gaW4gdGhlIGlucHV0IGJveCBmb3IgdGhlIGRhdGUgcGlja2VyLlxuICAgKiBQbGVhc2UgbG9vayBhdCB0aGUgYW5ndWxhciBEYXRlIHBpcGUgZm9yIHZhbGlkIGZvcm1hdHMgYW5kIHZhcmlhdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKSBkYXRlRGlzcGxheUZvcm1hdCA9ICdFRUVFIGQsIE1NTU0geXl5eSc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIHRpbWUgZGlzcGxheSBmb3JtYXQuXG4gICAqL1xuICBASW5wdXQoKSB0aW1lRGlzcGxheUZvcm1hdCA9ICdISDptbSc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsb2NhbGUgY29kZSBmb3IgdGhlIGxvY2FsZSBmb3JtYXQgcnVsZXMgdG8gdXNlLiBXaGVuIG5vdCBzdXBwbGllZCwgdXNlcyB0aGUgdmFsdWUgb2YgTE9DQUxFX0lELCB3aGljaCBpcyBlbi1VUyBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHJlcXVpcmVzIHRoYXQgcmVnaXN0ZXJMb2NhbGVEYXRhIGlzIGNhbGxlZCB3aXRoIHRoZSByZXNwZWN0aXZlIGxvY2FsZS5cbiAgICovXG4gIEBJbnB1dCgpIGxvY2FsZSA9ICdlbi1HQic7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0byByZW1vdmUgdGhlIHBhZGRpbmcgYW5kIG1hcmdpbnMgYXJvdW5kIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgY29tcGFjdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEaXNhYmxlIHBvc3NpYmlsaXR5IHRvIHNlbGVjdCBvdXRib3VuZCBkYXRlcy5cbiAgICovXG4gIEBJbnB1dCgpIG91dGJvdW5kRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGlzYWJsZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgaW5ib3VuZCBkYXRlcy5cbiAgICovXG4gIEBJbnB1dCgpIGluYm91bmREaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTaG93L0FkZCBkYXRlIHBpY2tlciBjb21ibyBpbnRvIHRoZSBmaWx0ZXIgaWYgc2V0IHRvIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVEYXRlcGlja2VyczogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIHRoZSB0b2dnbGUgaWNvbiBmb3IgbWluaW1pemluZyBmaWx0ZXIuXG4gICAqL1xuICBASW5wdXQoKSBtaW5pbWl6aW5nTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIHRoZSB0b2dnbGUgaWNvbiBmb3IgbWF4aW1pemluZyBmaWx0ZXIuXG4gICAqL1xuICBASW5wdXQoKSBtYXhpbWl6aW5nTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEByZXF1aXJlZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yIHRoZSB0b2dnbGluZyB0cmFuc2l0IHR5cGUgd2hlbiBmaWx0ZXIgaXMgbWluaW1pemVkLlxuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0T25seU1vYmlsZUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTGFiZWwgZm9yICdvcicgaW4gdGhlIHN1Z2dlc3Rpb25lZCBhaXJwb3J0cy5cbiAgICovXG4gIEBJbnB1dCgpIG9yTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIHRleHQgdGhhdCBhcHBlYXJzIGluIHRoZSBkZXN0aW5hdGlvbnMgZHJvcGRvd24gbGlzdCB3aGVuIG9yaWdpbiBhaXJwb3J0IGlzIG5vdCBzZXQuXG4gICAqL1xuICBASW5wdXQoKSBpbnZhbGlkRGVzdGluYXRpb25UZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2VsZWN0ZWQgZGF0ZWZvciBvdXRib3VuZCBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBvdXRib3VuZFNlbGVjdGVkRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vdXRib3VuZFNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBvdXRib3VuZFNlbGVjdGVkRGF0ZShkYXRlOiBVdGNEYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWUgPSBkYXRlO1xuICAgICAgdGhpcy5vdXRib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2VsZWN0ZWQgZGF0ZWZvciBpbmJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGluYm91bmRTZWxlY3RlZERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5ib3VuZFNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBpbmJvdW5kU2VsZWN0ZWREYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5ib3VuZFNlbGVjdGVkRGF0ZVZhbHVlID0gZGF0ZTtcbiAgICAgIHRoaXMuaW5ib3VuZFNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2lsbCBkaXNwbGF5IHRoZSBkZXN0aW5hdGlvbiBpbnB1dCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZURlc3RpbmF0aW9uU2VsZWN0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgcGFzc2VuZ2VyIHNlbGVjdCwgc2V0IHRoaXMgdG8gZmFsc2UgdG8gcmVtb3ZlIGl0LiBJdCdzIHRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZVBhc3NlbmdlcnNTZWxlY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdpbGwgZGlzcGxheSB0aGUgdHJpcCBzd2l0Y2gsIHNldCB0aGlzIHRvIGZhbHNlIHRvIHJlbW92ZSBpdC4gSXQncyB0cnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVUcmlwU3dpdGNoID0gdHJ1ZTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaWxsIGRpc3BsYXkgdGhlIHRyYW5zaXQgc3dpdGNoLCBzZXQgdGhpcyB0byBmYWxzZSB0byByZW1vdmUgaXQuIEl0J3MgdHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlVHJhbnNpdFN3aXRjaCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gc2VsZWN0ZWQgZGF0ZWhhcyBiZWVuIGNoYW5nZWQgb24gdGhlIG91dGJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQE91dHB1dCgpIG91dGJvdW5kU2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIHNlbGVjdGVkIGRhdGVoYXMgYmVlbiBjaGFuZ2VkIG9uIHRoZSBpbmJvdW5kIGNhbGVuZGFyLlxuICAgKi9cbiAgQE91dHB1dCgpIGluYm91bmRTZWxlY3RlZERhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV0Y0RhdGU+KCk7XG5cblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgZGF0ZXBpY2tlciBpcyBvcGVuIG9yIGNsb3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluYm91bmQgZGF0ZXBpY2tlciBpcyBvcGVuIG9yIGNsb3NlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBpbmJvdW5kT3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogT3V0Ym91bmQgY2FsZW5kYXIgY2hhbmdlcyBtb250aC5cbiAgICovXG4gIEBPdXRwdXQoKSBvdXRib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmJvdW5kIGNhbGVuZGFyIGNoYW5nZXMgbW9udGguXG4gICAqL1xuICBAT3V0cHV0KCkgaW5ib3VuZE1vbnRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXaGVuIGEgdXNlciBoYXMgYWN0aXZlbHkgY2hhbmdlZCB0aGUgZGF0ZS5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2N1c09uTmV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGdlb2xvY2F0aW9uIG9mIHRoZSB1c2VyLiBXaWxsIGJlIGVtaXR0ZWQgaWYgJ2VuYWJsZVN1Z2dlc3Rpb25zJyBpcyB0cnVlLlxuICAgKi9cbiAgQE91dHB1dCgpIHBvc2l0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9sb2NhdGlvblBvc2l0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBbiBldmVuIHRoYXQgaXMgZmlyZWQgZXZlcnkgdGltZSB0aGUgaW5mbyBidXR0b24gb24gdGhlIHN1YnNpZHkgZGlzY291bnQgaXMgY2xpY2tlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBzdWJzaWR5RGlzY291bnRJbmZvQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgZ2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLmluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU7XG4gIH1cbiAgc2V0IGluYm91bmRTZWxlY3RlZE1vbnRoKG1vbnRoOiBVdGNEYXRlKSB7XG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgobW9udGgsIHRoaXMuaW5ib3VuZFNlbGVjdGVkTW9udGhWYWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICAgICAgdGhpcy5pbmJvdW5kU2VsZWN0ZWRNb250aFZhbHVlID0gbW9udGg7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG91dGJvdW5kU2VsZWN0ZWREYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgaW5ib3VuZFNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGluYm91bmRTZWxlY3RlZE1vbnRoVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgYWlycG9ydHNWYWx1ZTogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgcHJpdmF0ZSB0cmlwVHlwZVZhbHVlOiBUcmlwVHlwZTtcbiAgcHJpdmF0ZSBkaXJlY3RPbmx5VmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjbG9zZXN0QWlycG9ydHNWYWx1ZTogQXJyYXk8QWlycG9ydE1vZGVsPjtcbiAgcHJpdmF0ZSBvdXRib3VuZE9wZW5WYWx1ZSA9IGZhbHNlO1xuICBwcml2YXRlIGluYm91bmRPcGVuVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBwYXNzZW5nZXJzVmFsdWUgPSBuZXcgQXJyYXk8UGFzc2VuZ2Vyc01vZGVsPigpO1xuICBwcml2YXRlIGZvY3VzQXN5bmNUaW1vdXQ6IGFueTtcbiAgcHJpdmF0ZSB0cmFuc2l0U3dpdGNoRm9jdXNUaW1lb3V0OiBhbnk7XG4gIHByaXZhdGUgdHJpcFN3aXRjaEZvY3VzVGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkZXZpY2VIZWxwZXI6IERldmljZUhlbHBlcixcbiAgICBwcml2YXRlIHNvcnRTZXJ2aWNlOiBTb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGFiYW5kb25lZEJhc2tldFNlcnZpY2U6IEFiYW5kb25lZEJhc2tldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlU2VydmljZTogRGF0ZUhlbHBlcixcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCduYXMtZmlsdGVyJyk7XG4gICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubmFzRm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNOYXNHcm91cFZhbGlkID0gKC90cnVlL2kpLnRlc3QoeCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZURpcmVjdE9ubHkpIHtcbiAgICAgIGNvbnN0IGRpcmVjdE9ubHlDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seSk7XG5cbiAgICAgIGlmIChkaXJlY3RPbmx5Q29udHJvbCkge1xuICAgICAgICB0aGlzLmRpcmVjdE9ubHkgPSBkaXJlY3RPbmx5Q29udHJvbC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgY29uc3QgdHJpcFR5cGVDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lVHJpcFR5cGUpO1xuXG4gICAgICBpZiAodHJpcFR5cGVDb250cm9sKSB7XG4gICAgICAgIHRoaXMudHJpcFR5cGUgPSB0cmlwVHlwZUNvbnRyb2wudmFsdWU7XG4gICAgICAgIHRoaXMuaW5ib3VuZERpc2FibGVkID0gdHJpcFR5cGVDb250cm9sLnZhbHVlID09PSBUcmlwVHlwZS5vbmVXYXk7XG5cbiAgICAgICAgaWYgKHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZCkge1xuICAgICAgICAgIGNvbnN0IGluYm91bmRDb250cm9sID0gdGhpcy5uYXNGb3JtR3JvdXAuZ2V0KHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lSW5ib3VuZCk7XG5cbiAgICAgICAgICBpZiAoaW5ib3VuZENvbnRyb2wgJiYgdGhpcy5pbmJvdW5kRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGluYm91bmRDb250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cmlwVHlwZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWU6IFRyaXBUeXBlKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbmJvdW5kRGlzYWJsZWQgPSB2YWx1ZSA9PT0gVHJpcFR5cGUub25lV2F5O1xuICAgICAgICAgIHRoaXMudHJpcFR5cGUgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lRGlyZWN0T25seSkge1xuICAgICAgY29uc3QgZGlyZWN0T25seUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KTtcbiAgICAgIGlmIChkaXJlY3RPbmx5Q29udHJvbCkge1xuICAgICAgICBkaXJlY3RPbmx5Q29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHRoaXMuZGlyZWN0T25seSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG5cbiAgICB0aGlzLmNvbnRhaW5lcldpZHRoLm5leHQoKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLm9mZnNldFdpZHRoKTtcblxuICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGgubmV4dCgodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkub2Zmc2V0V2lkdGgpO1xuICAgIH07XG4gIH1cblxuICBvblN1YnNpZHlEaXNjb3VudEluZm9DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNpZHlEaXNjb3VudEluZm9DbGljay5lbWl0KCk7XG4gIH1cblxuICBvblN1YnNpZHlEaXNjb3VudFNlbGVjdENoYW5nZShtb2RlbDogU3Vic2lkeURpc2NvdW50TW9kZWwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubmFzRm9ybUdyb3VwIHx8ICF0aGlzLm5hc0Zvcm1Db250cm9sTmFtZVN1YnNpZHlEaXNjb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNpZHlEaXNjb3VudENvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVTdWJzaWR5RGlzY291bnQpO1xuICAgIHN1YnNpZHlEaXNjb3VudENvbnRyb2wucGF0Y2hWYWx1ZShtb2RlbCk7XG4gIH1cblxuICBnZXRDbG9zZXN0QWlycG9ydHMocG9zaXRpb246IEdlb2xvY2F0aW9uUG9zaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlLmVtaXQocG9zaXRpb24pO1xuICB9XG5cbiAgZ2V0RmlsdGVyQ2xhc3MoZWxlbWVudD86IHN0cmluZywgbW9kaWZpZXJzSW5wdXQ/OiBhbnkpOiBDbGFzc01vZGVsIHtcbiAgICBsZXQgbW9kaWZpZXJzID0gbW9kaWZpZXJzSW5wdXQgfHwgbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGlmICh0eXBlb2YgbW9kaWZpZXJzSW5wdXQgPT09ICdzdHJpbmcnIHx8IG1vZGlmaWVyc0lucHV0IGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBtb2RpZmllcnMgPSBbbW9kaWZpZXJzSW5wdXRdO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRocyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSkge1xuICAgICAgd2lkdGhzLnB1c2goJ21kJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhEZXNrdG9wKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkpIHtcbiAgICAgIHdpZHRocy5wdXNoKCdsZycpO1xuICAgIH1cblxuICAgIG1vZGlmaWVycyA9IFsuLi5tb2RpZmllcnMsIC4uLndpZHRoc107XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDbGFzcyhlbGVtZW50LCBtb2RpZmllcnMpO1xuICB9XG5cbiAgZ2V0QWlycG9ydFNlbGVjdENsYXNzKCk6IENsYXNzTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldENsYXNzKFxuICAgICAgJ2FpcnBvcnQtc2VsZWN0JyxcbiAgICAgIFtcbiAgICAgICAgdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aERlc2t0b3AodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKSAmJiAnbGcnLFxuICAgICAgICB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoVGFibGV0KHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSkgJiYgJ21kJyxcbiAgICAgICAgdGhpcy5leGlzdHModGhpcy5lbmFibGVEYXRlcGlja2VycykgJiYgJ25vLWJvcmRlcidcbiAgICAgIF0pO1xuICB9XG5cbiAgZ2V0U3VnZ2VzdGlvbnMoKTogQXJyYXk8QWlycG9ydE1vZGVsPiB7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBBcnJheS5mcm9tKG5ldyBTZXQoW1xuICAgICAgLi4udGhpcy5sYXRlc3RTZWFyY2hlc09yaWdpbiA/IHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4uZmlsdGVyKHggPT4geC5jb2RlICE9PSB0aGlzLm9yaWdpbkFpcnBvcnRDb2RlKSA6IFtdLFxuICAgICAgLi4udGhpcy5jbG9zZXN0QWlycG9ydHMgPyB0aGlzLmNsb3Nlc3RBaXJwb3J0cy5maWx0ZXIoeCA9PiB4LmNvZGUgIT09IHRoaXMub3JpZ2luQWlycG9ydENvZGUpIDogW11cbiAgICBdKSk7XG5cbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMuc2xpY2UoMCwgMyk7XG4gIH1cblxuICBnZXREYXRlUGlja2Vyc0NsYXNzKCk6IENsYXNzTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldEZpbHRlckNsYXNzKCdkYXRlLWNvbWJvJywgW1xuICAgICAgdGhpcy5leGlzdHModGhpcy5taW5pbWl6ZSkgJiYgJ21pbmltaXplZCcsXG4gICAgICB0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkgPiA1MDAgJiYgJ3NpZGUtYnktc2lkZSdcbiAgICBdKTtcbiAgfVxuXG4gIGdldFRyYXZlbERldGFpbHNDbGFzcyhlbGVtZW50Pzogc3RyaW5nLCBtb2RpZmllcnNJbnB1dD86IGFueSk6IENsYXNzTW9kZWwge1xuICAgIGxldCBtb2RpZmllcnMgPSBtb2RpZmllcnNJbnB1dCB8fCBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgaWYgKHR5cGVvZiBtb2RpZmllcnNJbnB1dCA9PT0gJ3N0cmluZycgfHwgbW9kaWZpZXJzSW5wdXQgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgIG1vZGlmaWVycyA9IFttb2RpZmllcnNJbnB1dF07XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGhzID0gW1xuICAgICAgdGhpcy5kZXZpY2VIZWxwZXIuaXNXaWR0aFRhYmxldCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpICYmICdtZCcsXG4gICAgICB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoRGVza3RvcCh0aGlzLmNvbnRhaW5lcldpZHRoLmdldFZhbHVlKCkpICYmICdsZydcbiAgICBdO1xuXG4gICAgbW9kaWZpZXJzID0gWy4uLm1vZGlmaWVycywgLi4ud2lkdGhzXTtcblxuICAgIGNvbnN0IHRyYXZlbERldGFpbHNCYXNlID0gbmV3IE5hc0NvbXBvbmVudEJhc2UoJ3RyYXZlbC1kZXRhaWxzJyk7XG4gICAgcmV0dXJuIHRyYXZlbERldGFpbHNCYXNlLmdldENsYXNzKGVsZW1lbnQsIG1vZGlmaWVycyk7XG4gIH1cblxuICBvbkluYm91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuaW5ib3VuZE1vbnRoQ2hhbmdlLmVtaXQobW9udGgpO1xuICB9XG4gIG9uT3V0Ym91bmRNb250aENoYW5nZShtb250aDogVXRjRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMub3V0Ym91bmRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMudHJhbnNpdFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXREaXNwbGF5KCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0UHJldmlvdXNDb250cm9sKCk7XG4gICAgfVxuICB9XG5cbiAgcGFzc2VuZ2VyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSB8fCB0aGlzLmlzVGFibGV0RGlzcGxheSgpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgICAgIGlmICh0aGlzLnN1YnNpZHlEaXNjb3VudHMgJiYgdGhpcy5zdWJzaWR5RGlzY291bnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2lkeURpc2NvdW50LmluZm9CdXR0b24uYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgfHwgdGhpcy5pc01vYmlsZURpc3BsYXkoKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKGZhbHNlKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblRyaXBTd2l0Y2hLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50cmlwVHlwZVJvdW5kVHJpcC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlwVHlwZU9uZXdheS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50cmlwVHlwZU9uZXdheS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlwVHlwZVJvdW5kVHJpcC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkgfHwgIXRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJldmlvdXNDb250cm9sKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gub3Blbikge1xuICAgICAgICAgICAgICB0aGlzLm9uVHJhbnNpdFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyYW5zaXRTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4oZmFsc2UpO1xuICAgICAgICB0aGlzLnNldEZvY3VzT25OYXRpdmVFbGVtZW50KHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNpdEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRyYW5zaXRUeXBlVHJhbnNpdC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0VHlwZURpcmVjdE9ubHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudHJhbnNpdFR5cGVEaXJlY3RPbmx5Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRUeXBlVHJhbnNpdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgICB0aGlzLmZvY3VzQXN5bmMoPGFueT50aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24udG9nZ2xlRWxlbWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25UcmFuc2l0U3dpdGNoT3BlbighdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzaWR5RGlzY291bnRzICYmIHRoaXMuc3Vic2lkeURpc2NvdW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3Vic2lkeURpc2NvdW50LmluZm9CdXR0b24uYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5vblRyYW5zaXRTd2l0Y2hPcGVuKGZhbHNlKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudCh0aGlzLnRyYW5zaXRTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uU3Vic2lkeURpc2NvdW50SW5mb0J1dHRvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVEaXNwbGF5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQXN5bmModGhpcy50cmFuc2l0U3dpdGNoLnRvZ2dsZUVsZW1lbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25OZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICB0aGlzLmZvY3VzQXN5bmMoPGFueT50aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNBc3luYyhyZWZFbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNBc3luY1RpbW91dCk7XG5cbiAgICB0aGlzLmZvY3VzQXN5bmNUaW1vdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQocmVmRWxlbWVudCkpO1xuICB9XG5cbiAgb25EYXRlcGlja2VyRm9jdXNPblByZXZpb3VzKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLmZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk7XG4gIH1cblxuICBzZWxlY3RQcmV2aW91c0NvbnRyb2woKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPbmx5KSB7XG4gICAgICAgIHRoaXMub3V0Ym91bmRPcGVuID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5ib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICBpZiAodGhpcy5leGlzdHModGhpcy5haXJwb3J0U2VsZWN0LmNvbWJvKSkge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25EZXN0aW5hdGlvbk9wZW4odHJ1ZSk7XG4gICAgICAgIGlmICgoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duRGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0FzeW5jKCg8YW55PnRoaXMuYWlycG9ydFNlbGVjdC5haXJwb3J0U2VsZWN0RHJvcGRvd25EZXN0aW5hdGlvbikuaW5wdXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25PcmlnaW5PcGVuKHRydWUpO1xuICAgICAgICBpZiAoKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbikpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bk9yaWdpbikuaW5wdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBvbkZvY3VzT25OZXh0Q2hhbmdlKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpICYmIHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgdGhpcy5vblRyaXBTd2l0Y2hPcGVuKHRydWUpO1xuICAgICAgdGhpcy5mb2N1c0FzeW5jKHRoaXMudHJpcFN3aXRjaC50b2dnbGVFbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXREaXNwbGF5KCkpIHtcbiAgICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25QYXNzZW5nZXJTZWxlY3RPcGVuKHRydWUpO1xuICAgICAgICAgIHRoaXMuc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQodGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi50b2dnbGVFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNNb2JpbGVEaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRldmljZUhlbHBlci5pc1dpZHRoTW9iaWxlKHRoaXMuY29udGFpbmVyV2lkdGguZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBpc1RhYmxldERpc3BsYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlSGVscGVyLmlzV2lkdGhUYWJsZXQodGhpcy5jb250YWluZXJXaWR0aC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIG9uT3JpZ2luT3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24ub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAhdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG5cbiAgICB0aGlzLm9yaWdpbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdmFsaWRhdGVBaXJwb3J0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5haXJwb3J0U2VsZWN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbjtcbiAgICBjb25zdCBkZXN0aW5hdGlvblNuYXBzaG90ID0gdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uO1xuICAgIGlmICgob3JpZ2luU25hcHNob3QgJiYgZGVzdGluYXRpb25TbmFwc2hvdCAmJiBvcmlnaW5TbmFwc2hvdC5jb2RlICYmIG9yaWdpblNuYXBzaG90LmNvZGUubGVuZ3RoXG4gICAgICAmJiBkZXN0aW5hdGlvblNuYXBzaG90LmNvZGUgJiYgZGVzdGluYXRpb25TbmFwc2hvdC5jb2RlLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB1cGRhdGVNYXhpbWl6ZSgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubWF4aW1pemUgPSB0aGlzLnZhbGlkYXRlQWlycG9ydFZhbHVlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgb25EZXN0aW5hdGlvbk9wZW4ob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QgJiYgIXRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4pIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4aW1pemUoKTtcbiAgICB9XG4gICAgdGhpcy5kZXN0aW5hdGlvbk9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgfVxuXG4gIG9uUGFzc2VuZ2VyU2VsZWN0T3BlbihvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCkge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvbk9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zaXRTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJhbnNpdFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3Blbikge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvLm91dGJvdW5kT3Blbikge1xuICAgICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBvcGVuO1xuICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0T3BlbkNoYW5nZS5lbWl0KG9wZW4pO1xuXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wYXNzZW5nZXJTZWxlY3QubnVtYmVyRmllbGRzLmZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3QubnVtYmVyRmllbGRzLmZpcnN0LmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH1cblxuICBvblRyaXBTd2l0Y2hPcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50cmlwU3dpdGNoRm9jdXNUaW1lb3V0KTtcblxuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wYXNzZW5nZXJTZWxlY3REcm9wZG93bi5vcGVuID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2l0U3dpdGNoKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbWJvLmluYm91bmRPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5vdXRib3VuZE9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IG9wZW47XG5cbiAgICBpZiAob3Blbikge1xuICAgICAgdGhpcy50cmlwU3dpdGNoRm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpcFR5cGVSb3VuZFRyaXAubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBvblRyYW5zaXRTd2l0Y2hPcGVuKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50cmFuc2l0U3dpdGNoRm9jdXNUaW1lb3V0KTtcblxuICAgIGlmICh0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duKSB7XG4gICAgICB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLm9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmlwU3dpdGNoKSB7XG4gICAgICB0aGlzLnRyaXBTd2l0Y2gub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFpcnBvcnRTZWxlY3QpIHtcbiAgICAgIHRoaXMuYWlycG9ydFNlbGVjdC5vcmlnaW5PcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3QuZGVzdGluYXRpb25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckNvbWJvKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21iby5pbmJvdW5kT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRlcGlja2VyQ29tYm8ub3V0Ym91bmRPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBvcGVuO1xuICAgIH1cblxuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLnRyYW5zaXRTd2l0Y2hGb2N1c1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2l0VHlwZVRyYW5zaXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBvbk9yaWdpbkNoYW5nZShhaXJwb3J0OiBBaXJwb3J0TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLm9yaWdpbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KGFpcnBvcnQ6IEFpcnBvcnRNb2RlbCk6IHZvaWQge1xuICAgIGlmICghYWlycG9ydCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25PcmlnaW5DaGFuZ2UoYWlycG9ydCk7XG5cbiAgICBpZiAodGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9PT0gYWlycG9ydC5jb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IGFpcnBvcnQuY29kZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRGVzdGluYXRpb25DaGFuZ2UoYWlycG9ydDogQWlycG9ydE1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbkNoYW5nZS5lbWl0KGFpcnBvcnQpO1xuICB9XG5cbiAgc2V0Rm9jdXNPblBhc3NlbmdlclNlbGVjdChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMubWluaW1pemUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzTW9iaWxlRGlzcGxheSgpKSB7XG4gICAgICBpZiAodGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vdXRib3VuZE9wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmZvY3VzQXN5bmMoKDxhbnk+dGhpcy5kYXRlcGlja2VyQ29tYm8uZGF0ZXBpY2tlck91dGJvdW5kKS5pbnB1dCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9uVHJpcFN3aXRjaE9wZW4odHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNBc3luYyh0aGlzLnRyaXBTd2l0Y2gudG9nZ2xlRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUYWJsZXREaXNwbGF5KCkgJiYgdGhpcy5kYXRlcGlja2VyQ29tYm8pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm91dGJvdW5kT3BlbiA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcblxuICAgICAgICB0aGlzLm9uUGFzc2VuZ2VyU2VsZWN0T3Blbih0cnVlKTtcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRSZWYgPSB0aGlzLnBhc3NlbmdlclNlbGVjdERyb3Bkb3duLnRvZ2dsZUVsZW1lbnQ7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRGb2N1c09uTmF0aXZlRWxlbWVudChjdXJyZW50RWxlbWVudFJlZikpO1xuXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHJpcFN3aXRjaCkge1xuXG4gICAgICAgIHRoaXMub25UcmlwU3dpdGNoT3Blbih0cnVlKTtcbiAgICAgICAgdGhpcy50cmlwU3dpdGNoLnRvZ2dsZUVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgc2V0Rm9jdXNPbk5hdGl2ZUVsZW1lbnQoZWxlbWVudDogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25UcmlwVHlwZUNoYW5nZSh0cmlwVHlwZTogVHJpcFR5cGUpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyaXBUeXBlID0gdHJpcFR5cGU7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSkge1xuICAgICAgY29uc3QgdHJpcFN3aXRjaENvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVUcmlwVHlwZSk7XG4gICAgICB0cmlwU3dpdGNoQ29udHJvbC5wYXRjaFZhbHVlKHRyaXBUeXBlKTtcbiAgICB9XG4gIH1cblxuICBvblRyYW5zaXRDaGFuZ2UoZGlyZWN0T25seTogYm9vbGVhbik6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGlyZWN0T25seSA9IGRpcmVjdE9ubHk7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KSB7XG4gICAgICBjb25zdCB0cmlwVHlwZUNvbnRyb2wgPSB0aGlzLm5hc0Zvcm1Hcm91cC5nZXQodGhpcy5uYXNGb3JtQ29udHJvbE5hbWVEaXJlY3RPbmx5KTtcbiAgICAgIHRyaXBUeXBlQ29udHJvbC5wYXRjaFZhbHVlKGRpcmVjdE9ubHkpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRyYXZlbERldGFpbHNUcmlwU3dpdGNoSWNvbkNsYXNzKG1vZGlmaWVycz86IGFueSk6IEFycmF5PENsYXNzTW9kZWw+IHtcbiAgICBjb25zdCBpY29uTWVkaXVtQmFzZSA9IG5ldyBOYXNDb21wb25lbnRCYXNlKCdpY29uLW1lZGl1bScpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIGljb25NZWRpdW1CYXNlLmdldENsYXNzKCcnLCBtb2RpZmllcnMpLFxuICAgICAgdGhpcy5nZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2ljb24nKVxuICAgIF07XG4gIH1cblxuICBnZXRUcmlwU3dpdGNoTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmlwVHlwZSA9PT0gVHJpcFR5cGUudHdvV2F5UmV0dXJuID8gdGhpcy50cmlwU3dpdGNoUm91bmRUcmlwTGFiZWwgOiB0aGlzLnRyaXBTd2l0Y2hPbmVXYXlMYWJlbDtcbiAgfVxuXG4gIGdldFRyYW5zaXRMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpcmVjdE9ubHkgPyB0aGlzLmRpcmVjdE9ubHlMYWJlbCA6IHRoaXMuZGlyZWN0VHJhbnNpdExhYmVsO1xuICB9XG5cbiAgb25BY2NvcmRpb25Ub2dnbGVDaGFuZ2UoZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlTdW1tYXJ5ID0gIWV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0U3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnBhc3NlbmdlclNlbGVjdExhYmVsfSR7dGhpcy5kZWZhdWx0U3VtbWFyeVNlcGFyYXRvcn1gICtcbiAgICAgIGAke3RoaXMuZ2V0VHJpcFN3aXRjaExhYmVsKCkudG9Mb3dlckNhc2UoKX0ke3RoaXMubGFzdFN1bW1hcnlTZXBhcmF0b3J9JHt0aGlzLmdldFRyYW5zaXRMYWJlbCgpLnRvTG93ZXJDYXNlKCl9YDtcbiAgfVxuXG4gIHNob3VsZE1heGltaXplKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5leGlzdHModGhpcy5taW5pbWl6ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5haXJwb3J0U2VsZWN0XG4gICAgICAmJiB0aGlzLmVuYWJsZURlc3RpbmF0aW9uU2VsZWN0XG4gICAgICAmJiB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luXG4gICAgICAmJiB0aGlzLmFpcnBvcnRTZWxlY3Qub3JpZ2luLmNvZGVcbiAgICAgICYmIHRoaXMuYWlycG9ydFNlbGVjdC5kZXN0aW5hdGlvblxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uLmNvZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5haXJwb3J0U2VsZWN0XG4gICAgICAmJiAhdGhpcy5lbmFibGVEZXN0aW5hdGlvblNlbGVjdFxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpblxuICAgICAgJiYgdGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbi5jb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWlycG9ydFNlbGVjdCAmJiAodGhpcy5haXJwb3J0U2VsZWN0Lm9yaWdpbk9wZW4gfHwgdGhpcy5haXJwb3J0U2VsZWN0LmRlc3RpbmF0aW9uT3BlbikpIHtcbiAgICAgIHJldHVybiB0aGlzLm1heGltaXplO1xuICAgIH0gZWxzZSBpZiAodGhpcy5leGlzdHModGhpcy5taW5pbWl6ZSkpIHtcbiAgICAgIGlmICh0aGlzLm1heGltaXplKSB7XG4gICAgICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzTmFzR3JvdXBWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzT25BaXJwb3J0U2VsZWN0QmFja3dhcmRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmFpcnBvcnRTZWxlY3QuY29tYm8pKSB7XG4gICAgICB0aGlzLmFpcnBvcnRTZWxlY3Qub25EZXN0aW5hdGlvbk9wZW4odHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5haXJwb3J0U2VsZWN0LmFpcnBvcnRTZWxlY3REcm9wZG93bkRlc3RpbmF0aW9uLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDEwMCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5haXJwb3J0U2VsZWN0Lm9uT3JpZ2luT3Blbih0cnVlKTtcbiAgICAgIHRoaXMuZm9jdXNBc3luYygoPGFueT50aGlzLmFpcnBvcnRTZWxlY3QuYWlycG9ydFNlbGVjdERyb3Bkb3duT3JpZ2luKS5pbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMYXRlc3RTZWFyY2hlcyhhYmFuZG9uZWRCYXNrZXQ6IEFycmF5PEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbD4sIGFpcnBvcnRzOiBBcnJheTxBaXJwb3J0TW9kZWw+KTogdm9pZCB7XG4gICAgaWYgKCFhYmFuZG9uZWRCYXNrZXQgfHwgIWFpcnBvcnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdW5pcXVlID0gbmV3IEFycmF5PEFiYW5kb25lZEJhc2tldEl0ZW1Nb2RlbD4oKTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhYmFuZG9uZWRCYXNrZXQpIHtcbiAgICAgIGlmICghdW5pcXVlLnNvbWUoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZSA9PT0gaXRlbS5kZXN0aW5hdGlvbkNvZGUpKSB7XG4gICAgICAgIHVuaXF1ZS5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbkNvZGVzID0gdW5pcXVlLm1hcCh4ID0+IHgub3JpZ2luQ29kZSk7XG4gICAgY29uc3QgZGVzdGluYXRpb25Db2RlcyA9IHVuaXF1ZS5tYXAoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZSk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc09yaWdpbiA9IGFpcnBvcnRzLmZpbHRlcihhaXJwb3J0ID0+IHVuaXF1ZS5zb21lKHggPT4geC5vcmlnaW5Db2RlLnRvTG93ZXJDYXNlKCkgPT09IGFpcnBvcnQuY29kZS50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICBjb25zdCBsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uID0gYWlycG9ydHMuZmlsdGVyKGFpcnBvcnQgPT4gdW5pcXVlLnNvbWUoeCA9PiB4LmRlc3RpbmF0aW9uQ29kZS50b0xvd2VyQ2FzZSgpID09PSBhaXJwb3J0LmNvZGUudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgY29uc3QgY29kZSA9ICdjb2RlJztcbiAgICB0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luID0gdGhpcy5zb3J0U2VydmljZS5zb3J0QnlPYmplY3QobGF0ZXN0U2VhcmNoZXNPcmlnaW4sIG9yaWdpbkNvZGVzLCBjb2RlKS5zbGljZSgwLCAzKTtcblxuICAgIGlmICh0aGlzLmxhdGVzdFNlYXJjaGVzT3JpZ2luICYmIHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW4ubGVuZ3RoID4gMCAmJiB0aGlzLmV4aXN0cyh0aGlzLm92ZXJyaWRlT3JpZ2luKSkge1xuICAgICAgdGhpcy5vcmlnaW5BaXJwb3J0Q29kZSA9IHRoaXMubGF0ZXN0U2VhcmNoZXNPcmlnaW5bMF0uY29kZTtcbiAgICB9XG5cbiAgICB0aGlzLmxhdGVzdFNlYXJjaGVzRGVzdGluYXRpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLnNvcnRCeU9iamVjdChsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbkNvZGVzLCBjb2RlKS5zbGljZSgwLCAzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEcm9wZG93bnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24pIHtcbiAgICAgIHRoaXMucGFzc2VuZ2VyU2VsZWN0RHJvcGRvd24ub3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyaXBTd2l0Y2gpIHtcbiAgICAgIHRoaXMudHJpcFN3aXRjaC5vcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNpdFN3aXRjaCkge1xuICAgICAgdGhpcy50cmFuc2l0U3dpdGNoLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuYXMtYWNjb3JkaW9uICpuZ0lmPVwiZGV2aWNlSGVscGVyPy5pc01vYmlsZSgpICYmIGV4aXN0cyhtaW5pbWl6ZU9uTW9iaWxlKTsgZWxzZSBmaWx0ZXJUZW1wbGF0ZVwiXG4gIHNpbXBsZVxuICBjb250YWluZXJPblRvZ2dsZVxuICB0cmFuc3BhcmVudFxuICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRBY2NvcmRpb25Nb2JpbGVcIlxuICBbdGl0bGVdPVwiZWRpdFNlYXJjaFRpdGxlXCJcbiAgKHRvZ2dsZUNoYW5nZSk9XCJvbkFjY29yZGlvblRvZ2dsZUNoYW5nZSgkZXZlbnQpXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuPC9uYXMtYWNjb3JkaW9uPlxuPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiXG4gICpuZ0lmPVwiZGV2aWNlSGVscGVyPy5pc01vYmlsZSgpICYmIGV4aXN0cyhtaW5pbWl6ZU9uTW9iaWxlKSAmJiBkaXNwbGF5U3VtbWFyeVwiPnt7Z2V0U3VtbWFyeSgpfX08L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZT5cbiAgPGRpdiAjY29udGFpbmVyXG4gICAgW25hc0NsYXNzXT1cImdldENvbnRhaW5lckNsYXNzKClcIj5cbiAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRGaWx0ZXJDbGFzcygnZmlsdGVycycsIFtleGlzdHMobWluaW1pemUpICYmICdtaW5pbWl6ZWQnLCBtYXhpbWl6ZSAmJiAnbWF4aW1pemUnXSlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhaXJwb3J0cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bmFzLWFpcnBvcnQtc2VsZWN0ICpuZ0lmPVwiYWlycG9ydHMgJiYgYWlycG9ydFJlbGF0aW9ucyAmJiAoZW5hYmxlRGVzdGluYXRpb25TZWxlY3QpXCJcbiAgICAgICAgICAjYWlycG9ydFNlbGVjdFxuICAgICAgICAgIGNvbWJvXG4gICAgICAgICAgW2FyaWFMYWJlbENsZWFyXT1cImFyaWFMYWJlbENsZWFyXCJcbiAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lT3JpZ2luXT1cIm5hc0Zvcm1Db250cm9sTmFtZU9yaWdpblwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uXT1cIm5hc0Zvcm1Db250cm9sTmFtZURlc3RpbmF0aW9uXCJcbiAgICAgICAgICBbdXNlU3dpdGNoXT1cInVzZVN3aXRjaFwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEFpcnBvcnRTZWxlY3RDbGFzcygpXCJcbiAgICAgICAgICBbYWlycG9ydHNdPVwiYWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkT3JpZ2luQWlwb3J0c109XCJhbGxvd2VkT3JpZ2luQWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0c109XCJhbGxvd2VkRGVzdGluYXRpb25BaXJwb3J0c1wiXG4gICAgICAgICAgW2FpcnBvcnRSZWxhdGlvbnNdPVwiYWlycG9ydFJlbGF0aW9uc1wiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzT3JpZ2luXT1cImxhdGVzdFNlYXJjaGVzT3JpZ2luXCJcbiAgICAgICAgICBbbGF0ZXN0U2VhcmNoZXNEZXN0aW5hdGlvbl09XCJsYXRlc3RTZWFyY2hlc0Rlc3RpbmF0aW9uXCJcbiAgICAgICAgICBbZGlzcGxheUxhdGVzdFNlYXJjaGVzXT1cImRpc3BsYXlMYXRlc3RTZWFyY2hlc1wiXG4gICAgICAgICAgW2Rpc3BsYXlDbG9zZXN0QWlycG9ydHNdPVwiZGlzcGxheUNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW29yaWdpbkFpcnBvcnRDb2RlXT1cIm9yaWdpbkFpcnBvcnRDb2RlXCJcbiAgICAgICAgICBbZGVzdGluYXRpb25BaXJwb3J0Q29kZV09XCJkZXN0aW5hdGlvbkFpcnBvcnRDb2RlXCJcbiAgICAgICAgICBbYWxsQWlycG9ydHNMYWJlbF09XCJhbGxBaXJwb3J0c0xhYmVsXCJcbiAgICAgICAgICBbbGF0ZXN0U2VhcmNoZXNMYWJlbF09XCJsYXRlc3RTZWFyY2hlc0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzTGFiZWxdPVwiY2xvc2VzdEFpcnBvcnRzTGFiZWxcIlxuICAgICAgICAgIFtjbG9zZXN0QWlycG9ydHNdPVwiY2xvc2VzdEFpcnBvcnRzXCJcbiAgICAgICAgICBbc2VsZWN0T3JpZ2luRmlyc3RMYWJlbF09XCJzZWxlY3RPcmlnaW5GaXJzdExhYmVsXCJcbiAgICAgICAgICBbbGFiZWxPcmlnaW5dPVwibGFiZWxPcmlnaW5cIlxuICAgICAgICAgIFtwbGFjZWhvbGRlck9yaWdpbl09XCJwbGFjZWhvbGRlck9yaWdpblwiXG4gICAgICAgICAgW2xhYmVsRGVzdGluYXRpb25dPVwibGFiZWxEZXN0aW5hdGlvblwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uTGFiZWxdPVwiZ2VvbG9jYXRpb25MYWJlbFwiXG4gICAgICAgICAgW2dlb2xvY2F0aW9uQmxvY2tlZExhYmVsXT1cImdlb2xvY2F0aW9uQmxvY2tlZExhYmVsXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJEZXN0aW5hdGlvbl09XCJwbGFjZWhvbGRlckRlc3RpbmF0aW9uXCJcbiAgICAgICAgICBba2VlcFNlbGVjdGlvbl09XCJrZWVwU2VsZWN0aW9uXCJcbiAgICAgICAgICBbaW52YWxpZERlc3RpbmF0aW9uVGV4dF09XCJpbnZhbGlkRGVzdGluYXRpb25UZXh0XCJcbiAgICAgICAgICAob3JpZ2luQ2hhbmdlKT1cInNldFNlbGVjdGVkT3JpZ2luQWlycG9ydCgkZXZlbnQpXCJcbiAgICAgICAgICAoZGVzdGluYXRpb25DaGFuZ2UpPVwib25EZXN0aW5hdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAoZm9jdXNPbk5leHQpPVwic2V0Rm9jdXNPblBhc3NlbmdlclNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAob3JpZ2luT3BlbkNoYW5nZSk9XCJvbk9yaWdpbk9wZW4oJGV2ZW50KVwiXG4gICAgICAgICAgKGRlc3RpbmF0aW9uT3BlbkNoYW5nZSk9XCJvbkRlc3RpbmF0aW9uT3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAocG9zaXRpb25DaGFuZ2UpPVwiZ2V0Q2xvc2VzdEFpcnBvcnRzKCRldmVudClcIj48L25hcy1haXJwb3J0LXNlbGVjdD5cbiAgICAgICAgPG5hcy1haXJwb3J0LXNlbGVjdCAqbmdJZj1cImFpcnBvcnRzICYmICghZW5hYmxlRGVzdGluYXRpb25TZWxlY3QpXCJcbiAgICAgICAgICAjYWlycG9ydFNlbGVjdFxuICAgICAgICAgIFthcmlhTGFiZWxDbGVhcl09XCJhcmlhTGFiZWxDbGVhclwiXG4gICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICBbbmFzRm9ybUdyb3VwXT1cIm5hc0Zvcm1Hcm91cFwiXG4gICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU9yaWdpbl09XCJuYXNGb3JtQ29udHJvbE5hbWVPcmlnaW5cIlxuICAgICAgICAgIFt1c2VTd2l0Y2hdPVwidXNlU3dpdGNoXCJcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2FpcnBvcnQtb3JpZ2luLXNlbGVjdCcpXCJcbiAgICAgICAgICBbYWlycG9ydHNdPVwiYWlycG9ydHNcIlxuICAgICAgICAgIFthbGxvd2VkT3JpZ2luQWlwb3J0c109XCJhbGxvd2VkT3JpZ2luQWlycG9ydHNcIlxuICAgICAgICAgIFthaXJwb3J0UmVsYXRpb25zXT1cImFpcnBvcnRSZWxhdGlvbnNcIlxuICAgICAgICAgIFtsYXRlc3RTZWFyY2hlc09yaWdpbl09XCJsYXRlc3RTZWFyY2hlc09yaWdpblwiXG4gICAgICAgICAgW2Rpc3BsYXlMYXRlc3RTZWFyY2hlc109XCJkaXNwbGF5TGF0ZXN0U2VhcmNoZXNcIlxuICAgICAgICAgIFtkaXNwbGF5Q2xvc2VzdEFpcnBvcnRzXT1cImRpc3BsYXlDbG9zZXN0QWlycG9ydHNcIlxuICAgICAgICAgIFtvcmlnaW5BaXJwb3J0Q29kZV09XCJvcmlnaW5BaXJwb3J0Q29kZVwiXG4gICAgICAgICAgW2FsbEFpcnBvcnRzTGFiZWxdPVwiYWxsQWlycG9ydHNMYWJlbFwiXG4gICAgICAgICAgW2xhdGVzdFNlYXJjaGVzTGFiZWxdPVwibGF0ZXN0U2VhcmNoZXNMYWJlbFwiXG4gICAgICAgICAgW2Nsb3Nlc3RBaXJwb3J0c0xhYmVsXT1cImNsb3Nlc3RBaXJwb3J0c0xhYmVsXCJcbiAgICAgICAgICBbY2xvc2VzdEFpcnBvcnRzXT1cImNsb3Nlc3RBaXJwb3J0c1wiXG4gICAgICAgICAgW3NlbGVjdE9yaWdpbkZpcnN0TGFiZWxdPVwic2VsZWN0T3JpZ2luRmlyc3RMYWJlbFwiXG4gICAgICAgICAgW2xhYmVsT3JpZ2luXT1cImxhYmVsT3JpZ2luXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJPcmlnaW5dPVwicGxhY2Vob2xkZXJPcmlnaW5cIlxuICAgICAgICAgIFtnZW9sb2NhdGlvbkxhYmVsXT1cImdlb2xvY2F0aW9uTGFiZWxcIlxuICAgICAgICAgIFtnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbF09XCJnZW9sb2NhdGlvbkJsb2NrZWRMYWJlbFwiXG4gICAgICAgICAgW2tlZXBTZWxlY3Rpb25dPVwia2VlcFNlbGVjdGlvblwiXG4gICAgICAgICAgKG9yaWdpbkNoYW5nZSk9XCJzZXRTZWxlY3RlZE9yaWdpbkFpcnBvcnQoJGV2ZW50KVwiXG4gICAgICAgICAgKGZvY3VzT25OZXh0KT1cInNldEZvY3VzT25QYXNzZW5nZXJTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgKG9yaWdpbk9wZW5DaGFuZ2UpPVwib25PcmlnaW5PcGVuKCRldmVudClcIlxuICAgICAgICAgIChwb3NpdGlvbkNoYW5nZSk9XCJnZXRDbG9zZXN0QWlycG9ydHMoJGV2ZW50KVwiPjwvbmFzLWFpcnBvcnQtc2VsZWN0PlxuICAgICAgICA8bmFzLXN1Z2dlc3Rpb25zICpuZ0lmPVwiKGNsb3Nlc3RBaXJwb3J0cyB8fCBsYXRlc3RTZWFyY2hlc09yaWdpbikgJiYgZXhpc3RzKGVuYWJsZVN1Z2dlc3Rpb25zKVwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEZpbHRlckNsYXNzKCdzdWdnZXN0aW9ucycpXCJcbiAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiZ2V0U3VnZ2VzdGlvbnMoKVwiXG4gICAgICAgICAgW29yTGFiZWxdPVwib3JMYWJlbFwiXG4gICAgICAgICAgKGFpcnBvcnRTZWxlY3QpPVwic2V0U2VsZWN0ZWRPcmlnaW5BaXJwb3J0KCRldmVudClcIj48L25hcy1zdWdnZXN0aW9ucz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZE1heGltaXplKClcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtuYXNDbGFzc109XCIhZW5hYmxlRGVzdGluYXRpb25TZWxlY3QgPyBnZXRDbGFzcygnb3JpZ2luLWNvbWJpbmVkJykgOlxuICAgICAgICAgIGdldFRyYXZlbERldGFpbHNDbGFzcygnJywgWydjb21iaW5lZCcsIGV4aXN0cyhlbmFibGVEYXRlcGlja2VycykgJiYgJ25vLWJvcmRlcicsIGV4aXN0cyhtaW5pbWl6ZSkgJiYgJ21pbmltaXplZCddKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbmFibGVQYXNzZW5nZXJzU2VsZWN0XCI+XG4gICAgICAgICAgICA8bmFzLWRyb3Bkb3duICNwYXNzZW5nZXJTZWxlY3REcm9wZG93blxuICAgICAgICAgICAgICAqbmdJZj1cInBhc3NlbmdlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicsICdwYXNzZW5nZXJzJylcIlxuICAgICAgICAgICAgICBbY3NzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cInBhc3NlbmdlclNlbGVjdExhYmVsXCJcbiAgICAgICAgICAgICAgW2xhYmVsU3R5bGVdPVwieyd3aWR0aCc6ICcxMDJweCd9XCJcbiAgICAgICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgKG9wZW5DaGFuZ2UpPVwib25QYXNzZW5nZXJTZWxlY3RPcGVuKCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJwYXNzZW5nZXJLZXlEb3duKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG5hcy1wYXNzZW5nZXItc2VsZWN0ICNwYXNzZW5nZXJTZWxlY3RcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsQWRkXT1cImFyaWFMYWJlbEFkZFwiXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbFN1YnRyYWN0XT1cImFyaWFMYWJlbFN1YnRyYWN0XCJcbiAgICAgICAgICAgICAgICBbYWR1bHRzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0QWR1bHRzTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtjaGlsZHJlbkxhYmVsXT1cInBhc3NlbmdlclNlbGVjdENoaWxkcmVuTGFiZWxcIlxuICAgICAgICAgICAgICAgIFtpbmZhbnRzTGFiZWxdPVwicGFzc2VuZ2VyU2VsZWN0SW5mYW50c0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbbWF4UGF4Q291bnRdPVwibWF4UGF4Q291bnRcIlxuICAgICAgICAgICAgICAgIFttaW5BZHVsdENvdW50XT1cIm1pbkFkdWx0Q291bnRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJwYXNzZW5nZXJTZWxlY3RUaXRsZVwiXG4gICAgICAgICAgICAgICAgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgICAgICAgIFtuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZ109XCJuYXNGb3JtQ29udHJvbEdyb3VwQm9va2luZ1wiXG4gICAgICAgICAgICAgICAgW2dyb3VwQm9va2luZ0xhYmVsXT1cImdyb3VwQm9va2luZ0xhYmVsXCJcbiAgICAgICAgICAgICAgICBbZ3JvdXBCb29raW5nTGltaXRdPVwiZ3JvdXBCb29raW5nTGltaXRcIlxuICAgICAgICAgICAgICAgIChmb2N1c09uTmV4dCk9XCJvblBhc3NlbmdlcnNTZWxlY3RGb2N1c09uTmV4dCgpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXNPblByZXZpb3VzKT1cIm9uUGFzc2VuZ2Vyc1NlbGVjdEZvY3VzT25QcmV2aW91cygpXCJcbiAgICAgICAgICAgICAgICBbKHBhc3NlbmdlcnMpXT1cInBhc3NlbmdlcnNcIj48L25hcy1wYXNzZW5nZXItc2VsZWN0PlxuICAgICAgICAgICAgPC9uYXMtZHJvcGRvd24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZVRyaXBTd2l0Y2hcIj5cbiAgICAgICAgICAgIDxuYXMtZHJvcGRvd24gKm5nSWY9XCJ0cmlwU3dpdGNoT25lV2F5TGFiZWwgJiYgdHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsXCJcbiAgICAgICAgICAgICAgI3RyaXBTd2l0Y2hcbiAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnZHJvcGRvd24nLCAndHJpcC10eXBlJylcIlxuICAgICAgICAgICAgICBbY3NzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImdldFRyaXBTd2l0Y2hMYWJlbCgpXCJcbiAgICAgICAgICAgICAgW2FyaWFMYWJlbEJhY2tkcm9wXT1cImFyaWFMYWJlbEJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgKG9wZW5DaGFuZ2UpPVwib25UcmlwU3dpdGNoT3BlbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25UcmlwU3dpdGNoS2V5RG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9ucycpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICN0cmlwVHlwZVJvdW5kVHJpcFxuICAgICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgdHJpcFR5cGUgPT09IDIgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyaXBUeXBlQ2hhbmdlKDIpXCI+XG4gICAgICAgICAgICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ21lZGl1bSdcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJ0cmlwVHlwZSA9PT0gMiA/ICdmbGlnaHQtcmV0dXJuLS1saWdodCcgOiAnZmxpZ2h0LXJldHVybidcIj48L25hcy1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndGl0bGUnLCAnc21hbGwnKVwiPnt7dHJpcFN3aXRjaFJvdW5kVHJpcExhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICN0cmlwVHlwZU9uZXdheVxuICAgICAgICAgICAgICAgICAgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgdHJpcFR5cGUgPT09IDEgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyaXBUeXBlQ2hhbmdlKDEpXCI+XG4gICAgICAgICAgICAgICAgICA8bmFzLWljb24gW3R5cGVdPVwiJ21lZGl1bSdcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJ0cmlwVHlwZSA9PT0gMSA/ICdmbGlnaHQtb25ld2F5LS1saWdodCcgOiAnZmxpZ2h0LW9uZXdheSdcIj48L25hcy1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndGl0bGUnLCBbJ3NtYWxsJ10pXCI+e3t0cmlwU3dpdGNoT25lV2F5TGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25hcy1kcm9wZG93bj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlVHJhbnNpdFN3aXRjaFwiPlxuICAgICAgICAgICAgPG5hcy1kcm9wZG93biAqbmdJZj1cImRpcmVjdE9ubHlMYWJlbCAmJiBkaXJlY3RUcmFuc2l0TGFiZWxcIlxuICAgICAgICAgICAgICAjdHJhbnNpdFN3aXRjaFxuICAgICAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCdkcm9wZG93bicsICd0cmFuc2l0LXR5cGUnKVwiXG4gICAgICAgICAgICAgIFtjc3NDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2Ryb3Bkb3duJylcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZ2V0VHJhbnNpdExhYmVsKClcIlxuICAgICAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgICAgICAob3BlbkNoYW5nZSk9XCJvblRyYW5zaXRTd2l0Y2hPcGVuKCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJ0cmFuc2l0S2V5RG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9ucycpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICN0cmFuc2l0VHlwZVRyYW5zaXRcbiAgICAgICAgICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ2FjdGlvbicsICFkaXJlY3RPbmx5ICYmICdhY3RpdmUnKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UcmFuc2l0Q2hhbmdlKGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndHJhbnNpdC1pY29uJylcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygndHJhbnNpdC1pY29uLXN0b3AnKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ3RpdGxlJywgJ3NtYWxsJylcIj57e2RpcmVjdFRyYW5zaXRMYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gW25hc0NsYXNzXT1cImdldFRyYXZlbERldGFpbHNDbGFzcygnYWN0aW9uJywgZGlyZWN0T25seSAmJiAnYWN0aXZlJylcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAjdHJhbnNpdFR5cGVEaXJlY3RPbmx5XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UcmFuc2l0Q2hhbmdlKHRydWUpXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbbmFzQ2xhc3NdPVwiZ2V0VHJhdmVsRGV0YWlsc0NsYXNzKCd0cmFuc2l0LWljb24nKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtuYXNDbGFzc109XCJnZXRUcmF2ZWxEZXRhaWxzQ2xhc3MoJ3RpdGxlJywgJ3NtYWxsJylcIj57e2RpcmVjdE9ubHlMYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmFzLWRyb3Bkb3duPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImV4aXN0cyhlbmFibGVEYXRlcGlja2VycylcIlxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXREYXRlUGlja2Vyc0NsYXNzKClcIj5cbiAgICAgICAgICA8bmFzLWRhdGVwaWNrZXItY29tYm8gI2RhdGVwaWNrZXJDb21ib1xuICAgICAgICAgICAgY29tcGFjdFxuICAgICAgICAgICAgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kXT1cIm5hc0Zvcm1Db250cm9sTmFtZU91dGJvdW5kXCJcbiAgICAgICAgICAgIFtuYXNGb3JtQ29udHJvbE5hbWVJbmJvdW5kXT1cIm5hc0Zvcm1Db250cm9sTmFtZUluYm91bmRcIlxuICAgICAgICAgICAgW2F2YWlsYWJpbGl0eV09XCJhdmFpbGFiaWxpdHlcIlxuICAgICAgICAgICAgW2F2YWlsYWJsZUZsaWdodHNMYWJlbF09XCJhdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICAgICAgW2RhdGVEaXNwbGF5Rm9ybWF0XT1cImRhdGVEaXNwbGF5Rm9ybWF0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlUGFzdFNlbGVjdGlvbl09XCJkaXNhYmxlUGFzdFNlbGVjdGlvblwiXG4gICAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICBbbm9BdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwibm9BdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICAgICAgW2luYm91bmRBdmFpbGFibGVEYXRlc109XCJpbmJvdW5kQXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgICAgICAgW2luYm91bmRMYWJlbF09XCJpbmJvdW5kTGFiZWxcIlxuICAgICAgICAgICAgW25vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cIm5vQXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgICAgICAgIFtvdXRib3VuZEF2YWlsYWJsZURhdGVzXT1cIm91dGJvdW5kQXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgICAgICAgW291dGJvdW5kTGFiZWxdPVwib3V0Ym91bmRMYWJlbFwiXG4gICAgICAgICAgICBbdGltZURpc3BsYXlGb3JtYXRdPVwidGltZURpc3BsYXlGb3JtYXRcIlxuICAgICAgICAgICAgW3RpbWVzXT1cInRpbWVzXCJcbiAgICAgICAgICAgIFtvdXRib3VuZERpc2FibGVkXT1cIm91dGJvdW5kRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2luYm91bmREaXNhYmxlZF09XCJpbmJvdW5kRGlzYWJsZWRcIlxuICAgICAgICAgICAgW291dGJvdW5kT25seV09XCJ0cmlwVHlwZSA9PT0gMVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbFByZXZpb3VzTW9udGhdPVwiYXJpYUxhYmVsUHJldmlvdXNNb250aFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsTmV4dE1vbnRoXT1cImFyaWFMYWJlbE5leHRNb250aFwiXG4gICAgICAgICAgICAoZm9jdXNPbk5leHRDaGFuZ2UpPVwib25Gb2N1c09uTmV4dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1c09uUHJldmlvdXNDaGFuZ2UpPVwib25EYXRlcGlja2VyRm9jdXNPblByZXZpb3VzKCRldmVudClcIlxuICAgICAgICAgICAgKGluYm91bmRNb250aENoYW5nZSk9XCJvbkluYm91bmRNb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvdXRib3VuZE1vbnRoQ2hhbmdlKT1cIm9uT3V0Ym91bmRNb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFsob3V0Ym91bmRPcGVuKV09XCJvdXRib3VuZE9wZW5cIlxuICAgICAgICAgICAgWyhpbmJvdW5kT3BlbildPVwiaW5ib3VuZE9wZW5cIlxuICAgICAgICAgICAgWyhpbmJvdW5kU2VsZWN0ZWREYXRlKV09XCJpbmJvdW5kU2VsZWN0ZWREYXRlXCJcbiAgICAgICAgICAgIFsob3V0Ym91bmRTZWxlY3RlZERhdGUpXT1cIm91dGJvdW5kU2VsZWN0ZWREYXRlXCI+XG4gICAgICAgICAgPC9uYXMtZGF0ZXBpY2tlci1jb21ibz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzdWJzaWR5RGlzY291bnRzICYmIHN1YnNpZHlEaXNjb3VudHMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgW25hc0NsYXNzXT1cImdldEZpbHRlckNsYXNzKCdzdWJzaWR5LWRpc2NvdW50JylcIj5cbiAgICAgICAgICA8bmFzLXN1YnNpZHktZGlzY291bnQgI3N1YnNpZHlEaXNjb3VudFxuICAgICAgICAgICAgW2Rpc2NvdW50c109XCJzdWJzaWR5RGlzY291bnRzXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZERpc2NvdW50XT1cInNlbGVjdGVkU3Vic2lkeURpc2NvdW50XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJzdWJzaWR5RGlzY291bnRMYWJlbFwiXG4gICAgICAgICAgICAoaW5mb0J1dHRvbkNsaWNrKT1cIm9uU3Vic2lkeURpc2NvdW50SW5mb0NsaWNrKClcIlxuICAgICAgICAgICAgKGRpc2NvdW50U2VsZWN0Q2hhbmdlKT1cIm9uU3Vic2lkeURpc2NvdW50U2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKGluZm9CdXR0b25LZXlkb3duKT1cIm9uU3Vic2lkeURpc2NvdW50SW5mb0J1dHRvbktleWRvd24oJGV2ZW50KVwiPjwvbmFzLXN1YnNpZHktZGlzY291bnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|